如何使用CSS3画出懂你的3D魔方~

如何使用CSS3画出懂你的3D魔方~

首页休闲益智绘制魔方更新时间:2024-07-30

如何使用CSS3画出懂你的3D魔方~

前言

最近在写《每周动画点点系列》文章,上一期分享了< 手把手教你如何绘制一辆会跑车 >,本期给大家带来是结合CSS3画出来的一个立体3d魔方,结合了js让你随心所欲想怎么转,就怎么转,这里是 @IT·平头哥联盟,我是首席填坑官∙苏南(South·Su),我们先来看看效果,然后再分解它的实现过程吧

示例展示

绘制过程:

好吧,gif图看着好像有点不是很清晰,想在线预览的同学,可点击在线预览 ,废话不多扯了,先来分析一下,看如何实现这个功能吧。

∙ API预热 :

perspective 取值 :

transform-style 取值

transform-origin 取值

/*perspective使用示例:*/ div{ -webkit-perspective:600px; perspective:600px; } /*transform-style使用示例:*/ .preserve{ transform-style:preserve-3d; -webkit-transform-style:preserve-3d; } /*transform-origin使用示例:*/ .preserve{ -webkit-transform-origin:50P%-100px;or -webkit-transform-origin:bottom;or -webkit-transform-origin:top; ………… }

∙ 绘制6个面 :

<divclass="cube"> <divclass="cube-innerrunning"> <pclass="single-sides1"><span>最</span></p> <pclass="single-sides2"><span>懂</span></p> <pclass="single-sides3"><span>你</span></p> <pclass="single-sides4"><span>的</span></p> <pclass="single-sides5"><span>魔</span></p> <pclass="single-sides6"><span>方</span></p> </div> </div>

@IT·平头哥联盟-首席填坑官∙苏南分享

我公Z好 o:honeyBadger8

.cube{ width:200px; height:200px; margin:10pxauto; padding:260px; position:relative; -webkit-perspective:600px; perspective:600px; transition:.5s; } .cube-inner{ width:200px; height:200px; position:relative; -webkit-transform-style:preserve-3d; transition:.3s; -webkit-transform-origin:50P%-100px; transform:rotateX(45deg); } .cube:hover{ /*鼠标经过时,把perspective过渡到100*/ -webkit-perspective:100px; perspective:100px; }

动画一点点之 6个面的元素的演示

hue-rotate : The hue-rotate() CSS function rotates the hue of an element and its contents. Its result is a .

