Want to Write a Hover Effect With Inline CSS? Use CSS Variables.
The other day I was working on a blog where each post has a custom color attached to it for a little dose of personality. The author gets to pick that color in the CMS when they’re writing the post. Just a super-light layer of art direction.
To make that color show up on the front end, I wrote the value right into an inline style
attribute on the
{% for post in posts %}
<article style="background: {{post.custom_color}}">
<h1>{{post.title}}</h1>
{{content}}
</article>
{% endfor %}
No problem there. But then I thought, “Wouldn’t it be nice if the custom color only showed up when when hovering over the article card?” But you can’t write hover styles in a style
attribute, right?
My first idea was to leave the style
attribute in place and write CSS like this:
article {
background: lightgray !important;
}
article:hover {
/* Doesn't work! */
background: inherit;
}
I can override the inline style by using !important
, but there’s no way to undo that on hover.
Eventually, I decided I could use a style
attribute to get the color value from the CMS, but instead of applying it right away, store it as a CSS variable:
<article style="--custom_color: {{post.custom_color}}">
<h1>{{post.title}}</h1>
{{content}}
</article>
Then, that variable can be used to define the hover style in regular CSS:
article {
background: lightgray;
}
article:hover {
/* Works! */
background: var(--custom_color);
}
Now that the color value is saved as a CSS variable, there are all kinds of other things we can do with it. For instance, we could make all links in the post appear in the custom color:
article a {
color: var(--custom_color);
}
And because the variable is scoped to the
Browser support for CSS variables is pretty deep, with the exception of Internet Explorer. Anyway, just a neat little trick that might come in handy if you find yourself working with light art direction in a CMS, as well as a reminder of just how awesome CSS variables can be.
The post Want to Write a Hover Effect With Inline CSS? Use CSS Variables. appeared first on CSS-Tricks.
You can support CSS-Tricks by being an MVP Supporter.