Introduction to CSS Variables and Custom Properties: A Modern Way to Manage Styles

13/07/2025

Introduction to CSS Variables and Custom Properties: A Modern Way to Manage Styles

Learn how CSS variables (custom properties) can simplify your styling, improve theme management, and make your code more maintainable. This guide covers syntax, use cases, and practical examples to help you get started.

CSS Variables and Custom Properties

Unlock the power of dynamic and maintainable stylesheets.

Introduction to CSS Variables (Custom Properties)

CSS has evolved significantly over the years, offering developers more powerful tools to create dynamic and maintainable stylesheets. Among these advancements, CSS Variables, officially known as Custom Properties, stand out as a game-changer. If you're tired of repetitive code, struggling with theming, or just looking for a more efficient way to manage your styles, then buckle up – this post is for you!

What are CSS Variables (Custom Properties)?

At their core, CSS Variables are entities defined by CSS authors to contain specific values that can be reused throughout a document. Think of them like variables in programming languages: you declare them once, assign a value, and then use that variable wherever you need that value. When you want to change the value, you only need to update it in one place, and it propagates everywhere the variable is used.

They are distinguished by their custom property name, which must start with two dashes (--).

Syntax:

:root {
  --main-color: #007bff;
  --panel-background: #f8f9fa;
}

.button {
  background-color: var(--main-color);
  color: white;
}

.panel {
  background-color: var(--panel-background);
  border: 1px solid var(--main-color);
}

In this example, :root is a pseudo-class that targets the document's root element (HTML). This is a common place to declare global CSS variables, making them accessible throughout your entire stylesheet.

Why Use CSS Variables?

The benefits of incorporating CSS Variables into your workflow are numerous:

1. Reduced Repetition (DRY Principle):

Say goodbye to copying and pasting the same hex code or pixel value multiple times. Define it once, use it everywhere. This adheres to the "Don't Repeat Yourself" (DRY) principle, making your code cleaner and less prone to errors.

2. Easier Theming:

This is where CSS Variables truly shine. Imagine creating light and dark themes for your website. Without variables, you'd be toggling countless CSS classes or even generating entirely new stylesheets. With variables, you just update a few variable values, and your entire theme shifts.

/* Light Theme */
:root {
  --text-color: #333;
  --background-color: #fff;
}

/* Dark Theme */
.dark-theme {
  --text-color: #fff;
  --background-color: #333;
}

3. Improved Maintainability:

When a design decision changes (e.g., a brand color updates), you only need to modify the variable's definition in one place. This drastically reduces the time and effort spent on updates and minimizes the risk of inconsistencies.

4. Enhanced Readability:

Assigning meaningful names to your variables (e.g., --primary-color , --font-size-large ) makes your CSS more self-documenting and easier for others (and your future self!) to understand.

5. Dynamic Styling with JavaScript:

CSS Variables can be manipulated using JavaScript, opening up a world of dynamic styling possibilities without needing to directly add or remove classes for every style change.

const root = document.documentElement;
root.style.setProperty('--main-color', 'purple');

How to Use CSS Variables

1. Defining Variables

As shown before, variables are typically defined within a selector, often :root for global scope.

:root {
  --primary-color: #4CAF50; /* Green */
  --secondary-color: #FFC107; /* Amber */
  --spacing-unit: 16px;
  --font-stack: "Helvetica Neue", sans-serif;
}

2. Using Variables with var()

To use a defined variable, you employ the var() function, passing the variable name as an argument.

h1 {
  color: var(--primary-color);
  font-family: var(--font-stack);
}

.card {
  margin-bottom: var(--spacing-unit);
  border-color: var(--secondary-color);
}

3. Fallback Values

The var() function also accepts a second, optional argument: a fallback value. This value will be used if the specified custom property is not defined. This is great for robustness and ensuring your styles don't break if a variable is missing.

.box {
  background-color: var(--non-existent-color, blue); /* If --non-existent-color isn't defined, use blue */
}

Scope of CSS Variables

CSS Variables cascade just like any other CSS property. This means they are available to elements that are descendants of the element where the variable is defined.

.container {
  --container-bg: lightgray;
  background-color: var(--container-bg);
}

.container p {
  /* This p element can access --container-bg */
  color: var(--container-text-color, black); /* If --container-text-color isn't defined here, it won't inherit from container as it's not defined there*/
}

.another-element {
  /* This element cannot access --container-bg unless it's a descendant of .container */
}

Variables defined on :root have the widest scope and are available everywhere in the document.

Browser Support

CSS Custom Properties enjoy excellent browser support across all modern browsers. You can confidently start using them in your projects today. For older browsers that don't support them, the fallback mechanism in var() can be helpful, or you might consider using a preprocessor to compile them if absolute legacy browser support is critical.

CSS Variables (Custom Properties) are an incredibly powerful addition to the CSS language. They empower developers to write more organized, maintainable, and dynamic stylesheets. By embracing variables, you'll find yourself writing less repetitive code, making global style changes a breeze, and ultimately, building more robust and adaptable web designs.

Start experimenting with them in your next project – you'll wonder how you ever managed without them!

Created with ❀️ and CSS Variables.

In modern front-end development, maintainability and scalability of styles are just as important as design. This is where CSS variables, also known as custom properties, come into play. Introduced in CSS3, these variables allow developers to store reusable values (like colors, spacing, fonts, etc.) directly in the stylesheet, making your code cleaner, DRY (Don’t Repeat Yourself), and easier to maintain.

Unlike preprocessor variables (like in SASS or LESS), CSS variables are dynamic. They work in the browser at runtime, respond to media queries, support inheritance, and can even be updated with JavaScript. This opens up a world of possibilities for building themes, dark mode, responsive designs, and more β€” all with native CSS.