前言
效果展示
折叠面板是网页中常见的效果之一,在jQuery UI
和Bootstrap
中都有相关的实现,但都需要依赖js。如果不想引入js代码,其实纯CSS也可以实现,只是功能上有些简化。
具体的实现方法总结了两种,第一种使用radio
控件模拟,第二种使用CSS3的:target伪类
。
Radio实现
name
值相同的单选按钮,在同一时间只能有一个被选中,利用这一特性便可以实现折叠菜单。首先将label标签
和input按钮
绑定,然后隐藏input
,点击label标签
,相应input
被选中,再利用:checked伪类
和相邻兄弟选择器使相应div显示即可。
HTML
<div class="menuItem"> <label for="item1"><a>商业平台学院</a></label> <input type="radio" name="item" id="item1"> <div class="detail"> <p>商业平台学院是百度商业体系最大的前端团队,所在部门主要负责百度核心商业产品推广平台的建设,包括搜索推广和信息流推广,是公司绝大部分收入的来源。学院不仅提供Web前端、还有iOS、Android方向供大家学习。商业平台学院欢迎你的到来!</p> </div> </div> <div class="menuItem">...</div> <div class="menuItem">...</div>
|
CSS
.menuItem label + input { display: none; } .menuItem .detail { height: 0; overflow: hidden; transition: height 0.3s ease; } .menuItem input:checked + detail { height: 120px; }
|
:target伪类实现
目标伪类选择器:targrt是众多实用的CSS3特性之一,它会选取链接a标签
的目标元素。既然如此,那我们只需要给内容容器指定id,将a标签
链接到这些容器即可动态的修改属性。
HTML
<div class="menuItem"> <h2><a href="#item1">商业平台学院</a></h2> <p id="item1">商业平台学院是百度商业体系最大的前端团队,所在部门主要负责百度核心商业产品推广平台的建设,包括搜索推广和信息流推广,是公司绝大部分收入的来源。学院不仅提供Web前端、还有iOS、Android方向供大家学习。商业平台学院欢迎你的到来!</p> </div> <div class="menuItem">...</div> <div class="menuItem">...</div>
|
CSS
.menuItem p { height: 0; overflow: hidden; transition: height 0.5s ease; } .menuItem p:target { height: 120px; }
|
总结
利用CSS3强大的选择器可以实现很多神奇的效果,但是这两种实现方法仍有一些缺陷,例如:任意时刻必有一个菜单项是展开状态,单击同一菜单项无法实现隐藏/展示状态切换,无法自适应高度,只能设置固定高度等等。但这两种方法足以应对大多数情况了,以后如果有机会会再进行优化的。