OpenType features

오픈타입 기능

An extension of the OpenType format that lets a single font file hold multiple alternate glyph sets and switch between them by rule — kerning and ligatures through stylistic sets are all part of this same framework.

Also known as: OpenType Features글리프 대체 기능
···
html
<div class="stage">
  <div class="tagrow" id="tagrow"></div>
  <div class="readout" id="readout">측정 중…</div>
</div>
css
.stage{display:grid;gap:12px;justify-items:center;width:min(94%,520px)}
.tagrow{display:flex;gap:6px;flex-wrap:wrap;justify-content:center}
.tag{font:11px ui-monospace,Menlo,monospace;padding:4px 8px;border-radius:6px;border:1px solid var(--line);color:var(--muted)}
.tag.on{border-color:var(--accent);color:var(--accent)}
.tag.off{border-color:var(--line);color:var(--muted);opacity:.5}
.readout{font:11px ui-monospace,Menlo,monospace;color:var(--muted);text-align:center;line-height:1.6}
js
const probe = document.createElement('span');
probe.style.cssText = 'position:absolute;visibility:hidden;white-space:nowrap;font:16px -apple-system,system-ui,sans-serif';
probe.textContent = '0123456789 AVATAR office';
document.body.appendChild(probe);
function widthWith(setting){
  probe.style.fontFeatureSettings = setting;
  return probe.getBoundingClientRect().width;
}
const off = widthWith('"kern" 0, "liga" 0, "calt" 0');
const tags = [
  { tag: 'kern', setting: '"kern" 1, "liga" 0, "calt" 0' },
  { tag: 'liga', setting: '"kern" 0, "liga" 1, "calt" 0' },
  { tag: 'calt', setting: '"kern" 0, "liga" 0, "calt" 1' },
  { tag: 'tnum', setting: '"tnum" 1' },
];
const results = tags.map(function(t){
  const w = widthWith(t.setting);
  const base = t.tag === 'tnum' ? widthWith('"pnum" 1') : off;
  return { tag: t.tag, active: Math.abs(w - base) > 0.4 };
});
const tagrow = document.getElementById('tagrow');
const readout = document.getElementById('readout');
results.forEach(function(r){
  const el = document.createElement('span');
  el.className = 'tag ' + (r.active ? 'on' : 'off');
  el.textContent = r.tag + (r.active ? ' ✓' : ' —');
  tagrow.appendChild(el);
});
const activeCount = results.filter(function(r){ return r.active; }).length;
readout.textContent = '현재 시스템 폰트에서 폭 변화가 측정된 기능 ' + activeCount + '/' + results.length + '개 (실측, 폰트마다 다를 수 있음)';

A font file doesn't just hold glyph shapes — it can also hold rules like "when these two letters sit together, redraw them this way" (the GSUB and GPOS tables). Those rules are identified by four-letter tags: `liga` (standard ligatures), `kern` (kerning), `calt` (contextual alternates), `tnum` (tabular numbers), `ss01`–`ss20` (stylistic sets), and more.

CSS exposes these tags at two levels. Common features get named, high-level properties — `font-variant-ligatures`, `font-variant-numeric`, `font-variant-caps` — that toggle them on and off; features without a named property use the low-level `font-feature-settings: "ss01" 1` syntax to address the tag directly.

The crucial catch: turning on the CSS does nothing if the font itself doesn't ship glyphs or rules for that tag. The demos in this section, working within this site's system-fonts-only constraint, actually measure rendered width with a feature on versus off and report honestly whether a difference showed up — never assuming a font supports a feature just because documentation says fonts often do.

When to use

When choosing a brand typeface, verify which OpenType features it actually supports by inspecting the font file itself (tools like wakamaifondue.com), not by trusting marketing copy.