字体单位
CSS 长度单位分为绝对与相对两类。排版与布局中,字号与间距优先使用相对单位(rem、em、%),更利于响应式与用户放大字号;边框、细线等可用 px。与排版属性的配合见 排版与文本。
绝对长度单位
主要用于印刷(@media print)或需要固定物理尺寸的场景。
| 单位 | 说明 |
|---|---|
| px | CSS 像素,映射到设备像素的比例因 DPR 而异;不随父元素字号变化 |
| pt | 1pt = 1/72 英寸,印刷常用 |
| pc | 1pc = 12pt,少见 |
关于 px 与无障碍
MDN 建议:避免仅用 px 定义字号,因为部分用户依赖浏览器「最小字号」或默认字号放大;rem / % 相对根字号更易配合无障碍设置。页面整体缩放仍会放大 px 布局,但字号策略上更推荐 rem。
相对长度单位
相对于字体:em / rem / ch / lh
| 单位 | 参照 | 特点 |
|---|---|---|
| em | 当前元素 font-size(或父级,视属性而定) | font-size 上会复合嵌套;适合组件内 padding: 0.5em 1em 随字号伸缩 |
| rem | 根元素 <html> 的 font-size | 不随嵌套累积;适合全局字号、间距 |
| ch | 数字 0 的字形宽度 | 常用于 max-width: 60ch 限制行长 |
| lh / rlh | 元素 / 根 的 line-height | 与行高对齐的间距(较新) |
em 复合示例:父 font-size: 1.2em,子再 1.2em → 相对祖父约为 1.44em。
rem 示例:html { font-size: 100%; }(通常 16px)时,1.25rem ≈ 20px。
font-size: 62.5%技巧:使1rem ≈ 10px(在默认 16px 下)。现较少推荐:改变根字号比例可能影响用户默认字号预期;更常见是保持100%并用1.125rem等小数字。
相对于视口:vw / vh / vmin / vmax / vi / vb
| 单位 | 说明 |
|---|---|
| vw / vh | 视口宽/高的 1% |
| vmin / vmax | vw 与 vh 中较小/较大者 |
| vi / vb | 行内/块向视口尺寸(书写模式相关) |
动态视口单位(移动端全屏)
| 单位 | 含义(规范定义) |
|---|---|
dvh | 动态视口高度 1%;随浏览器 UI(地址栏等)显隐变化 |
svh | 小视口高度 1%(UI 最大占用时) |
lvh | 大视口高度 1%(UI 最小占用时) |
全屏区块常用 min-height: 100dvh 替代 100vh,减少地址栏收起前后高度跳动;支持度见 MDN length · 视口百分比。
百分比 %
用于 font-size 时,相对于父元素的 font-size(行为类似 em)。
对比:px vs em vs rem
| 特性 | px | em | rem |
|---|---|---|---|
| 参照 | 固定 CSS 像素 | 当前/父级字号 | 根字号 |
| 嵌套 | 不累积 | font-size 易累积 | 不累积 |
| 适用 | 边框、阴影、1px 线 | 组件内随字号伸缩的 padding | 全局字号、页面间距 |
| 无障碍 | 字号场景慎用 | 较好 | 推荐 |
流式字号:clamp()
结合 rem 与 vw 限制最小/最大字号:
h1 {
font-size: clamp(1.25rem, 2.5vw + 1rem, 2rem);
}
代码示例
html {
font-size: 100%; /* 尊重用户默认,通常 16px */
}
body {
font-size: 1rem;
line-height: 1.5; /* 无单位:1.5 × 自身 font-size */
}
.card {
border: 1px solid #ccc; /* 细线用 px */
padding: 1.5rem;
}
.btn {
font-size: 1rem;
padding: 0.5em 1em; /* em 相对 .btn 的 font-size */
}
.title {
font-size: 1.5rem;
max-width: 40ch; /* 约 40 个字符宽 */
}
总结
- 全局字号与间距:优先 rem;组件内部随字号缩放:em。
- 边框、1px 分隔线:px。
- 标题响应式:clamp() + rem/vw。
- 避免为正文单独写死
px字号;根元素宜用%而非随意改小62.5%。
参考文献
以下链接在编写时均可正常访问:
| 资料 | 说明 |
|---|---|
| MDN:font-size | px、em、rem 与无障碍说明 |
| MDN:length | 长度单位总览 |
| MDN:clamp() | 流式字号 |
| MDN:line-height | 与 lh 单位 |
| W3C:CSS Values and Units Module Level 4 | 单位规范(英文) |
| MDN:length · 视口 | dvh、svh、lvh |
相关文章
Less 基础与核心语法
Less 是 JavaScript 实现的 CSS 预处理器,在 CSS 语法上扩展变量(@)、嵌套、混合、运算与函数,编译为普通 CSS 后由浏览器加载;本文覆盖安装、CLI、构建工具集成与全部核心语法。
Sass 简介与安装
Sass(Syntactically Awesome Style Sheets)是 CSS 预处理器,在 CSS 语法上增加变量、嵌套、混合、模块、控制指令等;有 SCSS 与缩进语法两种源码语法,官方实现为 Dart Sass。
模块与控制流:@use、内置函数、@if/@for/@each
Dart Sass 推荐用 @use/@forward 替代已弃用的 @import;内置 sass:* 模块提供颜色、字符串、列表、Map、数学等函数;@if/@for/@each/@while 用于条件与循环生成样式。
复用机制:Mixin 与继承
Mixin(@mixin/@include)支持参数与 @content,适合动态样式;@extend 与 %placeholder 通过合并选择器复用完全相同的静态样式,减少 CSS 体积。
语法基础:变量、嵌套与运算
Sass 语法基础:$ 变量与插值、选择器嵌套与 & 父选择器引用、数学/颜色/字符串运算、三种注释语法及与原生 CSS 嵌套的关系。
颜色与背景
color 设置前景(多为文字)色;background-* 设置元素背景(颜色、图像、渐变)。二者共同决定对比度与视觉层次,直接影响 无障碍 阅读体验。排版中的文本颜色用法见 排版与文本。