【前端学习之HTML&CSS进阶篇】-- CSS第二篇 – 块级格式化上下文与堆叠上下文
文章目录
本文具体内容参考了B站渡一教育的课程,原课程链接如下:
渡一教育课程
前言
html与css以及今后我们将会学到的js共同构成了前端技术中最重要的三种语言,在学习过程中,我们首先从html出发,在html的学习过程中深入了解css。在上一节博客中,我们进入了CSS进阶部分的学习,本节的内容则主要专注于对于BFC和stack context的学习。
一、 块级格式化上下文
1. 概念
- Block Formatting Context简称BFC,是一块独立的渲染区域,规定了在区域中,常规流块盒的布局;
2. 常规流块盒布局:
- 视觉格式化模型包含了块级格式化上下文,而块级格式化上下文规定了下述规则:
- 常规流块盒在水平方向上,必须撑满包含块;
- 常规流块盒在包含块的垂直方向上依次摆放;
- 常规流块盒若外边距无缝相邻,外边距合并;
- 常规流块盒的自动高度和摆放位置,无视浮动和定位元素;
3. BFC渲染区域:
由某个HTML元素创建,以下元素会在其内部创建BFC区域:
- 根元素:HTML元素,该元素创建的BFC区域覆盖了网页中的所有元素;
- 浮动和绝对定位元素
- overflow不等于visible的块盒【display=table、inline-block的也是】
图示:
4. 独立:
不同的BFC区域,渲染时互不干扰;
创建了BFC的元素,隔绝了它内部和外部的联系,内部的渲染不会影响到外部,具体规则如下:
创建BFC的元素,自动高度需要计算浮动元素;
举个例子:当出现高度坍塌时,是因为常规流的块盒不会考虑内部浮动元素的高度,导致认为内部高度为0,实现坍塌,现在我们只要让外部的这个块盒生成BFC,那么就会计算高度了;
例如可以让块盒实现绝对定位或者浮动【不推荐、有副作用】--- 创建BFC即可;
更改overflow属性 --- 推荐,改成hidden等即可;
创建BFC的元素,边框盒不会与浮动元素重叠;
.float{
float: left;
width: 200px;
height: 200px;
margin: 20px;
background-color: red;
}
.container{
height: 500px;
background-color: #008c8c;
/* BFC */
overflow: hidden;
}
<div class="float"></div>
<div class="container"></div>
-
常规流盒子不创建BFC:
-
创建BFC:自动避让浮动元素,在不设置宽度时,就会出现自适应的效果,此时右边盒子的margin-left无用,想要间隔拉大,需要增加左边浮动盒子的margin-right:
创建BFC的元素,不会与子元素进行外边距合并//处在不同BFC区域的元素,外边距不合并:
.container{
background-color: #008c8c;
height: 500px;
margin-top: 30px;
/* BFC */
overflow: hidden;
}
.child{
height: 100px;
margin: 50px;
background-color: red;
}
<div class="container">
<div class="child"></div>
</div>
-
当子元素和外部元素在同BFC区域内,外边距合并,如图所示上方黄色区域50px证明边距合并,选取更大值50px作为标准:
-
当子元素处于父元素创造的BFC中,而父元素处于根元素的BFC中,故边距不合并,如图:
二、 堆叠上下文
栈/堆叠/层叠上下文(stack context):
- 概念:它是一块区域,这块区域由某个元素创建,它规定了该区域中的内容在Z轴上的排列先后顺序;
【z轴:从屏幕穿向人】
1. 创建堆叠上下文的元素
- html元素(根元素)
- 设置了z-index数值【非auto】的定位元素(position)
- …
(类似于块级格式化上下文)
注意:设置了z-index的元素仍然处于根元素或上一级设置的元素的上下文中,只是它的内部子元素在他自己本身创造的堆叠上下文中;
2. 同一个堆叠上下文中元素在Z轴上的排列
从后到前的排列顺序
- 创建堆叠上下文的元素的背景和边框(远离用户)
- HTML的背景永远最远离用户,即在最底层;
- 即创建了堆叠上下文的元素考虑时比z-index等规则优先级高;
- 堆叠级别为负值的堆叠上下文
- 即比较z-index
- 情况相同:源次序后边的覆盖前面的
-
常规流非定位的块盒
-
非定位的浮动盒子
-
常规流非定位的行盒
-
任何z-index是auto的定位子元素,以及z-index是0的堆叠上下文
-
堆叠级别为正值的堆叠上下文
每个堆叠上下文,独立于其他堆叠上下文,他们之间不能相互穿插;
也就是说先比较整体堆叠上下文,在利用内部规则对比;
总结
本节内容主要是块级格式化上下文的生成和计算规则以及堆叠上下文的应用,对于BFC区域原理的掌握是实现自己想要样式的必备之课,而Z-index的内容也是十分重要的关键样式之一。