BFC定义及其应用

BFC

BFC 的定义

浮动元素和绝对定位元素,非块级盒子的块级容器(例如 inline-blocks,table-cells 和 table-captions),以及 overflow 值不为“ visible ”的块级盒子,都会创建 BFC(块格式化上下文)。

BFC 特点

  • 元素的布局不受外界影响,往往利用其来消除浮动。
  • 在一个BFC中,块盒与行盒(行盒由一行中所有的内联元素所组成)都会垂直的沿着其父元素的边框排列。

BFC 的应用

在网站中,经常会使用一种,左边图片+右边信息的两栏结构,下面利用 BFC 来实现。

首先代码如下:

<style>
  .box {width:210px;border: 1px solid #000;float: left;}
  .img {width: 100px;height: 100px;background: #696;float: left;}
  .info {background: #ccc;color: #fff;}
  p{margin: 0;}
</style>

<div class="box">
  <div class="img">image</div>
  <p class="info">信息信息信息信息信息信息信息信息信息信息信息信</p>
</div>

在这里插入图片描述

当文字增多时,会打破左右布局的情况:

在这里插入图片描述

当然这是因为文字受到了浮动元素的影响,如果我们仍需要保持左右布局的话,可以为p元素创建一个 BFC,使其消除对外界浮动元素的影响。创建 BFC 的方法在定义时已经说明,所以在此我们可以为info类添加overflow:hidden 样式:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aOpw1Zb7-1588121596203)(img/image-20200428201846483.png)]

另外 BFC 主要的应用有两个:解决 margin 折叠问题清除浮动

margin 折叠

合并外边距与 BFC(或者 margin 叠加)

在CSS当中,相邻的两个盒子(可能是兄弟关系,也可能是祖先关系)的外边距可以结合成一个单独的外边距。这种合并外边距的方式称为折叠,并且因而所结成的外边距称为折叠外边距。

折叠的结果:
  1. 两个相邻的外边距都是正数时,折叠结果取决于它们两者之间较大的值。
  2. 两个相邻外边距都是负数时,折叠结果取决于他俩者绝对值较大的值。
  3. 两个相邻外边距一正一负时,折叠结果是两者之和。
产生折叠的必备条件:margin 必须是邻接的。

必须满足以下条件才能证明两个margin是邻接的:

  • 必须是处于常规文档流(非float和绝对定位)的块级盒子,并且处于同一个 BFC 中。
  • 没有线盒,没有空隙(clearance),没有padding和border将他们分隔开
  • 都属于垂直方向上相邻的外边距,比如下面的任意一种情况:
    • 元素的margin-top与其第一个常规文档流的子元素的margin-top
    • 元素的margin-top与其下一个常规文档流的兄弟元素margin-top
    • height为auto的元素的margin-bottom与其最后一个常规文档流的子元素的margin-bottom
    • 高度为0并且最小高度也为0,不包含常规文档流的子元素,并且自身没有建立新的BFC的元素的margin-top和margin-bottom
以上的条件意味着下列的规则:
  • 创建了新的BFC元素(例如浮动元素或者overflowvisible以外的元素)与它的子元素的外边距不会折叠
  • 浮动元素不与任何元素的外边距产生折叠。
  • 绝对定位元素不与任何元素的外边距产生折叠。
  • inline-block元素不与任何元素的外边距产生折叠
  • 一个常规文档流元素的margin-bottom与它下一个常规文档流的兄弟元素的margin-top会产生折叠,除非他们之间存在间隙(clearance)。
  • 一个常规文档流元素的margin-top与其第一个常规文档流子元素的margin-top会产生折叠,条件为父元素不包含padding和border,子元素不包含clearance。
  • 一个’height’为’auto’并且’min-height’为’0’的常规文档流元素的margin-bottom会与其最后一个常规流子元素的margin-bottom折叠,条件为父元素不包含padding和border。
  • 一个不包含border-top、border-bottom、padding-top、padding-bottom的常规文档流元素,并且其 ‘height’ 为 0 或 ‘auto’, ‘min-height’ 为 ‘0’,其里面也不包含行盒(line box),其自身的 margin-top 和 margin-bottom 会折叠。

以上内容摘选自文献1

清除浮动

  • 触发浮动元素父元素的BFC,使其能够包含浮动元素
    • 给父元素添加 overflow:hidden 样式
    • 给父元素设置为浮动元素或者绝对定位
    • 给父元素添加 display:inline-block
  • 利用 clear 属性来闭合元素
    • 在浮动元素后添加一个空元素,空元素样式为 clear:both
    • 给受到浮动影响的元素添加 clear:both样式
    • 给浮动元素父元素添加伪元素 :after{content: '';display: block;clear: both;}

文献

### 如何配置解决问题 Linux 虚拟机 ens33 网卡设置 #### 关闭 NetworkManager 服务 对于某些情况下的网络连接问题,可以通过停止 `NetworkManager` 来解决。这一步骤能够防止该服务干扰其他手动设定的网络参数。 ```bash systemctl stop NetworkManager ``` 为了确保此更改持久化,还需要禁用 `NetworkManager` 的自启动功能: ```bash systemctl disable NetworkManager ``` #### 启动基础网络服务 在网络管理器被停用之后,应当激活基本的网络服务来恢复系统的联网能力。 ```bash systemctl start network.service ``` 此时应能观察到 `ens33` 接口已正常工作[^2]。 #### 设置网卡开机自动加载 针对长期存在的网卡未能随系统一同初始化的情况,编辑 `/etc/sysconfig/network-scripts/ifcfg-ens33` 文件中的特定选项可实现自动化配置。具体操作如下:找到并修改 `ONBOOT=no` 行为 `ONBOOT=yes` ,从而允许操作系统在引导过程中自动启用对应的物理接口[^3]。 #### 使用命令行工具快速修复 当面临突然消失的网卡时,可以借助于命令行界面提供的简便指令迅速排查状况。例如,在 CentOS 8 中输入以下命令开启网络管理功能,并尝试重新上线指定名称的连接对象;而在较旧版本的操作系统上,则可能需要采用不同的语法结构来进行相同的操作。 CentOS 8: ```bash nmcli n on ``` CentOS 7 或更早版本: ```bash nmcli c up ens33 ``` 这些措施有助于即时恢复丢失的网络适配器可见性功能性[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值