How can I detect CSS Variable support with JavaScript?
We can do this with CSS.supports
. This is the JavaScript implementation of CSS's @supports
rule which is currently available in Firefox, Chrome, Opera and Android Browser (see Can I Use...).
The
CSS.supports()
static methods returns a Boolean value indicating if the browser supports a given CSS feature, or not.
– Mozilla Developer Network
With this, we can simply:
CSS.supports('color', 'var(--fake-var)');
The result of this will be true
if the browser supports CSS variables, and false
if it doesn't.
(You might think that CSS.supports('--fake-var', 0)
would work, but as noted in comments on this answer Safari seems to have a bug there making it fail.)
Pure JavaScript Example
On Firefox this code snippet will produce a green background, as our CSS.supports
call above returns true
. In browsers which do not support CSS variables the background will be red.
var body = document.getElementsByTagName('body')[0];
if (window.CSS && CSS.supports('color', 'var(--fake-var)')) {
body.style.background = 'green';
} else {
body.style.background = 'red';
}
Note that here I've also added checks to see whether window.CSS
exists - this will prevent errors being thrown in browsers which do not support this JavaScript implementation and treat that as false
as well. (CSS.supports
was introduced at the same time CSS
global was introduced, so there's no need to check for it as well.)
Creating the browserCanUseCssVariables()
function
In your case, we can create the browserCanUseCssVariables()
function by simply performing the same logic. This below snippet will alert either true
or false
depending on the support.
function browserCanUseCssVariables() {
return window.CSS && CSS.supports('color', 'var(--fake-var)');
}
if (browserCanUseCssVariables()) {
alert('Your browser supports CSS Variables!');
} else {
alert('Your browser does not support CSS Variables and/or CSS.supports. :-(');
}
The Results (all tested on Windows only)
Firefox v31
Chrome v38
Internet Explorer 11
Set a CSS style with CSS variables and proof with Javascript and getComputedStyle()
if it is set...
getComputedStyle()
is supported in many browsers: http://caniuse.com/#feat=getcomputedstyle
HTML
<div class="css-variable-test"></div>
CSS
:root {
--main-bg-color: rgb(1, 2, 3); /* or something else */
}
.css-variable-test {
display: none;
background-color: var(--main-bg-color);
}
JavaScript
var computedStyle = getComputedStyle(document.getElementsByClassName('css-variable-test')[0], null);
if (computedStyle.backgroundColor == "rgb(1, 2, 3)") { // or something else
alert('CSS variables support');
}
FIDDLE: http://jsfiddle.net/g0naedLh/6/