How can I detect if a browser supports the CSS @supports feature? Since Internet Explorer and Safari don't support it, my web app doesn't know which styles to apply in those browsers.
Asked
Active
Viewed 448 times
2
-
What about Modernizer? – Paulie_D Jan 21 '14 at 12:05
-
That's a framework, correct? If possible I'd like to stay away from frameworks as much as possible. – Azrael Jan 21 '14 at 12:09
-
Nope...Feature detection JS - http://modernizr.com/ – Paulie_D Jan 21 '14 at 12:13
1 Answers
3
Using pure CSS, you can sort of rely on the cascade to determine whether a browser understands @supports
by making a @supports
rule with a universally-supported declaration, such as a color
declaration, and overriding another such rule that is declared globally:
#test {
color: red;
}
@supports (color: green) {
#test {
color: green;
}
}
See my answer to this question for a detailed explanation of the pure CSS method.
If you're looking to detect it using JavaScript, you can use the Modernizr feature detection library as mentioned in the comments (be sure to include css-supports in your download config):
if (Modernizr.supports) {
console.log('Your browser supports @supports.');
} else {
console.log('Your browser does not support @supports.');
}
-
The pure CSS solution may be the answer I was looking for. Currently using something similar but was unaware of the overriding functionality. – Azrael Jan 21 '14 at 21:04
-
Using your pure CSS solution, the base style rules are applied, even in browsers that previously displayed the style rules in a @supports block. EDIT: Does it matter if the supports block is within an media block? – Azrael Jan 21 '14 at 21:11
-
@Elitis: It should not matter - in that case the `@supports` block should apply if and only if the `@media` block also does. If you need to exclude the base styles from unsupporting browsers, move them to the `@supports` block instead. On the other hand, if you need to exclude the base styles from *supporting* browsers, you will have to override those too - that's the disadvantage of relying on overriding. – BoltClock Jan 22 '14 at 07:06