`
北极的。鱼
  • 浏览: 151173 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

webkit中BFC元素临近浮动元素时的边距bug

 
阅读更多

转自 : http://ofcss.com/2010/10/30/bfc-element-margin-bug-in-webkit.html

 

一直以来我们都很熟悉IE的“浮动边距加倍”的bug,并且绝大多数重构人员都已经很擅长在需要浮动时就直接绕过他。其实以webkit为核心的浏览器,包括但不限于Safari和Chrome,也有一个关于浮动和边距的bug,同样会造成布局错误。我在最近三个月的前一个月连续遭遇了两次这个bug,后两个月虽然避免了再次出现,但是直到现在才把这个bug彻底弄清楚。

 

触发这个bug的条件是:

  • 在一个非浮动元素上应用overflow,且其值不为visible(这将形成一个Block Formatting Context元素)。
  • 这个BFC元素拥有一个浮动的兄弟元素。
  • 在这个BFC元素上应用与其兄弟元素浮动方向相同的margin。
  • 这个BFC元素没有指定宽度值(或者指定width:auto)

当满足触发条件时,该BFC元素的另一侧的边距将不再受css控制(在webkit核心浏览器下),而是由你所指定的与浮动元素相同的边距决定,即使你在css中明确指定另一侧的边距为0或任意值也没用。具体来说,可以分为两种情况:

  • 当BFC与浮动方向相同的边距小于或等于浮动元素占据的总宽度(width+margin+padding+border)时,BFC另一侧的边距等于所设定方向上的边距(下图前两种情况);
  • 当BFC与浮动方向相同的边距大于浮动元素占据的总宽度时,BFC另一侧的边距等于浮动元素占据的总宽度(下图第三种情况)。


  • 第一种情况:main的左边距为50px,小于sider的总宽度100px,于是它右侧自动出现了50px的边距(等于margin-left);
  • 第二种情况:main的左边距为100px,等于sider的总宽度100px,于是它右侧自动出现了100px的边距(等于margin-left);
  • 第三种情况:main的左边距为150px,大于sider的总宽度100px,于是它右侧自动出现了100px的边距(等于sider总宽度);

以上截图来自这个demo页面 ,你可以用Safari或者Chrome自己打开查看具体情况。

要解决这个bug,只要让前面所说的四个条件任意一个不满足即可。例如:去除BFC元素上的overflow(但是很多时候我们需要这个overflow);或者给BFC指定宽度(但是这样就失去了main自适应宽度的优势)。

最佳做法,当overflow和margin都必不可少的时候,把BFC的margin-left改成浮动元素的margin-right。

  • 大小: 6.3 KB
分享到:
评论

相关推荐

    什么是BFC? CSS 使用伪元素清除浮动的方法

    BFC概念:  块级格式化上下文,是一个独立的...BFC元素也可以用来清除浮动带来的影响,因为如果不清除,子元素浮动则会造成父元素高度塌陷,必然会影响后面元素的布局和定位,这显然有违BFC元素的子元素不会影响外部

    HTML-bfc初探

    HTML-bfc初探

    CSS 清除浮动与BFC的方法

    计算BFC的高度时,浮动元素也参与计算。 BFC的区域不会与float box重叠。 每个盒子(块盒与行盒)的margin box的左边,与包含块border box的左边相接触(对于从左往右的格式化,否则相反)。即使存在浮动也是如此。...

    bfc的详细介绍以及大总结

    BFC详细介绍BFC详细介绍

    BFC论坛采集器2.0 Beta 3

    BFC网站数据采集器当前版本(Beta 3)属于测试版本,基本的功能已经实现,但是程序还存在问题,许多附加功能还没有完全完成,发布这个版本的目的只是为了测试程序已完成功能中存在的BUG和收集新的思路与功能。...

    font-study

    计算BFC⾼度时可持续⼦元素浮动也参与计算 如何创建BFC MDN web文档现在可以创建BFC的⽅法有以下⼏种 根元素或包含根元素的元素 浮动元素(元素的float不是none) 绝对定位元素(元素的位置为绝对或固定) ⾏内块...

    前端bfc的介绍与使用

    关于BFC的介绍与使用 这篇文章是我对BFC的理解及总结 带你们了解bfc的布局规则,使用方法,触发条件等内容,理解简单。

    BFC实现自适应两栏布局

    在解决高度塌陷的问题的时候,通过BFC的触发条件之一触发BFC后,在计算BFC的高度的时候,浮动元素就可以参与计算了。 BFC(Block Formatting Contexts)即块级格式化上下文,首先得是块元素,其次具备触发条件之一的才...

    诱发BFC的原因及处理方案

    该文档涉及诱发BFC的原因及处理方案.

    BFC UBB转贴器

    这是一个类似论坛转贴工具的小程序,可以将剪贴板中的HTML代码转换为论坛支持的UBB代码。 由于现在流行的转贴工具都是基于浏览器的,转换... <br> 转换模块升级时可直接用BFC采集器中的EnginLib.dll文件覆盖。

    BFC采集器 4.6

    BFC采集器不需要你进行例行的采集任务,只要你设置好需要的网站信息,BFC会在后台全自动帮你采集,自动查询网站内容更新,自动保持与资源网站的内容同步。完全不需要你的参与。 完善的元素机制使你可以轻而易举...

    10分钟理解CSS BFC原理及其应用

    一、常见定位方案 在讲 BFC 之前,我们先来了解一下常见的...在浮动布局中,元素首先按照普通流的位置出现,然后根据浮动的方向尽可能的向左边或右边偏移,其效果与印刷排版中的文本环绕相似。 绝对定位 (absolute po

    CSS理解块级格式上下文(BFC)

    影响外面的元素(里面怎么布局都不会影响外部),BFC任然属于文档中的普通流 2.BFC的生成: 知道了BFC怎么触发BFC 满足以下条件之一都可以触发BFC,变身为BFC 根元素 float属性不为none position不为

    文档流html开发中遇到的高度塌陷 浮动 定位产生的问题,.pptx

    html开发中遇到的高度塌陷 浮动 定位产生的问题, 以及使用bfc/清除伪元素清除浮动的方式

    Quick BFC.rar

    Quick BFC 是一款奇妙的工具,它可以把批处理文件(.bat、.cmd 格式) 转换为真正的可执行程序 (.exe格式),它可以毫无限制地运行于 Win95/98/ME/2000/2003/XP 下。对于转换出来的程序,你可以自定义程序的图标以及...

    css布局之BFC模式(block formatting context)

    官方给出的BFC解释是这样的,浮动元素和绝对定位元素,非块级盒子的块级容器(例如 inline-blocks, table-cells, 和 table-captions),以及overflow值不为“visiable”的块级盒子,都会为他们的内容创建新的块级...

    imaxue#progress#19-03-BFC总结2

    1. bfc的元素不会和float元素相重叠, 2. bfc子元素即使是float也会参与高度计算 2. position的值不是static或者relativ

    BFC正则表达式开发测试工具

     程序中我没有加入替换测试功能,集成了几个我用过的表达式(可通过修改RegexLib.xml文件进行添加或删除),具体的用一下程序就知道了。  比较遗憾的是我暂时无法取得正则表达式出现语法错误的位置,以后有...

    BFC图片批量水印工具

    这是一个可以对选中的图片文件添加水印的小程序,操作非常简单,但功能还是比较强大的,批量处理图片的速度也非常快。同时具备强大的字体特效处理功能。

    CSS实现两栏布局,左边固定,右边自适应的4种方法

    这种办法主要通过 overflow 触发 BFC,而 BFC 不会重叠浮动元素。由于设置 overflow:hidden 并不会触发 IE6-浏览器的 haslayout 属性,所以需要设置 zoom:1 来兼容 IE6-浏览器。具体代码如下: <!DOCTYPE html> &...

Global site tag (gtag.js) - Google Analytics