【发布时间】:2021-11-29 08:55:48
【问题描述】:
我正在尝试将数字 42 在其父 div 中垂直居中。父 div 有 display: flex (我需要它的其他原因)。当我在数字上设置align-self: center时,文本的中心在div的中心上方。
我猜这是因为它使文本居中,就好像它有descenders,但在这种情况下,我只呈现一个数字,所以永远不会有下降。如果文本全部为大写,也会出现同样的问题。
如何使这个数字垂直居中显示?
.container {
height: 4.5cm;
display: flex;
background-color: #c2fcb6;
}
.child {
font-size: 96pt;
align-self: center;
}
<div class="container">
<div class="child">42</div>
</div>
更新
基于this answer,我发现将padding-top: 0.3em 添加到.child div 效果很好:
.container {
height: 4.5cm;
display: flex;
background-color: #c2fcb6;
}
.child {
font-size: 96pt;
align-self: center;
padding-top: 0.3em;
}
<div class="container">
<div class="child">42</div>
</div>
正如链接的答案所提到的,使用 em 的好处是您在更改字体大小时不必调整值。
我做的另一件非常重要的事情是使用像 Google Fonts 这样的 CDN 字体,以便在浏览器和平台之间获得一致的渲染。
【问题讨论】:
-
@showdev 第一个问题/答案对有效;我能够将
padding-top: 0.3em添加到我的.child并且文本现在显示为居中。手动调整这样的东西感觉很糟糕,但我确实喜欢使用 em 的想法,因为这意味着你在更改字体大小时不必调整它。第二个问题/答案太过时了,不相关;自从被问到/回答以来,网络环境发生了很大变化。 -
我听到了。您可能会发现 Deep dive CSS: font metrics, line-height and vertical-align 很有趣,特别是 CSS Is Awesome 中的方法,用于通过“[计算]基于上升/下降比率的垂直对齐”来近似调整字体指标。
-
@showdev 我去看看;非常感谢!
标签: css flexbox alignment vertical-alignment