Прежде чем начать тему, я хочу рассказать вам, почему темная тема так важна на вашем сайте. Темный режим стал популярным в последние 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.
Кривая обучения важна для роста. Итак, приступайте к работе, чтобы получить несколько интересных вещей, которые помогут улучшить эту кривую обучения.