制表符到底多宽:tab-size
论坛与文档里常有人贴一大段用 Tab 缩进的代码,浏览器渲染后缩进宽得出奇——因为 <pre> 里的制表位默认每 8 个字符宽一档(沿袭早期终端的传统)。tab-size 一行即可调整:设为 2 或 4,缩进立刻规整。
1 · 制表位而非定宽字符
制表符不是一个定宽字符。规范的定义是:每个被保留的 tab 渲染为一次水平位移,把下一个字形的起始边对齐到下一个制表位;制表位落在距最近块容器起始内容边 tab-size 整数倍的位置上,若该位移不足 0.5ch 则顺延到再下一个制表位。因此 a\tb 与
aaaaaaa\tb 里同一个制表符的宽度并不相同。
| 点 | 说明 |
|---|---|
| 默认值 | tab-size: 8——沿袭传统,往往偏宽 |
| 取值 | <number>(制表位间隔多少个字符宽,2.5 也合法);也可给长度,如 tab-size: 2ch |
| 前提 | 只对制表符生效,且需 white-space 为 pre / pre-wrap 等保留 tab 的值;normal 会把 tab 折叠成普通空格,属性就「失效」了 |
历史上 -moz-tab-size 是早期前缀,如今主流浏览器都支持无前缀的 tab-size,带上前缀可兼容旧版 Firefox。
为什么用它:贴代码、展示带缩进的纯文本、ASCII 表格对齐,都靠 tab 对齐。把 tab-size 调到与代码风格一致(2 / 4),既保留了 tab 字符本身,又让渲染宽度恰到好处——比把 tab 全部替换成空格更为便捷。
2 · 相关链接
- tab-size · MDN——developer.mozilla.org。制表符 U+0009 的制表位间隔(
<number>或长度值);需white-space保留 tab 才生效。 - CSS Text Module Level 4——drafts.csswg.org · CSSWG。
tab-size(§Tab Character Size)与text-autospace的规范出处。