transform

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since September 2015.

Thuộc tính transform của CSS cho phép bạn xoay, co giãn, nghiêng hoặc dịch chuyển một phần tử. Nó chỉnh sửa không gian tọa độ của mô hình định dạng trực quan CSS.

Nếu thuộc tính có giá trị khác none, một ngữ cảnh xếp chồng sẽ được tạo ra. Trong trường hợp đó, phần tử sẽ hoạt động như một khối chứa cho bất kỳ phần tử position: fixed; hoặc position: absolute; nào mà nó chứa.

Bạn cũng có thể sử dụng các thuộc tính transform riêng lẻ: translate, rotatescale. Các thuộc tính này được áp dụng theo thứ tự: translate, rotate, scale và cuối cùng là transform.

Warning: Chỉ những phần tử có thể biến đổi mới có thể được transform. Đó là tất cả các phần tử có bố cục được điều chỉnh bởi mô hình hộp CSS, ngoại trừ: hộp inline không được thay thế, hộp cột bảnghộp nhóm cột bảng.

Try it

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>

Cú pháp

css
/* Giá trị từ khóa */
transform: none;

/* Giá trị hàm */
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);

/* Nhiều giá trị hàm */
transform: translateX(10px) rotate(10deg) translateY(5px);
transform: perspective(500px) translate3d(10px, 0, 20px) rotateY(30deg);

/* Giá trị toàn cục */
transform: inherit;
transform: initial;
transform: revert;
transform: revert-layer;
transform: unset;

Thuộc tính transform có thể được chỉ định là giá trị từ khóa none hoặc một hay nhiều giá trị <transform-function>.

Giá trị

<transform-function>

Một hoặc nhiều hàm biến đổi CSS được áp dụng. Các hàm biến đổi được nhân theo thứ tự từ trái sang phải, có nghĩa là các biến đổi tổng hợp được áp dụng theo thứ tự từ phải sang trái.

none

Chỉ định rằng không có biến đổi nào được áp dụng.

Khả năng tiếp cận

Các hoạt ảnh thu phóng/co giãn gây vấn đề về khả năng tiếp cận, vì chúng là tác nhân phổ biến gây ra một số loại đau nửa đầu. Nếu bạn cần đưa các hoạt ảnh như vậy vào trang web, bạn nên cung cấp tùy chọn để người dùng tắt hoạt ảnh, tốt nhất là trên toàn bộ trang web.

Ngoài ra, hãy cân nhắc sử dụng tính năng media prefers-reduced-motion — dùng nó để viết truy vấn media sẽ tắt hoạt ảnh nếu người dùng đã chỉ định giảm hoạt ảnh trong tùy chọn hệ thống.

Tìm hiểu thêm:

Định nghĩa chính thức

Initial valuenone
Applies totransformable elements
Inheritedno
Percentagesrefer to the size of bounding box
Computed valueas specified, but with relative lengths converted into absolute lengths
Animation typea transform
Creates stacking contextyes

Cú pháp chính thức

transform = 
none |
<transform-list>

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

<transform-function> =
<scale3d()> |
<scale()> |
<scaleX()> |
<scaleY()> |
<scaleZ()> |
<translate3d()> |
<translate()> |
<translateX()> |
<translateY()> |
<translateZ()> |
<rotate3d()> |
<rotate()> |
<rotateX()> |
<rotateY()> |
<rotateZ()> |
<skew()> |
<skewX()> |
<skewY()> |
<matrix3d()> |
<matrix()> |
<perspective()>

<scale3d()> =
scale3d( [ <number> | <percentage> ]#{3} )

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

<scaleX()> =
scaleX( <number> )

<scaleY()> =
scaleY( <number> )

<scaleZ()> =
scaleZ( [ <number> | <percentage> ] )

<translate3d()> =
translate3d( <length-percentage> , <length-percentage> , <length> )

<translate()> =
translate( <length-percentage> , <length-percentage>? )

<translateX()> =
translateX( <length-percentage> )

<translateY()> =
translateY( <length-percentage> )

<translateZ()> =
translateZ( <length> )

<rotate3d()> =
rotate3d( <number> , <number> , <number> , [ <angle> | <zero> ] )

<rotate()> =
rotate( [ <angle> | <zero> ] )

<rotateX()> =
rotateX( [ <angle> | <zero> ] )

<rotateY()> =
rotateY( [ <angle> | <zero> ] )

<rotateZ()> =
rotateZ( [ <angle> | <zero> ] )

<skew()> =
skew( [ <angle> | <zero> ] , [ <angle> | <zero> ]? )

<skewX()> =
skewX( [ <angle> | <zero> ] )

<skewY()> =
skewY( [ <angle> | <zero> ] )

<matrix3d()> =
matrix3d( <number>#{16} )

<matrix()> =
matrix( <number>#{6} )

<perspective()> =
perspective( [ <length [0,∞]> | none ] )

<length-percentage> =
<length> |
<percentage>

Ví dụ

Dịch chuyển và xoay một phần tử

HTML

html
<div>Transformed element</div>

CSS

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

Kết quả

Thứ tự transform

Thứ tự của các hàm biến đổi có vai trò quan trọng. Trong ví dụ này, hai hộp được xoay và dịch chuyển theo cùng giá trị; chỉ thứ tự hàm biến đổi là khác nhau.

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);
}

Kết quả

Khi một phần tử được xoay trước khi dịch chuyển, hướng dịch chuyển nằm trên trục đã xoay. Trục được chỉ ra bằng các đường chấm.

Thêm ví dụ

Vui lòng xem Sử dụng CSS transforms<transform-function> để biết thêm ví dụ.

Thông số kỹ thuật

Specification
CSS Transforms Module Level 2
# transform-functions
CSS Transforms Module Level 1
# transform-property
Scalable Vector Graphics (SVG) 2
# TransformProperty

Khả năng tương thích trình duyệt

Xem thêm