最好的实践,就是给定一个实践的目标去实践。

目标:利用 CSS3 的一些特性,绘制一个魔方,要可以玩转的那种,即上下左右每一层都可以独立旋转。效果如下:

为了完成此效果,将使用到以下相关概念和样式:坐标、3D呈现、平移、旋转。

(1)坐标

屏幕的起点坐标是(0,0,0),往右递增为 x 方向,使用 left 属性表示,往下走,递增为 y 方向,使用 top 属性表示。而 3D 场景中 z 正方向(递增)为走出屏幕到你面前的方向。

但这个坐标的起点不一定得是屏幕,只是遵循相同的方向。当元素使用 position:absolute 来绝对定位时,其位置坐标是以最近的 position:relative 父元素为(0,0,0) 来计算的,因此,我们绘制一个3D场景时,通常会定义一个最外层的 position:relative 元素来进行场内发挥。

以下完整的页面代码,会绘制一个x,y,z坐标轴,会使用到本文涉及的各个内容,后边的内容均以此页面为基础,便于动手体验。

<!DOCTYPE html>
<html>
<head><meta charset="utf-8" /> <title>CSS3 魔方</title><!-- 样式部分全写这里 --><style>  .wrap {transform-style: preserve-3d;width: 300px;  height: 300px; position: relative;  /* 定位起点元素 */border-top:solid 1px gray;  /* x 轴 */border-left:solid 1px gray;  /* y 轴 *//* 倾斜一点方能见立体效果 */transform: rotateX(-30deg) rotateY(-30deg); }/* z 轴正方向 */.zaxis_p { position:absolute; width : 300px;height:1px;  border-top:solid 1px gray; /* xy面上,90度立起来就是 z */transform: rotateY(-90deg); /* 立起来的旋转点 */transform-origin:0 0 0; }/* z 轴负方向 */.zaxis_n { position:absolute; width : 300px;height:1px;  border-top:dashed 1px gray; /*(虚线)*/transform: rotateY(90deg);transform-origin:0 0 0; }</style>
</head><body style="padding:300px;"><div class="wrap"><div class="zaxis_p"></div> <div class="zaxis_n"></div> </div>
</body></html>

效果如下图:

(2)3D 呈现

transform-style: preserve-3d;

上边绘制的坐标轴,最外层的 wrap 有 transform-style: preserver-3d 属性,它表示,它是维持其三维态的,其子元素可在其三个维度空间施展。如果没有此项,子元素在 z 空间上是没有作用的,也即我们的 z 轴会变成一个点。

(3)平移

沿着坐标轴的方向保持姿势移动,对于 x 与 y 轴而言,移动可以通过改变 left,top 值来达到目的,对于 z 轴(x,y轴同样适用)则使用平移样式。如,让元素在 z 轴上后移 200个像素,让其在上边坐标z轴的虚线上,我们可以使用:

transform: tanslateZ(-200px);

我们在坐标中添加一个元素,其样式定义如下:

.square {position:absolute;width:100px; height:100px;background:green;top:0; left:0;transform:translateZ(-200px);
}<div class="square"></div>

效果如下:

(4)旋转

物体的旋转与转动的轴心点有关,就像一个球,我们可以挂一根绳子转大圈,也可以直接转它,这个轴心与以下样式定义有关:

transform-origin:0 0 0;

后边的这个" 0 0 0 "的值为相对位置,是以元素自身为起点来算的。所以,具体到每个元素,这个(0,0,0)表示的是该元素的起点位置,与别的元素无关。有关transform-origin 更多的描述与用法可参考相关资料。

有了旋转轴心点,在方向上给个角度就可以了。如,绕 z 轴旋转 45 度。

transform: rotateZ(45deg);

度数可正可负,每一根坐标轴,把轴的正向对准你的眼睛(对准鼻梁也不错),此时,顺时针为正角度,逆时针为负角度。

旋转的示例,在下边的综合示例中给出。

(5)动画

CSS3 形成动画效果有两种方式,其本质都是呈现样式属性值的变化过程。

第一种方式

定义一个关键帧(@keyframes)样式体表示变化过程,并取个名字。然后,使用 animation 属性指定该名字让元素动起来。这种方式功能强大,对时间轴内的动画定义能力强,可以按百分比定义每一段的属性变化值。我们以让上边定义的 square 在 z 轴上边绕 z 轴转边从 -200px 平移到 200px 为例来体验一下。

/*设置动画关键帧,名字为 movez */
@keyframes movez { 0% {  /* 从这样的属性开始 */transform: translateZ(-200px) rotateZ(0deg);}100% { /* 变化到这样的属性 */transform: translateZ(200px) rotateZ(3600deg);}
} .square {position:absolute;width:100px; height:100px;background:green;top:0; left:0;transform-origin:0 0 0; /* 按 movez 来呈现动画过程 */animation:movez 10s linear infinite;
}

效果如下:

第二种方式

使用属性 transition 指定一个属性和一个时长,只要这个属性值发生变化,它就按规定的时长进行渐变形成动画。

我们回到平移的那个 square,为其添加 transition 属性,指明 transform,时长设置为 5s,即5秒。

.square {position:absolute;width:100px; height:100px;background:green;top:0; left:0;transform:translateZ(-200px);/* 指定渐变属性,时长 */transition: transform 5s;
}

