Internet Explorer – Web程序员的毒药。在IE上开发时间中有超过60%的时间是花在和IE的bug进行搏斗,让你的开发生产率严重下降。下面是一个教程,告诉你9个IE上最常见的BUG以及如何解决它们。
1. DIV居中布局创建一个CSS定义把一个元素放到中间的位置,可能是每一个Web开发人员都会做的事情。最简单的做法是为你的元素增加一个margin: auto; ,然而 IE 6.0 会出现很多奇怪的行为。让我们来看一个例子。
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>CSS z-index Property</title> <style> #container { border: solid 1px #000; background: #777; width: 400px; height: 160px; margin: 30px 0 0 30px; } #element{ background: #95CFEF; border: solid 1px #36F; width: 300px; height: 100px; margin: 0px auto; } </style> </head> <body> <div id="container" >The container <div id="element" >The element</div> </div> </body> </html>
下面是我们所期望的输出:
但IE却给我们这样的输出:
这应该是IE 6对margin的 auto 并没有正确的设置。但幸运的是,这是很容易被修正的。
解决方法
最简单的方法是在父元件中使用 text-align: center 属性,而在元件中使用 text-align: left 。
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>CSS z-index Property</title> <style> #container { border: solid 1px #000; background: #777; width: 400px; height: 160px; margin: 30px 0 0 30px; text-align: center; } #element{ background: #95CFEF; border: solid 1px #36F; width: 300px; height: 100px; margin: 0px auto; text-align: left; } </style> </head> <body> <div id="container">The container <div id="element" >The element</div> </div> </body> </html>
IE却给我们这样的输出:
2. float的浮动双边距
什么是浮动双边距
当一个盒子(块级元素)像左浮动的同时有一个向左的margin-left的时候,IE6解析这段代码时就会把margin-left解析为原来的2倍,这个就是所谓的浮动双边距BUG。同理当一个盒子右浮动的同时有一个向右的margin-right的时候,IE6也会把margin-right解析为原来的2倍。但是如果浮动的方向和margin方向是相反的话是不会出现双边距BUG的。
浮动双边距产生环境
IE6的双边距BUG并不是所有的margin边距方向都会产生双边距,出现双边距的条件是当浮动元素的浮动方向和margin的方向一致时才会出现。例如,元素向左浮动,那么只有左边距才会产生浮动双边距。此外,如果同一行中有多个浮动元素,且都有与浮动方向相同的margin,那么并不是所以的元素都出现浮动双边距,只有第一个浮动元素会出现双边距BUG,其它的浮动元素则不会。
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>CSS z-index Property</title> <style> *{ margin:0; padding:0; } .floatbox { background: #95CFEF; border: solid 1px #36F; float: left; width: 150px; height: 50px; margin:10px 0px 0px 20px; border:1px solid #000; } </style> </head> <body> <div class="floatbox"></div> <div class="floatbox"></div> <div class="floatbox"></div> </body> </html>
常用的两种能够解决浮动双边距的方法
1、给浮动盒子添加属性display:inline;将浮动盒子属性改为内联,就可以了。
2、使用IE6特有的选择符下划线(_),将现在的margin值改为原来的一半。
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>CSS z-index Property</title> <style> *{ margin:0; padding:0; } .floatbox { background: #95CFEF; border: solid 1px #36F; float: left; width: 150px; height: 50px; margin:10px 0px 0px 20px; border:1px solid #000; display:inline;/*解决方法*/ } </style> </head> <body> <div class="floatbox"></div> <div class="floatbox"></div> <div class="floatbox"></div> </body> </html>
3. 楼梯式的效果几乎所有的Web开发者都会使用list来创建导航条
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>CSS z-index Property</title> <style> ul { list-style: none; } ul li a { display: block; width: 130px; height: 30px; text-align: center; color: #fff; background: #95CFEF; border: solid 1px #36F; margin: 30px 5px; float:left; } </style> </head> <body> <ul> <li><a href="#"></a></li> <li><a href="#"></a></li> <li><a href="#"></a></li> </ul> </body> </html>
一个符合标准的浏览器会是下面这样:
但IE却是这样的:
下面是两个解决方法
解决方法一:设置li元件的float属性。
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>CSS z-index Property</title> <style> *{ margin:0; padding:0; } ul { list-style: none; } ul li a { display: block; width: 130px; height: 30px; text-align: center; color: #fff; background: #95CFEF; border: solid 1px #36F; margin: 30px 0px 30px 10px;/*去掉了float:left;否则IE6出现浮动双边距*/ } ul li{ float:left; } </style> </head> <body> <ul> <li><a href="#"></a></li> <li><a href="#"></a></li> <li><a href="#"></a></li> </ul> </body> </html>
解决方法二:设置li display: inline 属性。
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>CSS z-index Property</title> <style> *{ margin:0; padding:0; } ul { list-style: none; } ul li a { display: block; width: 130px; height: 30px; text-align: center; color: #fff; background: #95CFEF; border: solid 1px #36F; margin: 30px 0px 30px 10px; /*在同一行所以用float,并且得解决浮动双边距的问题*/ float:left; display:inline; } ul li{ display:inline; } </style> </head> <body> <ul> <li><a href="#"></a></li> <li><a href="#"></a></li> <li><a href="#"></a></li> </ul> </body> </html>
4. 无法设置微型高度我们发现在IE中使用 height: XXpx 这样的属性无法设置比较小的高度。
下面是个例子(注意高度是2px):
.element{ background: #95CFEF; width: 300px; height: 2px; border: solid 1px #36F; margin: 30px 0; }
期望结果: 2px的元件加1px的边框。
IE的结果:
解决方案一
这个BUG的产生原因很简单,IE不允许元件的高度小于字体的高度,所以,下面的fix是设置上字体大小。
.element{ background: #95CFEF; width: 300px; height: 2px; border: solid 1px #36F; margin: 30px 0; font-size:0px; }
解决方案二
但是最佳的解决方法是使用 overflow: hidden
.element{ background: #95CFEF; width: 300px; height: 2px; border: solid 1px #36F; margin: 30px 0; overflow: hidden; }
5.IE6下position:absolute的定位BUG
原因:IE6及更低版本中,相对定位的元素没有获得IE/Win的内部hasLayout属性。因此,它们不创建新的定位上下文,所有绝对定位元素相对于视口(body)进行定位。
<!doctype html> <html> <head> <meta charset="utf-8" /> <title>测试模型</title> </head> <body style="width:900px;margin:0 auto 800px auto;"> <p> IE6下的left定位错误 </p> <div style="position:relative; border:1px solid orange; text-align:center;"> <span>父级div,文本居中</span> <!-- 注意:position:absolute受text-align:center影响--> <div style="position:absolute;top:0;left:0;background:#CCC;"> 文本居中的子元素div,绝对定位top:0;left:0; </div> </div> <hr /> <div style="position:relative; border:1px solid orange; text-align:right;"> <span>父级div,文本居右</span> <div style="position:absolute;top:0;left:0;background:#CCC;"> 文本居右的子元素div,绝对定位top:0;left:0; </div> </div> <hr/> <p> IE6下的left定位错误的解决方法1:父级元素添加zoom:1; </p> <div style="position:relative; border:1px solid orange; text-align:center;zoom:1;"> <span>父级div,文本居中,加了zoom:1;</span> <div style="position:absolute;top:0;left:0;background:#CCC;"> 文本居中的子元素div,绝对定位top:0;left:0; </div> </div> <hr/> <p> IE6下的left定位错误的解决方法2:父级元素添加width; </p> <div style="position:relative;border:1px solid orange;text-align:right;width:99%;"> <span>父级div,文本居右,加了width:99%;</span> <div style="position:absolute;bottom:0;left:0;background:#CCC;"> 文本居右的子元素div,绝对定位top:0;left:0; </div> </div> <hr/> <p> IE6下的bottom定位错误 </p> <div style="position:relative;border:1px solid orange;text-align:center;"> <span>父级div,文本居中</span> <div style="position:absolute;bottom:0;left:0;background:#CCC;"> bottom定位错位了。文本居中的子元素div,绝对定位bottom:0;left:0; </div> </div> <hr/> <div style="position:relative;border:1px solid orange;text-align:right;"> <span>父级div,文本居右</span> <div style="position:absolute;bottom:0;left:0;background:#CCC;"> bottom定位错位了。文本居右的子元素div,绝对定位bottom:0;left:0; </div> </div> <hr/> <p> IE6下的bottom定位错误的解决方法1:父级元素添加zoom:1; </p> <div style="position:relative;border:1px solid orange;text-align:center;zoom:1;"> <span>父级div,文本居中,加了zoom:1;</span> <div style="position:absolute;bottom:0;left:0;background:#CCC;"> 文本居中的子元素div,绝对定位bottom:0;left:0; </div> </div> <hr/> <p> IE6下的left定位错误的解决方法2:父级元素添加height; </p> <div style="position:relative;border:1px solid orange;text-align:right;height:1%;"> <span>父级div,文本居右,加了height:60px;</span> <div style="position:absolute;bottom:0;left:0;background:#CCC;"> 文本居右的子元素div,绝对定位bottom:0;left:0; </div> </div> <br/> </body> </html>
解决方法:IE6中很多Bug都可以通过触发layout得到解决,以上的解决方法无论是设置zoom:1还是设置width和height其实都是为了触发layout。其实不管left还是bottom错位,只要触发layout,就能正常定位了。例如:
1、设置height:1%;//小的高度不会对实际高度找出影响
2、相对定位的祖先元素设置过高度和宽度。
3、相对定位的祖先元素设置_zoom:1,用于触发元素的layout属性。
效果图:
6.IE6、IE7浏览器下margin无效的解决方法(引用自:http://www.jb51.net/css/28144.html)。
<style type="text/css"> .test-1,.test-2{border:5px solid #F00;} .test-1{border-color:#000;} /*width:100%; height:auto !important;height:1%; zoom:1;*/ .test-2{margin:10px;height:50px;width:500px;} </style> <div class="test-1"> <div class="test-2"> test-2 </div> </div>
.test-1{border-color:#000;width:100%; height:auto !important;height:1%; zoom:1;}
在InternetExplorer中,一个元素要么自己对自身的内容进行计算大小和组织,要么依赖于父元素来计算尺寸和组织内容。上面的例子 test-1 没有触发haslayout 他不能负责对自己和可能的子孙元素进行尺寸计算和定位;所以子元素的margin失效。
7.div嵌套时y轴上padding和margin的问题。
怪异模式下(包括IE6、IE7的标准模式)的IE:y轴上子div到父div的距离为父padding和子margin里大的一个
其他浏览器(标准模式下的IE8和IE9、Firefox Chrome Safari):y轴上子div到父div的距离为父padding+子margin
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <title>父子块的margin</title> <style type="text/css"> * { padding: 0; margin: 0; } div.father { /* 父div */ background-color: #fffebb; font-family: Arial, Helvetica, sans-serif; font-size: 12px; padding: 10px; border: 1px solid #000000; width:100%; height:auto !important;height:1%; zoom:1; } div.son { /* 子div */ background-color: #a2d2ff; margin-top: 30px; margin-bottom: 0px; padding: 15px; border: 1px dashed #004993; width: 100px; } </style> </head> <body> <div class="father"> <div class="son"> 子div </div> </div> </body> </html>
8.怪异模式下(包括IE6、IE7的标准模式)的IE:正常
其他浏览器(标准模式下的IE8和IE9、Firefox Chrome Safari):y轴上父padding=0且border=0时,子div到父div的距离为0
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <title>父子块的margin</title> <style type="text/css"> * { padding: 0; margin: 0; } div.father { /* 父div */ background-color: #fffebb; font-family: Arial, Helvetica, sans-serif; font-size: 12px; width:100%; height:auto !important;height:1%; zoom:1; } div.son { /* 子div */ background-color: #a2d2ff; margin-top: 30px; margin-bottom: 0px; padding: 15px; border: 1px dashed #004993; width: 100px; } </style> </head> <body> <div class="father"> <div class="son"> 子div </div> </div> </body> </html>
9.3像素偏移bug
它是IE6的一个著名的bug,当浮动元素与非浮动元素相邻时,这个3px的Bug就会出现。
body { margin:0; padding:0; } #side { float: left; background:#99FF99; height: 300px; width: 120px; } #main { background: #99FFFF; height: 300px; } <div id="side">此处显示 id "side" 的内容</div> <div id="main">此处显示 id "main" 的内容</div>
解决方法:
1、所有的层都浮动 把右边那个层也设置成浮动层就可以消除这可恶的3px间隔
2、给左边的层,应用margin-right:-3px;,同样可解决IE 3px bug
10.IE6和IE7overflow:hidden;失效
1)设置body{overflow:hidden;}失效
原因:此项其实不是bug,而是个浏览器默认值不同造成的。
明智的浏览器(ex. chrome and firefox)会初始付值给html{overflow:visible;}
IE6 初始付值html{overflow-x:auto;overflow-y:scroll;}
IE7 初始付值html{overflow-x:visible;overflow-y:scroll;}
只有dom根结点(也就是html根节点)设置html{overflow:visible;}的时候,浏览器才会将body元素中的overflow值应用到视图区。
举个例子说:
设置了body{overflow:hidden},还会出现滚动条,不过这个滚动条不是body的,是html的只有你设置html{overflow:visible;} body{overflow的值}才能传递到html{}中去这样html的值就变成了{overflow:hidden},ok没有滚动条了
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>无标题文档</title> <style type="text/css"> html, body, p { margin: 0; padding: 0; } body { overflow: hidden; } p { width: 5000px; height: 5000px; } </style> </head> <body> <p>There are no scrollbars on this page in sane browsers</p> </body> </html>
2)当父元素的直接子元素或者下级子元素的样式拥有position:relative属性时,父元素的overflow:hidden属性就会失效。
解决方法:在父元素中使用position:relative;
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>无标题文档</title> <style type="text/css"> html, body, p { margin: 0; padding: 0; } .father{ overflow:hidden; width:200px;height:200px;background: yellow; } .child{ position:relative; width:300px;height:150px;background: blue; } </style> </head> <body> <div class="father"> afjsifjei <div class="child"> child </div> </div> </body> </html>
建议的解决方案:zoom:1;height:100%;background:#fff
12.IE6下border不显示的bug(我没有遇到)
分析:对一个div定义border,但是却不显示。
建议解决方法:定义宽度;定义高度;清除浮动。
13. IE(6 7 8)的z-index bug
<div id="container"> <div id="box1">这个box应该在上面</div> </div> <div id="box2"> 这个box应该在下面,IE浏览器会对定位元素产生一个新的stacking context ,甚至当元素 z-index的为“auto”。 </div> css: container { position: relative; } #box1 { position: absolute; top: 100px; left: 210px; width: 200px; height: 200px; background-color: yellow; z-index: 20; } #box2 { position: absolute; top: 50px; left: 160px; width: 200px; height: 200px; background-color: green; z-index: 10; }
结果:ff/chrome显示为box1在box2上,而IE确实box2显示在了box1上
原因:IE浏览器会对定位的元素产生一个新的stacking context,并且从z-index:0开始
引用自:http://kb.cnblogs.com/page/51673/
:http://www.qinychun.com/2012/07/ie6-bug/129.html?replytocom=175
:http://developer.51cto.com/art/201008/220829.htm
:http://www.cnblogs.com/tom-zhu/archive/2012/07/15/2592379.html
:http://www.cnblogs.com/svage/archive/2011/02/12/1952704.html
相关推荐
"BUGS_1.81.zip" 是一个包含BUGS软件1.81版本的压缩文件,这通常意味着它是一个软件发行包,用于分发和安装BUGS的特定更新或版本。BUGS(Bayesian Inference Using Gibbs Sampling)是一款流行的概率编程语言,专门...
Bugs Hunter的描述中提到“误报不少”,这意味着工具可能无法区分真正的漏洞和正常代码,需要用户具备一定的专业知识,对结果进行二次确认。这是因为代码的复杂性和上下文依赖使得自动检测工具难以做到百分之百准确...
Offering practical advice, hands-on guidance and code samples, this essential guide will help you to find, classify, and assess security bugs before your software is released.
### Eclipse FindBugs 插件使用详解 #### 一、插件安装步骤 **1.... 首先,需要解压下载好的`edu.umd.cs.findbugs.plugin.eclipse_2.0.3.20131122-15020.zip`文件。确保解压过程完整无误,所有文件都得以正确提取。...
Win bugs
Microsoft.Press.Hunting.Security.Bugs chm Microsoft.Press.Hunting.Security.Bugs chm
【标题】"POJ1038--Bugs Integrated" 是一个编程竞赛题目,来源于著名的在线编程平台POJ(Programming Online Judge)。这类题目通常要求参赛者编写程序来解决特定问题,以此锻炼和测试他们的算法设计和编程能力。在...
IE CSS Bugs点击查看 有错误或补充,欢迎提交 issue 。怎么做在 bugs.md 中添加讲解,将测试文件在 demo 目录。安装 及 node > 0.11命令行运行 node build.js,生成 index.html。参考资料版权
BUGS软件是全球最受欢迎的贝叶斯分析软件之一,本书《The BUGS Book: A Practical Introduction to Bayesian Analysis》由BUGS软件的开发团队编写,是一本实践性强的入门书籍,提供了对BUGS程序及其使用的实用介绍。...
在云计算系统中,存在着各种各样的问题和故障,这些被称为“云中的bug”。由于云计算在现代数据中心基础设施中扮演着核心角色,云系统的开发和部署问题的研究就显得尤为重要。该研究通过对六个流行的云系统(Hadoop ...
Eclipse FindBugs插件是Java开发者在Eclipse集成开发环境中广泛使用的一款静态代码分析工具。这款插件的主要目标是帮助开发者在代码运行之前找出潜在的错误和问题,从而提高软件质量并减少后期维护的工作量。...
标题 "IE的不合理设计和Bugs" 涉及到的是在Internet Explorer(IE)浏览器中遇到的一个特定问题,即无法动态修改表单元素的`name`属性。这个问题在其他现代浏览器中通常不会出现,因此它被视为IE的一个不兼容性或非...
bugs.apk
类似于VC中workspace的控件,是我从CJ60Lib库中提取出来的并做了些修改,不依赖于CJ60Lib库,能够使程序更小,而且还修复了两个重要的bug:1.程序最小化,并恢复后,子控件不重绘。2.在controlbar处于浮动状态时,主...
`find_bugs`工具是一款广泛使用的静态代码分析工具,它主要针对Java程序,旨在帮助开发者在编码阶段就发现潜在的错误和不良编程习惯,从而提高软件质量和可维护性。这款工具通过扫描字节码来检测可能存在的问题,而...
Bugs of Landmark R5000
IE6-bugs注意: html文件夹中有对应bug重现的html页面最近发现项目方向越来越不对了,干脆用来放置浏览器的兼容性内容吧!CSS兼容性或bug1.计算一定要精确 不要让内容的宽高超出我们设置的宽高在IE6下,内容会撑开...
Finding More Null Pointer Bugs, But Not Too Many 的论文
Wordpress Bugsy模板是一款专为WordPress平台设计的网站模板,旨在提供美观且功能丰富的网站构建基础。这款模板以其独特的设计风格、高度可定制性以及对WordPress核心功能的出色支持而受到用户欢迎。在深入探讨Bugsy...
本研究深入分析了超过3000个云系统中的问题,对这些问题进行了细致的分类与研究,最终得出了与云系统相关的bugs种类、来源、以及它们对系统的影响。以下是对这份研究中涉及到的关键知识点的详细解析: 1. 云系统的...