CSS BFC原理及其应用详解

本文主要和大家介绍10分钟理解bfc原理及其应用的相关资料,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧,希望能帮助到大家。

一、常见定位方案

在讲 BFC 之前,我们先来了解一下常见的定位方案,定位方案是控制元素的布局,有三种常见方案:

普通流 (normal flow)

在普通流中,元素按照其在 HTML 中的先后位置至上而下布局,在这个过程中,行内元素水平排列,直到当行被占满然后换行,块级元素则会被渲染为完整的一个新行,除非另外指定,否则所有元素默认都是普通流定位,也可以说,普通流中元素的位置由该元素在 HTML 文档中的位置决定。

立即学习“前端免费学习笔记(深入)”;

浮动 (float)

在浮动布局中,元素首先按照普通流的位置出现,然后根据浮动的方向尽可能的向左边或右边偏移,其效果与印刷排版中的文本环绕相似。

绝对定位 (absolute positioning)

在绝对定位布局中,元素会整体脱离普通流,因此绝对定位元素不会对其兄弟元素造成影响,而元素具体的位置由绝对定位的坐标决定。

二、BFC 概念

Formatting context(格式化上下文) 是 W3C CSS2.1 规范中的一个概念。它是页面中的一块渲染区域,并且有一套渲染规则,它决定了其子元素将如何定位,以及和其他元素的关系和相互作用。

那么 BFC 是什么呢?

BFC 即 Block Formatting Contexts (块级格式化上下文),它属于上述定位方案的普通流。

具有 BFC 特性的元素可以看作是隔离了的独立容器,容器里面的元素不会在布局上影响到外面的元素,并且 BFC 具有普通容器所没有的一些特性。

通俗一点来讲,可以把 BFC 理解为一个封闭的大箱子,箱子内部的元素无论如何翻江倒海,都不会影响到外部。

三、触发 BFC

只要元素满足下面任一条件即可触发 BFC 特性:

body 根元素

浮动元素:float 除 none 以外的值

绝对定位元素:position (absolute、fixed)

display 为 inline-block、table-cells、flex

overflow 除了 visible 以外的值 (hidden、auto、scroll)

四、BFC 特性及应用

1. 同一个 BFC 下外边距会发生折叠

p{    width: 100px;    height: 100px;    background: lightblue;    margin: 100px;}    

登录后复制

CSS BFC原理及其应用详解

从效果上看,因为两个 p 元素都处于同一个 BFC 容器下 (这里指 body 元素) 所以第一个 p 的下边距和第二个 p 的上边距发生了重叠,所以两个盒子之间距离只有 100px,而不是 200px。

首先这不是 CSS 的 bug,我们可以理解为一种规范,如果想要避免外边距的重叠,可以将其放在不同的 BFC 容器中。

登录后复制

.container {    overflow: hidden;}p {    width: 100px;    height: 100px;    background: lightblue;    margin: 100px;}

登录后复制

这时候,两个盒子边距就变成了 200px

CSS BFC原理及其应用详解

2. BFC 可以包含浮动的元素(清除浮动)

我们都知道,浮动的元素会脱离普通文档流,来看下下面一个例子

登录后复制

CSS BFC原理及其应用详解

由于容器内元素浮动,脱离了文档流,所以容器只剩下 2px 的边距高度。如果使触发容器的 BFC,那么容器将会包裹着浮动元素。

登录后复制

效果如图:

CSS BFC原理及其应用详解

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

先来看一个文字环绕效果:

我是一个左浮动的元素

我是一个没有设置浮动, 也没有触发 BFC 元素, width: 200px; height:200px; background: #eee;

登录后复制

CSS BFC原理及其应用详解

这时候其实第二个元素有部分被浮动元素所覆盖,(但是文本信息不会被浮动元素所覆盖) 如果想避免元素被覆盖,可触第二个元素的 BFC 特性,在第二个元素中加入 overflow: hidden,就会变成:

CSS BFC原理及其应用详解

