CSS 有一个名为 vertical-align 的属性。 当您第一次学习它时,它可能有点令人困惑,所以我认为我们可以帮助解释它是什么以及一些用例。
基本用法如下
img {
vertical-align: middle;
}
请注意,在此用法示例中,它应用于 img
元素。 图像天生就是内联元素,这意味着如果可以,它们将与文本直接内联。 但“内联”到底意味着什么? 这就是 vertical-align
的作用所在。
有效值为:baseline、sub、super、top、text-top、middle、bottom、text-bottom、length 或 百分比值。
在我看来,混乱之处在于当人们尝试在块级元素上使用 vertical-align 并得不到任何结果时。 如果你在一个更大的 div 内部有一个小的 div,并且想要垂直居中较小的 div,vertical-align 不会帮助你。
基线
vertical-align 的默认值(如果您不声明任何内容)是 baseline。 图像将与文本在文本基线处对齐。 请注意,字母的下行字母会向下延伸到基线以下。 图像不会与下行字母的最低点对齐,那不是基线。

中间
也许 vertical-align 最常见的用法是在图标大小的图像上将其设置为“middle”。 结果通常在跨浏览器之间是一致的

浏览器尽其所能将文本的像素高度与图像的像素高度居中

请注意,如果图像大于当前字体大小和行高,它将根据需要将以下行向下推

文本底部
与文本的基线不同,文本底部是下行字母向下延伸的地方。 图像也可以与这种深度对齐

文本顶部
与 text-bottom 相反,text-top 是当前字体大小的最高点。 您也可以与此对齐。 请注意,当前字体 Georgia 可能有一些升部字母高于此处显示的字母,因此存在一个小间隙。

顶部和底部
顶部和底部的工作方式类似于 text-top 和 text-bottom,但它们不受文本的限制,而是受到该行上任何内容(如另一个图像)的限制。 因此,如果同一行上存在两个高度不同的图像,并且都大于该行的文本,则无论该文本大小如何,它们的顶部(或底部)都会对齐。
上标和下标
这些值代表上标和下标,因此使用这些方法对齐的元素会相应地对齐自身

表格单元格的垂直对齐
与图像不同,表格单元格默认情况下垂直对齐到中间

如果您希望看到文本在需要扩展到其所需高度之外时对齐到单元格的顶部或底部,请应用顶部或底部垂直对齐

