CSS变换手册——CSS变换函数和属性的完整指南

发布一下 0 0

CSS 变换允许您对 HTML 元素进行平移、旋转、倾斜、缩放或添加透视效果。

本教程讨论了像专家一样转换 HTML 元素所需了解的一切。

目录

  1. 什么是 CSStransform属性?
  2. 什么是 CSSrotate()函数?
  3. 什么是 CSSrotateX()函数?
  4. 什么是 CSSrotateY()函数?
  5. 什么是 CSSrotateZ()函数?
  6. 什么是 CSSrotate3d()函数?
  7. CSS 旋转函数与rotate属性:有什么区别?
  8. 什么是 CSSscale()函数?
  9. CSSscale()函数与scale属性:有什么区别?
  10. 什么是 CSSscaleZ()函数?
  11. 什么是 CSSscale3d()函数?
  12. 什么是 CSSskew()函数?
  13. 什么是 CSStranslate()函数?
  14. 什么是 CSStranslateZ()函数?
  15. 什么是 CSStranslate3d()函数?
  16. CSS Translate 函数与translate属性:有什么区别?
  17. 什么是 CSSperspective()函数?
  18. CSSperspective()函数与perspective属性:有什么区别?
  19. 什么是 CSSmatrix()函数?
  20. 为什么 CSS 转换函数的顺序很重要?
  21. 将变换函数转换为的工具matrix()
  22. 关于在 CSS 中转换元素的重要知识
  23. 包起来

因此,事不宜迟,让我们讨论 CSStransform属性。

(更|多优质内|容:java567 点 c0m)

什么是 CSStransform属性?

CSStransform属性指定您希望应用于 HTML 元素的转换效果。

语法如下:

 html-element {   transform: value; }

CSStransform属性接受以下值:

  • inherit:使用其父元素的值转换元素transform。
  • initial:使用默认值转换 HTML 元素transform。
  • matrix():用六个值的矩阵对元素进行二维变换。
  • matrix3d():用 16 个值的 4x4 矩阵对 HTML 元素进行三维变换。
  • none:不对HTML 元素应用任何转换。
  • perspective():使用透视图变换 3D 变换元素。
  • rotate():通过二维旋转来变换元素。
  • rotate3d():通过三维旋转来变换元素。
  • rotateX():通过沿 X 轴三维旋转来变换元素。
  • rotateY():通过沿 Y 轴三维旋转来变换元素。
  • rotateZ():通过沿 Z 轴三维旋转来变换 HTML 元素。
  • scale():通过二维缩放元素来变换元素。
  • scale3d():通过三维缩放来变换元素。
  • scaleX():通过沿 X 轴缩放元素来变换元素。
  • scaleY():通过沿 Y 轴缩放元素来变换元素。
  • scaleZ():通过沿 Z 轴进行三维缩放来转换 HTML 元素。
  • skew():通过沿 X 轴和 Y 轴二维倾斜元素来变换元素。
  • skewX():通过沿 X 轴二维倾斜元素来变换元素。
  • skewY():通过沿 Y 轴二维倾斜元素来变换元素。
  • translate():通过二维平移(移动)它来转换 HTML 元素。
  • translate3d():通过三维平移来变换元素。
  • translateX():通过沿 X 轴平移元素来变换元素。
  • translateY():通过沿 Y 轴平移元素来变换元素。
  • translateZ():通过沿 Z 轴在三维空间中平移元素来变换元素。

注意:该transform属性接受一个或多个CSS 转换函数。例如,这是一个有效的transform声明:

 div {   transform: perspective(370px) scaleZ(5) rotate(17deg); }

在上面的代码片段中,我们为transform属性分配了三个转换函数。让我们多谈谈一些transform价值观。

什么是 CSSrotate()函数?

rotate()通过围绕固定点二维旋转元素来变换元素。

笔记:

  • “变换原点”是元素围绕其旋转的固定点。
  • 您可以使用 CSS 属性定义元素的固定点transform-origin。但默认是center。

CSSrotate()函数的语法

rotate()接受一个参数。这是语法:

 element {   transform: rotate(angle); }

请注意以下事项:

  • 该rotate(angle)函数等同于rotate3d(0, 0, 1, angle)或rotateZ(angle)。
  • 参数angle指定元素的旋转角度。
  • angle可以是degrees、gradians、radians或turns。
  • 参数由一个angle数字和您希望使用的单位组成——例如,45deg.
  • 您浏览器的书写方向决定了元素的旋转方向。
  • 正角度将沿从左到右的书写方向顺时针旋转元素。但是负角度会逆时针旋转。
  • 正角度将在从右到左的书写上下文中逆时针旋转元素。但是负角度会顺时针旋转。

CSSrotate()函数的例子

以下是 CSSrotate()功能如何工作的一些示例。

如何在 CSS 中进行零度旋转:

 img {   transform: rotate(0deg);   width: 80%; }

在 StackBlitz 上试用

上面的代码片段使用该rotate()函数为图像元素指定零度 (0⁰) 旋转。

如何在 CSS 中进行 45 度旋转:

 img {   transform: rotate(45deg);   width: 80%; }

在 StackBlitz 上试用

上面的代码片段使用该rotate()函数为图像元素指定四十五度 (45⁰) 旋转。

如何在 CSS 中进行负七十度旋转:

 img {   transform: rotate(-70deg);   width: 80%; }

在 StackBlitz 上试用

上面的代码片段使用该rotate()函数为图像元素指定负七十度 (70⁰) 旋转。

什么是 CSSrotateX()函数?

rotateX()通过绕 X 轴三维旋转来变换元素。

显示 X、Y 和 Z 轴的三维笛卡尔坐标系

