<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Ars Longa, Vita Brevis &#187; IE6</title>
	<atom:link href="http://blog.sjinks.pro/tag/ie6/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.sjinks.pro</link>
	<description>Quod scripsi, scripsi</description>
	<lastBuildDate>Mon, 06 Feb 2012 17:56:02 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Пять звёздочек без JavaScript</title>
		<link>http://blog.sjinks.pro/css/173-five-stars-without-javascript/</link>
		<comments>http://blog.sjinks.pro/css/173-five-stars-without-javascript/#comments</comments>
		<pubDate>Fri, 30 May 2008 19:26:35 +0000</pubDate>
		<dc:creator>Vladimir</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[IE6]]></category>
		<category><![CDATA[usability]]></category>
		<category><![CDATA[XHTML]]></category>

		<guid isPermaLink="false">http://blog.sjinks.pro/?p=173</guid>
		<description><![CDATA[Кросс-браузерный вариант реализации механизма рейтинга без использования JavaScript Прочитал сегодня статью "Пять звёздочек" на Pepelsbey.net. Автор описывает очень интересный подход для реализации механизма рейтингов; основное преимущество описываемого подхода&#160;&#8212;&#160;минимум JavaScript за счет грамотного использования CSS. Решение Вадима основано на использовании CSS&#160;rollovers, плавающих элементах и z-index и выглядит очень красиво. Особенно меня впечатлило то, что его решение [...]<p>© 2012 <a href="http://blog.sjinks.pro">Ars Longa, Vita Brevis</a>. Все права защищены. Перепубликация материалов без разрешения автора запрещена.</p>
<p>При использовании материалов блога наличие активной не закрытой от индексирования ссылки на <a href="http://blog.sjinks.pro/css/173-five-stars-without-javascript/">источник</a> обязательно.</p>]]></description>
			<content:encoded><![CDATA[<h2><em>Кросс-браузерный вариант реализации механизма рейтинга без использования <a href="http://blog.sjinks.pro/tag/javascript/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  JavaScript">JavaScript</a></em></h2>
<p>Прочитал сегодня статью "<a href="http://pepelsbey.net/2008/05/five-stars/" rel="nofollow">Пять звёздочек</a>" на <a href="http://pepelsbey.net/" rel="nofollow">Pepelsbey.net</a>. Автор описывает очень интересный подход для реализации механизма рейтингов; основное преимущество описываемого подхода&nbsp;&mdash;&nbsp;минимум JavaScript за счет грамотного использования <a href="http://blog.sjinks.pro/tag/css/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  CSS">CSS</a>.<span id="more-173"></span></p>
<p>Решение Вадима основано на использовании CSS&nbsp;rollovers, плавающих элементах и <code>z-index</code> и выглядит очень красиво. Особенно меня впечатлило то, что его решение будет работать с выключенной загрузкой изображений и отключенным CSS. Весьма приятно, ибо о <a href="http://blog.sjinks.pro/tag/usability/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  usability">usability</a> отечественные разработчики задумываются далеко не всегда.</p>
<p>Среди недостатков отмечу следующие:</p>
<ol>
<li>При использовании <a href="http://blog.sjinks.pro/tag/ie6/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  IE6">IE6</a> с выключенным JavaScript вся красота перестаёт работать (оффтопик: не могу понять, по каким причинам народ до сих пор сидит на <a href="http://blog.sjinks.pro/tag/ie6/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  IE6">IE6</a>?)</li>
<li>Некоторое неудобство при изменении шкалы: например, если изменить код так, чтобы можно было учитывать полбалла, то помимо ширин придется менять и <code>z-index</code> каждого элемента <code>a</code>. Хотя, в принципе, это мелочь.</li>
</ol>
<p>Полгода назад я какое-то работал над проектом myfolio.com, там тоже применялось пятизвёздочное голосование (правда, принцип несколько другой). Считая, что тот подход тоже имеет право жить <img src='http://static.sjinks.info/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> , привожу его здесь.</p>
<p>Разметка очень проста:</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p1733">
        <div class="code html" id="p173code3">
&nbsp; &nbsp; <span class="sc-2">&lt;!--[if lte IE 6]&gt;&lt;a class=&quot;ievote&quot; href=&quot;#&quot;&gt;&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;![endif]--&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">ul</span> <span class="kw3">class</span><span class="sy0">=</span><span class="st0">&quot;vote&quot;</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">li</span> <span class="kw3">class</span><span class="sy0">=</span><span class="st0">&quot;ten&quot;</span>&gt;&lt;<span class="kw2">a</span> <span class="kw3">href</span><span class="sy0">=</span><span class="st0">&quot;#rated=10&quot;</span> <span class="kw3">title</span><span class="sy0">=</span><span class="st0">&quot;5 stars&quot;</span>&gt;</span>5.0<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">a</span>&gt;&lt;<span class="sy0">/</span><span class="kw2">li</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">li</span> <span class="kw3">class</span><span class="sy0">=</span><span class="st0">&quot;nine&quot;</span>&gt;&lt;<span class="kw2">a</span> <span class="kw3">href</span><span class="sy0">=</span><span class="st0">&quot;#rated=9&quot;</span> <span class="kw3">title</span><span class="sy0">=</span><span class="st0">&quot;4.5 stars&quot;</span>&gt;</span>4.5<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">a</span>&gt;&lt;<span class="sy0">/</span><span class="kw2">li</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">li</span> <span class="kw3">class</span><span class="sy0">=</span><span class="st0">&quot;eight&quot;</span>&gt;&lt;<span class="kw2">a</span> <span class="kw3">href</span><span class="sy0">=</span><span class="st0">&quot;#rated=8&quot;</span> <span class="kw3">title</span><span class="sy0">=</span><span class="st0">&quot;4 stars&quot;</span>&gt;</span>4.0<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">a</span>&gt;&lt;<span class="sy0">/</span><span class="kw2">li</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">li</span> <span class="kw3">class</span><span class="sy0">=</span><span class="st0">&quot;seven&quot;</span>&gt;&lt;<span class="kw2">a</span> <span class="kw3">href</span><span class="sy0">=</span><span class="st0">&quot;#rated=7&quot;</span> <span class="kw3">title</span><span class="sy0">=</span><span class="st0">&quot;3.5 stars&quot;</span>&gt;</span>3.5<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">a</span>&gt;&lt;<span class="sy0">/</span><span class="kw2">li</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">li</span> <span class="kw3">class</span><span class="sy0">=</span><span class="st0">&quot;six&quot;</span>&gt;&lt;<span class="kw2">a</span> <span class="kw3">href</span><span class="sy0">=</span><span class="st0">&quot;#rated=6&quot;</span> <span class="kw3">title</span><span class="sy0">=</span><span class="st0">&quot;3 star&quot;</span>&gt;</span>3.0<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">a</span>&gt;&lt;<span class="sy0">/</span><span class="kw2">li</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">li</span> <span class="kw3">class</span><span class="sy0">=</span><span class="st0">&quot;five&quot;</span>&gt;&lt;<span class="kw2">a</span> <span class="kw3">href</span><span class="sy0">=</span><span class="st0">&quot;#rated=5&quot;</span> <span class="kw3">title</span><span class="sy0">=</span><span class="st0">&quot;2.5 stars&quot;</span>&gt;</span>2.5<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">a</span>&gt;&lt;<span class="sy0">/</span><span class="kw2">li</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">li</span> <span class="kw3">class</span><span class="sy0">=</span><span class="st0">&quot;four&quot;</span>&gt;&lt;<span class="kw2">a</span> <span class="kw3">href</span><span class="sy0">=</span><span class="st0">&quot;#rated=4&quot;</span> <span class="kw3">title</span><span class="sy0">=</span><span class="st0">&quot;2 stars&quot;</span>&gt;</span>2.0<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">a</span>&gt;&lt;<span class="sy0">/</span><span class="kw2">li</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">li</span> <span class="kw3">class</span><span class="sy0">=</span><span class="st0">&quot;three rated&quot;</span>&gt;&lt;<span class="kw2">a</span> <span class="kw3">href</span><span class="sy0">=</span><span class="st0">&quot;#rated=3&quot;</span> <span class="kw3">title</span><span class="sy0">=</span><span class="st0">&quot;1.5 stars&quot;</span>&gt;</span>1.5<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">a</span>&gt;&lt;<span class="sy0">/</span><span class="kw2">li</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">li</span> <span class="kw3">class</span><span class="sy0">=</span><span class="st0">&quot;two&quot;</span>&gt;&lt;<span class="kw2">a</span> <span class="kw3">href</span><span class="sy0">=</span><span class="st0">&quot;#rated=2&quot;</span> <span class="kw3">title</span><span class="sy0">=</span><span class="st0">&quot;1 star&quot;</span>&gt;</span>1.0<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">a</span>&gt;&lt;<span class="sy0">/</span><span class="kw2">li</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">li</span> <span class="kw3">class</span><span class="sy0">=</span><span class="st0">&quot;one&quot;</span>&gt;&lt;<span class="kw2">a</span> <span class="kw3">href</span><span class="sy0">=</span><span class="st0">&quot;#rated=1&quot;</span> <span class="kw3">title</span><span class="sy0">=</span><span class="st0">&quot;0.5 stars&quot;</span>&gt;</span>0.5<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">a</span>&gt;&lt;<span class="sy0">/</span><span class="kw2">li</span>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">ul</span>&gt;</span><br />
&nbsp; &nbsp; <span class="sc-2">&lt;!--[if lte IE 6]&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;![endif]--&gt;</span>
        </div>
    </div>
</div>

<p>Про условные комментарии вокруг элемента <code>ul</code> можно прочитать в статье "<a href="http://blog.sjinks.pro/css/49-cross-browser-vertical-menu-without-javascript/">Кросс-браузерное одноуровневое вертикальное меню без JavaScript</a>".</p>
<p>Из особенностей&nbsp;&mdash;&nbsp;нумерация идёт в обратном порядке (это связано отказом от <span class="codebox"><code class="css"><span class="kw1">float</span></code></span> и <span class="codebox"><code class="css"><span class="kw1">z-index</span></code></span>, ибо код в myfolio был гораздо сложнее и с <span class="codebox"><code class="css"><span class="kw1">z-index</span></code></span> возникали некоторые проблемы в IE6).</p>
<p>Теперь самое интересное: стили:</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p1734">
        <div class="code css" id="p173code4">
<span class="re1">.vote</span><span class="sy0">,</span> <span class="re1">.vote</span> li<span class="re1">.rated</span><span class="sy0">,</span> <span class="re1">.vote</span> li a<span class="re2">:hover </span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">background</span><span class="sy0">:</span> <span class="kw2">url</span><span class="br0">&#40;</span><span class="co2">stars.gif</span><span class="br0">&#41;</span> <span class="kw2">no-repeat</span> 0 <span class="nu0">0</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><br />
<br />
<span class="coMULTI">/* Небольшая особенность: если задавать цвет, то картинка не должна быть прозрачной.<br />
Задание цвета используется для тех, кто выключил загрузку изображений в настройках браузера.<br />
В этом случае пользователь увидит нечто наподобие progress bar (но это всё же лучше, чем ничего).<br />
*/</span><br />
<span class="re1">.vote</span> li<span class="re1">.rated</span><span class="sy0">,</span> <span class="re1">.vote</span> li a<span class="re2">:hover </span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">background-color</span><span class="sy0">:</span> <span class="kw2">red</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><br />
<br />
<span class="re1">.vote</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">background-position</span><span class="sy0">:</span> 0 <span class="re3">-14px</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><br />
<br />
<span class="re1">.vote</span><span class="re2">:hover </span>li<span class="sy0">,</span> <span class="re1">.ievote</span><span class="re2">:hover </span>li <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">background</span><span class="sy0">:</span> <span class="kw2">none</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><br />
<br />
<span class="re1">.vote</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">width</span><span class="sy0">:</span> <span class="re3">80px</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">overflow</span><span class="sy0">:</span> <span class="kw2">hidden</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">position</span><span class="sy0">:</span> <span class="kw2">relative</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><br />
<br />
<span class="re1">.vote</span><span class="sy0">,</span> <span class="re1">.vote</span> li<span class="sy0">,</span> <span class="re1">.vote</span> li a <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">height</span><span class="sy0">:</span> <span class="re3">14px</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">display</span><span class="sy0">:</span> <span class="kw2">block</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><br />
<br />
<span class="re1">.vote</span> li <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">position</span><span class="sy0">:</span> <span class="kw2">absolute</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><br />
<br />
<span class="re1">.vote</span><span class="sy0">,</span> <span class="re1">.vote</span> li <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">left</span><span class="sy0">:</span> <span class="nu0">0</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">top</span><span class="sy0">:</span> <span class="nu0">0</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">list-style</span><span class="sy0">:</span> <span class="kw2">none</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">margin</span><span class="sy0">:</span> <span class="nu0">0</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">padding</span><span class="sy0">:</span> <span class="nu0">0</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><br />
<br />
<span class="re1">.vote</span> li a <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">overflow</span><span class="sy0">:</span> <span class="kw2">hidden</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">text-indent</span><span class="sy0">:</span> <span class="re3">-100px</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">outline</span><span class="sy0">:</span> <span class="nu0">0</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><br />
<br />
<span class="coMULTI">/* Задаем ширину каждого балла; каждый последующий балл включает в себя предыдущий*/</span><br />
<span class="re1">.vote</span> li<span class="re1">.one</span> &nbsp; <span class="br0">&#123;</span> <span class="kw1">width</span><span class="sy0">:</span> <span class="re3">7px</span><span class="sy0">;</span> &nbsp;<span class="br0">&#125;</span><br />
<span class="re1">.vote</span> li<span class="re1">.two</span> &nbsp; <span class="br0">&#123;</span> <span class="kw1">width</span><span class="sy0">:</span> <span class="re3">16px</span><span class="sy0">;</span> <span class="br0">&#125;</span><br />
<span class="re1">.vote</span> li<span class="re1">.three</span> <span class="br0">&#123;</span> <span class="kw1">width</span><span class="sy0">:</span> <span class="re3">23px</span><span class="sy0">;</span> <span class="br0">&#125;</span><br />
<span class="re1">.vote</span> li<span class="re1">.four</span> &nbsp;<span class="br0">&#123;</span> <span class="kw1">width</span><span class="sy0">:</span> <span class="re3">32px</span><span class="sy0">;</span> <span class="br0">&#125;</span><br />
<span class="re1">.vote</span> li<span class="re1">.five</span> &nbsp;<span class="br0">&#123;</span> <span class="kw1">width</span><span class="sy0">:</span> <span class="re3">39px</span><span class="sy0">;</span> <span class="br0">&#125;</span><br />
<span class="re1">.vote</span> li<span class="re1">.six</span> &nbsp; <span class="br0">&#123;</span> <span class="kw1">width</span><span class="sy0">:</span> <span class="re3">48px</span><span class="sy0">;</span> <span class="br0">&#125;</span><br />
<span class="re1">.vote</span> li<span class="re1">.seven</span> <span class="br0">&#123;</span> <span class="kw1">width</span><span class="sy0">:</span> <span class="re3">55px</span><span class="sy0">;</span> <span class="br0">&#125;</span><br />
<span class="re1">.vote</span> li<span class="re1">.eight</span> <span class="br0">&#123;</span> <span class="kw1">width</span><span class="sy0">:</span> <span class="re3">64px</span><span class="sy0">;</span> <span class="br0">&#125;</span><br />
<span class="re1">.vote</span> li<span class="re1">.nine</span> &nbsp;<span class="br0">&#123;</span> <span class="kw1">width</span><span class="sy0">:</span> <span class="re3">71px</span><span class="sy0">;</span> <span class="br0">&#125;</span><br />
<span class="re1">.vote</span> li<span class="re1">.ten</span> &nbsp; <span class="br0">&#123;</span> <span class="kw1">width</span><span class="sy0">:</span> <span class="re3">80px</span><span class="sy0">;</span> <span class="br0">&#125;</span><br />
<br />
<span class="coMULTI">/* Для IE6 */</span><br />
<span class="re1">.ievote</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">text-decoration</span><span class="sy0">:</span> <span class="kw2">none</span> !important<span class="sy0">;</span><br />
<span class="br0">&#125;</span>
        </div>
    </div>
</div>

<p>Наконец, <a href="http://blog.sjinks.pro/test/stars/stars.html">страница с рабочим примером</a>.</p>
<p><strong>Достоинства метода:</strong></p>
<ol>
<li>Метод кросс-браузерный, работает даже при отключенной загрузке изображений и выключенном CSS;</li>
<li>Превосходно работает даже при отключённом JavaScript (в том числе, и в IE6);</li>
<li>Благодаря использованию CSS rollover достаточно всего лишь одного HTTP-запроса (в отличие от реализаций, где используются списки с элементами <code>img</code>).</li>
</ol>
<p><a href="http://www.site-creator.info/html/rate/main.html" rel="nofollow">Еще одно красивое решение от site-creator.info</a>.</p>
<p>© 2012 <a href="http://blog.sjinks.pro">Ars Longa, Vita Brevis</a>. Все права защищены. Перепубликация материалов без разрешения автора запрещена.</p>
<p>При использовании материалов блога наличие активной не закрытой от индексирования ссылки на <a href="http://blog.sjinks.pro/css/173-five-stars-without-javascript/">источник</a> обязательно.</p>]]></content:encoded>
			<wfw:commentRss>http://blog.sjinks.pro/css/173-five-stars-without-javascript/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Проблема с плавающими элементами в FireFox и IE6/7</title>
		<link>http://blog.sjinks.pro/css/150-problem-with-floating-elements-in-firefox-and-i6-7/</link>
		<comments>http://blog.sjinks.pro/css/150-problem-with-floating-elements-in-firefox-and-i6-7/#comments</comments>
		<pubDate>Tue, 20 May 2008 10:06:28 +0000</pubDate>
		<dc:creator>Vladimir</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[FireFox]]></category>
		<category><![CDATA[IE6]]></category>
		<category><![CDATA[IE7]]></category>
		<category><![CDATA[ошибка]]></category>

		<guid isPermaLink="false">http://blog.sjinks.pro/?p=150</guid>
		<description><![CDATA[Прав ли FireFox? При решении одной задачи с вертикальным выравниванием и плавающими элементами внутри ячейки таблицы, натолкнулся на одну очень интересную особенность браузеров, построенных на движке Gecko, а также Internet Exploret&#160;6 и&#160;7: плавающие элементы конфликтуют со статическими инлайновыми или псевдо-инлайновыми элементами. Например: &#60;!DOCTYPE html PUBLIC &#34;-//W3C//DTD XHTML 1.0 Strict//EN&#34; &#34;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&#34;&#62; &#60;html xmlns=&#34;http://www.w3.org/1999/xhtml&#34;&#62; &#60;head&#62; &#60;meta http-equiv=&#34;Content-Type&#34; [...]<p>© 2012 <a href="http://blog.sjinks.pro">Ars Longa, Vita Brevis</a>. Все права защищены. Перепубликация материалов без разрешения автора запрещена.</p>
<p>При использовании материалов блога наличие активной не закрытой от индексирования ссылки на <a href="http://blog.sjinks.pro/css/150-problem-with-floating-elements-in-firefox-and-i6-7/">источник</a> обязательно.</p>]]></description>
			<content:encoded><![CDATA[<h2><em>Прав ли <a href="http://blog.sjinks.pro/tag/firefox/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  FireFox">FireFox</a>?</em></h2>
<p>При решении одной задачи с вертикальным выравниванием и плавающими элементами внутри ячейки таблицы, натолкнулся на одну очень интересную особенность браузеров, построенных на движке Gecko, а также Internet Exploret&nbsp;6 и&nbsp;7: плавающие элементы конфликтуют со статическими инлайновыми или псевдо-инлайновыми элементами.<span id="more-150"></span></p>
<p>Например:</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p1506">
        <div class="code html" id="p150code6">
<span class="sc0">&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Strict//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&quot;&gt;</span><br />
<span class="sc2">&lt;<span class="kw2">html</span> xmlns<span class="sy0">=</span><span class="st0">&quot;http://www.w3.org/1999/xhtml&quot;</span>&gt;</span><br />
<span class="sc2">&lt;<span class="kw2">head</span>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">meta</span> <span class="kw3">http-equiv</span><span class="sy0">=</span><span class="st0">&quot;Content-Type&quot;</span> <span class="kw3">content</span><span class="sy0">=</span><span class="st0">&quot;text/html; charset=utf-8&quot;</span> <span class="sy0">/</span>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">title</span>&gt;</span>Floating and FireFox<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">title</span>&gt;</span><br />
<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">head</span>&gt;</span><br />
<span class="sc2">&lt;<span class="kw2">body</span>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">div</span> <span class="kw3">style</span><span class="sy0">=</span><span class="st0">&quot;height: 100px; width: 100%; background: red;&quot;</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">span</span>&gt;</span>Text<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">span</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">div</span> <span class="kw3">style</span><span class="sy0">=</span><span class="st0">&quot;width: 100px; height: 100%; float: left; background: yellow;&quot;</span>&gt;</span>Float<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">div</span>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">div</span>&gt;</span><br />
<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">body</span>&gt;</span><br />
<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">html</span>&gt;</span>
        </div>
    </div>
</div>

<p>В FireFox, <a href="http://blog.sjinks.pro/tag/ie6/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  IE6">IE6</a> и <a href="http://blog.sjinks.pro/tag/ie7/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  IE7">IE7</a> это будет выглядеть примерно так:<br />
<a href='http://static.sjinks.info/wp-content/uploads/2008/05/ff-float.png'><img src="http://static.sjinks.info/wp-content/uploads/2008/05/ff-float.png" alt="Gecko, IE6, IE7" class="alignnone size-medium wp-image-147" /></a></p>
<p>А так&nbsp;&mdash;&nbsp;в Opera, Konqueror, Safari или <a href="http://blog.sjinks.pro/tag/ie8/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  IE8">IE8</a>:<br />
<a href='http://static.sjinks.info/wp-content/uploads/2008/05/kn-float.png'><img src="http://static.sjinks.info/wp-content/uploads/2008/05/kn-float.png" alt="Остальные браузеры" class="alignnone size-medium wp-image-148" /></a></p>
<p>Если следовать <cite><a href="http://www.w3.org/TR/CSS21/visuren.html#floats">спецификации CSS&nbsp;2.1</a></cite>,</p>
<blockquote cite="http://www.w3.org/TR/CSS21/visuren.html#floats">A floated box is shifted to the left or right until its outer edge touches the containing block edge or the outer edge of another float. If there's a line box, the top of the floated box is aligned with the top of the current line box.</blockquote>
<p>Можно, конечно, попробовать возразить, опираясь на следующий параграф:</p>
<blockquote cite="http://www.w3.org/TR/CSS21/visuren.html#floats">If there isn't enough horizontal room for the float, it is shifted downward until either it fits or there are no more floats present.</blockquote>
<p>Но на мой взгляд, это не очень убедительно: &lt;span&gt;&nbsp;&mdash;&nbsp;inline-элемент и поэтому не может растягиваться на всю длину контейнера. Если мы поменяем направление <code>float</code> с <code>left</code> на <code>right</code>, то заметим, что такое поведение сохранится:</p>
<p><a href='http://static.sjinks.info/wp-content/uploads/2008/05/ff-float-right.png'><img src="http://static.sjinks.info/wp-content/uploads/2008/05/ff-float-right.png" alt="float: right" class="alignnone size-medium wp-image-149" /></a></p>
<p><a href="http://blog.sjinks.pro/test/float/float_ff.html">Тестовая страница</a>.</p>
<p>Всё-таки FireFox здесь неправ&hellip; Обидно, что даже IE8 правильно рисует&hellip;</p>
<p><strong>Лечение:</strong> поменять <code>span</code> и <code>div</code> местами. Либо задать <code>span</code> ширину и отправить в плавание.</p>
<p>© 2012 <a href="http://blog.sjinks.pro">Ars Longa, Vita Brevis</a>. Все права защищены. Перепубликация материалов без разрешения автора запрещена.</p>
<p>При использовании материалов блога наличие активной не закрытой от индексирования ссылки на <a href="http://blog.sjinks.pro/css/150-problem-with-floating-elements-in-firefox-and-i6-7/">источник</a> обязательно.</p>]]></content:encoded>
			<wfw:commentRss>http://blog.sjinks.pro/css/150-problem-with-floating-elements-in-firefox-and-i6-7/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>IEPNGFix и Google Maps</title>
		<link>http://blog.sjinks.pro/uncategorized/81-iepngfix-and-google-maps/</link>
		<comments>http://blog.sjinks.pro/uncategorized/81-iepngfix-and-google-maps/#comments</comments>
		<pubDate>Wed, 09 Apr 2008 00:10:12 +0000</pubDate>
		<dc:creator>Vladimir</dc:creator>
				<category><![CDATA[Всё подряд]]></category>
		<category><![CDATA[Google Maps]]></category>
		<category><![CDATA[IE6]]></category>
		<category><![CDATA[iepngfix]]></category>

		<guid isPermaLink="false">http://blog.sjinks.pro/?p=81</guid>
		<description><![CDATA[Как подружить IEPNGFix и Google Maps Помогая по работе одному (одной) дизайнеру, я столкнулся с проблемой: страница с Google Maps отображалась нормально в нормальных (извиняюсь за каламбур) браузерах, но выглядела очень плохо в IE6 (в том плане, что вместо карты отображался серый фон и все элементы управления исчезли). К сожалению, объявлять IE6 мёртвым пока еще [...]<p>© 2012 <a href="http://blog.sjinks.pro">Ars Longa, Vita Brevis</a>. Все права защищены. Перепубликация материалов без разрешения автора запрещена.</p>
<p>При использовании материалов блога наличие активной не закрытой от индексирования ссылки на <a href="http://blog.sjinks.pro/uncategorized/81-iepngfix-and-google-maps/">источник</a> обязательно.</p>]]></description>
			<content:encoded><![CDATA[<h2><em>Как подружить <a href="http://blog.sjinks.pro/tag/iepngfix/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  iepngfix">IEPNGFix</a> и <a href="http://blog.sjinks.pro/tag/google-maps/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  Google Maps">Google Maps</a></em></h2>
<p>Помогая по работе одному (одной) дизайнеру, я столкнулся с проблемой: страница с <a href="http://blog.sjinks.pro/tag/google/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  Google">Google</a> Maps отображалась нормально в нормальных (извиняюсь за каламбур) браузерах, но выглядела очень плохо в <a href="http://blog.sjinks.pro/tag/ie6/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  IE6">IE6</a> (в том плане, что вместо карты отображался серый фон и все элементы управления исчезли). К сожалению, объявлять <a href="http://blog.sjinks.pro/tag/ie6/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  IE6">IE6</a> мёртвым пока еще рано, чтобы просто проигнорировать этот баг.</p>
<p>Путем недолгих экспериментов было установлено, что виной всему <a href="http://www.twinhelix.com/css/iepngfix" rel="nofollow">IEPNGFix</a>. Если полезть разбираться в код Google Maps (удачи!), то будет видно, что Google Maps реализует свой метод для борьбы с непониманием прозрачности PNG в IE6. Так получается, что метод Google конфликтует с IEPNGFix.</p>
<p>Конечно, самый простой метод&nbsp;&mdash;&nbsp;это убрать IEPNGFix и заменить PNG-файлы GIF-файлами. Но, во-первых, это не всегда возможно, а во-вторых, просто не наш метод. К счастью, решение лежит на поверхности и является довольно простым.<span id="more-81"></span></p>
<p>Предположим, что карта Google отображается в <code>&lt;div id="map"&gt;</code>. Тогда для исправления последствий использования IEPNGFix нам нужно добавить следующую строку в <a href="http://blog.sjinks.pro/tag/css/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  CSS">CSS</a>:</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p818">
        <div class="code css" id="p81code8">
<span class="re0">#map</span><span class="sy0">,</span> <span class="re0">#map</span> <span class="sy0">*</span> <span class="br0">&#123;</span> behavior<span class="sy0">:</span> <span class="kw2">none</span><span class="sy0">;</span> <span class="br0">&#125;</span>
        </div>
    </div>
</div>

<p>Вот и всё!</p>
<p>© 2012 <a href="http://blog.sjinks.pro">Ars Longa, Vita Brevis</a>. Все права защищены. Перепубликация материалов без разрешения автора запрещена.</p>
<p>При использовании материалов блога наличие активной не закрытой от индексирования ссылки на <a href="http://blog.sjinks.pro/uncategorized/81-iepngfix-and-google-maps/">источник</a> обязательно.</p>]]></content:encoded>
			<wfw:commentRss>http://blog.sjinks.pro/uncategorized/81-iepngfix-and-google-maps/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Google Adsense и XHTML</title>
		<link>http://blog.sjinks.pro/html/67-google-adsense-and-xhtml/</link>
		<comments>http://blog.sjinks.pro/html/67-google-adsense-and-xhtml/#comments</comments>
		<pubDate>Wed, 02 Apr 2008 18:50:36 +0000</pubDate>
		<dc:creator>Vladimir</dc:creator>
				<category><![CDATA[HTML]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Google Adsense]]></category>
		<category><![CDATA[IE6]]></category>
		<category><![CDATA[IE7]]></category>
		<category><![CDATA[XHTML]]></category>

		<guid isPermaLink="false">http://blog.sjinks.pro/?p=67</guid>
		<description><![CDATA[Как заставить Adsense работать на XHTML-страницах Не секрет, что Adsense для вставки рекламы использует &#60;iframe&#62;. Не секрет, что для вставки этого &#60;iframe&#62; используется самый простой метод&#160;&#8212;&#160;document.write(). Какими же проблемами это грозит? Частично отвечая на вопрос, почему это не работает для XHTML-документов? Сразу оговорюсь, что не работает это не для всех документов, а только для тех, [...]<p>© 2012 <a href="http://blog.sjinks.pro">Ars Longa, Vita Brevis</a>. Все права защищены. Перепубликация материалов без разрешения автора запрещена.</p>
<p>При использовании материалов блога наличие активной не закрытой от индексирования ссылки на <a href="http://blog.sjinks.pro/html/67-google-adsense-and-xhtml/">источник</a> обязательно.</p>]]></description>
			<content:encoded><![CDATA[<h2><em>Как заставить Adsense работать на <a href="http://blog.sjinks.pro/tag/xhtml/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  XHTML">XHTML</a>-страницах</em></h2>
<p>Не секрет, что Adsense для вставки рекламы использует <code>&lt;iframe&gt;</code>. Не секрет, что для вставки этого <code>&lt;iframe&gt;</code> используется самый простой метод&nbsp;&mdash;&nbsp;<code>document.write()</code>. Какими же проблемами это грозит? Частично отвечая на вопрос, почему это не работает для XHTML-документов?<span id="more-67"></span></p>
<p>Сразу оговорюсь, что не работает это не для всех документов, а только для тех, которые, как и полагается XHTML-документам, выдаются с <code>Content-Type: application/xhtml+xml</code>.</p>
<p>Итак, для "настоящих XHTML-документов" возникает две проблемы:</p>
<ol>
<li><code>document.write()</code> не работает;</li>
<li>В XHTML&nbsp;1.1/XHTML&nbsp;1.0&nbsp;Strict элемента <code>&lt;iframe&gt;</code> нет.</li>
</ol>
<p>Основной является первая проблема. Тем не менее, даже если заменить <code>document.write</code> другой конструкцией (<code>document.createElement()</code>/<code>document.createElementNS()</code>&nbsp;+ <code>node.appendChild()</code> или аналогичной), то в результате получим невалидный XHTML-код (который <em>может</em> не отображаться в валидирующих браузерах&nbsp;&mdash;&nbsp;я <em>слышал</em>, что это свойственно Konqueror).</p>
<p>Как же с этим бороться? Как уже было сказано, в современных версиях XHTML элемента <code>&lt;iframe&gt;</code> нет. Но есть другой, не менее известный элемент&nbsp;&mdash;&nbsp;<code>&lt;object&gt;</code>. Теоретически можно сохранить скрипт <a href="http://blog.sjinks.pro/tag/google/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  Google">Google</a> AdSense локально, изменить его, научив использовать <code>document.createElement()</code>/<code>document.createElementNS()</code> и <code>&lt;object&gt;</code> вместо <code>&lt;iframe&gt;</code>. Вот только имеет ли это смысл? </p>
<p>Идём дальше. Как уже было сказано выше, источник проблем здесь&nbsp;&mdash;&nbsp;специфический Content-Type (или, если смотреть глубже, кривые руки разработчиков Google&nbsp;&mdash;&nbsp;кому какой вариант нравится больше). То есть если страница будет выдаваться как, например, text/<a href="http://blog.sjinks.pro/tag/html/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  HTML">html</a>, то AdSense будет работать. А если это соединить с <code>&lt;object&gt;</code>, то получим готовое решение.</p>
<p>Выглядеть это будет так: на странице, на которой <em>должны</em> быть объявления, <em>вместо</em> кода <a href="http://blog.sjinks.pro/tag/google-adsense/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  Google Adsense">Google Adsense</a> помещаем следующий код:</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p6713">
        <div class="code xhtml" id="p67code13">
&nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">object</span> <span class="kw3">data</span><span class="sy0">=</span><span class="st0">&quot;adsense.html&quot;</span> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;text/html&quot;</span>&gt;&lt;<span class="sy0">/</span><span class="kw2">object</span>&gt;</span>
        </div>
    </div>
</div>

<p>Сама же страница adsense.html будет выглядеть следующим образом:</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p6714">
        <div class="code html" id="p67code14">
<span class="sc0">&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD HTML 4.01 Transitional//EN&quot; &quot;http://www.w3.org/TR/html4/loose.dtd&quot;&gt;</span><br />
<span class="sc2">&lt;<span class="kw2">html</span>&gt;</span><br />
<span class="sc2">&lt;<span class="kw2">head</span>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">title</span>&gt;</span>Google Adsense - Disable Me in Adblock :-)<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">title</span>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">meta</span> <span class="kw3">http-equiv</span><span class="sy0">=</span><span class="st0">&quot;Content-Type&quot;</span> <span class="kw3">content</span><span class="sy0">=</span><span class="st0">&quot;text/html; charset=utf-8&quot;</span>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">style</span> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;text/css&quot;</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; html, body { margin: 0; padding: 0; border: 0; }<br />
&nbsp; &nbsp; <span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">style</span>&gt;</span><br />
<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">head</span>&gt;</span><br />
<span class="sc2">&lt;<span class="kw2">body</span>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">script</span> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;text/javascript&quot;</span>&gt;</span>//<span class="sc-2">&lt;!--</span><br />
<span class="sc-2"> &nbsp; &nbsp; &nbsp; &nbsp;google_ad_client = &quot;pub-5756520316076607&quot;;</span><br />
<span class="sc-2"> &nbsp; &nbsp; &nbsp; &nbsp;google_ad_slot = &quot;5162144530&quot;;</span><br />
<span class="sc-2"> &nbsp; &nbsp; &nbsp; &nbsp;google_ad_width = 468;</span><br />
<span class="sc-2"> &nbsp; &nbsp; &nbsp; &nbsp;google_ad_height = 60;</span><br />
<span class="sc-2"> &nbsp; &nbsp;//--&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">script</span>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">script</span> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;text/javascript&quot;</span> <span class="kw3">src</span><span class="sy0">=</span><span class="st0">&quot;http://pagead2.googlesyndication.com/pagead/show_ads.js&quot;</span>&gt;&lt;<span class="sy0">/</span><span class="kw2">script</span>&gt;</span><br />
<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">body</span>&gt;</span><br />
<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">html</span>&gt;</span>
        </div>
    </div>
</div>

<p>Разумеется, следует использовать <em>свои</em> параметры AdSense.</p>
<p>Если сервер настроен выдавать статические .html-страницы с <code>Content-Type: application/xhtml+xml</code> (или любым другим, кроме <code>text/html</code>), то это, разумеется, надо поправить (как именно&nbsp;&mdash;&nbsp;зависит от сервера). Например, для Apache это может выглядеть следующим образом (предполагается, что эти строки будут добавлены в файл .htaccess, находящийся в том же каталоге, что и adsense.html):</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p6715">
        <div class="code apache" id="p67code15">
&lt;<span class="kw3">Files</span> adsense.html&gt;<br />
&nbsp; &nbsp; <span class="kw1">ForceType</span> text/html<br />
&lt;/<span class="kw3">Files</span>&gt;
        </div>
    </div>
</div>

<p><strong>Update:</strong> мне всё же интересно, будут ли объявления в этом случае контекстно-зависимыми? Ведь по большому счету, referer'ом скрипта <code>http://pagead2.googlesyndication.com/pagead/show_ads.js</code> будет страница adsense.html, а не та, на которой эта реклама должна отображаться&hellip; И проверить из-за проблем с аккаунтом не могу <img src='http://static.sjinks.info/wp-includes/images/smilies/icon_sad.gif' alt=':-(' class='wp-smiley' /> </p>
<p><strong>Update:</strong> <a href="http://www.cssplay.co.uk/menu/adsense.html" rel="nofollow">Stu Nicholls</a> нашел еще одну скрытую ошибку: дело в том, что при нажатии на ссылку в рекламном блоке, Internet Explorer откроет её не в главном окне (как это должно быть), а внутри тэга <code>&lt;object&gt;</code>.</p>
<p>Stu Nicholls предлагает следующее решение проблемы: использовать условные комментарии для того, чтобы не использовать <code>&lt;object&gt;</code> в IE (в любом случае, IE пока не понимает <code>application/xhtml+xml</code>, так что использование небольшого хака для IE не будет критичным). Я немного изменил предложенный код так, чтобы IE вообще не видел тэг <code>&lt;object&gt;</code> (нечто подобное было сделано в статье "<a href="http://blog.sjinks.pro/css/49-cross-browser-vertical-menu-without-javascript/">Кросс-браузерное одноуровневое вертикальное меню без JavaScript</a>")</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p6716">
        <div class="code xhtml" id="p67code16">
<span class="sc-2">&lt;!--[if gt IE 8]&gt;&lt;!--&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">object</span> <span class="kw3">data</span><span class="sy0">=</span><span class="st0">&quot;adsense.html&quot;</span> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;text/html&quot;</span>&gt;&lt;<span class="sy0">/</span><span class="kw2">object</span>&gt;</span><br />
<span class="sc-2">&lt;!--&lt;![endif]--&gt;</span><br />
<span class="sc-2">&lt;!--[if lte IE 8]&gt;</span><br />
<span class="sc-2"> &nbsp; &nbsp;&lt;script type=&quot;text/javascript&quot;&gt;</span><br />
<span class="sc-2"> &nbsp; &nbsp; &nbsp; &nbsp;google_ad_client = &quot;pub-5756520316076607&quot;;</span><br />
<span class="sc-2"> &nbsp; &nbsp; &nbsp; &nbsp;google_ad_slot = &quot;5162144530&quot;;</span><br />
<span class="sc-2"> &nbsp; &nbsp; &nbsp; &nbsp;google_ad_width = 468;</span><br />
<span class="sc-2"> &nbsp; &nbsp; &nbsp; &nbsp;google_ad_height = 60;</span><br />
<span class="sc-2"> &nbsp; &nbsp;&lt;/script&gt;</span><br />
<span class="sc-2"> &nbsp; &nbsp;&lt;script type=&quot;text/javascript&quot; src=&quot;http://pagead2.googlesyndication.com/pagead/show_ads.js&quot;&gt;&lt;/script&gt;</span><br />
<span class="sc-2">&lt;![endif]--&gt;</span>
        </div>
    </div>
</div>

<p>© 2012 <a href="http://blog.sjinks.pro">Ars Longa, Vita Brevis</a>. Все права защищены. Перепубликация материалов без разрешения автора запрещена.</p>
<p>При использовании материалов блога наличие активной не закрытой от индексирования ссылки на <a href="http://blog.sjinks.pro/html/67-google-adsense-and-xhtml/">источник</a> обязательно.</p>]]></content:encoded>
			<wfw:commentRss>http://blog.sjinks.pro/html/67-google-adsense-and-xhtml/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Размещение блока неизвестного размера в центре страницы при помощи CSS</title>
		<link>http://blog.sjinks.pro/css/59-placing-object-of-unknown-size-in-the-center-of-the-page/</link>
		<comments>http://blog.sjinks.pro/css/59-placing-object-of-unknown-size-in-the-center-of-the-page/#comments</comments>
		<pubDate>Tue, 01 Apr 2008 06:43:33 +0000</pubDate>
		<dc:creator>Vladimir</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[IE6]]></category>
		<category><![CDATA[IE7]]></category>
		<category><![CDATA[XHTML]]></category>
		<category><![CDATA[макет]]></category>
		<category><![CDATA[ошибка]]></category>
		<category><![CDATA[хак]]></category>

		<guid isPermaLink="false">http://blog.sjinks.pro/?p=59</guid>
		<description><![CDATA[Как разместить блок неизвестного размера точно в центре страницы Гуляя по Internet, совершенно случайно натолкнулся на статью "Стили CSS - центрируем объекты по центру веб-страницы". Первой мыслью было, что автор начнёт рассказывать про вертикальное центрирование и всем известный margin: 0 auto. Но не тут-то было, всё гораздо интереснее Статья, на которую я наткнулся&#160;&#8212;&#160;это перевод статьи [...]<p>© 2012 <a href="http://blog.sjinks.pro">Ars Longa, Vita Brevis</a>. Все права защищены. Перепубликация материалов без разрешения автора запрещена.</p>
<p>При использовании материалов блога наличие активной не закрытой от индексирования ссылки на <a href="http://blog.sjinks.pro/css/59-placing-object-of-unknown-size-in-the-center-of-the-page/">источник</a> обязательно.</p>]]></description>
			<content:encoded><![CDATA[<h2><em>Как разместить блок неизвестного размера точно в центре страницы</em></h2>
<p>Гуляя по Internet, совершенно случайно натолкнулся на статью "<a href="http://www.w3school.ru/blog/css/how-to-center-an-object-exactly-in-the-center.html">Стили CSS - центрируем объекты по центру веб-страницы</a>".</p>
<p>Первой мыслью было, что автор начнёт рассказывать про <a href="http://blog.sjinks.pro/css/24-vertical-align-without-tables/">вертикальное центрирование</a> и всем известный <code>margin: 0 auto</code>. Но не тут-то было, всё гораздо интереснее <img src='http://static.sjinks.info/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> <span id="more-59"></span></p>
<p>Статья, на которую я наткнулся&nbsp;&mdash;&nbsp;это перевод статьи Криса Койера (Chris Coyier) <a href="http://css-tricks.com/quick-css-trick-how-to-center-an-object-exactly-in-the-center/">Quick CSS Trick: How To Center an Object Exactly In The Center</a>. При этом высота и ширина центрируемого объекта в статье полагаются известными. Что ж, я ожидал чего-то большего.</p>
<p>Я сначала вкратце опишу идею Криса, потом расскажу, почему так не надо делать и затем покажу, что простого решения, удовлетворяющего всем требованиям, нет <img src='http://static.sjinks.info/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>Начнём. Пусть у нас имеется, например, <code>&lt;div&gt;</code> размерами 200&times;100&nbsp;пикселей. Поступаем следующим образом:</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p5927">
        <div class="code css" id="p59code27">
<span class="re1">.centered</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">position</span><span class="sy0">:</span> <span class="kw2">fixed</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">top</span><span class="sy0">:</span> <span class="re3"><span class="nu0">50</span>%</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">left</span><span class="sy0">:</span> <span class="re3"><span class="nu0">50</span>%</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">margin-top</span><span class="sy0">:</span> <span class="re3">-50px</span><span class="sy0">;</span> <span class="coMULTI">/* 50% высоты */</span><br />
&nbsp; &nbsp; <span class="kw1">margin-left</span><span class="sy0">:</span> <span class="re3">-100px</span><span class="sy0">;</span> &nbsp;<span class="coMULTI">/* 50% ширины */</span><br />
&nbsp; &nbsp; <span class="kw1">height</span><span class="sy0">:</span> <span class="re3">100px</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">width</span><span class="sy0">:</span> <span class="re3">200px</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span>
        </div>
    </div>
</div>

<p>Начнём с того, что <a href="http://blog.sjinks.pro/tag/ie6/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  IE6">IE6</a> <code>position: fixed</code> очень плохо понимает. Для него нужно добавить небольшой <a href="http://blog.sjinks.pro/tag/hack/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  хак">хак</a>:</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p5928">
        <div class="code css" id="p59code28">
<span class="sy0">*</span> html <span class="re1">.centered</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">position</span><span class="sy0">:</span> <span class="kw2">absolute</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span>
        </div>
    </div>
</div>

<p>Теперь о минусах:</p>
<ul>
<li>размеры блока должны быть известны;</li>
<li>при уменьшении окна так, чтобы оно перекрывало отцентрированный объект, скроллер хотя и появляется, но прокрутить отцентрированный объект не сможет (из-за <code>position: fixed</code>);</li>
<li>при уменьшении ширины окна можно дойти до такого размера, когда у объекта границы станут отрицательными.</li>
</ul>
<p>Теперь о реализации центрирования в общем виде (считаем, что высота объекта нам неизвестна; ширина же должна быть известной, так как блочный элемент, не имеющий явно заданной ширины автоматически получает <code>width: 100%</code>). Решение основывается на идеях, представленных в следующих статьях:</p>
<ul>
<li><a href="http://blog.sjinks.pro/css/24-vertical-align-without-tables/"><strong>Вертикальное выравнивание без таблиц</strong></a>;</li>
<li><a href="http://blog.sjinks.pro/css/15-footer-in-the-very-bottom/"><strong>Нижний колонтитул&nbsp;&mdash;&nbsp;в нижней части страницы</strong></a>;</li>
<li><a href="http://blog.sjinks.pro/css/55-css-hacks-and-filters-for-different-browsers/"><strong>Подборка CSS-хаков для различных браузеров</strong></a>.</li>
</ul>
<p>Разметка:</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p5929">
        <div class="code xhtml" id="p59code29">
<span class="sc2">&lt;<span class="kw2">body</span>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">div</span> <span class="kw3">id</span><span class="sy0">=</span><span class="st0">&quot;outer&quot;</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">div</span> <span class="kw3">id</span><span class="sy0">=</span><span class="st0">&quot;middle&quot;</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">div</span> <span class="kw3">id</span><span class="sy0">=</span><span class="st0">&quot;inner&quot;</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Ego autem quem timeam lectorem, cum ad te ne Graecis quidem cedentem in philosophia audeam scribere?<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">div</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">div</span>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">div</span>&gt;</span><br />
<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">body</span>&gt;</span>
        </div>
    </div>
</div>

<p>Прочитавшим статью "<a href="http://blog.sjinks.pro/css/24-vertical-align-without-tables/">Вертикальное выравнивание без таблиц</a>" должно быть ясно, откуда "растут ноги" у этой разметки.</p>
<p>Стили будут почти аналогичными приведённым в той статье, но с небольшими изменениями для IE.<br />
Начнём со стилей для нормальных браузеров:</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p5930">
        <div class="code css" id="p59code30">
html <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">overflow</span><span class="sy0">:</span> <span class="kw2">auto</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><br />
<br />
html<span class="sy0">,</span> body <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">margin</span><span class="sy0">:</span> <span class="nu0">0</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">padding</span><span class="sy0">:</span> <span class="nu0">0</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">height</span><span class="sy0">:</span> <span class="re3"><span class="nu0">100</span>%</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">width</span><span class="sy0">:</span> <span class="re3"><span class="nu0">100</span>%</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><br />
<br />
<span class="re0">#outer</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">height</span><span class="sy0">:</span> <span class="re3"><span class="nu0">100</span>%</span><span class="sy0">;</span> <span class="coMULTI">/* В этом случае нельзя использовать min-height. Для таблиц (элементов с display: table) мир устроен иначе */</span><br />
&nbsp; &nbsp; <span class="kw1">display</span><span class="sy0">:</span> table<span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">vertical-align</span><span class="sy0">:</span> <span class="kw2">middle</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">width</span><span class="sy0">:</span> <span class="re3">600px</span><span class="sy0">;</span> <span class="coMULTI">/* Если ширина не задана явно, будет 100% */</span><br />
&nbsp; &nbsp; <span class="kw1">margin</span><span class="sy0">:</span> 0 <span class="kw2">auto</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><br />
<br />
<span class="re0">#middle</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">display</span><span class="sy0">:</span> <span class="kw2">table-row</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">vertical-align</span><span class="sy0">:</span> <span class="kw2">middle</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><br />
<br />
<span class="re0">#inner</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">display</span><span class="sy0">:</span> <span class="kw2">table-cell</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">vertical-align</span><span class="sy0">:</span> <span class="kw2">middle</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span>
        </div>
    </div>
</div>

<p>Теперь стили для Ишака. Я бы поместил их в условный комментарий, например, так:</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p5931">
        <div class="code xhtml" id="p59code31">
<span class="sc-2">&lt;!--[if lte IE 7]&gt;</span><br />
<span class="sc-2"> &nbsp; &nbsp;&lt;style type=&quot;text/css&quot;&gt;...&lt;/style&gt;</span><br />
<span class="sc-2">&lt;![endif]--&gt;</span>
        </div>
    </div>
</div>

<p>Вышеприведённый условный комментарий <strong>не должен</strong> работать для <a href="http://blog.sjinks.pro/tag/ie8/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  IE8">IE8</a>, и это сделано специально: во-первых, <a href="http://blog.sjinks.pro/tag/ie8/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  IE8">IE8</a> поддерживает <code>display: table</code>, <code>display: table-row</code> и <code>display: table-cell</code>; во-вторых, будучи <a href="http://blog.sjinks.pro/css/27-why-microsoft-calls-alpha-beta-or-what-acid-tests-are-for/">бетой</a>, он не поддерживает <code>vertical-align</code> ни в каком виде. В общем, когда Microsoft выпустит полноценный браузер, тогда и будем думать <img src='http://static.sjinks.info/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>Стили для Internet Explorer:</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p5932">
        <div class="code css" id="p59code32">
<span class="sy0">*</span> <span class="sy0">&gt;</span> html body <span class="br0">&#123;</span> <span class="coMULTI">/* Выравниваем блок по центру для IE4-IE5.5 */</span><br />
&nbsp; &nbsp; <span class="kw1">text-align</span><span class="sy0">:</span> <span class="kw2">center</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><br />
<br />
<span class="re0">#outer</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">position</span><span class="sy0">:</span> <span class="kw2">relative</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><br />
<br />
<span class="re0">#middle</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">top</span><span class="sy0">:</span> <span class="re3"><span class="nu0">50</span>%</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">position</span><span class="sy0">:</span> <span class="kw2">relative</span><span class="sy0">;</span> <span class="coMULTI">/* Не используем абсолютное позиционирование, чтобы избежать проблем с прокруткой */</span><br />
&nbsp; &nbsp; <span class="kw1">width</span><span class="sy0">:</span> <span class="re3"><span class="nu0">100</span>%</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><br />
<br />
<span class="re0">#inner</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">position</span><span class="sy0">:</span> <span class="kw2">relative</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">top</span><span class="sy0">:</span> <span class="re3">-<span class="nu0">50</span>%</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span>
        </div>
    </div>
</div>

<p>Если посмотреть на то, что <a href='http://static.sjinks.info/wp-content/uploads/2008/04/center0.html'>получилось</a>, можно заметить, что это один из тех случаев, когда код работает корректно в IE6, но не в <a href="http://blog.sjinks.pro/tag/ie7/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  IE7">IE7</a> (последний будет показывать совершенно ненужный отступ снизу). Если вспомнить статью "<a href="http://blog.sjinks.pro/css/24-vertical-align-without-tables/">Вертикальное выравнивание без таблиц</a>"), то там мы ставили <code>overflow: hidden</code> элементу <code>#outer</code>, чтобы избежать подобного рода неприятностей в IE6/7. И, хотя в IE6 можно обойтись и без этого (перейдя от абсолютного позиционирования к относительному), с IE7 всё не так просто. В качестве быстрого исправления можно предложить такой вариант:</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p5933">
        <div class="code css" id="p59code33">
<span class="sy0">*</span><span class="re2">:first-child</span><span class="sy0">+</span>html <span class="re0">#outer</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; overflow-x<span class="sy0">:</span> <span class="kw2">hidden</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span>
        </div>
    </div>
</div>

<p>Что характерно, будет работать хоть <code>overflow-x</code>, хоть <code>overflow-y</code>.</p>
<p>В <a href='http://static.sjinks.info/wp-content/uploads/2008/04/center1.html'>результате</a> получаем код, который работает нормально везде, кроме IE7: в IE7 при уменьшении размера окна по вертикали полоса прокрутки появляться не будет. Сделать <em>нормальную</em> прокрутку непосредственно для элемента <code>#outer</code> также представляется проблематичным&nbsp;&mdash;&nbsp;нижний отступ будет слишком большим. Поэтому остаётся одно решение&nbsp;&mdash;&nbsp;таблица. Причём можно сделать так, что таблицу будет видеть только IE7:</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p5934">
        <div class="code xhtml" id="p59code34">
<span class="sc-2">&lt;!--[if IE 7]&gt;&lt;table cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; class=&quot;outer&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;![endif]--&gt;</span><br />
&nbsp; &nbsp; &nbsp;<span class="sc2">&lt;<span class="kw2">div</span> <span class="kw3">id</span><span class="sy0">=</span><span class="st0">&quot;outer&quot;</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">div</span> <span class="kw3">id</span><span class="sy0">=</span><span class="st0">&quot;middle&quot;</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">div</span> <span class="kw3">id</span><span class="sy0">=</span><span class="st0">&quot;inner&quot;</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Ego autem quem timeam lectorem, cum ad te ne Graecis quidem cedentem in philosophia audeam scribere? quamquam a te ipso id quidem facio provocatus gratissimo mihi libro, quem ad me de virtute misisti. Sed ex eo credo quibusdam usu venire; ut abhorreant a Latinis, quod inciderint in inculta quaedam et horrida, de malis Graecis Latine scripta deterius. quibus ego assentior, dum modo de isdem rebus ne Graecos quidem legendos putent. res vero bonas verbis electis graviter ornateque dictas quis non legat? nisi qui se plane Graecum dici velit, ut a Scaevola est praetore salutatus Athenis Albucius.<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">div</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">div</span>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">div</span>&gt;</span><br />
<span class="sc-2">&lt;!--[if IE 7]&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;![endif]--&gt;</span>
        </div>
    </div>
</div>

<p>По большому счёту, это извращение&nbsp;&mdash;&nbsp;ибо проще всего использовать таблицу для всех браузеров. Но проще не значит лучше, ибо очень часто встречаются ситуации, когда заказчики требуют, чтобы вёрстка была семантической (а когда видят "незапланированную таблицу", начинают громко ругаться). Правда, в этом случае для IE7 семантика теряется, но, как заметил <cite><a href="http://pokrovskii.com/">Максим Покровский</a></cite>, <q cite="http://blog.sjinks.pro/css/53-cross-browser-hybrid-css-menu-without-javascript/#comment-26">для него [IE], вообще, много чего теряется&hellip;</q>.</p>
<p>Итак, для комбинированного решения у нас получаются следующие стили для IE:</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p5935">
        <div class="code css" id="p59code35">
<span class="sy0">*</span> <span class="sy0">&gt;</span> html body <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">text-align</span><span class="sy0">:</span> <span class="kw2">center</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><br />
<br />
<span class="sy0">*</span> html <span class="re0">#outer</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">position</span><span class="sy0">:</span> <span class="kw2">relative</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><br />
<br />
<span class="sy0">*</span> html <span class="re0">#middle</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">top</span><span class="sy0">:</span> <span class="re3"><span class="nu0">50</span>%</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">position</span><span class="sy0">:</span> <span class="kw2">relative</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">width</span><span class="sy0">:</span> <span class="re3"><span class="nu0">100</span>%</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">overflow</span><span class="sy0">:</span> <span class="kw2">auto</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><br />
<br />
<span class="sy0">*</span> html <span class="re0">#inner</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">position</span><span class="sy0">:</span> <span class="kw2">relative</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">top</span><span class="sy0">:</span> <span class="re3">-<span class="nu0">50</span>%</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">overflow</span><span class="sy0">:</span> <span class="kw2">auto</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><br />
<br />
<span class="sy0">*</span><span class="re2">:first-child</span><span class="sy0">+</span>html table<span class="re1">.outer</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">height</span><span class="sy0">:</span> <span class="re3"><span class="nu0">100</span>%</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">width</span><span class="sy0">:</span> <span class="re3">600px</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">margin</span><span class="sy0">:</span> 0 <span class="kw2">auto</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><br />
<br />
<span class="sy0">*</span><span class="re2">:first-child</span><span class="sy0">+</span>html table<span class="re1">.outer</span> tbody <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">vertical-align</span><span class="sy0">:</span> <span class="kw2">middle</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span>
        </div>
    </div>
</div>

<p>Результат можно посмотреть на <a href='http://static.sjinks.info/wp-content/uploads/2008/04/center.html'>этой странице</a>.</p>
<p>Есть еще один вариант решения, но он полагается на использование <a href="http://blog.sjinks.pro/tag/javascript/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  JavaScript">JavaScript</a> в IE:</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p5936">
        <div class="code xhtml" id="p59code36">
<span class="sc0">&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Strict//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&quot;&gt;</span><br />
<span class="sc2">&lt;<span class="kw2">html</span> xmlns<span class="sy0">=</span><span class="st0">&quot;http://www.w3.org/1999/xhtml&quot;</span>&gt;</span><br />
<span class="sc2">&lt;<span class="kw2">head</span>&gt;</span><br />
<span class="sc2">&lt;<span class="kw2">title</span>&gt;</span>Centering<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">title</span>&gt;</span><br />
<span class="sc2">&lt;<span class="kw2">style</span> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;text/css&quot;</span>&gt;</span><br />
html, body {<br />
&nbsp; &nbsp; margin: 0;<br />
&nbsp; &nbsp; padding: 0;<br />
&nbsp; &nbsp; height: 100%;<br />
&nbsp; &nbsp; width: 100%;<br />
}<br />
<br />
html {<br />
&nbsp; &nbsp; display: table;<br />
&nbsp; &nbsp; overflow: auto;<br />
}<br />
<br />
body {<br />
&nbsp; &nbsp; display: table-cell;<br />
&nbsp; &nbsp; vertical-align: middle;<br />
}<br />
<br />
.item {<br />
&nbsp; &nbsp; margin: 0 auto;<br />
&nbsp; &nbsp; width: 600px;<br />
}<br />
<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">style</span>&gt;</span><br />
<span class="sc-2">&lt;!--[if lte IE 7]&gt;</span><br />
<span class="sc-2">&lt;style type=&quot;text/css&quot;&gt;</span><br />
<span class="sc-2">* &gt; html body {</span><br />
<span class="sc-2"> &nbsp; &nbsp;text-align: center;</span><br />
<span class="sc-2">}</span><br />
<br />
<span class="sc-2">.item {</span><br />
<span class="sc-2"> &nbsp; &nbsp;margin-top: expression(this.offsetHeight &lt; this.parentNode.offsetHeight ? parseInt((this.parentNode.offsetHeight - this.offsetHeight) / 2) + 'px' : 0);</span><br />
<span class="sc-2">}</span><br />
<span class="sc-2">&lt;/style&gt;</span><br />
<span class="sc-2">&lt;![endif]--&gt;</span><br />
<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">head</span>&gt;</span><br />
<span class="sc2">&lt;<span class="kw2">body</span>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">div</span> <span class="kw3">class</span><span class="sy0">=</span><span class="st0">&quot;item&quot;</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; Ego autem quem timeam lectorem, cum ad te ne Graecis quidem cedentem in philosophia audeam scribere? quamquam a te ipso id quidem facio provocatus gratissimo mihi libro, quem ad me de virtute misisti. Sed ex eo credo quibusdam usu venire; ut abhorreant a Latinis, quod inciderint in inculta quaedam et horrida, de malis Graecis Latine scripta deterius. quibus ego assentior, dum modo de isdem rebus ne Graecos quidem legendos putent. res vero bonas verbis electis graviter ornateque dictas quis non legat? nisi qui se plane Graecum dici velit, ut a Scaevola est praetore salutatus Athenis Albucius.<br />
&nbsp; &nbsp; <span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">div</span>&gt;</span><br />
<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">body</span>&gt;</span><br />
<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">html</span>&gt;</span>
        </div>
    </div>
</div>

<p>Результат можно посмотреть <a href='http://static.sjinks.info/wp-content/uploads/2008/04/center2.html'>здесь</a>.</p>
<p>© 2012 <a href="http://blog.sjinks.pro">Ars Longa, Vita Brevis</a>. Все права защищены. Перепубликация материалов без разрешения автора запрещена.</p>
<p>При использовании материалов блога наличие активной не закрытой от индексирования ссылки на <a href="http://blog.sjinks.pro/css/59-placing-object-of-unknown-size-in-the-center-of-the-page/">источник</a> обязательно.</p>]]></content:encoded>
			<wfw:commentRss>http://blog.sjinks.pro/css/59-placing-object-of-unknown-size-in-the-center-of-the-page/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Кросс-браузерное всплывающее гибридное меню на CSS без использования JavaScript</title>
		<link>http://blog.sjinks.pro/css/53-cross-browser-hybrid-css-menu-without-javascript/</link>
		<comments>http://blog.sjinks.pro/css/53-cross-browser-hybrid-css-menu-without-javascript/#comments</comments>
		<pubDate>Sun, 23 Mar 2008 04:33:58 +0000</pubDate>
		<dc:creator>Vladimir</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[IE6]]></category>
		<category><![CDATA[XHTML]]></category>
		<category><![CDATA[кросс-браузерное решение]]></category>
		<category><![CDATA[меню]]></category>

		<guid isPermaLink="false">http://blog.sjinks.pro/css/53-cross-browser-hybrid-css-menu-without-javascript/</guid>
		<description><![CDATA[Реализация кросс-браузерного горизонтального меню на чистом CSS 3 без использования JavaScript Ранее я уже говорил о причинах, побудивших меня сделать меню на чистом CSS без использования JavaScript. Борясь с IE6, у меня получилась красивая версия вертикального меню &#8212; его реализация оказалась проще. Теперь обещанное горизонтальное меню. Требования, которые я поставил: Нельзя использовать JavaScript; Полученный код [...]<p>© 2012 <a href="http://blog.sjinks.pro">Ars Longa, Vita Brevis</a>. Все права защищены. Перепубликация материалов без разрешения автора запрещена.</p>
<p>При использовании материалов блога наличие активной не закрытой от индексирования ссылки на <a href="http://blog.sjinks.pro/css/53-cross-browser-hybrid-css-menu-without-javascript/">источник</a> обязательно.</p>]]></description>
			<content:encoded><![CDATA[<h2><em>Реализация кросс-браузерного горизонтального <a href="http://blog.sjinks.pro/tag/menu/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  меню">меню</a> на чистом <a href="http://blog.sjinks.pro/tag/css/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  CSS">CSS</a> 3 без использования <a href="http://blog.sjinks.pro/tag/javascript/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  JavaScript">JavaScript</a></em></h2>
<p><a href="http://blog.sjinks.pro/css/49-cross-browser-vertical-menu-without-javascript/">Ранее</a> я уже говорил о причинах, побудивших меня сделать меню на чистом CSS без использования JavaScript. Борясь с <a href="http://blog.sjinks.pro/tag/ie6/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  IE6">IE6</a>, у меня получилась красивая версия <a href="http://blog.sjinks.pro/css/49-cross-browser-vertical-menu-without-javascript/">вертикального меню</a> &mdash; его реализация оказалась проще. Теперь обещанное горизонтальное меню.<span id="more-53"></span></p>
<p>Требования, которые я поставил:</p>
<ol>
<li>Нельзя использовать JavaScript;</li>
<li>Полученный код (CSS и <a href="http://blog.sjinks.pro/tag/xhtml/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  XHTML">XHTML</a>) должен успешно проходить валидацию.</li>
</ol>
<p>Разметка для тестового примера была взята из <a href="http://pokrovskii.com/vsplyivayuschee-gibridnoe-menyu-na-css-hybrid-css-dropdowns/">этой статьи</a> (которая и сподвигла меня на написание своего меню). В <a href="http://blog.sjinks.pro/css/49-cross-browser-vertical-menu-without-javascript/">предыдущей статье</a> код пришлось немного переработать (а всё из-за необходимости поддерживать IE6), и именно эту переработанную версию кода мы будем использовать.</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p5341">
        <div class="code xhtml" id="p53code41">
<span class="sc2">&lt;<span class="kw2">ul</span> <span class="kw3">id</span><span class="sy0">=</span><span class="st0">&quot;menu&quot;</span>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">li</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">a</span> <span class="kw3">href</span><span class="sy0">=</span><span class="st0">&quot;#&quot;</span>&gt;</span>Renaissance<span class="sc-2">&lt;!--[if IE 7]&gt;&lt;!--&gt;</span><span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">a</span>&gt;</span><span class="sc-2">&lt;!--&lt;![endif]--&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc-2">&lt;!--[if lte IE 6]&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;![endif]--&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">ul</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">li</span>&gt;&lt;<span class="kw2">a</span> <span class="kw3">href</span><span class="sy0">=</span><span class="st0">&quot;#&quot;</span>&gt;</span>Brunelleschi<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">a</span>&gt;&lt;<span class="sy0">/</span><span class="kw2">li</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">li</span>&gt;&lt;<span class="kw2">a</span> <span class="kw3">href</span><span class="sy0">=</span><span class="st0">&quot;#&quot;</span>&gt;</span>Alberti<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">a</span>&gt;&lt;<span class="sy0">/</span><span class="kw2">li</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">li</span>&gt;&lt;<span class="kw2">a</span> <span class="kw3">href</span><span class="sy0">=</span><span class="st0">&quot;#&quot;</span>&gt;</span>Palladio<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">a</span>&gt;&lt;<span class="sy0">/</span><span class="kw2">li</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">li</span>&gt;&lt;<span class="kw2">a</span> <span class="kw3">href</span><span class="sy0">=</span><span class="st0">&quot;#&quot;</span>&gt;</span>Michelangelo<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">a</span>&gt;&lt;<span class="sy0">/</span><span class="kw2">li</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">li</span>&gt;&lt;<span class="kw2">a</span> <span class="kw3">href</span><span class="sy0">=</span><span class="st0">&quot;#&quot;</span>&gt;</span>Bramante<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">a</span>&gt;&lt;<span class="sy0">/</span><span class="kw2">li</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">ul</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc-2">&lt;!--[if lte IE 6]&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/a&gt;&lt;![endif]--&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">li</span>&gt;</span><br />
<br />
&nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">li</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">a</span> <span class="kw3">href</span><span class="sy0">=</span><span class="st0">&quot;#&quot;</span>&gt;</span>Art Nouveau<span class="sc-2">&lt;!--[if IE 7]&gt;&lt;!--&gt;</span><span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">a</span>&gt;</span><span class="sc-2">&lt;!--&lt;![endif]--&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc-2">&lt;!--[if lte IE 6]&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;![endif]--&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">ul</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">li</span>&gt;&lt;<span class="kw2">a</span> <span class="kw3">href</span><span class="sy0">=</span><span class="st0">&quot;#&quot;</span>&gt;</span>Mackintosh<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">a</span>&gt;&lt;<span class="sy0">/</span><span class="kw2">li</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">li</span>&gt;&lt;<span class="kw2">a</span> <span class="kw3">href</span><span class="sy0">=</span><span class="st0">&quot;#&quot;</span>&gt;</span>Guimard<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">a</span>&gt;&lt;<span class="sy0">/</span><span class="kw2">li</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">li</span>&gt;&lt;<span class="kw2">a</span> <span class="kw3">href</span><span class="sy0">=</span><span class="st0">&quot;#&quot;</span>&gt;</span>Horta<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">a</span>&gt;&lt;<span class="sy0">/</span><span class="kw2">li</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">li</span>&gt;&lt;<span class="kw2">a</span> <span class="kw3">href</span><span class="sy0">=</span><span class="st0">&quot;#&quot;</span>&gt;</span>van de Velde<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">a</span>&gt;&lt;<span class="sy0">/</span><span class="kw2">li</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">ul</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc-2">&lt;!--[if lte IE 6]&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/a&gt;&lt;![endif]--&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">li</span>&gt;</span><br />
<br />
&nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">li</span> <span class="kw3">class</span><span class="sy0">=</span><span class="st0">&quot;on&quot;</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">a</span> <span class="kw3">href</span><span class="sy0">=</span><span class="st0">&quot;#&quot;</span>&gt;</span>Modern<span class="sc-2">&lt;!--[if IE 7]&gt;&lt;!--&gt;</span><span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">a</span>&gt;</span><span class="sc-2">&lt;!--&lt;![endif]--&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc-2">&lt;!--[if lte IE 6]&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;![endif]--&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">ul</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">li</span>&gt;&lt;<span class="kw2">a</span> <span class="kw3">href</span><span class="sy0">=</span><span class="st0">&quot;#&quot;</span>&gt;</span>Sullivan<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">a</span>&gt;&lt;<span class="sy0">/</span><span class="kw2">li</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">li</span>&gt;&lt;<span class="kw2">a</span> <span class="kw3">href</span><span class="sy0">=</span><span class="st0">&quot;#&quot;</span>&gt;</span>Le Corbusier<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">a</span>&gt;&lt;<span class="sy0">/</span><span class="kw2">li</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">li</span>&gt;&lt;<span class="kw2">a</span> <span class="kw3">href</span><span class="sy0">=</span><span class="st0">&quot;#&quot;</span>&gt;</span>Mies<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">a</span>&gt;&lt;<span class="sy0">/</span><span class="kw2">li</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">li</span>&gt;&lt;<span class="kw2">a</span> <span class="kw3">href</span><span class="sy0">=</span><span class="st0">&quot;#&quot;</span>&gt;</span>Gropius<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">a</span>&gt;&lt;<span class="sy0">/</span><span class="kw2">li</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">li</span>&gt;&lt;<span class="kw2">a</span> <span class="kw3">href</span><span class="sy0">=</span><span class="st0">&quot;#&quot;</span>&gt;</span>Yamasaki<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">a</span>&gt;&lt;<span class="sy0">/</span><span class="kw2">li</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">ul</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc-2">&lt;!--[if lte IE 6]&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/a&gt;&lt;![endif]--&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">li</span>&gt;</span><br />
<br />
&nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">li</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">a</span> <span class="kw3">href</span><span class="sy0">=</span><span class="st0">&quot;#&quot;</span>&gt;</span>Postmodern<span class="sc-2">&lt;!--[if IE 7]&gt;&lt;!--&gt;</span><span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">a</span>&gt;</span><span class="sc-2">&lt;!--&lt;![endif]--&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc-2">&lt;!--[if lte IE 6]&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;![endif]--&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">ul</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">li</span>&gt;&lt;<span class="kw2">a</span> <span class="kw3">href</span><span class="sy0">=</span><span class="st0">&quot;#&quot;</span>&gt;</span>Venturi<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">a</span>&gt;&lt;<span class="sy0">/</span><span class="kw2">li</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">li</span>&gt;&lt;<span class="kw2">a</span> <span class="kw3">href</span><span class="sy0">=</span><span class="st0">&quot;#&quot;</span>&gt;</span>Eisenman<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">a</span>&gt;&lt;<span class="sy0">/</span><span class="kw2">li</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">li</span>&gt;&lt;<span class="kw2">a</span> <span class="kw3">href</span><span class="sy0">=</span><span class="st0">&quot;#&quot;</span>&gt;</span>Stern<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">a</span>&gt;&lt;<span class="sy0">/</span><span class="kw2">li</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">li</span>&gt;&lt;<span class="kw2">a</span> <span class="kw3">href</span><span class="sy0">=</span><span class="st0">&quot;#&quot;</span>&gt;</span>Graves<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">a</span>&gt;&lt;<span class="sy0">/</span><span class="kw2">li</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">li</span>&gt;&lt;<span class="kw2">a</span> <span class="kw3">href</span><span class="sy0">=</span><span class="st0">&quot;#&quot;</span>&gt;</span>Gehry<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">a</span>&gt;&lt;<span class="sy0">/</span><span class="kw2">li</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">ul</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc-2">&lt;!--[if lte IE 6]&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/a&gt;&lt;![endif]--&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">li</span>&gt;</span><br />
<br />
&nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">li</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">a</span> <span class="kw3">href</span><span class="sy0">=</span><span class="st0">&quot;#&quot;</span>&gt;</span>Digital<span class="sc-2">&lt;!--[if IE 7]&gt;&lt;!--&gt;</span><span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">a</span>&gt;</span><span class="sc-2">&lt;!--&lt;![endif]--&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc-2">&lt;!--[if lte IE 6]&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;![endif]--&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">ul</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">li</span>&gt;&lt;<span class="kw2">a</span> <span class="kw3">href</span><span class="sy0">=</span><span class="st0">&quot;#&quot;</span>&gt;</span>Xenakis<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">a</span>&gt;&lt;<span class="sy0">/</span><span class="kw2">li</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">li</span>&gt;&lt;<span class="kw2">a</span> <span class="kw3">href</span><span class="sy0">=</span><span class="st0">&quot;#&quot;</span>&gt;</span>Lynn<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">a</span>&gt;&lt;<span class="sy0">/</span><span class="kw2">li</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">li</span>&gt;&lt;<span class="kw2">a</span> <span class="kw3">href</span><span class="sy0">=</span><span class="st0">&quot;#&quot;</span>&gt;</span>Diller+Scofidio<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">a</span>&gt;&lt;<span class="sy0">/</span><span class="kw2">li</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">li</span>&gt;&lt;<span class="kw2">a</span> <span class="kw3">href</span><span class="sy0">=</span><span class="st0">&quot;#&quot;</span>&gt;</span>Zellner<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">a</span>&gt;&lt;<span class="sy0">/</span><span class="kw2">li</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">li</span>&gt;&lt;<span class="kw2">a</span> <span class="kw3">href</span><span class="sy0">=</span><span class="st0">&quot;#&quot;</span>&gt;</span>Hadid<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">a</span>&gt;&lt;<span class="sy0">/</span><span class="kw2">li</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">ul</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc-2">&lt;!--[if lte IE 6]&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/a&gt;&lt;![endif]--&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">li</span>&gt;</span><br />
<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">ul</span>&gt;</span>
        </div>
    </div>
</div>

<p>Таблица стилей для браузеров, поддерживающих CSS&nbsp;2.1:</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p5342">
        <div class="code css" id="p53code42">
<span class="re0">#menu</span><span class="sy0">,</span> <span class="re0">#menu</span> li<span class="sy0">,</span> <span class="re0">#menu</span> ul <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">list-style</span><span class="sy0">:</span> <span class="kw2">none</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">margin</span><span class="sy0">:</span> <span class="nu0">0</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">padding</span><span class="sy0">:</span> <span class="nu0">0</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><br />
<br />
<span class="re0">#menu</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">display</span><span class="sy0">:</span> <span class="kw2">block</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">width</span><span class="sy0">:</span> <span class="re3"><span class="nu0">100</span>%</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">position</span><span class="sy0">:</span> <span class="kw2">relative</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><br />
<br />
<span class="re0">#menu</span> li <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">float</span><span class="sy0">:</span> <span class="kw1">left</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">height</span><span class="sy0">:</span> <span class="re3">2em</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">line-height</span><span class="sy0">:</span> <span class="re3">2em</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><br />
<br />
<span class="re0">#menu</span> li a <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">float</span><span class="sy0">:</span> <span class="kw1">left</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">border</span><span class="sy0">:</span> <span class="re3">1px</span> <span class="kw2">solid</span> <span class="kw2">red</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">vertical-align</span><span class="sy0">:</span> <span class="kw2">middle</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">padding</span><span class="sy0">:</span> 0 <span class="re3">.5em</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">width</span><span class="sy0">:</span> <span class="re3">100px</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><br />
<br />
<span class="re0">#menu</span> li ul <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">display</span><span class="sy0">:</span> <span class="kw2">none</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">position</span><span class="sy0">:</span> <span class="kw2">absolute</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">top</span><span class="sy0">:</span> <span class="re3">2em</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">left</span><span class="sy0">:</span> <span class="nu0">0</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">margin-top</span><span class="sy0">:</span> <span class="re3">1px</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">width</span><span class="sy0">:</span> <span class="re3"><span class="nu0">100</span>%</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">background</span><span class="sy0">:</span> <span class="re0">#FFF</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">height</span><span class="sy0">:</span> <span class="kw2">auto</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><br />
<br />
<span class="re0">#menu</span> li<span class="re1">.on</span> ul<span class="sy0">,</span> <span class="re0">#menu</span> li<span class="re2">:hover </span>ul <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">display</span><span class="sy0">:</span> <span class="kw2">block</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">z-index</span><span class="sy0">:</span> <span class="nu0">10</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><br />
<br />
<span class="re0">#menu</span> li<span class="re2">:hover </span>ul <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">z-index</span><span class="sy0">:</span> <span class="nu0">100</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><br />
<br />
<span class="re0">#menu</span> li li a <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">display</span><span class="sy0">:</span> <span class="kw2">block</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">border</span><span class="sy0">:</span> <span class="re3">1px</span> <span class="kw2">solid</span> <span class="kw2">red</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">vertical-align</span><span class="sy0">:</span> <span class="kw2">middle</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">padding</span><span class="sy0">:</span> 0 <span class="re3">.5em</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span>
        </div>
    </div>
</div>

<p>Презентационные стили:</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p5343">
        <div class="code css" id="p53code43">
<span class="re0">#menu</span> <span class="sy0">&gt;</span> li <span class="sy0">+</span> li <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">margin-left</span><span class="sy0">:</span> <span class="re3">-1px</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><br />
<br />
<span class="re0">#menu</span> li ul li <span class="sy0">+</span> li <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">margin-left</span><span class="sy0">:</span> <span class="re3">-1px</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><br />
<br />
<span class="re0">#menu</span> li a <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">outline</span><span class="sy0">:</span> <span class="nu0">0</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">text-decoration</span><span class="sy0">:</span> <span class="kw2">none</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><br />
<br />
<span class="re0">#menu</span> li<span class="re1">.on</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">background</span><span class="sy0">:</span> <span class="kw2">yellow</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><br />
<br />
<span class="re0">#menu</span> li<span class="re2">:hover </span>a<span class="sy0">,</span> <span class="re0">#menu</span> li a<span class="re2">:hover</span><span class="sy0">,</span> <span class="re0">#menu</span> li a<span class="re2">:hover </span>a <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">background</span><span class="sy0">:</span> <span class="re0">#EEE</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><br />
<br />
<span class="re0">#menu</span> li ul li<span class="re2">:hover</span><span class="sy0">,</span> <span class="re0">#menu</span> li ul li a<span class="re2">:hover </span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">background</span><span class="sy0">:</span> <span class="re0">#EAFBFC</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span>
        </div>
    </div>
</div>

<p>Более детально это всё объяснено в <a href="http://blog.sjinks.pro/css/49-cross-browser-vertical-menu-without-javascript/">предыдущей статье</a>.</p>
<p>Теперь будем лечить IE6. У меня этот процесс занял несколько часов, но результат стоил того &mdash; <em>оно работает</em>!!!</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p5344">
        <div class="code css" id="p53code44">
<span class="sy0">*</span> html <span class="re0">#menu</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; overflow-x<span class="sy0">:</span> <span class="kw2">hidden</span><span class="sy0">;</span> <span class="coMULTI">/* Скрыть побочный эффект следующего исправления */</span><br />
<span class="br0">&#125;</span><br />
<br />
<span class="sy0">*</span> html <span class="re0">#menu</span> li ul <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">display</span><span class="sy0">:</span> <span class="kw2">block</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">z-index</span><span class="sy0">:</span> <span class="nu0">1</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">margin-top</span><span class="sy0">:</span> <span class="re3">2px</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">overflow</span><span class="sy0">:</span> <span class="kw2">visible</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="coMULTI">/* Это исправляет неверное определение ширины - абсолютное значение width: 100% без этих строк было бы равно ширине родительского &lt;a&gt; */</span><br />
&nbsp; &nbsp; <span class="kw1">padding-right</span><span class="sy0">:</span> <span class="re3">1000em</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">margin-right</span><span class="sy0">:</span> <span class="re3">-1000em</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><br />
<br />
<span class="sy0">*</span> html <span class="re0">#menu</span> li<span class="re1">.on</span> a table<span class="sy0">,</span><br />
<span class="sy0">*</span> html <span class="re0">#menu</span> li a<span class="re2">:hover </span>table<br />
<span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">visibility</span><span class="sy0">:</span> <span class="kw2">visible</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><br />
<br />
<span class="sy0">*</span> html <span class="re0">#menu</span> li<span class="re1">.on</span> a table ul <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">z-index</span><span class="sy0">:</span> -<span class="nu0">1</span><span class="sy0">;</span> <span class="coMULTI">/* Ключевое исправление - без него меню правильно работать не будет. Предназначено для исправления последствий многочисленных багов в реализации z-index. Благодаря этому исправлению, все li a:hover table, находящиеся перед li.on table, будут нормально отображаться (не будут перекрываться li.on table) */</span><br />
<span class="br0">&#125;</span><br />
<br />
<span class="sy0">*</span> html <span class="re0">#menu</span> li a<span class="re2">:hover </span>table ul <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">z-index</span><span class="sy0">:</span> <span class="nu0">100</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><br />
<br />
<span class="sy0">*</span> html <span class="re0">#menu</span> li a<span class="re2">:hover </span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">position</span><span class="sy0">:</span> <span class="kw2">static</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><br />
<br />
<span class="coMULTI">/* У таблицы теперь статическая позиция. Абсолютное/относительное позиционирование вносит ужасный бедлам в и без того глючную реализацию z-index в IE6. */</span><br />
<span class="sy0">*</span> html <span class="re0">#menu</span> table <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">border-collapse</span><span class="sy0">:</span> <span class="kw2">collapse</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">visibility</span><span class="sy0">:</span> <span class="kw2">hidden</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span>
        </div>
    </div>
</div>

<p><strong>Замечания по реализации:</strong></p>
<ol>
<li>Из-за плохой поддержки <code>z-index</code> Ишаком возможны проблемы с <code>border-top/bottom</code> у крайних правых элементов меню;</li>
<li>Из-за того, что пришлось использовать overflow-x, CSS не валидируется в рамках спецификации CSS&nbsp;2.1 (но проходит валидацию CSS&nbsp;3).</li>
</ol>
<p>Тестовая страница лежит <a href='http://static.sjinks.info/wp-content/uploads/2008/03/hybrid-horizontal.html' title='hybrid-horizontal.html'>здесь</a>.</p>
<p>© 2012 <a href="http://blog.sjinks.pro">Ars Longa, Vita Brevis</a>. Все права защищены. Перепубликация материалов без разрешения автора запрещена.</p>
<p>При использовании материалов блога наличие активной не закрытой от индексирования ссылки на <a href="http://blog.sjinks.pro/css/53-cross-browser-hybrid-css-menu-without-javascript/">источник</a> обязательно.</p>]]></content:encoded>
			<wfw:commentRss>http://blog.sjinks.pro/css/53-cross-browser-hybrid-css-menu-without-javascript/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Кросс-браузерное одноуровневое вертикальное меню без JavaScript</title>
		<link>http://blog.sjinks.pro/css/49-cross-browser-vertical-menu-without-javascript/</link>
		<comments>http://blog.sjinks.pro/css/49-cross-browser-vertical-menu-without-javascript/#comments</comments>
		<pubDate>Sun, 23 Mar 2008 01:45:46 +0000</pubDate>
		<dc:creator>Vladimir</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[IE6]]></category>
		<category><![CDATA[whatever:hover]]></category>
		<category><![CDATA[кросс-браузерное решение]]></category>
		<category><![CDATA[меню]]></category>
		<category><![CDATA[ошибка]]></category>
		<category><![CDATA[разметка]]></category>

		<guid isPermaLink="false">http://blog.sjinks.pro/css/49-cross-browser-vertical-menu-without-javascript/</guid>
		<description><![CDATA[Создание вертикального кросс-браузерного меню без использования JavaScript &#8212; чистый CSS! Так случилось, что срочно понадобилось сделать горизонтальное меню, причем для проекта, который нужно было сдавать вчера Естественно, самому писать не было времени, нужно было взять что-то готовое. Я недавно прочитал статью «Всплывающее гибридное меню на CSS», поэтому взял код именно оттуда. Но не в этом [...]<p>© 2012 <a href="http://blog.sjinks.pro">Ars Longa, Vita Brevis</a>. Все права защищены. Перепубликация материалов без разрешения автора запрещена.</p>
<p>При использовании материалов блога наличие активной не закрытой от индексирования ссылки на <a href="http://blog.sjinks.pro/css/49-cross-browser-vertical-menu-without-javascript/">источник</a> обязательно.</p>]]></description>
			<content:encoded><![CDATA[<h2><em>Создание вертикального кросс-браузерного <a href="http://blog.sjinks.pro/tag/menu/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  меню">меню</a> без использования <a href="http://blog.sjinks.pro/tag/javascript/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  JavaScript">JavaScript</a> &mdash; чистый <a href="http://blog.sjinks.pro/tag/css/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  CSS">CSS</a>!</em></h2>
<p>Так случилось, что срочно понадобилось сделать горизонтальное меню, причем для проекта, который нужно было сдавать вчера <img src='http://static.sjinks.info/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  Естественно, самому писать не было времени, нужно было взять что-то готовое. Я недавно прочитал статью «<a href="http://pokrovskii.com/vsplyivayuschee-gibridnoe-menyu-na-css-hybrid-css-dropdowns/">Всплывающее гибридное меню на CSS</a>», поэтому взял код именно оттуда. Но не в этом дело. У подавляющего большинства меню камнем преткновения становится <a href="http://blog.sjinks.pro/tag/ie6/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  IE6">IE6</a> — а всё из-за того, что он понимает <code>:hover</code> только для тэга <span class="codebox"><code class="html"><span class="sc2">&lt;<span class="kw2">a</span>&gt;</span></code></span>. Когда-то у меня был заказчик, требовавший, чтобы всё одинаково работало с выключенным JavaScript'ом; вспомнив его, я решил попробовать сделать меню, работающее безо всякого JavaScript. Так получилось, что попутно я нашел еще один очень интересный глюк в IE6 (о нём далее), в борьбе с которым у меня получилось вертикальное меню.<span id="more-49"></span><br />
<script type="text/javascript">odl.register(initLightbox);</script><br />
Друг заметил, что смысла уродоваться не было, ибо есть <a href="http://www.xs4all.nl/~peterned/csshover.html">whatever:hover</a>, который применяется многими разработчиками. Для всех, кто такого же мнения, отмечу, что <a href="http://blog.sjinks.pro/tag/whateverhover/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  whatever:hover">whatever:hover</a> — это HTC-компонент, суть JavaScript, вследствие чего при выключенном JavaScript работать не будет. Помимо этого, <a href="http://blog.sjinks.pro/tag/whateverhover/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  whatever:hover">whatever:hover</a> <em>не будет</em> работать при динамическом построении меню. И еще его использование негативно сказывается на отклик IE при начальном рендеринге (в смысле, когда весь DOM уже загружен, и наступило время выполнять deferred-скрипты и грузить картинки).</p>
<p>Приступим.<br />
Разметку я взял все из той же <a href="http://pokrovskii.com/vsplyivayuschee-gibridnoe-menyu-na-css-hybrid-css-dropdowns/">статьи</a>, она (<a href="http://blog.sjinks.pro/tag/markup/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  разметка">разметка</a>) имеет следующий вид:</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p4951">
        <div class="code xhtml" id="p49code51">
<span class="sc2">&lt;<span class="kw2">ul</span> <span class="kw3">id</span><span class="sy0">=</span><span class="st0">&quot;menu&quot;</span>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">li</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">a</span> <span class="kw3">href</span><span class="sy0">=</span><span class="st0">&quot;#&quot;</span>&gt;</span>Renaissance<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">a</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">ul</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">li</span>&gt;&lt;<span class="kw2">a</span> <span class="kw3">href</span><span class="sy0">=</span><span class="st0">&quot;#&quot;</span>&gt;</span>Brunelleschi<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">a</span>&gt;&lt;<span class="sy0">/</span><span class="kw2">li</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">li</span>&gt;&lt;<span class="kw2">a</span> <span class="kw3">href</span><span class="sy0">=</span><span class="st0">&quot;#&quot;</span>&gt;</span>Alberti<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">a</span>&gt;&lt;<span class="sy0">/</span><span class="kw2">li</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">li</span>&gt;&lt;<span class="kw2">a</span> <span class="kw3">href</span><span class="sy0">=</span><span class="st0">&quot;#&quot;</span>&gt;</span>Palladio<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">a</span>&gt;&lt;<span class="sy0">/</span><span class="kw2">li</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">li</span>&gt;&lt;<span class="kw2">a</span> <span class="kw3">href</span><span class="sy0">=</span><span class="st0">&quot;#&quot;</span>&gt;</span>Michelangelo<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">a</span>&gt;&lt;<span class="sy0">/</span><span class="kw2">li</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">li</span>&gt;&lt;<span class="kw2">a</span> <span class="kw3">href</span><span class="sy0">=</span><span class="st0">&quot;#&quot;</span>&gt;</span>Bramante<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">a</span>&gt;&lt;<span class="sy0">/</span><span class="kw2">li</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">ul</span>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">li</span>&gt;</span><br />
<br />
&nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">li</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">a</span> <span class="kw3">href</span><span class="sy0">=</span><span class="st0">&quot;#&quot;</span>&gt;</span>Art Nouveau<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">a</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">ul</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">li</span>&gt;&lt;<span class="kw2">a</span> <span class="kw3">href</span><span class="sy0">=</span><span class="st0">&quot;#&quot;</span>&gt;</span>Mackintosh<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">a</span>&gt;&lt;<span class="sy0">/</span><span class="kw2">li</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">li</span>&gt;&lt;<span class="kw2">a</span> <span class="kw3">href</span><span class="sy0">=</span><span class="st0">&quot;#&quot;</span>&gt;</span>Guimard<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">a</span>&gt;&lt;<span class="sy0">/</span><span class="kw2">li</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">li</span>&gt;&lt;<span class="kw2">a</span> <span class="kw3">href</span><span class="sy0">=</span><span class="st0">&quot;#&quot;</span>&gt;</span>Horta<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">a</span>&gt;&lt;<span class="sy0">/</span><span class="kw2">li</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">li</span>&gt;&lt;<span class="kw2">a</span> <span class="kw3">href</span><span class="sy0">=</span><span class="st0">&quot;#&quot;</span>&gt;</span>van de Velde<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">a</span>&gt;&lt;<span class="sy0">/</span><span class="kw2">li</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">ul</span>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">li</span>&gt;</span><br />
<br />
&nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">li</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">a</span> <span class="kw3">href</span><span class="sy0">=</span><span class="st0">&quot;#&quot;</span>&gt;</span>Modern<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">a</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">ul</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">li</span>&gt;&lt;<span class="kw2">a</span> <span class="kw3">href</span><span class="sy0">=</span><span class="st0">&quot;#&quot;</span>&gt;</span>Sullivan<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">a</span>&gt;&lt;<span class="sy0">/</span><span class="kw2">li</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">li</span>&gt;&lt;<span class="kw2">a</span> <span class="kw3">href</span><span class="sy0">=</span><span class="st0">&quot;#&quot;</span>&gt;</span>Le Corbusier<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">a</span>&gt;&lt;<span class="sy0">/</span><span class="kw2">li</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">li</span>&gt;&lt;<span class="kw2">a</span> <span class="kw3">href</span><span class="sy0">=</span><span class="st0">&quot;#&quot;</span>&gt;</span>Mies<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">a</span>&gt;&lt;<span class="sy0">/</span><span class="kw2">li</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">li</span>&gt;&lt;<span class="kw2">a</span> <span class="kw3">href</span><span class="sy0">=</span><span class="st0">&quot;#&quot;</span>&gt;</span>Gropius<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">a</span>&gt;&lt;<span class="sy0">/</span><span class="kw2">li</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">li</span>&gt;&lt;<span class="kw2">a</span> <span class="kw3">href</span><span class="sy0">=</span><span class="st0">&quot;#&quot;</span>&gt;</span>Yamasaki<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">a</span>&gt;&lt;<span class="sy0">/</span><span class="kw2">li</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">ul</span>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">li</span>&gt;</span><br />
<br />
&nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">li</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">a</span> <span class="kw3">href</span><span class="sy0">=</span><span class="st0">&quot;#&quot;</span>&gt;</span>Postmodern<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">a</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">ul</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">li</span>&gt;&lt;<span class="kw2">a</span> <span class="kw3">href</span><span class="sy0">=</span><span class="st0">&quot;#&quot;</span>&gt;</span>Venturi<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">a</span>&gt;&lt;<span class="sy0">/</span><span class="kw2">li</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">li</span>&gt;&lt;<span class="kw2">a</span> <span class="kw3">href</span><span class="sy0">=</span><span class="st0">&quot;#&quot;</span>&gt;</span>Eisenman<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">a</span>&gt;&lt;<span class="sy0">/</span><span class="kw2">li</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">li</span>&gt;&lt;<span class="kw2">a</span> <span class="kw3">href</span><span class="sy0">=</span><span class="st0">&quot;#&quot;</span>&gt;</span>Stern<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">a</span>&gt;&lt;<span class="sy0">/</span><span class="kw2">li</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">li</span>&gt;&lt;<span class="kw2">a</span> <span class="kw3">href</span><span class="sy0">=</span><span class="st0">&quot;#&quot;</span>&gt;</span>Graves<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">a</span>&gt;&lt;<span class="sy0">/</span><span class="kw2">li</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">li</span>&gt;&lt;<span class="kw2">a</span> <span class="kw3">href</span><span class="sy0">=</span><span class="st0">&quot;#&quot;</span>&gt;</span>Gehry<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">a</span>&gt;&lt;<span class="sy0">/</span><span class="kw2">li</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">ul</span>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">li</span>&gt;</span><br />
<br />
&nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">li</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">a</span> <span class="kw3">href</span><span class="sy0">=</span><span class="st0">&quot;#&quot;</span>&gt;</span>Digital<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">a</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">ul</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">li</span>&gt;&lt;<span class="kw2">a</span> <span class="kw3">href</span><span class="sy0">=</span><span class="st0">&quot;#&quot;</span>&gt;</span>Xenakis<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">a</span>&gt;&lt;<span class="sy0">/</span><span class="kw2">li</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">li</span>&gt;&lt;<span class="kw2">a</span> <span class="kw3">href</span><span class="sy0">=</span><span class="st0">&quot;#&quot;</span>&gt;</span>Lynn<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">a</span>&gt;&lt;<span class="sy0">/</span><span class="kw2">li</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">li</span>&gt;&lt;<span class="kw2">a</span> <span class="kw3">href</span><span class="sy0">=</span><span class="st0">&quot;#&quot;</span>&gt;</span>Diller+Scofidio<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">a</span>&gt;&lt;<span class="sy0">/</span><span class="kw2">li</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">li</span>&gt;&lt;<span class="kw2">a</span> <span class="kw3">href</span><span class="sy0">=</span><span class="st0">&quot;#&quot;</span>&gt;</span>Zellner<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">a</span>&gt;&lt;<span class="sy0">/</span><span class="kw2">li</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">li</span>&gt;&lt;<span class="kw2">a</span> <span class="kw3">href</span><span class="sy0">=</span><span class="st0">&quot;#&quot;</span>&gt;</span>Hadid<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">a</span>&gt;&lt;<span class="sy0">/</span><span class="kw2">li</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">ul</span>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">li</span>&gt;</span><br />
<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">ul</span>&gt;</span>
        </div>
    </div>
</div>

<p>Начнём с браузеров, поддерживающих CSS 2.1. Таблица стилей для них будет иметь следующий вид:</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p4952">
        <div class="code css" id="p49code52">
<span class="re0">#menu</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">height</span><span class="sy0">:</span> <span class="re3">2em</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><br />
<br />
<span class="re0">#menu</span><span class="sy0">,</span> <span class="re0">#menu</span> ul<span class="sy0">,</span> <span class="re0">#menu</span> ul li <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">list-style</span><span class="sy0">:</span> <span class="kw2">none</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">display</span><span class="sy0">:</span> <span class="kw2">block</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">margin</span><span class="sy0">:</span> <span class="nu0">0</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">padding</span><span class="sy0">:</span> <span class="nu0">0</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><br />
<br />
<span class="re0">#menu</span> li <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">float</span><span class="sy0">:</span> <span class="kw1">left</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">height</span><span class="sy0">:</span> <span class="re3">2em</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">line-height</span><span class="sy0">:</span> <span class="re3">2em</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">position</span><span class="sy0">:</span> <span class="kw2">relative</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><br />
<br />
<span class="re0">#menu</span> li a <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">display</span><span class="sy0">:</span> <span class="kw2">block</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">border</span><span class="sy0">:</span> <span class="re3">1px</span> <span class="kw2">solid</span> <span class="kw2">red</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">vertical-align</span><span class="sy0">:</span> <span class="kw2">middle</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">padding</span><span class="sy0">:</span> 0 <span class="re3">.5em</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><br />
<br />
<span class="re0">#menu</span> li ul <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">display</span><span class="sy0">:</span> <span class="kw2">none</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">position</span><span class="sy0">:</span> <span class="kw2">absolute</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">top</span><span class="sy0">:</span> <span class="re3">2em</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">left</span><span class="sy0">:</span> <span class="nu0">0</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">margin</span><span class="sy0">:</span> <span class="re3">1px</span> 0 0 <span class="nu0">0</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">padding</span><span class="sy0">:</span> <span class="nu0">0</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">background</span><span class="sy0">:</span> <span class="re0">#FFF</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">width</span><span class="sy0">:</span> <span class="re3">100px</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><br />
<br />
<span class="re0">#menu</span> li<span class="re2">:hover </span>ul <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">display</span><span class="sy0">:</span> <span class="kw2">block</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><br />
<br />
<span class="re0">#menu</span> li ul li <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">float</span><span class="sy0">:</span> <span class="kw2">none</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">width</span><span class="sy0">:</span> <span class="re3"><span class="nu0">100</span>%</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><br />
<br />
<span class="re0">#menu</span> li ul li a <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">border</span><span class="sy0">:</span> <span class="re3">1px</span> <span class="kw2">solid</span> <span class="kw2">red</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">vertical-align</span><span class="sy0">:</span> <span class="kw2">middle</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">padding</span><span class="sy0">:</span> 0 <span class="re3">.5em</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span>
        </div>
    </div>
</div>

<p>Вся магия содержится в двух правилах:</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p4953">
        <div class="code css" id="p49code53">
<span class="re0">#menu</span> li ul <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">display</span><span class="sy0">:</span> <span class="kw2">none</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">position</span><span class="sy0">:</span> <span class="kw2">absolute</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">top</span><span class="sy0">:</span> <span class="re3">2em</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">left</span><span class="sy0">:</span> <span class="nu0">0</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">margin</span><span class="sy0">:</span> <span class="re3">1px</span> 0 0 <span class="nu0">0</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">padding</span><span class="sy0">:</span> <span class="nu0">0</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">background</span><span class="sy0">:</span> <span class="re0">#FFF</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">width</span><span class="sy0">:</span> <span class="re3">100px</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><br />
<br />
<span class="re0">#menu</span> li<span class="re2">:hover </span>ul <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">display</span><span class="sy0">:</span> <span class="kw2">block</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span>
        </div>
    </div>
</div>

<p>Первое задаёт размеры/позицию выпадающего меню; позиция вычисляется относительно родительского элемента <span class="codebox"><code class="css">&lt;li<span class="sy0">&gt;</span></code></span>. Второе же правило показывает выпадающее меню при наведении курсора мыши на заголовок. Ничего сложного.</p>
<p>Презентационные стили:</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p4954">
        <div class="code css" id="p49code54">
<span class="re0">#menu</span> <span class="sy0">&gt;</span> li <span class="sy0">+</span> li <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">margin-left</span><span class="sy0">:</span> <span class="re3">-1px</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><br />
<br />
<span class="re0">#menu</span> li ul li <span class="sy0">+</span> li <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">margin-top</span><span class="sy0">:</span> <span class="re3">-1px</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><br />
<br />
<span class="re0">#menu</span> li a <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">outline</span><span class="sy0">:</span> <span class="nu0">0</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">text-decoration</span><span class="sy0">:</span> <span class="kw2">none</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><br />
<br />
<span class="re0">#menu</span> li<span class="re2">:hover </span>a<span class="sy0">,</span> <span class="re0">#menu</span> li a<span class="re2">:hover </span>a <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">background</span><span class="sy0">:</span> <span class="re0">#EEE</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><br />
<br />
<span class="re0">#menu</span> li li a<span class="sy0">,</span> <span class="re0">#menu</span> li<span class="re2">:hover </span>li a<span class="sy0">,</span> <span class="re0">#menu</span> li a<span class="re2">:hover </span>li a <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">background</span><span class="sy0">:</span> <span class="re0">#FFF</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><br />
<br />
<span class="re0">#menu</span> li ul li<span class="re2">:hover </span>a<span class="sy0">,</span> <span class="re0">#menu</span> li ul li a<span class="re2">:hover </span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">background</span><span class="sy0">:</span> <span class="re0">#EAFBFC</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span>
        </div>
    </div>
</div>

<p>Первые два правила позиционируют элементы списков так, чтобы <code>border-right</code> (<code>border-bottom</code>) предыдущего элемента совпадал с <code>border-left</code> (<code>border-top</code>) следующего.</p>
<p>Теперь переходим к IE6. В нём не работает второе магическое правило (<code>#menu li:hover ul</code>), так как IE6 воспринимает <code>:hover</code> только на элементах <code>&lt;a&gt;</code>.</p>
<p>Первая мысль — закрывать для IE6 <span class="codebox"><code class="html"><span class="sc2">&lt;<span class="kw2">a</span>&gt;</span></code></span> не до списка, а после. Мысль хорошая, но просмотр дерева в IE Developer Toolbar показал, что IE как-то «криво» понимает код (в принципе, здесь Ишак прав: невалидный код каждый волен понимать так, как может). Следовательно, надо список «обернуть» во что-нибудь, но так, чтобы <span class="codebox"><code class="html"><span class="sc2">&lt;<span class="kw2">a</span>&gt;</span></code></span> нормально работал. И совершенно случайно <img src='http://static.sjinks.info/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  я вспомнил один случай, когда разгребал одну ужасную табличную вёрстку (а уровень вложенности таблиц переваливал там за 16), и открытый тэг <span class="codebox"><code class="html"><span class="sc2">&lt;<span class="kw2">a</span>&gt;</span></code></span> превратил всю таблицу в сплошную гиперссылку. Чем чёрт не шутит, я решил попробовать.</p>
<p>Код стал таким:</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p4955">
        <div class="code xhtml" id="p49code55">
<span class="sc2">&lt;<span class="kw2">li</span>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">a</span> <span class="kw3">href</span><span class="sy0">=</span><span class="st0">&quot;#&quot;</span>&gt;</span>Renaissance<span class="sc-2">&lt;!--[if IE 7]&gt;&lt;!--&gt;</span><span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">a</span>&gt;</span><span class="sc-2">&lt;!--&lt;![endif]--&gt;</span><br />
&nbsp; &nbsp; <span class="sc-2">&lt;!--[if lte IE 6]&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;![endif]--&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">ul</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">li</span>&gt;&lt;<span class="kw2">a</span> <span class="kw3">href</span><span class="sy0">=</span><span class="st0">&quot;#&quot;</span>&gt;</span>Brunelleschi<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">a</span>&gt;&lt;<span class="sy0">/</span><span class="kw2">li</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">li</span>&gt;&lt;<span class="kw2">a</span> <span class="kw3">href</span><span class="sy0">=</span><span class="st0">&quot;#&quot;</span>&gt;</span>Alberti<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">a</span>&gt;&lt;<span class="sy0">/</span><span class="kw2">li</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">li</span>&gt;&lt;<span class="kw2">a</span> <span class="kw3">href</span><span class="sy0">=</span><span class="st0">&quot;#&quot;</span>&gt;</span>Palladio<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">a</span>&gt;&lt;<span class="sy0">/</span><span class="kw2">li</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">li</span>&gt;&lt;<span class="kw2">a</span> <span class="kw3">href</span><span class="sy0">=</span><span class="st0">&quot;#&quot;</span>&gt;</span>Michelangelo<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">a</span>&gt;&lt;<span class="sy0">/</span><span class="kw2">li</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">li</span>&gt;&lt;<span class="kw2">a</span> <span class="kw3">href</span><span class="sy0">=</span><span class="st0">&quot;#&quot;</span>&gt;</span>Bramante<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">a</span>&gt;&lt;<span class="sy0">/</span><span class="kw2">li</span>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">ul</span>&gt;</span><br />
&nbsp; &nbsp; <span class="sc-2">&lt;!--[if lte IE 6]&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/a&gt;&lt;![endif]--&gt;</span><br />
<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">li</span>&gt;</span>
        </div>
    </div>
</div>

<p>Получилось! Ишак нормально распарсил код и сгенерировал нормальное дерево:<br/><br />
<a href='http://static.sjinks.info/wp-content/uploads/2008/03/2008-03-23_031712.png' title='XML-дерево, сгенерированное IE' rel="lightbox"><img src='http://static.sjinks.info/wp-content/uploads/2008/03/2008-03-23_031712.thumbnail.png' alt='XML-дерево, сгенерированное IE' /></a></p>
<p>Теперь нужно немного поколдовать, чтобы заставить всё работать как надо.<br />
Первое, что приходит в голову — это такие вот стили:</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p4956">
        <div class="code css" id="p49code56">
<span class="sy0">*</span> html <span class="re0">#menu</span> li ul <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">display</span><span class="sy0">:</span> <span class="kw2">block</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><br />
<br />
<span class="sy0">*</span> html <span class="re0">#menu</span> li a<span class="re2">:hover </span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">position</span><span class="sy0">:</span> <span class="kw2">static</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><br />
<br />
<span class="sy0">*</span> html <span class="re0">#menu</span> li a<span class="re2">:hover </span>table <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">display</span><span class="sy0">:</span> <span class="kw2">block</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><br />
<br />
<span class="sy0">*</span> html <span class="re0">#menu</span> table <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">position</span><span class="sy0">:</span> <span class="kw2">absolute</span><span class="sy0">;</span> <br />
&nbsp; &nbsp; <span class="kw1">border-collapse</span><span class="sy0">:</span> <span class="kw2">collapse</span><span class="sy0">;</span> <br />
&nbsp; &nbsp; <span class="kw1">top</span><span class="sy0">:</span> <span class="nu0">0</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">left</span><span class="sy0">:</span> <span class="re3">-1px</span><span class="sy0">;</span> <br />
&nbsp; &nbsp; <span class="kw1">display</span><span class="sy0">:</span> <span class="kw2">none</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span>
        </div>
    </div>
</div>

<p>Иными словами, мы всю магию перенесли на уровень выше (так как теперь у нас <span class="codebox"><code class="html"><span class="sc2">&lt;<span class="kw2">ul</span>&gt;</span></code></span> обёрнут <span class="codebox"><code class="html"><span class="sc2">&lt;<span class="kw2">table</span>&gt;</span></code></span>). Правило <span class="codebox"><code class="css"><span class="kw1">position</span><span class="sy0">:</span> <span class="kw2">static</span></code></span> в <span class="codebox"><code class="css"><span class="sy0">*</span> html <span class="re0">#menu</span> li a<span class="sy0">:</span>hover</code></span> — это вуду, без этого не работает <img src='http://static.sjinks.info/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  (как вариант, можно задать <span class="codebox"><code class="css"><span class="kw1">background</span></code></span> с цветом, отличным от <span class="codebox"><code class="css"><span class="kw2">transparent</span></code></span>).</p>
<p>И тут начинаются проблемы. Я, конечно, всегда подозревал, что IE написан очень криво, но чтобы <em>так криво</em>… После нескольких наведений на меню получается такая картина:</p>
<p><a href='http://static.sjinks.info/wp-content/uploads/2008/03/2008-03-23_033307.png' title='Ошибка IE6' rel="lightbox"><img src='http://static.sjinks.info/wp-content/uploads/2008/03/2008-03-23_033307.thumbnail.png' alt='Ошибка IE6' /></a></p>
<p>То есть таблицы как бы нет (<span class="codebox"><code class="css"><span class="kw1">display</span><span class="sy0">:</span> <span class="kw2">none</span></code></span>), но место в потоке она занимает, и при этом хотя текста дочерних элементов не видно, но <span class="codebox"><code class="css"><span class="kw1">border</span></code></span> остался. Нет таблицы, и в то же время есть. Чудеса.</p>
<p>От таких чудес невольно опускаются руки. Потратив пару часов на эксперименты, я чудом нашел рабочую комбинацию: вместо <span class="codebox"><code class="css"><span class="kw1">display</span><span class="sy0">:</span> <span class="kw2">none</span>/<span class="kw2">block</span></code></span> нужно использовать <span class="codebox"><code class="css"><span class="kw1">visibility</span><span class="sy0">:</span> <span class="kw2">visible</span>/<span class="kw2">hidden</span></code></span>. Не знаю, почему, но оно работает. Но всё же мне интересно, что курили разработчики, писавшие Ишака?</p>
<p>Страница с рабочим кросс-браузерным меню находится <a href='http://static.sjinks.info/wp-content/uploads/2008/03/vertical-one-level.html' title='vertical-one-level.html'>здесь</a>. Никакого JavaScript, только CSS!</p>
<p><strong><ins datetime="2008-07-02T21:53:38+00:00">Update:</ins></strong> <a href="http://www.alexilin.ru/vypadayushhee-menyu-bez-javascript/" rel="external nofollow">еще одна версия</a> вертикального меню.</p>
<p>© 2012 <a href="http://blog.sjinks.pro">Ars Longa, Vita Brevis</a>. Все права защищены. Перепубликация материалов без разрешения автора запрещена.</p>
<p>При использовании материалов блога наличие активной не закрытой от индексирования ссылки на <a href="http://blog.sjinks.pro/css/49-cross-browser-vertical-menu-without-javascript/">источник</a> обязательно.</p>]]></content:encoded>
			<wfw:commentRss>http://blog.sjinks.pro/css/49-cross-browser-vertical-menu-without-javascript/feed/</wfw:commentRss>
		<slash:comments>32</slash:comments>
		</item>
		<item>
		<title>IE6/7: слишком широкие кнопки</title>
		<link>http://blog.sjinks.pro/javascript/36-too-wide-button-in-ie-6-7/</link>
		<comments>http://blog.sjinks.pro/javascript/36-too-wide-button-in-ie-6-7/#comments</comments>
		<pubDate>Sun, 16 Mar 2008 08:57:51 +0000</pubDate>
		<dc:creator>Vladimir</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[IE6]]></category>
		<category><![CDATA[IE7]]></category>
		<category><![CDATA[ошибка]]></category>
		<category><![CDATA[хак]]></category>

		<guid isPermaLink="false">http://blog.sjinks.pro/uncategorized/36-too-wide-button-in-ie-6-7/</guid>
		<description><![CDATA[Как исправить глюк IE6/7, связанный с расползанием кнопки с длинным текстом Читая один замечательный блог, я наткнулся на заметку о том, что в IE6/7 кнопки c "длинным текстом" становятся очень длинными. Я не удержался и проверил: действительно. Причем только в IE6 и IE7, в IE8 (на удивление) всё в порядке. Тестовая разметка (взята из исходной [...]<p>© 2012 <a href="http://blog.sjinks.pro">Ars Longa, Vita Brevis</a>. Все права защищены. Перепубликация материалов без разрешения автора запрещена.</p>
<p>При использовании материалов блога наличие активной не закрытой от индексирования ссылки на <a href="http://blog.sjinks.pro/javascript/36-too-wide-button-in-ie-6-7/">источник</a> обязательно.</p>]]></description>
			<content:encoded><![CDATA[<h2><em>Как исправить глюк <a href="http://blog.sjinks.pro/tag/ie6/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  IE6">IE6</a>/7, связанный с расползанием кнопки с длинным текстом</em></h2>
<p>Читая <a href="http://pokrovskii.com/" onclick="pageTracker._trackPageview('/outgoing/pokrovskii.com')">один замечательный блог</a>, я наткнулся на <a href="http://pokrovskii.com/mnogo-teksta-v-knopke-ie6-7/" onclick="pageTracker._trackPageview('/outgoing/pokrovskii.com/mnogo-teksta-v-knopke-ie6-7')">заметку</a> о том, что в IE6/7 кнопки c "длинным текстом" становятся очень длинными.<span id="more-36"></span></p>
<p>Я не удержался и проверил: действительно. Причем только в IE6 и <a href="http://blog.sjinks.pro/tag/ie7/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  IE7">IE7</a>, в <a href="http://blog.sjinks.pro/tag/ie8/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  IE8">IE8</a> (<a href="http://blog.sjinks.pro/css/27-why-microsoft-calls-alpha-beta-or-what-acid-tests-are-for/">на удивление</a>) всё в порядке.</p>
<p>Тестовая <a href="http://blog.sjinks.pro/tag/markup/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  разметка">разметка</a> (взята из исходной статьи):</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p3660">
        <div class="code xhtml" id="p36code60">
<span class="sc2">&lt;<span class="kw2">form</span> <span class="kw3">action</span><span class="sy0">=</span><span class="st0">&quot;#&quot;</span> <span class="kw3">method</span><span class="sy0">=</span><span class="st0">&quot;get&quot;</span>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">input</span> <span class="kw3">value</span><span class="sy0">=</span><span class="st0">&quot;В IE6-7 кнопку разносит как студента-интеллигента после рюмки абсента&quot;</span> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;submit&quot;</span> <span class="kw3">id</span><span class="sy0">=</span><span class="st0">&quot;test&quot;</span><span class="sy0">/</span>&gt;</span><br />
<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">form</span>&gt;</span>
        </div>
    </div>
</div>

<p>Результат (IE7):<br />
<img src='http://static.sjinks.info/wp-content/uploads/2008/03/2008-03-16_095212.png' alt='Пример широкой кнопки' /></p>
<p>В IE6 аналогично.</p>
<p>Первым делом я стал грешить на стили по умолчанию (например, padding, заданный в процентах от ширины). Поэтому решил проверить очень простым скриптом:</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p3661">
        <div class="code javascript" id="p36code61">
<span class="kw2">var</span> b <span class="sy0">=</span> document.<span class="me1">getElementById</span><span class="br0">&#40;</span><span class="st0">'test'</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="kw2">var</span> s <span class="sy0">=</span> <span class="br0">&#40;</span>b.<span class="me1">currentStyle</span><span class="br0">&#41;</span> <span class="sy0">?</span> b.<span class="me1">currentStyle</span> <span class="sy0">:</span> b.<span class="me1">ownerDocument</span>.<span class="me1">defaultView</span>.<span class="me1">getComputedStyle</span><span class="br0">&#40;</span>b<span class="sy0">,</span> <span class="st0">''</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw2">var</span> prop <span class="kw1">in</span> s<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; document.<span class="kw1">write</span><span class="br0">&#40;</span><span class="st0">'&lt;b&gt;'</span> <span class="sy0">+</span> prop <span class="sy0">+</span> <span class="st0">'&lt;/b&gt;: '</span> <span class="sy0">+</span> s<span class="br0">&#91;</span>prop<span class="br0">&#93;</span> <span class="sy0">+</span> <span class="st0">'&lt;br/&gt;'</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span>
        </div>
    </div>
</div>

<p>Увы&hellip; Зато, кому интересно, получились такие дефолтные стили в разных браузерах:</p>
<table class="bordered" cellpadding="2" cellspacing="1">
<thead>
<tr>
<th>&nbsp;</th>
<th><abbr title="FireFox">FF</abbr>2</th>
<th><abbr title="Internet Explorer">IE</abbr>6</th>
<th><abbr title="Internet Explorer">IE</abbr>7</th>
<th><abbr title="Internet Explorer">IE</abbr>8</th>
<th>Opera&nbsp;9</th>
<th>Safari&nbsp;3</th>
</tr>
</thead>
<tbody align="center">
<tr>
<td align="right"><strong>background</strong></td>
<td>rgb(212, 208, 200)</td>
<td>rgb(212, 208, 200)</td>
<td>rgb(212, 208, 200)</td>
<td>rgb(212, 208, 200)</td>
<td>transparent (???)</td>
<td>rgb(192, 192, 192)</td>
</tr>
<tr>
<td align="right"><strong>border</strong></td>
<td>2px outset rgb(212, 208, 200)</td>
<td>2px outset rgb(0, 0, 0)</td>
<td>2px outset rgb(0, 0, 0)</td>
<td>3px outset rgb(0, 0, 0)</td>
<td>2 both transparent (???)</td>
<td>0 none rgb(0, 0, 0)</td>
</tr>
<tr>
<td align="right"><strong>display</strong></td>
<td>inline</td>
<td>inline</td>
<td>inline</td>
<td>inline-block</td>
<td>inline</td>
<td>inline-block</td>
</tr>
<tr>
<td align="right"><strong>font</strong></td>
<td>normal normal 400 13.3333px/normal "MS Shell Dlg"</td>
<td>normal normal 400 10pt/normal "MS Shell Dlg"</td>
<td>normal normal 400 10pt/normal "MS Shell Dlg"</td>
<td>normal normal 400 10pt/normal Arial</td>
<td>normal normal normal relative/normal Arial</td>
<td>normal normal normal 11px/normal "Lucida Grande"</td>
</tr>
<tr>
<td align="right"><strong>height</strong></td>
<td>18px</td>
<td>auto</td>
<td>auto</td>
<td>auto</td>
<td>auto</td>
<td>18px</td>
</tr>
<tr>
<td align="right"><strong>margin</strong></td>
<td>0</td>
<td>auto</td>
<td>auto</td>
<td>auto</td>
<td>0</td>
<td>2px</td>
</tr>
<tr>
<td align="right"><strong>overflow</strong></td>
<td>visible</td>
<td>hidden</td>
<td>hidden</td>
<td>hidden</td>
<td>visible</td>
<td>visible</td>
</tr>
<tr>
<td align="right"><strong>padding</strong></td>
<td>0 6px</td>
<td>0</td>
<td>0</td>
<td>1px 8px</td>
<td>1px 8px</td>
<td>0 8px</td>
</tr>
</tbody>
</table>
<p>Видим, что у всех браузеров, кроме IE, <code>overflow</code> установлено в <code>visible</code>. Хотя <code>overflow</code> не должно играть здесь никакой роли, интересно проверить, как IE себя поведёт при дефолтных стилях <a href="http://blog.sjinks.pro/tag/firefox/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  FireFox">FireFox</a>. Меняем разметку:</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p3662">
        <div class="code xhtml" id="p36code62">
<span class="sc2">&lt;<span class="kw2">form</span> <span class="kw3">action</span><span class="sy0">=</span><span class="st0">&quot;#&quot;</span> <span class="kw3">method</span><span class="sy0">=</span><span class="st0">&quot;get&quot;</span>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">input</span> <span class="kw3">value</span><span class="sy0">=</span><span class="st0">&quot;В IE6-7 кнопку разносит как студента-интеллигента после рюмки абсента&quot;</span> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;submit&quot;</span> <span class="kw3">id</span><span class="sy0">=</span><span class="st0">&quot;test&quot;</span> <span class="kw3">style</span><span class="sy0">=</span><span class="st0">&quot;overflow: visible;&quot;</span><span class="sy0">/</span>&gt;</span><br />
<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">form</span>&gt;</span>
        </div>
    </div>
</div>

<p>Сработало! Вот они, чудеса:<br />
<img src='http://static.sjinks.info/wp-content/uploads/2008/03/2008-03-16_105142.png' alt='Теперь всё нормально' /></p>
<p>Я не берусь объяснять, почему такое вот исправление сработало. Как говорил классик,</p>
<blockquote cite="http://www.positioniseverything.net/explorer/doubled-margin.html">Why is this happening? Don't ask such silly questions! This is IE, remember? Conformance with the specs is only to be hoped for, not expected. The simple fact is it does happen.</blockquote>
<p>© 2012 <a href="http://blog.sjinks.pro">Ars Longa, Vita Brevis</a>. Все права защищены. Перепубликация материалов без разрешения автора запрещена.</p>
<p>При использовании материалов блога наличие активной не закрытой от индексирования ссылки на <a href="http://blog.sjinks.pro/javascript/36-too-wide-button-in-ie-6-7/">источник</a> обязательно.</p>]]></content:encoded>
			<wfw:commentRss>http://blog.sjinks.pro/javascript/36-too-wide-button-in-ie-6-7/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Почему Microsoft называет альфы бетами, или, кому нужны ACID-тесты</title>
		<link>http://blog.sjinks.pro/css/27-why-microsoft-calls-alpha-beta-or-what-acid-tests-are-for/</link>
		<comments>http://blog.sjinks.pro/css/27-why-microsoft-calls-alpha-beta-or-what-acid-tests-are-for/#comments</comments>
		<pubDate>Fri, 14 Mar 2008 07:33:32 +0000</pubDate>
		<dc:creator>Vladimir</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[IE6]]></category>
		<category><![CDATA[IE7]]></category>
		<category><![CDATA[IE8]]></category>
		<category><![CDATA[ошибка]]></category>
		<category><![CDATA[хак]]></category>

		<guid isPermaLink="false">http://blog.sjinks.pro/%d0%b1%d0%b5%d0%b7-%d1%80%d1%83%d0%b1%d1%80%d0%b8%d0%ba%d0%b8/27-why-microsoft-calls-alpha-beta-or-what-acid-tests-are-for/</guid>
		<description><![CDATA[IE8 Beta 1 не оправдывает своих ожиданий&#8230; Не так давно я боролся с вертикальным выравниванием в Internet Explorer, и вот опять оказалось, что с выходом IE8 Beta это было всё напрасно. Как и многие, я не рискнул устанавливать IE8 на основную машину, поэтому поставил на виртуальную. Затем зашёл на парочку сайтов, которые отображаются нормально во [...]<p>© 2012 <a href="http://blog.sjinks.pro">Ars Longa, Vita Brevis</a>. Все права защищены. Перепубликация материалов без разрешения автора запрещена.</p>
<p>При использовании материалов блога наличие активной не закрытой от индексирования ссылки на <a href="http://blog.sjinks.pro/css/27-why-microsoft-calls-alpha-beta-or-what-acid-tests-are-for/">источник</a> обязательно.</p>]]></description>
			<content:encoded><![CDATA[<h2><em><a href="http://blog.sjinks.pro/tag/ie8/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  IE8">IE8</a> Beta 1 не оправдывает своих ожиданий&#8230;</em></h2>
<p>Не так давно я боролся с <a href="http://blog.sjinks.pro/css/24-vertical-align-without-tables/">вертикальным выравниванием</a> в Internet Explorer, и вот опять оказалось, что с выходом IE8 Beta это было всё напрасно. Как и многие, я не рискнул устанавливать IE8 на основную машину, поэтому поставил на виртуальную. Затем зашёл на парочку сайтов, которые отображаются нормально во всех <em>остальных</em> браузерах&hellip; Я был потрясён и разочарован&hellip;</p>
<p>Возникает чувство, что Micro$oft называет свои alpha-релизы бетами. Они делали акцент на том, что MS IE8 проходит тест ACID2, так гордились этим&hellip; А оказалось, что всё как обычно: убрали один старый баг, внесли десяток новых.<span id="more-27"></span></p>
<p><script type="text/javascript">odl.register(initLightbox);</script></p>
<p>Что меня шокировало больше всего: <span class="codebox"><code class="css"><span class="kw1">vertical-align</span></code></span> больше не работает. Не работает и <code>valign="middle"</code> для элементов <span class="codebox"><code class="html"><span class="sc2">&lt;<span class="kw2">td</span>&gt;</span></code></span>. <span class="codebox"><code class="html"><span class="sc2">&lt;<span class="kw2">br</span> <span class="kw3">style</span><span class="sy0">=</span><span class="st0">&quot;clear: both&quot;</span><span class="sy0">/</span>&gt;</span></code></span> не всегда работает. Ширина элемента вычисляется довольно криво (тем не менее, тест ACID2 проходится). IE8 поддерживает хаки для <a href="http://blog.sjinks.pro/tag/ie7/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  IE7">IE7</a>. Например, этот код сработает и в <a href="http://blog.sjinks.pro/tag/ie7/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  IE7">IE7</a>, и в IE8:</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p2769">
        <div class="code css" id="p27code69">
<span class="sy0">*</span><span class="re2">:first-child</span><span class="sy0">+</span>html p <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">color</span><span class="sy0">:</span> <span class="kw2">red</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span>
        </div>
    </div>
</div>

<p>Так вот Micro$oft исправил поддержку <a href="http://blog.sjinks.pro/tag/css/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  CSS">CSS</a>. Кстати, интересно, почему тогда не срабатывает старый <a href="http://blog.sjinks.pro/tag/hack/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  хак">хак</a> для <a href="http://blog.sjinks.pro/tag/ie6/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  IE6">IE6</a> (<span class="codebox"><code class="css"><span class="sy0">*</span> html p</code></span>)? </p>
<p>В соответствии со стандартами CSS:</p>
<blockquote cite="http://www.w3.org/TR/css3-selectors/#first-child-pseudo">The <code>:first-child</code> pseudo-class represents an element that is the first child of some other element.</blockquote>
<blockquote cite="http://www.w3.org/TR/CSS21/selector.html#adjacent-selectors">Adjacent sibling selectors have the following syntax: E1 + E2, where E2 is the subject of the selector. The selector matches if E1 and E2 share the same parent in the document tree and E1 immediately precedes E2, ignoring non-element nodes (such as text nodes and comments).</blockquote>
<p>Таким образом, <span class="codebox"><code class="css"><span class="sy0">*</span><span class="re2">:first-child</span><span class="sy0">+</span>html</code></span> будет читаться как «элемент <span class="codebox"><code class="html">html</code></span>, предшествующий (любому) элементу, который является первым потомком неуказанного элемента». То есть это будет соответствовать такой вот структуре:</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p2770">
        <div class="code xhtml" id="p27code70">
&nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">div</span> <span class="kw3">id</span><span class="sy0">=</span><span class="st0">&quot;unknown_element&quot;</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">div</span> <span class="kw3">id</span><span class="sy0">=</span><span class="st0">&quot;first_child&quot;</span>&gt;</span>*:first-child<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">div</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">div</span> <span class="kw3">id</span><span class="sy0">=</span><span class="st0">&quot;adjacent&quot;</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; *:first-child+#adjacent<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">div</span> <span class="kw3">id</span><span class="sy0">=</span><span class="st0">&quot;test&quot;</span>&gt;</span>*:first-child+#adjacent #test<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">div</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">div</span>&gt;</span> <br />
&nbsp; &nbsp; <span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">div</span>&gt;</span>
        </div>
    </div>
</div>

<p>Для удовлетворения любопытства:</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p2771">
        <div class="code css" id="p27code71">
<span class="re0">#unknown_element</span> <span class="br0">&#123;</span> <span class="kw1">background</span><span class="sy0">:</span> <span class="kw2">yellow</span><span class="sy0">;</span> <span class="kw1">height</span><span class="sy0">:</span> <span class="re3">100px</span><span class="sy0">;</span> <span class="kw1">padding</span><span class="sy0">:</span> <span class="re3">5px</span><span class="sy0">;</span> <span class="br0">&#125;</span><br />
<span class="re0">#first_child</span> <span class="br0">&#123;</span> <span class="kw1">background</span><span class="sy0">:</span> <span class="kw1">blue</span><span class="sy0">;</span> <span class="kw1">height</span><span class="sy0">:</span> <span class="re3">50px</span><span class="sy0">;</span> <span class="br0">&#125;</span><br />
<span class="re0">#adjacent</span> <span class="br0">&#123;</span> <span class="kw1">background</span><span class="sy0">:</span> <span class="kw2">red</span><span class="sy0">;</span> <span class="kw1">height</span><span class="sy0">:</span> <span class="re3">50px</span><span class="sy0">;</span> <span class="br0">&#125;</span><br />
<span class="re0">#test</span> <span class="br0">&#123;</span> <span class="kw1">height</span><span class="sy0">:</span> <span class="re3">40px</span><span class="sy0">;</span> <span class="kw1">margin</span><span class="sy0">:</span> <span class="re3">5px</span> <span class="nu0">0</span><span class="sy0">;</span> <span class="kw1">background</span><span class="sy0">:</span> <span class="kw2">white</span><span class="sy0">;</span> <span class="br0">&#125;</span>
        </div>
    </div>
</div>

<p>Выглядеть должно так:<br />
<a href='http://static.sjinks.info/wp-content/uploads/2008/03/hack_source.png' rel="lightbox" title="Исходная разметка"><img src='http://static.sjinks.info/wp-content/uploads/2008/03/hack_source.png' alt='hack_source.png' /></a></p>
<p>Теперь добавляем стиль и смотрим:</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p2772">
        <div class="code css" id="p27code72">
<span class="sy0">*</span><span class="re2">:first-child</span><span class="sy0">+</span><span class="re0">#adjacent</span> <span class="re0">#test</span> <span class="br0">&#123;</span> <span class="kw1">background</span><span class="sy0">:</span> <span class="kw2">green</span><span class="sy0">;</span> <span class="br0">&#125;</span> <span class="coMULTI">/* аналог *:first-child+html #test */</span>
        </div>
    </div>
</div>

<p>Результат будет таким (что в <em>нормальном</em> браузере, что в IE7, что в IE8):<br />
<a href='http://static.sjinks.info/wp-content/uploads/2008/03/hack_ie7.png' rel="lightbox" title="*:first-child+#adjacent #test"><img src='http://static.sjinks.info/wp-content/uploads/2008/03/hack_ie7.png' alt='hack_ie7.png' /></a></p>
<p>А теперь самое интересное: убираем предыдущий стиль и добавляем аналогичный хаку для IE6:</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p2773">
        <div class="code css" id="p27code73">
<span class="sy0">*</span> <span class="re0">#adjacent</span> <span class="re0">#test</span> <span class="br0">&#123;</span> <span class="kw1">background</span><span class="sy0">:</span> <span class="kw2">lime</span><span class="sy0">;</span> <span class="br0">&#125;</span> <span class="coMULTI">/* аналог * html #test */</span>
        </div>
    </div>
</div>

<p>И выгядит точно также (с поправкой на цвет):<br />
<a href='http://static.sjinks.info/wp-content/uploads/2008/03/hack_ie6.png' rel="lightbox" title="* #adjacent #test"><img src='http://static.sjinks.info/wp-content/uploads/2008/03/hack_ie6.png' alt='hack_ie6.png' /></a></p>
<p>Внимание, вопрос: если оба хака сработали, то почему <span class="codebox"><code class="css"><span class="sy0">*</span><span class="re2">:first-child</span><span class="sy0">+</span>html</code></span> срабатывает, а <span class="codebox"><code class="css"><span class="sy0">*</span> html</code></span> — нет? И не здесь ли кроется ответ, что в IE7 <span class="codebox"><code class="css"><span class="sy0">*</span><span class="re2">:first-</span>child<span class="sy0">+</span><span class="coMULTI">/**/</span>html</code></span> не работает, а в IE8 работает? Возникает такое чувство, что M$ разбирает CSS регулярными выражениями (убирает лишние пробелы, комментарии и т.п.), а затем теми же регулярными выражениями убирает хаки типа <span class="codebox"><code class="css"><span class="sy0">*</span> html</code></span>? Ведь по логике вещей должны срабатывать что один, что другой. И эксперимент показал, что на обычных элементах работает, а вот на <span class="codebox"><code class="css">html</code></span> — нет. В IE8 усовершенствовали парсер, поэтому он убирает /**/ из селектора. А так как IE8 умеет эмулировать IE7, то и попадается он на те же самые приколы <img src='http://static.sjinks.info/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  Ну не будет Micro$oft писать новый парсер <img src='http://static.sjinks.info/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>Но, исправляя старые ошибки, разработчики добавили новые. Например:</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p2774">
        <div class="code css" id="p27code74">
<span class="coMULTI">/*\*/</span><span class="coMULTI">/*/<br />
body { background: red !important; }<br />
/**/</span>
        </div>
    </div>
</div>

<p>Этот хак использовался для задания стилей для IE/Mac. Но вот IE8 тоже теперь его понимает (возможно, благодаря жадному регэкспу, чистящему /* */ в селекторах).</p>
<p>И вот мне интересно: ACID2 проходится благодаря тому, что его структура известна? Интересно, а что будет, если заменить одни элементы другими? Или переставить стили местами? Сработает?</p>
<p>Что же, ждем следующую бету&hellip; Только бету, которая не будет альфой.</p>
<p>© 2012 <a href="http://blog.sjinks.pro">Ars Longa, Vita Brevis</a>. Все права защищены. Перепубликация материалов без разрешения автора запрещена.</p>
<p>При использовании материалов блога наличие активной не закрытой от индексирования ссылки на <a href="http://blog.sjinks.pro/css/27-why-microsoft-calls-alpha-beta-or-what-acid-tests-are-for/">источник</a> обязательно.</p>]]></content:encoded>
			<wfw:commentRss>http://blog.sjinks.pro/css/27-why-microsoft-calls-alpha-beta-or-what-acid-tests-are-for/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>IE6, Sortable и whatever:hover</title>
		<link>http://blog.sjinks.pro/javascript/5-ie6-sortable-whatever-hover/</link>
		<comments>http://blog.sjinks.pro/javascript/5-ie6-sortable-whatever-hover/#comments</comments>
		<pubDate>Wed, 16 Jan 2008 04:20:42 +0000</pubDate>
		<dc:creator>Vladimir</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Draggables]]></category>
		<category><![CDATA[IE6]]></category>
		<category><![CDATA[Scriptaculous]]></category>
		<category><![CDATA[Sortable]]></category>
		<category><![CDATA[whatever:hover]]></category>
		<category><![CDATA[ошибка]]></category>

		<guid isPermaLink="false">http://blog.sjinks.pro/javascript/5-ie6-sortable-whatever-hover/</guid>
		<description><![CDATA[Как подружить whatever:hover и Scriptaculous Работая над одним сайтом, столкнулся с одной проблемой: в IE6 при использовании whatever:hover для выпадающего меню, построенного чисто на CSS, и Scriptaculous (а именно, Sortable, причем для элемента, не имеющего никакого отношения к меню) возникало непонятное мерцание. Страница, на которой проявляется мерцание (только IE6). То, что «виноват» именно Scriptaculous, доказывается [...]<p>© 2012 <a href="http://blog.sjinks.pro">Ars Longa, Vita Brevis</a>. Все права защищены. Перепубликация материалов без разрешения автора запрещена.</p>
<p>При использовании материалов блога наличие активной не закрытой от индексирования ссылки на <a href="http://blog.sjinks.pro/javascript/5-ie6-sortable-whatever-hover/">источник</a> обязательно.</p>]]></description>
			<content:encoded><![CDATA[<h2><em>Как подружить <a href="http://blog.sjinks.pro/tag/whateverhover/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  whatever:hover">whatever:hover</a> и <a href="http://blog.sjinks.pro/tag/scriptaculous/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  Scriptaculous">Scriptaculous</a></em></h2>
<p>Работая над одним сайтом, столкнулся с одной проблемой: в <a href="http://blog.sjinks.pro/tag/ie6/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  IE6">IE6</a> при использовании <a href="http://www.xs4all.nl/~peterned/csshover.html" rel="nofollow">whatever:hover</a> для выпадающего <a href="http://blog.sjinks.pro/tag/menu/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  меню">меню</a>, построенного чисто на <a href="http://blog.sjinks.pro/tag/css/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  CSS">CSS</a>, и <a href="http://script.aculo.us/">Scriptaculous</a> (а именно, <a href="http://blog.sjinks.pro/tag/sortable/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  Sortable">Sortable</a>, причем для элемента, не имеющего никакого отношения к меню) возникало непонятное мерцание.<span id="more-5"></span></p>
<p><a href="http://blog.sjinks.pro/test/hover/test.html">Страница, на которой проявляется мерцание</a> (только IE6).<br />
То, что «виноват» именно Scriptaculous, доказывается очень легко: в исходном тексте <code>test.<a href="http://blog.sjinks.pro/tag/html/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  HTML">html</a></code> комментируется строка, создающая Draggable:</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p579">
        <div class="code javascript" id="p5code79">
&nbsp; &nbsp; <span class="kw2">var</span> user_id <span class="sy0">=</span> <span class="nu0">5060</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw2">var</span> id <span class="sy0">=</span> <span class="st0">'user_'</span> <span class="sy0">+</span> user_id<span class="sy0">;</span><br />
<br />
&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>$<span class="br0">&#40;</span>id<span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; Sortable.<span class="me1">create</span><span class="br0">&#40;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $<span class="br0">&#40;</span>id<span class="br0">&#41;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span>
        </div>
    </div>
</div>

<p>Результат можно увидеть <a href="http://blog.sjinks.pro/test/hover/test2.html">здесь</a> — мерцание исчезло.</p>
<p>Путём долгих и нудных экспериментов были найдены строки, вызывающие такое поведение:</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p580">
        <div class="code javascript" id="p5code80">
<span class="kw2">var</span> Draggables <span class="sy0">=</span> <span class="br0">&#123;</span><br />
&nbsp; drags<span class="sy0">:</span> <span class="br0">&#91;</span><span class="br0">&#93;</span><span class="sy0">,</span><br />
&nbsp; observers<span class="sy0">:</span> <span class="br0">&#91;</span><span class="br0">&#93;</span><span class="sy0">,</span><br />
<br />
&nbsp; register<span class="sy0">:</span> <span class="kw2">function</span><span class="br0">&#40;</span>draggable<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><span class="kw1">this</span>.<span class="me1">drags</span>.<span class="me1">length</span> <span class="sy0">==</span> 0<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">eventMouseUp</span> &nbsp; <span class="sy0">=</span> <span class="kw1">this</span>.<span class="me1">endDrag</span>.<span class="me1">bindAsEventListener</span><span class="br0">&#40;</span><span class="kw1">this</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">eventMouseMove</span> <span class="sy0">=</span> <span class="kw1">this</span>.<span class="me1">updateDrag</span>.<span class="me1">bindAsEventListener</span><span class="br0">&#40;</span><span class="kw1">this</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">eventKeypress</span> &nbsp;<span class="sy0">=</span> <span class="kw1">this</span>.<span class="me1">keyPress</span>.<span class="me1">bindAsEventListener</span><span class="br0">&#40;</span><span class="kw1">this</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<br />
&nbsp; &nbsp; &nbsp; Event.<span class="me1">observe</span><span class="br0">&#40;</span>document<span class="sy0">,</span> <span class="st0">&quot;mouseup&quot;</span><span class="sy0">,</span> <span class="kw1">this</span>.<span class="me1">eventMouseUp</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; Event.<span class="me1">observe</span><span class="br0">&#40;</span>document<span class="sy0">,</span> <span class="st0">&quot;mousemove&quot;</span><span class="sy0">,</span> <span class="kw1">this</span>.<span class="me1">eventMouseMove</span><span class="br0">&#41;</span><span class="sy0">;</span> <span class="co1">// &lt;---</span><br />
&nbsp; &nbsp; &nbsp; Event.<span class="me1">observe</span><span class="br0">&#40;</span>document<span class="sy0">,</span> <span class="st0">&quot;keypress&quot;</span><span class="sy0">,</span> <span class="kw1">this</span>.<span class="me1">eventKeypress</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">drags</span>.<span class="me1">push</span><span class="br0">&#40;</span>draggable<span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; <span class="br0">&#125;</span><span class="sy0">,</span><br />
<span class="co1">//...</span><br />
<span class="br0">&#125;</span><span class="sy0">;</span>
        </div>
    </div>
</div>

<p>Таким образом, если мы уберём <span class="codebox"><code class="javascript">Event.<span class="me1">observe</span><span class="br0">&#40;</span>document<span class="sy0">,</span> <span class="st0">&quot;mousemove&quot;</span><span class="sy0">,</span> <span class="kw1">this</span>.<span class="me1">eventMouseMove</span><span class="br0">&#41;</span></code></span>, то мерцание исчезнет. Естественно, это не выход, так как весь код, который прямо или косвенно использует <code><a href="http://blog.sjinks.pro/tag/draggables/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  Draggables">Draggables</a></code>, перестанет работать.</p>
<p>Попытаемся решить проблему (лезть в чужой код ой как не хочется). Одно ясно: вызов <span class="codebox"><code class="javascript">Event.<span class="me1">observe</span><span class="br0">&#40;</span>document<span class="sy0">,</span> <span class="st0">&quot;mousemove&quot;</span><span class="sy0">,</span> <span class="kw1">this</span>.<span class="me1">eventMouseMove</span><span class="br0">&#41;</span></code></span> придется закомментировать. Добавлять обработчик события придется при активации <code>draggable</code> (в функции <span class="codebox"><code class="javascript">Draggables.<span class="me1">activate</span><span class="br0">&#40;</span><span class="br0">&#41;</span></code></span>), а убирать — в <span class="codebox"><code class="javascript">Draggables.<span class="me1">deactivate</span><span class="br0">&#40;</span><span class="br0">&#41;</span></code></span> и <span class="codebox"><code class="javascript">Draggables.<span class="me1">endDrag</span><span class="br0">&#40;</span><span class="br0">&#41;</span></code></span>. Возможно, хватит просто <code>endDrag()</code>, но ничего плохого не случится, если для подстраховки изменим оба метода.</p>
<p>Исходный код:</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p581">
        <div class="code javascript" id="p5code81">
&nbsp; register<span class="sy0">:</span> <span class="kw2">function</span><span class="br0">&#40;</span>draggable<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><span class="kw1">this</span>.<span class="me1">drags</span>.<span class="me1">length</span> <span class="sy0">==</span> 0<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">eventMouseUp</span> &nbsp; <span class="sy0">=</span> <span class="kw1">this</span>.<span class="me1">endDrag</span>.<span class="me1">bindAsEventListener</span><span class="br0">&#40;</span><span class="kw1">this</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">eventMouseMove</span> <span class="sy0">=</span> <span class="kw1">this</span>.<span class="me1">updateDrag</span>.<span class="me1">bindAsEventListener</span><span class="br0">&#40;</span><span class="kw1">this</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">eventKeypress</span> &nbsp;<span class="sy0">=</span> <span class="kw1">this</span>.<span class="me1">keyPress</span>.<span class="me1">bindAsEventListener</span><span class="br0">&#40;</span><span class="kw1">this</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<br />
&nbsp; &nbsp; &nbsp; Event.<span class="me1">observe</span><span class="br0">&#40;</span>document<span class="sy0">,</span> <span class="st0">&quot;mouseup&quot;</span><span class="sy0">,</span> <span class="kw1">this</span>.<span class="me1">eventMouseUp</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; Event.<span class="me1">observe</span><span class="br0">&#40;</span>document<span class="sy0">,</span> <span class="st0">&quot;mousemove&quot;</span><span class="sy0">,</span> <span class="kw1">this</span>.<span class="me1">eventMouseMove</span><span class="br0">&#41;</span><span class="sy0">;</span> <span class="co1">//&lt;-- нужно закомментировать</span><br />
&nbsp; &nbsp; &nbsp; Event.<span class="me1">observe</span><span class="br0">&#40;</span>document<span class="sy0">,</span> <span class="st0">&quot;keypress&quot;</span><span class="sy0">,</span> <span class="kw1">this</span>.<span class="me1">eventKeypress</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">drags</span>.<span class="me1">push</span><span class="br0">&#40;</span>draggable<span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; <span class="br0">&#125;</span><span class="sy0">,</span><br />
<br />
&nbsp; activate<span class="sy0">:</span> <span class="kw2">function</span><span class="br0">&#40;</span>draggable<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>draggable.<span class="me1">options</span>.<span class="me1">delay</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> <br />
&nbsp; &nbsp; &nbsp; <span class="kw1">this</span>._timeout <span class="sy0">=</span> setTimeout<span class="br0">&#40;</span><span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> <br />
&nbsp; &nbsp; &nbsp; &nbsp; Draggables._timeout <span class="sy0">=</span> <span class="kw2">null</span><span class="sy0">;</span> <br />
&nbsp; &nbsp; &nbsp; &nbsp; window.<span class="kw3">focus</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span> <span class="co1">//&lt;-- здесь нужно повесить обработчик события</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; Draggables.<span class="me1">activeDraggable</span> <span class="sy0">=</span> draggable<span class="sy0">;</span> <br />
&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>.<span class="me1">bind</span><span class="br0">&#40;</span><span class="kw1">this</span><span class="br0">&#41;</span><span class="sy0">,</span> draggable.<span class="me1">options</span>.<span class="me1">delay</span><span class="br0">&#41;</span><span class="sy0">;</span> <br />
&nbsp; &nbsp; <span class="br0">&#125;</span> <span class="kw1">else</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; window.<span class="kw3">focus</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span> <span class="co1">// allows keypress events if window isn't currently focused, fails for Safari</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//&lt;-- здесь нужно повесить обработчик события</span><br />
&nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">activeDraggable</span> <span class="sy0">=</span> draggable<span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; <span class="br0">&#125;</span><span class="sy0">,</span><br />
<br />
&nbsp; deactivate<span class="sy0">:</span> <span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">activeDraggable</span> <span class="sy0">=</span> <span class="kw2">null</span><span class="sy0">;</span> <span class="co1">//&lt;-- здесь нужно убрать обработчик события</span><br />
&nbsp; <span class="br0">&#125;</span><span class="sy0">,</span><br />
<br />
&nbsp; endDrag<span class="sy0">:</span> <span class="kw2">function</span><span class="br0">&#40;</span>event<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><span class="kw1">this</span>._timeout<span class="br0">&#41;</span> <span class="br0">&#123;</span> <br />
&nbsp; &nbsp; &nbsp; clearTimeout<span class="br0">&#40;</span><span class="kw1">this</span>._timeout<span class="br0">&#41;</span><span class="sy0">;</span> <br />
&nbsp; &nbsp; &nbsp; <span class="kw1">this</span>._timeout <span class="sy0">=</span> <span class="kw2">null</span><span class="sy0">;</span> <br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><span class="sy0">!</span><span class="kw1">this</span>.<span class="me1">activeDraggable</span><span class="br0">&#41;</span> <span class="kw1">return</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">this</span>._lastPointer <span class="sy0">=</span> <span class="kw2">null</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">activeDraggable</span>.<span class="me1">endDrag</span><span class="br0">&#40;</span>event<span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">activeDraggable</span> <span class="sy0">=</span> <span class="kw2">null</span><span class="sy0">;</span> <span class="co1">//&lt;-- здесь нужно убрать обработчик события</span><br />
&nbsp; <span class="br0">&#125;</span><span class="sy0">,</span>
        </div>
    </div>
</div>

<p>Окончательный результат:</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p582">
        <div class="code javascript" id="p5code82">
&nbsp; register<span class="sy0">:</span> <span class="kw2">function</span><span class="br0">&#40;</span>draggable<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><span class="kw1">this</span>.<span class="me1">drags</span>.<span class="me1">length</span> <span class="sy0">==</span> 0<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">eventMouseUp</span> &nbsp; <span class="sy0">=</span> <span class="kw1">this</span>.<span class="me1">endDrag</span>.<span class="me1">bindAsEventListener</span><span class="br0">&#40;</span><span class="kw1">this</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">eventMouseMove</span> <span class="sy0">=</span> <span class="kw1">this</span>.<span class="me1">updateDrag</span>.<span class="me1">bindAsEventListener</span><span class="br0">&#40;</span><span class="kw1">this</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">eventKeypress</span> &nbsp;<span class="sy0">=</span> <span class="kw1">this</span>.<span class="me1">keyPress</span>.<span class="me1">bindAsEventListener</span><span class="br0">&#40;</span><span class="kw1">this</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<br />
&nbsp; &nbsp; &nbsp; Event.<span class="me1">observe</span><span class="br0">&#40;</span>document<span class="sy0">,</span> <span class="st0">&quot;mouseup&quot;</span><span class="sy0">,</span> <span class="kw1">this</span>.<span class="me1">eventMouseUp</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; Event.<span class="me1">observe</span><span class="br0">&#40;</span>document<span class="sy0">,</span> <span class="st0">&quot;keypress&quot;</span><span class="sy0">,</span> <span class="kw1">this</span>.<span class="me1">eventKeypress</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">drags</span>.<span class="me1">push</span><span class="br0">&#40;</span>draggable<span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; <span class="br0">&#125;</span><span class="sy0">,</span><br />
<br />
&nbsp; activate<span class="sy0">:</span> <span class="kw2">function</span><span class="br0">&#40;</span>draggable<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>draggable.<span class="me1">options</span>.<span class="me1">delay</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> <br />
&nbsp; &nbsp; &nbsp; <span class="kw1">this</span>._timeout <span class="sy0">=</span> setTimeout<span class="br0">&#40;</span><span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> <br />
&nbsp; &nbsp; &nbsp; &nbsp; Draggables._timeout <span class="sy0">=</span> <span class="kw2">null</span><span class="sy0">;</span> <br />
&nbsp; &nbsp; &nbsp; &nbsp; window.<span class="kw3">focus</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; Event.<span class="me1">observe</span><span class="br0">&#40;</span>document<span class="sy0">,</span> <span class="st0">&quot;mousemove&quot;</span><span class="sy0">,</span> <span class="kw1">this</span>.<span class="me1">eventMouseMove</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; Draggables.<span class="me1">activeDraggable</span> <span class="sy0">=</span> draggable<span class="sy0">;</span> <br />
&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>.<span class="me1">bind</span><span class="br0">&#40;</span><span class="kw1">this</span><span class="br0">&#41;</span><span class="sy0">,</span> draggable.<span class="me1">options</span>.<span class="me1">delay</span><span class="br0">&#41;</span><span class="sy0">;</span> <br />
&nbsp; &nbsp; <span class="br0">&#125;</span> <span class="kw1">else</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; window.<span class="kw3">focus</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span> <span class="co1">// allows keypress events if window isn't currently focused, fails for Safari</span><br />
&nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>draggable<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Event.<span class="me1">observe</span><span class="br0">&#40;</span>document<span class="sy0">,</span> <span class="st0">&quot;mousemove&quot;</span><span class="sy0">,</span> <span class="kw1">this</span>.<span class="me1">eventMouseMove</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">activeDraggable</span> <span class="sy0">=</span> draggable<span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; <span class="br0">&#125;</span><span class="sy0">,</span><br />
<br />
&nbsp; deactivate<span class="sy0">:</span> <span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">activeDraggable</span> <span class="sy0">=</span> <span class="kw2">null</span><span class="sy0">;</span><br />
&nbsp; &nbsp; Event.<span class="me1">stopObserving</span><span class="br0">&#40;</span>document<span class="sy0">,</span> <span class="st0">&quot;mousemove&quot;</span><span class="sy0">,</span> <span class="kw1">this</span>.<span class="me1">eventMouseMove</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; <span class="br0">&#125;</span><span class="sy0">,</span><br />
<br />
&nbsp; endDrag<span class="sy0">:</span> <span class="kw2">function</span><span class="br0">&#40;</span>event<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><span class="kw1">this</span>._timeout<span class="br0">&#41;</span> <span class="br0">&#123;</span> <br />
&nbsp; &nbsp; &nbsp; clearTimeout<span class="br0">&#40;</span><span class="kw1">this</span>._timeout<span class="br0">&#41;</span><span class="sy0">;</span> <br />
&nbsp; &nbsp; &nbsp; <span class="kw1">this</span>._timeout <span class="sy0">=</span> <span class="kw2">null</span><span class="sy0">;</span> <br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><span class="sy0">!</span><span class="kw1">this</span>.<span class="me1">activeDraggable</span><span class="br0">&#41;</span> <span class="kw1">return</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">this</span>._lastPointer <span class="sy0">=</span> <span class="kw2">null</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">activeDraggable</span>.<span class="me1">endDrag</span><span class="br0">&#40;</span>event<span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">activeDraggable</span> <span class="sy0">=</span> <span class="kw2">null</span><span class="sy0">;</span><br />
&nbsp; &nbsp; Event.<span class="me1">stopObserving</span><span class="br0">&#40;</span>document<span class="sy0">,</span> <span class="st0">&quot;mousemove&quot;</span><span class="sy0">,</span> <span class="kw1">this</span>.<span class="me1">eventMouseMove</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; <span class="br0">&#125;</span><span class="sy0">,</span>
        </div>
    </div>
</div>

<p><a href="http://blog.sjinks.pro/test/hover/test3.html">Всё работает!</a><br />
<a href="http://blog.sjinks.pro/test/hover/patch.diff">Патч в формате unified diff</a>.</p>
<p>© 2012 <a href="http://blog.sjinks.pro">Ars Longa, Vita Brevis</a>. Все права защищены. Перепубликация материалов без разрешения автора запрещена.</p>
<p>При использовании материалов блога наличие активной не закрытой от индексирования ссылки на <a href="http://blog.sjinks.pro/javascript/5-ie6-sortable-whatever-hover/">источник</a> обязательно.</p>]]></content:encoded>
			<wfw:commentRss>http://blog.sjinks.pro/javascript/5-ie6-sortable-whatever-hover/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

