CSS 与布局 / 字体里的隐藏开关 / 制表符到底多宽:tab-size 待审核 6 / 18
代码 · tab-size

制表符到底多宽:tab-size

论坛与文档里常有人贴一大段用 Tab 缩进的代码,浏览器渲染后缩进宽得出奇——因为 <pre> 里的制表位默认每 8 个字符宽一档(沿袭早期终端的传统)。tab-size 一行即可调整:设为 24,缩进立刻规整。

图 1-1 · 在真正用制表符缩进的代码上实时调整 tab-size,可拖动滑块观察制表位如何随之改变。

1 · 制表位而非定宽字符

制表符不是一个定宽字符。规范的定义是:每个被保留的 tab 渲染为一次水平位移,把下一个字形的起始边对齐到下一个制表位;制表位落在距最近块容器起始内容边 tab-size 整数倍的位置上,若该位移不足 0.5ch 则顺延到再下一个制表位。因此 a\tbaaaaaaa\tb 里同一个制表符的宽度并不相同。

说明
默认值 tab-size: 8——沿袭传统,往往偏宽
取值 <number>(制表位间隔多少个字符宽,2.5 也合法);也可给长度,如 tab-size: 2ch
前提 只对制表符生效,且需 white-spacepre / 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 的规范出处。