Feature detection · Progressive enhancement · Live browser checker
This table is generated by actually running @supports queries in your current browser — not from a static compatibility chart. Results reflect what this specific browser instance supports right now.
@supports CSS rules — no JavaScript. Each element is display: none by default and set to visible only if the browser actually supports the feature. This is progressive enhancement: the base experience works everywhere; the enhanced experience activates only where it can.
Select a query type and feature. See the generated syntax, whether your browser passes, and a live visual of what it unlocks.
Each pattern shows the base (universal) CSS first, then the @supports enhancement layered on top. Old browsers get a working experience; modern browsers get the enhanced one.
Flex provides a working layout everywhere. Grid enhancement gives perfect auto-fill columns in modern browsers.
The or operator checks either the standard or WebKit-prefixed version. The frosted glass only activates when supported — older browsers get a clean opaque nav.
Uses selector(:has(*)) — not just (:has(*)). Wrapping in selector() correctly tests the selector syntax, not just the :has property name.
The new at-rule() function (Chrome 148+) detects if @layer, @scope, @property etc. are supported. Cleanly gates the entire layered architecture.
Apply @supports directly on @import — the stylesheet is only fetched when the condition passes. Reduces network requests on unsupported browsers.
The JavaScript mirror of @supports. Form 2 (single string) accepts the full condition syntax including selector(), not, and, or.
@when / @else) would replace the verbose dual-block @supports X { } @supports not X { } pattern with a cleaner if/else structure. Not yet implemented in any browser as of 2026, but approved by the CSSWG. Worth watching.