Skip to content

fix(theme): 修复 Linkcard 图标滚动时遮挡顶栏的问题并规范 medium-zoom 目标 - #156

Merged
Dreamwxz merged 1 commit into
Mai-with-u:mainfrom
NovaOPCJ:fix/linkcard-navbar-overlap
Nov 2, 2026
Merged

Dreamwxz merged 1 commit into
Mai-with-u:mainfrom
NovaOPCJ:fix/linkcard-navbar-overlap

Conversation

@NovaOPCJ

@NovaOPCJ NovaOPCJ commented Nov 2, 2026

Copy link
Copy Markdown
Contributor

变更说明

问题背景

在页面滚动时(例如 manual/deployment/windows 中的一键包 Linkcard 跳转卡片),其右侧的 logo 图标滚动到页面顶栏(.VPNav)区域时会直接漂浮叠在顶栏之上(如原图所示遮挡了「常见问题」「更新日志」「关于」等菜单项)。

原因排查

  1. .medium-zoom-image 作用时机有误:
    • medium-zoom 初始化时会为匹配到的所有 img 预先挂载 .medium-zoom-image 类;
    • 原样式在 .vitepress/theme/style.css 中直接设置了 .medium-zoom-image { z-index: 9999 !important; },导致所有常态下的静态图片也被赋予了极高的 z-index;
    • 而 .linkcard-logo 为 display: flex,根据 CSS Flexbox 规范,flex 子项的 z-index 即使在 position: static 下也会生效并创建层叠上下文;
    • 顶栏 .VPNav 的 z-index 仅为 30(9999 > 30),导致卡片图标直接穿透并叠在顶栏上方。
  2. medium-zoom 误选了链接卡片图标:
    • .vitepress/theme/index.ts 中初始化选择器为 .main img,导致本应用作外链跳转的 <Linkcard> 小图标也被纳入图片画廊缩放监听。

修复方案

  1. 修正 zoom 层叠样式(style.css):
    • 将 .medium-zoom-image 改为 .medium-zoom-image--opened;
    • 仅在图片被点击放大激活时才赋予 z-index: 9999 !important(以压住 z-index: 100 的遮罩层),常态图片恢复默认层叠顺序。
  2. 规范 medium-zoom 目标(index.ts):
    • 选择器更新为 .main img:not(.linkcard img),避免对链接卡片图标挂载图片放大功能。
  3. 增加层叠上下文隔离(Linkcard.vue):
    • 为 .linkcard 容器添加 isolation: isolate;,防止卡片内未来任何子项意外逸出污染页面根层叠上下文。

验证情况

  • 本地启动 dev 服务器并在浏览器中滚动测试 manual/deployment/windows,卡片图标正常滚动并遮隐于顶栏下方;
  • 测试正文普通图片,点击图片仍可正常全屏缩放(openedZIndex: 9999);
  • 本地执行 pnpm docs:build 构建通过;
  • 本地执行 node scripts/docs-quality.mjs 门禁 8 项检查全部 0 违规通过。

@Dreamwxz
Dreamwxz merged commit e64a145 into Mai-with-u:main Nov 2, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants