Butterfly主题必须用inject.head插入完整<link>标签且路径以/开头;Fluid主题用custom_css数组,路径相对source/不加/;Next主题推荐source/css/_custom/custom.styl。

Butterfly 主题必须用 inject.head 插入完整 <link> 标签,路径以 / 开头;Fluid 主题直接填 custom_css 数组,路径相对 source/ 且不加 /;Next 主题优先走 source/css/_custom/custom.styl。硬改主题 layout 文件或往 themes/xxx/source/ 下放 CSS,基本等于白忙活。
Butterfly 主题:inject.head 是唯一可靠入口
Butterfly 不识别 custom_css 配置项,写进去完全无效。你得在 _config.butterfly.yml 里明确配置 inject.head,每一项都必须是完整的 HTML <link> 字符串。
- 文件必须放在 Hexo 根目录的
source/css/custom.css(不是themes/butterfly/source/css/) - 路径必须以
/开头,比如/css/custom.css;写成./css/custom.css或css/custom.css会 404 - 常见错误现象:
net::ERR_ABORTED 404、控制台报Failed to load resource、样式完全不生效 - 建议加版本号防缓存:
<link rel="stylesheet" href="/css/custom.css?v=20260702"> - 引入多个 CSS 就写多行,每行一个带
-的字符串
Fluid 主题:用 custom_css 数组最省心
Fluid 原生支持 custom_css 字段,不用手写 HTML 标签,也不用记路径规则细节——但路径规则它真有。
- 配置位置在
_config.fluid.yml,字段名就是custom_css - 值是一个数组,每个元素是字符串路径,例如:
["css/custom.css", "css/override.css"] - 路径是相对于
source/目录的,开头不能带/;写成/css/custom.css会失效 - 文件仍需放在
source/css/custom.css,生成后自动映射为/css/custom.css - 不支持内联样式或 JS 注入,CSS 就走这个字段,JS 另配
custom_js
Next 主题:推荐 source/css/_custom/custom.styl
Next 对自定义样式最“懒人友好”——只要把 CSS(或 Stylus)写进约定路径,它就会自动编译合并进主样式表,无需改配置、不担心路径拼错。
- 创建目录:
source/css/_custom/,再新建custom.styl(Stylus 格式)或custom.css(纯 CSS) - 如果是
.styl文件,可直接用变量、嵌套等语法;.css文件则原样注入 - 避免用
inject方式,容易和主题内置样式加载顺序冲突,导致!important都压不住 - 若一定要用
inject.head,路径规则同 Butterfly:必须以/开头,且文件得在source/下 - 修改后需
hexo clean && hexo g才能生效,热更新有时不触发 Stylus 编译
所有主题通用:别碰 themes/xxx/layout 和浏览器调试器改的临时样式
直接编辑主题的 layout 文件(如 head.swig)看似简单,实则埋雷:主题一升级,你的修改全丢;而且 Hexo 的静态资源处理(路径解析、版本哈希)完全绕过你手写的 <link>。
立即学习“前端免费学习笔记(深入)”;
- 浏览器开发者工具里右键“检查”,在 Styles 面板双击改样式,只是临时预览——刷新即丢,不能当真
- 真正要定位样式来源,看 Elements 面板右侧的 “Styles” 列表,找带
source或_custom的文件名 - 自定义 CSS 优先级不够?别急着堆
!important,先确认选择器 specificity 是否足够,比如用.post-content p比p更准 - 本地
hexo s能看到效果,但部署后没生效?大概率是缓存问题,清掉 CDN 或浏览器缓存,再检查生成后的 HTML 中<link>是否真实存在且路径可访问
source/ 目录下的文件 + 主题配置里那一行正确路径。其余都是障眼法。


















