JGuang

顶部导航

TopNav · Astryx

交互预览
npm install @astryxdesign/core@0.7.1 @astryxdesign/theme-neutral@0.7.1 @stylexjs/stylex@0.19.0

顶部导航 · TopNav

顶部导航用于导航场景。下面的官方示例展示原生用法与状态,属性名保持上游 API。

安装与前置条件

npm install @astryxdesign/core@0.7.1 @astryxdesign/theme-neutral@0.7.1 @stylexjs/stylex@0.19.0

需要 React 19+,按顺序导入基础 CSS 和主题,并设置 Theme Provider。参见开始使用。

示例与使用方式

  • 顶部导航 · 综合展示 1:首先体验这个示例,再查看代码理解组件的组合方式。
  • 顶部导航 · 综合展示 2:可交互查看这一用法的行为,复制代码时保留它实际使用的属性与导入。
  • 顶部导航 · 综合展示 3:可交互查看这一用法的行为,复制代码时保留它实际使用的属性与导入。
  • 顶部导航 · 综合展示 4:可交互查看这一用法的行为,复制代码时保留它实际使用的属性与导入。
  • 顶部导航 · 综合展示 5:可交互查看这一用法的行为,复制代码时保留它实际使用的属性与导入。
  • 顶部导航 · 综合展示 6:可交互查看这一用法的行为,复制代码时保留它实际使用的属性与导入。
  • 顶部导航 · 综合展示 7:可交互查看这一用法的行为,复制代码时保留它实际使用的属性与导入。
  • 顶部导航 · 交互示例 8:可交互查看这一用法的行为,复制代码时保留它实际使用的属性与导入。
  • 顶部导航 · 交互示例 9:可交互查看这一用法的行为,复制代码时保留它实际使用的属性与导入。
  • 顶部导航 · 基础用法 10:可交互查看这一用法的行为,复制代码时保留它实际使用的属性与导入。
  • 顶部导航 · 交互示例 11:可交互查看这一用法的行为,复制代码时保留它实际使用的属性与导入。
  • 顶部导航 · 基础用法 12:可交互查看这一用法的行为,复制代码时保留它实际使用的属性与导入。
  • 顶部导航 · 交互示例 13:可交互查看这一用法的行为,复制代码时保留它实际使用的属性与导入。
  • 顶部导航 · 基础用法 14:可交互查看这一用法的行为,复制代码时保留它实际使用的属性与导入。
  • 顶部导航 · 基础用法 15:可交互查看这一用法的行为,复制代码时保留它实际使用的属性与导入。
  • 顶部导航 · 基础用法 16:可交互查看这一用法的行为,复制代码时保留它实际使用的属性与导入。
  • 顶部导航 · 基础用法 17:可交互查看这一用法的行为,复制代码时保留它实际使用的属性与导入。
  • 顶部导航 · 交互示例 18:可交互查看这一用法的行为,复制代码时保留它实际使用的属性与导入。
  • 顶部导航 · 交互示例 19:可交互查看这一用法的行为,复制代码时保留它实际使用的属性与导入。

API 与上游详细参考

优先使用 0.7.1 官方中文说明;上游尚未提供中文的条目保留英文。属性名、类型及默认值保持原生 API,不把示例状态名称当成组件属性。

Top Nav

TopNav is a horizontal navigation bar for product-level navigation in application headers. Use TopNav for 5 or fewer always-visible navigation items, or minimal navigation paired with search and controls. For complex navigation hierarchies, use a sidebar; to filter content, use tabs or filter buttons instead.

属性类型默认值说明
headingReactNodeHeading slot content (logo, brand): positioned at the left edge of the nav bar.
startContentReactNodeStart content slot for navigation items or breadcrumbs: positioned after the heading, left-aligned.
childrenReactNodeAlias for startContent. Prefer startContent when composing with heading, centerContent, or endContent; children keeps the common React nav-item pattern from silently dropping items.
centerContentReactNodeCenter content slot (tabs, search bar, primary navigation): when provided, switches the layout to a three-column CSS grid for true horizontal centering.
endContentReactNodeEnd content slot for search, icons, or user profile: positioned at the right edge.
labelstring'Top navigation'Accessible label for the navigation landmark, applied as aria-label on the <nav> element.
xstyleStyleXStylesStyleX styles for layout customization (margins, positioning, sizing). Must be a stylex.create() value: not an inline style object like style={{}}.

使用建议

  • Include a product logo and name in the heading slot to clearly identify the application.
  • Limit primary navigation items to 5 or fewer for quick scanning and minimal cognitive load.
  • 避免:Avoid using TopNav to filter page content; use Tabs or filter controls instead.
  • 避免:Avoid deeply nested navigation hierarchies; keep menus to one level of depth.

主题 API

{
  "targets": [
    {
      "className": "astryx-top-nav",
      "states": [
        "mode"
      ]
    },
    {
      "className": "astryx-top-nav-item",
      "states": [
        "mode",
        "selected"
      ]
    },
    {
      "className": "astryx-top-nav-heading"
    },
    {
      "className": "astryx-top-nav-mega-menu",
      "states": [
        "mode"
      ]
    },
    {
      "className": "astryx-top-nav-mega-menu-item",
      "states": [
        "mode"
      ]
    },
    {
      "className": "astryx-top-nav-mega-menu-featured-card"
    },
    {
      "className": "astryx-top-nav-menu"
    }
  ]
}

TopNavHeading

TopNavItem

TopNavMenu

TopNavMegaMenu

