Как стать автором
Обновить

CSS переменные и цветовая тема для сайта в несколько строк

Время на прочтение1 мин
Количество просмотров19K

Один из способов использовать CSS переменные уже сегодня


Создадим сайт который динамически поддерживает светлую, тёмную и цветовые темы.


Интерактивное демо



Создаём базовый цвет который будет меняться. Привязываем его к data-theme на html.


в примерах кода используется & из less/scss синтаксиса


html[data-theme='green'] {
    --theme-color: 110;
}

Теперь нам нужны сами цвета. А точнее их яркость и насыщенность. Для этого будем использовать схему hsl. Помещаем все переменные в :root.


:root {
    --color: ~'hsl(var(--theme-color), 15%, 44%)';
    --background-color: ~'hsl(var(--theme-color), 30%, 10%)';
}

Ну вот. Дело за малым. Хватаем нужный элемент и применяем к нему нашу переменную.


.class-name {
    color: var(--color);
    background-color: var(--background-color);
}

Теперь будем менять контрастность. Заменяем :root на html[с атрибутом].


// :root = html
html {
    &[data-theme-style='normal'] { }
    &[data-theme-style='dark'] { }
}

Теперь для каждой темы берём свои s,l значения.


html {
    &[data-theme-style='normal'] {
        --color: ~'hsl(var(--theme-color), 15%, 44%)';
        --background-color: ~'hsl(var(--theme-color), 30%, 10%)';
    }
    &[data-theme-style='dark'] {
        --color: ~'hsl(var(--theme-color), 70%, 31%)';
        --background-color: ~'hsl(var(--theme-color), 3%, 3%)';
    }
}



Links:
Интерактивное демо
За идею спасибо Marcin Wichary

Теги:
Хабы:
Если эта публикация вас вдохновила и вы хотите поддержать автора — не стесняйтесь нажать на кнопку
Всего голосов 20: ↑19 и ↓1+18
Комментарии11

Публикации

Истории

Ближайшие события

27 августа – 7 октября
Премия digital-кейсов «Проксима»
МоскваОнлайн
3 – 18 октября
Kokoc Hackathon 2024
Онлайн
10 – 11 октября
HR IT & Team Lead конференция «Битва за IT-таланты»
МоскваОнлайн
25 октября
Конференция по росту продуктов EGC’24
МоскваОнлайн
7 – 8 ноября
Конференция byteoilgas_conf 2024
МоскваОнлайн
7 – 8 ноября
Конференция «Матемаркетинг»
МоскваОнлайн