深入理解浮动和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布局是非常重要的。

相关推荐
好看资源平台6 分钟前
前端框架对比与选择:如何在现代Web开发中做出最佳决策
前端·前端框架
4triumph8 分钟前
Vue.js教程笔记
前端·vue.js
程序员大金25 分钟前
基于SSM+Vue+MySQL的酒店管理系统
前端·vue.js·后端·mysql·spring·tomcat·mybatis
清灵xmf28 分钟前
提前解锁 Vue 3.5 的新特性
前端·javascript·vue.js·vue3.5
Jiaberrr34 分钟前
教你如何在微信小程序中轻松实现人脸识别功能
javascript·微信小程序·小程序·人脸识别·百度ai
白云~️41 分钟前
监听html元素是否被删除,删除之后重新生成被删除的元素
前端·javascript·html
2401_8644769342 分钟前
无线领夹麦克风哪个降噪好?一文搞懂麦克风什么牌子的音质效果好
javascript·git·sql·github·mssql
金灰1 小时前
有关JS下隐藏的敏感信息
前端·网络·安全
Yxmeimei1 小时前
css实现居中的方法
前端·css·html
6230_1 小时前
git使用“保姆级”教程2——初始化及工作机制解释
开发语言·前端·笔记·git·html·学习方法·改行学it