【前端学习之HTML&CSS进阶篇】-- CSS第二篇 -- 块级格式化上下文与堆叠上下文

【前端学习之HTML&CSS进阶篇】-- CSS第二篇 – 块级格式化上下文与堆叠上下文


本文具体内容参考了B站渡一教育的课程,原课程链接如下:
渡一教育课程

lc

前言

html与css以及今后我们将会学到的js共同构成了前端技术中最重要的三种语言,在学习过程中,我们首先从html出发,在html的学习过程中深入了解css。在上一节博客中,我们进入了CSS进阶部分的学习,本节的内容则主要专注于对于BFC和stack context的学习。

一、 块级格式化上下文

1. 概念

  • Block Formatting Context简称BFC,是一块独立的渲染区域,规定了在区域中,常规流块盒的布局;

在这里插入图片描述

2. 常规流块盒布局:

  • 视觉格式化模型包含了块级格式化上下文,而块级格式化上下文规定了下述规则:
  1. 常规流块盒在水平方向上,必须撑满包含块;
  2. 常规流块盒在包含块的垂直方向上依次摆放;
  3. 常规流块盒若外边距无缝相邻,外边距合并;
  4. 常规流块盒的自动高度和摆放位置,无视浮动和定位元素;

3. BFC渲染区域:

由某个HTML元素创建,以下元素会在其内部创建BFC区域:

  1. 根元素:HTML元素,该元素创建的BFC区域覆盖了网页中的所有元素;
  2. 浮动和绝对定位元素
  3. 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. 创建堆叠上下文的元素

  1. html元素(根元素)
  2. 设置了z-index数值【非auto】的定位元素(position)

(类似于块级格式化上下文)
注意:设置了z-index的元素仍然处于根元素或上一级设置的元素的上下文中,只是它的内部子元素在他自己本身创造的堆叠上下文中;

2. 同一个堆叠上下文中元素在Z轴上的排列

从后到前的排列顺序

在这里插入图片描述

  1. 创建堆叠上下文的元素的背景和边框(远离用户)
  • HTML的背景永远最远离用户,即在最底层;
  • 即创建了堆叠上下文的元素考虑时比z-index等规则优先级高;
  1. 堆叠级别为负值的堆叠上下文
  • 即比较z-index
  • 情况相同:源次序后边的覆盖前面的
  1. 常规流非定位的块盒

  2. 非定位的浮动盒子

  3. 常规流非定位的行盒

  4. 任何z-index是auto的定位子元素,以及z-index是0的堆叠上下文

  5. 堆叠级别为正值的堆叠上下文

每个堆叠上下文,独立于其他堆叠上下文,他们之间不能相互穿插;
也就是说先比较整体堆叠上下文,在利用内部规则对比;

总结

本节内容主要是块级格式化上下文的生成和计算规则以及堆叠上下文的应用,对于BFC区域原理的掌握是实现自己想要样式的必备之课,而Z-index的内容也是十分重要的关键样式之一。

在这里插入图片描述

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

生如昭诩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值