I’ve set some CSS custom properties in my stylesheet:
:root { --bc: #fff; --bc-primary: #eee; --bc-secondary: #ddd; }
I can retrieve them individually if I already know the name of the CSS variable like so:
console.log(getComputedStyle(document.body).getPropertyValue('--bc')); // #fff
But if I wanted to pull a list of CSS variables and their values out, how would that be done?
Advertisement
Answer
Update:
- To catch CORS errors, I added
!styleSheet.href &&
to the firstif
-statement.
One possible solution would be to parse the document.styleSheets
, and then split the rules into properties/values
var allCSS = [].slice.call(document.styleSheets) .reduce(function(prev, styleSheet) { if (!styleSheet.href && styleSheet.cssRules) { return prev + [].slice.call(styleSheet.cssRules) .reduce(function(prev, cssRule) { if (cssRule.selectorText == ':root') { var css = cssRule.cssText.split('{'); css = css[1].replace('}','').split(';'); for (var i = 0; i < css.length; i++) { var prop = css[i].split(':'); if (prop.length == 2 && prop[0].indexOf('--') == 1) { console.log('Property name: ', prop[0]); console.log('Property value:', prop[1]); } } } }, ''); } }, '');
:root { --bc: #fff; --bc-primary: #eee; --bc-secondary: #ddd; }