Redian新闻
>
计算机科学里最大的难题:居中显示

计算机科学里最大的难题:居中显示

公众号新闻

作者 | Niki
译者 | 平川
策划 | Tina

本文最初发布于 Niki 的个人博客。

对于居中显示,我们都知道该怎么做,它是如此得简单:

display: flex;justify-content: center; /* 水平居中 */align-items: center; /* 垂直居中 */

(不要问为什么你需要记住四个单词而不是 horizontal 和 vertical 两个单词,这已经比以前好了)

如果你愿意,你也可以使用网格:

display: grid;justify-items: center; /* 水平居中 */align-items: center; /* 垂直居中 */

(不要问为什么 justify-content 变成了 justify-items)

如果你想学的话,我们可以从下面这个基本原理入手:

甚至是 ChatGPT 也知道如何把一个东西居中:

好吧,也许有点慢,但最终可以做到。

我要说的是:每个人都知道如何把某个东西居中。小事一桩。如果你不知道怎么做,也有现成的知识供你查阅。

然而,如果我们查看下实际的应用程序就会发现,它们并没有使用这些方法。我们看到:

或者:

甚至是:

显然,在知识和知识的应用之间,有些东西丢了。

理论上,理论和实践之间并没有什么不同。遗憾的是,我们生活在实践中。

让我们看一下到底发生了什么。

字     体

字体是罪魁祸首之一。未对齐的文本随处可见。让我们看一些例子。

苹果没做到:

微软没做到:

GitHub 没做到:

Valve 没做到:

Slack 没做到:

Telegram 没做到:

谷歌地图没做到:

说实话,像这样糟糕的按钮对齐,我不用找就能举出无数的例子:

我想你已经明白了。许多公司,无论大小,都未能免于文本居中的问题。

行     高

除了字体参数,下一个影响完美居中的问题是行高。

行高是一个复杂的话题。在这方面,Vincent De Oliveira 曾写过一篇经典的文章“深入理解 CSS:字体参数、行高和垂直对齐”。

下面是一些实际的例子。

Slack:

Notion:

Airbnb:

YouTube:

对齐两个位于不同容器中的东西几乎是不可能的:

虽然许多人尝试过:

但没有多少人成功:

CSS 可能是个障碍(不同的控件有不同的默认值,你必须在尝试对齐之前取消它们):

没什么简单的办法,只能对照规范一点点来。

图     标

图标就像是与文本排成一行的小矩形。因此,所有由文本和行高引起的问题这里也都存在。众所周知,将文本与旁边的图标对齐是一项艰巨的任务。

Atom:

前 Twitter 平台:

iOS:

Mozilla:

YouTube:

有时候图标高过文本:

有时候文本高过图标:

有时候两者都未能完美居中:

有些图标就是普通的 HTML 表单控件:

有些添加了艺术效果:

感谢 @bee 提供图片 

有时人们会创造性地实现完美对齐:

但总体上,这是个让人绝望的游戏:

问题在于,CSS 也不能提供什么帮助。vertical-align有 13 种取值,但没有哪一个能有效地将文本和图标对齐:

text-align: middle 最接近对齐,但是按 x-height 而不是 cap-height 对齐,看起来还是不平衡:

这就是人们如此热爱 Web 编程的原因:总是充满挑战。

图标字体

对齐矩形相对简单。对齐文本则很困难。图标是矩形。如果我们把图标放到字体文件中会怎样呢?

现在,我们什么也对不齐了:

我们也没法设置图标大小。在上面的例子中,所有图标的字体大小和行高都做了同样的设置。如你所见,它们的大小、边距都不一样,没有哪一个真正地对齐了。

尽管有很多缺点,并且几乎没有任何好处,各家公司还是争先恐后地到处添加图标字体。结果就像下面这样:


macOS 10.14 → macOS 10.15

操作符不再是垂直对齐的,而且还很模糊。这都是因为切换到图标字体所致。

苹果公司是如此执着于图标字体,以至于他们甚至毁了 QuickTime 录制按钮:

