display:inline-block兼容的问题,网上的答案最多的就是:html
display:inline-block;浏览器
*display:inline;htm
*zoom:1;blog
知其然知其因此然,那么为何要这么作。在IE浏览器中,元素有一个haslayout属性(haslayout只能被触发,不能修改成IE浏览器规定之外的其余值),属性值能够为true或false。当一个元素的 haslayout属性值为true时,这个元素就有一个layout,当一个元素拥有一个layout时,它就能对本身和子孙元素进行尺寸计算和定位,这就意味着这个元素须要花更多的代价来维护自身和子孙元素。当一个元素“拥有layout”或“获得layout”,或者说一个元素“has layout”的时候,那么它的IE浏览器属性 haslayout 被设为了true 。一个“layout元素”能够是一个默认就拥有haslayout属性的元素或者是一个经过设置某些CSS属性获得haslayout 的元素。若是某个HTML元素拥有haslayout属性,那么这个元素的 haslayout的值必定为true。it
如今知道了在IE浏览器中元素只要触发了元素的haslayout属性,它就能对本身和子孙元素进行尺寸计算和定位。那么怎么才能触发haslayout属性呢?(请看http://blog.sina.com.cn/s/blog_51048da701018o29.html)(如下内容引用自http://blog.sina.com.cn/s/blog_51048da701018o29.html)io
display
启动haslayout的值:inline-block
取消hasLayout的值:其余值
--------------------------------------
width/height
启动hasLayout的值:除了auto之外的值
取消hasLayout的值:auto
( 对 IE6 及更早版原本说很经常使用,该方法被称为霍莉破解(Holly hack),即设定这个元素的高度为 1% (height:1%;)。可是要注意,当这个元素的 overflow 属性被设置为 visible 时,这个方法就失效了。)
---------------------------------------
position
启动hasLayout的值:absolute
取消hasLayout的值:static
----------------------------------------
float
启动hasLayout的值:left或right
取消hasLayout的值:none
---------------------------------------
zoom
启动hasLayout的值:有值
取消hasLayout的值:narmal或者空值
(又一个ie私有属性,不兼容标准。)
ie7还有一些额外的属性能够触发该属性(不彻底列表):
min-height: (任何值)
max-height: (任何值除了none)
min-width: (任何值)
max-width: (任何值除了none)
overflow: (任何值除了visible)
overflow-x: (任何值除了visible)
overflow-y: (任何值除了visible)
position: fixed