简明现代魔法 -> CSS层叠样式表 -> CSS 常见问题的解决

CSS 常见问题的解决

2010-03-10

当你在一个浏览器里面做好,在其他浏览器里面却完全不是那么回事情。

很多时候,我们就只是去修补下,或者利用各个浏览器对代码支持的不一致,进行针对各个浏览器进行不同的定义。

其实浏览器的不兼容,我们往往是各个浏览器对于一些标准的定义不一致导致的,因此,我们可以进行一些初始化,很多问题都很轻松解决。

  1. 文字本身的大小不兼容。同样是 font-size:14px 的宋体文字,在不同浏览器下占的空间是不一样的,ie 下实际占高 16px,下留白 3px,而 ff 下实际占高 17px,上留白 1px,下留白 3px,opera 下就更不一样了。解决方案:给文字设定 line-height。确保所有文字都有默认的 line-height 值。这点很重要,在高度上我们不能容忍 1px 的差异。
  2. ff 下容器高度限定,即容器定义了 height 之后,容器边框的外形就确定了,不会被内容撑大,而 ie下是会被内容撑大,高度限定失效。所以不要轻易给容器定义 height。
  3. 横向上的撑破容器问题。如果 float 容器未定义宽度,ff 下内容会尽可能撑开容器宽度,ie 下则会优先考虑内容折行。故内容可能撑破的浮动容器需要定义 width。
  4. 小实验:有兴趣大家可以看看这段实验。在不同浏览器下分别测试以下各项代码。

    <div style="border:1px solid red;height:10px"></div>
    <div style="border:1px solid red;width:10px"></div>
    <div style="border:1px solid red;float:left"></div>
    <div style="border:1px solid red;overflow:hidden"></div>
    

    上面的代码在不同浏览器中是不一样的,实验起源于对小 height 值 div 的运用,<div style="height:10px;overflow:hidden"></div>,小 height 值要配合overflow:hidden 一起使用。实验好玩而已,想说明的是,浏览器对容器的边界解释是大不相同的,容器内容的影响结果各不相同。

  5. 最被痛恨的,double-margin bug。ie6 下给浮动容器定义 margin-left 或者 margin-right 实际效果是数值的2倍。解决方案,给浮动容器定义 display:inline。
  6. mirror margin bug,当外层元素内有 float 元素时,外层元素如定义 margin-top:14px,将自动生成 margin-bottom:14px。 padding 也会出现类似问题,都是 ie6 下的特产,该类bug 出现的情况较为复杂,远不只这一种出现条件,还没系统整理。解决方案:外层元素设定 border 或设定 float。
  7. 引申:ff 和 ie 下对容器的 margin-bottom,padding-bottom 的解释有时不一致,似乎与之相关。

  8. 吞吃现象。还是 ie6,上下两个 div,上面的 div 设置背景,却发现下面没有设置背景的 div 也有了背景,这就是吞吃现象。对应上面的背景吞吃现象,还有滚动下边框缺失的现象。解决方案:使用 zoom:1。这个 zoom 好象是专门为解决 ie6 bug 而生的。
  9. 注释也能产生 bug~~~“多出来的一只猪。”这是前人总结这个 bug 使用的文案,ie6 的这个 bug 下,大家会在页面看到猪字出现两遍,重复的内容量因注释的多少而变。解决方案:用“<!–[if !IE]> picRotate start <![endif]–>”方法写注释。
  10. img 下的留白,大家看这段代码有啥问题:
  11. <div>
    	<img src="" mce_src="" />
    </div>
    

    把 div 的 border 打开,你发现图片底部不是紧贴着容器底部的,是 img 后面的空白字符造成,要消除必须这样写。

    <div>
      <img src="" mce_src="" /></div>
    

    后面两个标签要紧挨着。ie7 下这个 bug 依然存在。解决方案:给 img 设定 display:block。

  12. 失去line-height。<div style="line-height:20px"><img />文字</div>,很遗憾,在 ie6 下单行文字 line-height 效果消失了。原因是<img />这个 inline-block 元素和inline 元素写在一起了。解决方案:让 img 和文字都 float 起来。
  13. 引申:大家知道 img 的 align 有 text-top,middle,absmiddle 啊什么的,你可以尝试去调整 img 和文字让他们在 ie 和 ff 下能一致,你会发现怎么调都不会让你满意。索性让 img 和文字都 float 起来,用 margin 调整。

  14. clear 层应该单独使用。也许你为了节省代码把 clear 属性直接放到下面的一个内容层,这样有问题,不仅仅是 ff 和 op下失去 margin 效果,ie 下某些 margin 值也会失效。
  15. <div style="background:red;float:left;">dd</div>
    <div style="clear:both;margin-top:18px;background:green">ff</div>
    
  16. ie 下 overflow:hidden 对其下的绝对层 position:absolute 或者相对层 position:relative 无效。解决方案:给 overflow:hidden 加 position:relative 或者 position: absolute。另,ie6 支持 overflow-x 或者 overflow-y 的特性,ie7、ff 不支持。
  17. ie6 下严重的 bug,float 元素如没定义宽度,内部如有 div 定义了 height 或 zoom:1,这个 div 就会占满一整行,即使你给了宽度。float 元素如果作为布局用或复杂的容器,都要给个宽度的。
  18. ie6 下的 bug,绝对定位的 div 下包含相对定位的 div,如果给内层相对定位的 div 高度 height 具体值,内层相对层将具有 100% 的 width 值,外层绝对层将被撑大。解决方案给内层相对层 float 属性。
  19. width:100% 这个东西在 ie 里用很方便,会向上逐层搜索 width 值,忽视浮动层的影响,ff 下搜索至浮动层结束,如此,只能给中间的所有浮动层加 width:100% 才行,累啊。opera 这点倒学乖了跟了 ie。
随机文章推荐
网站分类


注:如需转载本文,请注明出处(原文链接),谢谢。更多精彩内容,请进入简明现代魔法首页。

进入新博客
喜欢本文,就分享它吧
给我留言
您的名字:
您的邮件:
您的网站:


 

copyright © 2009 简明现代魔法    学习、分享、进步

power by Gonn 感谢所有关心和支持本站的朋友们