1. 双外边距浮动bug

IE6和更低版本中存在双外边距浮动bug,顾名思义,这个Windows bug使任何浮动元素上的外边距加倍

bug重现:

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8">
  5. <title>双外边距bug</title>
  6. <style type="text/css">
  7. * {
  8. margin: 0;
  9. padding: 0;
  10. }
  11. .box1{
  12. background: red;
  13. width: 100px;
  14. height: 50px;
  15. float: left;
  16. margin-left: 20px;
  17. margin-top: 20px;
  18. /*设置display修复双外边距bug*/
  19. /*display: inline;*/
  20. }
  21. .box2{
  22. background: blue;
  23. width: 100px;
  24. height: 50px;
  25. float: left;
  26. margin-left: 20px;
  27. margin-top: 20px;
  28. }
  29. </style>
  30. </head>
  31. <body>
  32. <div class="box1">
  33. </div>
  34. <div class="box2">
  35. </div>
  36. </body>
  37. </html>
在IE6环境下测试。
                               
                                      修复前                                                                                     修复后
从上图可以看出,红色方块与浏览器左边框之间的外边距加倍了,但是与右边蓝色方块的右边距并没有加倍,同样经过测试,如果将上述蓝色方块设置为右浮动,并设置margin-right,与右边框也会产生双边外边距,这个bug很容易修复,将元素的display属性设置为inline就行了( 经测试将display属性设置为inline-block是不能修复bug的,因为早期的IE版本对inline-block支持的不友好)。因为元素是浮动的,将display属性设置为inline实际上不会影响显示方式。但是这似乎会阻止Windows上的IE6和更低版本将所有外边距加倍。

2. 3像素文本偏移bug

Windows上IE5和IE 6上另一个非常常见的bug是3像素文本偏移bug, 当文本与一个浮动元素相邻时,这个bug就会表现出来。 例如,假设将一个元素向左浮动, 并且不希望相邻段落中的文本围绕浮动元素。你可能会在段落上应用一个左外边距,其宽度等于浮动元素的宽度:
  1. .myFloat {
  2. float:left;
  3. width:200px;
  4. margin-left 200px;
  5. }
  6. p{
  7. margin-left: 200px;
  8. }
如果这么做, 在文本和浮动元素之间就会出现一个莫名其妙的 3像素间隙。一旦浮动元素停下来, 3像素间隙就会消失。

bug重现:
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8">
  5. <title>3像素文本偏移bug</title>
  6. <style type="text/css">
  7. * {
  8. margin: 0;
  9. padding: 0;
  10. }
  11. .myFloat {
  12. float:left;
  13. background: red;
  14. width:200px;
  15. height: 100px;
  16. }
  17. p{
  18. margin-left: 200px;
  19. width: 200px;
  20. background: orange;
  21. }
  22. </style>
  23. </head>
  24. <body>
  25. <div class="myFloat">
  26. </div>
  27. <p class="first">今天跟大家分享一个免费下载资源的网站——<a href="http://www.1001freedownloads.com/">1001FreeDownloads</a>它拥有超过1000个免费的设计图像和字体的目录。这个独特的网站提供了多种可以用来作为剪贴簿页面,图标和壁纸。相信你可以在这里找到你想要的素材。前端er、设计师们收藏咯!</p>
  28. </body>
  29. </html>
在win10自带的IE11下是没有问题的,左边的浮动块与右边的两个段落块之间没有空隙
接下来在开发人员工具中将模仿的文档模式改成IE5.(经测试IE7以上并没有这个bug)


很明显左边的浮动块与右边第一个段落方块之间出现了3像素的空隙。看上去第一个段落块右移了3px;


修复这个bug需要双管齐下。首先, 给包含文本的元素设置任意的高度。这会迫使元素拥有布局(拥有布局‘have layout’), 这在表面上会消除文本偏移。因为Windows上的IE 6和更低版本将height作为min-height那样对待,所以设置一个小的高度并不会影响元素在这些浏览器中的实际尺寸但是,这会影响其他浏览器, 所以要对除了 Windows上的正 6和更低版本之外的所有其他浏览器隐藏这个规则。最好的方法是使用 条件注释把这些样式转移到单独的CSS文件中 。
  1. <!-- [if lt IE 7] -->
  2. 针对IE7以下的样式
  3. <!-- [endif] -->
  1. p{
  2. height:1%;
  3. }
