<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>We Love CSS</title>
	
	<link>http://wlcteam.ru</link>
	<description>Мы занимаемся созданием качественной, кроссбраузерной семантической версткой, с валидным XHML и CSS, с поддержкой микроформатов и SEO оптимизацией.</description>
	<lastBuildDate>Mon, 13 Sep 2010 06:22:03 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/wlcteam/PfoA" /><feedburner:info uri="wlcteam/pfoa" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>Тестирование HTML элементов в контенте или reset 2.0</title>
		<link>http://feedproxy.google.com/~r/wlcteam/PfoA/~3/DS7aPYiXd5o/</link>
		<comments>http://wlcteam.ru/blog/publications/testing-html-elements-in-content-or-reset2/#comments</comments>
		<pubDate>Fri, 10 Sep 2010 13:41:33 +0000</pubDate>
		<dc:creator>Геннадий Уханов</dc:creator>
				<category><![CDATA[Статьи]]></category>
		<category><![CDATA[reset]]></category>
		<category><![CDATA[Контент сайта]]></category>
		<category><![CDATA[Тестирование]]></category>

		<guid isPermaLink="false">http://wlcteam.ru/?p=428</guid>
		<description><![CDATA[<p>Сегодня я хотел бы поднять довольно больную тему верстальщиков, а именно как должен выглядеть контент сайта.</p>

<p>Для начала приведу пример из жизни любого верстальщика — вы верстаете обычный сайт, три странички, главная, новости и контетная. Все вроде бы отлично, и в даже в IE6 все держится отлично. Вы отдаете верстку программистам, программисты привязывают движок, сайт работает и все счастливы. </p>]]></description>
			<content:encoded><![CDATA[<p>Сегодня я хотел бы поднять довольно больную тему верстальщиков, а именно как должен выглядеть контент сайта.</p>

<p>Для начала приведу пример из жизни любого верстальщика — вы верстаете обычный сайт, три странички — главная, новости и контентная. Все вроде бы отлично, и в даже в IE6 все держится отлично. Вы отдаете верстку программистам, программисты привязывают движок, сайт работает и все счастливы. </p>

<p>Но через пару дней, когда контент-менеджер Ксюша начинает заполнять сайт контентом, начинаются проблемы. Текст смотрится не так как хотелось клиенту, таблицы почему-то без рамок, заголовки размером с обычный текст, а про списки мы промолчим. Благо сайт не летит вкривь и вкось (вы же крутой верстальщик, ваша сетка непоколебима). И тут возникает вопрос, кто виноват? Дизайнер, верстальщик, программист или все-таки Ксюша?<sub><samll>*</small></sub></p>

<p><small>Правильный ответ — виноват менеджер проекта</small></p>

<p>На самом деле, во всем это виноват верстальщик, который сверстал <em>как есть</em> и не спросил дизайнера, а как будет выглядеть таблица, списки и т.д. Да, да именно верстальщик, так как дизайнер может и знать не знает о волшебных <code>blockquote</code>, <code>ul li</code>. </p>

<p>Поставив стандартный <em>Lorem ipsum</em>, он не задумывается о множестве других элементов. Сознательные дизайнеры, которые продумали все возможные поведения контента и блоков, давно занесены в красную книгу. Либо они довольно опытные верстальщики, так как сознательных верстальщиков тоже мало.</p>
 
<p>С этими проблемами, как компания специализирующаяся на верстке, мы неоднократно сталкиваемся. И каков выход из положения? Об этом и поговорим.</p>

<h3>Reset.css</h3>
<p>Большинство верстальщиков используют reset.css, так называемый ластик, обнуляющий стандартные стили браузера. Мы не исключение, так как считаем это действительно удобным инструментом, хотя это довольно  «холиварная» тема.</p>

<p>Большая часть проблем с его использованием и возникает. Жирные текст не становится жирным, курсив не становится курсивом и т.д. Но, все таки, удобство reset.css приоритетнее (пусть это пока будет фактом). Мы начинаем писать reset 2.0, т.е. в блоках с контентом мы заново отменяем предыдущий ластик.</p>

<h3>Reset 2.0</h3>

<p>Небольшой пример:</p>

<ol class="code"><li><code>ARTICLE SUP {</code></li>
<li><code>	vertical-align:super;</code></li>
<li><code>	}</code></li>
<li><code>&nbsp;</code></li>
<li><code>ARTICLE STRONG, ARTICLE B {</code></li>
<li><code>	font-weight:bold;</code></li>
<li><code>	}</code></li>
<li><code>&nbsp;</code></li>
<li><code>ARTICLE EM, ARTICLE I, ARTICLE CITE {</code></li>
<li><code>	font-style:italic;</code></li>
<li><code>	}</code></li></ol>

<p>Казалось бы, зачем делать лишнюю работу. Но, даже если бы и не было reset.css, эту работу все равно бы пришлось делать, отменяя неправильные отступы у абзацев и заголовков (и многое другое). Так что этот труд не безосновательный.</p>

<a href="http://demo.wlcteam.ru/testing-html-elements-in-content-or-reset2/"><img src="http://demo.wlcteam.ru/testing-html-elements-in-content-or-reset2/pic1.jpg" alt="Тестирование HTML элементов в контенте" /></a>

<p>Решение тривиальное — для контентных блоков мы пишем «reset 2.0», со списком всех нужных элементов.</p>

<p>Мы составили свой список, тех элементов, который наиболее часто встречается в контенте. Возможно у вас есть похожий. Давайте делится.</p>

<ol class="code"><li><code>&lt;article role="main"&gt;</code></li>
<li><code>	&lt;h2 class="title"&gt;Заголовки&lt;/h2&gt;</code></li>
<li><code>	&lt;h1&gt;Заголовок H1&lt;/h1&gt;</code></li>
<li><code>	&lt;h2&gt;Заголовок H2&lt;/h2&gt;</code></li>
<li><code>	&lt;h3&gt;Заголовок H3&lt;/h3&gt;</code></li>
<li><code>	&lt;h4&gt;Заголовок H4&lt;/h4&gt;</code></li>
<li><code>	&lt;h5&gt;Заголовок H5&lt;/h5&gt;</code></li>
<li><code>	&lt;h6&gt;Заголовок H6&lt;/h6&gt;</code></li>
<li><code>&lt;/article&gt;</code></li></ol>	

<p><a href="http://demo.wlcteam.ru/testing-html-elements-in-content-or-reset2/">По ссылке полная версия</a>.</p>

<p><small>Мы <del>нагло</del> исключили некоторые элементы, например <code>acronym</code>, который признан устаревшим. Или например <code>dfn</code>, который чересчур специфичен. Также мы не учитывали формы и инпуты.</small></p>

<p><small>Мы не первые в этом начинании. Пример шаблоны для Wordpress обязательно тестируют контент — <a href="http://wordpress.org/extend/themes/">http://wordpress.org/extend/themes/</a>. Также похожая система существует у любого CSS фреймворка.</small></p>

<p>В качестве бонуса мы добавили <code>::selection</code> и <code>outline</code>. Как говорится, время диктует свои правила.</p>

<p>С такой системой работать с контентом одно удовольствие. <a href="http://demo.wlcteam.ru/testing-html-elements-in-content-or-reset2/live-demo.html">Вот еще один «живой» пример</a></p>

<p><small>Подозреваю, данный шаблон будет постоянно обновляться.</small></p>

<p>Этот шаблон будет полезен не только верстальщикам, но и дизайнерам. Ждем предложений и комментариев</p>
<p>P.S.</p>
<h3>Дизайнерам</h3>
<p>Не забывайте, что контент это не только абзац с Lorem ipsum и ссылки. Это множество элементов и связей между ними. Об этом нужно думать. </p>

<p>Например список, может быть нумерованным и маркированным и в тоже время многоуровневым. Чаще эти задачи решает верстальщик самостоятельно, после чего (еще чаще) ему приходится исправлять свою работу, когда дизайнер или клиент остается недовольным.</p>

<img src="http://feeds.feedburner.com/~r/wlcteam/PfoA/~4/DS7aPYiXd5o" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://wlcteam.ru/blog/publications/testing-html-elements-in-content-or-reset2/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		<feedburner:origLink>http://wlcteam.ru/blog/publications/testing-html-elements-in-content-or-reset2/</feedburner:origLink></item>
		<item>
		<title>Концепт ePixelPerfect</title>
		<link>http://feedproxy.google.com/~r/wlcteam/PfoA/~3/qtA9jY2kBUQ/</link>
		<comments>http://wlcteam.ru/blog/e-pixelperfect-concept/#comments</comments>
		<pubDate>Sat, 19 Jun 2010 21:45:58 +0000</pubDate>
		<dc:creator>Геннадий Уханов</dc:creator>
				<category><![CDATA[Блог]]></category>
		<category><![CDATA[ePixelPerfect]]></category>

		<guid isPermaLink="false">http://wlcteam.ru/?p=415</guid>
		<description><![CDATA[<p>Многие верстальщики знакомы с плагином для Firefox — <a href="https://addons.mozilla.org/ru/firefox/addon/7943/">Pixel Perfect</a>, существенно облегчающий жизнь при попиксельной верстке.</p>
<p><small>Правда сейчас, текущая версия работает из рук вон плохо.</small></p>
<p>Но есть и минус — этот плагин работает только под Firefox, а верстку, да и часто попиксельно — нужно проверять и в других браузерах. Да, решение, делать дизайн макета для каждой станицы отельным фоном, но… Но это долго, муторно и неудобно. А аналогов Pixel Perfect для других браузеров — мы не нашли.</p>

<p><a href="http://wlcteam.ru/blog/extend-grid-1-2/">По мотивам Extend Grid</a> мы решили написать еще один плагин, аналог Pixel Perfect, но уже как плагин в виде JQuery (а почему и нет?), который будет работать в любом браузере.</p>]]></description>
			<content:encoded><![CDATA[<p>Многие верстальщики знакомы с плагином для Firefox — <a href="https://addons.mozilla.org/ru/firefox/addon/7943/">Pixel Perfect</a>, существенно облегчающий жизнь при попиксельной верстке.</p>
<p><small>Правда сейчас, текущая версия работает из рук вон плохо.</small></p>
<p>Но есть и минус — этот плагин работает только под Firefox, а верстку, да и часто попиксельно — нужно проверять и в других браузерах. Решение — делать дизайн макета для каждой станицы отельным фоном? Но это долго, муторно и неудобно. А аналогов Pixel Perfect для других браузеров — мы не нашли.</p>

<p><a href="http://wlcteam.ru/blog/extend-grid-1-2/">По мотивам Extend Grid</a> мы решили написать еще один плагин, аналог Pixel Perfect, но уже как плагин в виде JQuery (а почему и нет?), который будет работать в любом браузере.</p>

<h3>Что хотим получить?</h3>
<p>Список на самом деле не особо большой.</p>

<img src="http://assets.wlcteam.ru/i/posts/e-pixelperfect-concept/ExtendPixlePerfect.jpg" alt="ePixelPerfect" />
<p><small>Скриншот первой версии ePixelPerfect.</small></p>
<ul>
	<li>Кроссбраузерность</li>
	<li>Удобный интерфейс</li>
	<li>Drag-and-drop и возможность добавлять несколько картинок одновременно</li>
	<li>Сохранение данных (а как же без этого?)</li>
	<li>И для души — «гламурные» эффекты в «гламурных» браузерах. Опционально конечно :)</li>
</ul>

<p>Как-то так. Пожелания и предложения приветствуются. Ждем комментарии. Релиз первой версии — в ближайшие две недели.</p>



<img src="http://feeds.feedburner.com/~r/wlcteam/PfoA/~4/qtA9jY2kBUQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://wlcteam.ru/blog/e-pixelperfect-concept/feed/</wfw:commentRss>
		<slash:comments>15</slash:comments>
		<feedburner:origLink>http://wlcteam.ru/blog/e-pixelperfect-concept/</feedburner:origLink></item>
		<item>
		<title>Footer Stick — прибитый к низу футер</title>
		<link>http://feedproxy.google.com/~r/wlcteam/PfoA/~3/azH5v4MtfGI/</link>
		<comments>http://wlcteam.ru/blog/tips-and-tricks/footer-stick/#comments</comments>
		<pubDate>Wed, 16 Jun 2010 10:46:17 +0000</pubDate>
		<dc:creator>Геннадий Уханов</dc:creator>
				<category><![CDATA[Рецепты]]></category>
		<category><![CDATA[Footer Stick]]></category>
		<category><![CDATA[Футер]]></category>

		<guid isPermaLink="false">http://wlcteam.ru/?p=398</guid>
		<description><![CDATA[<p>На тему «footer stick», прибитого к низу футера, написано немало статей, выложено немало решений. В этом рецепте опишем наше решение.</p>

<p>Поставленные задачи</p>
<ul>
<li>Кроссбразерность (c IE6)</li>
<li>Никакого JS</li>
<li>Простая разметка — никаких пустых и лишних элементов</li>
<li>Хотелось бы без заданной высоты для футера, но увы, никак. Без JS по крайне мере</li>
</ul>]]></description>
			<content:encoded><![CDATA[<p>На тему «footer stick», прибитого к низу футера, написано немало статей, выложено немало решений. В этом рецепте опишем наше решение.</p>

<p>Поставленные задачи</p>
<ul>
<li>Кроссбразерность (c IE6)</li>
<li>Никакого JS</li>
<li>Простая разметка — никаких пустых и лишних элементов</li>
<li>Хотелось бы без заданной высоты для футера, но увы, никак. Без JS по крайне мере</li>
</ul>

<h3>HTML</h3>
<ol class="code"><li><code>&lt;div id=&quot;wrapper&quot;&gt;</code></li>
<li><code>	&lt;div id=&quot;header&quot;&gt;&lt;/div&gt;</code></li>
<li><code>	&lt;div id=&quot;content&quot;&gt;&lt;/div&gt;</code></li>
<li><code>&lt;/div&gt;</code></li>
<li><code>&lt;div id=&quot;footer&quot;&gt;&lt;/div&gt;</code></li></ol>
<p><small>Да-да, футер за пределом wrapper-а. Это уже классика.</small></p>

<h3>CSS</h3>
<p>CSS также простой, всего один хак для IE6 с <code>min-height</code> — <code>height:auto !important; height:100%; </code></p>

<ol class="code"><li><code>body, html{</code></li>
<li><code>	height: 100%;</code></li>
<li><code>	/*  ^--- Ключевой момент */</code></li>
<li><code>	font-family:Arial;</code></li>
<li><code>	color:#fff;</code></li>
<li><code>	}</code></li>
<li><code>body, p { margin: 0; padding: 0; }</code></li>
<li><code>&nbsp;</code></li>
<li><code>#wrapper {</code></li>
<li><code>	min-height: 100%;</code></li>
<li><code>	height:auto !important;</code></li>
<li><code>	height:100%;</code></li>
<li><code>	/*  ^--- Ключевой момент */</code></li>
<li><code>	/* Хак для IE 6, реализующий min-height */</code></li>
<li><code>	background:#333;</code></li>
<li><code>	}</code></li>
<li><code>&nbsp;</code></li>
<li><code>#header, #footer {</code></li>
<li><code>	position: relative;</code></li>
<li><code>	font-size:40px;</code></li>
<li><code>	text-transform:uppercase;</code></li>
<li><code>	font-weight:bold;</code></li>
<li><code>	}</code></li>
<li><code>&nbsp;</code></li>
<li><code>#header {</code></li>
<li><code>	height: 100px;</code></li>
<li><code>	margin: 0 auto;</code></li>
<li><code>	background:#555;</code></li>
<li><code>	}</code></li>
<li><code>&nbsp;</code></li>
<li><code>#content { padding:0 0 100px; }</code></li>
<li><code>&nbsp;</code></li>
<li><code>#footer {</code></li>
<li><code>	margin:-100px 0 0;</code></li>
<li><code>	height:100px;</code></li>
<li><code>	/*  ^--- Ключевой момент */</code></li>
<li><code>	background:#777;</code></li>
<li><code>	}</code></li></ol>

<p>Ключевой момент в том, что для wrapper мы задаем <code>min-height:100%</code> (когда у <code>body:height:100%</code> — это важно). У футера <code>margin-top</code> минус значение его высоты.</p>

<p>Данный способ работает, при чем во всех браузерах и <a href="http://wlcteam.ru/blog/publications/need-for-clearfix/">без всяких clearfix-ов</a> (хотя этот пример очень простой). Недостаток выявлен лишь один — что бы задать нужные отступы между блоками, придется повозится, что бы не появлялся горизонтальный скролл. А в целом красота, простой HTML и CSS, то что нужно домохозяйке-верстальщику. Да, и минус — фиксированная высота футера, но, если у вас есть решение, пишите — интересно.</p>

<h3>Пример</h3>
<p><a href="http://demo.wlcteam.ru/footer-stick/">Пример, специально сделанный для рецепта</a> и пример на боевом <a href="http://mappica.ru">проекте</a>.</p>
<img src="http://feeds.feedburner.com/~r/wlcteam/PfoA/~4/azH5v4MtfGI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://wlcteam.ru/blog/tips-and-tricks/footer-stick/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		<feedburner:origLink>http://wlcteam.ru/blog/tips-and-tricks/footer-stick/</feedburner:origLink></item>
		<item>
		<title>О форматировании CSS</title>
		<link>http://feedproxy.google.com/~r/wlcteam/PfoA/~3/U1BCTPDC3nA/</link>
		<comments>http://wlcteam.ru/blog/publications/css-formatting/#comments</comments>
		<pubDate>Fri, 21 May 2010 03:11:18 +0000</pubDate>
		<dc:creator>Геннадий Уханов</dc:creator>
				<category><![CDATA[Статьи]]></category>
		<category><![CDATA[@media]]></category>
		<category><![CDATA[CSS менеджмент]]></category>
		<category><![CDATA[CSSDoc]]></category>
		<category><![CDATA[Табуляция]]></category>

		<guid isPermaLink="false">http://wlcteam.ru/?p=348</guid>
		<description><![CDATA[<p>Рано или поздно, любой программист задается вопросом о форматировании и структуризации своего кода. Как и любой верстальщик. Но единого стандарта для CSS еще нет и каждый верстальщик волен создавать свои правила, отталкиваясь от своих нужд и потребностей.</p>

<p>В этом посте хотелось бы рассказать о наших правилах форматирования CSS, которые мы используем в своих проектах, на стадии разработки.</p>

<p><strong>Внимание! Если вы читаете этот пост через RSS — вполне возможно, что примеры будут отображается некорректно, поэтому если интересно, рекомендую смотреть здесь, на сайте</strong>.</p>]]></description>
			<content:encoded><![CDATA[<p>Рано или поздно, любой программист задается вопросом о форматировании и структуризации своего кода. Как и любой верстальщик. Но единого стандарта для CSS еще нет и каждый верстальщик волен создавать свои правила, отталкиваясь от своих нужд и потребностей.</p>

<p>В этой статье хотелось бы рассказать о наших правилах форматирования CSS, которые мы используем в своих проектах, на стадии разработки.</p>

<p><strong>Внимание! Если вы читаете этот пост через RSS — вполне возможно, что примеры будут отображается некорректно, поэтому если интересно, рекомендую смотреть здесь, на сайте</strong>.</p>

<h3>CSS менеджмент</h3>
<p>Мы не разделяем файлы на <em>screen.css</em>, <em>print.css</em>, <em>reset.css</em> и т.д. Что бы снизить количество запросов — все хранится в одном CSS-файле — <em>main.css</em> ¹. </p>

<p>Да, в этом помогает <code>@media</code>. Исключение CSS для IE  —  <em>ie.css</em> (общие хаки для IE, в частности IE7) и <em>ie6.css</em> (хаки для IE6) ².</p>


<small>
<p>¹ Это конечно же специфично и подходит далеко не всем. В идеале этот метод эффективен для небольших проектов.</p>
<p>² Мы рекомендуем подключать CSS для Internt Explorer не с помощью конструкции <code>[if IE]</code>, а с помощью сервера — определяя браузер пользователя. Ага, оптимизация HTML на несколько строчек :) Но эта рекомендация конечно же опциональна.</p>
</small>

<ol class="code"><li><code></code></li>
<li><code>@media screen {</code></li>
<li><code>	//...</code></li>
<li><code>	}</code></li>
<li><code>&nbsp;</code></li>
<li><code>@media print {</code></li>
<li><code>	//...</code></li>
<li><code>	}</code></li>
<li><code>&nbsp;</code></li>
<li><code>@media projection {</code></li>
<li><code>	//..</code></li>
<li><code>	}</code></li></ol>

<h3>Порядок и сортировка</h3>

<p>Кто как не сортирует :) Кто по алфавиту, кто по типам свойств. Вариаций может быть множество. У нас очень простое правило — сортировка по типу свойств (Форматирование, Позиционирование, Отступы, Цвет, Шрифт, Форматирование текста, Фон и т.д.) . В каждом типе — сортировка по алфавиту.</p>

<ol class="code"><li><code></code></li>
<li><code>@media screen {</code></li>
<li><code>	.class {</code></li>
<li><code>		// Форматирование</code></li>
<li><code>		clear:both;</code></li>
<li><code>		display:block;</code></li>
<li><code>		float:left;</code></li>
<li><code>		overflow:hidden;</code></li>
<li><code>		visibility:collapse;</code></li>
<li><code>		&nbsp;</code></li>
<li><code>		// Позиционирование</code></li>
<li><code>		position:absolute;</code></li>
<li><code>		top:0; left:0;</code></li>
<li><code>		width:100px; height:100px;</code></li>
<li><code>		&nbsp;</code></li>
<li><code>		// Отступы</code></li>
<li><code>		margin:0;</code></li>
<li><code>		padding:0;</code></li>
<li><code>		&nbsp;</code></li>
<li><code>		// Цвет</code></li>
<li><code>		color:#000;</code></li>
<li><code>		&nbsp;</code></li>
<li><code>		// Шрифт</code></li>
<li><code>		font-family:Arial;</code></li>
<li><code>		font-size:2em;</code></li>
<li><code>		font-style:oblique;</code></li>
<li><code>		// и прочие</code></li>
<li><code>		&nbsp;</code></li>
<li><code>		// Форматирование текста</code></li>
<li><code>		letter-spacing:-1px;</code></li>
<li><code>		line-height:1em;</code></li>
<li><code>		text-decoration:blink;</code></li>
<li><code>		// и прочие</code></li>
<li><code>		&nbsp;</code></li>
<li><code>		// Фон</code></li>
<li><code>		background:#777;</code></li>
<li><code>		}</code></li>
<li><code>	}</code></li></ol>
<p>

<h3>Табуляция</h3>

<p>Для табуляции мы выбрали древовидную структуру и табуляцию перед закрывающей скобкой. Как оказалось способ довольно популярный:</p>

<ol class="code"><li><code>.header {</code></li>
<li><code>	position:relative;</code></li>
<li><code>	width:990px;</code></li>
<li><code>	height:100px;</code></li>
<li><code>	}</code></li>
<li><code>	.logo {</code></li>
<li><code>		postion:absolute;</code></li>
<li><code>		margin:0; padding:0;</code></li>
<li><code>		}</code></li>
<li><code>		.logo a       { color:#000; }</code></li>
<li><code>		.logo a:hover { color:#fff; }</code></li></ol>

<p><a href="http://andrewsumin.livejournal.com/45617.html?thread=302385#t302385">Цитирую</a>, почему именно такой стиль табуляции :)</p>
<ul> 
	<li>Для того, чтобы создавать визуальную колонку для чтения имён селекторов</li>
	<li>Чтобы писать блоки правил вплотную друг к другу и сохранять читаемость имён — скролить в итоге меньше</li>
	<li>При построении дерева блоков правил (2-3 уровня) такое дерево имеет большую связность.</li>
</ul>

<p>B еще одно правило. Если в блоке используется одно или два свойства — группируем в одну строчку.</p>

<h3>Комментарии</h3>
<p>Каким бы хорошим не был код, без комментирев и документации он сложен для восприятия. В любом случае — считаете вы так или нет, а документировать код придется, особенно если он будет использоваться другими людьми.</p>
<p>В комментариях мы используем стандарт JavaDoc, пришедший от языка Java и очень распространенный среди семейства языков ECMA-Script.</p>


<blockquote><p>Javadoc — генератор документации в HTML-формате из комментариев исходного кода на Java от Sun Microsystems. Javadoc — стандарт для документирования классов Java. Большинство cред разработки программного обеспечения автоматически генерируют HTML-документацию, используя Javadoc. Javadoc также предоставляет API для создания доклетов и тэглетов, которые позволяют программисту анализировать структуру Java-приложения.</p><p>— по мотивам <a href="http://ru.wikipedia.org/wiki/Javadoc">Википедии</a></p>.</blockquote>

<p>На его основе появились JSDoc, PHPDoc и т.п. Не удивительно что появился и <a href="http://cssdoc.net/">CSSDoc</a>. Правда спецификация находится в статусе черновика, но никто не мешает ее использовать уже сейчас. Последнюю версию можно <a href="http://cssdoc.net/raw-attachment/wiki/CssdocDraft/cssdoc%20-%200.2.22.pdf">скачать по ссылке</a>. </p>
<p>Для более подробного ознакомления с CSSDoc — <a href="http://habrahabr.ru/blogs/css/87406/">статья на Хабре</a>.</p>

<ol class="code"><li><code>/**</code></li>
<li><code> *</code></li>
<li><code> * Reset Block</code></li>
<li><code> *</code></li>
<li><code> * Reset to own defaults</code></li>
<li><code> * @section reset</code></li>
<li><code> * @see YUI Reset CSS,</code></li>
<li><code> * 	    http://developer.yahoo.com/yui/reset/</code></li>
<li><code> */</code></li>
<li><code>margin:0; padding:0;</code></li>
<li><code>&nbsp;</code></li>
<li><code>/**</code></li>
<li><code> * @bugfix IE inline-blocks support</code></li>
<li><code> * @link www.google.com/search?q=ie+inline-block</code></li>
<li><code> * @affected IE6, IE7</code></li>
<li><code> * @css-for IE7</code></li>
<li><code> * @valid no</code></li>
<li><code> */</code></li>
<li><code>*+html .inline-block {</code></li>
<li><code>	display: inline;</code></li>
<li><code>	zoom: 1;</code></li>
<li><code>	}</code></li>
<li><code> */</code></li></ol>

<p>К сожалению, пока нет генераторов документации на основе CSSDoc и данный формат используется по большей части для «красоты». В нашей же команде — мы используем его как некий единый стандарт, с которым удобно и привычно работать всем. Но, лишь на этапе разработки и поддержки кода.</p>

<p>В целом все. А как вы форматируете свой CSS?</p><img src="http://feeds.feedburner.com/~r/wlcteam/PfoA/~4/U1BCTPDC3nA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://wlcteam.ru/blog/publications/css-formatting/feed/</wfw:commentRss>
		<slash:comments>15</slash:comments>
		<feedburner:origLink>http://wlcteam.ru/blog/publications/css-formatting/</feedburner:origLink></item>
		<item>
		<title>Печать фоновых картинок</title>
		<link>http://feedproxy.google.com/~r/wlcteam/PfoA/~3/Y7GVKjXySBI/</link>
		<comments>http://wlcteam.ru/blog/tips-and-tricks/print-background-image/#comments</comments>
		<pubDate>Sat, 15 May 2010 12:54:44 +0000</pubDate>
		<dc:creator>Геннадий Уханов</dc:creator>
				<category><![CDATA[Рецепты]]></category>
		<category><![CDATA[visibility:hidden]]></category>
		<category><![CDATA[Версия для печати]]></category>

		<guid isPermaLink="false">http://wlcteam.ru/?p=342</guid>
		<description><![CDATA[<p>На We love CSS мы запускаем новую категорию, под названием <a href="http://wlcteam.ru/blog/cookie/">Рецепты</a>. Рецепты — это более короткие и конкретные заметки, где больше практики, чем теории. Причем рецепты будут появляться чаще, чем более объемные тематические статьи, так как встретилась задача → решили → протестировали → в блог :)</p>

<p>А разные и порой нетривиальные задачи мы решаем каждый день. Более-менее интересные будем выкладывать здесь.</p>

<h3>Задача</h3>
<p>Довольно часто случается так, когда светлый логотип расположен на темном фоне. При печати этот логотип будет просто не виден, так как фон по умолчанию белый.</p>

<p>Как быть?</p>]]></description>
			<content:encoded><![CDATA[<p>На We love CSS мы запускаем новую категорию, под названием <a href="http://wlcteam.ru/blog/cookie/">Рецепты</a>. Рецепты — это более короткие и конкретные заметки, где больше практики, чем теории. Причем рецепты будут появляться чаще, чем более объемные тематические статьи, так как встретилась задача → решили → протестировали → в блог :)</p>

<p>А разные и порой нетривиальные задачи мы решаем каждый день. Более-менее интересные будем выкладывать здесь.</p>

<h3>Задача</h3>
<p>Довольно часто случается так, когда светлый логотип расположен на темном фоне. При печати этот логотип будет просто не виден, так как фон по умолчанию белый.</p>

<p>Как быть?</p>

<h3>Решение</h3>

<div class="sample">
<style>
@media screen {
	h1#logo a {
			display:block;
			padding:10px;
margin:0 0 10px;
			width:200px;
			height:230px;
			background: #000 url("http://demo.wlcteam.ru/print-background-image/logo_white.png") no-repeat 10px 10px;
		}
		
	h1#logo img { visibility:hidden; }
}
@media print {
	h1#logo img {border:0;}
}	
</style>
<h1 id="logo"><a href="http://wlcteam.ru"><img src="http://demo.wlcteam.ru/print-background-image/logo.png"/></a></h1>
<small><p>Посмотрите версию для печати.</p></small>

<p>Решение довольно простое — замена картинок для разных типов устройств и в зависимости от типа выводим нужную картинку:</p>
<ol class="code"><li><code>@media screen {</code></li>
<li><code>	h1#logo a {</code></li>
<li><code>		display:block;</code></li>
<li><code>		padding:10px;</code></li>
<li><code>		width:200px;</code></li>
<li><code>		height:230px;</code></li>
<li><code>		background: #000 url("logo_white.png") no-repeat 10px 10px;</code></li>
<li><code>		}</code></li>
<li><code>	h1#logo img { visibility:hidden; }</code></li>
<li><code>}</code></li></ol>



