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

BFC及其作用

时间:2023-03-30 17:28:34 CSS

1.什么是保证金崩溃?2、为什么塌陷时只出现在垂直方向?3.保证金崩溃如何解决?4.marginmerging(也叫marginfolding)5.浮动元素(使用BFC来包含floats)6.附例7.使用BFC防止文本换行8.在多栏布局中使用BFC9.双栏布局10.如何创建BFC?10.1.总结11.参考资料1.什么是margincollapse?尹荣辉——深入解析Margincollapse、BFC、ContainingBlock的关系。比如下面这种情况,上下框之间的距离应该是20px和40px,但实际上是20px。这是崩溃。你好世界

你好世界

你好世界
helloworld
其实这是CSS1.0的刻意设计,因为它符合图形设计师的要求。2、为什么塌陷时只出现在垂直方向?StackOverflow:为什么折叠只出现在垂直方向?CSS出现之前使用的p标签,要求每段之间的间距相同,所以当你给p标签设置margin-top和margin-bottom时,你会发现会出现塌陷,你会取两者的最大值其中的价值。知道了崩溃的条件也就明白了怎么解决崩溃带来的问题,那么崩溃的条件是什么?首先是一个大前提:元素不被非空内容、padding、border或clear分隔。那么有几个满足如下的邻接条件:topmarginofaboxandtopmarginofitsfirstin-flowchild(margin-topofanelementandmargin-topofitsfirstchildelement)bottommarginofanboxandtopmargin它的下一个流入流中的下一个兄弟元素(正常流中元素的margtin-bottom和其直接兄弟元素的margin-top)最后一个流入子元素的底部边距和其父元素的底部边距,如果父元素具有“auto”计算高度(元素的底部边距(高度为auto)及其最后一个子元素的底部底部边距)未建立新块格式上下文且计算的“最小高度”为零的框的顶部和底部边距,零或'auto'计算的'height',并且没有流入子元素(没有创建BFC的元素的margin-top和margin-bottom,没有子元素,高度为0)英文描述是摘录来自W3C规范:在块格式化上下文中,每个框的左外边缘接触le包含块的ft边缘(对于从右到左的格式,右边缘接触)。即使存在浮动也是如此(尽管盒子的行框可能会由于浮动而收缩),除非盒子建立拥有一个新的块格式化上下文(在这种情况下,框本身可能会由于浮动而变得更窄)。紧挨着右边框)即使有浮动(虽然盒子的边框会因为浮动而缩小),除非在盒子内部创建新的BFC浮动,否则盒子本身会变窄)。3.保证金崩溃如何解决?代码中已经给出了方法*{margin:0;填充:0;}.wrapper{背景颜色:#000;左边距:100px;边距顶部:100px;宽度:200px;高度:200px;/*向左飘浮;*//*位置:绝对;*//*显示:内联块;*//*显示:弹性;*//*注意使用overflow会自动隐藏溢出的部分*//*overflow:hidden;*//*注意使用display:table可以解决折叠,但是cotainer的高度会失效*//*display:table;*//*溢出:滚动;*//*overflow:scroll溢出的部分会变成滚动,效果很美妙,应该没用吧*/}.content{/*setmargin-top:150px;我们发现childbox会随着parentbox向下移动,好像两者是粘在一起的或者childbox好像没有“顶”。这时候会取一个wrapper和content的margin-top值。这种现象称为margincollapse,这是一个经典的BUG。*/顶部边距:150px;/*在子元素中使用如下也可以解决折叠问题*//*float:left;*//*位置:绝对;*//*显示:内联块;*/宽度:100px;高度:100px;背景色:#0f0;左边距:50px;}4、边距合并(也叫边距折叠)示例如下.wrapper{height:20px;背景色:#000;顶部边距:20px;margin-bottom:200px;}.content{height:20px;边距顶部:100px;background-color:#0f0;}参考:HowtosolvetheproblemofCSSmarginmergingmargincollapse以及解决marginmerging的数学方法(未解决)引入BFC;为该元素添加一个父框,并为其父元素添加属性overflow:hidden;BFC可能会导致margincollapse,BFC也可以用来解决margincollapse。起初听起来可能有点令人困惑,因为我们之前讨论过BFC导致利润率崩溃。但是我们必须记住,相邻块框的垂直边距折叠只有在它们位于同一个BFC中时才会发生。如果它们属于不同的BFC,则它们之间的边距不会塌陷。因此,通过创建一个新的BFC,我们可以防止边距崩溃。如下,再添加overflow:hidden到父元素解决marginmerge效果如下。上段原文链接:https://www.w3cplus.com/css/u。..?w3cplus.com5.浮动元素(使用BFC来包含浮动)浮动元素浮动元素,最早用于实现类似报纸图片换行的布局123456789
YAMAYAMA*{边距:0;填充:0;}.wrapper{背景色:浅绿色;/*宽度:330px;*/边框:2px纯黑色;/*解决方法如下,添加overflow:hidden;*/溢出:隐藏;}.content{浮动:左;/*使元素对齐并浮动*/color:#fff;边距-左:10px;底部边距:10px;背景色:黑色;宽度:100px;高度:100px;}.context1{浮动:左;宽度:100px;高度:100px;;不透明度:0.7;}.context2{宽度:150px;高度:150px;背景色:黄色;颜色:蓝色;/*解决方法如下,后面的元素变成内联块*//*display:inline-block;*//*向左飘浮;*//*浮动:对;*/}效果如图这里我们注意到后两个div好像有层模型的特点,其实不然。正确的理解是:浮动元素产生浮动流,块级元素看不到所有产生浮动流的元素注意:生成BFC的元素,有文本类属性(有内联属性)的元素,浮动元素都可以看到浮动元素(这里的不可见是指定位的时候会忽略掉覆盖掉,绝对定位就跟图层模型一样)(另外注意如果设置position和float后大小由content决定,则将元素转换成inline-blockinside)应用示例6.附示例123

YAMA

*{边距:0;填充:0;}.wrapper{边框:10px纯黑色;/*溢出:隐藏;*/}.content{浮动:左;颜色:#fff;边距:2px;背景色:黑色;宽度:100px;高度:100px;}p{背景色:cadetblue;/*清除:两者;*/}下图中上图有overflow:hidden;,而后面没有p标签的属于块级元素,会忽略float,定位假设前的浮动元素不存在(但注意这是与之前的层模型不同)。下图下半部分是p标签加入clear:both;之后的意思是标签附近不允许出现浮动物体,(还有left和right对应的值),相当于清除了div标签的浮动特性。7.使用BFC防止文本换行有时浮动div周围的文本会环绕它(如下图左侧所示)但在某些情况下这是不可取的,我们想要的是下图的外观一样右边的图片。为了解决这个问题,我们可能会使用边距,但我们也可以使用BFC来解决它。

YAMAYAMAYAMAYAMAYAMAYAMAYAMAYAMAYAMAYAMAYAMAYAMAYAMAYAMAYAMAYAMAYAMA。YAMAYAMAYAMAYAMAYAMAYAMAYAMAYAMAYAMAYAMAYAMAYAMAYAMAYAMAYAMAYAMAYAMAYAMAYAMAYAMAYAMAYAMAYAMAYAMAYAMAYAMAYAMAYAMAYAMAYAMAYAMAYAMAYAMAYAMAYAMAYAMAYAMAYAMAYAMAYAMAYAMAYAMAYAMAYAMAYAMAYAMAYAMAYAMAYAMAYAMAYAMAYAMAYAMAYAMAYAMAYAMAYAMAYAMA山间山YAMAYAMAYAMAYAMAYAMAYAMAYAMAYAMAYAMAYAMAYAMAYAMAYAMAYAMAYAMAYAMAYAMAYAMAYAMAYAMAYAMA。div>.floated{浮动:左;边距:5px;}p{颜色:rgb(14,13,13);文本对齐:居中;*//*显示:内联块;*//*清除:两者;当然,某段视频的最后一句是打大会的最后一句。这可能是由于这样一个事实,即可以使用对于已安装(安排)的容器来说太大的房间。但是,如果我们在列布局中创建一个新的BFC,它将占用上一列填充后的剩余空间。第一列第二列第三列.column{/*父元素或视口宽度的31.33%,以及下面的百分号*/width:31.33%;背景色:绿色;向左飘浮;保证金:00%;}.column:last-child{浮动:无;溢出:隐藏;现在即使容器的宽度发生轻微变化,布局也不会中断。诚然,这不是多列布局的最佳选择,但它是防止最后一列向下滑动问题的一种方法。在这种情况下Flexbox可能是更好的解决方案,但这应该说明元素在这些情况下的行为方式。9.两栏布局实现两栏布局10.如何创建BFC?https://developer.mozilla.org...10.1。总结根元素(整个页面就是一个大BFC);浮动是左|正确的;溢出被隐藏|汽车|滚动;显示是行内块|表格单元格|表格标题|弹性|内联柔性;位置是绝对的|固定的;请注意,BFC不是一个css属性,也不是一段代码,而是一个基于css中box的布局对象,是页面Area中的一块渲染,有一套渲染规则,决定了它的child如何元素将被定位,以及它们如何与其他元素关联和交互。具体来说,它是一个独立的盒子,这个独立盒子的内部布局不受外界影响。当然,BFC不会影响外面的元素。CSS中的BFCCSS中的BFC