Hexo自定义静态背景
前言
虽然我知道你很想设置炫酷的动态背景。但先别急,我们一步步实现,现在先将静态的内容实现了。
准备素材
我们先准备一张希望放在博客上的图片:
哦不,等下,这个会不会有些太大了?
那我们再想想办法。目前有一个网站叫做iloveImg,是能够节省大部分存储空间的。
唯一美中不足的是,国内基本是WIFI
的速度,千兆网线能更快。
于是呢,我们就拿到了这张图片:
压到了
创建样式表
然后,我们就准备加入一些样式。
样式表存储位置
加在哪里呢?NexT
主题中提供了配置项:
1 | # Define custom file paths. |
我们需要将其中的
1 | #style: source/_data/styles.styl |
解开注释,变成这样:
1 | # Define custom file paths. |
这就相当于给定了引入样式表的文件路径。
需要注意的是,这个路径并不是themes/next/source
文件夹,而是根目录下存放_post
的source
文件夹。
于是按照路径创建这样一个样式表,里面的内容就会生效。
需要注意的是,与前几个NexT
版本不一样的是,NexT
的第
而NexT
的第themes/next/source/css
文件夹下就能够被打包,所以也不需要额外在意如何引用这些样式表。
设置背景图片
1 | body { |
于是你的body
上就出现了一张相当明显的背景图。
但是你发现,当我随着我的阅读进度往下划的过程中,背景图片就慢慢地消失了。
设置背景图片不会随着滚轮移动
这可不是我们希望看到的。于是增加了一个属性:
1 | body { |
看着效果还不错。
设置背景图片透明度
当然,你觉得这样看起来太low
了。 我们加点高级的,加点透明度。
opacity可不能随便用
你可能觉得,就是opacity
(不透明度)了,对吧?
不过大家应该知道一个常识:opacity
是一定会继承的。一旦父DOM
定义了opacity
,子DOM
就一定会收到父DOM
的不透明度属性,并且子DOM
的opacity
属性是定义的子DOM
自身定义值与从父DOM
继承下来的属性值相乘的结果。
例如,我们有一个父DOM
叫做ul
,opacity
值为DOM
叫做li
,opacity
值为li
的实际opacity
值将为
并且还有一个致命的问题:opacity
会将DOM
中的内容一并透明化,整个就看不太清了。
虽然说背景图片看得更清楚了,但是文章可就一点都看不到了啊!
让你意想不到的linear-gradient
有什么办法呢?用linear-gradient
。没错,用linear-gradient
。
它本身其实就是个创建线性渐变的工具,但我们似乎都忘了,gradient
本质上是一种特殊的图像,如果按层叠样式表的定义去理解的话,可以理解为一种遮罩。
也就是说,只要我设置linear-gradient
的不透明度为
所以,我们就直接这样设置:
1 | body { |
于是我们就得到了一个最上、最下不可见且中间有
似乎还不错。
背景图片专项优化
既然背景图片都这么优化了,我们是否应该将所有的板块全部透明化一点?不然的话,我们中意的背景就被大部分遮挡掉了。
怎么实现呢?同样的,如果是CSS
就能实现。但问题就在于,这是第CSS
实现已经不起作用了。所以只能自行修改source/css/_variables/base.styl
文件。
最简单粗暴的方法就是直接修改其中的body-bg-color
与content-bg-color
为rgba(0, 0, 0, 0)
,就能够展现这样的效果:
看着挺好的。当然你也可以根据自己的喜好设置透明度范围、透明区域,基本上都是这个方法。
你以为跟自定义CSS有关么?
嗯?结束了啊,你在期待什么?
哦,我明白了,你在期待设定CSS
以便直接给定rgba(0, 0, 0, 0)
对吧?这样就不会动到这种根本的配置文件了。
但是很可惜,那些东西并不会起到什么作用。
你以为是CSS
样式没有起作用?不,起作用了。在开发者工具中能够很清楚地看到rgba(0, 0, 0, 0)
生效了,但依然没有变为透明色。
并不是因为是变量所以优先级更高,也并不是因为styl
文件比CSS
文件更优先,只不过是单纯的因为变量是全局声明的,全局定义的样式优先级更高,所以被覆盖了。
还记得吗,我们最开始使用Vue
的时候,style
标签中有一个scoped
属性。其实就是为了不让该组件的样式对全局样式造成污染。
一样的道理。