1. 核心概念
  2. 暗黑模式

核心概念

暗黑模式

使用变体将您的网站样式设为暗黑模式。

概述

现在,暗黑模式已成为许多操作系统的一等功能,因此设计一个与默认设计相配合的暗黑版本的网站变得越来越普遍。

为尽可能简化此操作,Tailwind 包含了一个 dark 变体,可以在启用暗黑模式时为您的网站设置不同的样式:

亮色模式

可倒着书写

零重力笔可以用于任何方向书写, 包括倒着书写。它甚至可以在外太空中使用。

暗黑模式

可倒着书写

零重力笔可以用于任何方向书写, 包括倒着书写。它甚至可以在外太空中使用。

<div class="bg-white dark:bg-gray-800 rounded-lg px-6 py-8 ring shadow-xl ring-gray-900/5">  <div>    <span class="inline-flex items-center justify-center rounded-md bg-indigo-500 p-2 shadow-lg">      <svg class="h-6 w-6 stroke-white" ...>        <!-- ... -->      </svg>    </span>  </div>  <h3 class="text-gray-900 dark:text-white mt-5 text-base font-medium tracking-tight ">可倒着书写</h3>  <p class="text-gray-500 dark:text-gray-400 mt-2 text-sm ">    零重力笔可以用于任何方向书写,包括倒着书写。它甚至可以在外太空中使用。  </p></div>

默认情况下,这使用 prefers-color-scheme CSS 媒体特征,但您也可以构建支持 手动切换暗黑模式 的网站,通过覆盖暗黑变体。

手动切换暗黑模式

如果您希望您的暗黑主题通过 CSS 选择器驱动而不是 prefers-color-scheme 媒体查询,请覆盖 dark 变体以使用您的自定义选择器:

app.css
@import "tailwindcss";@custom-variant dark (&:where(.dark, .dark *));

现在,dark:* 实用程序将根据在 HTML 树中更早存在的 dark 类而应用:

HTML
<html class="dark">  <body>    <div class="bg-white dark:bg-black">      <!-- ... -->    </div>  </body></html>

如何将 dark 类添加到 html 元素取决于您,但一种常见的方法是使用一些 JavaScript,更新 class 属性并将该偏好同步到 localStorage 中。

使用数据属性

要使用数据属性而不是类来激活暗黑模式,只需用属性选择器覆盖 dark 变体即可:

app.css
@import "tailwindcss";@custom-variant dark (&:where([data-theme=dark], [data-theme=dark] *));

现在,无论何时 data-theme 属性被设置为 dark,暗黑模式实用程序将被应用于树的上层:

HTML
<html data-theme="dark">  <body>    <div class="bg-white dark:bg-black">      <!-- ... -->    </div>  </body></html>

支持系统主题

要构建支持亮色模式、暗黑模式和您的系统主题的三种主题切换,使用自定义暗黑模式选择器和 window.matchMedia() API 来检测系统主题,并在需要时更新 html 元素。

以下是一个简单的示例,演示如何支持亮色模式、暗黑模式,并遵循操作系统的偏好设置:

spaghetti.js
// 在页面加载或更改主题时,最好在 `head` 中添加内联样式以避免 FOUCdocument.documentElement.classList.toggle(  "dark",  localStorage.theme === "dark" ||    (!("theme" in localStorage) && window.matchMedia("(prefers-color-scheme: dark)").matches),);// 当用户明确选择亮色模式时localStorage.theme = "light";// 当用户明确选择暗黑模式时localStorage.theme = "dark";// 当用户明确选择尊重操作系统偏好时localStorage.removeItem("theme");

您可以根据需要管理此设置,甚至可以将偏好存储在服务器端数据库中并在服务器上渲染类 — 完全取决于您。