CSSrotateX()函数的语法

rotateX()接受一个参数。这是语法:

 element {   transform: rotateX(angle); }

请注意以下事项:

  • 功能rotateX(angle)等同于rotate3d(1, 0, 0, angle).
  • 参数angle指定元素的旋转角度。
  • angle可以是度数、gradian、radian 或 turn。
  • 参数由一个angle数字和您希望使用的单位组成——例如,45deg.

CSSrotateX()函数的例子

以下是 CSSrotateX()功能如何工作的一些示例。

如何绕 X 轴做零度旋转:

 img {   transform: rotateX(0deg);   width: 80%; }

在 StackBlitz 上试用

上面的代码片段使用该rotateX()函数指定图像绕 X 轴的零度 (0⁰) 旋转。

如何绕 X 轴旋转 70 度:

 img {   transform: rotateX(70deg);   width: 80%; }

在 StackBlitz 上试用

上面的代码片段使用该rotateX()函数指定图像绕 X 轴旋转七十度 (70⁰)。

什么是 CSSrotateY()函数?

rotateY()通过绕 Y 轴三维旋转来变换元素。

CSSrotateY()函数的语法

rotateY()接受一个参数。这是语法:

element {  transform: rotateY(angle);}

请注意以下事项:

  • 功能rotateY(angle)等同于rotate3d(0, 1, 0, angle).
  • 参数angle指定元素的旋转角度。
  • angle可以是度数、弧度、弧度或转数。
  • 参数由一个angle数字和您希望使用的单位组成——例如,45deg.

CSSrotateY()函数的例子

以下是 CSSrotateY()功能如何工作的一些示例。

如何绕 Y 轴做零度旋转:

img {  transform: rotateY(0deg);  width: 80%;}

在 StackBlitz 上试用

上面的代码片段使用该rotateY()函数指定图像绕 Y 轴的零度 (0⁰) 旋转。

如何绕 Y 轴旋转 70 度:

img {  transform: rotateY(70deg);  width: 80%;}

在 StackBlitz 上试用

上面的代码片段使用该rotateY()函数指定图像绕 Y 轴旋转七十度 (70⁰)。

什么是 CSSrotateZ()函数?

rotateZ()通过绕 Z 轴三维旋转来变换元素。

CSSrotateZ()函数的语法

rotateZ()接受一个参数。这是语法:

element {  transform: rotateZ(angle);}

请注意以下事项:

  • 该rotateZ(angle)函数等同于rotate3d(0, 0, 1, angle)或rotate(angle)。
  • 参数angle指定元素的旋转角度。
  • angle可以是度数、弧度、弧度或转数。
  • 参数由一个angle数字和您希望使用的单位组成——例如,45deg.

CSSrotateZ()函数的例子

以下是 CSSrotateZ()功能如何工作的一些示例。

如何绕 Z 轴做零度旋转:

img {  transform: rotateZ(0deg);  width: 80%;}

在 StackBlitz 上试用

上面的代码片段使用该rotateZ()函数指定图像绕 Z 轴的零度 (0⁰) 旋转。

如何绕 Z 轴旋转 70 度:

img {  transform: rotateZ(70deg);  width: 80%;}

在 StackBlitz 上试用

上面的代码片段使用该rotateZ()函数指定图像绕 Z 轴旋转七十度 (70⁰)。

什么是 CSSrotate3d()函数?

rotate3d()通过绕 x、y 和 z 轴三维旋转来变换元素。

CSSrotate3d()函数的语法

rotate3d()接受四个参数。这是语法:

element {  transform: rotate3d(x, y, z, angle);}

请注意以下事项:

  • 、和参数是指定 x、y 和 z 坐标的数字x。y``z
  • 坐标是元素将围绕其旋转的轴。
  • 参数angle指定元素的旋转角度。
  • angle可以是度数、弧度、弧度或转数。
  • 参数由一个angle数字和您希望使用的单位组成——例如,45deg.

CSSrotate3d()函数的例子

以下是 CSSrotate3d()功能如何工作的一些示例。

如何绕 Z 轴旋转 70 度:

img {  transform: rotate3d(0, 0, 1, 70deg);  width: 80%;}

在 StackBlitz 上试用

上面的代码片段使用该rotate3d()函数指定图像绕 Z 轴旋转七十度 (70⁰)。

如何绕 X、Y 和 Z 轴旋转 70 度:

 img {   transform: rotate3d(1, 1, 1, 70deg);   width: 80%; }

在 StackBlitz 上试用

上面的代码片段使用该rotate3d()函数指定图像绕 x、y 和 z 轴旋转七十度 (70⁰)。

CSS 旋转函数与rotate属性:有什么区别?

CSS 旋转函数和 CSSrotate属性提供了两种类似的方式来指定旋转变换。

两种旋转技术的主要区别如下:

  • CSSrotate属性允许在不使用 CSS 属性的情况下旋转元素transform。
  • CSSrotate属性的语法比它的替代函数更短。
  • CSS属性使您不必记住定位转换函数的rotate特定顺序。
  • 浏览器按照您将它们分配给 CSStransform属性的顺序计算转换函数的矩阵——从左到右。
  • 浏览器按照以下转换矩阵顺序
  • 计算转换属性矩阵:
  • translate
  • rotate
  • scale

下面是一些例子。

如何使用 CSSrotate属性与函数进行 45 度旋转

 img {   rotate: 45deg; /* Equivalent to a transform: rotate(45deg) property */   width: 80%; }

在 StackBlitz 上试用

上面的代码片段使用该rotate属性为图像元素指定四十五度 (45⁰) 旋转。

