文本和排版

CSS 播客 - 036:文本和排版

文本是网络的核心构建块之一。

制作网站时,您不一定需要为文本设置样式;HTML 实际上具有一些相当合理的默认样式。

不过,文字可能会占据网站的大部分篇幅,因此有必要添加一些样式来美化网站。通过更改一些基本属性,您可以显著改善用户的阅读体验!

在本单元中,我们将从 @font-face 规则开始,该规则允许您将自定义字体导入网页。这可确保您获得所需的确切排版,与用户安装的字体无关。

接下来,我们将介绍基本的 CSS 字体属性,包括 font-familyfont-stylefont-weightfont-size。这些基础知识为处理文本以确保样式和可读性奠定了基础。

在最后介绍一些高级主题(例如,可变字体和伪元素),这些高级主题可以进一步优化排版控制。此外,我们还会介绍 text-indentword-spacing 等段落专用属性。

本系列课程将提供实际示例和提示,帮助您加深对这些 CSS 技术的理解和应用。

@font-face 规则

@font-face CSS at-rule 在网页设计中起着重要作用,可让您指定并使用自定义字体来显示文本。@font-face 的优点在于其通用性:借助它,您可以从远程服务器或用户设备上安装的字体获取字体。

语法

@font-face {
  font-family: "Trickster";
  src:
    local("Trickster"),
    url("trickster-COLRv1.otf") format("opentype") tech(color-COLRv1),
    url("trickster-outline.otf") format("opentype"),
    url("trickster-outline.woff") format("woff")
}

描述用语

ascent-override
自定义上升指标,影响基线上方的空间。
descent-override
调整下降法指标,影响低于基线的空间。
font-display
根据字体的下载状态控制字体的显示行为。
font-family
为在字体相关属性中使用的字体命名。
font-stretch
设置可接受的水平缩放,指定为单个值或范围。
font-style
定义字体样式,支持倾斜样式的角度范围。
font-weight
确定字体的粗细或可用粗细范围。
font-feature-settings
允许访问 OpenType 字体功能。
font-variation-settings
对可变字体设置进行微调。
line-gap-override
替换字体的默认行间距。
size-adjust
对字体的轮廓和指标应用缩放比例。
src
定义字体源,无论是本地还是远程。对于 @font-face 规则而言,这是必需的属性。结合使用 src 中的 url()local() 是一种常用策略,即使用本地字体(如果有),还原为远程字体文件作为后备。浏览器会根据声明的顺序确定资源的优先级,因此 local() 通常应该在 url() 之前。
unicode-range
限制此字体应该使用的字符。

说明

@font-face 允许设计人员使用自定义排版,从而摆脱了“网络安全”字体的限制。local() 函数在用户设备上搜索字体的功能可以提供不依赖于互联网连接的无缝体验。

字体 MIME 类型

格式 MIME 类型
TrueType font/ttf
OpenType font/otf
网络开放字体格式 font/woff
网络开放字体格式 2 font/woff2

@font-face 和 font-family 之间的区别

在 CSS 中,@font-facefont-family 经常被混淆,但它们的用途不同。

如前所述,@font-face 是一种规则,用于定义您要在 Web 应用中使用的任何自定义字体。它用于告知浏览器在哪里下载字体、如何在加载期间显示字体(使用 font-display 属性),并指定要下载的字符子集(使用 unicode-range)。

相比之下,font-family 是在 CSS 规则中使用的 CSS 属性,用于将特定字体或字体列表分配给元素。font-family 下列出的字体可以是网络安全字体、系统字体或使用 @font-face 定义的自定义字体。

简而言之,@font-face 会声明字体并为其命名,而 font-family 会将此声明的字体应用于 HTML 元素。

以下是同时使用这两者的示例:

<table>
  <thead>
    <tr>
      <th><p><pre>
@font-face {
  font-family: "CustomFont";
  src: url("customfont.woff2") format("woff2");
}

body {
  font-family: "CustomFont", Arial, sans-serif;
}

在此示例中,@font-face 定义了“CustomFont”,并告知浏览器在哪里可以找到它。然后,font-family 属性会将其应用于正文元素,当“CustomFont”不可用时,使用 Arial 作为后备。

更改字体

浏览器支持

  • 1
  • 12
  • 1
  • 1

来源

使用 font-family 更改文本的字体。

font-family 属性接受以英文逗号分隔的字符串列表,它们分别引用“特定”或“通用”字体系列。特定字体系列是带引号的字符串,如 "Helvetica"、"EB Garamond" 或 "Times New Roman"。通用字体系列包括 serifsans-serifmonospace 等关键字(请参阅 MDN 上选项的完整列表)。浏览器将显示所提供列表中的第一个可用字体。

