原文

https://leay.net/2020/02/14/hexo-next-font

说明

版本:Hexo 4.0、Next 7.0

搜索的一些文章里提及改动的地方挺多的,我乱试了一下,似乎并不需要那么复杂。不知道是不是我没搞懂。

可能是因为 Next 更新了一些配置简化了操作?总之记录一下。

相关配置

先看主题配置文件 _config.yml 里与字体相关的配置项:

font:enable: true# CDNhost: # Font options:# `external: true` will load this font family from `host` above.# `family: Times New Roman`. Without any quotes.# `size: x.x`. Use `em` as unit. Default: 1 (16px)# external: 控制是否使用 CDN。# family: 字体样式。# size: 字体大小。默认为 1(16px)。# Global font settings used for all elements inside <body>.# 全局配置,覆盖 <body> 标签里所有元素global:external: truefamily: size: # Font settings for site title (.site-title).# 博客名字那儿title:external: truefamily: size:# Font settings for headlines (<h1> to <h6>).# 注意这是文章里的标题,而不是侧边栏的 tocheadings:external: truefamily: #Roboto Monosize:# Font settings for posts (.post-body).# 正文posts:external: truefamily:size:# Font settings for <code> and code blocks.# 代码块codes:external: truefamily:

挑选并配置字体

Google Fonts 挑选一款字体,在配置里的 family 处添加即可。

例如:

font:enable: trueglobal:external: truefamily: Noto Serif SC size:

如此配置之后,基于 hexo-next-theme 的博客就会全局使用「思源宋体」。

同理,配置代码块的字体也只需要挑选并覆盖相应配置即可。如:

font:enable: true
# ……codes:external: truefamily: Roboto Monosize:

其它可配置样式的覆盖详见上面的 相关配置

样式的高级设置

主题提供的字体配置挺到位的,但仍然有限。

一是只能配置 global、title、headings、posts、codes 几处(其实也挺丰富了);二是能配置切换字体,设置字体大小,但不能设置颜色等;三是字体只能设置一种 —— 网页是支持多种字体按优先级展示的。

这些问题,可以使用 Next 4.0 提供的「加载用户自定义样式的配置」解决。

道理很简单,就是用 Next 提供的自定义样式覆盖默认或者配置的样式。

在主题配置文件 _config.yml 里开启:

custom_file_path:#head: source/_data/head.swig#header: source/_data/header.swig#sidebar: source/_data/sidebar.swig#postMeta: source/_data/post-meta.swig#postBodyEnd: source/_data/post-body-end.swig#footer: source/_data/footer.swig#bodyEnd: source/_data/body-end.swig#variable: source/_data/variables.styl#mixin: source/_data/mixins.stylstyle: source/_data/styles.styl

然后在 Hexo 根目录进入 source/_data/styles.styl(若无则新建),添加自己想要设置(覆盖)的样式就好啦!

比如我要更改全局的字体颜色,就可以这样:

* {color: #2e405b;
}

PS:同理,这里也可以覆盖博客的各种样式

font-family

字体设置默认使用的 CDN 是 //fonts.googleapis.com。如果从 CDN 上访问失败,就会默认使用如下的字体:

  • Non-code Font: Fallback to "PingFang SC", "Microsoft YaHei", sans-serif
  • Code Font: Fallback to consolas, Menlo, "PingFang SC", "Microsoft YaHei", monospace

非代码的文字使用 "PingFang SC", "Microsoft YaHei", sans-serif

代码块使用 consolas, Menlo, "PingFang SC", "Microsoft YaHei", monospace

浏览器要知道用什么字体,实际上是通过读取 CSS 属性 font-family 1实现的。

在 Next 里,font-family 的默认值就是上面的两项。当我们在配置文件的 font 里添加字体后,被添加的字体就会被插入到 font-family 默认值的头部 —— 当 font-family 里配置了好几个值时,浏览器会优先使用排在前面的字体。

比如本站最后渲染出来的效果是这样的(你可以打开浏览器的调试窗口查看):

body {font-family: 'Noto Serif SC',"PingFang SC","Microsoft YaHei",sans-serif;
}code, pre {font-family: 'Roboto Mono',consolas,Menlo,monospace,"PingFang SC","Microsoft YaHei";
}

然而很可惜的是,Next 似乎无法在配置文件里 fontfamily 处配置多个字体。

