---
title: "Hextra v0.10"
date: 2025-08-14
authors:
  - name: imfing
    link: https://github.com/imfing
    image: https://github.com/imfing.png
tags:
  - Release
---

Hextra v0.10.0 是一个重大版本更新，包含多项新功能、架构升级和使用体验优化。

<!--more-->

本次更新还包含了来自 10 位 [新贡献者](#contributors) 的代码提交，并解决了社区长期期待的功能需求。

## 升级指南

> [!IMPORTANT]
> **破坏性变更**：此版本包含多项不兼容改动。升级前请仔细阅读检查清单和 [迁移指南](#migration-guide)。

升级至 v0.10.0 前，请确保：

- 已安装 Hugo v0.146.0+（扩展版）
- 检查自定义 CSS 的类名变更（参见 [CSS 类前缀变更](#css-class-prefix-changes) 和 [Tailwind CSS v4](#tailwind-css-v4)）
- 确认构建环境可访问互联网以下载 LaTeX 和/或 Mermaid 资源

准备就绪后，更新 Hugo 模块：

```bash
hugo mod get -u github.com/imfing/hextra@v0.10.0
```

## 新功能

以下是本版本值得关注的新特性：

- [**导航栏下拉菜单支持**](#dropdown-menu-support-in-navbar)：创建层级导航菜单
- [**增强搜索体验**](#enhanced-search-experience)：改进全标题搜索精度
- [**llms.txt 支持**](#llmstxt-support)：生成 AI 友好的站点大纲
- [**目录滚动高亮**](#table-of-contents-scroll-highlighting)：滚动时自动高亮当前章节
- [**同步标签页切换**](#synchronized-tab-switching)：跨多组标签页同步选择状态
- [**博客列表分页**](#blog-list-pagination)：为博客列表添加分页控件
- [**MathJax 支持**](#mathjax-support)：在 KaTeX 外新增数学公式渲染引擎

### 导航栏下拉菜单支持

在导航栏中创建下拉菜单，优化导航项组织方式。

```yaml {filename="hugo.yaml"}
menu:
  main:
    - identifier: products
      name: "产品"
    - name: "产品A"
      parent: products
      url: "/product-a"
    - name: "产品B"
      parent: products
      url: "/product-b"
```

![下拉菜单导航](https://github.com/user-attachments/assets/1816f9b9-7fe3-46e8-9546-f15e43e9914a)

### 增强搜索体验

- **全标题搜索**：可搜索所有层级标题内容，不限于页面标题
- **提升结果精度**：改进标题处理和链接准确性
- **修复结果导航**：搜索结果现在能正确跳转到对应章节

特别感谢 [@ldez](https://github.com/ldez) 推动搜索功能升级！

![增强版搜索结果](https://github.com/user-attachments/assets/f819652a-95d4-4843-b7e2-c7953a8cabe8)

### llms.txt 支持

现支持生成 [llms.txt](https://llmstxt.org/) 格式输出，使站点内容更便于 AI 工具和语言模型获取上下文参考。

```yaml {filename="hugo.yaml"}
outputs:
  home: [html, llms]
```

这将在站点根目录生成 `llms.txt` 文件。

![示例 llms 文本](https://github.com/user-attachments/assets/c6e929bb-0fce-4ab2-af15-a71c5a38b22c)

### 目录滚动高亮

滚动页面时，目录会自动高亮当前章节，使导航更加直观。

![目录滚动高亮效果](https://github.com/user-attachments/assets/d623fb99-7000-428b-af95-384eb722f0eb)

### 同步标签页切换

相同内容的标签页现在支持跨组同步。启用同步后，选择某个标签会更新所有包含相同项目的标签组（且会记住选择状态）。

```yaml {filename="hugo.yaml"}
params:
  page:
    tabs:
      sync: true
```

### 博客列表分页

为博客列表页面添加基础分页控件。

```yaml {filename="hugo.yaml"}
params:
  blog:
    list:
      pagerSize: 20 # 每页文章数
```

![博客分页效果](https://github.com/user-attachments/assets/60405fb4-ec36-4733-ba13-b4066396b5c5)

### MathJax 支持

除默认的 KaTeX 外，新增 [MathJax](https://www.mathjax.org/) 数学公式渲染引擎支持，可按需选择。

```yaml {filename="hugo.yaml"}
params:
  math:
    engine: "mathjax" # 默认为 "katex"
```

## 技术改进

### 框架与构建系统

- **Tailwind CSS v4 迁移**：完整迁移至 [Tailwind CSS v4](https://tailwindcss.com/blog/tailwindcss-v4)，提供更好的定制支持
- **Hugo 模板系统**：适配 Hugo [新版模板系统](https://gohugo.io/templates/new-templatesystem-overview/)（v0.146.0+）以确保未来兼容性
- **数学公式服务端渲染**：默认使用 Hugo 原生渲染改进数学公式处理
- **FlexSearch 0.8 升级**：搜索引擎升级至 [FlexSearch](https://github.com/nextapps-de/flexsearch) 0.8，提升 CJK（中日韩）内容编码处理能力
- **增强资源管理**：KaTeX 和 Mermaid 资源支持从 CDN 或本地加载

## 使用体验优化

- **动态 favicon 切换**：根据色彩偏好自动更新网站图标
- **反向分页**：支持通过页面 front matter 设置 `reversePagination`
- **Google 索引控制**：新增页面参数控制是否允许 Google 索引
- **宽度处理改进**：通过 CSS 变量优化响应式设计控制
- **样式改进**：现代化 Markdown 表格和水平线样式

## 错误修复与稳定性

- **Giscus 主题同步**：评论模块现在正确跟随暗黑/明亮模式切换
- **搜索结果准确性**：修复搜索结果链接和标题转义问题
- **标签页切换**：解决非同步模式下的导航问题
- **幽灵滚动**：修复禁用页脚时出现的异常滚动行为
- **图片可访问性**：避免重复渲染 alt 文本
- **链接渲染**：改进复杂站点结构下的基础 URL 处理

---

## 迁移指南

- [**Hugo 版本要求**](#hugo-version-requirements)：需 Hugo v0.146.0+（扩展版）
- [**CSS 类前缀变更**](#css-class-prefix-changes)：组件 CSS 类现统一使用 `hextra-` 前缀
- [**资源管理**](#asset-management-for-katex-and-mermaid)：KaTeX 和 Mermaid 资源改为构建时下载
- [**Tailwind CSS v4**](#tailwind-css-v4)：内部 CSS 编译现使用 Tailwind CSS v4.x 并采用 `hx:` 前缀

#### Hugo 版本要求

**影响**：使用旧版 Hugo 的站点

Hextra v0.10.0 因采用新模板系统，要求 Hugo v0.146.0 或更高版本（扩展版）。

**需执行操作**：升级 Hextra 前先更新 Hugo 至 v0.146.0+

#### CSS 类前缀变更

**影响**：自定义 CSS 中引用了 Hextra 组件类的站点

v0.10.0 为大多数组件 CSS 类引入统一的 `hextra-` 前缀，以提高可维护性并避免与用户样式冲突。

**需执行操作**：如果自定义 CSS 中引用了 Hextra 组件，请更新以下类名：

| 区域                 | 旧类名                     | 新类名                                           |
| -------------------- | -------------------------- | ----------------------------------------------- |
| 搜索（容器）         | `.search-wrapper`          | `.hextra-search-wrapper`                        |
| 搜索（输入框）       | `.search-input`            | `.hextra-search-input`                          |
| 搜索（结果）         | `.search-results`          | `.hextra-search-results`                        |
| 搜索（标题）         | `.search-wrapper .title`   | `.hextra-search-wrapper .hextra-search-title`   |
| 搜索（活动项）       | `.search-wrapper .active`  | `.hextra-search-wrapper .hextra-search-active`  |
| 搜索（无结果）       | `.search-wrapper .no-result` | `.hextra-search-wrapper .hextra-search-no-result` |
| 搜索（前缀）         | `.search-wrapper .prefix`  | `.hextra-search-wrapper .hextra-search-prefix`  |
| 搜索（摘要）         | `.search-wrapper .excerpt` | `.hextra-search-wrapper .hextra-search-excerpt` |
| 搜索（匹配项）       | `.search-wrapper .match`   | `.hextra-search-wrapper .hextra-search-match`   |
| 导航栏模糊效果       | `.nav-container-blur`      | `.hextra-nav-container-blur`                    |
| 汉堡菜单             | `.hamburger-menu`          | `.hextra-hamburger-menu`                        |
| 主题切换             | `.theme-toggle`            | `.hextra-theme-toggle`                          |
| 语言切换器           | `.language-switcher`       | `.hextra-language-switcher`                     |
| 侧边栏容器           | `.sidebar-container`       | `.hextra-sidebar-container`                     |
| 侧边栏活动项         | `.sidebar-active-item`     | `.hextra-sidebar-active-item`                   |
| 代码文件名           | `.filename`                | `.hextra-code-filename`                         |
| 复制图标             | `.copy-icon`               | `.hextra-copy-icon`                             |
| 成功图标             | `.success-icon`            | `.hextra-success-icon`                          |
| 步骤组件             | `.steps`                   | `.hextra-steps`                                 |

#### KaTeX 和 Mermaid 资源管理

**影响**：使用 KaTeX 或 Mermaid 的站点

v0.10.0 改为在构建时从 CDN 下载 KaTeX 和 Mermaid 资源。

**变更内容：**

- 构建过程需要联网下载这些资源
- 构建后不再需要外部 CDN 调用

**需执行操作：**

- 确保构建环境可访问互联网以下载资源
- 隔离环境中的站点需预下载资源并配置 Hextra 加载路径

#### Tailwind CSS v4

**影响**：大量自定义 CSS 引用了 `hx-*` 类名的站点

虽然 Hextra 内部已处理 Tailwind CSS v4 迁移，但深度定制的站点可能需要额外调整。

**变更内容：**

- 内部 CSS 编译使用 Tailwind CSS v4.x
- 工具类前缀改为 `hx:` 而非 `hx-`

## 贡献者

本次发布得益于 10 位新贡献者的代码提交：

- [@oosquare](https://github.com/oosquare) - KaTeX 字体、图片渲染钩子、链接处理改进
- [@Zabriskije](https://github.com/Zabriskije) - 修复幽灵滚动问题
- [@miniwater](https://github.com/miniwater) - 自定义页脚居中、图片 alt 文本优化
- [@MattDodsonEnglish](https://github.com/MattDodsonEnglish) - Google 索引控制、OpenGraph 文档
- [@KStocky](https://github.com/KStocky) - 反向分页功能
- [@PrintN](https://github.com/PrintN) - 文档展示增强
- [@hobobandy](https://github.com/hobobandy) - 标题间距优化
- [@dlwocks31](https://github.com/dlwocks31) - 韩语翻译更新
- [@TwoAnts](https://github.com/TwoAnts) - 修复 Giscus 主题切换
- [@ldez](https://github.com/ldez) - 搜索功能改进与错误修复

同时感谢长期贡献者 [@deining](https://github.com/deining) 和 [@yuri1969](https://github.com/yuri1969) 在文档、翻译和技术改进方面的持续支持。

**完整更新日志**：https://github.com/imfing/hextra/compare/v0.9.7...v0.10.0