最干净做法是 admin.sideflexible(0),但须在 layui.use(['admin'], callback) 中调用;无 admin 模块时,用 toggleclass('layui-side-collapsed') 并配齐 css 规则。

直接用 admin.sideFlexible(0) 强制收起,是最干净、不破坏状态的做法;前提是已正确加载 admin 模块,且你用的是 Layui 2.8+ 配套的 admin 模板结构。
调用 admin.sideFlexible(0) 前必须确认模块就绪
这个方法不是全局函数,不能在 layui.use 外直接写。常见报错 Cannot read property 'sideFlexible' of undefined 就是因为没等 admin 加载完。
- 必须包裹在
layui.use(['admin'], function(){})回调里,且确保页面已引入admin.js(通常在 layui.admin 模板中提供) - 如果用的是自定义构建或精简版 Layui,
admin模块可能未包含,此时该方法不可用 - 不要在
$(document).ready或window.onload里调用——它和 Layui 的异步模块加载不同步
没有 admin 模块时,用 toggleClass('layui-side-collapsed')
这是通用 fallback 方案,不依赖任何模块,但要求你提前写好对应 CSS 规则。Layui 自身不提供 layui-side-collapsed 类,你得自己定义。
- CSS 必须写在外部文件中(不能是
<style></style>标签或 JS 内联),否则动画和子元素隐藏会失效 - 关键规则包括:
width: 60px、overflow: hidden、.layui-nav-item a { justify-content: center }、span { display: none }、.layui-nav-child { display: none } - JS 只做一件事:
$('.layui-side').toggleClass('layui-side-collapsed'),然后同步更新$('.layui-body, .layui-footer').css('left', '60px')
避免用 animate() 或直接改 width 行内样式
这类操作绕过 Layui 的 DOM 跟踪机制,会导致二级菜单定位错乱、layui-nav-itemed 状态丢失、图标旋转异常。
-
$('.layui-side').animate({width: '60px'})→ 后续element.on('nav')展开子菜单时,dl位置偏移 -
$('.layui-side').css('width', '60px')→.layui-body的left不自动同步,内容被遮挡 -
display: none收起 → 悬停失效、触摸穿透(尤其移动端)、layui-nav-tree事件绑定中断
真正容易被忽略的是:收缩后必须让 .layui-nav-child 显式设为 display: none,仅靠父级 overflow: hidden 不够——移动端 touch 事件可能穿透触发子菜单,这不是兼容性问题,而是 Layui 的事件委托机制决定的。











