Transform 3D - by. UXKM

요약 설명

CSS의 transform 속성을 사용함으로써, CSS의 시각적 서식 모델(visual formatting model)의 좌표 공간을 변형시킬 수 있습니다.
해당 속성에 지정된 값에 따라 엘리먼트(element)에 이동(translate), 회전(rotate), 크기변경(scale), 기울임(skew)등의 효과를 줄 수 있습니다.
CSS3에서는 transform 속성을 사용하여 2D 변형(transform)과 3D 변형(transform)을 모두 제공합니다.
transform 속성에서는 x, y, z 좌표 체계를 따릅니다.
CSS 좌표 체계에서 기준점은 브라우저의 왼쪽 상단이 됩니다.
Z축은 입체적인 방향으로 모니터를 바라보고 있는 여러분이 있는 방향을 가리키는 좌표축입니다.
또한, 각 좌표축의 화살표 방향이 양의 방향이며, 반대쪽이 음의 방향을 가리킵니다.

4.1.3. 3D Transform

요약 설명

CSS 3D transform 은 평면에서의 여러 개 CSS 속성을 조합하고 3D 공간에서의 회전, 확대, 이동, 비틀기를 포함하고 원근감, 관찰자의 위치을 부여해 3D 공간을 만들어 낼 수 있습니다.
3D transform 은 크게 트랜스폼을 적용할 요소에 적용하는 속성과 자식 요소를 3D로 처리하기 위해 부모 요소에 설정하기 위한 속성이 있습니다.
rotate3d(), translate3d(), scale3d() 메소드와 같이 입체적으로 보여지는 3D 변형에 관련된 메소드는 perspective() 메소드를 사용하여 원근감을 표현할 기준을 명시해야 합니다.

CSS에서
x 축은 수평 (왼쪽 및 오른쪽)
y 축은 수직 (위 아래)
z 축은 깊이 (앞으로 및 뒤로 / 더 멀리 그리고 더 깊이)

CSS3 3D transform 속성은 다음과 같습니다.

  1. transform : 요소에 2D 또는 3D 변형(transform)을 적용합니다.
  2. transform-origin : 요소에 변형(transform)을 적용하는 변환 중심을 설정합니다. 기본값은 transform-origin: 50% 50%;
  3. transform-style : 요소에 변형을 적용할 때 그 변환이 자식(child) 요소들에게도 적용될지 안 될지를 설정합니다.
  4. perspective : 3D 요소에 원근감을 표현할 때 사용할 픽셀 수를 설정합니다.
  5. perspective-origin : 3D 요소에 원근감을 표현할 때 사용할 기준 축을 설정합니다.
  6. backface-visibility : 요소의 앞면만을 표현하고, 뒷면을 표현할지 안 할지를 설정합니다. 입체적인 뒷면의 가시성을 결정하는 속성입니다.

자식 요소를 3D 처리하기 위한 부모 요소에 설정하기 위한 속성

  1. perspective : 원근, 소실점, 투시도법
  2. perspective-origin : 원근법에 대한 기준점을 설정
  3. transform-style : preserve-3d 요소의 자식이 3D 공간에 배치

CSS3 3D transform은 프로퍼티값으로 변환함수(transform function)를 사용합니다. 사용할 수 있는 변환함수는 다음과 같습니다.

  1. translate3d(x, y, z) : 요소의 위치를 X축으로 x만큼, Y축으로 y만큼 Z축으로 z만큼 이동시킵니다. (단위 : px, %, em 등)
  2. translateX(n) : 요소의 위치를 X축으로 x만큼 이동시킵니다. (단위 : px, %, em 등)
  3. translateY(n) : 요소의 위치를 Y축으로 y만큼 이동시킵니다. (단위 : px, %, em 등)
  4. translateZ(n) : 요소의 위치를 Z축으로 z만큼 이동시킵니다. (단위 : px, %, em 등)
  5. scale3d(x,y) : 요소의 크기를 X축으로 x배, Y축으로 y배, Z축으로 z배 확대 또는 축소 시킵니다. (단위 : 0과 양수)
  6. scaleX(n) : 요소의 크기를 X축으로 x배 확대 또는 축소 시킵니다. (단위 : 0과 양수)
  7. scaleY(n) : 요소의 크기를 Y축으로 y배 확대 또는 축소 시킵니다. (단위 : 0과 양수)
  8. scaleZ(n) : 요소의 크기를 Z축으로 z배 확대 또는 축소 시킵니다. (단위 : 0과 양수)
  9. rotate3d(x, y, z) : 요소를 X축으로 x각도, Y축으로 y각도, Z축으로 z각도 회전시킵니다. (단위 : +/- 각도(deg))
  10. rotateX(x) : 요소를 X축으로 x각도 회전시킵니다. (단위 : +/- 각도(deg))
  11. rotateY(y) : 요소를 Y축으로 y각도 회전시킵니다. (단위 : +/- 각도(deg))
  12. rotateZ(z) : 요소를 Z축으로 z각도 회전시킵니다. (단위 : +/- 각도(deg))

