前置说明
魔改亮点
🆙主题可升级:几乎不改动主题源码。即便魔改,也不需要为升级主题而烦恼。
🍳简单快速:简单上手,快速修改。
🍭看我72变:多种背景随意更换。
📕优雅阅读:对卡片进行不同的透明度设置,实现更优雅的阅读。
👦个性友联:为你的好友设置不同的颜色
🎈页脚更炫酷:彩色渐变footer喜欢么?
🍟更多优点等你发现
为什么写这篇文章?
相信在这之前,大家肯定看过网上的各种魔改教程。但是这些魔改教程基本上千篇一律,都是一种方式,大量修改模板(主题源文件)。这种方式的好处就是简单快速且直接,缺点就是每次升级😏,不用我说了吧。除非你不打算在升级。
但是对于一个热爱升级的我来说,我怎么可以这样。于是乎我便写了这篇文章。按照此教程进行的魔改,大部分都是通过引入新的js文件和css文件实现的。这意味着再也不用因为升级而再次魔改而苦恼了😄。同样的缺点也还是有的,引入新文件必定导致页面加载速度下降,下降多少取决于访客网速、电脑配置及服务器的带宽。具体速度可以参考本博客。
此博客环境:Coding + Jsdeliver
这篇文章大部分修改全部没有改动pug模板。基本都是添加css文件和js文件实现的修改。
至此(2020-06-12)只有两项(友链页、双评论)修改改动了pug模板。
至于友链页 ,可改动空间并不大,因此升级主题只需要直接将文件覆盖作者文件即可。
而双评论,只需要每次升级主题将对应文件的
else if
改为if
即可。相信上述两项pug模板的修改不需要刻意记录也能印在心头把?
快速预览魔改范围
JS/CSS如何使用
下面关于各种修改我会直接给出参考代码,你可以每做一个修改都建立一个新的css/js文件,也可以将所有的代码都复制到一个css/js文件。
JS/CSS如何引用
此篇文章所说的一切引用(包括css和js)都可以参考这里。
- 打开主题配置文件(butterfly.yml)
- 定位搜索 inject
- 其中head是用来引入css的。bottom是用来引入js的。
示例:
inject:
head:
- <link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/sviptzk/HexoStaticFile@latest/Hexo/css/flink.min.css">
bottom:
- <script src="https://cdn.jsdelivr.net/gh/sviptzk/HexoStaticFile@latest/Hexo/js/hideMobileSidebar.js"></script>
注:以上方式2.3.5版本可用,其他版本请自行查找引入自定义js及css的地方。
引用方式说明
引用方式二选一即可。
以相对路径引入
-
将写好的css文件移动到
\Butterfly\source\css\
目录下。 -
然后修改配置文件的引入方式
以外链的方式引入
同样的可以将这个文件上传到cdn,如七牛云、又拍云、GitHub+Jsdeliver等。
只需要将引入地址写为你的文件外链地址即可。
例如我的jsd链接
注:不同版本可能设置略有不同,请仔细对照你所使用版本的文档。引入并非写个连接,而是使用html标签引入。
快速“复制”
不想动手,就想得到魔改后的效果。😏可以直接使用作者自用的css。
直接使用作者自用的css可能会导致自己的布局出现错误排版,或者其他各种问题。无法解决!或者自行解决。(除非自己懂前端。)
css
-
自定义css
https://cdn.jsdelivr.net/gh/sviptzk/StaticFile_HEXO@latest/butterfly/css/pool.min.css
-
阿里iconfont
https://cdn.jsdelivr.net/gh/sviptzk/StaticFile_HEXO@latest/butterfly/css/iconfont.min.css
js
-
自定义js
https://cdn.jsdelivr.net/gh/sviptzk/StaticFile_HEXO@latest/butterfly/js/pool.min.js
以上三个链接引用后理论上会与我的博客效果一模一样(不包含友链、双评论)。其中:
-
友情链接页面
替换模板即可,无需在添加css(引用以上三个链接的情况下)
-
双评论
修改模板,无需添加css(引用以上三个链接的情况下)
小康的蝴蝶魔改库
这个工具库主要为了方便修改js部分而编写的库,以后可能会扩充也可能是最后一个版本。
具体使用与文档参照:xkTool工具库文档
使用此库后此页面所有有关js部分的代码(css代码参照此文档)均可参照文档使用对象方法调用,而无需复制粘贴冗长的代码。例如:
- 随机背景
- 简单插入阿里svg
- banner图滤镜效果、透明
- 。。。
视觉体验
这部分修改主要是针对进入博客后的直观感受。
背景
与本博客同款背景。开启需关闭背景图片设置,可能也需要关闭js动态背景。具体请自己尝试,本人没有尝试过。(主题的background请设置'#efefef'
)
背景可参照Hexo博客之butterfly主题优化更换背景这篇文章进行魔改
去掉Banner图
效果图:
通过几行JS即可搞定:
var full_page = document.getElementsByClassName("full_page");
if (full_page.length != 0) {
full_page[0].style.background = "transparent";
}
-
2020-05-17
F 修复连同文章页也变透明的bug
鼠标样式
将以下代码复制到你所创建的css文件即可。
body {
cursor: url(https://cdn.jsdelivr.net/gh/sviptzk/HexoStaticFile@latest/Hexo/img/default.cur),
default;
}
a,
img {
cursor: url(https://cdn.jsdelivr.net/gh/sviptzk/HexoStaticFile@latest/Hexo/img/pointer.cur),
default;
}
代码解读:以上代码表示当鼠标在
body
元素及a
、img
元素上时所显示的鼠标为url路径里的样式。因此你可以将里边的文件替换为任意鼠标样式。
鼠标*字跟随样式
这个修改只是一个js,当然你可以全局引入,这样就会在整个博客都有这种效果。当然也可以向我一样,只在某个文章引入。
-
全局引入
直接在配置文件处引入这个js即可。
https://cdn.jsdelivr.net/gh/sviptzk/HexoStaticFile@latest/Hexo/js/mouse_snow.min.js
-
只在部分文章引入
将下边内容复制到markdown即可。注意:如果你的编辑器为你转化成了代码块,请删掉代码块。因为这是一个HTML标签
<script src='https://cdn.jsdelivr.net/gh/sviptzk/HexoStaticFile@latest/Hexo/js/mouse_snow.min.js'></script>
页脚渐变
同样的将以下代码复制到你所创建的css文件即可。
/* 页脚footer */
/* 渐变色滚动动画 */
@-webkit-keyframes Gradient {
0% {
background-position: 0 50%;
}
50% {
background-position: 100% 50%;
}
100% {
background-position: 0 50%;
}
}
@-moz-keyframes Gradient {
0% {
background-position: 0 50%;
}
50% {
background-position: 100% 50%;
}
100% {
background-position: 0 50%;
}
}
@keyframes Gradient {
0% {
background-position: 0 50%;
}
50% {
background-position: 100% 50%;
}
100% {
background-position: 0 50%;
}
}
#footer {
background: linear-gradient(-45deg, #ee7752, #ce3e75, #23a6d5, #23d5ab);
background-size: 400% 400%;
-webkit-animation: Gradient 10s ease infinite;
-moz-animation: Gradient 10s ease infinite;
animation: Gradient 10s ease infinite;
-o-user-select: none;
-ms-user-select: none;
-webkit-user-select: none;
-moz-user-select: none;
user-select: none;
border-top-left-radius: 10px;
border-top-right-radius: 10px;
}
#footer:before {
background-color: rgba(0, 0, 0, 0);
}
滚动条
将以下代码复制到你所创建的css文件即可。
/* 滚动条 */
::-webkit-scrollbar {
width: 8px;
height: 8px;
}
::-webkit-scrollbar-track {
background-color: rgba(73, 177, 245, 0.2);
border-radius: 2em;
}
::-webkit-scrollbar-thumb {
background-color: #49b1f5;
background-image: -webkit-linear-gradient(
45deg,
rgba(255, 255, 255, 0.4) 25%,
transparent 25%,
transparent 50%,
rgba(255, 255, 255, 0.4) 50%,
rgba(255, 255, 255, 0.4) 75%,
transparent 75%,
transparent
);
border-radius: 2em;
}
::-webkit-scrollbar-corner {
background-color: transparent;
}
::-moz-selection {
color: #fff;
background-color: #49b1f5;
}
手机侧边栏默认不展开
这段修改需要将下边的代码复制到新建的js文件中。
var mobile_sidebar_menus = document.getElementById("mobile-sidebar-menus");
var menus_item_child = mobile_sidebar_menus.getElementsByClassName(
"menus_item_child"
);
var menus_expand = mobile_sidebar_menus.getElementsByClassName("menus-expand");
for (var i = 0; i < menus_item_child.length; i++) {
menus_item_child[i].style.display = "none";
menus_expand[i].className += " menus-closed";
}
这里提供一个现成的地址,可以直接在引用处填写。也可以复制上边的代码到你自己的js文件中。
在线地址:https://cdn.jsdelivr.net/gh/sviptzk/HexoStaticFile@latest/Hexo/js/hideMobileSidebar.js
分类卡片折叠
分类卡片隐藏需要同时引入css和js文件。
-
JavaScript代码
var card_category_list = document.getElementsByClassName( "card-category-list child" ); var item = document.getElementsByClassName("card-category-list-item"); function toggle(t) { var display = t.parentElement.nextSibling.style.display; if (display == "none") { t.parentElement.nextSibling.style.display = "block"; t.parentElement.nextSibling.style.height = "100%"; t.className = t.className.replace("fa-chevron-up", "fa-chevron-down"); } else { t.parentElement.nextSibling.style.display = "none"; t.className = t.className.replace("fa-chevron-down", "fa-chevron-up"); } } for (var i = 0; i < card_category_list.length; i++) { card_category_list[i].style.display = "none"; card_category_list[i].style.transition = "all 1s"; card_category_list[i].previousSibling.innerHTML += '<i class="fa fa-chevron-up menus-expand menus-closed" aria-hidden="true" style="margin-left:20px;" οnclick="toggle(this)"></i>'; }
-
CSS代码
#aside_content .card-archives ul.card-archive-list > .card-archive-list-item a span:first-child, #aside_content .card-categories ul.card-category-list > .card-category-list-item a span:first-child { width: auto; min-width: 50%; }
同样的,这个魔改也提供在线地址。
文章表情不换行
这个是一段JS代码,我建议在你需要添加表情的文章引入这段js。如果全局引入可能会拖慢页面加载速度。
<script src="https://cdn.jsdelivr.net/gh/sviptzk/HexoStaticFile@latest/Hexo/js/WithoutLine.min.js"></script>
以上代码,直接在markdown文档最下边写即可。
注意:如果你用的markdown如果将其转为代码块,那么请删除代码块,因为这是一个脚本内容。正确写的姿势如图(typora为例):
错误示例:
部分编辑器可能将其自动转化为代码块,请各位博主注意些!
阅读模式的背景与字体
阅读模式下会给body加一个class名,因此改起来很简单。
.read-mode{
/* 字体大小 */
font-size:17px;
/* 可以在这里引入自定义字体,具体方法请自行百度css引入字体 */
}
.read-mode #web_bg{
/* 背景颜色 */
background:#fdf6e3;
}
任意元素添加动效动画
On DOM load | On hover | On parent hover |
---|---|---|
faa-wrench animated | faa-wrench animated-hover | faa-wrench |
faa-ring animated | faa-ring animated-hover | faa-ring |
faa-horizontal animated | faa-horizontal animated-hover | faa-horizontal |
faa-vertical animated | faa-vertical animated-hover | faa-vertical |
faa-flash animated | faa-flash animated-hover | faa-flash |
faa-bounce animated | faa-bounce animated-hover | faa-bounce |
faa-spin animated | faa-spin animated-hover | faa-spin |
faa-float animated | faa-float animated-hover | faa-float |
faa-pulse animated | faa-pulse animated-hover | faa-pulse |
faa-shake animated | faa-shake animated-hover | faa-shake |
faa-tada animated | faa-tada animated-hover | faa-tada |
faa-passing animated | faa-passing animated-hover | faa-passing |
faa-passing-reverse animated | faa-passing-reverse animated-hover | faa-passing-reverse |
faa-burst animated | faa-burst animated-hover | faa-burst |
faa-falling animated | faa-falling animated-hover | faa-falling |
faa-rising animated | faa-rising animated-hover | faa-rising |
理论上这些动效是可以给任意DOM元素添加的。添加方式很简单,引入一个css库:https://cdn.jsdelivr.net/gh/sviptzk/StaticFile_HEXO@latest/butterfly/css/font-awesome-animation.min.css
然后在DOM元素的类名添加相应的动画即可。
例如网址导航栏可以写为- 网址收藏 || https://dh.xiaokang.me/ || fas fa-infinity faa-shake animated
注意:如果使用
On parent hover
需要向父级元素添加class名faa-parent animated-hover
。其余两个不需要。
MAC代码框美化
将butterfly.yml
的highlight_theme
配置项改为mac
后任意引入下方一个css即可。(也可加入到自己的css文件中)
-
白色代码框
https://cdn.jsdelivr.net/gh/sviptzk/StaticFile_HEXO@latest/butterfly/css/macWhite.css
-
黑色美化版
https://cdn.jsdelivr.net/gh/sviptzk/StaticFile_HEXO@latest/butterfly/css/macblack.css
页面类修改
这部分的修改主要是针对一些特殊的页面,例如友链页。
友情链接页面修改
友情链接修改内容过大,不建议小白修改。
此修改需要替换作者文件(及flink.pug
),位置\themes\Butterfly\layout\
flink.pug
下载地址:https://tzk.lanzous.com/b06lwtwkb
替换完pug模板之后引入此css样式即可:https://cdn.jsdelivr.net/gh/sviptzk/StaticFile_HEXO@latest/butterfly/css/flink.min.css
-
2020-0617
适配蝴蝶3.0版本
-
2020-05-09
加入一行小字效果。
字段说明
至于如何配合使用,请自行尝试(此配置加在link.yml
下即可)示例如下:
class_test:
class_name: class名
class_desc: 小字描述支持html标签
link_list:
name: 小康博客
link: https://antmoe.com
avatar: https://cdn.jsdelivr.net/gh/sviptzk/HexoStaticFile@latest/avatar.jpg
descr: 更多效果自行搭配
# 边框大小 默认为0
width: 0px
# 边框样式 默认 solid
style: solid
# 边框颜色 默认淡蓝色 #49b1f5
color: "#0078e7"
# 自动旋转 可选值 flash(闪现) link_custom(单色呼吸灯) link_custom1(彩色呼吸灯)
custom: link_custom1
# 动画时长设定,默认为0
time: 4s
# name的颜色
namecolor: "#ff9191"
# descr的颜色
descolor: "#ff9191"
# 背景颜色
background: 0
# 鼠标悬停旋转角度
rotate: 360deg
# 自动旋转 latuo左旋转 rauto右旋转
autorotate: "lauto"
# 旋转的