写在前面
因为hexo可以自定义的东西太多了,感觉还是整合到一篇post里会比较好。慢慢更新ing。
next主题下让头像旋转
两种方法让hexo next主题中的头像显示成圆形,且鼠标放上去有旋转效果。
很推荐使用第一种方法,因为最好不要去修改除了/next/source/css/_custom/
文件夹之外的其他4个文件夹里的源码。修改了其他四个文件夹里的源码之后想要还原的话则又要去修改一遍源码,比较麻烦。如果你只修改了_custom/custom.styl
中的源码且想要还原的话,只需将custom.styl
这个文件里面的添加的代码删除即可。
方法1:直接在~/hexo/themes/next/source/css/_custom
文件夹下的costom.styl
文件内添加以下代码:1
2
3
4
5
6
7
8
9
10
11
12// 侧栏头像圆形及旋转效果
.site-author-image {
border: 0px solid rgb(255, 255, 255);
border-radius: 100%;
transition: transform 1.0s ease-out;
}
img:hover {
transform: rotateZ(360deg);
}
.posts-expand .post-body img:hover {
transform: initial;
}
方法2:直接编辑~/hexo/themes/next/source/css/_common/components/sidebar
文件夹下的sidebar-author.styl
文件即可:
将以下代码替换到其中的site-author-img
属性。1
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57.site-author-image {
display: block;
margin: 0 auto;
padding: $site-author-image-padding;
max-width: $site-author-image-width;
height: $site-author-image-height;
border: $site-author-image-border-width solid $site-author-image-border-color;
/* 头像圆形 */
border-radius: 80px;
-webkit-border-radius: 80px;
-moz-border-radius: 80px;
box-shadow: inset 0 -1px 0 #333sf;
/* 鼠标经过头像旋转360度 */
-webkit-transition: -webkit-transform 1.0s ease-out;
-moz-transition: -moz-transform 1.0s ease-out;
transition: transform 1.0s ease-out;
}
img:hover {
/* 鼠标经过停止头像旋转
-webkit-animation-play-state:paused;
animation-play-state:paused; */
/* 鼠标经过头像旋转360度 */
-webkit-transform: rotateZ(360deg);
-moz-transform: rotateZ(360deg);
transform: rotateZ(360deg);
}
/* Z轴旋转动画 */
@-webkit-keyframes play {
0% {
-webkit-transform: rotateZ(0deg);
}
100% {
-webkit-transform: rotateZ(-360deg);
}
}
@-moz-keyframes play {
0% {
-moz-transform: rotateZ(0deg);
}
100% {
-moz-transform: rotateZ(-360deg);
}
}
@keyframes play {
0% {
transform: rotateZ(0deg);
}
100% {
transform: rotateZ(-360deg);
}
}
可自行编辑其中自己想要的属性。
sidebar-author-img
原代码备份:1
2
3
4
5
6
7
8.site-author-image {
display: block;
margin: 0 auto;
padding: $site-author-image-padding;
max-width: $site-author-image-width;
height: $site-author-image-height;
border: $site-author-image-border-width solid $site-author-image-border-color;
}
next主题下让页脚的heart-icon跳动起来
使用NexT主题后,默认的页脚icon会变成user
。可以去Font Awesome自行查找替换。
在next
文件下的主题配置文件中,找到footer
,把icon
后面替换成你在Font Awesome上找到的图标的名字就ok了(不必带 fa- 前缀)。
那么如何让页脚的❤icon跳动起来呢?
首先修改主题配置文件:
1 | 文件位置:~/hexo/themes/next/_config.yml |
1 | footer: |
然后修改footer.swig
:
1 | 文件位置:~/hexo/themes/next/layout/_partials/footer.swig |
1 | <span class="with-love">修改成<span class="with-love" id="heart"> |
接着编辑custom.styl
:
1 | 文件位置:~/hexo/themes/next/source/css/_custom/custom.styl |
在其中加入
1 | // 自定义页脚跳动的心样式 |
其中color
的值可以改成你自己喜欢的,RGB颜色可以参考这里。
效果如下:
hexo上修改代码块自定义样式
在next文件夹下的sidebar-author.styl
文件中添加如下代码:1
文件位置:~/hexo/themes/next/source/css/_custom/custom.styl
1 | // Custom styles. |
可以只修改小代码块。颜色代码可以参考这里。
next主题下修改字体
此特性在版本 5.0.1
中引入,要使用此功能请确保所使用的 NexT 版本在此之后。
在主题配置文件
中找到font
并启用,配置如下:
1 | font: |
对应的family
可在google fonts自行查找。
next主题下加入动态背景
我在用的最新版next主题版本自带5种动态背景。
编辑主题配置文件
, 搜索Canvas-nest
、three_waves
、canvas_lines
、canvas_sphere
、Canvas-ribbon
即可,根据自己的需求设置值为true
或者false
。1
注意: three_waves 在版本 5.1.1 中引入。只能同时开启一种背景动画效果。
如果你有自己的背景代码想放在hexo上,那就继续往下看吧。
先在~/hexo/themes/next/layout
中找到_layout.swig
文件。
在其<body>
里添加:1
2
3<div class="bg_content">
<canvas id="canvas"></canvas>
</div>
仍是该文件,在末尾添加:1
<script type="text/javascript" src="/js/src/dynamic_bg.js"></script>
接着在~/themes/next/source/js/src
中新建文件dynamic_bg.js
,将自己的背景代码添加进去,我用的动态背景代码如下,感谢作者的分享。1
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148var canvas = document.getElementById("canvas");
var ctx = canvas.getContext("2d");
var cw = canvas.width = window.innerWidth,
cx = cw / 2;
var ch = canvas.height = window.innerHeight,
cy = ch / 2;
ctx.fillStyle = "#000";
var linesNum = 16;
var linesRy = [];
var requestId = null;
function Line(flag) {
this.flag = flag;
this.a = {};
this.b = {};
if (flag == "v") {
this.a.y = 0;
this.b.y = ch;
this.a.x = randomIntFromInterval(0, ch);
this.b.x = randomIntFromInterval(0, ch);
} else if (flag == "h") {
this.a.x = 0;
this.b.x = cw;
this.a.y = randomIntFromInterval(0, cw);
this.b.y = randomIntFromInterval(0, cw);
}
this.va = randomIntFromInterval(25, 100) / 100;
this.vb = randomIntFromInterval(25, 100) / 100;
this.draw = function() {
ctx.strokeStyle = "#ccc";
ctx.beginPath();
ctx.moveTo(this.a.x, this.a.y);
ctx.lineTo(this.b.x, this.b.y);
ctx.stroke();
}
this.update = function() {
if (this.flag == "v") {
this.a.x += this.va;
this.b.x += this.vb;
} else if (flag == "h") {
this.a.y += this.va;
this.b.y += this.vb;
}
this.edges();
}
this.edges = function() {
if (this.flag == "v") {
if (this.a.x < 0 || this.a.x > cw) {
this.va *= -1;
}
if (this.b.x < 0 || this.b.x > cw) {
this.vb *= -1;
}
} else if (flag == "h") {
if (this.a.y < 0 || this.a.y > ch) {
this.va *= -1;
}
if (this.b.y < 0 || this.b.y > ch) {
this.vb *= -1;
}
}
}
}
for (var i = 0; i < linesNum; i++) {
var flag = i % 2 == 0 ? "h" : "v";
var l = new Line(flag);
linesRy.push(l);
}
function Draw() {
requestId = window.requestAnimationFrame(Draw);
ctx.clearRect(0, 0, cw, ch);
for (var i = 0; i < linesRy.length; i++) {
var l = linesRy[i];
l.draw();
l.update();
}
for (var i = 0; i < linesRy.length; i++) {
var l = linesRy[i];
for (var j = i + 1; j < linesRy.length; j++) {
var l1 = linesRy[j]
Intersect2lines(l, l1);
}
}
}
function Init() {
linesRy.length = 0;
for (var i = 0; i < linesNum; i++) {
var flag = i % 2 == 0 ? "h" : "v";
var l = new Line(flag);
linesRy.push(l);
}
if (requestId) {
window.cancelAnimationFrame(requestId);
requestId = null;
}
cw = canvas.width = window.innerWidth,
cx = cw / 2;
ch = canvas.height = window.innerHeight,
cy = ch / 2;
Draw();
};
setTimeout(function() {
Init();
addEventListener('resize', Init, false);
}, 15);
function Intersect2lines(l1, l2) {
var p1 = l1.a,
p2 = l1.b,
p3 = l2.a,
p4 = l2.b;
var denominator = (p4.y - p3.y) * (p2.x - p1.x) - (p4.x - p3.x) * (p2.y - p1.y);
var ua = ((p4.x - p3.x) * (p1.y - p3.y) - (p4.y - p3.y) * (p1.x - p3.x)) / denominator;
var ub = ((p2.x - p1.x) * (p1.y - p3.y) - (p2.y - p1.y) * (p1.x - p3.x)) / denominator;
var x = p1.x + ua * (p2.x - p1.x);
var y = p1.y + ua * (p2.y - p1.y);
if (ua > 0 && ub > 0) {
markPoint({
x: x,
y: y
})
}
}
function markPoint(p) {
ctx.beginPath();
ctx.arc(p.x, p.y, 2, 0, 2 * Math.PI);
ctx.fill();
}
function randomIntFromInterval(mn, mx) {
return ~~(Math.random() * (mx - mn + 1) + mn);
}
然后在~/hexo/themes/next/source/css/_custom/custom.styl
文件末尾添加以下内容:1
2
3
4
5
6
7.bg_content {
position: fixed;
top: 0;
z-index: -1;
width: 100%;
height: 100%;
}
最后hexo s
刷新一下吧。
next主题下给每篇文章添加结束标语
在~/hexo/themes/next/layout/_macro
中新建passage-end-tag.swig
文件,添加以下代码至该文件中:1
2
3
4
5<div>
{% if not is_index %}
<div style="text-align:center;color: #FA8072;font-size:10px;">------------- End <i class="fa fa-hourglass-end" aria-hidden="true"></i> Thank For Your Reading -------------</div>
{% endif %}
</div>
其中的icon可以去Font Awesome自行查找替换。字体大小修改其中的font-size
,位置修改其中的text-align
,颜色修改其中的color
,可以参考这里。
接着打开~/hexo/themes/next/layout/_macro/post.swig
文件,在post-body
后,post-footer
前,添加以下内容:1
2
3
4
5<div>
{% if not is_index %}
{% include 'passage-end-tag.swig' %}
{% endif %}
</div>
然后打开主题配置文件
,在末尾添加:1
2
3# 文章末尾添加“本文结束”标记
passage_end_tag:
enabled: true
最后hexo s
刷新一下吧。
hexo上给首页文章添加read-more/查看原文按钮
在文章中写成如下格式即可:1
2
3
4
5前言
<!-- more -->
全文
点击阅读全文
之后,文章会自动定位到所在位置,想要修改成从头阅读需要修改主题配置文件
:1
2# Automatically scroll page to section which is under <!-- more --> mark.
scroll_to_more: 默认true改为false即可
hexo上添加音频播放器
已归档于文章——hexo上的aplayer应用
hexo上添加视频播放器
已归档于文章——hexo上的dplayer应用与嵌入视频的响应式设置
hexo上添加看板娘
已归档于文章——hexo上的live2d应用
next主题下修改文章底部#号tag标签
在~hexo/themes/next/layout/_macro
中找到post.swig
文件,在内搜索el="tag">#
,将#
换成<i class="fa fa-tag"></i>
即可,然后hexo s
刷新预览吧。
想使用其他图标可在Fontawesome内自行查找。
前: 后:
hexo上给文章添加脚注
首先安装hexo-footnotes插件,进入站点根目录1
npm install hexo-footnotes --save
如果hexo可以自动检测所有插件,则不需要修改_config.yml
,
如果不能自动检测,那么在在站点配置文件
中增加:
1 | plugins: |
安装完成后按官方readme的方式书写。
1 | basic footnote[^1] |
注脚的内容最好放在文章的最后面,否则可能会出错误。
next主题下添加本地搜索
首先安装hexo-generator-searchdb插件,进入站点根目录1
npm install hexo-generator-searchdb --save
然后编辑站点配置
文件,添加以下内容到任意位置:1
2
3
4
5search:
path: search.xml
field: post
format: excerpt
limit: 10000
各选项可按官方readme自行修改。
接着编辑主题配置
文件,启用本地搜索功能:1
2
3# Local search
local_search:
enable: true
最后hexo c
&hexo s
预览吧。
next主题下添加404页面
腾讯公益404页面
离家的路有千万条,但回家的路只有一条。
在~/hexo/themes/next/source
目录下新建404.html
页面,在新建页面内添加如下内容:
1 |
|
其中homePageUrl
与homePageName
可自定义。
预览效果:https://blog.yleao.com/wrongpage
自定义diy页面
也是和上面一样的方法,在~/hexo/themes/next/source
文件夹下新建404.html
页面。
自定义页面所需要的css
和js
分别放在~/hexo/themes/next/source/css
文件夹与~/hexo/themes/next/source/js
文件夹内。
预览效果:https://www.yleao.com/wrongpage
hexo上给文章添加锚点
锚点(anchor):其实就是超链接的一种,一种特殊的超链接。
锚点可以在同一页面的不同位置间跳转,其实就是在元素间跳转,常用的场景就是,页面很长,让用户方便在页面不同部分间跳转,类似于脚注。可以用html的代码来书写。
同页面跳转
设置一个锚点链接<a href="#test">锚点</a>
。(注意:href属性的属性值最前面要加#)
在页面中需要的位置设置目标,目标写法<p id="test">目标</p>
。(注意:目标标签的属性值要与锚点链接中的href属性值一样,但不加#,例如我写的href属性值为#test,那么后面id对应的属性值为test)
案例:1
2
3<a href="#red">跳转到红色</a>
<p id="red">红色</p>
红色
跨页面跳转
和同页面跳转差不多,同样设置锚点链接,在href中的要跳转到的页面路径后面追加#+属性值
,
即<a href="跳转页面.html#test">锚点</a>
。
在跳转页面中需要的位置设置目标,目标写法<p id="test">目标</p>
。
案例:
next主题下给文章添加更新时间
个人用的next主题版本为5.1.4,此版本已添加此功能。
只需在主题配置文件中找到updated_at
,默认为false,修改成true即可。
next主题下添加突破容器宽度限制的图片
当使用此标签引用图片时,图片将自动扩大 26%,并突破文章容器的宽度。 此标签使用于需要突出显示的图片, 图片的扩大与容器的偏差从视觉上提升图片的吸引力。 此标签有两种调用方式(详细参看底下示例):
HTML方式:使用这种方式时,为 img 添加属性 class=”full-image”即可。
标签方式:使用 fullimage 或者 简写 fi, 并传递图片地址、 alt 和 title 属性即可。 属性之间以逗号分隔。
标签方式要求 NexT 的版本在 0.4.5 或以上。 若你正在使用的版本比较低,可以选择使用 HTML 方式。
如果要在图片下显示图片的标题,请使用 标签方式 并给定 title 属性。
1 | <!-- HTML方式: 直接在 Markdown 文件中编写 HTML 来调用 --> |
预览效果:
next主题下取消图片边框
直接在~/hexo/themes/next/source/css/_custom
文件夹下的costom.styl
文件内添加以下css代码:
1 | // 去掉图片边框 |
next主题下侧边栏内容修改
直接在~/hexo/themes/next/layout/_macro
文件夹下的sidebar.swig
文件内增减代码即可,记得备份。
例如要删除分类
一栏,则在sidebar.swig
中找到categories
,接着删除以下代码即可:
1 | {% if site.categories.length > 0 %} |
其他内容同理。若想要移动位置则移动对应代码顺序就可以。
next主题下点击侧边栏头像回到博客首页
首先要在主题配置文件
中把头像路径配置好,比如我把头像avatar.png放在~/hexo/themes/next/source/uploads
下,则修改如下:
1 | Sidebar Avatar |
然后再编辑~/hexo/themes/next/layout/_macro
文件夹下的sidebar.swig
文件,在文件中找到如下代码:
1 | <img class="site-author-image" itemprop="image" |
再其前后加上<a href="/"></a>
即可,如下:
1 | <a href="/"> |
next主题下添加文章置顶与置顶标志
安装hexo置顶插件
1 | $ npm uninstall hexo-generator-index --save |
然后在需要置顶的文章的Front-matter
中加上top: 10
(数字>1)即可,多篇置顶文章按top值排序,如下:1
2
3
4
5
6
7
8
9
10
11
12
title: 遍地苦难尘
tags:
- life
- music
- film
categories:
- 生活拾空
abbrlink: 31015
date: 2018-10-11 14:11:08
top: 10
设置置顶标志
打开~/hexo/themes/next/layout/_macro
目录下的post.swig
文件,定位到<div class="post-meta">
后,插入如下代码:1
2
3
4{% if post.top %}
<font color=#FFFFFF><b style="background-color:#A9A9A9"> Top </b></font>
<span class="post-meta-divider">|</span>
{% endif %}
next主题下添加代码块复制功能
下载第三方插件clipboard.js:
保存文件clipboard.js
或者clipboard.min.js
到目录~/hexo/themes/next/source/js/src
下
在~/hexo/themes/next/source/js/src
同目录下,创建clipboard-use.js
,添加如下代码:
1 | /*页面载入完成后,创建复制按钮*/ |
在~/hexo/themes/next/source/css/_custom/custom.styl
文件中添加如下代码:
1 | //代码块复制按钮 |
修改~/hexo/themes/next/layout/_layout.swig
文件,向文件中</body>
前一行插入如下代码:
1 | <script type="text/javascript" src="/js/src/clipboard.min.js"></script> |
如下第22、23行效果:
1 |
|
代码复制功能到此添加完毕,所有文件添加及修改状态如下:
~/hexo/themes/next/source/js/src/clipboard-use.js 新增
~/hexo/themes/next/source/css/_custom/custom.styl 修改
~/hexo/themes/next/layout/_layout.swig 修改
next主题下修改文章内超链接样式
直接在~/hexo/themes/next/source/css/_custom
文件夹下的costom.styl
文件内添加以下css代码:
1 | //文章内链接文本样式 |
next主题下修改侧边栏目录样式
直接在~/hexo/themes/next/source/css/_custom
文件夹下的costom.styl
文件内添加以下css代码:
1 | //侧栏目录链接样式 |
hexo上给文章加密
首先npm install --save hexo-blog-encrypt
下载插件。
下好插件后将password, abstract, message
等字段添加到要加密文章的头部,如下:1
2
3
4
5
6
7
title: Hello World
date: 2020-05-02 18:00:00
password: 设定的密码
abstract: 该博客的摘要,会显示在博客的列表页
message: 查看博客时,密码输入框上面的描述性文字
最后再使用hexo clean && hexo g && hexo s
在本地预览加密的文章。
hexo上给文章添加折叠项
格式如下,其中内容可以是文字和图片等:1
2
3<details><summary>点此打开折叠项</summary><p>
内容
</p></details>
示例:
点此打开折叠项
此处为折叠的项目
hexo上给文章添加豆瓣卡片
首先npm install hexo-douban-card --save
下载插件。
下好插件后在文章中使用以下语法即可:1
2
3
4
5{% douban movie 24745500 %}
{% douban book 30376420 %}
{% douban music 35099703 %}
第一项douban
代表插件名
第二项可选:movie
,book
,music
第三项为豆瓣作品对应id,为豆瓣地址栏中subject
后的数字
如想改动卡片样式,可在hexo\node_modules\hexo-douban-card\templates\assets
里找到style.css
修改即可,我把我自己修改的css贴出来可供参考:
1 | .douban-card-block { |