简单来说,我建议你为你的浏览器设置好一个好看的、适合阅读的默认字体,比如最近大红大紫的 Noto CJK

之前从 hexo 换成 Pelican,主题也随之改成了 Flex。这主题开箱即用,也没有什么问题,但毕竟是英语用户写的,并没有考虑中文字体:

body{font-family:Source Sans Pro,Verdana,sans-serif}

第一个字体 Source Sans Pro 还是从 Google Fonts 上加载的。对于大部分都是中文的站来说,几乎没有价值,必须得删掉。

实际上,现在中文用户可以选择的字体已经比较多了。包括 Windows 自带的微软雅黑、Android 上的 Droid 字体、Google 的 Noto CJK、Adobe 的 Source Han CJK、方正的各种字体等。一般来说你也不知道读者设备里装了什么字体,所以很多网站会在 font-family 里罗列字体:从一等公民 MacOS 开始,把可能的中文字体都写一遍,最后留下个 san-serif

有些人甚至会在 font-family 先写英文字体(字体文件里只包含英文和另外一些符号的字形的字体),然后再写中文字体。这样浏览器会先把英文用指定的英文字体显示出来,中文则 fall back 到中文字体。这么做的理由是中文字体里的英文字形不好看。最然我觉得这挺蠢,但不知道为啥 MS Word 也是这么处理中英文混排的:默认中文用宋体,英文用 Times New Roman。

我不想搞得这么复杂:

body{font-family:serif}

为何是 serif 而不是地球人都喜欢的 san-serif,只能说我更喜欢衬线字体。虽然经历过 XP 时代的人大概都记得 IE6 上的宋体有多么难看,但衬线字体的好处也很明显:阅读起来比无衬线的字体更容易、更快。坏处则是,大部分人的电脑里都没有一个顺眼的衬线字体。

特别的,对于 Chrome 来说,需要安装 Advanced Font Settings 插件来为 Simplified Han 这个 Script(而不是 Default)设置默认字体才行。因为在网页的开头有:

<html lang="zh">

这似乎是 HTML 标准的一部分(其实也不大标准),表示这个网页是用中文简体写的,Chrome 则会选择中文简体 Script 的默认字体来显示。这么做应该是为了可以给各个不同的语言配置各种不同的字体。这是对的,但为啥 Chrome 不自带这破功能还需要一个插件来解决呢。