盒模型
盒模型
块级元素
盒子在内敛方向上扩展,并占据父元素内所有可用空间,绝大多数情况下和父元素等宽。
每个盒子独占一行
可以设置 width, height,padding,margin,border
内联元素
所有 inline 元素排成一行
不能设置高度、宽度
水平方向的 margin, border, padding 会把其他
inline元素推开垂直方向的 margin, border, padding 虽然会应用但是不会把其他
inline元素推开
inline-block
是 block 和 inline 的折中,可以设置 width / height, 还能设置 padding, margin, border,但是不会换行。
外部 & 内部显示类型
外部显示类型:决定盒子是**块级**元素还是内联元素
内部显示类型:决定黑子内部是如何布局的,默认情况时按照正常文档流,但也可以使用 flex / grid 布局。
box-sizing
content-box(默认),只包含 content
border-box,包含 content, padding, border
IE6 及更早版本默认使用的就是 border-box
外边距折叠
垂直方向的两个外边距相遇时,会合并成两者之间外边距大的那一个。
元素嵌套时,子元素的上下外边距也会和父元素的合并ÎÎ(如下所示)
即便是一个元素的上下外边距也会发生合并(内容高度为 0 时)
多个元素的上下外边距也会不断合并
外边距折叠只会发生块级元素的垂直方向上

包含块 Containing block
作用
包含块通常为该元素的最近的**块级祖先的内容区**,但不总是这样。元素的大小、位置通常是根据它的包含块计算而得。
如一个元素的 width, height, padding, margin 等属性设置为某一百分比时,其参照的目标就是该元素的包含块的 width 或 height;或者某一元素的相对偏移位置,也是基于其包含块计算得来。
如何确定元素的包含块?
确定元素的包含块完全取决于他的 position 属性:
static,relative,sticky:最近的**块级祖先的内容区**absolute:最近非static的**祖先元素的内边距区域**fixed:即浏览器的 viewport
注意
absolute的包含块不仅仅是 content 区域,而是还额外包含了 padding 区域,参考下面的例子:
但是如果将子元素修改为 absolute ,他的包含块就会变为最近祖先元素的内边距区域(包含了 padding)

百分值的参考目标
height, top, bottom 根据包含块的
height值width, left, right, padding, margin 根据包含块的
width值
块格式化上下文 BFC
一个 BFC 区域只包含其子元素,不包含子元素的子元素
不同 BFC 元素直接完全隔离,用这个特性使得 BFC 区域之间的布局不产生影响
触发 BFC 的条件
html 根元素
float 元素
poistion: absolute / fixed
display: inline-block / flex / grid / 表格单元格 / 表格标题 / 匿名表格单元格元素
overflow:不是 visiable(默认) 的元素
使用场景
避免被浮动的元素被覆盖

防止 margin 塌陷
只含有 float 元素的父元素高度为 0 ,为父元素设置 BFC 可以解决
阻止文字环绕 float 元素

背景
背景颜色
background-color 支持:
#FFFFFF / #FFF
#FFFFFF; opacity: 0.5;
rgb(255, 255, 255)
rgba(255, 255, 255, 0.5)
hsl(74, 64%, 59%), hsla(...)
背景图片
Last updated