Старые IE запускают каждый новый позиционный стек с z-индексом 0, если он не установлен (вместо того, чтобы обращать внимание на родительский узел) - в результате последние узлы в разметке всегда затеняют более ранние узлы.
Чтобы заставить старые IE вести себя в подобных случаях, вы должны определить явное значение z-index для всех узлов на самом глубоком уровне вложенности, которые у них всех общие, и они должны опускаться при перемещении по документу.,Как только вы это сделаете, вы можете вытянуть любой элемент из группы впереди всех ее пиров.
Используя небольшую свободу в своем примере для упрощения, скажем, у вас есть разметка, подобная этой:
<div class="container">
<div class="node1">
<div class="child1"></div>
</div>
<div class="node2">
<div class="child2"></div>
</div>
<div class="node3">
<div class="child3"></div>
</div>
</div>
Вы хотели бы z-индексировать элементы "nodeX" в порядке убывания по всей странице (все они должны быть на одном уровне вложенности), а затем вы можете дать их дочерним значениям z-index, что будет иметь смысл.
Ваш базовый CSS будет выглядеть следующим образом:
/* parent nodes in descending order at same nest level */
.node1 { z-index: 99; }
.node2 { z-index: 98; }
.node3 { z-index: 97; }
/* child nodes contain tooltip data, z-index higher than parent */
.child1 { z-index: 101; display: none; }
.child2 { z-index: 101; display: none; }
.child3 { z-index: 101; display: none; }
... и когда вы хотите отобразить один из дочерних элементов в качестве всплывающей подсказки, вам нужно будет установить его родительский z-Индекс выше других родителей.В этом случае мы хотим активировать всплывающую подсказку .child2, которая находится внутри .node2:
.node2 { z-index: 100; }
.child2 { display: block; }
Когда вы устанавливаете .node2 в z-index над всеми другими элементами ".nodeX", он (и его дочерние элементы) должны иметь возможность скрывать узлы на одном и том же уровне вложенности.
Автоматизация процесса
Очевидно, это может быть основной проблемой при настройке... достаточно просто установить несколько ручных записей для чего-то вроде небольшого жестко выпадающего меню, которое должно перекрывать себя, но если вы динамически генерируете страницу, то вы, вероятно, достаточно сообразительны, чтобы использовать javascript, чтобы помочь вам.
Важно то, что все нисходящие значения z-индекса должны быть на одинаковом уровне вложенности в вашем DOM-дереве, я не могу этого подчеркнуть.Чтобы установить нисходящие значения для всех наших элементов nodeX в примере (начиная с 99), я мог бы использовать некоторый код jQuery, подобный этому:
$(document).ready( function() {
var zidx = 99;
$('.container>div').each( function() {
$(this).css('z-index',zidx);
zidx--;
});
});
В основном мы просто перебираем элементы на определенном уровне и даемкаждый последующий элемент - это z-индекс, который на один ниже.Очевидно, вам нужно обратить внимание на количество элементов, которые вы можете использовать, и соответственно выбрать диапазон.