Прежде чем начать тему, я хочу рассказать вам, почему темная тема так важна на вашем сайте. Темный режим стал популярным в последние 3-5 лет, поскольку компании начали внедрять эти режимы, чтобы сделать их полезными для ночных пользователей и людей с яркими экранами. Вы знаете, что темный режим присутствует везде в iOS, Android, Windows и т. Д. Предположим, если кто-то посетит ваш сайт в ночное время, чтобы прочитать статью, более светлые цвета вызовут напряжение у пользователя. Итак, я думаю, что темный режим - важная функция для каждого веб-сайта.
Вот преимущества использования темной темы:
- Улучшенная читаемость текста
- Лучшая контрастность
- Снижение утомляемости глаз
- Меньше мерцания (если есть проблемы)
- Меньше синего света
- Менее подвержен светобоязни
- Можно сэкономить небольшое количество электроэнергии
Вот превью того, как будет выглядеть наш финальный проект, или посмотрите рабочий превью здесь


<html> <head> <title>Dark Mode</title> <link href="https://fonts.googleapis.com/css2?family=Montserrat:wght@500&display=swap" rel="stylesheet"> <link rel="stylesheet" href="./style.css"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> </head> <body> <div class="box"> <h2>Light / Dark Theme <span> <form> <input onclick="toggle(this.form)" id="checkbox" name="checkbox" type="checkbox" /><label for="checkbox">Toggle</label> </form> </span> </h2> <p>Lorem ipsum dolor sit amet consectetur adipisicing elit</p> </div> <script src="./script.js"></script> </body> </html>
Создайте файл с именем style.css и вставьте приведенный ниже код.
/* light theme colors */
html{
--bg: #FCFCFC;
--bg-panel: #EEEEEE;/*box container*/
--color-headings: #00ADB5;/*heading*/
--color-text: #393e46;/*paragraph*/
height:100%;
display:grid;
align-items:center;
justify-content:center;
margin: 0;
padding: 0;
}
/* dark theme colors */
html[data-theme='dark']{
--bg: #232931;
--bg-panel: #393E46;
--color-headings: #00ADB5;
--color-text: #B5B5B5;
}
body{
font-family: 'Montserrat', sans-serif;
background-color: var(--bg);
}
/* box container */
.box{
display:grid;
grid-template-rows: auto auto;
border-radius: 15px;
padding:30px;
width:60vw;
background-color: var(--bg-panel);
letter-spacing: 0.05rem;
}
h2{
font-size: 2.18rem;/*35px*/
margin: 20px 0;
color:var(--color-headings);
}
div h2 span{
float: right;
}
div p{
font-size: 1.25rem;/*20px*/
margin-top: 5px;
margin-bottom: 20px;
color: var(--color-text);
}
form{
margin-top: 0.7rem;
}
/* checkbox toggler */
input[type=checkbox]{
height: 0;
width: 0;
visibility: hidden;
}
label {
cursor: pointer;
text-indent: -9999px;
width: 52px;
height: 27px;
background: grey;
float: right;
border-radius: 100px;
position: relative;
}
label:after {
content: '';
position: absolute;
top: 3px;
left: 3px;
width: 20px;
height: 20px;
background: #fff;
border-radius: 90px;
transition: 0.3s;
}
input:checked + label {
background: var(--color-headings);
}
input:checked + label:after {
left: calc(100% - 5px);
transform: translateX(-100%);
}
label:active:after {
width: 45px;
}
/* transition */
html.transition,
html.transition *,
html.transition *:before,
html.transition *:after {
transition: all 750ms !important;
transition-delay: 0 !important;
}
Создайте файл с именем script.js и вставьте приведенный ниже код.
window.onload=function(){
var theme = localStorage.getItem('data-theme');
if(theme=='light'){
document.documentElement.setAttribute('data-theme', 'light');
}else if(theme==''){
document.documentElement.setAttribute('data-theme', 'light');
}else if(theme=='dark'){
document.documentElement.setAttribute('data-theme' , 'dark');
document.getElementById("checkbox").checked = true;
}
}
function toggle(a){
if(a.checkbox.checked==true){
document.documentElement.classList.add('transition');
document.documentElement.setAttribute('data-theme', 'dark');
localStorage.setItem('data-theme','dark');
}
else if(a.checkbox.checked==false){
document.documentElement.classList.add('transition');
document.documentElement.setAttribute('data-theme', 'light');
localStorage.setItem('data-theme','light');
}
};
Вот объяснение того, как работает приведенный выше код.
<input onclick="toggle(this.form)" id="checkbox" name="checkbox" type="checkbox" /><label for="checkbox">Toggle</label>
когда пользователь нажимает кнопку переключения, запускается эта функция JavaScript.
function toggle(a){
if(a.checkbox.checked==true){
document.documentElement.classList.add('transition');
document.documentElement.setAttribute('data-theme', 'dark');
localStorage.setItem('data-theme','dark');
}
else if(a.checkbox.checked==false){
document.documentElement.classList.add('transition');
document.documentElement.setAttribute('data-theme', 'light');
localStorage.setItem('data-theme','light');
}
};
изначально наш сайт будет работать в облегченном режиме. Если этот флажок установлен, наша функция установит темную тему данных. поскольку для темы данных задано темное значение, наш веб-сайт использует приведенные ниже переменные CSS и соответствующим образом обновляет веб-страницу.
html[data-theme='dark']{
--bg: #232931;
--bg-panel: #393E46;
--color-headings: #00ADB5;
--color-text: #B5B5B5;
}
Если этот флажок не отмечен, наша функция установит световую тему данных. поскольку тема данных установлена на свет, наш веб-сайт использует указанные ниже переменные CSS.
html{
--bg: #FCFCFC;
--bg-panel: #EEEEEE;/*box container*/
--color-headings: #00ADB5;/*heading*/
--color-text: #393e46;/*paragraph*/
}
Проверьте понятие переменных CSS здесь
document.documentElement.classList.add('transition');
Приведенная выше строка кода помогает добавить индивидуальности нашему веб-сайту с помощью приведенного ниже кода перехода. Вы можете использовать свои собственные свойства перехода.
html.transition,
html.transition *,
html.transition *:before,
html.transition *:after {
transition: all 750ms !important;
transition-delay: 0 !important;
}
Сохраните предпочтения пользователя для будущих посещений
localStorage.setItem('data-theme','dark');
localStorage.setItem('data-theme','light');
Основная идея использования локального хранилища - сохранить предпочтения пользователя в браузере (используя локальное хранилище).
Проверьте локальное хранилище здесь
при загрузке страницы мы проверяем, была ли выбрана тема ранее, и соответствующим образом обновляем интерфейс веб-сайта. Для этого мы используем приведенный ниже код.
window.onload=function(){
var theme = localStorage.getItem('data-theme');
if(theme=='light'){
document.documentElement.setAttribute('data-theme', 'light');
}else if(theme==''){
document.documentElement.setAttribute('data-theme', 'light');
}else if(theme=='dark'){
document.documentElement.setAttribute('data-theme' , 'dark');
document.getElementById("checkbox").checked = true;
}
}
Если вы хотите использовать любую другую цветовую палитру, вам следует рассмотреть следующие ресурсы.
https://colorhunt.co/palette/183903 https://colorhunt.co/palette/117601 https://colorhunt.co/palette/2763
Обязательно проверьте исходные файлы на Github.
Кривая обучения важна для роста. Итак, приступайте к работе, чтобы получить несколько интересных вещей, которые помогут улучшить эту кривую обучения.