<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>梦石's Blog</title><link>https://mengshitia.github.io/zh-hans/</link><description/><generator>Hugo</generator><language>zh-Hans</language><lastBuildDate>Fri, 03 Apr 2026 22:35:12 +0800</lastBuildDate><atom:link href="https://mengshitia.github.io/zh-hans/index.xml" rel="self" type="application/rss+xml"/><item><title>添加了 Giscus</title><link>https://mengshitia.github.io/zh-hans/posts/add-giscus/</link><pubDate>Fri, 03 Apr 2026 22:35:12 +0800</pubDate><guid>https://mengshitia.github.io/zh-hans/posts/add-giscus/</guid><description>&lt;p&gt;添加了 &lt;a href="https://giscus.app"&gt;Giscus&lt;/a&gt;，类似评论功能。&lt;/p&gt;
&lt;p&gt;使用 Giscus 需要一个 GitHub 账号。
怎么用呢？点文章标题，进入文章页面，翻到页面底端时就会加载 Giscus 了。
Giscus 使用的是 GitHub 的 Discussions 功能，所以可能需要一些上网技巧才能加载出来。&lt;/p&gt;</description></item><item><title>琢磨响应式布局设计</title><link>https://mengshitia.github.io/zh-hans/posts/thoughts-on-responsive-layout-design/</link><pubDate>Thu, 02 Apr 2026 18:28:40 +0800</pubDate><guid>https://mengshitia.github.io/zh-hans/posts/thoughts-on-responsive-layout-design/</guid><description>&lt;blockquote class="block-warning"&gt;&lt;p&gt;这是一篇记录，不是专业或全面的响应式设计参考文章。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="一些注意事项"&gt;一些注意事项&lt;/h2&gt;
&lt;p&gt;网站元标签：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-html" data-lang="html"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;meta&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;viewport&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;content&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;width=device-width;initial-scale=1&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;盒模型调整：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-css" data-lang="css"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;2&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;box-sizing&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;border-box&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;3&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;相关资料参见：&lt;a href="https://developer.mozilla.org/zh-CN/docs/Web/CSS/Reference/Properties/box-sizing"&gt;CSS 属性：box-sizing&lt;/a&gt;。&lt;/p&gt;
&lt;h2 id="布局规划"&gt;布局规划&lt;/h2&gt;
&lt;p&gt;这里的布局规划受可视宽度影响，与设备朝向无关。&lt;/p&gt;
&lt;h3 id="完整布局"&gt;完整布局&lt;/h3&gt;
&lt;p&gt;此前的布局是：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;页头
&lt;ul&gt;
&lt;li&gt;网站标题&lt;/li&gt;
&lt;li&gt;多语言&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;内容部分
&lt;ul&gt;
&lt;li&gt;正文（显示文章或其他的页面内容）&lt;/li&gt;
&lt;li&gt;侧栏
&lt;ul&gt;
&lt;li&gt;头像&lt;/li&gt;
&lt;li&gt;菜单（或者说其他页面的访问入口）&lt;/li&gt;
&lt;li&gt;RSS&lt;/li&gt;
&lt;li&gt;深色浅色控制&lt;/li&gt;
&lt;li&gt;分类列表&lt;/li&gt;
&lt;li&gt;标签列表&lt;/li&gt;
&lt;li&gt;文章目录（仅文章内显示）&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;页脚
&lt;ul&gt;
&lt;li&gt;版权和许可信息&lt;/li&gt;
&lt;li&gt;搭建工具、框架的信息&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;把这样的布局作为完整布局，再进行一些调整：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;正文：最大 960px&lt;/li&gt;
&lt;li&gt;侧栏：固定在 240px&lt;/li&gt;
&lt;li&gt;正文与侧栏的间距：20px&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;此时的宽度是 1220px = (960+240+20)px。&lt;/p&gt;
&lt;p&gt;但我希望正文可以居中，侧栏靠右，这样页脚的内容可以居中显示。
由于正文的居中，左侧也需要留出和右侧一样的空间，
这样一来内容部分的宽度就不是 1220px，而是：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;左侧由于对称需要预留 260px = (240 + 20)px&lt;/li&gt;
&lt;li&gt;正文 960px&lt;/li&gt;
&lt;li&gt;右侧侧栏 240px&lt;/li&gt;
&lt;li&gt;正文和右侧侧栏间距 20px&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;总宽度达到 1480px = (960 + 2*260)px。&lt;/p&gt;
&lt;p&gt;目前桌面环境上的屏幕宽度大多是 1920px，部分 2560px 甚至是 3840px，少量 1600px 依然在用。
1480px 的宽度“&lt;strong&gt;理论上&lt;/strong&gt;”是通用的。&lt;/p&gt;
&lt;h3 id="宽度不够"&gt;宽度不够&lt;/h3&gt;
&lt;p&gt;理论上够用，等于不够。
举个例子，放大 1.5 倍的 1920px，实际上宽度仅有 1280px。
更别提移动端那些尺寸十分随性的屏幕了。&lt;/p&gt;
&lt;p&gt;简单的解决方法就是把侧栏隐藏。
隐藏侧栏不难，但侧栏上的部分功能和入口还是需要访问的，该怎么做？&lt;/p&gt;
&lt;p&gt;一种比较常见的方案是在页头增加一个按钮，控制侧栏的显示和隐藏。
顺便为了统一观感，给多语言也做一个按钮和下拉框用于选择，显得干净整洁。&lt;/p&gt;
&lt;p&gt;但做这样的功能必不可少的就是下面这个了：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“随便点一下其他地方就能把侧栏、下拉框之类的都关掉”的&lt;a href="https://developer.mozilla.org/zh-CN/docs/Learn_web_development/Core/Scripting/Event_bubbling"&gt;原理和实现&lt;/a&gt;。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;顺带一提，实际写出来的代码可是一大堆监听器，前不久我还折腾过，
因此我直接否决了这个方案，琢磨出仅靠样式和良好的布局组织就能实现的方法：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;头像可以直接隐藏或者缩小之后放在网站标题那一行的最右边&lt;/li&gt;
&lt;li&gt;RSS 与深色浅色控制按钮放在原本多语言的地方，在头像的左侧&lt;/li&gt;
&lt;li&gt;另起一行横向放置多语言&lt;/li&gt;
&lt;li&gt;分类、标签列表和目录不要了&lt;/li&gt;
&lt;li&gt;菜单放在多语言一行，靠右&lt;/li&gt;
&lt;li&gt;当宽度不足 960px 时，内容宽度跟随可视宽度或屏幕宽度。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;当这篇文章发布的时候，上面所说的应该都已经做好了。&lt;/em&gt;&lt;/p&gt;</description></item><item><title>自定义 Firefox 的缩放等级</title><link>https://mengshitia.github.io/zh-hans/posts/customize-zoom-level-of-firefox/</link><pubDate>Wed, 01 Apr 2026 18:48:37 +0800</pubDate><guid>https://mengshitia.github.io/zh-hans/posts/customize-zoom-level-of-firefox/</guid><description>&lt;h2 id="设置方法"&gt;设置方法&lt;/h2&gt;
&lt;p&gt;在火狐浏览器的地址栏输入 &lt;code&gt;about:config&lt;/code&gt; 进入高级首选项，点 “接受风险并继续” 按钮。&lt;/p&gt;
&lt;p&gt;在搜索栏输入 &lt;code&gt;toolkit.zoomManager.zoomValues&lt;/code&gt;，这影响设置选项中的可选缩放列表，以及鼠标滚轮能滚动到的缩放等级。
此项的值应该类似于 &lt;code&gt;.3,.5,.67,.8,.9,1,1.1,1.2,1.33,1.5,1.7,2,2.4,3,4,5&lt;/code&gt;，
其实就是一个逗号分隔的列表，小数数值省略了整数部分的 &lt;code&gt;0&lt;/code&gt;，设置两位小数也是可行的。&lt;/p&gt;
&lt;p&gt;此外还有两项：&lt;code&gt;zoom.maxPercent&lt;/code&gt; 和 &lt;code&gt;zoom.minPercent&lt;/code&gt;，这两项控制鼠标滚轮能达到的最大和最小缩放等级，
这里设置的数值对应百分比数值，例如 &lt;code&gt;50&lt;/code&gt; 就是 &lt;code&gt;50%&lt;/code&gt; 缩放，需要对照上面一项的值设置一个正确的值。&lt;/p&gt;
&lt;h2 id="发现过程"&gt;发现过程&lt;/h2&gt;
&lt;p&gt;昨天（3/31）的晚些时候更新了一下系统，火狐也从 148 更新到了 149。&lt;/p&gt;
&lt;p&gt;浏览完更新日志，玩了玩新功能（应用内分屏），就没再关注。&lt;/p&gt;
&lt;p&gt;直到今天和朋友讨论剪贴板问题的时候，我觉得 &lt;a href="https://bugs.kde.org/"&gt;KDE Bugtracking System&lt;/a&gt; 页面内容太小，就习惯性地滚了一下滚轮放大页面。&lt;/p&gt;
&lt;p&gt;这一滚我就发觉不对劲，怎么页面缩放从 100% 到 110%、120%，然后是 133%、150%、170%、200%了？
我印象里火狐的缩放在 100% 到 200% 段一直都是 10% 步进啊。&lt;/p&gt;
&lt;p&gt;我一惊，连忙跑到设置页（&lt;code&gt;about:preferences&lt;/code&gt;）去搜索了一下“缩放”，点开下拉列表一看，原来这里也变了。&lt;/p&gt;
&lt;p&gt;抱着试试看的心态，我打开了高级首选项页（&lt;code&gt;about:cofig&lt;/code&gt;），搜索“zoom”。
翻找到页面最底部的时候，我看到了几个熟悉的东西：&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;&lt;/th&gt;
 &lt;th&gt;&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;toolkit.zoomManager.zoomValues&lt;/td&gt;
 &lt;td&gt;.3,.5,.67,.8,.9,1,1.1,1.2,1.33,1.5,1.7,2,2.4,3,4,5&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;zoom.maxPercent&lt;/td&gt;
 &lt;td&gt;500&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;zoom.minPercent&lt;/td&gt;
 &lt;td&gt;30&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;哈，原来在这里！&lt;/p&gt;
