文章目录
本文档详细梳理了 Hugo Narrow 主题的项目结构,帮助理解每个页面的组成方式,便于后续的开发和维护。
项目概述
Hugo Narrow 是一个现代化、极简主义风格的 Hugo 博客主题,采用 Tailwind CSS 4.0 构建,支持多语言、高级导航功能和丰富的自定义选项。
核心技术栈
- Hugo Extended (v0.146.0+)
- Tailwind CSS 4.0 + @tailwindcss/typography
- GLightbox (图片灯箱)
- fjGallery (瀑布流画廊)
- Gumshoe (目录滚动监听)
- KaTeX (数学公式渲染)
- Mermaid (流程图/图表)
- 多种评论系统 (Giscus/Disqus/Utterances/Waline/Artalk/Twikoo)
目录结构
caifangwen.github.io/
├── config/_default/ # 配置文件目录
│ ├── hugo.yaml # Hugo 核心配置
│ ├── languages.yaml # 多语言配置 (zh-cn, en, fr)
│ ├── menus.yaml # 导航菜单配置
│ └── params.yaml # 网站参数配置
├── content/ # 内容目录
│ ├── _index.md # 首页内容
│ ├── about/ # 关于页面
│ ├── posts/ # 博客文章 (147+ 篇)
│ ├── discussions/ # 讨论/分享区
│ ├── projects/ # 项目作品集
│ ├── archives/ # 归档页面
│ └── docs/ # 文档页面
├── layouts/ # 模板目录
│ ├── baseof.html # 基础模板
│ ├── home.html # 首页布局
│ ├── single.html # 单页布局
│ ├── list.html # 列表页布局
│ ├── about.html # 关于页布局
│ ├── archives.html # 归档页布局
│ ├── taxonomy.html # 分类/标签列表
│ ├── term.html # 术语页 (具体分类/标签)
│ ├── posts/ # 文章相关布局
│ ├── discussions/ # 讨论区布局
│ ├── projects/ # 项目页布局
│ ├── _partials/ # 可复用组件
│ │ ├── home/ # 首页组件
│ │ ├── content/ # 内容组件
│ │ ├── navigation/ # 导航组件
│ │ ├── ui/ # UI 组件
│ │ ├── layout/ # 布局组件
│ │ └── features/ # 功能组件
│ ├── _markup/ # Markdown 渲染钩子
│ └── _shortcodes/ # 自定义短代码
├── assets/ # 静态资源 (编译用)
│ ├── css/ # 样式表
│ ├── js/ # JavaScript
│ ├── icons/ # SVG 图标
│ └── images/ # 图片
├── data/ # 数据文件
│ ├── links.yaml # 外部链接数据
│ └── placeholder_images.yaml # 占位图配置
├── i18n/ # 国际化文件 (13 种语言)
├── static/ # 静态资源 (直接复制)
└── public/ # 生成的站点输出
模板层次结构
基础模板 (baseof.html)
所有页面的基础模板,定义了整体 HTML 结构和共用组件:
baseof.html
├── <head>
│ ├── 主题初始化脚本
│ ├── SEO 元标签
│ ├── CSS/JS 引用
│ └── 阅读进度条 (ui/reading-progress.html)
├── 头部导航 (navigation/header.html)
├── 主内容区 (max-w-4xl 居中)
│ └── {{ block "main" }} - 各页面具体内容
├── 侧边栏目录 (ui/toc-sidebar.html) - 文章页显示
├── 侧边栏系列导航 (ui/series-sidebar.html) - 系列文章显示
├── 页脚 (layout/footer.html)
├── 底部 Dock (ui/dock.html) - 浮动工具栏
├── 导航卡片 (ui/navigation-card.html) - 上一篇/下一篇
└── 搜索模态框 (ui/search-modal.html)
各页面组成详解
1. 首页 (Home)
布局文件: layouts/home.html
首页采用模块化设计,可通过 params.yaml 中的 contentOrder 配置显示哪些模块:
home:
contentOrder:
- author-section # 作者信息卡片
- page-content # 首页 Markdown 内容
- featured-projects # 精选项目网格
- recent-posts # 最近文章列表
- featured-discussions # 精选讨论卡片
组件构成:
首页
├── 面包屑导航 (navigation/breadcrumb.html)
├── 作者信息区 (home/author-section.html)
│ ├── 头像
│ ├── 标题/职位
│ ├── 简介
│ └── 社交链接
├── 页面内容区 (home/page-content.html)
│ └── 通知卡片样式的 Markdown 内容
├── 精选项目 (home/featured-projects.html)
│ └── 3 个精选项目的网格卡片
├── 最近文章 (home/recent-posts.html)
│ └── 文章卡片列表 (数量可配置)
└── 精选讨论 (home/featured-discussions.html)
└── 讨论卡片网格
2. 文章详情页 (Post Single)
布局文件: layouts/posts/single.html
组件构成:
文章详情页
├── 面包屑导航 (navigation/breadcrumb.html)
├── 文章元信息 (content/post-meta.html)
│ ├── 发布日期
│ ├── 更新时间
│ ├── 阅读时长
│ ├── 字数统计
│ ├── 标题
│ ├── 摘要/描述
│ └── 分类/标签/系列
├── 封面图片 (content/image-processor.html)
├── 文章内容 (article.prose)
├── 系列信息卡片 (content/series-info.html) - 如果是系列文章
├── 文章授权 (content/post-license.html)
├── 上一篇/下一篇 (content/post-navigation.html)
├── 相关文章 (content/related-posts.html)
└── 评论系统 (features/comments.html)
侧边栏 (固定定位,滚动监听):
- 左侧:文章目录 (ui/toc-sidebar.html)
- 右侧:系列导航 (ui/series-sidebar.html)
3. 文章列表页 (Post List)
布局文件: layouts/posts/list.html
组件构成:
文章列表页
├── 面包屑导航 (navigation/breadcrumb.html)
├── 页面标题
├── 网站统计信息
│ ├── 文章总数
│ └── 分类/标签数量
├── 文章列表 (content/post-list.html)
│ └── 文章卡片 (content/card-base.html)
│ ├── 封面图 (移动端顶部/桌面端右侧)
│ ├── 标题
│ ├── 摘要
│ ├── 发布日期
│ ├── 阅读时长
│ └── 分类/标签
└── 分页导航 (navigation/pagination.html)
4. 讨论区详情页 (Discussion Single)
布局文件: layouts/discussions/single.html
组件构成:
讨论详情页
├── 面包屑导航 (navigation/breadcrumb.html)
└── 评论系统 (features/comments.html)
├── 讨论标题 (作为评论框标题)
└── 评论组件 (Giscus/Disqus 等)
特点: 极简设计,评论内容直接作为主体,无额外外框。
5. 讨论区列表页 (Discussion List)
布局文件: layouts/discussions/list.html
组件构成:
讨论列表页
├── 面包屑导航 (navigation/breadcrumb.html)
├── 页面标题和介绍
└── 讨论卡片列表
└── 简化卡片 (无图片、无时间)
├── 标题
└── 摘要/描述 (可选)
6. 项目详情页 (Project Single)
布局文件: layouts/projects/single.html
组件构成:
项目详情页
├── 面包屑导航 (navigation/breadcrumb.html)
├── 项目元信息
│ ├── 标题
│ ├── 状态 (completed/in_progress/planning)
│ ├── 技术栈
│ └── 链接 (GitHub/Demo)
├── 封面图片
├── 项目内容
└── 评论系统 (可选)
7. 项目列表页 (Project List)
布局文件: layouts/projects/list.html
组件构成:
项目列表页
├── 面包屑导航 (navigation/breadcrumb.html)
├── 页面标题
└── 项目网格
└── 项目卡片 (content/project-card.html)
├── 封面图
├── 标题
├── 摘要
├── 技术栈标签
└── 状态标识
8. 关于页面 (About)
布局文件: layouts/about.html
组件构成:
关于页面
├── 面包屑导航 (navigation/breadcrumb.html)
├── 个人卡片
│ ├── 头像
│ ├── 姓名/职位
│ ├── 简介
│ └── 社交链接
└── 链接区块 (data/links.yaml)
├── 社交链接 (GitHub, LinkedIn)
└── 工具链接 (Vercel, Netlify, GitHub Pages)
9. 归档页面 (Archives)
布局文件: layouts/archives.html
组件构成:
归档页面
├── 面包屑导航 (navigation/breadcrumb.html)
├── 页面标题
└── 按年月分组的文章列表
└── 简洁列表项 (日期 + 标题)
10. 分类/标签页 (Taxonomy & Term)
布局文件:
layouts/taxonomy.html(分类/标签列表)layouts/term.html(具体分类/标签下的文章)
组件构成:
分类/标签列表 (Taxonomy)
├── 面包屑导航
├── 页面标题
└── 标签云/分类列表
具体分类/标签页 (Term)
├── 面包屑导航
├── 分类/标签名称
└── 该分类/标签下的文章列表
核心组件详解
内容组件 (_partials/content/)
| 组件 | 用途 |
|---|---|
card-base.html |
文章卡片基础组件 (封面图、标题、摘要、元信息) |
post-list.html |
文章列表渲染器 |
post-meta.html |
文章元信息 (日期、阅读时长、标签、分类) |
post-license.html |
CC 授权显示 |
post-navigation.html |
上一篇/下一篇导航 |
related-posts.html |
相关文章网格 |
series-info.html |
系列信息卡片 (进度条、导航) |
project-card.html |
项目卡片 |
image-processor.html |
通用图片处理器 (本地/外部图片) |
link.html |
链接卡片组件 |
导航组件 (_partials/navigation/)
| 组件 | 用途 |
|---|---|
header.html |
粘性头部导航 (Logo、菜单、主题/语言切换) |
breadcrumb.html |
面包屑导航 (带图标) |
pagination.html |
分页导航 |
mobile-menu-toggle.html |
移动端菜单切换按钮 |
UI 组件 (_partials/ui/)
| 组件 | 用途 |
|---|---|
toc-sidebar.html |
固定定位的文章目录 (滚动监听) |
series-sidebar.html |
固定定位的系列导航 |
dock.html |
底部浮动工具栏 (搜索、返回顶部、评论等) |
search-modal.html |
全文搜索模态框 (Cmd+K 快捷键) |
theme-switcher.html |
主题选择器 (11 种配色) |
dark-mode-switcher.html |
深色/浅色模式切换 |
language-switcher.html |
语言选择器 |
reading-progress.html |
滚动进度条 |
功能组件 (_partials/features/)
| 组件 | 用途 |
|---|---|
icon.html |
SVG 图标渲染器 (从 assets/icons/) |
comments.html |
多评论系统集成器 |
katex.html |
数学公式渲染 |
mermaid.html |
流程图/图表渲染 |
analytics.html |
统计代码集成 |
数据流与配置
配置文件
hugo.yaml - 核心配置
baseURL: "https://example.com"
languageCode: "zh-cn"
title: "网站标题"
# 固定链接结构
permalinks:
posts: "/blog/:slug/"
projects: "/project/:slug/"
# 分页设置
pagination:
pagerSize: 12
# 分类法
taxonomies:
category: categories
tag: tags
series: series
# Markdown 渲染 (Goldmark)
markup:
goldmark: {...}
# 语法高亮 (Chroma)
highlighting: {...}
# 输出格式
outputs:
home: [HTML, RSS, JSON, WebAppManifest]
# SEO 设置
sitemap: {...}
robotsTXT: {...}
params.yaml - 网站参数
# 作者信息
author:
name: "作者名"
bio: "个人简介"
avatar: "/images/avatar.jpg"
# 头部配置
header:
sticky: true
showLogo: true
showUIControls: true
# 目录和系列设置
toc:
enabled: true
position: "left"
dimensions: {...}
series:
enabled: true
position: "right"
# 11 种配色主题
themes:
- name: "default"
- name: "claude"
- name: "bumblebee"
# ...
# 首页模块顺序
home:
contentOrder: [...]
# 评论系统
comments:
enabled: true
system: "giscus" # 或 disqus/utterances/waline/artalk/twikoo
# 统计代码
analytics: {...}
# KaTeX, Mermaid, Lightbox 设置
katex: {...}
mermaid: {...}
lightbox: {...}
languages.yaml - 多语言
支持中文 (zh-cn)、英文 (en)、法文 (fr) 三种语言。
menus.yaml - 导航菜单
# 主菜单
main:
- name: "首页"
pageRef: "/"
- name: "文章"
pageRef: "/posts"
- name: "讨论"
pageRef: "/discussions"
- name: "项目"
pageRef: "/projects"
- name: "分类"
pageRef: "/categories"
- name: "标签"
pageRef: "/tags"
- name: "归档"
pageRef: "/archives"
# 页脚菜单
footer:
- name: "关于"
pageRef: "/about"
- name: "联系"
url: "mailto:email@example.com"
- name: "RSS"
url: "/index.xml"
# 社交链接
social:
- name: "GitHub"
url: "https://github.com/..."
params:
icon: "github"
- name: "LinkedIn"
url: "https://linkedin.com/..."
params:
icon: "linkedin"
- name: "Email"
url: "mailto:..."
params:
icon: "mail"
数据文件
data/links.yaml
social:
- name: "GitHub"
url: "https://github.com/..."
icon: "github"
- name: "LinkedIn"
url: "https://linkedin.com/..."
icon: "linkedin"
tools:
- name: "Vercel"
url: "https://vercel.com"
- name: "Netlify"
url: "https://netlify.com"
- name: "GitHub Pages"
url: "https://pages.github.com"
data/placeholder_images.yaml
占位图配置,用于没有封面图的文章/项目。
Markdown 渲染钩子
位于 layouts/_markup/,自定义 Markdown 元素的渲染方式:
| 钩子 | 用途 |
|---|---|
render-image.html |
自定义图片渲染 (支持灯箱) |
render-link.html |
外部链接处理 (添加图标) |
render-codeblock.html |
代码块 (复制/折叠功能) |
render-codeblock-mermaid.html |
Mermaid 图表渲染 |
render-blockquote.html |
样式化引用块 |
自定义短代码
位于 layouts/_shortcodes/:
| 短代码 | 用途 |
|---|---|
{{</* bilibili */>}} |
嵌入 B 站视频 |
{{</* tencent */>}} |
嵌入腾讯视频 |
{{</* x */>}} |
嵌入 X (Twitter) 推文 |
{{</* button */>}} |
自定义样式按钮 |
{{</* link */>}} |
链接卡片 |
{{</* icon */>}} |
内联图标 |
{{</* masonry */>}} |
瀑布流画廊布局 |
内容类型与 Front Matter
文章 (Posts)
---
title: "文章标题"
date: 2024-01-01
summary: "简要描述"
categories: ["技术"]
tags: ["Hugo", "CSS"]
series: "教程系列"
series_order: 1
cover: "/images/cover.jpg"
toc:
enabled: true
position: "left"
---
项目 (Projects)
---
title: "项目名称"
summary: "项目描述"
cover: "/images/project.jpg"
featured: true
status: "completed" # completed, in_progress, planning
github: "https://github.com/..."
demo: "https://demo.url"
tech_stack: ["React", "Node.js"]
---
讨论 (Discussions)
---
title: "讨论主题"
summary: "简要描述"
---
主要特性总结
导航与用户体验
- 粘性头部 - Logo、导航链接、主题/语言/深色模式切换
- 面包屑导航 - 所有页面类型支持,带图标
- 底部 Dock - 上下文感知的浮动工具栏
- 返回按钮 (非首页)
- 导航切换 (目录/系列)
- 搜索 (Cmd+K 快捷键)
- 评论跳转
- 返回顶部
- 侧边栏目录 - 固定定位,Gumshoe 滚动监听
- 侧边栏系列 - 文章系列导航,带进度指示
- 搜索模态框 - 全文搜索,键盘导航
内容功能
- 文章系列 - 多部分文章支持,进度追踪
- 相关文章 - 基于内容相似度自动生成
- 文章导航 - 上一篇/下一篇链接
- 授权显示 - CC BY-NC-SA 4.0 (默认)
- 阅读进度条 - 顶部滚动指示器
- 字数统计与阅读时长 - 文章元信息显示
媒体与丰富内容
- 图片处理 - 本地/外部图片通用处理器
- 灯箱效果 - GLightbox 图片缩放
- 瀑布流画廊 - fjGallery 网格布局
- Masonry 布局 - 短代码支持
- KaTeX - 数学公式渲染
- Mermaid - 流程图/图表渲染
评论系统 (多平台)
- Giscus (基于 GitHub Discussions)
- Disqus
- Utterances
- Waline
- Artalk
- Twikoo
主题与配色
- 11 种配色主题: Default, Claude, Bumblebee, Emerald, Nord, Sunset, Abyss, Dracula, Amethyst, Slate, Twitter
- 深色模式 - 系统偏好检测 + 手动切换
- 自定义 CSS - 支持用户自定义样式
SEO 与性能
- 元标签 (描述、关键词、作者)
- Open Graph 标签
- 规范 URL
- 站点地图
- Robots.txt
- RSS 订阅
- Web App Manifest (PWA 支持)
- 资源压缩 + 指纹 (生产环境)
多语言支持
- 13 种语言文件 (
i18n/) - 可配置默认语言 (zh-cn)
- 头部语言切换器
总结
Hugo Narrow 是一个生产就绪、功能丰富的 Hugo 博客主题,具有:
- 模块化架构 - 通过 partials 和配置轻松自定义
- 现代 UI/UX - Tailwind CSS 4.0、响应式设计、流畅动画
- 高级导航 - 目录、系列、面包屑、Dock、搜索
- 多语言 - 支持 13 种语言
- SEO 优化 - 元标签、站点地图、RSS、简洁 URL
- 丰富媒体支持 - 图片、画廊、灯箱、数学公式、图表
- 评论集成 - 6 种不同评论系统
- 性能优先 - 资源压缩、懒加载、指纹
该主题非常适合技术博客、作品集和文档网站,以其简洁的设计和广泛的功能集而著称。
评论