<?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"
	>

<channel>
	<title>Пепелсбей.net</title>
	<atom:link href="http://pepelsbey.net/feed/" rel="self" type="application/rss+xml" />
	<link>http://pepelsbey.net</link>
	<description></description>
	<pubDate>Thu, 24 Jul 2008 10:05:39 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6</generator>
	<language>en</language>
			<item>
		<title>Наполеоновское</title>
		<link>http://pepelsbey.net/feeder/?FeederAction=clicked&amp;feed=Articles+%28RSS2%29&amp;seed=http%3A%2F%2Fpepelsbey.net%2F2008%2F07%2Fnapoleonic%2F&amp;seed_title=%D0%9D%D0%B0%D0%BF%D0%BE%D0%BB%D0%B5%D0%BE%D0%BD%D0%BE%D0%B2%D1%81%D0%BA%D0%BE%D0%B5</link>
		<comments>http://pepelsbey.net/feeder/?FeederAction=clicked&amp;feed=Articles+%28RSS2%29&amp;seed=http%3A%2F%2Fpepelsbey.net%2F2008%2F07%2Fnapoleonic%2F&amp;seed_title=%D0%9D%D0%B0%D0%BF%D0%BE%D0%BB%D0%B5%D0%BE%D0%BD%D0%BE%D0%B2%D1%81%D0%BA%D0%BE%D0%B5#comments</comments>
		<pubDate>Wed, 23 Jul 2008 21:02:47 +0000</pubDate>
		<dc:creator>pepelsbey</dc:creator>
		
		<category><![CDATA[Заметки]]></category>

		<guid isPermaLink="false">http://pepelsbey.net/?p=48</guid>
		<description><![CDATA[И снова здравствуйте. Вашему вниманию предлагается список планируемых публикаций на конец лета — начало осени:


Рецензия на книгу Сергея Соколова «CSS 3 в примерах», разгромная.
Статья, посвещённая эффективной работе с табличными данными — от размышлений об уместности использования таблиц до практических примеров.
Продолжение, а точнее полная обновлённая версия статьи «CSS-менеджмент».
Подробное исследование вопроса нарезки и оптимизации графики для вёрстки [...]]]></description>
			<content:encoded><![CDATA[<p>И снова здравствуйте. Вашему вниманию предлагается список планируемых публикаций на конец лета — начало осени:</p>

<ul>
<li>Рецензия на книгу Сергея Соколова «<a href="http://www.google.com/search?hl=ru&amp;q=Сергей+Соколов+CSS+3+в+примерах">CSS 3 в примерах</a>», разгромная.</li>
<li>Статья, посвещённая эффективной работе с табличными данными — от размышлений об уместности использования таблиц до практических примеров.</li>
<li>Продолжение, а точнее полная обновлённая версия статьи «<a href="http://pepelsbey.net/2008/02/css-management-files-2/">CSS-менеджмент</a>».</li>
<li>Подробное исследование вопроса нарезки и оптимизации графики для вёрстки — от основ использования форматов до инструментария. Рабочее название — «С ножом против паровоза».</li>
</ul>

<p>Отчётная часть на этом закончена, и напоследок позволю себе сообщить вам о запуске сайта <a href="http://darkentries.ru/">DarkEntries</a>. Вся дневниково-музыкальная часть, внезапно исчезнувшая с этого сайта, всплыла на новом домене.</p>]]></content:encoded>
			<wfw:commentRss>http://pepelsbey.net/feeder/?FeederAction=clicked&amp;feed=Articles+%28RSS2%29&amp;seed=http%3A%2F%2Fpepelsbey.net%2F2008%2F07%2Fnapoleonic%2F&amp;seed_title=%D0%9D%D0%B0%D0%BF%D0%BE%D0%BB%D0%B5%D0%BE%D0%BD%D0%BE%D0%B2%D1%81%D0%BA%D0%BE%D0%B5/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Неизбежное Исключение</title>
		<link>http://pepelsbey.net/feeder/?FeederAction=clicked&amp;feed=Articles+%28RSS2%29&amp;seed=http%3A%2F%2Fpepelsbey.net%2F2008%2F06%2Finevitable-exception%2F&amp;seed_title=%D0%9D%D0%B5%D0%B8%D0%B7%D0%B1%D0%B5%D0%B6%D0%BD%D0%BE%D0%B5+%D0%98%D1%81%D0%BA%D0%BB%D1%8E%D1%87%D0%B5%D0%BD%D0%B8%D0%B5</link>
		<comments>http://pepelsbey.net/feeder/?FeederAction=clicked&amp;feed=Articles+%28RSS2%29&amp;seed=http%3A%2F%2Fpepelsbey.net%2F2008%2F06%2Finevitable-exception%2F&amp;seed_title=%D0%9D%D0%B5%D0%B8%D0%B7%D0%B1%D0%B5%D0%B6%D0%BD%D0%BE%D0%B5+%D0%98%D1%81%D0%BA%D0%BB%D1%8E%D1%87%D0%B5%D0%BD%D0%B8%D0%B5#comments</comments>
		<pubDate>Thu, 05 Jun 2008 13:02:30 +0000</pubDate>
		<dc:creator>pepelsbey</dc:creator>
		
		<category><![CDATA[Заметки]]></category>

		<guid isPermaLink="false">http://pepelsbey.net/?p=43</guid>
		<description><![CDATA[Что ж, блог CSS3.info сегодня сообщил нам, что последняя бета-версия Firefox, наряду с Safari и Opera, полностью проходит тест на работоспособность CSS3-селекторов. Однако в разговорах про все чудеса CSS3 не стоит забывать про одно неизбежное исключение:

So Safari, Opera and now Firefox all pass the test; of the major browsers, that only leaves one Inevitable Exception…

Судя [...]]]></description>
			<content:encoded><![CDATA[<p>Что ж, блог <a href="http://www.css3.info/">CSS3.info</a> сегодня <a href="http://www.css3.info/firefox-31-is-the-latest-to-pass-our-selectors-test/">сообщил нам</a>, что последняя бета-версия Firefox, наряду с Safari и Opera, полностью проходит <a href="http://www.css3.info/selectors-test/">тест на работоспособность <abbr title="Cascading Style Sheets 3">CSS3</abbr>-селекторов</a>. Однако в разговорах про все чудеса <abbr title="Cascading Style Sheets 3">CSS3</abbr> не стоит забывать про одно <em>неизбежное исключение</em>:</p>

<blockquote><p>So Safari, Opera and now Firefox all pass the test; of the major browsers, that only leaves one Inevitable Exception…</p></blockquote>

<p>Судя по словам архитектора <abbr title="Internet Explorer 8">IE8</abbr> Алекса Могилевского, CSS3-селекторы не будут внедрены в <abbr title="Internet Explorer">IE</abbr> до тех пор, пока спецификация не будет официально утверждена. А что до тех <abbr title="Cascading Style Sheets 3">CSS3</abbr>-селекторов, что уже появились в <abbr title="Internet Explorer 7">IE7</abbr> («<a href="http://blogs.msdn.com/ie/archive/2006/08/22/712830.aspx#718220">we actually did a couple of <abbr title="Cascading Style Sheets 3">CSS3</abbr> Selectors for <abbr title="Internet Explorer 7">IE7</abbr></a>»), то это, по его же словам, произошло <em>случайно</em> — просто человек, занимавшийся внедрением, не был в курсе, что это оказывается <abbr title="Cascading Style Sheets 3">CSS3</abbr>…</p>

<p>В общем, теперь-то мы знаем, что на самом деле скрывается за аббревиатурой <abbr title="Inevitable Exception">IE</abbr> ;)</p>]]></content:encoded>
			<wfw:commentRss>http://pepelsbey.net/feeder/?FeederAction=clicked&amp;feed=Articles+%28RSS2%29&amp;seed=http%3A%2F%2Fpepelsbey.net%2F2008%2F06%2Finevitable-exception%2F&amp;seed_title=%D0%9D%D0%B5%D0%B8%D0%B7%D0%B1%D0%B5%D0%B6%D0%BD%D0%BE%D0%B5+%D0%98%D1%81%D0%BA%D0%BB%D1%8E%D1%87%D0%B5%D0%BD%D0%B8%D0%B5/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Пять звёздочек</title>
		<link>http://pepelsbey.net/feeder/?FeederAction=clicked&amp;feed=Articles+%28RSS2%29&amp;seed=http%3A%2F%2Fpepelsbey.net%2F2008%2F05%2Ffive-stars%2F&amp;seed_title=%D0%9F%D1%8F%D1%82%D1%8C+%D0%B7%D0%B2%D1%91%D0%B7%D0%B4%D0%BE%D1%87%D0%B5%D0%BA</link>
		<comments>http://pepelsbey.net/feeder/?FeederAction=clicked&amp;feed=Articles+%28RSS2%29&amp;seed=http%3A%2F%2Fpepelsbey.net%2F2008%2F05%2Ffive-stars%2F&amp;seed_title=%D0%9F%D1%8F%D1%82%D1%8C+%D0%B7%D0%B2%D1%91%D0%B7%D0%B4%D0%BE%D1%87%D0%B5%D0%BA#comments</comments>
		<pubDate>Wed, 28 May 2008 13:59:34 +0000</pubDate>
		<dc:creator>pepelsbey</dc:creator>
		
		<category><![CDATA[Заметки]]></category>

		<guid isPermaLink="false">http://pepelsbey.net/?p=42</guid>
		<description><![CDATA[<p>Продолжая тему небольших полезных <abbr title="Cascading Style Sheets">CSS</abbr>-решений, предлагаю вашему вниманию интересную реализацию механизма рейтингов. С виду&#160;— всё просто: пять звёздочек, клик по каждой фиксирует рейтинг на позиции от одного до пяти баллов. Если же какой-то рейтинг уже имеется, при наведении он должен сбрасываться, чтобы пользователь имел возможность выразить своё мнение.</p>

<p>Каких только решений не придумано для этой тривиальной задачи&#160;— от сомнительного списка элементов <code>&#60;img&#62;</code> до более-менее внятных решений с помощью фоновых изображений. Но одно неизменно — всё это сдобрено хорошей порцией <abbr title="JavaScript">JS</abbr>-кода, отвечающего за необходимое поведение. Что вполне логично приводит к тому, что без <abbr title="JavaScript">JS</abbr>, в лучшем случае, не видно всей красоты, а в худшем — вообще нельзя проголосовать. В&#160;общем, не слишком хорошо.</p>

<p>Поэтому я предлагаю новое решение: <a href="http://pepelsbey.net/pro/2008/05/five-stars/">пять&#160;звёздочек</a> и его особенности:</p>

<ul>
<li>Вся динамика максимально вынесена в <abbr title="Cascading Style Sheets">CSS</abbr> при помощи псевдо-класса <code>:hover</code>, <abbr title="JavaScript">JS</abbr>&#160;применяется только для фиксирования результата голосования и для того, чтобы заставить <abbr title="Internet Explorer 6">IE6</abbr> понимать указанный псевдо-класс не только для ссылок, за счёт переключения дополнительного класса <code>phover</code> при взаимодествии с контролом.</li>
<li>Следовательно, при отключённом <abbr title="JavaScript">JS</abbr>, во всех браузерах, кроме <abbr title="Internet Explorer 6">IE6</abbr> и младше, вся красота со звёздочками продолжает работать, а сам процесс голосования становится простым переходом по ссылке.</li>
<li>Для отрисовки звёздочек используется только одна картинка, таким образом&#160;— только один запрос и контрол уже готов к работе.</li>
<li>Потенциально, голосование становится возможно даже при отключённых картинках&#160;— в таком случае рейтинг выглядит как прогресс-бар. Очевидность контрола в этом случае ухудшается, но и это уже ценно.</li>
</ul>]]></description>
			<content:encoded><![CDATA[<p>Продолжая тему небольших полезных <abbr title="Cascading Style Sheets">CSS</abbr>-решений, предлагаю вашему вниманию интересную реализацию механизма рейтингов. С виду&nbsp;— всё просто: пять звёздочек, клик по каждой фиксирует рейтинг на позиции от одного до пяти баллов. Если же какой-то рейтинг уже имеется, при наведении он должен сбрасываться, чтобы пользователь имел возможность выразить своё мнение.</p>

<p>Каких только решений не придумано для этой тривиальной задачи&nbsp;— от сомнительного списка элементов <code>&lt;img&gt;</code> до более-менее внятных решений с помощью фоновых изображений. Но одно неизменно — всё это сдобрено хорошей порцией <abbr title="JavaScript">JS</abbr>-кода, отвечающего за необходимое поведение. Что вполне логично приводит к тому, что без <abbr title="JavaScript">JS</abbr>, в лучшем случае, не видно всей красоты, а в худшем — вообще нельзя проголосовать. В&nbsp;общем, не слишком хорошо.</p>

<p>Поэтому я предлагаю новое решение: <a href="http://pepelsbey.net/pro/2008/05/five-stars/">пять&nbsp;звёздочек</a> и его особенности:</p>

<ul>
<li>Вся динамика максимально вынесена в <abbr title="Cascading Style Sheets">CSS</abbr> при помощи псевдо-класса <code>:hover</code>, <abbr title="JavaScript">JS</abbr>&nbsp;применяется только для фиксирования результата голосования и для того, чтобы заставить <abbr title="Internet Explorer 6">IE6</abbr> понимать указанный псевдо-класс не только для ссылок, за счёт переключения дополнительного класса <code>phover</code> при взаимодествии с контролом.</li>
<li>Следовательно, при отключённом <abbr title="JavaScript">JS</abbr>, во всех браузерах, кроме <abbr title="Internet Explorer 6">IE6</abbr> и младше, вся красота со звёздочками продолжает работать, а сам процесс голосования становится простым переходом по ссылке.</li>
<li>Для отрисовки звёздочек используется только одна картинка, таким образом&nbsp;— только один запрос и контрол уже готов к работе.</li>
<li>Потенциально, голосование становится возможно даже при отключённых картинках&nbsp;— в таком случае рейтинг выглядит как прогресс-бар. Очевидность контрола в этом случае ухудшается, но и это уже ценно.</li>
</ul>

<p>Самая интересная часть <a href="http://pepelsbey.net/pro/2008/05/five-stars/s/style.css"><abbr title="Cascading Style Sheets">CSS</abbr>-кода</a>:</p>

<ol class="code">
<li><code>.voting A.cur,</code></li>
<li><code>.voting A:hover,</code></li>
<li><code>.voting:hover A.cur:hover,</code></li>
<li><code>.voting:hover A:hover {</code></li>
<li><code>    background:#FC0 url(../i/stars.png) no-repeat;</code></li>
<li><code>    }</code></li>
<li><code>.voting:hover A.cur {</code></li>
<li><code>    background:none;</code></li>
<li><code>    }</code></li>
</ol>

<p>Признаюсь честно, вещей вроде <code>E:hover E:hover { … }</code> мне до сих пор писать не приходилось.</p>

<p>Также хотелось бы упомянуть про интересное <a href="http://pepelsbey.net/pro/2008/05/five-stars/j/script.js"><abbr title="JavaScript">JS</abbr>-решение</a> для определения версии <abbr title="Internet Explorer">IE</abbr>, чтобы для шестой его версии и младше эмулировать псевдо-класс <code>:hover</code> для списков. И&nbsp;вот каким образом я получаю переменную <code>ltIE7</code> (less than <abbr title="Internet Explorer 7">IE7</abbr>):</p>

<ol class="code">
<li><code>var ltIE7 = false</code></li>
<li><code>/*@cc_on</code></li>
<li><code>    @if (@_jscript_version &lt; 5.7)</code></li>
<li><code>        ltIE7 = true</code></li>
<li><code>    @end</code></li>
<li><code>@*/</code></li>
</ol>

<p>Эта <em>пляска с собачками</em> называется «условное выполнение» (Conditional Compilation) и формально вообще не является JavaScript'ом, это JScript. Если я не ошибаюсь, только его <abbr title="Internet Explorer">IE</abbr> и понимает, а официальный JavaScript работает только благодаря довольно широкой совместимости этих языков. Что-то до боли знакомое, вы не находите? Прямо условные комментарии (Conditional Comments), только в <abbr title="JavaScript">JS</abbr>-реинкарнации. Кто знает, если копнуть <a href="http://msdn.microsoft.com/">MSDN</a> поглубже, может быть найдётся что-то похожее и для <abbr title="Cascading Style Sheets">CSS</abbr>?</p>

<p>По аналогии с предыдущим примером, можно получить и переменную <code>ltIE6</code> (less than <abbr title="Internet Explorer 6">IE6</abbr>), вычислив версию JScript, использующуюся в браузере. Для <abbr title="Internet Explorer 6">IE6</abbr> она равна&nbsp;5.5:</p>

<ol class="code">
<li><code>@if (@_jscript_version &lt; 5.6)</code></li>
<li><code>    ltIE6 = true</code></li>
<li><code>@end</code></li>
</ol>

<p>Более подробное описание этой чудо-технологии можно найти в статье «<a href="http://www.javascriptkit.com/javatutors/conditionalcompile2.shtml">Conditional&nbsp;Compilation&nbsp;Variables</a>». Пятизвёздочных вам рейтингов ;)</p>]]></content:encoded>
			<wfw:commentRss>http://pepelsbey.net/feeder/?FeederAction=clicked&amp;feed=Articles+%28RSS2%29&amp;seed=http%3A%2F%2Fpepelsbey.net%2F2008%2F05%2Ffive-stars%2F&amp;seed_title=%D0%9F%D1%8F%D1%82%D1%8C+%D0%B7%D0%B2%D1%91%D0%B7%D0%B4%D0%BE%D1%87%D0%B5%D0%BA/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Скажем alt картинкам!</title>
		<link>http://pepelsbey.net/feeder/?FeederAction=clicked&amp;feed=Articles+%28RSS2%29&amp;seed=http%3A%2F%2Fpepelsbey.net%2F2008%2F05%2Fsay-alt-to-images%2F&amp;seed_title=%D0%A1%D0%BA%D0%B0%D0%B6%D0%B5%D0%BC+alt+%D0%BA%D0%B0%D1%80%D1%82%D0%B8%D0%BD%D0%BA%D0%B0%D0%BC%21</link>
		<comments>http://pepelsbey.net/feeder/?FeederAction=clicked&amp;feed=Articles+%28RSS2%29&amp;seed=http%3A%2F%2Fpepelsbey.net%2F2008%2F05%2Fsay-alt-to-images%2F&amp;seed_title=%D0%A1%D0%BA%D0%B0%D0%B6%D0%B5%D0%BC+alt+%D0%BA%D0%B0%D1%80%D1%82%D0%B8%D0%BD%D0%BA%D0%B0%D0%BC%21#comments</comments>
		<pubDate>Mon, 26 May 2008 11:28:22 +0000</pubDate>
		<dc:creator>pepelsbey</dc:creator>
		
		<category><![CDATA[Заметки]]></category>

		<guid isPermaLink="false">http://pepelsbey.net/?p=40</guid>
		<description><![CDATA[<p>Создавая доступные сайты, без сомнения, стоит обращать внимание и на то, как они выглядят при отключённой графике. Существует ряд традиционных рекомендаций, которые помогут вам в такой ситуации:</p>

<ul>
<li>Не забывайте добавлять фоновый цвет при указании фонового изображения, когда цвет фона страницы совпадает или не слишком контрастирует с цветом текста.</li>
<li>Постарайтесь обрисовать основные блоки, очертания которых формируются с помощью картинок, при помощи цвета фона или рамок. Чтобы каркас вашего сайта прорисовывался и без графики. Как пример такой практики — задание слабо контрастного цвета фона элементов <code>&#60;img&#62;</code> для иллюстраций в тексте для того, чтобы избежать дырок в тексте — конечно при условии, что картинкам заданы размеры.</li>
<li>Не ленитесь указывать альтернативный текст для изображений и не забывайте, что этот текст можно оформлять, применяя стили шрифта к элементу <code>&#60;img&#62;</code>.</li>
</ul>

<p>В принципе, можно продолжать и дальше, но я не об этом. Обратите внимание на последнюю рекомендацию — о ней помнит большинство верстальщиков, иначе можно получить линейкой по рукам от валидатора. Однако мало кто вспоминает про такой слегка сомнительный, но пока вполне легальный элемент, как <code>&#60;input type="image"/&#62;</code></p>

<p>И чёрт с ней, с иллюстрацией — не увидят, да может и к лучшему. А вот невозможность отправить форму при отсутствующей или неявно присутствующей кнопке — это уже дело посерьёзнее. И что будем делать? Понятное дело — прописывать текст действия, написанный или подразумеваемый на картинке. Но как? К примеру, встретил я на днях такое:</p>

<ol class="code">
<li><code>&#60;input type="image" src="send.gif" value="Отправить"/&#62;</code></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>Создавая доступные сайты, без сомнения, стоит обращать внимание и на то, как они выглядят при отключённой графике. Существует ряд традиционных рекомендаций, которые помогут вам в такой ситуации:</p>

<ul>
<li>Не забывайте добавлять фоновый цвет при указании фонового изображения, когда цвет фона страницы совпадает или не слишком контрастирует с цветом текста.</li>
<li>Постарайтесь обрисовать основные блоки, очертания которых формируются с помощью картинок, при помощи цвета фона или рамок. Чтобы каркас вашего сайта прорисовывался и без графики. Как пример такой практики — задание слабо контрастного цвета фона элементов <code>&lt;img&gt;</code> для иллюстраций в тексте для того, чтобы избежать дырок в тексте — конечно при условии, что картинкам заданы размеры.</li>
<li>Не ленитесь указывать альтернативный текст для изображений и не забывайте, что этот текст можно оформлять, применяя стили шрифта к элементу <code>&lt;img&gt;</code>.</li>
</ul>

<p>В принципе, можно продолжать и дальше, но я не об этом. Обратите внимание на последнюю рекомендацию — о ней помнит большинство верстальщиков, иначе можно получить линейкой по рукам от валидатора. Однако мало кто вспоминает про такой слегка сомнительный, но пока вполне легальный элемент, как <code>&lt;input type="image"/&gt;</code></p>

<p>И чёрт с ней, с иллюстрацией — не увидят, да может и к лучшему. А вот невозможность отправить форму при отсутствующей или неявно присутствующей кнопке — это уже дело посерьёзнее. И что будем делать? Понятное дело — прописывать текст действия, написанный или подразумеваемый на картинке. Но как? К примеру, встретил я на днях такое:</p>

<ol class="code">
<li><code>&lt;input type="image" src="send.gif" value="Отправить"/&gt;</code></li>
</ol>

<p>Судя по всему, это сработано по аналогии с <code>&lt;input type="submit"/&gt;</code>, где задание атрибута <code>value="Отправить"</code> задаёт текст действия на кнопке. И ведь работает, правда, местами… Однако, как нам известно, элемент <code>&lt;input type="image"/&gt;</code> имеет красноречивый атрибут <code>alt</code> (наряду с типично картиночными <code>align, usemap, ismap</code>), предназначенный как раз для задания альтернативного текста.</p>

<p>Учитывая то, что валидатор не имеет ничего против атрибутов <code>value</code> и <code>alt</code> для <code>&lt;input type="image"/&gt;</code> в XHTML 1.0 Strict документе, то давайте проверим на практике — кто же из них круче. Предложим такой код следующему зверинцу: <abbr title="Internet Explorer">IE</abbr>&nbsp;5–7, Firefox&nbsp;3, Opera&nbsp;9, Safari&nbsp;3…</p>

<ol class="code">
<li><code>&lt;input type="image" src="send.gif" alt="Альтернативный текст"/&gt;</code></li>
<li><code>&lt;input type="image" src="send.gif" value="Чушь какая-то"/&gt;</code></li>
<li><code>&lt;input type="image" src="send.gif" value="Чушь какая-то" alt="Альтернативный текст"/&gt;</code></li>
</ol>

<p>…и получаем: <a href="http://pepelsbey.net/img/2008/05/say-alt-to-images/alt.vs.value.png">alt vs value</a></p>

<p>Получается, что <code>value</code> хоть и срабатывает в Firefox и Safari как альтернативный текст, но всё же напрочь перебивается значением <code>alt</code>, которое стабильно отображается во всех протестированных браузерах.</p>

<p>Вывод очевиден — помимо правильности использования атрибута <code>alt</code> по прямому назначению, это ещё и самый стабильный способ задания альтернативного текста для элемента <code>&lt;input type="image"/&gt;</code>.</p>]]></content:encoded>
			<wfw:commentRss>http://pepelsbey.net/feeder/?FeederAction=clicked&amp;feed=Articles+%28RSS2%29&amp;seed=http%3A%2F%2Fpepelsbey.net%2F2008%2F05%2Fsay-alt-to-images%2F&amp;seed_title=%D0%A1%D0%BA%D0%B0%D0%B6%D0%B5%D0%BC+alt+%D0%BA%D0%B0%D1%80%D1%82%D0%B8%D0%BD%D0%BA%D0%B0%D0%BC%21/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Страна Советов</title>
		<link>http://pepelsbey.net/feeder/?FeederAction=clicked&amp;feed=Articles+%28RSS2%29&amp;seed=http%3A%2F%2Fpepelsbey.net%2F2008%2F05%2Fsoviet-country%2F&amp;seed_title=%D0%A1%D1%82%D1%80%D0%B0%D0%BD%D0%B0+%D0%A1%D0%BE%D0%B2%D0%B5%D1%82%D0%BE%D0%B2</link>
		<comments>http://pepelsbey.net/feeder/?FeederAction=clicked&amp;feed=Articles+%28RSS2%29&amp;seed=http%3A%2F%2Fpepelsbey.net%2F2008%2F05%2Fsoviet-country%2F&amp;seed_title=%D0%A1%D1%82%D1%80%D0%B0%D0%BD%D0%B0+%D0%A1%D0%BE%D0%B2%D0%B5%D1%82%D0%BE%D0%B2#comments</comments>
		<pubDate>Thu, 22 May 2008 11:27:52 +0000</pubDate>
		<dc:creator>pepelsbey</dc:creator>
		
		<category><![CDATA[Заметки]]></category>

		<guid isPermaLink="false">http://pepelsbey.net/?p=38</guid>
		<description><![CDATA[Принимая приглашение Александра Исакова поучаствовать в провокации, предлагаю вам пять советов, облетевшие словно письмо счастья почти все русскоязычные блоги разработчиков:


Всегда отдавайте каждому браузеру только то, что он должен и может переварить. Это значит, что ваш HTML-документ и файл стилей абсолютно валидны, не содержат загадочных невидимых юникодных символов, все хаки для IE вынесены во внешний файл [...]]]></description>
			<content:encoded><![CDATA[<p>Принимая <a href="http://uggallery.audiopeace.ru/2008/05/19/5-advices">приглашение Александра Исакова</a> поучаствовать в <a href="http://seleckis.lv/journal/css/5-sovetov-verstalschiku">провокации</a>, предлагаю вам пять советов, облетевшие словно письмо счастья почти все русскоязычные блоги разработчиков:</p>

<ol>
<li>Всегда отдавайте каждому браузеру только то, что он <em>должен</em> и <em>может</em> переварить. Это значит, что ваш HTML-документ и файл стилей абсолютно валидны, не содержат загадочных невидимых юникодных символов, все хаки для IE вынесены во внешний файл и подключаются через условные комментарии. Тогда мистики в вашей работе поубавится.</li>
<li>Пишите хаки <em>только</em> для IE, не ройте себе яму. Где и как — см. пункт 1.</li>
<li>Изучайте <a href="http://www.css3.info/">возможности CSS3</a> и внедряйте их в свои работы, не забывая про обратную совместимость с динозаврами.</li>
<li>Не превращайтесь в макетонарезочный автомат — мыслите на шаг вперёд дизайнера, помогайте ему и не нойте «он не предусмотрел состояние посещённых ссылок!», а просто сделайте это сами.</li>
<li>Фары и ремень!.. Точнее, грамотность и типографика. Тире, копирайты, кавычки, заголовки, списки, врезки, цитаты, форматы дат, телефонных номеров — всё мнообразие представления текста. Не поддавайтесь быдло-вебу и чат-стилю текста.</li>
</ol>]]></content:encoded>
			<wfw:commentRss>http://pepelsbey.net/feeder/?FeederAction=clicked&amp;feed=Articles+%28RSS2%29&amp;seed=http%3A%2F%2Fpepelsbey.net%2F2008%2F05%2Fsoviet-country%2F&amp;seed_title=%D0%A1%D1%82%D1%80%D0%B0%D0%BD%D0%B0+%D0%A1%D0%BE%D0%B2%D0%B5%D1%82%D0%BE%D0%B2/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Парадоксы разметки</title>
		<link>http://pepelsbey.net/feeder/?FeederAction=clicked&amp;feed=Articles+%28RSS2%29&amp;seed=http%3A%2F%2Fpepelsbey.net%2F2008%2F05%2Fcoding-paradoxes%2F&amp;seed_title=%D0%9F%D0%B0%D1%80%D0%B0%D0%B4%D0%BE%D0%BA%D1%81%D1%8B+%D1%80%D0%B0%D0%B7%D0%BC%D0%B5%D1%82%D0%BA%D0%B8</link>
		<comments>http://pepelsbey.net/feeder/?FeederAction=clicked&amp;feed=Articles+%28RSS2%29&amp;seed=http%3A%2F%2Fpepelsbey.net%2F2008%2F05%2Fcoding-paradoxes%2F&amp;seed_title=%D0%9F%D0%B0%D1%80%D0%B0%D0%B4%D0%BE%D0%BA%D1%81%D1%8B+%D1%80%D0%B0%D0%B7%D0%BC%D0%B5%D1%82%D0%BA%D0%B8#comments</comments>
		<pubDate>Mon, 19 May 2008 11:58:52 +0000</pubDate>
		<dc:creator>pepelsbey</dc:creator>
		
		<category><![CDATA[Заметки]]></category>

		<guid isPermaLink="false">http://pepelsbey.net/?p=35</guid>
		<description><![CDATA[И вроде пытаемся верстать семантически верно, и в голове почти сложилась чёткая картина того, как нужно размечать элементы — какие несут смысл, а о каких стоит забыть в силу их презентационной природы.

И тут приходят сомнения…

К примеру, нужно вам сверстать вводную часть книги, где речь идёт о принятых условных обозначениях:

В основном тексте книги для удобства будут [...]]]></description>
			<content:encoded><![CDATA[<p>И вроде пытаемся верстать семантически верно, и в голове почти сложилась чёткая картина того, как нужно размечать элементы — какие несут смысл, а о каких стоит забыть в силу их презентационной природы.</p>

<p>И тут приходят сомнения…</p>

<p>К примеру, нужно вам сверстать вводную часть книги, где речь идёт о принятых условных обозначениях:</p>

<blockquote><p>В основном тексте книги для удобства будут встречаться следующие обозначения: особенно важные моменты мы будем обозначать полужирным выделением, цитаты будут обозначены курсивом, фрагменты кода моноширинным шрифтом, а текст из предыдущих изданий будет выводиться перечёркнутым.</p></blockquote>

<p>Наша задача состоит в том, чтобы продемонстрировать на соответствующих словах примеры подобного выделения. Как же сходу разметит подобную информацию любитель <em>правильной</em> вёрстки? Примерно вот так:</p>

<ol class="code">
<li><code>В основном тексте книги для удобства будут встречаться следующие</code></li>
<li><code>обозначения: особенно важные моменты мы будем обозначать</code></li>
<li><code>&lt;strong&gt;полужирным&lt;/strong&gt; выделением, цитаты будут обозначены</code></li>
<li><code>&lt;cite&gt;курсивом&lt;/cite&gt;, фрагменты кода &lt;code&gt;моноширинным&lt;/code&gt;</code></li>
<li><code>шрифтом, а текст из предыдущих изданий</code></li>
<li><code>будет выводиться &lt;del&gt;перечёркнутым&lt;/del&gt;.</code></li>
</ol>

<p>А теперь давайте подумаем. Разметка документа при помощи семантических элементов предполагает выбор элемента в соответствии с его содержимым. И о чём же говорят нам эти слова: «полужирный, курсив, моноширинный, перечёркнутый»? Ну уж никак не о важности, цитировании, коде и версионности. Очевидно, что только о представлении, демонстрируя, как должны выглядеть соответствующие фрагменты текста. Давайте будем честны, текст стоит разметить вот так:</p>

<ol class="code">
<li><code>В основном тексте книги для удобства будут встречаться следующие</code></li>
<li><code>обозначения: особенно важные моменты мы будем обозначать</code></li>
<li><code>&lt;b&gt;полужирным&lt;/b&gt; выделением, цитаты будут обозначены</code></li>
<li><code>&lt;i&gt;курсивом&lt;/i&gt;, фрагменты кода &lt;tt&gt;моноширинным&lt;/tt&gt;</code></li>
<li><code>шрифтом, а текст из предыдущих изданий</code></li>
<li><code>будет выводиться &lt;s&gt;перечёркнутым&lt;/s&gt;.</code></li>
</ol>

<p>Только вот проблема — кое-какие из упомянутых элементов помечены как <em>нежелательные</em>. А ведь мы с вами только что создали <em>семантически верный</em> фрагмент документа. И что же делать? Честно говоря, не уверен. Знаю одно — сомневаться полезно, это пробуждает мысль от сна слепой уверенности.</p>

<p>А как думаете вы?</p>]]></content:encoded>
			<wfw:commentRss>http://pepelsbey.net/feeder/?FeederAction=clicked&amp;feed=Articles+%28RSS2%29&amp;seed=http%3A%2F%2Fpepelsbey.net%2F2008%2F05%2Fcoding-paradoxes%2F&amp;seed_title=%D0%9F%D0%B0%D1%80%D0%B0%D0%B4%D0%BE%D0%BA%D1%81%D1%8B+%D1%80%D0%B0%D0%B7%D0%BC%D0%B5%D1%82%D0%BA%D0%B8/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Высокотехнологично</title>
		<link>http://pepelsbey.net/feeder/?FeederAction=clicked&amp;feed=Articles+%28RSS2%29&amp;seed=http%3A%2F%2Fpepelsbey.net%2F2008%2F05%2Fhitechnical%2F&amp;seed_title=%D0%92%D1%8B%D1%81%D0%BE%D0%BA%D0%BE%D1%82%D0%B5%D1%85%D0%BD%D0%BE%D0%BB%D0%BE%D0%B3%D0%B8%D1%87%D0%BD%D0%BE</link>
		<comments>http://pepelsbey.net/feeder/?FeederAction=clicked&amp;feed=Articles+%28RSS2%29&amp;seed=http%3A%2F%2Fpepelsbey.net%2F2008%2F05%2Fhitechnical%2F&amp;seed_title=%D0%92%D1%8B%D1%81%D0%BE%D0%BA%D0%BE%D1%82%D0%B5%D1%85%D0%BD%D0%BE%D0%BB%D0%BE%D0%B3%D0%B8%D1%87%D0%BD%D0%BE#comments</comments>
		<pubDate>Wed, 07 May 2008 10:51:20 +0000</pubDate>
		<dc:creator>pepelsbey</dc:creator>
		
		<category><![CDATA[Заметки]]></category>

		<guid isPermaLink="false">http://pepelsbey.net/?p=37</guid>
		<description><![CDATA[Не могу обойти вниманием уникальное для рунета явление — WebHiTech — первый технологический конкурс, ориентированный на веб-стандарты. Вы только вчитайтесь в это заявление:

Миссия конкурса WebHiTech — посильное содействие повышению культуры веб-разработки в Рунете посредством популяризации уважительного отношения веб-разработчиков к духу и букве актуальных рекомендаций Консорциума W3C.

Весьма серьёзные условия участия сайта в конкурсе, а также состав [...]]]></description>
			<content:encoded><![CDATA[<p>Не могу обойти вниманием уникальное для рунета явление — <a href="http://webhitech.ru/">WebHiTech</a> — первый технологический конкурс, ориентированный на веб-стандарты. Вы только вчитайтесь в это заявление:</p>

<blockquote><p>Миссия конкурса WebHiTech — посильное содействие повышению культуры веб-разработки в Рунете посредством популяризации уважительного отношения веб-разработчиков к духу и букве актуальных рекомендаций Консорциума W3C.</p></blockquote>

<p>Весьма серьёзные <a href="http://webhitech.ru/rules/">условия участия</a> сайта в конкурсе, а также <a href="http://webhitech.ru/jury/">состав жюри</a> дают мне уверенность в том, что эти заявления о миссии не останутся просто словами, и мы с вами, в кои-то веки, увидим по-настоящему интересный конкурс, а как результат — лучшие с технологической точки зрения сайты рунета среди победителей.</p>

<p>Срок приёма заявок на участие — с 3 апреля по 25 сентября 2008 года включительно. Времени более чем достаточно. Причём скажу вам, как инсайдер, что уровень заявок на данный момент таков, что у любого мало-мальски приличного сайта сейчас есть шансы если и не на победу, то как минимум на хорошее место в общем рейтинге конкурса.</p>]]></content:encoded>
			<wfw:commentRss>http://pepelsbey.net/feeder/?FeederAction=clicked&amp;feed=Articles+%28RSS2%29&amp;seed=http%3A%2F%2Fpepelsbey.net%2F2008%2F05%2Fhitechnical%2F&amp;seed_title=%D0%92%D1%8B%D1%81%D0%BE%D0%BA%D0%BE%D1%82%D0%B5%D1%85%D0%BD%D0%BE%D0%BB%D0%BE%D0%B3%D0%B8%D1%87%D0%BD%D0%BE/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Найсбокс</title>
		<link>http://pepelsbey.net/feeder/?FeederAction=clicked&amp;feed=Articles+%28RSS2%29&amp;seed=http%3A%2F%2Fpepelsbey.net%2F2008%2F05%2Fnicebox%2F&amp;seed_title=%D0%9D%D0%B0%D0%B9%D1%81%D0%B1%D0%BE%D0%BA%D1%81</link>
		<comments>http://pepelsbey.net/feeder/?FeederAction=clicked&amp;feed=Articles+%28RSS2%29&amp;seed=http%3A%2F%2Fpepelsbey.net%2F2008%2F05%2Fnicebox%2F&amp;seed_title=%D0%9D%D0%B0%D0%B9%D1%81%D0%B1%D0%BE%D0%BA%D1%81#comments</comments>
		<pubDate>Thu, 01 May 2008 23:27:08 +0000</pubDate>
		<dc:creator>pepelsbey</dc:creator>
		
		<category><![CDATA[Заметки]]></category>

		<guid isPermaLink="false">http://pepelsbey.net/?p=36</guid>
		<description><![CDATA[<p>Вспоминая про <a href="http://tachisis.livejournal.com/498035.html">вечный конфликт дизайнера и верстальщика</a>, нельзя не упомянуть такую интересную тему, как отрисовка элементов форм в стиле сайта или, говоря по-птичьи, <em>кастомные контролы</em>. Мне вообще придётся много говорить не по-человечьи, поскольку адекватных эквивалентов некоторым терминам в русском языке пока не существует.</p>

<p>И ладно бы, если дизайнеру понравилось поле поиска со скруглёнными краями из Mac&#160;OS&#160;X. Другое дело, когда он берётся за кнопку «Обзор», выпадающие списки или чекбоксы с радиобатонами — остаётся только молча сжать кулаки. И не потому, что это долго и сложно делать… Скорее потому, что тем самым дизайнер заставляет пользователя думать «боже, что это за хрень такая?» — он прячет то, к чему пользователь привык в своей системе или браузере. А это может привести к тому, что он, потратив время на попытку разобраться в интерфейсе, может плюнуть на все и уйти.</p>

<p>Но бывает, что <em>очень надо</em>. Поэтому предлагаю вам одно из решений проблемы с чекбоксами и радиобатонами, прототип которого я использовал в проекте «<a href="http://shop.livejournal.ru/">Магазин&#160;одной&#160;футболки</a>» для Livejournal.</p>

<p><a href="http://pepelsbey.net/pro/2008/05/nicebox/">Найсбокс</a> — для того, чтобы увидеть решение в действии, нажмите «Nice!».</p>

<p>Суть метода заключается в том, что мы, во-первых, оборачиваем наши контролы прямо в&#160;<code>&#60;label&#62;</code>:</p>

<ol class="code">
    <li><code>&#60;legend&#62;Оркестра&#60;/legend&#62;</code></li>
    <li><code>&#60;ul&#62;</code></li>
    <li><code>    &#60;li&#62;</code></li>
    <li><code>        &#60;label for="first-1"&#62;</code></li>
    <li><code>            &#60;input type="radio" name="first" id="first-1" /&#62;</code></li>
    <li><code>            Представляет</code></li>
    <li><code>        &#60;/label&#62;</code></li>
    <li><code>    &#60;/li&#62;</code></li>
    <li><code>&#60;/ul&#62;</code></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>Вспоминая про <a href="http://tachisis.livejournal.com/498035.html">вечный конфликт дизайнера и верстальщика</a>, нельзя не упомянуть такую интересную тему, как отрисовка элементов форм в стиле сайта или, говоря по-птичьи, <em>кастомные контролы</em>. Мне вообще придётся много говорить не по-человечьи, поскольку адекватных эквивалентов некоторым терминам в русском языке пока не существует.</p>

<p>И ладно бы, если дизайнеру понравилось поле поиска со скруглёнными краями из Mac&nbsp;OS&nbsp;X. Другое дело, когда он берётся за кнопку «Обзор», выпадающие списки или чекбоксы с радиобатонами — остаётся только молча сжать кулаки. И не потому, что это долго и сложно делать… Скорее потому, что тем самым дизайнер заставляет пользователя думать «боже, что это за хрень такая?» — он прячет то, к чему пользователь привык в своей системе или браузере. А это может привести к тому, что он, потратив время на попытку разобраться в интерфейсе, может плюнуть на все и уйти.</p>

<p>Но бывает, что <em>очень надо</em>. Поэтому предлагаю вам одно из решений проблемы с чекбоксами и радиобатонами, прототип которого я использовал в проекте «<a href="http://shop.livejournal.ru/">Магазин&nbsp;одной&nbsp;футболки</a>» для Livejournal.</p>

<p><a href="http://pepelsbey.net/pro/2008/05/nicebox/">Найсбокс</a> — для того, чтобы увидеть решение в действии, нажмите «Nice!».</p>

<p>Суть метода заключается в том, что мы, во-первых, оборачиваем наши контролы прямо в&nbsp;<code>&lt;label&gt;</code>:</p>

<ol class="code">
    <li><code>&lt;legend&gt;Оркестра&lt;/legend&gt;</code></li>
    <li><code>&lt;ul&gt;</code></li>
    <li><code>    &lt;li&gt;</code></li>
    <li><code>        &lt;label for="first-1"&gt;</code></li>
    <li><code>            &lt;input type="radio" name="first" id="first-1" /&gt;</code></li>
    <li><code>            Представляет</code></li>
    <li><code>        &lt;/label&gt;</code></li>
    <li><code>    &lt;/li&gt;</code></li>
    <li><code>&lt;/ul&gt;</code></li>
</ol>

<p>А во-вторых, если у пользователя включён JavaScript, то мы назначаем форме <code>class="nice"</code>, а также ряд дополнительных классов для <code>&lt;input&gt;</code> и <code>&lt;label&gt;</code> — это прячет родные контролы далеко налево и рисует наши фоном для <code>&lt;label&gt;</code>:</p>

<ol class="code">
    <li><code>.form .lost {</code></li>
    <li><code>    position:relative;</code></li>
    <li><code>    left:-9999px;</code></li>
    <li><code>    }</code></li>
    <li><code>.form .radio-on {</code></li>
    <li><code>    background:url(../i/radio/on.gif) 0 50% no-repeat;</code></li>
    <li><code>    }</code></li>
</ol>

<p>Таким образом, просто смещая контролы налево, мы сохраняем высоту строки и избегаем прыжков при срабатывании JS-функции.</p>

<p>Стоит заметить, что данная методика не претендует на звание «решение под ключ», а всего лишь демонстрирует подход к решению проблемы. Кроссбраузерность вполне на уровне: <abbr title="Internet Explorer">IE</abbr>5–7, Firefox 2–3, Opera 9 (как минимум), Safari 3. Если вам важна совместимость с Safari 2, то придётся писать дополнительный костыль, который обеспечит встроенную в остальные браузеры связь ярлык/поле.</p>

<p>Остаётся только пожелать вам вменяемых дизайнеров и не использовать подобные методики.</p>]]></content:encoded>
			<wfw:commentRss>http://pepelsbey.net/feeder/?FeederAction=clicked&amp;feed=Articles+%28RSS2%29&amp;seed=http%3A%2F%2Fpepelsbey.net%2F2008%2F05%2Fnicebox%2F&amp;seed_title=%D0%9D%D0%B0%D0%B9%D1%81%D0%B1%D0%BE%D0%BA%D1%81/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Семантическая вёрстка. Часть вторая</title>
		<link>http://pepelsbey.net/feeder/?FeederAction=clicked&amp;feed=Articles+%28RSS2%29&amp;seed=http%3A%2F%2Fpepelsbey.net%2F2008%2F04%2Fsemantic-coding-2%2F&amp;seed_title=%D0%A1%D0%B5%D0%BC%D0%B0%D0%BD%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B0%D1%8F+%D0%B2%D1%91%D1%80%D1%81%D1%82%D0%BA%D0%B0.+%D0%A7%D0%B0%D1%81%D1%82%D1%8C+%D0%B2%D1%82%D0%BE%D1%80%D0%B0%D1%8F</link>
		<comments>http://pepelsbey.net/feeder/?FeederAction=clicked&amp;feed=Articles+%28RSS2%29&amp;seed=http%3A%2F%2Fpepelsbey.net%2F2008%2F04%2Fsemantic-coding-2%2F&amp;seed_title=%D0%A1%D0%B5%D0%BC%D0%B0%D0%BD%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B0%D1%8F+%D0%B2%D1%91%D1%80%D1%81%D1%82%D0%BA%D0%B0.+%D0%A7%D0%B0%D1%81%D1%82%D1%8C+%D0%B2%D1%82%D0%BE%D1%80%D0%B0%D1%8F#comments</comments>
		<pubDate>Thu, 24 Apr 2008 14:00:09 +0000</pubDate>
		<dc:creator>pepelsbey</dc:creator>
		
		<category><![CDATA[Статьи]]></category>

		<guid isPermaLink="false">http://pepelsbey.net/?p=33</guid>
		<description><![CDATA[<p>По материалам доклада «Семантическая вёрстка» на конференциях <a href="http://www.client2007.ru/">ClientSide&#160;2007</a> и <a href="http://uaweb.in.ua/">UA&#160;Web&#160;2008</a>.</p>

<h3>Современный взгляд на организацию кода</h3>

<p>Продолжение. Начало — «<a href="http://pepelsbey.net/2008/04/semantic-coding-1/">Семантическая вёрстка. Часть первая</a>»</p>

<h3>Второй уровень семантики: именование элементов</h3>

<p>Для создания второго смыслового уровня документа у нас есть два способа именования элементов: <code>id</code> и <code>class</code>. Каждый имеет свои особенности, в силу которых формируются типичные ситуации применения каждого из них.</p>

<p>Имя элемента характеризует его функциональность или содержимое: <em>упорядоченный список</em> (первый уровень семантики) <em>комментариев</em> (второй уровень семантики).</p>

<ol class="code">
<li><code>&#60;ol id="comments"&#62;</code></li>
<li><code>    &#60;li&#62;Первый&#60;/li&#62;</code></li>
<li><code>    &#60;li&#62;Второй&#60;/li&#62;</code></li>
<li><code>&#60;/ol&#62;</code></li>
</ol>

<p>Согласно спецификации, <code>id</code> — это имя уникального элемента, в большей степени подходит для создания <em>структурной</em> разметки документа:</p>

<ol class="code">
<li><code>&#60;body&#62;</code></li>
<li><code>    &#60;div id="header"&#62; … &#60;/div&#62;</code></li>
<li><code>    &#60;div id="content"&#62; … &#60;/div&#62;</code></li>
<li><code>    &#60;div id="footer"&#62; … &#60;/div&#62;</code></li>
<li><code>&#60;/body&#62;</code></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>По материалам доклада «Семантическая вёрстка» на конференциях <a href="http://www.client2007.ru/">ClientSide&nbsp;2007</a> и <a href="http://uaweb.in.ua/">UA&nbsp;Web&nbsp;2008</a>.</p>

<h3>Современный взгляд на организацию кода</h3>

<p>Продолжение. Начало — «<a href="http://pepelsbey.net/2008/04/semantic-coding-1/">Семантическая вёрстка. Часть первая</a>»</p>

<h3>Второй уровень семантики: именование элементов</h3>

<p>Для создания второго смыслового уровня документа у нас есть два способа именования элементов: <code>id</code> и <code>class</code>. Каждый имеет свои особенности, в силу которых формируются типичные ситуации применения каждого из них.</p>

<p>Имя элемента характеризует его функциональность или содержимое: <em>упорядоченный список</em> (первый уровень семантики) <em>комментариев</em> (второй уровень семантики).</p>

<ol class="code">
<li><code>&lt;ol id="comments"&gt;</code></li>
<li><code>    &lt;li&gt;Первый&lt;/li&gt;</code></li>
<li><code>    &lt;li&gt;Второй&lt;/li&gt;</code></li>
<li><code>&lt;/ol&gt;</code></li>
</ol>

<p>Согласно спецификации, <code>id</code> — это имя уникального элемента, в большей степени подходит для создания <em>структурной</em> разметки документа:</p>

<ol class="code">
<li><code>&lt;body&gt;</code></li>
<li><code>    &lt;div id="header"&gt; … &lt;/div&gt;</code></li>
<li><code>    &lt;div id="content"&gt; … &lt;/div&gt;</code></li>
<li><code>    &lt;div id="footer"&gt; … &lt;/div&gt;</code></li>
<li><code>&lt;/body&gt;</code></li>
</ol>

<p>В отдельном случае, <code>id</code> применяется для создания связей ярлык-поле при помощи атрибута <code>for</code> элемента <code>&lt;label&gt;</code>:</p>

<ol class="code">
<li><code>&lt;label for="full-name"&gt;</code></li>
<li><code>    Полное имя</code></li>
<li><code>&lt;/label&gt;</code></li>
<li><code>&lt;input type="text" id="full-name"/&gt;</code></li>
</ol>

<p>В то время, как <code>class</code> — это общее имя множества элементов и, соответственно, их общая семантическая роль. Множественные классы для одного элемента позволяют удобно комбинировать не только стили, но ещё смысловые значения нескольких имён. Данный фрагмент микроформата <a href="http://microformats.org/wiki/hcard">hCard</a> говорит нам о том, что эта ссылка ведёт на <em>сайт</em> (url) <em>организации</em> (org) под <em>названием</em> (fn) «Яндекс»:</p>

<ol class="code">
<li><code>&lt;a href="http://yandex.ru/" class="fn org url"&gt;</code></li>
<li><code>    Яндекс</code></li>
<li><code>&lt;/a&gt;</code></li>
</ol>

<p>Таким образом, применяя <code>id</code> для структурной разметки, мы создаём некие пространства имён, благодаря которым мы можем адресовать применение стилей для элементов с одинаковыми смысловыми ролями и, соответственно, именами классов. В качестве примера такой ситуации, можно привести оформление ссылок на <abbr title="Really Simple Syndication">RSS</abbr>-поток, которые в шапке и подвале документа, в нашем случае, должны отличаться цветами:</p>

<ol class="code">
<li><code>&lt;div id="header"&gt;</code></li>
<li><code>    &lt;a href="#" class="rss"&gt;RSS&lt;/a&gt;</code></li>
<li><code>&lt;/div&gt;</code></li>
<li><code>&lt;div id="footer"&gt;</code></li>
<li><code>    &lt;a href="#" class="rss"&gt;RSS&lt;/a&gt;</code></li>
<li><code>&lt;/div&gt;</code></li>
</ol>

<ol class="code">
<li><code>.rss {</code></li>
<li><code>    padding-left:20px;</code></li>
<li><code>    background:url(rss.png) no-repeat;</code></li>
<li><code>    }</code></li>
<li><code>#header .rss {</code></li>
<li><code>    color:#C00;</code></li>
<li><code>    }</code></li>
<li><code>#footer .rss {</code></li>
<li><code>    color:#069;</code></li>
<li><code>    }</code></li>
</ol>

