当你在手机上打开自己的 Shopify 独立站,点击左上角的三条线汉堡图标准备浏览商品系列时,屏幕却毫无反应。或者抽屉菜单闪退、刚滑出就立刻关闭,又或者主菜单虽然可见,但下面的二级分类无论如何点击都无法展开。如果手机端消费者无法打开导航菜单,浏览你的店铺就会困难得多。
- 三大独立诱因: “菜单打不开”可能意味着抽屉被 CSS 或损坏的主题标记隐藏、悬停规则与触屏冲突,或者后台未正确建立子菜单嵌套关系。
- 安全规范优先: 修改任何代码前必须先复制主题备份,并且务必在真实的手机设备上测试,而非仅依靠桌面浏览器的窗口缩放。
- 后续维护成本: 手动添加到主题文件中的 CSS 代码在主题版本升级时极易丢失,对于不希望持续维护自定义代码的商家,专用菜单应用是一个稳妥的替代方案。
Quick answer: why a Shopify mobile menu won’t open
Most Shopify mobile menus fail for one of three reasons: the drawer is hidden by CSS or broken theme markup, a hover-only dropdown fights with touch, or submenu links are not nested in Content > Menus. Duplicate your theme, check each cause in that order, and test on a real phone.
本指南专为 Shopify 主题撰写;WordPress 或 Wix 的菜单机制与此完全不同。请在复制出的备份主题上,按照下文列出的排查顺序依次检验,确保在测试期间正在营运的正式店铺不受任何影响。
Three different problems: menu won’t open, opens the wrong way, submenu won’t expand
当商家反馈“手机菜单坏了”时,描述的往往是以下五种常见症状之一。在修改设置或改动代码之前,请先对照下表确认你的店铺属于哪一种:
| 故障症状 | 常见原因 | 排查与解决位置 |
|---|---|---|
| 点击汉堡图标毫无反应 | 抽屉被 CSS 隐藏或主题标记代码损坏 | 排查隐藏抽屉与模板标记 |
| 打开后立即关闭 / 点击时剧烈闪烁 | 鼠标悬停菜单与触摸屏交互产生冲突 | 改为点击展开模式 |
| 子菜单项目无法显示 | 后台未缩进嵌套或主题默认收拢 | 检查菜单嵌套结构与设置 |
| 抽屉覆盖了整块手机屏幕 | 主题的抽屉展示样式或宽度未配置 | 调整抽屉宽度与样式 |
| 电脑端正常但手机端无内容 | 移动端标头在主题中为独立配置 | 检查移动端标头设置 及 抽屉样式 |
每一种症状都对应着店铺不同的技术层面。汉堡图标没有响应,可能是脚本执行受阻,或滑出抽屉被 CSS 置于不可见状态;而菜单闪烁则可能源于为鼠标设计的 hover 规则在触控下表现异常。需要注意的是,在某些主题中,移动端和桌面端的标头可以进行独立配置。
Before you edit code: duplicate your theme and test on a real phone
在改动任何主题代码或模板样式之前,请务必执行以下两项核心防护措施。
第一步,创建当前主题的备份副本。Shopify 官方主题复制指南 明确提醒:”Before you customize a theme, it’s a good idea to make a backup copy so that you can discard your changes and start again if you need to.” 在 Shopify 管理后台中,进入 在线商店 > 主题,点击当前主题旁边的三点图标 (...),选择 复制。所有的排查与代码尝试都应在这份副本上进行。
第二步,在真实的手机上操作导航。桌面浏览器的移动端模拟工具非常适合检查排版,但并不等同于真实手机。Shopify 明确建议商家 在移动设备上测试菜单,以确认下拉菜单能否按预期展开。真机测试可能暴露桌面模拟器容易遗漏的触控问题。
最后,记录近期安装过的应用或嵌入脚本。营销跟踪代码、Google Tag Manager、SEO 插件或页面构建器可能会向主题添加脚本,进而干扰导航。在修改 Liquid 或 CSS 之前,请先查看主题编辑器,因为在很多主题中,移动菜单的行为直接受主题编辑器 Header 分区的控制。
Hamburger icon does nothing: hidden drawer CSS and broken theme.liquid
如果触摸汉堡图标没有任何反馈,通常是因为发生了 JavaScript 脚本错误中断了抽屉的触发事件,或者是 CSS 规则强制让已打开的面板保持隐藏。
Check the browser console and recent apps
首先通过浏览器的开发者控制台排查脚本执行情况。你可以通过 USB 调试将手机连接至电脑,或者在电脑端将浏览器窗口收窄至手机尺寸,打开开发者工具(按 F12 或右键选择 检查)。
切换到 Console 标签页并点击汉堡图标。查看是否有红色的报错信息(例如 Uncaught TypeError 或 SyntaxError)。未捕获的脚本错误可能会使该脚本的其余部分停止运行,从而可能导致主题自带的菜单开合函数无法执行。如果报错源自近期安装的第三方应用,可以临时在 在线商店 > 主题 > 自定义 > 嵌入应用 中停用该模块,观察汉堡按钮是否恢复功能。
Restore the top lines of theme.liquid
如果控制台出现全局性的脚本报错,应立即检查主题的主模板文件 layout/theme.liquid。该文件包含主题脚本所依赖的页面顶层 HTML 结构。
在 Shopify 官方社区的一则案例 中,有店铺的移动端菜单在有人添加 Google Tag Manager 代码时,theme.liquid 最顶部的两行被删除后停止工作。这是店主反馈的可能原因,并非官方确认的解决方案,但它说明了为什么值得检查文件开头是否缺少了几行。进入 在线商店 > 主题 > … > 编辑代码,打开 layout/theme.liquid,将开头几行与同一主题未修改的副本对比,找出被删除的内容。
A CSS rule that forces the drawer visible (last resort)
还有一种常见情况:主题的 JavaScript 正确切换了开合状态,但 CSS 样式却将抽屉限制在可视区域之外或设置了不可见。
例如,在 Shopify 社区关于 Dawn 主题的讨论 中,一位用户通过在 base.css 中添加媒体查询成功使抽屉重现:
/* Example reported in a Shopify Community thread for Dawn theme base.css */
/* Always test on a duplicate theme: selectors vary by theme and version. */
@media (max-width: 749px) {
.menu-opening .menu-drawer {
transform: translate(0);
visibility: visible;
}
}
在另一款主题的社区讨论中,商家证实通过在 main.css 的展开(disclosure)规则中添加 visibility: visible 修复了问题(Shopify 社区帖子 389597):
/* Example reported in a Shopify Community thread for main.css */
/* Always test on a duplicate theme: selectors vary by theme and version. */
.main-menu__disclosure.is-open > .main-menu__content {
opacity: 1;
visibility: visible;
}
类似地,还有商家发现针对展开的 details 标签的规则很有帮助,如 .js details[open] > .menu-drawer(Shopify 社区帖子 395768)。
请务必将这些 CSS 代码视作特定主题版本的社区经验案例,而非通用方案。不同主题的类名选择器差异巨大。此外,如果根本问题在于标签缺失,单靠强行修改 CSS 只是掩盖症状。排查此类无响应问题时,请记住三个诊断关键词:visibility hidden、broken theme.liquid、check the browser console。

