CSS: line-height and vertical align
Reading notes of this brilliant post explaining line-height and vertical-align. Some information comes from my experiments.
Reference: mdn web docs of vertical-align
Font property
em-square
relative units, usually 1000 units. container.
metric ascent, descent
- ascent baseline to top
- descent baseline to bottom
metric line gap
metric line gap + metric ascent + metric descent =
line-heightnormalcapital height, x height
Inline element height
texts
content area height
ascent + descent
css
backgroundarea = content area + paddingvirtual-area height
line-height
virtual-area height - content-area height = leading
Half of leading is added before top of content-area, and half after bottom. Therefore content-area is always on the middle of virtual-area.
replaced inline, inline-block, inline-*
content-area height
virtual-area height: if text, then
line-height; else content-area height
Line box
Height of line box is based on its children's virtual-area height, from highest to lowest
vertical-align
baseline: baseline to parent baseline.text-top/text-bottom: virtual-area top/bottom to top/bottom of parent content-areamiddle: middle to (parent baseline + 0.5 * parent x-height)top/bottom: virtual-area top/bottom to top/bottom of parent line box<length>: relative tobaseline<percentage>: relative tobaseline. percentage of itsline-height
For elements that do not have a baseline, the bottom margin edge is used instead.
