Font weight

폰트 웨이트

A number describing stroke thickness. CSS uses values from 100 (Thin) to 900 (Black) in steps of 100.

Also known as: 글자 굵기
···
html
<div class="stage" id="stage"></div>
css
#stage{display:grid;gap:3px;width:min(92%,380px)}
.step{display:flex;align-items:baseline;gap:10px;padding:3px 8px;border-radius:6px;transition:background .3s}
.step.active{background:color-mix(in srgb, var(--accent) 14%, transparent)}
.num{width:30px;flex:none;font:10px ui-monospace,Menlo,monospace;color:var(--muted);text-align:right}
.sample{font-family:system-ui,-apple-system,sans-serif;color:var(--fg);font-size:18px}
.name{font:10px ui-monospace,Menlo,monospace;color:var(--muted);margin-left:auto}
.step.active .sample{color:var(--accent)}
js
const weights = [[100,'Thin'],[200,'Extra Light'],[300,'Light'],[400,'Regular'],[500,'Medium'],[600,'SemiBold'],[700,'Bold'],[800,'Extra Bold'],[900,'Black']];
const stage = document.getElementById('stage');
weights.forEach(function(w){
  const row = document.createElement('div');
  row.className = 'step';
  const num = document.createElement('span');
  num.className = 'num';
  num.textContent = w[0];
  const sample = document.createElement('span');
  sample.className = 'sample';
  sample.style.fontWeight = w[0];
  sample.textContent = 'Weight';
  const name = document.createElement('span');
  name.className = 'name';
  name.textContent = w[1];
  row.appendChild(num);
  row.appendChild(sample);
  row.appendChild(name);
  stage.appendChild(row);
});
const rows = [...stage.children];
let idx = 0;
setInterval(function(){
  rows.forEach(function(r){ r.classList.remove('active'); });
  rows[idx].classList.add('active');
  idx = (idx + 1) % rows.length;
}, 500);

The familiar `normal` (400) and `bold` (700) keywords are shorthand for numeric values from 100 to 900. If a font lacks a real glyph for a given weight, the browser substitutes the closest available one, or — worst case — synthesizes bold by artificially thickening strokes, which degrades letterform quality and is best avoided.

Weight is the cheapest tool for building hierarchy. It distinguishes headings and emphasis without growing font size, and in small UI text a weight change disturbs layout far less than a size change does.

Loading a separate file per weight (Regular, Medium, Bold…) multiplies requests and bytes. Limiting the weights actually used to two or three — or replacing several files with one variable font — keeps this in check.

When to use

Decide on 2–3 weights the project actually uses (e.g. 400/600/800) and treat any other value as off-limits — this keeps the type system consistent.