Figure 1: Concept illustration — Diagram of a Shopify mobile drawer hidden by CSS next to the same drawer made visible after checking markup and styles.
Hover dropdowns on touch screens: open on tap instead
如果菜单在手机上打开后瞬间关闭,或者点击分类时下拉项剧烈闪烁,一个常见原因是桌面端遗留的 hover 规则。
MDN Web Docs 的规范指出,媒体查询 @media (hover: none) 表示“the primary input mechanism cannot hover at all or cannot conveniently hover (e.g., many mobile devices emulate hovering when the user performs an inconvenient long tap)”(MDN hover 规范文档)。相比之下,@media (hover: hover) 则适用于“the primary input mechanism can conveniently hover over elements”。
当自定义 CSS 或桌面端主题样式未检查设备能力就将子菜单展开绑定到 :hover 时,触控屏可能会尝试模拟鼠标悬停。结果是下拉菜单可能在点击时瞬间打开又关闭,或者点击的表现与悬停规则预期的不一致。
为了消除这种冲突,应当改为点击展开,将 hover 展开规则限定在具备真实指针的设备上:
/* Restrict hover behavior to devices with true pointer hover capability */
/* Placeholder selectors for illustration only: replace them with your theme's own classes. */
/* Always test on a duplicate theme: selectors vary by theme and version. */
@media (hover: hover) {
.header__menu-item:hover .header__submenu {
display: block;
}
}
通过将 hover 样式包裹在 @media (hover: hover) 中,手机与平板会回退到主题原生的点击展开逻辑。需要说明的是,在触摸屏头部实现悬停展开比较困难:在关于 Dawn 主题的 Shopify 社区讨论 中,有热心用户表示看不到仅靠 CSS 实现的办法;很可能需要 JavaScript,或保留主题的默认行为。
Submenus that should expand: nesting, theme settings, and CSS
当一级导航项能在抽屉中正常列出,但下级项目无法展开时,问题通常出在菜单层级的嵌套配置上。
首先检查后台的层级排布。进入 Shopify 后台的 内容 > 菜单 并选择主菜单。正如 Shopify 下拉菜单官方说明 所述:”You can build drop-down menus by creating or moving menu items so that they’re nested below a top-level item.” 子菜单项必须在菜单编辑器中嵌套在父菜单项下方;未嵌套的项目仍然是顶层菜单项。
Shopify 对嵌套层级有明确限制:”The top-level item can have up to two levels of nested drop-down menus.” 这构成了总共三级结构:
- 顶层主菜单项(例如:服饰)
- 第一级嵌套子菜单(例如:女装)
- 第二级嵌套子菜单(例如:夹克外套)
在手机端,不少主题会将包含子项目的父分类作为展开/折叠按钮,而非直接跳转的链接。轻触父菜单名称会展开子列表而不会离开当前页面。如果需要让顾客访问父分类本身,可以在子列表最上方新增一个专门的子链接(例如“查看全部服饰”)。
如果后台层级完全正确但移动端仍无法展开,可能是主题样式需要微调。Shopify 官方文档提到:”some themes might require CSS adjustments to improve mobile usability.” 在编写 CSS 时,必须将规则严格限定在移动媒体查询内(例如 @media (max-width: 749px)),并仅针对抽屉相关选择器生效,以免影响电脑端的排版。如需深入理解导航层级结构,请参阅我们的 Shopify menu guide 完整指南。
Drawer opens full width or the wrong style
有时移动菜单能够打开,但呈现方式却影响了可用性。有些商家发现抽屉滑出后占满整个手机屏幕,遮住了后面的店铺。
在店铺交流中,有商家表示希望抽屉不要完全覆盖整个屏幕(Shopify 社区帖子 275308)。当滑出面板从边到边填满屏幕时,会遮住后面的页面;仍然可见的变暗页面边缘可以更清楚地提示面板可以关闭。
在修改代码前,先检查主题自带设置。在现代主题中,移动端菜单的交互通常在主题编辑器的 Header 部分进行设置。部分主题甚至支持分别针对移动端和桌面端独立调整标头样式。
若主题未提供抽屉宽度的滑块设置,可以在备份主题上尝试通过 CSS 为其添加最大宽度(max-width)限制:
/* Example max-width constraint for a slide-out drawer on a duplicate theme; the value is only a placeholder, pick one that suits your design */
/* Always test on a duplicate theme: selectors vary by theme and version. */
@media (max-width: 749px) {
.menu-drawer {
max-width: 80vw;
}
}
调整样式时需确保三个可用性元素得以保留:控制住 Drawer opens full width,保留清晰可见的半透明背景 overlay stays visible 方便用户点击空白区域关闭,并在顶部维持醒目且易触达的 easy close button。有关抽屉菜单的设计模式,欢迎阅读我们的 mobile drawer menu best practices。

