如何在容器中垂直居中单个 unicode 字符?

How can I center a single unicode character vertically in a container?

当我制作网页时,我喜欢在确实不需要图像或 SVG 时使用 unicode 字符作为图标。这对我来说很容易,它使页面更轻。通常,这工作得很好,除了我总是最终不得不 fiddle 偏移量以使其正确居中。

是的,是的,我知道这个:

.someDiv {
   width: 10px;
   height: 10px;
   line-height: 10px;
   text-align: center;
}

但要注意的是大多数字形本身并不是垂直居中的。这意味着,例如,我最终将这个垂直偏离中心的 放在一个方形容器中,其中 CSS:

是否有 CSS 方法使 字形 居中而不是字体的中线? (或者技术上居中的任何内容。)

从我的角度来看,您遇到的问题无法以令人满意的方式解决。问题是 a) 你使用的字符确实有字距调整、行高等,不能可靠地垂直居中,甚至不能基于每个字符,因为 b) 每个 OS 和浏览器可能有自己的您无法控制的那个角色的表现形式。

尽管如此,我还是喜欢这种方法,因为它非常轻巧,而且我过去曾使用过它,例如在我的扫雷游戏中 https://connexo.de/defuse

您看到的所有图标都是 UTF-8 emoji/characters。

通过放弃 CSS 并跳出框框进行更多思考,我能够取得相当不错的效果 -

首先我下载了​​带有我想要的符号的 Noto 字体,因为 Noto 字体的许可非常宽松。 https://www.google.com/get/noto/

然后我安装了fontforge http://fontforge.github.io/

我将此 Python 脚本添加到我的 %appdata%/Roaming/fontforge/python/ 目录(因为我在 Windows 上)https://github.com/gumblex/stamico/blob/master/centerglyph.py

我用fontforge打开了Noto TTF。使用 select-all 然后脚本添加的 Tools > Metrics > Center in Glyph 选项,然后使用 Tools > Metrics > Y Offset 进行一些调整我能够将字体中的所有字形垂直居中。 (在我的例子中,出于某种原因,在高度选项中选择 Glyph/Center 中的中心会导致字形位于高于中心线的位置,因此我不得不进一步调整它们。)

我在 CSS 中添加了一个 @font-face 并指定了我希望垂直居中的字形的字体样式。

@font-face {
    font-family: "symbol-font";
    src: url(ux/NotoSansSymbols2-Aligned.ttf);
}