CSS 2D transform 属性允许元素在二维平面内进行旋转、平移、缩放和倾斜。例如,
div {
transform: rotate(20deg);
}
浏览器输出

这里,transform
属性的 rotate()
函数将 div
元素顺时针旋转 20
度。
CSS 2D 变换方法
CSS 2D transform
属性允许我们使用以下变换方法:
translate()
:将元素在水平和垂直方向上移动rotate()
:使元素顺时针或逆时针旋转scale()
:放大或缩小元素的大小skew()
:通过沿 x 轴和/或 y 轴倾斜来扭曲元素matrix()
:将多种变换方法合并为一种方法
我们来简要地看一下它们。
translate() 方法
translate()
方法沿 x 轴和/或 y 轴移动元素。
translate()
方法的语法是:
transform: translate(x-value,y-value)
这里,x-value
和 y-value
表示元素从原始位置移动的水平和垂直距离。
让我们看一个例子,
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link rel="stylesheet" href="style.css" />
<title>CSS 2D Translate</title>
</head>
<body>
<p>Original</p>
<div></div>
<p>transform: translate(60px, 20px)</p>
<div class="translate"></div>
</body>
</html>
/* styles both divs */
div {
width: 60px;
height: 50px;
background-color: red;
border: 1px solid black;
}
/* translates the div 60px horizontally and 20px vertically */
div.translate {
transform: translate(60px, 20px);
}
浏览器输出

在上面的例子中:
transform: translate(60px, 20px)
将第二个 div
元素在初始位置水平移动 60
像素,垂直移动 20
像素。
注意:负值会将元素向相反方向移动。
translateX() 和 translateY() 方法
translateX()
方法沿 x 轴移动元素。例如,
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link rel="stylesheet" href="style.css" />
<title>CSS 2D TranslateX</title>
</head>
<body>
<p>Original</p>
<div></div>
<p>transform: translateX(60px)</p>
<div class="translate"></div>
</body>
</html>
/* styles both divs */
div {
width: 60px;
height: 50px;
background-color: red;
border: 1px solid black;
}
/* translates the div element 60px horizontally */
div.translate {
transform: translateX(60px);
}
浏览器输出

在上面的例子中:
transform: translateX(60px)
将第二个 div
元素在初始位置水平向右移动 60
像素。
translateY()
方法沿 y 轴移动元素。例如,
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link rel="stylesheet" href="style.css" />
<title>CSS 2D TranslateY</title>
</head>
<body>
<p>Original</p>
<div></div>
<p>transform: translateY(40px)</p>
<div class="translate"></div>
</body>
</html
/* styles both divs */
div {
width: 60px;
height: 50px;
background-color: red;
border: 1px solid black;
}
/* translates the div element 40px vertically */
div.translate {
transform: translateY(40px);
}
浏览器输出

在上面的例子中:
transform: translateY(40px)
将第二个 div
元素在初始位置垂直向下移动 40
像素。
rotate() 方法
rotate()
方法使元素按指定角度顺时针或逆时针旋转。
rotate()
方法的语法是:
transform: rotate(degree)
角度值应以 deg
关键字后缀。
让我们看一个例子,
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link rel="stylesheet" href="style.css" />
<title>CSS 2D Rotate</title>
</head>
<body>
<p>Original</p>
<div></div>
<p>transform: rotate(30deg)</p>
<div class="rotate"></div>
</body>
</html>
/* styles both divs */
div {
width: 60px;
height: 50px;
background-color: red;
border: 1px solid black;
}
/* rotates the div element by 30 degrees */
div.rotate {
transform: rotate(30deg);
}
浏览器输出

在上面的例子中:
transform: rotate(30deg)
将第二个 div
元素顺时针旋转 30
度。
注意:负角度值使元素逆时针旋转。
rotateX() 和 rotateY() 方法
rotateX()
方法沿 x 轴使元素顺时针或逆时针旋转。例如,
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link rel="stylesheet" href="style.css" />
<title>CSS 2D RotateX</title>
</head>
<body>
<p>Original</p>
<div>Hello</div>
<p>transform: rotateX(180deg)</p>
<div class="rotate">Hello</div>
</body>
</html>
/* styles both divs */
div {
width: 60px;
height: 50px;
background-color: red;
border: 1px solid black;
}
/* rotates the div element by 180 degrees along x-axis */
div.rotate {
transform: rotateX(180deg);
}
浏览器输出