<p>Семантически верное именование <abbr title="Hypertext Markup Language">HTML</abbr>-элементов при помощи атрибутов <code>id</code> и <code>class</code>, помимо самой семантики, привносит упорядоченность не только в сам документ, а ещё и в процесс разработки.</p>

<p>Правильно именованный код удобно читать, разбираться во всех его хитросплетениях, даже если этот код чужой. Личный опыт показывает, что при использовании последовательной и логичной политики именования элементов, а также отступов, формирующих дерево документа, практически полностью отпадает необходимость разметки кода <abbr title="Hypertext Markup Language">HTML</abbr>-комментариями, поясняющими где блок начался, где закончился и что в нём вообще содержится. Всё и так легко понимается из визуальной структуры и имён элементов.</p>

<h3>Третий уровень семантики: комбинация именованных элементов</h3>

<p>Основа интернета — это гипертекстуальность, т.е. связь документов при помощи гиперссылок, создающая единое информационное пространство сети. Говоря же о третьем уровне семантики, мы подразумеваем создание смысловых связей между семантическими единицами в документе.</p>

<p>Единственным внятным примером этого механизма на данный момент являются <a href="http://microformats.org">микроформаты</a> (μf). Идейным вдохновителем данной методики семантической разметки является Тантек Челик (Tantek Çelik), известный нам по работе над <abbr title="Internet Explorer">IE</abbr> for Mac, <a href="http://tantek.com/CSS/Examples/boxmodelhack.html">Box Model Hack</a> и проекту <a href="http://technorati.com/">Technorati</a>.</p>

