transform 속성으로 요소를 이동, 회전, 크기 변경, 기울이기 등 2D/3D 변형을 수행하고,
transition과 animation 속성으로 CSS 속성 변화와 복잡한 애니메이션 효과를 구현합니다.
Flexbox는 1차원 레이아웃 시스템으로, 컨테이너와 요소 속성을 활용하여
유연하고 반응형인 레이아웃을 구현합니다.
CSS Grid는 2차원 레이아웃 시스템으로 행과 열을 동시에 제어하며,
multi-column 속성으로 신문과 같은 다단 레이아웃을 구현합니다.
Transform 3D- by. UXKM
Publishing
CSS
CSS 고급
Transform 3D
요약 설명
CSS의 transform 속성은 요소가 위치하는 시각적 좌표 공간(visual formatting model)을 변형할 수 있도록 해줍니다.
이 속성을 사용하면 요소를 이동(translate), 회전(rotate), 크기 변경(scale), 기울이기(skew) 등 다양한 방식으로 변형할 수 있으며, CSS3에서는 2D와 3D 변형 모두를 지원합니다.
Transform은 x, y, z좌표 체계를 따르며, 좌표의 기준점은 브라우저 화면의 왼쪽 상단입니다. Z축은 화면 밖에서 사용자가 바라보는 방향을 기준으로 앞/뒤 방향을 나타내며, 각 축의 화살표 방향이 양의 값, 반대쪽이 음의 값이 됩니다.
요약 설명
3D Transform은 입체 공간에서 요소를 변형하는 기능으로, x축, y축, z축 좌표 체계를 사용합니다.
좌표의 기준점은 브라우저 화면의 왼쪽 상단이며, x축은 수평(왼쪽 및 오른쪽), y축은 수직(위 아래), z축은 깊이(앞으로 및 뒤로)를 나타냅니다. transform 속성에 변환 함수를 지정하여 요소를 이동(translate3d), 회전(rotate3d), 크기 변경(scale3d)할 수 있으며, perspective() 함수를 사용하여 원근감을 표현할 수 있습니다.
3D Transform은 요소에 직접 적용하는 속성과 자식 요소를 3D로 처리하기 위해 부모 요소에 설정하는 속성으로 구분되며, perspective, transform-style, backface-visibility 등의 속성을 함께 사용하여 입체적인 효과를 구현합니다.
3D Transform
요약 설명
CSS 3D transform은 평면에서의 여러 CSS 속성을 조합하고 3D 공간에서의 회전, 확대, 이동, 비틀기를 포함하여 원근감과 관찰자의 위치를 부여해 3D 공간을 만들어 낼 수 있습니다.
3D transform은 크게 트랜스폼을 적용할 요소에 적용하는 속성과 자식 요소를 3D로 처리하기 위해 부모 요소에 설정하는 속성이 있습니다. rotate3d(), translate3d(), scale3d() 함수와 같이 입체적으로 보여지는 3D 변형에 관련된 함수는 perspective() 함수를 사용하여 원근감을 표현할 기준을 명시해야 합니다.
CSS에서 x축은 수평(왼쪽 및 오른쪽), y축은 수직(위 아래), z축은 깊이(앞으로 및 뒤로 / 더 멀리 그리고 더 깊이)를 나타냅니다.
CSS3 3D transform 속성은 다음과 같습니다.
transform : 요소에 2D 또는 3D 변형(transform)을 적용합니다.
transform-origin : 요소에 변형(transform)을 적용하는 변환 중심을 설정합니다. 기본값은 transform-origin: 50% 50%;입니다.
transform-style : 요소에 변형을 적용할 때 그 변환이 자식(child) 요소들에게도 적용될지 안 될지를 설정합니다.
perspective : 3D 요소에 원근감을 표현할 때 사용할 픽셀 수를 설정합니다.
perspective-origin : 3D 요소에 원근감을 표현할 때 사용할 기준 축을 설정합니다.
backface-visibility : 요소의 앞면만을 표현하고, 뒷면을 표현할지 안 할지를 설정합니다. 입체적인 뒷면의 가시성을 결정하는 속성입니다.
자식 요소를 3D 처리하기 위한 부모 요소에 설정하기 위한 속성
perspective : 원근, 소실점, 투시도법
perspective-origin : 원근법에 대한 기준점을 설정
transform-style : preserve-3d 요소의 자식이 3D 공간에 배치
CSS3 3D transform은 프로퍼티값으로 변환함수(transform function)를 사용합니다. 사용할 수 있는 변환함수는 다음과 같습니다.
translate3d(x, y, z) : 요소의 위치를 X축으로 x만큼, Y축으로 y만큼, Z축으로 z만큼 이동시킵니다. (단위 : px, %, em 등)
translateX(n) : 요소의 위치를 X축으로 x만큼 이동시킵니다. (단위 : px, %, em 등)
translateY(n) : 요소의 위치를 Y축으로 y만큼 이동시킵니다. (단위 : px, %, em 등)
translateZ(n) : 요소의 위치를 Z축으로 z만큼 이동시킵니다. (단위 : px, %, em 등)
scale3d(x, y, z) : 요소의 크기를 X축으로 x배, Y축으로 y배, Z축으로 z배 확대 또는 축소시킵니다. (단위 : 0과 양수)
scaleX(n) : 요소의 크기를 X축으로 x배 확대 또는 축소시킵니다. (단위 : 0과 양수)
scaleY(n) : 요소의 크기를 Y축으로 y배 확대 또는 축소시킵니다. (단위 : 0과 양수)
scaleZ(n) : 요소의 크기를 Z축으로 z배 확대 또는 축소시킵니다. (단위 : 0과 양수)
rotate3d(x, y, z, angle) : 요소를 X축으로 x각도, Y축으로 y각도, Z축으로 z각도 회전시킵니다. (단위 : +/- 각도(deg))
rotateX(x) : 요소를 X축으로 x각도 회전시킵니다. (단위 : +/- 각도(deg))
rotateY(y) : 요소를 Y축으로 y각도 회전시킵니다. (단위 : +/- 각도(deg))
rotateZ(z) : 요소를 Z축으로 z각도 회전시킵니다. (단위 : +/- 각도(deg))
transform 3D 속성
CSS3 2D transform에서 설명한 부분은 제외합니다. transform : none | <transform-function> [ <transform-function> ]*
z축에 대한 이해
transform 3D에서도 transform 2D의 값은 동일하게 사용됩니다. x, y축은 2D와 동일하게 좌/우, 상/하를 의미하며,
z축은 사용자와의 거리(3D)를 의미합니다.
요소의 z값이 양수이면 사용자와 가까워지며(확대와 비슷), 음수이면 사용자와 멀어(축소와 비슷)집니다.
[3D 효과를 이해하기 위한 x축, y축, z축에 대한 그림]
translate3d(x, y, z)
translate3d(x, y, z) 함수는 현재 위치에서 요소를 주어진 x축과 y축, z축의 거리만큼 이동시킵니다.
주어진 거리가 양수이면 해당 축의 양의 방향으로, 음수이면 해당 축의 음의 방향으로 이동시킵니다.
translateZ(tz)
현재 위치에서 요소를 주어진 z축의 거리만큼 이동시킵니다.
값이 클수록 사용자와 가까워집니다.
scale3d(sx, sy, sz)
요소의 크기를 주어진 배율만큼 x축, y축과 z축 방향으로 늘리거나 줄입니다.
scaleZ(sz)
scale()의 기능이 요소를 늘리거나 줄이는 것인데 CSS는 두께의 개념이 없어 z축을 늘어나게 하는 것이 불가능합니다.
따라서 scaleZ()의 z축은 그 자체로는 의미가 없습니다. perspective와 translateZ()를 같이 사용해야 목적에 맞는 구현이 가능합니다.
rotate3d(x, y, z, angle)
요소를 주어진 각도만큼 x축, y축과 z축을 기준으로 회전시킵니다.
3D 공간에서 회전에는 3개의 자유도가 있으며 회전축을 나타냅니다.
회전축은 요소의 원점(transform-origin으로 정의된 값)과 rotate3d(x, y, z, angle)를 통과합니다.
rotateX(angle), rotateY(angle)
rotateX(angle), rotateY(angle) 함수는 요소를 주어진 각도만큼 각각의 축(x, y)을 기준으로 회전시킵니다.
각 축이 기준이 되기 때문에 실제 움직임은 예상과 반대로 보일 수 있습니다.
예를 들어 물레방아가 위아래로 회전하는 모습을 표현하려면 rotateX(-angle)를 사용합니다. rotateX()는 x축을 기준으로 위아래 회전을 나타내며, 음수 값을 사용하면 자연스러운 회전 방향을 표현할 수 있습니다.
rotateZ(angle)
rotateZ() 함수는 요소를 주어진 각도만큼 z축을 기준으로 회전시킵니다. rotateX()와 rotateY()가 3D 공간에서의 회전을 나타낸다면, rotateZ()는 화면을 바라보는 방향에서의 회전을 나타냅니다.
모니터에 있는 요소와 사용자 간의 거리가 z축이 되며, rotateZ()의 움직임은 transform 2D의 rotate()와 동일합니다. angle이 양수이면 시계 방향, 음수이면 반시계 방향으로 회전합니다.
예를 들어 팽이를 위에서 바라볼 때 시계 또는 반시계 방향으로 회전하는 모습이 rotateZ()에 해당합니다.
반면 옆에서 바라볼 때 가로로 회전하는 모습은 rotateY()로 표현할 수 있습니다.
요소에 변형을 적용할 때 그 변환이 자식(child) 요소들에게도 적용될지 안 될지를 설정합니다.
flat :
기본값으로 자식 요소는 2D의 2차원에서 부모 요소와 동일한 평면에 배치됩니다.
즉, flat이 선언되면 자식은 3D 공간 값을 가지지 못합니다.
preserve-3d :
자식 요소가 3D 공간에 배치되도록 지정합니다. preserve-3d가 선언되면 자식은 부모의 3D 영역을 공유하여 부모의 각도를 기준으로 3D transform 선언이 작동됩니다.
perspective 속성
perspective는 3D 공간에서 요소와 관측 점과의 거리, 즉 원근감을 지정하는 속성입니다. perspective 속성으로 원근감을 지정하는 것과 동일하게 transform 속성의 perspective() 함수로도 지정할 수 있습니다.
이때 속성 값이 작을수록 가깝게 보이고, 클수록 멀게 보입니다.
transform-origin 속성
transform 2D, 3D 구분없이 같은 값을 가집니다. transform-origin은 CSS transform 속성과 함께 사용되는 속성으로서, rotate(), skew() 등의 회전, 변형 속성의 중심(원점·기준점)을 지정합니다.
속성의 값은 백분율(%)과 키워드 중 하나로 지정할 수 있으며, 기본 값은 50% 50%(center center)로 요소의 가운데(중심)입니다.
0%는 단위를 생략하고 0으로 지정해도 됩니다. (0% = 0)
backface-visibility(이면가시성) 속성
요소의 앞면만을 표현하고, 뒷면을 표현할지 안 할지를 설정합니다. backface-visibility 속성은 3D 변형과 연관되어 있으며 입체적인 뒷면의 가시성(뒤집어진 면)을 결정하는 속성입니다.
즉, 변형이 가해져서 요소가 뒤집어 졌을 때, 이 속성으로 숨기거나 보여지게 할 수 있습니다.
visible : 기본값으로 이면(뒷면)을 보여줍니다. 화면을 마주 보지 않아도 요소가 항상 표시됩니다.
hidden : 뒤집어진 면을 숨깁니다. 화면을 마주 보지 않을 때 요소가 보이지 않습니다.
[ backface-visibility ]
3D transform 테스트 및 요약설명
위에 설명된 3D transform의 속성 과
transform-origin,
transform-style,
perspective,
perspective-origin,
backface-visibility를 직접 테스트 할 수 있습니다.
각 속성의 input값을 변경하여 마우스오버(hover) 또는 result버튼을 클릭하세요. 테스트기 출처 : http://921430km.com/3d