transform 平面转换(2d)

一、平移

1.原理: 使用transform属性实现元素的位移、旋转、缩放等效果。

2.语法: transform: translate(水平移动距离, 垂直移动距离)。

3.取值: 1.像素单位数值; 2.百分比(参照物为盒子自身尺寸); 3.X轴正向为右,Y轴正向为下。

4.注意:

(1)translate()如果只给出一个值,代表在X轴方向移动;

(2)单独设置某个方向的移动距离:translateX() & translateY();

(3)位移移动的百分比是自己的大小,x轴是自己的宽,y轴是自己的高;

(4)位移在移动时不会影响其他的盒子,有类似相对定位的特点.

.box{
            width: 200px;
            height: 200px;
            background-color: aqua;
            /* 1.连写 */
            transform: translate(200px,0px);
            /* 2.空格写法 */
            transform: translateX(100px) translateY(0);
            /* 3.分开写 (注意css的覆盖问题,当如下情况分开写的时候,x轴默认为零)*/
            transform: translateX(100px);
            transform: translateY(100px);
        }

二、旋转

1.原理: 使用rotate实现元素旋转效果。

2.语法: transform: rotate(deg);

(1)取值为正, 则顺时针旋转;

(2)取值为负, 则逆时针旋转;

3.注意:

(1)先位移后旋转,使用transform复合位移属性的时候要先位移再旋转,如果先旋转,会造成坐标轴发生改变;

(2)translate(-50%,-50%)实指再默认状态或者hover状态保持盒子居中

4.多重转换

原理:旋转会改变网页元素的坐标轴向,先写旋转,则后面的转换效果的轴向以旋转后的轴向为准,会影响转换结果。

使用transform-origin属性改变转换原点

1.语法: transform-origin: 原点水平位置 原点垂直位置;

2.取值:1.方位名词(left、top、right、bottom、center);2.像素单位数值;3.百分比(参照盒子自身尺寸计算)。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>改变盒子的旋转中心</title>
    <style>
        .box{
            width: 200px;
            height: 200px;
            background-color: pink;
            margin: 200px auto;
            transition: all 1s;
            /* 改变盒子的旋转中心:transform-orign */
            /* 方法一: */
            transform-origin: left top;
            /* 方法二: */
            transform-origin: 200px 0px;
            /* 方法三: */
            transform-origin: 50% 0;

        }

        .box:hover{

            transform: rotate(360deg);
        }
    </style>
</head>
<body>
    <div class="box"></div>
    
</body>
</html>

三、缩放

1.原理: 使用scale属性改变元素的尺寸。

2.语法:

(1)transform: scale(x轴缩放倍数, y轴缩放倍数);一般情况下, 只为scale设置一个值, 表示x轴和y轴等比例缩放;

(2)transform: scale(缩放倍数);scale值大于1表示放大, scale值小于1表示缩小;

(3)transform: scale(1);1倍就是不变;

(4)transform: scale(0.5); 1倍以下是缩小;

(5)transform: scale(-0.5);负值:值小于-1是缩小,值大于-1是放大。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>2d盒子的缩放效果</title>
    <style>
        .box{
            width: 200px;
            height: 200px;
            background-color: pink;
            margin: 200px auto;
            /* 缩放语法:transform:scale(水平缩放,垂直缩放);  一般我们只取一个值,另一个等比例进行缩放,取值不带单位,代表缩放的倍数. */
            /* transform: scale(2,1.5);
            transition: all 1s;  */
        }

        .box:hover{
            /* 宽和高等比例缩放2倍 */
            /* transform: scale(2); */
            /* 1倍就是不变 */
            transform: scale(1);
            /* 1倍以下是缩小 */
            /* transform: scale(0.5); */
            /* 负值:值小于-1是缩小,值大于-1是放大 */
            transform: scale(-0.5);
        }

     /* 需求1:如何在不改变宽高的情况下让盒子增大?
        解决:内边距+边框
        需求2:在不改变宽高情况下同时不设置盒子模型情况下让盒子增大?
        解决:2d缩放(缩放可以取负值缩小,缩放的倍数为1时表示不变,1倍以下是缩小,1倍以上是放大) */

    </style>