# 无效配置
font:enable: trueglobal:external: truefamily: Noto Serif SC , Noto Serif SC# family: [Noto Serif SC , Noto Serif SC]# family: "Noto Serif SC , Noto Serif SC"

如果你想要利用 font-family 的规则2:或者 修改默认使用的字体,阔以直接到源码 source/css/_variables/base.styl 里修改。

如下面,修改 $font-family-chinese

// Font families.
- $font-family-chinese = "PingFang SC", "Microsoft YaHei";
+ $font-family-chinese = "Noto Serif SC";

Next 能加载用户自定义的样式,同样也能加载用户自定义样式使用的变量。然而同样比较可惜的是,自定义样式使用的变量里的定义(source/_data/variables.styl),不能覆盖变量默认定义的值hexo-next-theme/source/css/_variables/)。但是你可以在默认定义里注释掉变量后,在自定义变量里重新定义并赋值。

自定义样式使用的变量

在主题配置文件 _config.yml 里开启使用自定义样式变量:

custom_file_path:#head: source/_data/head.swig#header: source/_data/header.swig#sidebar: source/_data/sidebar.swig#postMeta: source/_data/post-meta.swig#postBodyEnd: source/_data/post-body-end.swig#footer: source/_data/footer.swig#bodyEnd: source/_data/body-end.swigvariable: source/_data/variables.styl#mixin: source/_data/mixins.styl#style: source/_data/styles.styl

首先,在主题的 source/css/_variables/base.styl 下注释掉你想自定义的变量。如:

// Font families.
//$font-family-chinese = "PingFang SC", "Microsoft YaHei";

然后在 source/_data/variables.styl (若无则新建)添加自定义变量并配置(你刚刚注释掉的变量)。

$font-family-chinese = "试试就试试";

我觉得 source/_data/variables.styl 的设计应该是为 source/_data/styles.styl 提供变量。像上面这样使用好像没啥必要。要说有点好处的话,就是方便了管理用户配置吧……

googleapis 镜像

虽然许多文章里都提到说 fonts.googleapis.com 不太稳定,但我访问还挺顺利的……

fonts.googleapis.com 的国内 CDN 比较少,只找到这么一篇帖子。

前端 CDNJS 库及 Google Fonts、Ajax 和 Gravatar 国内加速服务

用上面帖子里提供的 CDN,Next 的配置就可以这样:

font:enable: truehost: //fonts.loli.net

官方文档

https://theme-next.org/docs/theme-settings/#Fonts-Customization

如果修改不生效

  1. 浏览器清理下缓存。
  2. 是部署后没效果还是本地就没效果?hexo shexo d 前使用 hexo clean 清理下。
  3. 部署后没效果的话,稍微等一下远程的缓存刷新。
  4. 本地没生效的话,CSS 文件夹有没有使用 CDN?
  5. 再不行,进主题的 CSS 文件,或后文里提到的 styles.styl.post-body 单独添加字体相关的 CSS。
  6. 尝试升级 hexo-theme……
  7. 如果仍不能正常显示,或者确定不是自己的问题,可以去 theme-next/hexo-theme-next 提 issue 。

  1. font-family 的规则是这样的:(1)优先使用排在前面的字体。(2)如果找不到该种字体,或者该种字体不包括所要渲染的文字,则使用下一种字体。(3)如果所列出的字体,都无法满足需要,则让操作系统自行决定使用哪种字体。 ↩︎

  2. 利用 font-family 的规则:比如「font-family应 该优先指定英文字体,然后再指定中文字体。否则,中文字体所包含的英文字母,会取代英文字体。」这样的问题。 ↩︎

