-
-
-
+
@@ -143,6 +145,23 @@ import type { CmsNavigation } from '~/types'
const { siteInfo, siteName, siteLogo, siteIcon, navigations, showHeaderSearch, fetchSiteInfo } = useSite()
const mobileMenuOpen = ref(false)
+/*
+ * 移动端菜单(模板里 `v-if="mobileMenuOpen"` 那块)为什么长这样——两个坑都踩过,别改回去:
+ *
+ * 1) 必须
,不能留在 内。
+ * 带 `sticky`(position:sticky + z-50),这会让它**自建层叠上下文**;
+ * 面板留在里面时,z 写多大都只在 header 内部排序,整体仍被 DOM 靠后的
+ * (Hero 是 relative,同样自建上下文)盖住 → 菜单"展开了却看不见"。
+ *
+ * 2) 面板必须是 `fixed` 且四边锚定(inset-x-0 top-16 bottom-0 + overflow-y-auto)。
+ * 是 sticky 时会成为后代 fixed 的**包含块**,fixed 的定位基准从视口
+ * 退化成 header 的盒子并被其高度裁剪。菜单项多起来时(汇吉采 6 个带子菜单的栏目,
+ * 展开约 1000px)面板会撑出屏幕,而 header 里没有可滚动容器 →
+ * 「展开即滚不动」,底部栏目在任何机型上都够不着(原缺陷)。
+ * top/bottom 同时钉住后高度才由视口决定,长菜单才能在面板内滚动。
+ * ⚠️ 只写 `top-16` 不够:高度仍锁在 header 的 h-16 内,症状原样复现。
+ */
+
/** 子导航链接统一走 app/utils 的 getNavLink(自动避免 /page/4598?navId=4598 冗余拼接) */
function getChildPath(child: CmsNavigation): string {
return getNavLink(child)