CSS 2D转换和源点的影响原理(translate、scale、skew、rotate)

目录

1. 源点(transform-origin)

2. 移动(translate)

3. 缩放(scale)

4. 倾斜(skew)

5. 旋转(rotate)


 

使用2d转换时建议搭配CSS过渡效果,效果更柔和一点。

 

1. 源点(transform-origin)

 

作用:

元素在进行某些2D转换时会以源点为基础, 源点的默认位置是元素的正中央,

当默认的源点位置不满足我们的需求时, 可以对源点位置进行修改,

测试后感觉只有缩放和旋转受源点位置影响。

 

语法:

transform-origin: x轴位置 y轴位置;

取值可以使用像素、百分比、 和方位值(top、left、bottom、right)

 

效果:

先展示一下修改源点位置后的效果, 具体作用后面细说

 

2. 移动(translate)

 

语法:

横向移动transform: translateX(X轴移动像素或百分比);
纵向移动transform: translateY(Y轴移动像素或百分比);
双向移动连写transform: translateX(X轴移动像素或百分比) translateY(Y轴移动像素或百分比)
双向移动简写transform: translate(X轴移动像素或百分比, Y轴移动像素或百分比)

 

理论:

(1) 移动 不受源点影响

(2) translateX: 正数右移, 负数左移

(3) translateY: 正数下移, 负数上移

(4) 当使用百分比移动时,百分比指的是自身宽度

transform: translateX(50%);  向右移动自身宽度的50%

transform: translateY(50%);  向下移动自身高度的50%

 

效果: 

 

3. 缩放(scale)

 

语法:

横向缩放transform: scaleX(元素宽度缩放比例)
纵向缩放transform: scaleY(元素高度缩放比例)
双向缩放连写transform: scaleX(元素宽度缩放比例) scaleY(元素高度缩放比例)
双向缩放简写transform: scale(元素宽度缩放比例, 元素高度缩放比例)

缩放比例:

n = 1: 元素默认比例

n > 0: 放大效果

0 < n < 1: 缩小效果

 

效果:

 

原理:

缩放确实会改变盒子大小,  但是并不一定是盒子两侧均衡缩放, 可能左边的多一点,右边少一点, 也可能右边多一点, 左边少一点。

这一切都是源点位置决定的,  具体的原理如下:

scaleX:可以理解为源点把元素的宽度一分为二, 而scaleX 就是分别对源点左右两侧的宽度进行倍增

scaleY:可以理解为源点把元素的高度一分为二, 而scaleY 就是分别对源点上下两侧的高度进行倍增

 

4. 倾斜(skew)

 

语法:

横向倾斜transform: skewX(倾斜角度);
纵向倾斜transform: skewY(倾斜角度);
双向倾斜连写transform: skewX(倾斜角度) skewY(倾斜角度);
双向倾斜简写transform: skew(倾斜角度, 倾斜角度);

 

理论:

(1) 倾斜不受源点影响

(2) skewX是正数: 元素上边界向左移动, 下边界向右移动, 直到左上角的角度为指定角度

(3) skewX是负数: 元素上边界向右移动, 下边界向左移动, 直到右上角的角度为指定角度

(4) skewY是正数: 元素左边界向上移动, 右边界向下移动, 直到左上角的角度为指定角度

(5) skewY是负数: 元素左边界向下移动, 右边界向上移动, 直到右上角的角度为指定角度

 

效果:

5. 旋转(rotate)

 

语法:

transform: rotate(旋转度数)   //单位deg

 

理论:

(1) 角度为正数: 以源点为轴顺时针旋转指定度数

(2) 角度为负数: 以源点为轴逆时针旋转指定度数

 

效果:

模拟一个源点, 可以更好的看懂旋转和源点的关系

 

代码:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>2D转换</title>
  <style>
    .box {
      position: relative;
      width: 200px;
      height: 200px;
      margin-left: 200px;
      margin-top: 200px;
      background-color: skyblue;
    }

    /*模拟默认源点*/
    .origin {
      position: absolute;
      top: 50%;
      left: 50%;
      transform: translate(-50%, -50%);
      width: 6px;
      height: 6px;
      background-color: black;
      border-radius: 3px;
    }

    /*模拟右上角源点*/
    .origin2 {
      position: absolute;
      top: 0;
      left: 100%;
      transform: translateX(-100%);
      width: 6px;
      height: 6px;
      background-color: black;
      border-radius: 3px;
    }

    /*以默认源点为轴旋转*/
    .box:first-child:hover {
      transform: rotate(70deg);
    }

    /*以自定义的源点位置为轴旋转*/
    .box:last-child:hover {
      transform: rotate(70deg);
      transform-origin: 100% 0;
    }
  </style>
</head>
<body>
<div class="box">
  Rotate
  <div class="origin"></div>
</div>
<div class="box">
  Rotate
  <div class="origin2"></div>
</div>
</body>
</html>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值