利用css3制作可旋转的骰子,效果图如下,也可以查看 demo

首先是骰子的html结构,.page 是骰子的六个页面的 class,#one-#six分别表示六个面,.point 是骰子表面的点数:

  <div id="diceWapper">
<div id="dice">
<div id="one" class="page">
<div class="point first"></div>
</div>
...
</div>
</div>

接着是控制骰子旋转方向和度数的控制器:

  <div id="controler">
<div class="direction">
<span class="way">X 方向:<span id="xValue">0</span>度</span><input type="range" id="rotateX" min="-360" max="360" value="0" onchange="rotate()" />
</div>
...
</div>

通过css设置骰子各个面的位置,

首先设置 3d 场景:-webkit-perspective: 800; -webkit-perspective-origin: 50% 50%; 场景离显示器距离 800,观察位置在显示器中间,

再设置 transform-style 转换类型为 3d 转换,

然后通过 position 来设置各个表面以及表面上点的位置,

最后用 transform-origin 给各个表面设置旋转轴的位置,和用 rotateX、rotateY、rotateZ 设置旋转角度:

  #diceWapper{
-webkit-perspective:;
-webkit-perspective-origin: 50% 50%;
} #dice{
position: relative;
-webkit-transform-style:preserve-3d;
} .page{
-webkit-transition: -webkit-transform 1s linear;
position:absolute;
} #two {
-webkit-transform-origin:right;
-webkit-transform: rotateY(-90deg);
}
  ...

最后就是通过 input:range 的 change 事件来控制不同方向的旋转角度,获取三个 range 的 value 来设置 #dice 的 webkitTransform 实现转动。

完整代码如下(可运行):

<!DOCTYPE html>
<html>
<head>
<title>css3骰子</title>
<meta charset="utf-8"/>
<style>
*{margin:0;padding:0;}
body{background-color: #D3D3D3;}
#diceWapper{
-webkit-perspective: 800;
-webkit-perspective-origin: 50% 50%;
width: 200px;
height: 200px;
margin: 200px auto;
} #dice{
width: 90px;
height: 90px;
position: relative;
-webkit-transform-style:preserve-3d;
} .page{
-webkit-transition: -webkit-transform 1s linear;
position:absolute;
width: 90px;
height: 90px;
background-color: #F8F8FF;
} #two {
-webkit-transform-origin:right;
-webkit-transform: rotateY(-90deg);
} #three {
-webkit-transform-origin:bottom;
-webkit-transform: rotateX(90deg);
} #four {
-webkit-transform-origin:top;
-webkit-transform: rotateX(-90deg);
} #five {
-webkit-transform-origin:left;
-webkit-transform: rotateY(90deg);
} #six {
-webkit-transform: translateZ(-90px);
} .point{
width: 20px;
height: 20px;
box-sizing:border-box;
margin: 5px;
border-radius:20px;
border:2px solid #d7d7d7;
background-color: #FF4040;
position: absolute;
} #one .first{left:30px;top:30px;} #two .first{left:30px;top:15px;} #two .second{left:30px;top:45px;} #three .first{left:0px;top:0px;} #three .second{left:30px;top:30px;} #three .third{left:60px;top:60px;} #four .first{left:15px;top:15px;} #four .second{left:45px;top:15px;} #four .third{left:15px;top:45px;} #four .fourth{left:45px;top:45px;} #five .first{left:15px;top:15px;} #five .second{left:45px;top:15px;} #five .third{left:15px;top:45px;} #five .fourth{left:45px;top:45px;} #five .fifth{left:30px;top:30px;} #six .first{left:15px;top:0px;} #six .second{left:45px;top:0px;} #six .third{left:15px;top:30px;} #six .fourth{left:45px;top:30px;} #six .fifth{left:15px;top:60px;} #six .sixth{left:45px;top:60px;} #controler{
width: 300px;
margin: 0 auto;
} .way{width: 150px;display: inline-block;}
input:range{width: 150px;display: inline-block;}
</style> <script type="text/javascript">
function rotate(){
var x = document.getElementById("rotateX").value;
var y = document.getElementById("rotateY").value;
var z = document.getElementById("rotateZ").value;
document.getElementById('dice').style.webkitTransform = "rotateX("+x+"deg) rotateY("+y+"deg) rotateZ("+z+"deg)"; document.getElementById('xValue').innerText = x;
document.getElementById('yValue').innerText = y;
document.getElementById('zValue').innerText = z;
}
</script>
</head>
<body>
<div id="diceWapper">
<div id="dice">
<div id="one" class="page">
<div class="point first"></div>
</div>
<div id="two" class="page">
<div class="point first"></div>
<div class="point second"></div>
</div>
<div id="three" class="page">
<div class="point first"></div>
<div class="point second"></div>
<div class="point third"></div>
</div>
<div id="four" class="page">
<div class="point first"></div>
<div class="point second"></div>
<div class="point third"></div>
<div class="point fourth"></div>
</div>
<div id="five" class="page">
<div class="point first"></div>
<div class="point second"></div>
<div class="point third"></div>
<div class="point fourth"></div>
<div class="point fifth"></div>
</div>
<div id="six" class="page">
<div class="point first"></div>
<div class="point second"></div>
<div class="point third"></div>
<div class="point fourth"></div>
<div class="point fifth"></div>
<div class="point sixth"></div>
</div>
</div>
</div> <div id="controler">
<div class="direction">
<span class="way">X 方向:<span id="xValue">0</span>度</span><input type="range" id="rotateX" min="-360" max="360" value="0" onchange="rotate()" />
</div>
<div class="direction">
<span class="way">Y 方向:<span id="yValue">0</span>度</span><input type="range" id="rotateY" min="-360" max="360" value="0" onchange="rotate()" />
</div>
<div class="direction">
<span class="way">Z 方向:<span id="zValue">0</span>度</span><input type="range" id="rotateZ" min="-360" max="360" value="0" onchange="rotate()" />
</div>
</div>
</body>
</html>

