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

仅用CSS实现点击展开的UL LI侧边子菜单下拉效果

实现侧边菜单子分类点击下拉效果

嘿,我来帮你搞定这个侧边菜单的下拉功能!首先得先修正你原代码里的一个小问题:标签直接包裹

  • 是不符合HTML语义规范的,
  • 必须是
      或
        的直接子元素,咱们先把结构调整正确,再一步步实现下拉效果。

        第一步:修正并完善HTML结构

        我们给有子分类的菜单项嵌套子列表,用一个带图标的触发元素来控制下拉:

        <ul class="droplist">
          <li class="menu-item">
            <a href="#" class="toggle-btn">
              <i class="fa fa-angle-right"></i> FOOD ITEMS
            </a>
            <!-- 子分类列表 -->
            <ul class="submenu">
              <li><a href="#">Fruits</a></li>
              <li><a href="#">Vegetables</a></li>
              <li><a href="#">Snacks</a></li>
            </ul>
          </li>
          <li class="menu-item">
            <a href="#" class="toggle-btn">
              <i class="fa fa-angle-right"></i> TOYS
            </a>
            <ul class="submenu">
              <li><a href="#">Plush Toys</a></li>
              <li><a href="#">Action Figures</a></li>
            </ul>
          </li>
          <li>Category</li>
        </ul>
        

        第二步:用CSS控制显示/隐藏和样式

        初始状态下隐藏子菜单,添加过渡动画让下拉更流畅,同时给激活状态的菜单添加样式:

        /* 基础菜单样式 */
        .droplist {
          list-style: none;
          padding: 0;
          width: 250px;
          background: #f5f5f5;
        }
        
        .menu-item {
          border-bottom: 1px solid #ddd;
        }
        
        .toggle-btn {
          display: block;
          padding: 12px 15px;
          text-decoration: none;
          color: #333;
          cursor: pointer;
          transition: background 0.3s;
        }
        
        .toggle-btn:hover {
          background: #e0e0e0;
        }
        
        /* 子菜单默认隐藏 */
        .submenu {
          list-style: none;
          padding: 0;
          max-height: 0;
          overflow: hidden;
          transition: max-height 0.3s ease-out;
          background: #fff;
        }
        
        .submenu li {
          padding: 8px 25px;
        }
        
        .submenu li a {
          color: #555;
          text-decoration: none;
        }
        
        /* 激活状态:显示子菜单 */
        .menu-item.active .submenu {
          max-height: 200px; /* 根据子项数量调整高度 */
        }
        
        /* 切换箭头方向 */
        .menu-item.active .fa-angle-right {
          transform: rotate(90deg);
          transition: transform 0.3s;
        }
        

        第三步:用JavaScript实现点击切换逻辑

        监听触发按钮的点击事件,给父菜单添加/移除active类来控制子菜单的显示:

        // 获取所有切换按钮
        const toggleBtns = document.querySelectorAll('.toggle-btn');
        
        toggleBtns.forEach(btn => {
          btn.addEventListener('click', function(e) {
            e.preventDefault(); // 阻止默认跳转行为
            // 切换当前菜单的active类
            const parentItem = this.closest('.menu-item');
            parentItem.classList.toggle('active');
            
            // 可选:关闭其他打开的子菜单,保持一次只展开一个
            toggleBtns.forEach(otherBtn => {
              const otherItem = otherBtn.closest('.menu-item');
              if (otherItem !== parentItem) {
                otherItem.classList.remove('active');
              }
            });
          });
        });
        

        这样就实现了点击菜单项时,子分类平滑下拉/收起的效果,同时修正了HTML结构的语义问题,让菜单更符合规范。

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

  • 相关产品推荐
    方舟 Agent Plan

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

    最近更新时间:2026.05.25 06:39:23