diff --git a/app/templates/template-07/components/Header.vue b/app/templates/template-07/components/Header.vue index 90b2e94..1f1c94b 100644 --- a/app/templates/template-07/components/Header.vue +++ b/app/templates/template-07/components/Header.vue @@ -88,48 +88,50 @@ -
-
- - - 在线咨询 - +
- + @@ -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)