计算机微刊senWeb前端之路

CSS中的布局详解(一):视觉格式化模型

2017-09-26  本文已影响94人  闰土在流浪

一、盒模型

盒模型,顾名思义,是HTML文档中每个元素在渲染的时候都会被描述成一个矩形盒子,盒模型就是表示每个元素盒子所占空间大小的模型。

盒模型主要有四个部分:

一般来说,默认盒模型实际占用空间计算模式为:

因此, 一个元素的实际大小为:border + padding + width/height

在CSS中,名为box-sizing的属性可以改变元素宽高的计算方式。

box-sizing有两个常用的取值:

二、视觉格式化模型

元素能够被渲染成一个又一个盒子,那么这些盒子的位置在页面中又是如何摆放的呢?

在默认情况下,盒子是按照元素在HTML中的先后位置从左至右从上至下一个接着一个排列放置。

但此时也分为两种情况,有的盒子呈水平排列,有的盒子却占满整个一行。这是因为不同的盒子,使用的是不同的格式化上下文来布局。

格式化上下文常见的有两种:

当元素的display值为block、list-item、table、flex、grid时,它是块级元素,每个块级元素至少生成一个块级盒,块级盒参与BFC,被渲染成完整的一个新行。

W3C对于BFC的定义是:

浮动元素和绝对定位元素,非块极盒子的块级容器,以及overflow值不为“visiable”的块级盒子,都会为他们的内容创建新的块级格式化上下文。
在一个块级格式化上下文里,盒子从包含块的顶端开始垂直地一个接一个地排列,两个盒子之间的垂直的间隙是由他们的margin来决定的,两个相邻的块级盒子的垂直外边距会发生叠加。
在块级格式化上下文中,每一个盒子的左外边缘会触碰到容器的左边缘(对于从右到左的格式来说,则会触碰到右边缘),即使存在浮动也是如此,除非这个盒子创建一个新的块级格式化上下文。

总结一下BFC的特性:

当元素的display值为inline、inline-block、inline-table、inline-flex、inline-grid时,它是行内级元素,行内级元素生成行内级盒,参与IFC,被渲染为水平排列,直到当行被占满然后换行。

总结IFC的渲染规则:

三、一些易混淆的概念

块元素与块级元素

块级元素:块级元素是那些视觉上会被格式化成块状的元素,也就是会换新行的元素。
块元素:块元素是display属性值为block的元素,他应该是块级元素的一个子集。

行内元素与行内及元素

行内级元素:行内级元素是不会为自身内容形成新的块,而让内容分布在多行中的元素。
行内元素:行内元素仅仅是display值为inline的元素,是行内及元素的一个子集。

block,inline,inline-block

block和inline这里不再赘述,重点说一下inline-block:
inline-block是将元素呈现为inline,但元素的内容却又作为block呈现,既具有block的宽高特性,又具有inline的同行特性。

参考资料:

  • 腾讯课堂前端NEXT课程文档——视觉格式化模型

CSS布局详解系列索引:

上一篇下一篇

猜你喜欢

热点阅读