当前位置: 首页 > Web前端 > CSS

bfc的初探

时间:2023-03-31 01:07:37 CSS

bfc什么是bfc?bfc的全称是blockformattingcontext,是web可视化CSS渲染的一部分。我理解的bfc本质上是一个透明的盒子,我们根本看不到,但是这个盒子是独立于其他外部容器而存在的,而且这个盒子内部有bfc自己的内部渲染逻辑。bfc布局规则bfc中的元素一次从上到下排列。bfc的垂直距离由margin决定,相邻两个元素的宽度会被折叠。bfc内部元素的左边框总是和容器的左边框重合,float也不例外。bfc不会与浮动框重叠。计算bfc的高度,Floating也会被计算在BFC是页面上一个隔离的独立容器,容器里面的子元素不会影响外面的元素。反之亦然。触发bfc的条件根元素或包含根元素的元素float不是nondispaly是absolute或fixedoverflow不可见dispaly是inline-block或table-cell或table-captionBfc应用场景如果没有创建bfc则使用bfc包含float。浮动元素的父元素的高度将为0,为父元素添加一个overflow:hidden。可以将父元素设置为bfc,这样这个元素就可以包含它浮动的子元素。//html

p1

p2

p3

p4

//css.floatdiv1{宽度:200px;溢出:隐藏;背景色:绿色;边框:1px纯红色;margin-bottom:40px;}.floatdiv2{宽度:200px;-颜色:黄色;边框:1px纯蓝色;margin-bottom:40px;}.floatdiv1p,.floatdiv2p{float:left;宽度:50px;背景色:粉色;高度:50px;bfc的高度时,浮动元素也会参与计算。浮动元素本身与文档流分离,非bfc元素的高度计算不会包含浮动元素。使用bfc防止文本换行。通常,如果块级元素设置为浮动,则其兄弟元素将环绕其布局。//html
//css.outer{width:200px;}.inner1{浮动:左;高度:50px;宽度:50px;背景颜色:橙色;}.inner2{背景颜色:cadetblue;高度:200px;//溢出:隐藏;abfc}如果inner2设置了overflow属性,看到的效果是下图的inner会把浮动元素div包裹起来,因为在同一个bfc中,元素的左边总是碰到容器的左边,即使有浮动。如果你不想这样,你可以给文本一个溢出:隐藏。这样文字所在的区域就变成了bfc,bfc不会和float元素重叠。解决outermargincollapsing问题outermargincollapsing的情况:防止outermargincollapsing问题的方法是在bfc里面再写一个bfc。//当外边距折叠时//html

//css.div1{宽度:200px;背景色:蓝色;}.div1p{高度:50px;边距:10px0;background-color:orange;}解决方法是将p标签单独写到每个bfc中,比如在p外面包裹一层overflow就是一个隐藏的div。在这种情况下,如果两个p标签不属于一个bfc,则不会发生marginfolding。//html

//css.div1{宽度:200px;背景颜色:蓝色;}p{高度:50px;边距:10px0;背景颜色:橙色;overflow:hidden;}.div2{overflow:hidden;}//把第三个p标签写到一个bfc中,这样第二个p和第三个p就不会折叠,行间距是double而不是single.外边距的执行结果如果上下外边距均为正,则取外边距的最大值??作为间隔距离;,增加了间距距离以及触发margincollapse的必要条件元素必须是块级boxes,block,list-itemtable元素必须是regulardocumentflow,并且必须在同一bfc中垂直方向相邻的元素,这些两个是触发折叠的必要条件和不会触发折叠。如果它们不在一个bfc中,则不会触发bfc。另外,浮动元素,绝对位置或固定位置的元素不会发生,因为它们不是常规文档Flow如果父元素包含padding或border,那么它不会与第一个子元素折叠