x 字母
基线就是“x”字母的下边缘。
x-heigth的高度就是x字符的高度
vertical-align默认值就是基线 baseline。<br>middle是基线往上的1/2 x-height高度。
内联元素默认是基线对齐
替换元素的对齐是元素下边缘
line-height
div的高度由line-heigth决定,而不是字体。
例如:5-1.html
行距=line-heigth - font-size
半行距是content-box - font-size(content-box上边缘到文字的上边缘)???
影响元素高度的有字体和字体大小,如chrome下默认字体span的是21px,firefox是19px
替换元素,块级元素不受line-heigth影响???。
line-heigth可以直接近似(文字垂直中线要比行框垂直中线低)垂直居中,不需要和heigth一起使用。(原因是行距是上下等分机制)
多行内容垂直居中,利用内联元素的vertical-align:middle,line-height对行框幽灵节点的影响。
例如:5-1.html
默认值是normal,不同浏览器或操作系统有不同的默认字体,而line-height的值和字体有关,<br>也就是说默认值时,在不同环境有不同的值,所以这个值要重置。
除了normal默认值外,还可以数值,百分比,长度单位,如果font-size都14px
line-heigth: 1.5,最终值是 line-heigth = 14 * 1.5 = 21px;
line-heigth:150%,最终值是 line-heigth = 14 * 150% = 21px;
line-heigth: 16px 或 1.5em(最终值是 line-heigth = 14 * 1.5 = 21px);
虽然数值,百分比,或是em作为单位最后的计算结果一样,但是作为可以继承的属性,子元素继承的结果是不一样的<br>数值继承的还是数值,子元素还会计算一次,而百分比或是em则继承的是最终的计算值,且不会再计算。
例如:5-2.html
vertical-align
值类型
baseline(默认值),top, middle, bottom
text-top, text-bottom
super, sub
数值百分,20px , 2em ,20%(相对line-height计算)
起作用前提
内联元素以及display值为table-cell的元素
浮动和绝对定位会让元素块状化,vertical-align不起作用。
当div内只有一个img元素时,设置vertical-align:middle不生效,原因是幽灵节点高度太小,可以给div设置一个大的行高
例如:5-5.html
display:table-cell,作用在元素自身而不是子元素,所以在本元素设置vertical-align:middle才有效
例如:5-5.html
容器高度不等于行高的情况
例如:5-6.html
出现这种情况是因为:span元素里的字体大小为24px,span元素前面的幽灵节点的大小还是默认的大小,而line-height都是32px,由于字体越大基线越底,幽灵节点的基线比span元素的基线高,要基线对齐,彼此上下位移,导致高度超出line-height。
可以设置相同大小的字体就可以了,或者改成vertical-align:top对齐方式
块级元素,里有图片,块级元素的高度要比图片高度要高。
例如:5-6.html
出现这种情况也是line-heigtht和vertical-align,和幽灵节点的作用。
解决问题
让图片块状化,消除幽灵节点
让幽灵节点的半行距足够小,设置line-height:0就可以了,这样还可以让Img保留内联特性
当line-height为数值百分比时可以设置 font-size:0
由于默认是baseline,可以设置vertical-align其他属性,top,middle,bottom等。
inline-block元素
一个inline-block元素,如果里面没有内联元素,或者overflow不是visible,则该元素的基线就是margin的下边缘。<br>否则其基线就是元素里最后一行内联元素的基线。
例如:5-7.html