It’s not random. It’s just history, still living in your code.
There’s a moment most designers and developers have at least once, even if they don’t say it out loud.
You’re looking at a stylesheet, you see font-weight: 400, and something about it feels slightly off. Not wrong in a technical sense, but strange in a way you can’t fully explain. If this is supposed to be “normal,” why doesn’t it sit in the middle? Why not 500? Why 400 of all numbers?
It’s a small detail, but it lingers, because it doesn’t match the way we usually think about things.

What makes it interesting is that the number itself isn’t trying to make sense to you. It comes from a much older attempt to fix a completely different problem — one that had nothing to do with CSS.
Long before digital design, typography didn’t have a clear system for weight. Fonts were labeled with words, and those words depended entirely on who created them. One designer would call something “Regular,” another would prefer “Book,” someone else might use “Roman,” and none of these names were guaranteed to match in any consistent way. You could place two “Regular” fonts next to each other and notice that one looked slightly heavier, or softer, or more delicate than the other, even though they carried the same label.
The confusion wasn’t dramatic, but it was constant. It sat quietly in the background of every decision, especially for people working across different typefaces. Over time, it became clear that the problem wasn’t the fonts themselves, but the language around them. Words felt intuitive, but they were too flexible. They shifted meaning depending on context, culture, and personal interpretation.
At some point, the industry started leaning toward something simpler and more stable: numbers.
Numbers didn’t need interpretation. They didn’t carry emotional or cultural weight. They created distance from language, which was exactly what designers needed at the time. Instead of trying to agree on what “Medium” or “Regular” should mean, it became easier to assign positions along a scale — lighter on one end, heavier on the other.
That shift didn’t happen overnight, and it wasn’t perfectly structured from the beginning. It grew gradually, shaped by practical needs rather than theory. When digital systems entered the picture, that loose numeric idea had to become more precise. Software needed clear values, not approximations, so the scale expanded into something more detailed: 100, 200, 300, all the way up to 900.
That expansion wasn’t about elegance. It was about flexibility. By spacing the values out, it left room for additional weights to exist between the main steps without forcing the entire system to change later. It was a quiet, practical decision — the kind that rarely gets attention but ends up lasting for decades.
Somewhere in that process, 400 became the default weight.
Not because it was perfectly centered, and not because anyone was trying to define “normal” in a philosophical sense. It simply occupied the place that designers and engineers agreed felt like the most natural baseline for reading. It was balanced enough for long text, neutral enough not to draw attention, and familiar enough to be reused again and again.
By the time CSS was introduced, this structure was already in use. There was no real need to rethink it, and in many ways, there was no benefit in doing so. So CSS adopted the system as it was, keeping things simple by mapping “normal” to 400 and “bold” to 700, while leaving everything else to be expressed numerically.
What creates the tension today isn’t the system itself, but the way it collides with everyday language. Outside of design, “medium” usually feels like the default. It’s what we expect to sit in the center, the option that represents balance. So when we see 500 labeled as “Medium” and 400 labeled as “normal,” it creates a subtle mismatch between intuition and reality.
But typography follows its own logic, shaped by history more than by language. “Medium” isn’t a synonym for “normal” in this context — it’s a distinct step, slightly heavier, intentionally separate.
Once you see it that way, the number starts to feel less arbitrary. It’s not trying to represent the middle of a scale in the way we imagine it. It’s simply marking a point that has proven useful over time, carried forward through different systems because it continued to work.
And maybe that’s the most honest explanation behind it.
font-weight: 400 isn’t special because of what it means on its own. It’s special because it stayed. It survived changes in tools, technologies, and design trends — not because it was perfect, but because it was practical enough that no one needed to replace it.
It’s a small reminder that many of the things we use every day aren’t built from clean logic. They’re shaped by decisions that made sense at the time, then quietly became standards.
And sometimes, they keep that shape long after the original reason is gone.
Industry Leader in Web Development and Design
If you want to read more insights, follow me on Medium.