盒模型: 规定单个盒子的规则
视觉格式化模型(布局规则):页面中多个盒子排列规则
视觉格式化模型 大体上将页面中盒子分为三种方式:
文档流 普通文档流 常规文档流
所有元素默认情况下都属于常规流布局
总体规则:块盒独占一行 行盒水平依次排列
包含块(containing block): 每个盒子都有他的包含块,包含块决定盒子的排列区域。
绝大部分情况下,盒子的包含块,为其父元素的内容盒
块盒
宽度的默认值 auto
margin 的取值也可以是auto 不过默认值为0
auto:将剩余空间吸收掉
width吸收能力强于margin 所以都是auto时,margin为0
若宽度 边框 内边距 外边距计算后,仍然有剩余空间 该剩余空间被margin-right全部吸收
常规流中,块盒在其包含块中居中,可以定宽,然后左右margin设置auto
margin:0 auto;
height:auto 适应内容高度
margin:auto 表示0
padding 宽 margin 可以取值百分比
以上的所有百分比 是相对于包含块的宽度 与高度无关
高度百分比:
3.1 包含块的高度取决于子元素高度,设置百分比无效
3.2 包含块的高度不取决子元素高度,百分比相对于父元素高度
两个常规流块盒,上下外边距相邻,会合并
两个外边距取最大值
父子元素也会出现合并现象,如果不想合并,可以对父元素添加
border: 3px solid; 或者: padding-top: 50px;
完整代码:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <style> body{ margin: 0; } .parent{ background-color: lightblue; height: 300px; margin-top: 50px; /* border: 3px solid; */ padding-top: 50px; } .child{ height: 100px; background-color: red; margin-top: 50px; width: 200px; } </style> </head> <body> <div class="parent"> <div class="child"></div> </div> </body> </html>