transform 속성은 요소의 자식 요소가 입체적인 3D 공간에 배치 될지, 요소의 표면에 평평하게 묘사할 지를 결정합니다.
기본 값은 "flat"로, 자식 요소는 2D의 2차원에서 부모 요소와 동일한 평면에 배치되지만, "transform-style : preserve-3d;"을 지정하여 3D 공간에 배치되도록 됩니다.
▼ 아래의 애니메이션에서 큰 원(SUN)에 마우스 포인터를 가져다 대 보십시요.
위 예제는 부모 요소(SUN)의 주변에 자식 요소가 2 개(earth와 mars)가 따라 다니고 있는 애니메이션입니다.
먼저 3D 공간의 깊이를 위해 "perspective : 1200px;" 정도로 지정합니다. 또한 3D 공간을 묘사하기 위해서, 부모 요소에 "transform-style : preserve-3d;"를 지정했습니다.
#universe { position: relative; height: 350px; width: 350px; perspective: 1200px; } #sun { position: absolute; width: 300px; height: 300px; border-radius: 50%; background-color: #e4e4e4; border: 20px solid #333; box-shadow: inset 0 2px 45px #7c7c7e; opacity: 0.8; transform-style: preserve-3d; animation: spin 20s linear infinite; }
스폰서 링크
부모 요소에 마우스 오버했을 때 3D 공간에서 2D 평면에 평면 운동을 전환하기 위해 "transform-style : flat;"를 지정했습니다.
부모 요소에 "flat"값을 지정하면 그 자식 요소도 2D 평면으로 평평하게 그려집니다.
#sun:hover { cursor:pointer; transform-style:flat; }
▼ 위의 부모 요소에 지정된 애니메이션 'animation : spin 20s linear infinite;은, 아래와 같이 @keyframes에서 Y축으로 360도 회전시키는 구체적인 움직임을 지정했습니다.
@keyframes spin { 0% { transform: rotateY(0); } 100% { transform:rotateY(360deg); } }
▼ 아래와 같이 부모 요소에 속하는 하위 요소의 박스를 지정합니다. 회전 박스의 중심점을 지정합니다. 여기에서는 기본 값인 '50 % 50 %;(중앙)」으로 지정했습니다.
#sun > div { position: absolute; top: 100px; left: 100px; width: 100px; height: 100px; border-radius: 50%; box-sizing: border-box; transform-origin: 50% 50%; color:#FFF; }
▼ 아래와 같이 자식 요소 2 개를 각각 지정합니다.
#sun > :first-child { background-color: #00c2f2;/*blue(earth)*/ animation: f-childspin 3s linear infinite; } #sun > :last-child { background-color: #f88222;/*orange(mars)*/ animation: l-childspin 1s linear infinite; }
또한, 두 개의 자식 요소에 각각 @keyframes을 사용하여 애니메이션의 구체적인 움직임을 지정합니다. 여기에서는 "translateZ (깊이)"와 "rotateY(Y 축에 대한 회전)" 으로 애니메이션을 붙였습니다.
@keyframes f-childspin { 0% { transform: translateZ(-150px) rotateY(0deg);} 100% { transform:translateZ(-150px) rotateY(360deg);} } @keyframes l-childspin { 0% { transform: translateZ(150px) rotateY(0); } 100% { transform:translateZ(150px) rotateY(-360deg);} }
각 브라우저의 사양이 각각 다르기 때문에, 같은 CSS를 지정해도 브라우저마다 또는 버전에 따라 지원하는 환경이 달라집니다. 그래서 홈페이지에 표시되는 것도 브라우저마다 다를 수 나옵니다.
이를 최대한 억제하고 각 브라우저에서 제대로 표시하기 위해 준비되어 있는 것이 벤더 접두사(vendor prefix)입니다. 이것을 CSS를 쓰고 더하는 것으로 표시의 불안정이 적게되는 것 같습니다.
서서히 브라우저 지원 환경이 개선되고 있기 때문에 시간이 지날수록 벤더 접두사가 필요 없게 되는시기가 올 것입니다. 당분간은 페이지에서 병행하는 것이 좋을지도 모릅니다.
벤더 접두사(vendor prefixes)
div { -webkit-transform-style: preserve-3d; -ms-transform-style: preserve-3d; -moz-transform-style: preserve-3d; -o-transform-style: preserve-3d; transform-style: preserve-3d; }
스폰서 링크
스폰서 링크
Category
TABMODE Copyright©All rights reserved