📝 第四章:文本与字体排版

掌握字体、文本样式和现代排版技术

4.1 字体家族 (font-family)

字体堆栈的最佳实践:从最理想的字体开始,逐步降级到系统默认字体。
body {
    font-family: 'Helvetica Neue', Arial, sans-serif;
}

.code {
    font-family: 'Courier New', monospace;
}

Web Fonts 加载策略

/* 使用 @font-face 加载自定义字体 */
@font-face {
    font-family: 'MyCustomFont';
    src: 
        url('myfont.woff2') format('woff2'),
        url('myfont.woff') format('woff');
    font-weight: normal;
    font-style: normal;
    font-display: swap;
}

font-display 的取值

描述 适用场景
auto 浏览器默认行为 一般情况
swap 立即显示系统字体,加载完成后替换 正文文本
block 隐藏文本直到字体加载完成 标题
fallback 短时间隐藏,然后使用系统字体 平衡方案
optional 仅在快速加载时使用,否则使用系统字体 非关键文本

4.2 字体大小单位

px (像素):固定大小,不随父元素变化
em:相对于父元素的字体大小
rem:相对于根元素的字体大小
%:相对于父元素的字体大小
vw/vh:相对于视口大小
推荐使用 rem:rem 单位便于整体调整字体大小,有利于响应式设计和无障碍访问。
/* 设置根元素字体大小 */
html {
    font-size: 16px;
}

/* 使用 rem 单位 */
h1 {
    font-size: 2rem; /* 32px */
}

p {
    font-size: 1rem; /* 16px */
}

4.3 行高、字间距与文本缩进

p {
    line-height: 1.6; /* 推荐值:1.5-1.8 */
    letter-spacing: 0.01em; /* 字间距 */
    text-indent: 2em; /* 首行缩进 */
}

4.4 文本装饰与溢出处理

a {
    text-decoration: none; /* 移除下划线 */
}

a:hover {
    text-decoration: underline; /* 悬停时显示下划线 */
}

.strikethrough {
    text-decoration: line-through; /* 删除线 */
}

.underline {
    text-decoration: underline; /* 下划线 */
}

.overline {
    text-decoration: overline; /* 上划线 */
}

文本溢出处理

单行文本溢出

这是一段很长的文本,测试单行文本溢出的省略效果
.text-overflow {
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

4.5 现代排版特性

text-wrap: balance

文本平衡

这是一个标题,测试 text-wrap: balance 的效果,它会自动平衡文本的换行,使每行的长度更加均匀。
h2 {
    text-wrap: balance;
}

text-wrap: pretty

优化标题换行

这是一个较长的标题,测试 text-wrap: pretty 的效果,它会优化标题的换行位置,使标题看起来更加美观。
h1 {
    text-wrap: pretty;
}

首字下沉

首字下沉效果

L orem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.

p::first-letter {
    float: left;
    font-size: 3em;
    line-height: 1;
    margin-right: 0.2em;
    color: #3498db;
}

动手练习

练习 1:字体设置

  1. 为页面设置合适的字体堆栈
  2. 设置根元素的字体大小为 16px
  3. 使用 rem 单位为不同元素设置字体大小
  4. 为标题和正文设置合适的行高

练习 2:文本效果

  1. 创建一个导航菜单,设置链接的文本装饰效果
  2. 为卡片标题设置 text-wrap: balance
  3. 创建一个产品卡片,设置价格的删除线效果
  4. 为文章段落设置首字下沉效果

练习 3:Web Fonts

  1. 从 Google Fonts 选择一个字体
  2. 使用 @font-face 或链接标签引入字体
  3. 设置合适的 font-display 值
  4. 为页面应用新字体