Nav

站点导航菜单(对齐 Semi Navigation)。支持垂直/水平模式、子导航(内联/浮层)、logo 头部、折叠按钮、多选。独立渲染,字段/回调对齐 Semi(itemKey/text/icon/items)。

设计文档

如何引入

import { Nav, Nav.Header, Nav.Footer, Nav.Item, Nav.Sub } from '@chenzy-design/svelte';

基本使用

传入 items 快速得到导航栏:header 定义 logo 头部、footer.collapseButton 开启底部收起按钮。子导航用 string[] 简写。

运营后台

导航样式定义

style 定外层高度、bodyStyle 定列表区高度:头部/底部固定,中间列表可滚动。

运营后台

JSX 写法

声明式 <Nav.Item> / <Nav.Sub> 子组件定义导航树,替代 items 数据驱动。

运营后台

配合路由

renderWrapper 在每个导航项外包一层自定义组件(如路由库的 Link),点击触发路由跳转。

垂直布局

默认 mode="vertical":侧边导航,子导航内联展开,底部可收起。

运营后台

水平布局

mode="horizontal":顶部导航,子导航 hover 弹出浮层。

chenzy-design

展开收起箭头位置

toggleIconPosition="left" 将子导航展开箭头置于文案前(默认 "right")。

运营后台

导航缩进

默认仅一级导航缩进;limitIndent=false 时多级导航按层级逐级缩进(仅垂直生效)。

运营后台

非受控属性

defaultSelectedKeys / defaultOpenKeys 仅设初值,之后由组件内部维护状态。

运营后台

受控属性

selectedKeys / openKeys / isCollapsed 全受控,配合 onSelect / onOpenChange / onCollapseChange 回写。

API 参考

Nav

Props

属性说明类型默认值
items导航项列表,字段对齐 Semi:itemKey/text/icon/items(含 items 即子导航)。string 项取值作 text 与 itemKeyNavItemInput[][]
mode导航方向:侧边/顶部'vertical'|'horizontal''vertical'
selectedKeys受控选中项 key 数组NavKey[]undefined
defaultSelectedKeys默认选中项 key 数组NavKey[]undefined
openKeys受控展开子导航 key(vertical 且未折叠有效)NavKey[]undefined
defaultOpenKeys默认展开子导航 keyNavKey[]undefined
multiple多选模式(叠加选中,配合 onDeselect)booleanfalse
isCollapsed受控折叠态(仅 vertical 有效)booleanundefined
defaultIsCollapsed默认折叠态(仅 vertical 有效)booleanfalse
header头部配置(logo + 文案){ logo?: Snippet; text?: string }undefined
footer底部配置(收起按钮,仅 vertical){ collapseButton?: boolean }undefined
limitIndent仅一级缩进;false 时逐级缩进(依赖 level+indent)booleantrue
toggleIconPosition子导航展开箭头位置'left'|'right''right'
expandIcon自定义展开箭头图标Snippetundefined
subNavMotion子导航展开动画开关booleantrue
subNavOpenDelay浮层子导航展开延迟 ms(透传 Dropdown mouseEnterDelay)number0
subNavCloseDelay浮层子导航关闭延迟 ms(透传 Dropdown mouseLeaveDelay)number100
subDropdownPropsNav 级:透传给所有子导航浮层 Dropdown 的默认属性NavDropdownPropsundefined
tooltipShowDelay折叠态 tooltip 显示延迟 msnumberundefined
tooltipHideDelay折叠态 tooltip 隐藏延迟 msnumberundefined
getPopupContainer浮层挂载容器() => HTMLElementundefined
renderWrapper自定义导航项外层包裹Snippetundefined
class根元素自定义类名stringundefined
style根元素自定义内联样式stringundefined
bodyStyle导航项列表容器样式(对齐 Semi bodyStyle)stringundefined

Events

事件载荷说明
onSelectNavSelectData选中导航项时触发({itemKey,selectedKeys,selectedItems,domEvent,isOpen})
onDeselectNavSelectData多选下取消选中时触发
onClickNavClickData点击任意导航项时触发({itemKey,domEvent,isOpen})
onOpenChangeNavOpenChangeData展开/收起子导航时触发({itemKey,openKeys,domEvent,isOpen})
onCollapseChangeboolean折叠态变化时触发

Slots

名称说明
headerSlot自定义头部(覆盖 header 配置对象)
footerSlot自定义底部(覆盖 footer 配置对象)
children声明式子项(<Nav.Item>/<Nav.Sub>),与 items 二选一

Nav.Header <div>

Props

属性说明类型默认值
logoLogo 节点Snippetundefined
textLogo 文案string | Snippetundefined
link链接地址(整体包裹 <a>)stringundefined
linkOptions透传给 <a> 的属性Record<string,string>undefined
class自定义类名stringundefined
style自定义内联样式stringundefined

Nav.Footer <div>

Props

属性说明类型默认值
collapseButton收起按钮(或自定义节点,仅 vertical 生效)boolean | Snippetfalse
collapseText收起按钮文案(默认用 locale)(collapsed: boolean) => stringundefined
onClick点击事件回调(e: MouseEvent) => voidundefined
class自定义类名stringundefined
style自定义内联样式stringundefined

Nav.Item <li[role=menuitem]>

Props

属性说明类型默认值
itemKey导航项唯一标识(必填)NavKey
text导航项文案string | Snippet
icon项前置图标Snippetundefined
disabled是否禁用booleanfalse
indent保留左侧图标占位(对齐 Semi indent)booleanundefined
level嵌套层级(limitIndent=false 时自定义缩进,对齐 Semi level)numberundefined
link链接地址(渲染原生 <a>)stringundefined
linkOptions透传给 <a> 的属性(target/rel/download)Record<string,string>undefined
onClick项级点击回调(富载荷 {itemKey,domEvent,isOpen})(data: NavClickData) => voidundefined
onMouseEnter鼠标移入(e: MouseEvent) => voidundefined
onMouseLeave鼠标移出(e: MouseEvent) => voidundefined

Nav.Sub <li[role=menuitem](浮层态用 Dropdown)>

Props

属性说明类型默认值
itemKey子导航唯一标识(必填)NavKey
text子导航标题文案string | Snippet
icon标题前置图标Snippetundefined
disabled是否禁用booleanfalse
indent保留左侧图标占位(对齐 Semi indent)booleanundefined
level嵌套层级(limitIndent=false 时自定义缩进,对齐 Semi level)number0
maxHeight子导航最大高度(内联展开动画)number999
isOpen子导航是否展开(对齐 Semi isOpen)booleanundefined
dropdownProps透传给该子导航浮层 Dropdown 的属性NavDropdownPropsundefined
dropdownStyle透传给该子导航浮层 Dropdown 的内联样式stringundefined
onMouseEnter标题鼠标移入(e: MouseEvent) => voidundefined
onMouseLeave标题鼠标移出(e: MouseEvent) => voidundefined
children内嵌 Nav.Item / Nav.SubSnippetundefined

Accessibility

ARIA rolemenu
键盘交互TabShift+TabEnterSpaceArrowLeftArrowRight
  • 对齐 Semi:根为纯 <div>(无 nav landmark),列表 ul[role=menu][aria-orientation=mode]
  • 叶子/子导航标题均为 role=menuitem;选中靠 -selected class(无 aria-current)
  • 含 link 的叶子内含原生 <a>;子导航标题 aria-expanded 反映展开态
  • 折叠态浮层子导航复用 Dropdown(role=menu + menuitem);折叠收起按钮为 icon-only Button + aria-label(Tooltip 提示)