在上面的例子中:
transform: rotateX(180deg)
沿 x 轴将第二个 div
元素顺时针旋转 180
度。
旋转后,第一个 div
中的文本 Hello
会上下颠倒。
rotateY()
方法沿 y 轴使元素顺时针或逆时针旋转。例如,
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link rel="stylesheet" href="style.css" />
<title>CSS 2D RotateY</title>
</head>
<body>
<p>Original</p>
<div>Hello</div>
<p>transform: rotateY(180deg)</p>
<div class="rotate">Hello</div>
</body>
</html>
/* styles both divs */
div {
width: 60px;
height: 50px;
background-color: red;
border: 1px solid black;
font-weight: bold;
text-align: center;
}
/* rotates the div element by 180 degree along y-axis */
div.rotate {
transform: rotateY(180deg);
}
浏览器输出

在上面的例子中:
transform: rotateY(180deg)
沿 y 轴将第二个 div
元素顺时针旋转 180
度。
旋转后,第一个 div
中的文本 Hello
会出现镜像效果。
scale() 方法
scale()
方法缩放元素,即沿 x 轴和/或 y 轴放大或缩小元素的大小。
scale()
方法的语法是:
transform: scale(x-value, y-value)
这里,x-value
和 y-value
分别是沿 x 轴和 y 轴缩放元素的缩放因子。
让我们看一个例子,
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link rel="stylesheet" href="style.css" />
<title>CSS 2D Scale</title>
</head>
<body>
<p>Original</p>
<div></div>
<p>transform: scale(2, 0.5)</p>
<div class="scale"></div>
</body>
</html>
/* styles both divs */
div {
width: 60px;
height: 50px;
margin-left:50px;
background-color: red;
border: 1px solid black;
}
/* scales the div element to twice its size in x-axis and half its size in y-axis*/
div.scale {
transform: scale(2, 0.5);
}
浏览器输出

在上面的例子中:
transform: scale(2, 0.5)
将第二个 div
元素在 x 轴上缩放至原宽度的两倍,在 y 轴上缩放至原高度的一半。
scaleX() 和 scaleY() 方法
scaleX()
方法仅在水平方向上缩放元素,同时保持其高度不变。例如,
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link rel="stylesheet" href="style.css" />
<title>CSS 2D ScaleX</title>
</head>
<body>
<p>Original</p>
<div></div>
<p>transform: scaleX(2)</p>
<div class="scale"></div>
</body>
</html>
/* styles both divs */
div {
width: 60px;
height: 50px;
background-color: red;
border: 1px solid black;
margin-left: 50px;
}
/* scales the div element to twice its size in x-axis */
div.scale {
transform: scaleX(2);
}
浏览器输出

在上面的例子中:
transform: scaleX(2)
在 x 轴上将第二个 div
元素的宽度缩放至原宽度的两倍。
scaleY()
方法仅在垂直方向上缩放元素,同时保持其宽度不变。例如,
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link rel="stylesheet" href="style.css" />
<title>CSS 2D ScaleY</title>
</head>
<body>
<p>Original</p>
<div></div>
<p>transform: scaleY(1.5)</p>
<div class="scale"></div>
</body>
</html>
/* styles both divs */
div {
width: 60px;
height: 50px;
background-color: red;
border: 1px solid black;
}
/* scales the div element to 1.5 times of its size along y-axis */
div.scale {
transform: scaleY(1.5);
}
浏览器输出

