盒子模型

盒模型、盒子模型、框模型(box model)

CSS将页面中的所有元素都设置为了一个矩形的盒子

将元素设置为矩形的盒子后,对页面的布局就变成将不同的盒子摆放到不同的位置

每一个盒子都由以下几个部分组成:

内容区

内容区(content):元素中的所有的子元素盒文本内容都在内容区中排列

内容区的大小由width盒height两个属性来设置

width:设置内容区的宽度

Height:设置内容区的高度

边框(border)

边框属于盒子边缘,边框里边属于盒子内部,出了边框都是盒子外部

要设置边框,需要至少设置三个样式

边框的宽度 border-width 默认值一般是3px,不同浏览器不一样

​ 也可以指定四个方向的宽度,上右下左

​ 三个值:上 左右 下

​ 两个值:上下 左右

​ 一个值:上下左右

​ 除了boder-width,还有border-xxx-width,用来单独指定一个边的宽度

边框的颜色 border-color

​ 也可以按上右下左设置不同的颜色,如果省略则自动使用color的颜色

边框的样式 border-style

​ 默认值是null,表示没有边框

​ 也可按照上右下左来指定四个方向样式

​ solid:表示实线

​ Dotted:点状虚线

​ dashed:虚线

​ Double:双线

border简写,通过该属性可以同时设置边框所有的相关样式,并且没有顺序要求

还有border-xxx,也适用于下面的简写 border-top

border:10px orange solid

内边距(padding)

内容区和边框之间的距离是内边距

一共有四个方向的内边距

​ Padding-top

​ Padding-right

​ Padding-bottom

​ Padding-left

内边距的设置会影响到盒子的大小

背景颜色会延申到内边距上

一个盒子的可见框的大小,由内容区 内边距和 边框共同决定

所以在计算盒子大小时,需要将这三个区域加到一起计算

Padding 内边距的简写属性,可以同时指定四个方向的内边距,规则和border-width一样

外边距(margin)

外边距不会影响盒子可见框的大小

但是外边距会影响盒子的位置

一共有四个方向的外边距

​ Margin-top:上外边距,设置一个正值,元素会向下移动

​ Margin-right:

​ Margin-bottom:下外边距,设置一个正值,其下边的元素会移动

​ Margin-left:左外边距,设置一个正值,元素会向右移动

​ 所以默认情况下,如果我们设置的是左和上外边距则会移动元素自身

​ 而设置下和右外边距会移动其他元素

​ margin也可以设置负值,则元素会向相反的方向移动

​ margin会影响到盒子实际占用空间大小

水平方向的布局

元素在其父元素中,水平方向的位置由以下几个属性共同决定

​ Margin-left

​ Border-left

​ Padding-left

​ Width

​ Padding-right

​ Border-right

​ Margin-right

一个元素在其父元素中,水平布局必须要满足以下的等式

上面的相加=其父元素内容区的宽度(必须满足)

以上等式必须满足,如果相加结果使等式不成立,则称为过渡约束,则等式会自动调整

调整的情况

​ 如果这七个值中没有auto的情况,则浏览器会自动调整margin-right值以使等式满足

这七个值中有三个值可以设置为auto

​ Width

​ Margin-left

​ Margin-right

如果某个值为auto,则会自动调整为auto的那个值以使等式成立

垂直方向的布局

默认情况下父元素的高度被内容撑开

子元素是在父元素的内容区中排列的,如果子元素超过父元素,则子元素会从父元素中溢出

使用overflow属性来设置父元素如何处理溢出的子元素

可选值:

​ visible:默认值,子元素会从父元素中溢出,在父元素外部的位置显示

​ hidden:溢出内容会被裁剪不会显示

​ scroll:生成两个滚动条,通过滚动条来查看完整的内容

​ Auto:根据需要生成滚动条

Overflow-x:单独处理水平方向

Overflow-y:单独处理垂直方向

垂直外边距的折叠

相邻的垂直方向外边距会发生重叠现象

兄弟元素

​ 兄弟元素间的相邻垂直外边距会取两者之间的较大值(两者都是正值)

​ 特殊情况:

​ 如果相邻的外边距一正一负,则取两者和

​ 如果相邻的外边距都是负值,则取两者中绝对值较大的

​ 兄弟元素之间的外边距的重叠,对于开发是有利的,所以我们不需要进行处理

父子元素

​ 父子元素间的相邻外边距,子元素的会传递给父元素(上外边距)

​ 父子外边距的折叠会影响到页面的布局,必须进行处理

行内元素的盒模型

行内元素不支持设置宽度和高度

行内元素可以设置padding,但是垂直方向的padding不会影响布局

行内元素可以设置border,垂直方向的border不会影响页面的布局

行内元素可以设置margin,垂直方向的margin不会影响布局

Display用来设置元素显示的类型

可选值:

​ Inline 将元素设置为行内元素

​ Block 将元素设置为块元素

​ Inline-block:将元素设置为行内块元素

​ 行内块,既可以设置宽度和高度又不会独占一行

​ Table:将元素设置为一个表格

​ none:元素不在页面中显示

visibility:用来设置元素的显示状态

可选值:

​ Visible:默认值,元素在页面中正常显示

​ Hidden:元素在页面中隐藏,不显示,但是依然占据页面的位置


盒子模型
https://blog-theta-ten.vercel.app/2021/07/19/盒子模型/
作者
Chen
发布于
2021年7月19日
许可协议