This content originally appeared on DEV Community and was authored by Enes Kılıç
In this article, I will talk about how to make theming with CSS variables. With this example, we will see again the importance of using variables.
Step 1: Define your variables.
/* Define your variables to the root. */
:root {
--black: #181818;
--white: #f5f7f7;
--fade: 150ms;
}
/*
The variables of the tag with the data-theme="light" attribute.
We will then apply this property to the HTML tag with javascript,
but you can define it manually.
*/
[data-theme="light"]{
--color-text: var(--black);
--color-background: var(--white);
}
/* Change variables for dark theme. */
[data-theme="dark"]{
--color-text: var(--white);
--color-background: var(--black);
}
/* And apply styles to document root element. */
html {
color: var(--color-text);
background-color: var(--color-background);
/* for smooth color transitions. */
transition: var(--fade) color, var(--fade) background-color;
}
Step 2: Add functionality with javascript.
// Call theme value from browsers local storage.
var theme = localStorage.getItem("theme");
// Root element of the document.
const _root = document.documentElement;
// Check if local storage has no theme value, define the initial value.
!theme && localStorage.setItem("theme", "light");
// Update theme value.
theme = localStorage.getItem("theme");
// Apply theme value to document root element.
_root.setAttribute("data-theme", theme);
// Function for change theme.
// You can define this function to the a button or call this any way.
function changeTheme() {
theme === "light"
? localStorage.setItem("theme", "dark")
: localStorage.setItem("theme", "light");
// Update theme value
theme = localStorage.getItem("theme");
// Apply theme to document root element
_root.setAttribute("data-theme", theme);
}
Result
This content originally appeared on DEV Community and was authored by Enes Kılıç
Enes Kılıç | Sciencx (2021-08-05T00:30:56+00:00) Theming with CSS variables.. Retrieved from https://www.scien.cx/2021/08/05/theming-with-css-variables/
Please log in to upload a file.
There are no updates yet.
Click the Upload button above to add an update.