css3骰子(transform初识)的更多相关文章

  1. CSS3属性transform详解之(旋转:rotate,缩放:scale,倾斜:skew,移动:translate)

    CSS3属性transform详解之(旋转:rotate,缩放:scale,倾斜:skew,移动:translate)   在CSS3中,可以利用transform功能来实现文字或图像的旋转.缩放.倾 ...

  2. 实用CSS3的transform实现多种动画效果

    查看效果:http://keleyi.com/a/bjad/b6x9q8gs.htm 以下是代码: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4. ...

  3. 用CSS3的transform来做一个立方体

    有一次上数据结构课老师布置了一个用队列的思想通过js和Html来做一个“跳舞配对”的网页,当时那个跳舞的部分用了css3里面transform的相关属性做了个个让图片无限翻转的效果,可能正是由于这个效 ...

  4. HTML5之CSS3 3D transform 剖析式学习之一

    最近坐地铁发现“亚洲动物基金”在地铁上做了很多公益广告,比较吸引人的是一个月熊的广告.做的很可爱.回去就搜了一下,发现这个网站是HTML5做的,非常炫. 所以想学习一下,方法就是传统的学习办法,模仿. ...

  5. 好吧,CSS3 3D transform变换,不过如此!

    一.写在前面的秋裤 早在去年的去年,我就大肆介绍了2D transform相关内容.看过海贼王的都知道,带D的家伙都不是好惹的,2D我辈尚可以应付,3D的话,呵呵,估计我等早就在千里之外被其霸气震晕了 ...

  6. css3 变形(transform)、转换(transition)和动画(animation)

    http://www.w3cplus.com/content/css3-transform/  在CSS3中transform主要包括以下几种:旋转rotate.扭曲skew.缩放scale和移动tr ...

  7. CSS3 2D Transform

    在 一个二维或三维空间,元素可以被扭曲.移位或旋转.只不过2D变形工作在X轴和Y轴,也就是大家常说的水平轴和垂直轴:而3D变形工作在X轴和Y轴之外, 还有一个Z轴.这些3D变换不仅可以定义元素的长度和 ...

  8. CSS3 3D Transform

    CSS3 3D Transform 原文:http://www.w3cplus.com/css3/css3-3d-transform.html 三维变换使用基于二维变换的相同属性,如果您熟悉二维变换, ...

  9. css3之transform的应用

    一.利用transform实现图片额外显示 效果图如下 初始状态:

随机推荐

  1. P4799 [CEOI2015 Day2]世界冰球锦标赛

    \(\color{#0066ff}{题目描述}\) 今年的世界冰球锦标赛在捷克举行.Bobek 已经抵达布拉格,他不是任何团队的粉丝,也没有时间观念.他只是单纯的想去看几场比赛.如果他有足够的钱,他会 ...

  2. JDK 1.6.0_45 下载

    Java SE Development Kit 6u45 Product / File Description File Size Download password Linux x86 65.46 ...

  3. 【三支火把】--- 关于UEFI&PCD的总结介绍

    1个人理解 个人理解PCD基本等同于Token,应当算是一种描述性语言,按照规定书写好PCD的配置档,在编译的过程中,会根据你的配置生成同等含义的C文档,而在C文档中对应会出现相应的define或者变 ...

  4. [POI2014]KUR-Couriers BZOJ3524 主席树

    给一个长度为n的序列a.1≤a[i]≤n. m组询问,每次询问一个区间[l,r],是否存在一个数在[l,r]中出现的次数大于(r-l+1)/2.如果存在,输出这个数,否则输出0. Input 第一行两 ...

  5. IDEA中jsp页面写out.println会报错?

    解决办法: (1)在WEB-INF目录下新建一个lib目录,并把Tomcat安装目录下的如下两个jar包复制过来. (2)选择jsp-api.jar,右键,Add as Library. (3)在Fi ...

  6. sqlmap用法

    用法 Usage: python sqlmap.py [options] Options: -h, --help Show basic help message and exit -hh Show a ...

  7. 读经典——《CLR via C#》(Jeffrey Richter著) 笔记_引用类型和值类型(二)

    [引用类型和值类型的区别] //引用类型(由于使用了‘class’) class SomeRef { public Int32 x; } //值类型(由于使用了‘struct’) struct Som ...

  8. SQL语句 ANSI_NULLS 值(ON|OFF)的含义

    官方说明: 1.当 SET ANSI_NULLS 为 ON 时,即使 column_name 中包含空值,使用 WHERE column_name = NULL 的 SELECT 语句仍返回零行. 即 ...

  9. 网络流EdmondsKarp算法模板理解

    先推荐一个讲网络流的博客,我的网络流知识均吸收于此   传送门 EdmondsKarp算法基本思想:从起点到终点进行bfs,只要存在路,说明存在增广路径,则取这部分路 权值最小的一部分,即为增广路径( ...

  10. Jenkins自动化CI CD流水线之7--流水线自动化发布PHP项目

    一.前提 环境为:lnmp PHP项目:wordpress(此处我们下载一个wordpress的源码.将其模拟为我们的代码上传到我们的git仓库) 二.配置 1)创建job 2)参数化构建 3)配置p ...