但是, 这项技术会导致另一个问题。拥有布局的元素被限制为矩形的,并且出现在浮动元素的旁边而不是它们的下面。添加200像素的外边距实际上会在IE 5和IE 6中在浮动元素和段落之间产生200像素的间隙 a 为了避免这个间隙, 需要将IE5-6/WiiL上的外边距重新设置为零:
  1. p{
  2.  margin-left:0;
  3. height:1%;
  4. }
文本偏移被修复了 ,但在IE5模式下查看仍有3像素间隙,这一次是在浮动元素上。为了去掉这个间隙,需要在浮动元素上设置一个负的3像素右外边距:
  1. p{
  2. margin-left:0;
  3. height:1%;
  4. }
  5. .myFloat{
  6. margin-right:-3px;
  7. }

再次在IE5模式下查看,间隙消失了,(实际测试中将 height:1%;这一行去掉也没影响???)

接下来的测试发现不止是浮动元素和文本之间,两个div块之间在IE6以下也会产生间隙。修复方案是删除#right的margin-left,并给#left添加样式margin-right:-3px

 
  1. <html>
  2. <head>
  3. <meta charset="utf-8">
  4. <title>3像素文本偏移bug</title>
  5. <style type="text/css">
  6. * {
  7. margin: 0;
  8. padding: 0;
  9. }
  10. #left {
  11. float: left;
  12. width: 200px;
  13. height:100px;
  14. background:red;
  15. }
  16. #right {
  17. width: 200px;
  18. height:100px;
  19. background:blue;
  20. margin-left: 200px;
  21. }
  22. /*删除#right的margin-left*,并添加下面的样式修复bug/
  23. /*#left {
  24. margin-right:-3px;
  25. }
  26. */
  27. </style>
  28. </head>
  29. <body>
  30. <div id="left"></div>
  31. <div id="right"></div>
  32. </body>
  33. </html>


3. IE6以下相对定位中的绝对定位bug


IE6下相对定位元素内绝对定位元素的偏移定位Bug问题,即绝对定位元素的相对偏移元素是谁。一般情况下,是相对于父元素以上直到DOCUMENT(默认已定位)的已定位元素(即position的设置)。但在IE6,IE5中出现的BUG却是定位在已定位元素的外围或以DOCUMENT相对而言。这些bug的原因在于相对定位的元素没有获得IE/Win的内部hasLayout属性。
bug重现:
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8">
  5. <title></title>
  6. <style type="text/css">
  7. *{
  8. margin: 0;padding: 0;
  9. }
  10. .box{
  11. position:relative;
  12. border:2px solid red;
  13. }
  14. .box1{
  15. width: 300px;
  16. height: 200px;
  17. }
  18. .box2{
  19. width: 50px;
  20. height: 50px;
  21. position:absolute;
  22. bottom:0;
  23. left:0;
  24. background:#CCC;
  25. }
  26. </style>
  27. </head>
  28. <body>
  29. <div class="box">
  30. <div class="box1"></div>
  31. <div class="box2">绝对浮动框</div>
  32. </div>
  33. </body>
  34. </html>
在IE5的模式下,绝对浮动框是相对视口定位的。

解决这个bug的方法很简单,一种方法是显式的给外层的box设置宽度和高度。如果外层容器宽度和高度不确定,推荐使用条件注释过滤IE6以下版本。在条件过滤中给外层容器设置一个小的高度如:height:1%;另一种解决方法是给给父层设置zoom:1触发layout。
 