<p>Микроформаты сами по себе являются большой темой для изучения, для чего я могу порекомендовать следить за обновлениями следующих ресурсов:</p>

<ul>
<li><a href="http://microformats.org/">Microformats</a> — официальный блог и wiki-документация</li>
<li><a href="http://microformatique.com/">Microformatique</a> — блог Джона Оллсопа (John Allsopp), автора <a href="http://www.amazon.com/gp/product/1590598148?ie=UTF8&#038;tag=microformatiq-20&#038;linkCode=as2&#038;camp=1789&#038;creative=9325&#038;creativeASIN=1590598148">книги о микроформатах</a></li>
<li><a href="http://habrahabr.ru/blog/microformats/">Микроформаты</a> — о микроформатах по-русски на Хабрхабре</li>
</ul>

<p>Я же продемонстрирую вам некоторые примеры превращения скверной разметки в разметку, содержащую новые смысловые уровни, и просто интересные примеры использования микроформатов.</p>

<p>В качестве первого примера можно привести разметку имени пользователя и маленькой иконки рядом, так называемого «головастика», который используется в сервисе блогов <a href="http://www.livejournal.com/">Livejournal.com</a>. Вот, каким образом это выглядит сейчас:</p>

<ol class="code">
<li><code>&lt;span class='ljuser' lj:user='kuteev' style='white-space: nowrap;'&gt;</code></li>
<li><code>    &lt;a href='#'&gt;</code></li>
<li><code>        &lt;img src='#' alt='[info]' width='17' height='17'</code></li>
<li><code>            style='vertical-align: bottom;</code></li>
<li><code>            border: 0; padding-right: 1px;' /&gt;</code></li>
<li><code>    &lt;/a&gt;</code></li>
<li><code>    &lt;a href='#'&gt;</code></li>
<li><code>        &lt;b&gt;kuteev&lt;/b&gt;</code></li>
<li><code>    &lt;/a&gt;</code></li>
<li><code>&lt;/span&gt;</code></li>
</ol>

