Основные концепции
Использование Tailwind CSS для стилизации Вашего сайта в темном режиме.
Теперь, когда темный режим является первоклассной особенностью многих операционных систем, становится все более распространенным создание темной версии Вашего веб-сайта в соответствии с дизайном по умолчанию.
Чтобы максимально упростить эту задачу, Tailwind включает в себя dark
вариант, который позволяет вам стилизовать ваш сайт по-разному, когда включен темный режим:
Светлый режим
Ручку Zero Gravity можно использовать для письма в любой ориентации, в том числе в перевернутой. Это работает даже в открытом космосе.
Темный режим
Ручку Zero Gravity можно использовать для письма в любой ориентации, в том числе в перевернутой. Это работает даже в открытом космосе.
<div class="bg-white dark:bg-slate-800 rounded-lg px-6 py-8 ring-1 ring-slate-900/5 shadow-xl">
<div>
<span class="inline-flex items-center justify-center p-2 bg-indigo-500 rounded-md shadow-lg">
<svg class="h-6 w-6 text-white" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor" aria-hidden="true"><!-- ... --></svg>
</span>
</div>
<h3 class="text-slate-900 dark:text-white mt-5 text-base font-medium tracking-tight">Пишет вверх ногами</h3>
<p class="text-slate-500 dark:text-slate-400 mt-2 text-sm">
Перо в невесомости можно использовать для письма в любой ориентации, включая перевернутую. Он работает даже в космосе.
</p>
</div>
По умолчанию используется медиа-функция CSS prefers-color-scheme
, но вы также можете создавать сайты, поддерживающие переключение темного режима вручную, используя стратегию ‘selector’.
Если вы хотите поддерживать переключение темного режима вручную, а не полагаться на настройки операционной системы, используйте стратегию selector
вместо стратегии media
:
Стратегия selector
заменила стратегию class
в Tailwind CSS v3.4.1.
/** @type {import('tailwindcss').Config} */
module.exports = {
darkMode: 'selector',
// ...
}
Теперь вместо классов dark:{class}
, применяемых на основе prefers-color-scheme
, они будут применяться всякий раз, когда класс dark
присутствует ранее в дереве HTML.
<!-- Темный режим не включен -->
<html>
<body>
<!-- Будет белым -->
<div class="bg-white dark:bg-black">
<!-- ... -->
</div>
</body>
</html>
<!-- Темный режим включен -->
<html class="dark">
<body>
<!-- Будет черным -->
<div class="bg-white dark:bg-black">
<!-- ... -->
</div>
</body>
</html>
Если вы установили префикс в конфигурации Tailwind, обязательно добавьте его в класс dark
. Например, если у вас есть префикс tw-
, вам нужно будет использовать класс tw-dark
, чтобы включить темный режим.
Как добавить класс dark
к элементу html
, зависит от вас, но общий подход заключается в использовании небольшого количества JavaScript, который считывает откуда-то предпочтения (например, localStorage
) и соответствующим образом обновляет DOM.
Некоторые платформы (например, NativeScript) имеют собственный подход к включению темного режима и добавляют другое имя класса, когда темный режим активен.
Вы можете настроить селектор темного режима, установив darkMode
в массив с вашим пользовательским селектором в качестве второго элемента:
/** @type {import('tailwindcss').Config} */
module.exports = {
darkMode: ['selector', '[data-mode="dark"]'],
// ...
}
Tailwind автоматически обернет ваш пользовательский селектор темного режима псевдоклассом :where()
, чтобы обеспечить такую же специфику, как и при использовании стратегии media
:
.dark\:underline:where([data-mode="dark"], [data-mode="dark"] *){
text-decoration-line: underline
}
Стратегия selector
может использоваться для поддержки как системных предпочтений пользователя, так и режима, выбранного вручную, с использованием API window.matchMedia()
.
Вот простой пример того, как вы можете поддерживать светлый режим, темный режим, а также соблюдать настройки операционной системы:
// При загрузке страницы или при смене темы лучше всего добавить строку в `head`, чтобы избежать FOUC
if (localStorage.theme === 'dark' || (!('theme' in localStorage) && window.matchMedia('(prefers-color-scheme: dark)').matches)) {
document.documentElement.classList.add('dark')
} else {
document.documentElement.classList.remove('dark')
}
// Всякий раз, когда пользователь явно выбирает светлый режим
localStorage.theme = 'light'
// Всякий раз, когда пользователь явно выбирает темный режим
localStorage.theme = 'dark'
// Всякий раз, когда пользователь явно выбирает соблюдение предпочтений ОС
localStorage.removeItem('theme')
Опять же, вы можете управлять этим как хотите, даже сохраняя предпочтения на стороне сервера в базе данных и отображая класс на сервере — это полностью зависит от вас.
Если вы хотите заменить встроенный темный вариант Tailwind на свой собственный вариант, вы можете сделать это, используя стратегию темного режима variant
:
/** @type {import('tailwindcss').Config} */
module.exports = {
darkMode: ['variant', '&:not(.light *)'],
// ...
}
При использовании этой стратегии Tailwind не будет каким-либо образом изменять предоставленный селектор, поэтому помните о его специфике и рассмотрите возможность использования псевдокласса :where()
, чтобы гарантировать, что он имеет ту же специфичность, что и другие утилиты.
Если у вас есть несколько сценариев, в которых следует включить темный режим, вы можете указать их все, предоставив массив:
/** @type {import('tailwindcss').Config} */
module.exports = {
darkMode: ['variant', [
'@media (prefers-color-scheme: dark) { &:not(.light *) }',
'&:is(.dark *)',
]],
// ...
}