&lt;p&gt;&lt;del&gt;由于我手头没有 148 版本的 Firefox 用于对比，所以我不确定这是火狐的愚人节笑话还是真的改了。&lt;/del&gt;&lt;/p&gt;
&lt;p&gt;4/2 更新：可以肯定是火狐更改了默认的缩放级别。&lt;/p&gt;</description></item><item><title>一些建站过程中的经历</title><link>https://mengshitia.github.io/zh-hans/posts/things-about-building-this-site/</link><pubDate>Sat, 14 Feb 2026 09:02:07 +0800</pubDate><guid>https://mengshitia.github.io/zh-hans/posts/things-about-building-this-site/</guid><description>&lt;h2 id="我对-hugo-主题的理解"&gt;我对 Hugo 主题的理解&lt;/h2&gt;
&lt;p&gt;所以在我有了自制主题的想法之后，就遇到了三大终极问题中的一个：“我要做什么？”。&lt;/p&gt;
&lt;p&gt;我在文档里能找到的唯一一句话就是：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;A theme is a module that delivers a complete set of components defining a site’s layout, presentation, and behavior. While every theme is a module, not every module is a theme. &amp;ndash; &lt;a href="https://gohugo.io/quick-reference/glossary/#theme"&gt;Hugo Docs - Glossary&lt;/a&gt;。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;大意是：“主题是一个模块，提供了一系列的的组件，这些组件定义了一个网站的布局、外观以及行为（或者说功能）。所有的主题都是 Hugo 模块，但反过来不一定。”&lt;/p&gt;
&lt;p&gt;在对比了主题和站点的文件结构之后，我发现主题和站点本质上就是同一个东西。&lt;/p&gt;
&lt;p&gt;其实按照文档创建一个站点之后不添加主题，直接构建，Hugo 会输出一些警告信息，像这样：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;WARN found no layout file for &amp;#34;html&amp;#34; for kind &amp;#34;home&amp;#34;: You should create a template file which matches Hugo Layouts Lookup Rules for this combination.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;2&lt;/span&gt;&lt;span class="cl"&gt;WARN found no layout file for &amp;#34;html&amp;#34; for kind &amp;#34;taxonomy&amp;#34;: You should create a template file which matches Hugo Layouts Lookup Rules for this combination.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;大意就是缺少一些模板文件。
解决方法也很简单，去 &lt;code&gt;layouts/&lt;/code&gt; 文件夹下创建这些文件就行，空的也无所谓，因为 Hugo 的模板系统只需要找到这些文件并尝试处理，只要没出错就可以运行（空文件也能处理，因为没有内容）。&lt;/p&gt;
&lt;p&gt;创建完这几个文件之后，再去翻阅 &lt;a href="https://gohugo.io/templates/types/"&gt;Hugo 模板类型&lt;/a&gt;的相关文档，就可以理解为什么站点和主题其实是同一个东西：
因为当站点里没有对应的模板文件（和其他资源文件如样式表、脚本）时，Hugo 会去配置好的主题里寻找它的 &lt;code&gt;layouts/&lt;/code&gt; 文件夹，看看里面有没有对应的模板文件，如果找到了，就正常生成网站。
而无论是把主题里的模板全部移动到站点的 &lt;code&gt;layouts/&lt;/code&gt; 文件夹下，或者反过来，把站点的模板全部移动到已配置的主题中的 &lt;code&gt;layouts/&lt;/code&gt; 文件夹下都是可以正常工作的。&lt;/p&gt;
&lt;p&gt;所以，在我刚开始折腾主题的时候，其实根本没有主题（直接在站点内开工了）。
在把模板和功能做得差不多了之后才单独建了一个主题，然后把文件转移过去，再和站点整合。&lt;/p&gt;
&lt;h2 id="深色浅色主题功能的原理"&gt;深色浅色主题功能的原理&lt;/h2&gt;
&lt;p&gt;我决定自制主题的原因中最主要的就是实现深色浅色主题的功能：根据系统设置选择深色浅色，或让用户选择使用深色还是浅色主题。&lt;/p&gt;
&lt;p&gt;一开始我并不会做这个功能，但是不要紧，可以先看看别人怎么做的嘛。
打开 &lt;a href="https://adityatelange.github.io/hugo-PaperMod/"&gt;Paper-Mod 的示例网站&lt;/a&gt;，然后打开开发者工具，在点击深色浅色主题切换按钮的时候观察变化。我观察到了 &lt;a href="https://developer.mozilla.org/zh-CN/docs/Web/HTML/Reference/Global_attributes/data-*"&gt;data-*&lt;/a&gt; 属性：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-html" data-lang="html"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;html&lt;/span&gt; &lt;span class="na"&gt;lang&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;en&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;dir&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;ltr&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;data-theme&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;dark&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;2&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;&amp;lt;!-- 其他网页内容... ---&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;3&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;html&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;和 &lt;a href="https://developer.mozilla.org/zh-CN/docs/Web/CSS/Reference/Properties/color-scheme"&gt;color-scheme&lt;/a&gt; 属性：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-css" data-lang="css"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nd"&gt;root&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;2&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;color-scheme&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;light&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;3&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c"&gt;/* 浅色主题样式... */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;4&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;5&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;6&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nd"&gt;root&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nt"&gt;data-theme&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;dark&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;7&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;color-scheme&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;dark&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;8&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c"&gt;/* 深色主题样式... */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;9&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;切换按钮很明显是有事件监听器的，这样才能完成主题的切换（下面的代码摘取自 &lt;a href="https://adityatelange.github.io/hugo-PaperMod/"&gt;Paper-Mod 的示例网站&lt;/a&gt;）：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-javascript" data-lang="javascript"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getElementById&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;theme-toggle&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;addEventListener&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;click&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 2&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;html&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;querySelector&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;html&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 3&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;html&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;dataset&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;theme&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;dark&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 4&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;html&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;dataset&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;theme&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;light&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 5&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;localStorage&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;setItem&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;pref-theme&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;light&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 6&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 7&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;html&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;dataset&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;theme&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;dark&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 8&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;localStorage&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;setItem&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;pref-theme&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;dark&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 9&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;10&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;})&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;那么主题切换的原理应该就是：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;定义好深色、浅色两套 CSS 样式表；&lt;/li&gt;
&lt;li&gt;利用自定义数据属性 &lt;code&gt;data-*&lt;/code&gt;，这里是 &lt;code&gt;data-theme&lt;/code&gt; 来启用对应的 CSS 样式；&lt;/li&gt;
&lt;li&gt;给切换按钮绑定事件监听器，并使用 &lt;code&gt;localStorage&lt;/code&gt; 来保存用户偏好。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;那么“自动”在哪里呢？&lt;/p&gt;
&lt;p&gt;很可惜这一功能在 Paper-Mod 中并没有，以具体代码来说（下面的代码摘取自 &lt;a href="https://adityatelange.github.io/hugo-PaperMod/"&gt;Paper-Mod 的示例网站&lt;/a&gt;）：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-javascript" data-lang="javascript"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;localStorage&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getItem&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;pref-theme&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;dark&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;2&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;querySelector&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;html&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;dataset&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;theme&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;dark&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;3&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;localStorage&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getItem&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;pref-theme&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;light&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;4&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;querySelector&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;html&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;dataset&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;theme&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;light&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;5&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;matchMedia&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;(prefers-color-scheme: dark)&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;matches&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;6&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;querySelector&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;html&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;dataset&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;theme&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;dark&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;7&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;8&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;querySelector&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;html&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;dataset&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;theme&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;light&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;9&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;存储在 &lt;code&gt;pref-theme&lt;/code&gt; 中的值决定了是使用深色还是浅色。
没有时（例如初次加载网页时），才会使用 &lt;a href="https://developer.mozilla.org/zh-CN/docs/Web/API/Window/matchMedia"&gt;matchMedia()&lt;/a&gt; 来决定网页应该是深色还是浅色主题。&lt;/p&gt;
&lt;p&gt;这里并不存在任何“自动”的选项，一旦用户点过主题切换，&lt;code&gt;localStorage&lt;/code&gt; 中就会存储 &lt;code&gt;pref-theme&lt;/code&gt;，并在下一次打开网页的时候使用。&lt;/p&gt;
&lt;p&gt;这不是我所希望的，应该在让用户把玩主题配色功能的同时，允许用户有希望网页跟随浏览器设置的想法。&lt;/p&gt;
&lt;p&gt;其实到这里，只需要对这部分代码进行改造即可实现我需要的功能，
但我被 &lt;a href="https://developer.mozilla.org/zh-CN/docs/Web/CSS/Reference/At-rules/@media/prefers-color-scheme"&gt;prefers-color-scheme&lt;/a&gt; 这个陌生的东西吸引了，
在简单地看了看文档之后，一拍脑袋直接用上了 &lt;a href="https://developer.mozilla.org/zh-CN/docs/Web/CSS/Reference/At-rules/@media"&gt;@media&lt;/a&gt; 规则。&lt;/p&gt;
&lt;p&gt;当时我认为，自动选项就是去掉 &lt;code&gt;data-theme&lt;/code&gt; 这个自定义数据属性，让 &lt;code&gt;@media&lt;/code&gt; 发挥作用。&lt;/p&gt;
&lt;p&gt;但这个想法完全错了。&lt;/p&gt;
&lt;p&gt;以上面的 CSS 样式表为例。
假如我去掉 &lt;code&gt;data-theme&lt;/code&gt; 属性，那么深色主题的样式表 &lt;code&gt;:root[data-theme=&amp;quot;dark&amp;quot;]&lt;/code&gt; 无法满足加载条件，也就不会被加载，主题永远都是浅色的。
而如果给浅色样式加上 &lt;code&gt;[data-theme=&amp;quot;light&amp;quot;]&lt;/code&gt;，那么任何一个主题样式都不会被加载。
那我再增加一个样式表，里面写……等下，这对吗？我这不是绕了一圈回来了？！&lt;/p&gt;
&lt;p&gt;于是稀里糊涂地撞墙之后我终于回头了。
我对 Paper-Mod 的代码进行了一番修改，增加了 &lt;code&gt;auto&lt;/code&gt;，并在获取到这个值之后根据系统设置给 &lt;code&gt;data-theme&lt;/code&gt; 设置对应的值（&lt;code&gt;light&lt;/code&gt; 或 &lt;code&gt;dark&lt;/code&gt;）。&lt;/p&gt;
&lt;h3 id="避免页面闪烁"&gt;避免页面闪烁&lt;/h3&gt;
&lt;p&gt;测试完深色浅色切换功能之后，我开始琢磨配色了，打开开发者工具，直接在里面调整颜色查看效果。
改了一批颜色之后觉得不是很满意，于是点了下刷新想重新来，这一点不要紧，差点给我闪瞎。&lt;/p&gt;
&lt;p&gt;刷新和切换页面时会快速地闪烁一次，就像有人用手电筒晃了你一下。&lt;/p&gt;
&lt;p&gt;一开始我以为是 &lt;a href="https://developer.mozilla.org/zh-CN/docs/Web/CSS/Reference/Properties/transition"&gt;transition&lt;/a&gt; 的问题，于是增加了过渡时长。
一刷新，哇，还是爆闪！&lt;/p&gt;
&lt;p&gt;在网络上一番搜索，了解到这个问题发生的原因：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;如果用于确定深色浅色主题的代码在样式表应用之后才执行，那么页面加载的时候就会发生一次“闪烁”。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;解决方法就是在 &lt;code&gt;&amp;lt;head&amp;gt;&lt;/code&gt; 标签里面塞一段用于确定主题的脚本，
这样在页面加载的早期，样式表还未应用的时候就可以设置好该深色还是浅色主题了（下面的代码来自我的主题 Mage，这个例子中是设置了 &lt;code&gt;data-theme&lt;/code&gt; 的值）：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-html" data-lang="html"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;head&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 2&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;script&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 3&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// 判断使用深色还是浅色主题。
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 4&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 5&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;savedThemeKey&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;savedTheme&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 6&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;savedTheme&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;localStorage&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getItem&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;savedThemeKey&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 7&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;savedTheme&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nx"&gt;savedTheme&lt;/span&gt; &lt;span class="o"&gt;!==&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;auto&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 8&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;documentElement&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;dataset&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;theme&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;savedTheme&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 9&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;10&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;preferDarkMode&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;matchMedia&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;(prefers-color-scheme: dark)&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;matches&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;11&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;documentElement&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;dataset&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;theme&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;preferDarkMode&lt;/span&gt; &lt;span class="o"&gt;?&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;dark&amp;#39;&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;light&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;12&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;13&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;})()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;14&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;script&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;15&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;head&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="整合我的样式表"&gt;整合我的样式表&lt;/h2&gt;
&lt;p&gt;当我把整个页面模板拆分成单独的小部件时，为了方便理解和维护，我也将样式表文件一一对应地拆分了。&lt;/p&gt;
&lt;p&gt;但显然如何加载这些样式表是个问题。
起初我想通过 &lt;a href="https://gohugo.io/functions/resources/getmatch/"&gt;resources.GetMatch&lt;/a&gt; 获取样式表，
但我不想一股脑儿把这些样式表全部加载呀，而且我希望可以自行确定加载顺序，于是这个方案就被抛弃了。&lt;/p&gt;
&lt;p&gt;之后我找到了 &lt;a href="https://developer.mozilla.org/zh-CN/docs/Web/CSS/Reference/At-rules/@import"&gt;@import&lt;/a&gt; 规则。
这看上去很符合我的需求，于是我创建了一个文件，里面只写 &lt;code&gt;@import&lt;/code&gt; 规则来加载其他的样式表文件，再用 &lt;code&gt;resources.Get&lt;/code&gt; 加载这个文件。&lt;/p&gt;
&lt;p&gt;结果这样做根本不行！&lt;/p&gt;
&lt;p&gt;&lt;a href="https://discourse.gohugo.io/t/importing-css-files-from-a-css-file-not-working/47956/4"&gt;Hugo 的开发者给出了两个方案&lt;/a&gt;，要么像上面那样获取所有的样式表然后用 &lt;code&gt;resources.Concat&lt;/code&gt; 整合，要么改用 Sass。&lt;/p&gt;
&lt;p&gt;最后我选择改用 Sass，而这也引出了另一个问题。&lt;/p&gt;
&lt;h3 id="hugo-并不会自动选择-dart-sass"&gt;Hugo 并不会自动选择 Dart Sass&lt;/h3&gt;
&lt;p&gt;在换成 Sass 写样式表之后，自然是不熟悉，于是翻看文档，慢慢尝试。&lt;/p&gt;
&lt;p&gt;而 Hugo 文档中警告 &lt;code&gt;resources.ToCSS&lt;/code&gt; 已经在 &lt;code&gt;0.128.0&lt;/code&gt; 版本过时，且内置的 LibSass 转译器也在 &lt;code&gt;0.153.0&lt;/code&gt; 版本过时并且会在将来移除掉，同时要求用户使用 Dart Sass 转译器（我写的时候 Hugo 已经是 &lt;code&gt;0.155.3&lt;/code&gt; 版本了）。&lt;/p&gt;
&lt;p&gt;并且我在 &lt;a href="https://gohugo.io/functions/css/sass/#dart-sass"&gt;Hugo 里有关 Dart Sass 的章节&lt;/a&gt;中看到了这么一段话：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;If you have been using Embedded Dart Sass with Hugo v0.113.0 and earlier, uninstall Embedded Dart Sass, then install Dart Sass. If you have installed both, Hugo will use Dart Sass. &amp;ndash; &lt;a href="https://gohugo.io/functions/css/sass/#installation-overview"&gt;Hugo Docs - Dart Sass#Installation overview&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;“&lt;strong&gt;If you have installed both, Hugo will use Dart Sass.&lt;/strong&gt;” 这句话导致我认为 Hugo 会在内置的 LibSass 和外部的 Dart Sass 转译器中优先选择使用后者。&lt;/p&gt;
&lt;p&gt;所以我非常放心地直接用了 &lt;code&gt;toCSS&lt;/code&gt;：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-go-html-template" data-lang="go-html-template"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;{{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;with&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;resources&lt;/span&gt;&lt;span class="na"&gt;.Get&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;scss/style.scss&amp;#34;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;toCSS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;minify&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;fingerprint&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;}}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;2&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;link&lt;/span&gt; &lt;span class="na"&gt;rel&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;stylesheet&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;href&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&lt;/span&gt;&lt;span class="cp"&gt;{{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;.RelPermalink&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;}}&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;integrity&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&lt;/span&gt;&lt;span class="cp"&gt;{{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;.Data.Integrity&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;}}&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;crossorigin&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;anonymous&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;3&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;{{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;end&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;}}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;可是，在我逐渐应用上 Sass 的特性和语法之后，我感觉到了不对劲的地方。&lt;/p&gt;
&lt;p&gt;在我完全&lt;a href="https://sass-lang.com/documentation/values/maps/#using-maps"&gt;按照 Sass 的文档去使用 Maps&lt;/a&gt; 的时候，居然提示我遇到了语法错误？
一头雾水的我转到 &lt;a href="https://sass-lang.com/playground/"&gt;Sass 试验场&lt;/a&gt;里尝试了半天也没发现哪里有问题。&lt;/p&gt;
&lt;p&gt;接着我看到了&lt;a href="https://gohugo.io/functions/css/sass/#example"&gt;使用 css.Sass 的示例&lt;/a&gt;中是这样的写：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-go-html-template" data-lang="go-html-template"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;{{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;with&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;resources&lt;/span&gt;&lt;span class="na"&gt;.Get&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;sass/main.scss&amp;#34;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;}}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 2&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="cp"&gt;{{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;$opts&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;dict&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 3&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;enableSourceMap&amp;#34;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;hugo&lt;/span&gt;&lt;span class="na"&gt;.IsDevelopment&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 4&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;outputStyle&amp;#34;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;cond&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;hugo&lt;/span&gt;&lt;span class="na"&gt;.IsDevelopment&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;expanded&amp;#34;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;compressed&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 5&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;targetPath&amp;#34;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;css/main.css&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 6&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;transpiler&amp;#34;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;dartsass&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 7&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;vars&amp;#34;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;site&lt;/span&gt;&lt;span class="na"&gt;.Params.styles&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 8&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;includePaths&amp;#34;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="k"&gt;slice&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;node_modules/bootstrap/scss&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 9&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;}}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;10&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="cp"&gt;{{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;with&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;.&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;toCSS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;$opts&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;}}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;11&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="cp"&gt;{{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;hugo&lt;/span&gt;&lt;span class="na"&gt;.IsDevelopment&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;}}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;12&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;link&lt;/span&gt; &lt;span class="na"&gt;rel&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;stylesheet&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;href&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&lt;/span&gt;&lt;span class="cp"&gt;{{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;.RelPermalink&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;}}&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;13&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="cp"&gt;{{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;}}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;14&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="cp"&gt;{{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;with&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;.&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;fingerprint&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;}}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;15&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;link&lt;/span&gt; &lt;span class="na"&gt;rel&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;stylesheet&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;href&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&lt;/span&gt;&lt;span class="cp"&gt;{{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;.RelPermalink&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;}}&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;integrity&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&lt;/span&gt;&lt;span class="cp"&gt;{{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;.Data.Integrity&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;}}&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;crossorigin&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;anonymous&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;16&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="cp"&gt;{{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;end&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;}}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;17&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="cp"&gt;{{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;end&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;}}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;18&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="cp"&gt;{{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;end&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;}}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;19&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;{{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;end&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;}}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;搞了半天，还是得配置参数啊，还得显式地给出使用 Dart Sass 转译器（&lt;code&gt;&amp;quot;transpiler&amp;quot; &amp;quot;dartsass&amp;quot;&lt;/code&gt;）才可以嘛！&lt;/p&gt;
&lt;h3 id="把-sass-变量的值传递给-css-变量"&gt;把 Sass 变量的值传递给 CSS 变量&lt;/h3&gt;
&lt;p&gt;有时候需要对不同选择器下的元素配置类似甚至相同的属性，完全复制粘贴显然不太合适，而且既然已经用上 Sass 了，为何不试试语言特性？&lt;/p&gt;
&lt;p&gt;我的应用场景是：
只设置一个 CSS 变量，然后根据给定条件，把预先定义好的 Sass 变量值传递给 CSS 变量。
因为 CSS 变量值在改变后会立刻生效，这样就能达到动态应用样式的效果了。&lt;/p&gt;
&lt;p&gt;起初一切顺利，直到我尝试做屏幕宽度响应，这段代码是没问题的：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-scss" data-lang="scss"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;@use&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;sass:map&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 2&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 3&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// 定义了不同宽度和对应宽度下的行为
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 4&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;$screenWidth&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 5&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;max&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1920&lt;/span&gt;&lt;span class="kt"&gt;px&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 6&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;large&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1600&lt;/span&gt;&lt;span class="kt"&gt;px&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 7&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;medium&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1200&lt;/span&gt;&lt;span class="kt"&gt;px&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 8&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;small&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1024&lt;/span&gt;&lt;span class="kt"&gt;px&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 9&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;10&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;$contentWidth&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;11&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;max&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1200&lt;/span&gt;&lt;span class="kt"&gt;px&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;12&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;large&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;960&lt;/span&gt;&lt;span class="kt"&gt;px&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;13&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;medium&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;768&lt;/span&gt;&lt;span class="kt"&gt;px&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;14&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;small&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;80&lt;/span&gt;&lt;span class="kt"&gt;%&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;15&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;16&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;$contentPadding&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;17&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;max&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="kt"&gt;rem&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;18&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;large&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="mf"&gt;.75&lt;/span&gt;&lt;span class="kt"&gt;rem&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;19&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;medium&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="mf"&gt;.5&lt;/span&gt;&lt;span class="kt"&gt;rem&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;20&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;small&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="kt"&gt;%&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;21&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;22&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;23&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// 最宽宽度限制
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;24&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;@media&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="na"&gt;min-width&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;map&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$screenWidth&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;max&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;25&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="nd"&gt;:root&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;26&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;--width-main&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="n"&gt;meta&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;inspect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;map&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$contentWidth&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;max&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;27&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;--padding-article&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="n"&gt;meta&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;inspect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;map&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$contentPadding&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;max&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;28&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;29&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;但是下面的代码就有问题了：&lt;/p&gt;
&lt;blockquote class="block-critical"&gt;&lt;p&gt;这段代码的结果不符合预期：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-scss" data-lang="scss"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;/* 定义省略 */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 2&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// 根据宽度设置对应内容宽度和文章缩进
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 3&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;@each&lt;/span&gt; &lt;span class="nv"&gt;$size&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$width&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nv"&gt;$screenWidth&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 4&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;@media&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="na"&gt;max-width&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nv"&gt;$width&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 5&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="nd"&gt;:root&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 6&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;--width-main&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;map&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$contentWidth&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$size&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 7&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;--padding-article&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;map&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$contentPadding&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$size&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 8&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 9&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;10&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/blockquote&gt;
&lt;p&gt;我在 Sass 文档里翻来翻去，从找寻特定章节到漫无目的的一个章节一个章节浏览，可能过了半个多小时，就在我看得困了快睡着的时候突然找到了原因：&lt;/p&gt;
&lt;blockquote class="block-warning"&gt;&lt;p&gt;Unfortunately, interpolation removes quotes from strings, which makes it difficult to use quoted strings as values for custom properties when they come from Sass variables. As a workaround, you can use the meta.inspect() function to preserve the quotes. &amp;ndash; &lt;a href="https://sass-lang.com/documentation/style-rules/declarations/#custom-properties"&gt;Sass: Property Declarations#Custom Properties&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;大意是：“插值会移除字符串的引号，因此对于含有引号的字符串的 Sass 变量是很难应用到 CSS 变量中的。一种解决方案是使用 &lt;code&gt;meta.inspect()&lt;/code&gt; 函数保留引号。”。
在我这里的情况下，&lt;code&gt;$key&lt;/code&gt; 作为含引号的字符串，传值进去的时候引号直接被吃掉了。
因此解决方案是：&lt;/p&gt;
&lt;blockquote class="block-sanity"&gt;&lt;p&gt;使用 &lt;code&gt;meta.inspect()&lt;/code&gt; 解决插值引号问题：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-scss" data-lang="scss"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;/* 定义省略 */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 2&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// 根据宽度设置对应内容宽度和文章缩进
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 3&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;@each&lt;/span&gt; &lt;span class="nv"&gt;$size&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$width&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nv"&gt;$screenWidth&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 4&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;@media&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="na"&gt;max-width&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nv"&gt;$width&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 5&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="nd"&gt;:root&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 6&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;--width-main&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="n"&gt;meta&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;inspect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;map&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$contentWidth&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$size&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 7&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;--padding-article&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="n"&gt;meta&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;inspect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;map&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$contentPadding&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$size&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 8&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 9&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;10&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/blockquote&gt;
&lt;p&gt;但我还要提一句，&lt;a href="https://sass-lang.com/documentation/style-rules/declarations/#custom-properties"&gt;meta.inspect() 的文档中提到&lt;/a&gt;这个函数是用于调试的，无法保证不同版本和实现下的 Sass 中的输出结果是保持一致的。我还在寻找其他解决方法，因此目前没有将这个宽度响应的功能正式添加到主题中。&lt;/p&gt;
&lt;h2 id="给网站增加多语言"&gt;给网站增加多语言&lt;/h2&gt;
&lt;p&gt;“顺手的事。”，我这样想。&lt;/p&gt;
&lt;p&gt;其实也没这么简单，因为我的菜单配置在站点，因此语言配置也在站点中。
但我同时也需要把主题做成多语言的，因此主题的配置在 &lt;code&gt;i18n/&lt;/code&gt; 目录下。
这样，主题部分的 i18n 负责把模板内一些字符串替换成对应语言的文本。
而站点的 i18n 主要是站点默认语言和菜单这部分。&lt;/p&gt;
&lt;p&gt;站点配置里的这两项比较绕：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-toml" data-lang="toml"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# 此项控制设置好的默认语言所生成的文章是存放到对应语言文件夹内（true），还是直接丢到站点结构下（false）。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;2&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;defaultContentLanguageInSubdir&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;3&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# 此项控制是否禁用给默认语言添加一个跳转地址，&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;4&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# 例如本站默认语言是&amp;#34;zh-Hans&amp;#34;，下面的配置是没有禁用，所以地址里会有一个&amp;#34;/zh-Hans&amp;#34;的小尾巴。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;5&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;disableDefaultLanguageRedirect&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;吐槽：在看&lt;a href="https://gohugo.io/configuration/all/#disabledefaultlanguageredirect"&gt;这部分配置文档&lt;/a&gt;的时候总感觉是在玩什么脑筋急转弯，为啥要用 &lt;code&gt;disable&lt;/code&gt; 这么个需要反向理解的前缀啊……&lt;/p&gt;
&lt;p&gt;总之 i18n 是配置好了，虽然这样的分离配置总感觉有点割裂什么的，至少能用，以后再看看有没有更好的方案。&lt;/p&gt;
&lt;h2 id="让一些链接在点击时在新窗口打开"&gt;让一些链接在点击时在新窗口打开&lt;/h2&gt;
&lt;p&gt;需要给这样的链接用上 &lt;a href="https://developer.mozilla.org/zh-CN/docs/Web/HTML/Reference/Elements/a#target"&gt;target&lt;/a&gt; 属性：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-html" data-lang="html"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;a&lt;/span&gt; &lt;span class="na"&gt;href&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;https://gohugo.io/&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;title&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Hugo&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;target&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;_blank&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Hugo&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;a&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="其他"&gt;其他&lt;/h2&gt;
&lt;p&gt;&lt;del&gt;或许还有，但是我记不清了，所以&lt;/del&gt;没有了（&lt;/p&gt;</description></item><item><title>你好，世界！</title><link>https://mengshitia.github.io/zh-hans/posts/hello-world/</link><pubDate>Thu, 12 Feb 2026 15:28:44 +0800</pubDate><guid>https://mengshitia.github.io/zh-hans/posts/hello-world/</guid><description>&lt;h2 id="想法"&gt;想法&lt;/h2&gt;
&lt;p&gt;我喜欢浏览各种各样的个人主页、博客。
不管这些网站是用于展示技能、分享日常还是单纯作为一个笔记，
它们带给我的感觉总是一座跨越时空的桥梁，
我作为读者，可以愉快地跑到作者的伊甸园里细细观摩品鉴。&lt;/p&gt;
&lt;p&gt;看多了之后，自己就也想做一个了。&lt;/p&gt;
&lt;h2 id="机遇"&gt;机遇&lt;/h2&gt;
&lt;p&gt;是的，就和当初切换到某个特定的发行版的经历一样，
我在互联网的角落里偶然发现了 Hugo。&lt;/p&gt;
&lt;p&gt;当然啦，没有想法的话这短暂的一瞥可能就这么过去了。&lt;/p&gt;
&lt;h2 id="尝试"&gt;尝试&lt;/h2&gt;
&lt;p&gt;照着文档一顿操作之后，一个热乎的静态网站页面就做好了。
黑箱科技真是厉害。&lt;/p&gt;
&lt;p&gt;不过我立刻就发现了一个（对我来说很重要的）问题：
Ananke 主题没有深色主题。&lt;/p&gt;
&lt;p&gt;作为一个重度浏览器用户，怎么能没有深色主题呢？
于是就去寻找合适的 Hugo 主题。&lt;/p&gt;
&lt;p&gt;一番搜索和体验之后，我锁定了这几个主题：
&lt;a href="https://github.com/nanxiaobei/hugo-paper"&gt;Paper&lt;/a&gt;、&lt;a href="https://github.com/adityatelange/hugo-PaperMod"&gt;Paper-Mod&lt;/a&gt; 和 &lt;a href="https://github.com/CaiJimmy/hugo-theme-stack"&gt;Stack&lt;/a&gt;。
这几个主题都有深色、浅色主题切换开关、柔和的配色以及不错的界面布局设计和使用体验。&lt;/p&gt;
&lt;p&gt;但是在实际使用这几个主题并进行配置的时候，我发现我或许并不需要这么多的特性和功能。&lt;/p&gt;
&lt;p&gt;除此以外，我对这几个主题的深色、浅色切换功能并不满意，
Paper 和 Paper-Mod 压根没有能跟随系统设置的“自动模式”，
Stack 的切换功能是自动的，但我没法设置到“自动”，因为它没给“自动”这个选项。&lt;/p&gt;
&lt;h2 id="改直接写一个"&gt;改？直接写一个！&lt;/h2&gt;
&lt;p&gt;“那我能不能直接做一个功能够用而且有我想要的深色浅色主题切换功能的 Hugo 主题呢？”
（这是在我折腾没多久就冒出来的想法，现在看来有些过于大胆了……）&lt;/p&gt;
&lt;p&gt;于是我一头钻进 Hugo 的文档里啃了起来。
因为这套文档里并没有关于 Hugo 主题的详细信息，
只有一句话：“主题和站点一样，就是一个 Hugo 模块。”。
因此毫不夸张地说，这一啃就是一个月。
这中间是不断的尝试理解、实践、吃瘪、重来……
这样的流程丢出来给读者看太枯燥了，于是就跳过吧。&lt;/p&gt;
&lt;p&gt;小插曲，&lt;a href="https://github.com/athul/archie"&gt;Archie&lt;/a&gt; 这个简洁的主题，
甚至用的还是旧版的模板系统，却帮助我理解了 Hugo 的模板系统。&lt;/p&gt;
&lt;h2 id="收尾"&gt;收尾&lt;/h2&gt;
&lt;p&gt;最终，我写好了我的主题：&lt;a href="https://github.com/mengshitia/hugo-theme-mage"&gt;Mage&lt;/a&gt;，
它有我需要的所有功能：头像展示、主页文章、自定义的分页样式、归档、关于页、分类标签，以及深色浅色主题切换功能，
也有类似前面所说的主题的配色和卡片式布局样式。&lt;/p&gt;
&lt;p&gt;有了合适的主题，我就静下心来把这篇文章给完成了。&lt;/p&gt;
&lt;p&gt;那么，前面是想法、中间忘了、最后写好了（&lt;/p&gt;
&lt;h2 id="写在最后"&gt;写在最后&lt;/h2&gt;
&lt;p&gt;虽然有点唐突，但是我还是要感谢我的好朋友们。
感谢你们的帮助和支持，不管是不是在建站这件事上。&lt;/p&gt;</description></item></channel></rss>