<blockquote><p>Почему в примере <code>img</code>, а не <code>background-image</code>? Потому что фоновые картинки по умолчанию не распечатываются.</p></blockquote>

<p>Данный метод применим не только логотипам, но и к любым фоновым картинкам, которые нужно распечатать — поэтому, будьте внимательны к мелочам ;)</p>
</div><img src="http://feeds.feedburner.com/~r/wlcteam/PfoA/~4/Y7GVKjXySBI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://wlcteam.ru/blog/tips-and-tricks/print-background-image/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://wlcteam.ru/blog/tips-and-tricks/print-background-image/</feedburner:origLink></item>
		<item>
		<title>Extend Grid — версия 1.2</title>
		<link>http://feedproxy.google.com/~r/wlcteam/PfoA/~3/zSMKr9pzQKc/</link>
		<comments>http://wlcteam.ru/blog/extend-grid-1-2/#comments</comments>
		<pubDate>Mon, 10 May 2010 00:40:54 +0000</pubDate>
		<dc:creator>Геннадий Уханов</dc:creator>
				<category><![CDATA[Блог]]></category>
		<category><![CDATA[Extend Grid]]></category>
		<category><![CDATA[grid]]></category>
		<category><![CDATA[модульная сетка]]></category>

		<guid isPermaLink="false">http://wlcteam.ru/?p=302</guid>
		<description><![CDATA[<p>О разработке этого плагина <a href="http://wlcteam.ru/blog/publications/extend-grid/">мы уже писали</a>. После выпуска первой версии, собрав большую (и разумную) часть пожеланий (<a href="http://habrahabr.ru/blogs/webdev/90060/#comments">спасибо Хабр</a>) —  выпустили новую версию Extend Grid <em>1.2</em>.</p>

<p>Итак, что новенького?</p>]]></description>
			<content:encoded><![CDATA[О разработке этого плагина <a href="http://wlcteam.ru/blog/publications/extend-grid/">мы уже писали</a>. После выпуска первой версии, собрав большую (и разумную) часть пожеланий (<a href="http://habrahabr.ru/blogs/webdev/90060/#comments">спасибо Хабр</a>) —  выпустили новую версию Extend Grid <em>1.2</em>.

Итак, что новенького?
<h3>Интерфейс</h3>
<img style="border: 0;" src="http://assets.wlcteam.ru/i/posts/extend-grid-1-2/interface.jpg" alt="Extend Grid 1.2" />

Нарисовали новый «гламурный» скин, со всякой анимацией, плавностью и прочими модными штучками, с активным использованием CSS3. Конечно же опционально, при тормозах при желании можно отключить.

Также переработана интерфейсная часть — все стало проще и компактнее. Все параметры сетки уложились в одну строчку. Последовательность такая:
<ul>
	<li>Размер столбца (px, %)</li>
	<li>Отступ столбца (px, %)</li>
	<li>Размер строки (px, %) — иначе в народе Row</li>
	<li>Отступ строки (px, %)</li>
	<li>Отступ у линии (px, %)</li>
</ul>
Вы не запутаетесь в пределах одной строчки, так как умный хелпер будет подсказывать, что и в какой последовательности вводить. Также появились шоркаты — H (Показать/Скрыть сетку) и D (Свернуть/Развернуть окно).

Появился drag-and-drop, с сохранением позиции панели.
<h3>Функционал</h3>
Одно из главных функциональных новшеств — Extend Grid, переписан на JQuery. Теперь внедрение модульных сеток в проекты стало еще проще.

Поддержка резинки, т.е. в качестве параметров сетка принимает не только пиксели, но и проценты, что позволяет создавать резиновые сетки. Поддержки <code>em</code> и <code>ex</code> пока нет.

Сохранение данных — в Local Storage, для «некошерных» браузеров — в куки.

И, пожалуй, самое главное — серилизация адресной строки. Т.е. можно передавать данные прямо оттуда. Пример — <em>http://mysite.com/#eGrid[10px,10px,100px,10px]</em>. Одним махом решена проблема с передачей параметров из браузера в браузер. Также можно делится сетками с другими разработчиками и дизайнерами.
<h3>Пример</h3>
<ol class="code"><li><code>&lt;script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"&gt;&lt;/script&gt;</code></li>
<li><code>&lt;script type="text/javascript" src="http://grid.wlcteam.ru/1.2/jquery.extend.grid.1.2.js"&gt;&lt;/script&gt;</code></li>
<li><code>&lt;script type="text/javascript"&gt;</code></li>
<li><code>$(document).ready(function(){</code></li>
<li><code>$("body").extend_grid();</code></li>
<li><code>});</code></li>
<li><code>&lt;/script&gt;</code></li></ol>

Демо вы видите <a href="http://wlcteam.ru/blog/extend-grid-1-2/#eGrid[10px,1px,100px,10px]">прямо на этой странице</a>. Исходник в zip-архиве — <a href="http://grid.wlcteam.ru/1.2/source.zip">здесь</a>, впоследствии перенесем на Google Gode.
<h3>Планы</h3>
В будущем хочется расширить функционал, например ввести линейки, как Photoshop. Также все больше и больше доводов о ненужности панели — в пользу адресной строки. Кто знает :)

<script src="http://grid.wlcteam.ru/1.2/jquery.extend.grid.1.2.pack.js" type="text/javascript"></script>
<link href="http://grid.wlcteam.ru/1.2/grid.css" rel="stylesheet" media="all" />

 
<script type="text/javascript">// <![CDATA[
				$(document).ready(function(){
					$("body").extend_grid();
				});

		
// ]]&gt;</script><img src="http://feeds.feedburner.com/~r/wlcteam/PfoA/~4/zSMKr9pzQKc" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://wlcteam.ru/blog/extend-grid-1-2/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		<feedburner:origLink>http://wlcteam.ru/blog/extend-grid-1-2/</feedburner:origLink></item>
		<item>
		<title>CSS3 для Internet Explorer. Часть вторая</title>
		<link>http://feedproxy.google.com/~r/wlcteam/PfoA/~3/gKzlYo4_ihI/</link>
		<comments>http://wlcteam.ru/blog/publications/css3-solutions-for-internet-explorer-part-2/#comments</comments>
		<pubDate>Thu, 06 May 2010 21:28:17 +0000</pubDate>
		<dc:creator>Геннадий Уханов</dc:creator>
				<category><![CDATA[Статьи]]></category>
		<category><![CDATA[CSS3]]></category>
		<category><![CDATA[filter]]></category>
		<category><![CDATA[gradient]]></category>
		<category><![CDATA[Internet Explorer]]></category>
		<category><![CDATA[Multiple Backgrounds]]></category>
		<category><![CDATA[rgba]]></category>
		<category><![CDATA[transform]]></category>

		<guid isPermaLink="false">http://wlcteam.ru/?p=254</guid>
		<description><![CDATA[<p>Продолжение перовой части статьи «<a href="http://wlcteam.ru/blog/publications/css3-solutions-for-internet-explorer-part-1/">CSS3 для Internet Explorer. Часть первая</a>»</p>]]></description>
			<content:encoded><![CDATA[<p>Продолжение перовой части статьи «<a href="http://wlcteam.ru/blog/publications/css3-solutions-for-internet-explorer-part-1/">CSS3 для Internet Explorer. Часть первая</a>»</p>

<h3>Градиенты</h3>
<p>Еще один прием, который позволяет значительно сэкономить время при помощи CSS — это возможность создавать градиенты в качестве фона. В IE данный эффект реализется через уже знакомое нам свойство <code>filter</code> с параметром <code>Microsoft.gradient</code>.</p>

<h4>Синтаксис</h4>
<ol class="code"><li><code>#gradient {</code></li>
<li><code>	background-image: -moz-linear-gradient(</code></li>
<li><code>		top, #81a8cb, #4477a1); /* Firefox 3.6 */</code></li>
<li><code>	background-image: -webkit-gradient(</code></li>
<li><code>		linear,</code></li>
<li><code>		left bottom,</code></li>
<li><code>		left top,</code></li>
<li><code>		color-stop(0, #4477a1),</code></li>
<li><code>		color-stop(1, #81a8cb)); /* Safari и Chrome */</code></li>
<li><code>	filter:  progid:DXImageTransform.Microsoft.gradient(</code></li>
<li><code>		GradientType=0,</code></li>
<li><code>		startColorstr='#81a8cb',</code></li>
<li><code>		endColorstr='#4477a1'); /* IE6 и IE7 */</code></li>
<li><code>	-ms-filter: "progid:DXImageTransform.Microsoft.gradient(</code></li>
<li><code>		GradientType=0,</code></li>
<li><code>		startColorstr='#81a8cb',</code></li>
<li><code>		endColorstr='#4477a1')"; /* IE8 */</code></li>
<li><code>}</code></li></ol>

<p>В IE параметр <code>GradientType</code> может принимать два значения — 1 (горизонтальный градиенты) и 0 (вертикальный)</p>

<h4>Демо</h4>
<div
style="width: 250px; height: 90px; margin: 0 0 20px 0; text-align: center; color: #fff; padding: 25px 15px 0 15px; font-family: Arial, Helvetica, sans-serif; background-image: -moz-linear-gradient(top, #81a8cb, #4477a1); background-image: -webkit-gradient(linear,left bottom,left top,color-stop(0, #4477a1),color-stop(1, #81a8cb)); filter:  progid:DXImageTransform.Microsoft.gradient(GradientType=0,startColorstr='#81a8cb', endColorstr='#4477a1'); -ms-filter: "progid:DXImageTransform.Microsoft.gradient(GradientType=0,startColorstr='#81a8cb', endColorstr='#4477a1')";"><p>Пример градиента.</p></div>

<h4>Недостатки</h4>
<ul>
<li>Из-за дополнительных селекторов <code>-moz</code> и <code>-webkit</code> ваш CSS будет считаться не валидным.</li>
<li>Для IE8 необходим дополнительный селектор <code>-ms</code>.</li>
<li>В IE поддерживается только линейный градиенты. Радиальный градиент, программно, создать невозможно.</li>
<li>Для того, что бы градиент в IE был видимым — необходимо включить hasLayout (<code>zoom:1</code>).</li>
</ul>

<h3>Прозрачность в цветах (RGBA)</h3>
<p>В CSS3 можно применять прозрачность не только через <code>opacity</code>, но и через alpha-канал. В IE данный метод не поддерживается, но обойти эту проблему можно точно также, как и в предыдущем примере — при помощи градиентов.</p>

<h4>Синтаксис</h4>
<p>Для браузеров поддерживающие CSS:</p>
<ol class="code"><li><code>#rgba p {</code></li>
<li><code>	background: rgba(98, 135, 167, .4);</code></li>
<li><code>}</code></li></ol>

<p>В этом примере, цвет задается в формате RGB. Четвертый параметр — alpha-канал — именно в нем варьируется значение прозрачности. Для IE задаем одинаковые значения цветов в градиенте. Значением alpha (в шестнадцатеричном формате) являются первые две цифры.</p>

<ol class="code"><li><code>#rgba p {</code></li>
<li><code>	filter: progid:DXImageTransform.Microsoft.gradient(</code></li>
<li><code>	GradientType=0,</code></li>
<li><code>	startColorstr='#886287a7',</code></li>
<li><code>	endColorstr='#886287a7'</code></li>
<li><code>	);</code></li>
<li><code>}</code></li></ol>

<h4>Демо</h4>

<p>Первый пример — демонстрация прозрачности цветов в браузерах с поддержкой CSS3, во втором только IE.</p>

<div style="width: 250px; height: 90px; background: none repeat scroll 0% 0% lightblue; margin: 0pt 0pt 20px; text-align: center; color: rgb(68, 68, 68); padding: 20px 15px 0pt; font-family: Arial,Helvetica,sans-serif;"><p style="background: none repeat scroll 0% 0% rgba(98, 135, 167, 0.4); color: white; padding: 10px; margin: 0pt;">В этом примере применяем прозрачность 40%, через RGBA (не работает в IE).</p></div>

<div style="width: 250px; height: 90px; background: none repeat scroll 0% 0% lightblue; margin: 0pt 0pt 20px; text-align: center; color: rgb(68, 68, 68); padding: 20px 15px 0pt; font-family: Arial,Helvetica,sans-serif;"><p style="color: white; padding: 10px; margin: 0pt;">Аналогичный пример, но работает только в IE.</p></div>

<h4>Недостатки</h4>
<p>Абсолютно те же недостатки, что и с градиентами.</p>

<small><p>Как вариант и пожалуй более сложный — использование прозрачных PNG на фоне.</p></small>

<h3>Множественные фоны (Multiple Backgrounds)</h3>
<p>Заголовок говорит сам за себя, множественные фоны — довольно таки полезный и практичный метод позволяющий в виде нескольких слоев, накладывать изображения друг на друга. В данный момент только IE (до недавнего времени еще и Опера) не поддерживает этой свойство, но, опять таки имитирует некоторые его возможности через filter и параметр <code>Microsoft.AlphaImageLoader</code>. Но, нужно заметить — очень ограниченно.</p>

<h4>Синтаксис</h4>
<ol class="code"><li><code>#multi-bg {</code></li>
<li><code>	background:</code></li>
<li><code>		url(images/bg-image-1.gif) center center no-repeat,</code></li>
<li><code>		url(images/bg-image-2.gif) top left repeat;</code></li>
<li><code>}</code></li></ol>

<ol class="code"><li><code>#multi-bg {</code></li>
<li><code>	background: transparent url(images/bg-image-1.gif) top left repeat;</code></li>
<li><code>	filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(</code></li>
<li><code>		src='images/bg-image-2.gif',</code></li>
<li><code>		sizingMethod='crop'</code></li>
<li><code>		); /* IE6-8 */</code></li>
<li><code>	-ms-filter: "progid:DXImageTransform.Microsoft.AlphaImageLoader(</code></li>
<li><code>		src='images/bg-image-2.gif',</code></li>
<li><code>		sizingMethod='crop')"; /* IE8 only */</code></li>
<li><code>}</code></li>
<li><code></code></li></ol>