如何使用 CSSrotate属性与函数绕 X 轴旋转 70 度

 img {   rotate: x 70deg; /* Equal to a transform: rotateX(70deg) property */   width: 80%; }

在 StackBlitz 上试用

上面的代码片段使用该rotate属性指定图像绕 X 轴旋转七十度 (70⁰)。

如何使用 CSSrotate属性与函数绕 Y 轴旋转 70 度

 img {   rotate: y 70deg; /* Equal to a transform: rotateY(70deg) property */   width: 80%; }

在 StackBlitz 上试用

上面的代码片段使用该rotate属性指定图像绕 Y 轴旋转七十度 (70⁰)。

如何使用 CSSrotate属性与函数绕 Z 轴旋转 70 度

img {  rotate: z 70deg; /* Equal to a transform: rotateZ(70deg) property */  width: 80%;}

在 StackBlitz 上试用

上面的代码片段使用该rotate属性指定图像绕 Z 轴旋转七十度 (70⁰)。

如何使用 CSSrotate属性与函数绕 X、Y 和 Z 轴旋转 70 度

img {  rotate: 1 1 1 70deg; /* Equal to a transform: rotate3d(1, 1, 1, 70deg) property */  width: 80%;}

在 StackBlitz 上试用

上面的代码片段使用该rotate属性指定图像绕 x、y 和 z 轴旋转七十度 (70⁰)。

注意:一个none值告诉浏览器不要旋转所选元素。

什么是 CSSscale()函数?

scale()通过从固定点二维调整(缩放)元素来变换元素。

笔记:

  • “变换原点”是计算机缩放元素的固定点。
  • 您可以使用 CSS 属性定义元素的固定点transform-origin。但默认是center。

CSSscale()函数的语法

scale()接受两个参数。这是语法:

element {  transform: scale(x, y);}

请注意以下事项:

  • 参数x可以是数字或百分比。它指定元素沿 x 轴的比例因子。
  • 参数y也可以是数字或百分比。它定义元素沿 y 轴的比例因子。
  • Y 轴的默认值为x. 因此,如果您不提供y参数,浏览器会自动使用x的值。
  • 假设x和y是相等的。在这种情况下,浏览器将统一缩放您的元素并保持其纵横比。

显示 X 轴和 Y 轴的二维笛卡尔坐标系

CSSscale()函数的例子

以下是 CSSscale()功能如何工作的一些示例。

如何在 CSS 中沿 X 轴和 Y 轴均匀缩放元素:

 img {   transform: scale(0.3);   transform-origin: left; }

在 StackBlitz 上试用

上面的代码片段使用该scale()函数指定0.3图像元素沿 X 轴和 Y 轴的比例因子。

笔记:

  • scale(0.3)相当于scale(0.3, 0.3).
  • 的百分比当量scale(0.3)是scale(30%)。

如何在 CSS 中沿 X 轴和 Y 轴非均匀地缩放元素:

 img {   transform: scale(0.3, 65%);   transform-origin: top left; }

在 StackBlitz 上试用

上面的代码片段使用该scale()函数指定0.3图像沿 X 轴和65%Y 轴的比例因子。

如何仅沿 X 轴缩放元素:

img {  transform: scale(0.3, 1);  transform-origin: top left;}

在 StackBlitz 上试用

上面的代码片段使用该scale()函数指定0.3图像仅沿 X 轴的比例因子。

笔记:

  • 比例因子1or100%告诉浏览器不要对所选元素应用任何缩放效果。
  • scale(0.3, 1)相当于scaleX(0.3).

如何仅沿 Y 轴缩放元素:

img {  transform: scale(100%, 0.2);  transform-origin: top left;}

在 StackBlitz 上试用

上面的代码片段使用该scale()函数指定0.2图像仅沿 Y 轴的比例因子。

笔记:

  • 或比例因子告诉浏览器不要100%对所选元素应用任何缩放效果。1
  • scale(100%, 0.2)相当于scaleY(0.2).

CSSscale()函数与scale属性:有什么区别?

CSSscale()函数和 CSSscale属性提供了两种类似的方式来指定比例变换。

两种缩放技术之间的主要区别如下:

  • CSSscale属性允许在不使用 CSS 属性的情况下缩放元素transform。
  • CSSscale属性的语法比它的替代函数更短。
  • CSSscale属性使您不必记住定位转换函数的特定顺序。
  • 浏览器按照您将它们分配给 CSStransform属性的顺序计算转换函数的矩阵——从左到右。
  • 浏览器按以下顺序计算转换属性矩阵:
  • translate
  • rotate
  • scale

这是一个例子:

使用 CSSscale属性沿 X 轴和 Y 轴非均匀地缩放元素。

 img {   scale: 0.3 65%; /* Equal to a transform: scale(0.3, 65%) property */   transform-origin: top left; }

在 StackBlitz 上试用

上面的代码片段使用该scale属性指定0.3图像沿 X 轴和65%Y 轴的比例因子。

注意:一个none值告诉浏览器不要缩放所选元素。

什么是 CSSscaleZ()函数?

scaleZ()通过从沿 z 轴的固定点在三维空间中调整(缩放)元素来变换元素。

笔记:

  • “变换原点”是计算机缩放元素的固定点。
  • 您可以使用 CSS 属性定义元素的固定点transform-origin。但默认是center。

CSSscaleZ()函数的语法

scaleZ()接受一个参数。这是语法:

 element {   transform: scaleZ(number); }

笔记:

  • 功能scaleZ(number)等同于scale3d(1, 1, number).
  • 该number参数指定元素沿 z 轴的比例因子。

CSSscaleZ()函数的例子

