CSS @support
The @supports rule in CSS to be a powerful tool for feature detection. This rule allows you to write conditional CSS that will only be applied if the browser supports a particular property or value, making it easier to implement progressive enhancement and graceful degradation strategies.
Syntax
The basic syntax of @supports is as follows:
@supports (CSS feature) {
  /* CSS rules for browsers that support the feature */
}
You can also use logical operators like and, or, and not to test multiple features:
@supports (display: grid) and (grid-template-areas: none) {
  /* CSS rules for browsers that support both features */
}
Examples
- 
Using
@supportsfor Grid Layout@supports (display: grid) {
.container {
display: grid;
grid-template-columns: 1fr 1fr;
}
} - 
Using
@supportswith Logical Operators@supports (display: flex) or (display: grid) {
/* CSS rules for browsers that support either flexbox or grid */
} - 
Using
@supportswithnotOperator@supports not (display: table-cell) {
/* CSS rules for browsers that do not support display: table-cell */
} 
Best Practices
- 
Progressive Enhancement: Use
@supportsto provide an enhanced experience for browsers that support newer CSS features, while offering a basic experience for others. - 
Avoid Redundancy: Don't repeat the same styles inside and outside of the
@supportsrule. Only include the styles that are specific to the feature you're testing. - 
Testing Multiple Features: If you need to test for the support of multiple features, use logical operators to combine multiple conditions.
 - 
Browser Support: While
@supportsis widely supported, some older browsers may not recognize it. In such cases, the contained styles will simply be ignored, so make sure to provide sensible defaults. - 
Feature Queries and JavaScript: You can also use JavaScript to test for CSS support using
CSS.supports()method, which can be useful for more complex logic that can't be expressed in CSS alone. 
if (window.CSS && CSS.supports("display", "grid")) {
  // Do something
}