跳转到正文
文章目录

本文档详细梳理了 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)

目录结构

</> PLAINTEXT
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 结构和共用组件:

</> PLAINTEXT
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 配置显示哪些模块:

</> YAML
home:
  contentOrder:
    - author-section      # 作者信息卡片
    - page-content        # 首页 Markdown 内容
    - featured-projects   # 精选项目网格
    - recent-posts        # 最近文章列表
    - featured-discussions # 精选讨论卡片

组件构成:

</> PLAINTEXT
首页
├── 面包屑导航 (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

组件构成:

</> PLAINTEXT
文章详情页
├── 面包屑导航 (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

组件构成:

</> PLAINTEXT
文章列表页
├── 面包屑导航 (navigation/breadcrumb.html)
├── 页面标题
├── 网站统计信息
│   ├── 文章总数
│   └── 分类/标签数量
├── 文章列表 (content/post-list.html)
│   └── 文章卡片 (content/card-base.html)
│       ├── 封面图 (移动端顶部/桌面端右侧)
│       ├── 标题
│       ├── 摘要
│       ├── 发布日期
│       ├── 阅读时长
│       └── 分类/标签
└── 分页导航 (navigation/pagination.html)

4. 讨论区详情页 (Discussion Single)

布局文件: layouts/discussions/single.html

组件构成:

</> PLAINTEXT
讨论详情页
├── 面包屑导航 (navigation/breadcrumb.html)
└── 评论系统 (features/comments.html)
    ├── 讨论标题 (作为评论框标题)
    └── 评论组件 (Giscus/Disqus 等)

特点: 极简设计,评论内容直接作为主体,无额外外框。


5. 讨论区列表页 (Discussion List)

布局文件: layouts/discussions/list.html

组件构成:

</> PLAINTEXT
讨论列表页
├── 面包屑导航 (navigation/breadcrumb.html)
├── 页面标题和介绍
└── 讨论卡片列表
    └── 简化卡片 (无图片、无时间)
        ├── 标题
        └── 摘要/描述 (可选)

6. 项目详情页 (Project Single)

布局文件: layouts/projects/single.html

组件构成:

</> PLAINTEXT
项目详情页
├── 面包屑导航 (navigation/breadcrumb.html)
├── 项目元信息
│   ├── 标题
│   ├── 状态 (completed/in_progress/planning)
│   ├── 技术栈
│   └── 链接 (GitHub/Demo)
├── 封面图片
├── 项目内容
└── 评论系统 (可选)

7. 项目列表页 (Project List)

布局文件: layouts/projects/list.html

组件构成:

</> PLAINTEXT
项目列表页
├── 面包屑导航 (navigation/breadcrumb.html)
├── 页面标题
└── 项目网格
    └── 项目卡片 (content/project-card.html)
        ├── 封面图
        ├── 标题
        ├── 摘要
        ├── 技术栈标签
        └── 状态标识

8. 关于页面 (About)

布局文件: layouts/about.html

组件构成:

</> PLAINTEXT
关于页面
├── 面包屑导航 (navigation/breadcrumb.html)
├── 个人卡片
│   ├── 头像
│   ├── 姓名/职位
│   ├── 简介
│   └── 社交链接
└── 链接区块 (data/links.yaml)
    ├── 社交链接 (GitHub, LinkedIn)
    └── 工具链接 (Vercel, Netlify, GitHub Pages)

9. 归档页面 (Archives)

布局文件: layouts/archives.html

组件构成:

</> PLAINTEXT
归档页面
├── 面包屑导航 (navigation/breadcrumb.html)
├── 页面标题
└── 按年月分组的文章列表
    └── 简洁列表项 (日期 + 标题)

10. 分类/标签页 (Taxonomy & Term)

布局文件:

  • layouts/taxonomy.html (分类/标签列表)
  • layouts/term.html (具体分类/标签下的文章)

组件构成:

</> PLAINTEXT
分类/标签列表 (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 - 核心配置

</> 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 - 网站参数

</> 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) 三种语言。

</> 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

</> 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)

</> YAML
---
title: "文章标题"
date: 2024-01-01
summary: "简要描述"
categories: ["技术"]
tags: ["Hugo", "CSS"]
series: "教程系列"
series_order: 1
cover: "/images/cover.jpg"
toc:
  enabled: true
  position: "left"
---

项目 (Projects)

</> YAML
---
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)

</> YAML
---
title: "讨论主题"
summary: "简要描述"
---

主要特性总结

导航与用户体验

  1. 粘性头部 - Logo、导航链接、主题/语言/深色模式切换
  2. 面包屑导航 - 所有页面类型支持,带图标
  3. 底部 Dock - 上下文感知的浮动工具栏
    • 返回按钮 (非首页)
    • 导航切换 (目录/系列)
    • 搜索 (Cmd+K 快捷键)
    • 评论跳转
    • 返回顶部
  4. 侧边栏目录 - 固定定位,Gumshoe 滚动监听
  5. 侧边栏系列 - 文章系列导航,带进度指示
  6. 搜索模态框 - 全文搜索,键盘导航

内容功能

  1. 文章系列 - 多部分文章支持,进度追踪
  2. 相关文章 - 基于内容相似度自动生成
  3. 文章导航 - 上一篇/下一篇链接
  4. 授权显示 - CC BY-NC-SA 4.0 (默认)
  5. 阅读进度条 - 顶部滚动指示器
  6. 字数统计与阅读时长 - 文章元信息显示

媒体与丰富内容

  1. 图片处理 - 本地/外部图片通用处理器
  2. 灯箱效果 - GLightbox 图片缩放
  3. 瀑布流画廊 - fjGallery 网格布局
  4. Masonry 布局 - 短代码支持
  5. KaTeX - 数学公式渲染
  6. 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 种不同评论系统
  • 性能优先 - 资源压缩、懒加载、指纹

该主题非常适合技术博客、作品集和文档网站,以其简洁的设计和广泛的功能集而著称。

评论

搜索站内内容

输入关键词开始搜索