我们经常scaleZ()与其他 CSS 函数一起使用,例如perspective()、translateZ()和rotateX()。下面是一些例子。

如何scaleZ()与 CSSperspective()和rotateX()函数一起使用:

 img {   transform: perspective(370px) scaleZ(5) rotateX(17deg);   width: 80%; }

在 StackBlitz 上试用

这是我们在上面的代码片段中所做的:

  1. 我们使用perspective()函数来定义370px用户和z=0 平面之间的距离。
  2. 该函数指定图像沿 z 轴scaleZ()的比例因子。5
  3. 我们使用该rotateX()函数将图像绕 x 轴旋转十七度 (17⁰)。

笔记:

  • perspective()当您将它与其他CSS 转换函数链接在一起时,首先列出。否则,浏览器可能会错误地转换所选元素。
  • 列出scaleZ()之前的功能rotateX()。否则,浏览器将不会缩放元素。

如何scaleZ()与 CSSperspective()和translateZ()函数一起使用:

img {  width: 40%;}.second-image {  transform: perspective(370px) scaleZ(5) translateZ(30px);}

在 StackBlitz 上试用

这是我们在上面的代码片段中所做的:

  1. 我们使用该perspective()函数来定义370px用户与 z=0 平面之间的距离。
  2. 该函数指定图像沿 z 轴scaleZ()的比例因子。5
  3. 我们使用该translateZ()函数将second-image三十个像素 ( 30px) 沿 z 轴从其原始位置重新定位。

什么是 CSSscale3d()函数?

scale3d()通过从沿 x、y 和 z 轴的固定点在三维空间中调整(缩放)元素的大小来变换元素。

笔记:

  • “变换原点”是计算机缩放元素的固定点。
  • 您可以使用 CSS 属性定义元素的固定点transform-origin。但默认是center。

CSSscale3d()函数的语法

scale3d()接受三个参数。这是语法:

 element {   transform: scale3d(x, y, z); }

、和参数是指定 x、y 和 z 坐标的数字x。坐标是浏览器缩放元素的轴。y``z

CSSscale3d()函数的例子

以下是 CSSscale3d()功能如何工作的一些示例。

如何scale3d()与 CSSperspective()和rotateX()函数一起使用:

 img {   transform: perspective(370px) scale3d(1, 1, 5) rotateX(17deg);   width: 80%; }

在 StackBlitz 上试用

这是我们在上面的代码片段中所做的:

  1. 我们使用该perspective()函数来定义370px用户与 z=0 平面之间的距离。
  2. 该函数指定图像沿 x、y 和 z 轴scale3d()的比例因子1、1和。5
  3. 我们使用该rotateX()函数将图像绕 x 轴旋转十七度 (17⁰)。

笔记:

  • 比例因子1将不会对元素应用缩放效果。
  • perspective()当你将它与其他 CSS 转换函数链接在一起时,首先列出。否则,浏览器可能会错误地转换所选元素。
  • 列出scale3d()之前的功能rotateX()。否则,浏览器将不会缩放元素。

如何三维缩放元素:

img {  width: 40%;}.second-image {  transform: scale3d(5, 3, 0.05);  transform-origin: top left;}

在 StackBlitz 上试用

我们使用该函数指定图像沿 x、y 和 z 轴的scale3d()比例因子5、3和。0.05

什么是 CSSskew()函数?

skew()通过围绕固定点二维倾斜(倾斜)元素来变换元素。

笔记:

  • “变换原点”是计算机倾斜元素的固定点。
  • 您可以使用 CSS 属性定义元素的固定点transform-origin。但默认是center。

CSSskew()函数的语法

skew()接受两个参数。这是语法:

 element {   transform: skew(aX, aY); }

请注意以下事项:

  • 该aX参数指定元素沿 x 轴的倾斜角度。
  • 参数aY指定元素沿 y 轴的倾斜角度。
  • aX可以aY是度数、梯度、弧度或转数。
  • 参数由一个angle数字和您希望使用的单位组成——例如,45deg.
  • aY是可选参数。

CSSskew()函数的例子

以下是 CSSskew()功能如何工作的一些示例。

如何仅沿 X 轴倾斜元素:

 img {   transform: skew(30deg);   transform-origin: top;   width: 80%; }

在 StackBlitz 上试用

上面的代码片段使用该skew()函数仅沿 x 轴在图像上应用三十度 (30⁰) 倾斜。

注: skew(30deg)等同于skewX(30deg).

如何仅沿 Y 轴倾斜元素:

img {  transform: skew(0, 40deg);  transform-origin: top left;  width: 80%;}

在 StackBlitz 上试用

上面的代码片段使用该skew()函数仅沿 y 轴在图像上应用四十度 (40⁰) 倾斜。

笔记:

  • 零 ( 0) 倾斜度告诉浏览器不要对所选元素应用任何倾斜效果。
  • skew(0, 40deg)相当于skewY(40deg).

如何沿 X 轴和 Y 轴倾斜元素:

img {  transform: skew(30deg, 40deg);  transform-origin: top left;  width: 80%;}

在 StackBlitz 上试用

上面的代码片段使用该skew()函数沿 x 轴在图像上应用三十度 (30⁰) 倾斜。沿 y 轴四十度 (40⁰)。

什么是 CSStranslate()函数?

translate()通过二维重新定位(平移)元素来转换元素。

CSStranslate()函数的语法

translate()接受两个参数。这是语法:

element {  transform: translate(x, y);}

请注意以下事项:

  • 参数x可以是长度或百分比值。它指定您希望将元素从其原始 x 轴位置移动的距离。
  • 参数y可以是长度或百分比值。它定义了您希望将元素从其原始 y 轴位置移动的距离。
  • y是可选参数。

