深色界面登场!

最近略为倒腾博客设置,今天正式推出基于 Next 简单定制的深色主题!只要浏览器已应用深色模式,访问博客即可启用。另外有细节优化若干。

具体细节记于内页。

一、Next 主题的样式和变量

早前,为改造 Next 主题灰不溜秋的界面,我用了一种粗糙、但至少有效的手段:网页上哪些部分要改配色,就在 styles.styl 布置覆写用的样式。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
a {
color: #f48fb1 !important;
border-bottom-color: #f48fb1 !important;
transition-duration: 0.2s;
transition-property: color,border-bottom-color;
transition-timing-function: ease-in-out;
}

a:hover {
color:#c2185b !important;
border-bottom-color: #c2185b !important;
}

.post-button .btn {
background: #ad1457 !important;
border: 2px solid #ad1457 !important;
color:#fff !important;
}

.post-button .btn:hover {
color:#ad1457 !important;
background: #fff !important;
}

其实之所以本博客至今未启用深色主题,是因为维护如此浩繁(超 150 行、数十个颜色标记)的 CSS 样式实在繁琐,做深色主题意味着工作量加倍……我理应将诸要素配色集中管理,尽可能减少配置复杂度。在 Next 软件包里,我发现 css/_variables/base.styl 集中定义了一批颜色相关变量:

1
2
3
4
5
6
7
8
9
10
11
$gainsboro    = #eee;
$grey-light = #ccc;
$grey-dark = #999;
$black-light = #555;
$black-deep = #222;

$link-color = $black-light;
$link-color-dark = $grey-light;
$link-hover-color = $black-deep;
$link-hover-color-dark = $gainsboro;
$link-decoration-color = $grey-dark;

Next 文档中建议引入 source/_data/variables.styl 以便覆写这批变量。这条路线可以取代扭曲得不可名状(用英语讲,sketchy)的双轨制样式,亦可受 darkmode 开关调控。

以上样式定义便可精简为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
$pink-50 = #fce4ec;
$pink-300 = #f06292;
$pink-500 = #e91e63;
$pink-800 = #ad1457;
$pink-900 = #880e4f;

$link-color = $pink-500;
$link-hover-color = $pink-900;
$link-decoration-color = $pink-500;

$btn-default-bg = $pink-800;
$btn-default-color = white;
$btn-default-border-color = $pink-800;
$btn-default-hover-bg = white;
$btn-default-hover-color = $pink-800;
$btn-default-hover-border-color = $pink-800;

a {
transition-duration: 0.2s;
transition-property: color,border-bottom-color;
transition-timing-function: ease-in-out;
}

但是,某些未被原生 base.styl 定义的样式被硬编码到各个模块的样式定义当中(例如,侧边栏之背景、文字配色在 _sidebar.styl 当中被硬编码),此时仍需于 styles.styl 自行维护相关样式。此外,在 variables.styl 自行定义的变量(如 pink-100)不能被 styles.styl 取用,需于后者再次定义。

同时优化了白天主题的一些文字配色。

二、诸插件 CDN 之变更

博客迄今用到的插件不下十种,同时有外源字体,如何加快其加载速度一向令人头疼不已。有三个原因:首先,网站本身带宽有限,若令其托管全部插件,加载用时会延长;其次,Next 主题至今仅原生支持 CDNJS、JsDelivr 和 Unpkg 等三大 CDN,其中两个在大陆的可用性存疑,Unpkg 也显得拖泥带水;再次,Next 主题依赖于 Google 字体库,后者在大陆的可用性已然欠妥。目前采用的方案有:

  • 字体库依赖改为 fonts.font.im。虽服务器位于日本,需要一定时间加载,但起码可用性接近 100%,且得益于异步加载插件(Lozad.js),不会拖累过多。
  • 鲜有更新的插件改为自字节跳动 CDN 取得。特别地,Animate.css 依赖被锁定于 3.1.1 版本,无需跟进更新。
  • 近两年有更新、或未被字节跳动收录的插件,改为自 Staticfile(七牛 CDN)取得。

三、其它调整

通过 languages.yml 定制了页尾、侧边栏链接区标题、时间线等固定描述。详情不赘述。

你问我最近在忙什么?求职,被拒,消停一阵再求职而已。