本文将解释如何为网站启用/禁用明暗模式。此外,你还将学习如何自定义整个网站的配色方案。
目录
启用/禁用明暗模式
AstroPaper 主题默认包含明暗模式。换句话说,会有两种配色方案——一种用于明亮模式,另一种用于暗黑模式。这种默认行为可以在 SITE
配置对象中禁用。
export const SITE = {
website: "https://astro-paper.pages.dev/", // replace this with your deployed domain
author: "Sat Naing",
profile: "https://satnaing.dev/",
desc: "A minimal, responsive and SEO-friendly Astro blog theme.",
title: "AstroPaper",
ogImage: "astropaper-og.jpg",
lightAndDarkMode: true,
postPerIndex: 4,
postPerPage: 4,
scheduledPostMargin: 15 * 60 * 1000, // 15 minutes
showArchives: true,
showBackButton: true, // show back button in post detail
editPost: {
enabled: true,
text: "Suggest Changes",
url: "https://github.com/satnaing/astro-paper/edit/main/",
},
dynamicOgImage: true,
lang: "en", // html lang code. Set this empty and default will be "en"
timezone: "Asia/Bangkok", // Default global timezone (IANA format) https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
} as const;
src/config.ts
要禁用明暗模式
,请将 SITE.lightAndDarkMode
设置为 false
。
选择主要配色方案
默认情况下,如果我们禁用 SITE.lightAndDarkMode
,我们只会获得系统的首选配色方案。
因此,要选择主要配色方案而不是首选配色方案,我们必须在 toggle-theme.js
中的 primaryColorScheme
变量中设置配色方案。
const primaryColorScheme = ""; // "light" | "dark"
// Get theme data from local storage
const currentTheme = localStorage.getItem("theme");
// ...
public/toggle-theme.js
primaryColorScheme 变量可以包含两个值:"light"
、"dark"
。如果你不想指定主要配色方案,可以留空字符串(默认)。
""
- 系统的首选配色方案。(默认)"light"
- 使用明亮模式作为主要配色方案。"dark"
- 使用暗黑模式作为主要配色方案。
为什么 primaryColorScheme 不在 config.ts 中?
为了避免页面重新加载时的颜色闪烁,我们必须在页面加载时尽早放置切换开关的 JavaScript 代码。这解决了闪烁问题,但作为权衡,我们不能再使用 ESM 导入。自定义配色方案
AstroPaper 主题的明暗配色方案都可以在 global.css
文件中自定义。
@import "tailwindcss";
@import "./typography.css";
@custom-variant dark (&:where([data-theme=dark], [data-theme=dark] *));
:root,
html[data-theme="light"] {
--background: #fdfdfd;
--foreground: #282728;
--accent: #006cac;
--muted: #e6e6e6;
--border: #ece9e9;
}
html[data-theme="dark"] {
--background: #212737;
--foreground: #eaedf3;
--accent: #ff6b01;
--muted: #343f60bf;
--border: #ab4b08;
}
/* ... */
src/styles/global.css
在 AstroPaper 主题中,:root
和 html[data-theme="light"]
选择器定义明亮配色方案,而 html[data-theme="dark"]
定义暗黑配色方案。
要自定义你自己的配色方案,请在 :root, html[data-theme="light"]
中指定明亮颜色,在 html[data-theme="dark"]
中指定暗黑颜色。
以下是颜色属性的详细说明。
颜色属性 | 定义和用法 |
---|---|
--background | 网站的主要颜色。通常是主背景。 |
--foreground | 网站的次要颜色。通常是文本颜色。 |
--accent | 网站的强调色。链接颜色、悬停颜色等。 |
--muted | 卡片和滚动条背景颜色,用于悬停状态等。 |
--border | 边框颜色。特别用于水平线(hr)。 |
以下是更改明亮配色方案的示例。
/* ... */
:root,
html[data-theme="light"] {
--background: #f6eee1;
--foreground: #012c56;
--accent: #e14a39;
--muted: #efd8b0;
--border: #dc9891;
}
/* ... */
src/styles/global.css
查看一些 AstroPaper 已经为你精心制作的预定义配色方案。