CSStranslate()函数的例子

以下是 CSStranslate()功能如何工作的一些示例。

如何仅沿 X 轴平移元素:

img {  transform: translate(150px);  width: 80%;}

在 StackBlitz 上试用

上面的代码片段使用该translate()函数将图像150px沿 x 轴从其原始位置重新定位。

注: translate(150px)等同于translateX(150px).

如何仅沿 Y 轴平移元素:

img {  transform: translate(0, 55%);  width: 80%;}

在 StackBlitz 上试用

上面的代码片段使用该translate()函数将图像55%沿 y 轴从其原始位置重新定位。

笔记:

  • 零 ( 0) 平移距离告诉浏览器不要对所选元素应用任何平移效果。
  • translate(0, 55%)相当于translateY(55%).

如何沿 X 轴和 Y 轴平移元素:

img {  transform: translate(60%, 300px);  width: 80%;}

在 StackBlitz 上试用

上面的代码片段使用该translate()函数将图像重新定位60%到远离其沿 x 轴和300pxy 轴的原始位置。

什么是 CSStranslateZ()函数?

translateZ()通过沿 z 轴在三维空间中重新定位(平移)元素来变换元素。

显示 X、Y 和 Z 轴的三维笛卡尔坐标系

CSStranslateZ()函数的语法

translateZ()接受一个参数。这是语法:

element {  transform: translateZ(length);}

该length参数指定您希望将元素从其原始 z 轴位置移动的距离。

三维笛卡尔坐标系,红色箭头定义绿色平面的 translateZ 长度

CSStranslateZ()函数的例子

我们经常使用translateZ()withperspective()函数。下面是一些例子。

如何translateZ()与 CSSperspective()函数一起使用:

img {  width: 40%;}.second-image {  transform: perspective(33px) translateZ(10px);}

在 StackBlitz 上试用

这是我们在上面的代码片段中所做的:

  1. 我们使用perspective()函数来定义33px用户和z=0 平面之间的距离。
  2. 我们使用该translateZ()函数将second-image十个像素 ( 10px) 沿 z 轴从其原始位置重新定位。

笔记:

  • 假设second-image的 z 轴位置大于或等于perspective()函数的参数。在这种情况下,图像将消失,就好像它在用户身后一样。换句话说,当用户与元素处于相同位置时(或者当元素在用户后面时),所选项目会消失。
  • 用户离元素的 z 轴位置的距离越大,透视效果就越不强烈,反之亦然。

如何使用透视translateZ()图70px:

 img {   width: 40%; }  .second-image {   transform: perspective(70px) translateZ(10px); }

在 StackBlitz 上试用

这是我们在上面的代码片段中所做的:

  1. 我们使用该perspective()函数来定义70px用户与 z=0 平面之间的距离。
  2. 我们使用该translateZ()函数将second-image十个像素 ( 10px) 沿 z 轴从其原始位置重新定位。

什么是 CSStranslate3d()函数?

translate3d()通过沿 x、y 和 z 轴在三维空间中重新定位(平移)元素来变换元素。

CSStranslate3d()函数的语法

translate3d()接受三个参数。这是语法:

 element {   transform: translate3d(x, y, z); }

请注意以下事项:

  • 参数x可以是长度或百分比值。它指定您希望将元素从其原始 x 轴位置移动的距离。
  • 参数y可以是长度或百分比值。它定义了您希望将元素从其原始 y 轴位置移动的距离。
  • z只能是长度,不能是百分比。它定义了您希望将元素从其原始 z 轴位置移动的距离。

CSStranslate3d()函数的例子

以下是 CSStranslate3d()功能如何工作的一些示例。

如何仅沿 X 轴平移元素

 img {   transform: translate3d(150px, 0, 0);   width: 80%; }

在 StackBlitz 上试用

上面的代码片段使用该translate3d()函数将图像150px沿 x 轴从其原始位置重新定位。

注: translate3d(150px, 0, 0)等同于translateX(150px).

如何三维翻译元素:

 img {   width: 40%; }  .second-image {   transform: perspective(300px) translate3d(15%, 45%, 200px); }

在 StackBlitz 上试用

上面的代码片段使用该translate3d()函数将图像重新定位15%到远离其沿 x 轴、45%y 轴和200pxz 轴的原始位置。

CSS Translate 函数与translate属性:有什么区别?

CSS 翻译函数和 CSStranslate属性提供了两种类似的方式来指定翻译转换。

两种翻译技术的主要区别如下:

  • CSStranslate属性允许在不使用 CSS 属性的情况下翻译元素transform。
  • CSStranslate属性的语法比它的替代函数更短。
  • CSStranslate属性使您不必记住定位转换函数的特定顺序。
  • 浏览器按照您将它们分配给 CSStransform属性的顺序计算转换函数的矩阵——从左到右。
  • 浏览器按以下顺序计算转换属性矩阵:
  • translate
  • rotate
  • scale

下面是一些例子。

如何使用 CSStranslate属性与函数沿 X 轴和 Y 轴平移元素

img {  translate: 60% 300px; /* Equal to a transform: translate(60%, 300px) property */  width: 80%;}

在 StackBlitz 上试用

上面的代码片段使用该translate属性将图像60%沿 x 轴从其原始位置重新定位。从300px它的 y 轴。

注意:假设您希望沿 z 轴平移一个元素。在这种情况下,在perspective要翻译的元素的“父元素”上设置一个属性。否则,元素将不会沿其 z 轴移动。

如何使用 CSStranslate属性与函数沿 Z 轴平移元素

