盒模型BFC渲染机制

2023-11-16

目录

一. BFC基本慨念

二. BFC渲染规则

三. 如何创建BFC元素


一. BFC基本慨念

一个块格式化上下文(block formatting context) 是Web页面的可视化CSS渲染出的一部分。它是块级盒布局出现的区域,也是浮动层元素进行交互的区域。

网页是一个一个盒子组成的,而BFC就是一种css盒模型的渲染规则。

二. BFC渲染规则

  • 以下列举一些比较重要的规则:
  1. 根元素<html>是一个BFC元素。
  2. 在同一个BFC元素中,相邻盒子垂直方向上的margin会发生折叠,取较大的margin值。
  3. BFC元素是一个独立的容器,外部元素和内部元素互不影响。
  4. BFC的区域不会与浮动盒子产生交集,而是紧贴浮动边缘。
  5. 计算BFC的高度时,自然也会检测浮动或者定位的盒子高度。
  6. BFC元素不再和其子元素发生 margin 折叠。
  • 了解上面的规则后,我们就能解释平时会遇到的一些css奇怪现象:

1. 垂直方向上元素margin的合并现象

首先,两个父子关系的div,给子元素添加一个margin-top: 100px后,父元素和子元素同时下移100px。

示例如下:

 代码如下:

<style>
    .parent {
        width: 200px;
        height: 200px;
        background: blue;
    }
    .child {
        width: 100px;
        height: 100px;
        background: yellow;
        margin-top: 100px;
    }
</style>

<body>
    <div class="parent">
        <div class="child"></div>
    </div>
</body>

原因:规则1和规则2


2. 垂直方向上元素margin的合并现象

两个相邻的div之间分别设置了margin-bottom: 60px和margin-top: 40px,而他们实际的间距只有60px。

示例如下:

代码如下 :

<style>
    .box1 {
        width: 200px;
        height: 100px;
        background: blue;
        margin-bottom: 60px;
    }
    .box2 {
        width: 200px;
        height: 100px;
        background: yellow;
        margin-top: 40px;
    }
</style>

<body>
    <div class="box1"></div>
    <div class="box2"></div>
</body>

原因:规则1和规则2


3. overflow:hidden可以清除浮动

本文中所有的“清除浮动"均指清除浮动造成的副作用

首先,两个父子关系的div,给子元素添加float: left后,子元素脱离的文档流,于是父元素的高度为0,如下图:

然后父元素添加 overflow: hidden 就可以清除浮动,如下图:

代码如下:

<style>
    .parent {
        width: 200px;
        border: 4px solid red;
        overflow: hidden;
    }
    .child {
        width: 100px;
        height: 100px;
        background: yellow;
        float: left;
    }
</style>
        
<body>
    <div class="parent">
        <div class="child"></div>
    </div>
</body>

原因:规则1和规则5


4. overflow:hidden 配合浮动,可以实现自适应布局

首先,两个兄弟关系的div在同一个父div中,给子元素1添加float: left后,于是父元素高度由子元素2撑起,子元素2占据所有父元素,子元素1脱离的文档流,如下图:

然后子元素2添加overflow: hidden 后,其紧贴子元素1边缘,不再占据整个父元素,如下图:

代码如下: 

<style>
    .parent {
        width: 100%;
        border: 4px solid red;
    }
    .box1 {
        width: 100px;
        height: 100px;
        background: blue;
        float: left;
    }
    .box2 {
        height: 100px;
        background: yellow;
        overflow: hidden;
    }
</style>
    
<body>
    <div class="parent">
        <div class="box1"></div>
        <div class="box2"></div>
    </div>
</body>

原因:规则1和规则4


三. 如何创建BFC元素

根元素<html>就是最大的BFC容器。

