Hexo+Github博客搭建记录


第一部分 搭建


hexo的初级搭建还有部署到github page上,以及个人域名的绑定。

Hexo搭建步骤

  • 1.安装Git
  • 2.安装Node.js
  • 3.安装Hexo
  • 4.GitHub创建个人仓库
  • 5.生成SSH添加到GitHub
  • 6.将hexo部署到GitHub
  • 7.设置个人域名
  • 8.发布文章

1. 安装Git


为了把本地的网页文件上传到github上面去,需要用到工具———Git[下载地址]Git是目前世界上最先进的分布式版本控制系统,可以有效、高速的处理从很小到非常大的项目版本管理。Git非常强大,建议每个人都去了解一下。廖雪峰老师的Git教程写的非常好,大家可以看一下。Git教程

windows:git官网上下载.exe文件,Download git,安装选项还是全部默认,只不过最后一步添加路径时选择Use Git from the Windows Command Prompt,这样我们就可以直接在命令提示符里打开git了。

顺便说一下,windowsgit安装完后,就可以直接使用git bash来敲命令行了,不用自带的cmdcmd有点难用。

linux:linux来说实在是太简单了,因为最早的git就是在linux上编写的,只需要一行代码

1
sudo apt-get install git

Bash

安装完成后在命令提示符中输入git --version来查看一下版本验证是否安装成功。

2. 安装nodejs


Hexo是基于node.js编写的,所以需要安装一下node.js和里面的npm工具。

windows:下载稳定版或者最新版都可以Node.js,安装选项全部默认,一路点击Next
最后安装好之后,按Win+R打开命令提示符,输入node -vnpm -v,如果出现版本号,那么就安装成功了。

linux:命令行安装:

1
2
sudo apt-get install nodejs
sudo apt-get install npm

Bash

不过不推荐命令行安装,有时候有问题,建议直接到官网去下载编译好的压缩文件,如下所示:

img

然后解压到你指定的文件夹即可,比如我解压到我系统的/home/shw/MySoftwares目录下了,如图:

img

注意本压缩包是.tar.xz格式的,需要两次解压

配置一下环境变量

1
sudo vim /etc/profile

Bash

复制下面两行到刚打开的profile文件最底部(注意node的安装地址/home/shw/MySoftwares/node-v12.8.0-linux-x64换成自己的):

1
2
export NODE_HOME=/home/shw/MySoftwares/node-v12.8.0-linux-x64
export PATH=$PATH:$NODE_HOME/bin

Bash

保存后退出,再执行下面命令将环境变量生效:

1
source /etc/profile

Bash

将目录软链接到全局环境下(命令后面的/usr/local/bin/node是固定的)

1
2
sudo ln -s /home/shw/MySoftwares/node-v12.8.0-linux-x64/node /usr/local/bin/node
sudo ln -s /home/shw/MySoftwares/node-v12.8.0-linux-x64/npm /usr/local/bin/npm

Bash

这样安装好了以后使用npm安装的包(比如:ionic serve),使用包的命令时可能会提示找不到命令,没关系,在用户目录下终端执行下面命令固定写法固定写法:

1
echo -e "export PATH=$(npm prefix -g)/bin:$PATH" >> ~/.bashrc && source ~/.bashrc

Bash

这样我们在所有用户下,都可以使用npm,也可以使用npm安装的包的命令。成功的将nodejs安装并配置到全局环境下。

安装完后,打开命令行终端,输入:

1
2
node -v
npm -v

检查一下有没有安装成功

添加国内镜像源

如果没有梯子的话,可以使用阿里的国内镜像进行加速。

1
npm config set registry https://registry.npm.taobao.org

Bash

3. 安装Hexo


前面gitnodejs安装好后,就可以安装hexo了,你可以先创建一个文件夹MyBlog,用来存放自己的博客文件,然后cd到这个文件夹下(或者在这个文件夹下直接右键git bash打开)。

比如我的博客文件都存放在D:\Study\MyBlog目录下。

在该目录下右键点击Git Bash Here,打开git的控制台窗口,以后我们所有的操作都在git控制台进行,就不用Windows自带的cmd了。

定位到该目录下,输入npm install -g hexo-cli安装Hexo。可能会有几个报错,无视它就行。

1
npm install -g hexo-cli

Bash

安装完后输入hexo -v验证是否安装成功。

至此hexo就安装完了。

接下来初始化一下hexo,即初始化我们的网站,输入hexo init初始化文件夹

1
hexo init MyBlog

Bash

这个MyBlog可以自己取什么名字都行,然后,接着输入npm install安装必备的组件。

1
2
cd MyBlog      //进入这个MyBlog文件夹
npm install

Bash

新建完成后,指定文件夹MyBlog目录下有:

  • node_modules: 依赖包
  • public:存放生成的页面
  • scaffolds:生成文章的一些模板
  • source:用来存放你的文章
  • themes:主题**
  • _config.yml: 博客的配置文件**

这样本地的网站配置也弄好啦,输入hexo g生成静态网页,然后输入hexo s打开本地服务器,

1
2
hexo g
hexo server(或者简写:hexo s))

Bash

然后浏览器打开http://localhost:4000/,就可以看到我们的博客啦,效果如下:

img

ctrl+c关闭本地服务器。

4. 注册Github账号创建个人仓库


接下来就去注册一个github账号,用来存放我们的网站。大多数小伙伴应该都有了吧,作为一个合格的程序猿(媛)还是要有一个的。

打开https://github.com/,新建一个项目仓库`New repository`,如下所示:

img

然后如下图所示,输入自己的项目名字,后面一定要加.github.io后缀,README初始化也要勾上。

img

