<?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>Css-live - Сверстай свой мир!</title>
	<atom:link href="http://css-live.ru/feed" rel="self" type="application/rss+xml" />
	<link>http://css-live.ru</link>
	<description>Css-live - Сверстай свой мир!</description>
	<lastBuildDate>Thu, 17 May 2012 23:00:31 +0000</lastBuildDate>
	<language>ru</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
<xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" />
		<item>
		<title>animation-direction &#8211; хорошая идея?</title>
		<link>http://css-live.ru/articles/animation-direction-xoroshaya-ideya.html</link>
		<comments>http://css-live.ru/articles/animation-direction-xoroshaya-ideya.html#comments</comments>
		<pubDate>Thu, 17 May 2012 21:00:50 +0000</pubDate>
		<dc:creator>simoroshka</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[Статьи]]></category>
		<category><![CDATA[анимация]]></category>

		<guid isPermaLink="false">http://css-live.ru/?p=6849</guid>
		<description><![CDATA[animation-direction? Давайте предположим, что у вас есть CSS анимация для...]]></description>
			<content:encoded><![CDATA[<h2>animation-direction?</h2>
<p>Давайте предположим, что у вас есть <strong>CSS анимация</strong> для <strong><code>background-color</code></strong>, которая меняет цвет от желтого (#cc0) к голубому (#079) в бесконечном цикле. Код для этого может выглядеть примерно так:</p>
<pre class="prettyprint" rel="CSS">@keyframes color {
  from { background: #cc0 }
  to { background: #079 }
}

div {
  animation: color 3s infinite;
}
</pre>
<p>Представим последовательность анимации в линейном виде (на рисунке три итерации):</p>
<p><span id="more-6849"></span></p>
<p><img alt="" class="aligncenter" height="83" src="http://lea.verou.me/wp-content/uploads/2012/05/Screen-shot-2012-05-05-at-19.53.52-.png" title="No animation-direction specified" width="500" /></p>
<p>Как видно, переход между конечным состоянием одной итерации цикла и начальным состоянием новой очень резкий. Можно было бы, конечно, изменить ключевые кадры, чтобы смягчить его. Но есть способ лучше. Свойство с именем <strong><code>animation-direction</code></strong> дает некоторую степень контроля над порядком проигрывания анимации, что позволяет избавиться от резких переходов. Оно также действует на временные функции (<strong><code>timing-function)</code></strong>, что позволяет сделать переходы еще плавней.</p>
<p>В ранних вариантах спецификации были доступны только значения <strong><var>normal</var></strong> и <strong><var>alternate</var></strong>. Результат действия первого можно наблюдать на примере выше. <strong><var>alternate</var></strong> же изменяет направление проигрывания в каждой второй итерации, в результате получается следующая последовательность (обратите внимание как была инвертирована вторая итерация):</p>
<p style="text-align: center; "><img alt="" class="alignnone size-full wp-image-6851" height="39" src="http://css-live.ru/wp-content/uploads/2012/05/2.png" title="animation-direction:alternate" width="500" /></p>
<p>Последнее изменение, внесенное в черновик спецификации, добавляет еще два значения: <strong><var>reverse</var></strong>, которое переворачивает каждую итерацию, и <strong><var>alternate</var></strong>-<strong><var>reverse</var></strong>, которое по сути является комбинацией <strong><var>alternate</var></strong> и <strong><var>reverse</var></strong>. Вот обобщение того, как эти четыре значения влияют на анимацию:</p>
<p style="text-align: center; "><img alt="" class="alignnone size-full wp-image-6852" height="177" src="http://css-live.ru/wp-content/uploads/2012/05/3.png" title="значения animation-direction " width="500" /></p>
<h2>Проблема</h2>
<p>Я была рада увидеть, что <strong><var>reverse</var></strong> и <strong><var>alternate-reverse</var></strong>&nbsp;наконец-то добавлены в спецификацию, но что-то в синтаксисе не сходилось. Изначально я думала, что четыре значения по сути вляют на два переключателя:</p>
<ul>
<li>Проигрывать в обратном порядке все итерации? Да/нет</li>
<li>Проигрывать в обратном порядке четные итерации? Да/нет</li>
</ul>
<p>Достаточно бессмысленно запоминать четыре отдельных значения. <a href="http://lists.w3.org/Archives/Public/www-style/2012Apr/0799.html">Я выдвинула предложение</a> о том, что вместо этого они должны быть разделены на два ключевых слова, что упростит не только запоминание, но и <a href="http://lists.w3.org/Archives/Public/www-style/2012Apr/0804.html">грамматику</a>.</p>
<p>Предложение было хорошо встречено одним из соавторов спецификации по анимации (Sylvain Galineau), но возник вопрос, не будет ли сочетание <strong><var>normal</var></strong> c <strong><var>alternate</var></strong> или <strong><var>reverse</var></strong> путать еще больше, вместо того, чтобы упростить понимание. <strong>И это вопрос, в котором ваше мнение было бы очень полезно.</strong> Как вы думаете, нижеприведенные примеры выглядят работоспособными и логичными, или же вызывают лишние вопросы?</p>
<ul>
<li><strong><code>animation-direction: normal alternate;</code></strong> /*эквивалент animation-direction: alternate; */</li>
<li><strong><code>animation-direction: alternate normal;</code></strong> /*эквивалент animation-direction: alternate; */</li>
<li><strong><code>animation-direction: normal reverse;</code></strong> /*эквивалент animation-direction: reverse; */</li>
<li><strong><code>animation-direction: reverse normal;</code></strong> /*эквивалент animation-direction: reverse; */</li>
</ul>
<h2>Идея получше(?)</h2>
<p>Пока я писала этот пост и рассматривал примеры выше, меня осенило. Эти значения &#8211; не комбинация двух состояний! Все четыре значения влияют на то, какие итерации проигрываются в обратном порядке:</p>
<ul>
<li><strong><code>normal</code></strong> &#8211; не реверсирует ни одной итерации</li>
<li><strong><code>reverse</code></strong> &#8211; реверсирует&nbsp;все итерации</li>
<li><strong><code>alternate</code></strong> &#8211; реверсирует&nbsp;четные итерации</li>
<li><strong><code>alternate-reverse</code></strong> &#8211; реверсирует&nbsp;нечетные итерации</li>
</ul>
<p>Я сама не сразу поняла, в чем причина такой запутанности. Дело в том, что модель, построенная на этих ключевых словах, оторвана от конечного результата, особенно в случае <strong><var>alternate-reverse</var></strong>. Нужно сообразить, что это значение работает как последовательно примененные <strong><var>alternate</var></strong> и <strong><var>reverse</var></strong>. <strong><var>reverse</var></strong> переворачивает все итерации, а <strong><var>alternate</var></strong> &#8211; только четные. Таким образом, четные переворачиваются дважды, что аналогично оригинальному направлению воспроизведения, а нечетные оказываются перевернутыми и проигрываются в обратном порядке. Простое двойное отрицание, но тем не менее затрудняющее мысленную визуализацию и понимание.</p>
<p>Я подумала, что проще было бы сделать свойство <strong><code>animation-reverse</code></strong> (или <strong><code>animation-iteration-reverse</code></strong>), которое бы принимало одно из следующих значений:</p>
<ul>
<li><strong><var>none</var></strong> (эквивалент <strong><code>animation-direction:&nbsp;normal</code></strong>)</li>
<li><strong><var>all</var></strong> (эквивалент <strong><code>animation-direction:&nbsp;reverse</code></strong>)</li>
<li><strong><var>even</var></strong> (эквивалент <strong><code>animation-direction:&nbsp;alternate</code></strong>)</li>
<li><strong><var>odd</var></strong> (эквивалент <strong><code>animation-direction:&nbsp;alternate-reverse</code></strong>)</li>
</ul>
<p>Этот вариант не только лучше описывает конечный результат, но и более гибкий. Например, если в будущем окажется, что проигрывание в обратном направлении каждой третьей итерации распростанено, то можно было бы легко добавить выражения для этого, аналогичные тем, которые принимает селектор <code>:nth-child()</code>.</p>
<p>Еще до того, как <a href="http://lists.w3.org/Archives/Public/www-style/2012May/0185.html">предлагать это</a>, я знала, что уже слишком поздно для таких радикальных изменений в <a href="http://www.w3.org/TR/css3-animations/">модуле анимации</a>, но идея кажется настолько хорошей, что за нее стоит побороться. К тому же, <strong><code>animation-direction</code></strong> еще не нашло широкого применения.</p>
<p>К сожалению, похоже, только я и Сильван думаем, что это лучше того, что есть, но даже <a href="http://lists.w3.org/Archives/Public/www-style/2012May/0188.html">он неохотно поддерживает мой вариант</a>, в основном из-за проблем с обратной совместимостью. Так что я начала сомневаться, такая ли это хорошая идея, как мне представляется. <strong>Что вы думаете?</strong> Сделает ли внесение этого изменения проще процесс обучения и использования? Отзывы чрезвычайно полезны для стандартизации, так что, пожалуйста, высказывайте свое мнение в комментариях, даже без обоснования, если у вас на него нет времени и желания. Сбор мнений крайне важен.</p>
<h2>Для тех, кто не читал</h2>
<ol>
<li>Удобнее ли использование <strong><var>alternate reverse</var></strong> и <strong><var>reverse alternate</var></strong> (в обоих вариантах), чем <strong><var>alternate-reverse</var></strong> в качестве значений для <strong><code>animation-direction</code></strong>?</li>
<li>Если да, должны&nbsp;ли быть доступны избыточные сочетания <strong><var>normal</var></strong> c <strong><var>alternate</var></strong> и <strong><var>reverse</var></strong>, например <strong><var>normal alternate</var></strong>?</li>
<li>Или, может, отказаться от всего этого разом и ввести свойство <strong><code>animation-reverse</code></strong>, принимающее значения <strong><var>none</var></strong>, <strong><var>all</var></strong>, <strong><var>even</var></strong>, <strong><var>odd</var></strong>?</li>
</ol>
<p><em>Перевод статьи <a href="http://lea.verou.me/2012/05/is-animation-direction-a-good-idea/">Is animation-direction a good idea?</a> автор <a href="http://lea.verou.me/author/admin/">Lea Verou</a></em></p>
]]></content:encoded>
			<wfw:commentRss>http://css-live.ru/articles/animation-direction-xoroshaya-ideya.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Адаптивные изображения в HTML5: конец первого раунда</title>
		<link>http://css-live.ru/articles/adaptivnye-izobrazheniya-v-html5-konec-pervogo-raunda.html</link>
		<comments>http://css-live.ru/articles/adaptivnye-izobrazheniya-v-html5-konec-pervogo-raunda.html#comments</comments>
		<pubDate>Wed, 16 May 2012 13:23:36 +0000</pubDate>
		<dc:creator>SelenIT</dc:creator>
				<category><![CDATA[HTML5]]></category>
		<category><![CDATA[Статьи]]></category>
		<category><![CDATA[Семантика]]></category>

		<guid isPermaLink="false">http://css-live.ru/?p=7176</guid>
		<description><![CDATA[Брюс Лоусон, среда, 16 мая 2012 После Великого Апрельского Браузерно-Префиксного...]]></description>
			<content:encoded><![CDATA[<p><em>Брюс Лоусон, среда, 16 мая 2012</em></p>
<p>После <a href="http://dev.opera.com/articles/view/opera-mobile-emulator-experimental-webkit-prefix-support/">Великого Апрельского Браузерно-Префиксного Тарарама</a> пришла Великая Майская Адаптивно-Картиночная Шумиха 2012-го.</p>
<p>Адаптивные изображения &mdash; очередная неразгаданная загадка &laquo;отзывчивого&raquo; <strong>веб-дизайна</strong>. Вы отдаете большие картинки высокого разрешения, подходящие для экранов типа &laquo;ретины&raquo;, которые устройства с меньшим разрешением показывают уменьшенными, зря расходуя трафик? Или вы отдаете картинки низкого разрешения, которые мерзко выглядят, будучи растянутыми на большом экране? Вебмастерам приходится рассчитывать на <a href="http://css-tricks.com/which-responsive-images-solution-should-you-use/">искусные хаки</a>, чтобы отдавать различные контентные картинки (т.е. <strong>&lt;img&gt;</strong> в <strong>HTML</strong>, а не <strong>CSS-фоны</strong>) для разных типов устройств.</p>
<p><span id="more-7176"></span></p>
<p>В ноябре 2011-го я был настолько разочарован тем, что никто из авторов спецификации даже не рассматривает проблему, что <a href="http://www.brucelawson.co.uk/2011/notes-on-adaptive-images-yet-again/">я предложил &laquo;для затравки&raquo; элемент &lt;picture&gt;</a>, использовавший тот же механизм переключения исходных файлов, что <strong>&lt;video&gt;</strong> в <strong>HTML5</strong>:</p>
<pre class="prettyprint" rel="HTML">&lt;picture alt=&quot;злой пират&quot;&gt;
&nbsp; &nbsp;&lt;source src=hires.png media=&quot;min-width:800px&quot;&gt;
&nbsp; &nbsp;&lt;source src=midres.png media=&quot;min-width:480px&quot;&gt;
&nbsp; &nbsp;&lt;source src=lores.png&gt;
&nbsp; &nbsp; &nbsp; &lt;!-- запасной вариант для неподдерживающих браузеров --&gt;
&nbsp; &nbsp; &nbsp; &lt;img src=midres.png alt=&quot;злой пират&quot;&gt;
&lt;/picture&gt;</pre>
<p>Примерно в то же время другие <a href="http://www.w3.org/community/respimg/2012/02/23/picture-for-existing-browsers/">независимо пришли к той же мысли</a>, и им было предложено создать <a href="http://www.w3.org/community/respimg/">общественную группу W3C</a> для обсуждения этого, что они и сделали. Однако, в январе редактор <strong>HTML5 </strong><a href="http://lists.whatwg.org/pipermail/whatwg-whatwg.org/2012-January/034490.html">Айэн Хиксон сказал</a>:</p>
<blockquote>
<p>В каких случаях это может быть нужно для картинок в &lt;img&gt;? Как правило, элемент &lt;img&gt; служит для картинок в контенте, где обычно не нужно ничего адаптировать.</p>
</blockquote>
<p>Энтузиазм тех веб-разработчиков из Общественной группы адаптивных изображений <strong>W3C </strong>порядком сник оттого, что их игнорируют, поскольку самой проблемы никто в упор не видит. Но на этой неделе Эдвард О&rsquo;Коннор из Эпла предложил другой метод, использующий <a href="http://lists.whatwg.org/pipermail/whatwg-whatwg.org/2012-May/035746.html">новый атрибут srcset</a> элемента <strong>&lt;img&gt;</strong>. Это дополнило его же февральское аналогичное предложение по поводу <a href="http://lists.w3.org/Archives/Public/www-style/2012Feb/1103.html">img-set в CSS</a>, которое уже вошло в WebKit:</p>
<pre class="prettyprint" rel="HTML">&lt;img src=&quot;foo-lores.jpg&quot;
&nbsp; &nbsp; &nbsp;srcset=&quot;foo-hires.jpg 2x, foo-superpuperhires.jpg 6.5x&quot;
&nbsp; &nbsp; &nbsp;alt=&quot;годный Alt-текст для foo.&quot;&gt;</pre>
<p>Числа &laquo;2&raquo; и &laquo;6.5x&raquo; говорят браузеру об относительных разрешениях: у foo-hires.jpg разрешение в 2 раза больше, чем у foo-lores.jpg.</p>
<p>Спустя всего несколько дней вариант эпловского предложения был <a href="http://lists.whatwg.org/pipermail/whatwg-whatwg.org/2012-May/035855.html">добавлен в спецификацию</a>.</p>
<p>Между <strong>&lt;picture&gt;</strong> и <strong>srcset</strong> &mdash; два важных различия. Самое очевидное &mdash; то, что <strong>srcset </strong>использует элемент <strong>&lt;img&gt;</strong>, что замечательно, поскольку это самое логичное место для картинок, адаптивных и нет (с <strong>&lt;img&gt;</strong> не пройдет тот же фокус, что с <strong>&lt;video&gt; </strong>+ <strong>&lt;source&gt;</strong>, потому что это &mdash; пустой элемент, у которого не может быть потомков; решение О&rsquo;Коннора использует атрибуты, что хорошо).</p>
<p>Второе важное отличие в том, что оно не использует медиавыражений. С медиавыражениями вебмастеру приходится думать о любых изменениях размера области просмотра, ориентации, плотности пикселей, глубины цвета, соотношения сторон и т.п., решать, как угодить им (если придется), определять границы перехода и выражать всё это в коде. Это порядком напрягает мозги разработчика и выливается в &laquo;много букв&raquo; кода: страничка с 20 картинками, каждая с 5 медиавыражениями для 5 элементов <strong>&lt;source&gt;</strong>, быстро разрастается в объеме кода.</p>
<p>О&rsquo;Коннор написал:</p>
<blockquote>
<p>Почему указывать масштаб, а не медиавыражение? Ну, медиавыражения &mdash; это требования к состоянию браузера, тогда как мы утверждаем что-то об отношениях между ресурсами картинок. Кроме того, браузеры должны быть свободны в использовании того ресурса, который, на их взгляд, лучше всего подходит к текущей ситуации, учитывая не только &laquo;медиавыражаемые&raquo; вещи типа разрешения устройства, но и масштаб, заданный для &lt;img&gt; через CSS, его атрибуты width=&rdquo;&quot; и height=&rdquo;&quot;, и даже вещи вроде текущего масштаба всей страницы.</p>
</blockquote>
<p>Я хорошо понимаю идею позволить браузеру самому, исходя из того, что он &laquo;знает&raquo; о своем окружении (скорость соединения, задержка сигнала, плотность пикселей, ориентация), выбирать наилучшую картинку для текущей задачи. Суть в том, что вебмастерам не нужно задумываться о каждой из этих переменных и угождать каждому варианту. Они могут лишь описать заведомо известные им вещи &mdash; картинки, их размер и плотность пикселей &mdash; а браузер уже сам сделает нужный выбор.</p>
<p>Таким образом, когда мы все будем жить в космосе и смотреть <strong>3D-голограммы</strong>, устройство на <strong>iDroid3000</strong> сможет само определить близость черной дыры (черные дыры, как известно каждому школьнику, вызывают &laquo;тормоза&raquo; голограмм) и выбрать правильную картинку; нам не придется изобретать медиавыражений для близости черных дыр и задним числом дописывать их на сайты.</p>
<p>У решения с <strong>srcset </strong>есть две проблемы. Первая очень субъективна, но многие чувствуют то же самое: в том виде, как оно есть в <a href="http://www.whatwg.org/specs/web-apps/current-work/multipage/embedded-content-1.html#attr-img-srcset">текущем, первом черновике спецификации</a>, синтаксис просто отвратителен!</p>
<pre class="prettyprint" rel="HTML">&lt;img src=&quot;face-600-200-at-1.jpeg&quot; alt=&quot;&quot;
	srcset=&quot;face-600-200-at-1.jpeg 600w 200h 1x,
	face-600-200-at-2.jpeg 600w 200h 2x,
	face-icon.png 200w 200h&quot;&gt;</pre>
<p>Конечно, это можно &mdash; и нужно &mdash; улучшить. Дело не только в эстетике. Если синтаксис странный, его будут использовать неправильно. Как <a href="https://twitter.com/#%21/rem/status/202306584880234496">написал доктор Реми</a>, &laquo;Хотелось бы, чтобы вебмастерам пришлось учить <em>другой</em> микросинтаксис. Тут не та ситуация, что была с проблемами из-за браузерных префиксов.&raquo;</p>
<p>Вторая проблема в том, что разработчики не хотят лишиться контроля. Есть проблемы, связанные с художественным замыслом (см. раздел под заголовком <a href="http://css-tricks.com/which-responsive-images-solution-should-you-use/">&laquo;Учитываю ли я художественный замысел?&raquo;</a>), и многих не убеждает, что предложение Эпла решает их, хотя сторонники <strong>srcset </strong>как раз убеждены, что <a href="http://lists.whatwg.org/pipermail/whatwg-whatwg.org/2012-May/035907.html">он учитывает все те случаи</a>.</p>
<p>Дебаты продолжаются, с <a href="http://www.cartoonstock.com/directory/e/exchange_of_views.asp">полным и открытым обменом мнениями</a>. Есть и <a href="http://timkadlec.com/2012/05/wtfwg/">оскорбленные чувства</a>, куда ж без этого, потому что кое-кто из тех, кто трудился в Общественной группе, чувствует, что <a href="http://www.alistapart.com/articles/responsive-images-and-web-standards-at-the-turning-point/">их пожелания и труды остались без внимания</a>.</p>
<p>Как один из тех, кто предлагал &lt;picture&gt;, я тоже в какой-то степени это чувствую. Наверное, это эгоизм (на самом деле, я был бы рад, если бы это был элемент &lt;ураБрюсу&gt;, но я смирился с несправедливостью жизни). Но мне не так уж важно, какой синтаксис будет в спецификации, если он будет отвечать большинству практических случаев и будет удобен для разработчиков. Меня радует уже то, что проблема адаптивных изображений вообще обсуждается.</p>
<p>Так что подключайтесь. Читайте обсуждения и вносите свою лепту. А как только пыль уляжется и спецификация устаканится, мы, доктора, поставим окончательный диагноз.</p>
<p><a href="http://html5doctor.com/html5-adaptive-images-end-of-round-one/">Оригинал статьи</a> и <a href="http://html5doctor.com/author/brucel/">автор</a></p>
]]></content:encoded>
			<wfw:commentRss>http://css-live.ru/articles/adaptivnye-izobrazheniya-v-html5-konec-pervogo-raunda.html/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Маскирование текста по стандарту</title>
		<link>http://css-live.ru/articles/maskirovanie-teksta-po-standartu.html</link>
		<comments>http://css-live.ru/articles/maskirovanie-teksta-po-standartu.html#comments</comments>
		<pubDate>Tue, 15 May 2012 22:53:07 +0000</pubDate>
		<dc:creator>simoroshka</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[Статьи]]></category>
		<category><![CDATA[SVG]]></category>

		<guid isPermaLink="false">http://css-live.ru/?p=6899</guid>
		<description><![CDATA[Я очень люблю .netmagazine.com, но недавно они просто вывели меня...]]></description>
			<content:encoded><![CDATA[<p>Я очень люблю <a href="http://www.netmagazine.com/">.netmagazine.com</a>, но недавно они просто вывели меня из себя своей статьей <a href="http://www.netmagazine.com/tutorials/texturise-web-type-css">&quot;Текстуры для веб-шрифтов&quot;</a>. В ней описывается, как накладывать текстуру на текст с помощью <strong><code>-webkit-mask-image</code></strong>, причем сообщается, что это экспериментальное <strong>свойство CSS</strong>. И даже предлагается использовать префиксы <strong>-moz-</strong>, <strong>-o-</strong> и <strong>-ms- </strong>для свойства, которое отсутствует в какой-либо спецификации и соответственно вряд ли вообще когда-нибудь будет поддерживаться каким-либо не <strong>WebKit браузером</strong>. Тем самым они вводят своих читателей в заблуждение. Не так давно <a href="http://www.alistapart.com/articles/every-time-you-call-a-proprietary-feature-css3-a-kitten-dies/">я писала</a>&nbsp;(<a href="http://css-live.ru/articles-css/kazhdyj-raz-kogda-vy-nazyvaete-proprietarnuyu-fichu-slovom-css3-v-mire-umiraet-kotenok.html">перевод статьи</a>) о том, насколько вредными для нашей отрасли могут быть подобные проприетарные вещи.</p>
<p><span id="more-6899"></span></p>
<p>Обычно на такие претензии возражают, что это вопрос философский, использовать или не использовать, тем более что кому какая разница, если в данный момент функция работает и не вызывает проблем в несовместимых браузерах. Этот аргумент вполне годится для некоторых случаев, когда дело касается незначительных ни на что не влияющих украшений, для которых не существует альтернативы, прописанной в стандартах. К примеру, я сама использовала <strong><code>::-webkit-scrollbar</code></strong>. Но к рассматриваемому вопросу это не относится. У нас <a href="http://www.w3.org/TR/2001/WD-SVG11-20011030/">в стандартах есть альтернатива вот уже 11 лет</a> под названием <strong>SVG</strong>. И если вы дадите ей шанс, она может справиться не только с маскированием текста, но и с многим другим.</p>
<p>Вот пример наложения текстуры на текст с использованием <strong>SVG</strong>:</p>
<p><iframe frameborder="0" height="600px" scrolling="no" src="http://dabblet.com/gist/2594420" width="100%"></iframe></p>
<p>Благодаря <a href="https://twitter.com/#!/devongovett/status/198513261333848064">исправлениям от @devongovett</a> код стал проще и компактнее.</p>
<p>Да, синтаксис может и более громоздкий, но зато это работает в гораздо более широком спектре браузеров: <strong>Chrome, Safari, Firefox, IE9, Opera</strong>. К тому же, довольно просто написать скрипт, который бы генерировал <strong>SVG </strong>код из заголовков и к каждому применял бы нужные величины. А когда в <strong>WebKit </strong>внесут исправление <a href="https://bugs.webkit.org/show_bug.cgi?id=65344">вот этого бага</a>, можно будет вообще вынести шаблон <strong>SVG </strong>в отдельный файл и лишь ссылаться на него.</p>
<p>В том случае, если вас беспокоит семантика кода, скажу, что элемент <strong>&lt;svg&gt;</strong> считается потоковым содержимым и следовательно может использоваться в заголовках. Но даже если поисковая система не понимает строчный <strong>SVG</strong>, она просто проигнорирует все теги и всё равно увидит содержимое внутри элемента <strong>&lt;text&gt;</strong>. Имея это в виду, можно даже обеспечить нормальный просмотр в <strong>IE8</strong>, включив <strong>HTML5 </strong>исправление для <strong>&lt;svg&gt;</strong> элемента. Тогда <strong>CSS </strong>правила всё равно будут применяться к тексту. Нужно будет только добавить проверку и убирать теги <strong>&lt;image&gt;</strong>, т.к. <strong>IE8 </strong>показывает на их месте знак ошибки загрузки изображения (не все знают, но в <strong>HTML &lt;image&gt;</strong> и <strong>&lt;img&gt;</strong> эквивалентны, поэтому <strong>IE8 </strong>трактует их одинаково).</p>
<p><em>Перевод статьи <a href="http://lea.verou.me/2012/05/text-masking-the-standards-way/">Text masking &mdash; The standards way</a> автор <a href="http://lea.verou.me/author/admin/">Lea Verou</a></em></p>
]]></content:encoded>
			<wfw:commentRss>http://css-live.ru/articles/maskirovanie-teksta-po-standartu.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Альтернативные единицы измерения для трансформации-вращения в CSS3</title>
		<link>http://css-live.ru/articles/alternativnye-edinicy-izmereniya-dlya-transformacii-vrashheniya-v-css3.html</link>
		<comments>http://css-live.ru/articles/alternativnye-edinicy-izmereniya-dlya-transformacii-vrashheniya-v-css3.html#comments</comments>
		<pubDate>Mon, 14 May 2012 22:02:31 +0000</pubDate>
		<dc:creator>heljoshin</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[Статьи]]></category>

		<guid isPermaLink="false">http://css-live.ru/?p=6648</guid>
		<description><![CDATA[Альтернативные единицы измерения для трансформации вращения в CSS3 Стандартный код...]]></description>
			<content:encoded><![CDATA[<h2>Альтернативные единицы измерения для трансформации вращения в CSS3</h2>
<p>Стандартный код <a href="http://css3clickchart.com/#rotate-transform">трансформации-вращения</a>, учитывая основные браузеры, выглядит следующим образом:</p>
<pre class="prettyprint" rel="CSS">.example {
    -webkit-transform: rotate(360deg);
    -moz-transform: rotate(360deg);
    -o-transform: rotate(360deg);
    -ms-transform: rotate(360deg);
    transform: rotate(360deg);
}
</pre>
<p>Как Вы можете видеть, благодаря сокращению, стоящему в скобках после числового значения (&hellip;deg), единицей измерения угла поворота для каждого из элементов являются градусы.</p>
<p>Но градусы не единственная единица измерения для вращения элементов. В Вашем распоряжении есть также и <a href="http://dev.w3.org/csswg/css3-values/#other-units">другие единицы</a>, такие как градианы, радианы и обороты.</p>
<p><span id="more-6648"></span></p>
<h3>Градианы (grad)</h3>
<p>Градианы (также встречаются как грады и гоны) в коде сокращаются до &ldquo;grad&rdquo; . Полный круг состоит из 400 град, что является эквивалентом 360 градусам. Таким образом, если переписать код с использованием градиан &ndash; получим следущее (вендорные префиксы опущены для этого и всех следующих примеров)</p>
<pre class="prettyprint" rel="CSS">.example {
	transform: rotate(400grad);
}
</pre>
<p>Так как 400 &ndash; это красивое круглое число, возможно экспериментировать с этой величиной станет для Вас проще и, как результат, ускорит все производимые вычисления.</p>
<h3>Радианы (rad)</h3>
<p>Радианы или rad записываются следующим образом:</p>
<pre class="prettyprint" rel="CSS">.example {
	transform: rotate(6.2831853rad);
}
</pre>
<p>Полный круг состоит из 2&pi; радиан. Как Вы знаете, число &pi; равняется 3. 14, или, если быть более точным, 3.14159265, что в свою очередь равняется половине окружности с точки зрения радиан. Таким образом, чтобы получить полный круг, мы удваиваем это значение и получаем 6.2831853 радиан, т.е. целый круг.</p>
<p>Следовательно, 6.2831853rad = 400grad = 360deg. Как Вы можете убедиться работать с радианами не так удобно как с градами или даже с градусами.</p>
<h3>Обороты (turn)</h3>
<p>Единицы измерения &quot;turn&quot; (обороты) соответствуют своему названию. Один полный оборот. Таким образом, эквивалент того, что мы делали ранее в оборотах будет выглядеть так:</p>
<pre class="prettyprint" rel="CSS">.example {
	transform: rotate(1turn);
}
</pre>
<p>Это, пожалуй, самая интуитивно понятная величина, так как она равняется одному полному обороту.</p>
<h3>Поддержка браузерами?</h3>
<p>Все эти альтернативные единицы измерения (включая градусы) являются частью <a href="https://developer.mozilla.org/en/CSS/angle"> CSS-данных типа &quot;угол&quot;</a>.</p>
<p>Как показали мои эксперименты с последними стабильными версиями таких браузеров как Chrome, Safari, и Opera &ndash; все они поддерживают эти единицы измерения. Firefox поддерживает радианы и градианы, но не поддерживает обороты. А вот Internet Explorer (тестировалось в IE10 PP2) не поддерживает ни одну из трех единиц измерения.</p>
<p><b>Примечание:</b> Как было уже отмечено в комментариях, последнее обновление IE10PP добавило полную поддержку данных единиц измерения, также как и в случае с <a href="http://www.mozilla.org/en-US/firefox/all-aurora.html">aurora build</a> для Firefox.</p>
<p>Я создал демо-страницу с вращающимися блоками, которые приводятся в движение при наведении на них курсора, используя все три альтернативные единицы.</p>
<p><a href="http://www.impressivewebs.com/demo-files/rotate-transforms-units/">ДЕМО-СТРАНИЦА</a></p>
<p><a href="http://www.impressivewebs.com/alternative-units-css3-rotate-transforms/">Оригинал статьи</a> и <a href="http://www.impressivewebs.com/alternative-units-css3-rotate-transforms/">автор</a></p>
]]></content:encoded>
			<wfw:commentRss>http://css-live.ru/articles/alternativnye-edinicy-izmereniya-dlya-transformacii-vrashheniya-v-css3.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Новая альтернатива clearfix-у и overflow:hidden</title>
		<link>http://css-live.ru/tricks/novaya-alternativa-clearfix-u-i-overflowhidden.html</link>
		<comments>http://css-live.ru/tricks/novaya-alternativa-clearfix-u-i-overflowhidden.html#comments</comments>
		<pubDate>Fri, 11 May 2012 23:20:17 +0000</pubDate>
		<dc:creator>psywalker</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[Статьи]]></category>
		<category><![CDATA[Трюки]]></category>

		<guid isPermaLink="false">http://css-live.ru/?p=6873</guid>
		<description><![CDATA[Сегодня я проснулся с каким-то странным чувством. Мне как будто...]]></description>
			<content:encoded><![CDATA[<p>Сегодня я проснулся с каким-то странным чувством. Мне как будто казалось, что что-то должно произойти. Я вошёл в скайп и не ошибся! Меня уже поджидал <strong>Илья Стрельцын</strong> (<strong><a href="https://twitter.com/#!/SelenIT2"><s>@</s>SelenIT2</a></strong>) с неожиданным решением одной известной задачи, связанной с очисткой потока.</p>
<p>Я полагаю, многие верстальщики уже догадались &#8211; о чём идёт речь, а если нет, то перед тем, как переходить к решению Ильи, давайте немного освежим память и вкратце рассмотрим несколько известных методов, а так же их достоинства и недостатки.</p>
<p><span id="more-6873"></span></p>
<p>Я решил, что все способы следует рассматривать сразу на маленьком, но боевом примере.</p>
<h2>Условие задачи</h2>
<p>Есть две колонки. Левая с <strong>float:left</strong> имеет фиксированные ширину и высоту. Нужно, чтобы правая тянулась на всю оставшеюся ширину. При этом необходимо, чтобы из той же правой колонки не &quot;вываливались&quot; <strong>margin</strong>-ы элементов, а элементы с <strong>float</strong>: <strong>left </strong>или <strong>right </strong>не схлопывали высоту контейнера, и чтобы края колонки не обрезали элементы, которые из неё вылезают.</p>
<p>В общем, в результате должно получится что-то нечто похожее на следующий пример:</p>
<p><img alt="" class="aligncenter size-full wp-image-6917" height="200" src="http://css-live.ru/wp-content/uploads/2012/05/21.png" title="Задача" width="457" /></p>
<h2>Решения</h2>
<p>Надо заметить, что на данный день все существующие <strike>полу</strike>решения этой задачи имеют определённые недостатки, которые порой доставляют массу неудобств и заставляют отказываться от этих способов или подбирать самый удобный в зависимости от конкретной ситуации.</p>
<p>Перед тем, как переходить к первому варианту, предлагаю сразу посмотреть <strong>структуру HTML</strong> и часть <strong>CSS</strong>, которые во всех примерах будут абсолютно одинаковыми. Единственное что будет меняться в <strong>HTML </strong>- это классы у правой колонки (в зависимости от способа), а в <strong>CSS </strong>только лишь та часть, которая относится к методу.</p>
<pre class="prettyprint" rel="HTML">&lt;div class=&quot;left&quot;&gt;
	&lt;h2&gt;Левый float&lt;/h2&gt;
&lt;/div&gt;
&lt;div class=&quot;clearfix&quot;&gt;
	&lt;div class=&quot;date&quot;&gt;12.05.2012&lt;/div&gt;
	&lt;h2&gt;Заголовок&lt;/h2&gt;
	&lt;p&gt;Ниже идёт картинка с float:left&lt;/p&gt;
	&lt;img src=&quot;img.jpg&quot; class=&quot;float-left&quot;&gt;
	&lt;p class=&quot;clear-both&quot;&gt;А у этого абзаца стоит clear:both;&lt;/p&gt;
	&lt;div class=&quot;absolute&quot;&gt;Absolute&lt;/div&gt;
&lt;/div&gt;
</pre>
<pre class="prettyprint" rel="CSS">/* Общие стили */
.left {
	float: left;
	width: 200px;
	background: #FC6;
	height: 200px;
	position: relative;
	z-index: 1;
}

h2 { margin-top: 10px;}
.float-left { float: left;}
.clear-both {
	font-size: 15px;
	clear: both;
	background: #F99;
}
.date {
	font-size: 20px;
	float: right;
	background: #FC0;
	padding: 2px 5px;
	margin: -10px -5px 0 0;
}
.absolute {
	position: absolute;
	bottom: -25px;
	right: 10px;
	width: 50px;
	height: 50px;
	background: white;
	border: 2px solid black;
}
</pre>
<h3>clearfix</h3>
<p>Для первого эксперимента возьмём один из самых популярных&nbsp;<strong>clearfix</strong>-ов, который в своё время доработал&nbsp;<a href="http://chriscoyier.net/">Chris Coyier</a>, отказавшись от ненужного свойства <strong>font-size</strong>, в связи с пустым свойством <strong>content</strong>. Выглядит он так:</p>
<pre class="prettyprint" rel="CSS-clearfix">.clearfix:after {
	visibility: hidden;
	display: block;
	content: &quot;&quot;;
	clear: both;
	height: 0;
	}
* html .clearfix             { zoom: 1; } /* IE6 */
*:first-child+html .clearfix { zoom: 1; } /* IE7 */
</pre>
<p>Я применил этот код к правой колонке, добавив ещё несколько свойств чисто для оформления. И вот что у нас получилось:</p>
<p><img alt="" class="aligncenter size-full wp-image-6954" height="200" src="http://css-live.ru/wp-content/uploads/2012/05/clearfix-result.png" title="Результат clearfix-а" width="415" /></p>
<p>Как виндно по рисунку, из <strong>плюсов </strong>можно выделить только то, что благодаря <strong>clearfix</strong>-у правый нижний блок с <strong>position: absolute</strong> остался целым и невридимым и его вылезающая из колонки часть не образелась.</p>
<p>Ну, а в остальном, к сожалению, <strong>одни минусы</strong>. Их настолько много, что я даже сделал список:</p>
<ul>
<li>Верхние <strong>margin</strong>-ы у заголовка выпали из контейнера.</li>
<li>Левый padding в контейнере провалился под левую колонку и больше не является отступом между элементами в правой колонке и левой с <strong>float: left</strong>. Оно и понятно, ведь <strong>clearfix </strong>не создаёт свой собственный контекст, поэтому блочная часть правой колонки фактически оказывается&nbsp;под левой, обтекая её своими инлайновыми боксами.</li>
<li>Ну и самое печальное тут то, что последний абзац с <strong>clear:both</strong> оказался под левой колонкой, растягивая собой правую по высоте. Это опять же из-за того, что левая колонка и плавающая картинка в правой колонке остались в одном и том же контексте форматирования, поэтому clear реагирует и на то, и на другое.</li>
</ul>
<p>Делаем вывод, что этот метод хорошо использовать только тогда, когда нам нужно просто очистить поток, чтобы контейнер чувствовал высоту своих потомков с <strong>float</strong>, и когда мы точно знаем, что в задаче не будет всех тех особенностей, из-за которых могут случиться вышеперечисленные проблемы.</p>
<h3>overflow: hidden или auto</h3>
<p>Ещё один, более достойный и простой способ, на мой взгляд, заключается в том, чтобы повесить на контейнер свойство <strong>overflow </strong>со значениями <strong>hidden</strong> или <strong>auto</strong>,&nbsp;благодаря которым мы создадим новый контекст форматирования и тем самым сможем изолировать наш блок &#8211; колонку от внешнего контекста.</p>
<p>Во-первых, в самой структуре мы лишь поменяем класс у правой колонки с <strong>class=&quot;clearfix&quot;</strong>&nbsp;на <strong>class=&quot;overflow&quot;</strong>, а во-вторых, изменим наш <strong>CSS </strong>в пользу текущего метода.</p>
<pre class="prettyprint" rel="CSS">/* метод с overflow */
.overflow {
	padding: 0 10px;
	background: #E76D13;
	position: relative;

	/* overflow */
	overflow: hidden;
}

* html .overflow { zoom: 1; } /* IE6 */
*:first-child+html .overflow { zoom: 1; } /* IE7 */
</pre>
<p>И вот, что у нас вышло:</p>
<p><img alt="" class="aligncenter size-full wp-image-6965" height="200" src="http://css-live.ru/wp-content/uploads/2012/05/overflow-result.png" title="Результат с overflow:hidden" width="556" /></p>
<p>На вид этот способ явно лучше предыдущего, за исключением того, что вылезающие за края элементы &#8211; обрезаются. Дело в том, что <strong>overflow: hidden</strong> устроен так, что выходящие за края блока элементы &#8211; попросту обрезаются, а со значением <strong>auto </strong>вообще появляется скроллинг.&nbsp;Этот нюанс порой доставляет массу неудобств, заставляя отказываться от этого метода в пользу других.&nbsp;</p>
<p>Вывод такой, что для нашей задачи этот вариант не годится, поэтому идем дальше.</p>
<h3>display:table</h3>
<p>В эпоху быстро-уходящих на покой IE6-7 актуальными становятся свойства и значения, которые не имели поодержки в этих <strike>недо</strike>браузерах. И одна из таких &quot;парочек&quot; имеет название <strong>display: table</strong> и так же может являться ещё одним методом для решения нашей задачи.&nbsp;<strong>display: table</strong>, как и&nbsp;<strong>overflow: hidden</strong> вешается на контейнер, но работает немного иначе<strong>.</strong></p>
<p>По традиции причешем наш код&#8230;</p>
<pre class="prettyprint" rel="CSS">/* метод с display: table */
.table  {
	padding: 0 10px;
	background: #E76D13;
	position: relative;

	/* display: table */
	display: table;
}

* html .table  { zoom: 1; } /* IE6 */
*:first-child+html .table  { zoom: 1; } /* IE7 */
</pre>
<p>И посмотрим результат:</p>
<p><img alt="" class="aligncenter size-full wp-image-6973" height="200" src="http://css-live.ru/wp-content/uploads/2012/05/table-result.png" title="Результат с display: table" width="410" /></p>
<p>Так же, как и&nbsp;<strong>overflow: hidden&nbsp;</strong><strong>display: table</strong> создаёт свой собственный контекст форматирования, изолирует контейнер, и мало того, в отличии от&nbsp;<strong>overflow: hidden</strong>,&nbsp;избегает проблем с обрезанием вылезающих элементов.</p>
<p>Но, проблема всё же есть, и она кроется в том, что элементы с этим свойством (в нашем случае &#8211; это правая колонка) ужимаются по содержимому и поэтому не растягивают контейнер на всю оставшуюся ширину.&nbsp;</p>
<p>Так что, к сожалению, это решение нам тоже не подходит, поэтому пора переходить к самому вкусному!</p>
<h2>Метод&nbsp;Ильи Стрельцына</h2>
<p>Вот, наконец, мы и добрались до самого главного способа, который основан на предыдущем варианте с <strong>display:table</strong>, но имеет <strong>очень важное дополнение</strong>, которое и делает этот метод полностью рабочим.</p>
<p>Для начала сразу же приведу код, а уже после просмотра результата объясню в чём вся соль.</p>
<pre class="prettyprint" rel="CSS">/* метод Ильи Стрельцына */
.table  {
	padding: 0 10px;
	background: #E76D13;
	position: relative;

	/* display: table */
	display: table;
}
/* Очень важное дополнение! */
.table:after {
	content: &#39;. .&#39;;
	display: block;
	word-spacing: 99in;
	height: 0;
	overflow: hidden;
}
</pre>
<p>И, соответственно, результат:</p>
<p><img alt="" class="aligncenter size-full wp-image-6977" height="201" src="http://css-live.ru/wp-content/uploads/2012/05/table-new-method-result.png" title="Результат работы метода Ильи Стрельцына" width="500" /></p>
<p>На изображении можно увидеть, что все перечисленные в задаче пункты &#8211; выполнены и задача решена полностью. Правая колонка тянется на оставшуюся ширину,&nbsp;<strong style="color: rgb(38, 38, 38); font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 13px; line-height: 20px; ">margin</strong><span style="color: rgb(38, 38, 38); font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 13px; line-height: 20px; ">-ы элементов не вываливаются наружу, высота контейнера не схлопывается по высоте, и даже выпирающие элементы не обрезаются! В чём же подвох?</span></p>
<p><span style="color: rgb(38, 38, 38); font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 13px; line-height: 20px; ">На самом деле в решении этой задачи&nbsp;</span>нам помогает тот же трюк с псевдоэлементом, который помогал выравнивать блоки по резиновой сетке в <a href="http://css-live.ru/articles/krasivoe-vyravnivanie-blokov-po-rezinovoj-setke.html">этой статье</a>. Весь приём заключается в двух свойствах и их значениях &#8211; это <strong>content: &#39;. .&#39;; </strong>и <strong>word-spacing: 99in;. </strong>Обратите внимание на две текстовые точки в свойстве <strong>content</strong> и на значение у&nbsp;<strong>word-spacing</strong> (99in), которое можно пересчитать в&nbsp;9504px (с эстетической точки зрения 99in выглядят всё же красивее=)). Но давайте разберёмся более детально.</p>
<p>В общем, по спецификации, для таких вещей, как таблицы, ширина считается по алгоритму <a href="http://www.w3.org/TR/CSS21/visudet.html#shrink-to-fit-float">shrink-to-fit</a>. Кратко объяснить его суть можно так. Вначале браузер &quot;спрашивает&quot; у контента, сколько бы ему хотелось иметь ширины, чтоб вольготно раскинуться в одну строку, не ломая строки переносами. Если ширина, &quot;запрошенная&quot; контентом, меньше доступной ширины контейнера &mdash; именно эта &quot;запрошенная&quot; ширина назначается нашему элементу. Если же нет &mdash; назначается такая ширина, чтобы элемент вплотную вписался в доступную ширину контейнера, а контенту волей-неволей приходится втискиваться в эту ширину, перенося строки.</p>
<p>В нашем случае текст псевдоэлемента (те самые 2 точки с пробелом между ними) &quot;запрашивает&quot; почти 10 тыс. пикселей &mdash; обычная ширина двух точек с пробелом плюс 9504 пикселей, на которые этот пробел увеличен благодаря <strong>word-spacing</strong>&#39;у. То есть в любых реальных условиях этот контент никогда не сможет уместиться в одну строку, и браузеру всегда придется считать ширину нашей таблицы по второму варианту &mdash; по контейнеру. А ведь именно этого мы и добивались!</p>
<h2>Заключение</h2>
<p>В заключении хочется сказать ещё раз огромное спасибо <strong>Илье Стрельцыну</strong> за это потрясающее решение, благодаря которому многие верстальщики теперь вздохнут с облегчением и продемонстрировать <strong><a href="http://css-live.ru/Primer/new-clearfix/demo.html">интерактивный демо-пример</a></strong>, где можно пощупать этот метод вживую.</p>
]]></content:encoded>
			<wfw:commentRss>http://css-live.ru/tricks/novaya-alternativa-clearfix-u-i-overflowhidden.html/feed</wfw:commentRss>
		<slash:comments>16</slash:comments>
		</item>
		<item>
		<title>Нативное аудио в браузере</title>
		<link>http://css-live.ru/articles/nativnoe-audio-v-brauzere.html</link>
		<comments>http://css-live.ru/articles/nativnoe-audio-v-brauzere.html#comments</comments>
		<pubDate>Thu, 10 May 2012 21:10:37 +0000</pubDate>
		<dc:creator>Pathfinder</dc:creator>
				<category><![CDATA[HTML5]]></category>
		<category><![CDATA[Статьи]]></category>
		<category><![CDATA[Семантика]]></category>

		<guid isPermaLink="false">http://css-live.ru/?p=6455</guid>
		<description><![CDATA[Марк Боа, среда, 29 июля 2009 Эта статья была обновлена...]]></description>
			<content:encoded><![CDATA[<p><em>Марк Боа, среда, 29 июля 2009</em></p>
<p><strong>Эта статья была обновлена 14 октября 2010, чтоб отобразить изменения в спецификации.</strong></p>
<p>До недавнего времени возможность воспроизведения любого вида аудио в браузере включала использование <strong>Adobe Flash</strong> или других плагинов. Несмотря на то, что <strong>Flash-плейер от Adobe</strong> по праву считается наиболее популярным, большинство разработчиков и дизайнеров согласятся, что лучше вообще не зависеть от плагинов.</p>
<h2>HTML5-элемент &lt;audio&gt;</h2>
<p>Одно из самых волнующих и долгожданных свойств <strong>HTML5 &#8211; элемент &lt;audio&gt;</strong>, позволяющий нативно воспроизводить аудио в браузере. Мы уже можем ощутить преимущества его использования, так как практически все основные браузеры поддерживают его &#8211; на данный момент <strong>Firefox</strong>, <strong>Chrome</strong>, <strong>Safari </strong>и <strong>Opera</strong>, а скоро к ним присоединится и <strong>Internet Explorer 9</strong>, который сейчас на этапе беты (<em>прим. пер.</em>: уже давно релиз). В браузерах, которые не поддерживают <strong>&lt;audio&gt;</strong> нативно, мы легко можем использовать <strong>Flash</strong>.</p>
<p><span id="more-6455"></span></p>
<h3>Согласно спецификации</h3>
<p>На сегодняшний день в спецификации есть определения пяти атрибутов для элемента &lt;audio&gt;:</p>
<ol>
<li><strong>src </strong>- валидный <strong>URL</strong>, указывающий источник контента&nbsp;</li>
<li><strong>autoplay </strong>- булевый атрибут, указывающий, должен ли файл воспроизводиться сразу же</li>
<li><strong>loop </strong>- булевый атрибут, указывающий, должен ли файл воспроизводиться повторно</li>
<li><strong>controls </strong>- булевый атрибут, указывающий, должен ли браузер отображать свои стандартные медиа-контролы</li>
<li><strong>preload </strong>- <strong>none </strong>/ <strong>metadata </strong>/ <strong>auto </strong>- где <strong>metadata </strong>значит, что нужно предварительно загрузить только метаданные, а <strong>auto </strong>оставляет решение, загружать ли весь файл, за браузером.</li>
</ol>
<p>Учтите, что <strong>preload </strong>заменил <strong>autobuffer </strong>в <a href="http://www.whatwg.org/specs/web-apps/current-work/multipage/video.html#attr-media-preload" target="blank">последней версии HTML5 спецификации</a>. Раньше <strong>autobuffer </strong>содержал булево значение, указывающее, должен ли файл буферизироваться заранее. Теперь браузеры переходят с <strong>autobuffer </strong>на <strong>preload</strong>, так что мы рекомендуем пока использовать оба эти атрибута.</p>
<p>Кстати, это те же атрибуты, что и для элемента <strong>&lt;video&gt;</strong>.</p>
<h3>Примеры</h3>
<p>Давайте возьмем пару этих атрибутов и создадим простой пример, который будет воспроизводить аудиофайл:</p>
<pre class="prettyprint" rel="HTML">&lt;audio src=&quot;elvis.ogg&quot; controls preload=&quot;auto&quot; autobuffer&gt;&lt;/audio&gt;
</pre>
<p>(Этот пример будет работать в последних версиях Firefox, Chrome и Opera. Чтоб он заработал в Safari, вам нужно заменить <strong>OGG</strong>-файл на <strong>MP3</strong>)</p>
<p>Конечно, спецификация еще не закончена, а также не достигнут консенсус, какой кодек поддерживать. В этой таблице представлены кодеки, которые поддерживаются современными браузерами:</p>
<table border="1" cellpadding="1" cellspacing="1" style="width: 700px;">
<caption><em>Поддержка кодеков в современных браузерах</em></caption>
<thead>
<tr>
<th scope="col">Браузер</th>
<th scope="col">Ogg</th>
<th scope="col">MP3</th>
<th scope="col">WAV</th>
</tr>
</thead>
<tbody>
<tr>
<td>FireFox 3.6+</td>
<td style="text-align: center;">✓</td>
<td style="text-align: center;">&nbsp;</td>
<td style="text-align: center;">✓</td>
</tr>
<tr>
<td>Safari 5+</td>
<td style="text-align: center;">&nbsp;</td>
<td style="text-align: center;">✓</td>
<td style="text-align: center;">✓</td>
</tr>
<tr>
<td>Chrome 6</td>
<td style="text-align: center;">✓</td>
<td style="text-align: center;">✓</td>
<td style="text-align: center;">&nbsp;</td>
</tr>
<tr>
<td>Opera 10.5+</td>
<td style="text-align: center;">✓</td>
<td style="text-align: center;">&nbsp;</td>
<td style="text-align: center;">✓</td>
</tr>
<tr>
<td>Internet Explorer 9 (beta)</td>
<td style="text-align: center;">&nbsp;</td>
<td style="text-align: center;">✓</td>
<td style="text-align: center;">✓</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<p>Чтобы создать собственные контролы, мы можем воспользоваться API-методами, описанными в спецификации:</p>
<ul>
<li><strong>play ( )</strong> &#8211; воспроизводит аудио</li>
<li><strong>pause ( ) </strong>- приостанавливает аудио</li>
<li><strong>canPlayType ( )</strong> &#8211; запрашивает, чтоб браузер определил, может ли воспроизводиться данный mime-тип</li>
<li><strong>buffered ( )</strong> &#8211; атрибут, который указывает время начала и конца буферизированной части файла</li>
</ul>
<h2>Используйте &lt;source&gt;</h2>
<p>Наилучший способ заставить браузер воспроизводить аудио (или видео, если на то пошло) &#8211; это использовать элемент<strong> &lt;source&gt;</strong>. Браузер будет пытаться загрузить первый источник аудио, а если у него не получится или если он не поддерживает, браузер перейдет к следующему источнику аудио. Помимо этого, мы легко можем установить Flash-плейер, если больше ничего не помогает:</p>
<pre class="prettyprint" rel="HTML">&lt;audio controls preload=&quot;auto&quot; autobuffer&gt;
  &lt;source=&quot;elvis.mp3&quot; /&gt;
  &lt;source=&quot;elvis.ogg&quot; /&gt;
  &lt;!-- а теперь flash-вариант --&gt;
&lt;/audio&gt;
</pre>
<p>Однако, предупреждаем: обращайте внимание на порядок элементов <strong>&lt;source&gt;</strong>. На момент написания, сообщались проблемы с <strong>Mobile Safari </strong>и ранними версиями <strong>Firefox</strong>.</p>
<h2>Кросс-браузерная реализация</h2>
<p>Когда мы создавали <a href="http://happyworm.com/jquery/jplayer" target="blank">jPlayer</a>, аудио-плагин для <strong>jQuery</strong>, мы пытались побороть некоторые ограничения большинства аудио-плейеров на основе <strong>Flash</strong>. Многие используют <strong>Flash </strong>для разработки графического интерфейса плейера, эффективно изолируя его от процесса веб-дизайна.</p>
<p>Первоначальный <strong>jPlayer </strong>использовал <strong>Flash </strong>непосредственно для воспроизведения аудио, при этом стиль можно было задавать при помощи <strong>HTML </strong>и <strong>CSS</strong>. С увеличением поддержки <strong>HTML5 </strong>современными браузерами мы решили избавиться от <strong>Flash-зависимости</strong> и использовать нативное аудио в тех случаях, когда оно поддерживается.</p>
<p>Самой значимой проблемой является кросс-браузерная реализация, так как отсутствие общепринятого браузерами аудиоформата вызывает сложности. Если разработчики хотят в полной мере использовать преимущества всех браузеров, которые поддерживают <strong>HTML5 &lt;audio&gt;</strong>, им будет необходимо создавать обе версии аудиофайла, который они хотят воспроизводить &#8211; <strong>MP3 </strong>и <strong>Ogg </strong>(а также <strong>WAV </strong>в случае с <strong>Opera</strong>).</p>
<p>Так как <strong>HTML5-стандарт</strong> все еще находится в процессе разработки (<em>прим. пер.</em>: текущее состояние спецификации &#8211; ready for first implementations), несколько аспектов элемента <strong>&lt;audio&gt;</strong> отличаются от браузера к браузеру. Например, судя по всему, не существует способа определить прогресс загрузки аудиофайла во всех браузерах, потому что это предполагает использование <strong>DOM-атрибута</strong> buffered. <strong>Chrome </strong>поддерживает <strong>buffered</strong>, в <strong>Safari </strong>он есть, но ведет себя несколько иначе, а текущие версии <strong>Opera </strong>и <strong>Firefox </strong>его не поддерживают (<a href="http://hacks.mozilla.org/2010/08/html5-video-buffered-property-available-in-firefox-4/" target="blank">хотя поддерживает Firefox 4 beta</a>).</p>
<p>Хоть эти несоответствия и не являются накладками, с целью эффективной конкуренции с решениями, основанными на плагинах, имплементация <strong>HTML5 &lt;audio&gt;</strong> должна быть последовательной во всех браузерах и соответствовать текущим требованиям в будущем.</p>
<h3>JavaScript-решения</h3>
<p>Если мы стремимся получить преимущества от способностей каждого браузера воспроизводить аудио, нам нужно создать разные решения для разных браузеров. Мы можем определять браузер пользователя, но учитывая стремительное развитие информационных технологий, лучше выяснить, какие возможности поддерживает конкретный браузер, и приспособиться соответственно.</p>
<p>Для демонстрации этого мы создали жесткую и готовую к использованию <a href="http://www.happyworm.com/jquery/jplayer/HTML5.Audio.Support" target="blank">HTML5-аудио проверку</a>.</p>
<p>Используя JavaScript, вы можете проверить, поддерживается ли тег <strong>&lt;audio&gt;</strong>:</p>
<pre class="prettyprint" rel="HTML">// возвращает булевский атрибут
var
 audioTagSupport =
!!(document.createElement(&#39;audio&#39;).canPlayType);</pre>
<p>или проверить совместимость с типом файла:</p>
<pre class="prettyprint" rel="HTML">// Нужно сначала проверить canPlayType или исключение
  // будет выброшен для тех браузеров, которые его не поддерживают

  var myAudio = document.createElement(&#39;audio&#39;);

  if (myAudio.canPlayType) {

    // На данный момент canPlayType(type) возвращает: &quot;&quot;, &quot;maybe&quot; или &quot;probably&quot;

    var canPlayMp3 = !!myAudio.canPlayType &amp;&amp; &quot;&quot; !=myAudio.canPlayType(&#39;audio/mpeg&#39;);
    var canPlayOgg = !!myAudio.canPlayType &amp;&amp; &quot;&quot; !=myAudio.canPlayType(&#39;audio/ogg; codecs=&quot;vorbis&quot;&#39;);
  } </pre>
<p>Учтите, что для того чтобы изменить атрибут src объекта audio или элемента вам необходимо пересоздать этот объект или элемент с новым значением <strong>атрибута src</strong> или изменить <strong>URL атрибута src</strong> и выполнить команду <strong>myAudio.load</strong>.</p>
<p>Таким образом, для создания решения, которое полностью использует преимущества <strong>HTML5 аудио</strong>, вам, как правило, необходимо:</p>
<ol>
<li>проверить поддерживается ли <strong>HTML5 &lt;audio&gt;</strong> и, если нет, использовать <strong>Flash</strong>,</li>
<li>проверить уровень поддержки <strong>HTML5 &lt;audio&gt;</strong> и адаптировать свой код соответственно для каждого браузера,</li>
<li>проверить, какие типы файлов поддерживаются, и привязать необходимые форматы файлов.</li>
</ol>
<h2>Предстоящий путь</h2>
<p>Несмотря на то, что <strong>HTML5 аудио</strong> &#8211; это относительно сырой компонент стандарта, если будут развиваться текущие тенденции и пользователи будут использовать последние версии <strong>Safari</strong>, <strong>Firefox</strong>, <strong>Chrome </strong>и <strong>Opera</strong>, поддержка браузеров может достичь 30%. Это значительная доля рынка браузеров, которым впредь не нужно будет зависеть от <strong>Adobe Flash</strong>, <strong>Microsoft Silverlight </strong>или других плагинов для поддержки аудио. Добавьте к этому факт, что <strong>Internet Explorer 9</strong> поддерживает <strong>HTML5 &lt;audio&gt;</strong>, и мы в скором времени увидим, что большинство установленных браузеров также станут поддерживать его.</p>
<p>И когда мобильные и другие малогабаритные устройства, такие как планшеты, начнут поддерживать <strong>HTML5 аудио</strong>, вы убедитесь, какой важной становится нативная поддержка аудио.</p>
<h2>Полезные ссылки</h2>
<ul>
<li><a href="http://lists.whatwg.org/pipermail/whatwg-whatwg.org/2009-June/020620.html" target="blank">[whatwg] Кодеки для &lt;audio&gt; и &lt;video&gt;</a></li>
<li><a href="http://stackoverflow.com/questions/1007223/which-browsers-support-the-html-5-audio-tag-on-windows-today/1009015#1009015" target="blank">Какие браузеры поддерживают HTML5 &lt;audio&gt; в Windows сегодня?</a></li>
</ul>
<p><a href="http://html5doctor.com/native-audio-in-the-browser/" target="blank">Оригинал статьи</a> и <a href="http://html5doctor.com/author/markb/" target="blank">автор</a></p>
]]></content:encoded>
			<wfw:commentRss>http://css-live.ru/articles/nativnoe-audio-v-brauzere.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Работа с типографикой при адаптивном дизайне</title>
		<link>http://css-live.ru/articles/rabota-s-tipografikoj-pri-adaptivnom-dizajne.html</link>
		<comments>http://css-live.ru/articles/rabota-s-tipografikoj-pri-adaptivnom-dizajne.html#comments</comments>
		<pubDate>Thu, 10 May 2012 10:15:38 +0000</pubDate>
		<dc:creator>GreatRash</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[Статьи]]></category>

		<guid isPermaLink="false">http://css-live.ru/?p=6788</guid>
		<description><![CDATA[Итак, у вас есть резиновый лейаут и изображения, которые меняют...]]></description>
			<content:encoded><![CDATA[<p><strong>Итак, у вас есть резиновый лейаут и изображения, которые меняют размеры, но вам нужно заставить так же изменяться и текст. Один и тот же размер шрифта не подойдет ко всем возможным размерам экранов!</strong></p>
<p>Мы привыкли думать, что для изменения размеров тескта достаточно указать значение относительно размеров базового шрифта, используя em&rsquo;ы или проценты. В <strong>адаптивном web-дизайне</strong> мы пишем кучу правил и устанавливаем кучу ограничений, чтобы удостовериться, что наш лейаут хорошо отображается на различных разрешениях. Текст &#8211; это замечательная изменчивая среда, но, указав один размер не получится красиво заполнить им страницу. Мы рассмотрим несколько простых советов как добиться того, чтобы текст красиво заполнял лейаут, невзирая на размер экрана или устройство на котором он отображается.</p>
<p>Конечно, это слишком обширная тема, чтобы раскрыть ее в одном уроке. Поэтому в конце перечислено несколько полезных ресурсов на эту тему.</p>
<p><span id="more-6788"></span></p>
<h2>Заставляем типорграфику масштабироваться</h2>
<p>Ах, этот <strong>адаптивный web-дизайн</strong>! Эти прекрасные резиновые сетки и медиа-запросы (<strong>media queries</strong>), которые помогают нашим дизайнам заполнять экраны любых размеров. К счастью для нас текст может масштабироваться практически безгранично и заполнять любой контейнер, в который мы его поместим. Наврядли нам нужно что-то еще придумывать для наших <strong>адаптивных дизайнов</strong>&#8230; или нужно? В идеале, когда наш основной лейаут масштабируется, то же должен делать и текст, и вот один способ как этого добиться.</p>
<h3>Наша тестовая страница</h3>
<p>Для нужд этого примера я приготовил очень простую страницу, которая использует для демонстрации несколько первых абзацев из произведения &ldquo;Алиса в Стране чудес&rdquo; в качестве рыбы. Ваш сайт, надеюсь, представляет из себя нечто большее, но простота этой страницы идеально подходит нам для наших тестов, а эта техника может быть применена и к более сложным страницам.</p>
<p>Давайте взглянем на наш исходник и посмотрим, что у него под капотом. <strong><code>&lt;h1&gt;</code></strong> в качестве заголовка и несколько параграфов, обернутых в <strong><code>&lt;div&gt;</code></strong>, которому назначен класс wrap. Мы используем этот контейнер для управления длиной строки в нашем примере. Для вашего сайта <strong>ширина контейнера</strong> будет основываться на вашей сетке и ее адаптивном поведении, но идея остается неизменной.</p>
<p>Быстрое погружение в <strong>CSS </strong>расскажет нам, что мы установили размер шрифта у <strong>body</strong> в 100% (что, для справки, составляет около <strong>16px</strong>). Размеры остальных елементов задаются при момощи em. Замечательно! Мы взяли хороший старт:</p>
<pre class="prettyprint" rel="css">body {
    font-size: 100%;
    line-height: 1.6875;
    font-family: Georgia;
}</pre>
<p>Мы отмасштабировали нашу базовую типографику, все настроили, теперь давайте проверим как наша типографика будет смотреться на различных экранах.</p>
<h2>Сначала проверяем наименьший экран</h2>
<p>Давайте начнем смотреть на нашу разметку на экране очень маленькой ширины, допустим что-то около 320 пикселей по ширине. примерно это вы увидите на большинстве популярных мобильных устройствах.</p>
<p>Изначально, при такой малой ширине ширина строки будет немного меньше чем общепринятая оптимальная длина в 45 &#8211; 75 символов. Или, если вы не фанат подсчета количества символов в строке, вы можете заметить, что строки кажутся короткими и за текстом трудновато следить. Лично я, как правило, часто перечитываю строку по несколько раз.</p>
<p>Чтобы получить немного больше места для комфортной длины строки мы можем уменьшить общий <strong>размер шрифта</strong>, или мы можем сделать больше наш контейнер. Раз уж мы говорим тут о масштабировании текста, то я предпочту остановиться на первом варианте, но и второй вариант тоже довольно приемлем.</p>
<p>Чтобы справиться с ситуацией, давайте напишем медиа-запрос для максимальной ширины в 400 пикселей. Да, это не 320 пикселей, но я предпочитаю устанавливать ограничения там где дизайн в них действительно нуждается, а не основываясь на размерах экранов у устройств.</p>
<p>Самый простой способ сменить размер всех шрифтов &mdash; сменить <strong>font-size</strong> у</p>
<p>:</p>
<pre class="prettyprint" rel="css">@media only screen and (max-width: 400px) {
    body {
        font-size: 90%;
    }
}</pre>
<p>Благодяря тому факту, что мы изначально указали размеры шрифтов в <strong>em</strong>, мы можем сменить все размеры на странице, просто исправив одну строчку кода. Слава относительным размерам шрифта!</p>
<p><img alt="" class="aligncenter size-full wp-image-6789" src="http://css-live.ru/wp-content/uploads/2012/05/screengrab01.jpg" title="screengrab01" width="600" /></p>
<h2>Движемся дальше</h2>
<p>Если мы сделаем так как делают web-дизайеры и продолжим увеличивать окно браузера до огромных размеров, наш контейнер с текстом начнет становиться все больше и больше и текст в нем будет перерисовываться так, чтобы заполнить его целиком. Все так как мы и ожидаем. Но проследите за длиной строки. Когда пояляется ощущение, что она слишком длинная?</p>
<p>Примерно при ширине 800 пикселей (<strong>ширина всего окна браузера</strong>) длина строки становится некомфортно длинной. Похоже пришло время добавить еще одно ограничение для нашего текста.</p>
<pre class="prettyprint" rel="css">@media only screen and (max-width: 800px) {
    body {
        font-size:100%;
    }
}

@media only screen and (max-width: 1100px) {
    body {
        font-size: 120%;
    }
}</pre>
<p>Вот как теперь выглядин наша страничка при любой ширине окна между 800 и 1100 пикселями. Мы получили немного больше рабочего места и наш текст заполняет его немного более красиво.</p>
<p><img alt="" class="aligncenter size-full wp-image-6790" src="http://css-live.ru/wp-content/uploads/2012/05/screengrab02.jpg" title="screengrab02" width="600" /></p>
<p>В этот раз мы написали два медиа-запроса. Один для максимальной ширины 800px с <strong>font-size</strong> у <strong>body</strong>. установленным в 100%, который покрывает диапазон размеров окна между <strong>500px</strong> и 800px. И второй, для тех случаев, когда ширина окна больше 800px, и позволяет нам увеличить <strong>базовый размер шрифта</strong>.</p>
<p>увеличил базовый размер шрифта до <strong>120%</strong> когда мы проходим отметку в 800 пикселей, чтобы получить длину строки примерно такую, какая мне нравится. Конечно это всего лишь мои ощущения, которые зависят от контента как такового и от окружающих элементов. Выбирайте граничные точки и изменения масштаба, которые имеют смысл для вас и вашего дизайна. Главная цель &#8211; достичь комфортного чтения и сбалансированной сетки. Тестирование ваших лейаутов не только изменяя размеры окна браузера, поможет достичь наилучших результатов.</p>
<h2>Иии&#8230; полетели!</h2>
<p>Догадайтесь, что будет дальше, я собираюсь продолжить растягивать окно браузера шире и шире и посмотрю что произойдет. Неудивительно, что длина строки снова растет и достигает неудобных размеров примерно при ширине в 1100px. Пришло время для еще одной граничной точки? Мы можем продолжить добавлять и добавлять точки сколько угодно, но, кажется, это не очень умно, этому уже не видно конца!</p>
<p>Технически, вы можете продолжать масштабирование бесконечно. Однако, скорее всего, ваш макет и изображения этого не могут. В какой-то момент нам надо будет остановиться. И для этого простенького демо я решил остановиться на 1100 пикселях.</p>
<p>Осталось дописать последний медиа-запрос. Я хочу, чтобы что-то останавливало нашу строку от дальнейшего роста, чтобы мы могли все застыло на том моменте когда мы имеем приемлемую длину строки. Самы легкий путь сделать это &mdash; добавить максимальную ширину диву, содержащему текст.</p>
<p>Для начала, нам надо определить приблизительную ширину нашего дива с содержимым. Если ширина окна браузера равна 1100 пикселям, а ширина дива-обертки равна 70%, то совсем чуть-чуть математики дас нам 770 пикселей (1100 * 0.7).</p>
<p>Вооруженные этой информацией отредактируем наш последний медиа-запрос:</p>
<pre class="prettyprint" rel="css">@media only screen and (min-width: 1100px) {
    body {
        font-size: 120%;
    }

    .wrap {
        max-width: 770px;
    }
}</pre>
<p>Шрифт в нашем демо теперь такого размера, какой мы захотели.</p>
<p><img alt="" class="aligncenter size-full wp-image-6792" src="http://css-live.ru/wp-content/uploads/2012/05/screengrab03.jpg" title="screengrab03" width="600" /></p>
<p>Ну вот и все. Простая техника, позволяющая вашему тексту оставаться красивым и комфортным для чтения на широком диапазоне разрешений экранов.</p>
<h2>Суммируя все воедино</h2>
<p>Даже из такого простого примера вам должно быть ясно, что вы должны быть аккуратны при выборе когда ставить ограничения для шрифта при контроле длины строки. А что же тогда на счет интерлиньяжа и иерархии? На них так же влияет изменение размеров текста и контейнера. Есть еще так много тем для изучения!</p>
<p>Присматривайте за своим текстом и вносите изменения так где этого требуют ваша разметка и ваш проект. Дело не в том сколько медиа-запросов вы понапишете. Дело в том, чтобы сделать ваш дизайн удобным и пуленепробиваемым для вас и любого, кто будет его использовать.</p>
<h2>Дальнейшее чтение</h2>
<p>Это простенькое демо только вершина айсберга. Если типографика для адаптивного web-дизайна вас заинтересовала, то вот несколько рекомендаций по чтению:</p>
<ul>
<li><a href="http://nicewebtype.com/notes/responsive-typography/">Тим Браун (Tim Brown) делает замечательную работу, собирая техники и вещи, о которых можно задуматься применительно к web-типографике</a>.</li>
<li>Есть не только проценты и em&rsquo;ы, когда разговор заходит об изменении размеров текста в web. <a href="http://blog.typekit.com/2011/11/09/type-study-sizing-the-legible-letter/">Итан Маркотт (Ethan Markotte) рассказывает об этом подробней в блоге Typekit</a>.</li>
<li>Тяжело говорить о типографике не вдаваясь в дискуссии по поводу вертикального ритма. <a href="http://24ways.org/2006/compose-to-a-vertical-rhythm">Эта классическая статья на 24 ways рассказывает об этом подробней</a> (И не пропустите <a href="http://www.netmagazine.com/tutorials/preserving-vertical-rhythm-css-and-jquery">урок Мэта Уилкокса (Matt Wilcox) о сохранении вертикального ритма</a> при помощи CSS и jQuery).</li>
<li>И, наконец, взгляните на урок Пола Роберта Ллойда (Paul Robert Lloyd) о том как построить адаптивный сайт за неделю. Сегодняшняя <a href="http://www.netmagazine.com/tutorials/build-responsive-site-week-typography-and-grids-part-2">2 часть об адаптивной типографике и сетках</a></li>
</ul>
<p><em>Перевод статьи <a href="http://www.netmagazine.com/tutorials/handling-typography-responsive-design">Handling typography for responsive design</a> автора <a href="http://www.valhead.com/">Val Head</a></em></p>
]]></content:encoded>
			<wfw:commentRss>http://css-live.ru/articles/rabota-s-tipografikoj-pri-adaptivnom-dizajne.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Скроллируемые тени на чистом CSS при помощи background-attachment: local</title>
		<link>http://css-live.ru/articles/skrolliruemye-teni-na-chistom-css-pri-pomoshhi-background-attachment-local.html</link>
		<comments>http://css-live.ru/articles/skrolliruemye-teni-na-chistom-css-pri-pomoshhi-background-attachment-local.html#comments</comments>
		<pubDate>Sat, 05 May 2012 10:43:41 +0000</pubDate>
		<dc:creator>GreatRash</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[Статьи]]></category>

		<guid isPermaLink="false">http://css-live.ru/?p=6605</guid>
		<description><![CDATA[Несколько дней назад невероятно талантливый Роман Комаров опубликовал свой эксперимент...]]></description>
			<content:encoded><![CDATA[<p>Несколько дней назад невероятно талантливый <a href="https://twitter.com/#!/kizmarh">Роман Комаров</a> опубликовал свой эксперимент <a href="http://kizu.ru/fun/shadowscroll/">&laquo;Скроллируемые тени&raquo; на чистом CSS</a>. Если вы используете <strong>Google Reader</strong> вы, вероятно, знакомы с этим эффектом:</p>
<p><img alt="Google Reader" class="aligncenter size-full wp-image-6606" src="http://css-live.ru/wp-content/uploads/2012/05/scrolling-shadows.png" width="500" /></p>
<p>&nbsp;</p>
<p><span id="more-6605"></span></p>
<p>В эксперименте Романа он использует абсолютно позиционированные псевдоэлементы чтобы прикрыть тени (которые сформированы радиальным градиентом в качестве фона). Он воспользовался тем фактом, что когда вы прокручиваете скроллируемый контейнер, его бэкграунд не прокручивается вместе с ним, но, при этом, абсолютно позиционированные элементы внутри контейнера прокручиваются. Таким образом, когда вы проскролливаете содержимое блока, тень становится видно из-под псевдоэлемента. Более того, эти псевдоэлементы представляют собой линейный градиент от белого к прозрачному, что позволяет теням проявляться постепенно.</p>
<p>Когда я увидела демо Романа, мне стало интересно возможно ли добиться того же эффекта без дополнительных контейнеров (включая псевдоэлементы). И, похоже, это идеальный случай для использования <strong><code>background-attachment: local</code></strong>. На самом деле, это был единственный реальный вариант использования этого правила, который я когда либо видела.</p>
<h2>&laquo;background-attachment&#8230; что? Я знаю только scroll и fixed!&raquo;</h2>
<p><strong><code>scroll</code> </strong>и <strong><code>fixed</code> </strong>были единственными значениями для <strong>background-attachment</strong> во времена <strong>CSS 2.1</strong>. <strong><code>scroll</code></strong> &mdash; это дефолтное значение, которое позиционирует фоновое изображение <em>относительно элемента, которому оно назначено</em>, в то время как <strong><code>fixed</code> </strong>позиционирует его относительно <em>области просмотра (viewport)</em>, в результате чего бекграунд остается на месте, в то время когда страница прокручивается. Как результат этих определений, в случае если скроллируемой была только часть страницы (например, <strong>&lt;div&gt;</strong> с <strong>overflow: auto</strong>), его бекграунд не прокручивался когда прокручивался сам контейнер.</p>
<p>В модуле <strong>CSS</strong>, посвященному границам и фоновым изображениям <a href="http://www.w3.org/TR/css3-background/">Backgrounds &amp; Borders Level 3</a> было добавлено новое значение, чтобы снять это ограничение: <strong><code>local</code></strong>. Когда применяется <strong><code>background-attachment: local</code> </strong>фоновое изображение позиционируется относительно содержимого элемента. В результате этого оно прокручивается когда прокручивается элемент. Это не новая фича, она была нам доступна со времен первых <a href="http://www.w3.org/TR/2005/WD-css3-background-20050216/#the-background-attachment">черновиков Backgrounds &amp; Borders 3</a> в 2005 году (конечно, реализация заняла некоторое время, так что можно считать, что с 2009).</p>
<p>Если вам все еще не понятно как это работает, поиграйте немного с этим кодом, который демонстрирует работу всех трех значений (естественно ваш браузер должен поддерживать все три):</p>
<p><iframe height="240" src="http://dabblet.com/gist/2494566" style="width: 90%;  display: block; margin: 0 auto; height: 600px;" width="320"></iframe></p>
<h2>&laquo;Хорошо, я понял. Вернитесь к скроллируемым теням пожалуйста?&raquo;</h2>
<p>Основная идея заключалась в том, чтобы превратить эти абсолютно позиционированные псевдоэлемнты в фоновые слои, к которым применено правило <strong>background-attachment: local</strong>. Я попробовала это, это сработало и помогло довольно сильно сократить код. Вот как выглядит <strong>CSS</strong>:</p>
<p><iframe height="240" src="http://dabblet.com/gist/2462915" style="width: 90%; display: block; margin: 0 auto; height: 600px;" width="320"></iframe></p>
<p>Недостаток этого подхода в том, что мы немного понижаем кроссбраузерность. Оригинальный эксперимент Романа мог работать даже в <b>IE8</b>, если заменить градиенты картинками (градиенты не влияют на функциональность). Когда вы полагаетесь на background-attachment: local, вы сужаете поддержку браузерами до <b>IE9+, Safari 5+, Chrome</b> и <b>Opera. Firefox</b> оказался самым явным прогульщиком из этого списка, вы можете проголосовать за <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=483446">баг #483446</a>, если вы заинтересованны в том, чтобы они реализовали это.</p>
<p>Тем не менее, поддержка браузерами не очень важна, т.к. эффект очень изящно деградирует. В браузерах, не поддерживающих этот метод, вы просто не увидите теней <img src='http://css-live.ru/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p><em>Перевод статьи <a href="http://lea.verou.me/2012/04/background-attachment-local/">Pure CSS scrolling shadows with background-attachment: local</a> автор <a href="http://lea.verou.me/">Lea Verou</a></em></p>
]]></content:encoded>
			<wfw:commentRss>http://css-live.ru/articles/skrolliruemye-teni-na-chistom-css-pri-pomoshhi-background-attachment-local.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Типографика, зависящая от размеров области просмотра</title>
		<link>http://css-live.ru/articles/tipografika-zavisyashhaya-ot-razmerov-oblasti-prosmotra.html</link>
		<comments>http://css-live.ru/articles/tipografika-zavisyashhaya-ot-razmerov-oblasti-prosmotra.html#comments</comments>
		<pubDate>Sat, 05 May 2012 09:54:24 +0000</pubDate>
		<dc:creator>GreatRash</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[Статьи]]></category>

		<guid isPermaLink="false">http://css-live.ru/?p=6754</guid>
		<description><![CDATA[В CSS появились новые значения для изменения размеров объектов в...]]></description>
			<content:encoded><![CDATA[<p><a href="http://dev.w3.org/csswg/css3-values/#viewport-relative-lengths">В CSS появились новые значения</a> для изменения размеров объектов в зависимости от размера области просмотра (<strong>viewport</strong>): <strong><var>vw</var></strong>, <strong><var>vh</var> </strong>и <strong><var>vmin</var></strong>. Уместно рассказать об этом сейчас, т.к. эти вещи появатся уже в <strong>Chrome 20</strong> (в сборке <a href="http://tools.google.com/dlpage/chromesxs">canary</a> на момент написания статьи). Пока нельзя сказать, что это работает. Использовать в продакшне их пока нельзя, но довольно скоро мы сможем ими пользоваться.</p>
<h2>Почему это так классно?</h2>
<p>На это есть несколько причин.<span id="more-6754"></span>Вот две:</p>
<ul>
<li>Есть такая вещь как комфортная длина строки для чтения текста с экрана. Не хочу ворошить осиное гнездо, но давайте предположим, что это <strong>80</strong> символов. Так вот, эти значения позволяют сохранить ощущение идеальной ширины строки на экране любого размера.</li>
<li>Они позволят вам тесно связать между собой размер, скажем, типографского заголовка и контента. который следует за ним. Например, как в <a href="http://trentwalton.com/2011/05/10/fit-to-scale/">классической статье в блоге Трента Уолтона (Trent Walton)</a>.</li>
</ul>
<h2>Как они работают</h2>
<p>Одна единица любого из трех значений равняется <strong>1%</strong> от расмера оси области просмотра. Область просмотра == ширина окна браузера == объект window. Если ширина области просмотра 40см, то <strong>1vw</strong> = <strong>0.4см</strong>.</p>
<p>При использовании <strong><code>font-size</code></strong> мы предполагаем, что ширина одной буквы равна значению <strong><code>font-size</code></strong>, но, как мы знаем, в шрифтах, которые не являются моноширинными, ширина буквы может быть довольно произвольной. Поэтому нам приходится немного играться со значениями, чтобы подобрать нужное. Что мы, собственно, и делаем, правда?</p>
<p><strong>1vw </strong>= <strong>1%</strong> от ширины области просмотра<br />
	<strong>1vh</strong> = <strong>1%</strong> от высоты области просмотра<br />
	<strong>1vmin</strong> = <strong>1vw</strong> или <strong>1vh</strong>, берется наименьшее значение</p>
<h2>Как их использовать</h2>
<p>Да как два пальца:</p>
<pre class="prettyprint" rel="css">h1 {
    font-size: 5.9vw;
}

h2 {
    font-size: 3.0vh;
}

p {
    font-size: 2vmin;
}
</pre>
<h2>Демо</h2>
<p>Вот видео <a href="http://css-tricks.com/examples/ViewportTypography/">простой разметки</a>, использующей единицы <var>vw</var> для нудж типографики:</p>
<p><iframe align="middle" frameborder="0" height="315" scrolling="no" src="http://www.youtube.com/embed/AUiVLIDoGuc" style="margin: 0 auto; display: block;" width="560"></iframe></p>
<p>Посмотрите демо и обратите внимание на поддержку браузерами.</p>
<h2>Баги!</h2>
<p>Поддержка будет в <strong>Chrome 20</strong>, но есть один существенный недостаток. Когда ресайзится окно браузера шрифт не изменяется в зависимости от размеров области просмотра. В спеке сказано:</p>
<blockquote><p>Когда высота или ширина области просмотра изменяется, размеры изменяются соответсвенно.</p></blockquote>
<p>Я написал <a href="http://code.google.com/p/chromium/issues/detail?id=124331">багрепорт</a>. Возможно это не такая уж большая катастрофа, ведь, по большому счету, только мы, нерды, ходим тут и резайзим браузеры, но все-таки. Шрифт все же меняет размеры если обновить страницу.</p>
<p>Чтобы побороть проблему (позволить шрифту менять размеры без перезагрузки страницы) нам нужно как-то перерендерить элемент. Я использовал <a href="http://jquery.com">jQuery</a> и просто поигрался со значением z-index каждого элемента (которое, в данном, случае ни на что не влияет), смена z-index заставляет браузер перерисовать элемент.</p>
<pre class="prettyprint" rel="jQuery">causeRepaintsOn = $(&quot;h1, h2, h3, p&quot;);

$(window).resize(function() {
    causeRepaintsOn.css(&quot;z-index&quot;, 1);
});
</pre>
<h2>Поддержка браузерами</h2>
<p><b>Chrome 20+</b> и <b>IE 10+.</b></p>
<p>Я попробовал применить значения в <b>Opera Next (12), Safari 5.2</b> и <b>Firefox Beta (13)</b> и мне не свезло.</p>
<h2>Не только font-size</h2>
<p>Для справки, это эти новые значения, просто еще одни единицы. Такие же как <var>em</var>, <var>px</var> и т.п. Вы можете использовать их не только для указания размера шрифта.</p>
<p>Я подумал о размере шрифта как о наиболее интересном варианте использования, в свете того, что такие вещи как <strong><code>margin</code></strong>, <strong><code>padding</code> </strong>и <strong><code>width</code> </strong>и так могут реагировать на размеры окна, если указать им значения в %. Возможно, бывают такие случаи когда, каким-либо, глубоко вложенным элементам нужно будет отсчитывать ширину не относительно своего родителя, а относительно ширины окна.</p>
<h2>Используем это сейчас</h2>
<h3>Нативное использование</h3>
<p>Вам нужно использовать деградацию:</p>
<pre class="prettyprint" rel="css">h1 {
    font-size: 36px; /* Некое резервное значение, которое не выглядит ужасным */
    font-size: 5.4vw;
}
</pre>
<h3>Тест на поддержку</h3>
<p>В <a href="http://modernizr.com/">Modernizr</a> <a href="https://github.com/Modernizr/Modernizr/issues/572">пока</a> нет проверки на поддержку этих значений, но вы можете написать проверку самостоятельно, используя некий временный элемент, которому установлена некая приближенная ширина в <strong>CSS</strong>, которая потом переустанавливается в JavaScript и проверяется, равна ли эта ширина ширине окна. Что-то типа:</p>
<pre class="prettyprint" rel="jQuery">var testEl = $(&quot;#vw-test&quot;);

var viewport = $(window);

testEl.css({
  width: &quot;100vw&quot;
});

if (testEl.width() == viewport.width()) {
   $(&quot;html&quot;).addClass(&quot;vw-support&quot;);
} else {
   $(&quot;html&quot;).append(&quot;vw-unsupported&quot;);
};
</pre>
<h3>Похожий функционал в FixText.js</h3>
<p>Мы обсуждаем идею привязки ширины текста заголовка к ширине окна &mdash; это как раз то, что реализует <a href="http://fittextjs.com/">FixText.js</a>. Только реализует он это через нетривиальный JavaScript, математику, спаны и т.п. Теоретически вы можете запустить проверку на поддержку и использовать <a href="http://modernizr.com/docs/#load">Modernizr.load</a> для загрузки FixText.js если проверка провалилась.</p>
<h2>Собственно</h2>
<p>Что вы думаете? Вам понравилось? Есть идеи как это можно использовать?</p>
<p><em>Перевод статьи <a href="http://css-tricks.com/viewport-sized-typography/">Viewport Sized Typography</a> автор <a href="http://css-tricks.com/">Chris Coyier</a></em></p>
]]></content:encoded>
			<wfw:commentRss>http://css-live.ru/articles/tipografika-zavisyashhaya-ot-razmerov-oblasti-prosmotra.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Гибкие многострочные списки определений при помощи двух строк CSS 2.1</title>
		<link>http://css-live.ru/articles/gibkie-mnogostrochnye-spiski-opredelenij-pri-pomoshhi-dvux-strok-css-2-1.html</link>
		<comments>http://css-live.ru/articles/gibkie-mnogostrochnye-spiski-opredelenij-pri-pomoshhi-dvux-strok-css-2-1.html#comments</comments>
		<pubDate>Sat, 05 May 2012 07:38:36 +0000</pubDate>
		<dc:creator>GreatRash</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[Статьи]]></category>

		<guid isPermaLink="false">http://css-live.ru/?p=6654</guid>
		<description><![CDATA[Если вы когда-либо использовали списки определений (&#60;dl&#62;) то вы в...]]></description>
			<content:encoded><![CDATA[<p>Если вы когда-либо использовали списки определений (<strong><code>&lt;dl&gt;</code></strong>) то вы в курсе проблемы. По дефолту, у <strong><code>&lt;dt&gt;</code></strong> и <strong><code>&lt;dd&gt;</code></strong> стоит <strong><code>display: block</code></strong>. Для того, чтобы превратить их в то, что нам надо в большинстве случаев (каждая <em>пара</em> термина и определения на одной строке) мы обычно используем несколько техник:</p>
<ul>
<li>Используем разный <strong><code>&lt;dl&gt;</code></strong> для каждой пары: разметка доминирует над стилями, что плохо</li>
<li><strong>Float</strong>: не гибко</li>
<li><strong><code>display: run-in;</code></strong> для <strong><code>&lt;dt&gt;</code></strong>: плохая поддержка браузерами (не поддерживается в Firefox)</li>
<li>Добавление <strong><code>&lt;br&gt;</code></strong> после каждого <strong><code>&lt;dd&gt;</code></strong> и установка термину и определению <code>display: inline;</code>: невалидная разметка. Нужно ли продолжать?</li>
</ul>
<p>Ах, если бы добавление <strong><code>&lt;br&gt;</code></strong> было валидным&#8230; Или, даже так: <strong>что если бы мы могли вставлять <code>&lt;br&gt;</code> при помощи CSS? На самом деле мы можем!</strong></p>
<p><span id="more-6654"></span></p>
<p>Наверняка вы в курсе, что символы <strong>CR </strong>и <strong>LF</strong> которые представляют собой разрыв строки &mdash; это обычные <strong>unicode-символы</strong>, которые могут быть вставлены где угодно как и все остальные unicode-символы. Им соответствуют коды <strong>000D </strong>и <strong>000A </strong>соответсвенно. Это значит, что они тоже могут быть вставлены в генерируемый контент если их должным образом экранировать. Далее, мы можем использовать соответствующее значение <strong>white-space</strong>, чтобы заставить браузеры обращать внимание только на вставленные разрывы строк. Выглядит это вот так:</p>
<pre class="prettyprint" rel="css">dd:after {
    content: &#39;\A&#39;;
    white-space: pre;
}
</pre>
<p>Заметьте, что ничего из вышеперечисленного не относится к <strong>CSS3</strong>. Все это старый добрый <strong>CSS 2.1</strong></p>
<p>Конечно если у вас есть несколько <strong><code>&lt;dd&gt;</code></strong> для каждого <code>&lt;dt&gt;</code>, то вам придется немного изменить код. Но в этом случае вам, скорее всего, не понадобится такое форматирование.</p>
<p><b>Добавлено:</b> <a href="https://twitter.com/codepo8/status/173148263124451328">как заметил Кристиан Хейльман (Christian Heilmann)</a>, в <strong>HTML3</strong>(!) в элементах <strong><code>&lt;dl&gt;</code></strong> использовался <a href="http://www.w3.org/MarkUp/html3/deflists.html">атрибут <code>compact</code></a>, который, собственно, делал тоже самое. Сейчас в <strong>HTML5 </strong>он считается устаревшим, как и остальной фукнкционал представления в <strong>HTML</strong>.</p>
<p>Вот так выглядит финальный результат:</p>
<p><iframe height="240" src="http://dabblet.com/gist/1901867" style="width: 90%; display: block; margin: 0 auto; height: 800px;" width="320"></iframe></p>
<p>Протестировано в<strong> IE8</strong>, <strong>Chrome</strong>, <strong>Firefox 3+</strong>, <strong>Opera 10</strong>, <strong>Safari 4+</strong>.</p>
<p><em>Перевод статьи <a href="http://lea.verou.me/2012/02/flexible-multiline-definition-lists-with-2-lines-of-css/">Flexible multiline definition lists with 2 lines of CSS 2.1</a> автор <a href="http://lea.verou.me/">Lea Verou</a></em></p>
]]></content:encoded>
			<wfw:commentRss>http://css-live.ru/articles/gibkie-mnogostrochnye-spiski-opredelenij-pri-pomoshhi-dvux-strok-css-2-1.html/feed</wfw:commentRss>
		<slash:comments>20</slash:comments>
		</item>
	</channel>
</rss>

