transform

Baseline 已广泛支持

此特性已相当成熟,可在许多设备和浏览器版本上使用。自 2015 年 9 月以来,该特性已在各大浏览器中可用。

transform CSS 属性允许你旋转、缩放、倾斜或平移元素。它修改了 CSS 视觉格式化模型的坐标空间。

试一试

transform: matrix(1, 2, 3, 4, 5, 6);
transform: translate(120px, 50%);
transform: scale(2, 0.5);
transform: rotate(0.5turn);
transform: skew(30deg, 20deg);
transform: scale(0.5) translate(-100%, -100%);
<section id="default-example">
  <img
    class="transition-all"
    id="example-element"
    src="/shared-assets/images/examples/firefox-logo.svg"
    width="200" />
</section>

如果该属性的值不同于 none,则会创建一个堆叠上下文。在这种情况下,该元素将充当其包含的任何 position: fixed;position: absolute; 元素的包含块

警告:只有可转换元素才能被 transform。也就是说,除了非替换行内盒表列盒表列组盒之外,所有其布局由 CSS 盒模型控制的元素。

语法

css
/* Keyword values */
transform: none;

/* Function values */
transform: matrix(1, 2, 3, 4, 5, 6);
transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
transform: perspective(17px);
transform: rotate(0.5turn);
transform: rotate3d(1, 2, 3, 10deg);
transform: rotateX(10deg);
transform: rotateY(10deg);
transform: rotateZ(10deg);
transform: translate(12px, 50%);
transform: translate3d(12px, 50%, 3em);
transform: translateX(2em);
transform: translateY(3in);
transform: translateZ(2px);
transform: scale(2, 0.5);
transform: scale3d(2.5, 1.2, 0.3);
transform: scaleX(2);
transform: scaleY(0.5);
transform: scaleZ(0.3);
transform: skew(30deg, 20deg);
transform: skewX(30deg);
transform: skewY(1.07rad);

/* Multiple function values */
transform: translateX(10px) rotate(10deg) translateY(5px);
transform: perspective(500px) translate3d(10px, 0, 20px) rotateY(30deg);

/* Global values */
transform: inherit;
transform: initial;
transform: revert;
transform: revert-layer;
transform: unset;

transform 属性可以指定为关键词值 none 或一个或多个 <transform-function> 值。

<transform-function>

一个或多个要应用的 CSS 变换函数。变换函数按从左到右的顺序相乘,这意味着复合变换实际上是按从右到左的顺序应用的。

none

指定不应应用任何变换。

无障碍

缩放/缩放动画对可访问性来说是个问题,因为它们是某些类型偏头痛的常见触发因素。如果你的网站需要包含此类动画,你应该提供一个控件,允许用户关闭动画,最好是全站范围的。

此外,请考虑使用 prefers-reduced-motion 媒体特性——使用它来编写一个媒体查询,如果用户在系统偏好设置中指定了减少动画,则该查询将关闭动画。

了解更多

正式定义

初始值none
应用于可变换元素
继承性
百分比指边框的尺寸
计算值按指定值,但相对长度会转换为绝对长度。
动画类型变换
创建层叠上下文

正式语法

transform = 
none |
<transform-list>

<transform-list> =
<transform-function>+

示例

平移和旋转元素

HTML

html
<div>Transformed element</div>

CSS

css
div {
  border: solid red;
  transform: translate(30px, 20px) rotate(20deg);
  width: 140px;
  height: 60px;
}

结果

变换顺序

变换函数的顺序很重要。在此示例中,两个盒子以相同的值进行旋转和平移;不同之处仅在于变换函数的顺序。

HTML

html
<div class="original"></div>
<div class="one">1</div>
<div class="two">2</div>

CSS

css
.one {
  transform: translateX(200px) rotate(135deg);
}
.two {
  transform: rotate(135deg) translateX(200px);
}

结果

当元素在平移之前被旋转时,平移方向在旋转轴上。轴由虚线表示。

更多示例

请参阅 使用 CSS 变换<transform-function> 获取更多示例。

规范

规范
CSS 变换模块级别 2
# 变换函数
CSS 变换模块级别 1
# 变换属性
Scalable Vector Graphics (SVG) 2
# 变换属性

浏览器兼容性

另见