Browser Compatibility Overview
CSS is a single language, but it does not run in a single engine. Every browser ships its own implementation of the CSS specification, and those implementations do not all support the same features, ship them on the same timeline, or even agree on edge-case behavior for older, well-established properties. Writing CSS that works reliably for real visitors means understanding why this happens and how to plan around it.
Different Engines, Different Timelines
The three major rendering engines in use today are Blink (used by Chrome, Edge, Opera, and most other Chromium-based browsers), WebKit (used by Safari, and required for all browsers on iOS), and Gecko (used by Firefox). Each engine is developed by a different organization, with its own priorities, release cadence, and implementation quirks. A new CSS feature might land in Chrome months or years before it reaches Safari, or vice versa — and sometimes a browser implements an early, slightly different version of a feature before the specification is finalized.
This means that shipping a new CSS feature the moment it is published in a spec is risky: a meaningful slice of your visitors may be on a browser that does not understand it at all, or understands an older/different variant of it. Browser compatibility work is largely about closing that gap safely.
Strategies Covered in This Section
Strategy | What it does |
|---|---|
Look up exactly which browsers and versions support a given feature before relying on it. | |
Historical browser-specific prefixes used to ship experimental CSS ahead of standardization. | |
Conditionally apply CSS only when the browser actually supports a given property/value. | |
Build a solid baseline experience first, then layer on enhancements where supported. | |
JavaScript-based workarounds that simulate missing CSS support in older browsers. | |
A modern, vendor-backed signal for when a feature has reached solid cross-browser support. |