css3骰子(transform初识)

利用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: 800;
        -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>
时间: 2025-01-10 22:17:33

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

css3之transform的应用

一.利用transform实现图片额外显示 效果图如下 初始状态: 鼠标移上去之后: 背景色的问题鼠标移上去之后图片变的模糊一些了. 关键是显示右下角的白色部分,在figcation里面除了添加了文字内容,还添加了一个div.用这个div来达到我们想要的右下角白色区域的效果.思路:先给div设置足够的宽高,然后给div设置背景色,刚开始设置div隐藏,用transform中的translate属性,将div位置设置在图片外面.当鼠标放在图片上面时,给div重设位置,让其显示在图片中.关键是不要让

css3的transform转换属性。

今天做了一个基础的小例子熟悉一下这个属性. <!DOCTYPE html> <html> <head> <title>transform</title> <style> #box{ width:100px; height:100px; background:#cecece; margin:100px auto; /* css3 start rotate :旋转 ,正数时为顺时针方向,负数时为逆时针方向 translate:移动,x,y

CSS3 3D transform

3D transform中有下面这三个方法: rotateX( angle ) rotateY( angle ) rotateZ( angle ) 邹凯的体操单杠运动是rotateX: 蔡依林姐姐的钢管舞是rotateY: 旋转飞刀的特技表演是rotateZ: 2.perspective属性,透视点,CSS3 3D transform的透视点是在浏览器的前方! 比方说,一个1680像素宽的显示器中有张美女图片,应用了3D transform,同时,该元素或该元素父辈元素设置的perspectiv

CSS3 2D Transform

在 一个二维或三维空间,元素可以被扭曲.移位或旋转.只不过2D变形工作在X轴和Y轴,也就是大家常说的水平轴和垂直轴:而3D变形工作在X轴和Y轴之外, 还有一个Z轴.这些3D变换不仅可以定义元素的长度和宽度,还有深度.我们将首先讨论元素在2D平面如何变换,然后我们在进入3D变换的讨论. CSS3 2D变换让Web设计师有了更多的自由来装饰和变形HTML组件.同时让设计师有更多的功能装饰文本和更多动画选项来装饰Div元素.在CSS3 2D变形中主要包含的一些基本功能如下. 位移translate()

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

一.写在前面的秋裤 早在去年的去年,我就大肆介绍了2D transform相关内容.看过海贼王的都知道,带D的家伙都不是好惹的,2D我辈尚可以应付,3D的话,呵呵,估计我等早就在千里之外被其霸气震晕了~~ 看看下图女帝的动作以及神情,就可以知道名字带D的家伙的厉害! 最近折腾iPad的一些东西,有一些3D效果的交互.有些事情,总以为是遥远的未来,谁知真正发生的时候说来就来,比如说一颗想结婚的心,又比方说在实际项目中折腾3D transform效果. 然而,虽然以前折腾过3D变换效果(webkit

css3 - 3D transform 变化

3d 视图效果,x/y/z轴的说明图 1 rotateX( angle ) 2 rotateY( angle ) 3 rotateZ( angle ) 4 rotate旋转的意思,rotateX旋转X轴,rotateY旋转Y轴,rotateZ旋转Z轴 rotateX.rotateY.rotateZ.rotate3d 旋转的效果说明图 必不可少的 perspective 属性 1 perspective的中文意思是:透视,视角! 2 perspective属性的存在与否决定了你所看到的是2次元的还

CSS3 3D transform变换

主要是看了这位大佬的文章,http://www.zhangxinxu.com/wordpress/2012/09/css3-3d-transform-perspective-animate-transition/,有的很大的收获,在上一个制作3D变形案例中明白了一些原理. 首先一个立体坐标系: 按照我的理解: 1.认识的突破口:rotateX, rotateY, rotateZ 3D transform中有下面这三个方法: rotateX( angle ) rotateY( angle ) ro

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

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="http://keleyi.com"> <title>实用CSS3的transform实现多种动画效果-柯乐义</title><base target="_blank" /> <s

css3动画transform在ie内核动画结束后子元素a标签不能点击(本人未解决,求大神带飞)

问题描述: css3的动画 animation属性,如果动画里面需要动画的元素是transform,那么动画的这个元素的子元素a标签就不能 点击跳转,也不能运行点击事件,就好像个a标签被透明的东西挡住了一样,目前只是发现这个问题在ie内核的浏览器上面,比如 360浏览器,ie11(考虑到测试css3动画的,没有测试ie789 10.).而在火狐,谷歌正常. 百度了一大堆,都没有找到好的解决办法,比较接近的一个说法是,transform属性改变了元素的层级,也就是z-index属性,不过在这里a标