排版系统设计指南

HTMLPAGE 团队
7 分钟阅读

详细讲解如何设计网站排版系统,包括字体选择、尺度系统、行高与字距、响应式排版等。学会构建一致的排版系统,提升阅读体验和视觉层次。

#排版设计 #UI 设计 #字体系统 #可读性

排版系统设计指南

排版的重要性

网页内容 80% 是文本。好的排版直接影响用户体验、可读性和品牌感受。

排版系统的作用:

建立视觉层次
  ├─ 标题 > 副标题 > 正文 > 辅助文本
  └─ 用户一眼能看出信息优先级

提高可读性
  ├─ 合适的行长
  ├─ 合适的行高
  └─ 良好的字距和字体

建立品牌识别
  ├─ 一致的字体选择
  ├─ 统一的尺度系统
  └─ 可识别的排版风格

改善用户体验
  ├─ 易于扫描
  ├─ 易于阅读
  └─ 易于理解

1. 字体选择

1.1 字体分类

字体类型:

衬线字体 (Serif)
├─ 特点:有装饰线条
├─ 推荐:书籍、正式文档、印刷
├─ 示例:Georgia, Times New Roman
└─ Web 字体:Merriweather, Lora

非衬线字体 (Sans-serif)
├─ 特点:简洁、现代
├─ 推荐:网页、UI、现代设计
├─ 示例:Arial, Helvetica, Verdana
└─ Web 字体:Open Sans, Roboto

等宽字体 (Monospace)
├─ 特点:每个字符宽度相同
├─ 推荐:代码、技术文档
├─ 示例:Courier, Monaco
└─ Web 字体:Roboto Mono, Source Code Pro

手写字体 (Script)
├─ 特点:优雅、装饰性强
├─ 推荐:标题、装饰性文本
├─ 示例:Brush Script, Pacifico
└─ 注意:慎用,可能影响可读性

1.2 字体选择原则

✅ 最佳实践

1. 限制字体数量
   ├─ 最多 2-3 种字体
   ├─ 通常:1 种标题 + 1 种正文
   └─ 特殊:+ 1 种代码/装饰

2. 字体配对
   好的配对:
   ├─ Montserrat(标题) + Open Sans(正文)
   ├─ Playfair Display(标题) + Lato(正文)
   ├─ Abril Fatface(标题) + Roboto(正文)
   └─ IBM Plex Serif(标题) + IBM Plex Sans(正文)

3. 优先考虑系统字体
   系统字体栈:
   ├─ 快速加载(无需下载)
   ├─ 专为屏幕优化
   └─ 用户熟悉

4. Web 字体的性能影响
   ❌ 加载 5 个字体文件 = 网站变慢
   ✅ 使用变量字体
   ✅ 只加载必要的字重和样式

1.3 系统字体栈

/* 推荐的系统字体栈 */

/* 现代网站推荐 */
.system-ui {
  font-family: system-ui, -apple-system, BlinkMacSystemFont, 
               "Segoe UI", Roboto, "Helvetica Neue", sans-serif;
}

/* 字体详解 */
/* 
  system-ui      - 使用系统 UI 字体
  -apple-system  - macOS/iOS Safari 
  BlinkMacSystemFont - macOS 旧版
  Segoe UI       - Windows 
  Roboto         - Android
  Helvetica Neue - 备选
  sans-serif     - 最后备选
*/

/* 衬线字体栈 */
.serif {
  font-family: Georgia, "Times New Roman", Times, serif;
}

/* 等宽字体栈 */
.monospace {
  font-family: "SF Mono", Monaco, "Cascadia Code", 
               "Roboto Mono", Consolas, "Courier New", monospace;
}

1.4 Web 字体加载

<!-- Google Fonts - 推荐使用 -->
<link href="https://fonts.googleapis.com/css2?family=Roboto:wght@400;700&family=Playfair+Display:wght@700&display=swap" rel="stylesheet">

<!-- 使用字体 -->
<style>
  body { font-family: 'Roboto', sans-serif; }
  h1 { font-family: 'Playfair Display', serif; }
</style>

<!-- 性能优化 -->
<!-- 1. 预连接 -->
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>

<!-- 2. 字体显示策略 -->
<link href="https://fonts.googleapis.com/css2?family=Roboto&display=swap" rel="stylesheet">
<!-- 
  display=swap: 立即显示备选字体,准备好后切换
  display=fallback: 短暂显示备选字体后切换
  display=optional: 只在足够快时加载
-->

<!-- 3. 自托管字体(性能最佳) -->
<style>
  @font-face {
    font-family: 'CustomFont';
    src: url('/fonts/custom.woff2') format('woff2');
    font-display: swap;
  }
</style>

2. 字体尺寸尺度系统

2.1 类型比例(Type Scale)

类型比例是为了在排版中建立一致的间隔和层次。

常见的比例:

1.125 比例(8%)- 细微变化
├─ 基础:16px
├─ h5: 18px
├─ h4: 20px
├─ h3: 23px
├─ h2: 26px
└─ h1: 29px

1.25 比例(25%)- 标准
├─ 基础:16px
├─ h5: 20px
├─ h4: 25px
├─ h3: 31px
├─ h2: 39px
└─ h1: 49px

