深色模式和可变字体

Avatar of Robin Rendle
Robin Rendle

DigitalOcean 为您旅程的每个阶段提供云产品。 立即开始使用 $200 免费信用额度!

不久前,我们写了关于 CSS 中的深色模式,我一直思考白底黑字比黑底白字更难阅读。 想了很久,我意识到我们可以通过使用可变字体在深色模式下将文本变细来解决这个问题!

这是一个示例,我使用的是 Yanone Kaffeesatz(来自 Google Fonts)。 请注意,白底黑字部分比黑底白字部分看起来更重。

奇怪的是,这两段文本实际上使用的是相同的 font-weight400。 但在我看来,白底黑字看起来格外粗。

仔细观察这个例子。 这只是白底黑字在更暗背景下的显示方式; 这是我们眼睛感知形状和颜色的方式。 在某些情况下,这可能不是大问题,但阅读暗背景上的浅色文本对读者来说总是更困难。 而且,如果我们在深色模式上下文中不注意文本设计,那么在阅读时会感觉文本在振动。

我们如何解决这个问题呢?

好吧,这就是可变字体发挥作用的地方! 我们可以使用更轻的字体粗细,以便在深色模式激活时更易于阅读文本

body {
  font-weight: 400;
}

@media (prefers-color-scheme: dark) {
  body {
    font-weight: 350;
  }
}

以下是这个新示例的外观

这更好! 现在这两个变体在我看来更平衡了。

同样,这只是一个很小的差异,但所有伟大的设计都包含这样的微调。 我认为,如果您已经在使用可变字体并加载所有这些字体粗细,那么您绝对应该调整文本,使其更容易阅读。

如果我们比较更长的文本段落之间的差异,这种效果更容易发现。 现在,这次在 Literata

请注意,右侧的文本感觉更粗,但事实并非如此。 这只是一个视觉错觉——上面两个示例的字体粗细都是 500。

因此,为了解决这个问题,我们可以像上面示例中那样操作

body {
  font-weight: 500;
}

@media (prefers-color-scheme: dark) {
  body {
    font-weight: 400;
  }
}

同样,这只是一个细微的变化,但它很重要,因为在这些尺寸下,我们进行的每一项印刷改进都有助于阅读体验。

还有,这里有一个关于 Google 字体的快速提示!

Google Fonts 允许您通过在文档的 <head> 中添加一个 <link> 来将字体添加到您的网站,如下所示

<head>
  <link href="https://fonts.googleapis.com/css2?family=Rosario:wght@515&display=swap" rel="stylesheet"> 
</head>

这使用的是 Rosario 字体,并添加了 515 的字体粗细——这正是上面代码中说 wght@515 的部分。 即使这恰好是一个可变字体,也只会下载这种字体粗细。 但是,如果我们尝试执行类似的操作……

body {
  font-weight: 400;
}

……将不会发生任何事情! 事实上,字体根本不会加载。 相反,我们需要通过执行以下操作来声明我们想要加载的字体粗细值的范围

<link href="https://fonts.googleapis.com/css2?family=Yanone+Kaffeesatz:[email protected]&display=swap" rel="stylesheet">

上面代码中的 @300..500 部分告诉 Google Fonts 下载具有 300500 之间所有字体粗细的字体文件。 或者,在每个字体粗细之间添加一个 ; 然后只会下载 300500 字体粗细——因此,例如,您无法选择 301 字体粗细。

<link href="https://fonts.googleapis.com/css2?family=Yanone+Kaffeesatz:wght@300;500&display=swap" rel="stylesheet">

我花了几分钟才弄明白出了什么问题以及为什么字体根本没有加载,因此希望 Google Fonts 团队将来可以更清楚地说明嵌入代码。 也许应该在某个地方有一个选项或一个切换按钮来选择范围或特定字体粗细(或者也许我只是没有看到它)。

无论如何,我认为这就是可变字体非常有用的原因; 它们允许我们以以前从未有过的方式调整文本。 所以,为可变字体欢呼!