不多废话,先上预览
https://codepen.io/Ritr/pen/W...
这一次还是使用<input type="checkbox">的选中与否来实现展开、收起二级菜单的。

第一步:初始化

默认二级菜单的li高度为0

选择一级菜单时,将二级菜单高度设置为20px

这样设置是为了方便我们以后添加动画效果

html

<ul class="menu">    <li class="main-menu">      <label for="ck1">          <span>水果</span>          </label>      <input id="ck1" type="checkbox">      <ul class="sub-menu-container">        <li class="sub-menu">橘子</li>        <li class="sub-menu">香蕉</li>        <li class="sub-menu">苹果</li>      </ul>    </li>    <li class="main-menu">      <label for="ck2">          <span>水果</span>          </label>      <input id="ck2" type="checkbox" checked>      <ul class="sub-menu-container">        <li class="sub-menu checked">橘子</li>        <li class="sub-menu checked">香蕉</li>        <li class="sub-menu checked">苹果</li>      </ul>    </li>  </ul>

css

/* 初始化 */*{  margin:0;  padding:0}.container{  width:500px;  margin:0 auto;  text-align:center;}.menu{  width:200px;  display:inline-block;}li{  list-style:none;  cursor:pointer;  text-align:left;  text-indent:5px;}.main-menu{  background:#0099CC;  margin:1px 0;}.sub-menu{  background:#00CCFF;  margin:1px 0;  overflow:hidden;  height:0;}.sub-menu.checked{  height:20px;}

效果图

第二步:选中checkbox时展开二级菜单,取消选择时收起二级菜单

划重点--注意label和input之间的位置
html

<ul class="menu">    <li class="main-menu">      <label for="ck3">          <span>水果</span>          </label>      <input id="ck3" class="ck" type="checkbox">      <ul class="sub-menu-container">        <li class="sub-menu">橘子</li>        <li class="sub-menu">香蕉</li>        <li class="sub-menu">苹果</li>      </ul>    </li>    <li class="main-menu">      <label for="ck4">          <span>水果</span>          </label>      <input id="ck4" class="ck" type="checkbox" checked>      <ul class="sub-menu-container">        <li class="sub-menu">橘子</li>        <li class="sub-menu">香蕉</li>        <li class="sub-menu">苹果</li>      </ul>    </li>  </ul>

css

/* 第二步 */.ck:checked + .sub-menu-container .sub-menu{  height:20px;}

效果图


看起来跟第一步没什么变化

第三步优化

将label设置成和一级菜单同样大小,隐藏checkbox,添加动画
html

<ul class="menu">    <li class="main-menu">      <label for="ck5" class="menu-label">          <span>水果</span>          </label>      <input id="ck5" class="ck-finished" type="checkbox">      <ul class="sub-menu-container">        <li class="sub-menu-finished">橘子</li>        <li class="sub-menu-finished">香蕉</li>        <li class="sub-menu-finished">苹果</li>      </ul>    </li>  </ul>

css

.menu-label{  display:inline-block;  width:100%;  cursor:pointer;}/* 隐藏checkbox */.ck-finished{  display:none;}.ck-finished:checked + .sub-menu-container .sub-menu-finished{  height:20px;}.sub-menu-finished{  background:#00CCFF;  margin:1px 0;  overflow:hidden;  height:0;  transition:all 0.4s;/* 添加动画 */}

效果图


哈哈,变化不大。还是需要你点击预览一下的。
另外怎么上次gif图?大佬告诉我一下吧。