文档流 & 元素类型
文档流
标准文档流
标准文档流指的是元素排版布局过程中,元素会默认自动从左往右,从上往下的流式排列方式。并最终窗体自上而下分成一行行,并在每行中从左至右的顺序排放元素。
一些微观表现:
行元素(包括行内块)间的缝隙现象。
高矮不齐,底边对齐。
自动换行,一行写不完时,换行写。
注意
CSS transform属性不会脱离文档流,也不会改变原来元素在文档流中的位置大小,只是对节点本身进行动画变形.
溢出文档流
由overflow属性效果决定。
脱离文档流
脱离文档流的元素是不会被父元素计算高度的,且脱离文档流的元素会拥有块级元素的特点。
脱离文档流方法:
position:absolute/fixed
float:left/right
元素类型
行元素
行元素属于标准文档流,常见默认行元素类型的标签主要有span ,strong,em
等。其主要特点如下:
- 不可设置元素宽高相关属性。默认宽高为自身所包内容的宽高度(高度主要由
line-height
决定)。 - margin外边距只对
左,右
方向生效。 - padding内边距各方向均生效。
- 与其他行元素(包括行内块元素)在同一行。
- 与同行元素排列时元素间会默认存在间隙,即幽灵空白节点。
- 可通过设置css属性
display:inline
将其他类型元素转为行元素。
块元素
块元素属于标准文档流,常见默认块元素类型的标签主要有div,p,h1~h6,table,form
等。其主要特点如下:
- 可设置元素宽高相关属性。默认宽度为父元素宽度(
所以这种情况下不要重复设置width:100%
)。 - margin,padding属性各方向都有效。
- 每个块元素默认独占一行。
- 可通过设置css属性
display:block
将其他类型元素转为块元素。
行内块元素
常见默认行内块元素类型的标签主要有img,input,td
等。其主要特点如下:
- 可设置宽高相关属性,默认为自身内容宽高度。
- 与其他行元素(包括行内块元素)在同一行。
- margin,padding属性各方向都有效。
- 与同行元素排列时元素间会默认存在间隙,即幽灵空白节点。
- 可通过设置css属性
display:inline-block
将其他类型元素转为行内块元素。
幽灵空白节点
定义
如果一个行元素存在:
- 含有文字
- 保留空格
- 包含非0的margin或padding或border的inline元素
- 其他in-flow内容(图片、inline-block或inline-table元素)
- 以保留的换行符结束
上述任一情况,则会在该内联元素的前面生成一个宽度为0,透明且无法通过脚本获取的幽灵空白节点(strut)
,如strut...<span>...</span>
。
如果上述都不符合,则该元素会被视作高度为0的line-box。
——张鑫旭《CSS世界》
消除幽灵空白节点的方法:
- 父元素设置
font-size
为0,子元素单独再设置字体大小:
html
<div style="font-size: 0">
<span style="font-size: 16px">我是行内元素</span>
<span style="font-size: 16px">我是行内元素</span>
</div>
- 改变元素类型,例如设置
display:flex
- 设置浮动float
- ...