</head>
<body>
    <div class="box"></div>
    
</body>
</html>

四、倾斜

1.原理: 使用skew属性改变元素的形状。

2.语法:

(1)2d倾斜语法:transform:skew(deg);skewX:水平倾斜; skewY:垂直倾斜;

(2)角度不能设置为90deg;

(3)向右倾斜取正值,向左倾斜取负值;

(4)2d推荐综合写法:位移 旋转 缩放 倾斜 ;

transform: translatex(100px) rotate(0.5turn) scale(1) skew(60deg);

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>盒子的倾斜</title>
    <style>
        .box{
            width: 200px;
            height: 200px;
            background-color: pink;
            margin: 200px auto;
            /* 2d倾斜语法:transform:skew(deg)
               角度不能设置为90deg 
               向右倾斜取正值,向左倾斜取负值
               skewX:水平倾斜
               skewY:垂直倾斜*/
            transform: skew(6deg);

            /* 2d推荐综合写法:位移 旋转 缩放 倾斜 */
            transform: translatex(100px) rotate(0.5turn) scale(1) skew(60deg);

        }
    </style>
</head>
<body>
    <div class="box"></div>
</body>
</html>

五、渐变

1.原理: 使用background-image属性实现渐变背景效果。渐变是多个颜色逐渐变化的视觉效果;一般用于设置盒子的背景。

2.注意:

(1)linear-gradient:线性渐变;

(2)radial-gradient:径向渐变;

3.常见写法

默认从上往下: background-image: linear-gradient(red, yellow);

从左到右: background-image: linear-gradient(to right, red, blue);

改变渐变色方向: background-image: linear-gradient(60deg, red, green);

常用 透明色,黑色半透明渐变色: background-image: linear-gradient(transparent,rgba(0,0,0,.5));

颜色的从内到外渐变: background-image: radial-gradient(pink, skyblue) ;

六、案例展示

1.双开门案例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>双开门案例</title>
    <style>
        *{
            margin: 0;
            padding: 0;
        }
        .box{
            width: 1366px;
            height: 600px;
            background: url(../03.素材/bg.jpg) no-repeat;
            margin: 0 auto;
            /* 溢出隐藏 */
            overflow: hidden;
        }

        .box div{
            width: 50%;
            height: 100%;
            /* 双开门移动的秒数 */
            transition: all 1s;
        }

        .box .left{
            float: left;
            background: url(../03.素材/fm.jpg) no-repeat;
        }

        .box .right{
            float: right;
            background: url(../03.素材/fm.jpg) no-repeat right 0;
            /* 选择右半边的图片 */
        }

        /* 添加双开门效果 */
        .box:hover .left{
            /* 位移的百分比是自己的大小 */
            /* 向上移是负值 */
            transform: translateY(-100%);
        }

        .box:hover .right{
            /* 向下移动式正值 */
            transform: translateY(100%);
        }



    </style>
</head>
<body>
    <div class="box">
        <div class="left"></div>
        <div class="right"></div>
    </div>
    
</body>
</html>

2.旋转案例

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>2d-旋转</title>
    <style>
        .box{
            width: 200px;
            height: 200px;
            background-color: pink;
            margin: 100px auto;
        }

        .box img{
            /* 取一个值,另一个值会自适应 */
            width: 100%;
            /* 过渡时间 */
            transition: all 1s;
        }

        .box:hover img{
            /* 旋转的语法:transform:rotate;
            顺时针旋转取正值,逆时针旋转取负值;
            deg:度数;   turn:圈数; */
            transform: rotate(360deg);
            transform: rotate(1turn);
        }

    </style>
</head>

<body>
    <div class="box">
        <img src="../03.素材/rotate.png" alt="">
    </div>

</body>

</html>
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值