2016-09-13 2 views
1

상단 및 하단 요소 (div)가있는 웹 앱이 있는데 둘 다 position: fixed입니다. 이들 요소는 각각 position: fixed의 하위 요소 (팝업)를 가지고 있습니다.부모가 고정 위치에있는 요소로 z- 색인이 작동하지 않습니다.

위의 팝업을 상위 요소에 배치하려고합니다. 그러나 position: fixed을 사용하고 있기 때문에 부모로부터 상속되기 때문에 z-index 속성이 작동하지 않습니다.

비슷한 문제가 스택 오버플로에서 발생했음을 알았지 만 그 중 어느 것도이 문제에 대한 해결책을 제공하지 못했습니다. https://jsfiddle.net/pLsdspon/

<html> 
 
<head></head> 
 
<body style="height: 100%;"> 
 

 
    <div style=" 
 
     background-color: red; 
 
    \t position: fixed; 
 
    \t display: block; 
 
    \t width: 100%; 
 
    \t height: 50%; 
 
    \t top: 0%; \t \t \t 
 
    \t z-index: 2; "> 
 
Top 
 
    <div style=" \t \t \t 
 
    \t \t background-color: pink; 
 
    \t \t position: fixed; 
 
    \t \t display: block; 
 
    \t \t width: 80px; 
 
    \t \t height: 200px; 
 
    \t \t top: 40%; 
 
    \t \t left: 100px; 
 
    \t \t z-index: 20; "> 
 
     PopUp-Top - Need to be on top! 
 
    </div> 
 
    </div> 
 

 
    <div style=" 
 
    \t background-color: green; 
 
    \t position: fixed; 
 
    \t display: block; 
 
    \t width: 100%; 
 
    \t height: 50%; 
 
    \t top: 50%; 
 
    \t z-index: 2; "> 
 
Bottom 
 
    <div style=" \t \t 
 
    \t \t background-color: lightgreen; 
 
    \t \t position: fixed; 
 
    \t \t display: block; 
 
    \t \t width: 80px; 
 
    \t \t height: 200px; 
 
    \t \t top: 40%; 
 
    \t \t left: 200px; 
 
    \t \t z-index: 20; "> 
 
     PopUp-Bottom - Need to be on top! 
 
    </div> 
 
    </div> 
 
</body> 
 
</html>

+1

*'Z- 인덱스 : 1' * 당신의 녹색 DIV합니다. – vivekkupadhyay

+0

# vivekkupadhya - 녹색 요소 Z- 색인을 1로 설정하면이 문제가 해결되지 않으며 두 번째 팝업은 –

+0

아래에 표시됩니다. z- 색인은 형제와 만 작동하므로 팝업이 같은 수준에 있지 않으면 머리글 또는 바닥 글을 겹치게 할 때 부모 Z- 색인에 의해 정의됩니다. 팝업 인 경우 (즉, 표시/숨기기를 위해 일종의 j를 사용하는 경우), 팝업 표시를 설정하는 동시에 부모의 Z- 색인을 변경해야합니다. – Pete

답변

0

간단한 해결책은 내가 할 노력하고있어하는 시뮬레이션 때문이다) 배너와 같은 스타일을 사용 가연성이 없다.

대답은 #Krypton에 의해 실제로 HTML을 변경하여이 문제를 해결하지만 내 상황에서는 HTML 순서를 변경할 수 없습니다.

요소의 순서는 스택 순서 호출, 적층 순서는 다음
1에는 Z- 색인 또는 위치가 그 적층 순서는 HTML 태그 순서와없는 경우.
2. 모든 배치 된 요소 (relative, absolutefixed)는 위치가 지정되지 않은 요소 (static)의 위에 나타납니다.
3. z-index는 위치 지정된 요소에서만 작동하며 스태킹 컨텍스트를 만듭니다.
1. 루트 문서 요소합니다 (<html> 요소) : 다음 조건 중 하나를 충족하는 경우

스태킹 컨텍스트 일반적인 부모 요소의
그룹 스태킹 컨텍스트을 만들 수 있습니다.
2. Z- 인덱스가있는 위치 지정 요소
3.불투명도 이하 1 와 요소 (이것은 웹의 대부분의 개발자에 의해 알려져 있지 않다) 스태킹 문맥에서
모든 요소가 의미 적층 순서로 함께 이동
그 요소 a 경우 수 컨텍스트 A 설시 안쪽 ''이인 스테이징 컨텍스트 b보다 위에 있으면 B의 스태킹 순서가 더 높은 경우, 요소 'a'의 Z- 인덱스가 백만에 속하는 경우에도 마찬가지입니다.

업데이트 : 스태킹 컨텍스트를 만드는 새로운 CSS 역할 : transform, filter, css-regionpages_media.

