Box与Formatting Context
一直对css都不够重视,觉得简单,其实也是有些知识的。所以抽空做了些总结
参考文献:mdn的css文档、w3c css规范
w3c是制定标准的,而mdn的目标是做开发者服务的开发文档。
但实际上,大家还是用mdn多一些,颜值高,讲的没那么啰嗦。当然要是还刨根问题 还得是w3c!
Box model(盒子模型)
参考文档:w3c的css-box-3与 mdn的盒子模型
当对一个文档进行布局(lay out)的时候,浏览器的渲染引擎会根据标准之一的 CSS 基础框盒模型(CSS basic box model),将所有元素表示为一个个矩形的盒子(box)。CSS 决定这些盒子的大小、位置以及属性(例如颜色、背景、边框尺寸…)。
每个盒子尺寸(box dimensions)由四个部分组成,包括:边距[margging],边框[border],填充[padding],和实际内容[content width & content height]
简单来说就是:取得元素的内容并将其放在一个独立的元素盒子中,然后在其周边加上内外边距、边框——这就是我们所说的盒子模型。

注意:
正常情况下,区块(盒子)的上下外边距有时会合并(即折叠)为单个边距,其大小为两个边距中的最大值(或如果它们相等,则仅为其中一个),这种行为称为外边距折叠。
<style>
div {
height: 20px;
background-color: pink;
}
.box1 {
margin-bottom: 10px;
}
.box2 {
margin-top: 20px;
}
</style>
<body>
<div class="box1"></div>
<div class="box2"></div>
</body>

visual formatting model(视觉格式化模型)
官方标准中对于视觉格式化模型的阐述为 how user agents process the document tree for visual media. 直译过来就是 用户代理在视觉媒体下如何处理文档树的意思。
通俗和侠义点讲就是 视觉格式化模型就是规定了 网页如何在你设备上的浏览器中如何被渲染和展示。
视觉媒体:visual media 指得是用户可视化媒体,如手机,电脑、打印机、幻灯机、电影放映机、dvd等
用户代理:user agents,简称UA,指的是用户在可视化媒体(终端)上使用(访问并解析html)的程序,最常见的比如浏览器、小程序或原生安卓和ios的webview
文档树: document tree,它是文档元素分级结构的形象表示。一个文档结构树包含根元素,根元素是最顶级的元素
在可视化格式化模型 规定中,文档树中的每个元素根据【盒子模型】规范 生成零个或多个盒子。
且这些盒子的布局受以下因素的控制:
盒子尺寸和类型(下边讲)。
定位方案 (正常流、浮动和绝对定位)。
文档树中元素之间的关系。
其它因素(例如,viewport的大小、置换的固有尺寸等)
viewport(可视窗口)
User agents for continuous media generally offer users a viewport through which users consult a document.
用户代理为连续媒体提供的一个(呈现解析和渲染后的文档树的)区域,用户通过这个区域可以阅读文档内容。在(用户代理为)浏览器中,一般指的就是浏览器用于呈现网页的区域。

