本来想写一篇关于 IE bugs 的总结的,但是发现 IE 的 bugs 一般都存在IE5,IE6,IE7上,这都是很古老的浏览器。而且这些 bugs 测试起来相当麻烦,IEtester和 IE10 自带的文档模式选择都有一些偏差,要在虚拟机上安装系统测试才是最为准确的,最最重要的原因是现在的网页开发 IE5 基本是不考虑了,IE6,IE7 也快完全退出历史舞台了,一般网站会通过检测浏览器版本并提示用户升级浏览器,所以这些 bugs 在现在的开发中遇到的几率是很低的。

        而之所以要总结是因为偶尔在学习过程中,一些博客或书中会涉及到这些 bugs,甚至在一些公司的笔试中喜欢挑出这些来考考你对 CSS 的了解是否够深入。所以我还是本着前人栽树后人乘凉的原则去网上找一些好的资源学习好了。寻寻觅觅终于在W3C Plus上找到站长大漠的浏览器兼容之旅,总共四篇,总结得比较系统,可读性比较强,就以此为主要的资源学习吧。链接如下:
 
目录结构
十种经典的Bug产生的原因
一、浮动元素的双倍Margin的Bug
二、克服Box Model的Bug
三、设置元素的最小高度和最小宽度
四、块元素水平居中
五、列表li的楼梯Bug
六、li空白间距
七、IE6下无法设置元素的微高
八、overflow:auto与position:relative的碰撞
九、浮动层错位
十、IE6下躲猫猫
 
目录结构
IE的Bug处理
一、IE6克隆文本的Bug
二、IE下图片缩放Bu
三、IE6下PNG图片透明Bug
四、<IFrame>透明背景Bug
五、禁用IE浏览器默认的垂直滚动条
六、IE6下:hover伪类Bug
七、修复min-width/max-width和max-heigt/min-height的Bug
八、修复position:relative的Bug
九、修复margin的负值
十、修复overflow的问题
 
不过,文章中有的地方不是很准确,有些细节描述也不够清晰,所以下面做一些订正和补充:

1)第一站
IE10和IE11已经不支持条件注释了,具体可以参考IE的官方说明:不再支持条件注释,除了条件注释,IE很多传统支持的功能的更改:传统功能支持更改
2)第三站 
IE6及更低版本不认识 min-height,但是 height 属性在IE6及以下版本是解析成 min-height 的效果,故设置元素的最小高度时可以为IE6-专门hack,即写成:
 min-height:100px;
_height:100px;/*兼容IE6-*/
 
3)bugs 的补充
 
1、IE6,IE7:ul 元素有了 Layout 属性后,项目符号就会不见。
 
-------------------------------------------------------举个栗子-------------------------------------------------------
HTML:
 <ul>
<li>无序列表</li>
<li>无序列表</li>
<li>无序列表</li>
</ul>
CSS:
 ul{
zoom:;
}
IE6,IE7 表现如下:
正常表现应该如下:
解决方法
为ul添加 padding-left:1em;
 
 ul{
zoom:;
padding-left: 1em;
}
则表现正常。
-------------------------------------------------------吃完栗子-------------------------------------------------------
 
2、IE6,IE7:有序列表中,任何具有 Layout 特性的列表项元素都会拥有独立的计数器。
 
-------------------------------------------------------举个栗子-------------------------------------------------------
HTML:
 <ol>
<li>有序列表</li>
<li>有序列表</li>
<li style="zoom:1;">有序列表</li>
<li>有序列表</li>
<li>有序列表</li>
</ol>
IE6,IE7 表现如下:
解决方法
自己定义序号,不使用有序列表 ol 标签。
-------------------------------------------------------吃完栗子-------------------------------------------------------
 
3、IE6,IE7:如果一个列表项拥有 Layout 属性,当该 Layout 列表项元素跨行显示时,项目符号会显示为底部对齐,而不是按照一般的思维习惯顶部对齐。
 
-------------------------------------------------------举个栗子-------------------------------------------------------
HTML:
 <ol>
<li>有序列表</li>
<li>有序列表</li>
<li style="zoom:1;">有序列表<br>有序列表<br>有序列表</li>
<li>有序列表</li>
<li>有序列表</li>
</ol>
IE6,IE7 表现如下:
 
这里也同时出现了重新计数的bug。
解决方法
同上,自己定义序号,不使用有序列表 ol 标签。
-------------------------------------------------------吃完栗子-------------------------------------------------------
 
4、再之,在IE6中,当列表项元素 li 中包含有块状显示的超链接元素时,列表元素之间的空格将不会被忽略,而会额外增加一行。
 
-------------------------------------------------------举个栗子-------------------------------------------------------
HTML:
 <ol>
<li><a href="#">有序列表中的链接</a></li>
<li><a href="#">有序列表中的链接</a></li>
<li><a style="display:block;" href="#">有序列表中的链接</a></li>
<li><a href="#">有序列表中的链接</a></li>
</ol>
IE6 中的表现如下:
IE7 表现正常:
解决方法
只需要为定义了 display:block 的 a 标签元素触发 hasLayout 属性:
 
 <ol>