<p>Давайте внимательно рассмотрим, какую же полезную информацию мы можем извлечь из приведённой разметки:</p>

<ul>
<li>Юзернейм не переносится, ибо <code>white-space: nowrap</code></li>
<li>Головастика выровняли по вертикали, отключили у него рамку, отступ и задали размеры — <code>width='17' height='17' style='…'</code></li>
<li>Кутеев, оказывается, полужирный, поскольку <code>&lt;b&gt;kuteev&lt;/b&gt;</code></li>
</ul>

<p>Впечатляющая подборка… Но давайте всё-таки попробуем улучшить эту разметку, используя микроформат <a href="http://microformats.org/wiki/hcard">hCard</a> и долю здравого смысла:</p>

<ol class="code">
<li><code>&lt;span class="ljuser vcard"&gt;</code></li>
<li><code>    &lt;a href="#" target="_blank"</code></li>
<li><code>        class="ico" title="Профиль"&gt;</code></li>
<li><code>        &lt;img src="#" alt="" /&gt;</code></li>
<li><code>    &lt;/a&gt;</code></li>
<li><code>    &lt;a href="#" target="_blank"</code></li>
<li><code>        class="fn nickname url" title="Журнал"&gt;</code></li>
<li><code>        kuteev</code></li>
<li><code>    &lt;/a&gt;</code></li>
<li><code>&lt;/span&gt;</code></li>
</ol>