1.5 比例(50%)- 大比例
├─ 基础:16px
├─ h5: 24px
├─ h4: 36px
├─ h3: 54px
└─ h1: 81px

黄金比例 (1.618) - 自然和谐
├─ 基础:16px
├─ h5: 26px
├─ h4: 42px
├─ h3: 68px
└─ h1: 110px

2.2 实施类型比例

/* 基于 1.25 比例的实现 */
:root {
  /* 基础大小 */
  --base-font-size: 16px;
  
  /* 计算出的尺寸 */
  --text-xs: 12.8px;      /* 16 * 0.8 */
  --text-sm: 14.4px;      /* 16 * 0.9 */
  --text-base: 16px;      /* 基础 */
  --text-lg: 20px;        /* 16 * 1.25 */
  --text-xl: 25px;        /* 20 * 1.25 */
  --text-2xl: 31px;       /* 25 * 1.25 */
  --text-3xl: 39px;       /* 31 * 1.25 */
  --text-4xl: 49px;       /* 39 * 1.25 */
  --text-5xl: 61px;       /* 49 * 1.25 */
}

/* 使用 CSS 变量 */
p { font-size: var(--text-base); }
h3 { font-size: var(--text-2xl); }
h2 { font-size: var(--text-3xl); }
h1 { font-size: var(--text-4xl); }

/* 注意:使用 rem 单位便于响应式设计 */
:root {
  font-size: 16px; /* 1rem = 16px */
}

p { font-size: 1rem; }
h3 { font-size: 1.938rem; }
h2 { font-size: 2.441rem; }
h1 { font-size: 3.052rem; }

3. 行高和字距

3.1 行高

行高(Line Height)是行与行之间的距离。

影响:
- 可读性
- 视觉舒适感
- 文本密集度

行高与字体大小的比例:

标题(h1-h3)
└─ 比例:1.2-1.3
   ├─ 32px 标题 → 38-42px 行高
   └─ 理由:紧凑,简洁

正文文本
└─ 比例:1.5-1.6
   ├─ 16px 文本 → 24-26px 行高
   └─ 理由:舒适易读

小文本/标签
└─ 比例:1.4-1.5
   ├─ 12px 文本 → 17-18px 行高
   └─ 理由:充足空间

3.2 字距(Letter Spacing)

字距是字符之间的水平距离。

使用场景:

正文文本
├─ 字距:0 或 -0.5px
├─ 理由:正常阅读
└─ 示例:使用默认

标题
├─ 字距:0.5-2px
├─ 理由:增加优雅感
└─ 示例:h1, h2

全大写文本
├─ 字距:1-3px
├─ 理由:避免显得过于紧凑
└─ 示例:WELCOME, FEATURED

小号文本
├─ 字距:0.5-1px
├─ 理由:改善可读性
└─ 示例:标签、提示

装饰文本/Logo
├─ 字距:2-5px
├─ 理由:高雅、拉伸
└─ 示例:品牌名称

3.3 CSS 实现

/* 排版模块 */
:root {
  /* 行高比例 */
  --line-height-tight: 1.2;
  --line-height-normal: 1.6;
  --line-height-relaxed: 1.8;
  
  /* 字距 */
  --letter-spacing-tight: -0.5px;
  --letter-spacing-normal: 0;
  --letter-spacing-wide: 1px;
  --letter-spacing-wider: 2px;
}

/* 标题排版 */
h1 {
  font-size: 2.5rem;
  line-height: var(--line-height-tight);
  letter-spacing: var(--letter-spacing-wide);
  font-weight: 700;
  margin-bottom: 0.5em;
}

h2 {
  font-size: 2rem;
  line-height: var(--line-height-tight);
  letter-spacing: 0.5px;
  font-weight: 600;
}

h3 {
  font-size: 1.5rem;
  line-height: var(--line-height-normal);
  font-weight: 600;
}

/* 正文 */
p {
  font-size: 1rem;
  line-height: var(--line-height-normal);
  margin-bottom: 1.5em;
  max-width: 65ch;  /* 理想行长 */
}

/* 小号文本 */
.text-small {
  font-size: 0.875rem;
  line-height: var(--line-height-normal);
  letter-spacing: 0.5px;
}

/* 全大写 */
.text-uppercase {
  text-transform: uppercase;
  letter-spacing: var(--letter-spacing-wider);
}

4. 行长和可读性

4.1 理想的行长

行长是指每行文字的字符数或像素宽度。

理想范围:

字符数:45-75 个字符
├─ 最小:40 个字符
├─ 理想:50-60 个字符
└─ 最大:80 个字符

像素数:
├─ 最小:375px (手机)
├─ 理想:600-800px
└─ 最大:1200px+

过短行
❌ 字词拆分过多
❌ 眼睛移动频繁
❌ 影响阅读流畅性

过长行
❌ 难以跟踪行尾
❌ 眼睛疲劳
❌ 用户容易迷路

4.2 CSS 设置行长

/* 使用 max-width 限制行长 */

/* 方案 1:固定像素 */
.article {
  max-width: 700px;  /* ~65-70 个字符 */
  margin: 0 auto;
}

