CSS flex-box:尽管 justify-content 和 align-items 设置正确,但文本并不完全居中

Posted

技术标签:

【中文标题】CSS flex-box:尽管 justify-content 和 align-items 设置正确,但文本并不完全居中【英文标题】:CSS flex-box: Text isn't perfectly centered despite justify-content and align-items set properly 【发布时间】:2019-02-05 17:53:43 【问题描述】:

我有一个数字网格,所选数字必须以背景渐变显示。所以我使用了带有 flex-box 的正常程序,正如我们在代码中看到的那样。但数字并不像预期的那样位于广场的确切中心。

.cell 

  /* Square definition */
  width: 100px;
  height: 100px;
  border: 1px solid black;
  font-size: 2rem;
  
  /* Centering */
  display: flex;
  justify-content: center;
  align-items: center;
  
  /* Background at the center */
  color: white;
  background: radial-gradient(ellipse at center, red 0%,red 50%, transparent 55%);
<div class="cell">15</div>

为什么会这样?我怎样才能使数字恰好在正方形的中间而没有任何额外的标记?

编辑:左边是现在的样子,右边是我认为应该的样子。浏览器是 Linux 上的 Chrome。

编辑 II: 这个标记在 Linux 上的呈现方式肯定存在问题。以下是我在评论中看到由 G-Cyr 提供的 codepen 的方式:

我在 Windows 上尝试了相同的 codepen,它显示的数字完全居中。

【问题讨论】:

但我看到它居中.. :) 可能您使用的浏览器没有很好的弹性盒功能(例如,IE)...请截取屏幕截图并使用编辑器中的图像工具将其添加到您的问题中。 我做了一个测试页,添加了一个叉号来显示中间,最后一个是你说好的图片。 codepen.io/anon/pen/vzyorQ 。对我来说,文本是垂直居中的 (ff w7) 。 (字体对我来说要厚得多) @G-Cyr 我用你的 codepen 更新了这个问题。谢谢你。 ff 61.0.2 在 macos 上没有显示完全居中,但 Chrome 68 可以。 【参考方案1】:

我认为这不是 flex-box 问题,而是与行高有关。 解决这个问题的一种方法是手动调整行高,如下所示:

.cell 

  /* Square definition */
  width: 100px;
  height: 100px;
  border: 1px solid black;
  font-size: 2rem;
  
  
  /* Centering */
  display: flex;
  justify-content: center;
  line-height:6.7rem;

  color: white;
  background: radial-gradient(ellipse at center, red 0%,red 50%, transparent 55%);

<div class="cell">75</div>

【讨论】:

调整行高可能是个好主意,但是当使用不同的字体系列时,它需要不同的值。我们不知道 op 使用的是哪个 :( ,所以很难猜出会做的值是什么。 @G-Cyr 是的,我同意。但是我没有看到有人提到font-family会经常改变。如果这是后备字体的问题,那么解决方案可能是加载屏幕,仅在加载正确的字体时才显示内容。取决于这是否可以以更语义的方式解决。如果不是,这是一个选项。 看起来无论如何都是浏览器渲染问题。但是字体在绘制的大小和位置上可能会有很大的不同,这里的操作使用了一个漂亮而智能的字体(helvetica),带有安全的后备,以避免在丢失时出现棘手的渲染;)

以上是关于CSS flex-box:尽管 justify-content 和 align-items 设置正确,但文本并不完全居中的主要内容,如果未能解决你的问题,请参考以下文章

css flex-box嵌套布局有问题

将 flex-box 项目与块中最后一个文本行的基线对齐

flex-box

如何在 css 中使用 @keyframes 交叉淡入淡出图片库?

Flex-box:将最后一行与网格对齐

Flex-box:将最后一行与网格对齐