表单/表格

jQuery+CSS3折叠卡片式下拉列表框

阿里云


这是一款使用 jQuery 和 CSS3 制作的效果非常炫酷的折叠卡片式下拉列表框特效。该下拉列表框特效将每一个列表项都制作为卡片的样式,打开和关闭它有打开和关闭百叶窗的感觉,效果非常不错。

HTML 结构

该下拉列表框特效的列表项使用一个无序列表来制作,用于切换打开和关闭状态的元素是一个超链接元素。

也想出现在这里?联系我们
创客主机
  1. <div class="container">
  2.   <div class="card-drop">
  3.     <a class='toggle' href="#">
  4.       <i class='fa fa-suitcase'></i> 
  5.       <span class='label-active'>Everyting</span>
  6.     </a>
  7.     <ul>
  8.       <li class='active'>
  9.         <a data-label="Everyting" href="#"><i class='fa fa-suitcase'></i> Everyting</a>
  10.       </li>
  11.       ......
  12.     </ul>
  13.   </div>
  14. </div>

CSS 样式

a.toggle 元素用于切换下拉列表的打开和关闭状态。为了制作点击时卡片上翻的效果,它被设置了 transform-style: preserve-3d;属性。同时修改了转换的原点 transform-origin: 50% 0%;。

  1. .card-drop > a.toggle {
  2.   position: relative;
  3.   z-index: 100;
  4.   -moz-backface-visibility: hidden;
  5.   -webkit-backface-visibility: hidden;
  6.   backface-visibility: hidden;
  7.   -moz-transform-style: preserve-3d;
  8.   -webkit-transform-style: preserve-3d;
  9.   transform-style: preserve-3d;
  10.   -moz-transform-origin: 50% 0%;
  11.   -ms-transform-origin: 50% 0%;
  12.   -webkit-transform-origin: 50% 0%;
  13.   transform-origin: 50% 0%;
  14.   -moz-transition: linear 0.1s;
  15.   -o-transition: linear 0.1s;
  16.   -webkit-transition: linear 0.1s;
  17.   transition: linear 0.1s;
  18. }

但它处于激活状态的时候,它会沿 X 轴进行旋转,并使用:before 和:after 伪元素来制作角部三角形效果。

  1. .card-drop > a.toggle:active {
  2.   -moz-transform: rotateX(60deg);
  3.   -webkit-transform: rotateX(60deg);
  4.   transform: rotateX(60deg);
  5. }
  6. .card-drop > a.toggle:active:after {
  7.   -moz-transform: rotateX(180deg);
  8.   -webkit-transform: rotateX(180deg);
  9.   transform: rotateX(180deg);
  10. }
  11. .card-drop > a.toggle:before, .card-drop > a.toggle:after {
  12.   content: "";
  13.   position: absolute;
  14. }
  15. .card-drop > a.toggle:before {
  16.   right: 25px;
  17.   top: 50%;
  18.   margin-top: -2.5px;
  19.   border-left: 6px solid transparent;
  20.   border-right: 6px solid transparent;
  21.   border-top: 6px solid rgba(0, 0, 0, 0.8);
  22. }
  23. .card-drop > a.toggle.active:before {
  24.   transform: rotate(180deg);
  25. }

列表项在切换时只是简单的使用 jQuery 来修改它们的 top、width 和 margin-left 属性,使其显示和隐藏。并使用 ease-out 作为 CSS 动画过渡效果。

  1. .card-drop ul {
  2.   position: absolute;
  3.   height: 100%;
  4.   top: 0;
  5.   display: block;
  6.   width: 100%;
  7. }
  8. .card-drop ul li {
  9.   margin: 0 auto;
  10.   -moz-transition: all, ease-out 0.3s;
  11.   -o-transition: all, ease-out 0.3s;
  12.   -webkit-transition: all, ease-out 0.3s;
  13.   transition: all, ease-out 0.3s;
  14.   position: absolute;
  15.   top: 0;
  16.   z-index: 0;
  17.   width: 100%;
  18. }
  19. .card-drop ul li a {
  20.   border-top: none;
  21. }
  22. .card-drop ul li a:hover {
  23.   background-color: #4aa3df;
  24.   color: #f3f9fd;
  25. }
  26. .card-drop ul li.active a {
  27.   color: #fff;
  28.   background-color: #258cd1;
  29.   cursor: default;
  30. }
  31. .card-drop ul li.closed a:hover {
  32.   cursor: default;
  33.   background-color: #3498db;
  34. }

JavaScript

在 jQuery 代码中,setClosed()函数用于关闭所有的列表项,默认它们是处于关闭状态的。

  1. function setClosed() {
  2.     li.each(function (index) {
  3.         $(this).css('top', index * 4).css('width', width - index * 0.5 + '%').css('margin-left', index * 0.25 + '%');
  4.     });
  5.     li.addClass('closed');
  6.     toggler.removeClass('active');
  7. }
  8. setClosed();

然后监听.toggle 元素的 mousedown 事件,该事件中切换列表的打开和关闭状态。

  1. toggler.on('mousedown', function () {
  2.     var $this = $(this);
  3.     if ($this.is('.active')) {
  4.         setClosed();
  5.     } else {
  6.         $this.addClass('active');
  7.         li.removeClass('closed');
  8.         li.each(function (index) {
  9.             $(this).css('top', 60 * (index + 1)).css('width', '100%').css('margin-left', '0px');
  10.         });
  11.     }
  12. });

最后在每一个列表项被点击的时候,将该列表项的内容移动到第一项中,被关闭整个下来列表。

  1. links.on('click', function (e) {
  2.     var $this = $(this), label = $this.data('label');
  3.     icon = $this.children('i').attr('class');
  4.     li.removeClass('active');
  5.     if ($this.parent('li').is('active')) {
  6.         $this.parent('li').removeClass('active');
  7.     } else {
  8.         $this.parent('li').addClass('active');
  9.     }
  10.     toggler.children('span').text(label);
  11.     toggler.children('i').removeClass().addClass(icon);
  12.     setClosed();
  13.     e.preventDefault;
  14. });

jQuery+CSS3 折叠卡片式下拉列表框

已有 482 人购买
查看演示升级 VIP立刻购买

演示地址 下载地址
收藏
(0)

发表回复

热销模板

Ashade - 作品展示摄影相册WordPress汉化主题
LensNews

本站承接 WordPress / PbootCMS / DedeCMS 等
系统建站、仿站、开发、定制等业务!