常见IE浏览器bug及其修复方案(双外边距、3像素偏移、绝对定位)的更多相关文章

  1. IE下的双外边距浮动bug

    最常见且最容易发现的额一个bug是IE 6和最低版本中的双外边距浮动bug.这个bug是任何浮动元素上的外边距加倍. 上面代码中,div盒子向左边浮动,设置的margin-left的值是10px.在c ...

  2. 【WP8.1】系统控件的bug及修复方案

    最近开发的时候,发现Windows Phone 8.1 Runtime中的两个控件的存在bug的情况,现总结出来,并给出解决方案. 1.Hub控件 Hub控件的顶部默认是可以拖动来切换HubSecti ...

  3. 双外边距浮动bug;3像素文本偏移bug;IE6以下相对定位中的绝对定位bug

    http://www.cnblogs.com/star91/p/5458100.html

  4. 应对ie双外边距,不使用hack

    1.在浮动元素内层加一层div 2.使用不浮动的内层外边距来定义距离 ie在浮动时,并且使用外边距,会产生双倍外边距.

  5. 常见浏览器bug(针对IE6及更低版本)及其修复方法

    常见bug及其修复方法有以下几种 1.双外边距浮动bug 双外边距浮动bug在IE6及更低版本中常见.所谓双外边距浮动bug是指使任何浮动元素上的外边距加倍.(见下图) 只要将元素的display属性 ...

  6. IE6浏览器常见的bug及其修复方法

    IE6不支持min-height,解决办法使用css hack: .target { min-height: 100px; height: auto !important; height: 100px ...

  7. IE常见bug及其修复方法

        一.双边距浮动的bug 1.1一段无错的代码把一个居左浮动(float:left)的元素放置进一个容器盒(box) 2.1在浮动元素上使用了左边界(margin-left)来令它和容器的左边产 ...

  8. 智能合约bug以及修改方案

    截取两篇文章:第一遍文章说的是智能合约能不能修改的问题: ETC转到ETH地址以及转币进ETH智能合约账户能不能转出来? 第0章 引言 如果ETC充值到了ETH地址上,能找回来吗?答案是不一定. ET ...

  9. IE浏览器Bug总结

    每每在网上搜索IE浏览器Bug时,总是骂声一片,特别是前端工程师,每天都要面对,IE浏览器特别是IE6,存在很多Bug,对Web标准的支持也拖后腿,但不可否认,IE浏览器是曾经的霸主,它的贡献也是巨大 ...

随机推荐

  1. 【GoLang】并发小结

    006.并发 1 概念 1.1 goroutine是Go并行设计的核心,goroutine的本质是轻量级线程 1.2 golang的runtime实现了对轻量级线程即goroutine的智能调度管理 ...

  2. SQL Server中的索引

    1 SQL Server中的索引 索引是与表或视图关联的磁盘上结构,可以加快从表或视图中检索行的速度.索引包含由表或视图中的一列或多列生成的键.这些键存储在一个结构(B 树)中,使 SQL Serve ...

  3. Find the Duplicate Number

    Given an array nums containing n + 1 integers where each integer is between 1 and n (inclusive), pro ...

  4. android studio插件提升工作效率

    SonarLint 代码质量管理插件 ButterKnife Zelezny ButterKnife 生成器,快速根据布局文件生成属性对象. SelectorChapek 设计师给我们提供好了各种资源 ...

  5. 一键自动发布ipa(更新svn,拷贝资源,压缩资源,加密图片资源,加密数据文件,加密lua脚本,编译代码,ipa签名,上传ftp)

    一键自动发布ipa(更新svn,拷贝资源,压缩资源,加密图片资源,加密数据文件,加密lua脚本,编译代码,ipa签名,上传ftp) 程序员的生活要一切自动化,更要幸福^_^. 转载请注明出处http: ...

  6. 11. javacript高级程序设计-DOM扩展

    1. DOM扩展 1.1 选择符API l querySelector() 接收一个css选择符,返回与该模式匹配的第一个元素 l querySelectorAll() 接收一个css选择符,返回所有 ...

  7. Effective C++ -----条款03:尽可能使用const

    如果关键字const出现在星号左边,表示被指物是常量:如果出现在星号右边,表示指针自身是常量:如果出现在星号两边,表示被指物和指针两者都是常量. char greeting[] = " he ...

  8. 表现层的设计(一)——常用的模式、Json与DTO

    上几篇博文介绍了 业务逻辑层和数据访问层,我认为写博文的作用主要是向业界的读者交流一种思想,点到为止,至于学习架构设计,通过几篇博文是讲不清楚的,还需要[基础]扎实的情况下,[反复]研究[权威]的书籍 ...

  9. AOP理解

    1.问题 问题:想要添加日志记录.性能监控.安全监测 2.最初解决方案 2.1.最初解决方案 缺点:太多重复代码,且紧耦合 2.2.抽象类进行共性设计,子类进行个性设计,此处不讲解,缺点一荣俱荣,一损 ...

  10. 【leetcode】Reverse Words in a String(hard)☆

    Given an input string, reverse the string word by word. For example,Given s = "the sky is blue& ...