上一次写博客装修笔记还是上一次,竟然是2022年12月的事情了。
一年半来倒也没有什么大装修,我对现在这个主题的满意度很高,因为它已经有了我所有想要的特性,不太满意的地方也自己改掉了。没有写备忘纯粹是因为懒。不过近期比较多,还是写一下比较好。
前段时间我的同人博客换成了Diary主题,完成了自己比较想实现的Fandom和Series区分,应该今年都不会再修改了。由于过去的时间比较长,前几天刚好有人留言问了,也在这里做一个简单的回顾。
Archive页面的实现
这个Archive页面是抄了浣心的归档页面,他的主题和配置文件是开源的,给我这段时间的装修提供了非常多的参考。
以下代码来自于浣心的Github。仅做了文字部分的改动,感谢他。
- 在目录
layouts\_default
中增添文件archive.html
。
代码部分
{{ define "main" }}
<div class="post-list-container post-list-container-shadow">
<div class="post">
{{/* begin of archive heading */}}
<div class="post-head-wrapper-text-only">
<div class="post-title"><h1 class="post-title-main">{{ .Title }}</h1></div>
{{- $type := .Type -}}
{{/* **** Category-wide stats **** */}}
{{- $scratch := newScratch -}}
{{- $articles_cat := (where .Site.RegularPages "Type" $type) -}}
{{- $articles_cat_count := len $articles_cat -}}
{{- range (where .Site.RegularPages "Type" $type) -}}
{{- $scratch.Add "allwordcount" .WordCount -}}
{{- end -}}
<div class="post-subtitle">
归档页面堂堂上新!这主题用了一年半我终于也有了归档页面。
</div>
{{/* end of archive heading */}}
</div>
<div class="post-body-wrapper">
<div class="post-body archive-body">
{{/* **** Yearly archive **** */}}
{{/* Group articles by year and loop through them */}}
{{- range (.Site.RegularPages.GroupByDate "2006") -}}
{{/* Get articles to display */}}
{{- $articles_yearly := (where .Pages "Type" $type) -}}
{{/* Count articles returned */}}
{{- $articles_yearly_count := len $articles_yearly -}}
{{/* Check if a proper year is returned and if it contains any articles */}}
{{ if and (gt .Key 1) (gt $articles_yearly_count 0) }}
{{- range $index, $value := (where .Pages "Type" $type) -}}
{{ if not $index }}
{{/* Display a header in the first loop */}}
<h3 class="archive--year">{{ .Date.Format "2006" }} / {{ $articles_yearly_count }} {{ if ne $articles_cat_count 1 }}entries{{ else }}entry{{ end }}</h2>
<ul class="article--list">
{{ end }}
{{/* Display articles here */}}
<li class="archive--list-item">
<a href="{{ .RelPermalink }}">
<span class="archive--date">{{ .Date.Format "Jan 02" }}</span> {{ if .Draft }}<span class="draft-label">{{ i18n "draft" }}</span> {{ end }}{{ .Title }}
</a>
</li>
{{ end }}
</ul>
{{ end }}
{{ end }}
</div>
</div>
</div>
</div>
{{ end }}
- 在
content\archives
中增添文件posts.md
,如下内容:
代码部分
---
title: "Archive✨"
layout: archive
type: posts
summary: This page contains an archive of all posts.
_build:
list: never
menu:
main:
weight: -90
params:
icon: fail
toc: false
---
其中关于menu
的部分是我的主题把独立页面放在导航栏的方式,如果你的主题是通过在config.toml
增添内容实现,则忽略这一段即可。
- 然后我做了一些样式的修改,恐怕没有参考的意义。这个直接写在主题的CSS文件即可,例如我的目录是
assets\css\critical\10-custom-media.css
。
代码部分
.archive--list-item {
margin-bottom: 8px; /* 修改列表项的底部间距 */
padding-left: 0px; /* 移除圆点位置,这个数值可以根据需要调整 */
}
.archive--list-item:hover,
.archive--list-item:focus {
color: var(--primary); /* 选中时的文字颜色 */
}
.archive--date {
color: var(--fg); /* 使用前景颜色 */
}
.draft-label {
color: var(--red1); /* 草稿使用红色 */
}
.archive--list-item:hover .archive--date,
.archive--list-item:focus .archive--date {
color: var(--primary); /* 选中时日期的颜色和文字一致 */
}
友情链接的样式
本段写于2024年6月23日。因为最近和毛象上的大家交换了友链,大家的友链都会放描述或头像,也会有友友写自己的描述,但当时我的友链是没有描述的纯URL,感觉还是想更认真地对待这件事,就给每个友友都有比较正式的介绍——但这样页面就变得超级漫长欸!所以我对友链样式重新做了修改。
之前的友链
之前的友链样式如下。如果有人想知道实现方式的话,正巧之前在毛象上写过一次,涉及到无序列表的更改,这个方式不需要手动分隔号和调整间距。
样式及代码部分
<style>
.content li::marker {
content: "♡ ";
color: var(--primary-alt);
}
/* 让无序列表前的圆点变成爱心 */
a.link--external::after {
content: " | ";
padding: 0 0.1em;
}
/* 让每个超链接后都有个分隔号,并调整间距大小*/
a.link--external:last-child::after {
content: none;
}
/* 最后一个链接不需要分隔号 */
</style>
/* 之后这样就可以显示出来了! */
- [name](link.com) [name2](link2.com)
- ....
因为它只用在友链的文件里嘛,所以这些代码我是直接添加进友链文件的正文的。进而导致RSS阅读器中阅读会看见代码本身……不过没事啦(擦汗)因为我一直都只在一个文件里修改更新,应该不会有人重复的到RSS提醒,搬家感觉也很方便。
目前的友链
目前的页面是这样的:无序列表,博客名称的链接,加以一段文字描述。同时无序列表的黑色圆点修改成了爱心,并且每一次刷新得到的排列顺序不同,每7个列表项后增添一个分割线,以提升阅读的舒适程度。
于是效果如下:
效果及代码部分
<style>
.post-meta {
display: none;
}
.post div[style] {
display: none;
}
.content li::marker {
content: "♡ ";
color: var(--primary-alt);
}
</style>
<script>
document.addEventListener("DOMContentLoaded", function() {
// 获取带有 post-content 类的文章内容
var articleContent = document.querySelector(".post-content");
// 获取文章内容内部的所有列表项
var items = articleContent.querySelectorAll("ul li");
// 将列表项转换为数组
var itemsArray = Array.from(items);
// 随机排列数组中的元素
for (var i = itemsArray.length - 1; i > 0; i--) {
var j = Math.floor(Math.random() * (i + 1));
var temp = itemsArray[i].innerHTML;
itemsArray[i].innerHTML = itemsArray[j].innerHTML;
itemsArray[j].innerHTML = temp;
}
// 获取每隔6个项后的分割线
for (var i = 6; i < itemsArray.length; i += 7) {
var hr = document.createElement("hr");
itemsArray[i].parentNode.insertBefore(hr, itemsArray[i].nextSibling);
}
});
</script>
标签<script>
内的部分是用来实现无序列表随机排列的,它会对当前整个网站页面包括导航栏等等的无序列表生效。所以为了限定它只对文章内的无序列表生效,在第一段注释中有一个获取带有 post-content 类的文章内容
的步骤,这是因为我网站主题中,文章正文的类是post-content
,这是根据我的主题的情况写的。
如果你不知道应该怎么做和修改这部分,请在自己的网站上按F12
,查看主题的源代码,点进去用选择器查找和看自己文章部分的所属的类是什么,然后替换掉上述代码里我的post-content
部分即可。
全站字体修改
大家应该都注意到了吧!我把网站的主题修改成了霞鹜文楷,由于我不知道怎么样引入非Google字体的字体,就在网上找了一下。发现了这个仓库:霞鹜文楷Web字体。它的简介表示使用与Google Fonts相同的技术对中文字体进行分包和压缩,以便于用于网页端分发——
什么意思?我是看不懂啦,但会用能用就行。根据使用说明具体操作如下:
- 在网站的
Head
部分引入CSS文件。
在我的文件路径layouts\partials\head\head_start.html
中写入下面内容:
<!-- 霞鹜文楷 Regular -->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/satouriko/LxgwWenKai_Webfonts@v1.101/dist/LXGWWenKai-Regular.css" />
- 应用字体样式。
寻找一下你的网站字体部分在哪里。然后把字体LXGWWenKai
放到最前面。
在我的文件assets\css\critical\20-base.css
中做了如下修改:
:root {
--font-monospace: LXGWWenKai, "Fira Code", "Lucida Console", Monaco, monospace;
--font-sans-serif: LXGWWenKai, Verdana, Helvetica, sans-serif;
--font-serif: LXGWWenKai, "Fira Code","Roboto Slab", Georgia, serif;
}
- 刷新一下,能用欸!好耶!
同人博客的魔改笔记
首先声明,我的博客是在浣心的魔改Diary主题基础上做的修改,他魔改后也对自己的主题进行开源:仓库。
我使用后发现,这个主题的基础就是Series、Tag和Categories都是不进行区分的,都是相同的样式。
但我希望Category可以呈现我同人的“原作(Fandom)”,而Series则呈现我同人故事的“系列(Series)”。那么就必须对它进行区分了。魔改后的效果已放在文末。
我的实现步骤如下文,全靠ChatGPT写的,请灵活参考。
Fandom与Series区分的实现过程
- 修改
/layouts/_default/terms.html
文件内容如下:
代码部分
{{ define "main" }}
<div class="post-list-container post-list-container-shadow" data-pagefind-ignore>
<a class="a-block">
<div class="post-item-wrapper post-item-wrapper-no-hover">
<div class="post-item post-item-no-gaps">
<div class="post-item-info-wrapper">
<div class="post-item-title post-item-title-small">
{{ .Title }} / 
<!-- 显示页面标题 -->
{{- $pageCount := len .Data.Terms -}}
{{- $pageCount -}} {{- if ne $pageCount 1 -}}entries{{- else -}}entry{{- end -}}
<!-- 显示条目数 -->
</div>
<span class="post-content">
{{.Content}}
<!-- 显示页面内容 -->
</span>
</div>
</div>
</div>
</a>
<!-- 区分 tags, series 和 categories -->
{{ if eq $.Section "tags" }}
<div class="tags">
{{ range .Data.Terms.ByCount }}
<!-- 遍历 tags,并按计数排序显示 -->
<div class="tag">
<a href="{{.Page.RelPermalink}}" class="btn btn-outline-secondary position-relative rounded-pill">
{{ .Page.Title }}
<!-- 显示 tag 标题 -->
<span class="badge">({{ .Count }})</span>
<!-- 显示 tag 数量 -->
</a>
</div>
{{ end }}
</div>
{{ else if eq $.Section "series" }}
<div class="series">
{{ range sort .Data.Terms.ByCount ".Page.Params.weight" "desc" }}
<!-- 遍历 series,并按 weight 参数降序排列显示 -->
<div class="series-tag">
<a href="{{.Page.RelPermalink}}" class="a-block">
<div class="post-item-wrapper">
<div class="post-item post-item-no-divider">
<div class="post-item-info-wrapper">
<div class="post-item-title">{{ .Page.Title }}({{ .Count }})</div>
<!-- 显示 series 标题和数量 -->
{{ if .Page.Params.description }}
<div class="post-item-summary term-summary">{{ .Page.Params.description }}</div>
<!-- 显示 series 描述 -->
{{ end }}
{{ if .Page.Params.warn }}<span class="warn">{{ .Page.Params.warn }}</span>{{ end }}
<!-- 显示警告信息 -->
</div>
</div>
</div>
</a>
</div>
{{ end }}
</div>
{{ else if eq $.Section "categories" }}
<div class="categories">
{{ range sort .Data.Terms.ByCount ".Page.Params.weight" "desc" }}
<!-- 遍历 categories,并按 weight 参数降序排列显示 -->
{{ if not .Page.Params.hidden }}
<div class="category-tag">
<a href="{{.Page.RelPermalink}}" class="a-block">
<div class="post-item-wrapper">
<div class="post-item post-item-no-divider">
<div class="post-item-info-wrapper">
<div class="post-item-title">{{ .Page.Title }}({{ .Count }})</div>
<!-- 显示 category 标题和数量 -->
{{ if .Page.Params.description }}
<div class="post-item-summary term-summary">{{ .Page.Params.description }}</div>
<!-- 显示 category 描述 -->
{{ end }}
{{ if .Page.Params.warn }}<span class="warn">{{ .Page.Params.warn }}</span>{{ end }}
<!-- 显示警告信息 -->
</div>
</div>
</div>
</a>
</div>
{{ end }}
{{ end }}
</div>
{{ end }}
</div>
{{ end }}
- 创建
categories\_index.md
文件。内容如下。
---
title: "Fandom"
slug: categories
---
根据原作进行分类,并未列出所有作品,可以在系列合集里面看看。
正文内容会显示为对页面的描述。这时候你的网站/categories/
就会显示出目前所有的分类列表。
- 对分类信息进行自定义。
假如我希望自定义《无间道2》
这个分类,那么我所需要做的是创建文件categories\无间道2\_index.md
,并在内容中写入如下内容。
---
title: "无间道 Infernal Affairs"
description: 如果这次被我搞定,我们倪家从此就可以抬头做人。
warn: 哥攻抚慰Only
type: series
weight: 99
---
于是我所有打上了categories: ["《无间道2》"]
的文章内容都会显示在这个/categories/无间道2/
(示例)这个链接下。
此示例中的书名号并不是失误,在此是希望提醒,你的本地文件夹的名字是什么,Slug/短链就是什么。书名号并不会体现在短链中,所以无论你文章的Categories是无间道2
还是《无间道2》
都会出现在同一个页面。如果搞不太清楚自己文件夹的命名,那么就和文章填写的Categories保持一致即可。
- Series的实现方式同上。
创建series\_index.md
文件。为你的每一个Series创建一个文件夹,如如series\香港电影同人\
,并放入_index.md
文件(无论下划线还是命名都不可以更改)。
在_index.md
正文填入相应的信息。然后你想放进这个Series的文章,就在Metadata的部分写进series: ["香港电影同人"]
。之后文章就会显示出来。
如果不显示的话,关闭本地预览,重新开启,一般就可以看见了。
应该没有别的需要补充的部分了,遇事不决可以询问ChatGPT老师。
效果展示
然后放一下我的同人博客更新后的样子。
浣心魔改后的主题本身对处于一个Series的文章做了新的显示效果如下,如果想要实现,具体请看他的文章:在Hugo里显示系列文章。
最后的话
其实还做了一些很多其他的改动。因为每次装修都在无关紧要的细节上进行长时间的大思考,所以暂时不打算再对博客做其他修改了……下一次写装修笔记应该又是明年了。
如果您对本站及同人站的特性感到好奇,欢迎在这一篇文章的评论区留言!我会很乐意分享的。