옵티컬 사이즈

Optical size

같은 서체라도 작은 크기에서는 더 굵고 넓게, 큰 크기(디스플레이용)에서는 더 가늘고 촘촘하게 그리는 보정.

다른 이름: 광학 크기 보정Optical scaling
···
html
<div class="stage">
  <div class="row active" id="r1"><span class="txt small">Optical Size</span><span class="lbl">텍스트용 · 굵고 촘촘하게 보정</span></div>
  <div class="row" id="r2"><span class="txt large">Optical Size</span><span class="lbl">디스플레이용 · 가늘고 넓게</span></div>
</div>
css
.stage{display:grid;gap:10px;width:min(94%,420px)}
.row{display:grid;gap:4px;padding:10px 14px;border-radius:10px;transition:background .4s}
.row.active{background:color-mix(in srgb, var(--accent) 12%, transparent)}
.txt{color:var(--fg);font-family:Georgia,'Times New Roman',serif;display:block}
.txt.small{font-size:16px;font-weight:700;letter-spacing:.01em}
.txt.large{font-size:clamp(26px,7vmin,40px);font-weight:300;letter-spacing:-.01em}
.lbl{font:10px ui-monospace,Menlo,monospace;color:var(--muted)}
js
const r1 = document.getElementById('r1');
const r2 = document.getElementById('r2');
let flip = false;
setInterval(function(){
  flip = !flip;
  r1.classList.toggle('active', !flip);
  r2.classList.toggle('active', flip);
}, 1700);

글자를 그냥 축소·확대만 하면 작은 크기에서는 가는 획이 흐릿하게 뭉개지고, 큰 크기에서는 필요 이상으로 두꺼워 보입니다. 활판 인쇄 시대엔 실제로 크기별 활자를 따로 새겨 이 문제를 해결했습니다 — 옵티컬 사이즈는 그 관행을 디지털로 되살린 개념입니다.

가변 폰트는 이걸 `opsz` 축으로 구현합니다. 폰트가 이 축을 지원하면 `font-size`를 바꿀 때 브라우저가 자동으로 굵기·자간·x-height 같은 세부까지 함께 보정합니다. 텍스트용(작은 크기)은 획 대비가 낮고 여유 있게, 디스플레이용(큰 크기)은 대비가 높고 촘촘하게 그려집니다.

이 사이트는 외부 폰트를 못 불러오므로 실제 `opsz` 축 대신, 텍스트/디스플레이 두 크기에서 굵기·자간을 수동으로 다르게 줘서 같은 원리를 흉내 냈습니다.

언제 쓰나

가변 폰트가 opsz 축을 지원한다면 굳이 별도 CSS 없이도 크기만 바꾸면 자동 보정됩니다. 지원하지 않는 폰트라면 큰 제목엔 살짝 얇은 굵기를, 작은 본문엔 살짝 굵은 굵기를 수동으로 주세요.