我试图了解垂直对齐的工作原理。在Understanding vertical-align, or "How (Not) To Vertically Center Content"中,有一个包含<p>
的{{1}}的示例,看起来像我期望的那样。
我搞砸了,我做到了:
<span style="display: inline-block; vertical-align: middle">
p {
background: yellow
}
span {
display: inline-block;
vertical-align: middle;
height: 50px;
background: pink;
}
...但是我没想到会有这个结果(运行代码片段以查看)。为什么在仅将<p>
Hello <span>What in the</span> World?
</p>
应用于vertical-align
之后, else 的所有内容都垂直对齐了 <span>
的内容?>
我并不想“修复”任何东西,但我想了解为什么会发生这种情况。这是预期的行为,错误还是其他?
答案 0 :(得分:2)
这是预期的行为,错误还是其他?
是的,这是预期的行为。
为什么仅对
<span>
应用垂直对齐后, 除了<span>
内容以外,其他所有内容都垂直对齐
不是完全一样,vertical-align
将指定元素的对齐方式,并基于此浏览器将呈现输出。因此,您所有的元素都在对齐,而不仅仅是像您想的那样。
让我们从删除对齐方式开始
p {
background: yellow
}
span {
display: inline-block;
height: 50px;
background: pink;
}
<p>
Hello <span>What in the</span> World?
</p>
默认对齐方式为baseline
,因此inline-block
的基线将与其父级p
的基线对齐。 ref
inline-block
元素的基线由p
中相同内容定义。为了更好地了解这一点,请使用其他font-size
。
p {
background:
linear-gradient(red,red) 0 22px/100% 1px no-repeat,
yellow
}
span {
display: inline-block;
height: 50px;
font-size:25px;
background:
linear-gradient(red,red) 0 22px/100% 1px no-repeat,
pink;
}
<p>
Hello <span>What in the</span> World?
</p>
您可以清楚地看到inline-block
元素内的文本与p
中的文本在同一行。
现在,如果添加vertical-align:middle
,则将元素的中间与基线对齐,再加上父元素的x高度的一半。 ref 。 inline-block
的中间只是中间,而父级的基线就像以前基于文本一样,我们只需将 x高度的一半添加。这就是为什么文本以某种方式位于inline-block
元素中间的原因:
p {
background:
linear-gradient(red,red) 0 calc(50% + 0.5ex) /100% 1px no-repeat, /*the baseline*/
yellow;
}
span {
display: inline-block;
height: 100px;
font-size:25px;
vertical-align:middle;
background:
linear-gradient(red,red) center/100% 1px no-repeat, /*the middle*/
pink;
}
<p>
Hello <span>What in the</span> World?
</p>
如您所见,由于元素的中间与基线+ x-height(0.5ex
)的一半对齐,因此基线与中间的对齐稍稍错了
您可以使用不同的值来查看结果。
bottom
(将元素的底部及其后代与整行的底部对齐。)
p {
background:
yellow;
}
span {
display: inline-block;
height: 100px;
font-size:25px;
vertical-align:bottom;
background:
pink;
}
<p>
Hello <span>What in the</span> World?
</p>
top
(将元素的顶部及其后代与整个行的顶部对齐。)
p {
background:
yellow;
}
span {
display: inline-block;
height: 100px;
font-size:25px;
vertical-align:top;
background:
pink;
}
<p>
Hello <span>What in the</span> World?
</p>
答案 1 :(得分:-3)
这不是错误。这是预期的结果。
设置了block
的{{1}}或inline-block
元素内的内容将对齐到顶部。