Hexo Next 主题字体相关配置相关推荐

  1. Hexo+next主题配置踩的坑

    Hexo+next主题配置踩的坑 下载安装完next主题后才发现一堆的坑.由于next的版本不同.所以有的配置文件和网上的教程不大一样.自己踩了N多坑,于是打算记录一下.于是自己试了好几天才差不多配置 ...

  2. IDEA优化配置(6)--- 炫酷的主题字体颜色设置(基于Intellij IDEA 2018)

    Intellij IDEA 2018/2019 优化配置.使用技巧.参数设置.快捷键汇总帖 IDEA 炫酷的主题字体颜色设置(基于IDEA 2018) 前言: IDEA中主题可以更换,大家可以直接到 ...

  3. IDEA主题配置--- 炫酷的主题字体颜色设置(基于Intellij IDEA 2018)

    Intellij IDEA 2018/2019 优化配置.使用技巧.参数设置.快捷键汇总帖 IDEA 炫酷的主题字体颜色设置(基于IDEA 2018) 前言: IDEA中主题可以更换,大家可以直接到 ...

  4. Pycharm的相关配置:改字体样式和大小、更改图片背景、更改控制台输出的字体颜色

    文章目录 Pycharm的相关配置:改字体样式和大小.更改图片背景.更改控制台输出的字体颜色 一.pycharm更改字体样式和大小 二.pycharm更改图片背景 三.pycharm更改控制台输出的字 ...

  5. 在Centos7.X上安装中文字体及相关配置

    在Centos7.X上安装中文字体及相关配置 文章目录 在Centos7.X上安装中文字体及相关配置 前言 一.查看系统字体 二.安装字体 三.检测linux上安装的中文字体 四.配置别名 前言 Li ...

  6. hexo博客matery主题的个性化配置

    文章目录 一.matery主题的下载与安装 二.基本配置 1.根目录下的 `_config.yml` 1.1. title 1.2. deploy与theme 2.themes目录下的`_config ...

  7. Hexo bamboo主题配置

    Hexo bamboo主题配置 本文内容出自 yuang01 如需了解更多可查看 https://hexo-theme-bamboo.netlify.app/ Front-matter(文章)配置 配 ...

  8. NexT的主题设定与配置

    本篇文章将介绍NexT的主题设定与配置 在Hexo 中有两份主要的配置文件,其名称都是_config.yml.其中,一份位于站点根目录下,主要包含 Hexo本身的配置:另一份位于主题目录下,这份配置由 ...

  9. 静态博客 Hexo material 主题安装

    静态博客 Hexo material 主题安装 注意,这里介绍的 Material 主题是 1.5.2 的版本 如果你还没有安装 Hexo,并且对它有兴趣,请前往 EasyHexo 这里将提供 Hex ...

  10. 【hexo博客】hexo+NexT主题个人博客

    1. 环境准备 参考链接 1.1 在github创建Git仓库 在github托管的GithubPage,也可以托管到Gitee,但是GiteePage好像有一些限制具体看自己选择 仓库名一定要输入 ...

最新文章

  1. Windows Server 2016-Netdom Join加域并指定OU (一)
  2. 专门入侵检测linux叫什么,入侵检测系统分析及其在Linux下的实现(上)
  3. 口红竟超10000款,IT直男谁来拯救?(文末有惊吓)
  4. Svn服务器的搭建与配置
  5. mailto 附带附件_我和我的朋友如何将附带项目发展为每月$ 17,000的业务
  6. 30-- 返回倒数第 k 个节点
  7. Git最新版下载(安装包)——阿里镜像快速下载
  8. Java Web-网页基础-HTML基础
  9. html5选择试题及答案,全套html5面试题大全带答案
  10. 用CSS Houdini画一片星空
  11. Java AtomicInteger类源码解析
  12. atitit.dw不能显示正确的百分比高度in dw的解决
  13. 《时代》评出50个最酷网站
  14. 离开互联网公司的年轻人,按下人生的重启键
  15. python统计个数的函数_NumPy常用的统计函数
  16. 地图配色及网络地图比较
  17. 基于Android的人脸识别
  18. Allegro PCB Design GXL (legacy) 从dxf文件中导入板框
  19. 英文投稿时图片的处理方法
  20. 深入Array.prototype.slice()方法

热门文章

  1. html自动弹出公告代码,可定时自动关闭的弹出层广告窗口代码
  2. Android音视频开发之——音频非压缩编码和压缩编码,神级Android进阶笔记
  3. 图像坐标系、相机坐标系和世界坐标系 相机的内、外参数矩阵
  4. springboot-cache缓存和J2cache二级缓存框架(带点漫画)
  5. Essential Netty in Action 《Netty 实战(精髓)》
  6. 抖音没有播放量怎么回事?是不是限流了?
  7. 【Robo 3T】MongoDB可视化工具-- Robo 3T使用教程
  8. BT656协议讲解与解码
  9. SSD【目标检测篇】
  10. 51单片机驱动继电器模块点灯