要创建一个和你用户名相同的仓库,后面加.[http://github.io,只有这样,将来要部署到`GitHub](http://github.xn--io%2C%2C`github-682v24rcn0bge3bnmb63gnr5n8eybxf3aidf/) page的时候,才会被识别,也就是http://xxxx.github.io,其中xxx就是你注册GitHub`的用户名。例如我的:http://shw2018.github.io

5. 生成SSH添加到GitHub


生成SSH添加到GitHub,连接Github与本地。
右键打开git bash,然后输入下面命令:

1
2
git config --global user.name "yourname"
git config --global user.email "youremail"

Bash

这里的yourname输入你的GitHub用户名,youremail输入你GitHub的邮箱。这样GitHub才能知道你是不是对应它的账户。例如我的:

1
2
git config --global user.name "shw2018"
git config --global user.email "hwsun@std.uestc.edu.cn"

Bash

可以用以下两条,检查一下你有没有输对

1
2
git config user.name
git config user.email

Bash

然后创建SSH,一路回车

ssh,简单来讲,就是一个秘钥,其中,id_rsa是你这台电脑的私人秘钥,不能给别人看的,id_rsa.pub是公共秘钥,可以随便给别人看。把这个公钥放在GitHub上,这样当你链接GitHub自己的账户时,它就会根据公钥匹配你的私钥,当能够相互匹配时,才能够顺利的通过git上传你的文件到GitHub上。

1
ssh-keygen -t rsa -C "youremail"

Bash

这个时候它会告诉你已经生成了.ssh的文件夹。在你的电脑中找到这个文件夹。或者git bash中输入

1
cat ~/.ssh/id_rsa.pub

Bash

将输出的内容复制到框中,点击确定保存。

打开github,在头像下面点击settings,再点击SSH and GPG keys,新建一个SSH,名字随便取一个都可以,把你的id_rsa.pub里面的信息复制进去。如图:

img

git bash输入ssh -T git@github.com,如果如下图所示,出现你的用户名,那就成功了。

img

6. 将hexo部署到GitHub


这一步,我们就可以将hexoGitHub关联起来,也就是将hexo生成的文章部署到GitHub上,打开博客根目录下的_config.yml文件,这是博客的配置文件,在这里你可以修改与博客配置相关的各种信息。

修改最后一行的配置:

1
2
3
4
deploy:
type: git
repository: https://github.com/shw2018/shw2018.github.io
branch: master

Yml

repository修改为你自己的github项目地址即可,就是部署时,告诉工具,将生成网页通过git方式上传到你对应的链接仓库中。

这个时候需要先安装deploy-git ,也就是部署的命令,这样你才能用命令部署到GitHub

1
npm install hexo-deployer-git --save

Bash

然后

1
2
3
hexo clean
hexo generate
hexo deploy

Bash

其中 hexo clean清除了你之前生成的东西,也可以不加。 hexo generate顾名思义,生成静态文章,可以用 hexo g缩写 ,hexo deploy部署文章,可以用hexo d缩写

注意deploy时可能要你输入usernamepassword

得到下图就说明部署成功了,过一会儿就可以在http://yourname.github.io 这个网站看到你的博客了!!

img

7. 设置个人域名


现在你的个人网站的地址是yourname.github.io,如果觉得这个网址逼格不太够,这就需要你设置个人域名了。但是需要花钱。

不过,这一步不是必要的,如果目前还不想买域名可以先跳过,继续看后面的,以后想买域名了在还看这块

首先你得购买一个专属域名,xx云都能买,看你个人喜好了。

这篇以腾讯云为例,腾讯云官网购买:

img

然后实名认证后进入腾讯云控制台,点云解析进去,找到你刚买的域名,点进去添加两条解析记录,如下图所示:

img

然后打开你的github博客项目,点击settings,拉到下面Custom domain处,填上你自己的域名,保存:

img

这时候你的项目根目录应该会出现一个名为CNAME的文件了。如果没有的话,打开你本地博客/source目录,我的是D:\Study\MyBlog\source,新建CNAME文件,注意没有后缀。然后在里面写上你的域名,保存。最后运行hexo ghexo d上传到github

过不了多久,再打开你的浏览器,输入你自己的专属域名,就可以看到搭建的网站啦!

8. 写文章、发布文章


首先在博客根目录下右键打开git bash,安装一个扩展npm i hexo-deployer-git

然后输入hexo new post "article title",新建一篇文章。

然后打开D:\Study\MyBlog\source\_posts的目录,可以发现下面多了一个文件夹和一个.md文件,一个用来存放你的图片等数据,另一个就是你的文章文件啦。
你可以会直接在vscode里面编写markdown文件,可以实时预览,也可以用用其他编辑md文件的软件的工具编写。
编写完markdown文件后,根目录下输入hexo g生成静态网页,然后输入hexo s可以本地预览效果,最后输入hexo d上传到github上。这时打开你的github.io主页就能看到发布的文章啦。

到这儿基本第一部分就完成了,已经完整搭建起一个比较简陋的个人博客了,接下来我们就可以对我们的博客进行个性化定制了。

第二部分 定制


我们要定制自己的博客的话,首先就要来了解一下Hexo博客的一些目录和文件的作用,以及如何平滑更换漂亮的主题模板并加入自己的定制源代码实现个性化定制

1. Hexo相关目录文件

1.1 博客目录构成介绍


从上图可以看出,博客的目录结构如下:

1
2
3
4
5
6
7
8
9
10
11
12
- node_modules
- public
- scaffolds
- source
- _data
- _posts
- about
- archives
- categories
- friends
- tags
- themes

Json

node_modulesnode.js各种库的目录,public是生成的网页文件目录,scaffolds里面就三个文件,存储着新文章和新页面的初始设置,source是我们最常用到的一个目录,里面存放着文章、各类页面、图像等文件,themes存放着主题文件,一般也用不到。

我们平时写文章只需要关注source/_posts这个文件夹就行了。

1.2 hexo基本配置


在文件根目录下的_config.yml,就是整个hexo框架的配置文件了。可以在里面修改大部分的配置。详细可参考官方的配置描述

1.2.1 网站


参数描述title网站标题subtitle网站副标题description网站描述author您的名字language网站使用的语言timezone网站时区。Hexo 默认使用您电脑的时区。时区列表。比如说:America/New_York, Japan, 和 UTC

其中,description主要用于SEO,告诉搜索引擎一个关于您站点的简单描述,通常建议在其中包含您网站的关键词。author参数用于主题显示文章的作者。

1.2.2 网址


参数描述url网址root网站根目录 permalink文章的永久链接格式permalink_defaults永久链接中各部分的默认值

在这里,你需要把url改成你的网站域名

permalink,也就是你生成某个文章时的那个链接格式。

比如我新建一个文章叫temp.md,那么这个时候他自动生成的地址就是http://yoursite.com/2018/09/05/temp

以下是官方给出的示例,关于链接的变量还有很多,需要的可以去官网上查找 永久链接

参数结果:year/:month/:day/:title/2019/08/10/hello-world :year-:month-:day-:title.html 2019-08-10-hello-world.html :category/:titlefoo/bar/hello-world

再往下翻,中间这些都默认就好了。

1
theme: landscap

Yml

theme就是选择什么主题,也就是在themes这个文件夹下,在官网上有很多个主题,默认给你安装的是lanscape这个主题。当你需要更换主题时,在官网上下载,把主题的文件放在themes文件夹下,再修改这个主题参数就可以了。

1.2.3 Front-matter


Front-mattermd文件最上方以 ---分隔的区域,用于指定个别文件的变量,举例来说:

1
2
title: Hexo+Github博客搭建记录
date: 2019-08-10 21:44:44

下是预先定义的参数,您可在模板中使用这些参数值并加以利用。

参数描述layout布局title标题date建立日期updated更新日期comments开启文章的评论功能tags标签(不适用于分页)categories分类(不适用于分页)permalink覆盖文章网址

其中,分类和标签需要区别一下,分类具有顺序性和层次性,也就是说FooBar不等于BarFoo;而标签没有顺序和层次。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
title: Hexo+Github博客搭建记录
date: 2022-05-04 21:44:44
author: hongfei
img: /medias/banner/2.jpg
coverImg: /medias/banner/2.jpg
top: true
cover: true
toc: true
password:
mathjax: true
summary: 基于Hexo和Github已有框架下关于个人博客的搭建,
tags:
- Hexo
- Github
- 博客
categories:
- 软件安装与配置

Yml

1.2.4 layout(布局)


1.2.4.1 post

当你每一次使用代码

1
hexo new XXX

Bash

它其实默认使用的是post这个布局,也就是在source文件夹下的_post里面。

Hexo有三种默认布局:postpagedraft,它们分别对应不同的路径,而您自定义的其他布局和post相同,都将储存到source/_posts文件夹。

而new这个命令其实是:

1
hexo new [layout] <title>

Bash

只不过这个layout默认是post罢了。

1.2.4.2 page

如果你想另起一页,那么可以使用

1
hexo new page newpage

Bash

系统会自动给你在source文件夹下创建一个newpage文件夹,以及newpage文件夹中的index.md,这样你访问的newpage对应的链接就是http://xxx.xxx/newpage

1.2.4.3 draft

draft是草稿的意思,也就是你如果想写文章,又不希望被看到,那么可以

1
hexo new draft newdraft

Bash

这样会在source/_draft中新建一个newdraft.md文件,如果你的草稿文件写的过程中,想要预览一下,那么可以使用

1
hexo server --draft

Bash

在本地端口中开启服务预览。

如果你的草稿文件写完了,想要发表到post中,

1
hexo publish draft newdraft

Bash

就会自动把newdraft.md发送到post中。

2. 更换主题


我们在了解Hexo博客文件基础之后,知道主题文件就放在themes文件下,那么我们就可以去Hexo官网下载喜欢的主题,复制进去然后修改参数即可。
网上大多数主题都是github排名第一的Next主题,但是我个人不是很喜欢,我在网上看到一个主题感觉还不错:hexo-theme-matery,地址在传送门。这个主题看着比较漂亮,并且响应式比较友好,点起来很舒服,功能也比较很多。

当然,人各有异,这个主题风格也不一定是你喜欢,那么你也可以跟着这教程类似的方法替换成你喜欢的就行了。

特性:

  • 简单漂亮,文章内容美观易读
  • Material Design 设计
  • 响应式设计,博客在桌面端、平板、手机等设备上均能很好的展现
  • 首页轮播文章及每天动态切换 Banner 图片
  • 瀑布流式的博客文章列表(文章无特色图片时会有 24 张漂亮的图片代替)
  • 时间轴式的归档页
  • 词云的标签页和雷达图的分类页
  • 丰富的关于我页面(包括关于我、文章统计图、我的项目、我的技能、相册等)
  • 可自定义的数据的友情链接页面
  • 支持文章置顶和文章打赏
  • 支持 MathJax
  • TOC 目录
  • 可设置复制文章内容时追加版权信息
  • 可设置阅读文章时做密码验证
  • GitalkGitmentValineDisqus 评论模块(推荐使用 Gitalk
  • 集成了不蒜子统计、谷歌分析(Google Analytics)和文章字数统计等功能
  • 支持在首页的音乐播放和视频播放功能

他的介绍文档写得非常的详细,还有中英文两个版本。效果图如下:

img

首先先按照文档教程安装一遍主题,然后是可以正常打开的,如果你是一般使用的话,基本没啥问题了。不过有些地方有些地方可以根据你自己的习惯和喜好修改一下, 下面记录一下我这个博客修改了的一些地方。

2.1 新建文章模板修改


首先为了新建文章方便,我们可以修改一下文章模板,建议将/scaffolds/post.md修改为如下代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
---
title: {{ title }}
date: {{ date }}
author:
img:
coverImg:
top: false
cover: false
toc: true
mathjax: false
password:
summary:
tags:
categories:
---

Json

这样新建文章后 一些Front-matter参数不用你自己补充了,修改对应信息就可以了。

2.2 添加404页面


原来的主题没有404页面,我们加一个。首先在/source/目录下新建一个404.md,内容如下:

1
2
3
4
5
title: 404
date: 2019-08-5 16:41:10
type: "404"
layout: "404"
description: "Oops~,我崩溃了!找不到你想要的页面 :("

Json

然后在/themes/matery/layout/目录下新建一个404.ejs文件,内容如下:

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
<style type="text/css">
/* don't remove. */
.about-cover {
height: 75vh;
}
</style>

<div class="bg-cover pd-header about-cover">
<div class="container">
<div class="row">
<div class="col s10 offset-s1 m8 offset-m2 l8 offset-l2">
<div class="brand">
<div class="title center-align">
404
</div>
<div class="description center-align">
<%= page.description %>
</div>
</div>
</div>
</div>
</div>
</div>

<script>
// 每天切换 banner 图. Switch banner image every day.
$('.bg-cover').css('background-image', 'url(/medias/banner/' + new Date().getDay() + '.jpg)');
</script>

Html

2.3“关于”页面增加简历(可选)


修改/themes/matery/layout/about.ejs,找到<div class="card">标签,然后找到它对应的</div>标签,接在后面新增一个card,语句如下:

1
2
3
4
5
6
7
8
9
10
11
12
<div class="card">
<div class="card-content">
<div class="card-content article-card-content">
<div class="title center-align" data-aos="zoom-in-up">
<i class="fa fa-address-book"></i>&nbsp;&nbsp;<%- __('myCV') %>
</div>
<div id="articleContent" data-aos="fade-up">
<%- page.content %>
</div>
</div>
</div>
</div>

Html

这样就会多出一张card,然后可以在/source/about/index.md下面写上你的简历了,当然这里的位置随你自己设置,你也可以把简历作为第一个card

2.4 数学公式渲染和代码高亮


2.4.1 解决mathjax与代码高亮的冲突

如果你按照教程安装了代码高亮插件hexo-prism-plugin,单独使用是没有问题的,但如果你又使用了mathjax,并且按照网上教程,安装kramed插件并修改了js文件里的正则表达式(为了解决markdownmathjax的语法冲突),那你的代码就无法高亮了。解决方法很简单,别用kramed插件了,还用原来自带的marked插件,直接改它的正则表达式就行了。

2.4.2 加数学公式显示

打开/themes/matery/layout中的post.ejs文件,在最下方粘贴如下代码:

1
<script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=default"></script>

Javascript

由于markdown语法与mathjax语法存在冲突,所以还需要修改源文件。

打开/node_modules/marked/lib中的marked.js文件,第539行的escape:处替换成:

1
escape: /^$[`*\[\]()#$+\-.!_>])/

Js

第553行的em:处替换成:

1
em: /^\*((?:\*\*|[\s\S])+?)\*(?!\*)/

Js

这时在文章里写数学公式基本没有问题了,但是要注意:
数学公式中如果出现了连续两个{,中间一定要加空格!

举个例子:
行内公式:y=f(x)y=f(x)
代码:

1
$y = f(x)$

Tex

行间公式:

y=fg1(x)y=fg1(x)

代码:

1
\\[y = {f_{ {g_1}}}(x)\\]

Tex

注意上面花括号之间有空格!

2.5 增加建站时间


修改/themes/matery/layout/_partial中的footer.ejs,在最后加上:

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
<script language=javascript>
function siteTime() {
window.setTimeout("siteTime()", 1000);
var seconds = 1000;
var minutes = seconds * 60;
var hours = minutes * 60;
var days = hours * 24;
var years = days * 365;
var today = new Date();
var todayYear = today.getFullYear();
var todayMonth = today.getMonth() + 1;
var todayDate = today.getDate();
var todayHour = today.getHours();
var todayMinute = today.getMinutes();
var todaySecond = today.getSeconds();
/* Date.UTC() -- 返回date对象距世界标准时间(UTC)1970年1月1日午夜之间的毫秒数(时间戳)
year - 作为date对象的年份,为4位年份值
month - 0-11之间的整数,做为date对象的月份
day - 1-31之间的整数,做为date对象的天数
hours - 0(午夜24点)-23之间的整数,做为date对象的小时数
minutes - 0-59之间的整数,做为date对象的分钟数
seconds - 0-59之间的整数,做为date对象的秒数
microseconds - 0-999之间的整数,做为date对象的毫秒数 */
var t1 = Date.UTC(2017, 09, 11, 00, 00, 00); //北京时间2018-2-13 00:00:00
var t2 = Date.UTC(todayYear, todayMonth, todayDate, todayHour, todayMinute, todaySecond);
var diff = t2 - t1;
var diffYears = Math.floor(diff / years);
var diffDays = Math.floor((diff / days) - diffYears * 365);
var diffHours = Math.floor((diff - (diffYears * 365 + diffDays) * days) / hours);
var diffMinutes = Math.floor((diff - (diffYears * 365 + diffDays) * days - diffHours * hours) / minutes);
var diffSeconds = Math.floor((diff - (diffYears * 365 + diffDays) * days - diffHours * hours - diffMinutes * minutes) / seconds);
document.getElementById("sitetime").innerHTML = "本站已运行 " +diffYears+" 年 "+diffDays + " 天 " + diffHours + " 小时 " + diffMinutes + " 分钟 " + diffSeconds + " 秒";
}/*因为建站时间还没有一年,就将之注释掉了。需要的可以取消*/
siteTime();
</script>

Js

然后在合适的地方(比如copyright声明后面)加上下面的代码就行了:

1
<span id="sitetime"></span>

Html

2.6 修改不蒜子初始化计数


因为不蒜子至今未开放注册,所以没办法在官网修改初始化,只能自己动手了。和上一条一样,我们在/themes/matery/layout/_partial里的footer.ejs文件最后加上:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<script>
$(document).ready(function () {

var int = setInterval(fixCount, 50); // 50ms周期检测函数
var pvcountOffset = 80000; // 初始化首次数据
var uvcountOffset = 20000;

function fixCount() {
if (document.getElementById("busuanzi_container_site_pv").style.display != "none") {
$("#busuanzi_value_site_pv").html(parseInt($("#busuanzi_value_site_pv").html()) + pvcountOffset);
clearInterval(int);
}
if ($("#busuanzi_container_site_pv").css("display") != "none") {
$("#busuanzi_value_site_uv").html(parseInt($("#busuanzi_value_site_uv").html()) + uvcountOffset); // 加上初始数据
clearInterval(int); // 停止检测
}
}
});
</script>

Js

然后把上面几行有段代码:

1
2
3
4
5
6
7
8
9
10
11
<% if (theme.busuanziStatistics && theme.busuanziStatistics.totalTraffic) { %>
<span id="busuanzi_container_site_pv">
<i class="fa fa-heart-o"></i>
本站总访问量 <span id="busuanzi_value_site_pv" class="white-color"></span>
</span>
<% } %>
<% if (theme.busuanziStatistics && theme.busuanziStatistics.totalNumberOfvisitors) { %>
<span id="busuanzi_container_site_uv">
人次,&nbsp;访客数 <span id="busuanzi_value_site_uv" class="white-color"></span> 人.
</span>
<% } %>

Html

修改为:

1
2
3
4
5
6
7
8
9
10
11
<% if (theme.busuanziStatistics && theme.busuanziStatistics.totalTraffic) { %>
<span id="busuanzi_container_site_pv" style='display:none'>
<i class="fa fa-heart-o"></i>
本站总访问量 <span id="busuanzi_value_site_pv" class="white-color"></span>
</span>
<% } %>
<% if (theme.busuanziStatistics && theme.busuanziStatistics.totalNumberOfvisitors) { %>
<span id="busuanzi_container_site_uv" style='display:none'>
人次,&nbsp;访客数 <span id="busuanzi_value_site_uv" class="white-color"></span> 人.
</span>
<% } %>

Html

其实就是增加了两个style='display:none'而已。

2.7 添加动漫人物


其实三步就行了,不用像网上有些教程那么复杂。

第一步:

1
npm install --save hexo-helper-live2d

Bash

第二步:

1
npm install live2d-widget-model-shizuku

Bash

这里的动漫模型可以改,只需要下载对应模型就行了,你可以官方仓库去看有哪些模型,下载你喜欢的就行。

第三步:
在根目录配置文件中添加如下代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
live2d:
enable: true
scriptFrom: local
pluginRootPath: live2dw/
pluginJsPath: lib/
pluginModelPath: assets/
tagMode: false
log: false
model:
use: live2d-widget-model-shizuku
display:
position: right
width: 150
height: 300
mobile:
show: false
react:
opacity: 0.7

Yml

然后hexo ghexo s就能预览出效果了,但是有个注意的地方,这个动漫人物最好不要和不蒜子同时使用,不然不蒜子会显示不出来。至于解决办法后续更新。

解决动漫人物和不蒜子不能同时使用的bug(2019.08.11)

打开themes\matery\layout\_partial中的footer.ejs,将本站总访问量和访客数的代码改为如下:

1
2
3
4
5
6
7
8
9
10
11
12
<% if (theme.busuanziStatistics && theme.busuanziStatistics.totalTraffic) { %>      
<span id="busuanzi_container_site_pv" style='display:none'></span>
<i class="fa fa-heart-o"></i>
本站总访问量 <span id="busuanzi_value_site_pv" class="white-color"></span>

<% } %>

<% if (theme.busuanziStatistics && theme.busuanziStatistics.totalNumberOfvisitors) { %>
<span id="busuanzi_container_site_uv" style='display:none'></span>
人次,&nbsp;访客数 <span id="busuanzi_value_site_uv" class="white-color"></span> 人.

<% } %>

Js

变化就在下面两句,将源代码对应字段后面的</span>写在前面了。

1
2
<span id="busuanzi_container_site_pv" style='display:none'></span>
<span id="busuanzi_container_site_uv" style='display:none'></span>

Js

发现按照上面改了过后,又出现一个新bug:文章头部的阅读次数不显示了,解决办法:(2019.08.11)

打开themes\matery\layout\_partial中的post-detail.ejs,找到对应代码字段:

1
2
3
4
5
6
7
<% if (theme.busuanziStatistics && theme.busuanziStatistics.enable) { %>
<div id="busuanzi_container_page_pv" class="info-break-policy">
<i class="fa fa-eye fa-fw"></i><%- __('readCount') %>:&nbsp;&nbsp;
<span id="busuanzi_value_page_pv" ></span>
</div>

<% } %>

Js

修改为下面的就可以了:

1
2
3
4
5
6
<% if (theme.busuanziStatistics && theme.busuanziStatistics.enable) { %>
<span id="busuanzi_container_site_pv" style='display:none'></span>
<i class="fa fa-eye fa-fw"></i><%- __('readCount') %>:&nbsp;&nbsp;
<span id="busuanzi_value_page_pv" ></span>

<% } %>

Js

2.8 添加评论插件


由于这个主题自带了gittalkgitmentvaline等评论插件,所以我们只需要对应插件参数就行了,这个博客用的是gittalk,如下:

img

当然也可以用其他评论插件,只需要配置对应项就是了,不是自带的可以照着网上的教程自己弄一个,类似的文章有很多,可以搜索关键字就行了。

2.9 添加网易云音乐BGM


写文章的时候,想插入一段BGM怎么办?

其实我们可以借助一些在线音乐的外链播放方式,首先打开网易云网页版,找到想听的歌曲,然后点击生成外链:

img

可能你会遇到问题,比如点击生成外链会提示你由于版权原因,不能生成,那么可以用下面办法目前还有效,不知道后面会不会失效目前还有效,不知道后面会不会失效

  1. (以 Chrome为例,其他浏览器类似) 打开歌单页面,在“生成外链播放器”上右击,点击审查元素(检查)ctrl+shift+i;
  2. 接着找到生成外链播放器这段文字直接双击复制前面的/outchain/2/20707408/

img

  1. 然后在浏览器地址栏修改歌单链接,示例:http://music.163.com/#//outchain/2/20707408/
  2. 然后就转到外链设置页面了。

复制如下代码:

img

粘贴到文章对应位置就行了,为了美观,设置一下居中,具体代码如下:

1
<div align="middle">这里粘贴刚刚复制的代码</div>

Html

2.10 博客音乐板块


如果我们自己写博客写疲劳了,想放松一下听听歌又不想切出博客主页,那么我们可以自己定制一个博客音乐播放界面,把自己喜欢的歌曲都放进来,这里用到是Aplayer插件,但是歌曲来源需要我们自己定义,但是,因为各大音乐平台,由于版权原因,很多歌曲是不支持外链播放的,难道我们就必须每首歌下载然后上传云空间,再获取词曲封面么?这就比较麻烦了。其实不然,研究了半个小时,我发现可以采取下面的办法,很方便:

  • 首先我们找到网易云在线平台,任意找到一首歌点进去播放,可以在地址栏拿到音乐ID
  • 然后通过下面网址:http://music.163.com/song/media/outer/url?id=XXXXXX.mp3, XXXXXX就是歌曲ID号,每一首歌我们只需要换掉这个ID号就行了,就相当于每一首的外链了
  • 最后封面图也可以按F12去找页面元素的链接,填到对应的musics.jason文件中就可以,批量填入,听到好听的歌曲随时更换随时新增,很方便。

操作如下图:

img

2.11 增加emoji支持


为博客新增对emoji表情的支持,使用到了 hexo-filter-github-emojis 的 Hexo 插件来支持 emoji表情的生成,把对应的markdown emoji语法(::,例如::smile: :smile:)转变成会跳跃的emoji表情,安装命令如下:

1
npm install hexo-filter-github-emojis --save

Bash

在 Hexo 根目录下的 _config.yml 文件中,新增以下的配置项:

1
2
3
4
5
6
githubEmojis:
enable: true
className: github-emoji
inject: true
styles:
customEmojis:

Yaml

执行 hexo clean && hexo g 重新生成博客文件,然后就可以在文章中对应位置看到你用emoji语法写的表情了。
如下图:

emoji支持

emoji支持

2.12 Valine评论模块修改


matery主题已经集成Valine评论模块,在主题配置文件.yml中配置相应的字段就行了。enable: trueXXX字段是需要自己注册登录leancloud官网,创建应用然后获取appIdappKey,其他参数根据自己的需求修改就是,如下:

1
2
3
4
5
6
7
8
9
10
valine:
enable: true
appId: XXXXXXXXXXXXXXXXXXXXX
appKey: XXXXXXXXXXXXXXXXXXXX
notify: true
verify: true
visitor: true
avatar: 'mm' # Gravatar style : mm/identicon/monsterid/wavatar/retro/hide
pageSize: 10
placeholder: 'just go go' # Comment Box placeholder

Yml

注意:Valine用在matery主题上有个bug就是第一条评论位置会错位

如下图:

位置错位

位置错位

解决办法:
F12开发者模式,控制台定位bug位置,修改参数,调整对应主题源文件参数,得以解决,如下图示:

定位bug位置

定位bug位置

修改图示

修改图示

2.13 添加博客动态标签


原理就是给博客增加一个事件判断,如下图所示:

img

img

打开博客主题文件夹,路径:themes/matery/layout/layout.ejs,在对应位置添加如下代码:

1
2
3
4
5
6
7
8
9
10
<script type="text/javascript">
var OriginTitile = document.title,
st;
document.addEventListener("visibilitychange", function () {
document.hidden ? (document.title = "看不见我🙈~看不见我🙈~", clearTimeout(st)) : (document.title =
"(๑•̀ㅂ•́) ✧被发现了~", st = setTimeout(function () {
document.title = OriginTitile
}, 3e3))
})
</script>

Js

然后 hexo clean && hexo g 即可。

2.14 添加鼠标点击烟花爆炸效果


在 /themes/matery/source/js 新建文件 fireworks.js,并添加如下代码

Download Now

然后在 /themes/matery/layout/_partial/footer.ejs 中添加如下代码:

1
2
3
4
5
<% if (theme.fireworks.enable) { %>
<canvas class="fireworks" style="position: fixed; left: 0; top: 0; z-index: 1; pointer-events: none;" ></canvas>
<script type="text/javascript" src="//cdn.bootcss.com/animejs/2.2.0/anime.min.js"></script>
<script type="text/javascript" src="/js/fireworks.js"></script>
<% } %>

Js

在主题配置文件 .yml中配置:

1
2
3
# 鼠标点击烟花爆炸动效
fireworks:
enable: true

Yml

2.15 添加页面樱花飘落动效


在 /themes/matery/source/js 新建文件 sakura.js,并添加如下代码

Download Now

然后在 /themes/matery/layout/_partial/head.ejs 中添加如下代码:

1
2
3
4
5
6
7
8
9
<% if (theme.sakura.enable) { %>
<script type="text/javascript">
//只在桌面版网页启用特效
var windowWidth = $(window).width();
if (windowWidth > 768) {
document.write('<script type="text/javascript" src="/js/sakura.js"></script>');
}
</script>
<% } %>

Js

在主题配置文件 .yml中配置:

1
2
3
# 页面樱花飘落动效
sakura:
enable: true

Yml

2.16 添加鼠标点击文字特效


在 /themes/matery/source/js 新建文件 wenzi.js,并添加如下代码

Download Now

然后在 /themes/matery/layout/_partial/head.ejs 中添加如下代码:

1
2
3
4
5
6
7
8
9
<% if (theme.wenzi.enable) { %>
<script type="text/javascript">
//只在桌面版网页启用特效
var windowWidth = $(window).width();
if (windowWidth > 768) {
document.write('<script type="text/javascript" src="/js/wenzi.js"></script>');
}
</script>
<% } %>

Js

在主题配置文件 .yml中配置:

1
2
3
# 页面樱花飘落动效
wenzi:
enable: true

Yml

2.17 添加页面雪花飘落动效


在 /themes/matery/source/js 新建文件 xuehuapiaoluo.js,并添加如下代码

Download Now

然后在 /themes/matery/layout/_partial/head.ejs 中添加如下代码:

1
2
3
4
5
6
7
8
9
<% if (theme.xuehuapiaoluo.enable) { %>
<script type="text/javascript">
//只在桌面版网页启用特效
var windowWidth = $(window).width();
if (windowWidth > 768) {
document.write('<script type="text/javascript" src="/js/xuehuapiaoluo.js"></script>');
}
</script>
<% } %>

Js

在主题配置文件 .yml中配置:

1
2
3
# 页面樱花飘落动效
xuehuapiaoluo:
enable: true

Yml

2.18 添加博客天气插件


在搜寻插件的过程中无意间用 google 搜到的一个网站,使用非常简单,在这里附上插件添加的方法

中国天气网:https://cj.weather.com.cn/plugin/pc

选择自定义插件—>自定义样式——>生成代码,然后会生成这样一段代码

1
2
3
<!-- Weather Widget --> 
<script type="text/javascript"> WIDGET = {FID: 'your FID'}</script>
<script type="text/javascript" src="https://apip.weatherdt.com/float/static/js/r.js?v=1111"></script>

Html

在 /themes/matery/source/layout/_widget 新建文件 weather.ejs,把上面生成的代码添加进入,可以设置只有桌面端显示,如下修改:

1
2
3
4
5
6
7
8
9
10
11
12
13
<!-- 天气接口  洪卫 shw2018 add 2019.09.09 -->
<script type="text/javascript">
WIDGET = {FID: '1tFpFZ5Mtj'}
</script>
<!-- <script type="text/javascript" src="https://apip.weatherdt.com/float/static/js/r.js?v=1111"></script> -->

<script type="text/javascript">
//只在桌面版网页启用特效
var windowWidth = $(window).width();
if (windowWidth > 768) {
document.write('<script type="text/javascript" src="https://apip.weatherdt.com/float/static/js/r.js?v=1111"><\/script>');
}
</script>

Html

然后在 /themes/matery/layout/_partial/layout.ejs 中添加如下代码:

1
2
3
4
<!-- 天气接口控件  洪卫 shw2018 add 2019.09.09 -->
<% if (theme.weather.enable) { %>
<%- partial('_widget/weather') %>
<% } %>

Js

在主题配置文件 .yml中配置:

1
2
3
# 天气接口插件
weather:
enable: true

Yml

展示效果可以参考我的主页

当然,如果你不想搞这么复杂,可以直接将下面代码插入 /themes/matery/layout/_partial/layout.ejs 中即可使用:

1
2
3
4
<script type="text/javascript">
WIDGET = {FID: '1tFpFZ5Mtj'}
</script>
<script type="text/javascript" src="https://apip.weatherdt.com/float/static/js/r.js?v=1111"></script>

Html

2.19 修复 Valine 头像不显示问题

关于头像显示问题,先去注册Gravatar,之前看文档说是七天的同步时间,结果一直也没有显示头像,检查查看头像链接,发现把&v=1.3.x 去掉就可以了,于是下载 js 文件 valine,下载后然后编辑,搜索关键字 &v=,找到 g.params=”?d=”+i.indexOf(ai.indexOf(a>-1?a:”mp”)+”&v=”+o+d,将 "&v="+o+d 删除即可,然后在 Gravatar 拿到头像的 url 填上去就行了

1
2
3
4
5
6
7
8
9
10
11
valine:
enable: true
appId:
appKey:
notify: true
verify: true
visitor: true
# avatar: 'mp' # Gravatar style : mm/identicon/monsterid/wavatar/retro/hide
avatar: https://s.gravatar.com/avatar/0007991f99268c04f1aa4cdd9bea93b4?s=80
pageSize: 10
placeholder: '没有Github账号的在这里留言评论~' # Comment Box placeholder

Yml

原因就是链接后跟了个 &v=1.3.x,解决就是将这段删掉就可以了,具体到 Valine.mini.js 文件就是删掉 &v="+o+d即可

2.20 增加二级菜单

都知道,我们标题栏宽度有限,我们项目一多了,就放不下了,这时候你肯定就需要一个二级菜单来拆分一下项目,既可以减少标题栏项目数,使之更加清爽,又可以间项目分类,逻辑清晰。

好了,如果你用的matery主题,那么废话不多说,直接上教程,其实需要修改的就四个地方:matery.css/matery.js/navgation.ejs/mobile-nav.ejs

第一步,在 /themes/matery/layout/_partial 中找到 mobile-nav.ejs ,找到下面这段代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<ul class="menu-list mobile-menu-list">
<% Object.keys(theme.menu).forEach(function(key) { %>
<li>
<a href="<%- theme.menu[key].url %>" class="waves-effect waves-light">
<% if (theme.menu[key].icon && theme.menu[key].icon.length > 0) { %>
<i class="fa fa-fw <%- theme.menu[key].icon %>"></i>
<% } else { %>
<i class="fa fa-fw fa-link"></i>
<% } %>
<%- (config.language === 'zh-CN' && menuMap.has(key)) ? menuMap.get(key) : key %>
</a>
</li>
<% }); %>
<% if (theme.githubLink && theme.githubLink.enable) { %>
<li><div class="divider"></div></li>
<li>
<a href="<%- theme.githubLink.url %>" class="waves-effect waves-light" target="_blank">
<i class="fa fa-github-square fa-fw"></i><%- theme.githubLink.title %>
</a>
</li>
<% } %>
</ul>

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
<!-- 支持二级菜单特性 洪卫 shw2018 modify 2019.09.17  -->
<ul class="menu-list mobile-menu-list">
<% Object.keys(theme.menu).forEach(function(key) { %>
<li class="m-nav-item">
<% if(!theme.menu[key].children) { %>
<a href="<%- theme.menu[key].url %>" class="waves-effect waves-light">
<% if (theme.menu[key].icon && theme.menu[key].icon.length > 0) { %>
<i class="fa fa-fw <%- theme.menu[key].icon %>"></i>
<% } else { %>
<i class="fa fa-fw fa-link"></i>
<% } %>
<%- (config.language === 'zh-CN' && menuMap.has(key)) ? menuMap.get(key) : key %>
</a>
<% } else { %>
<a href="javascript:;">
<% if (theme.menu[key].icon && theme.menu[key].icon.length > 0) { %>
<i class="fa fa-fw <%- theme.menu[key].icon %>"></i>
<% } else { %>
<i class="fa fa-fw fa-link"></i>
<% } %>
<%- (config.language === 'zh-CN' && menuMap.has(key)) ? menuMap.get(key) : key %>
<span class="m-icon"><i class="fa fa-chevron-right"></i></span>
</a>
<ul>
<% for(let childrenLink of theme.menu[key].children){ %>
<li>
<a href="<%- url_for(childrenLink.url)%>" >
<% if (childrenLink.icon && childrenLink.icon.length > 0) { %>
<i class="fa <%- childrenLink.icon %>" style="left: 25px; position: absolute;"></i>
<% } %>
<span><%- childrenLink.name %></span>
</a>
</li>
<% } %>
</ul>
<% } %>
</li>
<% }); %>

<% if (theme.githubLink && theme.githubLink.enable) { %>
<li><div class="divider"></div></li>
<li>
<a href="<%- theme.githubLink.url %>" class="waves-effect waves-light" target="_blank">
<i class="fa fa-github-square fa-fw"></i><%- theme.githubLink.title %>
</a>
</li>
<% } %>
</ul>

Js

第二步,在 /themes/matery/layout/_partial 中找到 navagtion.ejs ,找到下面这段代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<a href="#" data-target="mobile-nav" class="sidenav-trigger button-collapse"><i class="fa fa-navicon"></i></a>
<ul class="right">
<% Object.keys(theme.menu).forEach(function(key) { %>
<li class="hide-on-med-and-down">
<a href="<%- theme.menu[key].url %>" class="waves-effect waves-light">
<% if (theme.menu[key].icon && theme.menu[key].icon.length > 0) { %>
<i class="fa <%- theme.menu[key].icon %>"></i>
<% } %>
<span><%- (config.language === 'zh-CN' && menuMap.has(key)) ? menuMap.get(key) : key %></span>
</a>
</li>
<% }); %>
<li>
<a href="#searchModal" class="modal-trigger waves-effect waves-light">
<i id="searchIcon" class="fa fa-search" title="<%= __('search') %>"></i>
</a>
</li>
</ul>

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
<!-- 支持二级菜单特性 洪卫 shw2018 modify 2019.09.17  -->
<a href="#" data-target="mobile-nav" class="sidenav-trigger button-collapse"><i class="fa fa-navicon"></i></a>
<ul class="right nav-menu">
<% Object.keys(theme.menu).forEach(function(key) { %>
<li class="hide-on-med-and-down nav-item" >

<% if(!theme.menu[key].children) { %>
<a href="<%- theme.menu[key].url %>" class="waves-effect waves-light">
<% if (theme.menu[key].icon && theme.menu[key].icon.length > 0) { %>
<i class="fa <%- theme.menu[key].icon %>"></i>
<% } %>
<span><%- (config.language === 'zh-CN' && menuMap.has(key)) ? menuMap.get(key) : key %></span>
</a>

<% } else { %>
<a href="<%- theme.menu[key].url %>" class="waves-effect waves-light">
<% if (theme.menu[key].icon && theme.menu[key].icon.length > 0) { %>
<i class="fa <%- theme.menu[key].icon %>"></i>
<% } %>
<span><%- (config.language === 'zh-CN' && menuMap.has(key)) ? menuMap.get(key) : key %></span>
<i class="fa fa-chevron-down" aria-hidden="true"></i>
</a>

<ul class="sub-nav menus_item_child ">
<% for(let childrenLink of theme.menu[key].children){ %>
<li>
<a href="<%- url_for(childrenLink.url)%>" >
<% if (childrenLink.icon && childrenLink.icon.length > 0) { %>
<i class="fa <%- childrenLink.icon %>" style="margin-top: -20px;"></i>
<% } %>
<span><%- childrenLink.name %></span>
</a>
</li>
<% } %>
</ul>
<% } %>
</li>
<% }); %>

<li>
<a href="#searchModal" class="modal-trigger waves-effect waves-light">
<i id="searchIcon" class="fa fa-search" title="<%= __('search') %>"></i>
</a>
</li>
</ul>

Js

第三步,在 /themes/matery/source/css 中找到 matery.css ,在最后添加下面这段代码:

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
/* 二级菜单样式定义 洪卫 shw2018 add 2019.09.17 */

.nav-menu {}

.nav-menu li .sub-nav {
position: absolute;
top: 77px;
list-style: none;
margin-left: -20px;
display: none;
}

.nav-menu li .sub-nav li {
text-align: center;
clear: left;
width: 140px;
height: 35px;
line-height: 35px;
position: relative;
}

.nav-menu li .sub-nav li a {
height: 34px;
line-height: 34px;
width: 138px;
padding: 0px;
display: inline-block;
border-radius: 5px;
color: #000;
}

.nav-show i[aria-hidden=true] {
-webkit-transform: rotate(180deg) !important;
-moz-transform: rotate(180deg) !important;
-o-transform: rotate(180deg) !important;
-ms-transform: rotate(180deg) !important;
transform: rotate(180deg) !important;
-webkit-transition: all .3s;
-moz-transition: all .3s;
-o-transition: all .3s;
-ms-transition: all .3s;
transition: all .3s;
}

.menus_item_child {
background-color: rgba(255, 255, 255, .8);
width: fit-content;
border-radius: 10px;
-webkit-box-shadow: 0 5px 20px -4px rgba(0, 0, 0, .5);
box-shadow: 0 5px 20px -4px rgba(0, 0, 0, .5);
display: none;
opacity: 0.98;
-ms-filter: none;
filter: none;
-webkit-animation: sub_menus .3s .1s ease both;
-moz-animation: sub_menus .3s .1s ease both;
-o-animation: sub_menus .3s .1s ease both;
-ms-animation: sub_menus .3s .1s ease both;
animation: sub_menus .3s .1s ease both;
}

.menus_item_child:before {
content: "";
position: absolute;
top: -20px;
left: 50%;
margin-left: -10px;
border-width: 10px;
border-style: solid;
border-color: transparent transparent rgba(255, 255, 255, .8)
}

.m-nav-item {
/* position: relative; */
left: 45px
}

.m-nav-item ul {
display: none;
background: rgba(255, 255, 255, .1);
}

.m-nav-item ul li {
width: 245px;
height: 50px;
line-height: 50px;
text-align: center;
}

.m-nav-show .m-icon {
-webkit-transform: rotate(90deg) !important;
-moz-transform: rotate(90deg) !important;
-o-transform: rotate(90deg) !important;
-ms-transform: rotate(90deg) !important;
transform: rotate(90deg) !important;
-webkit-transition: all .3s;
-moz-transition: all .3s;
-o-transition: all .3s;
-ms-transition: all .3s;
transition: all .3s;
}

.m-nav-show .m-nav-item>a:hover {
color: #FFF;
background: rgba(255, 255, 255, .8);
}

.m-nav-show>a:before,
.m-nav-item>a:hover:before {
opacity: 1;
}

.m-nav-item .m-icon {
position: absolute;
right: 65px;
height: 50px;
padding: 0px;
margin: 0px;
}

.nav-item li:hover a {
color: #FFF;
background: rgba(0, 0, 0, .1);
}

Css

第四步,在 /themes/matery/source/js 中找到 matery.js ,在最后一个 });前添加下面这段代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// 增加二级菜单功能 洪卫 shw2018 add 2019.09.17
$(".nav-menu>li").hover(function(){
$(this).children('ul').stop(true,true).show();
$(this).addClass('nav-show').siblings('li').removeClass('nav-show');

},function(){
$(this).children('ul').stop(true,true).hide();
$('.nav-item.nav-show').removeClass('nav-show');
})

$('.m-nav-item>a').on('click',function(){
if ($(this).next('ul').css('display') == "none") {
$('.m-nav-item').children('ul').slideUp(300);
$(this).next('ul').slideDown(300);
$(this).parent('li').addClass('m-nav-show').siblings('li').removeClass('m-nav-show');
}else{
$(this).next('ul').slideUp(300);
$('.m-nav-item.m-nav-show').removeClass('m-nav-show');
}
});

Js

第五步,在主题配置文件.yml修改标题栏内容,按下面格式更改:

1
2
3
4
5
6
7
8
9
10
11
12
标题一级: 
url: /XXX
icon: fa-XXXX
children:
-
name: 标题二级1
url: /XXX/XXX
icon: fa-XXXX
-
name: 标题二级2
url: /XXX/XXX
icon: fa-XXXX

第六步,source 文件夹新疆对应的标题目录,并放 index.md 模板就行了。

到这一步就大功告成了,快去体验吧。


文章作者: hongfei
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 hongfei !
评论
评论
  目录