2016-07-06 4 views
2

CSS의 "3D"세계가 실제로 무엇인지 이해하려고합니다. 나는 나를 가장입니다 버그 간단한 example변환 및 스태킹 순서

특히 코드를 만들어 :

.back { 
    background-color: tomato; 
    transform: rotateY(180deg); 
    z-index: 1; 
} 

나에게 분명하지 않다 건은 왜 .inner 위에 마우스를 할 때, 그 배경 색상 (금) 보이지 않습니까 ?? .back에서 transform 속성을 제거하거나 rotateY를 0으로 설정하면 .inner의 금색 배경색이 선명하게 표시됩니다. .back의 변형 속성이 겹침 순서를 변경하는 이유는 무엇입니까?

논리적으로 어린이 (. front 및 .back)가 부모 (.inner) 앞에 나타나야한다는 의미입니다.

또한 변형 스타일을 평면으로 설정하면 실제로 어떤 일이 발생하는지 알고 싶습니다. 그것은 부모와 모든 자녀를 가장 높은 스태킹 순서를 갖는 요소가 우선 순위/가시성을 갖는 단일 "단위"로 붕괴 시키게합니까? 코드에서

+0

이 데모는 http://codepen.io/anon/pen/QErrNm에서 더 잘 설명합니다. 이번에는 z-index 대신 translateZ를 사용했습니다. .back 위에 마우스를 가져갈 때 .back이 부모 앞에서 나타나는 이유는 분명하지 않습니다. – Tosheen

+0

당신은 이것을 기대하고 있을지도 모른다 http://codepen.io/anon/pen/kXopkW – vals

+0

네, 그게 내가 성취하고자했던 것입니다. rotateY 다음에 translateZ를 움직일 때 왜 다르게 동작하는지 설명해 주시겠습니까? 또한 어떻게 Z- 인덱스 대신 translateZ를 사용하도록 수정 될 수 있습니까? 감사합니다 – Tosheen

답변

1

: 당신이

transform: rotateY(180deg) translateZ(10px); 

변환은 오른쪽에서 왼쪽으로 적용을 사용하는

.outer { 
 
    display: block; 
 
    width: 200px; 
 
    height: 200px; 
 
    border: 2px solid gold; 
 
    perspective: 1000px; 
 
    padding: 10px; 
 
    margin: 0 auto; 
 
} 
 

 
.inner { 
 
    position: relative; 
 
    height: 100%; 
 
    width: 100%; 
 
    transition: transform 2s linear; 
 
    transform-style: preserve-3d; 
 
    background-color: gold; 
 
    backface-visibility: visible; 
 
    transform: rotateY(50deg); 
 
} 
 

 
.sides { 
 
    position: absolute; 
 
    width: 100%; 
 
    height: 100%; 
 
    left: 0; 
 
    top: 0; 
 
    color: white; 
 
    backface-visibility: hidden; 
 
} 
 

 
.front { 
 
    background-color: blue; 
 
    transform: translateZ(20px) 
 
} 
 

 
.back { 
 
    background-color: tomato; 
 
    transform: rotateY(180deg) translateZ(10px); 
 
} 
 

 
.inner:hover { 
 
    transform: rotateY(180deg) 
 
}
<div class="outer"> 
 
    <div class="inner"> 
 
    <div class="sides front">Front Side</div> 
 
    <div class="sides back">Back Side</div> 
 
    </div> 
 
</div>

, 그래서 먼저 전면 10px로 이동합니다. 그러나 그 후 180도 회전합니다. (상수 인 변환 원점 주변). 그러면 이전 10 픽셀이 앞으로가 아닌 뒤쪽으로 이동합니다.

순서는 이제 회전이 먼저 수행 역

transform: translateZ(10px) rotateY(180deg); 

이기 때문에 그것을 번역하여 unafected이고 전방으로 이동하는 경우. 당신이 3D 변환을 사용하려면

없음, 죄송합니다, Z- 인덱스는, 3 차원 변환을위한 대체하지 않습니다, 번역은 .... 처음에

갈 수있는 유일한 방법입니다 쉽게

codepen with z-index removed

당신이

backface-visibility: hidden; 
,691,363 설정되어 있기 때문에이 작동 볼 수있는 예는, Z-지수는 쓸모가210

앞면을 향하고있는 얼굴 만 볼 수 있습니다.

+0

고마워요. 그것의 명확하고 그것은 이해된다. Z- 색인에 관한 한 가지 더. 첫 번째 예제에서는 translateZ가 사용되지 않고 z-index 만 사용됩니다. 왜 .back이 앞에 표시되는지 궁금합니다.그 요소 위에 마우스를 가져갈 때 내부? 고맙습니다 Vals, 나는 새로운 (bie) 사용자입니다. 그래서 당신이 그것을받을 자격이 있다고하더라도 나는 당신의 응답을 upvote 할 수 없습니다. – Tosheen

+0

답변에 대한 추가 설명 ... – vals

+0

감사합니다. .inner는 마우스를 올리면 회전되며 뒷면이 보이게 표시되어 있습니다. 회전했을 때 금색 배경이 표시되지 않는 이유는 무엇입니까? – Tosheen