iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >怎么理解CSS布局和BFC
  • 972
分享到

怎么理解CSS布局和BFC

2024-04-02 19:04:59 972人浏览 独家记忆
摘要

本篇内容介绍了“怎么理解CSS布局和BFC”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!什么是 BFC在一

本篇内容介绍了“怎么理解CSS布局和BFC”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

什么是 BFC

在一个WEB页面的CSS渲染中,块级格式化上下文 (Block Fromatting Context)是按照块级盒子布局的。W3C对BFC的定义如下:

浮动元素和绝对定位元素,非块级盒子的块级容器(例如 inline-blocks, table-cells, 和 table-captions),以及overflow值不为“visiable”的块级盒子,都会为他们的内容创建新的BFC(块级格式上下文)。

BFC是一个独立的布局环境,其中的元素布局是不受外界的影响,并且在一个 BFC 中,块盒与行盒(行盒由一行中所有的内联元素所组成)都会垂直的沿着其父元素的边框排列。

块格式化上下文(BFC)的行为通过一个简单的float示例很容易理解。在下面的示例中,我有一个框,其中包含向左浮动的图像和一些文本。如果我们有足够多的文本,它会环绕浮动的图像和边框,然后环绕整个区域。

// html  <div class="outer">    <div class="float">I am a floated element.</div>    I am text inside the outer box.  </div>  // css  .outer {    border: 5px dotted rgb(214,129,137);    border-radius: 5px;    width: 450px;    padding: 10px;    margin-bottom: 40px;  }  .float {    padding: 10px;    border: 5px solid rgba(214,129,137,.4);    border-radius: 5px;    background-color: rgba(233,78,119,.4);    color: #fff;    float: left;      width: 200px;    margin: 0 20px 0 0;  }

怎么理解CSS布局和BFC

如果我删除了一些文本,那么就没有足够的内容来包围图像,而且由于浮动被从文档流中脱离,所以边框会上升,并在图像下方,直到文本的高度。

怎么理解CSS布局和BFC

这是因为当我们浮动一个元素时,文本所在的框的宽度保持不变,为给浮动元素腾出空间而缩短的是文本的行框。这就是为什么背景和边框会出现在浮动后面的原因。

我们通常有两种方法来解决这个布局问题。一种方法是使用 clearfix hack,它的作用是在文本和图像下面插入一个元素,并将其设置为 clear:both。另一种方法是使用 overflow 属性,其值不是缺省值 visible。

.outer {    overflow: auto;  }

怎么理解CSS布局和BFC

查看演示

overflow 以这种方式工作的原因是,使用 visible 的初值以外的任何值都会创建一个块格式化上下文,而 BFC 的一个特性是它包含浮动。

BFC 是布局中的一个迷你布局

你可以将 BFC 看作是页面内的一个迷你布局。一旦一个元素创建了一个 BFC,它就包含了所有的内容。正如我们所看到的,这包括浮动的元素,它们不再从盒子底部伸出来。BFC 还会导致一些其他有用的行为。

BFC 可以防止 margin 折叠

了解边距合并是另一个被低估的 CSS 技能。在下一个示例中,假设有一个背景颜色为灰色的 div。

这个 div 包含两个标签 p。外部 div 元素的 margin-bottom 为 40 像素,标签 p 的顶部和底部 margin 都是 20 像素。

// html  <div class="outer">    <p>I am paragraph one and I have a margin top and bottom of 20px;</p>    <p>I am paragraph one and I have a margin top and bottom of 20px;</p>  </div>  // css  .outer {     background-color: #ccc;    margin: 0 0 40px 0;  }  p {    padding: 0;    margin: 20px 0 20px 0;    background-color: rgb(233,78,119);    color: #fff;  }

因为 p 元素的 margin 和外部 div 上的 margin 之间没有任何东西,所以两个会折叠,因此 p 最终与 div 的顶部和底部齐平。 我们在 p 的上方和下方看不到任何灰色。

怎么理解CSS布局和BFC

在CSS当中,相邻的两个盒子(可能是兄弟关系也可能是祖先关系)的外边距可以结合成一个单独的外边距。这种合并外边距的方式被称为折叠,并且因而所结合成的外边距称为折叠外边距。折叠的结果按照如下规则计算:

  1. 鸿蒙官方战略合作共建——HarmonyOS技术社区

  2.  两个相邻的外边距都是正数时,折叠结果是它们两者之间较大的值。

  3.  两个相邻的外边距都是负数时,折叠结果是两者绝对值的较大值。

  4.  两个外边距一正一负时,折叠结果是两者的相加的和。

产生折叠的必备条件:margin必须是邻接的!

如果我们把盒子设为 BFC,它现在包含了标签 p 和它们的边距,这样它们就不会折叠,我们可以看到边距后面容器的灰色背景。