注意 continuous media(连续媒体) 其实就是visual media的一种,比如网页。但是像打印机打印的文档内容必须是分页的,所以就是paged media(分页媒体)。这里有详细的媒体类型介绍。
当视口在小于文档渲染的尺寸时,必须提供一种滚动机制,最常见的就是浏览器的滚动条,通过滚动条我们就可以浏览超出视口的文档部分,也就是文档中阐述的 When the viewport is smaller than the area of the canvas on which the document is rendered, the user agent should offer a scrolling mechanism.
当然关于视口的知识点可不只是上述的这么简单,比如在移动web中,viewport的相关属性对于移动web的开发至关重要,但本文暂不涉及其他关于视口的知识点。
Containing blocks(包含块)
它是【视觉格式化模型】的一个重要概念,它与盒子模型非常的类似,也可以理解为一个矩形,
而这个矩形的作用是为它里面包含的元素提供一个参考,元素的尺寸和位置的计算往往是由该元素所在的包含块决定的。
包含块简单说就是定位参考框,或者定位坐标参考系,元素一旦定义了定位显示(相对、绝对、固定)都具有包含块性质,它所包含的定位元素都将以该包含块为坐标系进行定位和调整。
除了定位参考 还有宽度参考 等等等等很多重要的作用~
Controlling box generation(控制【box】的生成)
CSS的【视觉格式化模型】一部分工作是 从文档元素(document tree element)生成盒(box)。
根据CSS属性display属性,可以生成不同类型的盒。
Block-level elements & block boxes(块级元素和块盒)
块级元素视觉上呈现为块,竖直排列
当元素的CSS属性display为block,list-item或table时,它就是块级元素
css排班布局
正如上文所说,css将网页上的元素都是为一个个盒子,那么这些盒子是怎么排版的呢?
css有多种布局方式,接下来一一介绍
常规布局
元素的类型 和 display 属性 会决定这 Box 的类型。不同类型的 Box 会参与 不同的 Formatting Context,所以 Box 内的元素会以不同的方式渲染
我们总结一下有哪些类型的 盒子模型:
block-level box: 块状盒子模型。display 属性为 block, list-item, table 的元素,会生成 block-level box。并且参与 block fomatting context;
inline-level box:行内盒子模型。display 属性为 inline, inline-block, inline-table 的元素,会生成 inline-level box。并且参与 inline formatting context;
run-in box:css3加的之后讲
Formatting context
Formatting context 即格式化上下文,是 W3C CSS规范中的一个概念:
它是页面中的一块渲染区域,并且有一套渲染规则,它决定了其子元素将如何定位,以及和其他元素的关系和相互作用
CSS2.1 中只有 BFC 和 IFC,CSS3 增加了 GFC 和 FFC。
IFC:Inline Formatting Context(内联格式化上下文)
BFC:Block Formatting Context(块级格式化上下文)
GFC:Grids Formatting Context(网格格式化上下文)
FFC:Flexible Formatting Context(弹性盒格式化上下文)
通俗的理解就是:
通过刚才说的盒模型我们知道 HTML 页面是由一个个盒子组成的,
但那这些盒子该怎么摆放在页面上面呢?--这其实就是格式化上下文的工作;
比如:块元素“自带换行符”、行内元素无法设置上下外边距和高度 等等等
这些我们平时觉得理所应当的规则 其实就是格式化上下文的组成部分,
浏览器就是按照这些规则来将我们写的页面展示给用户看的;
BFC
即块级格式化上下文,它是一个独立的渲染区域,它规定了内部的Block-level Box如何布局,并且与这个区域外部毫不相干。
BFC可以让元素成为隔离独立的容器,且容器内的子元素不会影响到外面的布局
BFC布局规则:
- 内部的Box会在垂直方向,一个接一个地放置。
- Box垂直方向的距离由margin决定。属于同一个BFC的两个相邻Box的margin会发生重叠
- 每个元素的margin box的左边, 与包含块border box的左边相接触(对于从左往右的格式化,否则相反)。即使存在浮动也是如此。
- BFC的区域不会与float box重叠。
- BFC就是页面上的一个隔离的独立容器,容器里面的子元素不会影响到外面的元素。反之也如此。
- 计算BFC的高度时,浮动元素也参与计算
如何创建BFC:
- 根元素body
- float属性不为none
- position为absolute或fixed
- display为inline-block, table-cell, table-caption, flex, inline-flex
- overflow不为visible
BFC的应用场景
解决容器内子元素浮动、绝对定位等原因造成的高度塌陷的问题;
Box与Formatting Context的更多相关文章
- BFC(Box Formatting Context)的原理
BFC 已经是一个耳听熟闻的词语了,网上有许多关于 BFC 的文章,介绍了如何触发 BFC 以及 BFC 的一些用处(如清浮动,防止 margin 重叠等).虽然我知道如何利用 BFC 解决这些问题, ...
- BFC(Box,Formatting,Context) —— 块级格式化上下文
Box:CSS布局的基本单位 Formatting context是页面中的一块渲染区域,最常见的是BFC和IFC,CSS3增加了GFC和FFC BFC定义:块级格式化上下文,它是一个独立的渲染区域, ...
- 【转】关于Block Formatting Context--BFC和IE的hasLayout
转自穆乙 http://www.cnblogs.com/pigtail/ 一.BFC是什么? BFC(Block Formatting Context)直译为“块级格式化范围”. 是 W3C CSS ...
- 块级格式化上下文(block formatting context)、浮动和绝对定位的工作原理详解
CSS的可视化格式模型中具有一个非常重要地位的概念——定位方案.定位方案用以控制元素的布局,在CSS2.1中,有三种定位方案——普通流.浮动和绝对定位: 普通流:元素按照先后位置自上而下布局,inli ...
- 关于Block Formatting Context--BFC和IE的hasLayout
转文请标明 --- 出处:穆乙 http://www.cnblogs.com/pigtail/ 一.BFC是什么? BFC(Block Formatting Context)直译为"块级格式 ...
- css Block formatting context BFC
w3c关于BFC解释: http://www.w3.org/TR/CSS21/visuren.html#block-formatting Mdn描述: A block formatting conte ...
- 什么是BFC(Block Formatting Context)
原文:https://segmentfault.com/a/1190000012221820 https://www.w3.org/TR/CSS2/visuren.html#block-formatt ...
- BFC --- Block Formatting Context --- 块级格式化上下文
虽然知道块级格式化上下文是什么东西,但要我把这个东西给说清楚,还真的不是一件容易的事儿,所以这篇文章我就要说说清楚到底什么使传说中的BFC,即块级格式化上下文. 一.BFC的通俗理解 通俗的理解 -- ...
- 关于Block Formatting Context--BFC和IE的hasLayout(转)
转文请标明 --- 出处:穆乙 http://www.cnblogs.com/pigtail/ 一.BFC是什么? BFC(Block Formatting Context)直译为“块级格式化范围”. ...
- 块格式化上下文(Block Formatting Context,BFC)
块格式化上下文(Block Formatting Context,BFC) 是Web页面的可视化CSS渲染的一部分,是块盒子的布局过程发生的区域,也是浮动元素与其他元素交互的区域. 下列方式会创建块格 ...
随机推荐
- 🎀隧道代理ip使用
简介 隧道代理(Tunnel Proxy)是一种特殊的代理服务,它的工作方式是在客户端与远程服务器之间建立一条"隧道".这种技术常被用来绕过网络限制或提高网络安全性. 主要功能 I ...
- DPDI(Dispatch PDI)kettle调度管理平台之实操演练第003讲-数据通途:客户端连接SQL Server的完美攻略
SQL Server简介 基本概念 SQL Server是由微软公司开发的关系型数据库管理系统.它基于SQL(Structured Query Language,结构化查询语言)来管理和操作数据.SQ ...
- php 微信小程序转义403
function code 微信 iv 偶现 encryptedData 41003 encodeURIComponent 关于小程序微信授权登录提示41003 文章简介 原因一(iv和encrypt ...
- [flask]自定义请求日志
前言 flask默认会在控制台输出非结构化的请求日志,如果要输出json格式的日志,并且要把请求日志写到单独的文件中,可以通过先禁用默认请求日志,然后在钩子函数中自行记录请求的方式来实现. 定义日志器 ...
- 指向const的指针和const指针的区别
1. 指向常量的指针(指向const的指针) 指向const的指针,不能改变其所指变量(对象)的值,或者说不能通过这个指向const的指针去改变所指的变量(对象)的值 // 指向const的指针,不能 ...
- 我也来说说经典面试题目-“OOM异常会导致JVM退出吗?”
经典面试题目"OOM异常会导致JVM退出吗? 我的回答是"这要分情况看,对于守护线程来说,OOM并不会导致JVM退出:对于非守护线程来说,如果某个线程捕获了OOM异常并正确进行了处 ...
- NOIP集训 P11071 「QMSOI R1」 Distorted Fate 题解
对本题的评价:有思维含量的线段树好题.曲子好听,曲绘好看,曲师人品好,谱子写得好,鸠好看 题解: P11071 「QMSOI R1」 Distorted Fate 给定一个长度为 \(n\) 的数组 ...
- 解决C盘根目录不能创建文件,只能创建文件夹问题
转载:https://blog.csdn.net/xinke453/article/details/7496545 解决方法 用管理员运行cmd 输入 icacls c:\ /setintegrity ...
- 使用dtree制作一个简单的网站导航(后台管理)
目录 效果展示(轻喷) dtree简介 涉及技术 目录结构 各个文件详情 index.html top.html left.html main.html cpright.html dtree下载地址 ...
- git-fame实战操作
参考网址:https://pydigger.com/pypi/git-fame,https://github.com/casperdcl/git-fame Git-fame 简介: Pretty-pr ...