.cube-inner.single-side.s1{ /*s1顶部*/ left:0;top:-200px; background:radial-gradient(circle,rgba(255,255,255,.88),#00adff); background:-webkit-radial-gradient(circle,rgba(255,255,255,.88),#00adff); transform-origin:bottom; -webkit-transform-origin:bottom; transform:rotateX(90deg); -webkit-transform:rotateX(90deg); }

本文由@IT·平头哥联盟-首席填坑官∙苏南分享

.cube-inner.single-side.s3{ /*s3底部*/ left:0;top:200px; background:radial-gradient(circle,rgba(255,255,255,.88),#100067); background:-webkit-radial-gradient(circle,rgba(255,255,255,.88),#100067); transform-origin:top; -webkit-transform-origin:top; transform:rotateX(-90deg); -webkit-transform:rotateX(-90deg); }

.cube-inner.single-side.s4{ /*s4背部*/ z-index:2; left:0;top:0; background:radial-gradient(circle,rgba(255,255,255,.88),#F0C); background:-webkit-radial-gradient(circle,rgba(255,255,255,.88),#F0C); transform:translateZ(-200px)rotateX(180deg); -webkit-transform:translateZ(-200px)rotateX(180deg);/*rotateZ(-180deg)左右旋转的时候,Z轴旋转180°,因为字是倒着的*/ }

@IT·平头哥联盟-首席填坑官∙苏南分享

.cube-inner.single-side.s5{ /*s5左侧*/ left:-200px;top:0; background:radial-gradient(circle,rgba(255,255,255,.88),rgba(33,33,33,1)); background:-webkit-radial-gradient(circle,rgba(255,255,255,.88),rgba(33,33,33,1)); transform-origin:right; -webkit-transform-origin:right; transform:rotateY(-90deg) -webkit-transform:rotateY(-90deg) }

.cube-inner.single-side.s6{ /*s6右侧*/ right:-200px;top:0; transform-origin:left; -webkit-transform-origin:left; background:radial-gradient(circle,rgba(255,255,255,.88),#f00); background:-webkit-radial-gradient(circle,rgba(255,255,255,.88),#f00); transform:rotateY(90deg); -webkit-transform:rotateY(90deg); }

小结 : 嗯,以上魔方的6个面的绘制过程,基本已经完成,主要在在于transform-origin、rotate、translate等属性的应用,但为了让它更炫酷一些,我们还要给边角加一些光感。

∙ 添加高光 :

动画一点点之 6个面的元素鼠标经过

∙ CSS 360°旋转 :

.cube.cube-inner{ /*-webkit-transform:rotateX(180deg)rotateY(0deg);*/ animation:elfCube10sinfiniteease-in-out; -webkit-animation:elfCube10sinfiniteeasealternate; } @keyframeselfCube{ 0%{ transform:rotateX(0deg)rotateY(0deg); } 50%{ transform:rotateX(360deg)rotateY(360deg); } 100%{ transform:rotateX(0deg)rotateY(0deg); } } @-webkit-keyframeselfCube{ 0%{ -webkit-transform:rotateX(0deg)rotateY(0deg); } 50%{ -webkit-transform:rotateX(360deg)rotateY(360deg); } 100%{ transform:rotateX(0deg)rotateY(0deg); } }

每周动画一点点之 6个面的元素之360度旋转

∙ 跟随鼠标旋转 :

动画一点点之 6个面的元素之360度旋转

…… getAxisX(e){ letleft=this.cubeEle.offsetLeft; returne.pageX-left-(this.cubeW/2)*(this.cubeW>this.cubeH?this.cubeH/this.cubeW:1); } getAxisY(e){ lettop=this.cubeEle.offsetTop; returne.pageY-top-(this.cubeH/2)*(this.cubeH>this.cubeW?this.cubeW/this.cubeH:1); } ………… ………… run(){ this.cubeEle.addEventListener('mouseover',(e)=>this.hoverOut(e),false); this.cubeEle.addEventListener('mousemove',(e)=>this.move(e),false); this.cubeEle.addEventListener('mouseout',(e)=>this.hoverOut(e),false); } hoverOut(e){ //进入/离开 e.preventDefault(); this.axisX=this.getAxisX(e), this.axisY=this.getAxisY(e); if(e.type=='mouseout'){//离开 this.axisX=0; this.axisY=0; console.log("离开") this.cubeInner.className="cube-innerrunning"; }else{ this.cubeInner.className="cube-inner"; console.log("进入") }; letrotate=`rotateX(${-this.axisY}deg)rotateY(${-this.axisX}deg)`; this.cubeInner.style.WebkitTransform=this.cubeInner.style.transform=rotate; } ……

结尾:

前端的技术感兴趣/或想入门前端的同学可关注我的头条号,并在后台私信发送关键字:“前端”加入跟我们一起成长或公Z好:honeyBadger8,欢迎来撩哦~

作者:苏南 - 首席填坑官

链接:https://honeybadger8.github.io/blog/

交Q:912594095、公Z好:honeyBadger8

本文原创,著作权归作者所有。商业转载请联系@IT·平头哥联盟获得授权,非商业转载请注明原链接及出处。

宝剑锋从磨砺出,梅花香自苦寒来,做有温度的攻城狮

查看全文
大家还看了
也许喜欢
更多游戏

Copyright © 2024 妖气游戏网 www.17u1u.com All Rights Reserved