Bricks 桌面导航溢出自动折叠:菜单太多时的 More 按钮方案
UI/UX 文献建议导航项越少越好,但现实是客户非要塞一堆菜单项,导航栏容易溢出换行。与其写一堆媒体查询,不如用一段小脚本:菜单一溢出就自动折叠进“More”下拉。
本文基于 BricksLabs 公开免费教程实译,代码完整可复用。原文:How to add a resizable desktop navbar in Bricks
核心思路
页面加载时测量菜单容器实际宽度,一旦溢出,就把溢出的菜单项自动移入一个动态生成的 “More” 下拉按钮。窗口 resize 时重新计算,双向自适应。
结构 class 约定
三层结构,务必按约定加 class:
.menu-wrapper— 最外层,宽度 100%(盒装导航可设 max-width).menu-inner— 菜单项容器.menu-crop— 裁剪层
JS 自动折叠逻辑
window.addEventListener('load', () => {
// 变量
const wrapper = document.querySelector('.menu-wrapper');
if (!wrapper) {
return console.log('Resizable Desktop Menu - There is no menu-wrapper class on this page. Please double check you correctly assigned the classes to each element');
}
const inner = wrapper.querySelector('.menu-inner');
if (!inner) {
return console.log('Resizable Desktop Menu - There is no menu-inner class on this page. Please double check you correctly assigned the classes to each element');
}
脚本对比 menu-inner 的滚动宽度与 menu-crop 的可见宽度,溢出时把最右侧项移动到动态生成的 #moreItem 下拉里,并更新 #moreQty 徽标数量。
CSS 细节
.menu-inner > * {
white-space: nowrap;
}
#moreItem a {
display: flex;
align-items: flex-start;
flex-wrap: nowrap;
flex-direction: row;
}
span#moreQty {
margin-left: 0.3rem;
background-color: var(--bricks-color-primary, blue);
padding: 0.3rem 0.45rem;
font-size: 9px;
color: #fff;
border-radius: 50%;
vertical-align: super;
font-weight: 800;
width: 15px;
height: 15px;
display: flex;
align-items: center;
justify-content: center;
}
#moreQty 是 “More” 按钮上的数字徽标,实时显示当前折叠了几个菜单项。
小结
- 零插件、零媒体查询堆叠
- 窗口 resize 自动重新计算
- “More” 徽标让用户知道还有隐藏项
延伸阅读
延伸阅读
Bricks Tabs 自动轮播:滚动到可视区自动切换标签页
教程:给 Bricks 的 Tabs(Nestable)元素加自动轮播——滚动到可视区域后每 x 秒自动切换标签页,适合首页产品/方案展示。
tutorialBricks 判断 ACF Repeater 是否有数据行:条件输出进阶
教程:在 Bricks 里用自定义函数判断 ACF Repeater 字段是否有数据行,从而条件显示元素。解决基础类型条件判断搞不定的数组型字段。
tutorialBricks 给区块加草稿状态开关:编辑器里隐藏未定稿区块
教程:用代码片段给 Bricks 所有元素加一个“草稿状态”勾选框,勾选后前端不输出。适合临时隐藏未定稿区块(Bricks 2.0 已原生内置,本文作历史方案参考)。
tutorialBricks 流体排版:用 clamp() 让间距字号随屏幕自动缩放
教程:用 CSS clamp() 函数替代固定数值,实现 Bricks 站点的流体排版——内边距、字号、间距随视口宽度平滑缩放,桌面端宽松、手机端紧凑,视觉更和谐且免写一堆媒体查询。
