我的博客设计

Good design is as little design as possible.

这篇文章分享一些我的博客设计,或者说是一些考量,包括样式和内容方面的,原来都在脑子里,整理成文字,让它们更清晰一些,也可以作为自己的参考。

博客样式和功能部分

我的博客受到 This is a motherfucking website 影响比较多:

  • 比较轻量,加载相对较快,减少不必要的资源
  • 支持响应式,在不同屏幕上都容易阅读
  • 合适的行间距、行宽、对比度、字体、字体大小、颜色、排版
  • 不包含追踪服务
  • 考虑可访问性

总体来说就是一种极简风格。


我是用 org-mode 写博客,然后 通过 org-publish 转换成 HTML

转出来的 HTML 没有引入 JS,只包含一些预设的 CSS,相当的轻量。

HTML 默认是 Flow Layout,从左到右,从上到下,按照 HTML 标签顺序排列元素,默认就是响应式的,窗口小了,文字就会自动换行。

如果不考虑样式,这样一份 HTML 1 就可以作为静态文件,丢到 GitHub Page 或者 Netlify 之类的平台托管,让别人访问了。

当然,仅仅是 HTML,阅读体验上还不够好,会存在几个问题:

  • 行间距相对拥挤
  • 文本太宽,如果屏幕比较大,阅读起来就得来回移动眼睛,看起来比较累
  • 文字有点小,字体是默认字体,也不够好看
  • 对比度可能会比较高,一些颜色可能比较不那么好看

针对这些问题,就需要写一些 CSS,在每个 HTML 文件中引用。

行间距

对于行间距,或者说 行高,可以稍微大一些,使得行与行之间不要过于拥挤,但也不要太大,要能看得出来是属于一个段落的,不能过于分散。

至于多少合适,就仁者见仁了。

行宽

文本太宽的问题,可以固定内容的宽度,让内容居中2

这样在阅读时,基本 不用左右移动眼睛,读起来会比较舒适。

至于多宽合适,不要太宽导致眼睛需要移动,不要太窄导致内容过少就好。

字体

文字我更倾向与偏大一些,这样看起来没有那么费劲,默认的字号尽管能看清,但更大的字号可以看得更舒服。 3

字体可以选一个自己喜欢的,不过有一些地方是需要考虑的:

  • 字体文件的大小
  • 字体好看固然很好,但不能好看到让人过于注意字体,而忽视内容,否则就喧宾夺主了
  • 考虑字体粗细的对比度是否足够,不然可能加粗后看不出来区别
  • 考虑一些字符是否容易区分,例如 0,O,o,i,I,l,1 这些字符是否都能区分开4
  • 英文字体和中文字体是否和谐
  • 考虑字体加载失败的情况,在 设置 font-family 的时候应该始终包含一些通用的系统字体
  • 字体版权问题

目前我都是用的 霞鹜文楷5

对比度

我目前遵循的是 APCA (Accessible Perceptual Contrast Algorithm)6,要保证对比度足够高,使得阅读起来能看清且不费劲,也要确保对比度不要太高,尤其是暗色主题下,对比度过高会看着刺眼。

颜色

一般来说,应该有一个主色,搭配一些和主色相辅相成的辅助色,以及一些中性色。7

主色是网站的主色调,是最常使用的颜色;有的地方想和主色区分,就可以用一些辅助色,一般没有主色那么突出;而中性色则主要是用于文字。

颜色太少可能会让博客显得单调,太多又会显得凌乱。

目前我没有一个很喜欢的调色板,所以还是中性色为主,我主要设置背景、正文、引用、链接、选中、高亮、边框的颜色。

背景可以考虑设置一个背景图,让博客看起来不那么单调,但也不要太花里胡哨。

如果是纯色,则避免纯黑和纯白,可以稍微降低一些对比度,使得看起来柔和一些。

至于正文、引用、边框等颜色,也是基于 APCA,用不同的对比度区分它们的关系,一般引用文字要比正文对比度会浅一些。

选中和高亮我用了比较突出的颜色,毕竟需要明显一些。8

因为支持了暗色主题,还需要针对暗色主题适配颜色,同样也是基于 APCA 对比度设置的颜色。

由于颜色会在很多地方重复使用,一般来说会定义成 CSS variables 9,便于复用。


完成上面那些配置,页面阅读起来应该就不错了。

在这个基础上,可以开始做一些 渐进式增强

优化小屏的阅读体验

在手机上屏幕比较小,为了能够阅读更多的内容,可以考虑移除一些不必要的缩进,充分利用手机的屏幕。10

同时应该 避免出现横向滚动条 11,因为手机上主要是触摸滑动页面,往下滑动的时候很容易触发横向的滑动,需要来来回回地调整位置,体验很不好。

支持亮色主题和暗黑主题

我个人是比较喜欢亮色主题的,但有的读者可能会更喜欢暗色主题,也可能是因为生理原因,暗色主题会看着更舒适,所以最好可以提供一个选项。12