Figure 2: Concept illustration — Side-by-side phone mockups of a full-width Shopify mobile drawer and a partial-width drawer with the page visible behind.
Trade-offs: when code fixes stop being worth it
直接在 CSS 和 Liquid 文件中修补移动端菜单虽然能解燃眉之急,但商家必须正视长期的维护成本。
首先,自己添加的代码在主题更新后往往需要重新添加。在 Dawn 主题的社区交流中,有商家表示升级到 11.0 版本修复了菜单问题,但需要把自己的自定义修改重新加回去(Shopify 社区帖子 259424)。更新主题后,你添加到 base.css、main.css 或 theme.liquid 等文件中的内容可能需要重新应用。
其次,论坛上的代码片段高度依赖具体主题。main.css 示例中的选择器(.main-menu__disclosure.is-open > .main-menu__content)与 Dawn 的 base.css 示例中的选择器(.menu-opening .menu-drawer)毫无共通之处。把为某个主题写的 CSS 复制到另一个主题,可能毫无效果,也可能导致意想不到的排版错乱。叠加多个补丁还会让排查更困难。
然而,引入应用程序也并非万能解法。在以下情况下,你完全不需要切换到应用:
- 仅仅缺失了一行标签代码: 如果菜单失效只是因为添加标签或应用时
theme.liquid顶部的几行被删除,补回这些行就可能干净地解决问题。 - 主题原生已支持该配置: 如果当前主题的 Header 区域已经内置了抽屉宽度调节或子菜单展开模式,使用原生设置通常更简单。
- 额外的配置与维护负担: 安装新应用意味着店铺又多了一个需要配置与维护的组件。
Where Navi+ fits
若你的主题原生导航缺少所需的排版控件,或者你厌倦了每次升级主题都要手动重新添加 CSS 代码,Navi+ 提供了一种独立的构建方案。
Navi+ Mobile Menu 提供了完全在应用可视化界面内配置的专用移动抽屉:
- 自定义抽屉宽度: 在应用设置中调整手机端抽屉宽度(新菜单默认预设为 80%),让导航不必盖满整个屏幕。
- 多样的子菜单展开效果: 可选择子菜单是横向滑入新面板,还是像手风琴一样在原位纵向展开。
- 内置遮罩与滚动锁定: 你可以设置抽屉打开时的半透明背景遮罩和页面滚动锁定,菜单最多支持三级导航层级。
- 底部常驻 Tab Bar: 配合汉堡抽屉,可在手机屏幕底部设置常驻导航栏,顾客浏览时它始终可见。
必须客观看待 Navi+ 的能力边界:Navi+ 不会去修补损坏的主题文件,也不会去修复主题自带的故障抽屉。它的作用是在你不想触碰主题代码时,作为一套独立的导航系统整体替代原有的主题抽屉。
If you’ve re-applied the same menu fix after every theme update, you can try building the mobile drawer in Navi+ instead — set the drawer width and submenu style in the app, preview it on your phone, and keep your theme files untouched.
为了挑选适合自身商品规模的导航方案,建议参考我们关于如何 choose the right menu type 以及如何布局 bottom tab bar on mobile 的系列指南。
Action checklist after the fix
在备份主题上完成修复后,在正式上线前请逐一核对以下 7 项验收标准:
- 双向开合测试: 确认点击汉堡图标能立即展开抽屉,并且无论是点击关闭按钮 (
X) 还是点击半透明暗色背景,抽屉都能顺畅收起。 - 子菜单层级展开: 逐一点击含有子分类的父菜单项,确保展开动作平稳,没有页面闪烁或误跳转发生。
- 触控区域合规: 核实所有导航链接、箭头展开图标与关闭按钮均满足 WCAG 2.2 SC 2.5.8 规范,即目标尺寸至少达到 24x24 CSS 像素(有部分例外)(W3C 目标尺寸规范标准)。
- 多设备跨端实测: 在真实的 iOS (Safari) 与 Android (Chrome) 手机上进行实测,检验操作系统间的触控差异。
- 留存代码修改文档: 将所添加的 CSS 样式或 Liquid 代码详细记录在案,便于今后升级主题时快速对照查阅。
- 评估常驻显性导航: 牢记尼尔森诺曼集团研究中的发现:”the hamburger menu is not so universal that everyone knows it or immediately looks for it”(NN/g 移动导航可用性研究),考虑结合使用 navigation beyond the hamburger menu 所推荐的常驻入口。
- 仅发布验证通过的主题: 在备份主题上通过上述所有检测后,再将该主题发布至线上环境。
FAQ
Why won’t my Shopify hamburger menu open?
最常见的原因是抽屉元素被优先级更高的 CSS 隐藏,或者在添加标签或脚本时不小心删除了 theme.liquid 顶部的关键标签。在改动代码前,请先打开浏览器控制台查看 JavaScript 报错,并尝试临时停用新安装的第三方应用。
How do I make a submenu open when I tap the parent item?
在 Shopify 后台的 内容 > 菜单 中,将子菜单项拖动到父菜单项下方并向右缩进。不少主题会把带有子项目的父分类转变为点击展开按钮;若需要特殊展示效果,可能需要主题设置或配合额外 CSS。
How many submenu levels does Shopify support?
Shopify 后台导航支持顶层项目下方最多嵌套两级子菜单,整体最多支持三级菜单层级。同时,当前启用的在线店铺主题可能也需要具备渲染这三级结构的能力。
Will my CSS fix disappear when I update my theme?
通常需要。直接写入 base.css 或 main.css 的自定义代码,在更新到主题新版本后往往需要重新添加。操作前务必先复制主题,并将手写的代码片段妥善备份记录。
Why do hover menus misbehave on phones?
许多触摸屏无法方便地悬停;MDN 指出,许多移动设备只有在不便的长按时才会模拟悬停。当桌面端的 :hover 规则被触摸触发时,下拉菜单可能会意外地打开又关闭。
Can I change the width of the mobile drawer?
取决于所使用的主题,很多时候可以直接在主题编辑器的 Header 部分调节移动端抽屉的宽度。如果主题未提供该功能,可以通过 CSS 媒体查询添加 max-width 属性,或使用自带宽度调节功能的专业菜单应用。
Sources
- Shopify Help Center: Drop-down menus (help.shopify.com)
- Shopify Help Center: Duplicating themes (help.shopify.com)
- MDN Web Docs: @media (hover) (developer.mozilla.org)
- W3C: WCAG 2.2 Target Size (Minimum) (w3.org)
- Nielsen Norman Group: Mobile Navigation Beyond the Hamburger (nngroup.com)
- fudge.ai: How to Change Mobile Menu Behavior in Shopify (fudge.ai)
- Shopify Community: Why isn’t my online store menu opening on mobile devices? (community.shopify.com)
- Shopify Community: Why is my menu not showing on mobile when I click the hamburger icon? (community.shopify.com)
- Shopify Community: Mobile menu is not working for my store (community.shopify.com)
- Shopify Community: Menu doesn’t work on mobile (community.shopify.com)
- Shopify Community: Why is the mobile menu not functioning on Dawn theme? (community.shopify.com)
- Shopify Community: How to fix a menu opening fully on mobile? (community.shopify.com)
- Shopify Community: Dawn theme header expand without clicking (community.shopify.com)
探索更多主题
本指南链接到一系列专题文章——逐一深入了解。