ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

Element Plus 导航设计指南:侧边栏与顶部导航的选择与实现

Element Plus 导航设计指南:侧边栏与顶部导航的选择与实现 Element Plus 导航设计指南侧边栏与顶部导航的选择与实现【免费下载链接】element-plus A Vue.js 3 UI Library made by Element team项目地址: https://gitcode.com/GitHub_Trending/el/element-plus导读导航是 Web 应用中最关键的交互设施之一它直接回答用户我要去哪和我怎么去两个问题。本文以 Element Plus 官方设计指南 docs/en-US/guide/nav.md 为主线系统讲解侧边栏导航Side Navigation与顶部导航Top Navigation的适用场景、层级设计原则并结合仓库中的 Menu 组件文档 与 Menu 组件源码给出每个导航方案对应的可运行代码示例、核心配置参数与底层实现原理。读完本文你将掌握在 Element Plus 应用中从需求判断、结构设计到代码落地的完整导航构建方法。导航的两大类别侧边栏与顶部导航导航的核心目标是一致的帮助用户解决去哪里以及怎么到达的问题。但不同的信息架构决定了导航形态的差异Element Plus 官方指南将其划分为两大类侧边栏导航Side Navigation导航固定在页面左边缘突出显示、便于用户在不同页面间快速切换页面顶部区域则让位给常用工具搜索框、帮助按钮、通知按钮等适合后台管理系统或工具型网站。顶部导航Top Navigation符合人们从上到下的自然浏览顺序导航条数与文字长度受顶部宽度限制适合导航项较少、页面区块较大的站点。核心判断标准合适的导航带来顺畅体验不合适的导航则会让用户困惑。选择之前先评估站点的页面层级深度、导航项数量与内容区块大小。选择正确的导航三个关键维度的对比对比维度侧边栏导航顶部导航布局位置固定在页面左边缘位于页面顶部可扩展性纵向空间充裕可承载多层级菜单受顶部宽度限制项数和文字长度受限适用场景后台管理、工具型网站导航项少、页面区块大的内容型站点页面顶部职责放置常用工具搜索、帮助、通知承载导航本身配合组件el-menuel-sub-menuel-menu-itemel-menumodehorizontal在选择时可以从三个维度出发层级深度页面有几层、导航数量多少个入口、内容密度每个区块的大小。层级深、入口多选择侧边栏入口少、区块大选择顶部导航。侧边栏导航三级结构与布局方案侧边栏导航依据页面层级深度分为三个级别每级对应不同的信息架构与组件组合。一级分类Level 1单层页面结构适用于结构简单的站点——所有页面只存在一层无需面包屑。此时侧边栏直接列出全部一级入口每个el-menu-item对应一个页面点击即完成切换。template el-menu default-active1 classel-menu-vertical-demo el-menu-item index1 el-icondocument //el-icon span首页/span /el-menu-item el-menu-item index2 el-iconsetting //el-icon span设置/span /el-menu-item /el-menu /template该级别无需面包屑辅助因为用户始终位于同一层级的页面集合中上下文清晰。官方文档使用L1Categories /组件展示此形态对应实现见 l1-categories.vue其典型布局为顶部栏 左侧一级菜单栏 右侧内容区。二级分类Level 2两层导航 面包屑当站点出现两级页面结构时侧边栏需要展示两层导航。官方建议在二级导航的基础上配合面包屑使用对应组件见 l2-categories.vue帮助用户明确当前所处位置并方便逐级回溯。实现上使用el-sub-menu承载二级入口template el-menu default-active1-1 openhandleOpen closehandleClose el-sub-menu index1 template #title el-iconlocation //el-icon span一级导航/span /template el-menu-item index1-1二级页面一/el-menu-item el-menu-item index1-2二级页面二/el-menu-item /el-sub-menu el-menu-item index2 el-iconicon-menu //el-icon span独立页面/span /el-menu-item /el-menu /template对应的面包屑可用 Element Plus 的 Breadcrumb 组件 实现el-breadcrumb separator/ el-breadcrumb-item :to{ path: / }首页/el-breadcrumb-item el-breadcrumb-item一级导航/el-breadcrumb-item el-breadcrumb-item二级页面一/el-breadcrumb-item /el-breadcrumb三级分类Level 3复杂工具站的中列导航适用于结构复杂的工具型网站对应组件见 l3-categories.vue。此时布局演变为三栏结构左侧边栏存放一级导航中间列展示二级导航或其他工具选项内容区位于右侧。el-menu-item-group可在此场景中将同一父级下的菜单项分组el-sub-menu index1 template #title工具集/template el-menu-item-group title分组一 el-menu-item index1-1工具 A/el-menu-item el-menu-item index1-2工具 B/el-menu-item /el-menu-item-group el-menu-item-group title分组二 el-menu-item index1-3工具 C/el-menu-item /el-menu-item-group /el-sub-menu三级结构的完整示例可参考仓库中的 menu/vertical.vue。顶部导航水平菜单与内容区划分顶部导航符合自上而下的浏览习惯但其导航项数量与文字长度受限于顶部宽度。它适合导航少、内容区块大的站点典型结构是顶部水平菜单 下方内容区。在 Element Plus 中顶部导航就是el-menu的水平模式template el-menu :default-activeactiveIndex classel-menu-demo modehorizontal selecthandleSelect el-menu-item index1处理中心/el-menu-item el-sub-menu index2 template #title工作台/template el-menu-item index2-1事项一/el-menu-item el-menu-item index2-2事项二/el-menu-item /el-sub-menu el-menu-item index3 disabled信息/el-menu-item el-menu-item index4订单/el-menu-item /el-menu /template script langts setup import { ref } from vue const activeIndex ref(1) const handleSelect (key: string, keyPath: string[]) { console.log(key, keyPath) } /script与侧边栏不同顶部导航的二级菜单以**弹出层popper**形式出现而非纵向展开。官方文档对顶部导航的演示组件为TopNavigationExample实现见 top-navigation-example.vue其视觉呈现即顶部导航 主内容区的经典布局。完整示例见仓库中的 menu/basic.vue其中还演示了通过background-color、text-color、active-text-color定制配色以及二级、三级子菜单的嵌套写法。实战落地用 el-menu 家族组件构建导航无论选择侧边栏还是顶部导航底层都由 Element Plus 的 Menu 组件家族支撑。整个体系由四个核心组件构成el-menu导航容器负责模式、折叠、路由等全局行为el-sub-menu子菜单容器承载下一级菜单el-menu-item可点击的菜单项el-menu-item-group菜单项分组通过titleprop 或具名插槽设置组名。默认情况下el-menu是垂直模式mode默认值为vertical设置modehorizontal即切换为水平模式该默认值可在 menu.ts 的menuProps中确认。核心配置参数参数说明类型默认值mode菜单显示模式horizontal \| verticalverticalcollapse是否折叠仅垂直模式生效booleanfalseellipsis是否省略溢出项仅水平模式生效booleantruedefault-active页面加载时的激活项 indexstringdefault-openeds默认展开的子菜单 index 数组string[][]unique-opened是否只允许一个子菜单展开booleanfalsemenu-trigger子菜单触发方式仅水平模式hover \| clickhoverrouter是否启用 vue-router 模式index 作为路由 pathbooleanfalsecollapse-transition是否开启折叠过渡动画booleantruepopper-effect折叠时弹出菜单的主题dark \| lightdarkpopper-offset弹出层偏移量对所有子菜单生效number6close-on-click-outside点击外部是否收起菜单booleanfalsepopper-class所有弹出菜单的自定义类名string—popper-style所有弹出菜单的自定义样式string \| object—show-timeout/hide-timeout子菜单显示/隐藏的延迟时间number300注意background-color、text-color、active-text-color三个配色参数在源码中已标记为 deprecated见 menu.ts官方建议改用 CSS 变量--el-menu-bg-color、--el-menu-text-color、--el-menu-active-color在样式类中实现同等效果。常用事件、方法与类型声明Menu 组件暴露三个事件select菜单项被激活时触发回调参数为(index, indexPath, item, routerResult?)open子菜单展开时触发回调参数为(index, indexPath)close子菜单收起时触发回调参数为(index, indexPath)。组件实例expose提供四个方法open(index)展开指定子菜单、close(index)收起指定子菜单、updateActiveIndex(index)设置激活项、handleResize()手动触发宽度重算。事件与类型的完整声明见 menu.md 中的MenuSelectEvent、MenuOpenEvent、MenuCloseEvent。与 vue-router 集成当el-menu设置router为true时菜单项点击不再只是切换高亮而是通过router.push(index)触发真实路由跳转源码见 menu.ts。此时index被当作路由 path 使用并可与default-active配合在页面加载时设置激活项el-menu-item的route属性还可传入 Vue Router 的 Route Location 对象以支持更精细的跳转参数。源码深挖菜单状态管理与横向溢出折叠原理理解el-menu的内部机制有助于应对复杂场景。从源码结构看Menu 组件通过provide/injecttoken 定义见 tokens.ts向子菜单、菜单项下发一组操作句柄openMenu、closeMenu、handleMenuItemClick、addMenuItem、removeMenuItem等子组件据此上报自身的index与indexPath父组件统一维护openedMenus、activeIndex、items、subMenus四份响应式数据。几个值得注意的实现细节水平模式的省略ellipsis当modehorizontal且ellipsis为true时组件通过useResizeObserver监听容器宽度menu.ts配合calcSliceIndex()计算可容纳的菜单项数量超出部分自动收入一个更多子菜单默认图标为More可通过ellipsis-icon自定义。窗口 resize 时使用约 33ms 的防抖对应 60Hz 显示器的两帧时间避免抖动。unique-opened的实现openMenu在unique-opened为true时会先过滤掉不在当前菜单路径上的其他已展开子菜单menu.ts从而保证同一时刻只有一个子菜单保持展开。initMenu的自动展开垂直模式下如果default-active指向的菜单项位于某个子菜单内部组件会遍历其indexPath并自动展开路径上的所有子菜单menu.ts避免用户进入页面后找不到激活项所在的折叠菜单。CSS 变量驱动配色菜单的背景色、文字色、激活色通过use-menu-css-var.ts中的useMenuCssVar转换为 CSS 变量注入ul内联样式因此通过覆盖--el-menu-*系列变量即可完成主题定制。官方文档还提示若要调整水平菜单高度可覆盖--el-menu-horizontal-height。这些实现均可在 packages/components/menu 目录下的源码与 menu.test.ts 测试用例中找到对应验证。实践建议从需求到落地的决策清单综合官方指南与组件能力构建导航时可遵循以下决策流程数层级页面只有一层 → 一级侧边栏无需面包屑两层 → 二级侧边栏并配面包屑三层及以上 → 三栏布局中间列做二级导航数入口导航项多、文字长 → 优先侧边栏导航项少顶部宽度放得下→ 可考虑顶部导航看场景后台管理、工具型站点 → 侧边栏顶部留给搜索、通知等工具区内容型、区块大的站点 → 顶部导航选配置垂直模式用默认mode水平模式显式设置modehorizontal多级菜单用el-sub-menu嵌套需要路由联动开启router需要折叠收起开启collapse可搭配unique-opened保证展开互斥定主题通过 CSS 变量--el-menu-bg-color、--el-menu-text-color、--el-menu-active-color定制配色替代已废弃的颜色 props。按照以上流程即可在 Element Plus 应用中快速搭建与信息架构匹配、用户体验顺畅的导航系统。【免费下载链接】element-plus A Vue.js 3 UI Library made by Element team项目地址: https://gitcode.com/GitHub_Trending/el/element-plus创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表