字体大小构思:根元素使用 px,组件使用 rem,文本元素使用 em

Avatar of Chris Coyier
Chris Coyier 发表于

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

我,在过去的一年左右时间里: “rem 太棒了!我将用它们来调整所有元素的大小,这样我就可以调整根元素的字体大小,并且所有内容都将随之缩放!” 这是一个美好的梦想。并且它并不是一场灾难。 这就是我现在在 CSS-Tricks 上所做的事情,以及它在一个非常简单的场景中是如何发挥作用的

这本质上源于

/* Document level adjustments */
html {
  font-size: 17px;
}
@media (max-width: 900px) {
  html { font-size: 15px; }
}
@media (max-width: 400px) {
  html { font-size: 13px; }
}

/* Type will scale with document */
h1 {
  font-size: 3rem;
}
h2 {
  font-size: 2.5rem;
}
h3 {
  font-size: 2rem;
}

我承认我喜欢这种简洁性,但我开始认为它对于除最简单的网站之外的所有网站来说都有些过于理想化了。主要问题:你不能期望你在一个屏幕尺寸上设置的字体类型,仅仅通过完全按比例缩放下就能看起来完美无缺。大型字体在放大时可能会变得太大。小型字体可能会变得太小(一个常见的让我困扰的问题)。或者甚至反过来,大型字体可能不会变得足够小。

如果出现任何这些情况,那么你就会进行 @media 查询的特定调整,这不仅会让人感到困惑,而且效率不高(调整大小只是为了再次调整它来修复它)。

所以这是我的想法:你仍然可以在文档级别保留 px 大小调整,以便你可以轻松/高效地进行全局大小更改。但是页面上的每个模块都使用 rem 设置字体大小。实际的文本元素(h1、h2、p、li 等),如果你调整它们的大小,则使用 em 调整大小,因此它们相对于模块而言。

这样,你就可以在模块级别调整字体大小,这非常容易。单个模块内的字体类型具有良好的比例并可以很好地一起缩放的可能性很高。所以它将像这样发挥作用

不成比例。只是展示了哪些单位应该放在哪里。

你可以通过调整滑块来体验这个想法

查看 CodePen 上 Chris Coyier (@chriscoyier) 的作品 Em AND Rem

在某个中等大小下,一切看起来都很好。放大时,你可以达到文章主体变得足够大的程度,但侧边栏内容不需要那么大。使用此系统,可以轻松地定位它们并将它们缩小。缩小时,这些侧边栏模块会过快地变得太小,因此你可以轻松地将它们放大。甚至可能存在你使内容大小一致的情况,因为你已经转为单列(或类似情况)。

这就是它将如何进行

/* Document level adjustments */
html {
  font-size: 17px;
}
@media (max-width: 900px) {
  html { font-size: 15px; }
}
@media (max-width: 400px) {
  html { font-size: 13px; }
}

/* Modules will scale with document */
.header {
  font-size: 1.5rem;
}
.footer {
  font-size: 0.75rem;
}
.sidebar {
  font-size: 0.85rem;
}

/* Type will scale with modules */
h1 {
  font-size: 3em;
}
h2 {
  font-size: 2.5em;
}
h3 {
  font-size: 2em;
}

我在标题中加入了“想法”,因为我还没有实际构建一个使用此方法的网站,但它对我来说很有意义,我肯定会尝试它。