- 盒子模型有元素的内容(content)、边框(border)、内边距(padding)、和外边距(margin)组成。
 - 盒子的实际的大小 = 内容的宽度和高度 + 内边距 + 边框 。
 
盒子边框(border)
border : border-width || border-style || border-color
| 属性 | 作用 | 
|---|---|
| border-width | 定义边框粗细,单位是px | 
| border-style | 边框的样式 | 
| border-color | 边框颜色 | 
边框的样式:
- none:没有边框即忽略所有边框的宽度(默认值)
 - solid:边框为单实线(最为常用的)
 - dashed:边框为虚线
 - dotted:边框为点线
 
border-image
- 用边框画三角形,使用边框衔接部分
 
内边距(padding)
padding属性用于设置内边距。 是指 边框与内容之间的距离。
| 属性 | 作用 | 
|---|---|
| padding-left | 左内边距 | 
| padding-right | 右内边距 | 
| padding-top | 上内边距 | 
| padding-bottom | 下内边距 | 
当我们给盒子指定padding值之后, 发生了2件事情:
- 内容和边框 有了距离,添加了内边距。
 - 盒子会变大了。
 
注意: 后面跟几个数值表示的意思是不一样的。
| 值的个数 | 表达意思 | 
|---|---|
| 1个值 | padding:上下左右内边距; | 
| 2个值 | padding: 上下内边距 左右内边距 ; | 
| 3个值 | padding:上内边距 左右内边距 下内边距; | 
| 4个值 | padding: 上内边距 右内边距 下内边距 左内边距 ; | 
padding不影响盒子大小情况:如果没有给一个盒子指定宽度, 此时,如果给这个盒子指定padding, 则不会撑开盒子。
外边距(margin)
margin属性用于设置外边距。 margin就是控制盒子和盒子之间的距离
| 属性 | 作用 | 
|---|---|
| margin-left | 左外边距 | 
| margin-right | 右外边距 | 
| margin-top | 上外边距 | 
| margin-bottom | 下外边距 | 
margin值的简写 (复合写法)代表意思 跟 padding 完全相同。
外边距合并
使用 margin 定义块元素的垂直外边距时,可能会出现外边距的合并。
(1)相邻块元素垂直外边距的合并
- 当上下相邻的两个块元素相遇时,如果上面的元素有下外边距margin-bottom
 - 下面的元素有上外边距margin-top,则他们之间的垂直间距不是margin-bottom与margin-top之和
 - 取两个值中的较大者这种现象被称为相邻块元素垂直外边距的合并(也称外边距塌陷)。
 - 解决方案:尽量给只给一个盒子添加margin值。
 
(2)嵌套块元素垂直外边距的合并(塌陷)
- 对于两个嵌套关系的块元素,如果父元素没有上内边距及边框
 - 父元素的上外边距会与子元素的上外边距发生合并
 - 合并后的外边距为两者中的较大者
 
解决方案:
- 可以为父元素定义上边框。
 - 可以为父元素定义上内边距
 - 可以为父元素添加overflow:hidden。
负值
https://zhuanlan.zhihu.com/p/25892372
其他
块级盒子水平居中
 
- 可以让一个块级盒子实现水平居中必须:
- 盒子必须指定了宽度(width)
 - 然后就给左右的外边距都设置为auto,
 
 
实际工作中常用这种方式进行网页布局,示例代码如下:
.header{ width:960px; margin:0 auto;}
文字居中和盒子居中区别
- 盒子内的文字水平居中是 text-align: center, 而且还可以让 行内元素和行内块居中对齐
 - 块级盒子水平居中  左右 margin 改为 auto 
text-align: center; /* 文字 行内元素 行内块元素水平居中 */margin: 10px auto; /* 块级盒子水平居中 左右margin 改为 auto 就阔以了 上下margin都可以 */
清除元素的默认内外边距(重要)
为了更灵活方便地控制网页中的元素,制作网页时,我们需要将元素的默认内外边距清除
代码:
注意:{padding:0; /* 清除内边距 */margin:0; /* 清除外边距 */}
 
行内元素为了照顾兼容性, 尽量只设置左右内外边距, 不要设置上下内外边距。
盒子模型布局稳定性
学习完盒子模型,内边距和外边距,什么情况下用内边距,什么情况下用外边距?
大部分情况下是可以混用的。 就是说,你用内边距也可以,用外边距也可以。 你觉得哪个方便,就用哪个。
我们根据稳定性来分,建议如下:
按照 优先使用  宽度 (width)  其次 使用内边距(padding)    再次  外边距(margin)。
width > padding > margin
- 原因:
- margin 会有外边距合并 还有 ie6下面margin 加倍的bug(讨厌)所以最后使用。
 - padding 会影响盒子大小, 需要进行加减计算(麻烦) 其次使用。
 - width 没有问题(嗨皮)我们经常使用宽度剩余法 高度剩余法来做。
 
 
代替盒模型
- 标准盒模型
 

- 替代(IE)盒模型
 

.box {box-sizing: border-box;}
content-box(default)
