Custom properties (sometimes referred to as CSS variables or cascading variables) are entities defined by CSS authors that represent specific values to be reused throughout a document. They are set using the @property
at-rule or by custom property syntax (e.g., --primary-color: blue;
). Custom properties are accessed using the CSS var()
function (e.g., color: var(--primary-color);
).
Complex websites have very large amounts of CSS, and this often results in a lot of repeated CSS values. For example, it's common to see the same color used in hundreds of different places in stylesheets. Changing a color that's been duplicated in many places requires a search and replace across all rules and CSS files. Custom properties allow a value to be defined in one place, then referenced in multiple other places so that it's easier to work with. Another benefit is readability and semantics. For example, --main-text-color
is easier to understand than the hexadecimal color #00ff00
, especially if the color is used in different contexts.
Custom properties defined using two dashes (--
) are subject to the cascade and inherit their value from their parent. The @property
at-rule allows more control over the custom property and lets you specify whether it inherits its value from a parent, what the initial value is, and the type constraints that should apply.
Note: Variables do not work inside media queries and container queries. You can use the var()
function in any part of a value in any property on an element. You cannot use var()
for property names, selectors, or anything aside from property values, which means you can't use it in a media query or container query.