<p>Что же нового мы теперь можем узнать:</p>

<ul>
<li>Мы имеем дело с мини-визиткой Кутеева, потому как <code>class="vcard"</code></li>
<li>Ссылка с головастика ведёт в профиль — мы уточнили <code>title="Профиль"</code></li>
<li>Никнейм Кутеева — kuteev, мы видим <code>class="fn nickname"</code></li>
<li>Ссылка с никнейма ведёт на сайт Кутеева — <code>class="nickname url"</code>, а точнее — в журнал, — мы уточнили <code>title="Журнал"</code></li>
<li>Пара нажатий — и Кутеев добавлен в мою адресную книгу</li>
</ul>

<p>Данный код был написан мною для проекта <a href="http://www.livejournal.ru/">Livejournal.ru</a>, где таким образом были размечены все имена пользователей. Надеюсь, что в скором будущем подобная разметка будет использоваться и на <a href="http://www.livejournal.com/">Livejournal.com</a>.</p>

<p>Следующий пример более абстрактен и демонстрирует разметку информации о компании при помощи микроформата <a href="http://microformats.org/wiki/hcard">hCard</a>, которая дополняется картой расположения офиса, при помощи <a href="http://code.google.com/apis/maps/">Google Maps API</a>:</p>

<ol class="code">
<li><code>&lt;div class="vcard"&gt;</code></li>
<li><code>    &lt;h1 class="fn org"&gt;Яндекс&lt;/h1&gt;</code></li>
<li><code>    &lt;dl&gt;</code></li>
<li><code>        &lt;dt&gt;Адрес:&lt;/dt&gt;</code></li>
<li><code>        &lt;dd class="adr"&gt;</code></li>
<li><code>            &lt;span class="postal-code"&gt;111033&lt;/span&gt;,</code></li>
<li><code>            &lt;span class="locality"&gt;Москва&lt;/span&gt;,</code></li>
<li><code>            &lt;span class="street-address"&gt;</code></li>
<li><code>                ул. Самокатная, дом 1</code></li>
<li><code>            &lt;/span&gt;</code></li>
<li><code>        &lt;/dd&gt;</code></li>
<li><code>    &lt;dl&gt;</code></li>
<li><code>    &lt;div id="map" class="geo"&gt;</code></li>
<li><code>        &lt;abbr class="latitude" title="55.7582"&gt;</code></li>
<li><code>            N 55° 75.82</code></li>
<li><code>        &lt;/abbr&gt;</code></li>
<li><code>        &lt;abbr class="longitude" title="37.6786"&gt;</code></li>
<li><code>            W 37° 67.86</code></li>
<li><code>        &lt;/abbr&gt;</code></li>
<li><code>    &lt;/div&gt;</code></li>
<li><code>&lt;/div&gt;</code></li>
</ol>