img {  width: 40%;}div {  perspective: 35px;}.second-image {  translate: 0px 0px 17px; /* Equal to a transform: translateZ(17px) property */}

在 StackBlitz 上试用

这是我们在上面的代码片段中所做的:

  1. 我们使用该perspective属性来定义35px用户与 z=0 平面之间的距离。
  2. 我们使用该属性将十七个像素 ( ) 沿 z 轴从其原始位置translate重新定位。second-image``17px

如何使用 CSStranslate属性与函数来三维转换元素

img {  width: 40%;}div {  perspective: 300px;}.second-image {  translate: 50% 25% 200px; /* Equal to a transform: translate3d(50%, 25%, 200px) property */}

在 StackBlitz 上试用

上面的代码片段使用该translate属性将图像50%沿 x 轴、25%y 轴和200pxz 轴从其原始位置重新定位。

注意:一个none值告诉浏览器不要翻译所选元素。

什么是 CSSperspective()函数?

perspective()通过向元素添加一些透视效果来变换元素。

CSSperspective()函数的语法

perspective()只接受一个参数。这是语法:

element {  transform: perspective(length);}

参数length指定用户到z=0 平面的距离。

三维笛卡尔坐标系,红色箭头定义用户与 z=0 平面之间的距离

CSSperspective()函数的例子

我们经常perspective()与其他 CSS 函数一起使用,例如translateZ()、rotateX()和rotateY()。下面是一些例子。

如何perspective()与 CSStranslateZ()函数一起使用:

img {  width: 40%;}.second-image {  transform: perspective(33px) translateZ(10px);}

在 StackBlitz 上试用

这是我们在上面的代码片段中所做的:

  1. 我们使用该perspective()函数来定义33px用户与 z=0 平面之间的距离。
  2. 我们使用该translateZ()函数将second-image十个像素 ( 10px) 沿 z 轴从其原始位置重新定位。

请注意以下事项:

  • 假设second-image的 z 轴位置大于或等于perspective()函数的参数。在这种情况下,图像将消失,就好像它在用户身后一样。换句话说,当用户与元素处于相同位置时(或者当元素在用户后面时),所选项目会消失。
  • 用户离元素的 z 轴位置的距离越大,透视效果就越不强烈,反之亦然。

如何perspective()与 CSSrotateY()函数一起使用:

img {  width: 40%;}.second-image {  transform: perspective(33px) rotateY(-10deg);}

在 StackBlitz 上试用

这是我们在上面的代码片段中所做的:

  1. 我们使用该perspective()函数来定义33px用户与 z=0 平面之间的距离。
  2. 我们使用该函数绕 y 轴rotateY()旋转负十度 (-10⁰)。second-image

如何perspective()与 CSSrotateX()函数一起使用:

 img {   width: 40%; }  .second-image {   transform: perspective(33px) rotateX(17deg); }

在 StackBlitz 上试用

这是我们在上面的代码片段中所做的:

  1. 我们使用该perspective()函数来定义33px用户与 z=0 平面之间的距离。
  2. 我们使用该函数绕 x 轴rotateX()旋转十七度 (17⁰)。second-image

CSSperspective()函数与perspective属性:有什么区别?

CSSperspective()函数和perspective属性提供了两种类似的方式来为 HTML 元素添加透视效果。

两种透视技术的主要区别如下:

  • 我们perspective()“直接在元素上”应用我们想要添加一些透视效果的功能。
  • 我们将perspective属性应用到我们想要添加一些透视效果的元素的“父元素”。
  • 该perspective()函数用作transform属性的值。
  • CSSperspective属性允许您在不使用 CSS 属性的情况下创建透视效果transform。

这是一个例子:

使用 CSSperspective属性给子元素添加透视效果:

img {  width: 40%;}div {  perspective: 33px;}.second-image {  rotate: x 17deg;}

在 StackBlitz 上试用

这是我们在上面的代码片段中所做的:

  1. 我们使用该perspective属性来定义33px用户与 z=0 平面之间的距离。
  2. 我们使用该属性绕 x 轴rotate旋转十七度 (17⁰)。second-image

笔记:

  • CSSperspective属性使您不必记住定位转换函数的特定顺序。
  • 一个none值告诉浏览器不要向所选元素的子元素添加任何透视效果。

什么是 CSSmatrix()函数?

CSSmatrix()函数是以下 2D 变换函数的简写:

  • scaleX()
  • skewY()
  • skewX()
  • scaleY()
  • translateX()
  • translateY()

换句话说,而不是写:

 img {   transform-origin: 0 0;   transform: translateX(100px) translateY(250px) scaleX(2) scaleY(0.9)     skewX(10deg) skewY(35deg);   width: 80%; }

在 StackBlitz 上试用

您也可以使用该matrix()函数来缩短代码,如下所示:

 img {   transform-origin: 0 0;   transform: matrix(2.24693, 0.630187, 0.352654, 0.9, 100, 250);   width: 80%; }

在 StackBlitz 上试用

CSSmatrix()函数的语法

该matrix()函数接受六个值。语法如下:

 matrix(scaleX(), skewY(), skewX(), scaleY(), translateX(), translateY())

您可以将 CSS 矩阵的值表示为ℝℙ 2上的齐次坐标,如下所示:

 | scX skX tX | ← x-axis | skY scY tY | ← y-axis |  0   0   1 | ← constants

请注意以下事项:

  • scX和skX是描述元素在 x 轴上的缩放和倾斜线性变换的数字。
  • tX是一个数字,表示元素在 x 轴上的平移。
  • skY和scY是描述元素在 y 轴上的倾斜和缩放线性变换的数字。
  • tY是一个数字,表示元素在 y 轴上的平移。
  • 0, 0,1是常数。
  • 我们不将常量作为参数传递给matrix()函数,因为计算机会自动暗示它们。