TopNavMegaMenuItem

TopNavMegaMenuFeaturedCard

组件结构

  • Product icon and name: Identifies the product in the navigation bar.
  • Navigation items: Primary links for product-level destinations.
  • More menu: Overflow menu for additional navigation items.
  • Flex area: Flexible region for search, primary action buttons, or other controls.

Top Nav Heading

TopNav 标题插槽的产品/套件/账户标题组件。支持智能交互边界逻辑:标志、标题文本、独立链接的上标题/下标题,以及带自动箭头指示器的可选菜单弹出层。

属性类型默认值说明
logoReactNode在标题文本前显示的标志元素。可以是图片、NavIcon 或任何 ReactNode。
headingstring作为主标题文本显示的产品/应用名称。
headingHrefstring标题文本的链接(如产品首页)。当没有菜单且这是唯一的 href 时,整个标题变为一个可点击链接。
superheadingstring标题上方的文本(如套件名称)。以较小的次要样式渲染。
superheadingHrefstring上标题文本的链接(如套件首页)。与菜单一起提供时,渲染为独立的内联链接。
subheadingstring标题下方的文本(如账户上下文)。以较小的次要样式渲染。
subheadingHrefstring下标题文本的链接。与菜单一起提供时,渲染为独立的内联链接。
headerEndContentReactNode在标题行尾部渲染的内容(如徽章或状态指示器)。
menuReactNode在弹出层下拉菜单中显示的菜单内容。提供时自动显示箭头指示器。交互边界由 href 的存在决定:没有 href 时整个标题为触发器;有 href 时链接独立,箭头区域为触发器。
asLinkComponentType用于替代 <a> 的自定义链接组件。覆盖 LinkProvider 设置的默认组件。必须接受 href、className、style 和 children 属性。
xstyleStyleXStyles用于布局自定义的 StyleX 样式。必须是 stylex.create() 的值。

Top Nav Item

用于 TopNav startContent 的导航链接项,渲染为具有悬停和选中状态的锚点。

属性类型默认值说明
label *string导航项的无障碍标签。用作可见文本,或作为仅图标项的 aria-label。
hrefstring导航目标 URL。
isSelectedbooleanfalse此导航项是否为当前选中状态。设置 aria-current="page" 并应用高亮样式。
isDisabledbooleanfalse导航项是否被禁用。设置 aria-disabled,移除 href/target 使其无法导航,并阻止交互。
isIconOnlybooleanfalseRenders the item as a square icon-only element. When true, label becomes the aria-label and visible text is hidden. Requires icon to be set.
iconReactNode在标签前显示的可选图标。如果在没有子元素的情况下提供,项目变为仅图标模式。
childrenReactNode替代标签文本渲染的自定义内容。省略且提供了图标时,项目变为仅图标模式。
asLinkComponentType替代 <a> 渲染的自定义组件。覆盖 LinkProvider 设置的提供者级别默认值。必须接受 href、className、style 和 children 属性。

Top Nav Mega Menu

导航项,在悬停时显示全宽超级菜单面板。使用插槽 API(items 和 featured)。TopNavMegaMenuItem 在桌面和移动抽屉模式中自行渲染。

属性类型默认值说明
label *string触发按钮的可见标签。
itemsReactNode菜单项插槽,通常为 TopNavMegaMenuItem 组件,但接受任何 ReactNode。
featuredReactNode特色内容插槽,桌面端显示在右侧面板,移动抽屉中显示在项目下方。
delaynumber150悬停时显示菜单前的延迟(毫秒)。
hideDelaynumber250鼠标离开后隐藏菜单的延迟(毫秒)。
onOpenChange(isOpen: boolean) => void超级菜单打开或关闭时触发的回调。用于协调包装器样式。

超级菜单 featured 插槽的标准特色卡片。提供带可选图片、标题、描述和 CTA 链接的一致卡片。

属性类型默认值说明
title *string卡片标题。
descriptionstring标题下方的描述文本。
imagestring正文上方显示的可选图片 URL。
imageAltstring图片的替代文本。省略时图片会被显式标记为装饰性(alt=""、role="presentation"、aria-hidden)——由于卡片已有可见标题,这通常是正确的。仅当图片传达标题和描述之外的信息时才提供。
linkLabelstringCTA 链接文本。
linkHrefstringCTA 链接 URL。
childrenReactNode标准正文下方渲染的自定义内容。

Top Nav Mega Menu Item

超级菜单中的单个项目。在桌面端(弹出层网格)和移动抽屉模式中都会自行渲染。

属性类型默认值说明
title *string菜单项的显示标题。
descriptionstring标题下方的可选描述文本。
iconReactNode左侧显示的可选图标元素。
hrefstring点击时导航的 URL。
onClick() => void点击项目时的回调。
asLinkComponentType用于替代 <a> 的自定义链接组件。覆盖 LinkProvider 设置的默认组件。

Top Nav Menu

导航项,在悬停时显示弹出菜单,包含带图标、标题和可选描述的丰富菜单项。

属性类型默认值说明
label *string触发按钮的可见标签。
items *TopNavMenuItemData[]在悬停弹出框中显示的菜单项。
delaynumber150悬停时显示菜单前的延迟(毫秒)。
hideDelaynumber200鼠标离开后隐藏菜单的延迟(毫秒)。

完整示例的额外依赖

部分示例使用独立图标包。示例清单中的每条安装命令包含该示例实际需要的依赖;若要运行本页全部示例,还需安装:

npm install @heroicons/react@2.2.0