<?xml version='1.0' encoding='UTF-8'?>
<rss version='2.0'>
	<channel>
		<title>Проблема с z-index в IE 6-7</title>
		<link>https://lily-software.com</link>
		<description>Лента комментариев страницы</description>
		<generator>Cotonti</generator>
		<language>ru</language>
		<pubDate>Tue, 30 Jun 2026 06:37:45 +0300</pubDate>

		<item>
			<title>Комментарий пользователя </title>
			<description><![CDATA[В expression'е допущены ошибки. Не работает. Исправьте, пожалуйста.]]></description>
			<pubDate>пт, 24 июн 2011 12:19:02 +0300</pubDate>
			<link><![CDATA[https://lily-software.com/articles/problema-s-z-index-v-ie-6-7#c725]]></link>
		</item>
		<item>
			<title>Комментируемая страница</title>
			<description><![CDATA[<p style="text-align:justify;">
	Известно, что согласно спецификации <a href="https://lily-software.com/go.php?www.w3.org/TR/CSS21/visuren.html#z-index">CSS 2.1</a> каждый позиционируемый блок имеет значение z-index (по умолчанию z-index: auto, что эквивалентно z-index: 0). Чем больше это значение, тем выше элемент по z-оси. При равных значениях z-index, будет показан тот элемент, который по HTML коду ниже. В Internet Explorer версий 6-7 элементы, находящиеся в блоках с position: absolute/relative, не воспринимают z-index. IE6-7 и их Mac версии это правило просто игнорируют:</p>
<p style="margin-left:40px;text-align:justify;">
	* z-index элемента зависит от z-index родителя (и не может быть больше значения родителя в общем потоке);<br />
	* z-index с заданным числом может перекрываться z-index: auto.</p>
<p style="text-align:justify;">
	Например, возьмем 2 блока, идущих друг за другом с position:relative — header и content. В header у нас есть выпадающее меню(menu), которое позиционируется с помошью position:absolute; , и частично перекрывает блок content. Присваиваем menu z-index:1000 (чтобы явно было больше, чем у других блоков) — menu должно быть поверх блока content.</p>
<p>
	 </p>
<p>
	Код HTML:</p>
<p class="code">
	&lt;div class="header"&gt;&lt;div class="menu"&gt;&lt;/div&gt;&lt;/div&gt;<br />
	&lt;div class="content"&gt;&lt;div&gt;</p>
<p>
	Соответствующий код CSS:</p>
<p class="code">
	.headaer {<br />
	    [...]<br />
	    position: relative;<br />
	}<br />
	.menu {<br />
	    [...]<br />
	    position: absolute;<br />
	    z-index: 1000;<br />
	}<br />
	.content {<br />
	    [...]<br />
	    position: relative;<br />
	}</p>
<p>
	 </p>
<p style="text-align:justify;">
	Для того, чтобы меню «выпадало» требуется еще и соответствующий JavaScript, управляющий меню. Будем считать, что он у нас уже есть.</p>
<p>
	 </p>
<p>
	<strong>Результат:</strong></p>
<p>
	 </p>
<p style="text-align:justify;">
	В данном примере в браузерах IE6 и IE7 блок menu не перекрывает блока контента, так как IE принимает во внимание z-index родителей, при чём z-index родителя важнее, чем у данного элемента.</p>
<p>
	В IE меню не перекрыло контент - z-index проигнорирован:</p>
<p>
	<img alt="В IE меню не перекрыло контент - z-index проигнорирован" height="275" src="https://lily-software.com/User_Files/a-n_Files/image/illustratcii/web/z-index-ie.png" width="410" /></p>
<p>
	 </p>
<p>
	В Opera, FireFox с z-index все нормально</p>
<p>
	<img alt="В IE меню не перекрыло контент - z-index проигнорирован" height="275" src="https://lily-software.com/User_Files/a-n_Files/image/illustratcii/web/z-index-ff.png" width="410" /></p>
<p>
	 </p>
<p>
	<strong>Решение:</strong></p>
<p>
	 </p>
<p style="text-align:justify;">
	Явно задаем z-index родителям. При чем z-index родителя, в котором будет всплывающий элемент, должен быть больше, блока, который будет перекрываться:</p>
<p>
	<img alt="Выпадающее меню отображается нормально" height="275" src="https://lily-software.com/User_Files/a-n_Files/image/illustratcii/web/z-index-good.png" width="410" /></p>
<p>
	 </p>
<p>
	Для menu можно и не задавать z-index, но для уверенности все же можно указать.</p>
<p>
	 </p>
<p>
	CSS код:</p>
<p class="code">
	.headaer{<br />
	    [...]<br />
	    position: relative;<br />
	    z-index: 2;<br />
	}<br />
	.menu{<br />
	    [...]<br />
	    position: absolute;<br />
	    z-index: 3;<br />
	}<br />
	.content {<br />
	    [...]<br />
	    position: relative;<br />
	    z-index: 1;<br />
	}</p>
<p>
	 </p>
<p style="text-align:justify;">
	А теперь рассморим ситуацию, когда идет ряд блок друг за другом и в каждом есть появляющийся блок, например в строки таблицы. Придется учитывать чтобы у каждого последующего блока z-слой был ниже, чем у предыдущего:</p>
<p>
	<img alt="" height="275" src="https://lily-software.com/User_Files/a-n_Files/image/illustratcii/web/z-index-lot-blocks.png" width="410" /></p>
<p>
	 </p>
<p style="text-align:justify;">
	Вручную не всегда удастся задать z-index, особенно в тех случаях, когда на перед неизвестно сколько будет блоков. В тах случаях можно использвать javascript.</p>
<p>
	 </p>
<p>
	Ниже пример подобного решения с применением jQuery:</p>
<p class="code">
	$(function() {<br />
	    var zIndexNumber = 1000;<br />
	    $('div').each(function() {<br />
	        $(this).css('zIndex', zIndexNumber);<br />
	        zIndexNumber -= 10;<br />
	    });<br />
	});</p>
<p>
	 </p>
<p>
	Существует и <strong>вариант решения без jQuery</strong>:</p>
<p>
	 </p>
<p>
	Все нормальные браузеры расставят слои и так нормально, а для Internet Explorer можно использовать такой expression:</p>
<p>
	 </p>
<p>
	CSS код:</p>
<p class="code">
	div{<br />
	    behavior:expression(onmouseover=function(){this.className +=" zindex"},onmouseout=function()     this.className=this.className.replace("zindex","")},style.behavior=null);}<br />
	.zindex {<br />
	    z-index:1000;<br />
	}</p>
<p style="text-align:justify;">
	Смысл его в том, что родителю, на который навели мышью, присваиваем z-index больше, чем у остальных блоков. У этого способа есть плюс - не нужно подключать библиотеки или внешние js-файлы.</p>
<p style="text-align:justify;">
	 </p>
]]></description>
			<pubDate>чт, 11 ноя 2010 12:39:00 +0300</pubDate>
			<link><![CDATA[https://lily-software.com/articles/problema-s-z-index-v-ie-6-7]]></link>
		</item>
	</channel>
</rss>