Ответ 1
Если элементы создают иерархию, это невозможно сделать, потому что каждый позиционированный элемент создает новый контекст стекирования, а z-index - относительно элементов одного и того же контекста стекирования.
Мне нужен определенный динамический элемент, чтобы он всегда появлялся поверх другого элемента, независимо от того, в каком порядке он находится в дереве DOM. Это возможно? Я пробовал z-index
(с position: relative
), но, похоже, он не работает.
Мне нужно:
<div class="a">
<div class="b"></div>
</div>
<div class="b">
<div class="a"></div>
</div>
Для отображения точно так же, когда отображается. А в целях гибкости (я планирую распространять плагин, который нуждается в этой функциональности), мне бы очень не хотелось прибегать к абсолютному или фиксированному позиционированию.
Чтобы выполнить желаемую функцию, я сделал условное выражение, в котором перекрывающийся дочерний элемент станет прозрачным в случае, если он блокирует представление своего родителя. Это не идеально, но это что-то.
Если элементы создают иерархию, это невозможно сделать, потому что каждый позиционированный элемент создает новый контекст стекирования, а z-index - относительно элементов одного и того же контекста стекирования.
Я нашел способ на самом деле поместить дочерний элемент за его элемент, создав псевдоэлемент, который имитирует родительский элемент. Полезно для таких вещей, как выпадающие меню - надеюсь, это поможет, пользователь из восьми лет назад!
div {
position: relative;
}
.container > div {
float: left;
background-color: red;
width: 150px;
height: 50px;
z-index: 10;
}
.container > div:before {
content: '';
display: block;
position: absolute;
height: 100%;
width: 100%;
background-color: red;
z-index: 7;
top: 10px;
}
.a > .b, .b > .a {
z-index: 5;
position: absolute;
width: 100%;
height: 100%;
background-color: teal;
}
.a + .b {
margin-left: 20px;
}
<div class="container">
<div class="a">
<div class="b"></div>
</div>
<div class="b">
<div class="a"></div>
</div>
</div>
У меня был успех, используя следующие.
z-index: -1;
вам нужно position: absolute
, чтобы z-index работал.
также вам необходимо установить свойства left
и top
css, чтобы поместить элемент в нужное место. Вам, вероятно, понадобится сделать это с помощью javascript.