-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
line-height
与 vertical-align
#4
Comments
line box 高度
以下代码可以说明这个问题: div {
background: #eee;
border: 1px solid #000;
box-sizing: border-box;
font-size: 50px;
line-height: 10px;
}
span {
background: red;
margin: 10px;
padding: 10px;
}
<div><span>xxx</span></div> leading:content area 的高度与 inline box 的高度差就是 leading,这个 leading 会等分被添加到 content area 的顶部与底部,所以说 content area 永远位于 inline box 的中间(垂直居中)。 strut:浏览器认为每一个 line box 的起始位置都存在一个宽度为 0,没有任何字符的 匿名 inline box,称为 strut,这个 strut 是会从父元素继承 line-height 的,因此它的高度会影响整个 line box 高度的计算。 |
一个例子div { background: #eee; border: 1px solid #000; box-sizing: border-box; }
<div><img src="./image.png" alt=""></div> 在图片中可以看到 在这个例子中,默认情况下 strut 其实就相当于一个不可见的字母 x,上文已经提到 strut 本身是具有 line-height 的,所以就导致图片底部多了一段间隙。 总结一下存在间隙原因:
对应的解决方案:
|
line-heightW3C 中对于 line-height 的解释是这样的:
我的简单理解是,对于由行内元素组成的块级元素而言,line-height 决定了 line box 的最小高度,浏览器会假定每一个 line box 以一个宽度为 0 的 inline box (strut)开始,而这个 strut 从父元素继承到 font 以及 line-height。
|
vertical-alignW3C 对 baseline 以及 middle 的定义如下:
元素基线与父元素基线对齐,如果元素没有基线,比如
元素的垂直中点位置与父元素的基线加上一半 x-height 的位置对齐。 |
几个概念
通过一段代码可以理解一下:
白色的文字就是一个匿名 inline box,红色的文字是一个由
span
包裹的 inline box。这三个 inline box 组成一个 line box,可以理解为灰色的区域,因为在这个例子里就是由一个 line box 撑开了div
。如果有多行的文字,那就有多个 line box。关于 content area,W3C 有一段这样的解释:
这篇文章对非替换元素 content area 的定义就是自有宽高加上 margin,padding 以及 border。我认为应该将 content area 理解为 content box。
The text was updated successfully, but these errors were encountered: