The font-weight property sets how light or bold text looks. The weights you can see depend on the active font-family.
The initial value is normal (same as 400). The property is inherited and applies to all elements and text, including ::first-letter and ::first-line. It is also part of the font shorthand.
Standard-track.
Not deprecated and not experimental. Keywords and classic numeric weights are Baseline Widely available. Fine-grain numbers from 1 to 1000 are mainly useful with variable fonts.
Step up once.bolder on the child moves to the next relative heavy step, usually 700.
Depend on inheritance. If the parent were already bold, bolder would climb toward 900.
Prefer fixed weights for UI kits. Use 700 when you need the same boldness everywhere.
Edge Cases & Pitfalls
If the weight looks wrong, check the font faces first.
faces
Missing weights fall back
If you ask for 500 and the family only has 400 and 700, the browser picks the closest available face. The computed value still stays what you wrote.
a11y
Very thin text is hard to read
100 and 200 can be difficult for people with low vision, especially with low contrast. Prefer at least regular weight for body copy.
rel
bolder and lighter are relative
They step from the parent using a simplified scale (about 100 / 400 / 700 / 900). Nested relative weights can climb or drop faster than you expect.
short
The font shorthand can overwrite weight
Writing font after font-weight resets weight unless you include it in the shorthand.
var
Variable fonts unlock fine numbers
Values between classic hundreds, or the full 1–1000 range, shine with variable fonts that expose a wght axis. Static fonts still snap to available faces.
Compatibility
Browser Support
font-weight is a browser CSS property for typography. Node.js, Deno, and Bun do not apply it.
✓ Baseline · Widely available
font-weight
Supported in all modern browsers and Internet Explorer. Keywords and numeric weights are long-established.
99%Global support
Google Chrome2+
Full support
Mozilla Firefox1+
Full support
Apple Safari1+
Full support
Microsoft Edge12+
Full support
Opera3.5+
Full support
Samsung Internet1+
Full support
Internet Explorer3+
Full support
font-weightWidely supported
Bottom line: Safe everywhere for normal, bold, and classic numeric weights. Fine-grain variable-font weights need modern browsers and a matching font file.
Remember
Key Takeaways
Role: set how light or bold the text looks.
Map:normal = 400, bold = 700.
Inherited: yes. Initial value is normal.
Font faces matter: unavailable weights fall back to the closest face.
One line:font-weight chooses the boldness of the text; the font family decides which faces you can actually see.
Frequently Asked Questions
It sets how light or bold text looks. You can use keywords such as normal and bold, numbers such as 400 and 700, or relative keywords lighter and bolder.
The initial value is normal, which maps to 400.
Yes in practice. bold is a keyword that equals 700. normal equals 400.
The active font may not include a 500 face. The browser then picks the closest available weight, so the change can look subtle or invisible.
bold always targets about 700. bolder makes the element one relative step heavier than its parent, so the result depends on the inherited weight.
It is Baseline Widely available and works in all modern browsers and Internet Explorer. It is a browser CSS property, not a Node.js, Deno, or Bun feature.