本来想写一篇关于 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. Android百度地图开发 百度地图得到当前位置

    1.申请key 2.复制jar,以及.so .注意要Libs目录右键build path -> use as source folder(这是一个坑) 3. AndroidMainFast.xm ...

  2. xposed的基本使用

    一.原理 Android运行的核心是zygote进程,所有app的进程都是通过zygote fork出来的.通过替换system/bin/下面的app_process等文件,相当于替换了zygote进 ...

  3. requireJS入门学习

    前言 最近网上.群里各种随便看,随便学.暑期实习还没找到,昨天开题过了,好好学习吧.最近一直看到前端的ADM,CMD规范,然后网上各种找资料看,看了好几个牛人的博客,写的很好,然后自我感觉了解了点,介 ...

  4. 【Best Time to Buy and Sell Stock】cpp

    题目: Say you have an array for which the ith element is the price of a given stock on day i. If you w ...

  5. leetcode 【 Best Time to Buy and Sell Stock III 】python 实现

    题目: Say you have an array for which the ith element is the price of a given stock on day i. Design a ...

  6. PHP 删除 url 中的 query string

    function removeQueryStringFromUrl($url) { if (substr($url,0,4) =="http") { $urlPartsArray ...

  7. sqlserver 取时间段重复或者不重复的数据

    declare @str datetime, @end datetime select @str='2013-04-05',@end='2013-04-10'select * from arp_hbs ...

  8. python技巧:拆分多层嵌套列表

    方法一: >>> import itertools >>> a = [[1, 2], [3, 4], [5, 6]] >>> list(itert ...

  9. idea使用maven逆向mybitis的文件

    引用自 http://blog.csdn.net/for_my_life/article/details/51228098 本文介绍一下用Maven工具如何生成Mybatis的代码及映射的文件. 一. ...

  10. java实现图的深度优先遍历和广度优先遍

    首先需要知道的是,图的深度优先遍历是一种类似于树的前序遍历方式,即选择一个入口节点,沿着这个节点一直遍历下去,直至所有节点都被访问完毕:如果说,图的深度优先遍历类似于树的前序遍历的话,那么图的广度优先 ...