transform 3D 속성

CSS3 2D transform에서 설명한 부분은 제외합니다.
transform : none | <transform-function> [ <transform-function> ]*

  1. z축에 대한 이해

    transform 3D에서도 transform 2D의 값은 동일하게 사용됩니다.
    x, y축은 2D와 동일하게 좌/우, 상/하를 의미하며, z축은 사용자와의 거리(3D)를 의미합니다.
    해당 요소의 z값이 양수이면 사용자와 가까워지며(확대와 비슷), 음수이면 사용자와 멀어(축소와 비슷)집니다.

    [3D 효과를 이해하기 위한 x축, y축, z축에 대한 그림]
    3D 효과를 이해하기 위한 x축, y축, z축에 대한 그림
  2. translate3d(x, y, z)

    translate3d(x, y, z) 메소드는 현재 위치에서 해당 요소를 주어진 x축과 y축, z축의 거리만큼 이동시킵니다.
    주어진 거리가 양수이면 해당 축의 양의 방향으로, 음수이면 해당 축의 음의 방향으로 이동시킵니다.

  3. translateZ(tz)

    현재의 위치에서 해당 요소를 주어진 z축의 거리만큼 이동시킵니다.
    값이 클수록 사용자와 가까워집니다.

  4. scale3d(sx, sy, sz)

    해당 요소의 크기를 주어진 배율만큼 x축, y축과 z축 방향으로 늘리거나 줄입니다.

  5. scaleZ(sz)

    scale()의 기능이 해당 요소를 늘리거나 줄이는 것인데 css는 두께의 개념이 없어 z축을 늘어나게 하는 것이 불가능합니다.
    따라서 scaleZ()z축은 그 자체로는 의미가 없습니다.
    perspectivetranslateZ()를 같이 사용해야 목적에 맞는 구현이 가능합니다.

  6. rotate3d(x, y, z, angle)

    해당 요소를 주어진 각도만큼 x축, y축과 z축을 기준으로 회전시킵니다.

    • 3D 공간에서 회전에는 3개의 자유도가 있으며 회전축을 나타냅니다.
    • 회전축은 요소의 원점(transform-origin으로 정의된 값)과 rotate3d(x, y, z, angle)를 통과합니다.
  7. rotateX(angle), rotateY(angle)

    rotateX(angle), rotateY(angle) 메소드는 해당 요소를 주어진 각도만큼 각각의 축(x, y)을 기준으로 회전시킵니다.

    각각의 축이 기준이기 때문에 실제 움직임은 반대로 움직이는 것처럼 보일 수 있습니다.
    예를 들어 물레방아를 물이 내려오는 방향으로 봤을 때 세로(위, 아래)로 방향으로 회전합니다.
    이 물레방아의 움직임을 transform로 표현하려면 rotateX(-angle)를 이용해야 합니다.
    rotateX(-angle)에서 angle을 음수(-)로 선언하면 해당 요소는 가로(x) 축 기준으로 위, 아래의 회전이 됩니다.

  8. rotateZ(angle)

    rotateZ() 메소드는 해당 요소를 주어진 각도만큼 z축을 기준으로 회전시킵니다.

    rotateX(), rotateY()는 각각의 기준 축이 2D(평면의 x, y축) 움직임이 3D입니다.
    반면 rotateZ()는 기준 축이 3D(공간의 z축) 움직임이 2D 입니다.
    모니터에 있는 해당 요소와 사용자(user)간의 수평(수직) 적인 거리가 z축이 됩니다.
    그러므로 rotateZ()의 움직임은 transform 2D의 rotate()와 마찬가지로 angle이 양수이면 시계 방향, 음수이면 반시계 방향으로 움직입니다.

    rotateZ()의 움직임을 예를 들면 팽이가 있습니다.
    땅 바닥을 바라보고 팽이를 돌렸을 때 팽이의 z축은 바닥과 팽이를 바라보는 눈 사이가 되고 팽이는 시계 또는 반시계 방향으로 회전합니다.
    하지만 바닥에 엎드려 회전하고 있는 팽이를 본다면 y축을 기준으로 가로로 회전하는 것을 볼 수 있습니다. 이때 팽이의 움직임은 rotateY()가 됩니다.

  9. matrix3d(n×16)

    4x4 행렬을 이용한 16개의 매개변수로 모든 3D 변형 메소드를 한 번에 설정합니다.

    matrix3d ​​( a1 , b1 , c1 , d1 , a2 , b2 , c2 , d2 , a3 , b3 , c3 , d3 , a4 , b4 , c4 , d4 );