<ul>
<li>Мы имеем дело с визиткой организации и называется она «Яндекс» — <code>class="fn org"</code></li>
<li>У нас есть её структурно размеченный адрес: <code>postal-code</code>, <code>locality</code>, <code>street-address</code></li>
<li>Также нам известно точное географическое положение организации, обозначенное в в элементах <code>&lt;abbr&gt;</code>: <code>class="latitude"</code> и <code>title="55.7582"</code>, <code>class="longitude"</code> и <code>title="37.6786"</code></li>
<li>При помощи несложного JavaScript-кода и <a href="http://code.google.com/apis/maps/">Google Maps API</a> мы извлекаем информацию о координатах и рисуем в элементе с <code>id="map"</code> карту, спозиционированную точно в нужном месте</li>
<li>Пара нажатий — и «Яндекс» добавлен в мою адресную книгу</li>
</ul>

<p>Соответственно, вся информация из приведённых примеров становится доступна поисковым машинам и плагинам ваших браузеров, поскольку её разметка формализована в <a href="http://microformats.org/wiki/hcard">спецификации микроформата hCard</a>. Попробуйте сами:</p>

<ul>
<li>Плагины для Firefox — <a href="https://addons.mozilla.org/ru/firefox/addon/4106">Operator</a> и <a href="https://addons.mozilla.org/ru/firefox/addon/2240">Tails Export</a></li>
<li>Плагин для Safari — <a href="http://zappatic.net/safarimicroformats/">Safari Microformats</a></li>
</ul>

