butterfly自定义半透明背景
直奔主题
将下面的样式写入文件source/-/css/bl-sun.css
1 | [data-theme='light']{ |
在_config.butterfly.yml
配置文件中注入该样式
1 | inject: |
前言
看大佬的博客是半透明的背景,真的很好看。想着给自己的也弄一个。
探索
我查了buttfly关于颜色的配置可以配置以下参数:
1 | theme_color: |
不知道有没有对夜间模式进行适配。于是我按下了F12,我想看看它的background
样式是怎么控制。
于是我发现它是通过下面的CSS使用变量--card-bg
设置了背景的颜色。
1 | .cardHover, .error404 #error-wrap .error-content, .layout > div:first-child:not(.recent-posts), #recent-posts > .recent-post-item, #aside-content .card-widget, .layout > .recent-posts .pagination > *:not(.space) { |
找到了对应的CSS变量--card-bg
,接着我们可以找到--card-bg
变量的定义。
1 | [data-theme='dark'] { |
通过切换主题夜间模式,可以找到日间模式的--card-bg
变量定义。
1 | :root { |
我们可以找到data-theme
属性的位置,是在html
标签上的。
1 | <html lang="zh-CN" data-theme="light"></html> |
配置
最终我们可以通过注入css的方式来使我们的背景颜色透明。
将下面的样式写入文件source/-/css/bl-sun.css
1 | [data-theme='light']{ |
这里没有使用
:root
伪类设置日间模式的背景颜色。
这里设置的颜色是将原来Hex格式的颜色通过RGB颜色查询对照表转化为CSS格式然后调节alpha
值使其变得透明。
在_config.butterfly.yml
配置文件中注入该样式
1 | inject: |
进一步
通过搜索--card-bg
,可以发现themes/butterfly/source/css/_global/index.styl
中对其进行了初始化
1 | :root |
进一步,通过搜索$card-bg
可以在themes/butterfly/source/css/var.styl
查到如下代码。
1 | $white = #FFFFFF |
不懂.styl
文件的语法,但是看起来是写死了的。
还是在themes/butterfly/source/css/var.styl
文件中可以找到如下代码
1 | $theme-color = $themeColorEnable && hexo-config('theme_color.main') ? convert(hexo-config('theme_color.main')) : $bright-blue |
看来是根据配置文件中设置的theme_color.main
配置变量$theme-color
。如此对比,可以说$card-bg
就是写死了的,看来我们的方法还是挺“正规”的。
最后
感觉butterfly这部分代码有优化的空间,想要尝试给大佬做一下贡献,吼吼。
具体来说,就下面这段代码看起来重复了好多。由于一些变量如$card-bg
没有使用下面这种形式的写法,导致无法自定义。如果有方法可以自动生成下面这种类型的代码,那灵活性应该会有很大的提升。
1 | $theme-color = $themeColorEnable && hexo-config('theme_color.main') ? convert(hexo-config('theme_color.main')) : $bright-blue |
可行性分析
- styl语法是否支持
如果支持的话,首先获取所有以theme_color
开头的属性列表。然后遍历这个列表
伪代码:
1 | list = hexo-config-list() |
1 | reset(args) |
成果展示
在themes\butterfly\scripts\events\stylus.js
中注册一个styl
函数
1 | hexo.extend.filter.register('stylus:renderer', style => { |
这段代码就是注册了一个
$format_css
函数,它被用来将字符中的_
替换为-
不用String()
的话会报错,不知道是什么原因。主要参考了hexo-config()
的代码。
本来想的是照着它这种读取的方式自己读取的,后来自己一调用hexo-config()
就可以得到相应的键值对呢。白忙活半天
在themes\butterfly\source\css\index.styl
中加入如下测试代码
1 | //test |
哦对,
hexo-config('theme_color')
要是yml
里有theme_color.light.card_bg
这种三级的配置的话好像不知道会出现什么问题哎。没有尝试。
我的配置文件
1 | theme_color: |
在themes\butterfly\source\css\index.styl
中生成的样式如下:
1 | :root { |