css3 2D、3D变形

用transform对元素进行2D、3D变形,变形只对块级元素有效。

transform的基本属性及属性值:

transform: rotate(270deg); /*rotate 是旋转,rotate(270deg)是旋转270度*/

transform: translateX(300px);/*translate 是平移,可以向X、Y两个方向平移*/

transform: translateY(200px);

transform: translate(300px,300px);/*translate 有两个值时,可以向X、Y两个方向平移,不过是斜着移动*/

 transform: skewX(45deg);/*skew 是斜切,可以向X、Y两个方向斜切*/

 transform: skewY(45deg);

 transform: skew(45deg,45deg);/*skew 有两个值时,代表分别沿向X、Y两个方向斜切*/

 transform: scale(0.5);/*scale 是缩放,scale也有X、Y两个缩放方向*/

transform-origin: top left;

transform-origin: 10px 10px;/*transform-origin 是改变基点,以某一点为基点进行旋转,缩放

 值可以是top left,也可以是10px 10px这样的值,也可以是百分比*/






可以用如下代码做一些测试:

<!DOCTYPE html>

<html lang="en">

<head>

    <meta charset="UTF-8">

    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    <meta http-equiv="X-UA-Compatible" content="ie=edge">

    <title>Document</title>

</head>

<style>

    *{

        margin: 0;

        padding: 0;

    }

    html{

        height: 100%;

    }

    body{

        width: 60%;

        height: 60%;

        border: 1px solid;

        margin: 100px auto;

    }

    .test{

        width: 100px;

        height: 100px;

        border: 1px solid;

        border-radius: 50%;

        background-color: pink;

        margin: 200px auto;

        font: 30px/100px "微软雅黑";

        text-align: center;

        transform-origin: top left;/*transform-origin 是改变基点,以某一点为基点进行旋转,缩放

        值可以是top left,也可以是10px 10px这样的值,也可以是百分比*/

        transform-origin: 10px 10px;


    }

    body:hover .test{

        transform: rotate(270deg);  /*rotate 是旋转,rotate(270deg)是旋转270度*/

        transform: translateX(300px);/*translate 是平移,可以向X、Y两个方向平移*/

        transform: translateY(200px);

        transform: translate(300px,300px);/*translate 有两个值时,可以向X、Y两个方向平移,不过是斜着移动*/

        transform: skewX(45deg);/*skew 是斜切,可以向X、Y两个方向斜切*/

        transform: skewY(45deg);

        transform: skew(45deg,45deg);/*skew 有两个值时,代表分别沿向X、Y两个方向斜切*/

        transform: scale(0.5);/*scale 是缩放,scale也有X、Y两个缩放方向*/

    }

</style>

<body> 

        <div class="test">

            老虎

        </div>


</body>

</html>



transform的相互组合:

如图:有两个相同大小格式的div,分别名为test1、test2,给这两个元素设置transform效果,分别为:transform: translateX(100px) scale(2);和transform: scale(2) translateX(100px);

出来的偏移效果却是不一样的。效果如图:


这是因为transform的rotate、scale、translate等都是以矩阵为原理计算的,所以在相互组合时,矩阵不满足交换律,所以偏移效果会出现不同。而且test1、test2在水平方向的偏移都不是100px,具体偏移量是根据translate*scale结果来算的,而且这种组合时从右向左顺序来计算的。transform: translateX(100px) scale(2)在计算偏移量是是按照scale(2)*translate(100px)的矩阵来算结果的。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。