1.BFC 实际上是一个页面中,相对独立的容器,不会影响外面的子元素。
2.BFC 内部中,块元素按照垂直方向排列,行内元素按照从左向右排序。
3.BFC 与浮动元素不叠加,解决浮动元素对布局的影响。 4.开启 BFC 的元素不会被浮动元素所覆盖 5.开启 BFC 的元素可以包含浮动的子元素 6.计算 BFC 高度时,浮动元素也参与计算。 解决了因浮动导致高度塌陷问题 。
1、浮动元素,float 除 none 以外的值,left 或者 right …其他的
2、设置元素绝对定位 position: absolute(或者 fixed)
3、display 为以下其中之一的值 inline-blocks,table-cells,table-captions
4、将元素的 overflow 设置为一个非 visible 的值,hidded、auto、scroll
margin 塌陷问题:在标准文档流中,块级标签之间竖直方向的 margin 会以大的为准,这就是 margin 的塌陷现象。可以用 overflow:hidden 产生 bfc 来解决

实例代码
<style>.container {overflow: hidden;border: 0.2em solid;background-color: cornsilk;padding: 1em;}.contner {float: left;}</style></head><body><div class="container"><div class="contner"><img src="/09/02.png" alt=""></div><p>免费课程初识HTML(5)+CSS(3)</p></div>
解决问题后

相邻两个元素在垂直方向上外边距会有折叠,当父级转换为 BFC 后,就解决了垂直方向上外边距折叠的问题。
创建BFC是针对父容器,它划定独立王国的边界,如2个div相邻,外边距折叠了,此时在任何一个div上创建BFC,外边距仍然是折叠的。要给其中一个div套个父容器,指明其父容器为BFC才可以防止这2个div外边距折叠。
BFC内所有子孙元素(包括 浮动元素 )都被限定在内容区content(为了显示 这个,上面案例中对背景进行裁切,灰色表示内容区,灰色与边距之间就是padding,它是透明的),可以清除浮动给布局和容器高度的影响。而定位元素则不受BFC影响。
实例图

实例代码
<style>.container {overflow: hidden;border: 0.2em dotted;}.fole {overflow: hidden;}.box.box1 {width: 5em;height: 5em;background-color:lightskyblue;color: white;margin-bottom: 1em;}.box.box2 {width: 5em;height: 5em;background-color:lightskyblue;color: white;margin-top: 2em;}</style></head><body><div class="container"><div class="fole"><div class="box box1">第一个盒子</div></div><div class="box box2">第二个盒子</div></div>
在一个容器内图文混排的时候,图片元素进行浮动,文字会包裹图片进行排列。如果给另一个元素创建了 BFC 后,文字将不再包裹图片进行排列,非常利于浮动后的页面布局
实例代码
<style>img {float: left;}.container > p {overflow: hidden;}</style></head><body><div class="container"><img src="/09/202.jpg" alt=""><p>体系课-数据可视化入门到精通-打造前端差异化竞争力体系课-数据可视化入门到精通-打造前端差异化竞争力体系课-数据可视化入门到精通-打造前端差异化竞争力体系课-数据可视化入门到精通-打造前端差异化竞争力体系课-数据可视化入门到精通-打造前端差异化竞争力</p></div>
实例图

- BFC,我们需要记得它的特性:独立空间、父容器
- BFC、子元素都限制在 padding 内、子元素外边距都限制在 border 内,能解决浮动元素带来的高度塌陷和布局的影响,能防止外边距折叠,以及实现浮动下,图文混排元素相互间不影响和重叠。
flex-flow简写是包括flex-direction和flex-wrap两个,在实际应用中我一般都是分开来写。主轴方向可取:row、column,row-reverse、column-reverse。而换行则分为换行wrap和不换行nowrap。

主轴方向上一行的所有项目为一个整体,行内的所有项目相互挨着,将主轴的剩余空间分配到整体的两侧,若是多行则各行均按规则排列
- flex-start 紧贴起始线,默认值
- center 紧贴中间线
- flex-end 紧贴终止线
主轴方向上一行的所有项目为个体 ,将主轴上的剩余空间分配给个体,若是多行则各行按规则排列。

在交叉轴上,项目对齐方式默认值为stretch,会充满主轴方向上的一行容器的高度,即等高列。
取值说明:
- stretch 主轴方向上一行的所有项目等高;若有多行则各行内的所有项目等高,各行之间的项目不一定等高。
- flex-start 项目高度由项目内容决定,各行的项目顶部对齐
- center 项目高度由项目内容决定,各行的项目中部对齐
- flex-end 项目高度由项目内容决定,各行的项目底部对齐

align-content是定义主轴方向上各行在交叉轴上如何分配剩余空间,如果只有主轴上只有一行则无效
分配两种模式:

实例代码
<style>* {box-sizing: border-box;font-size: 20px;}/* flex弹性布局 */.container {height: 10em;border: 1px dotted rgb(236, 30, 243);padding: 1em;margin: 1em;display: flex;}.container > .item {/* 项目属性 */width: 5em;background-color: rgb(139, 233, 250);border: 1px solid rgb(30, 102, 210);}/* ==================flex-flow: 主轴方向 换行方式 ============= */.container {/* flex-flow: 主轴方向 换行方式 *//* 1、默认值 */flex-flow: row nowrap;/* 2、多行容器 */flex-flow: row wrap;}/* =================justify-content:项目在主轴上的============= */.container {/* 1. 将所有项目视为一个整体 *//* 紧贴起始线 */justify-content: flex-start;/* 紧贴终止线 */justify-content: flex-end;justify-content: flex-end;/* 紧贴中间线 */justify-content: center;/* 2. 将每一个项目视为一个独立的个体 *//* 两端对齐: 剩余空间在"除了首尾项目之外"的每个项目之间进行平均分配 */justify-content: space-between;/* 分散对齐: 剩余空间在每个项目"二侧"进行平均分配 */justify-content: space-around;/* 平均对齐: 剩余空间在每个项目"之间"进行平均分配 */justify-content: space-evenly;}/* =================align-items:项目在交叉轴上的对齐方式============ */.container {flex-flow: row nowrap;/* 默认会充满单行容器的高度 */align-items: stretch;align-items: flex-start;align-items: flex-end;align-items: center;/* 单行容器中,剩余空间只会产生在主轴上, 交叉轴不存在剩余空间 */}/* ===============align-content:项目在多行容器中的对齐方式============ */.container {/* 生成多行容器 */flex-flow: row wrap;/* align-content: 控制项目在交叉轴上每一行的间隙; */align-content: stretch;align-content: flex-end;align-content: flex-start;align-content: center;align-content: space-around;align-content: space-between;align-content: space-evenly;}</style></head><body><div class="container"><div class="item">单元1</div><div class="item">单元2</div><div class="item">单元3</div><div class="item">单元4</div><div class="item">单元5</div><div class="item">单元6</div><div class="item">单元7</div><div class="item">单元8</div></div>
flex弹性布局 ,flex也是BFC的一种,今天主要学习基本概念和基本属性,理解弹性就是它根据容器大小缩放项目尺寸适应变化。重点探讨了justify-content、align-items和align-content相同点和不同点,并通过firefox浏览器如何查看flex的各部分,更深入理解了flex的容器属性的意义。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号