scale()

Baseline 已广泛支持

此特性已相当成熟,可在许多设备和浏览器版本上使用。自 ⁨2015 年 7 月⁩以来,各浏览器均已提供此特性。

scale() CSS 函数定义了一种在二维平面上调整元素大小的变换。由于缩放量由一个向量 [sx, sy] 定义,因此可以以不同的比例调整水平和垂直尺寸。其结果是一个 <transform-function> 数据类型。

试一试

transform: scale(1);
transform: scale(0.7);
transform: scale(1.3, 0.4);
transform: scale(-0.5, 1);
<section id="default-example">
  <img
    class="transition-all"
    id="example-element"
    src="/shared-assets/images/examples/firefox-logo.svg"
    width="200" />
</section>

此缩放变换由一个二维向量来描述。其坐标定义了在每个方向上的缩放量。如果两个坐标相等,则缩放是均匀的(isotropic),并且元素的宽高比得以保留(这是一种位似变换)。

当坐标值在 [-1, 1] 范围之外时,元素会沿该维度放大;在此范围内时,则会缩小。如果值为负,则会使元素在该维度上进行点反射。值为 1 时没有效果。

备注: scale() 函数只在二维空间进行缩放。要在三维空间进行缩放,请改用 scale3d()

语法

css
scale(sx)

scale(sx, sy)

sx

一个 <number><percentage>,表示缩放向量的横坐标(水平,x 轴分量)。

sy 可选

一个 <number><percentage>,表示缩放向量的纵坐标(垂直,y 轴分量)。如果未定义,其默认值为 sx,从而实现保持元素宽高比的均匀缩放。

笛卡尔坐标,在 ℝ^2 齐次坐标,在 ℝℙ^2 笛卡尔坐标,在 ℝ^3 齐次坐标,在 ℝℙ^3
(sx00sy)\left( \begin{array}{cc} sx & 0 \\ 0 & sy \end{array} \right)
(sx000sy0001)\left( \begin{array}{ccc} sx & 0 & 0 \\ 0 & sy & 0 \\ 0 & 0 & 1 \end{array} \right)
(sx000sy0001)\left( \begin{array}{ccc} sx & 0 & 0 \\ 0 & sy & 0 \\ 0 & 0 & 1 \end{array} \right)
(sx0000sy0000100001)\left( \begin{array}{cccc} sx & 0 & 0 & 0 \\ 0 & sy & 0 & 0 \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \end{array} \right)
[sx 0 0 sy 0 0]

正式语法

<scale()> = 
scale( <number> , <number>? )

无障碍

缩放/缩放动画对无障碍性存在问题,因为它们是某些类型偏头痛的常见诱因。如果需要在网站中包含此类动画,应提供一个控件,允许用户关闭动画,最好是全站范围的。

此外,可以考虑使用 prefers-reduced-motion 媒体特性——用它来编写媒体查询,以便在用户系统偏好设置中指定了减弱动画时关闭动画。

了解更多

示例

同时缩放 X 和 Y 维度

HTML

html
<div>Normal</div>
<div class="scaled">Scaled</div>

CSS

css
div {
  width: 80px;
  height: 80px;
  background-color: skyblue;
}

.scaled {
  transform: scale(0.7); /* Equal to scaleX(0.7) scaleY(0.7) */
  background-color: pink;
}

结果

分别缩放 X 和 Y 维度,并平移原点

HTML

html
<div>Normal</div>
<div class="scaled">Scaled</div>

CSS

css
div {
  width: 80px;
  height: 80px;
  background-color: skyblue;
}

.scaled {
  transform: scale(2, 0.5); /* Equal to scaleX(2) scaleY(0.5) */
  transform-origin: left;
  background-color: pink;
}

结果

规范

规范
CSS 变换模块级别 1
# funcdef-transform-scale

浏览器兼容性

另见