Hexo的NexT主题更改页面样式
省流:把这亿点CSS代码复制粘贴到文件./source/_data/styles.styl
里。
1 | /* custom styles */ |
上回说到
正如前面说的,我觉得NexT主题默认的页面配色不咋好看。如果你也有同感,可以照着这篇文章,用CSS自定义某些控件的颜色和样式。本文以.
表示Hexo本地仓库的路径。
技术准备
假设准备搭建个人博客的读者已经学会或可以做到:
修改页面样式
- 在
_config.next.yml
文件里找到custom_file_path
,取消注释下面#style: source/_data/styles.styl
一行,即删除开头的#
。这样可以在styles.styl
里用CSS自定义控件样式。 - 在目录
./sources/_data
下新建文件styles.styl
,然后仔细观察网页上的每个控件,有瞅着样式不好看的就改。本文以“阅读全文”按钮为例,演示如何覆盖main.css
里原本的样式,并讲解一点简单的HTML和CSS。本文剩余内容如果不想看,可以直接跳过,复制上面“省流版”中的代码,粘贴到styles.styl
文件,保存,然后重新生成静态文件并部署上线。1
hexo g -d # g for generate, d for deploy
- 谢谢你给我面子接着往下看:)生成的文件在目录
./public
下,打开./public/css/main.css
,可以看到定义了默认页面样式的CSS代码。CSS中以--
开头的是变量,比如--theme-color
,而在读取变量的值时用var(--theme-color)
。如果按前面说的,在_config.next.yml
里有如下设置,那么1
2
3
4# Browser header panel color.
theme_color:
light: "#fc6423"
dark: "#e34603"--theme-color
的值在浅色模式下就是#fc6423
,而在深色模式下是#e34603
。也就是说,在生成的./public/css/main.css
里会设置为1
2
3
4
5
6
7
8:root {
--theme-color: #fc6423;
}
@media (prefers-color-scheme: dark) {
:root {
--theme-color: #e34603;
}
} - 如果像这里说的那样用了
<!-- more -->
,那在主页上会显示这样的“阅读全文”按钮。现在比方说想给原本是黑白色的按钮换一种样式。以换为本站这样为例,可以看到./public/css/main.css
里面有这样的内容:每个变量的含义与名字相对应,其中btn和bg分别为button(按钮)和background(背景)的缩写。可以在1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18:root {
--btn-default-bg: #fff;
--btn-default-color: #555;
--btn-default-border-color: #555;
--btn-default-hover-bg: #222;
--btn-default-hover-color: #fff;
--btn-default-hover-border-color: #222;
}
@media (prefers-color-scheme: dark) {
:root {
--btn-default-bg: #222;
--btn-default-color: #ccc;
--btn-default-border-color: #555;
--btn-default-hover-bg: #666;
--btn-default-hover-color: #ccc;
--btn-default-hover-border-color: #666;
}
}./source/_data/styles.styl
中覆盖默认的样式,让按钮的样式颜色和主题颜色风格一致:在styles.styl
里写入1
2
3
4
5
6
7:root {
--btn-default-bg: transparent;
--btn-default-color: var(--theme-color);
--btn-default-border-color: var(--theme-color);
--btn-default-hover-bg: var(--theme-color);
--btn-default-hover-border-color: var(--theme-color);
} - 其他部分的CSS代码我懒得一条一条解释了,基本上都是望文生义,想看的小伙伴可以自己看看改改试试,完了对比一下修改前后的样式。
HTML/CSS简介
这里以下图所示的“阅读全文”按钮为例,简单讲一点皮毛知识。
这个按钮对应的HTML代码是这样的:
1 | <div class="post-button"> |
其中<div>
和<a>
称为标记(tag),class
、href
、rel
称为属性(attribute)。class
属性用来给HTML元素(element)指定类名,这样在CSS里就能自定义这个控件的样式风格。后面也会讲到,在JavaScript脚本里也可以利用元素的class
和id
属性控制更复杂的行为。可以看到,在main.css
里面有这样的CSS代码
1 | .btn { |
所以不需要修改这段默认的CSS,只要在styles.styl
里修改这些--btn-default-*
变量的值就行了。
- 像
.btn { ... }
这样以.
开头的CSS,是对应HTML属性class="btn"
控件的样式;而.btn:hover { ... }
则是对应HTML属性class="btn"
的控件在鼠标悬停时的样式。1
2
3<div class="btn">
<div>Some other elements</div>
</div> - 像
a { ... }
这样不以.
开头的CSS,则是对应HTML标记为<a>
控件的样式。1
<a href="https://example.iw17.cc" target="_blank">Example</a>
还有时会遇到这样的CSS代码
1 | /* image size */ |
- 像
.post-body img { ... }
这样在大括号前以空格分隔的,是在HTML属性class="post-body"
的控件下,标记为<img>
的一级或多级子控件的样式;1
2
3
4
5
6<div class="post-body">
<img src="/example.jpg" alt="Example text" /><!-- yes -->
<div>
<img src="/example1.jpg" alt="Example text" /><!-- yes -->
</div>
</div> - 而像
.post-body > img { ... }
这样以大于号分隔的,就只对一级子控件有效。1
2
3
4
5
6<div class="post-body">
<img src="/example.jpg" alt="Example text" /><!-- yes -->
<div>
<img src="/example1.jpg" alt="Example text" /><!-- no -->
</div>
</div>
词汇表
英文 | 中文 |
---|---|
attribute | 属性 |
background | 背景 |
border | 边界 |
button | 按钮 |
class | 类 |
collapse | 收起 |
content | 内容 |
default | 默认 |
element | 元素 |
expand | 展开 |
hover | 悬停 |
link | 链接 |
menu | 菜单 |
sidebar | 侧边栏 |
site | 站点 |
subtitle | 副标题 |
tag | 标记 |
theme | 主题 |
title | 标题 |
transparent | 透明的 |