transform-style 속성

요소에 변형을 적용할 때 그 변환이 자식(child) 요소들에게도 적용될지 안 될지를 설정합니다.

  1. flat :

    기본값으로 자식 요소는 2D의 2차원에서 부모 요소와 동일한 평면에 배치됩니다.
    즉, flat이 선언되면 자식은 3D 공간 값을 가지지 못합니다.

  2. preserve-3d :

    자식 요소가 3D 공간에 배치되도록 지정합니다.
    preserve-3d가 선언되면 자식은 부모의 3D 영역을 공유하여 부모의 각도를 기준으로 3D transform 선언이 작동됩니다.

perspective 속성

perspective는 3D 공간에서 요소와 관측 점과의 거리, 즉 원근감을 지정하는 속성입니다.
perspective 속성으로 원근감 지정하는 것과 동일하게 transform 속성의 perspective() 함수로도 지정할 수 있습니다.
이때 속성 값이 작을수록 가깝게 보이고, 클수록 멀게 보입니다.

transform-origin 속성

transform 2D, 3D 구분없이 같은 값을 가집니다.
transform-originCSS transform 속성과 함께 사용되는 속성으로서, rotate(), skew() 등의 회전, 변형 속성의 중심(원점·기준점)점을 지정합니다.
속성의 값은 백분율(%)과 키워드 중 하나로 지정할 수 있습니다.
기본 값은 50% 50%(center center)으로 요소의 가운데(중심) 입니다.
0%는 단위를 생략하고 0으로 지정해도 됩니다. (0% = 0)

backface-visibility(이면가시성) 속성

요소의 앞면만을 표현하고, 뒷면을 표현할지 안 할지를 설정합니다.
backface-visibility 속성은 3D 변형과 연관되어 있으며 입체적인 뒷면의 가시성(뒤집어진 면)을 결정하는 속성입니다.
즉, 변형이 가해져서 요소가 뒤집어 졌을 때, 이 속성으로 숨기거나 보여지게 할 수 있습니다.

  1. visible : 기본값으로 이면(뒷면)을 보여준다. 화면을 마주 보지 않아도 요소가 항상 표시됩니다.
  2. hidden : 뒤집어진 면을 숨깁니다. 화면을 마주 보지 않을 때 요소가 보이지 않습니다.
[ backface-visibility ]
backface-visibility

4.1.4. 3D transform 테스트 및 요약설명

위에 설명된 3D transform의 속성transform-origin, transform-style, perspective, perspective-origin, backface-visibility를 직접 테스트 할 수 있습니다.
각 속성의 input값을 변경하여 마우스오버(hover) 또는 result버튼을 클릭하세요.
테스트기 출처 : http://921430km.com/3d