<p>В IE, одновременно больше двух фонов подключить просто не получится.</p>

<h4>Демо</h4>

<p>Chrome, Firefox, Safari и Opera:</p>
<div style="width: 250px; height: 90px; margin: 0pt 0pt 20px; text-align: center; padding: 50px 15px 0pt; font-family: Arial,Helvetica,sans-serif; background: url(&quot;http://media.smashingmagazine.com/cdn_smash/wp-content/uploads/2010/04/bg-leaf.gif&quot;) no-repeat scroll center center, url(&quot;http://media.smashingmagazine.com/cdn_smash/wp-content/uploads/2010/04/bg-leaf-small.gif&quot;) repeat scroll left top transparent; border: 1px solid rgb(187, 187, 187);"></div>

<p>Данный пример работает только в IE:</p>
<div style="width: 250px; height: 90px; margin: 0pt 0pt 20px; text-align: center; padding: 50px 15px 0pt; font-family: Arial,Helvetica,sans-serif; background: url(&quot;http://media.smashingmagazine.com/cdn_smash/wp-content/uploads/2010/04/bg-leaf-small.gif&quot;) repeat scroll left top transparent; border: 1px solid rgb(187, 187, 187);"></div>

<h4>Недостатки</h4>

<ul>
<li>Невалидный CSS</li>
<li>В IE, вторая подключаемая картинка будет находится в левом верхнем углу. <code>background-repeat</code> также не работает. Отсюда вывод — данный метод можно использовать в крайне специфичном случае.</li>
</ul>

