<?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>Ксдыщь! &#187; рецепты</title>
	<atom:link href="http://flack.ru/tag/%d1%80%d0%b5%d1%86%d0%b5%d0%bf%d1%82%d1%8b/feed/" rel="self" type="application/rss+xml" />
	<link>http://flack.ru</link>
	<description>Вебдев и всякая фигня</description>
	<lastBuildDate>Mon, 06 Apr 2009 16:47:00 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Семантическая верстка — советы и решения. Часть вторая. Хаки-шмаки, даём люлей IE</title>
		<link>http://flack.ru/2007/12/07/semantic-coding-howto-2/</link>
		<comments>http://flack.ru/2007/12/07/semantic-coding-howto-2/#comments</comments>
		<pubDate>Thu, 06 Dec 2007 21:51:12 +0000</pubDate>
		<dc:creator>Flack</dc:creator>
				<category><![CDATA[Веб-разработка]]></category>
		<category><![CDATA[Рецептарий]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[веб-стандарты]]></category>
		<category><![CDATA[рецепты]]></category>

		<guid isPermaLink="false">http://flack.ru/2007/12/07/semantic-coding-howto-2/</guid>
		<description><![CDATA[CSS-хаки Альтернатива синице Укрощаем Internet Explorer или «магические правила» CSS-хаки При использовании семантической верстки каждый разработчик обязательно столкнется с проблемами кроссбраузерности, для решения которых в большинстве случаев приходится использовать так называемые «хаки». Обычно под этим термином подразумевается особый способ написания селекторов или правил, понимаемый только конкретным браузером. Однако совместимость с CSS в большинстве браузеров уже [...]]]></description>
			<content:encoded><![CDATA[<ul>
<li><a href="http://flack.ru/2007/12/07/semantic-coding-howto-2/#hacks">CSS-хаки</a></li>
<li><a href="http://flack.ru/2007/12/07/semantic-coding-howto-2/#cond">Альтернатива синице<br />
</a></li>
<li><a href="http://flack.ru/2007/12/07/semantic-coding-howto-2/#magic">Укрощаем Internet Explorer или «магические правила»</a></li>
</ul>
<h4 id="hacks">CSS-хаки</h4>
<p>При использовании семантической верстки каждый разработчик обязательно столкнется с проблемами кроссбраузерности, для решения которых в большинстве случаев приходится использовать так называемые «хаки». Обычно под этим термином подразумевается особый способ написания селекторов или правил, понимаемый только конкретным браузером. Однако совместимость с CSS в большинстве браузеров уже достигла уровня, при котором следует ограничивать использование «хаков».</p>
<p>Как правило, основным источником неприятностей бывает Internet Explorer. Многообразие ошибок в реализации CSS в браузерах Microsoft удивляет даже самых опытных верстальщиков. В связи с этим возникают ситуации, когда необходимо использовать дополнительные или альтернативные правила для IE. Именно в таких случаях рекомендуется применять «хаки». Если же вам вдруг понадобились альтернативные правила, скажем, только для Firefox, то рекомендуется пересмотреть ваш код, и в 99% случаев вы найдете более элегантное решение.<br />
<span id="more-90"></span><br />
Наиболее популярным хаком на сегодня остается так называемый «star html hack»:</p>
<pre><code>#element {
  position:relative; /* Основное правило  для всеx браузеров */
  }
  * HTML #element {
    position:static; /* Переопределение  правила для IE младше седьмой версии */
    }</code></pre>
