08-高度塌陷与BFC

浮动布局与BFC:解决高度塌陷与边距重叠
本文详细介绍了浮动布局中出现的高度塌陷问题及其原因,探讨了BFC(Block Formatting Context)的概念和开启方法,如设置浮动、行内块和overflow非visible值。此外,还讲解了如何通过clear属性和伪元素选择器`:after`来清除浮动影响和解决高度塌陷。最后,提到了clearfix类在解决高度塌陷和垂直布局边距重叠问题上的应用。

高度塌陷与BFC

1.高度塌陷

在浮动布局中,父元素的高度默认是被子元素撑开的

当子元素浮动后,其会完全脱离文档流,子元素从文档流中脱离将会无法撑起父元素的高度,导致父元素的高度丢失

父元素高度丢失以后,其下的元素会自动上移,导致页面的布局混乱

注意:所以高度塌陷是浮动布局中比较常见的一个问题,这个问题我们必须要进行处理!
请添加图片描述

2.BFC

BFC(Block Formatting Context)块级格式化环境

  • BFC是一个CSS中的一个隐含的属性,可以为一个元素开启BFC
  • 开启BFC该元素会变成一个独立的布局区域

元素开启BFC后的特点

  • 不会被浮动元素覆盖
  • 父子元素外边距不会重叠
  • 可以包含浮动的元素

开启方法:

  1. 设置为浮动
  2. 设置为行内块
  3. 设置overflow为非visible
  • 设置为浮动(不推荐):很明显下方元素被覆盖了,总不能让所有元素都浮动吧请添加图片描述

  • 设置为行内块元素(不推荐):不再独占一行,宽度变了,同时与下方元素产生了一点空隙请添加图片描述

  • 设置overflow为非visible值:既没有覆盖元素,也保持了独占一方的特性(保持了宽度),与下方元素也保持了最初的间隙

    常用的方式为元素设置overflow:hiddenoverflow:auto也是ok的) 开启其BFC, 以使其可以包含浮动元素

    overflow:scroll会有滚动条,可能并不需要的,所以不太推荐
    请添加图片描述
    请添加图片描述

开启还有其他方法吗?有!非常多!

开启方式都是间接启动的,而且每个开启方式都会有瑕疵
在这里插入图片描述

3.clear 清楚浮动影响

作用: 清楚浮动元素对当前元素的影响

本质上就是为元素添加一个margin-top的属性,值由浏览器自动计算

可选值

  • left 清楚左侧浮动元素对当前元素的影响
  • right清楚右侧浮动元素对当前元素的影响
  • both 清楚两侧中影响较大的一侧元素的影响(注意是较大的一侧,而不是说左右两个都清楚)
    请添加图片描述

4.after 解决塌陷

高度塌陷,不仅可以用 overflow: hidden等可以为元素开启BFC来解决

还有一种更好的方法
伪元素选择器::after ,在元素的最后添加元素,然后令其clear清楚浮动,就可以解决塌陷的问题
示例

.box1::after{
	content:''; //结尾添加一个空白元素
	clear:both;  //令其不受浮动影响
	display:block; //因为默认情况下::after伪元素是一个行内元素,如果不转为块元素,将仍然撑不起box1的高度
}

请添加图片描述

5.clearfix 解决垂直布局中边距重叠问题

之前我们说过垂直布局中边距重叠的问题:相邻的垂直方向外边距会发生重叠现象

子元素设置了一个margin-top之后,父元素跟随子元素一起进行了移动

即我们之前说的父子元素间相邻外边距,子元素会传递给父元素(上外边距)
请添加图片描述

解决这个问题
用伪元素选择器::before

在子元素的前面添加一个空元素,并设置为table

完美!
请添加图片描述

2. clearfix既解决高度塌陷由解决垂直布局中边距重叠问题

当你在遇到这些问题时,直接使用clearfix这个类即可,他就可以帮你轻松搞定css中的两大难题