<h3>Семантика! Почему это важно</h3>

<p>Суммируя всё вышесказанное, постараемся собрать все основные преимущества семантической вёрстки, как для разработчика, так и для конечного пользователя:</p>

<h4>Повышение доступности сайта для альтернативных устройств просмотра</h4>

<p>Речь идёт о всех устройствах, альтернативных привычному десктопному браузеру: мобильные и голосовые браузеры, принтеры, поисковые роботы. Для всех из них очень полезен первый уровень семантики в документе — т.е. логичная разметка информации:</p>

<ul>
<li>Мобильный браузер легко обработает валидный код, не переполненный презентационной разметкой, который, в большинстве случаев, окажется ещё и компактнее. В случае с предварительной обработкой страницы, как происходит при работе с <a href="http://www.operamini.com/">Opera Mini</a>, мы получаем, по меньшей мере, два преимущества: отсутствие потенциально опасной необходимости выпрямлять табличный макет для умещения его в небольшой экран устройства и такую специфическую особенность, как сворачивание меню в один блок, с возможностью его развернуть. За счёт этого экономится место на экране, а работает это всё на основе обычных списков. Также, подобная практика разметки страниц, позволяет легко писать специальные файлы стилей для мобильных устройств, на основе единого макета.</li>
<li>Голосовой браузер правильно акцентирует каждый уровень заголовков, последовательно перечислит общие элементы списка, без необходимости продираться через каждую табличную строчку и ячейку макета, мешая и так непростому использованию сайтов людьми с ограниченными возможностями.</li>
<li>Создание версии для печати превращается либо в простое отключение стилей, либо в минимальное оформление документа, который уже и так готов для удобного чтения.</li>
<li>Поисковые машины оценят вашу работу. И речь идёт не только о весе ключевых слов в заголовке <code>&lt;h1&gt;</code>, вместо несуразности <code>&lt;td class="title"&gt;</code> и общем уменьшении мусорного кода на странице, но ещё и о всё более широко внедряемой поддержке микроформатов для более точного и подробного анализа ваших документов.</li>
</ul>