/* 方案 2:使用 ch 单位(字符宽度) */
.article {
  max-width: 65ch;   /* 大约 65 个字符 */
  margin: 0 auto;
}

/* 方案 3:响应式 */
@media (max-width: 768px) {
  .article {
    max-width: 100%;
    padding: 0 1rem;
  }
}

@media (min-width: 1200px) {
  .article {
    max-width: 800px;
  }
}

5. 响应式排版

5.1 流动排版

/* 根据视口大小流动调整 */

/* 传统方式(需要多个 breakpoint) */
h1 {
  font-size: 24px;
}

@media (min-width: 768px) {
  h1 { font-size: 32px; }
}

@media (min-width: 1200px) {
  h1 { font-size: 48px; }
}

/* ✅ 现代方式:clamp() 函数 */
h1 {
  /* 最小值   首选值               最大值 */
  font-size: clamp(24px, 5vw, 48px);
}

/* 解释:
  - 最小 24px(超小屏幕)
  - 优先 5% 视口宽度(流动增长)
  - 最大 48px(超大屏幕)
*/

/* 其他元素 */
p {
  font-size: clamp(14px, 2vw, 18px);
  line-height: clamp(1.5, 1.5 + 1vw, 1.8);
}

/* 字距响应式 */
h1 {
  letter-spacing: clamp(0.5px, 1vw, 3px);
}

5.2 响应式尺度系统

/* 移动优先的尺度系统 */

:root {
  /* 移动设备 */
  --text-base: 16px;
  --text-lg: 18px;
  --text-xl: 20px;
  --text-2xl: 24px;
  --text-3xl: 28px;
}

@media (min-width: 768px) {
  :root {
    /* 平板设备 */
    --text-base: 16px;
    --text-lg: 18px;
    --text-xl: 24px;
    --text-2xl: 32px;
    --text-3xl: 40px;
  }
}

@media (min-width: 1200px) {
  :root {
    /* 桌面设备 */
    --text-base: 18px;
    --text-lg: 20px;
    --text-xl: 28px;
    --text-2xl: 40px;
    --text-3xl: 56px;
  }
}

6. 排版的最佳实践

✅ 排版最佳实践清单

1. 建立 CSS 变量系统
   ├─ 集中管理所有字体大小
   ├─ 便于维护和更新
   └─ 提高代码复用

2. 使用有意义的尺度
   ├─ 不要随意选择字体大小
   ├─ 使用类型比例系统
   └─ 保持一致性

3. 优先考虑可读性
   ├─ 足够的行高(1.5-1.8)
   ├─ 合适的行长(45-75 字符)
   ├─ 充足的对比度
   └─ 清晰的字体

4. 测试排版
   ├─ 不同屏幕大小
   ├─ 不同内容长度
   ├─ 使用屏幕阅读器
   └─ 真实用户反馈

5. 性能考虑
   ├─ 限制 Web 字体数量
   ├─ 只加载必要的字重
   ├─ 使用系统字体作为备选
   └─ 监控加载时间

6. 可访问性
   ├─ 使用相对单位(rem)
   ├─ 支持用户放大
   ├─ 足够的对比度
   └─ 清晰的文本

7. 排版实战示例

/* 完整的排版系统示例 */

:root {
  /* 基础大小 */
  --base-font-size: 16px;
  --base-line-height: 1.6;
  
  /* 字体栈 */
  --font-sans: system-ui, -apple-system, BlinkMacSystemFont, 
               "Segoe UI", Roboto, sans-serif;
  --font-serif: Georgia, "Times New Roman", serif;
  --font-mono: "Monaco", "Courier New", monospace;
  
  /* 尺寸尺度 */
  --fs-xs: 0.75rem;
  --fs-sm: 0.875rem;
  --fs-base: 1rem;
  --fs-lg: 1.125rem;
  --fs-xl: 1.25rem;
  --fs-2xl: 1.5rem;
  --fs-3xl: 1.875rem;
  --fs-4xl: 2.25rem;
  --fs-5xl: 3rem;
  
  /* 行高 */
  --lh-tight: 1.2;
  --lh-normal: 1.6;
  --lh-relaxed: 1.8;
  
  /* 字距 */
  --ls-tight: -0.5px;
  --ls-normal: 0;
  --ls-wide: 1px;
}

/* 应用排版 */
body {
  font-family: var(--font-sans);
  font-size: var(--base-font-size);
  line-height: var(--lh-normal);
  color: #333;
}

h1 {
  font-size: var(--fs-4xl);
  line-height: var(--lh-tight);
  font-weight: 700;
  margin-bottom: 0.5em;
}

p {
  font-size: var(--fs-base);
  line-height: var(--lh-normal);
  margin-bottom: 1.5em;
  max-width: 65ch;
}

总结

排版系统设计的核心:

  1. 一致性 - 使用系统化的尺寸和间距
  2. 可读性 - 合适的行长、行高和字距
  3. 层次 - 明确的视觉优先级
  4. 响应式 - 不同设备上都舒适阅读
  5. 可访问性 - 足够的对比度,支持放大

推荐资源