CSS开发人员可能经常会碰到的一个现象是,一个页面在IE(特别是老版本的IE)中显示正常,而在现代浏览器中却完全变形了,或者情况完全相反。

常常能听到有人抱怨:“在IE上开发时间中,超过 60% 的时间,都是在与IE的Bug作斗争。”导致这一现象的根本原因,是不知道IE都有哪些 bug,也不知道如何解决这些 bug。在出现问题时,往往束手无措,更不要说预防 Bug 了。

因此,作为一位优秀的CSS开发人员,必须了解IE浏览器的常见 Bug,以及导致这些 Bug的各种因素,以便能够预防 Bug 的产生,或在出现问题后,能够及时发现并快速修复。

浮动元素双倍边距Bug

浮动元素双倍边距 Bug,是IE6及更低版本中的一个经典Bug。当给元素设置了 float 属性,同时设置了与浮动方向相同margin值,则浮动元素的 margin就会加倍。

简单的说,就是左浮动元素的 margin-left 被加倍,而 margin-right 不会被加倍,右浮动元素的 margin-right 被加倍,margin-left 不会被加倍。

但是,当有多个元素都在一行内向相同方向浮动,且都有同方向的 margin 时,只有靠近浮动方向的第一个元素的 margin 会加倍,其他元素则不会。

假设在一个容器中,有两个元素:

  1. <div id="wrapper">
  2.     <div class="fl">float</div>
  3.     <div class="fl">float</div>
  4. </div>

现在,让两个元素都向左浮动,并为它们设置 100px 的左外边距:

  1. .fl {
  2.    float: left;
  3.    width: 100px;
  4.    height: 60px;
  5.    margin-left: 100px;
  6. }

在IE6中及更低版本中,会发现第一个元素的左外边距,由 100px 被扩大为 200px。而第二个元素的左外边距仍然是 100px,没有被加倍。如图 10‑2 所示:

图10-2 浮动元素双边距Bug

修复这个 Bug 的方法很简单,只需将浮动元素的 display 属性设置为 inline,便可轻松解决问题。但是,这里的 display 属性,除了修复IE Bug外,并没有其它用处。

  1. .fl {
  2.    float: left;
  3.    width: 100px;
  4.    height: 60px;
  5.    margin-left: 100px;
  6.    display: inline;
  7. }

修复后的运行效果如图 10‑3 所示:

图10-3 修复浮动元素双边距Bug

将浮动元素的 display 属性设置为 inline 并不会影响它的显示方式,还能阻止IE6及更低版本将它的外边距加倍。因此,每当让具有水平外边距的元素进行浮动时,都应该很自然地将它的 display 属性设置为 inline,以防止外边距被加倍。

关于作者

歪脖先生,十五年以上软件开发经验,酷爱Web开发,精通 HTML、CSS、JavaScript、jQuery、JSON、Python、Less、Bootstrap等,著有《HTML宝典》、《揭秘CSS》、《Less简明教程》、《JSON教程》、《Bootstrap2用户指南》、《Bootstrap3实用教程》,并全部在 GitHub 上开源。

