• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com专业计算机教程网站
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • html/xhtml
  • html5
  • CSS
  • XML/XSLT
  • Dreamweaver教程
  • Frontpage教程
  • 心得技巧
  • bootstrap
  • vue
  • AngularJS
  • HBuilder教程
  • css3
  • 浏览器兼容
  • div/css
  • 网页编辑器
  • axure
您的位置:首页 > 网页设计 >浏览器兼容 > 跨浏览器的inline-block声明上承诺了很多提供的却很少

跨浏览器的inline-block声明上承诺了很多提供的却很少

作者:佚名 字体:[增加 减小] 来源:互联网 时间:2017-06-02

本文主要包含投标声明及承诺,声明与承诺的区别,工作简历及声明承诺书,学术诚信声明承诺书,承诺声明书等相关知识,佚名 希望在学习及工作中可以帮助到您

啊,inline-block,挺难琢磨并且迷人的声明上承诺了很多,其实提供了很少。很多次我拿到类似这样的 PSD 文件:

就哭了。

一般说来,这种类型的布局是小菜一桩。固定宽度,固定高度,向左浮动就解决了。但是,这个设计中内容的多少是可变的,这就意味着如果这些块中的一些内容比其他的多,就会破坏这个布局。

因为第一个展示项比其他项高,第五个项目就相对第一个浮动,而不是位于它下面了。基本上我们想要一个弹性表格的布局,但是适当的,语义标记。

我们以一个无序列表开始这个简单的页面,并把 display 设置为 inline-block:

显然,在垂直排列上有些错误。嗯,也不算错误吧,这是正确的表现,只不过不是我们想要的效果。

这是因为每个 <li> 元素的基线是和其父元素 <ul> 的基线对齐排列的。你要问啥是基线?一图顶千言那:

基线就是横贯上面文本的黑线。尽量说的简单点。inline 或者 inline-block 元素默认的 vertical-align 值 就是基线。也就是说元素基线要和她父元素的基线对齐。下面有一个示例:

就如所看到的,每个基线都是和文本 ‘This is the baseline.’ 的基线对齐的。文本虽然不在 <li> 内部,但是文本节点的父元素 <ul> 就指出了父元素的基线所在。

总之,修正方法是很简单的: vertical-align: top,这样就能得到一个看起来不错阿网格:

但是在 Firefox 2, IE 6 和 7 中,依然无效:

从 Firefox 2 入手。

Firefox 2 不支持 inline-block,但是它支持 Mozilla 特有的显示属性 ‘-moz-inline-stack’,这个属性和 inline-block 比较像。把它加在 display: inline-block 之前,FF2 会忽略 inline-block 而保留 -moz-inline-stack,因为它不认识 inline-block。支持 inline-block 的浏览器会使用 inline-block 而忽略之前的显示属性。

坦白地说,我不知道什么导致了这个 bug。但是有个快速的修正方法。把 <li> 中所有的东西用 <div> 包含起来。

2009.04.29更新:经过多方查证,嵌套div的方法可以解释为:FF对于所有的属性为stack(当然保持-moz-inline-stack)的元素,它的第一级子元素会继承该元素的宽度和高度,但是子元素的子元素就不会再继承其宽和高了。不过,其实,FF2在某种程度上可以无视了……——by 神飞

现在,转到 IE 7 上来。IE 7 也不支持 inline-block,但是我们可以欺骗它以使 <li> 好像是 inline-block 的。怎么做呢?hasLayout,IE 的一个带来乐趣的神奇属性。你无法在一个元素上用 hasLayout: true; 显示地设置 hasLayout,或通过其他类似的简单方法,但是可以用其他类似 zoom:1 的声明来激发它。

技术上来说,hasLayout 意味着,一个 hasLayout 设为 true 的元素负责渲染它自己及其子元素(把它和 min-height 和 width 联合起来,就得到了和 display:block 非常相似的效果)。这有点像神奇的精灵粉,把它洒在渲染问题上,问题就消失了。

当我们给 <li> 加上 zoom:1 和 *display:inline(用于 IE6 和 IE7 的星号 hack) 之后,在 IE7 中它们就可以像 inline-block 一样显示了:

哇!差不多了,只剩 IE 6 了:

IE6 不支持 min-height,但是多亏它对 height 属性的不正确处理,我们可以用它来代替。把 _height(IE6 下划线 hack) 设为 250px 使所有的 <li> 元素高度为 250px,并且如果它们的内容大于 250px,他们会扩大来适应。其他所有的浏览器会忽略 _height。

现在为止,对所有的浏览器都有效了,这是最终的 CSS 和 HTML:

</div>

您可能想查找下面的文章:

  • 跨浏览器的inline-block声明上承诺了很多提供的却很少

相关文章

  • 2017-06-02史上最全的CSS hack方式一览(兼容多浏览器)
  • 2017-06-02html页面高度不固定在不同浏览器下的兼容性设置
  • 2017-06-02玩转IE9
  • 2017-06-02IE对标准的支持不够好导致CSS渲染跟其它浏览器有什么不同
  • 2017-06-02IE6/IE7/IE8/Firefox的CSS各种兼容margin问题解决办法
  • 2017-06-02PNG8格式图片是不支持半透明等问题深入分析
  • 2017-06-02如何让div+css兼容ie6 ie7 ie8 ie9和FireFox Chrome等浏览器
  • 2017-06-02css在不同浏览器中的唯一标识以height属性为例
  • 2017-06-02CSS针对IE6实现网页图片底部留出空白的方法
  • 2017-06-02IE6中a标签同时使用inline-block与text-indent时出现的BUG

文章分类

  • html/xhtml
  • html5
  • CSS
  • XML/XSLT
  • Dreamweaver教程
  • Frontpage教程
  • 心得技巧
  • bootstrap
  • vue
  • AngularJS
  • HBuilder教程
  • css3
  • 浏览器兼容
  • div/css
  • 网页编辑器
  • axure

最近更新的内容

    • 解决IE6,IE7不能隐藏(overflow:hidden)绝对定位溢出的内容
    • 浅谈firefox 的event事件处理
    • input 按钮背景在IE6 IE7中不显示的解决方法
    • CSS表达式(expression)解决IE6 position:fixed无效问题
    • CSS hacker使用小结(兼容IE6、7、8)
    • 目前比较全面的浏览器CSS BUG兼容汇总
    • IE6 position:fixed bug (固定窗口方法)
    • CSS hack 针对IE6,IE7,firefox显示不同效果
    • SELECT在浏览器中相关Bug整理
    • 浏览器兼容之旅第三站:IE常见Bug总结及修复方法—part1

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有