创建BFC元素的方式很多,常见包括:

  • 根元素或其它包含它的元素
  • 浮动元素 (元素的 float 不是 none)
  • 绝对定位元素 (元素具有 position 为 absolute 或 fixed)
  • 内联块 (元素具有 display: inline-block)
  • 表格单元格 (元素具有 display: table-cell,HTML表格单元格默认属性)
  • 表格标题 (元素具有 display: table-caption, HTML表格标题默认属性)
  • 具有overflow 且值不是 visible 的块元素,
  • display: flow-root
  • column-span: all 应当总是会创建一个新的格式化上下文,即便具有 column-span: all 的元素并不被包裹在一个多列容器中。
  • 一个块格式化上下文包括创建它的元素内部所有内容,除了被包含于创建新的块级格式化上下文的后代元素内的元素。

其中常见的还是overflow : hidden产生的。

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

盒模型BFC渲染机制 的相关文章

  • 关于css 中的visibility属性

    关于css中的visibility属性 就在于是否对用户可见 代码小实例
  • visibility 与 overflow

    display 3 属性描述 设置或获取对象是否及如何显示 版本变更 是 语法模板 display none inline block list item inline block table inline table table capt
  • 推荐一个无缝背景花纹资源站-AVA7 PATTERNS

    随着用户显示器分辨率的逐渐增大 网站的背景设计也越来越重要了 如果你的网站背景还在使用单调的白色作为背景 那你也许忽视了那些使用大分辨率的用户 他们看到的是网站内容和一大片白色 今天暴风彬彬要向大家推荐一个背景花纹资源站 AVA7 PATT
  • element-ui走马灯实现图片自适应

    elementUI走马灯实现图片自适应 等比缩放 使得图片缩小不挤压 放大不拉伸变形 解决方法的原理 监听屏幕视口大小如果 resize 发生改变了 就获取图片的高度height 然后渲染到页面 ElementUI 地址 https ele
  • H5 Canvas与SVG的比较

    转载 https www w3school com cn html5 html 5 canvas vs svg asp 两者都能够在在浏览器中绘图 但两者之间还是不一样的 Canvas 通过Javascript来绘制2D图形 是逐像素进行渲
  • css3实现hover颜色,背景色,宽度等平滑变动(transition)

  • 关于css中的z-index 属性

    检索或设置对象的层叠顺序 较大 number 值的对象会覆盖在较小 number 值的对象之上 如两个绝对定位对象的此属性具有同样的 number 值 那么将依据它们在HTML文档中声明的顺序层叠 对于未指定此属性的绝对定位对象 此属性的
  • HTML+CSS项目案例

    文章目录 1 表格练习 2 文本样式练习 3 图片标签练习 4 盒子模型练习一 5 盒子模型练习二 6 盒子模型练习三 7 浮动练习 8 边框练习一 9 边框练习二 10 图文混排 11 列表练习 1 表格练习 案例演示 table tr
  • 表单全选与取消全选

    分析 1 全选和取消全选 让下方所有复选框的checked属性 选中状态 跟随全选按钮 2 下方的所有复选框选中全选按钮才选中 其中一个不选中全选按钮都不选中 每次点击下面的某个复选框都要循环检查下方复选框是否都被选中 flag保存全选按钮
  • Html04_input框中的value/key/placeholder到底是什么

    1 input框中的value值到底是什么 value 属性为 input 元素设定值 input标签有很多类型 也就是type 对于不同的输入类型 value 属性的用法也不同 以下是一些常用type的说明 text 文本框 input默
  • 清除浮动之after伪元素

  • vue 的事件修饰符(v-on, v-model)

    先谈谈我对vue 的一些指令的理解吧 v bind 顾名思义是绑定的意思 但是只能绑定属性 语法糖 而 v on 是绑定一个事件 语法糖 v model 是双向数据的绑定 只能用于表单中 而值得一说的v model 相当于是 v bind
  • HTML5 WebSocket的入门使用

    HTML5 WebSocket 长连接 客户端与服务端可以保持长时间的通信 一 具体步骤 1 创建一个websocket实例 连接远程服务器并且需要一个连接服务器的url let baseUrl ws echo websocket org
  • 在styled-components的样式声明中做px到rem的自动转换

    原文地址 最近在尝试使用styled components来做React下的样式开发 这样可以利用js语言的灵活来增强css的能力 在用styled components处理px到rem的转换时 有点问题了 styled component
  • 前端新人必看的开发技巧之浏览器控制台

    随便进入一个网页 按下F12 都将看到如下的控制台 一 HTML调试 你可以对HTML标签做任何操作 修改它 移动它 删除它 快速定位深层元素 HTML带来的启发 在网页上抓取想要的图片 抓取背景图片 有些图片是在background im
  • 解决谷歌浏览器无法自动播放HTML文件的声音和视频问题的方法

    首先 先检测一下浏览器是否能支持自动播放 点击下方链接进行检测 https video dev github io can autoplay 本人检测的谷歌浏览器结果是 结果显示 谷歌浏览器不能支持有声自动播放视频和音频 包括内联的视频 但
  • 解决Visual Studio Code点击运行出现无法访问此网站

    1 访问后的网页 2 经过检查发现里面多出一个文件 vscode gt launch json 可能是你在运行时打开的窗口有 css文件 这是我猜的 3 把多出的文件夹删除掉 Vscode launch json 把刚才拒绝访问的网页关闭掉
  • 如何将li的前面那个圆点去掉

    只需要将 css样式 的 list style type 属性设置为none即可 代码如下 list style type none span style font size 18px span 下面的代码位于标签内 span style
  • css实现响应式布局

    一 什么是响应式布局 响应式布局指的是同一页面在不同屏幕尺寸下有不同的布局 传统的开发方式是PC端开发一套 手机端再开发一套 而使用响应式布局只要开发一套就够了 响应式设计与自适应设计的区别 响应式开发一套界面 通过检测视口分辨率 针对不同
  • CSS 实现不规则元素的阴影

    大伙在工作中 尤其写页面样式 相信很多地方用到 box shadow 阴影属性 但是这个属性只能用到规则的元素上 亦或者说只能用到一个元素上 那当我们遇到不规则的元素时 想加阴影就比较棘手了 但是 CSS 提供了此问题的解决方案 今天 我们