在表格单元格上使用 vertical-align 时,最好坚持使用顶部、底部和中间。 其他值都没有多大意义,而且跨浏览器的结果不可预测。 例如,将单元格设置为 text-bottom 会在 IE 6 中将文本对齐到底部,在 Safari 4 中对齐到顶部。 将其设置为 sub 会在 IE 6 中导致中间对齐,在 Safari 4 中导致顶部对齐。
vertical-align 和 inline-block
图像虽然从技术上讲是内联级元素,但行为更像内联块元素。 您可以设置它们的宽度和高度,它们会遵守,这与大多数内联元素不同。
内联块元素的行为与 vertical-align 中的图像相同,因此请参考上述内容。 但是,请注意,并非所有浏览器都以相同的方式处理内联块元素,因此 vertical-align 可能是您最不担心的问题。 不过,那是另一个故事……。
已弃用为属性
有时您会看到“valign”用于表格单元格以实现垂直对齐。 例如 <td valign=top>
。 应该注意的是,此属性已弃用,不应使用。 无论如何,没有理由使用它,因为您可以使用 CSS 来完成它。
更多信息
- vertical-align 在年鉴中
- vertical-align 在 MDN 上
- Christopher Aue:关于 Vertical-Align 的所有知识
- 关于它的技巧 用于在未知高度的父级中居中元素
非常感谢,很棒的文章
正如您在之前的帖子中所说,这是改变您 CSS 方式的时刻之一。
非常感谢您发布这篇很棒的文章
可能是 CSS 中最被忽视的属性。 很好的分解!
我刚刚完成了一个布局,我需要在文本中对齐一些图像,我当时想“为什么这个 vertical-align 东西不起作用??” 现在我明白了它的用途 :P 我上次只是使用了相对定位 :S
感谢您澄清!
我一直使用相对定位将图像向下推几个像素,下次一定会尝试使用 vertical-align。 感谢您的文章!
这是那些我 много лет назад 使用过很多的东西之一,当时我使用表格进行设计,不同之处在于它不是 CSS 样式,而是表格、tr 或 td 的内联属性。
你知道吗,我忘了它们,在我的最后一次设计中从未使用过它们。
感谢您的提醒以及出色的解释。
干杯
在刚开始学习 CSS 时,我确实尝试让它适用于块级元素,自从弄清楚它不适用于那些元素后,我就没有真正使用过它。 感谢您的澄清!
很棒的文章,图片让它一目了然。
很喜欢,感谢您用视觉的方式帮助我理解。垂直对齐的讨论不够多。
很棒的文章,非常感谢 Chris。为我解开了几个谜团。
感谢 Chris。这对我很有用。
感谢您花时间为我们分解这个问题。我以前从未见过有人这样做,它可以为我节省大量的反复试验。现在更清楚了。继续在这个网站上做出杰出的工作!
我在 2 月份写过一篇类似的文章。如果有人喜欢中文版本,这里是链接
http://www.61dh.com/blog/2009/02/blog-post.html
:-)
很棒的文章,我喜欢这些只关注一件事并对其进行全面解释的文章。在我阅读这篇文章的几分钟内,我学到了很多东西。
您忘记解释设置像素长度是如何工作的。简单地说,vertical-align: 0px; 从 vertical-align:bottom 的位置开始,向上延伸。
以我的经验,最可靠的属性是 top 和设置像素长度。
至于 inline-block,有一个简单的解决方法来确保 inline-block 在所有浏览器中表现一致。
查看 我的博客的 webdev 部分,了解有关使用 inline-block 和垂直对齐的更多方法
非常有趣。我已经想到了一个网站,需要在几个地方添加这个。我喜欢不断学习新东西。
小事……但这些东西在你是新手的时候很有帮助……这就是 Chris 在这里帮助新手做得很好的原因……
非常非常有信息量。非常感谢。
不错的文章,我一直都在使用反复试验的方法来解决这个问题!
谢谢!
感谢您发布这篇详细的文章!真正高质量的研究。
很棒的文章,谢谢 :)
嘿 Chris,我知道这有点不同,但您能给出一个准确的方法来将图像与文本对齐,而图像是一个链接吗?我知道您可以将左右边距设置为 auto,它应该可以正常工作,但必须将图像设置为块级元素,这样它在被点击时就不会向上移动,从而创建了一个链接,该链接跨越整个块级元素,而不仅仅是图像。
明白我的意思吗?
不错的文章 Chris,这是一些硬核的 CSS 东西!
我知道这个……谢谢。
如何在 div 中垂直对齐内容?除了使用百分比的上边距(对动态页面不利)或使用 display table-cell(对 IE 不起作用)之外,还有其他解决方案吗?
很酷,很棒的东西 Chris!
-FireDart
太棒了兄弟,很喜欢最近的几篇文章,分解了我一直没有认真研究的东西!谢谢!
太棒了,非常感谢!我一直都在尝试将 vertical align 放在包含图像和文本的容器上。
感谢您的解释,用图片更容易理解。
我不认为 TD 上的 valign 已被弃用,如果您担心页面显示方式没有样式,它仍然很有用。
哇,很棒的文章!谢谢。
顺便说一下,在 HTML 电子邮件中始终有使用弃用标签的空间。那些东西一团糟!它们甚至使用表格。您是否曾经发布过关于如何编写电子邮件的文章?
不错的文章!我一直在考虑“align-vertical”很长时间了,谢谢!
“. 应该注意的是,此属性已弃用,不应使用。反正也没什么理由用它,因为你可以用 CSS 来实现。”
除非您正在构建电子邮件,而 CSS 不起作用,那么必须使用它。
适用于
td valign=’middle’
哇,你解释得很好……谢谢。
非常感谢!我知道如何将该属性用于表格单元格,但我不知道它可以用于图像。这肯定会在我的网站上使用。
很棒的文章。你应该写一本书。它会成为大学的教科书。: )
这真的很有用,谢谢!
在处理复选框和单选按钮表单元素时,垂直对齐也很有用。我使用它来使我的标签和输入元素保持在中心线上。
这正是我现在需要的……
感谢您发布了这篇文章。
此属性最酷的地方在于 % 对齐,只需使用 text-align:nn%,即可轻松将文本与图标对齐!负值也可以使用,并且文档仍然是相当符合 W3C 标准的 :)
Chris,你是最棒的!你是我见过的最棒的网页设计老师!
我之前对 vertical-align 很困惑。您让我明白了它。非常感谢。
非常清楚和有用!
谢谢!
以前从未真正了解过这个。非常感谢您发布了这篇文章。
很棒的阅读,解释得很好。
很棒……
问
如果图像或文本链接作为 **块级元素** 与 **左/右浮动** 一起包装,这将起作用吗?我经常遇到这种情况。
谢谢您!!!!!!!!!!!!!!!!!! 我刚刚测试了 vertical-align:super,它在 ie6 上完美运行,没有额外的行高空间。我非常讨厌上标,因为它会导致这个问题!感谢您 Chris,您确实是身穿闪亮 CSS 盔甲的骑士 =D
感谢您清晰的解释!
这非常有用。:'3
今天这对我很有用,感谢您的提醒
当 vertical-align 与下划线一起使用时,下划线在 Firefox 中显示为上划线。CSS 中有 vertical-align 的替代方案吗?
最奇怪的事情是。当将行高设置为像素而不是典型的符号(例如 1.6)时,某些浏览器中的垂直对齐定位会变得很奇怪。对我来说,Chrome 中的 text-top 和 text-bottom 对齐实际上翻转了。
我犯了错误使用它的错误。这篇文章很有帮助。