Как элемент в данном div может иметь
более высокий z-порядок, чем то, что
ставится после этого div? Это просто
игнорирует вложенную иерархию div?
Z-index
только изменяет «слой» (представьте себе Photoshop), на котором отображается элемент. Конструктивно коробочная модель не изменена. Визуально это выглядит так, но только в том случае, если позиционирование элементов было изменено (с помощью CSS), так что z-index
действительно что-то значит. Вот пример ; обратите внимание, как B
появляется над A
и C
событием, хотя C
имеет наибольшее z-index
.
Чтобы изменить z-index
элементов относительно контейнера div
, в котором они содержатся, вы должны убедиться, что самый низкий z-index
в контейнере больше, чем самый большой z-index
вне контейнер. Затем вы настраиваете другие z-index
es для их смещения. Эта функция (использует jQuery) получает элемент с наибольшим значением z-index
из переданных элементов:
function getTopElement(elems){
// Store the greates z-index that has been seen so far
var maxZ = 0;
// Stores a reference to the element that has the greatest z-index so far
var maxElem;
elems.each(function(){
var z = parseInt($(this).css("z-index"), 10);
// Ignore z-index of auto
if (!isNaN(z)){
if (parseInt($(this).css("z-index"), 10) > maxZ) {
maxElem = $(this);
maxZ = parseInt($(this).css("z-index"), 10);
alert (maxZ);
}
}
});
return maxElem;
};
Использование:
var topDiv = getTopElement($("div"));
var topZIndex = topDiv.css("z-index");
Это должно начать вас.
Edit:
Чтобы заполнить пропущенные z-index
es, используйте этот код:
var elements = $("div");
var newZ = parseInt(getTopElement(elements).css("z-index"), 10);
elements.each(function(){
if (isNaN(parseInt($(this).css("z-index"),10))){
$(this).css("z-index", ++newZ);
}
});
Что он делает, так это изменяет элементы с z-index
из auto
на один плюс, независимо от того, какое наибольшее z-index
находится в коллекции (elements
);
Чтобы понять, что я имею в виду, посмотрите это демо .