<h3>Вращение элементов</h3>
<p>В CSS3 появилось масса возможностей для работы с трансформацией и анимации элементов (в Webkit). В данном примере поговорим о вращении. Вращение элементов в IE можно имитировать при помощи <code>progid:DXImageTransform.Microsoft.Matrix</code></p>
 
<h4>Синтаксис</h4>

<ol class="code"><li><code>#rotate {</code></li>
<li><code>	-webkit-transform: rotate(180deg);</code></li>
<li><code>        -o-transform: rotate(180deg);</code></li>
<li><code>	-moz-transform: rotate(180deg);</code></li>
<li><code>}</code></li>
<li><code></code></li></ol>
<ol class="code"><li><code>#rotate {</code></li>
<li><code>             filter: progid:DXImageTransform.Microsoft.Matrix(</code></li>
<li><code>					 sizingMethod='auto expand',</code></li>
<li><code>                     M11=0.9914448613738104,</code></li>
<li><code>					 M12=-0.13052619222005157,</code></li>
<li><code>					 M21=0.13052619222005157,</code></li>
<li><code>					 M22=0.9914448613738104); /* IE6,IE7 */</code></li>
<li><code>         -ms-filter: "progid:DXImageTransform.Microsoft.Matrix(</code></li>
<li><code>					 SizingMethod='auto expand',</code></li>
<li><code>                     M11=0.9914448613738104,</code></li>
<li><code>					 M12=-0.13052619222005157,</code></li>
<li><code>					 M21=0.13052619222005157,</code></li>
<li><code>					 M22=0.9914448613738104)"; /* IE8 */</code></li>
<li><code>}</code></li></ol>
<h4>Пример</h4>
<div style="width: 250px; height: 90px; background: none repeat scroll 0% 0% rgb(238, 238, 238); margin: 0pt 0pt 20px; text-align: center; color: rgb(68, 68, 68); padding: 30px 15px 0pt; font-family: Arial,Helvetica,sans-serif; -moz-transform: rotate(180deg); border-bottom: 3px solid rgb(187, 187, 187);"><p>This element is rotated 180 degrees in Internet Explorer.</p></div>


