<?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; CSS</title>
	<atom:link href="http://blog.sjinks.pro/tag/css/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>WebKit и псевдокласс :empty</title>
		<link>http://blog.sjinks.pro/css/669-webkit-and-empty-pseudoclass/</link>
		<comments>http://blog.sjinks.pro/css/669-webkit-and-empty-pseudoclass/#comments</comments>
		<pubDate>Thu, 22 Oct 2009 19:10:00 +0000</pubDate>
		<dc:creator>Vladimir</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[WebKit]]></category>
		<category><![CDATA[ошибка]]></category>

		<guid isPermaLink="false">http://blog.sjinks.pro/?p=669</guid>
		<description><![CDATA[До полноценной поддержки CSS 3 всеми браузерами еще далеко? Вчера, благодаря своему читателю, я обнаружил в WebKit очень интересную ошибку: оказывается, что он не понимает псевдокласс :empty (из CSS 3). Проверяется очень легко: &#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; content=&#34;text/html; charset=utf-8&#34; /&#62; &#60;title&#62;:empty and WebKit&#60;/title&#62; &#60;style type=&#34;text/css&#34;&#62;.test:empty { display: none; [...]<p>© 2012 <a href="http://blog.sjinks.pro">Ars Longa, Vita Brevis</a>. Все права защищены. Перепубликация материалов без разрешения автора запрещена.</p>
<p>При использовании материалов блога наличие активной не закрытой от индексирования ссылки на <a href="http://blog.sjinks.pro/css/669-webkit-and-empty-pseudoclass/">источник</a> обязательно.</p>]]></description>
			<content:encoded><![CDATA[<h2><em>До полноценной поддержки <a href="http://blog.sjinks.pro/tag/css/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  CSS">CSS</a> 3 всеми браузерами еще далеко?<br />
</em></h2>
<p>Вчера, благодаря своему <a href="http://blog.cooluck.kiev.ua/">читателю</a>, я обнаружил в <a href="http://blog.sjinks.pro/tag/webkit/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  WebKit">WebKit</a> очень интересную ошибку: оказывается, что он не понимает псевдокласс <span class="codebox"><code class="css"><span class="sy0">:</span>empty</code></span> (из CSS 3).<span id="more-669"></span></p>
<p>Проверяется очень легко:</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p6692">
        <div class="code html" id="p669code2">
<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>:empty and WebKit<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">style</span> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;text/css&quot;</span>&gt;</span>.test:empty { display: none; }<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">div</span> <span class="kw3">class</span><span class="sy0">=</span><span class="st0">&quot;test&quot;</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; Verus amicus amore, more, ore, re cognoscitur<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>Так страница отображается в Google Chrome (и Safari):</p>
<p><a href="http://static.sjinks.info/wp-content/uploads/2009/10/chrome-empty.png"><img src="http://static.sjinks.info/wp-content/uploads/2009/10/chrome-empty.png" alt="Chrome и :empty" title="Chrome и :empty" width="450" height="230" class="size-full wp-image-670" /></a></p>
<p>А так — в <a href="http://blog.sjinks.pro/tag/firefox/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  FireFox">FireFox</a>:</p>
<p><a href="http://static.sjinks.info/wp-content/uploads/2009/10/firefox-empty.png"><img src="http://static.sjinks.info/wp-content/uploads/2009/10/firefox-empty.png" alt="FireFox и :empty" title="FireFox и :empty" width="450" height="230" class="size-full wp-image-671" /></a></p>
<p>Что характерно, Konqueror отображает страницу так же, как и FireFox, так что <a href="http://blog.sjinks.pro/tag/bug/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  ошибка">ошибка</a>, по-видимому, специфична для WebKit.</p>
<p><a href="http://blog.sjinks.pro/test/empty/empty.html" rel="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/669-webkit-and-empty-pseudoclass/">источник</a> обязательно.</p>]]></content:encoded>
			<wfw:commentRss>http://blog.sjinks.pro/css/669-webkit-and-empty-pseudoclass/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Основные источники неправильной разметки в WordPress</title>
		<link>http://blog.sjinks.pro/wordpress/222-main-sources-of-invalid-markup-in-wordpress/</link>
		<comments>http://blog.sjinks.pro/wordpress/222-main-sources-of-invalid-markup-in-wordpress/#comments</comments>
		<pubDate>Mon, 07 Jul 2008 02:50:08 +0000</pubDate>
		<dc:creator>Vladimir</dc:creator>
				<category><![CDATA[WordPress]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Flash Satay]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[noindex]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[wpautop]]></category>
		<category><![CDATA[XHTML]]></category>
		<category><![CDATA[ошибка]]></category>
		<category><![CDATA[патч]]></category>
		<category><![CDATA[разметка]]></category>
		<category><![CDATA[Яндекс]]></category>

		<guid isPermaLink="false">http://blog.sjinks.pro/?p=222</guid>
		<description><![CDATA[Исправляем неправильную разметку в WordPress В статье "Избавляемся о ошибок xHTML-валидации при использовании JavaScript, Flash, &#60;noindex&#62;, CSS" рассказывается о четырёх основных источниках неправильной разметки в WordPress: JavaScript; Глобальные CSS, размещаемые в заголовке документа; Flash; Несуществующий по стандартам тег &#60;noindex&#62;, придуманный Яндексом Естественно, после прочтения статьи я решил проверить свой, как я полагал, валидный, блог. В [...]<p>© 2012 <a href="http://blog.sjinks.pro">Ars Longa, Vita Brevis</a>. Все права защищены. Перепубликация материалов без разрешения автора запрещена.</p>
<p>При использовании материалов блога наличие активной не закрытой от индексирования ссылки на <a href="http://blog.sjinks.pro/wordpress/222-main-sources-of-invalid-markup-in-wordpress/">источник</a> обязательно.</p>]]></description>
			<content:encoded><![CDATA[<h2><em>Исправляем неправильную разметку в <a href="http://blog.sjinks.pro/tag/wordpress/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  WordPress">WordPress</a></em></h2>
<p>В статье "<a href="http://dimox.name/xhtml-validation-using-javascript-flash-noindex/">Избавляемся о ошибок xHTML-валидации при использовании JavaScript, Flash, &lt;noindex&gt;, CSS</a>" рассказывается о четырёх основных источниках неправильной разметки в WordPress:</p>
<blockquote cite="http://dimox.name/xhtml-validation-using-javascript-flash-noindex/">
<ol>
<li><a href="http://blog.sjinks.pro/tag/javascript/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  JavaScript">JavaScript</a>;</li>
<li>Глобальные <a href="http://blog.sjinks.pro/tag/css/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  CSS">CSS</a>, размещаемые в заголовке документа;</li>
<li>Flash;</li>
<li>Несуществующий по стандартам тег &lt;<a href="http://blog.sjinks.pro/tag/noindex/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  noindex">noindex</a>&gt;, придуманный Яндексом</li>
</ol>
</blockquote>
<p>Естественно, после прочтения статьи я решил проверить свой, как я полагал, валидный, блог. В том-то и дело, что только плагал: нашёлся пятый источник неправильной разметки. Где бы Вы думали? В самом WordPress, в функции <code><a href="http://blog.sjinks.pro/tag/wpautop/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  wpautop">wpautop</a>()</code>.<span id="more-222"></span></p>
<p>Сначала всё же пройдусь по первым четырём источникам. А точнее, трём&nbsp;&mdash;&nbsp;проблему с Яндексом я для себя давно уже решил, а именно: несуществующими тэгами я не балуюсь. И не могу не удержаться от камня в огород <a href="http://blog.sjinks.pro/tag/yandex/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  Яндекс">Яндекс</a>: ну зачем нужно было придумывать абсолютно левый тэг, когда можно было использовать, например, комментарий:</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p22227">
        <div class="code html" id="p222code27">
<span class="sc-2">&lt;!-- NOINDEX --&gt;</span><br />
Content not to be indexed<br />
<span class="sc-2">&lt;!-- /NOINDEX --&gt;</span>
        </div>
    </div>
</div>

<p>Во-первых, это решает проблему невалидного (X)<a href="http://blog.sjinks.pro/tag/html/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  HTML">HTML</a>. Во-вторых, не надо было бы заботиться о том, где можно и где нельзя размещать тэг&nbsp;&mdash;&nbsp;вырезал регэкспом такой вот комментарий от начала и до конца и получил контент, который можно индексировать. Эх&hellip; Ладно, забыли.</p>
<p>Теперь по списку.<br />
<strong>JavaScript</strong>. Решение простое: весь JavaScript заключаем в секцию <code>CDATA</code>. Например, так:</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p22228">
        <div class="code html" id="p222code28">
<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><br />
<span class="sc-2">&lt;!--//--&gt;</span><span class="sc2">&lt;!<span class="br0">&#91;</span>CDATA<span class="br0">&#91;</span><span class="sy0">//</span>&gt;</span><span class="sc-2">&lt;!--</span><br />
<span class="sc-2">//JavaScript goes here...</span><br />
<span class="sc-2">//--&gt;</span><span class="sc2">&lt;!<span class="br0">&#93;</span><span class="br0">&#93;</span>&gt;</span><br />
<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">script</span>&gt;</span>
        </div>
    </div>
</div>

<p>И не забываем, что атрибут <code>type</code>&nbsp;&mdash;&nbsp;обязательный. Решение выше, что называется, для любителей поизвращаться: помимо всего прочего, оно прячет JavaScript от антикварных браузеров, которые вообще не понимают тэг <code>script</code>. Если поддержка таких браузеров не нужна, то код можно значительно упростить:</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p22229">
        <div class="code html" id="p222code29">
<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="sc2">&lt;!<span class="br0">&#91;</span>CDATA<span class="br0">&#91;</span>*<span class="sy0">/</span></span><br />
<span class="sc2"><span class="sy0">//</span>JavaScript goes here...</span><br />
<span class="sc2"><span class="sy0">/</span>*<span class="br0">&#93;</span><span class="br0">&#93;</span>&gt;</span>*/<br />
<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">script</span>&gt;</span>
        </div>
    </div>
</div>

<p>А вот такое решение я не рекомендую:</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p22230">
        <div class="code html" id="p222code30">
<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;!-- //&lt;![CDATA[</span><br />
<span class="sc-2">//JavaScript goes here...</span><br />
<span class="sc-2">//--&gt;</span><br />
<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">script</span>&gt;</span>
        </div>
    </div>
</div>

<p>Причина простая: если мы планируем отдавать <a href="http://blog.sjinks.pro/tag/xhtml/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  XHTML">XHTML</a> так, как это требует W3C (с MIME-типом application/<a href="http://blog.sjinks.pro/tag/xhtml/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  XHTML">xhtml</a>+xml), то любой <em>нормальный</em> браузер воспримет HTML-комментарий как элемент, вложенный в <code>script</code>, и, как следствие, проигнорирует скрипт полностью (в XHTML парсер не знает о том, что существуют скрипты, таблицы стилей и прочие вещи).</p>
<p><strong>С CSS всё аналогично.</strong> Метод для любителей поизвращаться:</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p22231">
        <div class="code html" id="p222code31">
<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 />
<span class="sc-2">&lt;!--/*--&gt;</span><span class="sc2">&lt;!<span class="br0">&#91;</span>CDATA<span class="br0">&#91;</span><span class="sy0">/</span>*&gt;</span><span class="sc-2">&lt;!--*/</span><br />
<span class="sc-2">/* CSS goes here*/</span><br />
<span class="sc-2">/*]]&gt;*/--&gt;</span><br />
<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">style</span>&gt;</span>
        </div>
    </div>
</div>

<p>И более простой метод:</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p22232">
        <div class="code html" id="p222code32">
<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 />
/*<span class="sc2">&lt;!<span class="br0">&#91;</span>CDATA<span class="br0">&#91;</span>*<span class="sy0">/</span></span><br />
<span class="sc2"><span class="sy0">/</span>* CSS goes here*<span class="sy0">/</span></span><br />
<span class="sc2"><span class="sy0">/</span>*<span class="br0">&#93;</span><span class="br0">&#93;</span>&gt;</span>*/<br />
<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">style</span>&gt;</span>
        </div>
    </div>
</div>

<p>Да, у тэга <code>style</code> атрибут <code>type</code> тоже является обязательным.<br />
Все браузеры, появившиеся после 2000&nbsp;года понимают форму "без извращений", поэтому, наверное, имеет смысл использовать именно её. И еще небольшое замечание по поводу <code>CDATA</code>. По большому счету, секция <code>CDATA</code> нужна только тогда, когда контент содержит символы, которые могут быть интерпретированы как <a href="http://blog.sjinks.pro/tag/markup/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  разметка">разметка</a> XML, а именно: &lt; и &amp;. То есть в большинстве случаев, стили внутри тэга <code>style</code> помещать в <code>CDATA</code> особо не нужно.</p>
<p><strong>Третий пункт&nbsp;&mdash;&nbsp;Flash.</strong> Здесь поможет <strong><a href="http://www.alistapart.com/articles/flashsatay" rel="nofollow">Flash Satay</a></strong>. На нём подробно останавливаться не буду, лишь замечу, что правильный способ записи такого монстра:</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p22233">
        <div class="code html" id="p222code33">
<span class="sc2">&lt;<span class="kw2">object</span> <span class="kw3">classid</span><span class="sy0">=</span><span class="st0">&quot;clsid:D27CDB6E-AE6D-11cf-96B8-444553540000&quot;</span> <span class="kw3">codebase</span><span class="sy0">=</span><span class="st0">&quot;http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0&quot;</span> <span class="kw3">width</span><span class="sy0">=</span><span class="st0">&quot;400&quot;</span> <span class="kw3">height</span><span class="sy0">=</span><span class="st0">&quot;300&quot;</span> <span class="kw3">id</span><span class="sy0">=</span><span class="st0">&quot;movie&quot;</span>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">param</span> <span class="kw3">name</span><span class="sy0">=</span><span class="st0">&quot;movie&quot;</span> <span class="kw3">value</span><span class="sy0">=</span><span class="st0">&quot;movie.swf&quot;</span><span class="sy0">/</span>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;embed <span class="kw3">src</span><span class="sy0">=</span><span class="st0">&quot;movie.swf&quot;</span> quality<span class="sy0">=</span><span class="st0">&quot;high&quot;</span> <span class="kw3">width</span><span class="sy0">=</span><span class="st0">&quot;400&quot;</span> <span class="kw3">height</span><span class="sy0">=</span><span class="st0">&quot;300&quot;</span> <span class="kw3">name</span><span class="sy0">=</span><span class="st0">&quot;movie&quot;</span> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;application/x-shockwave-flash&quot;</span> pluginspage<span class="sy0">=</span><span class="st0">&quot;http://www.macromedia.com/go/getflashplayer&quot;</span><span class="sy0">/</span>&gt;</span> <br />
<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">object</span>&gt;</span>
        </div>
    </div>
</div>

<p>выглядит так:</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p22234">
        <div class="code html" id="p222code34">
<span class="sc2">&lt;<span class="kw2">object</span> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;application/x-shockwave-flash&quot;</span> <span class="kw3">width</span><span class="sy0">=</span><span class="st0">&quot;400&quot;</span> <span class="kw3">height</span><span class="sy0">=</span><span class="st0">&quot;300&quot;</span> <span class="kw3">data</span><span class="sy0">=</span><span class="st0">&quot;movie.swf&quot;</span>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">param</span> <span class="kw3">name</span><span class="sy0">=</span><span class="st0">&quot;movie&quot;</span> <span class="kw3">value</span><span class="sy0">=</span><span class="st0">&quot;movie.swf&quot;</span><span class="sy0">/</span>&gt;</span> <br />
<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">object</span>&gt;</span>
        </div>
    </div>
</div>

<p>Достоинства и недостатки метода подробно описаны в оригинале, нет смысла на них останавливаться здесь.</p>
<p>По <strong>четвёртому вопросу</strong> я уже высказывался. У Дмитрия в статье есть решение, но лично для себя я его не считаю приемлемым.</p>
<p>Переходим к <strong>пятому пункту</strong>, ради которого, собственно говоря, данная статья и писалась <img src='http://static.sjinks.info/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  Как я уже сказал, во многих случаях в неправильной разметке виноват WordPress. Конкретно&nbsp;&mdash;&nbsp;функция <code>wpautop()</code>. Я всегда считал, что глобально менять разметку HTML, использую регулярные выражения&nbsp;&mdash;&nbsp;глупо, ибо в <em>общем случае</em> это работать не будет.</p>
<p>Допустим, Вы привыкли использовать <a href="http://pokrovskii.com/strukturiruem-html-versiya-pokrovskogo/" rel="nofollow">хорошо структурированый код</a>. Тогда вполне вероятно, что Вы можете написать нечто подобное (в целях упрощения восприятия я сократил код):</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p22235">
        <div class="code html" id="p222code35">
<span class="sc2">&lt;<span class="kw2">div</span>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">strong</span>&gt;</span>Test<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">strong</span>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">div</span>&gt;</span>Lorem ipsum dolor sit amet, иными словами, вложенный div.<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">div</span>&gt;</span>
        </div>
    </div>
</div>

<p>Дальнейшие рассуждения исходят из предположения, что Вы не пользуетесь <abbr title="What You See Is What You Get">WYSIWYG</abbr>-редактором. Например, из-за того, что приходится вставлять разметку, которую TinyMCE никак не переваривает (исправляет её под себя), я им вообще не пользуюсь, предпочитая обыкновенный HTML-редактор без наворотов.</p>
<p>В этом случае функция <code>wpautop()</code> преобразует его следующим образом:</p>
<ol>
<li><strong>Добавление символов перевода строки:</strong>
          
<div class="codebox">
    <div class="the_code" style="" id="p22236">
        <div class="code html" id="p222code36">
<span class="sc2">&lt;<span class="kw2">div</span>&gt;&lt;<span class="kw2">strong</span>&gt;</span>Test<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">strong</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
<span class="sc2">&lt;<span class="kw2">div</span>&gt;</span>Lorem ipsum dolor sit amet, иными словами, вложенный div.<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">div</span>&gt;</span><br />
<br />
<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">div</span>&gt;</span>
        </div>
    </div>
</div>

</li>
<li><strong>Добавление параграфов куда можно и куда нельзя:</strong>
          
<div class="codebox">
    <div class="the_code" style="" id="p22237">
        <div class="code html" id="p222code37">
<span class="sc2">&lt;<span class="kw2">p</span>&gt;&lt;<span class="kw2">div</span>&gt;&lt;<span class="kw2">strong</span>&gt;</span>Test<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">strong</span>&gt;&lt;<span class="sy0">/</span><span class="kw2">p</span>&gt;</span><br />
<span class="sc2">&lt;<span class="kw2">p</span>&gt;&lt;<span class="kw2">div</span>&gt;</span>Lorem ipsum dolor sit amet, иными словами, вложенный div.<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">div</span>&gt;&lt;<span class="sy0">/</span><span class="kw2">p</span>&gt;</span><br />
<span class="sc2">&lt;<span class="kw2">p</span>&gt;&lt;<span class="sy0">/</span><span class="kw2">div</span>&gt;&lt;<span class="sy0">/</span><span class="kw2">p</span>&gt;</span>
        </div>
    </div>
</div>

</li>
<li><strong>Финальная очистка:</strong>
          
<div class="codebox">
    <div class="the_code" style="" id="p22238">
        <div class="code html" id="p222code38">
<span class="sc2">&lt;<span class="kw2">div</span>&gt;&lt;<span class="kw2">strong</span>&gt;</span>Test<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">strong</span>&gt;&lt;<span class="sy0">/</span><span class="kw2">p</span>&gt;</span><br />
<span class="sc2">&lt;<span class="kw2">div</span>&gt;</span>Lorem ipsum dolor sit amet, иными словами, вложенный div.<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">div</span>&gt;</span>
        </div>
    </div>
</div>

</li>
</ol>
<p>Как видим, остается лишний закрывающий тэг <code>p</code>. Кстати, если написать так (строчный и блочный элементы на одной строке):</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p22239">
        <div class="code html" id="p222code39">
<span class="sc2">&lt;<span class="kw2">div</span>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">strong</span>&gt;</span>Test<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">strong</span>&gt;&lt;<span class="kw2">div</span>&gt;</span>Lorem ipsum dolor sit amet, иными словами, вложенный div.<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">div</span>&gt;</span>
        </div>
    </div>
</div>

<p>то разметка будет нормальной.</p>
<p>В общем случае, <a href="http://blog.sjinks.pro/tag/bug/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  ошибка">ошибка</a> вылезает при такой разметке:</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p22240">
        <div class="code xml" id="p222code40">
<span class="sc3"><span class="re1">&lt;blocktag<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;inlinetag<span class="re2">&gt;</span></span><span class="re1">&lt;/inlinetag<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;blocktag<span class="re2">&gt;</span></span><span class="re1">&lt;/blocktag<span class="re2">&gt;</span></span></span><br />
<span class="sc3"><span class="re1">&lt;/blocktag<span class="re2">&gt;</span></span></span>
        </div>
    </div>
</div>

<p>Править все статьи&nbsp;&mdash;&nbsp;абсолютно не метод русского программиста <img src='http://static.sjinks.info/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  Проще автоматизировать.<br />
Открываем файл <code>wp-includes/formatting.php</code>:</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p22241">
        <div class="code php" id="p222code41">
<ol class="php" style="font-family:monospace;" start="62"><li class="li1"><div class="de1"><span class="kw2">function</span> wpautop<span class="br0">&#40;</span><span class="re0">$pee</span><span class="sy0">,</span> <span class="re0">$br</span> <span class="sy0">=</span> 1<span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="re0">$pee</span> <span class="sy0">=</span> <span class="re0">$pee</span> <span class="sy0">.</span> <span class="st0">&quot;<span class="es1">\n</span>&quot;</span><span class="sy0">;</span> <span class="co1">// just to make things a little easier, pad the end</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="re0">$pee</span> <span class="sy0">=</span> <span class="kw3">preg_replace</span><span class="br0">&#40;</span><span class="st_h">'|&lt;br /&gt;\s*&lt;br /&gt;|'</span><span class="sy0">,</span> <span class="st0">&quot;<span class="es1">\n</span><span class="es1">\n</span>&quot;</span><span class="sy0">,</span> <span class="re0">$pee</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="co1">// Space things out a little</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="re0">$allblocks</span> <span class="sy0">=</span> <span class="st_h">'(?:table|thead|tfoot|caption|colgroup|tbody|tr|td|th|div|dl|dd|dt|ul|ol|li|pre|select|form|map|area|blockquote|address|math|style|input|p|h[1-6]|hr)'</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="re0">$pee</span> <span class="sy0">=</span> <span class="kw3">preg_replace</span><span class="br0">&#40;</span><span class="st_h">'!(&lt;'</span> <span class="sy0">.</span> <span class="re0">$allblocks</span> <span class="sy0">.</span> <span class="st_h">'[^&gt;]*&gt;)!'</span><span class="sy0">,</span> <span class="st0">&quot;<span class="es1">\n</span><span class="es4">$1</span>&quot;</span><span class="sy0">,</span> <span class="re0">$pee</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="re0">$pee</span> <span class="sy0">=</span> <span class="kw3">preg_replace</span><span class="br0">&#40;</span><span class="st_h">'!(&lt;/'</span> <span class="sy0">.</span> <span class="re0">$allblocks</span> <span class="sy0">.</span> <span class="st_h">'&gt;)!'</span><span class="sy0">,</span> <span class="st0">&quot;<span class="es4">$1</span><span class="es1">\n</span><span class="es1">\n</span>&quot;</span><span class="sy0">,</span> <span class="re0">$pee</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="re0">$pee</span> <span class="sy0">=</span> <span class="kw3">str_replace</span><span class="br0">&#40;</span><span class="kw1">array</span><span class="br0">&#40;</span><span class="st0">&quot;<span class="es1">\r</span><span class="es1">\n</span>&quot;</span><span class="sy0">,</span> <span class="st0">&quot;<span class="es1">\r</span>&quot;</span><span class="br0">&#41;</span><span class="sy0">,</span> <span class="st0">&quot;<span class="es1">\n</span>&quot;</span><span class="sy0">,</span> <span class="re0">$pee</span><span class="br0">&#41;</span><span class="sy0">;</span> <span class="co1">// cross-platform newlines</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span> <span class="kw3">strpos</span><span class="br0">&#40;</span><span class="re0">$pee</span><span class="sy0">,</span> <span class="st_h">'&lt;object'</span><span class="br0">&#41;</span> <span class="sy0">!==</span> <span class="kw4">false</span> <span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$pee</span> <span class="sy0">=</span> <span class="kw3">preg_replace</span><span class="br0">&#40;</span><span class="st_h">'|\s*&lt;param([^&gt;]*)&gt;\s*|'</span><span class="sy0">,</span> <span class="st0">&quot;&lt;param<span class="es4">$1</span>&gt;&quot;</span><span class="sy0">,</span> <span class="re0">$pee</span><span class="br0">&#41;</span><span class="sy0">;</span> <span class="co1">// no pee inside object/embed</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$pee</span> <span class="sy0">=</span> <span class="kw3">preg_replace</span><span class="br0">&#40;</span><span class="st_h">'|\s*&lt;/embed&gt;\s*|'</span><span class="sy0">,</span> <span class="st_h">'&lt;/embed&gt;'</span><span class="sy0">,</span> <span class="re0">$pee</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="re0">$pee</span> <span class="sy0">=</span> <span class="kw3">preg_replace</span><span class="br0">&#40;</span><span class="st0">&quot;/<span class="es1">\n</span><span class="es1">\n</span>+/&quot;</span><span class="sy0">,</span> <span class="st0">&quot;<span class="es1">\n</span><span class="es1">\n</span>&quot;</span><span class="sy0">,</span> <span class="re0">$pee</span><span class="br0">&#41;</span><span class="sy0">;</span> <span class="co1">// take care of duplicates</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="re0">$pee</span> <span class="sy0">=</span> <span class="kw3">preg_replace</span><span class="br0">&#40;</span><span class="st_h">'/\n?(.+?)(?:\n\s*\n|\z)/s'</span><span class="sy0">,</span> <span class="st0">&quot;&lt;p&gt;<span class="es4">$1</span>&lt;/p&gt;<span class="es1">\n</span>&quot;</span><span class="sy0">,</span> <span class="re0">$pee</span><span class="br0">&#41;</span><span class="sy0">;</span> <span class="co1">// make paragraphs, including one at the end</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="re0">$pee</span> <span class="sy0">=</span> <span class="kw3">preg_replace</span><span class="br0">&#40;</span><span class="st_h">'|&lt;p&gt;\s*?&lt;/p&gt;|'</span><span class="sy0">,</span> <span class="st_h">''</span><span class="sy0">,</span> <span class="re0">$pee</span><span class="br0">&#41;</span><span class="sy0">;</span> <span class="co1">// under certain strange conditions it could create a P of entirely whitespace</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="re0">$pee</span> <span class="sy0">=</span> <span class="kw3">preg_replace</span><span class="br0">&#40;</span><span class="st_h">'!&lt;p&gt;([^&lt;]+)\s*?(&lt;/(?:div|address|form)[^&gt;]*&gt;)!'</span><span class="sy0">,</span> <span class="st0">&quot;&lt;p&gt;<span class="es4">$1</span>&lt;/p&gt;<span class="es4">$2</span>&quot;</span><span class="sy0">,</span> <span class="re0">$pee</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="re0">$pee</span> <span class="sy0">=</span> <span class="kw3">preg_replace</span><span class="br0">&#40;</span> <span class="st_h">'|&lt;p&gt;|'</span><span class="sy0">,</span> <span class="st0">&quot;<span class="es4">$1</span>&lt;p&gt;&quot;</span><span class="sy0">,</span> <span class="re0">$pee</span> <span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="re0">$pee</span> <span class="sy0">=</span> <span class="kw3">preg_replace</span><span class="br0">&#40;</span><span class="st_h">'!&lt;p&gt;\s*(&lt;/?'</span> <span class="sy0">.</span> <span class="re0">$allblocks</span> <span class="sy0">.</span> <span class="st_h">'[^&gt;]*&gt;)\s*&lt;/p&gt;!'</span><span class="sy0">,</span> <span class="st0">&quot;<span class="es4">$1</span>&quot;</span><span class="sy0">,</span> <span class="re0">$pee</span><span class="br0">&#41;</span><span class="sy0">;</span> <span class="co1">// don't pee all over a tag</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="re0">$pee</span> <span class="sy0">=</span> <span class="kw3">preg_replace</span><span class="br0">&#40;</span><span class="st0">&quot;|&lt;p&gt;(&lt;li.+?)&lt;/p&gt;|&quot;</span><span class="sy0">,</span> <span class="st0">&quot;<span class="es4">$1</span>&quot;</span><span class="sy0">,</span> <span class="re0">$pee</span><span class="br0">&#41;</span><span class="sy0">;</span> <span class="co1">// problem with nested lists</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="re0">$pee</span> <span class="sy0">=</span> <span class="kw3">preg_replace</span><span class="br0">&#40;</span><span class="st_h">'|&lt;p&gt;&lt;blockquote([^&gt;]*)&gt;|i'</span><span class="sy0">,</span> <span class="st0">&quot;&lt;blockquote<span class="es4">$1</span>&gt;&lt;p&gt;&quot;</span><span class="sy0">,</span> <span class="re0">$pee</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="re0">$pee</span> <span class="sy0">=</span> <span class="kw3">str_replace</span><span class="br0">&#40;</span><span class="st_h">'&lt;/blockquote&gt;&lt;/p&gt;'</span><span class="sy0">,</span> <span class="st_h">'&lt;/p&gt;&lt;/blockquote&gt;'</span><span class="sy0">,</span> <span class="re0">$pee</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="re0">$pee</span> <span class="sy0">=</span> <span class="kw3">preg_replace</span><span class="br0">&#40;</span><span class="st_h">'!&lt;p&gt;\s*(&lt;/?'</span> <span class="sy0">.</span> <span class="re0">$allblocks</span> <span class="sy0">.</span> <span class="st_h">'[^&gt;]*&gt;)!'</span><span class="sy0">,</span> <span class="st0">&quot;<span class="es4">$1</span>&quot;</span><span class="sy0">,</span> <span class="re0">$pee</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="re0">$pee</span> <span class="sy0">=</span> <span class="kw3">preg_replace</span><span class="br0">&#40;</span><span class="st_h">'!(&lt;/?'</span> <span class="sy0">.</span> <span class="re0">$allblocks</span> <span class="sy0">.</span> <span class="st_h">'[^&gt;]*&gt;)\s*&lt;/p&gt;!'</span><span class="sy0">,</span> <span class="st0">&quot;<span class="es4">$1</span>&quot;</span><span class="sy0">,</span> <span class="re0">$pee</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="re0">$br</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$pee</span> <span class="sy0">=</span> <span class="kw3">preg_replace_callback</span><span class="br0">&#40;</span><span class="st_h">'/&lt;(script|style).*?&lt;\/\\1&gt;/s'</span><span class="sy0">,</span> <span class="kw3">create_function</span><span class="br0">&#40;</span><span class="st_h">'$matches'</span><span class="sy0">,</span> <span class="st_h">'return str_replace(&quot;\n&quot;, &quot;&lt;WPPreserveNewline /&gt;&quot;, $matches[0]);'</span><span class="br0">&#41;</span><span class="sy0">,</span> <span class="re0">$pee</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$pee</span> <span class="sy0">=</span> <span class="kw3">preg_replace</span><span class="br0">&#40;</span><span class="st_h">'|(?&lt;!&lt;br /&gt;)\s*\n|'</span><span class="sy0">,</span> <span class="st0">&quot;&lt;br /&gt;<span class="es1">\n</span>&quot;</span><span class="sy0">,</span> <span class="re0">$pee</span><span class="br0">&#41;</span><span class="sy0">;</span> <span class="co1">// optionally make line breaks</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$pee</span> <span class="sy0">=</span> <span class="kw3">str_replace</span><span class="br0">&#40;</span><span class="st_h">'&lt;WPPreserveNewline /&gt;'</span><span class="sy0">,</span> <span class="st0">&quot;<span class="es1">\n</span>&quot;</span><span class="sy0">,</span> <span class="re0">$pee</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="re0">$pee</span> <span class="sy0">=</span> <span class="kw3">preg_replace</span><span class="br0">&#40;</span><span class="st_h">'!(&lt;/?'</span> <span class="sy0">.</span> <span class="re0">$allblocks</span> <span class="sy0">.</span> <span class="st_h">'[^&gt;]*&gt;)\s*&lt;br /&gt;!'</span><span class="sy0">,</span> <span class="st0">&quot;<span class="es4">$1</span>&quot;</span><span class="sy0">,</span> <span class="re0">$pee</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="re0">$pee</span> <span class="sy0">=</span> <span class="kw3">preg_replace</span><span class="br0">&#40;</span><span class="st_h">'!&lt;br /&gt;(\s*&lt;/?(?:p|li|div|dl|dd|dt|th|pre|td|ul|ol)[^&gt;]*&gt;)!'</span><span class="sy0">,</span> <span class="st_h">'$1'</span><span class="sy0">,</span> <span class="re0">$pee</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="kw3">strpos</span><span class="br0">&#40;</span><span class="re0">$pee</span><span class="sy0">,</span> <span class="st_h">'&lt;pre'</span><span class="br0">&#41;</span> <span class="sy0">!==</span> <span class="kw4">false</span><span class="br0">&#41;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$pee</span> <span class="sy0">=</span> <span class="kw3">preg_replace_callback</span><span class="br0">&#40;</span><span class="st_h">'!(&lt;pre.*?&gt;)(.*?)&lt;\/pre&gt;!is'</span><span class="sy0">,</span> <span class="st_h">'clean_pre'</span><span class="sy0">,</span> <span class="re0">$pee</span> <span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="re0">$pee</span> <span class="sy0">=</span> <span class="kw3">preg_replace</span><span class="br0">&#40;</span> <span class="st0">&quot;|<span class="es1">\n</span>&lt;/p&gt;$|&quot;</span><span class="sy0">,</span> <span class="st_h">'&lt;/p&gt;'</span><span class="sy0">,</span> <span class="re0">$pee</span> <span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="re0">$pee</span> <span class="sy0">=</span> <span class="kw3">preg_replace</span><span class="br0">&#40;</span><span class="st_h">'/&lt;p&gt;\s*?('</span> <span class="sy0">.</span> get_shortcode_regex<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy0">.</span> <span class="st_h">')\s*&lt;\/p&gt;/s'</span><span class="sy0">,</span> <span class="st_h">'$1'</span><span class="sy0">,</span> <span class="re0">$pee</span><span class="br0">&#41;</span><span class="sy0">;</span> <span class="co1">// don't auto-p wrap shortcodes that stand alone</span></div></li>
<li class="li1"><div class="de1">&nbsp;</div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="kw1">return</span> <span class="re0">$pee</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1"><span class="br0">&#125;</span></div></li>
</ol>
        </div>
    </div>
</div>

<p>После строки 77 вставляем:</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p22242">
        <div class="code php" id="p222code42">
<ol class="php" style="font-family:monospace;" start="78"><li class="li1"><div class="de1">&nbsp; &nbsp; <span class="re0">$pee</span> <span class="sy0">=</span> <span class="kw3">preg_replace</span><span class="br0">&#40;</span><span class="st0">&quot;/&lt;p&gt;<span class="es1">\\</span>s*(&lt;<span class="es4">{$allblocks}</span>.*?)&lt;<span class="es1">\\</span>/p&gt;/ism&quot;</span><span class="sy0">,</span> <span class="st_h">'$1'</span><span class="sy0">,</span> <span class="re0">$pee</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li>
</ol>
        </div>
    </div>
</div>

<p>Эта строка кода убирает параграф вокруг открывающего тэга блочного элемента. Такой простой вот трюк (я на него убил минут 30 отладки) решает проблему с форматированием.</p>
<p>Но, как оказалось, это еще не всё. Второй случай более редкий:</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p22243">
        <div class="code html" id="p222code43">
&nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">li</span>&gt;</span>text<br />
<span class="sc2">&lt;<span class="kw2">div</span>&gt;&lt;<span class="sy0">/</span><span class="kw2">div</span>&gt;</span><br />
<br />
text<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">li</span>&gt;</span>
        </div>
    </div>
</div>

<p>Что характерно, перед открывающим &lt;li&gt; должен стоять по крайней мере пробел (редактор WordPress его добавляет, так что условие вполне выполнимое).<br />
Так выглядит результат работы неизменённого <code>wpautop()</code>:</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p22244">
        <div class="code html" id="p222code44">
<span class="sc2">&lt;<span class="kw2">li</span>&gt;</span>text<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">p</span>&gt;</span><br />
<span class="sc2">&lt;<span class="kw2">div</span>&gt;&lt;<span class="sy0">/</span><span class="kw2">div</span>&gt;</span><br />
<span class="sc2">&lt;<span class="kw2">p</span>&gt;</span>text<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">li</span>&gt;</span>
        </div>
    </div>
</div>

<p>А так&nbsp;&mdash;&nbsp;исправленного:</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p22245">
        <div class="code html" id="p222code45">
<span class="sc2">&lt;<span class="kw2">li</span>&gt;</span>text<br />
<span class="sc2">&lt;<span class="kw2">div</span>&gt;&lt;<span class="sy0">/</span><span class="kw2">div</span>&gt;</span><br />
<span class="sc2">&lt;<span class="kw2">p</span>&gt;</span>text<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">li</span>&gt;</span>
        </div>
    </div>
</div>

<p>В исправленном варианте на одну ошибку меньше <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="p22246">
        <div class="code php" id="p222code46">
<span class="kw2">function</span> wpautop_replace_callback<span class="br0">&#40;</span><span class="re0">$matches</span><span class="br0">&#41;</span><br />
<span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="st_h">'&lt;/p&gt;'</span> <span class="sy0">==</span> <span class="re0">$matches</span><span class="br0">&#91;</span>2<span class="br0">&#93;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="st_h">'&lt;p&gt;'</span> <span class="sy0">.</span> <span class="re0">$matches</span><span class="br0">&#91;</span>1<span class="br0">&#93;</span> <span class="sy0">.</span> <span class="re0">$matches</span><span class="br0">&#91;</span>2<span class="br0">&#93;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
<br />
&nbsp; &nbsp; <span class="kw1">return</span> <span class="re0">$matches</span><span class="br0">&#91;</span>1<span class="br0">&#93;</span> <span class="sy0">.</span> <span class="re0">$matches</span><span class="br0">&#91;</span>2<span class="br0">&#93;</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span>
        </div>
    </div>
</div>

<p>и в функцию <code>wpautop()</code> под строку</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p22247">
        <div class="code php" id="p222code47">
&nbsp; &nbsp; <span class="re0">$pee</span> <span class="sy0">=</span> <span class="kw3">str_replace</span><span class="br0">&#40;</span><span class="st_h">'&lt;/blockquote&gt;&lt;/p&gt;'</span><span class="sy0">,</span> <span class="st_h">'&lt;/p&gt;&lt;/blockquote&gt;'</span><span class="sy0">,</span> <span class="re0">$pee</span><span class="br0">&#41;</span><span class="sy0">;</span>
        </div>
    </div>
</div>

<p>добавить</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p22248">
        <div class="code php" id="p222code48">
&nbsp; &nbsp; <span class="re0">$pee</span> <span class="sy0">=</span> <span class="kw3">preg_replace_callback</span><span class="br0">&#40;</span><span class="st0">&quot;/&lt;p&gt;(.*?)(&lt;<span class="es1">\\</span>/<span class="es4">{$allblocks}</span>&gt;)/s&quot;</span><span class="sy0">,</span> <span class="st_h">'wpautop_replace_callback'</span><span class="sy0">,</span> <span class="re0">$pee</span><span class="br0">&#41;</span><span class="sy0">;</span>
        </div>
    </div>
</div>

<p>После этого вроде всё хорошо. За исключением элементов <code>&lt;ins&gt;</code> и <code>&lt;del&gt;</code>. Так как они могут иметь как блочный, так и строчный контекст, решение я пока не придумал. Единственное, что я могу посоветовать: если нужен <code>&lt;ins&gt;</code> или <code>&lt;del&gt;</code> в блочном котексте, его нудно поместить в <code>&lt;div&gt;</code>:</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p22249">
        <div class="code html" id="p222code49">
<span class="sc2">&lt;<span class="kw2">div</span>&gt;&lt;<span class="kw2">ins</span>&gt;</span><br />
whatever<br />
<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">ins</span>&gt;&lt;<span class="sy0">/</span><span class="kw2">div</span>&gt;</span>
        </div>
    </div>
</div>

<p>По традиции, <a href="http://blog.sjinks.pro/tag/patch/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  патч">патч</a> в формате unified diff, который исправляет проблему:</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p22250">
        <div class="code diff" id="p222code50">
--- formatting.php.original 2008-04-25 03:46:17.000000000 +0300<br />
<span class="re4">+++ formatting.php &nbsp;<span class="nu0">2008</span>-07-07 05:<span class="nu0">44</span>:<span class="nu0">52.000000000</span> +0300</span><br />
<span class="re6">@@ -<span class="nu0">59</span>,<span class="nu0">6</span> +<span class="nu0">59</span>,<span class="nu0">15</span> @@</span><br />
&nbsp; &nbsp; return $text;<br />
&nbsp;<span class="br0">&#125;</span><br />
<br />
<span class="re8">+function wpautop_replace_callback<span class="br0">&#40;</span>$matches<span class="br0">&#41;</span></span><br />
<span class="re8">+<span class="br0">&#123;</span></span><br />
<span class="re8">+ &nbsp; &nbsp;if <span class="br0">&#40;</span>'&lt;/p&gt;' == $matches<span class="br0">&#91;</span><span class="nu0">2</span><span class="br0">&#93;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></span><br />
<span class="re8">+ &nbsp; &nbsp; &nbsp; return '&lt;p&gt;' . $matches<span class="br0">&#91;</span>1<span class="br0">&#93;</span> . $matches<span class="br0">&#91;</span>2<span class="br0">&#93;</span>;</span><br />
<span class="re8">+ &nbsp; <span class="br0">&#125;</span></span><br />
<span class="re8">+</span><br />
<span class="re8">+ &nbsp; return $matches<span class="br0">&#91;</span>1<span class="br0">&#93;</span> . $matches<span class="br0">&#91;</span>2<span class="br0">&#93;</span>;</span><br />
<span class="re8">+<span class="br0">&#125;</span></span><br />
<span class="re8">+</span><br />
&nbsp;function wpautop<span class="br0">&#40;</span>$pee, $br = 1<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; $pee = $pee . &quot;\n&quot;; // just to make things a little easier, pad the end<br />
&nbsp; &nbsp; $pee = preg_replace<span class="br0">&#40;</span>'|&lt;br /&gt;\s*&lt;br /&gt;|', &quot;\n\n&quot;, $pee<span class="br0">&#41;</span>;<br />
<span class="re6">@@ -<span class="nu0">75</span>,<span class="nu0">11</span> +<span class="nu0">84</span>,<span class="nu0">13</span> @@</span><br />
&nbsp; &nbsp; $pee = preg_replace<span class="br0">&#40;</span>'/\n?<span class="br0">&#40;</span>.+?<span class="br0">&#41;</span><span class="br0">&#40;</span>?:\n\s*\n|\z<span class="br0">&#41;</span>/s', &quot;&lt;p&gt;$1&lt;/p&gt;\n&quot;, $pee<span class="br0">&#41;</span>; // make paragraphs, including one at the end<br />
&nbsp; &nbsp; $pee = preg_replace<span class="br0">&#40;</span>'|&lt;p&gt;\s*?&lt;/p&gt;|', '', $pee<span class="br0">&#41;</span>; // under certain strange conditions it could create a P of entirely whitespace<br />
&nbsp; &nbsp; $pee = preg_replace<span class="br0">&#40;</span>'!&lt;p&gt;<span class="br0">&#40;</span><span class="br0">&#91;</span>^&lt;<span class="br0">&#93;</span>+<span class="br0">&#41;</span>\s*?<span class="br0">&#40;</span>&lt;/<span class="br0">&#40;</span>?:div|address|form<span class="br0">&#41;</span><span class="br0">&#91;</span>^&gt;<span class="br0">&#93;</span>*&gt;<span class="br0">&#41;</span>!', &quot;&lt;p&gt;$1&lt;/p&gt;$2&quot;, $pee<span class="br0">&#41;</span>;<br />
<span class="re8">+ &nbsp; $pee = preg_replace<span class="br0">&#40;</span>&quot;/&lt;p&gt;\\s*<span class="br0">&#40;</span>&lt;<span class="br0">&#123;</span>$allblocks<span class="br0">&#125;</span>.*?<span class="br0">&#41;</span>&lt;\\/p&gt;/ism&quot;, '$1', $pee<span class="br0">&#41;</span>;</span><br />
&nbsp; &nbsp; $pee = preg_replace<span class="br0">&#40;</span> '|&lt;p&gt;|', &quot;$1&lt;p&gt;&quot;, $pee <span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; $pee = preg_replace<span class="br0">&#40;</span>'!&lt;p&gt;\s*<span class="br0">&#40;</span>&lt;/?' . $allblocks . '<span class="br0">&#91;</span>^&gt;<span class="br0">&#93;</span>*&gt;<span class="br0">&#41;</span>\s*&lt;/p&gt;!', &quot;$1&quot;, $pee<span class="br0">&#41;</span>; // don't pee all over a tag<br />
&nbsp; &nbsp; $pee = preg_replace<span class="br0">&#40;</span>&quot;|&lt;p&gt;<span class="br0">&#40;</span>&lt;li.+?<span class="br0">&#41;</span>&lt;/p&gt;|&quot;, &quot;$1&quot;, $pee<span class="br0">&#41;</span>; // problem with nested lists<br />
&nbsp; &nbsp; $pee = preg_replace<span class="br0">&#40;</span>'|&lt;p&gt;&lt;blockquote<span class="br0">&#40;</span><span class="br0">&#91;</span>^&gt;<span class="br0">&#93;</span>*<span class="br0">&#41;</span>&gt;|i', &quot;&lt;blockquote$1&gt;&lt;p&gt;&quot;, $pee<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; $pee = str_replace<span class="br0">&#40;</span>'&lt;/blockquote&gt;&lt;/p&gt;', '&lt;/p&gt;&lt;/blockquote&gt;', $pee<span class="br0">&#41;</span>;<br />
<span class="re8">+ &nbsp; $pee = preg_replace_callback<span class="br0">&#40;</span>&quot;/&lt;p&gt;<span class="br0">&#40;</span>.*?<span class="br0">&#41;</span><span class="br0">&#40;</span>&lt;\\/<span class="br0">&#123;</span>$allblocks<span class="br0">&#125;</span>&gt;<span class="br0">&#41;</span>/s&quot;, 'wpautop_replace_callback', $pee<span class="br0">&#41;</span>;</span><br />
&nbsp; &nbsp; $pee = preg_replace<span class="br0">&#40;</span>'!&lt;p&gt;\s*<span class="br0">&#40;</span>&lt;/?' . $allblocks . '<span class="br0">&#91;</span>^&gt;<span class="br0">&#93;</span>*&gt;<span class="br0">&#41;</span>!', &quot;$1&quot;, $pee<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; $pee = preg_replace<span class="br0">&#40;</span>'!<span class="br0">&#40;</span>&lt;/?' . $allblocks . '<span class="br0">&#91;</span>^&gt;<span class="br0">&#93;</span>*&gt;<span class="br0">&#41;</span>\s*&lt;/p&gt;!', &quot;$1&quot;, $pee<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; if <span class="br0">&#40;</span>$br<span class="br0">&#41;</span> <span class="br0">&#123;</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/wordpress/222-main-sources-of-invalid-markup-in-wordpress/">источник</a> обязательно.</p>]]></content:encoded>
			<wfw:commentRss>http://blog.sjinks.pro/wordpress/222-main-sources-of-invalid-markup-in-wordpress/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Кросс-браузерный резиновый трёхколоночный макет в высоту окна</title>
		<link>http://blog.sjinks.pro/css/209-cross-browser-liquid-three-column-layout-full-height/</link>
		<comments>http://blog.sjinks.pro/css/209-cross-browser-liquid-three-column-layout-full-height/#comments</comments>
		<pubDate>Sun, 29 Jun 2008 20:49:24 +0000</pubDate>
		<dc:creator>Vladimir</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[XHTML]]></category>
		<category><![CDATA[кросс-браузерное решение]]></category>
		<category><![CDATA[макет]]></category>
		<category><![CDATA[резиновый макет]]></category>
		<category><![CDATA[трёхколоночный макет]]></category>

		<guid isPermaLink="false">http://blog.sjinks.pro/?p=209</guid>
		<description><![CDATA[Кросс-браузерное решение для резинового макета с одинаковой высотой колонок и стопроцентной высотой Недавно понадобилось сверстать резиновый трёхколоночный макет с высотой 100% и колонками одинаковой высоты. К моему удивлению, это оказалось не очень простым делом: вместо планируемого получаса это заняло намного больше времени. Требования к макету: кросс-браузерность (куда без неё); минимальная высота: 100% (полное окно, независимо [...]<p>© 2012 <a href="http://blog.sjinks.pro">Ars Longa, Vita Brevis</a>. Все права защищены. Перепубликация материалов без разрешения автора запрещена.</p>
<p>При использовании материалов блога наличие активной не закрытой от индексирования ссылки на <a href="http://blog.sjinks.pro/css/209-cross-browser-liquid-three-column-layout-full-height/">источник</a> обязательно.</p>]]></description>
			<content:encoded><![CDATA[<h2><em>Кросс-браузерное решение для резинового макета с одинаковой высотой колонок и стопроцентной высотой</em></h2>
<p>Недавно понадобилось сверстать резиновый <a href="http://blog.sjinks.pro/tag/three-column-layout/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  трёхколоночный макет">трёхколоночный макет</a> с высотой 100% и колонками одинаковой высоты. К моему удивлению, это оказалось не очень простым делом: вместо планируемого получаса это заняло намного больше времени.</p>
<p>Требования к макету:</p>
<ul>
<li>кросс-браузерность (куда без неё);</li>
<li>минимальная высота: 100% (полное окно, независимо от высоты контента);</li>
<li>минимум кода;</li>
<li>все три колонки должны быть одинаковой высоты;</li>
<li>никакого <a href="http://blog.sjinks.pro/tag/javascript/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  JavaScript">JavaScript</a>.</li>
</ul>
<p><span id="more-209"></span></p>
<p>Минимум кода означает минимум разметки:</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p20960">
        <div class="code xhtml" id="p209code60">
<span class="sc0">&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.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>Three Column Liquid Layout<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">id</span><span class="sy0">=</span><span class="st0">&quot;header&quot;</span>&gt;</span>Header<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">div</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;container&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;content&quot;</span> <span class="kw3">class</span><span class="sy0">=</span><span class="st0">&quot;column&quot;</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">p</span>&gt;</span>Sed eleifend, sapien vel mollis euismod, sem velit semper ante...<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">p</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">div</span>&gt;</span><br />
<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;left&quot;</span> <span class="kw3">class</span><span class="sy0">=</span><span class="st0">&quot;column&quot;</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">p</span>&gt;</span>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Duis sollicitudin dolor nec nunc iaculis tincidunt...<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">p</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">div</span>&gt;</span><br />
<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;right&quot;</span> <span class="kw3">class</span><span class="sy0">=</span><span class="st0">&quot;column&quot;</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">p</span>&gt;</span>Phasellus sollicitudin. Fusce ut tellus. Vivamus dapibus. Cras eu elit. Vestibulum ante ipsum primis in faucibus orci luctus et...<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">p</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 />
&nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">div</span> <span class="kw3">id</span><span class="sy0">=</span><span class="st0">&quot;footer&quot;</span>&gt;</span>Footer<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><q>So far so good</q>, как любит говорить один мой коллега. Теперь переходим к разметке.</p>
<p>Начнём с общих определений:</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p20961">
        <div class="code css" id="p209code61">
html <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">background</span><span class="sy0">:</span> <span class="re0">#800000</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">border</span><span class="sy0">:</span> <span class="nu0">0</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><br />
<br />
body <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">font</span><span class="sy0">:</span> <span class="re3">14px</span>/<span class="re3"><span class="nu0">120</span>%</span> Verdana<span class="sy0">,</span> Tahoma<span class="sy0">,</span> Arial<span class="sy0">,</span> Helvetica<span class="sy0">,</span> <span class="kw2">sans-serif</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">width</span><span class="sy0">:</span> <span class="re3"><span class="nu0">90</span>%</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>
        </div>
    </div>
</div>

<p>Теперь переходим к 100% высоте. Помним, что Konqueror/KHTML <a href="http://blog.sjinks.pro/css/15-footer-in-the-very-bottom/#comment-163">имеет свою точку зрения</a> по поводу того, кто задаёт скроллинг; также не забываем про <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/15-footer-in-the-very-bottom/">не понимает</a> <code>min-height</code></p>
          
<div class="codebox">
    <div class="the_code" style="" id="p20962">
        <div class="code css" id="p209code62">
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>not<span class="br0">&#40;</span><span class="re2">:nth-</span>child<span class="br0">&#40;</span>1<span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> <br />
&nbsp; &nbsp; <span class="kw1">overflow</span><span class="sy0">:</span> <span class="kw2">visible</span><span class="sy0">;</span> <span class="coMULTI">/* KHTML сам нарисует скроллинг, не будем ему мешать */</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">border</span><span class="sy0">:</span> <span class="nu0">0</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">height</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">#container</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">height</span><span class="sy0">:</span> <span class="kw2">auto</span> !important<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> <span class="coMULTI">/* для IE6 */</span><br />
&nbsp; &nbsp; <span class="kw1">min-height</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="sy0">*</span> html <span class="re0">#container</span> <span class="br0">&#123;</span> <span class="kw1">overflow</span><span class="sy0">:</span> <span class="kw2">visible</span><span class="sy0">;</span> <span class="br0">&#125;</span>
        </div>
    </div>
</div>

<p>Для IE6 мы должны задать <code>overflow: visible</code>, в противном случае контент будет нещадно обрезаться.</p>
<p>Задаем заголовок и подвал:</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p20963">
        <div class="code css" id="p209code63">
<span class="re0">#header</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">height</span><span class="sy0">:</span> <span class="re3">3em</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">background</span><span class="sy0">:</span> <span class="kw2">red</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">color</span><span class="sy0">:</span> <span class="re0">#FFF</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="nu0">0</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">z-index</span><span class="sy0">:</span> <span class="nu0">1000</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 />
<span class="br0">&#125;</span><br />
<br />
<span class="re1">.column</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">padding-top</span><span class="sy0">:</span> <span class="re3">3em</span> !important<span class="sy0">;</span> <span class="coMULTI">/* компенсация высоты заголовка */</span><br />
<span class="br0">&#125;</span><br />
<br />
<span class="re0">#footer</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">height</span><span class="sy0">:</span> <span class="re3">3em</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">color</span><span class="sy0">:</span> <span class="re0">#FFF</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">background</span><span class="sy0">:</span> <span class="kw2">green</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">z-index</span><span class="sy0">:</span> <span class="nu0">1000</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">margin-top</span><span class="sy0">:</span> <span class="re3">-3em</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>
        </div>
    </div>
</div>

<p>Заголовок позиционируем абсолютно, так как контейнер <code>#container</code> имеет как минимум стопроцентную высоту: задать высоту <code>100%-3em</code> будет проблематично. Поэтому, считая, что высота заголовка нам известна (а так обычно всегда), мы просто помещаем заголовок "на территорию" контейнера, а высота заголовка будет компенсирована верхним отступом у колонок. Даже если нам придётся задать фоновый рисунок у <code>#container</code>, мы можем компенсировать высоту заголовка путём использования <code>background-position</code>.</p>
<p>Аналогично (только хуже <img src='http://static.sjinks.info/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  ) с футером: его нужно поднять вверх на всю его высоту (отсюда относительное позиционирование и <code>z-index</code>)&nbsp;&mdash;&nbsp;как и в случае с заголовком, для поддержания стопроцентной высоты необходимо, чтобы он располагался "на территории" контейнера.</p>
<p>Теперь переходим к <a href="http://blog.sjinks.pro/css/48-liquid-three-column-layout-with-right-sidebars/">трём колонкам</a>:</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p20964">
        <div class="code css" id="p209code64">
<span class="re0">#container</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">padding-left</span><span class="sy0">:</span> <span class="re3">220px</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">padding-right</span><span class="sy0">:</span> <span class="re3">200px</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">float</span><span class="sy0">:</span> <span class="kw1">left</span><span class="sy0">;</span> <span class="coMULTI">/* IE 5.01 */</span><br />
&nbsp; &nbsp; <span class="kw1">float</span><span class="coMULTI">/**/</span><span class="sy0">:</span> <span class="kw2">none</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">background</span><span class="sy0">:</span> <span class="kw2">lime</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">#left</span><span class="sy0">,</span> <span class="re0">#right</span><span class="sy0">,</span> <span class="re0">#content</span> <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">position</span><span class="sy0">:</span> <span class="kw2">relative</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">padding-bottom</span><span class="sy0">:</span> <span class="re3">1000em</span> !important<span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">margin-bottom</span><span class="sy0">:</span> <span class="re3">-997em</span> !important<span class="sy0">;</span> <span class="coMULTI">/* компенсация высоты футера */</span><br />
<span class="br0">&#125;</span><br />
<br />
<span class="re0">#left</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">width</span><span class="sy0">:</span> <span class="re3">220px</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">background</span><span class="sy0">:</span> <span class="kw2">url</span><span class="br0">&#40;</span>images/tile-2.jpg<span class="br0">&#41;</span> <span class="kw2">repeat</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">margin-left</span><span class="sy0">:</span> <span class="re3">-<span class="nu0">100</span>%</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">right</span><span class="sy0">:</span> <span class="re3">220px</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><br />
<br />
<span class="sy0">*</span> html <span class="re0">#left</span> <span class="br0">&#123;</span> <span class="coMULTI">/* У IE6 всё не как у людей */</span><br />
&nbsp; &nbsp; <span class="kw1">left</span><span class="sy0">:</span> <span class="re3">200px</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><br />
<br />
<span class="re0">#right</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">width</span><span class="sy0">:</span> <span class="re3">200px</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">background</span><span class="sy0">:</span> <span class="kw2">url</span><span class="br0">&#40;</span>images/tile-3.jpg<span class="br0">&#41;</span> <span class="kw2">repeat</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">margin-right</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">#content</span> <span class="br0">&#123;</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="kw2">url</span><span class="br0">&#40;</span>images/tile-1.jpg<span class="br0">&#41;</span> <span class="kw2">repeat</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span>
        </div>
    </div>
</div>

<p>Теперь идут хаки. По слухам, в IE/Mac вышеприведённая техника для создания колонок одинаковой высоты не работает. Вернее, он работает, но страницу разносит по высоте (добавляется невидимый <code>padding</code>). Мне-то всё равно, но так как исправить просто (в смысле, сделать колонки разной высоты), то почему бы и нет:</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p20965">
        <div class="code css" id="p209code65">
<span class="re0">#left</span><span class="sy0">,</span> <span class="re0">#right</span><span class="sy0">,</span> <span class="re0">#content</span> <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">position</span><span class="sy0">:</span> <span class="kw2">relative</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">padding-bottom</span><span class="sy0">:</span> <span class="re3">3em</span><span class="sy0">;</span> <span class="coMULTI">/* компенсация высоты футера */</span><br />
<span class="br0">&#125;</span><br />
<br />
<span class="coMULTI">/* Прячем от IE/Mac \*/</span><br />
<span class="re0">#left</span><span class="sy0">,</span> <span class="re0">#right</span><span class="sy0">,</span> <span class="re0">#content</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">padding-bottom</span><span class="sy0">:</span> <span class="re3">1000em</span> !important<span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">margin-bottom</span><span class="sy0">:</span> <span class="re3">-997em</span> !important<span class="sy0">;</span> <br />
<span class="br0">&#125;</span><br />
<span class="coMULTI">/**/</span>
        </div>
    </div>
</div>

<p>Переходим к Опере. Старые версии (7.0-7.2) не обрезают колонки по высоте. На помощь приходит <a href="http://www.positioniseverything.net/easyclearing.html">EasyClearing</a>:</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p20966">
        <div class="code css" id="p209code66">
<span class="re0">#container</span><span class="re2">:after </span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">content</span><span class="sy0">:</span> <span class="st0">'EasyClearing'</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">height</span><span class="sy0">:</span> <span class="nu0">0</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">clear</span><span class="sy0">:</span> <span class="kw2">both</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><br />
<br />
<span class="re0">#container</span> <span class="br0">&#123;</span> <span class="kw1">display</span><span class="sy0">:</span> inline-<span class="kw2">block</span><span class="sy0">;</span> <span class="br0">&#125;</span><br />
<span class="coMULTI">/*\*/</span><br />
<span class="re0">#container</span> <span class="br0">&#123;</span> <span class="kw1">display</span><span class="sy0">:</span> <span class="kw2">block</span><span class="sy0">;</span> <span class="br0">&#125;</span><br />
<span class="coMULTI">/**/</span>
        </div>
    </div>
</div>

<p>Но, как это обычно бывает в жизни, исправил одну ошибку&nbsp;&mdash;&nbsp;вылезла другая: EasyClearing портит разметку в IE&nbsp;5.01. По счастью, это легко лечится путём добавления <code>float: left</code> контейнеру <code>#container</code>:</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p20967">
        <div class="code css" id="p209code67">
<span class="re0">#container</span> <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> <span class="coMULTI">/* IE 5.01 */</span><br />
&nbsp; &nbsp; <span class="kw1">float</span><span class="coMULTI">/**/</span><span class="sy0">:</span> <span class="kw2">none</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span>
        </div>
    </div>
</div>

<p>Тем не менее, мы исправили не все глюки в Опере. Для Opera 8, у которой есть свои глюки в обработке overflow: hidden, нам придётся убрать <code>margin-bottom</code>/<code>padding-bottom</code> с самих колонок и применить их элементу внутри колонок. Либо так:</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p20968">
        <div class="code css" id="p209code68">
<span class="co1">@media all and (min-width: 0px) {</span><br />
&nbsp; &nbsp; <span class="re0">#left</span><span class="sy0">,</span> <span class="re0">#right</span><span class="sy0">,</span> <span class="re0">#content</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">margin-bottom</span><span class="sy0">:</span> 0 !important<span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">padding-bottom</span><span class="sy0">:</span> <span class="re3">3em</span> !important<span class="sy0">;</span> <span class="coMULTI">/* Компенсация высоты футера */</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
<br />
&nbsp; &nbsp; <span class="re0">#left</span><span class="re2">:before</span><span class="sy0">,</span> <span class="re0">#right</span><span class="re2">:before</span><span class="sy0">,</span> <span class="re0">#content</span><span class="re2">:before </span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">content</span><span class="sy0">:</span> <span class="st0">'EasyClearing'</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">display</span><span class="sy0">:</span> <span class="kw2">block</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">background</span><span class="sy0">:</span> <span class="kw2">inherit</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">padding-top</span><span class="sy0">:</span> <span class="re3">1000em</span> !important<span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">margin-bottom</span><span class="sy0">:</span> <span class="re3">-1000em</span> !important<span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">height</span><span class="sy0">:</span> <span class="nu0">0</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
<span class="br0">&#125;</span>
        </div>
    </div>
</div>

<p><a href="http://blog.sjinks.pro/test/3col/3col_h100.html" rel="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/209-cross-browser-liquid-three-column-layout-full-height/">источник</a> обязательно.</p>]]></content:encoded>
			<wfw:commentRss>http://blog.sjinks.pro/css/209-cross-browser-liquid-three-column-layout-full-height/feed/</wfw:commentRss>
		<slash:comments>36</slash:comments>
		</item>
		<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="p17371">
        <div class="code html" id="p173code71">
&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="p17372">
        <div class="code css" id="p173code72">
<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="p15074">
        <div class="code html" id="p150code74">
<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 или IE8:<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>Аккордеон на CSS без использования JavaScript</title>
		<link>http://blog.sjinks.pro/css/100-css-accordion-without-javascript/</link>
		<comments>http://blog.sjinks.pro/css/100-css-accordion-without-javascript/#comments</comments>
		<pubDate>Mon, 14 Apr 2008 18:17:49 +0000</pubDate>
		<dc:creator>Vladimir</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[XHTML]]></category>
		<category><![CDATA[аккордеон]]></category>

		<guid isPermaLink="false">http://blog.sjinks.pro/?p=100</guid>
		<description><![CDATA[Простой аккордеон без использования JavaScript В статье "парочка аккордеонов" я рассказывал, как сделать простой аккордеон с использованием JavaScript. Однако, будучи "certified CSS&#160;2.0 designer" и "certified XHTML&#160;1.0 designer", я не смог удержаться, чтобы не сделать аккордеон без JavaScript (только на CSS/XHTML). IE6 потребуется несколько иная разметка, чем нормальным браузерам (об этом можно прочитать в статье "Кросс-браузерное [...]<p>© 2012 <a href="http://blog.sjinks.pro">Ars Longa, Vita Brevis</a>. Все права защищены. Перепубликация материалов без разрешения автора запрещена.</p>
<p>При использовании материалов блога наличие активной не закрытой от индексирования ссылки на <a href="http://blog.sjinks.pro/css/100-css-accordion-without-javascript/">источник</a> обязательно.</p>]]></description>
			<content:encoded><![CDATA[<h2><em>Простой <a href="http://blog.sjinks.pro/tag/accordion/" 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></em></h2>
<p>В статье "<a href="http://blog.sjinks.pro/javascript/91-couple-of-accordions/"><strong>парочка аккордеонов</strong></a>" я рассказывал, как сделать простой аккордеон с использованием JavaScript. Однако, будучи "certified <a href="http://blog.sjinks.pro/tag/css/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  CSS">CSS</a>&nbsp;2.0 designer" и "certified <a href="http://blog.sjinks.pro/tag/xhtml/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  XHTML">XHTML</a>&nbsp;1.0 designer", я не смог удержаться, чтобы не сделать аккордеон <strong>без JavaScript</strong> (только на CSS/XHTML).<span id="more-100"></span></p>
<p><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/markup/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  разметка">разметка</a>, чем нормальным браузерам (об этом можно прочитать в статье "<a href="http://blog.sjinks.pro/css/49-cross-browser-vertical-menu-without-javascript/"><strong>Кросс-браузерное одноуровневое вертикальное меню без JavaScript</strong></a>"), поэтому я сразу привожу разметку, которая подойдёт для всех браузеров (за основу взята разметка из статьи "<a href="http://blog.sjinks.pro/javascript/91-couple-of-accordions/"><strong>парочка аккордеонов</strong></a>"):</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p10078">
        <div class="code xhtml" id="p100code78">
&nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">ul</span> <span class="kw3">id</span><span class="sy0">=</span><span class="st0">&quot;accordion&quot;</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">li</span>&gt;</span><br />
&nbsp; &nbsp; &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>Item 1<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; &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; &nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">ul</span>&gt;</span><br />
&nbsp; &nbsp; &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>SubItem 1.1<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; &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>SubItem 1.2<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; &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>SubItem 1.3<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; &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>SubItem 1.4<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="sy0">/</span><span class="kw2">ul</span>&gt;</span><br />
&nbsp; &nbsp; &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; &nbsp; &nbsp; <span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">li</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <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;active&quot;</span>&gt;</span><br />
&nbsp; &nbsp; &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>Item 2<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; &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; &nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">ul</span>&gt;</span><br />
&nbsp; &nbsp; &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>SubItem 2.1<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; &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>SubItem 2.2<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; &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>SubItem 2.3<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; &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>SubItem 2.4<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="sy0">/</span><span class="kw2">ul</span>&gt;</span><br />
&nbsp; &nbsp; &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; &nbsp; &nbsp; <span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">li</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">li</span>&gt;</span><br />
&nbsp; &nbsp; &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>Item 3<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; &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; &nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">ul</span>&gt;</span><br />
&nbsp; &nbsp; &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>SubItem 3.1<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; &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>SubItem 3.2<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="sy0">/</span><span class="kw2">ul</span>&gt;</span><br />
&nbsp; &nbsp; &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; &nbsp; &nbsp; <span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">li</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">li</span>&gt;</span><br />
&nbsp; &nbsp; &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>Item 4<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; &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; &nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">ul</span>&gt;</span><br />
&nbsp; &nbsp; &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>SubItem 4.1<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; &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>SubItem 4.2<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="sy0">/</span><span class="kw2">ul</span>&gt;</span><br />
&nbsp; &nbsp; &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; &nbsp; &nbsp; <span class="sc2">&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>
        </div>
    </div>
</div>

<p>Теперь CSS для нормальных браузеров:</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p10079">
        <div class="code css" id="p100code79">
a <span class="br0">&#123;</span> <span class="kw1">text-decoration</span><span class="sy0">:</span> <span class="kw2">none</span><span class="sy0">;</span> <span class="kw1">color</span><span class="sy0">:</span> <span class="re0">#00F</span><span class="sy0">;</span> <span class="br0">&#125;</span><br />
a<span class="re2">:hover </span><span class="br0">&#123;</span> <span class="kw1">text-decoration</span><span class="sy0">:</span> <span class="kw2">underline</span><span class="sy0">;</span> <span class="br0">&#125;</span><br />
<span class="re0">#accordion</span> a <span class="br0">&#123;</span> <span class="kw1">outline</span><span class="sy0">:</span> <span class="nu0">0</span><span class="sy0">;</span> <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <br />
<span class="re0">#accordion</span><span class="sy0">,</span> <span class="re0">#accordion</span> ul<span class="sy0">,</span> <span class="re0">#accordion</span> 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">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">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">#accordion</span> <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="re0">#CCC</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">width</span><span class="sy0">:</span> <span class="re3">150px</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><br />
<br />
<span class="re0">#accordion</span> ul <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">margin-left</span><span class="sy0">:</span> <span class="re3">40px</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><br />
<br />
<span class="re0">#accordion</span> <span class="sy0">&gt;</span> li <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">border-bottom</span><span class="sy0">:</span> <span class="re3">1px</span> <span class="kw2">solid</span> <span class="re0">#CCC</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">padding</span><span class="sy0">:</span> <span class="re3">2px</span> <span class="re3">5px</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><br />
<br />
<span class="coMULTI">/* Update 11-May-2008: в IE7 эта конструкция не работает<br />
#accordion &gt; li:not([class=&quot;active&quot;]) ul {<br />
&nbsp; &nbsp; display: none;<br />
}<br />
/**/</span><br />
<span class="coMULTI">/* Для максимальной совместимости с IE7 используем следующие<br />
&nbsp; &nbsp;два правила (их теоретически можно было сделать видимыми только <br />
&nbsp; &nbsp;для IE7, но смысла загромождать код нет :-) ). Легко заметить, что<br />
&nbsp; &nbsp;эти два правила есть инверсия предыдущего закомментированного правила */</span><br />
<span class="re0">#accordion</span> <span class="sy0">&gt;</span> li<span class="br0">&#91;</span>class<span class="sy0">=</span><span class="st0">&quot;active&quot;</span><span class="br0">&#93;</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">#accordion</span> <span class="sy0">&gt;</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 />
<span class="br0">&#125;</span><br />
<br />
<span class="re0">#accordion</span> <span class="sy0">&gt;</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">#accordion</span> <span class="sy0">&gt;</span> li<span class="re2">:last-child </span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">border-bottom</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">#accordion</span> li<span class="re1">.active</span> <span class="sy0">&gt;</span> a <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>Не забудем про IE6:</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p10080">
        <div class="code css" id="p100code80">
<span class="sy0">*</span> html <span class="re0">#accordion</span> li <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">border-bottom</span><span class="sy0">:</span> <span class="re3">1px</span> <span class="kw2">solid</span> <span class="re0">#CCC</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">padding</span><span class="sy0">:</span> <span class="re3">2px</span> <span class="re3">5px</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><br />
<br />
<span class="sy0">*</span> html <span class="re0">#accordion</span> li li <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">border-bottom</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="sy0">*</span> html <span class="re0">#accordion</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">border-bottom</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">/* IE7 не понимает last-child */</span><br />
<span class="sy0">*</span><span class="re2">:first-child</span><span class="sy0">+</span>html <span class="re0">#accordion</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">border-bottom</span><span class="sy0">:</span> <span class="nu0">0</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><br />
<br />
<span class="sy0">*</span> html <span class="re0">#accordion</span> li<span class="re1">.active</span> a <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><br />
<br />
<span class="sy0">*</span> html <span class="re0">#accordion</span> li<span class="re1">.active</span> ul a <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">color</span><span class="sy0">:</span> <span class="kw1">blue</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><br />
<br />
<span class="sy0">*</span> html <span class="re0">#accordion</span> li table <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 />
<span class="br0">&#125;</span><br />
<br />
<span class="sy0">*</span> html <span class="re0">#accordion</span> li<span class="re1">.active</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">#accordion</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">/* Спасибо Ивану Маркееву (http://markeev.labwr.ru) за замеченную опечатку */</span><br />
<span class="sy0">*</span> html <span class="re0">#accordion</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>
        </div>
    </div>
</div>

<p><a href="http://blog.sjinks.pro/test/accordion/accordion3.html">Рабочий пример</a>.</p>
<p class="centered"><a href="http://www.odesk.com/users/~~2a9d5e50f22b834c"><img src="http://www.odesk.com/api/exams/32167/image" alt="oDesk Certified CSS 2.0 Designer"/></a> <a href="http://www.odesk.com/users/~~2a9d5e50f22b834c"><img src="http://www.odesk.com/api/exams/35154/image" alt="oDesk Certified XHTML 1.0 Designer"/></a></p>
<p>© 2012 <a href="http://blog.sjinks.pro">Ars Longa, Vita Brevis</a>. Все права защищены. Перепубликация материалов без разрешения автора запрещена.</p>
<p>При использовании материалов блога наличие активной не закрытой от индексирования ссылки на <a href="http://blog.sjinks.pro/css/100-css-accordion-without-javascript/">источник</a> обязательно.</p>]]></content:encoded>
			<wfw:commentRss>http://blog.sjinks.pro/css/100-css-accordion-without-javascript/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Парочка аккордеонов</title>
		<link>http://blog.sjinks.pro/javascript/91-couple-of-accordions/</link>
		<comments>http://blog.sjinks.pro/javascript/91-couple-of-accordions/#comments</comments>
		<pubDate>Sun, 13 Apr 2008 18:19:53 +0000</pubDate>
		<dc:creator>Vladimir</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Prototype]]></category>
		<category><![CDATA[Scriptaculous]]></category>
		<category><![CDATA[WCAG]]></category>
		<category><![CDATA[XHTML]]></category>
		<category><![CDATA[аккордеон]]></category>

		<guid isPermaLink="false">http://blog.sjinks.pro/?p=91</guid>
		<description><![CDATA[Несколько вариантов реализации меню-аккордеона с использованием библиотеки Prototype Недавно в одном из проектов появилась необходимость использовать аккордеон (подобный используемому на Desert Ridge Marketplace). Любят заказчики дешевые эффекты, ничего здесь не поделаешь Чем мне не понравился аккордеон на Desert Ridge&#160;&#8212;&#160;это полной зависимостью от JavaScript: если JavaScript выключен, навигация по сайту переставала работать. Это мне не понравилось, [...]<p>© 2012 <a href="http://blog.sjinks.pro">Ars Longa, Vita Brevis</a>. Все права защищены. Перепубликация материалов без разрешения автора запрещена.</p>
<p>При использовании материалов блога наличие активной не закрытой от индексирования ссылки на <a href="http://blog.sjinks.pro/javascript/91-couple-of-accordions/">источник</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/prototype/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  Prototype">Prototype</a></em></h2>
<p>Недавно в одном из проектов появилась необходимость использовать <a href="http://blog.sjinks.pro/tag/accordion/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  аккордеон">аккордеон</a> (подобный используемому на Desert Ridge Marketplace). Любят заказчики дешевые эффекты, ничего здесь не поделаешь <img src='http://static.sjinks.info/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>Чем мне не понравился аккордеон на Desert Ridge&nbsp;&mdash;&nbsp;это полной зависимостью от <a href="http://blog.sjinks.pro/tag/javascript/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  JavaScript">JavaScript</a>: если <a href="http://blog.sjinks.pro/tag/javascript/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  JavaScript">JavaScript</a> выключен, навигация по сайту переставала работать. Это мне не понравилось, и я решил написать свой. </p>
<p>Представляю два решения:</p>
<ol>
<li>Подменю сворачивается/разворачивается по щелчку, элементы меню не зависят друг от друга;</li>
<li>Подменю сворачивается/разворачивается по щелчку, при этом не может быть более одного развёрнутого подменю.</li>
</ol>
<p>При выключенном JavaScript оба аккордеона трансформируются в двухуровневый список.<span id="more-91"></span></p>
<p>Поехали. Будем использовать следующую разметку:</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p9186">
        <div class="code xhtml" id="p91code86">
&nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">ul</span> <span class="kw3">id</span><span class="sy0">=</span><span class="st0">&quot;accordion&quot;</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">li</span>&gt;</span><br />
&nbsp; &nbsp; &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>Item 1<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">a</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">ul</span>&gt;</span><br />
&nbsp; &nbsp; &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>SubItem 1.1<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; &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>SubItem 1.2<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; &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>SubItem 1.3<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; &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>SubItem 1.4<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="sy0">/</span><span class="kw2">ul</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">li</span>&gt;</span><br />
<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;active&quot;</span>&gt;</span><br />
&nbsp; &nbsp; &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>Item 2<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">a</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">ul</span>&gt;</span><br />
&nbsp; &nbsp; &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>SubItem 2.1<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; &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>SubItem 2.2<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; &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>SubItem 2.3<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; &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>SubItem 2.4<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="sy0">/</span><span class="kw2">ul</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">li</span>&gt;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">li</span>&gt;</span><br />
&nbsp; &nbsp; &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>Item 3<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">a</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">ul</span>&gt;</span><br />
&nbsp; &nbsp; &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>SubItem 3.1<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; &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>SubItem 3.2<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="sy0">/</span><span class="kw2">ul</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">li</span>&gt;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">li</span>&gt;</span><br />
&nbsp; &nbsp; &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>Item 4<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">a</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="kw2">ul</span>&gt;</span><br />
&nbsp; &nbsp; &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>SubItem 4.1<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; &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>SubItem 4.2<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="sy0">/</span><span class="kw2">ul</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&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>
        </div>
    </div>
</div>

<p>С разметкой всё просто: обычный двухуровневый список; предполагается, что меню Item2 активно (то есть должно быть развёрнуто).</p>
<p>Оформим аккордеон при помощи <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="p9187">
        <div class="code css" id="p91code87">
a <span class="br0">&#123;</span> <span class="kw1">text-decoration</span><span class="sy0">:</span> <span class="kw2">none</span><span class="sy0">;</span> <span class="kw1">color</span><span class="sy0">:</span> <span class="re0">#00F</span><span class="sy0">;</span> <span class="br0">&#125;</span><br />
a<span class="re2">:hover </span><span class="br0">&#123;</span> <span class="kw1">text-decoration</span><span class="sy0">:</span> <span class="kw2">underline</span><span class="sy0">;</span> <span class="br0">&#125;</span><br />
<span class="re0">#accordion</span> a <span class="br0">&#123;</span> <span class="kw1">outline</span><span class="sy0">:</span> <span class="nu0">0</span><span class="sy0">;</span> <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <br />
<span class="re0">#accordion</span><span class="sy0">,</span> <span class="re0">#accordion</span> ul<span class="sy0">,</span> <span class="re0">#accordion</span> 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">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">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">#accordion</span> <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="re0">#CCC</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">width</span><span class="sy0">:</span> <span class="re3">150px</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><br />
<br />
<span class="re0">#accordion</span> ul <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">margin-left</span><span class="sy0">:</span> <span class="re3">40px</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><br />
<br />
<span class="re0">#accordion</span> <span class="sy0">&gt;</span> li <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">border-bottom</span><span class="sy0">:</span> <span class="re3">1px</span> <span class="kw2">solid</span> <span class="re0">#CCC</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">padding</span><span class="sy0">:</span> <span class="re3">2px</span> <span class="re3">5px</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><br />
<br />
<span class="re0">#accordion</span> <span class="sy0">&gt;</span> li<span class="re2">:last-child </span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">border-bottom</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">#accordion</span> li<span class="re1">.active</span> <span class="sy0">&gt;</span> a <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>Покажем уродство <a href="http://blog.sjinks.pro/tag/ie6/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  IE6">IE6</a>, не понимающего CSS&nbsp;2.1:</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p9188">
        <div class="code css" id="p91code88">
<span class="sy0">*</span> html <span class="re0">#accordion</span> li <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">border-bottom</span><span class="sy0">:</span> <span class="re3">1px</span> <span class="kw2">solid</span> <span class="re0">#CCC</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">padding</span><span class="sy0">:</span> <span class="re3">2px</span> <span class="re3">5px</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><br />
<br />
<span class="sy0">*</span> html <span class="re0">#accordion</span> li li <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">border-bottom</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="sy0">*</span> html <span class="re0">#accordion</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">border-bottom</span><span class="sy0">:</span> <span class="nu0">0</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><br />
<br />
<span class="sy0">*</span> html <span class="re0">#accordion</span> li<span class="re1">.active</span> a <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><br />
<br />
<span class="sy0">*</span> html <span class="re0">#accordion</span> li<span class="re1">.active</span> ul a <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">color</span><span class="sy0">:</span> <span class="kw1">blue</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span>
        </div>
    </div>
</div>

<p>За использование пяти лишних правил я и не люблю IE6 (и это мы еще используем простую разметку).</p>
<p>Переходим к JavaScript. В данных примерах я использую библиотеки Prototype и <a href="http://blog.sjinks.pro/tag/scriptaculous/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  Scriptaculous">Scriptaculous</a> Effects (всё очень легко переводится на jQuery).<br />
<strong>Вариант 1: независимые элементы меню</strong></p>
          
<div class="codebox">
    <div class="the_code" style="" id="p9189">
        <div class="code javascript" id="p91code89">
$$<span class="br0">&#40;</span><span class="st0">'#accordion &gt; li:not([class=&quot;active&quot;]) ul'</span><span class="br0">&#41;</span>.<span class="me1">invoke</span><span class="br0">&#40;</span><span class="st0">'setStyle'</span><span class="sy0">,</span> <span class="br0">&#123;</span> display <span class="sy0">:</span> <span class="st0">'none'</span> <span class="br0">&#125;</span><span class="br0">&#41;</span>.<span class="me1">invoke</span><span class="br0">&#40;</span><span class="st0">'addClassName'</span><span class="sy0">,</span> <span class="st0">'collapsed'</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
$$<span class="br0">&#40;</span><span class="st0">'#accordion &gt; li[class=&quot;active&quot;] ul'</span><span class="br0">&#41;</span>.<span class="me1">invoke</span><span class="br0">&#40;</span><span class="st0">'addClassName'</span><span class="sy0">,</span> <span class="st0">'expanded'</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
$$<span class="br0">&#40;</span><span class="st0">'#accordion &gt; li &gt; a'</span><span class="br0">&#41;</span>.<span class="me1">invoke</span><span class="br0">&#40;</span><span class="st0">'observe'</span><span class="sy0">,</span> <span class="st0">'click'</span><span class="sy0">,</span> <br />
&nbsp; &nbsp; <span class="kw2">function</span><span class="br0">&#40;</span>e<span class="br0">&#41;</span><br />
&nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; e.<span class="kw3">stop</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> ul <span class="sy0">=</span> e.<span class="me1">findElement</span><span class="br0">&#40;</span><span class="st0">'a'</span><span class="br0">&#41;</span>.<span class="me1">up</span><span class="br0">&#40;</span><span class="st0">'li'</span><span class="br0">&#41;</span>.<span class="me1">down</span><span class="br0">&#40;</span><span class="st0">'ul'</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>ul<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">new</span> Effect.<span class="me1">toggle</span><span class="br0">&#40;</span>ul.<span class="me1">toggleClassName</span><span class="br0">&#40;</span><span class="st0">'collapsed'</span><span class="br0">&#41;</span>.<span class="me1">toggleClassName</span><span class="br0">&#40;</span><span class="st0">'expanded'</span><span class="br0">&#41;</span><span class="sy0">,</span> <span class="st0">'blind'</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
<span class="br0">&#41;</span><span class="sy0">;</span>
        </div>
    </div>
</div>

<p><a href="http://blog.sjinks.pro/test/accordion/accordion1.html">Рабочий пример для первого варианта.</a></p>
<p><strong>Вариант 2: развёрнуто не более одного меню</strong></p>
          
<div class="codebox">
    <div class="the_code" style="" id="p9190">
        <div class="code javascript" id="p91code90">
$$<span class="br0">&#40;</span><span class="st0">'#accordion &gt; li:not([class=&quot;active&quot;]) ul'</span><span class="br0">&#41;</span>.<span class="me1">invoke</span><span class="br0">&#40;</span><span class="st0">'setStyle'</span><span class="sy0">,</span> <span class="br0">&#123;</span> display <span class="sy0">:</span> <span class="st0">'none'</span> <span class="br0">&#125;</span><span class="br0">&#41;</span>.<span class="me1">invoke</span><span class="br0">&#40;</span><span class="st0">'addClassName'</span><span class="sy0">,</span> <span class="st0">'collapsed'</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
$$<span class="br0">&#40;</span><span class="st0">'#accordion &gt; li[class=&quot;active&quot;] ul'</span><span class="br0">&#41;</span>.<span class="me1">invoke</span><span class="br0">&#40;</span><span class="st0">'addClassName'</span><span class="sy0">,</span> <span class="st0">'expanded'</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
$$<span class="br0">&#40;</span><span class="st0">'#accordion &gt; li &gt; a'</span><span class="br0">&#41;</span>.<span class="me1">invoke</span><span class="br0">&#40;</span><span class="st0">'observe'</span><span class="sy0">,</span> <span class="st0">'click'</span><span class="sy0">,</span> <br />
&nbsp; &nbsp; <span class="kw2">function</span><span class="br0">&#40;</span>e<span class="br0">&#41;</span><br />
&nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; e.<span class="kw3">stop</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> ul <span class="sy0">=</span> e.<span class="me1">findElement</span><span class="br0">&#40;</span><span class="st0">'a'</span><span class="br0">&#41;</span>.<span class="me1">up</span><span class="br0">&#40;</span><span class="st0">'li'</span><span class="br0">&#41;</span>.<span class="me1">down</span><span class="br0">&#40;</span><span class="st0">'ul'</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>ul<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>ul.<span class="me1">hasClassName</span><span class="br0">&#40;</span><span class="st0">'collapsed'</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> c <span class="sy0">=</span> $$<span class="br0">&#40;</span><span class="st0">'#accordion ul:not([class=&quot;collapsed&quot;])'</span><span class="br0">&#41;</span><span class="br0">&#91;</span>0<span class="br0">&#93;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>c<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">new</span> Effect.<span class="me1">BlindUp</span><span class="br0">&#40;</span>c.<span class="me1">toggleClassName</span><span class="br0">&#40;</span><span class="st0">'collapsed'</span><span class="br0">&#41;</span>.<span class="me1">toggleClassName</span><span class="br0">&#40;</span><span class="st0">'expanded'</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">new</span> Effect.<span class="me1">BlindDown</span><span class="br0">&#40;</span>ul.<span class="me1">toggleClassName</span><span class="br0">&#40;</span><span class="st0">'collapsed'</span><span class="br0">&#41;</span>.<span class="me1">toggleClassName</span><span class="br0">&#40;</span><span class="st0">'expanded'</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
<span class="br0">&#41;</span><span class="sy0">;</span>
        </div>
    </div>
</div>

<p><a href="http://blog.sjinks.pro/test/accordion/accordion2.html">Рабочий пример для второго варианта.</a></p>
<p>Всё очень просто!</p>
<p>© 2012 <a href="http://blog.sjinks.pro">Ars Longa, Vita Brevis</a>. Все права защищены. Перепубликация материалов без разрешения автора запрещена.</p>
<p>При использовании материалов блога наличие активной не закрытой от индексирования ссылки на <a href="http://blog.sjinks.pro/javascript/91-couple-of-accordions/">источник</a> обязательно.</p>]]></content:encoded>
			<wfw:commentRss>http://blog.sjinks.pro/javascript/91-couple-of-accordions/feed/</wfw:commentRss>
		<slash:comments>22</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="p59101">
        <div class="code css" id="p59code101">
<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="p59102">
        <div class="code css" id="p59code102">
<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="p59103">
        <div class="code xhtml" id="p59code103">
<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="p59104">
        <div class="code css" id="p59code104">
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="p59105">
        <div class="code xhtml" id="p59code105">
<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> работать для IE8, и это сделано специально: во-первых, IE8 поддерживает <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="p59106">
        <div class="code css" id="p59code106">
<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="p59107">
        <div class="code css" id="p59code107">
<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="p59108">
        <div class="code xhtml" id="p59code108">
<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="p59109">
        <div class="code css" id="p59code109">
<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="p59110">
        <div class="code xhtml" id="p59code110">
<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-хаков для различных браузеров</title>
		<link>http://blog.sjinks.pro/css/55-css-hacks-and-filters-for-different-browsers/</link>
		<comments>http://blog.sjinks.pro/css/55-css-hacks-and-filters-for-different-browsers/#comments</comments>
		<pubDate>Mon, 24 Mar 2008 21:50:52 +0000</pubDate>
		<dc:creator>Vladimir</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[хак]]></category>

		<guid isPermaLink="false">http://blog.sjinks.pro/css/55-css-hacks-and-filters-for-different-browsers/</guid>
		<description><![CDATA[Тонкая настройка CSS в различных браузерах В Internet есть много статей, посвященных вопросу "to hack or not to hack". Я не хочу обсуждать этот "извечный вопрос", только замечу: что бы там ни говорили противники хаков, хаки весьма и весьма популярны (к счастью или сожалению). Я решил сделать небольшую подборку CSS-хаков для различных браузеров. По сути [...]<p>© 2012 <a href="http://blog.sjinks.pro">Ars Longa, Vita Brevis</a>. Все права защищены. Перепубликация материалов без разрешения автора запрещена.</p>
<p>При использовании материалов блога наличие активной не закрытой от индексирования ссылки на <a href="http://blog.sjinks.pro/css/55-css-hacks-and-filters-for-different-browsers/">источник</a> обязательно.</p>]]></description>
			<content:encoded><![CDATA[<h2><em>Тонкая настройка <a href="http://blog.sjinks.pro/tag/css/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  CSS">CSS</a> в различных браузерах</em></h2>
<p>В Internet есть много статей, посвященных вопросу "to hack or not to hack". Я не хочу обсуждать этот "извечный вопрос", только замечу: что бы там ни говорили противники хаков, хаки весьма и весьма популярны (к счастью или сожалению). Я решил сделать небольшую подборку CSS-хаков для различных браузеров. По сути дела, эта статья является компиляцией очень многих источников.<span id="more-55"></span></p>
<h2>CSS-хаки для Gecko</h2>
<p><dfn>Gecko</dfn> &mdash; движок для отображения web-страниц, используемый в браузерах на основе Mozilla: <a href="http://blog.sjinks.pro/tag/firefox/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  FireFox">Firefox</a>, Netscape, SeaMonkey, Flock, Songbird, Beonex, K-Meleon, Camino, Galeon, Epiphany, Kazehakase, Skipstone.</p>
<ul>
<li><strong>Gecko 0.6:</strong> Netscape&nbsp;6.0;</li>
<li><strong>Gecko 0.9.4:</strong> Netscape&nbsp;6.2;</li>
<li><strong>Gecko 0.9.7:</strong> Galeon&nbsp;1.0.2;</li>
<li><strong>Gecko 1.0.1:</strong> Netscape&nbsp;7.0, Beonex&nbsp;0.8.2;</li>
<li><strong>Gecko 1.1:</strong> Skipstone&nbsp;0.8.3;</li>
<li><strong>Gecko 1.2b:</strong> FireFox&nbsp;0.1;</li>
<li><strong>Gecko 1.4.1:</strong> Epiphany&nbsp;1.0.4</li>
<li><strong>Gecko 1.5:</strong> K-Meleon&nbsp;0.8.2;</li>
<li><strong>Gecko 1.7.5:</strong> Netscape&nbsp;8, Galeon&nbsp;2.0, Kazehakase&nbsp;0.2.8;</li>
<li><strong>Gecko 1.7.13:</strong> FireFox&nbsp;1.0.8;</li>
<li><strong>Gecko 1.8.0:</strong> FireFox&nbsp;1.5, SeaMonkey&nbsp;1.0, Flock&nbsp;0.7, Songbird&nbsp;0.2, K-Meleon&nbsp;1.02, Camino&nbsp;1.0;</li>
<li><strong>Gecko 1.8.1:</strong> FireFox&nbsp;2.0, Netscape&nbsp;9, SeaMonkey&nbsp;1.1, Flock&nbsp;1.0, K-Meleon&nbsp;1.1, Camino&nbsp;1.5.5, Epiphany&nbsp;2.16, Skipstone&nbsp;1.0.0;</li>
<li><strong>Gecko 1.9b:</strong> FireFox&nbsp;3.0b, SeaMonkey&nbsp;2.0, Songbird&nbsp;0.3.</li>
</ul>
<h3>Правила, которые понимает только Gecko/Netscape 4</h3>
<h4>Netscape 4</h4>
<p>Данный <a href="http://blog.sjinks.pro/tag/hack/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  хак">хак</a> известен как "<dfn>Caio hack</dfn>" (в честь Caio Chassot, его обнаружевшего).<br />
<span class="red">Срабатывает в Opera 5 (Win и Mac)</span></p>
          
<div class="codebox">
    <div class="the_code" style="" id="p55150">
        <div class="code css" id="p55code150">
<span class="coMULTI">/*/*/</span> <span class="coMULTI">/*/<br />
something {}<br />
/**/</span>
        </div>
    </div>
</div>

<h4>Старые Gecko, точные версии неизвестны (работает для OmniWeb 5)</h4>
<p><em>Есть подозрение, что работает только в Gecko 1.2</em></p>
          
<div class="codebox">
    <div class="the_code" style="" id="p55151">
        <div class="code css" id="p55code151">
html<span class="sy0">*</span><span class="re0">#id</span><span class="sy0">:</span>not<span class="br0">&#40;</span><span class="br0">&#91;</span>lang<span class="sy0">*=</span><span class="st0">&quot;&quot;</span><span class="br0">&#93;</span><span class="br0">&#41;</span> something <span class="br0">&#123;</span><span class="br0">&#125;</span>
        </div>
    </div>
</div>

<h4>Старые Gecko, точные версии неизвестны (<strong>не</strong> работает для OmniWeb 5)</h4>
<p><em>Есть подозрение, что работает только в Gecko 1.2</em><br />
<strong class="red">Не валидирующийся CSS</strong></p>
          
<div class="codebox">
    <div class="the_code" style="" id="p55152">
        <div class="code css" id="p55code152">
html<span class="sy0">:</span>not<span class="br0">&#40;</span><span class="br0">&#91;</span>lang<span class="sy0">*=</span><span class="st0">&quot;&quot;</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="sy0">*</span><span class="re0">#id</span> something <span class="br0">&#123;</span><span class="br0">&#125;</span>
        </div>
    </div>
</div>

<h4>Gecko 1.0+</h4>
          
<div class="codebox">
    <div class="the_code" style="" id="p55153">
        <div class="code css" id="p55code153">
html<span class="sy0">:</span>not<span class="br0">&#40;</span><span class="br0">&#91;</span>xmlns<span class="sy0">*=</span><span class="st0">&quot;&quot;</span><span class="br0">&#93;</span><span class="br0">&#41;</span> something <span class="br0">&#123;</span><span class="br0">&#125;</span>
        </div>
    </div>
</div>

<h4>Gecko 1.0-1.8 включительно</h4>
<p>Данный хак основан на том, что значения атрибутов <code>id</code> и <code>class</code> не чувствительны к регистру для этих версий Gecko.</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p55154">
        <div class="code css" id="p55code154">
html<span class="sy0">:</span>not<span class="br0">&#40;</span><span class="br0">&#91;</span>xmlns<span class="sy0">*=</span><span class="st0">&quot;&quot;</span><span class="br0">&#93;</span><span class="br0">&#41;</span> <span class="re0">#id</span><span class="br0">&#91;</span>id<span class="sy0">=</span><span class="st0">&quot;ID&quot;</span><span class="br0">&#93;</span> something<span class="sy0">,</span><br />
html<span class="sy0">:</span>not<span class="br0">&#40;</span><span class="br0">&#91;</span>xmlns<span class="sy0">*=</span><span class="st0">&quot;&quot;</span><span class="br0">&#93;</span><span class="br0">&#41;</span> .class<span class="br0">&#91;</span>class<span class="sy0">=</span><span class="st0">&quot;CLASS&quot;</span><span class="br0">&#93;</span> something <span class="br0">&#123;</span><span class="br0">&#125;</span>
        </div>
    </div>
</div>

<h4>Gecko 1.8+</h4>
          
<div class="codebox">
    <div class="the_code" style="" id="p55155">
        <div class="code css" id="p55code155">
html<span class="sy0">:</span>not<span class="br0">&#40;</span><span class="br0">&#91;</span>xmlns<span class="sy0">*=</span><span class="st0">&quot;&quot;</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="sy0">:</span>not<span class="br0">&#40;</span><span class="re2">:only-</span>child<span class="br0">&#41;</span> something <span class="br0">&#123;</span><span class="br0">&#125;</span>
        </div>
    </div>
</div>

<h4>Gecko 1.9</h4>
<p>Gecko 1.9 чувствителен к регистру для значений атрибутов <code>id</code> и <code>class</code> (что согласуется со спецификацией CSS).</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p55156">
        <div class="code css" id="p55code156">
html<span class="sy0">:</span>not<span class="br0">&#40;</span><span class="br0">&#91;</span>xmlns<span class="sy0">*=</span><span class="st0">&quot;&quot;</span><span class="br0">&#93;</span><span class="br0">&#41;</span> <span class="re0">#id</span><span class="sy0">:</span>not<span class="br0">&#40;</span><span class="br0">&#91;</span>id<span class="sy0">=</span><span class="st0">&quot;ID&quot;</span><span class="br0">&#93;</span><span class="br0">&#41;</span> something<span class="sy0">,</span><br />
html<span class="sy0">:</span>not<span class="br0">&#40;</span><span class="br0">&#91;</span>xmlns<span class="sy0">*=</span><span class="st0">&quot;&quot;</span><span class="br0">&#93;</span><span class="br0">&#41;</span> <span class="re1">.class</span><span class="sy0">:</span>not<span class="br0">&#40;</span><span class="br0">&#91;</span>class<span class="sy0">=</span><span class="st0">&quot;CLASS&quot;</span><span class="br0">&#93;</span><span class="br0">&#41;</span> something <span class="br0">&#123;</span><span class="br0">&#125;</span>
        </div>
    </div>
</div>

<h3>Фильтры для Gecko</h3>
<h4>Старые Gecko (1.0?), включая OmniWeb 5</h4>
          
<div class="codebox">
    <div class="the_code" style="" id="p55157">
        <div class="code css" id="p55code157">
html<span class="sy0">:</span><span class="coMULTI">/* */</span>not<span class="br0">&#40;</span><span class="br0">&#91;</span>xmlns<span class="sy0">*=</span><span class="st0">&quot;&quot;</span><span class="br0">&#93;</span><span class="br0">&#41;</span> something <span class="br0">&#123;</span><span class="br0">&#125;</span>
        </div>
    </div>
</div>

<h4>OmniWeb 4 и Netscape 4</h4>
          
<div class="codebox">
    <div class="the_code" style="" id="p55158">
        <div class="code html" id="p55code158">
<span class="sc2">&lt;<span class="kw2">link</span> <span class="kw3">rel</span><span class="sy0">=</span><span class="st0">&quot;stylesheet&quot;</span> <span class="kw3">href</span><span class="sy0">=</span><span class="st0">&quot;style.css&quot;</span> <span class="kw3">media</span><span class="sy0">=</span><span class="st0">&quot;All&quot;</span>&gt;</span> <span class="sc-2">&lt;!-- All с заглавной A --&gt;</span>
        </div>
    </div>
</div>

<h4>Netscape 4:</h4>
<p>Netscape 4 понимает только <code>media="screen"</code>, другие значения (или их комбинацию с <code>screen</code>) Netscape 4 понимать отказывается.</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p55159">
        <div class="code html" id="p55code159">
<span class="sc2">&lt;<span class="kw2">link</span> <span class="kw3">rel</span><span class="sy0">=</span><span class="st0">&quot;stylesheet&quot;</span> <span class="kw3">href</span><span class="sy0">=</span><span class="st0">&quot;style.css&quot;</span> <span class="kw3">media</span><span class="sy0">=</span><span class="st0">&quot;all&quot;</span>&gt;</span>
        </div>
    </div>
</div>

<p>Netscape 4 принципиально не поддерживает <code>@import</code>:</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p55160">
        <div class="code css" id="p55code160">
<span class="co1">@import url(style.css);</span>
        </div>
    </div>
</div>

          
<div class="codebox">
    <div class="the_code" style="" id="p55161">
        <div class="code css" id="p55code161">
element<span class="re0">#id</span> <span class="br0">&#123;</span><span class="br0">&#125;</span>
        </div>
    </div>
</div>

<h4>Netscape 4 <span class="red">(и IE8 beta1)</span></h4>
          
<div class="codebox">
    <div class="the_code" style="" id="p55162">
        <div class="code css" id="p55code162">
<span class="coMULTI">/*/*/</span><br />
something <span class="br0">&#123;</span><span class="br0">&#125;</span><br />
<span class="coMULTI">/**/</span>
        </div>
    </div>
</div>

<h2>CSS-хаки для Trident</h2>
<p><dfn>Trident</dfn>&nbsp;&mdash;&nbsp;движок, используемый Internet Explorer for Windows, начиная с IE4.</p>
<ul>
<li><strong>Trident:</strong> IE4;</li>
<li><strong>Trident II:</strong> IE5;</li>
<li><strong>Trident III:</strong> IE5.5;</li>
<li><strong>Trident IV:</strong> <a href="http://blog.sjinks.pro/tag/ie6/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  IE6">IE6</a>;</li>
<li><strong>Trident V:</strong> <a href="http://blog.sjinks.pro/tag/ie7/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  IE7">IE7</a>;</li>
<li><strong>Trident VI:</strong> IE8.</li>
</ul>
<h3>Правила, которые понимает только Trident</h3>
<h4>Trident I-II (IE4-5)</h4>
<p><span class="red">Также затрагивает IE5/Mac</span></p>
          
<div class="codebox">
    <div class="the_code" style="" id="p55163">
        <div class="code css" id="p55code163">
<span class="sy0">*</span> <span class="sy0">&gt;</span> html something <span class="br0">&#123;</span><span class="br0">&#125;</span>
        </div>
    </div>
</div>

<h4>Trident I-IV (IE4-6)</h4>
          
<div class="codebox">
    <div class="the_code" style="" id="p55164">
        <div class="code css" id="p55code164">
<span class="coMULTI">/*\*/</span><br />
<span class="sy0">*</span> html something <span class="br0">&#123;</span><span class="br0">&#125;</span><br />
<span class="coMULTI">/**/</span>
        </div>
    </div>
</div>

<p>Так получилось, что <code>* <a href="http://blog.sjinks.pro/tag/html/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  HTML">html</a></code> понимает и IE/Mac, поэтому когда нужно спрятать правило от IE/Mac, приходится использовать <code>/*\*/ ... /**/</code>. В случае, когда правило нужно применить ко всем IE, младше седьмого, можно просто использовать <code>* html</code>.</p>
<p>Есть альтернативный способ (<span class="red">не валидирующийся CSS</span>; по непроверенным данным, <span class="red">затрагивает IE4-5/Mac</span>):</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p55165">
        <div class="code css" id="p55code165">
something <span class="br0">&#123;</span><br />
&nbsp; &nbsp; _property<span class="sy0">:</span> value<span class="sy0">;</span><br />
<span class="br0">&#125;</span>
        </div>
    </div>
</div>

<h4>Trident II-V (IE5-7)</h4>
<p><em class="red">Не валидирующийся CSS</em></p>
          
<div class="codebox">
    <div class="the_code" style="" id="p55166">
        <div class="code css" id="p55code166">
something <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="sy0">*</span>property<span class="sy0">:</span> value<span class="sy0">;</span><br />
<span class="br0">&#125;</span>
        </div>
    </div>
</div>

<h4>Trident II (IE5)</h4>
<p>В народе носит название "<dfn>IE5/Win Bandpass Filter</dfn>"</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p55167">
        <div class="code css" id="p55code167">
<span class="co1">@media tty {</span><br />
&nbsp; &nbsp; i <span class="br0">&#123;</span> <span class="kw1">content</span><span class="sy0">:</span> <span class="st0">&quot;<span class="es0">\&quot;</span>;/*&quot;</span> <span class="st0">&quot;*/}}; @import 'ie5.css'; {}{;}/*&quot;</span><span class="sy0">;</span><span class="br0">&#125;</span><br />
<span class="br0">&#125;</span><span class="coMULTI">/**/</span>
        </div>
    </div>
</div>

<h4>Trident III (IE5.5)</h4>
<p>В народе носит название "IE5.5 Bandpass Filter"</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p55168">
        <div class="code css" id="p55code168">
<span class="co1">@media tty {</span><br />
&nbsp; &nbsp; i <span class="br0">&#123;</span><span class="kw1">content</span><span class="sy0">:</span> <span class="st0">&quot;<span class="es0">\&quot;</span>;/*&quot;</span> <span class="st0">&quot;*/}}@m; @import 'ie55.css'; /*&quot;</span><span class="sy0">;</span><span class="br0">&#125;</span><br />
<span class="br0">&#125;</span><span class="coMULTI">/**/</span>
        </div>
    </div>
</div>

<h4>Trident II/III (IE5.x)</h4>
<p>В народе носит название "Mid Pass Filter"</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p55169">
        <div class="code css" id="p55code169">
<span class="co1">@media tty {</span><br />
&nbsp; &nbsp; i <span class="br0">&#123;</span><span class="kw1">content</span><span class="sy0">:</span> <span class="st0">&quot;<span class="es0">\&quot;</span>;/*&quot;</span> <span class="st0">&quot;*/}} @import 'ie5x.css' /*&quot;</span><span class="sy0">;</span><span class="br0">&#125;</span><br />
<span class="br0">&#125;</span><span class="coMULTI">/**/</span>
        </div>
    </div>
</div>

<h4>Trident IV (IE6)</h4>
          
<div class="codebox">
    <div class="the_code" style="" id="p55170">
        <div class="code css" id="p55code170">
&nbsp;
        </div>
    </div>
</div>

<h4>Trident V (IE7)</h4>
          
<div class="codebox">
    <div class="the_code" style="" id="p55171">
        <div class="code css" id="p55code171">
<span class="sy0">*+</span>html<span class="coMULTI">/*/* /**/</span> body something <span class="br0">&#123;</span><span class="br0">&#125;</span>
        </div>
    </div>
</div>

<h4>Trident VI (IE8)</h4>
          
<div class="codebox">
    <div class="the_code" style="" id="p55172">
        <div class="code css" id="p55code172">
<span class="sy0">*</span><span class="re2">:first-</span>child<span class="sy0">+</span><span class="coMULTI">/**/</span>html something <span class="br0">&#123;</span><span class="br0">&#125;</span><br />
<br />
<span class="coMULTI">/*/ something {} /**/</span><br />
<br />
head<span class="coMULTI">/*/+body/**/</span> something <span class="br0">&#123;</span><span class="br0">&#125;</span>
        </div>
    </div>
</div>

<h4>Trident V-VI (IE7-8)</h4>
          
<div class="codebox">
    <div class="the_code" style="" id="p55173">
        <div class="code css" id="p55code173">
<span class="sy0">*</span><span class="re2">:first-child</span><span class="sy0">+</span>html something <span class="br0">&#123;</span><span class="br0">&#125;</span><br />
<br />
something.class<span class="br0">&#91;</span>className<span class="sy0">=</span><span class="st0">&quot;class&quot;</span><span class="br0">&#93;</span> <span class="br0">&#123;</span><span class="br0">&#125;</span>
        </div>
    </div>
</div>

<h3>Фильтры для Trident</h3>
<h4>Trident (IE4)</h4>
<p><span class="red">Также затрагивает IE4/Mac и Netscape 4</span></p>
          
<div class="codebox">
    <div class="the_code" style="" id="p55174">
        <div class="code css" id="p55code174">
<span class="co1">@import &quot;styles.css&quot;</span>
        </div>
    </div>
</div>

<h4>Trident I-III (IE4-5.5)</h4>
<p><span class="red">Также затрагивает Netscape 4</span></p>
          
<div class="codebox">
    <div class="the_code" style="" id="p55175">
        <div class="code css" id="p55code175">
something <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">voice-family</span><span class="sy0">:</span> <span class="st0">&quot;<span class="es0">\&quot;</span>}<span class="es0">\&quot;</span>&quot;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">voice-family</span><span class="sy0">:</span> <span class="kw2">inherit</span><span class="sy0">;</span><br />
&nbsp; &nbsp; property<span class="sy0">:</span> value<span class="sy0">;</span><br />
<span class="br0">&#125;</span>
        </div>
    </div>
</div>

<h4>Trident V-VI (IE7-8)</h4>
          
<div class="codebox">
    <div class="the_code" style="" id="p55176">
        <div class="code css" id="p55code176">
something<span class="re1">.class</span><span class="sy0">:</span>not<span class="br0">&#40;</span><span class="br0">&#91;</span>className<span class="sy0">=</span><span class="st0">&quot;class&quot;</span><span class="br0">&#93;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><span class="br0">&#125;</span>
        </div>
    </div>
</div>

<h4>Trident VI (IE8)</h4>
          
<div class="codebox">
    <div class="the_code" style="" id="p55177">
        <div class="code css" id="p55code177">
html<span class="coMULTI">/*/* /**/</span> body something <span class="br0">&#123;</span><span class="br0">&#125;</span>
        </div>
    </div>
</div>

<h2>CSS-хаки для Tasman</h2>
<p><dfn>Tasman</dfn> &mdash; движок для IE/Mac. Microsoft больше не поддерживает IE/Mac, поэтому данный браузер можно считать мёртвым.</p>
<h3>Правила, которые понимает только Tasman</h3>
<h4>IE5</h4>
<p>Известен в народе как "IE5 Mac Bandpass Filter".</p>
          
<div class="codebox">
    <div class="the_code" style="" id="p55178">
        <div class="code css" id="p55code178">
<span class="coMULTI">/*\*/</span><span class="coMULTI">/*/<br />
something {}<br />
/**/</span>
        </div>
    </div>
</div>

<p>По последним сведениям, <span class="red">хак срабатывает в IE8 beta1</span>.</p>
<h3>Фильтры для Tasman</h3>
<h4>IE4</h4>
<p><span class="red">Также затрагивает IE4/Win и Netscape 4</span></p>
          
<div class="codebox">
    <div class="the_code" style="" id="p55179">
        <div class="code css" id="p55code179">
<span class="co1">@import &quot;styles.css&quot;</span>
        </div>
    </div>
</div>

<h4>IE5</h4>
          
<div class="codebox">
    <div class="the_code" style="" id="p55180">
        <div class="code css" id="p55code180">
<span class="coMULTI">/*\*/</span><br />
something <span class="br0">&#123;</span><span class="br0">&#125;</span><br />
<span class="coMULTI">/**/</span>
        </div>
    </div>
</div>

<h2>CSS-хаки для Presto</h2>
<p><dfn>Presto</dfn> &mdash; движок, используемый в Opera 7+.</p>
<h3>Opera 7.5-9.2x</h3>
          
<div class="codebox">
    <div class="the_code" style="" id="p55181">
        <div class="code css" id="p55code181">
<span class="co1">@media all and (min-width:0px) {</span><br />
&nbsp; &nbsp; html<span class="sy0">:</span>lang<span class="br0">&#40;</span>e<span class="br0">&#41;</span> something <span class="br0">&#123;</span><span class="br0">&#125;</span><br />
<span class="br0">&#125;</span>
        </div>
    </div>
</div>

<h3>Opera 9-9.2x</h3>
          
<div class="codebox">
    <div class="the_code" style="" id="p55182">
        <div class="code css" id="p55code182">
<span class="co1">@media all and (min-width:0px) {</span><br />
&nbsp; &nbsp; html<span class="sy0">:</span>lang<span class="br0">&#40;</span>e<span class="br0">&#41;</span> head~body something <span class="br0">&#123;</span><span class="br0">&#125;</span><br />
<span class="br0">&#125;</span>
        </div>
    </div>
</div>

<h3>Opera 9</h3>
          
<div class="codebox">
    <div class="the_code" style="" id="p55183">
        <div class="code css" id="p55code183">
html<span class="re2">:first-child </span>something <span class="br0">&#123;</span><span class="br0">&#125;</span>
        </div>
    </div>
</div>

<h3>Opera 9+</h3>
          
<div class="codebox">
    <div class="the_code" style="" id="p55184">
        <div class="code css" id="p55code184">
<span class="co1">@media all and (min-width:0px) {</span><br />
&nbsp; &nbsp; head~body<span class="sy0">:</span>lang<span class="br0">&#40;</span>en<span class="br0">&#41;</span> something <span class="br0">&#123;</span><span class="br0">&#125;</span><br />
<span class="br0">&#125;</span>
        </div>
    </div>
</div>

<h3>Opera 9.5+</h3>
          
<div class="codebox">
    <div class="the_code" style="" id="p55185">
        <div class="code css" id="p55code185">
<span class="co1">@media all and (min-width:0px) {</span><br />
&nbsp; &nbsp; <span class="re2">:root </span>head~body<span class="sy0">:</span>lang<span class="br0">&#40;</span>en<span class="br0">&#41;</span> something <span class="br0">&#123;</span><span class="br0">&#125;</span><br />
<span class="br0">&#125;</span><br />
<br />
<span class="co1">@media all and (min-width:0px) {</span><br />
&nbsp; &nbsp; head~body<span class="re2">:last-child </span>something <span class="br0">&#123;</span><span class="br0">&#125;</span><br />
<span class="br0">&#125;</span>
        </div>
    </div>
</div>

<h2>Safari, <a href="http://blog.sjinks.pro/tag/webkit/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  WebKit">WebKit</a>, Shiira и OmniWeb</h2>
<h3>Safari 2-, KHTML, Shiira 1.22, Shiira 2 и OmniWeb 5/5.5</h3>
          
<div class="codebox">
    <div class="the_code" style="" id="p55186">
        <div class="code css" id="p55code186">
html<span class="br0">&#91;</span>xmlns<span class="sy0">*=</span><span class="st0">&quot;&quot;</span><span class="br0">&#93;</span> body<span class="re2">:last-child </span>something <span class="br0">&#123;</span><span class="br0">&#125;</span><br />
<br />
body<span class="re2">:last-child</span><span class="sy0">:</span>not<span class="br0">&#40;</span><span class="re2">:root</span><span class="sy0">:</span>root<span class="br0">&#41;</span> something <span class="br0">&#123;</span><span class="br0">&#125;</span>
        </div>
    </div>
</div>

<h3>Safari 3</h3>
          
<div class="codebox">
    <div class="the_code" style="" id="p55187">
        <div class="code css" id="p55code187">
body<span class="re2">:first-of-type </span>something <span class="br0">&#123;</span><span class="br0">&#125;</span>
        </div>
    </div>
</div>

<h3>WebKit</h3>
          
<div class="codebox">
    <div class="the_code" style="" id="p55188">
        <div class="code css" id="p55code188">
<span class="co1">@media all and (min-width: 0px) {</span><br />
&nbsp; &nbsp; body<span class="sy0">:</span>not<span class="br0">&#40;</span><span class="re2">:root</span><span class="sy0">:</span>root<span class="br0">&#41;</span> something <span class="br0">&#123;</span><span class="br0">&#125;</span><br />
<span class="br0">&#125;</span>
        </div>
    </div>
</div>

<h2>Список источников:</h2>
<ol>
<li><a href="http://centricle.com/ref/css/filters/">centricle : css filters (css hacks): Will the browser apply the rule(s)?</a></li>
<li><a href="http://www.dynamicsitesolutions.com/css/filters/support-chart/">Chart of Support for CSS Filters/Hacks</a></li>
<li><a href="http://thomas.tanreisoftware.com/?p=11">CSS hack series</a></li>
<li><a href="http://www.webdevout.net/css-hacks">CSS Hacks</a></li>
<li><a href="http://css-class.com/test/">CSS Test</a></li>
<li><a href="http://css-discuss.incutio.com/?page=CssHack">css-discuss - CssHack</a></li>
</ol>
<h2>Поддержка CSS-селекторов различными браузерами</h2>
<p><a href="http://en.wikipedia.org/wiki/Comparison_of_layout_engines_(CSS)">Оригинальная версия</a></p>
<table cellpadding="2" cellspacing="1" class="bordered wikitable">
<thead>
<tr>
<th>&nbsp;</th>
<th>Trident</th>
<th>Tasman</th>
<th>Gecko</th>
<th>WebKit</th>
<th>KHTML</th>
<th>Presto</th>
<th>iCab</th>
</tr>
</thead>
<tbody>
<tr>
<th><code>*</code></th>
<td class="table-yes"><a href="http://en.wikipedia.org/wiki/Comparison_of_layout_engines_%28CSS%29#trident_universal">7.0</a></td>
<td class="table-yes">0</td>
<td class="table-yes">1.0</td>
<td class="table-yes">85</td>
<td class="table-yes">Yes</td>
<td class="table-yes">7.0</td>
<td class="table-yes">3.0</td>
</tr>
<tr>
<th><code>E</code></th>
<td class="table-yes">4.0</td>
<td class="table-yes">0</td>
<td class="table-yes">1.0</td>
<td class="table-yes">85</td>
<td class="table-yes">Yes</td>
<td class="table-yes">7.0</td>
<td class="table-yes">Yes</td>
</tr>
<tr>
<th><code>E.class</code></th>
<td class="table-yes"><a href="http://en.wikipedia.org/wiki/Comparison_of_layout_engines_%28CSS%29#trident_class">7.0</a></td>
<td class="table-partial"><a href="http://en.wikipedia.org/wiki/Comparison_of_layout_engines_%28CSS%29#tasman_class">Buggy</a></td>
<td class="table-yes">1.0</td>
<td class="table-yes">85</td>
<td class="table-yes">Yes</td>
<td class="table-yes">7.0</td>
<td class="table-yes">Yes</td>
</tr>
<tr>
<th><code>E#id</code></th>
<td class="table-yes">4.0</td>
<td class="table-yes">0</td>
<td class="table-yes">1.0</td>
<td class="table-yes">85</td>
<td class="table-yes">Yes</td>
<td class="table-yes">7.0</td>
<td class="table-yes">Yes</td>
</tr>
<tr>
<th><code>ns|E</code></th>
<td class="table-no">No</td>
<td class="table-no">No</td>
<td class="table-yes">1.0</td>
<td class="table-no">No</td>
<td class="table-yes">Yes</td>
<td class="table-yes">8.0</td>
<td class="table-no">No</td>
</tr>
<tr>
<th><code>E F</code></th>
<td class="table-yes">4.0</td>
<td class="table-yes">0</td>
<td class="table-yes">1.0</td>
<td class="table-yes">85</td>
<td class="table-yes">Yes</td>
<td class="table-yes">7.0</td>
<td class="table-yes">Yes</td>
</tr>
<tr>
<th><code>E &gt; F</code></th>
<td class="table-yes">7.0</td>
<td class="table-yes">0</td>
<td class="table-yes">1.0</td>
<td class="table-yes">85</td>
<td class="table-yes">Yes</td>
<td class="table-yes">7.0</td>
<td class="table-yes">3.0</td>
</tr>
<tr>
<th><code>E + F</code></th>
<td class="table-yes">7.0</td>
<td class="table-yes">0</td>
<td class="table-yes">1.0</td>
<td class="table-yes">85</td>
<td class="table-yes">Yes</td>
<td class="table-yes">7.0</td>
<td class="table-yes">3.0</td>
</tr>
<tr>
<th><code>E ~ F</code></th>
<td class="table-yes">7.0</td>
<td class="table-yes">0.9</td>
<td class="table-yes">1.7</td>
<td class="table-yes">412</td>
<td class="table-yes">3.3.2</td>
<td class="table-yes">9.0</td>
<td class="table-yes">3.0</td>
</tr>
<tr>
<th><code>E[attr]</code></th>
<td class="table-yes">7.0</td>
<td class="table-yes">0.9</td>
<td class="table-yes">1.0</td>
<td class="table-yes">85</td>
<td class="table-yes">Yes</td>
<td class="table-yes">7.0</td>
<td class="table-yes">3.0</td>
</tr>
<tr>
<th><code>E[attr="value"]</code></th>
<td class="table-yes">7.0</td>
<td class="table-yes">0.9</td>
<td class="table-yes">1.0</td>
<td class="table-yes">Yes</td>
<td class="table-yes">Yes</td>
<td class="table-yes">7.0</td>
<td class="table-yes">3.0</td>
</tr>
<tr>
<th><code>E[attr~="value"]</code></th>
<td class="table-yes">7.0</td>
<td class="table-yes">0.9</td>
<td class="table-yes">1.0</td>
<td class="table-yes">Yes</td>
<td class="table-yes">Yes</td>
<td class="table-yes">7.0</td>
<td class="table-yes">3.0</td>
</tr>
<tr>
<th><code>E[attr|="value"]</code></th>
<td class="table-yes">7.0</td>
<td class="table-yes">0.9</td>
<td class="table-yes">1.0</td>
<td class="table-yes">Yes</td>
<td class="table-yes">Yes</td>
<td class="table-yes">7.0</td>
<td class="table-yes">3.0</td>
</tr>
<tr>
<th><code>E[attr^="value"]</code></th>
<td class="table-yes">7.0</td>
<td class="table-no">No</td>
<td class="table-yes">1.0</td>
<td class="table-yes">Yes</td>
<td class="table-yes">3.4</td>
<td class="table-yes">8.02</td>
<td class="table-yes">3.0</td>
</tr>
<tr>
<th><code>E[attr$="value"]</code></th>
<td class="table-yes">7.0</td>
<td class="table-no">No</td>
<td class="table-yes">1.0</td>
<td class="table-yes">Yes</td>
<td class="table-yes">3.4</td>
<td class="table-yes">9.0</td>
<td class="table-yes">3.0</td>
</tr>
<tr>
<th><code>E[attr*="value"]</code></th>
<td class="table-yes">7.0</td>
<td class="table-no">No</td>
<td class="table-yes">1.0</td>
<td class="table-yes">Yes</td>
<td class="table-yes">3.4</td>
<td class="table-yes">9.0</td>
<td class="table-yes">3.0</td>
</tr>
<tr>
<th><code>E[ns|attr]</code></th>
<td class="table-no">No</td>
<td class="table-no">No</td>
<td class="table-yes">1.0</td>
<td class="table-no">No</td>
<td class="table-yes">3.4</td>
<td class="table-yes">9.0</td>
<td class="table-no">No</td>
</tr>
<tr>
<th><code>E:link</code></th>
<td class="table-yes">3.0</td>
<td class="table-yes">0</td>
<td class="table-yes">1.0</td>
<td class="table-yes">85</td>
<td class="table-yes">Yes</td>
<td class="table-yes">7.0</td>
<td class="table-yes">Yes</td>
</tr>
<tr>
<th><code>E:visited</code></th>
<td class="table-yes">3.0</td>
<td class="table-yes">0</td>
<td class="table-yes">1.0</td>
<td class="table-yes">85</td>
<td class="table-yes">Yes</td>
<td class="table-yes">7.0</td>
<td class="table-yes">Yes</td>
</tr>
<tr>
<th><code>E:active</code></th>
<td class="table-partial"><a href="http://en.wikipedia.org/wiki/Comparison_of_layout_engines_%28CSS%29#trident_active">Partial</a></td>
<td class="table-yes">0</td>
<td class="table-yes">1.0</td>
<td class="table-yes">85</td>
<td class="table-yes">Yes</td>
<td class="table-yes">7.0</td>
<td class="table-yes">Yes</td>
</tr>
<tr>
<th><code>E:hover</code></th>
<td class="table-yes"><a href="http://en.wikipedia.org/wiki/Comparison_of_layout_engines_%28CSS%29#trident_hover">7.0</a></td>
<td class="table-yes"><a href="http://en.wikipedia.org/wiki/Comparison_of_layout_engines_%28CSS%29#tasman_hover">0.9</a></td>
<td class="table-yes">1.0</td>
<td class="table-yes">419.3</td>
<td class="table-yes">Yes</td>
<td class="table-yes">7.0</td>
<td class="table-yes">3.0</td>
</tr>
<tr>
<th><code>E:focus</code></th>
<td class="table-no">No</td>
<td class="table-yes">0</td>
<td class="table-yes">1.0</td>
<td class="table-yes">Yes</td>
<td class="table-yes">Yes</td>
<td class="table-yes">7.0</td>
<td class="table-yes">Yes</td>
</tr>
<tr>
<th><code>E:first-child</code></th>
<td class="table-yes">7.0</td>
<td class="table-yes">0</td>
<td class="table-yes">1.0</td>
<td class="table-yes">85</td>
<td class="table-yes">Yes</td>
<td class="table-yes">7.0</td>
<td class="table-yes">3.0</td>
</tr>
<tr>
<th><code>E:lang()</code></th>
<td class="table-no">No</td>
<td class="table-yes">0</td>
<td class="table-yes">1.2</td>
<td class="table-no"><a href="http://en.wikipedia.org/wiki/Comparison_of_layout_engines_%28CSS%29#webcore_lang">522</a></td>
<td class="table-yes">3.4</td>
<td class="table-yes">7.5</td>
<td class="table-yes">3.0</td>
</tr>
<tr>
<th><code>E:root</code></th>
<td class="table-no">No</td>
<td class="table-yes">0.1</td>
<td class="table-yes">1.0</td>
<td class="table-yes">85</td>
<td class="table-yes">3.4</td>
<td class="table-no">9.5a</td>
<td class="table-no">No</td>
</tr>
<tr>
<th><code>E:first-of-type</code></th>
<td class="table-no">No</td>
<td class="table-yes">0.9</td>
<td class="table-no">No</td>
<td class="table-no">522</td>
<td class="table-yes">3.4</td>
<td class="table-no">9.5a</td>
<td class="table-no">No</td>
</tr>
<tr>
<th><code>E:last-child</code></th>
<td class="table-no">No</td>
<td class="table-yes">0.9</td>
<td class="table-yes">1.0</td>
<td class="table-no"><a href="http://en.wikipedia.org/wiki/Comparison_of_layout_engines_%28CSS%29#webcore_last-child">Buggy</a></td>
<td class="table-yes">3.4</td>
<td class="table-no">9.5a</td>
<td class="table-no">No</td>
</tr>
<tr>
<th><code>E:last-of-type</code></th>
<td class="table-no">No</td>
<td class="table-yes">0.9</td>
<td class="table-no">No</td>
<td class="table-no"><a href="http://en.wikipedia.org/wiki/Comparison_of_layout_engines_%28CSS%29#webcore_last-child">Buggy</a></td>
<td class="table-yes">3.4</td>
<td class="table-no">9.5a</td>
<td class="table-no">No</td>
</tr>
<tr>
<th><code>E:only-child</code></th>
<td class="table-no">No</td>
<td class="table-yes">0.9</td>
<td class="table-yes">1.8</td>
<td class="table-no"><a href="http://en.wikipedia.org/wiki/Comparison_of_layout_engines_%28CSS%29#webcore_only-child">Buggy</a></td>
<td class="table-yes">3.4</td>
<td class="table-no">9.5a</td>
<td class="table-no">No</td>
</tr>
<tr>
<th><code>E:only-of-type</code></th>
<td class="table-no">No</td>
<td class="table-yes">0.9</td>
<td class="table-no">No</td>
<td class="table-no"><a href="http://en.wikipedia.org/wiki/Comparison_of_layout_engines_%28CSS%29#webcore_only-child">Buggy</a></td>
<td class="table-yes">3.4</td>
<td class="table-no">9.5a</td>
<td class="table-no">No</td>
</tr>
<tr>
<th><code>E:nth-child</code></th>
<td class="table-no">No</td>
<td class="table-yes">0.9</td>
<td class="table-no">No</td>
<td class="table-no">No</td>
<td class="table-yes">3.4</td>
<td class="table-no">9.5a</td>
<td class="table-no">No</td>
</tr>
<tr>
<th><code>E:nth-last-child</code></th>
<td class="table-no">No</td>
<td class="table-yes">0.9</td>
<td class="table-no">No</td>
<td class="table-no">No</td>
<td class="table-yes">3.4</td>
<td class="table-no">9.5a</td>
<td class="table-no">No</td>
</tr>
<tr>
<th><code>E:nth-of-type</code></th>
<td class="table-no">No</td>
<td class="table-yes">0.9</td>
<td class="table-no">No</td>
<td class="table-no">No</td>
<td class="table-yes">3.4</td>
<td class="table-no">9.5a</td>
<td class="table-no">No</td>
</tr>
<tr>
<th><code>E:nth-last-of-type</code></th>
<td class="table-no">No</td>
<td class="table-yes">0.9</td>
<td class="table-no">No</td>
<td class="table-no">No</td>
<td class="table-yes">3.4</td>
<td class="table-no">9.5a</td>
<td class="table-no">No</td>
</tr>
<tr>
<th><code>E:target</code></th>
<td class="table-no">No</td>
<td class="table-yes">0.9</td>
<td class="table-yes">1.3</td>
<td class="table-partial"><a href="http://en.wikipedia.org/wiki/Comparison_of_layout_engines_%28CSS%29#webcore_target">Partial</a></td>
<td class="table-yes">3.4</td>
<td class="table-no">9.5a</td>
<td class="table-no">No</td>
</tr>
<tr>
<th><code>E:empty</code></th>
<td class="table-no">No</td>
<td class="table-yes">0.9</td>
<td class="table-yes">1.8</td>
<td class="table-yes">412</td>
<td class="table-yes">3.4</td>
<td class="table-no">9.5a</td>
<td class="table-no">No</td>
</tr>
<tr>
<th><code>E:not()</code></th>
<td class="table-no">No</td>
<td class="table-yes">0.9</td>
<td class="table-yes">1.0</td>
<td class="table-yes">85</td>
<td class="table-yes">3.4</td>
<td class="table-no">9.5a</td>
<td class="table-no">No</td>
</tr>
<tr>
<th><code>E:enabled</code></th>
<td class="table-no">No</td>
<td class="table-yes">0.9</td>
<td class="table-yes">1.8</td>
<td class="table-no">522</td>
<td class="table-yes">3.4</td>
<td class="table-yes">9.0</td>
<td class="table-no">No</td>
</tr>
<tr>
<th><code>E:disabled</code></th>
<td class="table-no">No</td>
<td class="table-yes">0.9</td>
<td class="table-yes">1.8</td>
<td class="table-no">522</td>
<td class="table-yes">3.4</td>
<td class="table-yes">9.0</td>
<td class="table-no">No</td>
</tr>
<tr>
<th><code>E:checked</code></th>
<td class="table-no">No</td>
<td class="table-no">No</td>
<td class="table-yes">1.0</td>
<td class="table-no">522</td>
<td class="table-yes">3.4</td>
<td class="table-yes">9.0</td>
<td class="table-no">No</td>
</tr>
<tr>
<th><code>E:indeterminate</code></th>
<td class="table-no">No</td>
<td class="table-yes">0.9</td>
<td class="table-no">No</td>
<td class="table-no">No</td>
<td class="table-no">No</td>
<td class="table-no">No</td>
<td class="table-no">No</td>
</tr>
<tr>
<th><code>E:default</code></th>
<td class="table-no">No</td>
<td class="table-no">No</td>
<td class="table-no">1.9</td>
<td class="table-no">No</td>
<td class="table-no">No</td>
<td class="table-yes">9.0</td>
<td class="table-no">No</td>
</tr>
<tr>
<th><code>E:valid</code></th>
<td class="table-no">No</td>
<td class="table-no">No</td>
<td class="table-yes">1.8</td>
<td class="table-no">No</td>
<td class="table-no">No</td>
<td class="table-yes">9.0</td>
<td class="table-no">No</td>
</tr>
<tr>
<th><code>E:invalid</code></th>
<td class="table-no">No</td>
<td class="table-no">No</td>
<td class="table-yes">1.8</td>
<td class="table-no">No</td>
<td class="table-no">No</td>
<td class="table-yes">9.0</td>
<td class="table-no">No</td>
</tr>
<tr>
<th><code>E:in-range</code></th>
<td class="table-no">No</td>
<td class="table-no">No</td>
<td class="table-yes">1.8</td>
<td class="table-no">No</td>
<td class="table-no">No</td>
<td class="table-yes">9.0</td>
<td class="table-no">No</td>
</tr>
<tr>
<th><code>E:out-of-range</code></th>
<td class="table-no">No</td>
<td class="table-no">No</td>
<td class="table-yes">1.8</td>
<td class="table-no">No</td>
<td class="table-no">No</td>
<td class="table-yes">9.0</td>
<td class="table-no">No</td>
</tr>
<tr>
<th><code>E:required</code></th>
<td class="table-no">No</td>
<td class="table-no">No</td>
<td class="table-no">No</td>
<td class="table-no">No</td>
<td class="table-no">No</td>
<td class="table-yes">9.0</td>
<td class="table-no">No</td>
</tr>
<tr>
<th><code>E:optional</code></th>
<td class="table-no">No</td>
<td class="table-no">No</td>
<td class="table-no">No</td>
<td class="table-no">No</td>
<td class="table-no">No</td>
<td class="table-yes">9.0</td>
<td class="table-no">No</td>
</tr>
<tr>
<th><code>E:read-only</code></th>
<td class="table-no">No</td>
<td class="table-no">No</td>
<td class="table-partial"><a href="http://en.wikipedia.org/wiki/Comparison_of_layout_engines_%28CSS%29#gecko_-moz-">Experimental</a></td>
<td class="table-no">No</td>
<td class="table-no">No</td>
<td class="table-yes">9.0</td>
<td class="table-no">No</td>
</tr>
<tr>
<th><code>E:read-write</code></th>
<td class="table-no">No</td>
<td class="table-no">No</td>
<td class="table-partial"><a href="http://en.wikipedia.org/wiki/Comparison_of_layout_engines_%28CSS%29#gecko_-moz-">Experimental</a></td>
<td class="table-no">No</td>
<td class="table-no">No</td>
<td class="table-yes">9.0</td>
<td class="table-no">No</td>
</tr>
<tr>
<th><code>E:first-letter</code></th>
<td class="table-yes">5.5</td>
<td class="table-yes">0</td>
<td class="table-yes">1.0</td>
<td class="table-yes">85</td>
<td class="table-yes">Yes</td>
<td class="table-yes">7.0</td>
<td class="table-yes">3.0</td>
</tr>
<tr>
<th><code>E:first-line</code></th>
<td class="table-yes">5.5</td>
<td class="table-yes">0</td>
<td class="table-yes">1.0</td>
<td class="table-yes">85</td>
<td class="table-yes">Yes</td>
<td class="table-yes">7.0</td>
<td class="table-yes">3.0</td>
</tr>
<tr>
<th><code>E:before</code></th>
<td class="table-no">No</td>
<td class="table-no">No</td>
<td class="table-yes">1.0</td>
<td class="table-yes">85</td>
<td class="table-yes">Yes</td>
<td class="table-yes">7.0</td>
<td class="table-yes">3.0</td>
</tr>
<tr>
<th><code>E:after</code></th>
<td class="table-no">No</td>
<td class="table-no">No</td>
<td class="table-yes">1.0</td>
<td class="table-yes">85</td>
<td class="table-yes">Yes</td>
<td class="table-yes">7.0</td>
<td class="table-yes">3.0</td>
</tr>
<tr>
<th><code>E::before</code></th>
<td class="table-no">No</td>
<td class="table-no">No</td>
<td class="table-yes">1.5</td>
<td class="table-yes"><a href="http://en.wikipedia.org/wiki/Comparison_of_layout_engines_%28CSS%29#webcore_pseudo-element">85</a></td>
<td class="table-yes">3.4</td>
<td class="table-yes">7.0</td>
<td class="table-yes">Yes</td>
</tr>
<tr>
<th><code>E::after</code></th>
<td class="table-no">No</td>
<td class="table-no">No</td>
<td class="table-yes">1.5</td>
<td class="table-yes"><a href="http://en.wikipedia.org/wiki/Comparison_of_layout_engines_%28CSS%29#webcore_pseudo-element">85</a></td>
<td class="table-yes">3.4</td>
<td class="table-yes">7.0</td>
<td class="table-yes">Yes</td>
</tr>
<tr>
<th><code>E::first-letter</code></th>
<td class="table-no">No</td>
<td class="table-yes">0.9</td>
<td class="table-yes">1.5</td>
<td class="table-yes"><a href="http://en.wikipedia.org/wiki/Comparison_of_layout_engines_%28CSS%29#webcore_pseudo-element">85</a></td>
<td class="table-yes">3.4</td>
<td class="table-yes">7.0</td>
<td class="table-yes">Yes</td>
</tr>
<tr>
<th><code>E::first-line</code></th>
<td class="table-no">No</td>
<td class="table-yes">0.9</td>
<td class="table-yes">1.5</td>
<td class="table-yes"><a href="http://en.wikipedia.org/wiki/Comparison_of_layout_engines_%28CSS%29#webcore_pseudo-element">85</a></td>
<td class="table-yes">3.4</td>
<td class="table-yes">7.0</td>
<td class="table-yes">Yes</td>
</tr>
<tr>
<th><code>E::selection</code></th>
<td class="table-no">No</td>
<td class="table-yes">0.9</td>
<td class="table-partial"><a href="http://en.wikipedia.org/wiki/Comparison_of_layout_engines_%28CSS%29#gecko_-moz-">Experimental</a></td>
<td class="table-yes">412</td>
<td class="table-yes">3.4</td>
<td class="table-no">No</td>
<td class="table-no">No</td>
</tr>
<tr>
<th><code>E::value</code></th>
<td class="table-no">No</td>
<td class="table-no">No</td>
<td class="table-no">No</td>
<td class="table-no">No</td>
<td class="table-no">No</td>
<td class="table-no">No</td>
<td class="table-no">No</td>
</tr>
<tr>
<th><code>E::choices</code></th>
<td class="table-no">No</td>
<td class="table-no">No</td>
<td class="table-no">No</td>
<td class="table-no">No</td>
<td class="table-no">No</td>
<td class="table-no">No</td>
<td class="table-no">No</td>
</tr>
<tr>
<th><code>E::repeat-item</code></th>
<td class="table-no">No</td>
<td class="table-no">No</td>
<td class="table-no">No</td>
<td class="table-no">No</td>
<td class="table-no">No</td>
<td class="table-no">No</td>
<td class="table-no">No</td>
</tr>
<tr>
<th><code>E::repeat-index</code></th>
<td class="table-no">No</td>
<td class="table-no">No</td>
<td class="table-no">No</td>
<td class="table-no">No</td>
<td class="table-no">No</td>
<td class="table-no">No</td>
<td class="table-no">No</td>
</tr>
</tbody>
</table>
<p><br/><br/><br/></p>
<p>© 2012 <a href="http://blog.sjinks.pro">Ars Longa, Vita Brevis</a>. Все права защищены. Перепубликация материалов без разрешения автора запрещена.</p>
<p>При использовании материалов блога наличие активной не закрытой от индексирования ссылки на <a href="http://blog.sjinks.pro/css/55-css-hacks-and-filters-for-different-browsers/">источник</a> обязательно.</p>]]></content:encoded>
			<wfw:commentRss>http://blog.sjinks.pro/css/55-css-hacks-and-filters-for-different-browsers/feed/</wfw:commentRss>
		<slash:comments>7</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="p53193">
        <div class="code xhtml" id="p53code193">
<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="p53194">
        <div class="code css" id="p53code194">
<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="p53195">
        <div class="code css" id="p53code195">
<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="p53196">
        <div class="code css" id="p53code196">
<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>
	</channel>
</rss>

