经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » HTML/CSS » CSS » 查看文章
纯css折叠区域-基于checkbox
来源:cnblogs  作者:谷惊雨蛰  时间:2019/3/21 8:36:26  对本文有异议

Accordion

Accordion即可折叠区域,和<details>标签类似,不过更灵活些。折叠区域往常多用JavaScript实现,这里就纯粹用CSS,就想法上也是异途同归。

折叠区域重在折叠两字,既然要折叠,必然要有能记录下当前折叠状态的元素存在,思来想去<input type="checkbox">恰好就是这样的元素,正好两个值,并且还可以互相切换,可以符合要求。如此说来,既然有了input,也能很自然地想到<label>了,label可以根据for来指向特定的input元素从而无需亲自点击它就可以修改它的状态,之后根据其状态checked来标志需要显示折叠区域,否则隐藏折叠区域。

实现的方法也不难,先设置.according-body的max-height为0,然后在checkbox为checked的状态下设置其max-height为一个足够大的值就好,如下:

  1. .accordion-body{
  2. padding-left: $unit-2;
  3. margin-bottom: $layout-spacing;
  4. max-height: 0;
  5. overflow: hidden;
  6. transition: max-height 0.25s;
  7. }
  8. input:checked ~,
  9. &[open]{
  10. & .accordion-body{
  11. max-height: 100rem;
  12. }
  13. }

注意到这里指定的是max-height而非height,因为我们实际上并不知道折叠区域的高度,既然不知道高度,为何还需要特别指定一个max-height便是一个小技巧了。仔细再看一下.according-body的transition属性,它是可以根据max-height来实现过渡效果的,这样便实现了简单的动画,虽然看上去折叠的内容不能高于100rem是一个bug,但实际上很少会遇到需要折叠这么一大块区域的情况,因此并非什么大问题。

Accordion的大体结构这样便可以了,另外就是一些辅助性的效果,比方说折叠动作的时候显示区域旁边的小图标可以转一下之类的,利用transform便可以很轻易做到:

  1. input:checked ~,
  2. &[open]{
  3. & .accordion-header{
  4. .icon{
  5. transform: rotate(90deg)
  6. }
  7. }
  8. }
  9. .accordion-header{
  10. cursor: pointer;
  11. display: block;
  12. padding: $unit-1 $unit-2;
  13. .icon{
  14. transition: transform 0.25s;
  15. }
  16. }

如此一来Accordion也就完成了,不过考虑也可以在details标签中添加该类,所以需要将summary标签自带的小标志取消掉,如下:

  1. summary.accordion-header{
  2. &::-webkit-details-marker{
  3. display: none !important;
  4. }
  5. }

Accordion的使用便只需要添加相应的类和input就好,如下:

  1. <div class="accordion">
  2. <input type="checkbox" id="ac-exp0" hidden>
  3. <label for="ac-exp0" class="accordion-header">
  4. <div class="icon icon-menu"></div>古都</label>
  5. <div class="accordion-body">
  6. <p>
  7. ...
  8. </p>
  9. </div>
  10. </div>

 点击此查看样例

原文链接:http://www.cnblogs.com/lotusloli/p/10562886.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号