一.API

函数                      |   描述
-----------------------------------
matrix3d(n,n,n,n,n,n,
n,n,n,n,n,n,n,n,n,n)    |   定义 3D 转换,使用 16 个值的 4x4 矩阵。
translate3d(x,y,z)      |   定义 3D 转化。
translateX(x)           |   定义 3D 转化,仅使用用于 X 轴的值。
translateY(y)           |   定义 3D 转化,仅使用用于 Y 轴的值。
translateZ(z)           |   定义 3D 转化,仅使用用于 Z 轴的值。
scale3d(x,y,z)          |   定义 3D 缩放转换。
scaleX(x)               |   定义 3D 缩放转换,通过给定一个 X 轴的值。
scaleY(y)               |   定义 3D 缩放转换,通过给定一个 Y 轴的值。
scaleZ(z)               |   定义 3D 缩放转换,通过给定一个 Z 轴的值。
rotate3d(x,y,z,angle)   |   定义 3D 旋转。
rotateX(angle)          |   定义沿 X 轴的 3D 旋转。
rotateY(angle)          |   定义沿 Y 轴的 3D 旋转。
rotateZ(angle)          |   定义沿 Z 轴的 3D 旋转。
perspective(n)          |   定义 3D 转换元素的透视视图。

3D转换坐标轴
这里写图片描述

二.其他css3

(1)transform-origin , 改变中心点,

transform-origin: left top(左上角) | right top(右上角) | 50% 100%(底边线中间点位置)
目前我认为left top 和 right top没啥区别,left bottom 和 right bottom没啥区别,可能是应用不多的原因,还没有发现其中的奥妙

三.制作一个六面体

3D转换坐标轴会随着rotate3d转换,所以我认为应该最后完成旋转动作
chrome直接打开运行

<!DOCTYPE html>
<html>
<head>
    <title>六面体</title>
    <style type="text/css">
        .wrapper{
            width: 600px;
            height: 400px;
            border: 1px solid #000;
            position: absolute;
            left: 200px;
            top: 100px;
            -webkit-transform:rotateX(-20deg) rotateY(45deg);
            transform:rotateX(-20deg) rotateY(45deg);
            transform-style: preserve-3d;
        }
        .wrapper .d{
            display: table-cell;
            text-align: center;
            vertical-align: middle;
            color: white;
            font-size: 30px;
            width: 100px;
            height: 100px;
            background: #006600;
            position: absolute;
        }
        /* 最后再做旋转 */
        .wrapper .d1{
            background: #33CC99;
            opacity: 0.5;
            transform: translateY(50px) translateZ(50px) rotateX(-90deg);
        }
        .wrapper .d2{
            background: #33FFFF;
            opacity: 0.5;
            transform: translateY(-50px) translateZ(50px) rotateX(-90deg);
        }
        .wrapper .d3{
            background: #666666;
            opacity: 0.5;
            transform: translateX(-50px) translateZ(50px) rotateY(90deg);
        }
        .wrapper .d4{
            background: #66FF33;
            opacity: 0.5;
            transform: translateX(50px) translateZ(50px) rotateY(90deg);    
        }
        .wrapper .d5{
            background: #993366;
            opacity: 0.5;
        }
        .wrapper .d6{
            background: yellow;
            opacity: 0.5;
            transform: translateZ(100px);
        }
    </style>
</head>
<body>
    <div class="wrapper">
        <div class="d d1">1</div>
        <div class="d d2">2</div>
        <div class="d d3">3</div>
        <div class="d d4">4</div>
        <div class="d d5">5</div>
        <div class="d d6">6</div>
    </div>
</body>
</html>

制作六面体的总结

(1)3D旋转会改变3D坐标系,所以建议最后进行旋转动作
(2)父容器先进行一下旋转会更直观的展示效果,也利于制作
(3)transform-style要设置为preserve-3d
Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