这个方法可以用来实现两列自适应布局,效果不错,这时候左边的宽度固定,右边的内容自适应宽度(去掉上面右边内容的宽度)。

相关推荐:

CSS里的BFC和IFC的用法实例分析

CSS里的BFC和IFC的用法实例分析

CSS里的BFC和IFC的用法实例分析

以上就是CSS BFC原理及其应用详解的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2900249.html

(0)
上一篇 2025年3月10日 23:55:21
下一篇 2025年3月10日 23:55:33

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • CSS选择器的新用法详解

    现在,预处理器(如sass)似乎已经成为开发css的标配,正如几年前jquery是开发js的标配一样。js的queryselector借鉴了jquery的选择器思想,css选择器也借鉴了预处理器的变量定义、选择器嵌套、代码块重用等常用功能。…

    编程技术 2025年3月10日
    200
  • CSS实现网页背景图片自适应全屏详解

    本文主要和大家介绍css实现网页背景图片自适应全屏的方法的相关资料,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧,希望能帮助到大家。 网页背景自适应全屏.PNG 一张清晰漂亮的背景图片能给网页加分不少,设计师也…

    2025年3月10日
    200
  • css实现爱心版加载效果

    本文主要和大家介绍纯css写出爱心版加载效果的示例代码的相关资料,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧,希望能帮助到大家。 爱心等待效果如下: 现在互联网时代网站何其多,各有各得风格,但是什么样的风格能…

    2025年3月10日
    200
  • css3实现鼠标跟随导航效果

    本文主要和大家介绍了css3动画过渡实现鼠标跟随导航效果的相关资料,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧,希望能帮助到大家。 效果知识点:html/css布局思维, p+css讲解,css3动画,盒子模…

    编程技术 2025年3月10日
    200
  • 实现优惠券边沿打孔的CSS代码

    项目中用到了这个边沿打孔的效果,尝试下来使用纯css写的这个样式,本文主要给大家分享使用纯css写的一个边沿打孔效果,需要的朋友参考下,希望能帮助到大家。 效果大致如图 分步实现思路: 1,先画两个带圆角的框,A和B(A、B分别需要加投影效…

    2025年3月10日 编程技术
    200
  • css3中clip实现圆环进度条

    本文主要和大家介绍了css3 clip实现圆环进度条的示例代码的相关资料,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧,希望能帮助到大家。 CSS中有一个属性叫做clip,为修剪,剪裁之意。 clip 属性剪裁…

    2025年3月10日
    200
  • Flex布局的可伸缩性详解

    flexibility Flex伸缩布局决定性的特性是让伸缩项目可伸缩,也就是让伸缩项目的宽度或高度自动填充剩余的空间。这可以以flex属性完成。一个伸缩容器会等比地按照各伸缩项目的 扩展比率 分配剩余空间,也会按照 收缩比率 缩小各项目以…

    2025年3月10日
    200
  • CSS中befor 、after伪元素的用法

    本文主要和大家介绍css中的:befor、:after创建的伪元素几种使用场景,如填充文本、作为iconfont、进度线、时间线以及几何图形,希望能帮助到大家。 1. 介绍 1.1 说明 CSS中的:befor、:after都会创建一个伪元…

    2025年3月10日 编程技术
    200
  • css3字体变体font-variation详解

    如果要用一个词来描述的话,可以把其称为字体变体(font variants),对应的css属性就是font-variation-*属性,其包括连接(ligatures)、大写(caps)、数字(numerals)和替代字形(alternat…

    编程技术 2025年3月10日
    200
  • css实现右侧固定宽度左侧宽度自适应

    本文主要和大家介绍了css实现右侧固定宽度 左侧宽度自适应,这种布局比较常见,博客园很多默认主题就是这种。一般情况下,这种布局中宽度固定的区域是侧边栏,而自适应的区域是主体内容区,反过来也可以:左侧宽度固定,右侧自适应。不管是左是右,反正就…

    2025年3月10日
    200

发表回复

登录后才能评论