Day 41: custom properties and url()s

Let’s say you want to swap the background image of an element based on a certain condition, like whether it’s pressed, using custom properties.
button { –background-image: “/not-pressed.svg”; background: url(var(–background-image));}butto…

Let’s say you want to swap the background image of an element based on a certain condition, like whether it’s pressed, using custom properties.

button {
--background-image: "/not-pressed.svg";
background: url(var(--background-image));
}

button[aria-pressed="true"] {
--background-image: "/pressed.svg";
}

This looks fine, but it doesn’t work because var(--background-image) contains invalid characters. The reason the argument is invalid is that url() works both with quotes url("image.svg") or url('image.svg') and without quotes url(image.svg). By passing a value without quotes you’re not passing a string to a CSS function, but you’re creating an url-token and this token expects a certain format that requires characters like ( to be escaped.
That’s a very abbreviated explanation. For details, please read “Why custom properties don’t work with the url() CSS function” by the amazing Stefan Judis.

To work around that issue, you have to move the url() function into the value of the custom property.

button {
--background-image: url("/not-pressed.svg");
background: var(--background-image);
}

button[aria-pressed="true"] {
--background-image: url("/pressed.svg");
}

Print Share Comment Cite Upload Translate
APA
Manuel Matuzović | Sciencx (2024-05-12T19:05:11+00:00) » Day 41: custom properties and url()s. Retrieved from https://www.scien.cx/2022/11/21/day-41-custom-properties-and-urls/.
MLA
" » Day 41: custom properties and url()s." Manuel Matuzović | Sciencx - Monday November 21, 2022, https://www.scien.cx/2022/11/21/day-41-custom-properties-and-urls/
HARVARD
Manuel Matuzović | Sciencx Monday November 21, 2022 » Day 41: custom properties and url()s., viewed 2024-05-12T19:05:11+00:00,<https://www.scien.cx/2022/11/21/day-41-custom-properties-and-urls/>
VANCOUVER
Manuel Matuzović | Sciencx - » Day 41: custom properties and url()s. [Internet]. [Accessed 2024-05-12T19:05:11+00:00]. Available from: https://www.scien.cx/2022/11/21/day-41-custom-properties-and-urls/
CHICAGO
" » Day 41: custom properties and url()s." Manuel Matuzović | Sciencx - Accessed 2024-05-12T19:05:11+00:00. https://www.scien.cx/2022/11/21/day-41-custom-properties-and-urls/
IEEE
" » Day 41: custom properties and url()s." Manuel Matuzović | Sciencx [Online]. Available: https://www.scien.cx/2022/11/21/day-41-custom-properties-and-urls/. [Accessed: 2024-05-12T19:05:11+00:00]
rf:citation
» Day 41: custom properties and url()s | Manuel Matuzović | Sciencx | https://www.scien.cx/2022/11/21/day-41-custom-properties-and-urls/ | 2024-05-12T19:05:11+00:00
https://github.com/addpipe/simple-recorderjs-demo