深入理解浮动和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 分钟前
普通 html 项目引入 tailwindcss
前端·html·tailwindcss
钢铁男儿2 小时前
C# 类成员与访问修饰符:面向对象编程的核心概念解析
java·javascript·c#
立秋67892 小时前
3D人物关系图开发实战:Three.js实现自动旋转可视化图谱(附完整代码)
开发语言·javascript·3d
lh_12543 小时前
前端 uni-app 初步使用指南
前端·arcgis·uni-app
患得患失9493 小时前
【前端】【面试】在 Nuxt.js SSR/SSG 应用开发的 SEO 优化方面,你采取了哪些具体措施来提高页面在搜索引擎中的排名?
前端·javascript·搜索引擎
layman05283 小时前
ES6/ES11知识点 续二
前端·ecmascript·es6
ejinxian4 小时前
npm,yarn,pnpm,cnpm,nvm,npx包管理器常用命令
前端·npm·pnpm·yarn·nvm·npx
爱编程的鱼4 小时前
C# 运算符重载深度解析:从基础到高阶实践
前端·算法·c#
大道归简5 小时前
自动化实现web端Google SignUp——selenium
前端·selenium·自动化
普通young man6 小时前
QT | 常用控件
开发语言·前端·qt