AukodeAukode
CSS history and facts worth knowing
Engineering

CSS history and facts worth knowing

CSS was proposed in 1994 and ignored for two years. The box model debate broke the early web. Flexbox took six years to finalize. The history of styling the web is messier than the spec makes it look.

cssweb historyflexboxcascadebrowser

CSS Was Proposed in 1994 and Ignored for Two Years

Håkon Wium Lie proposed Cascading Style Sheets on October 10, 1994, while working at CERN alongside Tim Berners-Lee. The proposal was largely ignored by browser vendors for two years. Netscape and Microsoft were busy adding proprietary HTML tags like BLINK and MARQUEE instead.

CSS1 was officially published by the W3C in December 1996. Internet Explorer 3 was the first browser to support any version of CSS, in August 1996, but the implementation was so buggy that developers mostly avoided it. Useful CSS support did not arrive until Internet Explorer 5 in 1998.

A flat lay of colorful design swatches and a notebook on a designer's wooden desk
CSS gave designers the power to control color, layout, and typography on the web

The Box Model Almost Broke the Web

When CSS was first implemented, Internet Explorer and standards-compliant browsers disagreed on a fundamental thing: what does 'width' mean? IE used what is now called border-box sizing, where width includes padding and border. Netscape used content-box sizing, where width is just the content area.

This mismatch caused layouts to look completely different between browsers throughout the late 1990s and early 2000s. The 'IE box model bug' was one of the defining frustrations of web development for a decade. CSS3 eventually added box-sizing: border-box to let developers choose, and today most teams apply it globally to everything via a universal selector reset.

Flexbox Took 6 Years to Finalize

The Flexbox specification was first proposed in 2009. It went through three completely different syntax versions before landing on the current syntax in 2012 and reaching stable browser support in 2015. If you have ever seen old tutorials that use display: box or display: flexbox instead of display: flex, those are the earlier drafts.

During those six years, developers used various prefixed versions: -webkit-flex, -moz-flex, -ms-flexbox. Writing a Flexbox layout that worked across browsers required a list of seven or eight property declarations that all did the same thing.

A UI design mockup layout on paper with colored markers and a laptop in the background
Flexbox finally gave designers the layout control they had been sketching on paper for years

CSS Variables Are More Powerful Than Preprocessor Variables

Sass and Less variables get compiled away at build time. CSS custom properties, which are what 'CSS variables' actually are, exist at runtime. This means you can change a CSS variable with JavaScript, set different values in media queries, and inherit them through the DOM like any other CSS property.

:root {
  --color-primary: #3b82f6;
}

@media (prefers-color-scheme: dark) {
  :root {
    --color-primary: #60a5fa;
  }
}

The dark mode switch happens without any JavaScript. The variable resolves at render time based on system preference. Sass cannot do this because it runs at compile time.

The Cascade in CSS Is Not Just About Specificity

Most developers know that specificity determines which rule wins when two selectors target the same element. Fewer know the full cascade order: origin and importance, then specificity, then source order.

Origin refers to where the styles come from: the browser's default stylesheet, user stylesheets (which people with accessibility needs sometimes set), and the author's stylesheet (your CSS). Styles marked !important in user stylesheets beat !important in author stylesheets, which is by design. The spec deliberately protects users who need to override author styles for accessibility reasons.

CSS Layers, introduced in 2022, added a fourth axis: layer order. Layers let you explicitly declare which group of styles should win independently of specificity, which makes managing third-party styles, resets, and component libraries significantly more predictable.


Sources

  • CSS proposal history: Håkon Wium Lie, Cascading HTML style sheets: a proposal (1994) - w3.org
  • CSS1 publication: W3C, CSS Level 1 Recommendation (December 1996) - w3.org/TR/CSS1
  • IE box model bug: Eric Meyer, CSS: The Definitive Guide; also Aaron Gustafson, CSS Box Model Explained - quirksmode.org
  • Flexbox specification history: W3C CSS Flexbox Module Level 1 changelog - w3.org/TR/css-flexbox-1
  • CSS Custom Properties: MDN Web Docs, Using CSS custom properties - developer.mozilla.org
  • CSS Cascade Layers: Miriam Suzanne, Cascade Layers Explainer (2022) - css.oddbird.net

Work with me

Want to build something like this?

I build, optimise, and ship for teams who need it done right. Free project scoping, full code ownership.

Stay in the loop

Want the latest posts straight to your inbox?

DH

Hawari

Lead Engineer

Lead Engineer specializing in high-performance web architecture, automation, and AI integration. Writes to share battle-tested patterns. Read more →