我不明白Vertical-Align
什么时候起作用,什么时候不起作用。
每次我遇到Vertical-Align
的用例时,它是否真的能工作似乎都是一个掷硬币的问题。 我知道它必须应用于内联元素。 我读到必须为通常没有line-heighth
的元素指定一个line-heighth
。 我读到height
属性必须具有静态(非自动/非%)值。 我读到一些(现代)浏览器不能正确处理vertical-align
,如果它们所使用的元素不是天生的内联元素。 我不清楚vertical-align
应该在包含元素上(像text-align
)还是在我想要垂直对齐的元素上。
我创建了这个jsfiddle来尝试解决这个问题,但是仍然感到困惑。
null
#outer {
box-sizing: border-box;
border: red 1px solid;
height: 200px;
width: 400px;
text-align: center;
}
#inner {
border: blue 1px solid;
display: inline-block;
height: 200px;
vertical-align: middle;
}
#header {
border: green 1px solid;
display: inline-block;
line-height: 1em;
margin: 0;
}
<div id="outer">
<div id="inner">
<h1 id="header">
Some Text
</h1>
</div>
</div>
null
在上面的jsfiddle中,我希望#header
位于#outer
和#inner
的顶部和底部中间。 显然,事实并非如此。
简单地说:vertical-align
仅当应用它的元素具有display:inlin-block
或ênline
时才有效/有效,例如,如果您想在它们的顶部边框对齐一组图像,则这很有用:您将它们定义为inlin-block
并对它们应用vertical-align:top
下面是一个例子:
null
.wrapper {
height: 250px;
border: 1px solid green;
}
.wrapper>img {
display: inline-block;
vertical-align: top;
}
<div class="wrapper">
<img src="https://placehold.it/120x40">
<img src="https://placehold.it/70x140">
<img src="https://placehold.it/80x60">
<img src="https://placehold.it/60x140">
</div>
最简单的方法来理解为什么添加多行文本不起作用,因为垂直对齐将在相应的行(行框)上对齐,而不是像您可能认为的那样对齐整个容器。
因此,如果我们添加更多的文本,我们将得到以下内容。
null
#outer {
box-sizing: border-box;
border: red 1px solid;
height: 200px;
text-align: center;
}
#inner {
border: blue 1px solid;
height: 200px;
width:180px;
display: inline-block;
overflow:hidden;
}
.header {
display: inline;
border: green 1px solid;
margin: 0;
}
<div id="outer">
<div id="inner">
<h1 class="header">
Some Text Some Text Some Text
</h1>
</div>
<div id="inner">
<h1 class="header" style="vertical-align:middle;">
Some Text Some Text Some Text
</h1>
</div>
<div id="inner">
<h1 class="header" style="vertical-align:top;">
Some Text Some Text Some Text
</h1>
</div>
</div>