【发布时间】:2014-12-05 08:47:36
【问题描述】:
我通常将文本垂直居中的方法是使用等于容器高度的行高。
因此,容器有
height: 60px;
line-height: 60px;
子元素有
line-height: 60px;
这行得通。但是如果你将font-size 增加到 1em 以上,那就搞砸了。更糟糕的是,浏览器的处理方式不一致!
这是一个 JSFiddle 演示:http://jsfiddle.net/tgv2rx7f/7/。请注意,在 Firefox 中,大“A”。太靠近容器顶部。在演示中看起来并没有那么糟糕,但在我的实际网站上,它非常引人注目且令人分心。如果你在 Firefox 中修复它,那么它在 Chrome 中太低了。
无论我做什么,我似乎都无法让它始终如一地工作。我玩过不同的vertical-align 值、top、text-top、middle... 没有骰子。如果我将容器更改为display:inline,我可以让它工作,但在我的布局中它需要是block 或inline-block。
PS,我不能使用弹性盒子。
编辑:这是我在实际网页(蓝色)和 JSFiddle(绿色)中看到的。
铬:
火狐:
编辑 2:感谢andyb 指出使用ems 会改变使用px 设置的容器的大小。它还有助于揭示另一个复杂性,即浏览器对字体大小和高度的处理方式不同,但这似乎超出了这个问题的范围,所以我创建了一个关于该主题的新问题 (here) 并标记为 andyb's回答为接受。
【问题讨论】:
-
容器可以使用
display:table-cell吗? jsfiddle.net/tgv2rx7f/8 -
很遗憾,不,这破坏了布局。
-
我不确定您看到的大 A 不对齐...jsfiddle.net/tgv2rx7f/39 我看到 A 和 bbbb 与框的中间对齐。问题文本是 1.,它不在容器中,因此与默认的
baseline垂直对齐。如果你可以将它包装在另一个垂直对齐:中间跨度中,你应该是金色的......哦......我调整了CSS以设置根font-size&使用rem(相对em)作为字体大小变化。这对你的 CSS 有用吗? -
我认为问题在于字体选择。我尝试将字体更改为 Arial,它在两个浏览器中呈现相同。只是一个猜测,但也许 serif 和 sans-serif 在不同的浏览器中呈现不同?
-
仅供参考,我拍摄了渲染框的图像:tinypic.com/r/jh8mk1/8 1. 不是垂直对齐的。跨度是垂直对齐的(容器可能不需要垂直对齐)。