nav · glass-apple · 灵感来源:visionOS 浮层 + Linear 顶部 nav
active = components
Top Navigation Bar · 玻璃导航 · 导航 / Glass
做一个 Top Navigation Bar(玻璃导航):
- 固定顶栏 + 背景模糊,滚动不跟随
- 导航项以图标说话:当前页放大并亮出文字
- 常驻 chrome 不参与路由淡入淡出
用这些 CSS 变量:--color-accent --color-bg --color-text --color-text-muted --glass-bg --glass-border --glass-inset --shadow-sm
灵感参考:visionOS 浮层 + Linear 顶部 nav--color-accent --color-bg --color-text --color-text-muted --glass-bg --glass-border --glass-inset --shadow-sm
焦点
(尚未接进整页场景)
/r/nav--glass-apple.json
免外壳的 markdown 版:/llms/components/nav--glass-apple.md变量:--glass-bg(surface 28%)/ --color-accent #7755ef。
import { type ReactNode } from 'react';
export interface NavItem {
id: string;
label: string;
href?: string;
}
interface Props {
logo?: ReactNode;
items: NavItem[];
activeId?: string;
onSelect?: (id: string) => void;
actions?: ReactNode;
}
export function GlassAppleNav({
logo,
items,
activeId,
onSelect,
actions,
}: Props) {
return (
<nav
className="
flex items-center gap-1 max-w-full overflow-x-auto
px-2 py-1.5
rounded-full
bg-[var(--glass-bg)] border border-[var(--glass-border)] backdrop-blur-xl
shadow-[var(--shadow-sm),var(--glass-inset)]
"
>
{logo && <div className="px-3">{logo}</div>}
<div className="flex items-center gap-0.5 min-w-max">
{items.map((item) => {
const isActive = item.id === activeId;
return (
<button
key={item.id}
type="button"
onClick={() => onSelect?.(item.id)}
className={`
press-feedback px-3 py-1.5 rounded-full text-sm whitespace-nowrap
transition-colors
${isActive
? 'bg-[var(--color-accent)] text-[var(--color-bg)] font-medium'
: 'text-[var(--color-text-muted)] hover:text-[var(--color-text)] hover:bg-[var(--glass-bg)]'
}
`}
>
{item.label}
</button>
);
})}
</div>
{actions && <div className="px-2">{actions}</div>}
</nav>
);
}
src/components/nav/glass-apple/