看看吧:

是的,直到今天还是这个样子。计算器也一样。

但远不止这些,请看下面这些例子。

一:

二:

三:

四:

五:

六:

七:

和文本对齐一样,糟糕的图标对齐也是数不胜数。

技能问题

不只是程序员会遇到居中失败的问题。设计师也会:

当前版本/ 我的修复

图标的问题在于,有时候还需要考虑它们的形状:

糟糕的居中 / 良好的居中 

三角形处理起来特别难:

有时候太靠左:

有时候太靠右:

甚至可能过高(又是行高惹的祸):

水平居中

你可能会想,只有垂直居中才这么难。不是这样的,水平居中也很难:

我认为这并没有什么深层次的原因,一切皆因人们不够严谨:

拜托!

这是个深思熟虑的决定吗?

我不得而知。图标也有这样的问题:

文本也是:

我们能做些什么:设计师

那么问题是什么?

一切皆因字体而起。现在,文本块的边界框看起来像下面这样:

问题在于,它还可以像下面这样:

或这样:

现在,如果你试图通过居中边界框来居中文本会怎样?

虽然矩形实现了完美居中,但文本还是偏了。

但是,即使字体参数可以不平衡,也不意味着它确实如此。现实中会发生什么呢?

事实上,大部分流行的字体都有点轻微的不平衡,许多还很明显:

字帽高度百分比

10% 不是个小数,在 13 号字体中可以占到一个完整的像素。如果再放大 2 倍,就比较明显了。

大体上,Segoe UI 就是 Github 在 Windows 上看上去像下面这样的原因:

解决方法很简单:收紧边界框,居中就是小事一桩了:

如果你使用 Figma,也可以这样做了(虽然不是默认的):

我们能做些什么:字体设计师

如果你是一名字体设计师,请像下面这样设置字体参数,使ascender − cap-height = descender

在视觉上像下面这个样子:

重要提醒:你不必将 ascenders/descenders 扩展到边界。如上图所示,ascender 空间并没有得到充分利用。只要让上述数值可以匹配即可。

无论是 Web 开发还是原生开发,为了避免麻烦,务必选择遵循此规则的字体。SF Pro Text、Inter 和 Martian Mono 似乎都已经做到了这一点,所以使用它们不需要额外做什么工作就可以实现完美居中。

要了解更多信息,可以阅读“字体大小没用;让我们来修复它”这篇文章。

我们能做些什么:Web 开发人员

从开发人员的角度来看,这有点棘手。

首先要搞清楚的是,你需要知道你将使用哪种字体。遗憾的是,如果你计划替换字体,这不会起作用。

我们将使用 IBM Plex Sans。它的参数如下:

你在设置font-size时,你设置的是 UPM(这个也等于1em)。然而,文本块实际占用的空间是 ascender 和 descender 之间的空间。

经过简单的计算,我们发现,设置padding-bottom: 0.052em可以得到想要的结果:

如下所示:

查看字体参数,请点击这里(ascender、descender、sCapHeight)。

现在,我们已经把问题解决了,对齐图标也不那么难了。设置vertical-align: baseline,然后下移(iconHeight - capHeight) / 2

遗憾的是,你既要知道字体参数,又需要知道图标大小。但至少,这个方法有效。

我们能做些什么:图标字体

不要再使用字体图标。

使用普通的图片格式。为了帮你做出决策,我画了下面这张图:

看看苹果公司怎么费力地将复选标记放入矩形内,以及将矩形放到文本标签旁:

然而他们还是失败了!

没有什么比对齐两个矩形更容易的了。没有什么比尝试对齐被任意数量空白包围的文本更困难的了。

这是一场我们赢不了的游戏。

我们能做些什么:视觉补偿

作为开发人员,我们只能通过数学的方法实现矩形的完美对齐。因此,对于任何需要手动补偿的内容,可以将其放置在一个足够大的矩形中,并在其中实现图标视觉效果的平衡:

我们能做些什么:所有人

