当前位置: 首页 > 后端技术 > Node.js

了解CSS布局和块格式化上下文

时间:2023-04-03 11:03:17 Node.js

CSS布局中有一些概念,一旦您理解了它们,将大大提高您的CSS技能。这篇文章是关于BlockFormattingContext的BFC。也许你从来没有听说过这个词,但如果你曾经用CSS做过布局,那么你可能知道它是什么。了解BFC是什么、它为什么起作用以及如何创建有用的BFC可以帮助您了解CSS布局的工作原理。在本文中,我将通过一些您可能熟悉的示例来解释什么是BFC。我将向您展示一个新概念,只有当您了解什么是BFC以及为什么需要它时,它才真正有意义。什么是BFC?了解BFC行为方式的最简单方法是看一个浮点数示例。在下面的示例中,有一个包含左浮动图像和一些文本的框模型。如果我们有很多文本并且环绕浮动图像,则边框环绕整个区域。我是一个浮动元素。

我是外框内的文本。
.outer{border:5pxdottedrgb(214,129,137);边界半径:5px;宽度:450px;填充:10px;margin-bottom:40px;}.float{填充:10px;border:5pxsolidrgba(214,129,137,.4);rgba(233,78,119,.4);颜色:#fff;向左飘浮;宽度:200px;margin:020px00;}图1:文本环绕浮动的元素图像并上升到文本的高度。图2:没有足够的文本,边框无法达到浮动元素的预期高度。这是因为当我们浮动一个元素时,文本所在的框模型仍然是一个固定的高度,浮动元素缩短的空间就是文本。线框。这就是背景和边框出现在浮动元素后面的原因。以下是我们通常解决此类问题的两种方法。一种是使用clear-floatclearfixhack[1],它通过在文本和图像下方插入一个元素并在两侧设置清晰的浮动来工作。另一种方法是使用overflow属性并使用其他值而不是默认的visible。.outer{overflow:auto;}图3:使用overflow:auto使框模型包含浮动溢出属性的工作原理是使用其他任何一个值代替初始值visible,从而创建一个BFC。也就是说,BFC的一个特点是它包含浮点数。BFC布局是一种迷你布局您可以将BFC视为网页中的迷你布局。一旦为元素创建了BFC,所有内容都包含在其中。如我们所见,它包含浮动元素,因此它不再超出框的底部。同时,BFC还产生了一些其他有用的行为。BFCPreventMarginCollapse了解边距折叠是另一个被低估的CSS技能。在下一个示例中,有一个灰色背景的div。这个div中有两个段落。外层div的底部边距为40px;每个段落还分别有20px的顶部和底部边距。.outer{背景颜色:#ccc;边距:0040px0;}p{填充:0;边距:20px020px0;背景色:rgb(233,78,119);color:#fff;}由于p元素的边距和外部div的边距之间没有任何内容导致它们折叠,因此p段落最终与框的顶部和底部齐平。所以在p段落的上方和下方我们看不到任何灰色。图4:折叠的边距导致在灰色背景的框顶部和底部看不到灰色。.outer{背景颜色:#ccc;边距:0040px0;overflow:auto;}图5:使用BFC边距不会折叠BFC再次保持元素包含在内,防止其边距折叠或超出盒子模型。BFC防止内容环绕浮动元素。您还将熟悉BFC的这种行为,以及它如何在使用浮点数的多列布局中工作。如果一个项目创建了一个BFC,那么它不会环绕任何浮动元素,就像下面这个标记的例子:Iamafloatedelement。
我是text
有float类的元素开始浮动,然后div中的文字环绕浮动元素。图6:文本环绕浮动元素您可以通过对文本使用BFC来防止环绕行为。.text{overflow:auto;}图7:div中包含的文本使用BFC来阻止它换行。这是我们创建多列浮动布局的常用方式。浮动一个元素也会为另一个元素创建BFC,因此当右侧元素比左侧元素高时,创建的列不再尝试相互环绕。还有其他方法可以创建BFC吗?除了使用overflow属性外,其他一些CSS属性也可以创建BFC。正如我们所见,浮动元素也会创建BFC,因此浮动项将包含其中的任何元素。其他方式包括使用position:absolute、position:fixed、使用display:inline-block、display:table-cell和display:table-caption,其中table-cell和table-captions是HTML元素的默认属性,所以如果有一个表数据,那么每个格子都会创建一个BFC。column-span:all多用于多列布局。Flex和Grid项也创建了类似的BFC,分别描述为FlexFormattingContext和GridFormattingContext,它们反映了不同的布局类型。BFC代表块级布局,FFC代表弹性布局。实际项目中结果是一样的,都包含浮动,而且边距不会塌陷。创建BFC的新方法使用溢出属性或其他方式创建BFC有两个问题。首先,这些方法对其真正目的有副作用。使用overflow属性创建一个BFC并包含浮动,但在某些情况下,您可能会发现您得到了一个不必要的滚动条,或者阴影被剪掉了。这是因为overflow属性本质上告诉浏览器在发生溢出时要做什么——生成滚动条或裁剪元素。浏览器实际上按照您的指示执行!即使没有任何副作用,使用overflow属性也可能会使其他开发人员感到困惑。为什么将overflow属性设置为auto或scroll?开发商的初衷是什么?他们想要这个组件上的滚动条吗?如何创建一个BFC是有效的?迷你布局应在不引起其他行为的情况下创建,或保证在安全范围内,不会引起任何意外问题,并且开发者的意图是明确的。CSS工作组认为有一个方便的新显示属性:flow-root。您可以在任何情况下使用display:flow-root,它将创建一个新的有用的BFC,其中包含浮点数,防止边距折叠,并防止元素环绕浮点数。如果你的浏览器支持显示:flow-root,例如流行的Firefox或GoogleChrome,你可以在下面的CodePen中看到以上所有内容。图8:支持显示的浏览器:flow-root属性浏览器对该属性的支持是有限的,但如果你觉得方便,可以支持。但是,即使您目前不熟悉代码中的流根功能,您现在也了解什么是BFC以及当您使用溢出属性或其他方法来包含浮点数时您在做什么。在不支持的浏览器中尝试创建Flex或Grid布局时,了解BFC将阻止元素环绕浮动这一事实非常有用。您已经学习了一些关于浏览器如何布局网页的基础知识,这些基础知识可能看起来微不足道,但可以加快创建和调试CSS布局的时间。