skew()和skewX()skewY()之间的区别

css*_*EEK 7 html css css3 css-transforms

虽然创造了一些变革在我的网站的一些对象,我发现一个对象被赋予变换特性,following.If skew(20deg,45deg)会比与其他对象的不同skewX(20deg)skewY(45deg).

有人能解释我为什么会这样吗?

.skew {
  height:10em;
  width:10em;
  background:red;
  margin:auto;
}

#first {
  transform:skew(20deg,45deg);
}

#second {
  transform:skewX(20deg) skewY(45deg);
}
Run Code Online (Sandbox Code Playgroud)
<div class="skew" id="first"> skew(20deg,45deg) </div> <hr>
<div class="skew" id="second"> skewX(20deg) skewY(45deg) </div>
Run Code Online (Sandbox Code Playgroud)

更新: skew语法短.我如何能实现我有同样的效果skewX(),并skewY()采用skew()短语法.

sin*_*kng 5

思考矩阵,当你这样做时

 transform : skew(x, y);
Run Code Online (Sandbox Code Playgroud)

那么就像矩阵的交叉乘法

[X、Y、Z]

| 1,  sx,  0 |
| sy,  1,  0 |
| 0,   0,  1 |
Run Code Online (Sandbox Code Playgroud)

哪里sx = tan(x)sy = tan(y)

产生新的坐标

X' = X + Y * sx
Y' = Y + X * sy
Z' = Z
Run Code Online (Sandbox Code Playgroud)

但当你这样做时

transform : skewX(x) skewY(y);
Run Code Online (Sandbox Code Playgroud)

它就像第一个叉乘矩阵

[X、Y、Z]

带矩阵

| 1, sx, 0 |
| 0,  1, 0 |
| 0,  0, 1 |
Run Code Online (Sandbox Code Playgroud)

产生新的坐标

X' = X + Y * sx
Y' = Y
Z' = Z  
Run Code Online (Sandbox Code Playgroud)

然后是新的矩阵

[ X'、Y'、Z' ]

交叉乘以

| 1,  0, 0 |
| sy, 1, 0 |
| 0,  0, 1 |
Run Code Online (Sandbox Code Playgroud)

产生新坐标为

X" = X + Y * sx
Y" = Y + ( X + Y * sx ) * sy
Z" = Z
Run Code Online (Sandbox Code Playgroud)

因此Y坐标从Y + X * sy变为Y + ( X + Y * sx ) * sy