You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用@media实现小屏幕下的可折叠导航栏

小屏设备可折叠导航栏实现方法

你现有代码缺少折叠触发控件和小屏适配规则,按以下步骤修改即可实现效果:

  • 第一步:补全HTML结构,添加汉堡菜单触发按钮
  • 第二步:编写CSS样式,通过媒体查询区分大屏、小屏展示逻辑,添加折叠展开过渡效果
  • 第三步:添加少量原生JS,实现点击按钮切换导航展开/收起状态

1. 补全后的HTML代码

在原有logo标签后、nav标签前添加菜单触发按钮,完整结构如下:

<header class="header">
  <a href="#" class="logo">
    <img src="images/logo.png" alt="站点logo">
  </a>
  <!-- 新增折叠触发按钮 -->
  <button class="menu-toggle" aria-label="切换导航菜单">☰</button>
  <nav class="navbar">
    <div class="cart">
      <a href="index.html">Strona główna</a>
      <a href="shop.html">Sklep</a>
      <a href="cart.html">
        <ion-icon name="basket"></ion-icon>Koszyk<span>0 </span>
      </a>
    </div>
  </nav>
</header>

2. 对应CSS样式

默认样式适配大屏展示,768px宽度断点下切换为折叠模式,你可以根据设计需求调整断点数值、配色、间距:

/* 基础头部样式 */
.header {
  display: flex;
  justify-content: space-between;
  align-items: center;
  padding: 1rem 5%;
  position: relative;
  background: #ffffff;
  box-shadow: 0 2px 6px rgba(0,0,0,0.08);
}
.logo img {
  height: 42px;
}
/* 导航链接容器默认水平排列 */
.cart {
  display: flex;
  gap: 2.2rem;
  align-items: center;
}
.cart a {
  text-decoration: none;
  color: #2b2b2b;
  font-weight: 500;
}
/* 大屏默认隐藏汉堡按钮 */
.menu-toggle {
  display: none;
  font-size: 1.6rem;
  border: none;
  background: transparent;
  cursor: pointer;
  padding: 0.2rem;
}

/* 小屏适配规则 */
@media (max-width: 768px) {
  .menu-toggle {
    display: block;
  }
  .navbar {
    position: absolute;
    top: 100%;
    left: 0;
    width: 100%;
    background: #ffffff;
    /* 默认折叠状态 */
    height: 0;
    overflow: hidden;
    transition: all 0.3s ease;
    box-shadow: 0 4px 6px rgba(0,0,0,0.08);
  }
  /* 导航展开时添加的状态类 */
  .navbar.active {
    height: fit-content;
  }
  .cart {
    flex-direction: column;
    align-items: flex-start;
    padding: 1.2rem 5%;
    gap: 1.2rem;
  }
}

3. 交互JS代码

不需要引入第三方库,将以下代码放在页面</body>标签前即可:

<script>
const menuToggle = document.querySelector('.menu-toggle');
const navbar = document.querySelector('.navbar');

// 点击按钮切换导航展开/收起
menuToggle.addEventListener('click', () => {
  navbar.classList.toggle('active');
  // 切换按钮图标,展开时显示关闭叉号
  menuToggle.textContent = navbar.classList.contains('active') ? '✕' : '☰';
});

// 可选优化:点击任意导航链接后自动收起菜单
document.querySelectorAll('.cart a').forEach(link => {
  link.addEventListener('click', () => {
    navbar.classList.remove('active');
    menuToggle.textContent = '☰';
  });
});
</script>

如果对动画流畅度要求更高,可以把高度过渡改为transform: translateY()偏移实现,能获得更好的渲染性能;断点数值、配色、间距都可以根据你的实际页面设计自由调整。

内容的提问来源于stack exchange,提问作者blacky

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 23:06:23