利用css3做出立体折叠效果

原理介绍:
这种折叠效果是小编我在一个英文网站上学的,这个英文网站上的很多特效都很不错,推荐给你们进去看看,这个网站叫codrops
接下来正式简单介绍一下原理。折叠效果利用了css3里面的perspective 属性,这是一个3D画图里面的东西——透视;透视我就不具体介绍了,推荐一篇专门讲解perspective属性的文章——http://www.zhangxinxu.com/wordpr ... -animate-transition有了perspective这个属性的知识,再加上css3里面的渐变,我们就可一很轻易的打造各种立体效果了。


想要达到图上的折叠立体效果,我们的分析它是怎么用html布局的。从上图中可以看出,一张图片有五个部分,其中有四个部分是立起来的,呈现出立体效果。那么问题来了,要怎么样把一张图片分成五部分呢?其实这个不难,用background-postion定位就可以了,在这里我准备了五个div,每个idiv里的背景图通过定位,恰好能够拼成一张图片,而每部分的宽度都是等宽的,所以在利用background-postion属性时,X的值可以用图片的宽度除以5来确定,这里我用的图片宽度为640px;所以定位时,就有了如下代码:


  1. .view .s1 {
  2.         background-position: 0px 0px;
  3. }
  4. .view .s2 {
  5.         background-position: -128px 0px;
  6. }
  7. .view .s3 {
  8.         background-position: -256px 0px;
  9. }
  10. .view .s4 {
  11.         background-position: -384px 0px;
  12. }
  13. .view .s5 {
  14.         background-position: -512px 0px;
  15. }
复制代码


完成图片的布局之后,我们就可以给每个切片添加样式了。我选择了其中的四个切片,分别设置了translate3d和rotate3d这两个属性,设置方式可以看我贴的代码,不知道这两个属性怎么用的同学,可以深入研究一下上面推荐的文章。在这些都设置完了之后,你就可以看大折叠的立体效果了,不过有个问题,看起来不那么真实,所以,我又在每个切片的表层设置了一个span空元素,大小与一个切片一样大,并为其设置了linear-gradient线性渐变样式,使其中的一些切片具有阴影和反光效果,这样就更加真实了,具体设置方式可以参照下面的样式代码。
为了能够达到复用的效果,我将其封装成了一个插件,这样就可以直接应用到任何一张图片了。最后说一下,这是我第一次在这里发笔记,写的不是很好,望多多包涵,有问题的可以直接回复我,谢谢!


下面是图片的切割与布局



  1. <div class="slice s1" style="background-image: url(image.jpg); ">
  2.             <span class="overlay"></span>
  3.              
  4.             <div class="slice s2" style="background-image: url(image.jpg); ">
  5.                 <span class="overlay"></span>
  6.                  
  7.                 <div class="slice s3" style="background-image: url(image.jpg); ">
  8.                     <span class="overlay"></span>
  9.                      
  10.                     <div class="slice s4" style="background-image: url(image.jpg); ">
  11.                         <span class="overlay"></span>
  12.                          
  13.                         <div class="slice s5" style="background-image: url(image.jpg); ">
  14.                             <span class="overlay"></span>
  15.                         </div>
  16.                      
  17.                    </div>
  18.                          
  19.                </div>
  20.                      
  21.            </div>
  22.                  
  23.        </div>
复制代码


jQuery3D折叠插件代码


  1. $.fn.hoverfold = function( args ) {

  2.     this.each( function() {
  3.      
  4.         $( this ).children( '.view' ).each( function() {
  5.          
  6.             var $item   = $( this ),
  7.                 img     = $item.children( 'img' ).attr( 'src' ),
  8.                 struct  = '<div class="slice s1">';
  9.                     struct  +='<div class="slice s2">';
  10.                         struct  +='<div class="slice s3">';
  11.                             struct  +='<div class="slice s4">';
  12.                                 struct  +='<div class="slice s5">';
  13.                                 struct  +='</div>';
  14.                             struct  +='</div>';
  15.                         struct  +='</div>';
  16.                     struct  +='</div>';
  17.                 struct  +='</div>';
  18.                  
  19.             var $struct = $( struct );
  20.              
  21.             $item.find( 'img' ).remove().end().append( $struct ).find( 'div.slice' ).css( 'background-image', 'url(' + img + ')' ).prepend( $( '<span class="overlay" ></span>' ) );
  22.           });
  23.        });
  24.     };
