一年前网上还找不到关于 inline-block 属性的文章,为了方便大家更好的理解该属性,当时总结整理了篇《display:inline-block的深入理解》

而现在对于 inline-block 属性运用的需求也越来越多,可惜依旧只有 Firefox3 beta、IE8 beta、Opera、Safari 支持 inline-block 属性(注:原来只有 Opera、Safari 支持),但 IE6、IE7 可以通过触发 hasLayout 来模拟,Firefox2 有-moz-inline-box 和 -moz-inline-stack 私有属性(这两个属性的比较引用自秦歌的《display:inline-block的应用两例》)。

在实际应用中 -moz-inline-box 会存在元素间的对齐等问题,虽然 Firefox 还有一个私有属性 -moz-box-align 来帮助解决对齐问题,但依旧难以预料问题多多,而相对来说 -moz-inline-stack 的表现更像 inline-block ,这点可以在 Firefox3 中测试出来。但 -moz-inline-stack 使用时也会有一个 bug ,如果一个 display:-moz-inline-stack; 的元素外层元素是 display:inline; 即会使 Firefox 中其包含的链接不可点,这个需要用 position:relative; 来解决。

最终我们模拟的代码如下:

display:inline-block; /*Firefox3 beta、IE8 beta、Opera、Safari 支持,IE 下触发 inline 元素的 hasLayout*/
display:-moz-inline-stack; /* Firefox 的私有属性,也可以用 -moz-inline-box */

zoom:1; /*IE 下触发 hasLayout*/
*display:inline; /*一旦IE 下触发了 hasLayout,设置 block 元素为 inline 会使 display:inline 效果与 display:inline-block 相似*/

text-indent:-9999px;
*text-indent:0;
font-size:0;
line-height:0; /* 如需隐藏文字,可用这四个属性 */
/*另外上面隐藏文字,还可以用更简化的方法:line-height:超级大值;font-size:0; */

overflow:hidden; /* 隐藏溢出的内容 */

vertical-align:middle; /* 行内垂直居中,针对 Opera 比较大的偏离 */

width:?px; /*?为任意非auto值*/
height:?px; /*?为任意非auto值*/

扩展阅读:



共有14 条评论

  1. 1. 头像 怿飞

    如果上文提供的 hasLayout 链接打不开可以通过另外的方式查阅《On having layout》:
    原文:http://www.satzansatz.de/cssd/onhavinglayout.htm
    译文:http://bbs.blueidea.com/thread-2636904-1-1.html

  2. 2. 头像 MarVell

    0.0
    你吓我…今天一更新,29个源…

    吓我一蹦.我当你这么能写.一天写29篇文章- -!

  3. 3. 头像 怿飞

    呵呵,今天早上更改了下feed输出的文章数量。

  4. 4. 头像 MarVell

    CSS裸奔日到了- -!

    看到你在FF中裸奔了…IE中怎么没?

  5. 5. 头像 MarVell

    呃…是我看错了好像..我把样式禁了- -..
    那条删了吧..

    另外.把日期改一下吧..最好用24小时制的.
    我半夜12点32给你的留言..上面显示是 上午 12:32- -!

  6. 6. 头像 mouse

    FF使用display:-moz-inline-stack;后水平text-align会失效!如何解决呢?

  7. 7. 头像 tommyfan

    op某个版本下此样式无效.我通过设置content值为空来解决它.
    display:block;height:20px;overflow:hidden;font-size:0;line-height:20px;content:”";

  8. 8. 头像 tommyfan

    mouse 2008年4月11日 下午 12:43 ₪
    FF使用display:-moz-inline-stack;后水平text-align会失效!如何解决呢?

    通过moz私有属性可以设置.
    -moz-box-align:center;-moz-box-pack:center;
    详情请看:http://developer.mozilla.org/en/docs/CSS_Reference:Mozilla_Extensions

  9. 9. 头像 怿飞

    谢谢tommyfan的提示。

  10. 10. 头像 口碑大米

    珍惜生命,远离inline-block

  11. 11. 头像 lizux

    “text-indent:-9999px;
    *text-indent:0;”
    这两句好像不是必须的,font和overflow配合就可以隐藏文字了

  12. 12. 头像 蜗牛

    FF使用display:-moz-inline-stack;后水平text-align会失效!如何解决呢?

    我测试的结果怎么跟你正好相反?没有display:-moz-inline-stack,text-align反倒失效了…..
    还有就是在火狐和safari两个inline-block元素(div)之间有大概7px的间隔,ie6和7下就没有,这是为什么呢??有什么解决办法呢?

  13. 13. 十四像素 » float-left的对象如何居中

    [...] 当然,这样的结构是不正确的,但是我们可以模拟一下(模拟方法的详情请见怿飞的文章:模拟兼容性的 inline-block 属性) [...]

  14. 14. » display:inline-block的几个应用及bug- WEB前端开发- 专注前端开发,关注用户体验

    [...] 怿飞的display:inline-block的深入理解和模拟兼容性的 inline-block 属性; [...]

发表评论

(必填)

(必填,会为您保密)

评论仅支持“a、abbr、strong、em、blockquote、code”几个简单的标签