CSS:BFC以及如何生成BFC(五颗星)

1.BFC概念:

BFC(box formatting context块级格式化上下文,用于清除浮动,防止margin重叠等。):

  • box:box是CSS布局的对象和基本单位,一个页面是有很多个box组成的,这个box就是我们所说的盒模型。
  • formatting context:块级上下文格式化,它是页面中的一块渲染区域,并且有一套渲染规则,他决定了其子元素将如何定位,以及和其他元素的关系和相互作用。
  • 块格式化上下文(Block Formatting Context,BFC)是一个独立的渲染区域,是 Web 页面的可视化 CSS 渲染的一部分,是布局过程中生成块级盒子的区域,也是浮动元素与其他元素的交互限定区域。并且有一定的布局规则,规定了内部如何布局,并且这个区域的子元素不会影响到外面的元素。

通俗来讲:BFC 是一个独立的布局环境,可以理解为一个容器,在这个容器中按照一定规则进行物品摆放,并且不会影响其它环境中的物品。如果一个元素符合触发 BFC 的条件,则 BFC 中的元素布局不受外影响

如:网页中广告点击关闭按钮不影响页面的布局,这种效果就是用BFC创建的(用到了定位position:absolute或fixed)

2.比较重要的布局规则有:

  • 内部box垂直放置。
  • 计算BFC的高度的时候,浮动元素也参与计算,

3.BFC特点:

  • 垂直方向上,自上而下排列,和文档流的排列方式一致。
  • 在 BFC 中上下相邻的两个容器的 margin 会重叠
  • 计算 BFC 的高度时,需要计算浮动元素的高度
  • BFC 区域不会与浮动(float)的容器发生重叠
  • BFC 是页面上的一个独立的容器,容器内部元素不会影响外部元素
  • 每个元素的左 margin 值和容器的左 border 相接触

4.哪些元素会生成BFC(创建BFC):

哪些元素会创建BFC:

  • 根元素
  • float的值不为none,即值为left,right等
  • overflow的值不为visible,即值为hidden、auto、scroll等
  • display的值为inline-block、table-cell、table-caption、flex、inline-flex的元素

display:table也认为可以生成BFC,其实这里的主要原因在于Table会默认生成一个匿名的table-cell,正是这个匿名的table-cell生成了BFC。

  • position的值为absolute或fixed

具体内容如下:

1.根元素:body/html。

2.元素设置浮动:(父元素)float 除 none 以外的值,即float不为none的元素(缺点:父元素不一定是左边或右边,会影响布局,方法比较局限)

解决浮动塌陷:

<style>
        .outer {
            width: 250px;
            background-color: red;
            /* 浮动塌陷解决方法BFC方法中给浮动的元素的容器添加浮动 */
            float: left;
        }
        .inner{
            width: 100px;
            width: 50px;
            /* 因为outer没设置高,导致浮动(高度)塌陷,浮动元素不占空间,导致outer盒子撑不起来。*/
            float: left;
            background-color: rgb(18, 33, 207);
        }
    </style>
 <div class="outer">
        <div class="inner">inner1</div>
        <div class="inner">inner2</div>
    </div>

3.元素设置绝对定位:position (absolute、fixed),即position为fixed和absolute的元素

定位:

<style>
        .outer {
            width: 250px;
            background-color: red;
        }
        .inner1{
            width: 100px;
            background-color: rgb(18, 33, 207);
 

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

前端面试题 文章被收录于专栏

前端面试的一些常问问题、问题的具体实现(可直接运行)以及底层原理

全部评论

相关推荐

秋招进行到现在终于能写总结了。完全没想到战线会拉这么长,过程会如此狼狈,不过更应该怪自己太菜了。好在所有的运气都用在了最后,也是有个去处。背景:双2本硕科班,无竞赛,本科一段研究所实习,硕士一段大厂暑期实习但无转正。技术栈是C++&nbsp;&amp;&nbsp;Golang,实习是客户端音视频(而且是鸿蒙端开发),简历两个C++项目一个Golang项目。主要投递岗位:后端,cpp软开,游戏服务端,测开,以及一些不拘泥于Java的岗位。从8月起总共投递123家公司,笔试数不清了,约面大约30家。offer/oc/意向:友塔游戏(第一个offer,面试体验很好,就是给钱好少南瑞继保(计算机科班点击就送(限男生),不...
乡土丁真真:佬很厉害,羡慕~虽然我还没有到校招的时候,也想讲一下自己的看法:我觉得不是CPP的问题,佬的背书双2,技术栈加了GO,有两段实习。投了123,面了30.拿到11个offer。这个数据已经很耀眼了。这不也是CPP带来的吗?当然也不止是CPP。至少来说在这个方向努力过的也会有好的结果和选择。同等学历和项目选java就会有更好的吗?我个人持疑问态度。当然CPP在方向选择上确实让人头大,但是我觉得能上岸,至于最后做什么方向,在我看来并不重要。至于CPP特殊,有岗位方向的随机性,java不是不挑方向,只是没得选而已。也希望自己以后校招的时候能offer满满
点赞 评论 收藏
分享
耀孝女:就是你排序挂了
点赞 评论 收藏
分享
寿命齿轮:实习就一段还拉了,项目一看就不是手搓,学历也拉了,技术栈看着倒是挺好,就是不知道面试表现能咋样。 不过现在才大三,争取搞两端大厂实习,或者一个纯个人项目+一段大厂,感觉秋招还是未来可期。
投递美团等公司10个岗位
点赞 评论 收藏
分享
评论
1
收藏
分享
牛客网
牛客企业服务