请一定注意。请务必小心。糟糕的居中可能毁掉原本不错的 UI:

但恰当的文本对齐可以让你的 UI 美妙如歌:

即使这很难。即使没有便捷的工具。即使你不得不搜寻解决方案。我相信,只要我们齐心协力,就能找到把一个矩形套在另一个矩形里而又不会把它弄乱的方法。

就我个人而言,我希望生活在一个 UI 美丽而平衡的世界里。我相信你也是。最终,一切都是值得的。

原文链接:

https://tonsky.me/blog/centering/

声明:本文为 InfoQ 翻译,未经许可禁止转载。

今日好文推荐

谷歌大裁员引发元老集体抗议:领导脑袋空空,无能的中层管理团队不断扩大

“真男人就应该用 C 编程”!用 1000 行 C 代码手搓了一个大模型,Mac 即可运行,特斯拉前 AI 总监爆火科普 LLM

德国再次拥抱Linux:数万系统从windows迁出,能否避开二十年前的“坑”?

系统 bug 致百人入狱,砸了 2.8 亿元仍上云失败!二十年了,这家大企业被日本软件坑惨了

微信扫码关注该文公众号作者

戳这里提交新闻线索和高质量文章给我们。
相关阅读
我减脂期吃不动菜的难题终于解决了,9种果蔬的液体沙拉/比利时益生元数据分析终极难题:多影响因素下,归因模型怎么搭建?CS专业选校重要参考!CSRankings全球计算机科学排名(2024更新版)澳洲录取来了!恭喜学员斩获QS排名19的悉尼大学计算机科学硕士OFFER!人生难题:租房 or 买房?BMJ子刊研究显示:相比于有房人,租房住的老得更快!该影响超过失业和吸烟!藤校,G5导师计算机科学方向科研项目招生开启,发论文的机会来了!需要什么才能成为春天偷窃、殴打、校园霸凌、团体虐杀...... 青少年犯罪成世界性难题:我们的孩子因何残忍?《在五星红旗下成长》续02[录取捷报]波士顿大学 计算机科学硕士录取 来啦!刘强东内部讲话:公司里最大的不公平,是让弱者占强者便宜年轻人的新难题:你是情绪垃圾制造者?还是情绪垃圾桶?开创性CVM算法破解40多年计数难题!计算机科学家掷硬币算出「哈姆雷特」独特单词令华尔街头疼的难题:如何预测并定价英伟达?B站的难题专家发言:00后超越父母成就的难题,职场启示录如何解决推进中国式现代化中的难题?这个蓝皮书这样分析CS专业留学重要参考!CSRankings全球计算机科学排名(2024更新版)2024 CSRankings全美计算机科学排名发布!CMU霸榜,MIT跌出前5如何保护好你的退休资产?CS留学参考!CSRankings全球计算机科学排名(2024更新版)开源日报 | ChatGPT时代的SQL注入;选计算机专业必须要挤入顶尖人才层;黄仁勋谈与竞争对手最大的不同;WWDC24看点刚买的榨汁机又坏了众多IT巨头都无法解决的“计算机科学最大难题”氢动力私人飞机或能解决让泰勒·斯威夫特头疼的难题2024年企业最大难题:现金or资产?人类的难题,两千年不变毕业生薪资高达97万!恭喜学员斩获斯坦福大学王牌专业——计算机科学硕士项目!英国花11 亿英镑学术投资,南洋理工大学成立新计算机与数据科学学院...【限时免费】破解CFA题目理解难题:速领2000词金融专业词汇大全PDF女主播卖车送福利;假提豪车;普利司通的忧伤;医美直播凉凉突破摩尔定律极限!前谷歌量子计算团队首创「热力学计算机」,英伟达GPU「退役」?25fall G5选课大变样!UCL推荐科目+1,剑桥人文不再推荐科学,计算机必修高数!爽翻了!加拿大夫妇移居中国10年, 狂赞物价和医疗!看病不用等、顿顿下馆子!中国式难题:“不成家,非必要不独居”
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。