표 형식 숫자

Tabular numbers

모든 숫자(0~9)가 같은 폭을 갖도록 강제하는 기능. 숫자가 세로로 줄지어 바뀌는 표·티커에서 자릿수가 흔들리지 않게 합니다.

다른 이름: 고정폭 숫자tnumTabular figures
···
html
<div class="stage">
  <div class="col">
    <div class="tag">proportional-nums</div>
    <div class="ticker prop" id="t1"></div>
  </div>
  <div class="col">
    <div class="tag good">tabular-nums</div>
    <div class="ticker tnum" id="t2"></div>
  </div>
  <div class="readout" id="readout">측정 중…</div>
</div>
css
.stage{display:grid;gap:12px;justify-items:center}
.col{display:grid;gap:6px;justify-items:end}
.tag{font:10px ui-monospace,Menlo,monospace;color:var(--muted)}
.tag.good{color:var(--accent-3)}
.ticker{font:700 5.5vmin/1.2 ui-monospace,Menlo,'SFMono-Regular',monospace;color:var(--fg);width:5.2em;text-align:right}
.prop{font-variant-numeric:proportional-nums}
.tnum{font-variant-numeric:tabular-nums}
.readout{font:10px ui-monospace,Menlo,monospace;color:var(--muted);text-align:center;max-width:280px}
js
const t1 = document.getElementById('t1');
const t2 = document.getElementById('t2');
let n = 10482;
setInterval(function(){
  n = (n + Math.floor(Math.random() * 900) + 10) % 100000;
  const s = String(n).padStart(5, '0');
  t1.textContent = s;
  t2.textContent = s;
}, 260);

const probe = document.createElement('span');
probe.style.cssText = 'position:absolute;visibility:hidden;font:16px -apple-system,system-ui,sans-serif;font-variant-numeric:tabular-nums';
document.body.appendChild(probe);
const widths = [];
for (let d = 0; d <= 9; d++){ probe.textContent = String(d); widths.push(probe.getBoundingClientRect().width); }
const min = Math.min.apply(null, widths), max = Math.max.apply(null, widths);
const readout = document.getElementById('readout');
readout.textContent = (max - min < 0.4)
  ? '실측: 0~9 폭 전부 동일 (' + min.toFixed(1) + 'px) — 이 폰트에서 tabular-nums 효과 있음'
  : '실측: 0~9 폭 차이 있음 (' + min.toFixed(1) + '–' + max.toFixed(1) + 'px) — 이 폰트에서 효과 미미';

일반(비례폭, proportional) 숫자는 "1"이 "8"보다 좁게 그려집니다. 문장 속에서는 자연스럽지만, 가격이나 시간처럼 숫자가 세로로 줄지어 계속 바뀌는 표에서는 자릿수 폭이 매번 달라져 열이 흔들리고 실시간으로 업데이트되는 값은 옆 텍스트까지 들썩이게 만듭니다.

`font-variant-numeric: tabular-nums`는 폰트가 지원하면 모든 숫자를 모노스페이스처럼 같은 폭으로 그립니다(대신 자간이 아니라 숫자 자체 글리프 폭이 바뀝니다). 문장 전체를 모노스페이스로 바꾸는 것과 달리, 알파벳·한글은 비례폭 그대로 두고 숫자만 정렬을 맞추는 절충안입니다.

이 기능은 폰트가 `tnum` 태그의 대체 글리프를 실제로 갖고 있어야 동작합니다. 데모는 캔버스로 "0"~"9" 각 글자의 렌더링 폭을 `tabular-nums` 켠 상태에서 실측해서, 열 개 숫자 폭이 실제로 동일한지(=이 폰트에서 효과 있음) 다른지(=효과 없음)를 그 자리에서 보여줍니다.

언제 쓰나

실시간으로 바뀌는 대시보드 지표, 주가 티커, 타이머, 표 형식 데이터의 숫자 열에. 문장 속 일반 숫자에는 기본값(proportional)이 자연스럽습니다.