<h4>Недостатки</h4>
<ul>
<li>Из недостатков можно выделить, множество селекторов для разных браузеров.</li>
<li><a href="http://css3please.com/">Вычислить точный градус</a> в IE довольно сложно.</li>
</ul>

<p>На этом все — в этой статье мы постарались собрать как можно больше «хаков» для IE. Как видите — 90% различных возможностей CSS3, решаются с помощью свойства <code>filter</code> (которое кстати, было доступно задолго до CSS3). Надеюсь данные советы помогут в «полной кроссбраузерности» ваших проектов.</p>

<h3>Copyright</h3>
<p>Статья является <em>вольным</em> переводом (с дополнениями переводчика) с сайта <a href="http://www.smashingmagazine.com/2010/04/28/css3-solutions-for-internet-explorer/">Smashing Magazine — CSS3 Solutions for Internet Explorer</a>.</p>
<p>Публикуется с разрешения автора.</p>
<small><p>© Smashing Media GmbH.</p></small>

<img src="http://feeds.feedburner.com/~r/wlcteam/PfoA/~4/gKzlYo4_ihI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://wlcteam.ru/blog/publications/css3-solutions-for-internet-explorer-part-2/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://wlcteam.ru/blog/publications/css3-solutions-for-internet-explorer-part-2/</feedburner:origLink></item>
		<item>
		<title>CSS3 для Internet Explorer. Часть первая</title>
		<link>http://feedproxy.google.com/~r/wlcteam/PfoA/~3/xD-d1H2qKwg/</link>
		<comments>http://wlcteam.ru/blog/publications/css3-solutions-for-internet-explorer-part-1/#comments</comments>
		<pubDate>Mon, 03 May 2010 01:59:26 +0000</pubDate>
		<dc:creator>Геннадий Уханов</dc:creator>
				<category><![CDATA[Статьи]]></category>
		<category><![CDATA[border-radius]]></category>
		<category><![CDATA[box-shadow]]></category>
		<category><![CDATA[CSS3]]></category>
		<category><![CDATA[Internet Explorer]]></category>
		<category><![CDATA[opacity]]></category>
		<category><![CDATA[text-shadow]]></category>

		<guid isPermaLink="false">http://wlcteam.ru/?p=197</guid>
		<description><![CDATA[<p>На сегодняшний день, CSS3 — пожалуй наиболее популярный и модный тренд в современном веб-дизайне и позволяет разработчикам внедрять различные визуальные эффекты — без дополнительной html-разметки, без лишних картинок и объемного JavaScript.</p>]]></description>
			<content:encoded><![CDATA[<p>На сегодняшний день, CSS3 — пожалуй наиболее популярный и модный тренд в современном веб-дизайне и позволяет разработчикам внедрять различные визуальные эффекты — без дополнительной html-разметки, без лишних картинок и объемного JavaScript.</p>

<img src="http://assets.wlcteam.ru/i/posts/css3-solutions-for-internet-explorer/ie.jpg" alt="CSS3 для Internet Explorer" />

<p>Но, к сожалению, Internet Explorer, даже в последней 8-й версии, <a href="http://msdn.microsoft.com/en-us/library/cc351024(VS.85).aspx">не поддерживает</a> многих новых свойств и возможностей CSS3.</p>

<p><small>К слову — в <a href="http://ie.microsoft.com/testdrive/">Internet Explorer 9</a> ожидается <a href="http://ie.microsoft.com/testdrive/HTML5/10CSS3_Selectors/Default.html">значительное потепление</a>. Разработчики готовы простить «грехи» предыдущих версий за обещанные возможности :) </small></p>

<p>Хотя на данный момент CSS3 не является утвержденным стандартом, но это не мешает многим использовать многие возможности (скругленные уголки, тени и прочие прелести) в своих (и даже коммерческих) проектах, с так называемым <a href="http://dev.opera.com/articles/view/progressive-enhancement-with-css-3-a-be/">постепенным ухудшением внешнего вида сайта</a> в менее продвинутых браузерах.</p>

<a href="http://dev.opera.com/articles/view/progressive-enhancement-with-css-3-a-be/"><img src="http://devfiles.myopera.com/articles/283/Example_6.png" width="600" alt="A better experience for modern browsers" /></a>

<p>Тем не менее, довольно часто, возникают ситуации, когда клиент требует абсолютной кроссбраузерности, в том числе и для IE6.</p>

<p>В этой статье мы собрали несколько примеров, который помогут эмулировать некоторые свойства CSS3 в Internet Explorer.</p>

<h3>Opacity / Transparency</h3>
<p>Многих до сих пор удивляет тот факт, что Internet Explorer не поддерживает столь популярное свойство <code>opacity</code>. К счастью существует альтернатива в виде приоретарного свойства <code>filter</code>.</p>

<h4>Синтаксис</h4>

<ol class="code"><li><code>#myElement {</code></li>
<li><code>    opacity: .4; /* other browsers */</code></li>
<li><code>    filter: progid:DXImageTransform.Microsoft.Alpha(opacity=40); /* работает в IE6, IE7 и IE8 */</code></li>
<li><code>    -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(opacity=40)"; /* работает только в IE8 */</code></li>
<li><code>}</code></li></ol>

