Laravel项目中JS与Bootstrap实现响应式菜单适配的开发咨询
Laravel个人练习项目响应式适配落地方案
核心问题1:侧边垂直导航适配移动端横向图标导航的选型对比
最优实现:基于Bootstrap响应式类控制双导航块展示,不使用JS动态改DOM、不强行复用单套DOM改横向样式
- 首先排除JS监听窗口宽度动态操作DOM的方案:
后续每次新增/修改导航项都要维护一套DOM操作逻辑,窗口拖动过程中还容易出现布局闪烁、元素状态不同步的问题,维护成本和故障风险都高 - 其次排除单导航块强行加响应式类改横向布局的方案:
桌面端侧边导航是固定窄宽度的垂直排版,和移动端横向导航的图标居上/文字居下的布局逻辑完全不同,强行用样式覆盖改布局,会写出大量冗余的覆盖CSS,后期调整样式很容易出冲突 - 最优落地步骤:
- 把所有导航项(路由路径、图标类、显示文字)抽成一个公共配置数组,存在Laravel的config目录下就行
- 同一份配置分别渲染两个独立的DOM块:一个是桌面端侧边垂直导航,一个是移动端页头横向图标导航
- 给两个块加Bootstrap的响应式显示类:桌面端垂直导航设为
d-none d-lg-block,移动端横向导航设为d-lg-none,纯CSS就能完成不同屏幕宽度下的元素切换,不需要写任何resize监听的JS代码 - 后续新增导航项只需要改一次配置数组,两端导航会同步更新,完全没有重复维护的成本
核心问题2:移动端好友列表全屏展示的选型对比
最优实现:复用全局注入的好友数据做本地视图切换,不需要单独创建独立的好友列表页面
- 不推荐单独创建好友列表专属视图的方案:
会打破现有ViewServiceProvider全局注入好友数据的简洁逻辑,需要额外写路由、单独维护一套好友列表视图,和桌面端的好友列表UI重复度极高,冗余代码多;而且点击跳转的方式会打断用户当前的浏览状态,页面加载的白屏间隙体验很差 - 最优落地步骤:
- 桌面端布局里的第三栏好友列表块,默认加Bootstrap类
d-lg-block d-none,移动端小屏下直接隐藏,不占用页面布局空间 - 给移动端页头的好友图标绑定简单的点击事件(用jQuery/原生JS都可以),点击时执行两个操作:
- 给当前页面的主内容栏DOM加
d-none类,隐藏原有内容 - 给好友列表块移除
d-none类,追加w-100 min-vh-100类,撑满整个移动端视口实现全屏展示
- 给当前页面的主内容栏DOM加
- 在好友列表块顶部加一个返回按钮,点击后把上述类再反向移除/追加,恢复主内容展示
- 因为好友数据已经被ViewServiceProvider全局注入所有视图,好友列表块的内容从页面加载完成时就已经渲染好了,整个切换过程没有任何网络请求,零加载延迟
- 桌面端布局里的第三栏好友列表块,默认加Bootstrap类
内容的提问来源于stack exchange,提问作者Ravdan
相关产品推荐
相关产品推荐