스태킹 컨텍스트 내의 순서 :
1 루트 요소 제외 Z- 색인
2 위치 소자.
3. html 마크 업의 순서로 배치 된 요소 없음
4. 배치 된 요소
5. z- 인덱스에 따라 z- 인덱스가있는 위치 지정된 요소. 그들이 위치 (고정) 및 Z 인덱스가되므로

  • 이제 다시 질문이 예에서는 적색 및 녹색 모두 DIV 적층 컨텍스트를 생성한다.
  • 둘 다 동일한 Z- 색인 (값 2)을 갖기 때문에 HTML 마크 업 순서이므로 녹색 아래에 빨간색이 쌓입니다.
  • 이제 분홍색과 밝은 녹색 요소를 살펴 보겠습니다. 빨간색 요소는 녹색보다 더 낮은 계단 차수를 가지므로 녹색 요소 내부의 빨간색 요소와 밝은 녹색 요소 내에 중첩됩니다. 빨간색 요소는 녹색 요소 내부의 모든 요소 아래에 나타납니다.

이 문제를 해결하려면 적색 및 녹색 div보다 더 높은 스태킹 순서로 새로운 스태킹 컨텍스트를 만들고 해당 요소 안에 팝업을 배치해야하는 새 요소를 만들어야합니다.

참조 : 아무도 필립 월튼에 의해 Z-지수에 대해 말한 적이 무엇 : 한편 변화에 https://philipwalton.com/articles/what-no-one-told-you-about-z-index/

+0

내 대답은 코드 아래의 대체 솔루션을 읽었습니까? div를 완전히 새로운 div로 감싸면 원하는대로 'z-index'를 사용할 수 있습니다.) – Krypton

1

z-index 당신이 있기 때문에 당신이 사업부 내에서 사업부를 중첩하지 있기 때문에 당신이 원하는 방식으로 작동하지 않습니다 :

는에서 HTML/CSS를 참조하십시오 위치는 고정으로 설정됩니다. 그냥 다른 사람의 바깥 쪽 (온탑)에 팝업 div을 두지 않으시겠습니까? 당신은 배너 및 팝업 div의 당신이 더미 div 만들 수 있습니다 내부에 서로 '의 두 주위들, 그 방법을 모두 싶습니다 양자 택일 경우에도

https://jsfiddle.net/7efx38um/1/

<html> 
 
<head></head> 
 
<body style="height: 100%;"> 
 

 
\t <div style=" 
 
\t \t \t background-color: red; 
 
\t \t \t position: fixed; 
 
\t \t \t display: block; 
 
\t \t \t width: 100%; 
 
\t \t \t height: 50%; 
 
\t \t \t top: 0%; \t \t \t 
 
\t \t \t z-index: 1; 
 
\t \t \t "> 
 
\t \t \t Top 
 
\t </div> 
 
\t \t <div style=" \t \t \t 
 
\t \t \t background-color: pink; 
 
\t \t \t position: fixed; 
 
\t \t \t display: block; 
 
\t \t \t width: 80px; 
 
\t \t \t height: 200px; 
 
\t \t \t top: 40%; 
 
\t \t \t left: 100px; 
 
\t \t \t z-index: 20; 
 
\t \t \t "> 
 
\t \t \t PopUp-Top - Need to be on top! 
 
\t \t </div> 
 
\t \t 
 

 
\t 
 
\t <div style=" 
 
\t \t \t background-color: green; 
 
\t \t \t position: fixed; 
 
\t \t \t display: block; 
 
\t \t \t width: 100%; 
 
\t \t \t height: 50%; 
 
\t \t \t top: 50%; 
 
\t \t \t z-index: 1; 
 
\t \t \t "> 
 
\t \t \t Bottom 
 
\t \t \t \t </div> 
 
\t \t <div style=" \t \t 
 
\t \t \t background-color: lightgreen; 
 
\t \t \t position: fixed; 
 
\t \t \t display: block; 
 
\t \t \t width: 80px; 
 
\t \t \t height: 200px; 
 
\t \t \t top: 40%; 
 
\t \t \t left: 200px; 
 
\t \t \t z-index: 20; 
 
\t \t \t "> 
 
\t \t \t PopUp-Bottom - Need to be on top! 
 
\t \t </div> 
 

 
\t 
 

 
</body> 
 
</html>
팝업을하지 않습니다

'

+1

# 크립톤 - "위치가 고정되어 있기 때문에가 아니라 div 내에서 div를 중첩하기 때문에 Z- 색인이 작동하지 않습니다."-이 줄이 잘못되었습니다.z-index는 중첩 된 div 내부에서 작동하지만, 고정 된 위치를 사용하면 모든 자식 요소가 기본 요소의 z- 인덱스를 상속받습니다 (고정 된 위치에 있음) –

+0

'z- 인덱스'에 대한 귀하의 말은 맞지만, 문제는 다른 div에 중첩 된 위치가 아니라 div입니다. 만약 당신이 div를 함께 중첩 할 수없는 것보다'z-index'를 유지하면서 고정 된 위치를 사용해야한다면, 간단합니다. 문제는 div의 고정 된 위치가 필요한 경우입니다! "작동하지 않는다"라는 말은 Z- 인덱스가 전혀 작동하지 않는다는 의미가 아닙니다. 원하는 방식으로 작동하지 않는다는 의미입니다. 그 대답이 분명하지 않다면 내 대답을 편집했습니다. 두 사람이 당신에게 똑같은 말을했습니다. 듣는 것이 현명 할 수도 있습니다. – Krypton

관련 문제