code

webkit 변환 translate3d 후 css z-index가 손실 됨

codestyles 2020. 8. 27. 07:49
반응형

webkit 변환 translate3d 후 css z-index가 손실 됨


겹치는 두 개의 절대 위치 div 요소가 있습니다. 둘 다 CSS를 통해 Z- 색인 값을 설정했습니다. 내가 사용하는 translate3d웹킷가 화면에 다시 다음 화면 오프 이러한 요소를 애니메이션으로 변환합니다. 변환 후 요소는 더 이상 설정된 z-index값을 따르지 않습니다 .

웹킷 변환을 수행하면 div 요소의 Z- 색인 / 스택 순서가 어떻게되는지 누구든지 설명 할 수 있습니까? 그리고 div 요소의 스택 순서를 유지하기 위해 무엇을 할 수 있는지 설명 하시겠습니까?

변환을 수행하는 방법에 대한 추가 정보가 있습니다.

변환하기 전에 각 요소는 css를 통해 설정된 두 개의 웹킷 전환 값을 가져옵니다 (jQuery를 사용하여 .css()함수 호출 을 수행하고 있습니다.

element.css({ '-webkit-transition-duration': duration + 's' });
element.css({ '-webkit-transition-property': '-webkit-transform' });

그런 다음 translate3d -webkit-transform을 사용하여 요소에 애니메이션을 적용합니다.

element.css({ '-webkit-transform': 'translate3d(' + hwDelta + 'px, 0, -1px)' });

Btw, translate3d3d 공간에서 스택 순서를 복제하기 위해 의 세 번째 매개 변수 를 여러 다른 값으로 설정하려고 시도했지만 운이 좋지 않았습니다.

또한 iPhone / iPad 및 Android 브라우저는이 코드를 실행해야하는 대상 브라우저입니다. 둘 다 웹킷 전환을 지원합니다.


관련 정보 : https://bugs.webkit.org/show_bug.cgi?id=61824

기본적으로 z 축에 3D 변환을 적용하면 Z- 인덱스를 더 이상 고려할 수 없습니다 (이제 3 차원 렌더링 평면에 있으므로 다른 z- 값 사용). 하위 요소에 대해 2D 렌더링으로 다시 전환하려면을 사용하십시오 transform-style: flat;.


이것은 samy-delux가 지적한 버그와 가장 관련이 있습니다. 이것은 절대적 또는 상대적으로 배치 된 모든 요소에만 영향을 미칩니다. 문제를 해결하기 위해 이러한 방식으로 배치되어 문제를 일으키는 모든 요소에 다음 css 문을 적용 할 수 있습니다.

-webkit-transform: translate3d(0,0,0);

이것은 실제로 변환을 수행하지 않고 요소에 변환을 적용하지만 렌더링 순서에 영향을 미치므로 문제를 일으키는 요소 위에 있습니다.


이것에 조금 늦었지만 Z-index를 잃은 요소를 다음과 같이 배치 해보십시오. 최근 시차 작업을 할 때 문제가 있었고 이것이 크게 도움이되었습니다.

transform-style: preserve-3d;

이것은 퍼팅을 저장합니다

transform: translate3d(0,0,0);

GPU에 더 많은 부담을주는 다른 요소


예를보기를 기다리는 중

변환 스케일 (1)을 시도해 보셨습니까? 비슷한 문제가 있었던 것을 기억하고, 요소의 html 순서를 다시 정렬하고 transform 사용의 z-index가 변경 되었기 때문에 필요하지 않은 변환을 활용해야했습니다.

오류가 아니라면 변환을 사용할 때마다 사용 가능한 가장 높은 Z- 색인이되고 태그 시작 부분에 가장 가까운 html 요소로 정렬됩니다. 그래서 아래에서.

이 도움이


z-index 스택 가능한 요소의 스타일을 지정하면 3d 변환 div에 대해 작동합니다. -webkit-transform: translateZ(0px);

codepen의 스 니펫-> http://codepen.io/mrmoje/pen/yLIul

실시 예에서, 상기 버튼 stack upstack down인상과 회전 요소에 대하여 Z 꼬리말의 인덱스 (+/- 1) (이 경우의 IMG)을 하향 조정한다.


여기에 설명하신 문제를 재현 할 수 없었습니다. 내가하는 일에 관계없이 Z- 색인 값은 모든 변환에서 유지됩니다. Chromium (Google Chrome)을 사용하여 테스트 중입니다.

translate3d 함수의 세 번째 인수는 요소의 z 축을 조작합니다. 개념은 Z- 색인과 유사하지만 정확히 동일하지는 않습니다. Z 축이 낮은 요소는 값이 높은 요소 아래에 있습니다.

의도 한 Z- 색인과 일치하기 위해 세 번째 인수의 값을 시도한 것을 알고 있지만 문제는 CSS3 애니메이션 중에 Z 축이 변경되지 않는 것 같습니다. 다음 예에서 마우스로 가리키고있는 요소는 맨 위에 있어야하지만 #element_a는 맨 위에 있습니다.

일반 선택기와 : hover 선택기 모두에 Z- 색인을 추가하면 작동하는 것 같고 마우스를 올린 요소가 최상위가 될 수 있습니다.

정확히 찾고 있던 것은 아니지만이 동작은 해결책을 제공합니다. translate3d 및 z-index를 사용하여 초기 렌더링 순서를 설정하기 만하면됩니다.

<style>
    div {
        width: 300px;
        height: 150px;
        background-color: white;
        border: 5px outset gray;
        float: left;
        margin: 20px;
        -webkit-transition: 2s;
    }

    #element_a {
        -webkit-transform: translate3d(0, 0, 50px);
    }
    #element_b {
        -webkit-transform: translate3d(0, 0, 100px);
    }

    #element_a:hover {
        -webkit-transform: translate3d(100px, 0, 60px);
    }

    #element_b:hover {
        -webkit-transform: translate3d(-100px, 0, -60px);
    }
</style>
<body>
    <div id="element_a">
        <img src="http://www.google.com/intl/en_com/images/srpr/logo3w.png">
    </div>
    <div id="element_b">
        <img src="http://www.google.com/intl/en_com/images/srpr/logo3w.png">
    </div>
</body>

이 문제를 해결하는 또 다른 방법은 부모 요소를 만들고 이와 관련된 다른 모든 전환을 적용하는 것입니다.

# Apply transitions to a parent div
<div>
  # This image z-index -1 
  <img src="foo"/>

  # This image z-index -3
  <img src="bar"/>

  #This image z-index -2
  <img src="gg"/>
</div>

JsFiddle

참고 URL : https://stackoverflow.com/questions/5472802/css-z-index-lost-after-webkit-transform-translate3d

반응형