<h4>Демо</h4>
<div 
style="width: 250px; height: 100px; margin: 20px 0 20px 0; background: #00f; text-align: center; color: white; padding: 20px 15px 0 15px; font-family: Arial, Helvetica, sans-serif; opacity: 0.4; filter: progid:DXImageTransform.Microsoft.Alpha(opacity=40); -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(opacity=40)";"><p>К элементу применена прозрачность на 60%</p></div><div 
style="width: 250px; height: 90px; margin: 20px 0 20px 0; background: #00f; text-align: center; color: white; padding: 20px 15px 0 15px; font-family: Arial, Helvetica, sans-serif;"><p>Тот же элемент, но без прозрачности.</p></div>

<h4>Недостатки</h4>
<ul>
<li>Свойство <code>filter</code> — приоретарное свойство Microsoft и поэтому не валидно.</li>
<li>Как и в случае <code>opacity</code> дочерние элементы родителя, к которому применено это свойство, наследуют прозрачность.</li>
</ul>

<h3>Border-radius</h3>
<p>Свойство <code>border-radius</code> одно из популярнейших свойств CSS3. Именно <code>border-radius</code> позволило добиться эффекта «скругленных уголков» без лишней головной боли, избавив от проблем с позиционированием множества элементов (<em>в классическом решении 9 элементов</em>) и применением лишнего JavaScript.</p>

<p>Опять-таки, ложку дегтя в бочку меда вносит Internet Explorer</p>
<small><p>Кстати, как ни странно, но Opera, включила поддержку этого свойства (да и многих других) лишь с 10-й версии. Что в принципе удивительно для столь продвинутого браузера.</p></small>

<p>Одно из решений этой проблемы, создано <a href="http://www.htmlremix.com/about">Remiz Rahnas</a> — в виде <a href="http://en.wikipedia.org/wiki/HTML_Components">HTC файла</a> <a href="http://www.htmlremix.com/css/curved-corner-border-radius-cross-browser">CSS Curved Corner</a>, который можно скачать с <a href="http://code.google.com/p/curved-corner/">Google Code</a>. 
</p>

<p>Огромный плюс библиотеки — это простота использования. </p>

<h4>Синтаксис</h4>
<ol class="code"><li><code>.box-radius {</code></li>
<li><code>	border-radius: 15px;</code></li>
<li><code>	behavior: url(border-radius.htc);</code></li>
<li><code>}</code></li></ol>

<p><a href="http://www.impressivewebs.com/css3-rounded-corners-in-internet-explorer/">Пример</a>.</p>

<p>И все! border-radius.htc корректно считывает значения свойства <code>border-radius</code>. Данный «хак» настоятельно рекомендуется выносить за пределы основного CSS и использовать только в в стилях для Internet Explorer.</p>

<h4>Недостатки</h4>

<ul>
<li>HTC-файл довольно-таки объемный (142 строчки кода).</li>
<li>В CSS свойства <code>behavior</code> ну существует и поэтому при его использовании ваш CSS будет считаться некорректным.</li>
<li>В IE8 наблюдаются проблемы с <code>z-index</code>.</li>
</ul>

<h3>Box-shadow</h3>
<p><code>box-shadow</code> — не менее полезное свойство, добавляющее тень к блочным элементам. К тому, что Internet Explorer не поддерживает это свойство (понятное дело, мы уже к этому привыкли), добавляется неприятный факт — свойство <code>filter</code> реализует поддержку <code>box-shadow</code> немного по другому.</p>

<p>Также, стоить отметить, что свойство <code>box-shadow</code> было удалено из раздела <a href="http://www.w3.org/TR/css3-background/#the-box-shadow">CSS3 Backgrounds and Borders Module</a>:</p>

<blockquote>This module previously defined a 'box-shadow' property. This feature has been removed from this module for further discussion, and should reappear in another CSS module (or a later version of this module) in the near future.</blockquote>

<h4>Синтаксис</h4>
<ol class="code"><li><code>.box-shadow {</code></li>
<li><code>	box-shadow: 2px 2px 3px #969696; /* для Opera 10.5+ */</code></li>
<li><code>	-moz-box-shadow: 2px 2px 3px #969696; /* для Firefox 3.5+ */</code></li>
<li><code>	-webkit-box-shadow: 2px 2px 3px #969696; /* для Safari и Chrome */</code></li>
<li><code>	filter: progid:DXImageTransform.Microsoft.Shadow(color='#969696', Direction=145, Strength=3);</code></li>
<li><code>}</code></li></ol>

<small>Как видите поддержка свойства box-shadow со стороны всех браузеров не официальна  (особенно у Opera, так как Opera 10 первый браузер который использует свойства CSS3 без дополнительных селекторов).</small>

<h4>Демо</h4>

<div 
style="width: 250px; height: 90px; background: #eee; margin: 20px 0 20px 0; text-align: center; color: #444; padding: 35px 15px 0 15px; font-family: Arial, Helvetica, sans-serif; -moz-box-shadow: 2px 2px 3px #969696; -webkit-box-shadow: 2px 2px 3px #969696; filter: progid:DXImageTransform.Microsoft.Shadow(color='#969696', Direction=145, Strength=3);"><p>Тестируем box-shadow.</p></div>

<h4>Недостатки</h4>

<ul>
<li>Параметры свойства <code>filter</code> не совпадают с параметрами <code>box-shadow</code>, поэтому придется заниматься подгонкой, что называется на глаз.</li>
<li>На данный момент, свойство <code>box-shadow</code> считается не валидным, как использование дополнительных селекторв типа <code>-moz</code> и <code>-webkit</code></li>
</ul>

<h3>Text Shadow</h3>
<p>Добавление тени к тексту, практикуется в печатных изданиях уже не первый десяток лет. На сайте же, приходилось имитировать тень с помощью картинок (например <a href="http://wlcteam.ru/blog/publications/replaced_tech/">один из способов</a>). C приходом CSS3 применить тень к тексту стало гораздо проще — при помощи свойства <code>text-shadow</code>.</p>

<p>К сожалению Internet Explorer не поддерживает <code>text-shadow</code>, даже в свойстве <code>filter</code>. C этой проблемой может помочь JavaScript — <a href="http://kilianvalkhof.com/2008/javascript/text-shadow-in-ie-with-jquery/">JQuery-плагин</a> написанный <a href="http://kilianvalkhof.com/">Kilian Valkhof</a>.</p>

<h4>Синтаксис</h4>

<ol class="code"><li><code>.text-shadow {</code></li>
<li><code>	text-shadow: #aaa 1px 1px 1px;</code></li>
<li><code>}</code></li></ol>

<p>И пример использования плагина:</p>
<ol class="code"><li><code>// include jQuery library in your page</code></li>
<li><code>// include link to plugin in your page</code></li>
<li><code>$(document).ready(function(){</code></li>
<li><code>	$(".text-shadow").textShadow();</code></li>
<li><code>});</code></li></ol>

<p><a href="http://www.impressivewebs.com/css3-text-shadow-in-internet-explorer/">Пример</a>.</p>


<h4>Недостатки</h4>
<ul>
<li>Что бы добавить тень к тексту в IE — придется потратить очень много времени.</li>
<li>Использование JavaScript и сторонних библиотек в виде JQuery.</li>
<li>В отличии от CSS3 плагин не поддерживает multiple-shadows (множественные тени).</li>
<li>Тени в IE, внешне, всегда отличаются от других бразуеров. Идентичности добиться почти невозможно.</li>
<li>Для корректной работы плагина, для элемента к которому применяется тень необходимо задать <code>z-index</code>.</li>
</ul>

