DEV Community

Delia
Delia

Posted on

Mastering CSS Variables: A Beginner's Guide to Custom Properties

Hey there! If you're looking to make your CSS cleaner, more efficient, and a whole lot more fun, then you're in the right place. Today, we're diving into the world of CSS Variables, also known as CSS Custom Properties. These little gems are a game-changer in how we write and manage styles in modern web development. So, let’s break down what CSS variables are, why they're awesome, and how you can start using them today.

What Are CSS Variables?

CSS Variables allow you to store values that you want to reuse throughout your stylesheet. You can define a value once, and then reference it in multiple places. This is super handy for maintaining large stylesheets or themes.

Syntax of CSS Variables

Defining a CSS variable is simple. You typically declare it within the :root pseudo-class, which makes it available globally across your stylesheet:

:root {
    --main-bg-color: coral;
}
Enter fullscreen mode Exit fullscreen mode

Then, you can use this variable elsewhere in your CSS by wrapping it in var():

body {
    background-color: var(--main-bg-color);
}
Enter fullscreen mode Exit fullscreen mode

Advantages of Using CSS Variables

  1. Maintainability: Change the value in one place, and it updates everywhere. This is a lifesaver for projects where consistent theming is crucial.
  2. Scoping: Unlike preprocessor variables (like those in SASS or LESS), CSS variables can be scoped locally to elements. This means you can define and override values for specific areas of your webpage.
  3. Runtime Changes: CSS variables can be manipulated in real-time through JavaScript, making them perfect for dynamic themes or user-generated style changes.

Practical Tips and Tricks

Responsive Design

You can use CSS variables to simplify your responsive design workflow. For instance, you can define font sizes that change with the viewport:

:root {
    --font-small: 12px;
    --font-large: 16px;
}

@media (min-width: 768px) {
    :root {
        --font-small: 14px;
        --font-large: 18px;
    }
}

body {
    font-size: var(--font-small);
    line-height: var(--font-large);
}
Enter fullscreen mode Exit fullscreen mode

Theming

Creating themes is a breeze with CSS variables. Define a set of variables for each theme, and switch between them easily:

:root {
    --primary-color: blue;
    --secondary-color: green;
}

.dark-theme {
    --primary-color: midnightblue;
    --secondary-color: darkgreen;
}

.container {
    color: var(--primary-color);
    background-color: var(--secondary-color);
}
Enter fullscreen mode Exit fullscreen mode

Interacting with JavaScript

Adjusting CSS variables with JavaScript adds an interactive dimension to your site:

document.documentElement.style.setProperty('--primary-color', 'purple');
Enter fullscreen mode Exit fullscreen mode

Common Pitfalls and How to Avoid Them

  • Browser Support: While most modern browsers support CSS variables, some older versions (like Internet Explorer) do not. Consider using a fallback or a polyfill if older browser support is crucial.
  • Overuse: It's tempting to turn every value into a variable. However, use them judiciously for values that genuinely need reuse or real-time manipulation.

CSS Variables open up a world of possibilities for writing DRY, maintainable, and dynamic CSS. They can help you manage large stylesheets with ease, create themed designs without a hassle, and even let you tweak styles on the fly with JavaScript. So go ahead, give them a try, and see how they can improve your styling workflow!

Remember, the key to mastering CSS Variables is practice and experimentation. Start small by integrating them into a project or two, and soon you'll be on your way to becoming a CSS pro!

Ready to dive deeper? Explore further documentation and tutorials online to truly harness the power of CSS Variables in your projects. Happy coding!

Top comments (5)

Collapse
 
mlr profile image
mlr

Excellent guide. I still see people who have worked for over a decade in the industry not using CSS variables and adding the same color code dozens of times across classes, making it hard to adhere to principles of reusable code. I hope this guide helps them out.

Collapse
 
juliocamposswork profile image
Julio Campos

Perfect

Collapse
 
tracygjg profile image
Tracy Gilmore

Hi Delia,
Great introduction to CSS Custom Properties. I was a little surprised to see there was no reference to their ability to take a fallback value.

button {
  background-color: var(--button-bg-colour, blue);
}
Enter fullscreen mode Exit fullscreen mode

In the example above, if the custom property --button-bg-colour is not set, the value 'blue' will be used instead.

Maybe in a part two, you might also want to cover the @property feature.

@property --button-bg-colour {
  syntax: "<color>";
  inherits: false;
  initial-value: #c0ffee;
}
Enter fullscreen mode Exit fullscreen mode

My very best regards.

Reference: MDN

Collapse
 
taufik_nurrohman profile image
Taufik Nurrohman

Nesting the alternatives:

asdf {
  asdf: var(--asdf-a, var(--asdf-b, default));
}
Enter fullscreen mode Exit fullscreen mode
Collapse
 
wizard798 profile image
Wizard

Interesting, I'll start using it, Thanks for guide