复制代码


  1. <!doctype html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8">
  5. <title>Show me the Furry Friend of the Day</title>
  6. <script  type="text/javascript" src="http://code.jquery.com/jquery-1.8.2.min.js"></script>
  7. <style type="text/css">
  8. *{padding:0;margin:0}
  9. .header{width:100%;background:#000;height:50px;margin-bottom:20px;min-width:1000px}
  10. /*图片折叠效果样式*/
  11. .view{margin:20px auto;display:block;width:640px;height:400px;border: 8px solid #fff;background-color: #EEE;background-image: -webkit-linear-gradient(hsla(0,0%,0%,.025), hsla(0,0%,100%,.05) 33%, hsla(0,0%,0%,.05) 33%, hsla(0,0%,100%,.05) 67%, hsla(0,0%,0%,.05) 67%, hsla(0,0%,100%,.025));-webkit-perspective: 800px;-moz-perspective: 800px;-o-perspective: 800px;-ms-perspective: 800px;perspective: 800px;position:relative;box-shadow: inset 0 0 0 .2em hsla(0,0%,0%,.1),
  12. inset 0 0 2em hsla(0,0%,0%,.05),0 .2em .25em hsla(0,0%,0%,.5);}

  13. .view .slice{
  14.         width:128px;
  15.         height: 100%;
  16.         z-index: 100;
  17.         
  18.         -webkit-transform-style: preserve-3d;
  19.         -moz-transform-style: preserve-3d;
  20.         -o-transform-style: preserve-3d;
  21.         -ms-transform-style: preserve-3d;
  22.         transform-style: preserve-3d;
  23.         
  24.         -webkit-transform-origin: left center;
  25.         -moz-transform-origin: left center;
  26.         -o-transform-origin: left center;
  27.         -ms-transform-origin: left center;
  28.         transform-origin: left center;
  29.         
  30.         -webkit-transition: -webkit-transform 150ms ease-in-out;
  31.         -moz-transition: -moz-transform 150ms ease-in-out;
  32.         -o-transition: -o-transform 150ms ease-in-out;
  33.         -ms-transition: -ms-transform 150ms ease-in-out;
  34.         transition: transform 150ms ease-in-out;}

  35. .view-back{
  36.         width: 50%;
  37.         height: 100%;
  38.         position: absolute;
  39.         right: 0;
  40.         background-color: rgb(0,255,255);
  41.         background-image: -webkit-linear-gradient(hsla(0,0%,0%,.025), hsla(0,0%,100%,.05) 33%, hsla(0,0%,0%,.05) 33%, hsla(0,0%,100%,.05) 67%, hsla(0,0%,0%,.05) 67%, hsla(0,0%,100%,.025));
  42.         z-index: 0;
  43. }
  44. .view .s2, 
  45. .view .s3, 
  46. .view .s4, 
  47. .view .s5 {
  48.         -webkit-transform: translate3d(128px,0,0);
  49.         -moz-transform: translate3d(128px,0,0);
  50.         -o-transform: translate3d(128px,0,0);
  51.         -ms-transform: translate3d(128px,0,0);
  52.         transform: translate3d(128px,0,0);
  53. }
  54. /*为每个切片设置背景图片位置*/
  55. .view .s1 {
  56.         background-position: 0px 0px;
  57. }
  58. .view .s2 {
  59.         background-position: -128px 0px;
  60. }
  61. .view .s3 {
  62.         background-position: -256px 0px;
  63. }
  64. .view .s4 {
  65.         background-position: -384px 0px;
  66. }
  67. .view .s5 {
  68.         background-position: -512px 0px;
  69. }

  70. .view .overlay {
  71.         width: 128px;
  72.         height: 100%;
  73.         opacity: 0;
  74.         position: absolute;
  75.         -webkit-transition: opacity 150ms ease-in-out;
  76.         -moz-transition: opacity 150ms ease-in-out;
  77.         -o-transition: opacity 150ms ease-in-out;
  78.         -ms-transition: opacity 150ms ease-in-out;
  79.         transition: opacity 150ms ease-in-out;
  80. }
  81. .view:hover .overlay {
  82.         opacity: 1;
  83. }

  84. .view img {
  85.         position: absolute;
  86.         z-index: 0;
  87.         -webkit-transition: left 0.3s ease-in-out;
  88.         -o-transition: left 0.3s ease-in-out;
  89.         -moz-transition: left 0.3s ease-in-out;
  90.         -ms-transition: left 0.3s ease-in-out;
  91.         transition: left 0.3s ease-in-out;
  92. }
  93. .view:hover .s2{
  94.         -webkit-transform: translate3d(127px,0,0) rotate3d(0,1,0,-45deg);
  95.         -moz-transform: translate3d(127px,0,0) rotate3d(0,1,0,-45deg);
  96.         -o-transform: translate3d(127px,0,0) rotate3d(0,1,0,-45deg);
  97.         -ms-transform: translate3d(127px,0,0) rotate3d(0,1,0,-45deg);
  98.         transform: translate3d(127px,0,0) rotate3d(0,1,0,-45deg);
  99. }
  100. .view:hover .s3, 
  101. .view:hover .s5{
  102.         -webkit-transform: translate3d(127px,0,0) rotate3d(0,1,0,90deg);
  103.         -moz-transform: translate3d(127px,0,0) rotate3d(0,1,0,90deg);
  104.         -o-transform: translate3d(127px,0,0) rotate3d(0,1,0,90deg);
  105.         -ms-transform: translate3d(127px,0,0) rotate3d(0,1,0,90deg);
  106.         transform: translate3d(127px,0,0) rotate3d(0,1,0,90deg);
  107. }
  108. .view:hover .s4{
  109.         -webkit-transform: translate3d(127px,0,0) rotate3d(0,1,0,-90deg);
  110.         -moz-transform: translate3d(127px,0,0) rotate3d(0,1,0,-90deg);
  111.         -o-transform: translate3d(127px,0,0) rotate3d(0,1,0,-90deg);
  112.         -ms-transform: translate3d(127px,0,0) rotate3d(0,1,0,-90deg);
  113.         transform: translate3d(127px,0,0) rotate3d(0,1,0,-90deg);
  114. }
  115. /*为每个切片创建渐变效果*/
  116. .view .s1 > .overlay {
  117.         background: -moz-linear-gradient(right, rgba(0,0,0,0.05) 0%, rgba(0,0,0,0) 100%);
  118.         background: -webkit-linear-gradient(right, rgba(0,0,0,0.05) 0%,rgba(0,0,0,0) 100%);
  119.         background: -o-linear-gradient(right, rgba(0,0,0,0.05) 0%,rgba(0,0,0,0) 100%);
  120.         background: -ms-linear-gradient(right, rgba(0,0,0,0.05) 0%,rgba(0,0,0,0) 100%);
  121.         background: linear-gradient(right, rgba(0,0,0,0.05) 0%,rgba(0,0,0,0) 100%);
  122. }

  123. .view .s2 > .overlay {
  124.         background: -moz-linear-gradient(left, rgba(255,255,255,0) 0%, rgba(255, 255, 255, 0.2) 100%);
  125.         background: -webkit-linear-gradient(left, rgba(255,255,255,0) 0%, rgba(255, 255, 255, 0.2) 100%);
  126.         background: -o-linear-gradient(left, rgba(255,255,255,0) 0%, rgba(255, 255, 255, 0.2) 100%);
  127.         background: -ms-linear-gradient(left, rgba(255,255,255,0) 0%, rgba(255, 255, 255, 0.2) 100%);
  128.         background: linear-gradient(left, rgba(255,255,255,0) 0%, rgba(255, 255, 255, 0.2) 100%);
  129. }

  130. .view .s3 > .overlay {
  131.         background: -moz-linear-gradient(right, rgba(0,0,0,0.8) 0%, rgba(0,0,0,0.2) 100%);
  132.         background: -webkit-linear-gradient(right, rgba(0,0,0,0.8) 0%,rgba(0,0,0,0.2) 100%);
  133.         background: -o-linear-gradient(right, rgba(0,0,0,0.8) 0%,rgba(0,0,0,0.2) 100%);
  134.         background: -ms-linear-gradient(right, rgba(0,0,0,0.8) 0%,rgba(0,0,0,0.2) 100%);
  135.         background: linear-gradient(right, rgba(0,0,0,0.8) 0%,rgba(0,0,0,0.2) 100%);
  136. }

  137. .view .s4 > .overlay {
  138.         background: -moz-linear-gradient(left, rgba(0,0,0,0.8) 0%, rgba(0,0,0,0) 100%);
  139.         background: -webkit-linear-gradient(left, rgba(0,0,0,0.8) 0%,rgba(0,0,0,0) 100%);
  140.         background: -o-linear-gradient(left, rgba(0,0,0,0.8) 0%,rgba(0,0,0,0) 100%);
  141.         background: -ms-linear-gradient(left, rgba(0,0,0,0.8) 0%,rgba(0,0,0,0) 100%);
  142.         background: linear-gradient(left, rgba(0,0,0,0.8) 0%,rgba(0,0,0,0) 100%);
  143. }

  144. .view .s5 > .overlay {
  145.         background: -moz-linear-gradient(left, rgba(0,0,0,0.3) 0%, rgba(0,0,0,0) 100%);
  146.         background: -webkit-linear-gradient(left, rgba(0,0,0,0.3) 0%,rgba(0,0,0,0) 100%);
  147.         background: -o-linear-gradient(left, rgba(0,0,0,0.3) 0%,rgba(0,0,0,0) 100%);
  148.         background: -ms-linear-gradient(left, rgba(0,0,0,0.3) 0%,rgba(0,0,0,0) 100%);
  149.         background: linear-gradient(left, rgba(0,0,0,0.3) 0%,rgba(0,0,0,0) 100%);
  150. }

  151. </style>
  152. </head>
  153. <body  style="background:url(data/attachment/album/201410/21/205405b2dzgtxt2stq27d7.jpg);min-width:1000px">
  154. <header class="header"></header>
  155. <div id="grid">
  156.     <div class="view">
  157.         <div class="view-back">
  158.             <span style="font:32px 'Microsoft YaHei';position:absolute;right:20px;text-shadow: 2px 2px .3em rgba(255, 255, 255, .6);color:#FFF">HIT FM</span>
  159.             <span style="font:18px 'Microsoft YaHei';position:absolute;right:5px;top:50px;text-shadow: 1px 1px .3em rgba(0, 0, 0, .8);">NEVER <br/>STOP THE BEAT!</span>
  160.         </div>
  161.         <img src="data/attachment/album/201410/21/205406wfuvvuowv1yhdvdv.jpg" /> 
  162.     </div>
  163. <script type="text/javascript">
  164. //jquery插件代码                 
  165. $.fn.hoverfold = function( args ) {

  166.     this.each( function() {
  167.      
  168.         $( this ).children( '.view' ).each( function() {
  169.          
  170.             var $item   = $( this ),
  171.                 img     = $item.children( 'img' ).attr( 'src' ),
  172.                 struct  = '<div class="slice s1">';
  173.                     struct  +='<div class="slice s2">';
  174.                         struct  +='<div class="slice s3">';
  175.                             struct  +='<div class="slice s4">';
  176.                                 struct  +='<div class="slice s5">';
  177.                                 struct  +='</div>';
  178.                             struct  +='</div>';
  179.                         struct  +='</div>';
  180.                     struct  +='</div>';
  181.                 struct  +='</div>';
  182.                  
  183.             var $struct = $( struct );
  184.              
  185.             $item.find( 'img' ).remove().end().append( $struct ).find( 'div.slice' ).css( 'background-image', 'url(' + img + ')' ).prepend( $( '<span class="overlay" ></span>' ) );
  186.           });
  187.        });
  188.     };
  189. //调用插件
  190. $( '#grid' ).hoverfold();
  191. </script>
  192. </div>
  193. </body>
  194. </html>
复制代码


via:http://www.w3cfuns.com/blog-5452961-5401334.html
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值