display:inline-block 另解
inline-block是个好东西,谁用都知道。
但兼容是个问题(仅Opera、Safari、chrome、firefox3.x能完美呈现)
IE下可以通过触发hasLayout来模拟inline-block
纠正我一直以来的认知错误“ie不支持inline-block”:
IE5.5就已经支持inline-block了,可参考display Property的Remarks部分;但IE7及以下版本下给block元素设定inline-block需要使用*display:inline;*zoom:1;来修正。
麻烦的是firefox2.x
虽然有-moz-inline-block和-moz-inline-stack来模拟,但都或多或少有些问题
firefox2.x中使用-moz-inline-stack使用可能遇到的问题:(垂直居中)

可以使用-moz-box-align -moz-box-pack这2个firefox私类来稍作修正,但始终无法完美模拟。
在一次偶然中,我发现firefox还提供有另一个私有属性display:-moz-box;,它会根据-moz-box-orient的值来水平或垂直显示其子元素。
因此给-moz-inline-block元素的父级定义display:-moz-box;就可完美模拟inline-block了!(-moz-box-orient默认值为水平显示)
但因为-moz-box的定义,这个方法不适合有其他类型子元素的容器使用。
主要样式:
.link-ib,.link-ib span { display:inline-block; height:40px; line-height:40px; background:#FFCB06 url(btn.png) no-repeat; *display:inline; /** 修正ie 无法给block元素设定inline-block **/ *zoom:1; /** 触发ie中inline元素的hasLayout **/ } .link-ib {display:-moz-box;} /** for firefox2.x **/ .link-ib span {display:-moz-inline-block;} /** for firefox2.x **/ .link-ib { padding-left:20px; color:#654005; font-size:16px; text-decoration:none; background-position:0 0; } .link-ib span { cursor:pointer; /** 修正IE **/ padding-right:20px; background-position:100% 0; } .link-ib:hover { color:#000; background-position:0 -40px; } .link-ib:hover span { background-position:100% -40px; }


7 条留言
顶!非常想知道你是怎么发现这个属性的
[回复]
当时是十万火急,我放弃了使用-moz-box-pack,因为bug太多;但-moz-inline-block却又像极了block,于是我想给a.link-ib设置一个属性来inline,于是疯狂的尝试moz私类,而且本命年似乎运气特别好,酱紫- -’
[回复]
moz私类可以在Mozilla CSS Extensions查看
[回复]
你好。昨天还用到了这个属性,正为兼容的问题发愁,谢谢分享!
另外,秋寒博客想和贵博建立友情链接,贵博的链接我已经加上去了。请问贵博建立友情链接有何要求?
同时我在留言的时候发现一个问题,我用IE6,留言的输入框右边似乎被什么东西给档住了,我输入的留言如果不
自己按回车,就看不到了。
我的环境:IE6 SP2, WIN 2003
[回复]
我用谷歌浏览器看了下,是好的。
可能对IE6不兼容吧。
对了,我的分辨率是:1024*768
[回复]
连接做好了
博客的兼容懒得去管了,有时间我再看,还没用ie看过自己的blog – -’
thx
[回复]