跳过正文
  1. 文章/

在GoHugo里用上Sassy CSS

· loading · loading ·
仁才德
作者
仁才德
居住在韩国首尔的领导者和软件工程师

这个站点的CSS不知不觉长成了一个又长又重复的大文件,我终于下决心迁到SASS。如果你也在用GoHugo建站,这件事花你十五分钟,之后每次改样式都在回本。

下面是我的设置过程。

为什么要用SASS
#

纯CSS只要页面稍微多一点就开始乱。SASS提供变量、嵌套规则、mixin和函数,颜色、常用布局这些东西可以集中放在一处,不用到处复制粘贴。对Hugo用户来说最省心的一点是:Hugo Pipes自带SCSS编译,不需要额外的构建工具,也不用跑什么监听脚本。

干活时值得开着的两个页面:

动手设置
#

1. 准备assets目录
#

Hugo会去项目根目录找assets文件夹,所以在根目录新建(或把现有的挪过去)。如果想把它放进resources里,就在config.toml里告诉Hugo位置:

assetDir = "resources/assets"

2. 建一个sass文件夹
#

assets里新建一个叫sass的文件夹,SCSS文件都放这里。

3. 添加入口文件
#

sass文件夹里创建main.scss。Hugo编译的就是这个文件,先写几行SCSS验证一下:

// assets/sass/main.scss

// 变量
$primary-color: #3498db;

// 混合
@mixin center {
  display: flex;
  justify-content: center;
  align-items: center;
}

// 样式
body {
  font-family: Arial, sans-serif;
  background-color: $primary-color;
}

h1 {
  @include center;
  color: white;
}

4. 接进模板
#

head.html这个partial里,加载并压缩编译好的样式表:

{{ $style := resources.Get "sass/main.scss" | resources.ToCSS | resources.Minify }}
<link rel="stylesheet" href="{{ $style.Permalink }}">

只要确认这里的文件名和你的实际入口文件(main.scss)一致就行。

把样式拆开
#

项目变大之后,可以把SCSS拆成多个partial文件,再在main.scss里导入:

// assets/sass/_variables.scss
$primary-color: #3498db;

// assets/sass/_mixins.scss
@mixin center {
  display: flex;
  justify-content: center;
  align-items: center;
}

// assets/sass/main.scss
@import "variables";
@import "mixins";

body {
  background-color: $primary-color;
}

h1 {
  @include center;
  color: white;
}

真的就这么多。四步搞定,之后每次构建Hugo都会重新编译样式。我本来做好了跟资源管线大战一场的准备,结果它一次就跑通了。