Измените тему с помощью переменной CSS и tinyColor.js

В этой статье мы поговорим о том, как изменить значение переменной внутри корневого элемента с помощью JavaScript.

Исходный код:



Мы создали index.html в предыдущем проекте.

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<link rel="stylesheet" href="styles.css">
</head>
<body>
<div class="container">
<h2>CSS variables</h2>
<p>Lorem ipsum dolor sit amet consectetur, adipisicing elit. Assumenda magnam fugit, tempora mollitia harum quas, magni nam repellendus veniam at atque dolore similique rem soluta tenetur inventore, animi non? Eveniet.</p>
<button>Submit</button>
<h2>CSS variables</h2>
<p class="lorem">Lorem ipsum dolor sit amet consectetur, adipisicing elit. Assumenda magnam fugit, tempora mollitia harum quas, magni nam repellendus veniam at atque dolore similique rem soluta tenetur inventore, animi non? Eveniet.</p>
<button>Submit</button>
<div class="colors">
<div style="background-color: green;"></div>
<div style="background-color: blueviolet;"></div>
</div>
</div>
<script src="colors"></script>
</body>
</html>

Мы создали цвет темы светло-голубым, а основной цвет — синим.

Установите цвет текста контейнера в качестве цвета темы, цвет фона — белый.

Использование цвета темы в качестве цвета кнопки

:root{
--theme-color:lightblue;
--primary-color:blue;
}
body{
background-color: var(--theme-color);
}
.container{
color:var(--theme-color);
background-color: white;
padding: 30px;
}
.lorem{
color:var(--primary-color);
}
button{
background-color: var(--primary-color) ;
color:white;
border: none;
padding: 10px;
}
.colors div{
margin-top: 10px;
display: inline-block;
height: 20px;
width: 20px;
cursor: pointer;
}

Мы создаем две кнопки для изменения цвета.

<div class="colors">
<div style="background-color: green;"></div>
<div style="background-color: blueviolet;"></div>
</div>

Использование JavaScript

Мы создаем файл colors.js, а затем ссылаемся на него в html-файле, до конца тела.

Связанный курс:



<div style="background-color: green;"></div>
<div style="background-color: blueviolet;"></div>
</div>
</div>
<script src="tinycolor.js"></script>
</body>

Получаем цвета и корень. Мы используем querySelectorAll для выбора более одного div.

Мы также захватываем корневой элемент, чтобы мы могли изменить значения переменных.

Затем мы добавляем прослушиватель onclick к цвету, чтобы изменить цвет, мы можем использовать setProperty.

Теперь мы используем значение свойства backgroundColor, чтобы переопределить основной цвет.

var colors = document.querySelectorAll('.colors div');
var root = document.querySelector(':root');
console.log(colors);
colors.forEach(color=>{
color.addEventListener('click',e=>{
root.style.setProperty('----primary-color',e.target.style.backgroundColor)
})
})

Чтобы затемнить или осветлить цвет, чтобы сделать его вторичным цветом или другим цветом, мы можем сделать это с помощью TinyColor.



Скачиваем его как tinycolor.js

<div style="background-color: blueviolet;"></div>
</div>
</div>
<script src="tinycolor.js"></script>
<script src="colors.js"></script>
</body>

Назад к цветам.js

Мы можем осветлить цвет как вторичный, сказав

root.style.setProperty('--secondary-color',tinycolor(e.target.style.backgroundColor).lighten().toString());

или затемните цвет как цвет темы, сказав

root.style.setProperty('--theme-color',tinycolor(e.target.style.backgroundColor).darken().toString())

Мы также можем использовать случайный цвет в качестве цвета темы, например

root.style.setProperty('--theme-color',tinycolor.random())

Полный код colors.js

colors.forEach(color=>{
color.addEventListener('click',e=>{
root.style.setProperty('--primary-color',e.target.style.backgroundColor)
root.style.setProperty('--secondary-color',tinycolor(e.target.style.backgroundColor).lighten().toString());
// root.style.setProperty('--theme-color',tinycolor(e.target.style.backgroundColor).darken().toString())
root.style.setProperty('--theme-color',tinycolor.random())
}

Подписывайтесь на нас: YouTube, Medium, Udemy, Linkedin, Twitter.