정의 및 사용 방법
transform
속성은
요소가 렌더링되는 평면(2D)이나 공간(3D) 위치에 대한 '회전', '크기 조절', '기울이기', '이동하기'와 같은 시각적 변형을 적용시킵니다.
알아두세요!
이 속성은 요소의 영역 공간에 영향을 미치는 변형을 적용합니다.
즉, 요소의 영역인 너비나 높이를 지정할 수 없는 요소에는 아무런 효과가 없습니다.
기본 예제
transform
속성으로 변형을 적용시키려면 CSS에서 제공하는 변형 함수(transform function) 값으로 지정해야 합니다.
제공하는 변형 함수는 다양하지만 이해를 돕기 위해 가장 대표적인 변형 함수를 사용하여 각각의 라이브 데모 예제('회전', '크기 조절', '기울이기', '이동하기', '여러 개의 값 적용하기')로 살펴보겠습니다.
<div class="ele">Element</div>
.ele {
width: 200px;
height: 150px;
background-color: rgba(255, 0, 200, .15);
border: 3px dashed #663399;
transform: /* 변형 함수(transform function) 값 */
}
회전
transform
속성으로 요소가 회전하는 라이브 데모 예제입니다.
이 예제에는 요소가 Z축을 기준으로 평면(2D) 회전하는 rotate()
함수 값을 사용했습니다.
크기 조절
transform
속성으로 요소가 크기(scale)를 조절하는 라이브 데모 예제입니다.
이 예제에는 요소가 가로와 세로 크기 비율을 변경하는 scale()
함수 값을 사용했습니다.
기울이기
transform
속성으로 요소가 기울이는 라이브 데모 예제입니다.
이 예제에는 요소가 X축과 Y축을 기준으로 기울이는 skew()
함수 값을 사용했습니다.
이동하기
transform
속성으로 요소가 이동하는 라이브 데모 예제입니다.
이 예제에는 요소가 X축과 Y축을 기준으로 이동시키는 translate()
함수 값을 사용했습니다.
여러 개의 값 적용하기
transform
속성은 띄어 뜨기를 구분으로 변형 함수(transform function) 값을 다중으로 지정할 수 있습니다. 이렇게 하면 여러 개의 변형을 조합할 수 있습니다.
형식 구문
selector {
transform: none | <transform-list>
}
구문
/* 키워드 값 */
transform: none;
/* 단일한 변형 함수(<transform-list>) 값 */
transform: rotate(45deg);
transform: rotateX(45deg);
transform: rotateY(45deg);
transform: rotateZ(45deg);
transform: rotate3d(45deg);
transform: translate(20px, -25px);
transform: translateX(20px);
transform: translateY(-25px);
transform: translateZ(0);
transform: translate3d(20px, -25px, 0);
transform: scale(0.7);
transform: scale(0.7, 1.1);
transform: scaleX(0.7);
transform: scaleY(1.1);
transform: scaleZ(1);
transform: scale3d(0.7, 1.1, 1);
transform: skew(30deg);
transform: skew(30deg, -20deg);
transform: skewX(30deg);
transform: skewY(-20deg);
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-list>) 값 */
transform: rotate(45deg) translate(20px, -25px);
transform: rotate(45deg) translate(20px, -25px) skewY(-20deg);
transform: rotate(45deg) scale(0.7);
/* 글로벌 값 */
transform: inherit;
transform: initial;
transform: revert;
transform: revert-layer;
transform: unset;
값
none |
초깃값임.
어떤 변형도 적용하지 않습니다. |
---|---|
<transform-list> |
변형 함수입니다.
|
참고하세요!
transform
속성의 값이 none
이 아닐 경우, 해당 요소는 새로운 쌓임 맥락(Stacking context)을 생성합니다. 이로 인해 z-index
를 사용한 요소의 겹침 순서가 달라질 수 있습니다. 자세한 설명은 CSS z-index 속성 – 요소들이 겹칠 때 쌓임 순서 제어하기를 참고하세요!
CSS 변형 함수 목록
함수 | 변형 | 매개변수 | 매개변수 유형 |
---|---|---|---|
rotate() |
2D 평면에서 Z축을 기준으로 회전 | 하나의 값을 지정
예: rotate(45deg) |
각도 단위(deg, rad, turn 등)
예: rotate(45deg) |
rotateX() |
X축을 기준으로 회전
(3D 전용) |
하나의 값을 지정
예: rotateX(45deg) |
각도 단위(deg, rad, turn 등)
예: rotateX(45deg) |
rotateY() |
Y축을 기준으로 회전
(3D 전용) |
하나의 값을 지정
예: rotateY(45deg) |
각도 단위(deg, rad, turn 등)
예: rotateY(45deg) |
rotateZ() |
Z축을 기준으로 회전
( rotate() 와 동일) |
하나의 값을 지정
예: rotateZ(45deg) |
각도 단위(deg, rad, turn 등)
예: rotateZ(45deg) |
rotate3d() |
임의의 축을 기준으로 회전
|
네 개의 값을 지정
예: rotate3d(x, y, z, angle) 형식
|
숫자 3 개 + 각도 단위(deg, rad, turn 등) 1개
rotate3d(1, 1, 0, 45deg) |
translate() |
X축과 Y축 방향으로 이동 | 하나 또는 두 개의 값을 지정
|
길이 단위(px, em 등) 또는 백분율(%)
예: translate(20px, -25px) |
translateX() |
X축으로 이동 | 하나의 값을 지정
예: translateX(20px) |
길이 단위(px, em 등)
예: translateX(20px) |
translateY() |
Y축으로 이동 | 하나의 값을 지정
예: translateY(20px) |
길이 단위(px, em 등)
예: translateY(20px) |
translateZ() |
Z축으로 이동
(3D 전용) |
하나의 값을 지정
예: translateZ(20px) |
길이 단위(px, em 등)
예: translateZ(20px) |
translate3d() |
X, Y, Z축으로 동시에 이동 | 세 개의 값을 지정
translate3d(x, y, z) 형식
예: translate3d(20px, -25px, 0) |
길이 단위(px, em 등)
예: translateZ(20px) |
scale()
| X축과 Y축 방향으로 비율만큼 확대 또는 축소 | 하나 또는 두 개의 값을 지정
|
숫자(배율)
예: scale(0.7, 1.1) |
scaleX()
| X축방향으로 비율만큼 확대 또는 축소 | 하나의 값을 지정
예: scaleX(0.7) |
숫자(배율)
예: scaleX(0.7) |
scaleY()
| Y축방향으로 비율만큼 확대 또는 축소 | 하나의 값을 지정
예: scaleY(1.1) |
숫자(배율)
예: scaleY(1.1) |
scaleZ()
| Z축방향으로 비율만큼 확대 또는 축소
(3D 전용) |
하나의 값을 지정
예: scaleY(1.1) |
숫자(배율)
예: scaleZ(1.1) |
scale3d()
| X, Y, Z축 방향으로 각각 비율만큼 확대 또는 축소 | 세 개의 값을 지정
scale3d(x, y, z) 형식
예: scale3d(0.7, 1.1, 1) |
숫자(배율)
예: scale3d(0.7, 1.1, 1) |
skew()
| X축과 Y축 방향으로 비스듬히 기울임 | 하나 또는 두 개의 값을 지정
|
각도 단위(deg, rad, turn 등)
예: skew(30deg, -20deg) |
skewX()
| X축방향으로 비스듬히 기울임 | 하나의 값을 지정
예: skewX(30deg) |
각도 단위(deg, rad, turn 등)
예: skewX(30deg) |
skewY()
| Y축방향으로 비스듬히 기울임 | 하나의 값을 지정
예: skewY(30deg) |
각도 단위(deg, rad, turn 등)
예: skewY(30deg) |
matrix() |
2D 변형(이동, 회전, 크기 조절, 기울이기)을 하나의 행렬로 정의 | 6개의 숫자 값 지정
matrix(a, b, c, d, e, f) 형식
고급 제어에 사용 |
숫자 6개
matrix(1, 2, 3, 4, 5, 6) |
matrix3d() |
3D 변형을 위한 4×4 행렬을 정의 | 16개의 숫자 값 지정
matrix3d(n1, n2, ..., n16) 형식
모든 3D 변형을 조합 가능 |
숫자 16개
matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1) |
형식 정의
초깃값 | none |
---|---|
적용 요소 | 변형 가능한 요소
즉, 요소의 영역인 너비나 높이를 지정할 수 있는 요소 |
상속 | 아니오 |
백분율 | 요소 자신의 실제 크기(bounding box)를 기준으로 계산 |
애니메이션 | 예 |
활용 예제
이 예제는 버튼 안의 화살표를 사용하여 transform
속성을 실습하는 데모입니다.
화살표 모양을 만들기 위해서 요소에 rotate()
와 translateY()
를 적용하여 방향과 위치를 조절(변형)였습니다.
화살표가 시각적 장식으로만 사용되므로 aria-hidden="true"
를 통해 접근성에 영향을 주지 않도록 했습니다.
<button type="button" id="toggle-button">
<span class="toggle-button-text">클릭하기</span>
<span aria-hidden="true" class="toggle-button-arrow"></span>
</button>
aria-hidden="true"
는 스크린 리더 및 보조 기술을 사용하는 것으로, aria-hidden
속성의 값이 true
로 설정되면 해당 요소와 그 안에 포함된 콘텐츠는 접근성 기술을 통해 감지되지 않습니다. 위 예제에서는 <span>
태그가 오직 시각적 장식으로만 활용되었기 때문에 웹접근성 향상을 위해 사용되었습니다.
#toggle-button {
padding: 0.5em 1em;
background: none;
border: 1px solid #777;
border-radius: 0.5em;
display: flex;
align-items: center;
cursor: pointer;
}
.toggle-button-text {
margin-right: 1em;
}
.toggle-button-arrow { /* 화살표를 표시 */
display: inline-flex;
width: 0.7em;
height: 0.7em;
border-left: 1px solid black;
border-bottom: 1px solid black;
transform: rotate(-45deg) translateY(-0.3em);
}
브라우저 호환성
속성 |
데스크탑 Chrome
|
데스크탑데스크탑 Edge
|
데스크탑 Firefox
|
Safari
|
---|---|---|---|---|
transform
|
36 | 12 | 16 | 9 |
명세서
명세서 사양 | |
---|---|
transform
|
CSS Transforms Module Level 1 #transform-property |
변형 함수 |
CSS Transforms Module Level 2 #transform-functions |