深入理解浮动和BFC

浮动

  • 浮动是一种常见的CSS属性,它可以使元素脱离文档流并进行特殊布局。下面是浮动的几个特点:
  1. 脱离文档流:浮动的元素将不再占据文档流中的空间,其他元素会忽略它的存在。这使得浮动元素可以在文档中自由地定位。
  2. 文字环绕:浮动元素可以使文本环绕在它的周围,达到视觉上的效果。
  3. 同行显示:浮动元素可以让块级元素在一行显示,而不是垂直排列。
  4. 可以设置宽高:浮动可以让行内元素也可以设置宽高,这使得行内元素可以像块级元素一样布局。
  5. 可以使用margin,但不能使用margin: 0 auto:浮动元素可以使用margin来设置外边距,但是无法使用margin: 0 auto来水平居中。

清除浮动

  • 浮动的布局可能会导致父容器塌陷或子元素溢出的问题。为了解决这些问题,我们可以使用以下几种方法来清除浮动:
  1. 给父容器设置高度:通过给父容器设置一个固定高度,来避免父容器塌陷的问题。这种方法比较简单,但是需要提前知道容器的高度。
  2. 增加子容器,在子容器身上清除浮动:可以在父容器内增加一个新的子容器,然后对该子容器应用清除浮动的样式,例如使用clear: both。
  3. 借助伪元素 after 来清除浮动:在父容器的样式中添加伪元素:after,然后对该伪元素应用清除浮动的样式,例如使用clear: both,这样可以避免添加额外的标签。
  4. BFC(块级格式化上下文):BFC是一种特殊的渲染环境,可以对浮动进行隔离,避免布局问题。接下来将详细介绍BFC。

请看以下代码(只截取部分,注意区分): 我们在body中放入俩个块级元素 ul、div,ul中三个块级元素li。当我们给它们设置一些基础的css样式时(list-style: none 用于消除li前的点),发现它如下图所示

css 复制代码
ul li{
            list-style: none;
            width: 200px;
            height: 100px;
            background-color: #8fe418;
        }
.content{
            width: 100%;
            height: 200px;
            background-color: #ec6110;
        }
        
        
<body>
    <ul class="clear">
        <li>1</li>
        <li>2</li>
        <li>3</li>
        <!-- <div class="clear"></div> -->
    </ul>
    <div class="content"></div>
</body>

当我们给ul li设置float属性:float: left; 会发现:

他们紧紧排列在了一行中(行内块级元素),这时候我们称li 脱离了文档流。在二维的视角里,它就像是盖在了 content 上,我们引入三维视角能更好理解它,就是它其实是悬浮在content上的(为了理解,并不是真的这样),你li跟我content不是一个level了。

css 复制代码
 ul{   /*清除浮动第一式*/
            height: 100px;
} 
        
 .clear{  /*清除浮动第二式*/
            clear: left;
} 
        
/*小技巧:在使用该方法时,可以在::after前面加一个.clear,相当于我提前给这个样式规定好了
只清除clear的浮动,当我们需要清除浮动时,需要在同级创建一个类名为clear的div盒子。
如上诉第19行。*/
.clear::after{
    content: '';
    clear: both;
    display: block;
}

这样就达到了我们想要的效果。

BFC(块级格式化上下文)

BFC是一种CSS渲染环境,它可以对浮动进行隔离,使内部元素与外部元素相互隔离,不会相互影响。以下是创建BFC的几种方式:

  1. 浮动:通过给元素设置float: left 或 float: right来触发BFC。该元素即会脱离文档流,同时也会创建一个BFC环境。
  2. 定位:通过给元素设置position: absolute 或 position: fixed来触发BFC。
  3. 行内块:通过给元素设置display: inline-block来触发BFC。
  4. 表格单元:通过给元素设置display: table-cell来触发BFC。
  5. overflow: auto || hidden || scroll:通过给元素设置overflow属性值为auto、hidden或scroll来触发BFC。
  6. 弹性盒子:通过给元素设置display: flex 或 display: inline-flex来触发BFC。

BFC容器具有以下特征:

  1. 内部盒子也会按照文档流的顺序排列,并不会被浮动元素覆盖或溢出。
  2. BFC容器在计算高度时,会将内部浮动的子元素的高度也计算在内,从而避免父容器塌陷的问题。
  3. BFC可以解决外边距重叠的问题,使得相邻的块级元素的外边距不会互相合并。

通过合理使用浮动和BFC,我们可以实现复杂的布局和解决一些常见的布局问题。深入理解这些概念对于掌握CSS布局是非常重要的。

相关推荐
万少7 小时前
HarmonyOS 开发必会 5 种 Builder 详解
前端·harmonyos
橙序员小站10 小时前
Agent Skill 是什么?一文讲透 Agent Skill 的设计与实现
前端·后端
炫饭第一名12 小时前
速通Canvas指北🦮——基础入门篇
前端·javascript·程序员
王晓枫12 小时前
flutter接入三方库运行报错:Error running pod install
前端·flutter
符方昊12 小时前
React 19 对比 React 16 新特性解析
前端·react.js
ssshooter12 小时前
又被 Safari 差异坑了:textContent 拿到的值居然没换行?
前端
曲折13 小时前
Cesium-气象要素PNG色斑图叠加
前端·cesium
Forever7_13 小时前
Electron 淘汰!新的桌面端框架 更强大、更轻量化
前端·vue.js
Angelial13 小时前
Vue3 嵌套路由 KeepAlive:动态缓存与反向配置方案
前端·vue.js
jiayu13 小时前
Angular学习笔记24:Angular 响应式表单 FormArray 与 FormGroup 相互嵌套
前端