使用 font-family 时,您应指定至少一个通用字体系列,以防用户的浏览器没有您的首选字体。一般情况下,后备通用字体系列应该类似于你的首选字体:如果使用 font-family: "Helvetica"(一种 Sans Serif 字体系列),则后备应设为 sans-serif 才能匹配。

使用斜体和斜体字体

浏览器支持

  • 1
  • 12
  • 1
  • 1

来源

使用 font-style 可设置文本是否应设为斜体。font-style 接受以下关键字之一:normalitalicoblique

将文本设为粗体

浏览器支持

  • 2
  • 12
  • 1
  • 1

来源

使用 font-weight 设置文本的“粗体”。此属性接受关键字值(normalbold)、相对关键字值(lighterbolder)和数值(100900)。

关键字 normalbold 分别相当于数值 400700

关键字 lighterbolder 是相对于父元素计算的。请参阅 MDN 的相对权重含义,查看显示此值计算方式的实用图表。

更改文字大小

浏览器支持

  • 1
  • 12
  • 1
  • 1

来源

使用 font-size 控制文本元素的大小。此属性接受长度值、百分比和少量关键字值。

除了长度和百分比值之外,font-size 还接受一些绝对关键字值(xx-smallx-smallsmallmediumlargex-largexx-large)和几个相对关键字值(smallerlarger)。这些相对值是相对于父元素的 font-size 而言的。

更改各行之间的间距

浏览器支持

  • 1
  • 12
  • 1
  • 1

来源

使用 line-height 指定元素中每行的高度。此属性接受数字、长度、百分比或关键字 normal。一般情况下,建议使用数字而非长度或百分比,以免出现继承问题。

更改字符之间的间距

浏览器支持

  • 1
  • 12
  • 1
  • 1

来源

使用 letter-spacing 可控制文本中字符之间的水平间距。此属性接受长度值,例如 empxrem

请注意,指定的值会增加字符之间的自然间距。在下面的演示中,尝试选择一个字母,以查看其信箱大小及其随 letter-spacing 的变化情况。

更改字词之间的间距

浏览器支持

  • 1
  • 12
  • 1
  • 1

来源

使用 word-spacing 可增加或缩短文本中各个字词之间的空格长度。此属性接受长度值,例如 empxrem。请注意,您指定的长度不仅是常规间距,还包括额外空间。这意味着,word-spacing: 0 相当于 word-spacing: normal

font 简写形式

您可以使用简写形式 font 属性一次设置多个与字体相关的属性。可能的属性包括 font-familyfont-sizefont-stretchfont-stylefont-variantfont-weightline-height

如需详细了解如何对这些属性进行排序,请参阅 MDN 的 font 文章

更改文字大小写

浏览器支持

  • 1
  • 12
  • 1
  • 1

来源

使用 text-transform 可以修改文本的大小写,而无需更改底层 HTML。此属性接受以下关键字值:uppercaselowercasecapitalize

为文本添加下划线、上划线和插入行

浏览器支持

  • 1
  • 12
  • 1
  • 1

来源

使用 text-decoration 可在文本中添加行。下划线是最常用的,但您也可以在文本上方或文本中直接添加行!

text-decoration 属性是下文详述的更具体的属性的简写形式。

text-decoration-line 属性接受关键字 underlineoverlineline-through。您还可以为多行指定多个关键字。

text-decoration-color 属性用于设置 text-decoration-line 中所有装饰的颜色。

text-decoration-style 属性接受关键字 soliddoubledotteddashedwavy

text-decoration-thickness 属性接受任何长度值,并从 text-decoration-line 设置所有装饰的描边宽度。

text-decoration 属性是上述所有属性的简写形式。

添加文本缩进

浏览器支持

  • 1
  • 12
  • 1
  • 1

来源

使用 text-indent 可对文本块进行缩进。此属性采用长度(例如 10px2em)或所包含块宽度的百分比。

处理溢出或隐藏的内容

浏览器支持

  • 1
  • 12
  • 7
  • 1.3

来源

使用 text-overflow 指定隐藏内容的表示方式。有两个选项:clip(默认),用于在溢出点截断文本;以及 ellipsis,用于在溢出点显示省略号 (...)。

控制空格

浏览器支持

  • 1
  • 12
  • 1
  • 1

来源

white-space 属性用于指定应如何处理元素中的空格。有关详情,请参阅有关 MDN 的 white-space 文章

white-space: pre 可用于渲染 ASCII 图片或精心缩进的代码块。

控制断字方式

浏览器支持

  • 1
  • 12
  • 15
  • 3

来源

使用 word-break 更改单词在溢出行时“断开”的方式。默认情况下,浏览器不会拆分单词。对 word-break 使用关键字值 break-all 会指示浏览器在必要时在单个字符处拆分字词。