<li><a href="#">有序列表中的链接</a></li>
<li><a href="#">有序列表中的链接</a></li>
<li><a style="display:block;zoom:1;" href="#">有序列表中的链接</a></li>
<li><a href="#">有序列表中的链接</a></li>
</ol>
-------------------------------------------------------吃完栗子-------------------------------------------------------
 
5、IE6:当设置了 position:relative 的包含块触发了 hasLayout 属性后,IE 浏览器才能够正常地进行定位。
 
-------------------------------------------------------举个栗子-------------------------------------------------------
HTML:
 <span class="wrap">
wrap
<div class="box">
</div>
</span>
CSS:
 .wrap {
margin: 100px;
position: relative;
border: 1px solid #aaa;
}
.box {
position: absolute;
left: 100px;
top: 100px;
width: 100px;
height: 100px;
background: #ccc;
}
IE6 表现如下:
 
正常表现如下:
 
 
解决方法,说实话遇到这种情况的机会实在不多,因为需要一个行内元素包围一个块级元素,从结构上就是不合理的,但是为了说明清楚 IE6 的bugs,这里还是说一下解决的方法,就是触发父元素的 hasLayout 属性,即添加 _zoom:1,兼容 IE6:
 .wrap {
margin: 100px;
position: relative;
border: 1px solid #aaa;
_zoom:;
}
但其实这种 hack 并不推荐,IE6 的表现并不和标准浏览器一致,行内元素表现出了块级元素的特点,上下的 margin 值变得有效了:
 
-------------------------------------------------------吃完栗子-------------------------------------------------------
 
6、IE6 :hover 的bug
直接上例子
-------------------------------------------------------举个栗子-------------------------------------------------------
HTML:
 <a href="#">菜单项目<img src="i.png"></a>
CSS:
 a{
text-decoration: none;
}
a img{
display: none;
border:none;
}
a:hover img{
display: inline;
}
标准浏览器下,当鼠标在链接上时,图片会显现,但是IE6没有效果:
原因是 a:hover 不具有 hasLayout 特性,故解决的方法也很容易,即激活 a:hover 的 hasLayout 属性:
 a:hover{
_zoom:;
}
-------------------------------------------------------吃完栗子-------------------------------------------------------
 
6、IE6 躲猫猫bug
大漠的博文中没有对这个 bug 的具体例子,这里举个具体例子帮助理解。
 
-------------------------------------------------------举个栗子-------------------------------------------------------
HTML:
 <div class="wrap">
<div class="float">浮动超链接</div>
<div><a href="#">超链接</a></div>
<div><a href="#">超链接</a></div>
<div><a href="#">超链接</a></div>
<div><a href="#">超链接</a></div>
<div class="clearfix"></div>
</div>
CSS(其中跟/**/的表示触发这个 bugs 的必要属性):
 .wrap {
background: #aaa;/**/
border: 1px solid #666;/**/
}
.wrap a:hover {
background: blue;/**/
}
.float {
float: left;/**/
border: 1px solid green;
width: 120px;
height: 150px;/**/
}
.clearfix {
clear: both;/**/
}
IE6表现如下:

但我在 IE7 中却发现右边没浮动的超链接不见了,鼠标放上去会变成 pointer 样式,但是很难点击,这里记录一下,估计也是 bugs:
解决方法
以上必须的属性只要有一个不存在就不会触发这个 bugs,也可以通过触发 .wrap 或 .floatfix 的 hasLayout 属性来规避,即添加属性 _zoom:1;
-------------------------------------------------------吃完栗子-------------------------------------------------------
 
7、IE6 多余字符 bug
在浮动元素之间增加 HTML 注释时就会出现这个问题,上例子。
 
-------------------------------------------------------举个栗子-------------------------------------------------------
HTML:
 <div class="wrap">
<div>我是第一个div</div>
<!-- 注释 -->
<div>下面会出现多余的字符</div>
</div>
CSS:
 .wrap div{
float: left;
width: 100%;
}
IE6表现如下:
解决方法
去掉注释,或者不设置 width:100%;
-------------------------------------------------------吃完栗子-------------------------------------------------------
 
以上的例子有些是网上搜集,有些书中的例子,以后可能会再补充,也欢迎大家补充。在这里也感谢大漠站长的总结和分享。
 
水平有限,错误欢迎指正。原创博文,转载请注明出处。