<h4>Использование языка в соответствии с его предназначением</h4>
<p>Упомянутая выше концепция <a href="http://microformats.org/wiki/posh">POSH</a> (Plain Old Semantic HTML) основывается, прежде всего, на использовании встроенных возможностей языка. Прежде чем работать с HTML, неплохо было бы изучить его. К примеру, по этой статье: «<a href="http://microformatique.com/?p=82">Встроенная семантика в HTML</a>» (Built in Semantics in HTML). Вполне вероятно, что после изучения всех возможностей HTML, вам больше не захочется называть вёрстку «дивной». Иначе говоря, использование вещей по их прямому назначению — это всегда наиболее оптимально.</p>

<h4>Самодокументируемый код</h4>
<p>При использовании второго уровня семантики в документе, а именно — именования элементов в соответствии с их содержимым или назначением, ваш код начинает звучать. Теперь это не просто набор бессмысленных классов вроде <code>border4px</code> или <code>no-margin-right</code>, а полноценный скелет вашего документа, который можно легко читать по внятно именованным ключевым элементам. Это не только упрощает разработку и поддержку сайтов, но ещё и является отличной основой для единого стиля вёрстки для целой команды, чтобы <em>работа</em> с кодом не превращалась в <em>борьбу</em> с кодом.</p>

<h4>Новые смысловые уровни документа, удобная работа с ними</h4>
<p>Речь, в данном случае, идёт о микроформатах, которые позволяют извлекать и интерпретировать максимально точно размеченную информацию из вашего документа, без использования сложных морфологических алгоритмов, всего лишь на основе формализованного синтаксиса. Мгновенный доступ к нужной информации средствами браузера, плагинов, веб-сервисов или поисковых машин — это уже сегодняшний день. Не опоздайте на уходящий поезд.</p>

<h3>О «шмемантике»</h3>

<p>Небольшая ремарка о понятии «семантика» относительно вёрстки. Это не попытка подвести серьёзную научную базу под саму вёрстку и технологии с ней связанные, и не игры во что-то высокое, светлое и элитарное. Семантическая вёрстка — это всего лишь набор идеологических установок и приёмов, которые помогут вам работать более уверенно и последовательно, создавая действительно качественную разметку. Если ваша задача просто «фигачить», вам сложно будет понять, о чём я, собственно, здесь рассказываю. По этой причине публикация «<a href="http://ay4.getalime.ru/blog/2008/04/24/semantics-shmemantics/">Семантика-шмемантика</a>» не может вызвать какой-либо дискуссии — мы говорим о разных вещах, хоть и используем одинаковую терминологию.</p>

<p>Напоследок — серия публикаций по теме, обязательных для ознакомления:</p>

<ul>
<li>Джон Оллсоп (John Allsopp) — «<a href="http://microformatique.com/?p=83">Semantics in HTML</a>», «<a href="http://microformatique.com/?p=82">Built in Semantics in HTML</a>»</li>
<li>Тантек Челик (Tantek Çelik) — «<a href="http://tantek.com/log/2002/12.html#L20021216">A Touch of Class</a>», «<a href="http://tantek.com/log/2007/04.html#d20t0823">The Importance of Being POSH</a>»</li>
<li>Джесс Скиннер (Jesse Skinner) — «<a href="http://www.thefutureoftheweb.com/blog/who-will-read-your-semantic-html">Who will read your Semantic HTML?</a>»</li>
</ul>]]></content:encoded>
			<wfw:commentRss>http://pepelsbey.net/feeder/?FeederAction=clicked&amp;feed=Articles+%28RSS2%29&amp;seed=http%3A%2F%2Fpepelsbey.net%2F2008%2F04%2Fsemantic-coding-2%2F&amp;seed_title=%D0%A1%D0%B5%D0%BC%D0%B0%D0%BD%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B0%D1%8F+%D0%B2%D1%91%D1%80%D1%81%D1%82%D0%BA%D0%B0.+%D0%A7%D0%B0%D1%81%D1%82%D1%8C+%D0%B2%D1%82%D0%BE%D1%80%D0%B0%D1%8F/feed/</wfw:commentRss>
		</item>
		<item>
		<title>CSS-фреймворки</title>
		<link>http://pepelsbey.net/feeder/?FeederAction=clicked&amp;feed=Articles+%28RSS2%29&amp;seed=http%3A%2F%2Fpepelsbey.net%2F2008%2F04%2Fcss-frameworks%2F&amp;seed_title=CSS-%D1%84%D1%80%D0%B5%D0%B9%D0%BC%D0%B2%D0%BE%D1%80%D0%BA%D0%B8</link>
		<comments>http://pepelsbey.net/feeder/?FeederAction=clicked&amp;feed=Articles+%28RSS2%29&amp;seed=http%3A%2F%2Fpepelsbey.net%2F2008%2F04%2Fcss-frameworks%2F&amp;seed_title=CSS-%D1%84%D1%80%D0%B5%D0%B9%D0%BC%D0%B2%D0%BE%D1%80%D0%BA%D0%B8#comments</comments>
		<pubDate>Tue, 22 Apr 2008 21:03:02 +0000</pubDate>
		<dc:creator>pepelsbey</dc:creator>
		
		<category><![CDATA[Заметки]]></category>

		<guid isPermaLink="false">http://pepelsbey.net/?p=32</guid>
		<description><![CDATA[Вашему вниманию предлагается видеозапись доклада «CSS-фреймворки», прозвучавшего на конференции РИТ-2008. Обзорный доклад-размышление о практической пользе CSS-фреймворков.


	


Для лучшего понимания некоторых моментов, не попавших в кадр, доступна сама презентация: CSS-фреймворки (PDF, 237 КБ), а также версия видео для iPod/iPhone: CSS-фреймворки (H.264, 66 МБ)]]></description>
			<content:encoded><![CDATA[<p>Вашему вниманию предлагается видеозапись доклада «CSS-фреймворки», прозвучавшего на конференции <a href="http://rit2008.ru/">РИТ-2008</a>. Обзорный доклад-размышление о практической пользе CSS-фреймворков.</p>

<p>
	<object type="application/x-shockwave-flash" data="http://video.rutube.ru/c0e163491a1bca7331ed784f69df8a27" width="549" height="464"><param name="movie" value="http://video.rutube.ru/c0e163491a1bca7331ed784f69df8a27"/><param name="allowFullScreen" value="true"/></object>
</p>

<p>Для лучшего понимания некоторых моментов, не попавших в кадр, доступна сама презентация: <a href="http://pepelsbey.net/img/2008/04/css-frameworks/css-frameworks.pdf">CSS-фреймворки</a> (PDF, 237 КБ), а также версия видео для iPod/iPhone: <a href="http://pepelsbey.net/img/2008/04/css-frameworks/css-frameworks.mp4">CSS-фреймворки</a> (H.264, 66 МБ)</p>]]></content:encoded>
			<wfw:commentRss>http://pepelsbey.net/feeder/?FeederAction=clicked&amp;feed=Articles+%28RSS2%29&amp;seed=http%3A%2F%2Fpepelsbey.net%2F2008%2F04%2Fcss-frameworks%2F&amp;seed_title=CSS-%D1%84%D1%80%D0%B5%D0%B9%D0%BC%D0%B2%D0%BE%D1%80%D0%BA%D0%B8/feed/</wfw:commentRss>
<enclosure url="http://pepelsbey.net/img/2008/04/css-frameworks/css-frameworks.mp4" length="69269779" type="video/mp4" />
		</item>
	</channel>
</rss>