.clearfix::before,
.clearfix::after{
    content: '';
    display: table;
    clear: both;
}

请添加图片描述

### 什么是 BFC(Block Formatting Context)? BFC(Block Formatting Context)即块级格式化上下文,是 CSS 中的一个渲染机制。它是一个独立的布局区域,内部的元素按照特定的规则进行布局,并且外部的元素互不影响。可以将 BFC 看作是一个封闭的容器,其内部的布局不会影响到外部的元素。BFC 的主要作用是控制块级元素的布局行为,并解决一些常见的布局问题,例如高度塌陷、外边距重叠等。 ### BFC 的布局规则 BFC 具有以下特性: 1. **内部的块级元素会在垂直方向上依次排列**。 2. **每个块级元素的 margin-box 的左边会紧贴容器的左边**,即使存在浮动元素,也不会重叠。 3. **BFC 的区域不会浮动元素重叠**。 4. **BFC 是一个隔离的独立容器,内部元素的布局不会影响外部元素**。 5. **BFC 可以包含浮动元素**,这是解决高度塌陷问题的关键特性之一[^3]。 ### 高度塌陷问题 BFCCSS 布局中,当父元素内部的子元素使用了浮动(`float`)后,这些子元素会脱离文档流,导致父元素的高度无法被撑开,这种现象称为**高度塌陷**。高度塌陷会导致页面布局混乱,因此需要通过一些方式来解决。 BFC 可以解决高度塌陷问题,因为它能够包含浮动元素。通过为父元素创建一个 BFC,可以使其内部的浮动元素不会脱离文档流,从而撑开父元素的高度[^2]。 ### 如何解决 BFC 导致的高度塌陷问题? 解决高度塌陷问题的核心方法是**为父元素开启 BFC**。以下是几种常见的方法: #### 1. 使用 `overflow` 属性 为父元素设置 `overflow` 属性为非 `visible` 的值,例如 `hidden`、`auto` 或 `scroll`,可以开启 BFC。 ```css .parent { overflow: hidden; } ``` 这种方法简单且有效,是最常用的解决高度塌陷的方式之一。 #### 2. 使用 `display` 属性 将父元素的 `display` 属性设置为 `inline-block`、`flex`、`table-cell` 或 `inline-flex` 也可以开启 BFC。 ```css .parent { display: inline-block; } ``` 需要注意的是,使用 `inline-block` 可能会导致一些额外的空白间隙问题,需要通过设置 `font-size: 0` 或其他方式来解决[^3]。 #### 3. 使用 `position` 属性 将父元素的 `position` 属性设置为 `absolute` 或 `fixed` 也可以开启 BFC。 ```css .parent { position: absolute; } ``` 这种方法会将元素脱离文档流,可能会影响其他元素的布局,因此需要谨慎使用[^3]。 #### 4. 使用 `float` 属性 将父元素本身设置为浮动元素也可以开启 BFC。 ```css .parent { float: left; } ``` 这种方法虽然有效,但会导致父元素脱离文档流,因此不推荐使用[^3]。 ### 示例代码 以下是一个使用 `overflow: hidden` 解决高度塌陷问题的示例: ```html <!DOCTYPE html> <html lang="ch"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <style> .outer { border: 10px red solid; overflow: hidden; /* 开启 BFC */ } .inner { width: 100px; height: 100px; background-color: #bbffaa; float: left; /* 子元素浮动 */ } </style> </head> <body> <div class="outer"> <div class="inner"></div> </div> </body> </html> ``` 在这个示例中,通过为父元素 `.outer` 设置 `overflow: hidden`,开启 BFC,从而解决了子元素浮动导致的高度塌陷问题。 ### 总结 通过为父元素开启 BFC,可以有效解决高度塌陷问题。常用的方法包括使用 `overflow` 属性、`display` 属性、`position` 属性或 `float` 属性。其中,使用 `overflow: hidden` 是最简单且最常用的方式。选择合适的方法取决于具体的布局需求和设计目标。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值