此内容已过时。Hexo-Theme-Fluid 自 v1.8.14 起添加了此功能。
由于 Hexo-Theme-Fluid 主题(v1.8.14 之前)的目录前没有光标,所以想自己增加一个光标,并添加切换动画。
下面所描述的代码使用 stylus
格式,新建 source/css/toc.styl
文件,并在主题配置的 custom_css
添加文件路径 /css/toc
(注意不带文件扩展名)。
添加光标
Stylus1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| .toc-body > ol { position: relative; }
.toc-list-item { &.is-active-li::before { content: ''; position: absolute; left: 0.25rem; height: 0.25rem; margin: 0.625rem 0; width: 0.25rem; border-radius: 0.125rem; background: black; } }
|
根据自己的需求,自行调整相应的数据。
注意:要想让光标垂直居中的话,可以让其“高度 height
”加上“外边距 margin
中的上下边距”等于“目录标题项 .toc-list-item
”的高度(默认值为 1.5rem)。比如上面的设置:0.25+0.625×2=1.5(rem) 。
添加光标切换动画
我们可以设置 .toc-list-item::before
的激活状态和初始状态,然后添加其过渡动画 transition
来实现切换效果。
首先将上面激活状态复制给初始状态:
Stylus1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| .toc-list-item { &::before { content: ''; position: absolute; left: 0.25rem; height: 0.25rem; margin: 0.625rem 0; width: 0.25rem; border-radius: 0.125rem; background: red; } &.is-active-li::before { content: ''; position: absolute; left: 0.25rem; height: 0.25rem; margin: 0.625rem 0; width: 0.25rem; border-radius: 0.125rem; background: black; } }
|
使用 hexo server
打开本地服务查看效果如下:
我们可以看到激活状态的光标(黑色)和初始状态的光标(红色)都显示出来了,我们不需要显示初始状态的光标,因此需要添加 visibility
属性,将初始状态的光标给隐藏掉,在初始状态中添加 visibility: hidden;
。
为了实现切换效果,那就需要将初始状态和激活状态的一些属性设为不同,比如我的是将 height
和 margin
设为不同的值。
将具有不同值的属性加入到 transition
,比如 transition: height 0.2s ease-in-out, margin 0.2s ease-in-out, visibility 0.2s ease-in-out;
。
transition 的具体描述可以参见“使用 CSS transitions”。
可以把“激活状态”中与“初始状态”具有相同值的属性删除,至此光标的样式就全部完成了,最终结果如下:
Stylus1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| .toc-body > ol { position: relative; }
li.toc-list-item { &::before { content: ''; position: absolute; left: 0.25rem; height: 0.25rem; margin: 0.625rem 0; width: 0.25rem; border-radius: 0.125rem; background: black; visibility: hidden; transition: height 0.2s ease-in-out, margin 0.2s ease-in-out, visibility 0.2s ease-in-out; } &.is-active-li::before { height: 1rem; margin: 0.25rem 0; visibility: visible; } }
|
最终效果:
夜间模式
可以设置夜间模式下的颜色:
Stylus1 2 3 4 5 6 7 8
| [data-user-color-scheme='dark'] { .toc-list-item { &::before { background: orange; transition: background 0.2s ease-in-out; } } }
|
拓展
更多主题美化参见“Hexo-Fluid 博客美化和修改”。