本来想写一篇关于 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. 12,scrapy框架之post请求

    今日概要 递归爬取解析多页页面数据 scrapy的post请求发送 1.递归爬取解析多页页面数据 - 需求:将糗事百科所有页码的作者和段子内容数据进行爬取切持久化存储 - 需求分析:每一个页面对应一个 ...

  2. Redis数据结构以及Strings型操作

    Redis数据结构图: Strings型   <String key,String value>: keys * 查看所有key get 获取key的value值 append 向key对 ...

  3. FreeMarker的基础语法使用 && 心得和技巧

    FreeMarker语言 FreeMarker语言概述 FreeMarker是一个模板引擎,一个基于模板生成文本输出的通用工具,使用纯Java编写. FreeMarker被设计用来生成HTML Web ...

  4. net user

    net user 编辑 Net User命令是一个DOS命令,必须在Windows nt以上系统的MS-DOS模式下运行,所以首先要进入MS-DOS模式:选择“开始”菜单的“附件”选项的子选项“命令提 ...

  5. Sql获取数据表字段说明

    SELECT Sysobjects.name AS TABLE_NAME , syscolumns.Id , syscolumns.name AS COLUMN_NAME , systypes.nam ...

  6. UNIX 系统中 wc 程序的主要部分

    以下代码为 UNIX 系统中 wc 程序的骨干部分 #include <stdio.h> #define IN 1 #define OUT 0 int main(int argc, cha ...

  7. 最简单的RSA及其几个网站和工具

    最简单的形式 给你公钥和一个密文. flag.enc就是密文,我们用记事本是看不出什么的,其实也不用看,因为后边的解密是直接用脚本读取文件的,只需要知道这是密文. pub.pem就是公钥,用记事本打开 ...

  8. Shell脚本直接执行sql语句和不显示列名

    在shell脚本编程的时候,可以通过在mysql连接命令添加-N和-e参数实现查询结果不显示列名和直接执行sql语句操作 demo $(mysql -h ${HOST} -u ${USER} -p${ ...

  9. vue tradingView(二)

    tradingView 一些配置问题 tradingView 一些配置问题 javascript Demo_Hu 4月17日提问 · 4月17日更新 9 关注 1 收藏,993 浏览 问题对人有帮助, ...

  10. maven学习(九)——maven中的坐标、依赖以及仓库

    一.Maven坐标 1.1.什么是坐标? 在平面几何中坐标(x,y)可以标识平面中唯一的一点. 1.2.Maven坐标主要组成 groupId:组织标识(包名) artifactId:项目名称 ver ...