Jake Trent

CSSNext Variable Fallback

How to set fallbacks for CSSNext variables for which values aren’t present.

CSSNext Variables

CSSNext is a library that allows you to use tomorrow’s CSS syntax and features today – much as Babel does for JavaScript. One such feature is CSS variables.

The variables are defined like:

:root {
  --superHot: red;
}

And then to use the variable:

.vrOfTheFuture {
  color: var(--superHot);
}

And it’s awesome – variables in CSS (of the future).

Lack of Fallback

But in the case that the variable isn’t present, you have a problem. Color doesn’t get set at all in the above example of .vrOfTheFuture. The variable value might not be present for any number of reasons: you forgot to import it or merely misspelled it.

Your CSS compiler will likely give you an error like:

(Emitted value instead of an instance of Error) postcss-custom-properties: 
/Users/.../my.css:24:3: variable '--superHot' is undefined and used without a fallback

As you can see in the error report, CSSNext gets its variable support from a subdependency library, postcss-custom-properties. In fact, CSSNext is simply a collection of postcss libraries whose combined features are present or expected in the CSS spec.

Setting a Fallback

A fallback is the value that will be used in the case that the variable is unavailable. To set it, pass it as the second value to var(), like this:

.vrOfTheFuture {
  color: var(--superHot, fuchsia);
}

Fallback present. Superhot might look a bit odd when the fallback is used, but at least we have a fallback color.

Do you ever end up using fallbacks? What are your favorite uses?