Естественным решением CSS является:
- Убедитесь, что «диалоговое окно» получает контекст стекирования.Это можно сделать с помощью
- , установив
z-index
в значение, отличное от auto
, - и дополнительно
position
в relative
, absolute
или fixed
.
- Затем добавьте всплывающее окно в качестве дочернего в «диалоговое окно».Если это еще не так, вы всегда можете переместить его в DOM.
В этом случае ваше всплывающее окно вообще не нуждается в z-index
.Это полностью исключает «ад z-index».
Пример:
<!doctype html>
<html>
<head>
<style type="text/css">
#dialogbox {
width: 400px; height: 300px;
top: 0; left: 0;
background-color: red;
}
#popup {
width: 500px; height: 200px;
top: 0; left: 0;
background-color: green;
}
</style>
</head>
<body>
<div id="dialogbox" style="z-index: 100; position: absolute;">
<div>
<div id="widgetThatCausesThePopup" >
<button>Show popup</button>
</div>
</div>
<div id="popup" style="position: absolute;">
<!-- Empty divs cause really weird problems.
Always make sure, that your divs aren't empty! -->
</div>
</div>
</body>
</html>
Контекст стека даже позволяет использовать z-индексы относительно контекста, если они вам нужны (примечание, что дочерний порядок не имеет значения, и z-индексы не должны быть больше 100):
<div id="dialogbox" style="z-index: 100; position: absolute;">
<div id="popup" style="position: absolute; z-index: 2;">
<!-- Empty divs cause really weird problems.
Always make sure, that your divs aren't empty! -->
</div>
<div>
<div id="widgetThatCausesThePopup" style="position: absolute; z-index: 1;">
<button>Show popup</button>
</div>
</div>
</div>