CSSmatrix()函数的例子

以下是 CSSmatrix()函数的一些示例。

如何转换scaleX()为matrix()函数:

考虑以下transform属性:

 img {   transform-origin: 0 0;   transform: scaleX(2);   width: 80%; }

在 StackBlitz 上试用

这是matrix()上面scaleX()函数的等价物:

 img {   transform-origin: 0 0;   transform: matrix(2, 0, 0, 1, 0, 0); /* scX, skY, skX, scY, tX, tY */   width: 80%; }

在 StackBlitz 上试用

让我们也将矩阵的值表示为 ℝℙ 2上的齐次坐标:

 | 2 0 0 | ← x-axis | 0 1 0 | ← y-axis | 0 0 1 | ← constants

下面是另一个例子。

如何转换translateY()为matrix()函数:

 img {   transform-origin: 0 0;   transform: translateY(250px);   width: 80%; }

在 StackBlitz 上试用

这是matrix()上面translateY()函数的等价物:

 img {   transform-origin: 0 0;   transform: matrix(1, 0, 0, 1, 0, 250); /* scX, skY, skX, scY, tX, tY */   width: 80%; }

在 StackBlitz 上试用

让我们也将矩阵的值表示为 ℝℙ 2上的齐次坐标:

 | 1 0 0   | ← x-axis | 0 1 250 | ← y-axis | 0 0 1   | ← constants

下面是第三个例子。

如何转换translateX()和scale()运行matrix():

 img {   transform-origin: 0 0;   transform: translateX(100px) scale(2);   width: 80%; }

在 StackBlitz 上试用

transform以下是将上述属性的值转换为的语法matrix():

 matrix = (translateX's homogeneous coordinates) x (scale's homogeneous coordinates)

让我们通过定义 的齐次坐标开始转换translateX(100px):

 | 1 0 100 | ← x-axis | 0 1 0   | ← y-axis | 0 0 1   | ← constants

我们还定义 的scale(2)齐次坐标:

 | 2 0 0 | ← x-axis | 0 2 0 | ← y-axis | 0 0 1 | ← constants

现在是时候使用以下语法将两个齐次坐标相乘了:

 | a d g |   | j m p |   | aj + dk + gl   am + dn + go   ap +dq  + gr | | b e h | x | k n q | = | bj + ek + hl   bm + en + ho   bp + eq + hr | | c f i |   | l o r |   | cj + fk + il   cm + fn + io   cp + fq + ir |

让我们像这样实现上面的语法:

 | 1 0 100 |   | 2 0 0 |   | 2 + 0 + 0   0 + 0 + 0   0 + 0 + 100 | | 0 1  0  | x | 0 2 0 | = | 0 + 0 + 0   0 + 2 + 0   0 + 0 +  0  | | 0 0  1  |   | 0 0 1 |   | 0 + 0 + 0   0 + 0 + 0   0 + 0 +  1  |

下一步是解决加法。那么,让我们现在开始吧。

 | 1 0 100 |   | 2 0 0 |   | 2 0 100 | | 0 1  0  | x | 0 2 0 | = | 0 2  0  | | 0 0  1  |   | 0 0 1 |   | 0 0  1  |

上面的加法结果为我们提供了属性的齐次坐标transform: translateX(100px) scale(2)。

换句话说,(translateX's homogeneous coordinates)和(scale's homogeneous coordinates)等于的乘积:

 | 2 0 100 | ← x-axis | 0 2  0  | ← y-axis | 0 0  1  | ← constants

因此, 的矩阵等价transform: translateX(100px) scale(2)为transform: matrix(2, 0, 0, 2, 100, 0)。

 img {   transform-origin: 0 0;   transform: matrix(2, 0, 0, 2, 100, 0);   width: 80%; }

在 StackBlitz 上试用

请注意transform: translateX(100px) scale(2)并transform: scale(2) translateX(100px)返回不同的矩阵。让我们看看下面第二种安排的例子。

如何转换scale()和translateX()运行matrix():

考虑以下transform属性:

 img {   transform-origin: 0 0;   transform: scale(2) translateX(100px);   width: 80%; }

在 StackBlitz 上试用

transform以下是将上述属性的值转换为的语法matrix():

 matrix = (scale's homogeneous coordinates) x (translateX's homogeneous coordinates)

让我们通过定义 的齐次坐标开始转换scale(2):

 | 2 0 0 | ← x-axis | 0 2 0 | ← y-axis | 0 0 1 | ← constants

我们还定义 的translateX(100px)齐次坐标:

 | 1 0 100 | ← x-axis | 0 1  0  | ← y-axis | 0 0  1  | ← constants

现在是时候使用以下语法将两个齐次坐标相乘了:

 | a d g |   | j m p |   | aj + dk + gl   am + dn + go   ap +dq  + gr | | b e h | x | k n q | = | bj + ek + hl   bm + en + ho   bp + eq + hr | | c f i |   | l o r |   | cj + fk + il   cm + fn + io   cp + fq + ir |

让我们像这样实现上面的语法:

 | 2 0 0 |   | 1 0 100 |   | 2 + 0 + 0   0 + 0 + 0   200 + 0 + 0 | | 0 2 0 | x | 0 1  0  | = | 0 + 0 + 0   0 + 2 + 0    0 + 0 + 0  | | 0 0 1 |   | 0 0  1  |   | 0 + 0 + 0   0 + 0 + 0    0 + 0 + 1  |

