자바스크립트도 position, width, heigth등 HTML 요소를 조작할 수 있는 방법이 있습니다. 하지만 CSS Tranform에 비해 조작할 수 있는 범위가 적고 또한 GPU가속을 사용하지 못하고 계속되는 리플로우 리페인팅 때문에 앱에 과부하를 많이 야기합니다.
CSS의 Transform은 변형 전용 툴로서 GPU가속, 자유로운 변형을 통해 사용자에게 좋은 인터렉션을 제공할 수 있습니다.
트랜스폼은 변형의 종류, 중심점의 이동, 변형의 스타일 등 총 네 가지 옵션이 있으며 가장 많이 사용되는 두 가지 변형의 종류와 중심점의 이동에 대해 알아보겠습니다.
기본적으로 트랜스폼의 중심점은 HTML 요소의 중앙 입니다. 모든 변형은 중심축을 기준으로 일어나며 이 중심축의 위치를 이동할 수 있습니다.
| 기본 | 이동 |
|---|---|
![]() | ![]() |
중심축을 이동하는 코드는 아래와 같다.
transform-origin: 좌우, 상하
transform-origin: left, top /* 왼쪽 , 위 가 중심축이 된다 */
transform-origin: 10%, 10% /* 왼쪽10% , 위10% 가 중심축이 된다 */
트랜스폼은 다양한 형식의 변형을 지원하지만 자주 쓰이는 네 가지 변형에 대해 알아보겠습니다.
transform: scale(2); /* 200% */
transform: scale(0.5); /* 50% */
transform: translate(10px,10px); /* X축 10px 이동, Y축 10px 이동 */
transform: translateX(1em); /* X축 1em 이동 */
transform: translateY(-2rem); /* Y축 -2rem 이동 */ㅅ
transform: translateZ(-10%); /* Z축 -10% 이동 */
transform: rotate(10deg); /* X축 10도 회전 */
transform: rotateX(20deg); /* X축 20도 회전 */
transform: rotateY(10deg); /* Y축 10도 회전 */
transform: rotateZ(5deg); /* Z축 5도 회전 */
transform: skew(10deg); /* X축 10도 비틀기 */
transform: skewX(20deg); /* X축 20도 비틀기 */
transform: skewY(10deg); /* Y축 10도 비틀기 */
네 맞습니다. 다만 차이점은 주변의 요소에 영향을 주는지의 여부입니다.
| width 와 height | transform : scale |
|---|---|
![]() | ![]() |
⭐️ width, heigth, left, right 와 같은 css 기본 속성을 변경하게되면 주변 요소에 영향을 주게되며 자연스럽게 리플로우가 발생하고 리페인팅이 전에 요소를 다시 그리게 됩니다. 하지만 css transform 으로 변형을 하게되면 주변요소에 영향을 주지 않기때문에 transform 이 적용된 요소만 다시 그리면 됩니다. 즉, 성능면에서 아주 우수 할 수 있다는 장점이 있습니다.
지금까지 CSS Transform 에 대해 알아봤습니다.
애니메이션은 변화를 자연스러운 단계로 보여주는 것 입니다. 지금은 2 프레임의 딱딱한 변화를 가진 transform이 어떻게 애니메이션이 되는지 다음 포스팅에서 알아보겠습니다.