display:inline 和display:inline-block和display:block的区别

inline element:行内元素也叫作内联元素,内嵌元素,直进式元素

block element:块级元素


1.display:inline 转化成内联元素,但是不换行;

内联元素的前面和后面都不会有换行符,不可以给内联元素定宽和高,也就是说你如果同时给一个元素写display:inline;width:值;height:值;那么width和height属性就会失效。

2.display:block转换成块元素,换行;

将元素转化为块级元素,有宽和高的属性,元素前后都有一个换行符。

3.display:inline-block内联块元素,既不换行又可以使用块元素所拥有的属性,类似于块元素加了浮动效果,但低版本浏览器对这个不支持

元素对内具有块级元素的宽和高的属性,即你可以对它设定宽和高,对外却具有内联元素的无换行符特性,这个属性IE8以上才支持,对于IE6和IE7不支持这个值,但是只要他们的元素触发了haslayout属性,他们的内联元素便具有display:inline的特性了

haslayout属性:hasLayout是IE浏览器专有的一个属性,用于CSS的解析引擎。有时候在IE下一些复杂的CSS设置解析起来会出现bug,其原因可能与hasLayout没有被自动触发有关,我们通过一些技巧,手动触发hasLayout属性就可以解决Bug了。

hasLayout的触发方法有很多种,例如设置width,height值,设置position为relative等。但如果设置了width,height,或position都会在触发hasLayout的同时带来一些副作用的。早期的一些工程师推荐使用“height:1%”来触发hasLayout,那时还没有出现IE7,而height属性在IE6下其实是按照"min-height"来解析的,所以只要对IE6进行hack,"* html{height:1%}"就可以触发hasLayout,同时又不带来副作用了。后来出现的IE7仍然存在很多hasLayout的问题,但IE7已经能够正确识别height属性了,“height:1%”的方法已经不再适用了。

于是,一个更好的解决方法开始流行,它使用了一个生僻的CSS属性zoom来触发hasLayout——"zoom:1"。使用"zoom:1"可以触发hasLayout,并且不会像height等属性一样引入副作用,更妙的是,我们可以不用CSS hack了。但"zoom:1"并不是一定可以触发hasLayout的。在极少数特殊的情况下,例如非常复杂的CSS设置,特别是使用DHTML的时候,使用"zoom:1"有时候也会无效,这时,我们可能需要借助更强大的"position:relative"来帮助触发hasLayout。

总之,”zoom“是最常用,最安全,成本最少的触发hasLayout的方式,一般情况下,使用它就完全可以触发hasLayout了。如果遇到特殊情况,"zoom:1"无效的情况下,我们可以通过设置"position:relative"来触发hasLayout,尽管它会带来一点副作用   

zoom是将原来的元素放大为当前你的多少倍

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一个晴朗的初秋,我怀着极浓的兴趣,走进了大别山主峰--------天堂山。此山海拔1729·13米。虽不及华山之险...
    陌上牧笛阅读 307评论 0 2
  • 今天我要写的内容是,自己在学习中亢奋到迷茫到停顿到再学习的经历,俗话说走路不要忘了抬头看路,也就是我想要表达的意思...
    潘潘的成长之路阅读 271评论 0 1
  • 其实歇斯底里的大喊或者大哭都不及安安静静的沉默 最孤单的感觉不是没有一个人和你说话,而是很多人在身边却没话说 会渴...
    白衣良人阅读 292评论 0 0