父元素margin-top设为0,子元素设置20px;

.parent-box{
    width: 100px;
    height: 100px;
    margin-top: 0;
    background: #99CCFF;
}
.child-box{
    width: 50px;
    height: 50px;
    margin-top: 20px;
    background: #FF9933;
}

预期效果:应该是父级元素没有边距,子元素顶部和父元素顶部之间的距离为20

实际效果:父子盒子重叠,父级与外面的间隔变成了20(会取较大的值,因为父级为0,所以取的是子级的margin)

CSS盒模型面试题的示例分析

通过上面的解决办法处理之后

方法一、二、三

CSS盒模型面试题的示例分析

方法四

.parent-box::before {
    content : "";
    display :table;
}

CSS盒模型面试题的示例分析

达到的效果

CSS盒模型面试题的示例分析

2、相邻块(兄弟)元素垂直外边距的合并(外边距塌陷)

当上下相邻的两个块元素相遇时,如果

则他们之间的垂直间距不是margin-bottom与margin-top之和,而是两者中的较大者

CSS盒模型面试题的示例分析

『解决办法』

1)为了达到想要的间距,最好在设置margin-top/bottom值时统一设置上或下;

2)或者用以下的BFC解决,下面有详解

6、谈谈BFC

BFC的基本概念

BFC全称为块格式化上下文 (Block Formatting Context) ,是 Web 页面中盒模型布局的 CSS 渲染模式,指一个独立的渲染区域或者说是一个隔离的独立容器。

BFC的通俗理解:首先BFC是一个名词,就是一个有特定规则的区域。我们可以理解为一个箱子(实际上是看不见摸不着的),箱子里面物品的摆放是不受外界的影响的。

W3C 规范对此作了详细的描述:

BFC的布局规则(原理/渲染规则)

  1. 计算BFC高度时,浮动元素也会参与计算(清除浮动)

  2. BFC的区域不会与浮动元素的box重叠。(防止浮动文字环绕)

  3. BFC在页面上是一个独立的容器,内外元素不相互影响。(解决外边距重叠问题)

  4. Box垂直方向的距离由margin决定。属于同一个BFC的两个相邻Box的margin会发生重叠。

下面的使用场景会通过这些规则来处理一些实际的问题。

如何创建BFC

括号里面是一些副作用

『注意』

display:table也可以生成BFC的原因在于Table会默认生成一个匿名的table-cell,是这个匿名的table-cell生成了BFC。

并不是任意一个元素都可以被当做BFC,只有当这个元素满足以上任意一个条件的时候,这个元素才会被当做一个BFC

BFC的使用场景

1、清除浮动

浮动的元素会脱离普通文档流,如下,父级容器只剩下2px的边距高度。

CSS盒模型面试题的示例分析

利用overflow: hidden给父级创建BFC之后

CSS盒模型面试题的示例分析

以上方法可以实现清楚浮动,但是还是推荐使用伪类的方式。

为什么要清除浮动?浮动塌陷,包含块没有设置高度或者是自适应的时候、包含块就不能撑起来,变成塌陷的状态。

2、防止浮动文字环绕

有如下文字环绕效果:

CSS盒模型面试题的示例分析

brother-box有部分被浮动元素所覆盖(文本信息不回被浮动元素覆盖),如果想避免元素被覆盖,可利用创建BFC的方法,如给brother-box加overflow: hidden,则可得到以下效果

CSS盒模型面试题的示例分析

『理由』上面的规则二:BFC的区域不会与浮动元素的box重叠

这个方法可以用来实现两列自适应布局,左边的宽度固定,右边的内容自适应宽度。

3、利用BFC解决边距重叠问题

根据前面的边距重合条件来看,想要解决边距重叠,只需要破坏其中的某个触发条件即可,比如创建一个BFC。

根据 BFC 的定义,两个元素只有在同一BFC 内,才有可能发生垂直外边距的重叠,包括相邻元素、嵌套元素。

===============================

要解决 margin 重叠问题,只要让它们不在同一个 BFC 内就行。

===============================

在没有新建BFC时,边距重叠了,margin-bottom + margin-top,应该等于20

CSS盒模型面试题的示例分析

新建了BFC之后

CSS盒模型面试题的示例分析

上面的例子中,为了使两个正方形的外边距不重叠,就给其中一个div包裹一层container,触发BFC。

注意:边距折叠的问题可以用 BFC 来解决,但触发 BFC 并不是解决边距折叠的充分条件,还要得到合理的运用

感谢你能够认真阅读完这篇文章,希望小编分享的“CSS盒模型面试题的示例分析”这篇文章对大家有帮助,同时也希望大家多多支持创新互联,关注创新互联行业资讯频道,更多相关知识等着你来学习!


分享文章:CSS盒模型面试题的示例分析
网页URL:http://tjjierui.cn/article/iggejc.html

其他资讯

在线咨询
服务热线
服务热线:028-86922220
TOP