Clean β’ Professional
@supports (Feature Queries)Modern CSS features like Grid or Flexbox arenβt supported in all browsers. CSS @supports lets you check if a browser supports a feature before applying styles, ensuring layouts work everywhere. Itβs a tool for progressive enhancement: new features for modern browsers, fallbacks for older ones.
@supports (property: value) {
/* Styles applied only if the browser supports the property */
.example {
display: grid;
gap: 1rem;
}
}
CSS @supports can combine multiple conditions using logical operators:
| Operator | Example | Meaning |
|---|---|---|
and | @supports (display: grid) and (gap: 1rem) | All conditions must be true. |
or | @supports (display: grid) or (display: flex) | At least one condition must be true. |
not | @supports not (display: grid) | The condition must be false. |
Example
@supports (display: grid) and (gap: 1rem) {
.container {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 1rem;
}
}
@supportsA common use case is providing fallback styles for browsers that donβt support certain features:
.container {
display: flex; /* fallback */
}
@supports (display: grid) {
.container {
display: grid; /* modern browsers */
grid-template-columns: repeat(3, 1fr);
gap: 1rem;
}
}
You can check for multiple properties at once:
@supports (display: grid) and (gap: 1rem) and (color: red) {
.box {
display: grid;
gap: 1rem;
color: red;
}
}
@supports with notThe not keyword helps target browsers without support for a feature:
@supports not (display: grid) {
.container {
display: flex; /* fallback for older browsers */
}
}
@supports with Other QueriesYou can combine feature queries with media queries for more precise control:
@media (min-width: 768px) {
@supports (display: grid) {
.layout {
display: grid;
grid-template-columns: repeat(2, 1fr);
}
}
}
Example 1: CSS Grid Fallback
.container {
display: flex; /* fallback */
gap: 1rem;
}
@supports (display: grid) {
.container {
display: grid;
grid-template-columns: repeat(3, 1fr);
}
}Example 2: Feature Detection for backdrop-filter
.card {
background: rgba(255, 255, 255, 0.5);
}
@supports (backdrop-filter: blur(5px)) {
.card {
backdrop-filter: blur(5px);
}
}Β