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

相关推荐
KO想偷懒4 分钟前
第8章利用CSS制作导航菜单
前端·css
昼夜ɑː7 分钟前
第8章利用CSS制作导航菜单
前端·css
Jiaberrr14 分钟前
uniapp中使用原生ajax上传文件并携带其他数据,实时展示上传进度
前端·javascript·vue.js·ajax·uni-app
小牛itbull43 分钟前
ReactPress:深入解析技术方案设计与源码
javascript·react.js·reactpress
alexbai!44 分钟前
el-date-picker picker-options属性中disabledDate设置时间的禁用和启用,并且支持到时分秒的禁用和启用
javascript·vue.js·elementui
秃头女孩y1 小时前
【React】条件渲染——逻辑与&&运算符
前端·react.js·前端框架
学无止境鸭1 小时前
vue读取本地excel文件并渲染到列表页面
前端·javascript·vue.js
不cong明的亚子1 小时前
在vue中,完成@wangeditor/editor组件的大数据量加载,解决卡顿
前端·vue.js
原机小子1 小时前
Spring Boot编程训练系统:前端与后端集成
前端·spring boot·后端
小满zs1 小时前
React第十五章(useEffect)
前端·react.js