Two strategies for handling missing capabilities — they're often confused but work in opposite directions.
Start from the baseline. Build up.
Start from the full experience. Remove what fails.
Graceful degradation assumes you can anticipate every failure mode. Progressive enhancement assumes you can't — so it makes the baseline solid first.
Progressive enhancement is always kinder than graceful degradation.
| Approach | HTML | CSS | JS |
|---|---|---|---|
| Progressive Enhancement | Semantic, works alone | Enhances layout | Adds interactivity |
| Graceful Degradation | Built for JS | May depend on JS | Core, with fallbacks |
The .no-js pattern is a practical implementation of progressive enhancement.