更改文本对齐方式

浏览器支持

  • 1
  • 12
  • 1
  • 1

来源

使用 text-align 指定块或表格单元格元素中文本的水平对齐方式。此属性接受关键字值 leftrightstartendcenterjustifymatch-parent

leftright 分别会将文本与代码块的左侧和右侧对齐。

使用 startend 表示当前书写模式下文本行的开始和结束位置。因此,start 映射到英语的 left,以及从右到左 (RTL) 的阿拉伯脚本中的 right。它们是逻辑对齐,如需了解详情,请参阅我们的逻辑属性模块。

使用 center 将文本与文本块的中心对齐。

justify 的值会自动整理文本并更改字词间距,使文本与文本块的左右边缘对齐。

更改文本方向

浏览器支持

  • 2
  • 12
  • 1
  • 1

来源

使用 direction 设置文本方向:ltr(默认为从左到右)或 rtl(从右到左)。有些语言(如阿拉伯语、希伯来语或波斯语)是从右向左书写的,因此应使用 direction: rtl。对于英语和所有其他从左到右书写的语言,请使用 direction: ltr

更改文字流动

浏览器支持

  • 48
  • 12
  • 41
  • 10.1

来源

使用 writing-mode 更改文本的流动和排列方式。默认值为 horizontal-tb,但您也可以为想要水平显示的文本将 writing-mode 设置为 vertical-lrvertical-rl

更改文本方向

浏览器支持

  • 48
  • 79
  • 41
  • 14

来源

使用 text-orientation 可指定文本中字符的方向。此属性的有效值包括 mixedupright。仅当 writing-mode 设置为 horizontal-tb 以外的值时,此属性才相关。

为文本添加阴影

浏览器支持

  • 2
  • 12
  • 3.5
  • 1.1

来源

使用 text-shadow 为文本添加阴影。此属性需要三种长度(x-offsety-offsetblur-radius)和一种颜色。

如需了解详情,请参阅“阴影”单元中的 text-shadow 部分

可变字体

通常情况下,“标准”字体需要导入不同版本的字体(如粗体、斜体或精简)的不同文件。可变字体是指在一个文件中包含某种字体的多个不同变体的字体。

随机组合宽度和重量的 Roboto Flex

如需了解更多详情,请参阅我们关于变量字体的文章

伪元素

::first-letter::first-line 伪元素

浏览器支持

  • 1
  • 12
  • 1
  • 1

来源

::first-letter::first-line 伪元素分别定位到文本元素的第一行和第一行。

::selection 伪元素

浏览器支持

  • 1
  • 12
  • 62
  • 1.1

来源

使用 ::selection 伪元素来更改用户选择文本的外观。

使用此伪元素时,只能使用某些 CSS 属性:colorbackground-colortext-decorationtext-shadowstroke-colorfill-colorstroke-width

font-variant

浏览器支持

  • 1
  • 12
  • 1
  • 1

来源

font-variant 属性是许多 CSS 属性的简写形式,这些属性可让您选择 small-capsslashed-zero 等字体变体。此简写形式包含的 CSS 属性包括 font-variant-alternatesfont-variant-capsfont-variant-east-asianfont-variant-ligaturesfont-variant-numeric。如需详细了解其使用情况,请点击每项媒体资源上的链接。

检查您的理解情况

测试您对网络排版的知识掌握情况

以下哪个关键字可用作 font-family 通用后备关键字?

serif
正确!
monospace
正确!
italic
请重试。对于 font-styleitalic 是有效关键字,不适用于 font-family
sci-fi
请重试。不过,fantasyfont-family 的有效通用回退。
sans-serif
正确!
helvetica
请重试。"Helvetica" 不是宽泛的关键字,而是是指特定的字体系列。

要将每个单词的第一个字母转换为大写,应使用哪个语句?例如:This is a sentence.This Is A Sentence.

text-capitalize: true;
请重试。
text-case: capitalize;
请重试。
text-transform: capitalize;
正确!
font-style: capitals;
请重试。
font-variant: capitalize;
请重试。

判断正误:使用 text-orientation 可将文本左对齐、右对齐或居中对齐。

True
请重试。text-orientation 可更改一行中字母的旋转角度。
False
正确!text-orientation 可更改一行中字母的旋转角度。使用 text-align 可将文本左对齐、右对齐或居中对齐(还有更多对齐方式!)。

下面哪个 CSS 属性可用于更改文本行之间的间距?

line-spacing
请重试。
leading
请重试。前导是对排版中行间空格的正确术语,但它不是有效的 CSS 属性。
baseline-distance
请重试。
line-height
正确!

资源