css盒子模型及盒子模型的类型

html-css022

css盒子模型及盒子模型的类型,第1张

转自 菜鸟教程

所有HTML元素可以看作盒子,在CSS中,"box model"这一术语是用来设计和布局时使用。

CSS盒模型本质上是一个盒子,封装周围的HTML元素,它包括: 边距(外边距) 边框 填充(内边距) ,和 实际内容

盒模型允许我们在其它元素和周围元素边框之间的空间放置元素。

下面的图片说明了盒子模型(Box Model):

转自 链接

盒子模型有两种,分别是W3C盒子模型(标准盒模型)和IE盒子模型(怪异盒模型)

1.标准盒模型中width指的是内容区域content的宽度;height指的是内容区域content的高度。

2.标准盒模型下盒子的大小 = content + border + padding + margin

1.怪异盒模型中的width指的是内容、边框、内边距总的宽度(content + border + padding);height指的是内容、边框、内边距总的高度

2.怪异盒模型下盒子的大小=width(content + border + padding) + margin

建议不要给元素添加具有指定宽度的内边距,而是尝试将内边距或外边距添加到元素的父元素和子元素。

即box-sizing属性可以指定盒子模型种类,content-box指定盒子模型为W3C(标准盒模型),border-box为IE盒子模型(怪异盒模型)。

显然,盒模型比我想象的,比我最开始在前端课程中学到的其实要复杂得多。

我将现阶段学到的内容与过去学习所留下的印象进行对比,得出了如下我以为CSS盒模型中的难点和容易被忽视的点。

它是一切开始的基础

在MDN的文章中,盒模型被分为 标准盒模型 替代盒模型

通常我们一开始学习的盒模型是标准盒模型,它的width和heigth属性所设置的是content的宽度和高度,而不是盒子部分的宽度和高度(把border和它所围起来的部分叫盒子部分)

所以在练习布局的时候,我们有时候会觉得这个width和heigth很怪,并不能很方便直接地将我们心中所想象的布局表达出来,有时甚至需要计算。

而替代盒模型更符合我们的直觉。替代盒模型中的width heigth所指即为border所包括部分的width heigth.

将浏览器默认的标准盒模型改为替代盒模型

margin可以有负数,而padding不可以为负数。

负数意味着样式会重叠入侵。

[图片上传失败...(image-b2c4e1-1642049365894)]

可以参考视频: CSS外边距塌陷 - Web前端工程师面试题讲解

折叠的规则很好理解,大的覆盖小的,长的覆盖短的。

比如A和B的外边距折叠,A的外边距为10, B的外边距为20,那么结果是AB的间距为20。

外边距重叠的情况一共有三种。

之所以是垂直方向,是因为折叠发生在block元素上,block元素并不存在水平相接的情况。

对于Inline元素,比如说两个水平相接的span标签,实测是不会折叠的。

这个有点复杂,MDN的说法如下:

举例如下:

设置了border:solid, 正常:

将border:solid设置为none后,出现了折叠。(可以理解为偏移的参照系变化了,未设置Border,参照变成了上面的divB)

更为深入的探究,等往后遇到了再说吧。

参考: MDN盒模型

盒子模型:当对一个文档进行布局的时候,浏览器的渲染引擎会根据标准之一的 CSS 基础框盒模型,将所有元素表示为一个个矩形的盒子。

组成:一个盒子由四个部分组成:content(内容)、padding(内边距)、border(边框)、margin(外边距)

盒子总宽度 = width(内容宽度) + padding + border + margin

盒子总高度 = height(内容高度) + padding + border + margin