修复IE的浮动元素双倍边距Bug相关推荐

  1. [css] 如何解决IE6浮动时产生双倍边距的BUG?

    [css] 如何解决IE6浮动时产生双倍边距的BUG? 1.当块级元素有浮动样式的时候,给元素添加margin-left和margin-right样式,在ie6下就会出现双倍边距2.给当前元素添加样式 ...

  2. 【问题】父套子时,‘阻止子元素的外边距传递给父元素’与闭合浮动

    使用空的<table>标签可以隔离父子元素的外边距,阻止外边距的重叠(直接添加会产生 无用标签,要在CSS中添加属性) 1 <!DOCTYPE html> 2 <html ...

  3. CSS中浮动和定位对元素宽度/外边距/其他元素所占空间的影响

    一.width:auto和width:100%的区别 1.width:100%的作用是占满它的参考元素的宽度.(一般情况下参考元素 == 父级元素,这里写成参考元素而不是父级元素,在下面我会再细说) ...

  4. IE6中float元素双倍margin问题

    在IE6中,当给某元素设置float时,同时给该元素设置margin时,他会有双倍外边距的问题 p {float:right;margin-right:10px; /*页面真正显示的是margin-r ...

  5. CSS浮动元素特点有什么

    什么是浮动? 元素的浮动是指设置了浮动属性(flot)的元素. CSS浮动有什么作用? 1.让多个盒子水平排列成一行,浮动成为布局的重要手段; 2.可以实现盒子的左右对齐等等; 3.浮动最早是用来控制 ...

  6. CSS使用浮动属性和边距设计3行3列定宽的布局实例

    CSS使用浮动属性和边距设计3行3列定宽的布局 下面使用CSS的浮动属性和边距属性设计一个简单地3行3列并且是固定宽度的布局页面. 实例 设计步骤如下: 1. 制作3行3列定宽布局的XHTML部分.源 ...

  7. css --- 浮动元素与 块框/行内框重叠时的细节

    块框,可以认为是块级元素(如div.h1)的内容区 + 内边距 行内框可以认为是行内元素(如span)的内容区 + 内边距 当 块级框/行内框 和一个浮动元素重叠时,行内框的边框.背景和内容都在幅度元 ...

  8. 六、pink老师学习笔记——CSS三角形之美 margin负值之美文字围绕浮动元素行内块元素布局的巧妙运用

    7. 拓展@ 7.1 margin负值之美 1). 负边距+定位:水平垂直居中 咱们前面讲过, 一个绝对定位的盒子, 利用 父级盒子的 50%, 然后 往左(上) 走 自己宽度的一半 ,可以实现盒子水 ...

  9. 浮动和清浮动,内外边距和margin的坑

    浮动:使元素脱离文档流,按照一定的方式排列,遇到相邻的浮动元素或者父级的边界停下来. 可以往left,也可以往right 一般建议用ul.f>li.s编写,(<ul></ul& ...

最新文章

  1. 容器云原生DevOps学习笔记——第三期:从零搭建CI/CD系统标准化交付流程
  2. websohere 替换单独文件_postman教程-16-如何读取外部文件实现数据参数化
  3. UML之类图和包图,对象图
  4. python怎么对齐文件_说说在 python 中,如何对齐文本
  5. 汇编语言(十五)之找出两个数组中的相同元素
  6. 鼠标问题:鼠标拖拽不灵敏,准备复制拖动的半截就断了
  7. Debian、Ubuntu源码编译制作安装包(一)
  8. matlab可以连接阻抗分析仪么,MFIA 5MHz阻抗分析仪
  9. 在Windows mobile 5.0下操作INI文件
  10. 童年黑科技图鉴:从 50 后到 00 后,从纸片到智能
  11. 拥2180亿美元收入 苹果成全球最大IT企业
  12. git拉取远程仓库命令代码
  13. 计算机程序可以通过删除卸载嘛,怎么彻底卸载电脑软件程序多种方法
  14. Android开发实践:设计安卓应用以计算BMI指数
  15. 一段真实在个人经历, 给那些迷失方向的朋友[转帖]
  16. java中switch的用法和逻辑运算符
  17. We Can't Subsidize The Banks Forever
  18. GD32f103 8M晶振改12M , 要修改的地方
  19. 条码打印软件如何修改条码和数字之间的间距
  20. vue表单模板,表格模板

热门文章

  1. netty源码分析系列——Channel
  2. 微软阵营企稳的利好消息:.NET开源、Visual Studio免费
  3. Ubuntu 11.04下最流行的17款应用(linux在中国市场的占有率好像只有0.1几%)
  4. 算法高级(41)-推荐算法实现
  5. Android实现自定义曲线截屏,Android实现价格走势自定义曲线图
  6. Spring框架的快速入门
  7. hadoop最新稳定版本dkhadoop版本选择介绍
  8. zabbix_appliace 3.4安装部署
  9. java从远程服务器获取PDF文件并后台打印(使用pdfFox)
  10. 断言(Assertion)需要注意的一个地方