此时,我们来改变它的 transform 平移值:

<script>
setTimeout(function(){document.querySelector(".square").style.transform = "translateZ(200px)";}, 1000
);
</script>

效果如下,多么优雅的一个变化过程,软着陆。

(6)小结

熟悉以上了这些概念与特性,就有了达成魔方目标的工具。更多特性若有兴趣,可进一步加深了解,想象空间很大。

转载于:https://www.cnblogs.com/timeddd/p/10858034.html

CSS3 制作魔方 - 相关立体样式相关推荐

  1. css 涟漪,CSS3水波涟漪动画定位样式如何制作

    CSS3水波涟漪动画定位样式如何制作 宝剑锋从磨砺出,梅花香自苦寒来.以下是小编为大家搜索整理的'CSS3水波涟漪动画定位样式如何制作,希望能给大家带来帮助!更多精彩内容请及时关注我们应届毕业生考试网 ...

  2. [css] 用css3画出一个立体魔方

    [css] 用css3画出一个立体魔方 <!DOCTYPE html> <html> <head><meta charset="utf-8" ...

  3. css3立体样式下载按钮

    下载地址 css3代码实现的3d按钮,立体样式的下载按钮,按钮上的颜色渐渐变淡. dd:

  4. 旋转立体相册制作html,用CSS3制作3D动态旋转相册

    最近做一个网站,想弄一个炫酷的效果,所以想到了用CSS3做一个图片3D旋转的效果.[实际就是做一个3D动态旋转相册,自己发挥哦] 下面直接上代码了. -------------------start- ...

  5. html 边框立体效果,用纯CSS3制作的效果非常炫酷的元素边框线条动画特效

    插件描述:这是一款使用纯CSS3制作的效果非常炫酷的元素边框线条动画特效.这个元素边框线条动画使用伪元素和keyframes来制作线条运动效果. 这是一款使用纯CSS3制作的效果非常炫酷的元素边框线条 ...

  6. CSS3制作文字特效

    今天主要搜集了一些网页中文字用css3制作的特效,并亲自尝试了一下,现把关键的代码和效果贴出来与同学们一起分享,希望能对大家在平时的制作中有所帮助.废话不说,直接进入效果的制作,感兴趣的同学跟着我的代 ...

  7. css3蒙版运动,纯CSS3制作逼真的汽车运动动画

    简要教程 这是一款使用纯CSS3制作的逼真汽车运动动画特效.该特效中,所有元素都是通过CSS渲染得到的,没有使用任何图片.它通过公路斑马线的左右晃动来制作出汽车运动的视觉效果. 使用方法 HTML结构 ...

  8. 用html和css制作日历,CSS3制作日历

    前面使用了CSS3制作过Progress Bars.分页导航.Login栏.Search Box等等.今天一起和大家使用css3来制作一个日历效果,希望大家喜欢. 目标 今天我们的目标是制作如下面DE ...

  9. css3制作正方体,利用CSS3的3D效果制作正方体

    学会用css3的3d效果制作一个正方体,有助于增强我们对3d场景的旋转和位移属性的理解.下面的动态图就是利用3d旋转位移,结合动画效果制作的.感兴趣的同学可以在完成正方体的制作基础上,再去探究一下添加 ...

最新文章

  1. Hinton 新作!越大的自监督模型,半监督学习需要的标签越少
  2. 总结open与fopen的区别
  3. mysql约束条件整型_MySQL 数据类型(整型,浮点型,字符类型,日期类型,枚举和集合) 约束条件 自增...
  4. mechanism and analysis
  5. MySQL小黑框怎么打开_打开你的小黑框命令行,来跟我一起嗨嗨嗨
  6. 博途v15安装过程中提示出错_博图V15为什么安装失败?
  7. 容器编排技术 -- 创建Kubernetes集群
  8. 前端怎么存token_学长:说说你理解的 Token
  9. SharePoint2010人员搜索
  10. 笔记本电脑磁盘加密技术
  11. Python中的文件复制
  12. poj 3468 A Simple Problem with Integers 基础线段树
  13. OPNsense用户手册-别名
  14. 深信服技术认证之F5隐写工具初探
  15. 宝塔linux_开源、强大的Linux服务器集群管理工具,比宝塔好用!
  16. ERROR c.alibaba.druid.pool.DruidDataSource - init datasource error 运行代码提示数据库连接错误
  17. java求约数_[转载]Java求最大公约数与最小公倍数
  18. python 计算两个经纬度的距离_python 通过两个点的经纬度计算距离
  19. Samsung/三星I847(Rugby Smart) root教程_方法
  20. 【论文阅读】Deep Joint Rain Detection and Removal from a Single Image

热门文章

  1. android sugar框架 使用,数据库框架Sugar的使用
  2. vue element form ref 重置表单
  3. mybatis SqlMapConfig.xml mappers
  4. Node.js webpack babel
  5. 编程语言对比 内存操作
  6. java验证码技术_java验证码前台技术
  7. 等保2.0丨2021 必须了解的40个问题
  8. 阿里2000亿,腾讯5000亿,我们究竟需要多少数据中心?
  9. Java基础学习总结(84)——Java面向对象六大原则和设计模式
  10. Netty学习总结(2)——Netty的高性能架构之道