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

Posted mi_lu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了display:inline 和display:inline-block和display:block的区别相关的知识,希望对你有一定的参考价值。

之前讲过块级元素使用display:block

           行内元素使用display:inline

那么今天我们就来区分一下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了。这也算是针对IE下疑难杂症的特殊偏方了,很多时候,触发了hasLayout就可以药到病除了。

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是将原来的元素放大为当前你的多少倍

以上是关于display:inline 和display:inline-block和display:block的区别的主要内容,如果未能解决你的问题,请参考以下文章

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

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

display:inline-flex和display:flex之间有什么区别?

夯实基础--CSS=> 标签显示模式(display:inline || blcok || inline-block)

说 element1, element2 display: inline block; 和 element1 + element2 (display: inline block;) 有啥区别? [复制

深入理解和应用display属性