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

1.在什么场景下会出现外边距合并?如何合并?如何不让相邻元素外边距合并?给个父子外边距合并的例子。

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

  • 兄弟关系:


    QQ截图20160828134158.png

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

  • 两个相邻兄弟元素之间margin发生合并,两者距离以较大的值为准

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

  • 父子关系:
    如图发生合并,父子元素之间外边距为40,父元素margin为40,子元素为20margin


    QQ截图20160828135320.png

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

  • 空元素(自身外边距合并)
添加边框后不合并

自身外边距合并

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


  • 创建BFC可使得两者不合并
  • 通过对父元素建立border,padding,或者间隔可以使外边距不合并
  • 浮动元素不合并
  • 绝对定位元素不合同
  • 根元素不合并
    总结:不仅仅相邻元素外边距会合并,有时候不相邻的元素外边距也可能合并,两个元素外边距会不会合并主要看它们外边距之间有没有分界线存在。所以不让两个元素的外边距合并,就要让它们之间有道分界线,这个分界线可以是border,padding或是bfc形成的独立空间。
2.去除inline-block(IE8以上兼容)内缝隙有哪几种常见方法?
  • 通过消除元素之间代码的换行的间隙,可以出处内缝隙;


    让换行元素的标签括号相连
使元素处于一行
  • 可以使用负margin来控制间隙,一般可设置-4px即可,但注意调整第一格元素的样式;
  • 可以使用浮动来清除,同时记得需对父元素做清除浮动处理,避免产生影响;
  • 对父元素使用font-size:0;也可以清除空隙;但子元素必须重新再设定字体大小;
3.父容器使用overflow: auto| hidden撑开高度的原理是什么?

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

QQ截图20160828125903.png
4.BFC是什么?如何形成BFC,有什么作用?
  • BFC的定义:是指浮动元素和绝对定位元素,非块级盒子的块级容器(例如 inline-blocks, table-cells, 和 table-captions),以及overflow值不为“visiable”的块级盒子,都会为他们的内容创建新的BFC(块级格式上下文)。

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

  • float的值不为”none”
  • overflow的值不为”visible”
  • display的值为 “table-cell”, “table-caption”, or “inline-block”中的任何一个
  • position的值不为 “static” 或 “relative”中的任何一个

BFC布局规则:

  • 内部的Box会在垂直方向,一个接一个地放置。
  • Box垂直方向的距离由margin决定。属于同一个BFC的两个相邻Box的margin会发生重叠
  • 每个元素的margin box的左边, 与包含块border box的左边相接触(对于从左往右的格式化,否则相反)。即 使存在浮动也是如此。
  • BFC的区域不会与float box重叠。
  • BFC就是页面上的一个隔离的独立容器,容器里面的子元素不会影响到外面的元素。反之也如此。
  • 计算BFC的高度时,浮动元素也参与计算。

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

QQ截图20160828093512.png
  • 2.用于布局
QQ截图20160828095841.png
  • 3.可以包含浮动元素,解决容器高度塌陷;
QQ截图20160828125903.png

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

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

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

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

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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,732评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,496评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,264评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,807评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,806评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,675评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,029评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,683评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,704评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,666评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,773评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,413评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,016评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,204评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,083评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,503评论 2 343

推荐阅读更多精彩内容

  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 13,727评论 1 92
  • relative:生成相对定位的元素,通过top,bottom,left,right的位置相对于其正常位置进行定位...
    zx9426阅读 929评论 0 2
  • 一,浮动元素有什么特征?对父容器、其他浮动元素、普通元素、文字分别有什么影响? 浮动模型是一种可视化格式模型,浮动...
    DeeJay_Y阅读 856评论 0 4
  • 1.在什么场景下会出现外边距合并?如何合并?如何不让相邻元素外边距合并?给个父子外边距合并的范例 概念:在CSS当...
    饥人谷_任磊阅读 641评论 0 3
  • 1. 在什么场景下会出现外边距合并?如何合并?如何不让相邻元素外边距合并?给个父子外边距合并的范例 外边距合并:外...
    进击的阿群阅读 897评论 1 2