美文网首页
transform变换

transform变换

作者: 心存美好 | 来源:发表于2022-04-11 10:30 被阅读0次

    transform变换

    1. 变换属性 transform

    变换分为2D变换和3D变换,描述的是一种变化之后的结果

    允许我们对元素进行旋转、缩放、移动或倾斜。

    1.1. 2D变换

    transform:rotate() skew() scale() translate();

    1.1.1 缩放 scale(x,y)

    整体缩放缩放到原来的多少倍

    取值:[正数 | 小数 | 0 | 负数]

    取值范围:
    1. 大于0小于1 是缩小
    2. 大于1是放大
    3. 可以有两个值,水平方向 竖直方向
    4. 可以有负数,反向缩放
    transform:scale(0.8); 
    /* 缩小到0.8倍 */
    
    取值个数:
    1. 一个值 既代表X轴,也代表Y轴
    2. 两个值 第一个代表X轴,第二个代表Y轴,逗号隔开

    例子

      <style>
        * {
          padding: 0;
          margin: 0;
        }
    
        .box {
          width: 300px;
          height: 300px;
          background-color: #ccc;
          margin: 50px auto;
        }
    
        .box p {
          width: 100px;
          height: 100px;
          background-color: red;
          transition: 1s;
          /*过渡的效果 */
        }
    
        .box:hover p {
          transform: scale(-2);
          /*transform: scale(.5,2);*/ /*两个值*/
          /* 2D变换 缩放*/
        }
      </style>
    </head>
    
    <body>
      <div class="box">
        <p>我会变</p>
      </div>
    </body>
    
    可单独拆分为scaleY()和scaleX()
    transform: scaleX(.5)
    
    1.1.2 位移 translate(x,y)

    定义在 X轴Y轴的移动,向右向下为正。

    取值:

    1. 一个值 默认代表X轴方向
    2. 两个值 第一个值代表X轴方向,第二个值代表Y轴方向
    transform:translate(100px);
    transform: translate(50px,50px); 
    

    可单独拆分为translateX()translateY()

    transform:translateX(100px);    
    /*  代表X轴方向  */
    transform:translateY(100px);    
    /*  代表Y轴方向  */
    

    例子

    修改上例中hover之后p标签的样式

    .box:hover p{
        transform:translate(100px,150px);
    }
    

    居中方式的改进:translate(-50%,-50%)

    /* 当前盒子宽高的百分比,相对于当前元素本身*/

    .child{
        position: absolute;
        left:50%;
        top:50%;
        transform: translate(-50%,-50%);  /*保证元素的居中,省去之前的margin*/
        width:100px;
        height:100px;
    }
    
    1.1.3 旋转 rotate(angle)

    旋转,正直为顺时针,负值为逆时针

    角度单位:

    1. deg 角度 360deg
    2. rad 弧度 1.57rad
    3. turn 圈 1turn
    transform:rotate(30deg);
    /*沿着中心旋转30度,默认绕着Z轴旋转。X轴rotateX(30deg)  Y轴rotateY(30deg)  箭头方向顺时针是正值 逆时针是负值*/
    
    <!-- css -->
    <style>
        .box{
            width:100px;
            height:100px;
            background-color: red;
            transition:1s;
    
    
        }
        .box:hover{
            transform:rotate(1turn);
           /*transform: rotate(1.57rad); 弧度写法*/ 
           /*transform: rotate(1turn); 圈写法*/ 
        }
    
    </style>
    
    <!-- html -->
    <div class="box">
        hello
    </div>
    

    X轴 Y轴 Z轴综合写法

    transform: rotateX(80deg) rotateY(60deg) rotateZ(60deg);  /*不是真正的3D*/
    
    1.1.4 倾斜 skew(x,y)

    定义沿着 X 和 Y 轴的 2D 倾斜转换。(单位deg)

    值:

    1. 一个值 表示水平方向的倾斜角度
    2. 两个值 第一个值代表X轴方向,第二个值代表Y轴方向(逗号隔开)
    3. 可支持负值
    transform:skew(30deg);  /*x轴倾斜30deg*/
    transform: skew(0,30px);
    transform: skew(30px,30px);
    
    控制台调节数值时:滚轮按住shift使用每次增10;按住ctrl每次增减100

    可分解为skewX()skewY()

    1. skewX(angle) 沿着 X 轴的 2D 倾斜转换。
    2. skewY(angle) 沿着 Y 轴的 2D 倾斜转换。
    transform: skewX (30deg);   
    /*  代表X轴方向  */
    transform: skewY (30deg);   
    /*  代表Y轴方向  */
    
    1.1.5 变换基点 transform-origin(x,y,z)

    默认基点为中心点[50%,50%],效果等同于center center

    可以通过设置坐标值或关键词改变基点

    参数:

    1. X :定义基点被置于 X 轴的何处。
    2. Y :定义基点被置于Y 轴的何处。
    3. Z :定义基点被置于Z轴的何处(3D环境才有)。

    值:

    1. 关键词: 默认center

      top/left/right/bottom

    2. 像素值 px 可以为负值。

    3. 百分比值 % 可以为负值

    参照background-position

        .box p {
          width: 100px;
          height: 100px;
          background-color: red;
          transition: 1s;
          /*过渡的效果 */
          transform-origin: left top; /*将变换基点改为左上角 写在原来的元素上,和过渡效果写一起*/
    
        }
    
        .box:hover p {
          transform: rotate(1rad);
        }
    
    

    注意

    如果设置两个,第一个为X轴,第二个为Y轴(两值以空格隔开)

    如果设置一个,该值为X轴,第二个默认Y轴50%(给定值时)

    1.1.6 Transform多值影响

    多值的使用

    transform 属性可以一次设置多个变换值, 以空格隔开

    transform:translate(100px) scale(0.5);
    

    多值的影响

    1. transform:scale() translate();与 transform: translate() scale(); 执行先后的区别,
    2. 如果先scale则后面的translate会受到 受scale影响
    transform:translate(100px) scale(0.5);/* 推荐先位移,缩放scale写在后面 */
    transform:scale(0.5) translate(100px); 
    

    1.2. 3D变换

    1.2.1 设置3D环境 transform-style

    设置给父元素,建立3D空间

    定义: 指定子元素定位在三维空间内, 当该属性值为preserve-3d时,元素将会创建局部堆叠上下文。

    属性值:
    1. flat(默认) 指定子元素位于此元素所在平面内
    2. preserve-3d 创建3D环境
    1.2.2 设置景深 perspective

    给父元素添加,视镜 查看 3D 元素的距离(none | length)

    属性值:

    一般使用 看起来最适应800px或者 1200px

    1.2.3 perspective-origin 透视点X Y轴的位置

    perspective-origin属性是3D变形中另一个重要属性,主要用来决定perspective属性的源点角度。它实际上设置了X轴和Y轴位置(或者说基点),在该位置观看者好像在观看该元素的子元素。

    属性值:
    1. 定义视图在x轴上的位置。默认值:50%。可能的参数值形式:left、center、right、length和%。
    2. 定义视图在y轴上的位置。默认值:50%。可能的参数值形式:top、center、bottom、length和%。
    <!--css -->
    <style>
        *{margin:0;padding:0;}
        .box{
            width:1000px;
            height:500px;
            background-color: #eee;
            margin: 50px auto;
            perspective:800px; /*视镜:观看的距离*/
            perspective-origin:center top;
    
        }
        .box ul{
    
            transform-style:preserve-3d;/*打造3D空间,舞台*/
            border:1px solid green; 
        }
        .box ul li{
            list-style:none;
            width:200px;
            height:200px;
            background-color: red;
            transform:rotateX(30deg);
        }
    
    
    </style>
    
    <div class="box">
        <ul>
            <li>hello</li>
    
        </ul>   
    </div>
    
    1.2.4 backface-visibility 背面是否可见

    属性值

    1. visible(默认): 指定元素背面可见
    2. hidden:指定元素背面不可见
    1.2.5 3D旋转 rotate

    绕某个轴旋转

    1. rotateX() 水平方向为X轴,表现为上下转

    2. rotateY() 竖直方向为Y轴,表现为左右转

    3. rotateZ() 垂直屏幕为Z轴,表现为顺逆时针

    4. rotate3d(x,y,z,angle)

      x y z ,是表示你是否希望沿着该轴旋转,是为1,不是为0

      angle:是一个角度值,主要用来指定元素在3D空间旋转的角度,【deg】

       transform:rotate3d(1,1,0,30deg);
      
    1.2.6 缩放转换scale
    1. scaleX(x) 通过设置 X 轴的值来定义缩放转换。
    2. scaleY(y) 通过设置 Y 轴的值来定义缩放转换。
    3. scaleZ(z) 通过设置 Z 轴的值来定义 3D 缩放转换。需和变换函数配合使用,才能看到效果,scaleZ要写在前面
    4. scale3d(x,y,z) x,y,z 均为【正数 | 小数 | 零 | 负数 】
    1.2.7 位移
    1. translateX(x) 定义位移,只是用 X 轴的值。
    2. translateY(y) 定义位移,只是用 Y 轴的值。
    3. translateZ(z) 定义 3D 位移,只是用 Z 轴的值。正值往前,负值往后
    4. translate3d(x,y,z)
          transform:translateZ(-2000px);  正值往前越来越近放大,负值往后越来越远缩小
    
    Z轴上的其他变换
    1. 在Z轴方向上的缩放 scaleZ()
    2. 在Z轴方向上的位移 translateZ()

    相关文章

      网友评论

          本文标题:transform变换

          本文链接:https://www.haomeiwen.com/subject/gtjisrtx.html