到底什么是块级元素上下文?

首先,求解到底什么是bfc?然后<div>......</div><div>......</div>第一个div触发bfc后它与普通的div区别是什么?上面错了bfc能阻... 首先,求解到底什么是bfc?
然后

<div>......</div>
<div>......</div>
第一个div触发bfc后它与普通的div区别是什么?
上面错了bfc能阻止兄弟元素的div折叠吗?
展开
 我来答
蒙蒙丽雨
推荐于2016-07-09 · 超过30用户采纳过TA的回答
知道答主
回答量:58
采纳率:0%
帮助的人:37.4万
展开全部
1. BFC(block formatting context,中文常译为块级格式化上下文)是 W3C CSS
2.1 规范中的一个概念,它决定了元素如何对其内容进行定位,以及与其他元素的关
系和相互作用。
在进行盒子元素布局的时候, BFC 提供了一个环境, 在这个环境中按照一定规则进
行布局不会影响到其它环境中的布局。比如浮动元素会形成 BFC,浮动元素内部子元素
的主要受该浮动元素影响,两个浮动元素之间是互不影响的。
也就是说,如果一个元素符合了成为 BFC 的条件,该元素内部元素的布局和定位
就和外部元素互不影响(除非内部的盒子建立了新的 BFC), 是一个隔离了的独立容器。
在 CSS3 中,BFC 叫做 Flow Root。
2. 形成 BFC 的条件(符合以下任一条件即可):
1) float 的值不为 none;
2) overflow 的值不为 visible;
3) display 的值为 table-cell、table-caption 和 inline-block 之一;
4) position 的值不为 static 或 relative 中的任何一个;
3. BFC 常见作用
1) 包含浮动元素
BFC 会 根据子元素的情况自 适应 高度 ,这个 特性 是 对父元素 使 用
overflow:hidden/auto/scroll、 float:left/right 样式可以闭合浮动的
原理。
此外 网上 有 资 料 说 使用 display:table 可以 隐 式 触 发 table-cell/table-caption,来创建 BFC。
<div style="border:1px solid #00F;overflow:hidden;width:300px;">
<div style="float:left;background:#939;">我的父元素是 BFC</div>
</div>
<div style="line-height:3em;">----------我是华丽分割线-----------</div>
<div style="border:1px solid gray;width:300px;">
<div style="float:left;background:#3C6;">我的父元素不是 BFC</div>
</div>
上面的例子中,有两个 div ,它们各包含一个设置了浮动的 div 元素,但
第二个 div 出现了“高度塌陷”,这是因为内部的浮动元素脱离了普通流,因此
该 div 相当于一个空标签,没有高度和宽度,即高度为 0 ,上下边框也重叠在
一起。而第二个 div 使用 overflow: hidden 创建了 BFC ,可以包含浮动
元素,因此能正确表现出高度,其边框位置也正常了。
PS:此方法只能在支持 BFC 的浏览器(IE8+, firefox, chrome, safari)通
过创建新的 BFC 闭合浮动;在不支持 BFC 的浏览器 (IE6-7),需要通过触发
hasLayout 闭合浮动。
2) 不被浮动元素覆盖
浮动元素会无视兄弟元素的存在, 覆盖在兄弟元素的上面, 为该兄弟元素创建
BFC 后可以阻止这种情况的出现,如下示例:
<div style="float:left;width:150px;height:50px;background:#FF0;">
我是浮动元素
</div>
<div style="width:200px;height:80px;background:#30F;color:#fff;">
我是非浮动元素,并且没有创建 BFC
</div>
<div style="line-height:3em;">----------我是华丽分割线-----------</div>
<div style="float:left;width:150px;height:50px;background:#FF0;">
我是浮动元素
</div>
<div
style="width:200px;height:80px;background:#30F;color:#fff;display:inl
ine-block;">
我是非浮动元素,创建了 BFC
</div>
效果图所示,蓝色背景的元素通过 display:inline-block 创建了 BFC,
则浮动的兄弟元素就不覆盖在该元素上面了。
以上的情况仅是元素宽度之和没有超出父元素宽度的情况,假设浮动元素宽度
和它的非浮动兄弟元素宽度都超过了父元素的宽度,非浮动元素会下降到下一行,
即处于浮动元素下方,如下所示:
<div style="width:300px;">
<div style="float:left;width:150px;height:50px;background:#FF0;">
我是浮动元素
</div>
<div
style="width:200px;height:80px;background:#30F;color:#fff;overflow:hi
dden;">
我是非浮动元素,创建了 BFC
</div>
</div>
3) 阻止父子元素的 margin 折叠
在 《认识 margin 折叠》 一文中讲过外边距折叠的规则:仅当两个块级元素毗
邻并且在同一个块级格式化上下文时,它们垂直方向之间的外边距才会叠加。也就
是说,即便两个块级元素相邻,但当它们不在同一个块级格式化上下文时它们的边
距也不会折叠。示例如下。
<div style="margin-top:20px;background:yellow;width:300px;">
<div style="margin-top:20px;">
我的上外边距是 20px,父级元素不是 BFC
</div>
</div>
<div style="margin-top:20px;background:yellow;overflow:auto;width:300px;">
<div style="margin-top:20px;">
我的上外边距是 20px,父级元素是 BFC
</div>
</div>
如上图的例子,上述 div 元素都有顶部外边距,但第二个 div 的边距没有
与它的子元素的外边距折叠。这是因为第二个 div 创建了新的 BFC。
以上代码在 IE8、IE10 和 chrome 测试通过,了解 IE6-7 的
兼容问题解决方法,请百度 hasLayout 东莞汇鑫
追问
bfc能阻止兄弟元素的div折叠吗?
石经理
2024-04-02 广告
延性砼有以下长处:1. 高延性:延性砼的核心材料是纤维,因为纤维具有超强的拉结作用,使得其具有很强的延展性能。这也使得延性砼被称为“可弯曲的混凝土”。2. 减少结构损伤:具有强加固功能的高延性混凝土无需穿透墙体拉结,大幅度减少对原结构的损伤... 点击进入详情页
本回答由石经理提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式