个人技术博客。基于 Jekyll 4.4 + So Simple 主题(jekyll-theme-so-simple gem),部署到 GitHub Pages(ayeeshacheng.github.io)。
本文档记录项目主要文件结构与关键机制,便于后续修改与维护。
bundle install # 首次/依赖变更后
bundle exec jekyll serve # 本地预览 http://localhost:4000
bundle exec jekyll build # 构建到 _site/Windows 下用 PowerShell/Bash 均可;务必用
bundle exec以确保使用 Gemfile 锁定的 Jekyll 版本。
.
├── _config.yml # ★ 站点主配置(皮肤/导航/首页分区/固定链接)
├── Gemfile / Gemfile.lock # Ruby 依赖(主题 gem 在此声明)
├── index.md # 首页入口(layout: home)
├── categories.md # 分类页(permalink: /categories/)
├── 404.html # 404 页
│
├── _data/ # 站点数据(YAML,供 Liquid 读取)
│ ├── navigation.yml # 顶部导航菜单项
│ ├── authors.yml # 作者信息(头像/简介/社交链接)
│ └── text.yml # 界面文案(主题 UI 字符串)
│
├── _layouts/ # 布局模板(本地覆盖主题同名文件)
│ ├── default.html # 全局骨架:导航 → 内容 → 页脚 → 返回顶部
│ ├── home.html # 首页:英雄区 + 按 home_sections 渲染分区
│ ├── post.html # 文章页:标题/元信息/正文/分享/上下篇
│ ├── page.html # 通用页
│ └── categories.html 等 # 分类/标签/搜索等归档页
│
├── _includes/ # 局部模板(本地覆盖主题同名文件 + 新增)
│ ├── navigation.html # 粘性导航:logo + 菜单 + 移动端汉堡按钮
│ ├── hero.html # ★ 英雄区(标题/副标题/CTA 按钮)
│ ├── post-card.html # ★ 首页文章卡片
│ ├── footer.html # 三栏页脚(品牌/快速链接/关注+订阅)
│ ├── back-to-top.html # ★ 返回顶部浮钮(含滚动 JS)
│ └── ... # 其余为主题自带(文章元信息/分享/分页等)
│
├── _sass/ # ★ 自定义样式 partial(本次新增,见「样式系统」)
│ ├── _framework.scss # 聚合入口,@import 以下 7 个组件
│ ├── _framework-nav.scss # 导航样式
│ ├── _framework-hero.scss # 英雄区样式
│ ├── _framework-page.scss # 页面卡片容器
│ ├── _framework-cards.scss# 首页分区 + 文章卡片
│ ├── _framework-divider.scss # 分隔线
│ ├── _framework-footer.scss # 页脚样式
│ └── _framework-backtotop.scss # 返回顶部
│
├── assets/css/
│ ├── main.scss # 主样式入口(@import "so-simple")
│ └── skins/ # ★ 三套配色皮肤(暗色/浅色/默认)
│ ├── dark.scss # 暗色(当前启用)
│ ├── light.scss
│ └── default.scss
│
├── _posts/ # 文章(按分类建子目录,见「内容写作」)
│ ├── 2021-04-25-aboutme_tester.markdown # 「关于我」页内容(帖子形式)
│ ├── web3/ # Web3 分类
│ ├── workflow/ # N8N / workflow 分类
│ └── 测试/ # SoftwareTest 分类
│
├── docs/images/ # 图片资源(logo、头像、文章配图)
├── openspec/ # OpenSpec 变更管理(proposal/design/tasks)
└── samples/ # 页面框架参考样式(非站点内容)
★ = 本次「页面框架改造」新增或重写的文件。
So Simple 主题以 gem 形式安装,本地同名文件会逐文件覆盖主题 gem 里的对应文件(不是整体替换)。
- 想改某个主题布局/局部,就从 gem 里拷出对应文件到本地同名路径再编辑。
- gem 路径(Windows 示例):
C:\Users\<用户>\.local\share\gem\ruby\3.2.0\gems\jekyll-theme-so-simple-3.2.0\
已本地覆盖的目录:_layouts/、_includes/、_data/、assets/css/、_sass/(新增)。
配色由 assets/css/skins/*.scss 定义,每个皮肤文件先定义颜色变量($background-color、$accent-color 等),再 @import "so-simple/skin" 套用主题,最后 @import "framework" 引入本地框架组件。
.scss 文件顶部必须保留空 front matter ---\n---\n,否则 Jekyll 会把该文件当作静态文件、根本不编译(症状:改配色/样式不生效,渲染的仍是主题默认色)。三个皮肤文件顶部现在都有:
---
---
@charset "utf-8";
...新增/修改样式的流程:
- 在
_sass/_framework-*.scss里写样式(颜色一律用$xxx-color变量,不要硬编码色值); - 若新增组件,在
_sass/_framework.scss里@import它; - 颜色变量在对应皮肤
.scss顶部统一维护,三套皮肤各配一套。
首页按 _config.yml 里的 home_sections 列表,按固定顺序渲染各分类的文章卡片:
home_sections:
- name: Web3
- name: N8N
- name: SoftwareTest
hero_cta_text: "开始阅读" # 英雄区按钮文案name需对应文章 front-matter 里的categories(大小写敏感)。- 想新增首页分区:在此列表加一项 + 给文章写对应
categories即可。 - 无文章的分类会自动跳过、不渲染空分区。
新建文章:在 _posts/(或对应分类子目录)下建 YYYY-MM-DD-标题.markdown,front-matter 至少:
---
layout: post
title: "文章标题"
date: 2026-01-18 12:00:00 +0800
categories: Web3 # 决定它出现在首页哪个分区
---固定链接:_config.yml 里 permalink: /:categories/:title/,URL 由分类 + 标题生成。
导航菜单:编辑 _data/navigation.yml(顶部导航)与 _data/footer_links(_config.yml 中页脚社交图标)。
Gemfile里残留minimagem:是 Jekyll 脚手架默认带入的,未使用(实际主题是jekyll-theme-so-simple),可删可不删。_data/authors.yml残留样例作者Cornelius Fiddlebone:未使用,可清理;当前生效作者为AyeeshaCheng。- 构建时的 Sass 弃用警告(
slash-div/strict-unary/if-function等):来自主题 gem 自身代码,与本地改动无关,不影响产物,可忽略。 samples/目录:仅作页面框架设计参考,不属于站点内容。