Custom Properties: Questioning “:root”
Post from September 21, 2020 (↻ August 31, 2021), filed under Web Development.
For custom properties (aka CSS variables) we got into the habit of declaring variables in a rule with a :root
selector.
This habit we probably inherited from the spec, and it had then likely been picked up and promoted by the larger web development communities.
Here’s a basic example of :root
in action:
:root {
--test: green;
}
body {
background: var(--test);
}
What’s interesting about this use of :root
is how rarely CSS is otherwise used to style non-HTML documents—whose targeting is :root
’s main selling point. Ask yourself, when have you last styled anything not HTML or SVG? (I did until 2009, for RSS feeds.)
What’s also interesting is how much emphasis is usually put on avoiding the universal selector, yet adding classes to everything.
All of this is rather ironic, and makes :root
for custom properties look like a somewhat “hipster” response, when one had just found out that CSS can be used for languages other than HTML. No offense there—it just looks a little like someone had just found out. At this point many may be following a convention.
Use of :root
for custom properties goes beyond irony, however, when it’s used exclusively for HTML. There the enthusiasm seems out of place:
The root element for HTML is <html>
. That is well-known. If a web developer knows what they’re styling—if you know what you’re styling—, be specific. That means, use html
as your selector, not :root
. It works:
html {
--test: green;
}
body {
background: var(--test);
}
Therefore, unless you’re working in an environment in which style sheets serve several document types (and roots) at the same time, question the use of :root
, for custom properties. It could be argued to be an anti-pattern for HTML. Be specific.
Many thanks to Hannes Schluchtmann for reviewing this post.
About Me

I’m Jens Oliver Meiert, and I’m an engineering lead and author. I’ve worked as a technical lead for Google, I’m close to the W3C and the WHATWG, and I write and review books for O’Reilly. Other than that, I love trying things, sometimes including philosophy, art, and adventure. Here on meiert.com I share some of my views and experiences.
If you have questions or suggestions about what I write, please leave a comment (if available) or a message.
Read More
Have a look at the most popular posts, possibly including:
Looking for a way to comment? Comments have been disabled, unfortunately.

Perhaps my most comprehensive book: The Web Development Glossary (2020). With explanations and definitions for literally thousands of terms from Web Development and related fields, building on Wikipedia as well as the MDN Web Docs. Available at Apple Books, Kobo, Google Play Books, and Leanpub.