<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>BFC on Last Stand</title><link>https://amatsuzero.github.io/LastStand/tags/bfc/</link><description>Recent content in BFC on Last Stand</description><generator>Hugo</generator><language>zh-cn</language><lastBuildDate>Mon, 18 Nov 2024 00:00:00 +0800</lastBuildDate><atom:link href="https://amatsuzero.github.io/LastStand/tags/bfc/index.xml" rel="self" type="application/rss+xml"/><item><title>BFC</title><link>https://amatsuzero.github.io/LastStand/posts/frontend/css/bfc/</link><pubDate>Sat, 09 Nov 2024 00:00:00 +0800</pubDate><guid>https://amatsuzero.github.io/LastStand/posts/frontend/css/bfc/</guid><description>&lt;p&gt;&lt;code&gt;BFC&lt;/code&gt; 是前端面试中经常会被问到的一个知识点，今天就来带大家深入了解下什么是 &lt;code&gt;BFC&lt;/code&gt; 以及它的作用。&lt;/p&gt;
&lt;h2 id="文档流"&gt;文档流&lt;/h2&gt;
&lt;p&gt;在介绍BFC之前，需要先给大家介绍一下文档流。&lt;/p&gt;
&lt;p&gt;我们常说的文档流其实分为&lt;code&gt;定位流&lt;/code&gt;、&lt;code&gt;浮动流&lt;/code&gt;、&lt;code&gt;普通流&lt;/code&gt;三种。&lt;/p&gt;
&lt;h2 id="绝对定位absolute-positioning"&gt;绝对定位(Absolute positioning)&lt;/h2&gt;
&lt;p&gt;如果元素的属性 &lt;code&gt;position&lt;/code&gt; 为 &lt;code&gt;absolute&lt;/code&gt; 或 &lt;code&gt;fixed&lt;/code&gt;，它就是一个绝对定位元素。&lt;/p&gt;
&lt;p&gt;在绝对定位布局中，元素会整体脱离普通流，因此绝对定位元素不会对其兄弟元素造成影响，而元素具体的位置由绝对定位的坐标决定。&lt;/p&gt;
&lt;p&gt;它的定位相对于它的包含块，相关CSS属性：&lt;code&gt;top&lt;/code&gt;、&lt;code&gt;bottom&lt;/code&gt;、&lt;code&gt;left&lt;/code&gt;、&lt;code&gt;right&lt;/code&gt;；&lt;/p&gt;
&lt;p&gt;对于 &lt;code&gt;position: absolute&lt;/code&gt;，元素定位将相对于上级元素中最近的一个&lt;code&gt;relative、fixed、absolute&lt;/code&gt;，如果没有则相对于body；&lt;/p&gt;
&lt;p&gt;对于 &lt;code&gt;position:fixed&lt;/code&gt;，正常来说是相对于浏览器窗口定位的，但是当&lt;strong&gt;元素祖先的 &lt;code&gt;transform&lt;/code&gt; 属性非 &lt;code&gt;none&lt;/code&gt; 时，会相对于该祖先进行定位&lt;/strong&gt;。&lt;/p&gt;
&lt;h2 id="浮动-float"&gt;浮动 (float)&lt;/h2&gt;
&lt;p&gt;在浮动布局中，元素首先按照普通流的位置出现，然后根据浮动的方向尽可能的向左边或右边偏移，其效果与印刷排版中的文本环绕相似。&lt;/p&gt;
&lt;h2 id="普通流-normal-flow"&gt;普通流 (normal flow)&lt;/h2&gt;
&lt;p&gt;普通流其实就是指BFC中的FC。FC(&lt;code&gt;Formatting Context&lt;/code&gt;)，直译过来是格式化上下文，它是页面中的一块渲染区域，有一套渲染规则，决定了其子元素如何布局，以及和其他元素之间的关系和作用。&lt;/p&gt;
&lt;p&gt;在普通流中，元素按照其在 HTML 中的先后位置至上而下布局，在这个过程中，行内元素水平排列，直到当行被占满然后换行。块级元素则会被渲染为完整的一个新行。&lt;/p&gt;
&lt;p&gt;除非另外指定，否则所有元素默认都是普通流定位，也可以说，普通流中元素的位置由该元素在 HTML 文档中的位置决定。&lt;/p&gt;
&lt;h2 id="bfc-概念"&gt;BFC 概念&lt;/h2&gt;
&lt;p&gt;先看下MDN上关于BFC的定义：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;块格式化上下文（&lt;code&gt;Block Formatting Context&lt;/code&gt;，&lt;code&gt;BFC&lt;/code&gt;） 是Web页面的可视CSS渲染的一部分，是块盒子的布局过程发生的区域，也是浮动元素与其他元素交互的区域。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;具有 &lt;code&gt;BFC&lt;/code&gt; 特性的元素可以看作是隔离了的独立容器，容器里面的元素不会在布局上影响到外面的元素，并且 &lt;code&gt;BFC&lt;/code&gt; 具有普通容器所没有的一些特性。&lt;/p&gt;
&lt;p&gt;通俗一点来讲，可以把 &lt;code&gt;BFC&lt;/code&gt; 理解为一个封闭的大箱子，箱子内部的元素无论如何翻江倒海，都不会影响到外部。&lt;/p&gt;
&lt;p&gt;除了 BFC，还有：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;IFC&lt;/code&gt;（行级格式化上下文）- &lt;code&gt;inline&lt;/code&gt; 内联&lt;/li&gt;
&lt;li&gt;&lt;code&gt;GFC&lt;/code&gt;（网格布局格式化上下文）- &lt;code&gt;display: grid&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;FFC&lt;/code&gt;（自适应格式化上下文）- &lt;code&gt;display: flex&lt;/code&gt;或&lt;code&gt;display: inline-flex&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：同一个元素不能同时存在于两个 &lt;code&gt;BFC&lt;/code&gt; 中。&lt;/p&gt;</description></item></channel></rss>