Я выделил небольшой контрольный пример z-index
ошибки IE7 , но не знаю, как ее исправить. Я играл z-index
весь день.
Что не так с z-index
IE7?
Тест CSS:
input {
border: 1px solid #000;
}
div {
border: 1px solid #00f;
}
ul {
border: 1px solid #f00;
background-color: #f00;
list-style-type: none;
margin: 0;
padding-left: 0;
z-index: 1000;
}
li {
color: #fff;
list-style-type: none;
padding-left: 0;
margin-left: 0;
}
span.envelope {
position: relative;
}
span.envelope ul {
position: absolute;
top: 20px;
left: 0;
width: 150px;
}
Тест HTML:
<form>
<label>Input #1:</label>
<span id="envelope-1" class="envelope">
<input name="my-input-1" id="my-input-1" />
<ul>
<li>item</li>
<li>item</li>
<li>item</li>
<li>item</li>
</ul>
</span>
<br><br>
<label>Input #2:</label>
<span id="envelope-2" class="envelope">
<input name="my-input-2" id="my-input-2" />
</span>
</form>
Ответы:
Z-индекс не является абсолютным измерением. Элемент с z-index: 1000 может находиться позади элемента с z-index: 1 - до тех пор, пока соответствующие элементы принадлежат разным контекстам стека .
Когда вы указываете z-index, вы указываете его относительно других элементов в том же контексте стека, и хотя в параграфе спецификации CSS на Z-index говорится, что новый контекст стека создается только для позиционированного контента с z-индексом, отличным от auto (то есть весь ваш документ должен представлять собой единый контекст стекирования), вы создали позиционированный диапазон: к сожалению, IE7 интерпретирует позиционированный контент без z-index как новый контекст стека.
Короче, попробуйте добавить этот CSS:
или измените дизайн документа так, чтобы ваши промежутки больше не имели позиции: относительный:
См. Http://www.brenelz.com/blog/2009/02/03/squish-the-internet-explorer-z-index-bug/ для аналогичного примера этой ошибки. Причина, по которой родительский элемент (в нашем примере - конверт-1) работает с более высоким z-индексом, заключается в том, что тогда все дочерние элементы конверта-1 (включая меню) будут перекрывать всех братьев и сестер конверта-1 (в частности, конверт-2).
Хотя z-index позволяет вам явно определить, как все перекрывается, даже без z-index порядок наложения четко определен . Наконец, в IE6 есть дополнительная ошибка, из-за которой селекторы и фреймы плавают поверх всего остального.
источник
http://www.vancelucas.com/blog/fixing-ie7-z-index-issues-with-jquery/
источник
Попробуйте дать родительскому элементу более высокое значение z-index (может быть даже выше, чем само значение дочернего z-index), чтобы исправить ошибку.
источник
Я столкнулся с этой проблемой, но в большом проекте, где нужно было запрашивать изменения HTML, и он стал целой проблемой, поэтому я искал чисто CSS-решение.
При размещении
position:relative; z-index:-1
основного содержимого моего тела выпадающий заголовок неожиданно отображался над содержимым основного текста в ie7 (он уже отображался без проблем во всех других браузерах и в ie8 +)Проблема с этим заключалась в том, что это отключало все действия при наведении и щелчке для всего содержимого в элементе,
z-index:-1
поэтому я перешел к родительскому элементу всей страницы и дал емуposition:relative; z-index:1
Что решило проблему и сохранило правильную функциональность наслоения.
Чувствует себя немного хакером, но работал как надо.
источник
Я обнаружил, что мне нужно было поместить специальное обозначение z-index на div в таблице стилей ie7:
div {z-index: 10; }
Для показа z-index несвязанных элементов div, таких как nav, над ползунком. Я не мог просто добавить z-index в сам div слайдера.
источник
html {z-index:1; position:relative;}
что меню позволяет просматривать карусель в IE.Если ранее упомянутое более высокое z-индексирование в родительских узлах не соответствует вашим потребностям, вы можете создать альтернативное решение и нацелить его на проблемные браузеры либо с помощью условных комментариев IE, либо с помощью (более идеалистической) функции обнаружения, предоставляемой Modernizr.
Быстрый (и явно работающий) тест для Модернизра:
источник
Это выглядит не как ошибка ie, просто для различного понимания стандарта css. Если вне контейнера не указан z-индекс, но во внутреннем элементе указан более высокий z-индекс. Так что брат и сестра контейнера могут перекрывать элемент с высоким z-индексом. Даже если это так, это происходит только в IE7, но IE6, IE8 и Firefox в порядке.
источник
В целом, в IE6 определенные элементы пользовательского интерфейса реализованы с собственными элементами управления. Эти элементы управления отображаются в совершенно отдельной фазе (окно?) И всегда отображаются над любыми другими элементами управления, независимо от z-индекса. Селект-боксы - еще один такой проблемный элемент управления.
Единственный способ обойти эту проблему - создать контент, который IE отображает как отдельное «окно» - т.е. вы можете поместить поле выбора над текстовым полем или, что более полезно, iframe.
Короче говоря, вам нужно помещать такие элементы, как меню, в iframe, чтобы позволить IE размещать эти элементы управления над встроенным пользовательским интерфейсом.
Это должно было быть исправлено в IE7 (см. Http://blogs.msdn.com/ie/archive/2006/01/17/514076.aspx ), но, возможно, вы работаете в каком-то режиме совместимости?
источник
Эта ошибка кажется чем-то отдельным, чем стандартная ошибка IE в отдельном контексте стека. У меня была похожая проблема с несколькими стековыми входами (по сути, таблица с автозаполнением в каждой строке). Единственное решение, которое я нашел, - дать каждой ячейке уменьшающееся значение z-index.
источник
Если вы хотите создать выпадающее меню и иметь проблему с z-index, вы можете решить ее, создав z-index с одинаковым значением (z-index: 999; например). Просто поместите z-index в родительские и дочерние div и это решит проблему. Я решаю проблему с этим. Если я добавлю разные z-индексы, конечно, он покажет мой дочерний div поверх моего родительского div, но, как только я захочу переместить мою мышь с вкладки меню в div подменю (выпадающий список), он исчезнет ... затем я ставлю z-индексы одинакового значения и решаю проблему ..
источник
Я решил это, используя инструменты разработчика для IE7 (панель инструментов) и добавив отрицательный z-индекс в контейнер div, который будет ниже другого div.
источник