关于BFC以及外边距合并相关概念的小结

2016-08-28  本文已影响0人  尹萨萨
1.在什么场景下会出现外边距合并?如何合并?如何不让相邻元素外边距合并?给个父子外边距合并的例子。

在CSS中,两个或多个毗邻(父子元素或兄弟元素)的普通流中的块元素垂直方向上的 margin 会发生叠加
这种方式形成的外边距即可称为外边距叠加(collapsed margin)。
何为毗邻:是指没有被非空内容、padding、border 或 clear 分隔开。
何为普通流:除浮动( float )、绝对定位( absolute )外的代码即为普通流。

1,2margin设置20px, 3设置40px;
如图发生合并,1,2之间仍为20,2,3之间为40;
可得出结论

可通过建立BFC来取消外边距合并;

可以给父元素添加边框,内边距或内容当做分界线,也可以让父元素形成bfc,这样就不会发生边距合并。

添加边框后不合并
自身外边距合并

可以给这个元素添加添加边框,内边距,或者设置overflow:auto形成bfc。

2.去除inline-block(IE8以上兼容)内缝隙有哪几种常见方法?
使元素处于一行
3.父容器使用overflow: auto| hidden撑开高度的原理是什么?

可以使得父容器形成BFC,并触发BFC。
因为在BFC中,形成一个独立的空间,内在元素自行按照规则排列,不受外界影响也不干扰外界。
而根据规则浮动元素的高度也计算在BFC容器当中,所以高度被撑开了。
也可以理解为元素边界要与border左边界接触,所以高度被撑开了。

QQ截图20160828125903.png
4.BFC是什么?如何形成BFC,有什么作用?

当一个HTML元素满足下面条件的任何一点,都可以产生Block Formatting Context:

BFC布局规则:

使用举例
-1. 利用BFC可以消除Margin Collapse

QQ截图20160828093512.png QQ截图20160828095841.png QQ截图20160828125903.png

参考资料:
Block-level boxes、containing block、block formatting context 三者之间的区别和联系

5.浮动导致的父容器高度塌陷指什么?为什么会产生?有几种解决方法

浮动导致父容器塌陷,是因为浮动元素是脱离文档流的,此时父容器里面相当于没有元素一样,从而导致高度塌陷;
如果要解决问题即是要解决浮动带来的影响,即是要清楚浮动

6.以下代码每一行的作用是什么? 为什么会产生作用? 和BFC撑开空间有什么区别?
.clearfix:after{    /*  选择clearfix创建一个after伪类 */  
  content: '';         /*   内容为空 */
  display: block;   /*  呈现块级元素*/
  clear: both;       /*   清楚元素两边浮动*/
}
.clearfix{           /*   选择class为 clearfix 的元素 */
  *zoom: 1;       /*IE8以下使用该方法触发IE浏览器的haslayout ,解决ie下的浮动,margin重叠等问题。 */
}

这种方法是创建一个空的块级元素,清楚浮动后,元素会排在浮动元素的下一行中出现,这样就撑起了父容器高度。
而BFC是形成了一个新的独立空间。

文章版权归本文作者以及饥人谷所有。

上一篇 下一篇

猜你喜欢

热点阅读