IE6~IE7 bugs的更多相关文章

  1. CSS 在IE6, IE7 和IE8中的差别////////////////z

    CSS 在IE6, IE7 和IE8中的差别 关于浏览器的最离奇的统计结果之一就是Internet Explorer 版本6,7和8共存.截至本文,Internet Explorer各个版本总共占据了 ...

  2. IE6&IE7 bug

    IE6 Bugs 1 .不支持用样式设置 <abbr> 元素 2 .不支持以连字符和下划线开头的 class 和 ID 名 3 . <select> 元素总是出现在堆叠最上面, ...

  3. ie6 ie7 ie8 ie9兼容问题终极解决方案

    放下包袱,解决低版本兼容问题   这是一个老生常谈的问题,自然解决这个问题的方案也比较多,下面整理了一些解决方法: 1.强制使用高版本渲染模式. 强制使用Edge模式来解析网页代码 <meta ...

  4. 完美解决IE(IE6/IE7/IE8)不兼容HTML5标签的方法

    完美解决IE(IE6/IE7/IE8)不兼容HTML5标签的方法   HTML5的语义化标签以及属性,可以让开发者非常方便地实现清晰的web页面布局,加上CSS3的效果渲染,快速建立丰富灵活的web页 ...

  5. JS代码判断IE6,IE7,IE8,IE9!

    JS代码判断IE6,IE7,IE8,IE9!2011年12月15日 星期四 14:01做网页有时候会用到JS检测IE的版本,下面是检测Microsoft Internet Explorer版本的三种代 ...

  6. 一行代码解决各种IE兼容问题,IE6,IE7,IE8,IE9,IE10

    行代码解决各种IE兼容问题,IE6,IE7,IE8,IE9,IE10 2012-04-25 16:29:04| 分类: 学习 |字号 订阅 在网站开发中不免因为各种兼容问题苦恼,针对兼容问题,其实IE ...

  7. ie6,ie7,ie8 css bug兼容解决方法

    IE浏览器以不支持大量的css 属性出名,同时也因其支持的css属性中存在大量bug. 这里收集了好多的bug以及其解决的办法,都在这个文章里面记录下来了!希望以后解决类似问题的时候能够快速解决,也希 ...

  8. 解决IE6/IE7/IE8不支持before,after问题

    对从事web开发的朋友来讲,低版本的IE永远是一个痛点,不支持最新技术(如css3,html5). 在现在web开发中使用图标字体已经很广泛,如Font Awesome,Bootstrap等,字体图片 ...

  9. 让IE6/IE7/IE8浏览器支持CSS3属性

    让IE6/IE7/IE8浏览器支持CSS3属性 一.下载 您可以狠狠地点击这里:ie-css3.htc,这个玩意儿是让IE浏览器支持CSS3表现的关键东东. 二.上面的是什么东西 首先说说.htc文件 ...

随机推荐

  1. mof格式的文件怎么打开?用什么工具?

    托管对象格式 (MOF) 文件是创建和注册提供程序.事件类别和事件的简便方法.在 MOF 文件中创建类实例和类定义后,可以对该文件进行编译.有关更多信息,请参见编译托管对象格式 (MOF) 文件.编译 ...

  2. windows phone UI吐槽---跑偏了就再也跑不回来了

    首先wp的ui灵感来自瑞士的平面设计:      先上两张图,嗯,确实不错,简洁明了,强调的是信息本身,而不是冗余的界面元素,传达准确. 在现实生活中这种突出信息的设计语言也不时见到:    可以总结 ...

  3. Bug的类型

    美国计算机科学家.图灵奖获得者詹姆斯·尼古拉·格雷(Jim Gray),在他的著名的论文“Why do computers stop and what can be done about it?”中首 ...

  4. 在windows64位上安装Python3.0

    1.下载安装包 下载地址:https://www.python.org/downloads/ 如果要下载帮助文件:Download Windows help file 如果要下载基于网页的安装程序: ...

  5. [问题解决]NotImplementedError 错误原因:子类没有实现父类要求一定要实现的接口

    NotImplementedError: 子类没有实现父类要求一定要实现的接口. 在面向对象编程中,父类中可以预留一个接口不实现,要求在子类中实现.如果一定要子类中实现该方法,可以使用raise No ...

  6. Spring整合hibernate -声明事务管理

     目录 1 sessionFactory 注入HibernateTransactionManager 2 XML配置的配置 3 添加annotation-driven 4 引入JAR包 5在servi ...

  7. 【转】 [Unity3D]手机3D游戏开发:场景切换与数据存储(PlayerPrefs 类的介绍与使用)

    http://blog.csdn.net/pleasecallmewhy/article/details/8543181 在Unity中的数据存储和iOS中字典的存储基本相同,是通过关键字实现数据存储 ...

  8. php+mysqli预处理技术实现添加、修改及删除多条数据的方法

    本文实例讲述了php+mysqli预处理技术实现添加.修改及删除多条数据的方法.分享给大家供大家参考.具体分析如下: 首先来说说为什么要有预处理(预编译)技术?举个例子:假设要向数据库添加100个用户 ...

  9. hdu6136[模拟+优先队列] 2017多校8

    有点麻烦.. /*hdu6136[模拟+优先队列] 2017多校8*/ #include <bits/stdc++.h> using namespace std; typedef long ...

  10. httpClient get方式抓取数据

    /*     * 爬取网页信息     */    private static String pickData(String url) {        CloseableHttpClient ht ...