随机推荐

  • 关于ngx_rtmp_hls_append_sps_pps造成的hls: error appenging SPS/PPS NALs错误

    关于ngx rtmp hls append sps pps造成的hls error appenging SPS PPS NALs错误 一giao我哩giao 今天在调试同rtmp配合nginx推流的时候 发现推live可以推成功 结果在推h
  • 多因素认证与身份验证:分析不同类型的多因素认证方法,介绍如何在访问控制中使用身份验证以增强安全性

    随着数字化时代的到来 信息安全问题变得愈发重要 在网络世界中 用户的身份往往是保护敏感数据和系统免受未经授权访问的第一道防线 单一的密码已经不再足够 多因素认证 MFA 应运而生 成为提升身份验证安全性的重要工具之一 本文将深入探讨不同类型
  • rpm常用命令记录

    文章目录 1 常用rpm命令 2 rpm参数 1 常用rpm命令 rpm ivh xxx rpm 安装rpm rpm Uvh xxx rpm 升级rpm rpm e xxx rpm 删除rpm rpm qi xxx rpm 查看安装包的信息
  • node.js 数据实现分页问题(后端)

    最近在写项目时 碰到的问题 let arr let rows for let e 0 e
  • TCP 和 UDP 的 Socket 调用

    在网络层 Socket 函数需要指定到底是 IPv4 还是 IPv6 分别对应设置为 AF INET 和 AF INET6 另外 还要指定到底是 TCP 还是 UDP TCP 协议是基于数据流的 所以设置为 SOCK STREAM 而 UD
  • live555学习之一整体说明

    live555 是一套采用rtsp协议作为其核心 可以用来传输接收多媒体包括H264 H265 音频等多媒体数据的开源架构代码集 通过扩展一些类的方式 实现rtsp server 和client端的功能 并且提供源码 其源码 可以是从官网
  • python程序封装成exe_手把手教你给Python程序写图形界面,并且打包成exe文件

    环境配置 官网下载Python3 LZ的配置环境是Python3 6 PyCharm 2017 2 1 pip3 install PyQt5 下载PyQt5pip install PyQt5 tools i http pypi douban
  • 【嵌入式Linux】开发环境搭建

    一 概述 在进行某一个芯片平台开发前 一般都需要在电脑上安装一系列软件 然后在这些软件上阅读 编写 编译和调试在该平台上运行的代码 最后将编写好的代码通过某种方式烧录到该芯片的对应地址运行 在电脑上安装的这一系列软件的过程 就是开发环境的搭
  • Python数据类型——字符串、列表、元组

    文章目录 一 字符串 二 列表 三 元组 四 字符串 列表和元组的常用方法 一 字符串 在Python中 可以使用单引号或者双引号来创建字符串 单引号或者双引号没有任何区别 字符串也可以赋值给变量 字符串 str1 字符串 str2 字符串
  • Android Studio使用常见问题(一)

    一 无法成功build 1 出现如下错误 Error Unable to tunnel through proxy Proxy returns HTTP 1 1 400 Bad Request 2 原因分析 本地gradle版本与项目制定的
  • php代码学习(二)绕过空白过滤

    绕过空白过滤
  • 华为OD社招面试(技术二面完)--总结复盘

    2020年4月22日 华为OD社招面试复盘总结 一 华为OD简介 首先来解释一下什么是华为OD面试 OD一般是指的是华为的 外包 公司 比如像德科这种 网上其实有很多人都吐槽过这个招聘模式 因为招进去的人不直接是华为内部的人 挂在德科名下或
  • windows批处理:if else的踩坑点及排版优化

    参考 https www jianshu com p f0bde7d355a4 总结 见参考文章
  • python提取excel一列或多列数据另存为新表(1)

    系列文章目录 文章目录 系列文章目录 前言 一 python提取excel指定一列保存到新表 二 python提取excel指定两列保存到新表 总结 前言 一 python提取excel指定一列保存到新表 原数据举例如下 提取B列另存到新表
  • DFS深度优先搜索

    目录 一 DFS的概念 DFS的定义 DFS的搜索方式 DFS采用的数据结构 DFS的特点 二 DFS的实战应用 1 排列数字 2 n 皇后问题 一 DFS的概念 DFS的定义 DFS Depth First Search 深度优先搜索 是
  • 阈值分割法

    阈值分割法可以说是图像分割中的经典方法 它利用图像中要提取的目标与背景在灰度上的差异 通过设置阈值来把像素级分成若干类 从而实现目标与背景的分离 一般流程 通过判断图像中每一个像素点的特征属性是否满足阈值的要求 来确定图像中的该像素点是属于
  • chatGPT插件是什么,chatGPT插件作用介绍

    简介 openAI团队已经在 ChatGPT 中实现了对插件的初步支持 插件是专门为以安全为核心原则的语言模型设计的工具 可帮助 ChatGPT 访问最新信息 运行计算或使用第三方服务 目前体验与开发需要先加入等候名单 官网介绍链接 htt
  • java中如何导入同一个包下其他类文件中的方法,举个例子

    在 Java 中 可以使用 import 关键字导入同一个包下的其他类文件中的方法 例如 假设在同一个包 com example 下有两个类 ClassA 和 ClassB 那么可以在 ClassB 中导入 ClassA 中的方法 代码如下
  • LeetCode:二叉树的遍历方式(13道经典题目)

    LeetCode 二叉树的遍历方式 13道经典题目 本文带来与二叉树的遍历方法有关的经典题目 主要实现是C 144 二叉树的前序遍历 94 二叉树的中序遍历 145 二叉树的后序遍历 102 二叉树的层序遍历 107 二叉树的层序遍历 II
  • 盒模型BFC渲染机制

    目录 一 BFC基本慨念 二 BFC渲染规则 三 如何创建BFC元素 一 BFC基本慨念 一个块格式化上下文 block formatting context 是Web页面的可视化CSS渲染出的一部分 它是块级盒布局出现的区域 也是浮动层元