<p>В валидных HTML- и XHMTL-документах селектор HTML всегда играет роль корневого элемента, а BODY — потомка первого уровня, но не второго или более высокого уровня. Таким образом, теоретически селектор «* HTML» не должен применяться ни к одному элементу. Но на практике IE пятых и шестых версий из-за ошибки в собственном движке интерпретируют данный селектор как HTML и применяют указываемые правила. Поскольку остальные современные браузеры селектор «* HTML» игнорируют, этот прием можно использовать в корыстных целях. Это полезно, но правильно ли?</p>
<p>Несмотря на то что данный хак корректен с точки зрения стандарта CSS, есть ряд негативных нюансов.</p>
<p>Во-первых, слово «хак» звучит странно, и разработчику уже это должно не понравиться.</p>
<p>Во-вторых, такие хаки для браузера Internet Explorer засоряют код, подгружаемый и всеми остальными браузерами.</p>
<p>В-третьих, в этом хаке игнорируется недавно вышедший Internet Explorer 7.0, где был исправлен целый ряд ошибок в модуле CSS (более подробно об этом вы можете почитать непосредственно в блоге разработчиков IE7 по адресу <a href="http://blogs.msdn.com/ie/">blogs.msdn.com/ie</a>).</p>
<p>Как же укротить Internet Explorer, не используя хаки?</p>
<h4 id="cond">Альтернатива синице</h4>
<p>В недрах Microsoft Developer Network есть решение получше — conditional comments. Данная технология поддерживается в Internet Explorer, начиная с пятой версии, тем самым охватывая все интересующие нас браузеры. Ниже приводится пример элегантного использования условных комментариев:</p>
<pre><code>&lt;link href="style.css" rel="stylesheet" type="text/css" media="all" /&gt;
&lt;!--[if IE]&gt;&lt;link rel="stylesheet" type="text/css" href="ie.css" media="all"/&gt;&lt;![endif]--&gt;
</code></pre>
<p>Обычное подключение CSS-файлов, однако увидят вторую строку, а следовательно и подгрузят css-файл только браузеры семейства Internet Explorer. Происходит это благодаря условию, заложенному в условном комментарии — if IE. Данное условие означает «если Internet Explorer» и Explorer’ы версии пять и выше (включая свежий седьмой) прочитают код, находящийся внутри комментария и интерпретируют его.</p>
<p>Таким образом все наши хаки можно вынести в отдельный файл:</p>
<p><strong>style.css:</strong></p>
<pre><code>#element {
    position:relative; /* Основное правило для всеx браузеров */
    }</code></pre>
<p><strong>ie.css:</strong></p>
<pre><code>#element {
    position:static; /* Переопределение правила для IE всех версий */
    }</code></pre>