<h3>Во второй части</h3>
<ul>
<li>Прозрачность в цветах (RGBA).</li>
<li>Градиенты.</li>
<li>Множественные фоны (Multiple Backgrounds).</li>
<li>Вращение элементов.</li>
</ul>

<h3>© Copyright</h3>
<p>Статья является <em>вольным</em> переводом (с дополнениями переводчика) с сайта <a href="http://www.smashingmagazine.com/2010/04/28/css3-solutions-for-internet-explorer/">Smashing Magazine — CSS3 Solutions for Internet Explorer</a>.</p>
<p>Публикуется с разрешения автора.</p>
<small><p>© Smashing Media GmbH.</p></small>

<p>Продолжение статьи <a href="http://wlcteam.ru/blog/publications/css3-solutions-for-internet-explorer-part-2/">во второй части</a>.</p>
<img src="http://feeds.feedburner.com/~r/wlcteam/PfoA/~4/xD-d1H2qKwg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://wlcteam.ru/blog/publications/css3-solutions-for-internet-explorer-part-1/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://wlcteam.ru/blog/publications/css3-solutions-for-internet-explorer-part-1/</feedburner:origLink></item>
		<item>
		<title>Философия — так ли нужен пресловутый clearfix?</title>
		<link>http://feedproxy.google.com/~r/wlcteam/PfoA/~3/kE_NevQA1kY/</link>
		<comments>http://wlcteam.ru/blog/publications/need-for-clearfix/#comments</comments>
		<pubDate>Thu, 29 Apr 2010 22:51:57 +0000</pubDate>
		<dc:creator>Геннадий Уханов</dc:creator>
				<category><![CDATA[Статьи]]></category>
		<category><![CDATA[claerfix]]></category>
		<category><![CDATA[float]]></category>
		<category><![CDATA[overflow]]></category>
		<category><![CDATA[Поток]]></category>

		<guid isPermaLink="false">http://wlcteam.ru/?p=155</guid>
		<description><![CDATA[<p>С понятием <code>clearfix</code> знаком пожалуй любой верстальщик. </p>
<p>Проблема в том, что при использовании <code>float</code> дочерние элементы родителя, начинают выходить за пределы его потока. Или, как говорят иначе — блок «схлопывается». Особенно часто это заметно в IE.</p>]]></description>
			<content:encoded><![CDATA[<p>С понятием <code>clearfix</code> знаком пожалуй любой верстальщик. </p>
<p>Проблема в том, что при использовании <code>float</code> дочерние элементы родителя, начинают выходить за пределы его потока. Или, как говорят иначе — блок «схлопывается». Особенно часто это заметно в IE.</p>
<blockquote>Тут то и приходит на помощь так называемый clearfix — класс с набором CSS свойств, который служит для очистки потока, основываясь на свойстве <code>clear:both;</code></blockquote>

<p>Вспоминаются первые конструкции <code>&lt;div style="clear:both;"&gt;&lt;/div&gt;</code> (и даже древний <code>&lt;br clear="all"/&gt;</code>, ага)</p>

<p>Время шло, жизнь менялась, а <code>clearfix</code> обрастал новыми свойствами на все случаи жизни. Сегодня, в классическом варианте он выглядит примерно так:</p>

<ol class="code"><li><code>.clearfix:after {</code></li>
<li><code>	content: ".";</code></li>
<li><code>	display: block;</code></li>
<li><code>	clear: both;</code></li>
<li><code>	visibility: hidden;</code></li>
<li><code>	line-height: 0;</code></li>
<li><code>	height: 0;</code></li>
<li><code>}</code></li>
<li><code></code></li>
<li><code>.clearfix {</code></li>
<li><code>	display: inline-block;</code></li>
<li><code>}</code></li>
<li><code></code></li>
<li><code>html[xmlns] .clearfix {</code></li>
<li><code>	display: block;</code></li>
<li><code>}</code></li>
<li><code></code></li>
<li><code>* html .clearfix {</code></li>
<li><code>	height: 1%;</code></li>
<li><code>}</code></li></ol>

<p>Кстати нельзя не вспомнить еще об одном методе очистки потока, к сожалению менее популярному, а именно — <code>overflow:hidden</code>. На эту тему есть отдельная статья — <a href="http://habrahabr.ru/blogs/css/48383/">Clear или overflow:hidden — очистка всего потока или создание контекста форматирования?</a>. Правда есть один неприятный минус</p>

<blockquote>У браузеров на движке Gecko (Firefox и ему подобные) есть неприятная особенность: текст в блоках, для которых задан <code>overflow:hidden</code> (либо auto) не выделяется дальше границ этого блока.</blockquote>

<p>И еще один простой метод. У родительского элемента с плавающими потомками — просто ставится <code>float:нужное значение</code>. Но у этого способа недостатков больше чем достоинств. Весь макет будет держатся «на соплях» — на тотальном и повсеместном <code>float</code>, что принесет больше слез, чем радости. Но в специфичных случаях — этот метод имеет право на жизнь.</p>

<p>К чему я веду. До недавнего времени, мы довольно часто использовали <code>clearfix</code> (к черту семантику!). </p>

<p>Ведь очень просто <code>&lt;div class="clearfix"&gt;&lt;/div&gt;</code> и дело в шляпе. Но, столкнувшись с парой проектов, где лишние и в принципе не нужные элементы были не допустимы, пришлось пересмотреть свои взгляды.</p>

<p><small>И если быть до конца честными — то <code>clearfix</code> — это все-таки костыль, в переломанных флаотом ногах потока. А такие болезни нужно лечить.</small></p>

<p>Комбинация внедрения <code>clearfix</code> в дополнительный класс <code>&lt;div class="header clearfix"&gt;&lt;/div&gt;</code> ни к чему хорошему не привела. Вышеописанный метод с <code>float</code> также не подошел.</p>

<p>И самое интересное. В конце концов мы остановились на обычном <code>clear:both | left | right)</code>, т.е. пришли к тому откуда начали. И это работало, не без потерь конечно — с неожиданными и редкими (чрезвычайно редкими) заскоками элементов в потоке.</p>



<blockquote><p>Рекомендуется применять в связке с <code>.block:after {content: '.';} </code></p></blockquote>

<p>В итоге — более тщательное взвешивание, а нужен ли здесь <code>float:left</code>? Никаких clearfix-ов и никаких лишних элементов. </p>

<p>Отсюда возникает философский вопрос, стоящий в заголовке статьи — а так ли нужен пресловутый <code>clearfix</code>?</p>
<img src="http://feeds.feedburner.com/~r/wlcteam/PfoA/~4/kE_NevQA1kY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://wlcteam.ru/blog/publications/need-for-clearfix/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		<feedburner:origLink>http://wlcteam.ru/blog/publications/need-for-clearfix/</feedburner:origLink></item>
		<item>
		<title>В погоне за CSS оптимизацией</title>
		<link>http://feedproxy.google.com/~r/wlcteam/PfoA/~3/mrpyiSOvegg/</link>
		<comments>http://wlcteam.ru/blog/publications/css-optimization/#comments</comments>
		<pubDate>Wed, 21 Apr 2010 22:33:47 +0000</pubDate>
		<dc:creator>Геннадий Уханов</dc:creator>
				<category><![CDATA[Статьи]]></category>
		<category><![CDATA[@media]]></category>
		<category><![CDATA[Data:URI]]></category>
		<category><![CDATA[YUI Compressor]]></category>
		<category><![CDATA[Вёрстка независимыми блоками]]></category>
		<category><![CDATA[Оптимизация]]></category>
		<category><![CDATA[Спрайты]]></category>

		<guid isPermaLink="false">http://wlcteam.ru/?p=89</guid>
		<description><![CDATA[<p>Хотелось бы поговорить о клиентской оптимизации со стороны верстальщика, т.е. как по максимуму оптимизировать CSS. Для себя мы вывели несколько негласных правил, о которых здесь и поговорим.</p>

<p>В принципе, основная задача — это снизить количество запросов к серверу и разумно уменьшить размер файлов. О gzip и прочих серверных настройках мы говорить не будем.</p>
<h3>Основные тезисы:</h3>

<ol>
	<li>Один main.css</li>
	<li>Правило @media</li>
	<li>Верстка независимыми блоками</li>
	<li>Спрайты и Data:URI</li>
	<li>Сжатие CSS</li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>Хотелось бы поговорить о клиентской оптимизации со стороны верстальщика, т.е. как по максимуму оптимизировать CSS. Для себя мы вывели несколько негласных правил, о которых здесь и поговорим.</p>

<p>В принципе, основная задача — это снизить количество запросов к серверу и разумно уменьшить размер файлов. О gzip и прочих серверных настройках мы говорить не будем.</p>
<h3>Основные тезисы:</h3>

<ol>
	<li><a href="http://wlcteam.ru/blog/publications/css-optimization/#one-css-file">Один CSS файл</a></li>
	<li><a href="http://wlcteam.ru/blog/publications/css-optimization/#media-types">Правило @media</a></li>
	<li><a href="http://wlcteam.ru/blog/publications/css-optimization/#independent-blocks">Верстка независимыми блоками</a></li>
	<li><a href="http://wlcteam.ru/blog/publications/css-optimization/#sprites-and-data-uri">Спрайты и Data:URI</a></li>
	<li><a href="http://wlcteam.ru/blog/publications/css-optimization/#minify-css">Сжатие CSS</a></li>
</ol>


<h3 id="one-css-file">Один CSS файл</h3>
<p>В свое время было очень модно разделять css на несколько файлов, main.css,  reset.css, typography.css, layout.css, mobile.css, print.css и т.д. Кстати этим «болеют» все CSS фреймворки. Да и мы раньше придерживались этого стиля.</p>

<p>С одной стороны, на этапе разработки это довольно удобно, логически разделять css на основные компоненты, но… Но далеко не все разработчики реализуют автоматическое склеивание всех css файлов в один основной, уже на боевом сайте. </p>

<p>После нескольких таких клиентов, мы внедрили несколько новый стиль логического формирования CSS. Называется «все в одном». И реализация довольно простая.</p>

<h3 id="media-types">Правило @media</h3>
<p>Вспоминаем о незаслуженно забытом правиле <code>@media</code>.
<a href="http://www.w3.org/TR/CSS2/media.html">Спецификация CSS 2.1</a> подразумевает, что страница может выводится на следующие типы носителей:</p>

<ol>
<li><code>all</code> — стили будут работать для любого типа устройства.</li>
<li><code>braille</code> — для вывода на устройства, выводящие информацию азбукой Брайля <sup><a href="#braille">1</a></sup>.</li>
<li><code>embossed</code> — то же что и braille, но не для устройств, а для физических страниц.</li>
<li><code>handheld</code> —  для небольших устройств, чаще для мобильных.</li>
<li><code>print</code> — для вывода на устройство печати.</li>
<li><code>projection</code> — для презентаций.</li>
<li><code>screen</code> — для вывода на экран компьютера.</li>
<li><code>speech</code> — для вывода на «читалки»-синтезаторы (в CSS2 назывался «aural»).</li>
<li><code>tty</code> — для любителей Lynx, т.е. для терминального вывода.</li>
<li><code>tv</code> — для вывода на телевизор (низкое разрешение, проблемы с промоткой).</li></ol>

<p>Правило <code>@media</code> работает во всей большой 4-ке (IE, Firefox, Opera, Safari).</p>

<blockquote><p>К слову, спецификация CSS3 довольно существенно <a href="http://www.w3.org/TR/css3-mediaqueries/">расширила</a> правило  <code>@media</code>.</p></blockquote>

<small id="braille"><p><sup>1</sup> <strong>Азбука Брайля</strong> — рельефно-точечный шрифт, предназначенный для письма и чтения незрячими людьми. Он был разработан французом Луи Брайлем (фр. Louis Braille), сыном сапожника, который в возрасте трёх лет потерял зрение, в результате воспаления глаз, начавшегося от того, что мальчик поранился шорным ножом (подобие шила) в мастерской отца. <a href="http://ru.wikipedia.org/wiki/%D0%A8%D1%80%D0%B8%D1%84%D1%82_%D0%91%D1%80%D0%B0%D0%B9%D0%BB%D1%8F">Подробнее в Википедии</a></p></small>


<p>Чаще всего используется all, screen, print. Приведем типичный пример main.css</p>
<ol class="code"><li><code>@media screen {</code></li>
<li><code>	/* reset */</code></li>
<li><code>	/* typography */</code></li>
<li><code>	/* layout */</code></li>
<li><code>}</code></li>
<li><code></code></li>
<li><code>@media print {</code></li>
<li><code>	.class|#id, .class|#id_1, ... , .class|#id_n {</code></li>
<li><code>		display: none;</code></li>
<li><code>	}</code></li>
<li><code>}</code></li>
<li><code></code></li>
<li><code>/* Ну как же без поддержки iPhone? :) */</code></li>
<li><code>@only screen and (max-device-width: 480px) {</code></li>
<li><code>}</code></li></ol>

<p>Каковы плюсы? Главного результата мы добились, объединение 3-х css файлов в один.</p>
<small><p>Page Speed счастлив — размещение CSS в HEAD странице: на странице должен быть только один внешний CSS-файл</p></small>

<p>Второе, не используем <code>@import</code>.</p>
<p>О минусах использования <code>@import</code> интересно и подробно <a href="http://www.stevesouders.com/blog/2009/04/09/dont-use-import/">рассказывает Steve Souders</a>. В двух словах — использование сразу нескольких правил <code>@impor</code>t в IE приводит к тому, что файлы загружаются не в том порядке, в котором они указаны в коде, что может привести к неожиданным и крайне неприятным результатам. В <a href="http://www.stevesouders.com/blog/2009/04/09/dont-use-import/">статье</a> приведено несколько примеров и графиков.</p>

<h3 id="independent-blocks">Верстка независимыми блоками</h3>

<p><a href="http://vitaly.harisov.name/article/independent-blocks.html">Верстка независимыми блоками</a> (дошедшая до концепции<a href="http://clubs.ya.ru/yacf/replies.xml?item_no=43"> Абсолютно Независимых Блоков</a>), разработанная Виталием Харисовым, успешно <a href="http://clubs.ya.ru/company/replies.xml?item_no=23106">используется в Яндексе</a>. Данный метод уменьшили время отрисовки страницы, особенно это заметно в IE6/7, где скорость <strong>увеличилась более чем на 100%</strong>.</p>

<p> В клубе <a href="http://clubs.ya.ru/yacf/">Блок, Элемент, Модификатор (БЭМ)</a> можно найти массу интересных решений и экспериментов.</p>

<p>Интересные факты:</p>
<blockquote><p>Браузеры рассматривают селекторы cправа налево. Например, при нахождении элемента в дереве документа будут выбраны все селекторы с <code>a</code> или <code>*</code> на конце и будет осуществлён просмотр вверх по дереву в поисках элементов входящих в селектор до тех пор пока не будут найдены подходящие элементы, не станет понятно, что селектор не применим или не будет достигнут конец документа.</p></blockquote>

<p>Источники, подтверждающие это:</p>

<ol>
	<li><a href="https://developer.mozilla.org/en/Writing_Efficient_CSS#How_the_Style_System_Matches_Rules">Writing Efficient CSS for use in the Mozilla UI</a></li>
	<li><a href="http://vitaly.ya.ru/replies.xml?item_no=4148">Faster HTML and CSS: Layout Engine Internals for Web Developers</a></li>
</ol>

<p>Также интересный подход сокращения всех уникальных длинных имен классов до буквенных сокращений вида <code>&lt;div class="ac"&gt;</code>. Такая замена происходит на всех уровнях: статическая верстка, стили, шаблоны и скрипты. Делается с помощью маленькой утилиты <a href="http://github.com/gfranco/jeanny/">jeanny</a>.</p>

<p>Как бы то не было, отказавшись от каскада в CSS, данные методы дают свои крайне положительные результаты.</p>

<small><p>Page Speed опять-таки счастлив — правило <em>Use efficient CSS selectors</em> выполнено как никогда :)</p></small>

<h3 id="sprites-and-data-uri">Спрайты и Data:URI</h3>
<p>В этом вопросе у нас несколько двоякий взгляд. Мы делаем несколько спрайтов:</p>
<ol>
<li>Иконки</li>
<li>Менюшки</li>
<li>UI (кнопки, чекбоксы и прочиее)</li>
</ol>

<p>А вот различные тянущиеся фоны и всякие мелкие элементы не подающие в вышеперечисленный список —  мы встраиваем в CSS при помощи <a href="http://ru.wikipedia.org/wiki/Data:_URL" title ="Что такое Data:URI" >Data:URI</a>, ага.</p>

<ol class="code"><li><code>ul.checklist > li.complete {</code></li>
<li><code>    margin-left: 20px;</code></li>
<li><code>    background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAA</code></li>
<li><code>        ABlBMVEUAAAD///+l2Z/dAAAAM0lEQVR4nGP4/5/h/1+G/58ZDrAz3D/McH8yw83NDDeN</code></li>
<li><code>        Ge4Ug9C9zwz3gVLMDA/A6P9/AFGGFyjOXZtQAAAAAElFTkSuQmCC) top left no-repeat;</code></li>
<li><code>}</code></li></ol>

