盒子模型
1、认识盒子模型
HTML 中的每一个元素都可以看做是一个盒子,如下图所示,可以具备这 4 个属性。

内容(
content): 元素的内容 width/height内边距(
padding): 元素和内容之间的间距边框(
border): 元素自己的边框外边距(
margin): 元素和其他元素之间的间距
2、盒子模型的四边
因为盒子有四边, 所以margin/padding/border都包括top/right/bottom/left四边

3、内容 – content
设置内容是通过宽度和高度设置的。
- 宽度设置:
width - 高度设置:
height
注意: 对于行内级非替换元素来说, 设置宽高是无效的!
可以设置其他属性:
min-width:最小宽度,无论内容多少,宽度都大于或等于 min-widthmax-width:最大宽度,无论内容多少,宽度都小于或等于 max-widthmin-height:最小高度,无论内容多少,高度都大于或等于 min-heightmax-height:最大高度,无论内容多少,高度都小于或等于 max-height- 移动端适配时, 可以设置最大宽度和最小宽度
4、内边距 - padding
设置盒子的内边距, 通常用于设置边框和内容之间的间距。
padding 包括四个方向, 所以有如下的取值:
padding-top:上内边距padding-right:右内边距padding-bottom:下内边距padding-left:左内边距
padding 单独编写是一个缩写属性:
- padding-top、padding-right、padding-bottom、padding-left 的简写属性;
- padding 缩写属性是从零点钟方向开始, 沿着顺时针转动的, 也就是上右下左;
padding 并非必须是四个值, 也可以有其他值:

5、边框 - border
设置盒子的边框。
边框相对于content/padding/margin来说特殊一些:
- 边框具备宽度
width; - 边框具备样式
style; - 边框具备颜色
color;
设置边框的方式:
边框宽度:
border-top-width、border-right-width、border-bottom-width、border-left-widthborder-width是上面 4 个属性的简写属性边框颜色:
border-top-color、border-right-color、border-bottom-color、border-left-colorborder-color是上面 4 个属性的简写属性边框样式:
border-top-style、border-right-style、border-bottom-style、border-left-styleborder-style是上面 4 个属性的简写属性- groove:凹槽, 沟槽, 边框看上去好象是雕刻在画布之内
- ridge:山脊, 和 grove 相反,边框看上去好象是从画布中凸出来

相对某一边同时设置 宽度 样式 颜色, 可以进行如下设置:
- border-top
- border-right
- border-bottom
- border-left
- border:统一设置 4 个方向的边框
边框颜色、宽度、样式的编写顺序任意
<line-width> || <line-style> || <color>
圆角 – border-radius
设置盒子的圆角
常见的值:
- 数值: 通常用来设置小的圆角, 比如 6px;
- 百分比: 通常用来设置一定的弧度或者圆形;
border-radius 事实上是一个缩写属性:
- 将这四个属性 border-top-left-radius、border-top-right-radius、border-bottom-right-radius,和 border-bottomleft-radius 简写为一个属性。
6、外边距 - margin
设置盒子的外边距, 通常用于元素和元素之间的间距;
margin 包括四个方向, 所以有如下的取值:
margin-top:上内边距margin-right:右内边距margin-bottom:下内边距margin-left:左内边距
margin 单独编写是一个缩写属性:
- margin-top、margin-right、margin-bottom、margin-left 的简写属性
- margin 缩写属性是从零点钟方向开始, 沿着顺时针转动的, 也就是上右下左;
margin 也并非必须是四个值, 也可以有其他值:

上下 margin 的传递:
- margin-top 传递
- 如果块级元素的顶部线和父元素的顶部线重叠,那么这个块级元素的 margin-top 值会传递给父元素
<style>
.box1 {
width: 200px;
height: 50px;
background-color: teal;
}
.box2 {
width: 200px;
height: 50px;
background-color: tomato;
}
.box2 .box2-chird {
width: 100%;
height: 25px;
background-color: pink;
margin-top: 50px;
}
</style>
<div class="box1">box1</div>
<div class="box2">
<div class="box2-chird">box2-chird</div>
</div>
- margin-bottom 传递
- 如果块级元素的底部线和父元素的底部线重写,并且父元素的高度是 auto,那么这个块级元素的 margin-bottom 值会传递给父元素
<style>
.box1 {
width: 200px;
background-color: teal;
}
.box1 .box1-chird {
width: 100%;
height: 25px;
background-color: pink;
margin-bottom: 50px;
}
.box2 {
width: 200px;
height: 50px;
background-color: tomato;
}
</style>
<div class="box1">
<div class="box1-chird">box1-chird</div>
</div>
<div class="box2">box2</div>
建议:
- margin 一般是用来设置兄弟元素之间的间距
- padding 一般是用来设置父子元素之间的间距
上下 margin 的折叠
垂直方向上相邻 2 个 margin(margin-top、margin-bottom)会合并为 1 个 margin,这种现象叫做 collapse(折叠)
水平方向上的 margin(margin-left、margin-right)永远不会 collapse
折叠后最终值的计算规则:
- 两个值进行比较,取较大的值
折叠后最终值的计算规则:
- 两个值进行比较,取较大的值
上下 margin 折叠的情况:
- 两个兄弟块级元素之间上下 margin 的折叠
- 父子块级元素之间 margin 的折叠

7、外轮廓 - outline
设置元素的外轮廓
- 不占用空间
- 默认显示在
border的外面
相关属性:
outline-width: 外轮廓的宽度outline-style:取值跟 border 的样式一样,比如 solid、dotted 等outline-color: 外轮廓的颜色outline:outline-width、outline-style、outline-color 的简写属性,跟 border 用法类似
应用实例:
- 去除 a 元素、input 元素的 focus 轮廓效果
8、盒子阴影 – box-shadow
设置一个或者多个阴影
每个阴影用表示;
多个阴影之间用
逗号,隔开,从前到后叠加;常见格式:
inset?&&<length>{2,4}&&<color>?
- 第 1 个 length:offset-x, 水平方向的偏移,正数往右偏移
- 第 2 个 length:offset-y, 垂直方向的偏移,正数往下偏移
- 第 3 个 length:blur-radius, 模糊半径
- 第 4 个 length:spread-radius, 延伸半径
- color:阴影的颜色,如果没有设置,就跟随 color 属性的颜色
- inset:外框阴影变成内框阴影
盒子阴影 – 在线查看:
https://html-css-js.com/css/generator/box-shadow/
9、文字阴影 - text-shadow
用法类似于 box-shadow,用于给文字添加阴影效果
常见格式:
<length>{2,3}&&<color>?
文字阴影 – 在线查看:
https://html-css-js.com/css/generator/text-shadow/
10、box-sizing
来设置盒子模型中宽高的行为
content-box
- padding、border 都布置在 width、height 外边
- 元素的实际占用宽度 = border + padding + width
- 元素的实际占用高度 = border + padding + height

border-box
padding、border 都布置在 width、height 里边
元素的实际占用宽度 = width
元素的实际占用高度 = height