.outer {    background-color: #ccc;    margin: 0 0 40px 0;    overflow: auto;  }

怎么理解CSS布局和BFC

查看演示

再一次,BFC 的工作是把东西装在盒子里,防止它们从盒子里跑出来。

BFC 可以阻止元素被浮动元素覆盖

你将熟悉 BFC 的这种行为,因为使用浮动的任何列类型布局都是这样工作的。如果一个项目创建了一个 BFC,那么该项目将不会包裹任何浮动元素。在下面的例子中,有如下 html 结构:

<div class="outer">   <div class="float">I am a floated element.</div>    <div class="text">I am text</div>  </div>

带有 float 类的项被向左浮动,因此 div 中的文本在它环绕 float 之后。

怎么理解CSS布局和BFC

我可以通过将包裹文本的 div 设置为 BFC 来防止这种包裹行为。

.text {    overflow: auto;  }

怎么理解CSS布局和BFC

这实际上是我们创建具有多个列的浮动布局的方法。浮动项还为该项创建了一个 BFC,因此,如果右边的列比左边的列高,那么我们的列就不会相互环绕。

查看演示

在多列布局中使用 BFC

如果我们创建一个占满整个容器宽度的多列布局,在某些浏览器中***一列有时候会掉到下一行。这可能是因为浏览器四舍五入了列宽从而所有列的总宽度会超出容器。但如果我们在多列布局中的***一列里创建一个新的BFC,它将总是占据其他列先占位完毕后剩下的空间。

例如:

<div class="container">      <div class="column">column 1</div>      <div class="column">column 2</div>      <div class="column">column 3</div>  </div>

对应的CSS:

.column {      width: 31.33%;      background-color: green;      float: left;      margin: 0 1%;  }  .column:last-child {    float: none;  }

未创建 BFC 之前:

怎么理解CSS布局和BFC

添加以下样式创建一个 BFC:

.column:last-child {    float: none;    overflow: hidden;   }

怎么理解CSS布局和BFC

现在尽管盒子的宽度稍有改变,但布局不会打破。当然,对多列布局来说这不一定是个好办法,但能避免***一列下掉。这个问题上弹性盒或许是个更好的解决方案,但这个办法可以用来说明元素在这些环境下的行为。

还有什么能创建 BFC?

除了使用 overflow 创建 BFC 外,其他一些 CSS 属性还创建 BFC。正如我们所看到的,浮动元素创建了 BFC。你的浮动项将包含它里面的任何东西。

使用以下方式都能创建 BFC

  •  float 的值不是 none。

  •  position 的值不是 static 或者 relative。

  •  display 的值是 inline-block、table-cell、flex、table-caption 或者inline-flex

  •  overflow 的值不是 visible

创建 BFC 的新方式

使用overflow或其他的方法创建BFC时会有两个问题。首先,这些方法本身是有自身的设计目的,所以在使用它们创建BFC时可能会产生副作用。例如,使用overflow创建BFC后在某些情况下可能会看到出现一个滚动条或者元素内容被裁切。

这是由于overflow属性的设计是用来让你告诉浏览器如何定义元素的溢出状态的。浏览器执行了它最基本的定义。

即使在没有任何不想要的副作用的情况下,使用 overflow 也可能会让其他开发人员感到困惑。为什么 overflow 设置为 auto 或 scroll?最初的开发者的意图是什么?他们想要这个组件上的滚动条吗?

安全的做法应该是创建一个 BFC 时并不会带来任何副作用,它内部的元素都安全的呆在这个迷你布局中,这种方法不会引起任何意想不到的问题,也可以理解开发者的意图。CSS 工作组也十分认同这种想法,所以他们定制了一个新的属性值:display:flow-root。

flow-root 浏览器支持情况

你可以使用display:flow-root安全的创建BFC,来解决上文中提到的各种问题:包裹浮动元素、阻止外边距叠加和阻止围绕浮动元素。

怎么理解CSS布局和BFC

浏览器对该属性的支持目前还是有限的,如果你觉得这个属性值很方便,请投票去让Edge也支持它。不过无论如何,你现在应该已经理解了什么是 BFC,以及如何使用 overflow 或其他方法来包裹浮动,以及知道了 BFC 可以阻止元素去环绕浮动元素,如果你想使用弹性或网格布局可以在一些不支持他们的浏览器中使用 BFC 的这些特性做降级处理。

“怎么理解CSS布局和BFC”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

--结束END--

本文标题: 怎么理解CSS布局和BFC

本文链接: https://www.lsjlt.com/news/85581.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 怎么理解CSS布局和BFC
    本篇内容介绍了“怎么理解CSS布局和BFC”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!什么是 BFC在一...
    99+
    2024-04-02
  • css中的BFC布局规则是什么
    这篇文章主要讲解了“css中的BFC布局规则是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“css中的BFC布局规则是什么”吧!说明BFC是页面上隔离的独立容器,容器中的子元素不会影响外...
    99+
    2023-06-20
  • 怎么理解HTML/CSS的BFC
    本篇内容主要讲解“怎么理解HTMLCSS的BFC”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么理解HTMLCSS的BFC”吧!...
    99+
    2024-04-02
  • css布局之BFC模式的示例分析
    这篇文章主要为大家展示了“css布局之BFC模式的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“css布局之BFC模式的示例分析”这篇文章吧。详解BFC...
    99+
    2024-04-02
  • 基于BFC规则如何实现的css两列布局
    这篇文章将为大家详细讲解有关基于BFC规则如何实现的css两列布局,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。   <!--利用BFC的overflowhidd...
    99+
    2024-04-02
  • 如何理解Div+CSS布局中的页面布局和规划
    本篇文章为大家展示了如何理解Div+CSS布局中的页面布局和规划,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。Div+CSS布局入门 在网页制作中,有许多...
    99+
    2024-04-02
  • BFC和IFC怎么在CSS中使用
    本篇文章给大家分享的是有关BFC和IFC怎么在CSS中使用,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。一 什么是 BFC和之前所有博文一样,还是先从What的角度开始介绍,由...
    99+
    2023-06-08
  • 如何理解CSS Grid布局中的网格布局
    本篇内容主要讲解“如何理解CSS Grid布局中的网格布局”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何理解CSS Grid布局中的网格布局”吧!为什么我们...
    99+
    2024-04-02
  • WPF布局及布局容器该怎么理解
    本篇文章为大家展示了WPF布局及布局容器该怎么理解,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。WPF布局基础WPF布局原则一个窗口中只能包含一个元素不应显示设置元素尺寸不应使用坐标设置元素的位置可...
    99+
    2023-06-29
  • css布局li怎么用
    这篇文章将为大家详细讲解有关css布局li怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。 Css li是运用css来管制li的款式-css列表,如li列表的以点为...
    99+
    2024-04-02
  • 如何理解CSS布局中的Position
    今天就跟大家聊聊有关如何理解CSS布局中的Position,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。 当人们将接触...
    99+
    2024-04-02
  • CSS两列布局和三列布局的用法
    这篇文章主要介绍了CSS两列布局和三列布局的用法,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。两列布局左列定宽,右列自适应float + margin 布局html 代码&l...
    99+
    2023-06-08
  • CSS如何使用BFC规则布局引发外层div包裹内层div的处理
    这篇文章给大家介绍CSS如何使用BFC规则布局引发外层div包裹内层div的处理,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。BFC的概念BFC全称Block Formatting C...
    99+
    2024-04-02
  • 如何理解haslaylout和bfc解析
    这篇文章主要讲解了“如何理解haslaylout和bfc解析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何理解haslaylout和bfc解析”吧!一、haslaylout 和 bfc ...
    99+
    2023-06-08
  • 怎么学习CSS Grid布局
    这篇文章主要介绍“怎么学习CSS Grid布局”,在日常操作中,相信很多人在怎么学习CSS Grid布局问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么学习CSS Grid...
    99+
    2024-04-02
  • 如何理解CSS十则布局技巧
    本篇文章给大家分享的是有关如何理解CSS十则布局技巧,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。向大家描述一下CSS技巧十则,主要包括CSS...
    99+
    2024-04-02
  • 怎么理解html的flex布局
    本篇内容主要讲解“怎么理解html的flex布局”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么理解html的flex布局”吧!需要注意的是:任何容器都可以指...
    99+
    2024-04-02
  • CSS布局中浮动问题怎么解决
    本文将为大家详细介绍“CSS布局中浮动问题怎么解决”,内容步骤清晰详细,细节处理妥当,而小编每天都会更新不同的知识点,希望这篇“CSS布局中浮动问题怎么解决”能够给你意想不到的收获,请大家跟着小编的思路慢慢深入,具体内容如下,一起去收获新知...
    99+
    2023-06-08
  • CSS怎么实现三栏布局
    这篇文章主要介绍CSS怎么实现三栏布局,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!前言其实不管是三栏布局还是两栏布局都是我们在平时项目里经常使用的,也许你不知道什么事三栏布局什么是两栏布局但实际已经在用,或许你知道...
    99+
    2023-06-08
  • css怎么实现三列布局
    这篇文章主要介绍css怎么实现三列布局,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!css实现三列布局的方法:1、float浮动布局;2、绝对定位布局;3、flexbox弹性布局,存在IE上兼容性问题,只能支持IE9...
    99+
    2023-06-15
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作