qin 发布于
>=2.26.0
现象
安装并启用 highlight.js 代码高亮 或 Shiki 代码高亮 插件后,代码块的插件配色不生效:代码块背景与文字被压成主题的深绿/浅绿,语法着色几乎看不出来。
根因(CSS 层)
.post-content code
无条件设置了background:rgba(125,217,166,0.10); color:#A9E8C6——插件注入的hljs类代码块同样命中这条规则,插件的整套文字配色被主题绿覆盖。.post-content pre设置了background:#0A1712,插件代码块的背景同样被盖住。- 页面没有向插件声明配色方案,Shiki 这类按页面配色选择暗色高亮主题的插件无法判断该用哪套配色。
修复内容
| 位置 | 修复前 | 修复后 |
|---|---|---|
| 行内/块级代码配色 | .post-content code 无条件上色 |
.post-content code:not(.hljs),绿色仅作未高亮内容的兜底 |
| 代码块容器背景 | .post-content pre 无条件深绿底 |
新增 .post-content pre:has(>code.hljs){background:none},已高亮的代码块让出背景 |
| 块内代码文字色 | .post-content pre code 无条件上色 |
.post-content pre code:not(.hljs),插件已接管时完全不干预 |
| 页面配色声明 | 无 | <html data-color-scheme="dark">,供 Shiki 等插件识别深色外观 |
行为说明
- 未安装插件:普通代码块与行内代码仍保持绿野的深绿配色,主题风格不变。
- 已安装并高亮:
code.hljs的背景与文字色完全由插件主题接管,主题不再干预;语法着色正常显示。 - 编辑器与前台:主题不会自动同步编辑器配色。使用 Shiki 时,将插件的「编辑器设置 → 高亮主题」与「基本设置 → 暗色主题」设为同一配色。
真机验证
已在 Halo 2.26.0 本机实例上用正式发布包完成验证:
-
主题升级返回 200,已装版本显示 1.1.2 / READY,布局契约
LayoutTemplateSupported正常。 -
Halo 实际提供的
style.css(非仅开发态)确认包含全部三条修复规则。 -
无头浏览器读取计算样式:
元素 1.1.1(修复前) 1.1.2(修复后) pre:has(code.hljs)背景rgb(10,23,18)(被主题覆盖)rgba(0,0,0,0)(让出给插件)code.hljs背景rgba(0,0,0,0)取插件配色 code.hljs文字色rgb(199,227,210)(主题绿)取插件配色 未高亮 pre背景rgb(10,23,18)rgb(10,23,18)(兜底不变)对照实验直接证明:同一段 HTML 加载两个版本的 CSS,1.1.2 确实把配色让给了插件,而未高亮代码块的主题绿兜底不受影响。
-
document.documentElement的data-color-scheme读取为dark。 -
全路径扫描全部正常:首页、分页、归档、分类、标签、文章详情(含代码块验证页)、作者页均返回 200,404 页返回 404。
兼容性
Halo >= 2.26.0,与前序版本一致。CSS 使用了 :has() 选择器,现代浏览器均已支持(Halo 后台与主流现代浏览器环境无兼容问题)。
升级方式
- 下载本 Release 附件中的
theme-luye-1.1.2.zip - Halo 后台 → 外观 → 主题 → 找到「绿野 Luye」→ 升级 → 上传 zip
- 主题设置保存在 ConfigMap 中,升级不会丢失配置
若升级后代码块仍显示旧样式,请强制刷新浏览器(Ctrl/Cmd + F5)清除缓存的 CSS。
资源下载
- theme-luye-1.1.2.zip
