资讯详情

资讯详情

Material for MkDocs 页头定制完全指南:自动隐藏、公告栏与“标记已读“

Material for MkDocs 页头定制完全指南自动隐藏、公告栏与标记已读【免费下载链接】mkdocs-materialDocumentation that simply works项目地址: https://gitcode.com/GitHub_Trending/mk/mkdocs-material本篇指南围绕 Material for MkDocs 的页头Header展开系统讲解如何在mkdocs.yml中开启页头自动隐藏、如何通过主题扩展添加公告栏Announcement bar以及如何让公告支持标记已读Mark as read并持久化用户偏好。文章不仅给出可直接复制运行的配置与模板代码还深入仓库源码说明这些功能在前端模板与 TypeScript 组件中的底层实现原理帮助你既会用、也知其所以然。页头里到底有什么Material for MkDocs 的页头承担着站点导航的核心职责。从源码模板 src/templates/partials/header.html 可以看出页头默认由以下部分组成站点 Logo 与首页链接config.extra.homepage或导航首页地址点击 Logo 即可回到首页移动端抽屉drawer开关按钮用于在窄屏展开/收起导航页头标题左侧显示site_name滚动切换时右侧会显示当前页面标题header-title/header-topic两个组件负责切换动画颜色主题切换按钮配置了theme.palette且为列表形式时渲染站点语言切换器配置了config.extra.alternate时渲染搜索框入口启用material/search插件后出现其完整配置见 设置站点搜索Git 仓库入口设置了config.repo_url后显示相关配置见 添加 Git 仓库。在 src/templates/partials/header.html 中页头的阴影状态由两个功能标志共同决定{% set class md-header %} {% if navigation.tabs.sticky in features %} {% set class class ~ md-header--shadow md-header--lifted %} {% elif navigation.tabs not in features %} {% set class class ~ md-header--shadow %} {% endif %}也就是说开启navigation.tabs.sticky粘性标签页时页头带阴影并被抬起未开启标签页时也会带阴影而中间状态则由前端运行时动态管理详见下文自动隐藏一节。理解这些构成是后续定制页头行为的基础。配置一页头自动隐藏header.autohide页头在默认情况下始终固定在页面顶部。Material for MkDocs 自 6.2.0 起提供header.autohide功能标志当用户向下滚动超过一定阈值时页头自动隐藏为正文腾出更多阅读空间一旦用户向上滚动页头又会重新出现。在mkdocs.yml中开启theme: features: - header.autohide这一功能标志同样被 docs/schema/theme.json 收录因此使用支持 JSON Schema 的编辑器编辑mkdocs.yml时可以获得自动补全与校验提示。底层实现三个关键阈值自动隐藏不是简单地滚动就消失其运行逻辑集中在 src/templates/assets/javascripts/components/header/_/index.ts 的isHidden函数中从源码可以提炼出三个关键行为方向判定组件通过bufferCount(2, 1)连续采样两次滚动偏移量offset.y比较前后两次大小得出滚动方向向下或向上见 isHidden 的方向计算转折点转向缓冲只有滚动方向发生明显变化——即Math.abs(y - offset.y) 100——才允许切换隐藏状态避免在临界点抖动闪烁见 isHidden 的隐藏判定起始阈值与搜索豁免页头只有在下滑超过400px之后才会进入隐藏流程并且当搜索面板打开时watchToggle(search)为真绝不隐藏确保用户随时能找到搜索入口见 isHidden 的阈值与豁免逻辑。最终mountHeader在订阅时通过el.classList.toggle(md-header--shadow, active !hidden)和el.hidden hidden同时控制阴影与显隐见 mountHeader 的状态管理。当页头隐藏时正文区域会向上扩展这正是该功能为内容腾出空间的实际效果。配置二公告栏Announcement bar自 5.0.0 起Material for MkDocs 内置了公告栏用于在页头上方展示项目新闻、版本提醒等重要信息。与页头不同公告栏不会一直停留用户向下滚动经过页头后公告栏会自动消失不会长时间占用视口。公告栏默认是空的需要通过扩展主题来填充内容。首先在mkdocs.yml中启用主题自定义目录具体流程见 扩展主题 与 覆盖模板块然后在自定义目录中创建main.html覆盖announce模板块{% extends base.html %} {% block announce %} !-- Add announcement here, including arbitrary HTML -- !-- 在此处添加公告内容支持任意 HTML -- {% endblock %}由于announce块的内容会原样渲染为 HTML你可以在其中自由放置链接、图标twemoji乃至内联样式。公告栏的实际渲染位置在 src/templates/base.html外层容器带有data-md-componentannounce标记内部使用.md-banner与.md-banner__inner.md-grid.md-typeset布局因此公告内容会自动套用md-typeset排版样式与正文视觉风格保持一致。公告栏的视觉样式从样式源码 src/overrides/assets/stylesheets/custom/layout/_banner.scss 可以看到.md-banner默认使用页脚前景色系--md-footer-fg-color--lighter作为文字颜色链接与strong标签会高亮为--md-footer-fg-color内嵌的twemoji图标会被渲染为带圆环背景的圆形徽标并在悬停时反色填充适合用来摆放版本号、紧急通知等强调型内容。与搜索、仓库入口的分工公告栏位于页头之上而页头内部还承载着 搜索栏 与 Git 仓库入口。三者分工明确公告栏负责一次性、有时效性的信息广播搜索与仓库入口负责常驻的导航与检索能力。如果你的站点启用了版本提示config.extra.versionsrc/templates/base.html 还会在公告栏下方渲染一个md-banner--warning风格的旧版本警告条两者互不干扰。配置三公告标记已读announce.dismiss自 8.4.0 起功能仍标记为experimental即实验特性Material for MkDocs 允许公告栏被用户标记已读公告内容右侧会出现一个关闭按钮点击后当前公告立即消失并且在公告内容发生变化之前不再显示。在mkdocs.yml中开启theme: features: - announce.dismiss该标志同样被收录在 docs/schema/theme.json 中。开启后src/templates/base.html 会在公告栏内渲染关闭按钮按钮的图标取自config.theme.icon.close默认回退到material/close你可以通过theme.icon配置更换为其他图标。底层实现内容哈希与本地存储标记已读的记忆机制非常精巧其核心在 src/templates/assets/javascripts/components/announce/index.ts 的watchAnnounce与mountAnnounce两个函数中内容指纹mountAnnounce首次挂载时若检测到announce.dismiss功能且公告栏非空会计算公告内容 HTML 的哈希__md_hash(content.innerHTML)见 mountAnnounce 的初始化哈希比对如果该哈希与浏览器本地存储中的__announce值一致则直接设置el.hidden true隐藏公告——这正是不重复显示的实现方式点击持久化watchAnnounce监听关闭按钮的单击事件{ once: true }只触发一次点击后同样计算当前内容哈希并通过__md_setnumber(__announce, hash)写入localStorage见 mountAnnounce 的持久化逻辑模板侧兜底非即时导航场景下模板片段 src/templates/partials/javascripts/announce.html 会在页面加载时再次执行同样的哈希比对将已读公告直接隐藏确保刷新页面后记忆依然生效。这套内容哈希 localStorage的方案意味着只要你在announce块中改动任何一个字符哈希就会变化公告便会重新对所有访客显示——无需手动清除缓存也无需维护任何服务端状态。与即时导航Instant Navigation的配合mountAnnounce在源码中特别注释了支持即时导航见 index.ts 第 85 行在启用即时导航的站点中页面切换不会触发整页刷新因此组件在挂载时显式检查el.hidden并执行哈希比对避免已读公告在切换页面后复活。这一细节说明该实验特性在主要使用场景下已做了充分的兼容处理。组合使用示例与注意事项把以上三项配置合并到一个典型的mkdocs.yml中theme: name: material features: - header.autohide # 向下滚动自动隐藏页头 - announce.dismiss # 公告栏支持标记已读实验特性 icon: close: material/close # 可选更换公告关闭按钮图标配合以下自定义main.html放在theme.custom_dir指向的目录中{% extends base.html %} {% block announce %} a hrefhttps://example.com/release-notes 新版本 9.0.0 已发布点击查看更新日志 /a {% endblock %}实践中有几点值得注意announce.dismiss标注为实验特性升级主题版本时留意 CHANGELOG 中的行为变更公告内容请保持简洁它位于页头之上、占用的首屏空间有限且会随滚动自动消失若同时使用header.autohide与navigation.tabs.sticky滚动时页头整体含标签页会被隐藏这是设计预期行为符合最大化内容空间的目标关闭按钮的可访问性aria-label在 base.html 中已自动生成自定义图标时无需额外处理。至此你已经掌握了页头自动隐藏、公告栏定制与标记已读三大能力的配置方法与源码级原理可以按需组合为你的文档站点打造更聚焦内容、更富时效信息的页头体验。【免费下载链接】mkdocs-materialDocumentation that simply works项目地址: https://gitcode.com/GitHub_Trending/mk/mkdocs-material创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
觉得有用,分享给同行:

为您的企业打造数字门面

稳重轻奢商务风格,端正雅致视觉,长效耐看不易过时。

立即咨询 →