Hexo + Chic 主题为代码块实现明暗主题切换效果
这份文档记录如何在 Hexo 博客(使用 Chic 主题),完成代码块 (highlight.js) 样式随明/暗主题切换。
项目地址:https://github.com/EvannZhongg/Blog-Learning.git
背景知识
- 代码块 是你写文章时用 ``` 包起来的那些 Python/JavaScript 代码部分。
- highlight.js 是用来给代码块加颜色的工具,它有“亮色”和“暗色”两套样式。
希望解决的问题是:
当我切换网站到暗色模式时,代码块还是白底,看起来很突兀。
我们要做的就是:让代码块也能“跟着变黑”。
1. 确认 Hexo 正在使用 highlight.js
打开你博客根目录下的 _config.yml
文件,找到下面的内容并确保设置一致:
1 | syntax_highlighter: highlight.js |
这段配置的意思是告诉 Hexo:我要用 highlight.js 来做代码高亮。
2.修改 head.ejs,引入代码高亮样式
打开文件:
1 | themes/hexo-theme-Chic/layout/_partial/head.ejs |
在里面添加这几行(插入到已有的 <link>
标签之后即可):
1 | <!-- highlight.js 样式(默认亮色) --> |
- 第一行是默认代码样式(亮色)。
- 第二三行是让代码自动加颜色。
3. 修改 script.js,切换暗色样式时动态修改链接
打开文件:
1 | themes/hexo-theme-Chic/source/js/script.js |
找到我们添加主题切换的地方,添加以下 JavaScript 代码:
1 | const hljsTheme = document.getElementById('hljs-theme'); |
然后就可以在主题切换按钮事件里调用:
1 | updateCodeHighlightStyle(true); // 或 false,根据你当前模式 |
每次切换主题时都调用它,就能切换代码样式。
4. 创建一个 CSS 文件,解决代码块“白边”问题
这个步骤很关键,否则在暗色样式时代码块周围可能会留下一圈白色边框,如下方图片所示:
第一步:创建文件夹和文件
在终端中运行:
1 | cd themes/hexo-theme-Chic/source/css |
或者手动:在 themes/hexo-theme-Chic/source/css/
下创建文件夹 custom
,然后在里面新建文件 custom.css
第二步:填入以下内容:
1 | pre, |
5. 在 head.ejs 中引入自定义 CSS 文件
在 head.ejs
中再加一行:
1 | <link rel="stylesheet" href="<%- url_for('/css/custom/custom.css') %>"> |
放在其他 <link>
标签的下面。
6. 重新生成并运行 Hexo
运行以下命令,重新生成并启动本地预览:
1 | hexo clean |
然后访问你的本地博客文章页面 http://localhost:4000
,尝试切换主题,看代码块是否也会随之变色。
在两种不同主题下的效果展示:
修改后的相关完整代码可以在文章开头的项目地址中获取
该项目代码基于 Hexo 和 hexo-theme-Chic 。