在上面的例子中:
transform:scaleY(1.5)
在 y 轴上将元素的高度缩放至原高度的 1.5
倍。
skew() 方法
skew()
方法根据给定的角度沿 x 轴和/或 y 轴倾斜元素。
skew()
方法的语法是:
transform: skew(x-angle,y-angle)
这里,x-angle
和 y-angle
分别表示元素沿 x 轴和 y 轴倾斜的度数。
让我们看一个例子,
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link rel="stylesheet" href="style.css" />
<title>CSS 2D Skew</title>
</head>
<body>
<p>Original</p>
<div></div>
<p>transform: skew(10deg, 20deg)</p>
<div class="skew"></div>
</body>
</html>
/* styles both divs */
div {
width: 60px;
height: 50px;
background-color: red;
border: 1px solid black;
}
/* skew the div element by 10 degrees along the x-axis and 20 degrees along y-axis */
div.skew {
transform: skew(10deg, 20deg);
}
浏览器输出

在上面的例子中:
transform: skew(10deg, 20deg)
将第二个 div
元素沿 x 轴倾斜 10
度,沿 y 轴倾斜 20
度。
这会导致元素在水平和垂直方向上都出现倾斜效果。
注意:倾斜角度可以是正值或负值,具体取决于我们希望倾斜元素的哪个方向。正值使元素向一个方向倾斜,负值则向相反方向倾斜。
skewX() 和 skewY() 方法
skewX()
方法根据给定的角度沿 x 轴倾斜元素。例如,
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link rel="stylesheet" href="style.css" />
<title>CSS 2D SkewX</title>
</head>
<body>
<p>Original</p>
<div></div>
<p>transform: skewX(30deg)</p>
<div class="skew"></div>
</body>
</html>
/* styles both divs */
div {
width: 60px;
height: 50px;
background-color: red;
border: 1px solid black;
}
/* skews the div element by 30 degree along x-axis */
div.skew {
transform: skewX(30deg);
}
浏览器输出

在上面的例子中:
transform: skewX(30deg))
将第二个 div
元素沿 x 轴倾斜 30
度。
skewY()
方法根据给定的角度沿 y 轴倾斜元素。例如,
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link rel="stylesheet" href="style.css" />
<title>CSS 2D SkewY</title>
</head>
<body>
<p>Original</p>
<div></div>
<p>transform: skewY(30deg)</p>
<div class="skew"></div>
</body>
</html>
/* styles both divs */
div {
width: 60px;
height: 50px;
background-color: red;
border: 1px solid black;
}
/* skews the div element by 30 degrees along y-axis */
div.skew {
transform: skewY(30deg);
}
浏览器输出

在上面的例子中:
transform: skewY(30deg)
将第二个 div
元素沿 y 轴倾斜 30
度。
matrix() 方法
matrix()
方法将所有 2D 变换方法组合成一种方法。
matrix()
方法的语法是:
matrix(scaleX(), skewY(), skewX(), scaleY(), translateX(), translateY())
matrix()
方法接收六个参数,允许它对元素进行旋转、缩放、平移和倾斜。
让我们看一个例子,
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link rel="stylesheet" href="style.css" />
<title>CSS 2D Matrix</title>
</head>
<body>
<p>Original</p>
<div></div>
<p>transform: matrix(1.5, 0.5,- .0.5, 1, 50, 10)</p>
<div class="matrix"></div>
</body>
</html>
/* styles both divs */
div {
width: 60px;
height: 50px;
background-color: red;
border: 1px solid black;
}
/* applies matrix transformation to the div element*/
div.matrix {
transform: matrix(1.5, 0.5, -0.5, 1, 50, 10);
}
浏览器输出

在上面的例子中:
transform: matrix(1.5, 0.5, -0.5, 1, 50, 10)
- 将
div
在水平方向上缩放至其宽度的1.5
倍 - 将
div
在垂直方向上倾斜0.5
弧度,产生倾斜效果 - 将
div
在垂直方向上倾斜-0.5
弧度,产生相反方向的倾斜效果 - 不缩放
div
的垂直方向 - 将
div
在水平方向上向右平移50
像素 - 将
div
在垂直方向上向下平移10
像素
注意:matrix()
函数中的倾斜值是以弧度为单位指定的,而不是度数。