<p>Да, все красиво, Data:URI экономит HTTP-запросы, но конечно что не без потерь с IE. IE6/7 в принципе не поддерживает Data:URI. IE8 поддерживает <a href="http://code.msdn.microsoft.com/Release/ProjectReleases.aspx?ProjectName=ie8whitepapers&ReleaseId=575">частично</a>.</p>

<p>Альтернативный способ — mhtml. О поддержке Data:UI в IE подробно <a href="http://bolknote.ru/2008/04/03/~1656#25">писал Bolk</a>. </p>

<p>К сожалению это не единственный минус. Использование Data:URI, даст ответ на вопрос <a href="http://habrahabr.ru/blogs/client_side_optimization/79262/">как замедлить Firefox в 10 (десять) раз</a>? :)</p>



<blockquote><p><strong>Важная пометка</strong> — был обнаружен плагин Wappalyzer — который на порядок замедлял отображение data:URI в Firefox</p></blockquote>


<p>Сейчас же наиболее оптимальным выходом является предварительное использование CSS Sprites, а потом конвертации минимального числа изображений в base64-формат, таким образом все издержки будут сведены к минимуму. Что мы собственно и делаем — придерживаемся гибридного подхода CSS-спрайты и  Data:URI.</p>

<p>Ссылки по теме:</p>
<ol>
	<li><a href="http://habrahabr.ru/blogs/client_side_optimization/79262/">Data:URI и производительность, или как замедлить Firefox в 10 (десять) раз</a></li>
	<li><a href="http://bolknote.ru/2008/04/03/~1656#25">Data:URI в IE</a> </li>
	<li><a href="http://webo.in/articles/habrahabr/29-all-about-data-url-images/">Картинки в теле страницы с помощью data:URL</a></li>
<li><a href="http://duris.ru/">Отечественный ресурс по автоматической генерации спрайтов</a> и <a href="http://duris.ru/articles/">статьи по данной теме</a></li>
<li><a href="http://chikuyonok.ru/2010/02/browser-data-url/">Data:URI средствами браузера</a></li>
</ol>

<h3 id="minify-css">Сжатие CSS</h3>
<p>Последний штрих, сжатие CSS при помощи <a href="http://developer.yahoo.com/yui/compressor/">YUI Compressor</a>.</p>

<p>Здесь ничего сложного, скрипт автоматически сжимает CSS, удаляет пробелы и комментарии. Чаще всего размер файла уменьшается на 10-30%, что в принципе будет приятной ложкой меда, ко всему вышесказанному.</p>

<p>Продолжение на тему клиентской оптимизации (JavaScript и картинки) будет чуть позже, отдельными постами.</p>

<img src="http://feeds.feedburner.com/~r/wlcteam/PfoA/~4/mrpyiSOvegg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://wlcteam.ru/blog/publications/css-optimization/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		<feedburner:origLink>http://wlcteam.ru/blog/publications/css-optimization/</feedburner:origLink></item>
	</channel>
</rss>

