<?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>Пепелсбей.net</title>
	<atom:link href="http://pepelsbey.net/feed/" rel="self" type="application/rss+xml" />
	<link>http://pepelsbey.net</link>
	<description></description>
	<lastBuildDate>Fri, 06 Jan 2012 10:58:59 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Вёрстка со смыслом</title>
		<link>http://pepelsbey.net/2011/07/sense-coding/</link>
		<comments>http://pepelsbey.net/2011/07/sense-coding/#comments</comments>
		<pubDate>Fri, 01 Jul 2011 17:04:27 +0000</pubDate>
		<dc:creator>pepelsbey</dc:creator>
				<category><![CDATA[Заметки]]></category>

		<guid isPermaLink="false">http://pepelsbey.net/?p=489</guid>
		<description><![CDATA[Этой весной в Москве состоялась конференция РИТ 2011, на которой была представлена довольно сильная клиент-сайд секция. И пока одни видео только готовятся к публикации, а другие выкачиваются из RTMP-потока, в котором их спрятали ребята из COMDI, предлагаю вам посмотреть мой доклад «Вёрстка со смыслом. Новая семантика HTML5». Сама презентация, работающая прямо в браузере, доступна для внимательного изучения, а видео можно скачать на его странице на Vimeo. Остальные видео с конференции, имеющие [...]]]></description>
			<content:encoded><![CDATA[<p>Этой весной в Москве состоялась конференция <a href="http://ritconf.ru/">РИТ 2011</a>, на которой была представлена довольно сильная клиент-сайд секция. И пока одни видео только готовятся к публикации, а другие выкачиваются из RTMP-потока, в котором их спрятали ребята из COMDI, предлагаю вам посмотреть мой доклад «<a href="http://vimeo.com/25823931">Вёрстка со смыслом. Новая семантика HTML5</a>».</p>

<iframe src="http://player.vimeo.com/video/25823931?title=0&amp;byline=0&amp;portrait=0&amp;color=188418" width="610" height="343" frameborder="0" class="video-player"></iframe>

<p>Сама презентация, работающая прямо в браузере, <a href="http://pepelsbey.net/pres/sense-coding/">доступна для внимательного изучения</a>, а видео можно скачать <a href="http://vimeo.com/25823931">на его странице</a> на Vimeo. Остальные видео с конференции, имеющие отношение к клиент-сайд разработке, позже появятся на канале <a href="http://vimeo.com/channels/wstdays">Web Standards Days</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://pepelsbey.net/2011/07/sense-coding/feed/</wfw:commentRss>
		<slash:comments>70</slash:comments>
		</item>
		<item>
		<title>Возвращение Даркбокса</title>
		<link>http://pepelsbey.net/2010/12/darkbox-return/</link>
		<comments>http://pepelsbey.net/2010/12/darkbox-return/#comments</comments>
		<pubDate>Mon, 13 Dec 2010 08:43:23 +0000</pubDate>
		<dc:creator>pepelsbey</dc:creator>
				<category><![CDATA[Заметки]]></category>

		<guid isPermaLink="false">http://pepelsbey.net/?p=486</guid>
		<description><![CDATA[Самые давние читатели этого блога должны помнить серию заметок, посвящённых скрипту для красивого открытия картинок, написанному в подражание множественным «лайтбоксам»: Даркбокс и Даркбокс 2. С появления этой идеи минуло уже больше двух лет и, вроде бы, уже должны были появиться внятные решения, которые соответствуют всем заявленным в первой заметке условиям. Только вот до сих пор не видно на горизонте ничего приличного. Поэтому Даркбокс возвращается — отбросив версию и все приличия — [...]]]></description>
			<content:encoded><![CDATA[<figure class="small">
	<a href="http://pepelsbey.github.com/darkbox/"><img src="http://pepelsbey.net/pro/2010/12/darkbox-return/spinner.png" width="230" height="230" alt="Дакрбокс"></a>
</figure>

<p>Самые давние читатели этого блога должны помнить серию заметок, посвящённых скрипту для красивого открытия картинок, написанному в подражание множественным «лайтбоксам»: <a href="http://pepelsbey.net/2008/11/darkbox/">Даркбокс</a> и <a href="http://pepelsbey.net/2009/02/darkbox-2/">Даркбокс 2</a>. С появления этой идеи минуло уже больше двух лет и, вроде бы, уже должны были появиться внятные решения, которые соответствуют всем <a href="http://pepelsbey.net/2008/11/darkbox/">заявленным в первой заметке</a> условиям. Только вот до сих пор не видно на горизонте ничего приличного. Поэтому Даркбокс возвращается — отбросив версию и все приличия — прямиком на <a href="https://github.com/pepelsbey/darkbox">новомодный Github</a>. Столь же красивый и простой — <a href="http://pepelsbey.github.com/darkbox/">встречайте!</a></p>

<h2>Технологические изменения</h2>

<p>Прежде всего, код был полностью переписан в полном соответствии с традициями последнего времени — то есть не мной. Игры в эффективное программирование я, к счастью, бросил. Автором нового кода является <a href="http://jahson.moikrug.ru/">Олег Рощупкин</a>, нескучный программист и коллега по песочнице ещё с <a href="http://webmascon.com/">вебмасконовских</a> времён. Новая версия скрипта некоторое время проходила испытания как на этом сайте, так и на проекте «<a href="http://web-standards.ru/">Веб-стандарты</a>», пока в один чудесный день не появилась <a href="https://github.com/pepelsbey/darkbox">на GitHub</a>. Но что-то мешало мне расслабиться и публично заявить о новинке. Всё-таки HTML- и CSS-коду исполнилось почти два года, за которые я успел научиться чему-то новому. Поэтому вся структура и стили были радостно переписаны с нуля.</p>

<p>В основу новой HTML-стуктуры был положен принцип <em>состояний</em>, который был успешно опробован для проекта <a href="https://github.com/pepelsbey/openplayer">Open Player</a>, который всё ещё ждёт своего часа и гениального JavaScript-программиста, но об этом в другой раз. Суть принципа сводится к тому, что каждый модификатор, изменяющий состояние всей структуры, применяется к корневому элементу и видоизменяет все нужные элементы через каскад. Это позволяет окончательно очистить JavaScript от оформительских штучек и минимизировать количество операций с атрибутами <code>class</code>. Вот так выглядит код открытой картинки:</p>

<pre>
	<code>&lt;div class="darkbox darkbox-on darkbox-loaded darkbox-done"&gt;</code>
	<code>    &lt;div class="darkbox-shadow"&gt;&lt;/div&gt;</code>
	<code>    &lt;div class="darkbox-canvas"&gt;</code>
	<code>        &lt;img src="picture.jpg" alt=""&gt;</code>
	<code>        &lt;div class="darkbox-button darkbox-button-left" title="Close"&gt;&lt;/div&gt;</code>
	<code>    &lt;/div&gt;</code>
	<code>&lt;/div&gt;</code>
</pre>

<p>Как вы можете видеть, вся история открытия картинки записана в атрибуте <code>class</code> корневого элемента. Пройдёмся по ней с самого начала:</p>

<ol>
	<li>По клику пишем на страницу базовый класс <code>darkbox</code>;</li>
	<li>Инициализируем его и готовим к загрузке при помощи <code>darkbox-on</code>;</li>
	<li>Готовимся к тому, чтобы красиво показать загруженную картинку: <code>darkbox-loaded</code>;</li>
	<li>Завершаем все действия, вешаем обработчики закрытия и показываем крестик: <code>darkbox-done</code>.</li>
</ol>

<p>Как только картинку закрыли, все упомянутые классы успешно очищаются и корневой <code>darkbox</code>, притаившись как тот партизан, продолжает ждать новых вызовов, чтобы повторить описанное упражнение. Исключение из упомянутого принципа состояний только одно — расположение кнопки закрытия окна слева или справа, в зависимости от платформы. Это класс оказался настолько специфическим, что крайне неуместно смотрелся на корневом элементе.</p>

<p>Упомянутые состояния также позволили более наглядно записать CSS-код: теперь он структурирован по принципу базовый класс → модификаторы. Более того, из-за этих чисто архитектурных решений значительно упростился файл хаков для IE, теперь он содержит всего одно правило для IE7, позволяющее окончательно сбросить полупрозрачность, которая задаётся в JavaScript при помощи фильтров:</p>

<pre>
	<code>* + HTML .darkbox-done .darkbox-canvas {</code>
	<code>    filter:none !important;</code>
	<code>    }</code>
</pre>

<p>Поддержка IE6 осознанно не предусмотрена, однако <em>магическая сила open source</em> позволит вам не только дописать нужный уровень поддержки, но ещё и предложить её в виде патча к существующему проекту <a href="https://github.com/pepelsbey/darkbox">прямо на GitHub</a>. Дерзайте.</p>

<h2>Функциональные изменения</h2>

<p>Благодаря серьёзному подходу Олега, скрипт теперь умеет обрабатывать битые картинки, для которых не случилось заветного события <code>load</code>. Оформляется это соответствующим запретительным значком. Мои же попытки освежить CSS-код привели к тому, что теперь для анимации загрузочного спиннера используется не анимированный GIF, а восемь последовательно смещающихся состояний спиннера, заключённых в один вертикальный спрайт. Это позволяет получить гораздо более чёткий и аккуратный спиннер, благодаря альфа-прозрачности в PNG-24.</p>

<figure class="large">
	<img src="http://pepelsbey.net/pro/2010/12/darkbox-return/sprite.png" width="670" height="80" alt="Спрайт">
	<figcaption>Кадры анимации спиннера, развёрнутые для красоты горизонтально</figcaption>
</figure>

<p>Другой приятной фичей, появившейся в новой версии, является процесс анимации картинки от загрузчика до её полных размеров. Раньше загрузчик пролетал до полного размера картинки и только потом появлялась она сама. Сейчас картинка появляется в рамках загрузчика и увеличивается вместе с ним либо до полных размеров картинки, либо до размеров окна, если вдруг не удалось вписаться. Плавность анимации картинки разнится от браузера к браузеру, но выглядит вполне сносно, делая происходящее в браузере более интуитивно понятным.</p>

<h2>Использование скрипта</h2>

<p>Для того, чтобы заставить все эти чудеса работать на ваших страницах, нужно сделать несколько простых вещей. И если описывать все шаги его подключения, то становится ясно, что этот скрипт предназначен не для начинающих сайтостроителей, мол, <q>подключил один JavaSript-файл и погнали</q> — от этого я как раз и пытался уйти, задумывая этот скрипт. Напротив, если вы умеете читать код и понимаете что и как нужно подключить, чтобы всё заработало — то вы поймёте всё из <a href="http://pepelsbey.github.com/darkbox/">предоставленного примера</a>.</p>

<p>Остаётся только добавить список файлов, необходимых для работы скрипта, примерно в таком порядке — от оформления к динамике:</p>

<ul>
	<li>Стили: <code>jquery.darkbox.css</code> и <code>jquery.darkbox.ie.css</code>;</li>
	<li>Картинки: <code>close.png</code>, <code>error.png</code> и <code>spinner.png</code> из папки <code>i</code>;</li>
	<li>Библиотека jQuery последней версии, можно использовать статику от <a href="http://yandex.st/jquery/1.4.4/jquery.min.js">Яндекса</a> или <a href="http://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js">Google</a>;</li>
	<li>Минифицированный файл скрипта: <code>jquery.darkbox.min.js</code>.</li>
</ul>

<p>Весь этот суповой набор можно скачать со <a href="https://github.com/pepelsbey/darkbox">страницы проекта на GitHub</a>. Там же, <a href="https://github.com/pepelsbey/darkbox/issues">в разделе Issues</a>, вы можете оставить свои замечания, сообщения об ошибках и даже пожелания для будущих версий. Однако это никоим образом не лишает вас возможности порезвиться в комментариях к этому посту.</p>]]></content:encoded>
			<wfw:commentRss>http://pepelsbey.net/2010/12/darkbox-return/feed/</wfw:commentRss>
		<slash:comments>29</slash:comments>
		</item>
		<item>
		<title>Веб в кривых. Второе рождение SVG</title>
		<link>http://pepelsbey.net/2010/11/web-in-curves/</link>
		<comments>http://pepelsbey.net/2010/11/web-in-curves/#comments</comments>
		<pubDate>Tue, 09 Nov 2010 00:34:04 +0000</pubDate>
		<dc:creator>pepelsbey</dc:creator>
				<category><![CDATA[Заметки]]></category>

		<guid isPermaLink="false">http://pepelsbey.net/?p=484</guid>
		<description><![CDATA[Пока я мучаю стопку своих черновиков в попытке опубликовать что-нибудь эпическое, предлагаю вам посмотреть видео-запись моего доклада «Веб в кривых. Второе рождение SVG», прозвучавшего месяц назад в Самаре на 404 фестивале. Устраивать вечеринку в ночь на второй день конференции было ошибкой, поэтому прошу простить некоторую мою помятость и угрюмость. Строго говоря, этот видео не претендует на сенсацию, поскольку ещё в сентябре была опубликована аналогичная запись из Киева, однако [...]]]></description>
			<content:encoded><![CDATA[<p>Пока я мучаю стопку своих черновиков в попытке опубликовать что-нибудь эпическое, предлагаю вам посмотреть видео-запись моего доклада «<a href="http://pepelsbey.net/pres/web-in-curves/">Веб в кривых. Второе рождение SVG</a>», прозвучавшего месяц назад в Самаре на <a href="http://2010.404fest.ru/">404 фестивале</a>. Устраивать вечеринку в ночь на второй день конференции было ошибкой, поэтому прошу простить некоторую мою помятость и угрюмость.</p>

<iframe src="http://player.vimeo.com/video/17587609?title=0&amp;byline=0&amp;portrait=0&amp;color=188418" width="609" height="457" frameborder="0" class="video-player"></iframe>

<p>Строго говоря, этот видео не претендует на сенсацию, поскольку ещё в сентябре была опубликована <a href="http://web-standards.ru/events/wsd-kiev-2010/#web-in-curves">аналогичная запись из Киева</a>, однако в этой версии доклада демонстрируются некоторые новые демки и гораздо лучше видно саму презентацию. Для самых любопытных — <a href="http://pepelsbey.net/pres/web-in-curves/">её оригинал</a> с живыми примерами.</p>]]></content:encoded>
			<wfw:commentRss>http://pepelsbey.net/2010/11/web-in-curves/feed/</wfw:commentRss>
		<slash:comments>21</slash:comments>
		</item>
		<item>
		<title>HTML5 ещё вчера</title>
		<link>http://pepelsbey.net/2010/09/html5-yesterday/</link>
		<comments>http://pepelsbey.net/2010/09/html5-yesterday/#comments</comments>
		<pubDate>Sat, 25 Sep 2010 06:15:07 +0000</pubDate>
		<dc:creator>pepelsbey</dc:creator>
				<category><![CDATA[Заметки]]></category>

		<guid isPermaLink="false">http://pepelsbey.net/?p=482</guid>
		<description><![CDATA[3 июня в Этажах меня поймал Костя Оснос и взял интервью для проекта Амби Маркетинг. Приятно, когда вопросы тебе задаёт человек, который сам хорошо разбирается в предмете разговора. Пусть полежит здесь — для тех, кто не видел. Попытки использовать видео плеер SublimeVideo для вставки видео провалились — скрипт оказался слишком глючный.]]></description>
			<content:encoded><![CDATA[<p>3 июня в <a href="http://www.loftprojectetagi.ru/">Этажах</a> меня поймал <a href="http://const-osnos.moikrug.ru/">Костя Оснос</a> и взял интервью для проекта <a href="http://www.youtube.com/AmbiMarketing">Амби Маркетинг</a>. Приятно, когда вопросы тебе задаёт человек, который сам хорошо разбирается в предмете разговора. Пусть полежит здесь — для тех, кто не видел.</p>

<iframe src="http://player.vimeo.com/video/17586586?title=0&amp;byline=0&amp;portrait=0&amp;color=188418" width="609" height="343" frameborder="0" class="video-player"></iframe>

<p>Попытки использовать видео плеер <a href="http://sublimevideo.net/">SublimeVideo</a> для вставки видео провалились — скрипт оказался слишком глючный.</p>]]></content:encoded>
			<wfw:commentRss>http://pepelsbey.net/2010/09/html5-yesterday/feed/</wfw:commentRss>
		<slash:comments>24</slash:comments>
		</item>
		<item>
		<title>Не пропустите этой осенью</title>
		<link>http://pepelsbey.net/2010/09/dont-miss/</link>
		<comments>http://pepelsbey.net/2010/09/dont-miss/#comments</comments>
		<pubDate>Sat, 11 Sep 2010 23:12:43 +0000</pubDate>
		<dc:creator>pepelsbey</dc:creator>
				<category><![CDATA[Заметки]]></category>

		<guid isPermaLink="false">http://pepelsbey.net/?p=483</guid>
		<description><![CDATA[Предлагаю вашему вниманию короткий анонс интересных событий этой осени. В каждом из них я как-нибудь, да участвую. Возможно, такой формат анонсов приживётся и будет появляться регулярно. Посмотрим, а пока: Конкурс WebHiTech Единственный в своём роде технологический конкурс, за непредвзятость и высокую квалификацию которого я могу ручаться головой. Хотя бы потому, что я уже третий год участвую в жюри рука об руку с настоящими зубрами от веб-разработки. Заявки на конкурс начали принимать ещё в конце августа, но у вас [...]]]></description>
			<content:encoded><![CDATA[<p>Предлагаю вашему вниманию короткий анонс интересных событий этой осени. В каждом из них я как-нибудь, да участвую. Возможно, такой формат анонсов приживётся и будет появляться регулярно. Посмотрим, а пока:</p>

<h2><a href="http://2010.webhitech.ru/">Конкурс WebHiTech</a></h2>
<p>Единственный в своём роде технологический конкурс, за непредвзятость и высокую квалификацию которого я могу ручаться головой. Хотя бы потому, что я уже третий год участвую в жюри рука об руку с <a href="http://2010.webhitech.ru/jury/">настоящими зубрами</a> от веб-разработки. Заявки на конкурс начали принимать ещё в конце августа, но у вас ещё есть время до<strong> 29 октября</strong>, чтобы заявить либо собственный проект, либо — внимание! — <em>любой другой</em> высокотехнологичный проект, достойный участия в конкурсе. Читайте <a href="http://2010.webhitech.ru/rules/">правила конкурса</a>, отправляйте ваши заявки, и до встречи на церемонии награждения!</p>

<h2><a href="http://webstandardsdays.ru/">Встреча «Web Standards Days»</a></h2>
<p>Шапито под названием «Web Standards Days», после долгих странствий по свету, докатилось и до Киева, где <strong>18 сентября</strong> состоится очередная встреча с участниками проекта «<a href="http://web-standards.ru/">Веб-стандарты</a>» и просто хорошими разработчиками, которые прочитают вам <a href="http://webstandardsdays.ru/#schedule">доклады</a>, ответят на вопросы и может быть даже немного развлекут. Участие во встрече <em>строго бесплатное</em>, для регистрации нужно всего лишь отправить <a href="http://webstandardsdays.ru/#register">простую форму</a>. Торопитесь — осталась всего неделя, а зал, как выяснилось, совсем не резиновый.</p>

<h2><a href="http://www.smartme.com.ua/semantika-css-workshop/">Мастер-класс «Современная вёрстка»</a></h2>
<p>На следующий день после встречи «Web Standards Days», то есть <strong>19 сентября</strong>, в Киеве пройдёт не менее интересный мастер-класс, провести который меня пригласила площадка <a href="http://www.smartme.com.ua/">SmartMe</a>. Мастер-класс будет сработан <em>под ключ</em> и расскажет о трёх основных аспектах современной вёстки: о семантике, стилях и графике. Участие платное, но цены совсем не кусаются.</p>

<h2><a href="http://2010.404fest.ru/">Фестиваль «404»</a></h2>
<p><strong>9–10 октября</strong> в Самаре пройдёт одна из моих самых любимых конференций, которую организовывают не менее симпатичные студии <a href="http://turbomilk.ru/">Турбомилк</a> и <a href="http://dominion.ru/">Доминион</a>. Роскошная <a href="http://2010.404fest.ru/themes/">программа</a> на два дня — это не только куча интересных докладов, но ещё и целых две афтепати! Если вы не сможете приехать на Web Standards Days в Киев, то у вас будет отличный шанс услышать мой доклад «Веб в кривых. Второе рождение SVG» в Самаре.</p>

<p>В общем, скучать этой осенью вам не придётся. Увидимся!</p>]]></content:encoded>
			<wfw:commentRss>http://pepelsbey.net/2010/09/dont-miss/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Цветосмешение</title>
		<link>http://pepelsbey.net/2010/08/color-blending/</link>
		<comments>http://pepelsbey.net/2010/08/color-blending/#comments</comments>
		<pubDate>Thu, 12 Aug 2010 22:32:56 +0000</pubDate>
		<dc:creator>pepelsbey</dc:creator>
				<category><![CDATA[Заметки]]></category>

		<guid isPermaLink="false">http://pepelsbey.net/?p=481</guid>
		<description><![CDATA[Размытие как оно есть Современный дизайн просто помешан на спецэффектах, он, можно сказать, только ими и живёт. И это ничего, лишь бы со вкусом. Приходится иногда делать такую штуку как размытие или fade-out. Видимо из-за некоторых проблем с реализацией text-overflow:ellipsis в браузерах, этот спецэффект получил некоторую популярность. Суть его сводится к тому, чтобы положить на объекты, которые не помещаются в рамки родителя, некую картинку, плавно переходящую от прозрачности к сплошному цвету. Мол, не поместилось — прокрутите или сделайте браузер пошире. [...]]]></description>
			<content:encoded><![CDATA[<figure class="small">
	<img src="http://pepelsbey.net/pro/2010/08/color-blending/fade-out.png" width="230" height="154" alt="Размытие как оно есть">
	<figcaption>Размытие как оно есть</figcaption>
</figure>

<p>Современный дизайн просто помешан на спецэффектах, он, можно сказать, только ими и живёт. И это ничего, лишь бы со вкусом. Приходится иногда делать такую штуку как <q>размытие</q> или <q>fade-out</q>. Видимо из-за некоторых проблем с реализацией <code>text-overflow:ellipsis</code> в браузерах, этот спецэффект получил некоторую популярность. Суть его сводится к тому, чтобы положить на объекты, которые не помещаются в рамки родителя, некую картинку, плавно переходящую от прозрачности к сплошному цвету. Мол, не поместилось — прокрутите или сделайте браузер пошире. Простая штука, на самом деле.</p>

<p>И всё бы ничего, но в какой-то момент я стал замечать, что <em>выведенный из цвета в ноль градиент</em> как-то не слишком точно ложится на <em>тот же самый цвет</em>. Покрутил-повертел: вроде не цветовые профили, да и цвета не напутал. Отложил, забылось.</p>

<p>И тут сегодня мне приходит письмо: мол, такие дела — как-то всё странно и плохо накладывается, вот вам тестовый пример. Спасибо, — говорю, — посмотрим. Посмотрел: и правда, какая-то чертовщина. Скажу сразу, внятного объяснения я так и не нашёл. Так вот…</p>

<h2>Эксперимент</h2>

<p>Сначала рисуем в Фотошопе пять квадратов:</p>

<ul>
	<li>Квадратная шейпа, заливка (fill) уведена в ноль;</li>
	<li>внутри эффектом наложен горизонтальный линейный градиент: от выбранного цвета к нему же;</li>
	<li>левая часть градиента уведена в нулевую прозрачность.</li>
</ul>

<p>Квадратные шейпы положены рядом, под каждой из них помещён растровый квадрат со сплошной заливкой, соответствующей основному цвету градиента. Режим смешения (blending mode) каждого из слоёв выставлен в «Normal». Тем самым, мы избавляемся от любых визуальных проявлений градиента. Экспортированная в PNG-8 картинка получается такой:</p>

<figure class="large">
	<a href="http://pepelsbey.net/pro/2010/08/color-blending/photoshop.png" rel="darkbox"><img src="http://pepelsbey.net/pro/2010/08/color-blending/photoshop-thumb.png" width="670" height="134" alt="Пять цветных квадратов, нарисованных в Фотошопе"></a>
	<figcaption>Пять цветных квадратов, нарисованных в Фотошопе</figcaption>
</figure>

<p>Любые попытки потрогать её пипеткой, приводят ровно к пяти цветам, как и ожидалось. Дальше верстаем такие же пять квадратов размером 200 × 200 пикселов. Каждому из них присваивается класс, накладывающий градиентную картинку (полупрозрачный PNG-24, почищенный при помощи <a href="http://imageoptim.pornel.net/">ImageOptim</a>) на соответствующий фоновый цвет:</p>

<pre>
	<code>.color-000 {</code>
	<code>    background:#000 url(000.png) no-repeat;</code>
	<code>    }</code>
	<code>.color-CCC {</code>
	<code>    background:#CCC url(CCC.png) no-repeat;</code>
	<code>    }</code>
	<code>.color-C00 {</code>
	<code>    background:#C00 url(C00.png) no-repeat;</code>
	<code>    }</code>
	<code>.color-090 {</code>
	<code>    background:#090 url(090.png) no-repeat;</code>
	<code>    }</code>
	<code>.color-069 {</code>
	<code>    background:#069 url(069.png) no-repeat;</code>
	<code>    }</code>
</pre>

<p>Такое наложение имитирует слои в Фотошопе. В браузерах вышла следующая картина:</p>

<figure class="large">
	<a href="http://pepelsbey.net/pro/2010/08/color-blending/browser.png" rel="darkbox"><img src="http://pepelsbey.net/pro/2010/08/color-blending/browser-thumb.png" width="670" height="134" alt="Пять цветных квадратов, свёрстанных в браузере"></a>
	<figcaption>Пять цветных квадратов, свёрстанных в браузере</figcaption>
</figure>

<p><a href="http://pepelsbey.net/pro/2010/08/color-blending/">Свёрстанная страница</a> выглядит так же, как экспортированная картинка. Даже если очень сильно приблизить. Но это если на первый взгляд, а если повозить по этому делу пипеткой (попробуйте сами), то получается что-то странное: цвет начинает дрожать. Например, мой любимый оттенок красного <code>#CC0000</code> прыгает красной составляющей в <code>#CB0000</code> (или 204–203, если в системе <abbr title="Red Green Blue">RGB</abbr>). Исключение составил чёрный квадрат и, как выяснилось, другие простые цвета (<code>#00F</code>, <code>#FF0</code> и так далее) — они состоят из одного сплошного цвета.</p>

<p>Проблемы, как известно, передвигаются стаями. Поэтому давайте усложним задачу и протестируем это цветосмешение в разных браузерах. Сделаем скриншоты в семи браузерах, составим их вместе и удалим из картинок основной цвет каждого из квадратов, чтобы понять по какому принципу происходит смешение. Результат обескураживает:</p>

<figure class="large">
	<a href="http://pepelsbey.net/pro/2010/08/color-blending/striped.png" rel="darkbox"><img src="http://pepelsbey.net/pro/2010/08/color-blending/striped-thumb.png" width="670" height="235" alt="Сравнение пяти цветных квадратов в семи разных браузерах"></a>
	<figcaption>Сравнение пяти цветных квадратов в семи разных браузерах</figcaption>
</figure>

<p>Смешение разнится не только в разных браузерах и разных системах, но ещё и для разных цветов. На этом этапе любые эксперименты хочется прекратить и громко спросить кого-то: «Что за дела, шеф?!» Ответа, как обычно, не следует. Поэтому попробуем предположить что-нибудь самостоятельно.</p>

<p>Никаких проблем с гаммой, цветовыми профилями и другими <q>чанками</q> в PNG быть не может — файлы почищены всеми возможными утилитами. Единственное, что приходит мне в голову — это нехватка цветов в некоторых цветовых диапазонах, которая заставляет браузеры делать смешение (dithering) пограничных цветов для имитации недостающего. Но почему в некоторых диапазонах всё проходит гладко, да и сам Фотошоп справляется на «отлично»…</p>

<p>Кажется у меня ещё осталась «Помощь зала». Идеи?</p>

<p><strong>UPD:</strong> В комментариях были предложены весьма достойные версии происходящего: <a href="http://pepelsbey.net/2010/08/color-blending/#comment-4742">первая</a> и <a href="http://pepelsbey.net/2010/08/color-blending/#comment-4760">вторая</a> — обе, в общем-то, об одном и том же: сложности округления.</p>]]></content:encoded>
			<wfw:commentRss>http://pepelsbey.net/2010/08/color-blending/feed/</wfw:commentRss>
		<slash:comments>26</slash:comments>
		</item>
		<item>
		<title>Нечего стыдиться</title>
		<link>http://pepelsbey.net/2010/04/nothing-to-be-ashamed-of/</link>
		<comments>http://pepelsbey.net/2010/04/nothing-to-be-ashamed-of/#comments</comments>
		<pubDate>Thu, 08 Apr 2010 21:03:38 +0000</pubDate>
		<dc:creator>pepelsbey</dc:creator>
				<category><![CDATA[Заметки]]></category>

		<guid isPermaLink="false">http://pepelsbey.net/?p=480</guid>
		<description><![CDATA[Традиционный CSS Naked Day — хороший повод подумать о семантической разметке и просто удивить посетителей вашего сайта. Присоединяйтесь, ещё не поздно ;)]]></description>
			<content:encoded><![CDATA[<p>Традиционный <a href="http://naked.dustindiaz.com/">CSS Naked Day</a> — хороший повод подумать о семантической разметке и просто удивить посетителей вашего сайта. Присоединяйтесь, ещё не поздно ;)</p>]]></content:encoded>
			<wfw:commentRss>http://pepelsbey.net/2010/04/nothing-to-be-ashamed-of/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>Вечная бета</title>
		<link>http://pepelsbey.net/2010/01/eternal-beta/</link>
		<comments>http://pepelsbey.net/2010/01/eternal-beta/#comments</comments>
		<pubDate>Tue, 12 Jan 2010 13:56:21 +0000</pubDate>
		<dc:creator>pepelsbey</dc:creator>
				<category><![CDATA[Заметки]]></category>

		<guid isPermaLink="false">http://pepelsbey.net/?p=477</guid>
		<description><![CDATA[Когда коду сайта исполняется полтора года, а дизайну целых два, то становится как-то совсем неудобно. Нет — всё работает, живёт и периодически даже патчится, но жизнь требует чего-то нового. Поэтому ещё в августе прошлого года была начата разработка новой версии этого сайта. Было решено не только сделать новый дизайн и подновить код, но и сильно упростить [...]]]></description>
			<content:encoded><![CDATA[<p>Когда коду сайта исполняется <a href="http://pepelsbey.net/2008/11/like-a-virgin/">полтора года</a>, а дизайну <a href="http://pepelsbey.net/2008/02/second-breath/">целых два</a>, то становится как-то совсем неудобно. Нет — всё работает, живёт и периодически даже патчится, но жизнь требует чего-то нового. Поэтому ещё в августе прошлого года была начата разработка новой версии этого сайта. Было решено не только сделать новый дизайн и подновить код, но и сильно упростить архитектуру сайта, раз уж изначальная задумка с заметками и статьями, по сути, провалилась.</p>

<h2>Архитектура</h2>

<p>После продолжительной агонии, с сайта исчезли рубрики и теперь существует всего одна главная витрина с последним постом и списком всех публикаций, спрятанным в разворачивающуюся гармошку. Основным средством для поиска предыдущих публикаций стала вспомогательная страница «<a href="http://pepelsbey.net/search/">Поиск</a>», которая содержит упомянутый выше архив публикаций и форму поиска — пока силами Яндекса, но потом, возможно, появится возможность выбирать и Google.</p>

<p>Меньше всего изменений пришлось на страницу «<a href="http://pepelsbey.net/author/">Об авторе</a>», на которой добавилось несколько социальных сервисов и рабочий e-mail.</p>

<h2>Дизайн</h2>

<p>Главной задачей для нового дизайна было отказаться от белых коробок и инверсного текста, оставив прежнюю цветовую гамму. При этом, хотелось подчеркнуть простоту архитектуры, убрав ненужную колонку. Получилось или нет — увидим в комментариях к записи…</p>

<h2>Технологии</h2>

<p>Как бы это ни было сложно, но HTML-код сайта старается соответствовать <a href="http://dev.w3.org/html5/spec/spec">черновику спецификации HTML5</a>. Более того, пока даже получается <a href="http://html5.validator.nu/?doc=http://pepelsbey.net/">проходить валидацию</a>. И самое минимальное: отказ от <abbr title="Extensible Hypertext Markup Language">XHTML</abbr>, новый доктайп <code>&lt;!DOCTYPE HTML&gt;</code>, новая семантика языка <code>&lt;article&gt;</code>, <code>&lt;header&gt;</code>, <code>&lt;time&gt;</code>. По этой причине пока пользователи IE видят не самые приятные вещи, но почему так — чуть ниже.</p>

<p>Пересмотру подверглись некоторые элементы: фрагмент кода теперь состоит из элемента <code>&lt;pre&gt;</code> и <code>&lt;code&gt;</code>, по количеству строк:</p>

<pre><code>&lt;pre&gt;</code>
<code>    &lt;code&gt;&lt;/code&gt;</code>
<code>    &lt;code&gt;&lt;/code&gt;</code>
<code>&lt;pre&gt;</code></pre>

<p>…а уменьшенные версии картинок построены на элементе <code>&lt;figure&gt;</code>:</p>

<pre><code>&lt;figure&gt;</code>
<code>    &lt;dd&gt;&lt;img src="…" alt="Описание"&gt;&lt;/dd&gt;</code>
<code>    &lt;dt&gt;Описание&lt;/dt&gt;</code>
<code>&lt;figure&gt;</code></pre>

<p>На примеры использования таких картинок, а также работу новой версии <a href="http://pepelsbey.net/2009/02/darkbox-2/">Даркбокс</a>, можно взглянуть в заметке <a href="http://pepelsbey.net/2008/10/firefox-vs-photoshop/">Firefox против Photoshop</a>. Ну и конечно же CSS 3: от пресловутых веб-шрифтов и <code>border-radius</code> до <code>transition</code>, из-за чего код местами распух от вендорных префиксов:</p>

<pre><code>-webkit-transition:background-color .2s linear;</code>
<code>-moz-transition:background-color .2s linear;</code>
<code>-o-transition:background-color .2s linear;</code>
<code>transition:background-color .2s linear;</code></pre>

<p>Также гораздо смелее стали использоваться селекторы: от простых <code>E &gt; E</code> и <code>E + E</code> до <code>E:first-of-type</code>. К сожалению, с некоторыми конструкциями не справляется даже IE8.</p>

<h2>Концепция</h2>

<p>Но самое главное, чего хотелось добиться всем этим редизайном и рекодингом — это создание, так называемой, вечной беты. Весьма популярная <em>вебдванольная</em> концепция, надо сказать. К примеру, сейчас сайт прилично работает исключительно в последних версиях браузеров. В тех, что пораньше — сносно. А если говорить про IE, то там творится форменное безумие, которое и предстоит поправить на одном из этапов развития вечной беты. И хотя из посетителей этого сайта на долю IE приходится всего <q>семь процентов людей и иных представителей человеческой расы</q>, доступность для чтения нужно обеспечить всем. Та же история с версией для печати, мобильных устройств и даже микроформатами. После каждого этапа в развитии — публикация. Думаю, это будет интересно.</p>]]></content:encoded>
			<wfw:commentRss>http://pepelsbey.net/2010/01/eternal-beta/feed/</wfw:commentRss>
		<slash:comments>50</slash:comments>
		</item>
		<item>
		<title>Чай со спецэффектами</title>
		<link>http://pepelsbey.net/2009/12/special-effects-tea/</link>
		<comments>http://pepelsbey.net/2009/12/special-effects-tea/#comments</comments>
		<pubDate>Wed, 23 Dec 2009 21:46:35 +0000</pubDate>
		<dc:creator>pepelsbey</dc:creator>
				<category><![CDATA[Заметки]]></category>

		<guid isPermaLink="false">http://pepelsbey.net/?p=462</guid>
		<description><![CDATA[Как обычные люди готовят себе чай? Довольно просто: ставят чайник, находят чашку, закидывают пакетик или даже заливают заварку. Просто и безыскусно. Сегодня я&#160;расскажу вам, как готовят чай суровые&#160;верстальщики. Для этого вам понадобятся следующие вещи: простой текстовый редактор и свежий браузер, вроде Firefox, Opera, Safari или Chrome. Чем свежее, тем лучше&#160;— хорошо бы даже ночную сборку [...]]]></description>
			<content:encoded><![CDATA[<p>Как обычные люди готовят себе чай? Довольно просто: ставят чайник, находят чашку, закидывают пакетик или даже заливают заварку. Просто и безыскусно. Сегодня я&nbsp;расскажу вам, как готовят чай суровые&nbsp;верстальщики.</p>

<p>Для этого вам понадобятся следующие вещи: простой текстовый редактор и свежий браузер, вроде <a href="http://getfirefox.com/">Firefox</a>, <a href="http://opera.com/">Opera</a>, <a href="http://apple.com/safari/">Safari</a> или <a href="http://google.com/chrome/">Chrome</a>. Чем свежее, тем лучше&nbsp;— хорошо бы даже ночную сборку или какую-нибудь альфу.</p>

<h2>Готовим основу</h2>

<p>Для начала подготовим основу для нашего чаепития. На мой взгляд, прогрессивный HTML5-шаблон с&nbsp;простым доктайпом <code>&lt;!DOCTYPE HTML&gt;</code> подойдёт лучше всего:</p>

<pre><code>&lt;!DOCTYPE HTML&gt;</code>
<code>&lt;html lang="en-US"&gt;</code>
<code>&lt;head&gt;</code>
<code>    &lt;title&gt;Чай со спецэффектами&lt;/title&gt;</code>
<code>    &lt;meta charset="UTF-8"&gt;</code>
<code>&lt;/head&gt;</code>
<code>&lt;body&gt;</code>
<code>    …</code>
<code>&lt;/body&gt;</code>
<code>&lt;/html&gt;</code></pre>

<p>Обратите внимание на атрибут <code>lang</code> элемента <code>&lt;html&gt;</code>&nbsp;— мы собираемся заваривать английский чай с&nbsp;американским акцентом, и его значение как раз соответствует нашему замыслу: <code>en-US</code>. Дальше нам это ещё пригодится.</p>

<p>Теперь давайте отыщем подходящую чашку. Точнее, даже не&nbsp;отыщем, а&nbsp;тут же соберём из знакомых частей. Из чего мы можем составить обычную чашку чая? Как минимум, из самой чашки <code>cup</code> и блюдца <code>saucer</code>. Чашка состоит из сосуда <code>vessel</code> с&nbsp;ручкой <code>handle</code>, в&nbsp;который последовательно налиты чай <code>tea</code>, брошены два кусочка сахара <code>sugar</code>, по вкусу, а&nbsp;замыкается это всё донышком <code>bottom</code>. Так у нас и получилось:</p>

<pre><code>&lt;div class="cup"&gt;</code>
<code>    &lt;div class="vessel"&gt;</code>
<code>        &lt;div class="tea"&gt;</code>
<code>            &lt;div class="sugar"&gt;&lt;/div&gt;</code>
<code>            &lt;div class="sugar"&gt;&lt;/div&gt;</code>
<code>            &lt;div class="bottom"&gt;&lt;/div&gt;</code>
<code>        &lt;/div&gt;</code>
<code>    &lt;/div&gt;</code>
<code>    &lt;div class="handle"&gt;&lt;/div&gt;</code>
<code>&lt;/div&gt;</code>
<code>&lt;div class="saucer"&gt;&lt;/div&gt;</code></pre>

<p>Итак, основа для нашего чаепития готова, начинаем его рисовать.</p>

<h2>Раскрашиваем набросок</h2>

<p>Теперь отбросим все браузерные условности простым ластиком. Чай у&nbsp;нас незамысловатый, поэтому здесь подойдёт и <code>* { … }</code>. Для более сложных проектов всё же рекомендуется использовать <a href="http://meyerweb.com/eric/tools/css/reset/">reset.css</a></p>

<pre><code>* {</code>
<code>    padding:0;</code>
<code>    margin:0;</code>
<code>    }</code></pre>

<p>Наступает очередь воплотить все составные части нашего чая: позиционируем их по центру, правильно расставляем z-index, задаём размеры и цвет фона для каждого элемента. Вот как выглядит чашка:</p>

<pre><code>.cup {</code>
<code>    position:absolute;</code>
<code>    top:50%;</code>
<code>    left:50%;</code>
<code>    z-index:2;</code>
<code>    margin:-150px 0 0 -150px;</code>
<code>    width:300px;</code>
<code>    height:300px;</code>
<code>    }</code></pre>

<p>…и получаем <a href="http://pepelsbey.net/pro/2009/12/special-effects-tea/1.htm">пример №1</a>, он же <a href="http://pepelsbey.net/pro/2009/12/special-effects-tea/1.png" rel="darkbox">на картинке</a>.</p>

<p>Если вы остались довольны получившимся кубизмом&nbsp;— хорошо, значит вас устроит чаепитие даже в компании Internet Explorer. Те, кому этого мало, приглашаются дальше.</p>

<h2>Спиливаем лишнее</h2>

<p>И всё-таки, чашка должна быть круглой. Хотя бы для того, чтобы во время размешивания там не&nbsp;застревала чайная ложка. Давайте всё скруглим. После недавнего выхода <a href="http://labs.opera.com/news/2009/12/22/">альфа-версии Opera&nbsp;10.50</a> с&nbsp;широкой поддержкой модуля <a href="http://www.w3.org/TR/css3-background/">CSS Backgrounds and Borders Level 3</a> для этих целей мы вполне можем рассчитывать на свойство <code>border-radius</code>.</p>

<p>Скругляем блюдце: его ширина и высота равны 500-ам пикселам, значит для того, чтобы получить окружность, радиус скругления должен составлять половину ширины, т.е. 250 пикселов:</p>

<pre><code>.saucer {</code>
<code>    position:absolute;</code>
<code>    top:50%;</code>
<code>    left:50%;</code>
<code>    z-index:1;</code>
<code>    margin:-250px 0 0 -250px;</code>
<code>    width:500px;</code>
<code>    height:500px;</code>
<code>    -webkit-border-radius:250px;</code>
<code>    -moz-border-radius:250px;</code>
<code>    border-radius:250px;</code>
<code>    background:#FFF;</code>
<code>    }</code></pre>

<p>В данном случае компактное правило <code>border-radius:250px</code> задаёт радиус скругления всех четырёх углов, точно так же, как <code>margin:0</code> обнуляет поля со всех четырёх сторон элемента.</p>

<p>Обратите внимание на префиксы <code>-webkit</code> и <code>-moz</code>&nbsp;— они нужны браузерам на основе Webkit (Safari, Chrome) и Gecko (Firefox) для того, чтобы применить скругление. Последняя альфа браузера Opera обрабатывает свойство без префикса. Подобным же образом мы скругляем сосуд, чай и донышко. Ручку и подтаявшие кусочки сахара мы подтачиваем до скруглённых брусков.</p>

<p>И получаем <a href="http://pepelsbey.net/pro/2009/12/special-effects-tea/2.htm">пример №2</a>, он же <a href="http://pepelsbey.net/pro/2009/12/special-effects-tea/2.png" rel="darkbox">на картинке</a>.</p>

<p>И хорошо бы: всё скруглилось, встало на свои места. Так ведь и просилась бы чашка в&nbsp;руки, если бы не&nbsp;пугала своей плоской двухмерностью. Самое время добавить немного объёма.</p>

<h2>Надуваем чашку</h2>

<p>Будем честны, мы здесь не&nbsp;пытаемся заигрывать с&nbsp;<a href="http://www.whatwg.org/specs/web-apps/current-work/#the-canvas-element">Canvas</a>, поэтому объём у&nbsp;нас будет псевдо-трёхмерным. А много ли надо нам, жертвам квадратного и плоского веба? Берём в руки свойство <code>box-shadow</code> и вперёд:</p>

<pre><code>.vessel {</code>
<code>    -webkit-box-shadow:20px 20px 100px rgba(0,0,0,.8);</code>
<code>    -moz-box-shadow:20px 20px 100px rgba(0,0,0,.8);</code>
<code>    box-shadow:20px 20px 100px rgba(0,0,0,.8);</code>
<code>    }</code></pre>

<p>Свойство <code>box-shadow</code> конструируется просто: горизонтальное смещение тени, вертикальное, размер и цвет, который мы задаём в&nbsp;виде <code>rgba()</code>, чтобы последним значением указать полупрозрачность заливки. В&nbsp;случае с&nbsp;элементом <code>tea</code>, также используется ключевое слово <code>inset</code>, чтобы повернуть тень внутрь элемента.</p>

<p>И вот <a href="http://pepelsbey.net/pro/2009/12/special-effects-tea/3.htm">пример №3</a>, он же <a href="http://pepelsbey.net/pro/2009/12/special-effects-tea/3.jpg" rel="darkbox">на картинке</a>.</p>

<p>Ну, что&nbsp;— чай уже почти как настоящий. За исключением некоторых проблем: тени в&nbsp;браузерах на движке Webkit рассчитываются весьма загадочно (см. заметку <a href="http://pepelsbey.net/2008/10/firefox-vs-photoshop/">Firefox против Photoshop</a>), поэтому, в&nbsp;нашем случае, выглядят более жёстко. Также текущая версия Webkit в браузере Safari 4.0.4 пока не&nbsp;умеет применять ключевое слово <code>inset</code>, однако Chrome уже справляется.</p>

<p>Осталось только добавить в&nbsp;это чаепитие немного жизни.</p>

<h2>Художественный беспорядок</h2>

<p>Самая очевидная проблема нашей чашки&nbsp;— это отвалившаяся ручка и вставшие пирамидой кусочки сахара. Давайте разбросаем всё это по своим местам и попробуем размешать сахар. Поможет нам в этом свойство <code>transform</code> и методы <code>rotate()</code> и <code>translate()</code>, занимающиеся, соответственно, поворотом и перемещением элементов.</p>

<p>Обратите внимание, что для краткости в&nbsp;этой части примеры кода будут приводится без дублирования свойств с префиксами <code>-webkit</code>, <code>-moz</code> и <code>-o</code>. Полный код вы можете найти в примерах.</p>

<p>Для начала, вернём ручку ровно в&nbsp;центр чашки, изменив значение отрицательного поля, а потом применим <code>transform</code>: повернём на –145 градусов и сместим на 170 пикселов.</p>

<pre><code>.handle {</code>
<code>    margin:-20px 0 0 -45px;</code>
<code>    transform:rotate(-145deg) translate(170px,0);</code>
<code>    }</code></pre>

<p>Принимаемся за кубики: их у нас ровно два. Не&nbsp;знаю, как для вас, но для меня это оптимальное количество сахара. И нам нужно обратиться к&nbsp;каждому из кубиков, чтобы применить нужное смещение. Самым удачным способом будет посчитать их по порядку появления в&nbsp;чае, при помощи селектора <code>:nth-child()</code>:</p>

<pre><code>.sugar:nth-child(1) {</code>
<code>    transform:rotate(70deg) translate(-20px,20px);</code>
<code>    }</code>
<code>.sugar:nth-child(2) {</code>
<code>    transform:rotate(30deg) translate(35px,0);</code>
<code>    }</code></pre>

<p>Теперь всё на месте, и вроде бы можно пить чай, но сахар упорно не&nbsp;желает размешиваться. Значит, самое время встряхнуть его при помощи сочетания свойств <code>transform</code> и <code>transition</code>. Для начала мы задаём каждому кубику новое смещение, которое произойдёт при наведении на чашку: поворот на 1200 градусов и новые координаты.</p>

<pre><code>.cup:hover</code>
<code>.sugar:nth-child(1) {</code>
<code>    transform:rotate(1200deg) translate(-20px,20px);</code>
<code>    }</code></pre>

<p>А затем описываем сам процесс перемещения:</p>

<pre><code>.sugar {</code>
<code>    transition:transform 10s ease-out;</code>
<code>    }</code></pre>

<p>Синтаксис свойства <code>transition</code> простой: сначала идёт то свойство, которое мы собираемся изменять, потом время и тип ускорения, в&nbsp;нашем случае <code>ease-out</code>, что значит с&nbsp;замедлением. При наведении курсора на чашку <code>.cup:hover</code> сахар будет размешиваться по часовой стрелке, при отведении&nbsp;— в&nbsp;обратную сторону.</p>

<p>И вот <a href="http://pepelsbey.net/pro/2009/12/special-effects-tea/4.htm">пример №4</a>, он же <a href="http://pepelsbey.net/pro/2009/12/special-effects-tea/4.jpg" rel="darkbox">на картинке</a>.</p>

<p>Практически всё готово. Самые нетерпеливые могут браться за чай, остальные же приглашаются дальше — добавить разнообразия.</p>

<h2>Немного разнообразия</h2>

<p>Сколько людей, столько и вкусов. Поэтому давайте добавим нашему чаепитию возможность выбрать в какой традиции пить чай: в&nbsp;английской, русской или японской. Предлагаю сделать это наиболее адекватно, используя упомянутый выше атрибут <code>lang</code> элемента <code>&lt;html&gt;</code>. Для этого добавим возможность выбора:</p>

<pre><code>&lt;ul class="switcher"&gt;</code>
<code>    &lt;li lang="en-US" title="Английски"&gt;&lt;/li&gt;</code>
<code>    &lt;li lang="ru-RU" title="Русский"&gt;&lt;/li&gt;</code>
<code>    &lt;li lang="ja-JP" title="Японский"&gt;&lt;/li&gt;</code>
<code>&lt;/ul&gt;</code></pre>

<p>Каждый из пунктов нашего меню будет переключать атрибут <code>lang</code> на нужный язык при помощи нехитрого скрипта, навешивающего обработчики:</p>

<pre><code>function init() {</code>
<code>    var html = document.documentElement;</code>
<code>    var items = document.querySelectorAll('ul.switcher li');</code>
<code>    for(var i=0; i&lt;items.length; i++){</code>
<code>        items[i].onclick = function() {</code>
<code>            html.lang = this.lang;</code>
<code>        }</code>
<code>    }</code>
<code>}</code>
<code>window.onload = init;</code></pre>

<p>В&nbsp;этом скрипте используется удобнейший метод <code>querySelectorAll</code>, который позволяет выбрать нужные элементы при помощи CSS-селекторов наподобие <a href="http://jquery.com/">jQuery</a>.</p>

<p>Осталось только добавить специфические стили для каждого из языков (тематическую скатерть и цвет чая) и поменять состояние текущего пункта меню. Вся магия происходит благодаря псевдо-классу <code>:lang()</code>, который появляется у каждого элемента после того, как мы обновили атрибут <code>lang</code> элемента <code>&lt;html&gt;</code>:</p>

<pre><code>BODY:lang(en-US) {</code>
<code>    background:#519AB8 url(i/en.png);</code>
<code>    }</code>
<code>.switcher:lang(en-US) LI[lang=en-US],</code>
<code>.switcher:lang(ru-RU) LI[lang=ru-RU],</code>
<code>.switcher:lang(ja-JP) LI[lang=ja-JP] {</code>
<code>    border-color:#FFF;</code>
<code>    cursor:default;</code>
<code>    }</code></pre>

<p>И, наконец, последний <a href="http://pepelsbey.net/pro/2009/12/special-effects-tea/5.htm">пример №5</a>, он же <a href="http://pepelsbey.net/pro/2009/12/special-effects-tea/5.jpg" rel="darkbox">на картинке</a>. Чай готов, сахар по вкусу&nbsp;— можно пить :)</p>]]></content:encoded>
			<wfw:commentRss>http://pepelsbey.net/2009/12/special-effects-tea/feed/</wfw:commentRss>
		<slash:comments>44</slash:comments>
		</item>
		<item>
		<title>Веб-шрифты vs. Шрифты для веба</title>
		<link>http://pepelsbey.net/2009/12/web-fonts-vs-fonts-for-web/</link>
		<comments>http://pepelsbey.net/2009/12/web-fonts-vs-fonts-for-web/#comments</comments>
		<pubDate>Wed, 16 Dec 2009 13:15:49 +0000</pubDate>
		<dc:creator>pepelsbey</dc:creator>
				<category><![CDATA[Заметки]]></category>

		<guid isPermaLink="false">http://pepelsbey.net/?p=461</guid>
		<description><![CDATA[Слухи о кончине этого сайта несколько преувеличены. Вашему вниманию предлагается импровизированное видео, смонтированное из слайдов и аудио-записи доклада «Веб-шрифты vs. Шрифты для веба», прозвучавшего 8 декабря на ВСТ-встрече в Москве в рамках WebHiTech Party. Также существует полноценная видео-запись этого доклада с минской встречи Web Standards Days, однако в Москве прозвучала его улучшенная и дополненная версия, а в предложенном скринкасте гораздо удобнее следить за содержанием слайдов. И немного о забвении: в начале года планируется выпустить новую [...]]]></description>
			<content:encoded><![CDATA[<p>Слухи о кончине этого сайта несколько преувеличены. Вашему вниманию предлагается импровизированное видео, смонтированное из слайдов и аудио-записи доклада «Веб-шрифты vs. Шрифты для веба», прозвучавшего 8 декабря на ВСТ-встрече в Москве в рамках <a href="http://www.webhitech.ru/party/">WebHiTech Party</a>.</p>

<iframe src="http://player.vimeo.com/video/17586692?title=0&amp;byline=0&amp;portrait=0&amp;color=188418" width="609" height="459" frameborder="0" class="video-player"></iframe>

<p>Также существует <a href="http://video.yandex.ru/users/art23minsk/collection/18/">полноценная видео-запись</a> этого доклада с минской встречи <a href="http://webstandardsdays.ru/">Web Standards Days</a>, однако в Москве прозвучала его улучшенная и дополненная версия, а в предложенном скринкасте гораздо удобнее следить за содержанием слайдов.</p>

<p>И немного о забвении: в начале года планируется выпустить новую версию этого сайта: новый дизайн, вёрстка и архитектура. Заметки станут короче и будут выходить значительно чаще. До встречи ;)</p>]]></content:encoded>
			<wfw:commentRss>http://pepelsbey.net/2009/12/web-fonts-vs-fonts-for-web/feed/</wfw:commentRss>
		<slash:comments>38</slash:comments>
		</item>
	</channel>
</rss>