下一步是解决加法。那么,让我们现在开始吧。

 | 2 0 0 |   | 1 0 100 |   | 2 0 200 | | 0 2 0 | x | 0 1  0  | = | 0 2  0  | | 0 0 1 |   | 0 0  1  |   | 0 0  1  |

上面的加法结果为我们提供了属性的齐次坐标transform: scale(2) translateX(100px)。

换句话说,(scale's homogeneous coordinates)和(translateX's homogeneous coordinates)等于的乘积:

 | 2 0 200 | ← x-axis | 0 2  0  | ← y-axis | 0 0  1  | ← constants

因此, 的矩阵等价transform: scale(2) translateX(100px)为transform: matrix(2, 0, 0, 2, 200, 0)。

 img {   transform-origin: 0 0;   transform: matrix(2, 0, 0, 2, 200, 0);   width: 80%; }

在 StackBlitz 上试用

注意transform: scale(2) translateX(100px)等于transform: matrix(2, 0, 0, 2, 200, 0)。并且transform: translateX(100px) scale(2)相当于transform: matrix(2, 0, 0, 2, 100, 0).

换句话说,您编写转换函数的顺序很重要。让我们在下面对此进行更多讨论。

为什么 CSS 转换函数的顺序很重要?

由于浏览器计算矩阵值的方式,您编写CSS 转换函数的顺序很重要。

例如,考虑以下片段:

 div {   position: absolute;   width: 100px;   height: 100px;   transform-origin: 0 0; }  .red {   border: 3px solid red;   background-color: rgba(255, 0, 0, 0.5); }  .green {   border: 3px solid green;   background-color: rgba(0, 128, 0, 0.5);   transform: translateX(100px) scale(2); }  .blue {   border: 3px solid blue;   background-color: rgba(0, 0, 255, 0.5);   transform: scale(2) translateX(100px); }

在 StackBlitz 上试用

绿色和蓝色divs 之间的唯一区别是我们编写它们的转换函数的顺序。

然而,计算机使用不同的值(100px绿色div和200px蓝色)翻译了两个容器。

那么,为什么变换函数的顺序会影响divs 的平移值呢?原因如下:

  • 浏览器按顺序(从左到右)乘以每个变换函数的齐次坐标。

换句话说,计算机使用以下语法来计算 greendiv的矩阵:

  • Greendiv的矩阵= (translateX 的齐次坐标) x (scale 的齐次坐标)

它使用以下语法来计算 bluediv的矩阵:

  • Bluediv的矩阵= (scale 的齐次坐标) x (translateX 的齐次坐标)

因此,转换函数的位置决定了矩阵的参数,因为浏览器是按照从最左边的函数到右边的顺序开始计算的。

知道如何将变换函数转换为matrix()是有益的。并且拥有一些转换工具可以派上用场。因此,让我们讨论一些您可以使用的有用工具。

将变换函数转换为的工具matrix()

可用于将转换函数快速转换为以下两个工具matrix():

  • JavaScript 的window.getComputedStyle()方法
  • Eric Meyer 和 Aaron Gustafson 的矩阵解析工具

如何使用window.getComputedStyle()将转换函数转换为matrix()

假设您要将以下变换函数转换为矩阵:

 img {   transform-origin: 0 0;   transform: scale(2) translateX(100px);   width: 80%; }

id您将向图像元素添加一个属性:

 <img   src="/photo/2022/09/26/23/26/african-american-7481724_960_720.jpg"   alt=""   id="image" />

然后,在 JavaScript 中,您将:

  1. 使用id属性获取图像元素。
  2. 使用该window.getComputedStyle()方法获取图像的transform属性值。

这是代码:

 // Get the image element by its id name: const image = document.getElementById("image");  // Get the image element's transform property's value: const matrix = window.getComputedStyle(image).getPropertyValue("transform");  // Log the matrix variable's value to the console: console.log(matrix);

在 StackBlitz 上试用

默认情况下,浏览器将 CSStransform属性的值转换为其矩阵等效值。因此,上面的代码片段返回了图像的计算值。

现在让我们讨论第二种转换工具。

如何使用矩阵分辨率工具将变换函数转换为matrix()

假设您要将以下转换函数转换为matrix():

 img {   transform-origin: 0 0;   transform: scale(2) translateX(100px);   width: 80%; }

您将执行以下操作:

  1. 转到 The Matrix Resolutions 。
  2. 将您的转换函数 ( scale(2) translateX(100px)) 粘贴到第一个文本字段中。
  3. 单击“红色药丸”按钮生成变换函数的矩阵等价。

单击红色药丸按钮将 CSS 变换函数转换为 matrix() 函数

提示:使用matrix3d()创建 3D 变换矩阵。

关于在 CSS 中转换元素的重要知识

以下是在 CSS 中转换元素时要记住的三个基本事实。

1. Transform创建堆叠上下文

假设您将该transform属性设置为 以外的任何值none。在这种情况下,浏览器将创建一个堆栈上下文。转换后的元素将作为它包含的任何绝对或固定定位元素的包含块。

2.缩放和缩放动画导致可访问性问题

每当您在应用程序中包含缩放或缩放动画时,请为用户提供关闭动画的选项。此选项是必要的,因为缩放和缩放动画会导致可访问性问题。

3.并非所有元素都是可变形的

您不能转换以下盒子模型:

  • 不可替换的内联元素
  • 表列框
  • 表列组

包起来

在本文中,我们讨论了平移、旋转、倾斜、缩放或向 HTML 元素添加透视效果所需的所有 CSS 转换工具。

我希望你发现这篇文章很有帮助。

(更|多优质内|容:java567 点 c0m)

版权声明:内容来源于互联网和用户投稿 如有侵权请联系删除

本文地址:http://0561fc.cn/211782.html