Skip to main content
← 🎨 CSS as a design systemΒ·Module B8 Β· Lesson 11
TaskDemo the legacy/modern layer pattern. @layer legacy, modern. @layer legacy { .card { background: red; padding: 5px; } }. @layer modern { .card { background: #3B82F6; padding: 20px; color: white; border-radius: 12px; } }. Modern should win.

Migrating legacy CSS without breaking things

75 XP6 min
Theory

The "wrap and replace" pattern

You inherit a 5000-line legacy stylesheet. You want to migrate to @layer + tokens. You CAN'T rewrite it all at once.

Strategy:

@layer legacy, modern;

@layer legacy {
  /* Wrap the entire 5000-line legacy file */
  @import url("/legacy.css") layer(legacy);
}

@layer modern {
  /* New code goes here. ALWAYS wins over legacy. */
  .new-card { ... }
}

The legacy layer is at the BOTTOM of priority. Any modern rule beats it without needing !important or higher specificity.

Replace incrementally

  1. Build a new component in modern layer.
  2. Apply it to a single page.
  3. Verify visual parity.
  4. Apply to the next page.
  5. Eventually delete the legacy rules for that component.

Months later: legacy layer is empty. Delete the import.

Don't fight the cascade

If a legacy rule applies an unwanted style to your modern component, DON'T add !important or stack 7 classes. Just put it in the modern layer:

@layer modern {
  .new-card { color: blue; }   /* Beats any legacy color */
}

When this doesn't work

  • If legacy uses !important AND you can't edit it. !important cuts ACROSS layers. You'd need a HIGHER-priority !important.
  • If legacy uses inline styles. Inline beats EVERYTHING except !important on a normal rule.

In both cases, edit the source if you can. If you can't, you're stuck doing CSS-fu the old way.

πŸ”’

Sign up to start coding

Theory is open to everyone. The interactive editor, live preview, and check are unlocked with a 7-day free trial β€” card required, cancel anytime.

Sign up β€” free trial β†’

First 10 lessons in each track are free. No card needed for those.

← PreviousNext lesson β†’

Get one Python or web tip a day β€” by email

Short, hand-written, no spam. Unsubscribe in one click.