<p>Теперь мы не используем хаки в основном листе стилей; добились того, что альтернативное правило было применено ко всем  Explorer’ам, включая седьмой; а также избавили пользователей альтернативных браузеров от загрузки лишнего кода. При этом мы сохранили наш (X)HTML и CSS валидным, так как такой условный комментарий не распознается никем иным кроме IE, включая даже валидатор от W3C.</p>
<p>Условные комментарии гибче, чем кажется на одном примере. Вы можете охватить не только все Explorer’ы, но и все его версии ниже или выше определенной или конкретную его версию; а также подгрузить код, который будут интерпретировать все браузеры, кроме Internet Explorer. К сожалению, это уже тема для отдельной статьи и с этими возможностями читателю следует ознакомится самостоятельно.</p>
<p><strong>Материалы для изучения:</strong></p>
<ul>
<li><a href="http://msdn.microsoft.com/workshop/author/dhtml/overview/ccomment_ovw.asp">раздел в Microsoft Developer Network</a></li>
<li><a href="http://www.quirksmode.org/css/condcom.html">Подробное объяснение синтаксиса и методологии использования</a></li>
<li><a href="http://www.456bereastreet.com/archive/200511/valid_downlevelrevealed_conditional_comments/">О валидности синтаксиса условных комментариев не для IE</a></li>
</ul>
<h4 id="magic">Укрощаем Internet Explorer или «магические правила»</h4>
<p>Как уже говорилось выше, больше всего проблем верстальщику доставляют браузеры от Microsoft. Мы уже рассказали о том, как добавить отдельные правила только для Internet Explorer, но не коснулись того, какие же правила нам смогут помочь. Исправляем это досадное упущение.<br />
Все перечисляемые ниже элементы управляют свойством <a href="http://msdn.microsoft.com/workshop/author/dhtml/reference/properties/haslayout.asp">hasLayout</a>. hasLayout не является частью стандарта CSS и является скорее микрософтовской «заплаткой» для веб-разработчиков. Но и на том спасибо, как говорится.</p>
<p>Мы приводим только названия багов, для исправления которых применяются данные правила. Более подробное описание указываемых багов вы можете найти по адресу <a href="http://www.positioniseverything.net/explorer.html">positioniseverything.net/explorer.html</a>.</p>
<p><strong>position:relative</strong></p>
<ul>
<li>The IE/Win Disappearing List-Background Bug</li>
<li>IE6 Border Chaos</li>
</ul>
<p>Данное правило также часто применяется для спонтанно пропадающих блоков. Не падающих или неправильно отображающихся, а именно пропадающих. Особенно грешит этим Internet Explorer 5.0.</p>
<p><strong>height:1%</strong></p>
<ul>
<li>The IE6 Three Pixel Text-Jog</li>
<li>The IE Escaping Floats Bug</li>
<li>IE and italics (будьте осторожны с 5.0, используйте экранирование)</li>
<li>IE/Win Unscrollable Content Bug</li>
<li>IE/Win Guillotine Bug</li>
<li>Quirky Percentages in IE6&#8242;s Visual Formatting Model</li>
</ul>
<p>Применяется также для клиаринга элементов. Задается контейнеру, содержащему float’ы.</p>
<p><strong>display:inline</strong></p>
<ul>
<li>Floats, Margins and IE</li>
<li>The IE Doubled Float-Margin Bug</li>
</ul>
<p><strong>display:inline-block;</strong></p>
<ul>
<li>Quirky Percentages in IE6&#8242;s Visual Formatting Model</li>
</ul>
<p><strong>zoom:1</strong></p>
<ul>
<li>Аналог height:1%; для IE 7.</li>
</ul>
<p>И еще пара советов:<br />
Во-первых, используйте данные правила по-возможности только для IE. Причем для разных версий решение может отличаться (наиболее часто это касается height:1% и zoom:1).<br />
Во-вторых, столкнувшись с нежелательным поведением Explorer’а, которому нет документированного объяснения (или вам просто лень его искать) — попробуйте последовательно применить к проблемному элементу все правила, влияющие на свойство hasLayout. Шаманство — неотъемлемая часть нашей професии.</p>
<p><strong>Материалы для изучения:</strong></p>
<ul>
<li><a href="http://msdn.microsoft.com/workshop/author/dhtml/reference/properties/haslayout.asp">hasLayout property в MSDN</a></li>
<li><a href="http://www.satzansatz.de/cssd/onhavinglayout.html">On having layout</a></li>
<li><a href="http://cssing.org.ua/2005/11/11/ie-magic/">Магия для IE</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://flack.ru/2007/12/07/semantic-coding-howto-2/feed/</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
		<item>
		<title>Семантическая верстка — советы и решения. Часть первая. Капля теории, DTD и ластики</title>
		<link>http://flack.ru/2007/11/29/semantic-coding-howto-1/</link>
		<comments>http://flack.ru/2007/11/29/semantic-coding-howto-1/#comments</comments>
		<pubDate>Thu, 29 Nov 2007 11:16:00 +0000</pubDate>
		<dc:creator>Flack</dc:creator>
				<category><![CDATA[Веб-разработка]]></category>
		<category><![CDATA[Рецептарий]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[веб-стандарты]]></category>
		<category><![CDATA[рецепты]]></category>

		<guid isPermaLink="false">http://flack.ru/2007/11/29/semantic-coding-howto-1/</guid>
		<description><![CDATA[Сегодня я начинаю публиковать по частям статью, написанную для русского издания PC Magazine, в которой рассказывается о приёмах семантической вёрстки. Первая часть: немного теории, DTD и ластики. Уровень — начинающие. Вместо вступления В последнее время все чаще требованием при разработке сайта становится бестабличная или «дивная» верстка. Оба термина стали чрезвычайно популярны, несмотря на то, что [...]]]></description>
			<content:encoded><![CDATA[<p>Сегодня я начинаю публиковать по частям статью, написанную для русского издания PC Magazine, в которой рассказывается о приёмах семантической вёрстки. Первая часть: немного теории, DTD и ластики. Уровень — <strong>начинающие</strong>.</p>
<h4>Вместо вступления</h4>
<p>В последнее время все чаще требованием при разработке сайта становится бестабличная или «дивная» верстка. Оба термина стали чрезвычайно популярны, несмотря на то, что они в корне неверны.</p>
<p>Изначально, таблицы были выбраны дизайнерами и разработчиками для верстки по одной единственной причине — не существовало других средств реализации хоть сколько-нибудь сложных макетов. Со временем таблицы стали нормой и остаются ею до сих пор. Но мы уже не в девяностых и браузеры, которые значатся в наших технических заданиях, способны интерпретировать CSS на том уровне, который необходим для более корректной, структурированной и современной верстки.<br />
<span id="more-74"></span></p>
<p>Именно ее мы называем семантической. Слово на первый взгляд довольно расплывчато, но в то же время лишено недостатков более популярного термина «бестабличная», который подразумевает всего лишь отказ от использования таблиц при реализации макетов. На самом деле все куда сложнее. Под семантической версткой мы подразумеваем следующее:</p>
<ol>
<li>Таблицы используются для табличных данных, а не для визуального позиционирования элементов. К сожалению, мы живем не в идеальном мире и не всегда удается обойтись без этого архаизма, многие макеты просто требуют табличного поведения. Но перед тем как использовать таблицу не по назначению, каждый разработчик должен не раз подумать и попытаться избежать этого. Во многих случаях это вполне реально.</li>
<li>Каждый элемент HTML-кода должен нести структурный смысл. Наилучший способ этого добиться — просмотреть вашу страницу с отключенным CSS. Если списки визуально остались списками, а заголовки заголовками, то вы уже близки к семантике, к которой следует стремиться любому профессиональному верстальщику.</li>
<li>Разрабатываемый вами код соответствует стандартам (X)HTML и CSS. Семантика невозможна без валидности, несмотря на явную разность этих двух понятий. Вы можете сверстать валидный сайт, но без структурной разметки это будет всего лишь популизм.</li>
</ol>
<p>Данная статья не предназначена для совсем новичков и не претендует на статус учебного пособия, но пытается ответить на вопросы, часто возникающие у верстальщиков при попытке изменить табличным привычкам и перейти на семантическую верстку.</p>
<h4>Проблемы кроссбраузерности и их решения</h4>
<h5>Правильный DOCTYPE</h5>
<p>Правильный DOCTYPE — это то, с чего должен начинаться любой сайт. Вы можете написать трижды правильный (X)HTML и СSS код, но с неправильным или отсутствующим DOCTYPE он не будет валидным и, что самое ужасное, будет работать неправильно.</p>
<p>Согласно спецификациям HTML и XHTML тег DOCTYPE, указанный в первой строке документа, указывает браузеру, какую именно версию (X)HTML вы используете в своем документе. Без указания DOCTYPE браузер будет воспринимать ваш документ в режиме Quirks mode, что приведет, в частности, к неправильной интерпретации блочной модели.</p>
<p>Правильный DOCTYPE обязан содержать полный абсолютный путь к файлу DTD, хранящемуся на серверах w3.org.</p>
<p class="imp">Использование правильного DOCTYPE — первый и необходимый путь к валидной кроссбраузерной верстке.</p>
<p>В этой статье мы используем указанный выше XHTML 1.0 Strict.</p>
<p class="inf">Подглядеть корректные DOCTYPE, а также подробнее узнать практическое значение этого тега можно в статье Джеффри Зельдмана в переводе Макса Россомахина «<a href="http://www.webmascon.com/topics/coding/25a.asp">Почему так важен DOCTYPE</a>».</p>
<h5>Ластики</h5>
<p>Одна из самых пространенных причин того, что сайт выглядит по-разному в разных браузерам вызвана тем, что браузеры по умолчанию оформляют многие элементы по-своему.</p>
<p>Для примера возьмем небольшой код:</p>
<pre><code class="html">&lt;fieldset&gt;
    &lt;legend&gt;Авторизация&lt;/legend&gt;
    &lt;label for="login"&gt;Логин:&lt;/label&gt;
    &lt;input id="login" maxlength="15" type="text" /&gt;
    &lt;label for="password"&gt;Пароль:&lt;/label&gt;
    &lt;input id="password" maxlength="15" type="password" /&gt;
&lt;/fieldset&gt;
</code></pre>
<p>Взгляните на результат в Firefox 2.0 (слева) и Internet Explorer 6 (справа):<br />
<img src="http://flack.ru/lab/image001.gif" alt="Результат" /></p>
<p>Разница вызвана тем, что разные браузеры имеют различные значения для полей (margin) и отступов (padding). Разумеется, если задать конкретные величины в правилах для нужных элементов, то все исправится, но можно поступить проще.Существует замечательный селектор *, который выбирает все элементы в документе. Таким образом мы можем заранее обнулить значения для отступов и полей и в дальнейшем задавать их только тогда, когда дефолтные значения нас не устраивают. Эта, на первый взгляд мелочь, поможет вам избежать множества незначительных, но трудно находимых кроссбраузерных несоответствий и просто ошибок в процессе имплементации дизайна.</p>
<p>Добавим чуть-чуть CSS:</p>
<pre><code class="css">* {margin:0;padding:0;}
</code></pre>
<p>и посмотрим на результат:</p>
<p><img src="http://flack.ru/lab/image002.gif" alt="Результат" /></p>
<p>Уже гораздо ближе к тому кроссбраузерному сооветствию, что мы ищем.</p>
<p>Подход к использованию «ластиков» у каждого свой и подобные стили по умолчанию каждый верстальщик должен выработать для себя самостоятельно. Это, как и стиль написания HTML и CSS, должно стать профессиональной привычкой, значительно увеличивающей вашу личную производительностью.</p>
<p class="imp">Во всех примерах нашей статьи вышеупомянутый «ластик» используется по умолчанию.</p>
<p><strong>Материалы для изучения:</strong></p>
<ul>
<li>«<a href="http://pepelsbey.net/webdev/2007/02/10/i-otstupili-polya/">И отступили поля</a>»</li>
<li><a href="http://developer.yahoo.com/yui/reset/">YUI Reset CSS</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://flack.ru/2007/11/29/semantic-coding-howto-1/feed/</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
	</channel>
</rss>
