CSS中的响应式字体
由 Mux 赞助的 DEV 全球展示挑战赛:展示你的项目!
CSS 为 Web 应用程序开发提供了多种单位选择。
许多属性,例如 padding、margin、font-size、width、height 等,都以长度后跟单位作为值。
优秀的开发人员应该能够决定如何以及何时使用这些单位。
这篇博客文章是关于什么的?
我们将讨论 CSS 中一些与字体相关的常用单位,并了解如何使字体大小具有响应式。
点击此处查看本文示例的演示网站。
阅读本博客的前提条件
本文假设您熟悉 HTML 和 CSS 的基础知识。
CSS中的字体单位
- 一般来说,px、rem、em和%是 CSS 中最常用的单位。
- 虽然 CSS 中还有许多其他单位可用,但上述单位是首选
font-size。 - 让我们来讨论这四个单位,并尝试理解它们如何以及何时可以使用。
像素
- px是一个绝对单位。也就是说,它定义的是固定值,不会随着屏幕/设备宽度的变化而缩放。
- 这些方法之所以被广泛使用,是因为它们易于理解,使用起来毫不费力。
- 它相当于 1/96英寸,通常浏览器中文本的默认大小为16 像素。
-
div.pixel p { font-size: 20px; width: 300px; }- 它
<p>有一个font-size: 20px。现在请看下图,它显示了屏幕尺寸较小的设备上的同一段文字。
- 注意即使视口尺寸减小,它仍然
font-size存在。20px
- 它
-
这就是使用像素作为长度属性时存在的问题。它不具备响应式设计,不会根据视口大小进行缩放。
- 请点击此处查看上述代码的示例:
雷姆
- rem是一个相对单位。也就是说,它会随着视口大小的变化而缩放。
- 该单元用途广泛,深受开发商推荐。
- in
rrem 代表根。- 1 rem 单位是根元素的字体大小,即
<html>。
- 1 rem 单位是根元素的字体大小,即
-
让我们通过一个例子来理解rem。请看下面的代码。
div.rem p { font-size: 2rem; /* 2 * 16 = 32px */ }- 请点击此处查看上述示例中的钢笔:
- 如果您不覆盖根元素的默认字体大小,即
<html>,则其字体大小为16px。- 在上述示例中, `<div>` 的字体大小
<p>将是根元素大小的 2 倍。也就是说:2 * 16 =32px。
- 在上述示例中, `<div>` 的字体大小
-
另一个例子是覆盖
16px根元素的默认值。html { font-size: 20px; } div.rem p { font-size: 0.5rem; /* 0.5 * 20 = 10px */ }- 请点击此处查看上述示例中的钢笔:
- 如上所述,rem具有很高的响应速度,并且用户体验友好。
- 为了检查响应速度,请尝试以下操作。
- 去你的
browser settings - 在下方
appearance,选择Font size - 尝试更改
Font size浏览器的设置,并查看使用定义的单位长度标签的计算结果。rem
- 你会发现字体大小会根据浏览器选择的字体大小而变化。
- 去你的
注意:如果您覆盖了根元素的默认字体大小,则更改浏览器的字体大小不会影响已定义内容的字体大小。
- 使用rem定义的字体大小将相对于覆盖默认根字体大小的手动值。
艾米
- em与rem非常相似,但区别在于em是相对于其父容器的。
-
让我们沿用之前的段落示例,并按照下面的代码进行操作。
div.em { font-size: 15px; } div.em p { font-size: 2em; /* 2 * 15 = 30px */ }- 请点击此处查看上述示例中的钢笔:
- 由于
<div>是父元素<p>,因此内部内容的字体大小<p>将是为定义的字体大小的两倍<div>。- 也就是说,2 * 15 =
30px would be the font-size of`。
- 也就是说,2 * 15 =
- 下图显示了上述代码的运行结果。

- 现在,请考虑以下代码所示的场景:
-
这是 HTML 代码
<div class="em"> <ul> <li>1. Lorem</li> <ul> <li>1.1. Lorem</li> <ul> <li>1.1.1. Lorem</li> </ul> </ul> </ul> </div> -
这是 CSS 代码
div.em { font-size: 20px; } ul { font-size: 2rem; }
- 要检查响应速度,您可以尝试更改浏览器的字体大小(如上所示,以rem为单位)。
注意:如果您覆盖了根元素的默认字体大小,则更改浏览器的字体大小不会影响已定义内容的字体大小。
- 使用em定义的字体大小将相对于该元素的父元素。如果父元素是根元素,则该元素的字体大小将相对于根元素的已覆盖字体大小。
- 如果您使用em ,还需要注意一点:当您将其用于宽度或内边距等属性时,长度取决于元素本身的字体大小。
- 例如,假设你有一个
<p>元素位于一个 中<div>,并且 的字体大小为<div>12px,<p>那么 就是2em。 - 如果你将内边距设置
<p>为 2em,那么内边距<p>将是2em48px,而不是 2em24px。 - 这是因为其他属性会乘以元素本身的字体大小值。
- 因此,当您使用em作为字体大小单位时,请记住这一点。
- 例如,假设你有一个
百分比
- %是一个相对单位,它是相对于父元素的字体大小而言的。
-
和我们之前对它们所做的类似场景,假设我们有一个
<p>内部的<div>。html { font-size: 20px; } div.percentage { font-size: 150%; } div.percentage p { font-size: 200%; }- 请在此处查找上述代码的 Pen:
-
我们来看看字体大小
<p>会是多少。- 的字体大小
<p>取决于<div>,而的字体大小<div>取决于其父元素。(在本例中<html>:) - 由于字体大小为
<html>20px,因此字体大小<div>应为 1.5 * 20 =30px。 - 字体大小
<p>为 30 * 2 =60px。
- 的字体大小
- 要检查响应速度,您可以尝试更改浏览器的字体大小(如上所示,以rem为单位)。
- 注意:如果您覆盖了根元素的默认字体大小,则更改浏览器的字体大小不会影响已定义内容的字体大小。
- 使用百分比定义的字体大小将相对于该元素的父元素。如果父元素是根元素,则该元素的字体大小将相对于根元素的已覆盖字体大小。
结论
我们已经了解了 CSS 中可用于字体的四种不同单位。
如前所述,还有许多其他单位值得探索和使用。但以上介绍的单位是开发者最常用的。
点击此处查看本文示例的演示网站。
- 一个可以遵循的经验法则是:字体大小应始终使用rem单位。由于 rem 单位继承自根元素,因此易于使用、管理和计算元素的大小。
-
此外,当您为嵌套元素定义字体大小时,它不会像em那样呈指数级增长。
-
当你想让子元素继承父元素的字体大小并使其行为与父元素相同时,可以使用 em 属性。但要注意继承关系。
-
至于百分比(%),它与单位(em)非常相似。但主要区别在于单位(em)的缩放速度比百分比(%)快。

- 当用户将浏览器文本大小设置为“中等”时,em和%之间几乎没有区别。
- 但正如你在上图中看到的,当浏览器文本大小设置为最小时,与百分比相比,em几乎难以辨认。
- 当浏览器窗口大小设置为最大时,em显示得比%大得多。
-
大多数人也用像素(px)来设置字体大小。但我完全不建议使用这种方法,因为它既不方便用户使用,也不具备响应式设计。
一般来说,我的建议是:
rem > 百分比 > em > px
参考
- W3Schools CSS 单元
- Udemy 现代 HTML 和 CSS 入门课程
- MDN Web 文档 CSS 值和单位
- MDN Web 文档字体大小
- Kyle Schaeffer 的博客文章:CSS 字体大小
感谢您阅读这篇博文。
我希望您已经理解了 CSS 中字体大小的常用单位,我相信这对您将来开发响应式网站会非常有帮助!
请点赞、收藏或保存这篇文章,并分享给你的开发者朋友们!
文章来源:https://dev.to/bharati21/responsive-fonts-in-css-m44


