所有html元素都可以看成盒模型
组成
- content 内容
- padding 内边距
- border 边框
- margin 外边距
分类
css3中可以利用box-sizing定义盒子模型类型属性
- content-box:标准盒模型
- border-box:怪异盒模型(IE低版本会使用)
标准的盒模型
- 设置width、height为内容content的宽高
- 元素的宽度和高度:width|height+padding+border+margin
- 大多情况下,默认margin不为0px,padding和border为0px(body默认情况下也有margin)
怪异盒模型(了解)
- 设置width、height为content+padding+border的宽高
- 元素的宽度和高度:width|height+margin
margin和padding
以margin说明设置方式:
- 单值法:margin:10px 设置上下左右外边距为10px
- 二值法:margin:10px 20px 设置上下外边距为10px,左右外边距为20px
- 三值法:margin:10px 20px 30px 设置上边距10px,左右边距为20px,下边距为30px
- 四值法:margin:10px 20px 30px 40px 设置上、右、下、左(顺时钟方向)外边距分别为10px、20px、30px、40px
- 指定方向:margin-top、margin-left、…
设置时可以使用百分比表示:不管哪个方向,都是参照父级元素的宽度width设置
注意:在没有设置align时,margin-left优先级高于margin-right(默认左对齐)。
margin塌陷(针对块级元素)
- 同级元素如果分别设置了上下外边距,两个盒子之间的上下外边距会发生合并。之间的距离取margin-bottom(上盒子)和margin-top(下盒子)的较大值
- 存在嵌套关系的元素,父盒子在不设置padding、border、overflow的情况下,会发生上外边距传递(一直传递到body)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
.container {
width: 400px;
height: 400px;
background: pink;
}
/* 不止div,h1,p等块级元素也存在margin塌陷问题 */
h1 {
margin-top: 100px;
}
/* 而span为行内元素,设置margin-top和margin-bottom无效,不存在margin塌陷问题 */
span {
margin-top: 100px;
}
/* img为行内块元素,可以设置margin-top和margin-bottom,但不存在margin塌陷问题 */
img {
width: 200px;
height: 200px;
margin-top: 100px;
}
</style>
</head>
<body>
<div class="container">
<!-- <h1>HELLO WORLD</h1> -->
<!-- <span>hello world</span> -->
<img src="image/a.jpg" alt="">
</div>
</body>
</html>
border
按方向设置:border-top、border-bottom、border-lefr、border-right
按属性设置:
- border-style:设置边框线型:solid实线、dashed虚线
- border-width:设置厚度
- border-color:设置边框颜色
复合属性:border:style width color
注意
- border至少需要设置两个方向,只设置一个方向等于没边框
- border这个复合属性三个值都必须设置,否则没设置的值默认没有
背景色background设置到边框