我如何在 Kgateway Docs 中添加 Glossary Tooltip Hover(使用 Hugo Shortcodes)

发布: (2025年12月11日 GMT+8 21:12)
6 min read
原文: Dev.to

Source: Dev.to

引言

当我加入 Kgateway 文档团队,担任技术写手和贡献者 时,在审阅和用户反馈中出现了一个反复出现的模式:

读者经常在核心术语上卡住。

Kgateway 涉及多个领域——Kubernetes、Envoy、Service Mesh、AI/Agentic 模式以及 Kgateway‑特有的架构——因此像 Clusters (Envoy)BackendsA2AAmbient MeshData Plane 这样的概念随处可见。新读者常常需要离开页面去了解这些术语,打断了学习流程。

为了解决这个问题,我使用 Hugo 短代码实现了一个可复用的术语表工具提示悬停系统。结果是文档更清晰,切换上下文的次数更少,整体感受也更精致。

为什么术语表工具提示很重要(尤其在技术文档中)

工具提示看似是一个微小的 UI 细节,但它们能显著提升 阅读体验

  1. 加快学习,减少上下文切换 – 读者不必打开多个标签页来理解一句话;一次悬停即可获得即时定义。
  2. 帮助统一混合术语 – Kgateway 混用了 Kubernetes CRD、Envoy 概念、Agentic AI 术语、网格网络术语以及自己的关键字。中心化的术语表可以保持一致性。
  3. 页面更简洁、可读性更高 – 与其重复出现定义,不如用工具提示让正文保持整洁。
  4. 唯一真相来源(通过 YAML) – 在数据存储中更新一次定义,即可在所有位置同步生效。

但有个陷阱:不要滥用工具提示

我们制定了一个简单的规则:

不要在每一次出现的术语上都使用工具提示。
过多的悬停效果会分散读者注意力,尤其在内容密集的技术页面上。我们采用了 策略性放置模型

工具提示的放置位置(以及不该放置的地方)

在以下位置使用工具提示

位置原因
首次引入术语的地方帮助读者建立初始理解
概览或概念页面这些页面通常会引入大量新概念
大量讨论某一概念的页面只放置一两次工具提示
术语表页面可选,但很有帮助

避免在以下位置使用工具提示

  • 每一次重复出现
  • 文本较长的表格
  • 代码块
  • 标题(会破坏格式)

这样可以保持 UI 的简洁和专业。

我是如何实现术语表工具提示的(Hugo 短代码 + YAML + CSS)

1. YAML 术语表数据存储

文件: /data/glossary.yaml

A2A:
  short: "Agent-to-Agent Protocol — secure, policy-driven communication between sidecarless agents."

Agentgateway:
  short: "An open-source data plane optimized for agentic AI connectivity."

Cluster (Envoy):
  short: "Envoy 'cluster' — a logical grouping of upstream endpoints used for load balancing."

Backends:
  short: "Destination services or endpoints Kgateway routes traffic to (Kubernetes services, Lambdas, external hosts)."

这相当于一个包含 30 多个关键概念的中心小型数据库。

2. Hugo 工具提示短代码

文件: layouts/shortcodes/gloss.html

{{ $key := .Get 0 }}
{{ $entry := index site.Data.glossary $key }}

{{ if $entry }}

  {{ .Inner | default $key }}
  
    **{{ $key }}**
    {{ $entry.short }}
    {{ if $entry.link }}
    
      Learn more
    
    {{ end }}
  

{{ else }}
{{ .Inner | default $key }}
{{ end }}

在 Markdown 中的使用方式

The translation cycle starts by defining {{}}Envoy clusters{{}}...

Hover definition for “Control Plane”

图 1:在概念架构页面上对 “Control Plane” 的工具提示悬停定义。

3. 工具提示样式(CSS)

文件: static/css/glossary.css

.glossary-term {
  position: relative;
  cursor: help;
  border-bottom: 1px dotted #666;
}

.glossary-term > span {
  visibility: hidden;
  opacity: 0;
  width: 280px;
  padding: 12px;
  background: #fff;
  border-radius: 6px;
  position: absolute;
  bottom: 125%;
  left: 50%;
  transform: translateX(-50%);
  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
  transition: opacity .3s;
}

.glossary-term:hover > span,
.glossary-term:focus > span {
  visibility: visible;
  opacity: 1;
}

该工具提示具备可访问性、响应式且不突兀。

4. 术语表页面

我们还创建了一个 glossary.md 页面,用于:

  • 提升 SEO
  • 将所有术语集中在一起
  • 提供完整的参考索引

结语

术语表悬停工具提示虽小,却能让你的文档:

  • 更易阅读
  • 对初学者更友好
  • 更加统一
  • 更具现代感

在我为 Kgateway 文档贡献的过程中,这一功能显著提升了用户体验。无论你使用 Hugo 还是其他静态站点生成器,我都强烈建议加入可复用的工具提示系统。

感谢阅读!如果你想要可复用的模板或模块版本,随时提问。以下是此任务的合并 Pull Request: Tooltip Hover feature

Back to Blog

相关文章

阅读更多 »

如何文档化企业系统?

介绍 在现实世界中,极少有开发者像对待代码那样重视对系统进行文档化。没有文档,系统……