如果手机或电脑设置的是自动调节系统的明暗主题,一般在夜晚的时候,网站也会自动切换成浏览器默认的暗色主题,只是可能没有自己适配的好看。

增强脚注

脚注一般都在文章的最底部,如果读者想查看,就要在内容之间来回跳转,体验不好。

可以考虑使用 littlefoot,使得可以直接查看脚注,不用来回跳转。

如果屏幕比较大,也可以考虑使用旁注,将脚注展示在文章的旁边,点击都省了。

增加「返回顶部」

博客文章一般会比较长,如果导航栏不是固定在某个地方可以随时访问的,那么可以考虑增加一个「返回顶部」的按钮,让读者可以快速回到顶部进行导航。

返回顶部按钮可以放在文章边上,而不是浏览器的右下角,因为屏幕大的时候,鼠标移动到右下角可能有点远。

返回顶部按钮也可以考虑在文章比较靠后的地方才出现,让读者多阅读足够的内容后再出现,算是一些小心机。

在手机上,由于空间少,返回顶部按钮往往会和内容重叠,因此可以考虑让按钮过一阵时间就隐藏,只有用户滚动的时候才出现。也可以适当设置 透明度

代码块增强

有的技术文章会嵌入一些代码片段,这些片段有的可能比较长,可以考虑提供一个复制按钮,让读者快速复制代码内容,而不必拖拽选择后再复制。

有的人可能是用语音操作页面的,用语音命令来高亮代码块并复制是极其困难的,因此 提供一个复制按钮会让他们轻松很多

一些无障碍增强

有的读者可能主要使用键盘浏览网页,会用 tab 去移动,可以考虑添加 Skip Navigation,让读者可以快速跳过导航13,直接跳转到内容部分。

通过调整 :focus-visible 的样式,例如让 outline 更粗更明显,可以让读者更清楚当前焦点的位置。

设置页面的 lang 属性,这样如果有读者用屏幕阅读器来阅读文章时,阅读器可以 识别正确的语言14

考虑添加搜索功能

搜索功能可以让读者快速搜索博客的内容,例如我写了不少 Zine,里面分享不少文章和资源,或许某天有读者15会想起在我的博客上看到的什么,有搜索就很方便。

如果你的博客被搜索引擎索引了,可以直接使用搜索引擎的搜索功能。

例如我用 Kagi,我可以提供一个输入框,让用户输入关键字,把关键字拼接成 Kagi 的搜索链接: https://kagi.com/search?q=site%3Ataxodium.ink+keyword ,这样就可以直接利用搜索引擎进行搜索。

你也可以考虑集成一些第三方工具,例如 使用 pagefind 添加博客搜索功能

提供一个订阅流 RSS/Atom feed

提供一个订阅流方便读者订阅,相比邮件订阅,我会更喜欢 RSS/Atom feed,我可以在一个统一的工具订阅和阅读,取消起来也相当方便,而邮件取消起来感觉稍显麻烦,还容易收到垃圾邮件。

订阅地址应该容易让读者找到,而不是藏在某个地方,甚至需要读者自己猜订阅流的地址。

另外可以考虑 美化你的 RSS/Atom feed ,会比光秃秃的 XML 阅读体验更好。

适当增加过渡效果

例如鼠标 hover 的效果,页面之间切换的效果16页面滚动效果 等。

不过要注意加上 prefers-reduced-motion 检测,当读者希望关闭这些过渡效果时,尊重他的选择。

首页设计

如你所见,博客的首页就是一个 sitemap,罗列了我目前写的所有博客文章。

我将 list-style 设置成了decimal-leading-zero,比黑点要稍微有趣一点,也方便我看看目前写了多少文章。

本来文章后面一般会有一个日期,但因为在手机屏幕上对不齐,我干脆隐藏了,日期好像也不是很重要。

首页很简单,没有分页,一眼看到底,如果读者愿意探索我写的内容,一直滚动找感兴趣的内容就好了。

我觉得博客最重要的就是博客文章,所以我把最重要的部分作为首页17

缓存

我的博客部署在 Netlify,可以通过配置指定一些静态文件的缓存时间。

通过缓存,一方面可以减少 Netlify 上的带宽消耗;另一方面,像是字体、图片这些基本不会变的内容,缓存过后,博客也会加载得更快。

标签分类

标签分类后,读者可以通过标签过滤文章。

这块是我一直很想添加的功能,但目前的博客系统还不太清楚怎么搞。

博客文章内容部分

中文写作规范,我主要参考:

列举一些我平时会比较注意的:

  • 中文和英文、数字、链接之间应该有一个空格
  • 标点符号的使用
    • 偏好使用 「」 而不是 “”
    • 破折号我一般会用 ,并且前后添加空格
    • 中文省略号应该用 …… 而不是 。。。 或者 ...
    • 避免中英文符号混合,中文里的逗号应该都是 而不是 , ;分号应该是 而不是 ;
  • 注意专有名词的大小写拼写,例如是 GitHub 而不是 githubGithubGITHUB
  • 使用缩写的时候,在第一次提及的时候补充全称
  • 注意区分「的」、「地」、「得」
  • 图片尽可能使用 figure 对内容进行描述;如果不使用 figure,应该使用 alt 描述18。原因是: 1.图片可能加载失败;2.方便使用屏幕阅读器的读者,他们可能看不到图片。
  • 引用应该标注来源,我一般会使用 Copy Link To Highlight,这样读者跳转过去的时,可以通过高亮,快速看到我引用的部分。
  • 对于一些较长的,不是很重要的内容,可以考虑用 details 进行折叠19,用户感兴趣可以自行点开;或者考虑用脚注。
  • 一些希望突出的内容,可以考虑用粗体,但有时粗体和其他字体对比不够强烈的时候,可以考虑使用下划线或者增加颜色。
  • 链接应该有下划线,而不只是通过颜色和正文区分,考虑一些颜色不敏感的用户,有可能在他们的眼中是区分不出来的。下划线能更好地区分链接和正文,也很符合直觉。
  • 我不太喜欢很长的段落,读起来有些费劲,大多数情况下我会遵循 一个句子写一行

除此之外,应该持续优化和编辑20已发布的文章,修复一些看到的错别字,坏掉的图片或链接;如果有更好的表达也可以改进一下。

我不喜欢的设计/内容

  • 一打开网页就弹窗,除非我对内容很感兴趣,或者内容比较有价值,否则这样的网站我多半会直接关闭
  • 有的博客内容很丰富,像是一个数字花园,固然很棒,但我会觉得有些迷失方向,甚至有些信息焦虑感
  • 明显是 LLM 生成的内容、简单复制的内容、看不出来作者思考、打磨的内容
  • 到处都是广告的博客
  • 资源太多,加载很慢的博客
  • 排版很差、排版像 CSDN 的博客
  • 错别字、拼写错误太多
  • 太多花里胡哨的元素
  • 对比度太高或者不足,要么看得刺眼,要么看不清,都难受
  • 响应式支持很差的,在手机上阅读体验很差的

写在最后

总的来说,我会喜欢那些相对简洁一些的设计。

比较有个性的设计我也喜欢。

好的设计应该注重读者的阅读体验。

设计不是一尘不变的东西,以上是我目前的一些考量,随着接触到东西更多,设计也会持续迭代,你也可以通过 CHANGELOG 看看博客的变化。

我想我早期的文章估计也有不少毛病,以后看到了再慢慢改了。

_​(:3 」∠)_

脚注:

1

最简单的 HTML 可以只写文字,什么标签都没有,也能渲染成网页。HTML is for people 是一个很不错的教程,就算你完全不懂 HTML,也可以搭建自己的博客。

2

最简单的居中方法是固定宽度,然后设置 margin-inline: auto; ,更多方法可以看 Center an element

3

也可以考虑基于屏幕的宽度,动态控制文字的大小,设置一个最小和最大值。可以利用 clamp(),例如 clamp(22px, calc(1.1em + 0.6vw), 24px);

4

最开始,我为了能更好的区分 0 和 O,用的是 Atkinson Hyperlegible,但后来觉得 Atkinson Hyperlegible 和 霞鹜文楷 搭配起来不太和谐,就统一都有霞鹜文楷,不过 0 和 O 可能会有点区分不开,算是一种妥协。

5

英文字体可以在 Google Fonts 中找,中文字体可以在 中文网字计划 里找,中文网字计划还提供 字体分包 服务,可以一定程度优化字体资源大小。

6

关于 APCA,我在 Zine#31::The Easy Intro to the APCA Contrast Method 中有分享过,可以看看。

7

感兴趣可以看看 The color system | Material Design

8

在 dark-mode 下,我用的是 rebeccapurple,这是 CSS Logo 的颜色,也是一个六岁女孩的名字。

9

在写 CSS 的时候,可以在 MDN 上查一下对应特性的 Baseline,看看特性当前的支持程度,如果是广泛可用 (Widely available),那基本可以随便用。如果是可用性有限 (limited availability),那么使用时可能需要斟酌一下,可能部分浏览器会不支持。

10

可以利用 媒体查询 来判断小屏设备,单独设置样式。

11

出现横向滚动条,往往是因为一些无法换行的内容导致了 溢出,可以考虑使用 word-break 让其换行。

12

关于暗色主题的适配,见 给博客添加 dark mode

13

导航部分,我也算比较克制,没有放太多的导航出来。主要原因是导航多了,手机屏幕下会放不下,虽然也可以适配,但我还是想能一行放下,这也促使我只保留关键的导航。

14

你甚至可以考虑 给页面添加语音播报功能

15

我就是这其中的一个 ( ˘•ω•˘ )

17

一般来说,博客都会有个 archive 页,按照年份罗列所有文章,我是偷懒,直接二合一了。

19

Gwern Branwen 的博客 在你悬浮在 details 上一段时间,会自动展开,也是很不错的优化。

作 者: Spike Leung

创建于: 2025-09-10 Wed 14:06

修改于: 2025-09-10 Wed 03:39

许可证: CC BY-NC 4.0

支持我: 用你喜欢的方式