GlassHeader
sticky 毛玻璃顶栏的壳。只负责随滚动渐进成型的玻璃层与定位,导航内容全由插槽给。
刻意不管导航项、断点与响应式收纳——那是各站自己的布局决定(谁横排、谁收进下拉、什么宽度切换),库替它们定就只能定错一次。壳里因此一个 viewport 断点都没有。
vue
<XGlassHeader>
<nav class="relative mx-auto flex h-16 max-w-5xl items-center justify-between px-6">
<a href="#top">Logo</a>
<ul class="hidden md:flex">…</ul>
<XNavMenu :items="links" class="md:hidden" />
</nav>
</XGlassHeader>
玻璃层的滚动插值优先交给 CSS 滚动驱动动画(animation-timeline: scroll()),组件里的 JS 只为不支持的浏览器兜底。这不是为了省事:纯 JS 插值有个致命窗口——SSR 首屏 opacity 恒为 0,而刷新恢复滚动位置或锚点直达时页面已经停在正文中部,那段时间顶栏是全透明的,正好糊在内容上。
blur 常驻不从 0 起步,否则 WebKit 不会为它建立合成层,后续调整 filter 值也不生效。不支持 backdrop-filter 时自动加深底色兜底,保证正文不会透上来压住导航文字。
观感覆写走 --ui-glass-bg / --ui-glass-border / --ui-glass-blur,缺省从 --ui-bg 与 --ui-border-muted 派生。
API
Props
| 名称 | 类型 | 默认值 | 说明 |
|---|---|---|---|
range | number | undefined | — | 玻璃完全成型所需的滚动距离(px),缺省 160 |
overlay | boolean | undefined | — | 覆盖式布局:顶栏浮在内容之上不占高度(缺省)。 传 false 则照常占位,适合内容需要从顶栏下方开始的站点。 |
Slots
| 插槽 | 说明 |
|---|---|
default | — |