<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Очередной блог фрилансера &#187; верстка</title>
	<atom:link href="http://dreamhelg.ru/category/layout/feed/" rel="self" type="application/rss+xml" />
	<link>http://dreamhelg.ru</link>
	<description>о моей работе в сети и не только</description>
	<lastBuildDate>Mon, 14 May 2012 19:53:02 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Псевдо-селектор :target</title>
		<link>http://dreamhelg.ru/2012/05/pseudo-selector-target/</link>
		<comments>http://dreamhelg.ru/2012/05/pseudo-selector-target/#comments</comments>
		<pubDate>Sun, 13 May 2012 11:18:33 +0000</pubDate>
		<dc:creator>dreamhelg</dc:creator>
				<category><![CDATA[верстка]]></category>
		<category><![CDATA[переводы]]></category>
		<category><![CDATA[target]]></category>

		<guid isPermaLink="false">http://dreamhelg.ru/?p=2300</guid>
		<description><![CDATA[<p><img width="150" height="150" src="http://dreamhelg.ru/wp-content/uploads/2012/05/home.jpg" class="attachment-200x200 wp-post-image" alt="home" title="home" /></p>Псевдо-селектор <strong>:target</strong> срабатывает при совпадении хэша в URL и ID элемента на странице.<span id="more-2300"></span>

<img class="aligncenter size-full wp-image-2303" title="hash" src="http://dreamhelg.ru/wp-content/uploads/2012/05/hash.png" alt="" width="372" height="68" />

[html]
&lt;section id=&quot;voters&quot;&gt;
   Content
&lt;/section&gt;
[/html]

[css]
:target {
   background: yellow;
}
[/css]

Пока URL будет таким как на картинке, блок section будет иметь желтый фон.
<h2>Где это можно использовать?</h2>
Один из примеров использования – подсветка “состояний”. Когда URL страницы содержит некий хэш, страница находится в соответствующем состоянии.  Этот способ напоминает манипулирование именами классов, хотя и не является таким универсальным. Все то, что вы обычно делаете изменяя классы, можно использовать для изменения состояния элемента, когда к нему применяется псевдо-селектор <strong>:target.</strong> Например: изменение цвета, позиционирования, изменение картинок, отображение/скрытие различных элементов, и т.д.

Существует три признака оправданного использования псевдо-селектора <strong>:target</strong> :
<ol>
	<li>Когда необходимо подчеркнуть “состояние”</li>
	<li>Когда приемлемо резкое “перепрыгивание” страницы вниз</li>
	<li>Когда приемлемо влияние на историю браузера</li>
</ol>
Давайте рассмотрим это немного подробнее.

<h2>Как получить хэш в URL?</h2>
Самый распространенный способ – пользовательский клик по ссылке, включающей хэш. Ссылка может быть как внутренней (которая указывает на текущую страницу), так и полноценной, оканчивающейся хэш-тэгом и значением. Например:

[html]
&lt;a href=&quot;#voters&quot;&gt;Go To There&lt;/a&gt;

&lt;a href=&quot;http://example.com/#specific-part&quot;&gt;Go To There&lt;/a&gt;
[/html]
<br/>
<h2>“Перепрыгивание” страницы</h2>
Независимо от назначения ссылки, <strong>браузер всегда прокручивает страницу до тех пор, пока указанный элемент не окажется вверху</strong>. В случае если браузер не может прокрутить точно  до указанного элемента, он прокрутит страницу на максимально возможную длину. Такое поведение браузера, накладывает определенные ограничения при использовании <strong>:target</strong> для подсветки текущего состояния.

Например, однажды я (прим. я – Крис Койер, автор блога css-tricks.com) <a href="http://css-tricks.com/css3-tabs/">пробовал различные техники</a>, для имитации создания CSS-табов, и в конце-концов остановился на <a href="http://css-tricks.com/the-checkbox-hack/">чекбокс-хаке</a>, поскольку только он позволял обойти проблемы с перепрыгиванием страницы. Йен Хэнсон, создатель CSS Science, также реализовал <a href="http://csscience.com/css3-tabs/">несколько примеров табов</a>. Его третий пример использует<strong> :target</strong> и абсолютно позиционируемые элементы, спрятанные вверху страницы, для предотвращения “прыжка”. Это довольно умно, но все же не решение проблемы, поскольку страница прыгает вверх, табы должны располагаться ниже области прыжка.

<h2>Прекрасный пример: подсветка секций</h2>
<strong>Проблема</strong>: Клик по хэш-ссылке прокручивает страницу к указанной секции, которая по возможности будет удобно расположена в верхней части окна браузера. Но что если на странице немного контента, а скролл  и вовсе отсутствует?  В этом случае, секция останется в видимой области, но не будет прибита к верху страницы, что странно и не совсем удобно.
<p style="text-align: center;"><a href="http://dreamhelg.ru/wp-content/uploads/2012/05/scrolling-problem.jpg"><img class="aligncenter size-medium wp-image-2305" title="scrolling-problem" src="http://dreamhelg.ru/wp-content/uploads/2012/05/scrolling-problem-300x204.jpg" alt="" width="300" height="204" /></a></p>
Исходя из личного опыта могу заметить, что если клик по внутристраничной ссылке не прокручивает страницу к указанной секции, это безумно раздражает. Чаще всего эта проблема встречается на FAQ-страницах, содержащих большое количество коротких секций.

Давайте это исправим!

Один из самых знаменитых методов исправления этой проблемы, называется “<a href="http://37signals.com/svn/archives/000558.php">Yellow Fade Technique</a>” (Техника Желтого Затухания). Эта техника была разработана компанией 37 signals, специально для того чтобы обратить внимание пользователей на только что добавленный на страницу контент . Джонатан Снук <a href="http://snook.ca/archives/html_and_css/yellow-fade-technique-css-animations">портировал эту идею на CSS</a> и объединил ее с псевдо-селектором <strong>:target.</strong>

Вместо желтого затухания, мы будем выделять активную секцию страницы путем плавного сдвига вправо, одновременно добавляя красный маркер слева от текста. Это будет выглядеть следующим образом:

http://youtu.be/vqE1MZ0UlaM

HTML-структура представляет собой обычную навигацию, с привязкой ссылок к соответствующим секциями через ID:

[html]
&lt;nav&gt;
  &lt;a href=&quot;#one&quot;&gt;1&lt;/a&gt;
  &lt;a href=&quot;#two&quot;&gt;2&lt;/a&gt;
  &lt;a href=&quot;#three&quot;&gt;3&lt;/a&gt;
&lt;/nav&gt;

&lt;section&gt;
  &lt;div id=&quot;one&quot;&gt;&lt;h2&gt;One&lt;/h2&gt;Pellentesque habitant morbi ...&lt;/div&gt;
  &lt;div id=&quot;two&quot;&gt;&lt;h2&gt;Two&lt;/h2&gt;Pellentesque habitant morbi ...&lt;/div&gt;
  &lt;div id=&quot;three&quot;&gt;&lt;h2&gt;Three&lt;/h2&gt;Pellentesque habitant morbi ...&lt;/div&gt;
&lt;/section&gt;​
[/html]

При активации <strong>:target</strong>, секция немного сдвигается вправо, через трансформацию <strong>translateX</strong>, поскольку она предотвращает любые проблемы с отступами и странное выравнивание текста; также слева появляется красный маркер, выполненный с помощью кейфрейм-анимации.

[css]
:target {
  -webkit-animation: highlight 1s ease;
  -moz-animation: highlight 1s ease;
  -webkit-transform: translateX(20px);
  -moz-transform: translateX(20px);
  -ms-transform: translateX(20px);
  -o-transform: translateX(20px);
}
@-webkit-keyframes highlight {
  0% { border-left-color: red; }
  100% { border-left-color: white; }
}
@-moz-keyframes highlight {
  0% { border-left-color: red; }
  100% { border-left-color: white; }
}
section &gt; div {
  border-left: 40px solid white;
  padding: 10px;
  -webkit-transition: all 0.5s ease;
  -moz-transition: all 0.5s ease;
  -ms-transition: all 0.5s ease;
  -o-transition: all 0.5s ease;
  padding-right: 50px;
  margin-left: -20px;
}
[/css]

Вот и все. Код отвечает принципам прогрессивного улучшения, поэтому будет нормально выглядеть и работать во всех браузерах.

<a href="http://dreamhelg.ru/demo/target/">Демо-страница.</a>
<h2>Боремся с прыжками страницы</h2>
Предположим, вам понравилась идея использования <strong>:target</strong> для подсветки секций, но при этом хотелось бы избежать прыжков страницы, при клике по хэш-ссылкам. С помощью jQuery вы можете предотвратить дефолтное поведение  всех хэш-ссылок, а затем использовать метод <strong>pushState()</strong> (или <strong>replaceState()</strong>), для изменения URL без передвижения страницы.

[javascript]
$(&quot;a[href^=#]&quot;).on(&quot;click&quot;, function(e) {
  e.preventDefault();
  history.pushState({}, &quot;&quot;, this.href);
});
[/javascript]

Метод <strong>replaceState()</strong> отличается от <strong>pushState()</strong> тем, что не добавляет запись о смене URL в историю браузера. Так что, вы можете использовать любой из этих методов на свое усмотрение.

<h3>Плохие новости</h3>
При изменении хэша в URL через метод <strong>pushState()</strong>, предыдущая активная секция должна вернутся к исходному состоянию, а новая выделиться. Однако этого не произойдет (на момент написания статьи тестировалось в последних версиях WebKit и Firefox). <a href="https://bugs.webkit.org/show_bug.cgi?id=83490">Это баг</a>.

Теоретически вы можете измерить и сохранить текущую позицию скролла на странице, позволить ссылке передвинуть страницу естественным путем, а затем вернуть ее обратно на то место где она была. Но это выглядит настолько ужасно, что я не могу себя заставить сделать тестовую страницу с этим примером.

Перевод статьи <a href="http://css-tricks.com/on-target/">"On :target"</a>, автор <strong>Chris Coyier</strong>Псевдо-селектор ]]></description>
		<wfw:commentRss>http://dreamhelg.ru/2012/05/pseudo-selector-target/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Обзор CSS-свойства vertical-align</title>
		<link>http://dreamhelg.ru/2011/12/css-vertical-align/</link>
		<comments>http://dreamhelg.ru/2011/12/css-vertical-align/#comments</comments>
		<pubDate>Fri, 23 Dec 2011 06:27:55 +0000</pubDate>
		<dc:creator>dreamhelg</dc:creator>
				<category><![CDATA[верстка]]></category>
		<category><![CDATA[переводы]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[vertical-align]]></category>

		<guid isPermaLink="false">http://dreamhelg.ru/?p=2284</guid>
		<description><![CDATA[<p><img width="184" height="184" src="http://dreamhelg.ru/wp-content/uploads/2011/12/css-vertical-align.jpg" class="attachment-200x200 wp-post-image" alt="css-vertical-align" title="css-vertical-align" /></p>Довольно часто от веб-разработчиков можно услышать возмущенный возглас: “vertical-align не работает!”.  Несмотря на то, что назначение этого свойства следует из его названия, на практике, начинающие разработчики, равно как и многие ветераны CSS, часто испытывают трудности с его применением.

В сегодняшней статье, я постараюсь раскрыть все непонятные моменты этого CSS-свойства.
<h2>Чего не делает vertical-align</h2>
Наиболее распространенное заблуждение относительно свойства <strong>vertical-align</strong> состоит в том, что оно влияет на вертикальное выравнивание всех дочерних элементов контейнера, к которому применяется. Например, если мы применим к контейнеру свойство <strong>vertical-align: top</strong>, предполагается, что все содержимое контейнера будет выровнено по верхнему краю контейнера.

Это напоминает мне старые, добрые времена табличной верстки:

[css]
    &lt;td valign=&quot;top&quot;&gt;  
      Содержимое ячейки..
    &lt;/td&gt;  
[/css]

В этом примере табличной ячейки, свойство <strong>valign</strong> (<a href="http://www.w3.org/TR/html5/obsolete.html#non-conforming-features">сейчас уже запрещенное в HTML5</a>), действительно прижмет все содержимое ячейки к верхнему краю. Возможно исходя из этого, CSS-разработчики ожидают похожего эффекта, от применения свойства <strong>vertical-align</strong>.

Но свойство <strong>vertical-align</strong> так не работает.
<h2>Как на самом деле работает vertical-align</h2>
Свойство <strong>vertical-align</strong> можно разделить на три простых правила:
<ol>
	<li>Оно применяется только к элементам со свойствами display: inline; и display: inline-block;</li>
	<li>Оно влияет на положение самого элемента, а не его содержимого (за исключением табличных ячеек)</li>
	<li>Когда оно применяется к табличной ячейке, то влияет на содержимое ячейки, а не на саму ячейку.</li>
</ol>
Другими словами, следующий код не будет иметь никакого эффекта:

[css]
    div {  
        vertical-align: middle; /* эта строка не будет работать */  
    }  
[/css]

Почему? Потому что &lt;div&gt;  - это блочный элемент. Конечно, если вы измените у дива свойство display, на inline, или inline-block, <strong>vertical-align</strong> сразу заработает.

Правильное использование свойства vertical-align, поможет выровнять строчный элемент относительно других строчных элементов на странице. Насколько высоко или низко расположится элемент по вертикали, будет зависеть от размера соседних строчных элементов, или от свойства line-height, заданного  для этой строки.

На картинке ниже, представлен пример того, как ведут себя строчные элементы, когда вы применяете свойство <strong>vertical-align</strong>:
<p style="text-align: center;"><a href="http://dreamhelg.ru/wp-content/uploads/2011/12/vertical-align-sheme.png"><img class="aligncenter size-medium wp-image-2290" title="vertical-align-sheme" src="http://dreamhelg.ru/wp-content/uploads/2011/12/vertical-align-sheme-300x210.png" alt="" width="300" height="210" /></a></p>

<h2>Значения свойства – ключевые слова</h2>
Свойство <strong>vertical-align</strong> может принимать следующие значения:
<ul>
	<li>baseline (значение по умолчанию)</li>
	<li>bottom</li>
	<li>middle</li>
	<li>sub</li>
	<li>super</li>
	<li>text-bottom</li>
	<li>text-top</li>
	<li>top</li>
</ul>
Большинство из них вам скорее всего не понадобятся, но всегда хорошо знать из чего можно выбрать. Например, на <a href="http://jsbin.com/isuvob/edit#html,live/">демо-странице</a>, текстовому полю назначено свойство <strong>vertical-align: top</strong>, благодаря чему, оно выровнено относительно самого высокого элемента в строке (большой картинки).

А если вы не хотите располагать элемент относительно изображений или других строчных элементов, можно использовать значения <strong>text-top</strong> или <strong>text-bottom</strong>, чтобы ваш элемент позиционировался относительно текста, расположенного в строке.
<h2>О значении “middle”</h2>
К сожалению, <strong>vertical-align: middle;</strong> не расположит строчный элемент по центру самого большого элемента в строке, как этого можно было бы ожидать. Вместо этого, значение <strong>middle</strong> расположит элемент относительно гипотетической строчной “x” (также называемой “x-высотой”). По-хорошему, это значение следовало бы назвать “text-middle”, для правильной идентификации его механизма.

На <a href="http://jsbin.com/apiqog/3/edit">этой демо-странице</a>, размер текста специально увеличен, чтобы вы могли посмотреть, как именно выравниваются элементы, при значении <strong>middle</strong>. По всему выходит, что это значение, вам будет нужно гораздо реже, чем остальные.
<h2>Цифровые значения свойства</h2>
Возможно вы не знали, но <strong>vertical-align</strong> в качестве значения может принимать абсолютные и процентные значения, все приведенные ниже примеры будут правильными:

[css]
    input {  
        vertical-align: 100px;  
    }  
      
    span {  
        vertical-align: 50%;  
    }  
      
    img {  
        vertical-align: -300px;  
    }  
[/css]

В чем разница между абсолютными значениями и ключевыми словами, можно почитать в <a href="http://www.w3.org/TR/CSS21/visudet.html#propdef-vertical-align">CSS-спецификации</a>, или (что на мой взгляд гораздо полезнее) самостоятельно попробовать различные варианты.

Перевод статьи “<a href="http://www.impressivewebs.com/css-vertical-align/">Understanding CSS’s vertical-align Property</a>”, автор <strong>Louis Lazaris</strong>]]></description>
		<wfw:commentRss>http://dreamhelg.ru/2011/12/css-vertical-align/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>CSS-Transitions без использования :hover</title>
		<link>http://dreamhelg.ru/2011/11/css-transitions-whithout-using-hover/</link>
		<comments>http://dreamhelg.ru/2011/11/css-transitions-whithout-using-hover/#comments</comments>
		<pubDate>Mon, 14 Nov 2011 13:08:23 +0000</pubDate>
		<dc:creator>dreamhelg</dc:creator>
				<category><![CDATA[верстка]]></category>
		<category><![CDATA[переводы]]></category>
		<category><![CDATA[css-transitions]]></category>
		<category><![CDATA[css3]]></category>

		<guid isPermaLink="false">http://dreamhelg.ru/2011/11/css-transitions-%d0%b1%d0%b5%d0%b7-%d0%b8%d1%81%d0%bf%d0%be%d0%bb%d1%8c%d0%b7%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d1%8f-hover/</guid>
		<description><![CDATA[<p><img width="200" height="200" src="http://dreamhelg.ru/wp-content/uploads/2011/11/css3-transitions-non-hover.jpg" class="attachment-200x200 wp-post-image" alt="css3-transitions-non-hover" title="css3-transitions-non-hover" /></p>До недавнего времени, наиболее распространенным вариантом использования <strong>CSS-transitions</strong> – было сочетание его с хорошо известным псевдо-классом CSS <strong>:hover</strong>.<span id="more-2192"></span>

Далее представлен наиболее простой пример изменения цвета ссылки, при наведении мыши, выполненный на чистом CSS:

[css]
a, a:link, a:visited {  
    color: lightblue;  
    -webkit-transition: color .4s linear;  
    -moz-transition: color .4s linear;  
    -o-transition: color .4s linear;  
    -ms-transition: color .4s linear;  
    transition: color .4s linear;  
}  
  
a:hover {  
    color: white;  
}  
[/css]

Этот код запустит анимацию свойства <strong>color</strong>, когда вы подведете мышь к ссылке. Наверняка этот простой пример не раз попадался вам на разных сайтах, но это не значит, что transitions ограничивается использованием псевдо-класса <strong>:hover</strong>.

С помощью <strong>transitions</strong>, вы можете анимировать различные CSS-свойства, используя определенные CSS-приемы. Некоторые из этих приемов, (включая демо-версию каждого) приведены в сегодняшней статье.
<h3>Transitions с использованием :active</h3>
Псевдо-класс <strong>:active</strong> <a href="http://reference.sitepoint.com/css/pseudoclass-active">применяется к любому элементу, находящемуся в процессе активации</a>. Основным способом “активации” элемента, является щелчок мышью или нажатие кнопки мыши.

Далее представлен CSS-пример, демонстрирующий использование <strong>:active</strong> совместно с CSS3-transitons, для имитации события <strong>mousedown</strong>:

[css]
.box {  
    width: 300px;  
    height: 300px;  
    background: #222;  
    -webkit-transition: width 2s ease, height 2s ease;  
    -moz-transition: width 2s ease, height 2s ease;  
    -o-transition: width 2s ease, height 2s ease;  
    -ms-transition: width 2s ease, height 2s ease;  
    transition: width 2s ease, height 2s ease;  
}  
  
.box:active {  
    width: 500px;  
    height: 500px;  
}  
[/css]

Подведите курсор мыши к блоку и нажмите кнопку, вы увидите как высота и ширина блока анимируются, становясь больше, пока вы держите кнопку нажатой. Стоит вам отпустить кнопку, и размеры блока плавно вернутся к исходному значению.

<a href="http://dreamhelg.ru/demo/transitions/">Пример</a>.
<h3>Transitions с использованием :focus</h3>
Вы можете использовать псевдо-класс <strong>:focus</strong>, для получения эффекта, описанного в предыдущем примере. В этот раз мы используем форму, и анимируем ширину любого элемента формы, получившего фокус:

[css]
input, textarea {  
    width: 280px;  
    -webkit-transition: width 1s ease;  
    -moz-transition: width 1s ease;  
    -o-transition: width 1s ease;  
    -ms-transition: width 1s ease;  
    transition: width 1s ease;  
}  
  
input:focus, textarea:focus {  
    width: 340px;  
}  
[/css]

<a href="http://dreamhelg.ru/demo/transitions/focus.html">Пример</a>.

<h3>Transitions с использованием :checked</h3>
Вы можете анимировать чекбоксы и радиобаттоны, когда они становятся отмеченными – хотя, тут есть некоторые ограничения, поскольку вы не можете изменить их родную стилизацию.

Поэтому, мы сделаем простое изменение ширины, которое будет появляться в качестве подтверждения отметки текущего элемента:

[css]
input {  
    height: 20px;  
    -webkit-transition: width 1s ease;  
    -moz-transition: width 1s ease;  
    -o-transition: width 1s ease;  
    -ms-transition: width 1s ease;  
    transition: width 1s ease;  
}  
  
input:checked {  
    width: 30px;  
}  
[/css]

<a href="http://dreamhelg.ru/demo/transitions/checked.html">Пример</a>.
<h3>Transitions с использованием :disabled</h3>
Продолжая тему стилизации веб-форм, в этот раз мы комбинируем css3-transitions с jQuery, для запуска анимации фонового цвета элементов формы, при их отключении через атрибут <strong>disabled</strong>:

[css]
input[type=&quot;text&quot;], textarea {  
    background: #e2e2e2;  
    -webkit-transition: background 1s ease;  
    -moz-transition: background 1s ease;  
    -o-transition: background 1s ease;  
    -ms-transition: background 1s ease;  
    transition: background 1s ease;  
}  
  
input:disabled, textarea:disabled {  
    background: #666666;  
}  
[/css]

И немного jQuery, чтобы удалять/добавлять атрибут <strong>disabled:</strong>

[javascript]
$(function() {  
    $('input[type=&quot;radio&quot;]').click(function() {  
        if ($(':checked').val() === &quot;other&quot;) {  
            $('input[type=&quot;text&quot;]').removeAttr(&quot;disabled&quot;);  
        } else {  
            $('input[type=&quot;text&quot;]').attr(&quot;disabled&quot;, &quot;disabled&quot;);  
        }  
    });  
});  
[/javascript]

Итак, если отмечен последний из радиобаттонов (тот, что со значением “Другое”), у текстового поля удаляется атрибут <strong>disabled</strong>, при отметке остальных радиобаттонов, атрибут <strong>disabled,</strong> заново применяется к текстовому полю.

Псевдо-класс <strong>:disabled </strong>применяется к элементу, имеющему одноименный атрибут, поэтому анимация будет срабатывать всякий раз при удалении или добавлении этого атрибута.

<a href="http://dreamhelg.ru/demo/transitions/disabled.html">Пример</a>.


<h3>Transitions с использованием Медиа-запросов</h3>
Последний пример, возможно, наименее полезный из всех, поскольку, давайте смотреть правде в глаза, единственные люди, изменяющие размер окна браузера, чтобы посмотреть что получится – это веб-разработчики.

Тем не менее, это еще один способ использования CSS3-transitions. Такой прием используется на сайте <a href="http://www.modernizr.com/">modernizr.com</a>.

[css]
.box {  
    width: 440px;  
    height: 440px;  
    background: #222;  
    margin: 0 auto;  
    -webkit-transition: width 2s ease, height 2s ease;  
    -moz-transition: width 2s ease, height 2s ease;  
    -o-transition: width 2s ease, height 2s ease;  
    -ms-transition: width 2s ease, height 2s ease;  
    transition: width 2s ease, height 2s ease;  
}  
  
@media only screen and (max-width : 960px) {  
    .box {  
        width: 300px;  
        height: 300px;  
    }  
} 
[/css]

Этот пример одновременно анимирует два свойства, разделенных запятой. Медиа-запрос велит блоку уменьшиться, если размер экрана становится меньше 961 пикселя.

Измените размер окна демонстрационной страницы, чтобы увидеть как это работает.

<a href="http://dreamhelg.ru/demo/transitions/media.html">Пример</a>.
<h3>Несколько замечаний относительно примеров кода</h3>
В каждом фрагменте кода, стандартное название css3-свойства включено последним, несмотря на то, что пока не один из известных мне браузеров не поддерживает его в этом виде.

Кроме того, добавлен префикс –ms, и хотя IE8 и IE9 не поддерживают transitions, но эта поддержка очевидно <a href="http://blogs.msdn.com/b/ie/archive/2011/04/12/native-html5-first-ie10-platform-preview-available-for-download.aspx">будет добавлена</a> в версии IE10.

А еще, примеры кода, которые вы видели в статье намеренно упрощены, в сравнении с теми, что используются на демо-страницах, для того чтобы сфокусироваться только на тех частях, которые мы обсуждали в статье.

Перевод статьи “<a href="http://www.impressivewebs.com/css3-transitions-without-hover/">CSS3 Transitions Without Using :hover</a>”, автор <strong>Louis Lazaris</strong>]]></description>
		<wfw:commentRss>http://dreamhelg.ru/2011/11/css-transitions-whithout-using-hover/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Кое-что интересное о CSS-свойстве border</title>
		<link>http://dreamhelg.ru/2011/04/something-interest-about-css-border/</link>
		<comments>http://dreamhelg.ru/2011/04/something-interest-about-css-border/#comments</comments>
		<pubDate>Wed, 06 Apr 2011 07:57:11 +0000</pubDate>
		<dc:creator>dreamhelg</dc:creator>
				<category><![CDATA[верстка]]></category>
		<category><![CDATA[переводы]]></category>
		<category><![CDATA[border]]></category>
		<category><![CDATA[css]]></category>

		<guid isPermaLink="false">http://dreamhelg.ru/?p=2146</guid>
		<description><![CDATA[<p><img width="200" height="200" src="http://dreamhelg.ru/wp-content/uploads/2011/04/borderproperty.jpg" class="attachment-200x200 wp-post-image" alt="borderproperty" title="borderproperty" /></p>Несмотря на годы веб-разработки и чтения тематических блогов и книг по CSS, я по-прежнему сталкиваюсь с неизвестными возможностями давно знакомых CSS-свойств.<span id="more-2146"></span>

Возможно это моя вина, я человек привычки, и никогда не рассматирваю подробно вещи, которые мне давно знакомы.

Так, во время чтения книги <a href="https://shop.smashingmagazine.com/smashing-book-2-intl.html">Smashing Book 2</a>, в главе Кристиана Хейлмана был приведен пример следующего CSS-кода:

[css]
#pagetitle {  
    border-color: black white white black;  
}  
[/css]

Первое, о чем я подумал: «Это какая-то ошибка. С каких пор свойство border-color позволяет в сокращенной форме указывать цвет для каждой границы блока?». А затем, я вспомнил, что за 10 лет разработки, я использовал это свойство один или два раза, следовательно, что я могу о нем знать? Плюс, я думаю что Кристиан, как опытный разработчик, знает о чем говорит.

Фактически, каждый раз, когда мне нужно было указать цвет границы, я использовал сокращенную версию свойства <strong>border</strong>, вот так:

[css]
#pagetitle {  
    border: solid 1px black;  
}  
[/css]

Редко когда мне действительно приходится использовать свойства типа: <strong>border-color</strong>, <strong>border-style</strong>, <strong>border-left-style</strong> или любые другие версии этих длинных свойств. В 99% случаев, свойство <strong>border</strong> реализует все, что мне требуется.

В CSS-справочнике на sitepoint.com <a href="http://reference.sitepoint.com/css/border-color">сказано</a>:
<blockquote>Сокращенная запись свойства border-color, устанавливает цвет границы для всех четырех сторон элемента, используя от одного до четырех, указанных значений. Каждая граница может иметь собственное значение.</blockquote>
Следовательно, точно так же как для свойств <strong>margin</strong> и <strong>padding</strong>, цвет для каждой границы задается в следующем порядке: верхняя граница, правая граница, нижняя граница, левая граница (по часовой стрелке, начиная сверху).
<h3>Стиль и ширина границы</h3>
Это правило работает также для свойств <strong>border-style</strong> и <strong>border-width</strong>, так что вы можете указать разную толщину и стиль границы для каждой из сторон элемента.

Ну и конечно, вы можете сокращать свойства, при необходимости:

[css]
#pagetitle {  
    border-width: 2px 1px;  
    border-style: solid dashed;  
}  
[/css]


Снова, также как у <strong>margin</strong> и <strong>padding</strong>, мы указываем только первые два значения, а остальные просто наследуются от первых.
<h3>Запомните</h3>
Нельзя использовать эту технику мульти-объявления для сокращенного CSS-свойства <strong>border</strong> (несмотря на то, что это кажется вполне логичным). Оно применяется только к трем, указанным выше, свойствам, так что следующий код будет неправильным:

[css]
#pagetitle {  
    /* THIS IS INVALID! */  
    border: solid dashed 1px 2px black white white black;  
}  
[/css]

Еще, такой метод не получится применить к свойствам <strong>outline-width</strong>, <strong>outline-style</strong> и <strong>outline-color</strong>.

Перевод статьи «<a href="http://www.impressivewebs.com/interesting-css-border/">Here’s Something Interesting About CSS Borders</a>», автор<strong> Louis Lazaris</strong>]]></description>
		<wfw:commentRss>http://dreamhelg.ru/2011/04/something-interest-about-css-border/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Изучаем CSS-позиционирование за 10 шагов</title>
		<link>http://dreamhelg.ru/2011/02/css-position-in-10-steps/</link>
		<comments>http://dreamhelg.ru/2011/02/css-position-in-10-steps/#comments</comments>
		<pubDate>Wed, 16 Feb 2011 13:56:56 +0000</pubDate>
		<dc:creator>dreamhelg</dc:creator>
				<category><![CDATA[верстка]]></category>
		<category><![CDATA[переводы]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[позиционирование]]></category>

		<guid isPermaLink="false">http://dreamhelg.ru/?p=2114</guid>
		<description><![CDATA[Позиционирование &#8212; одно из ключевых понятий в блочной верстке. Разобравшись с ним, вам многое станет понятно, а верстка из шаманства превратится в осмысленный процесс. Итак, речь в статье пойдет о [...]]]></description>
		<wfw:commentRss>http://dreamhelg.ru/2011/02/css-position-in-10-steps/feed/</wfw:commentRss>
		<slash:comments>24</slash:comments>
		</item>
		<item>
		<title>23 полезных CSS-приема для разработчика</title>
		<link>http://dreamhelg.ru/2010/08/25-useful-css-snippets-for-developer/</link>
		<comments>http://dreamhelg.ru/2010/08/25-useful-css-snippets-for-developer/#comments</comments>
		<pubDate>Thu, 12 Aug 2010 04:00:52 +0000</pubDate>
		<dc:creator>dreamhelg</dc:creator>
				<category><![CDATA[верстка]]></category>
		<category><![CDATA[переводы]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[css3]]></category>

		<guid isPermaLink="false">http://dreamhelg.ru/?p=2089</guid>
		<description><![CDATA[<p><img width="200" height="200" src="http://dreamhelg.ru/wp-content/uploads/2010/08/home.png" class="attachment-200x200 wp-post-image" alt="home" title="home" /></p>CSS, без сомнения, является одним из самых важных языков разметки, которые мы используем. И хотя HTML описывает структуру документа, ее поведение может быть непредсказуемым, в зависимости от версии браузера. CSS – это тот инструмент, который позволит нам исправить все несоответствия в отображении страницы, а также оформить ее внешний вид.<span id="more-2089"></span>

Далее приведен список из двадцати трех различных CSS-приемов, которые будут полезны как начинающим, так и опытным разработчикам.

<h3>Прячем текст с помощью абзаца</h3>
Такой прием будет весьма полезен для логотипа компании. Чаще всего, в качестве логотипа используется картинка, однако для SEO, было бы неплохо отобразить название компании в тегах <strong>h1</strong>. Данный пример – самый лучший способ это реализовать. Фактически, мы просто скрываем текст за пределами экрана, и вместо этого назначаем фоновую картинку.

[css]
h1 {
	text-indent:-9999px;
	margin:0 auto;
	width:400px;
	height:100px;
	background:transparent url(&quot;images/logo.jpg&quot;) no-repeat scroll;
}
[/css]

<h3>Стилизация ссылок в зависимости от формата файла</h3>
Этот пример направлен на улучшение пользовательского интерфейса. Зачастую в интернете, мы переходим по ссылкам, абсолютно не зная куда они ведут. Следующий фрагмент кода используется для отображения небольших иконок рядом со ссылками. Такие картинки будут подсказывать пользователю, что это внешняя ссылка, электронный адрес, pdf-файл, картинка и т.д.

[css]
/* внешняя ссылка */
a[href^=&quot;http://&quot;]{
	padding-right: 20px;
	background: url(external.gif) no-repeat center right;
}

/* электронная почта */
a[href^=&quot;mailto:&quot;]{
	padding-right: 20px;
	background: url(email.png) no-repeat center right;
}

/* pdfs */
a[href$=&quot;.pdf&quot;]{
	padding-right: 20px;
	background: url(pdf.png) no-repeat center right;
}
[/css]


<h3>Удаляем полосы прокрутки многострочного поля в IE</h3>
Internet Explorer имеет раздражающую привычку добавлять полосы прокрутки в многострочное поле, даже когда его содержимое не превышает заданный размер. Этот недостаток легко исправляется следующей строчкой кода:

[css]
textarea{
	overflow:auto;
}
[/css]

<h3>Буквица</h3>
На сегодняшний день очень распространенное явление в блогах и новостных сайтах. Вы удивитесь, насколько просто она реализовывается, а также прекрасно деградирует в старых браузерах.

[css]
p:first-letter{
	display:block;
	margin:5px 0 0 5px;
	float:left;
	color:#FF3366;
	font-size:60px;
	font-family:Georgia;
}
[/css]


<h3>CSS-прозрачность</h3>
Прозрачность – это свойство, которое разным браузерам, назначается по-разному. С помощью следующего фрагмента кода, вы сможете назначить прозрачность всем браузерам сразу.

[css]
.transparent {
	filter:alpha(opacity=50);
	-moz-opacity:0.5;
	-khtml-opacity: 0.5;
	opacity: 0.5;
}
[/css]

<h3>CSS Reset от Эрика Мейера</h3>
Фактически, <strong>css-reset</strong>, предложенный Эриком Мейером, уже стал повсеместным стандартом использования. Поскольку он был адаптирован многими известными разработчиками, вы можете не сомневаться в его качестве.

[css]
html, body, div, span, applet, object, iframe,
h1, h2, h3, h4, h5, h6, p, blockquote, pre,
a, abbr, acronym, address, big, cite, code,
del, dfn, em, font, img, ins, kbd, q, s, samp,
small, strike, strong, sub, sup, tt, var,
b, u, i, center,
dl, dt, dd, ol, ul, li,
fieldset, form, label, legend,
table, caption, tbody, tfoot, thead, tr, th, td {
	margin: 0;
	padding: 0;
	border: 0;
	outline: 0;
	font-size: 100%;
	vertical-align: baseline;
	background: transparent;
}

body {
	line-height: 1;
}

ol, ul {
	list-style: none;
}

blockquote, q {
	quotes: none;
}

blockquote:before, blockquote:after,
q:before, q:after {
	content: '';
	content: none;
}

/* remember to define focus styles! */
:focus {
	outline: 0;
}

/* remember to highlight inserts somehow! */
ins {
	text-decoration: none;
}

del {
	text-decoration: line-through;
}

/* tables still need 'cellspacing=&quot;0&quot;' in the markup */
table {
	border-collapse: collapse;
	border-spacing: 0;
}
[/css]

<h3>Предзагрузчик картинок</h3>
Иногда бывает полезно предварительно загрузить ваши картинки, с тем чтобы исключить задержку и мерцание при доступе к нужному элементу.

[css]
div.loader{
	background:url(images/hover.gif) no-repeat;
	background:url(images/hover2.gif) no-repeat;
	background:url(images/hover3.gif) no-repeat;
	margin-left:-10000px;
}
[/css]

<h3>Простой css-спрайт для кнопки</h3>
Наличие кнопки или ссылки с фоновым изображением – обычное дело, кроме того, к таким элементам часто применяются дополнительные эффекты, улучшающие пользовательский интерфейс. Один из таких эффектов – индикатор наведения курсора мыши на кнопку. С помощью спрайта, мы можем реализовать такой эффект путем изменения свойства <strong>background-positon</strong>, на заданное значение, с тем, чтобы отобразить фоновую картинку при наведении мыши на кнопку. Простое, но эффективное решение.

[css]
a {
display: block;
background: url(sprite.png) no-repeat;
height: 30px;
width: 250px;
}

a:hover {
	background-position: 0 -30px;
}
[/css]


<h3>Google Font API</h3>
Не так давно, Google реализовал замечательный ресурс для веб-разработчиков, позволяющий загружать и использовать на странице новые, нестандартные шрифты. К загрузке доступны даже различные варианты шрифтов, жирный, курсив и т.д. Несмотря на то, что коллекция Google пока ограничена, в наличии достаточно большое количество шрифтов. Сначала подключите динамически составленный CSS-файл с названием шрифтов и необходимых вам вариантов, а затем просто используйте названия шрифтов в CSS, в обычном режиме. Дополнительную информацию по Google Font API можно прочитать <a href="http://code.google.com/apis/webfonts/">здесь</a>.

[css]
&lt;head&gt;
	Inconsolata:italic|Droid+Sans&quot;&gt;
&lt;/head&gt;
[/css]

[css]
body {
	font-family: 'Tangerine', 'Inconsolata', 'Droid Sans', serif; font-size: 48px;
}
[/css]

<h3>Хаки для различных браузеров</h3>
Иногда бывает полезно исправить баг у конкретного браузера, и условные комментарии не всегда являются лучшим решением для этого. Этот список браузерных хаков от Криса Койера, поможет вам назначить нужные свойства для определенных браузеров, посредством простого css.

[css]
/* IE 6 */
* html .yourclass { }

/* IE 7 */
*+html .yourclass{ }

/* IE 7 and modern browsers */
html&gt;body .yourclass { }

/* Modern browsers (not IE 7) */
html&gt;/**/body .yourclass { }

/* Opera 9.27 and below */
html:first-child .yourclass { }

/* Safari */
html[xmlns*=&quot;&quot;] body:last-child .yourclass { }

/* Safari 3+, Chrome 1+, Opera 9+, Fx 3.5+ */
body:nth-of-type(1) .yourclass { }

/* Safari 3+, Chrome 1+, Opera 9+, Fx 3.5+ */
body:first-of-type .yourclass {  }

/* Safari 3+, Chrome 1+ */
@media screen and (-webkit-min-device-pixel-ratio:0) {
 .yourclass  {  }
}
[/css]

<h3>Фиксированный подвал</h3>
Возможно, вы подумаете, что создать подвал, всегда приклеенный к низу экрана, это сложная задача. Однако, это совсем не сложно, если вам нужен простой подвал. Здесь нам придется использовать небольшой хак для IE6, но в остальном, это очень легко.

[css]
#footer {
	position:fixed;
	left:0px;
	bottom:0px;
	height:30px;
	width:100%;
	background:#999;
}

/* IE 6 */
* html #footer {
	position:absolute;
	top:expression((0-(footer.offsetHeight)+(document.documentElement.clientHeight ? document.documentElement.clientHeight : document.body.clientHeight)+(ignoreMe = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop))+'px');
}
[/css]

<h3>Поворот изображения</h3>
Вращение картинки может оказаться весьма полезным, особенно если его можно использовать вместо загрузки новой, предварительно развернутой картинки. Предположим, вы хотите использовать только одну картинку для стрелки, но у вас на странице их несколько, причем развернутых в разные направления. Вот решение вашей проблемы:

[css]
img.flip {
	-moz-transform: scaleX(-1);
	-o-transform: scaleX(-1);
	-webkit-transform: scaleX(-1);
	transform: scaleX(-1);
	filter: FlipH;
	-ms-filter: &quot;FlipH&quot;;
}
[/css]

<h3>Clearfix</h3>
Не так давно, кто-то решил, что пришло время очищать поток от флоатов, не добавляя дополнительной разметки к документу. В результате этого решения, был создан класс, который можно применять к контейнеру, содержащему плавающие элементы, для их очистки. Это очень удобный, и широко распространенный способ на сегодняшний день.

[css]
.clearfix:after {
	visibility: hidden;
	display: block;
	font-size: 0;
	content: &quot; &quot;;
	clear: both;
	height: 0;
}

.clearfix { display: inline-block; }

/* start commented backslash hack */
* html .clearfix { height: 1%; }
.clearfix { display: block; }
/* close commented backslash hack */
[/css]

<h3>Закругленные углы</h3>
С постепенным внедрением CSS3 в современных браузерах, создавать закругленные углы стало очень просто. К сожалению, пока нет поддержки CSS3 в IE, включая восьмую версию, но она будет добавлена в IE9.

[css]
.round{
	-moz-border-radius: 10px;
	-webkit-border-radius: 10px;
	border-radius: 10px; /* future proofing */
	-khtml-border-radius: 10px; /* for old Konqueror browsers */
}
[/css]

<h3>Переопределение стилей</h3>
Меня продолжают удивлять люди, незнающие об <strong>!important</strong> в CSS, поскольку это очень мощный и удобный в использовании инструмент. Очень просто, любое правило с <strong>!important</strong> на конце, будет переопределять такое же правило, примененное к этому элементу, в любом месте CSS-файла или в линейных стилях.

[css]
p{
	font-size:20px !important;
}
[/css]

<h3>Font face</h3>
Font-face не использовался широко до прошлого года, хотя он известен еще с тех времен, когда IE6 считался современным браузером. Сейчас это свойство неплохо поддерживается современными браузерами и предлагает отличный способ использования небезопасных шрифтов в своих проектах. Чтобы сэкономить время, можно воспользоваться специальным генератором <a href="http://www.fontsquirrel.com/fontface/generator">Font Squirrel Font Face</a>.

[css]
@font-face {
	font-family: 'Graublau Web';
	src: url('GraublauWeb.eot');
	src: local('☺'),
		url('GraublauWeb.woff') format('woff'), url('GraublauWeb.ttf') format('truetype');
}
[/css]

<h3>Центрирование сайта</h3>
Распространенный дизайнерский прием – горизонтальное центрирование сайта. Это реализуется очень просто.

[css]
.wrapper {
	width:960px;
	margin:0 auto;
}
[/css]

<h3>Min-height в IE</h3>
Этот пример исправляет простой, но досадный баг в IE, при установке минимальной высоты. Вообще, IE интерпретирует высоту в качестве минимальной высоты, так что, если в IE значение высоты не установлено в auto, следующий прием исправит этот баг.

[css]
.box {
	min-height:500px;
	height:auto !important;
	height:500px;
}
[/css]

<h3>Загрузка картинки</h3>
Этот эффект загрузки изображения, имитирует ajax-загрузку, отображая прелоудер, пока весь контент не будет загружен. Такое решение отлично подойдет для больших, медленно загружающихся картинок.

[css]
img {
	background: url(loader.gif) no−repeat 50% 50%;
}
[/css]

<h3>Вертикальное центрирование</h3>
Это небольшой фрагмент кода, позволит вам вертикально центрировать содержимое контейнера, без использования дополнительной разметки. Вам понадобится просто отобразить контейнер в качестве ячейки таблицы, а затем задать значение атрибуту <strong>vertical-align</strong>.

[css]
.container {
	min-height: 10em;
	display: table-cell;
	vertical-align: middle;
}
[/css]

<h3>Создаем врезы</h3>
Для начала, давайте разберемся, что же такое врез? Врезы обычно встречаются на новостных ресурсах и сайтах-журналах, в виде небольшого блока текста, расположенного внутри статьи, иногда в них размещаются мнения людей или цитаты. Вы будете рады узнать, что их очень легко сделать, и при правильном использовании, врезы могут значительно улучшить восприятие статьи пользователем.

[css]
.pullquote {
	width: 300px;
	float: right;
	margin: 5px;
	font-family: Georgia, &quot;Times New Roman&quot;, Times, serif;
	font: italic bold #ff0000 ;
}
[/css]

<h3>Выделение текста</h3>
Не все знают о том, что существует возможность изменить цвет выделенного в браузере текста. Для этого потребуется всего два селектора.

[css]
::selection {
color: #000000;
background-color: #FF0000;
}
::-moz-selection {
color: #000000;
background: #FF0000;
}
[/css]

<h3>Добавляем разрыв страницы</h3>
Этот пример, снова направлен на улучшения пользовательского интерфейса, при выводе на печать. Например, при печати статьи, возможно будет полезно отделить комментарии от текста статьи, и перенести их на отдельную страницу. Если добавить класс .page-break к блоку комментариев, то все комментарии, при печати, будут выведены на отдельной странице. И вообще, этот класс можно использовать в любом месте вашего сайта.

[css]
.page-break{
	page-break-before:always;
}
[/css]

Перевод статьи “<a href="http://www.1stwebdesigner.com/development/useful-css-snippets/?utm_source=feedburner&amp;utm_medium=feed&amp;utm_campaign=Feed%3A+1stwebdesigner+%281stwebdesigner%29">25 Incredibly Useful CSS Snippets for Developers</a>”, автор <strong>Matthew Corner</strong>]]></description>
		<wfw:commentRss>http://dreamhelg.ru/2010/08/25-useful-css-snippets-for-developer/feed/</wfw:commentRss>
		<slash:comments>39</slash:comments>
		</item>
		<item>
		<title>Обзор CSS-свойства white-space</title>
		<link>http://dreamhelg.ru/2010/06/css-white-space/</link>
		<comments>http://dreamhelg.ru/2010/06/css-white-space/#comments</comments>
		<pubDate>Mon, 21 Jun 2010 10:00:31 +0000</pubDate>
		<dc:creator>dreamhelg</dc:creator>
				<category><![CDATA[верстка]]></category>
		<category><![CDATA[переводы]]></category>
		<category><![CDATA[css]]></category>

		<guid isPermaLink="false">http://dreamhelg.ru/?p=2067</guid>
		<description><![CDATA[<p><img width="200" height="200" src="http://dreamhelg.ru/wp-content/uploads/2010/06/home1.png" class="attachment-200x200 wp-post-image" alt="home" title="home" /></p>Немногие, начинающие CSS-кодеры знакомы с таким полезным свойством как <strong>white-space</strong>. Вы вполне можете обходиться без этого свойства долгое время, но однажды, узнав о нем, вы найдете его очень удобным, и будете возвращаться к нему снова и снова.В сегодняшней статье, мы рассмотрим возможные значения свойства <strong>white-space</strong>, а также способы их применения.<span id="more-2067"></span>
<br/>
<h3>Небольшое HTML-введение</h3>
При вставке текста в (X)HTML, независимо от того, сколько пробелов вы поставите между словами, при выводе страницы в окне браузера, все эти пробелы, по умолчанию, будут сокращены до одного. Это довольно удобно, поскольку мы легко можем форматировать текст в коде, с тем чтобы улучшить его читаемость, при этом, не создавая дополнительных пробелов и ненужных разрывов строк.

Однако, если же вы хотите отобразить все пробелы и переносы строк – вам поможет тэг <strong>&lt;pre&gt;</strong>. Весь текст внутри тэгов <strong>&lt;pre&gt;</strong> (если он не заключен в дополнительные тэги), будет выведен точно также, как он отформатирован в коде. При этом, даже если в разметке нет ни одного разрыва строки, тэг <strong>&lt;pre&gt;</strong> все равно добавит одну строчку, для создания дополнительно отступа. Следовательно, вы можете использовать вышеуказанный тэг для переопределения дефолтного подведения HTML.

Кроме того, в (X)HTML есть возможность использовать неразрывный пробел (<strong>&amp;nbsp;</strong>), который используется для создания множественных пробелов. Ранее, для этих целей использовался, устаревший на сегодняшний день, тэг <strong>&lt;nobr&gt;</strong>.

Свойство <strong>white-space</strong> – это CSS-аналог всех вышеперечисленных (X)HTML-методов управления пробелами.
<h3>Описание и возможные значения</h3>
С помощью набора возможных значений, свойство white-space, позволяет нам управлять поведением браузера, при обработке множественных пробелов.

Далее представлен список различных значений свойства white-space, вместе с визуальной демонстрацией их действия.
<h4>Значение: normal</h4>
Это дефолтное значение, при котором текст отображается обычным способом. Значение <strong>normal</strong> следует использовать только в одном, единственном случае – если вы уже назначили тексту другой способ обработки, и теперь хотите переопределить его для какого-то фрагмента.

<a href="http://dreamhelg.ru/wp-content/uploads/2010/06/ws-normal.jpg"><img class="aligncenter size-full wp-image-2070" title="ws-normal" src="http://dreamhelg.ru/wp-content/uploads/2010/06/ws-normal.jpg" alt="" width="550" height="349" /></a>

<strong>Значение: nowrap</strong>

Это наиболее распространенное значение свойства <strong>white-space</strong>, поскольку оно полностью идентично значению <strong>normal</strong>, за исключением одной особенности. Значение <strong>nowrap</strong> полностью игнорирует переносы строк, независимо от того, были ли они проставлены в коде, или же появились при обработке текста, за счет ограниченного контейнера.

Элемент, которому назначено свойство white-space: nowrap, вместо того, чтобы переносить текст или другие строчные элементы на новую строку, расширит границы родительского блока, до тех пор, пока содержимое не уместится в одну строку. В дополнение, множественные пробелы будут сокращены до одного, также как при значение <strong>normal</strong>.

<a href="http://dreamhelg.ru/wp-content/uploads/2010/06/ws-nowrap.jpg"><img class="aligncenter size-full wp-image-2071" title="ws-nowrap" src="http://dreamhelg.ru/wp-content/uploads/2010/06/ws-nowrap.jpg" alt="" width="550" height="327" /></a>
<h4>Значение: pre</h4>
Значение <strong>pre</strong>, полностью соответствует вашим ожиданиям –  вы получаете ровно то форматирование, которое видите в коде. Учитываются все пробелы и переносы строк, как если бы текст был заключен в тэги &lt;pre&gt;. Кроме того, если в коде, вы разместили текст без переносов, то границы родительского контейнера будут расширены, для размещения текста в одну строку.

<a href="http://dreamhelg.ru/wp-content/uploads/2010/06/ws-pre.jpg"><img class="aligncenter size-full wp-image-2072" title="ws-pre" src="http://dreamhelg.ru/wp-content/uploads/2010/06/ws-pre.jpg" alt="" width="550" height="375" /></a>
<h4>Значение: pre-line</h4>
Это значение работает точно также как дефолтное значение <strong>normal</strong>, за исключением одной детали: при обработке будут учитываться переносы строк. Так что, множественные пробелы будут как обычно проигнорированы, но если в вашей разметке есть переносы строк, то все они появятся при выводе в браузере.

Поддержка этого свойства браузерами, оставляет желать лучшего, а именно:
<ul>
	<li>Internet Explorer – начиная с версии 7</li>
	<li>Firefox – начиная с версии 3.0</li>
	<li>Opera  - начиная с версии 9.2</li>
</ul>
<a href="http://dreamhelg.ru/wp-content/uploads/2010/06/ws-preline.jpg"><img class="aligncenter size-full wp-image-2073" title="ws-preline" src="http://dreamhelg.ru/wp-content/uploads/2010/06/ws-preline.jpg" alt="" width="550" height="349" /></a>
<h4>Значение: pre-wrap</h4>
Это значение практически тоже самое что и <strong>pre</strong>, за исключением того, что текст выводится в границах своего родительского элемента. Следовательно, текст не будет вытягиваться в одну строку для имитации форматирования в коде, но множественные пробелы и переносы строк будут учтены.

Поддержка браузерами:
<ul>
	<li>Internet Explorer – начиная с версии 7</li>
	<li>Firefox -  начиная с версии 3.0</li>
</ul>
<a href="http://dreamhelg.ru/wp-content/uploads/2010/06/ws-prewrap.jpg"><img class="aligncenter size-full wp-image-2074" title="ws-prewrap" src="http://dreamhelg.ru/wp-content/uploads/2010/06/ws-prewrap.jpg" alt="" width="550" height="375" /></a>
<h3>Примеры использования</h3>
Наиболее часто, свойство <strong>white-space</strong>, используется для устранения нежелательных переносов строки. Взгляните на картинку:

<a href="http://dreamhelg.ru/wp-content/uploads/2010/06/zabox.jpg"><img class="aligncenter size-full wp-image-2068" title="zabox" src="http://dreamhelg.ru/wp-content/uploads/2010/06/zabox.jpg" alt="" width="550" height="226" /></a>

В состав ссылки “read more” входит символ <strong>&amp;raquo;</strong> (кавычка), перенесенный на другую строку в связи с нехваткой свободного пространства. Эту ситуацию легко можно исправить, применив свойство <strong>white-space</strong> в значении <strong>nowrap</strong>. Благодаря этому, ссылка будет целиком перенесена на новую строку как единый объект.

Этот пример еще раз иллюстрирует тот факт, что свойство <strong>white-space</strong> действует только на содержимое элемента, к которому оно применяется. Поэтому, несмотря на то, что ссылка была перенесена на другую строку, текст <strong>внутри</strong> ссылки не был разделен переносом строки.
<h3>Заключение</h3>
Чтобы исключить возможное появление проблем, при использовании свойства <strong>white-space</strong>, следует помнить главное: область его действия распространяется только на строчные элементы контейнера, <strong>к которому применяется свойство</strong>.

Как уже упоминалось выше, наиболее полезным из всех возможных значений свойства <strong>white-space</strong> – является значение <strong>nowrap</strong>. В связи с отсутствием в Internet Explorer полной поддержки значений <strong>pre-line</strong> и <strong>pre-wrap</strong>, они используются не так часто, хотя тоже могут принести немало пользы, если получат более широкую поддержку.

Перевод статьи “<a href="http://www.impressivewebs.com/css-white-space/">The CSS white-space Property Explained</a>”, автор <strong>Louis Lazaris</strong>]]></description>
		<wfw:commentRss>http://dreamhelg.ru/2010/06/css-white-space/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Анимированный ландшафт с помощью CSS и JQuery</title>
		<link>http://dreamhelg.ru/2010/06/animated-landscape-using-css-and-jquery/</link>
		<comments>http://dreamhelg.ru/2010/06/animated-landscape-using-css-and-jquery/#comments</comments>
		<pubDate>Tue, 01 Jun 2010 14:00:31 +0000</pubDate>
		<dc:creator>dreamhelg</dc:creator>
				<category><![CDATA[верстка]]></category>
		<category><![CDATA[переводы]]></category>
		<category><![CDATA[animate]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[jquery]]></category>

		<guid isPermaLink="false">http://dreamhelg.ru/?p=2028</guid>
		<description><![CDATA[<p><img width="200" height="200" src="http://dreamhelg.ru/wp-content/uploads/2010/05/home.png" class="attachment-200x200 wp-post-image" alt="home" title="home" /></p>С появлением JQuery, многие разработчики, не слишком хорошо знакомые с javascript, начали использовать jQuery, благодаря большому количеству различных эффектов, поддерживаемых этим фреймворком. На сегодняшний день, JQuery является одним из самых популярных ява-скрипт-фреймворков. Такая его популярность объясняется простотой использования и наличием множества замечательных эффектов, для применения которых, не требуется углубленных знаний ява-скрипт. В сегодняшней статье, мы создадим анимированную картинку, с помощью CSS и JQuery.<span id="more-2028"></span>

<h3>Шаг 1. Подготовка файлов</h3>
Для начала, нам необходимо подготовить все файлы, необходимые для этого примера, затем создать один HTML-файл, один CSS-файл и папку, которая будет содержать все наши картинки.

Прежде, чем мы начнем, посмотрите <a href="http://acrisdesign.com/demo/landscape/">демо</a>.

<h3>Шаг 2. HTML-страница</h3>
Теперь, создадим HTML-разметку, которая будет содержать контейнер с фиксированной высотой и шириной, а внутри него будет еще один блок, содержащий все элементы нашей страницы. В результате, у нас получилась вот такая разметка:

[html]
&lt;div id=&quot;wrapper&quot;&gt;
&lt;div id=&quot;inner&quot;&gt;
    &lt;div id=&quot;cloudone&quot;&gt;&lt;img src=&quot;images/clud1.png&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;
    &lt;div id=&quot;cloudtwo&quot;&gt;&lt;img src=&quot;images/clud2.png&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;
    &lt;div id=&quot;cloudthree&quot;&gt;&lt;img src=&quot;images/clud1.png&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;
    &lt;div id=&quot;boat&quot;&gt;&lt;img src=&quot;images/boat.png&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
[/html]

Полная версия:

[html]
&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;&gt;
&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot;&gt;
&lt;head&gt;
&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=utf-8&quot; /&gt;
&lt;title&gt;Animated Landscape Using CSS and jQuery&lt;/title&gt;
&lt;link href=&quot;style.css&quot; rel=&quot;stylesheet&quot; type=&quot;text/css&quot; /&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;div id=&quot;wrapper&quot;&gt;
&lt;div id=&quot;inner&quot;&gt;
    &lt;div id=&quot;cloudone&quot;&gt;&lt;img src=&quot;images/clud1.png&quot;&gt;&lt;/div&gt;
    &lt;div id=&quot;cloudtwo&quot;&gt;&lt;img src=&quot;images/clud2.png&quot;&gt;&lt;/div&gt;
    &lt;div id=&quot;cloudthree&quot;&gt;&lt;img src=&quot;images/clud1.png&quot;&gt;&lt;/div&gt;
    &lt;div id=&quot;boat&quot;&gt;&lt;img src=&quot;images/boat.png&quot;&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;
[/html]

<h3>Шаг 2. CSS-стили</h3>
Далее добавим немного CSS-стилей, без которых просто нельзя обойтись. Здесь следует обратить внимание на два момента – это свойство overflow: hidden, которое обязательно должно быть установлено для блока #inner, и абсолютное позиционирование, для всех, двигающихся картинок. На данном этапе, мы вынесем наши движущиеся изображения (облака и лодку) за пределы контейнера, путем установки отрицательных полей, с тем чтобы в дальнейшем, с помощью JQuery, получить красивый эффект. Далее CSS-код, необходимый для нашего примера:

[css]
#wrapper {
	width:800px;
	height:600px;
       /* main background image with sky, sun, river and ground */
	background-image:url(images/Untitled-3.jpg);
	background-repeat:no-repeat;
	margin-top:10px;
	margin-left:auto;
	margin-right:auto;
	border: 10px solid #666;
}
#inner {
	position:relative;
	overflow:hidden;
	width:800px;
	height:600px;
	margin:0px;
}
#cloudone {
	position:absolute;
	margin-top:2px;
	margin-left:-200px;
	filter:alpha(opacity=80);
  /* CSS3 standard */
        opacity:0.8;
}
#cloudtwo {
	position:absolute;
	margin-top:80px;
	margin-left:-300px;
	filter:alpha(opacity=60);
  /* CSS3 standard */
        opacity:0.6;
}
#cloudthree {
	position:absolute;
	margin-top:60px;
	margin-left:-600px;
	filter:alpha(opacity=70);
  /* CSS3 standard */
        opacity:0.7;
}
#boat {
	margin-top:360px;
	position:absolute;
	margin-left:800px;
}
[/css]

<h3>Шаг 4. jQuery</h3>
Прежде всего, нам необходимо подключить jQuery, к нашей странице:

[html]
&lt;script src=&quot;http://ajax.googleapis.com/ajax/libs/jquery/1.4.1/jquery.min.js&quot; type=&quot;text/javascript&quot;&gt;
&lt;/script&gt;
&lt;script src=&quot;landscape.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
[/html]


Здесь, мы дважды будем использовать функцию <strong>.animate</strong>, для анимирования облаков и лодки. Кроме того, мы создадим специальную функцию для того, чтобы облака и лодка двигались по кругу. Смотрите пример ниже.

[javascript]
function cloudone(){
    $(&quot;#cloudone&quot;).animate({left:&quot;+=1200px&quot;},10000).animate({left:&quot;-200px&quot;}, 0)
    setTimeout(&quot;cloudone()&quot;,10000);
}
[/javascript]

В приведенном коде происходит следующее: с помощью первой функции <strong>.animate</strong>, мы двигаем объект #cloudone вправо, на 1200 пикселей, причем объект будет двигаться со скользящим эффектом, в течении 10 секунд. Далее, вторая функция <strong>.animate</strong> возвращает объект на исходную позицию, с интервалом 0 секунд. Для того, чтобы снова запустить анимацию, нам необходимо суммировать временные интервалы обоих функций <strong>.animate</strong>, и с помощью функции <strong>setTimeout</strong>, мы сможем снова запустить цикл вращения картинки. Таким образом, можно анимировать все картинки. Далее приведен код, для анимации остальных изображений:

[javascript]
function cloudone(){
   $(&quot;#cloudone&quot;).animate({left:&quot;+=1200px&quot;},10000).animate({left:&quot;-200px&quot;}, 0)
   setTimeout(&quot;cloudone()&quot;,10000);
}
function cloudtwo(){
   $(&quot;#cloudtwo&quot;).animate({left:&quot;+=1500px&quot;},15000).animate({left:&quot;-300px&quot;}, 0)
   setTimeout(&quot;cloudtwo()&quot;,15000);
}
function cloudthree(){
   $(&quot;#cloudthree&quot;).animate({left:&quot;+=2000px&quot;},20000).animate({left:&quot;-600px&quot;}, 0)
   setTimeout(&quot;cloudthree()&quot;,20000);
}
function boat(){
   //This time we need to move boat to left side so we put the margin to 1000px
   $(&quot;#boat&quot;).animate({right:&quot;+=1000px&quot;},20000).animate({right:&quot;-200px&quot;}, 0)
   setTimeout(&quot;boat()&quot;,20000);
}
[/javascript]

Теперь, нам нужно запустить всю нашу анимацию (cloudone(), cloudtwo(), cloudthree), сразу после того, как загрузится страница. Это делается следующим образом:

[javascript]
$(document).ready(function() {
	setTimeout(&quot;cloudone()&quot;,10);
	setTimeout(&quot;cloudtwo()&quot;,10);
	setTimeout(&quot;cloudthree()&quot;,10);
	setTimeout(&quot;boat()&quot;,10);
});
[/javascript]

Весь код, будет выглядеть вот так.

[javascript]
$(document).ready(function() {
	setTimeout(&quot;cloudone()&quot;,10);
	setTimeout(&quot;cloudtwo()&quot;,10);
	setTimeout(&quot;cloudthree()&quot;,10);
	setTimeout(&quot;boat()&quot;,10);
});
function cloudone(){
	$(&quot;#cloudone&quot;).animate({left:&quot;+=1200px&quot;},10000).animate({left:&quot;-200px&quot;}, 0)
	setTimeout(&quot;cloudone()&quot;,10000);
}
function cloudtwo(){
	$(&quot;#cloudtwo&quot;).animate({left:&quot;+=1500px&quot;},15000).animate({left:&quot;-300px&quot;}, 0)
	setTimeout(&quot;cloudtwo()&quot;,15000);
}
function cloudthree(){
	$(&quot;#cloudthree&quot;).animate({left:&quot;+=2000px&quot;},20000).animate({left:&quot;-600px&quot;}, 0)
	setTimeout(&quot;cloudthree()&quot;,20000);
}
function boat(){
	$(&quot;#boat&quot;).animate({right:&quot;+=1000px&quot;},20000).animate({right:&quot;-200px&quot;}, 0)
	setTimeout(&quot;boat()&quot;,20000);
}
[/javascript]

Перевод статьи “<a href="http://acrisdesign.com/2010/04/animated-landscape-using-css-and-jquery/">Animated Landscape Using CSS and jQuery</a>”, автор <strong>Vikas Ghodke</strong>]]></description>
		<wfw:commentRss>http://dreamhelg.ru/2010/06/animated-landscape-using-css-and-jquery/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Что такое inline-block?</title>
		<link>http://dreamhelg.ru/2010/04/what-is-inline-block/</link>
		<comments>http://dreamhelg.ru/2010/04/what-is-inline-block/#comments</comments>
		<pubDate>Tue, 27 Apr 2010 06:48:27 +0000</pubDate>
		<dc:creator>dreamhelg</dc:creator>
				<category><![CDATA[верстка]]></category>
		<category><![CDATA[переводы]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[display]]></category>

		<guid isPermaLink="false">http://dreamhelg.ru/?p=1997</guid>
		<description><![CDATA[<p><img width="184" height="184" src="http://dreamhelg.ru/wp-content/uploads/2010/04/inline-block.jpg" class="attachment-200x200 wp-post-image" alt="inline-block" title="inline-block" /></p>Если вы работаете с CSS не первый день, то наверняка знакомы со значением <strong>inline-block</strong>, свойства display. Наиболее часто эту связку используют для устранения проблем в IE6.<span id="more-1997"></span>

Попробую вкратце объяснить о чем идет речь. Если вы назначаете float элементу и одновременно задаете margin с той же стороны, то в IE6 margin (странным образом) удвоится. Проблему можно исправить, применив хак специально для IE6, в котором можно указать значение margin в половину меньше от оригинала, или же вы можете назначить элементу свойство display в значение <strong>inline-block</strong>. Это разрешит проблему в большинстве, если не во всех случаях.

Однако, решение проблемы с двойными полями в IE6, далеко не единственное применение значения <strong>inline-block</strong>, оно может принести гораздо больше пользы, если хорошо его изучить.
<h3>Определение</h3>
Далее представлены несколько описаний для значения <strong>inline-block</strong>, взятые из разных источников:

<a href="http://reference.sitepoint.com/css/display">CSS-справочник Sitepoint</a>
<blockquote><em>Значение inline-block генерирует блочный элемент, с поведением строчного элемента</em></blockquote>
<a href="http://www.quirksmode.org/css/display.html">QuirksMode</a>
<blockquote><em>Строчный блок располагается в той же самой строке, что и соседний контент, но при этом ведет себя как блок</em></blockquote>
<a href="http://robertnyman.com/2010/02/24/css-display-inline-block-why-it-rocks-and-why-it-sucks/">Роберт Нэйман:</a>
<blockquote><em>В основном, это способ сделать элементы строчными, при этом сохранив его блочные возможности, такие как указание ширины и высоты, верхних и нижних отступов, паддингов и др.</em></blockquote>
Я думаю определение Роберта Нэймана самое лучшее, поскольку сразу объясняет практический смысл значения.
<h3>Демонстрация</h3>
Нижеприведенное изображение демонстрирует значение <strong>inline-block</strong> в действии:

<a href="http://dreamhelg.ru/wp-content/uploads/2010/04/example-inline.png"><img class="aligncenter size-full wp-image-2001" title="example-inline" src="http://dreamhelg.ru/wp-content/uploads/2010/04/example-inline.png" alt="" width="440" height="220" /></a>
<h3>Как его можно использовать?</h3>
Есть несколько ситуаций, с которыми вам поможет справиться <strong>inline-block</strong>:
<ul>
	<li>для исправления двойных полей у плавающих элементов в IE6 (как уже говорилось выше)</li>
	<li>для позиционирования блочных элементов в одной строке без использования float</li>
	<li>для указания ширины и высоты строчному элементу, без изменения его поведения</li>
	<li>для указания строчному элементу полей и отступов.</li>
</ul>
<h3>То, что следует запомнить</h3>
При использовании значения <strong>inline-block</strong>, следует помнить о некоторых факторах и недостатках. Элемент, с назначенным <strong>inline-block</strong>, является чувствительным к пробелам. То есть, если вы применяете это значение к маркированному списку (например для создания навигации), то каждый элемент списка будет иметь дополнительное пустое пространство на стыке двух элементов. Для того, чтобы этого избежать, необходимо удалить любые пробелы, разделяющие элементы &lt;li&gt;, в HTML-разметке. Следовательно, ваш HTML-код будет выглядеть следующим образом:

[html]
&lt;ul&gt;  
    &lt;li&gt;Item One&lt;/li&gt;&lt;li&gt;Item Two&lt;/li&gt;&lt;li&gt;Item Three&lt;/li&gt;&lt;li&gt;Item Four&lt;/li&gt;&lt;li&gt;Item Five&lt;/li&gt;  
&lt;/ul&gt;  
[/html]

Или еще хуже:

[html]
&lt;ul&gt;  
    &lt;li&gt;Item One&lt;/li  
    &gt;&lt;li&gt;Item Two&lt;/li  
    &gt;&lt;li&gt;Item Three&lt;/li  
    &gt;&lt;li&gt;Item Four&lt;/li  
    &gt;&lt;li&gt;Item Five&lt;/li&gt;  
&lt;/ul&gt;  
[/html]

Есть и другое решение этой проблемы – можно назначить font-size: 0, для элемента &lt;ul&gt;, а затем увеличить размер шрифта для элементов списка &lt;li&gt;. Но это не очень хорошее решение, в данном случае, лучше отказаться от использования <strong>inline-block</strong>.

Кроме того, если у вас на странице предполагается наличие нескольких элементов, с разной высотой и значением <strong>inline-block</strong>, вам следует указать им дополнительное свойство vertical-align: top, для того, чтобы предотвратить расположение блоков в шахматном порядке. На <a href="http://www.brunildo.org/test/inline-block.html">этой</a> странице можно ознакомиться с различными примерами расстановки элементов, с назначенным значением <strong>inline-block</strong>.

Ну и наконец, во время многочисленных экспериментов, выяснилось, что <strong>inline-block</strong>, ведет себя не вполне обычно, когда он применяется к элементу внутри текста, заключенного в элемент параграфа.
<h3>Поддержка браузерами</h3>
Думаю вы не удивитесь, узнав, что<strong> inline-block</strong> работает во всех браузерах, кроме IE6 и IE7. Но имитировать работу этого значения не так уж сложно. Для того, чтобы применить к элементу значение inline-block в IE6 и IE7, нужно всего лишь установить свойство display в значение inline, а затем назначить элементу <a href="http://reference.sitepoint.com/css/haslayout">layout</a>. Главное, убедитесь, что значение inline, появляется после значения <strong>inline-block</strong> в CSS-файле, и не забудьте спрятать inline от других браузеров.

Перевод статьи “<a href="http://www.impressivewebs.com/inline-block/">What is Inline-Block?”</a>, автор <strong>Louis Lazaris</strong>]]></description>
		<wfw:commentRss>http://dreamhelg.ru/2010/04/what-is-inline-block/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Создание навигации &#8220;волшебная линия&#8221; с помощью jQuery</title>
		<link>http://dreamhelg.ru/2010/02/create-magic-line-navigation-with-jquery/</link>
		<comments>http://dreamhelg.ru/2010/02/create-magic-line-navigation-with-jquery/#comments</comments>
		<pubDate>Sun, 14 Feb 2010 18:41:17 +0000</pubDate>
		<dc:creator>dreamhelg</dc:creator>
				<category><![CDATA[верстка]]></category>
		<category><![CDATA[переводы]]></category>
		<category><![CDATA[animate]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[навигация]]></category>

		<guid isPermaLink="false">http://dreamhelg.ru/?p=1903</guid>
		<description><![CDATA[<p><img width="200" height="200" src="http://dreamhelg.ru/wp-content/uploads/2010/02/home1.png" class="attachment-200x200 wp-post-image" alt="home" title="home" /></p>Такой “скользящий” стиль навигации существует довольно давно, мне всего лишь было нужно изменить его немного под собственные нужды, поскольку появилась такая возможность. Это оказалось очень легко. Можете взглянуть на <a href="http://dreamhelg.ru/demo/magic-line/">два примера</a> такой навигации на демонстрационной странице.<span id="more-1903"></span>
<h3>Идея</h3>
Идея состоит в наличие какой-либо подсветки (фонового изображения или подчеркивания), следующей за мышью, при наведении к какому-либо пункту меню. Это реализуется с помощью анимации jQuery. Следовательно, “волшебную линию” можно добавить только с помощью JavaScript. После того, как линия будет добавлена и стилизована, при движении мыши к любому пункту меню, ее ширина и левое позиционирование будет изменятся с анимационным эффектом.
<h3>HTML</h3>
Здесь обычный маркированный список. Ему назначен класс “group”, так как в примере будет использовано два горизонтальных меню. ID используется для указания элемента JavaScript.

[html]
&lt;div class=&quot;nav-wrap&quot;&gt;
 &lt;ul class=&quot;group&quot; id=&quot;example-one&quot;&gt;
    &lt;li class=&quot;current_page_item&quot;&gt;&lt;a href=&quot;#&quot;&gt;Home&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#&quot;&gt;Buy Tickets&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#&quot;&gt;Group Sales&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#&quot;&gt;Reviews&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#&quot;&gt;The Show&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#&quot;&gt;Videos&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#&quot;&gt;Photos&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#&quot;&gt;Magic Shop&lt;/a&gt;&lt;/li&gt;
 &lt;/ul&gt;
&lt;/div&gt;
[/html]

Обратите внимание, что список заключен внутри блока .nav-wrap. Это сделано в связи с особенностями стилизации. Панель, на которой расположена навигация, растянута на всю ширину экрана, но сама навигация центрирована внутри этой панели.

<h3>CSS</h3>
Здесь мы располагаем список горизонтально, и позиционируем волшебную линию абсолютно, поверх меню. Все остальное – просто наведение красоты.

[css]
.nav-wrap { margin: 50px auto;  background-color: rgba(0,0,0,0.6); border-top: 2px solid white; border-bottom: 2px solid white; }
#example-one { margin: 0 auto; list-style: none; position: relative; width: 960px; }
#example-one li { display: inline-block; }
#example-one li a { color: #bbb; font-size: 14px; display: block; float: left; padding: 6px 10px 4px 10px; text-decoration: none; text-transform: uppercase; }
#example-one li a:hover { color: white; }
#magic-line { position: absolute; bottom: -2px; left: 0; width: 100px; height: 2px; background: #fe4902; }
[/css]

<h3>JQuery JavaScript</h3>
<ol>
	<li>Когда DOM загружен…</li>
	<li>Устанавливаем переменные, включающие текущее левое смещение навигации</li>
	<li>Добавляем волшебную линию к навигации</li>
	<li>Назначаем позиционирование и ширину волшебной линии равной значению текущего элемента списка</li>
	<li>Также назначаем оригинальную ширину и позиционирование в качестве данных, с тем чтобы их можно было использовать для обратной анимации</li>
	<li>При наведении мыши, подсчитываем новую ширину и левое позиционирование, и включаем анимацию для изменения этих значений</li>
	<li>При отведении мыши от пункта меню, включаем анимацию возвращения линии на исходную позицию.</li>
</ol>

[javascript]
$(function() {

    var $el, leftPos, newWidth,
        $mainNav = $(&quot;#example-one&quot;);

    $mainNav.append(&quot;&lt;li id='magic-line'&gt;&lt;/li&gt;&quot;);
    var $magicLine = $(&quot;#magic-line&quot;);

    $magicLine
        .width($(&quot;.current_page_item&quot;).width())
        .css(&quot;left&quot;, $(&quot;.current_page_item a&quot;).position().left)
        .data(&quot;origLeft&quot;, $magicLine.position().left)
        .data(&quot;origWidth&quot;, $magicLine.width());

    $(&quot;#example-one li a&quot;).hover(function() {
        $el = $(this);
        leftPos = $el.position().left;
        newWidth = $el.parent().width();
        $magicLine.stop().animate({
            left: leftPos,
            width: newWidth
        });
    }, function() {
        $magicLine.stop().animate({
            left: $magicLine.data(&quot;origLeft&quot;),
            width: $magicLine.data(&quot;origWidth&quot;)
        });
    });
});
[/javascript]

<h3>Альтернативная версия</h3>
На демонстрационной <a href="http://dreamhelg.ru/demo/magic-line/">странице</a>, также имеется альтернативная версия “волшебной” линии, использующая фон вместо линии, и анимирующей цвет вместе с шириной и левым позиционированием. В основе все то же самое, отличается разве что CSS и JavaScript, который получает цвет для нового элемента списка, из HTML-атрибута rel. Для анимации цвета, потребуется <a href="http://plugins.jquery.com/files/jquery.color.js.txt">специальный плагин</a>.

<a href="http://dreamhelg.ru/wp-content/uploads/2010/02/magicline.zip">Скачать архив с примером</a>.

Перевод статьи “<a href="http://css-tricks.com/jquery-magicline-navigation/">jQuery MagicLine Navigation</a>”, автор <strong>Chris Coyier</strong>

<strong>Примечение:</strong>
После небольшой доработки, скрипт нормально работает в опере и IE7-8, насчет IE6 не знаю, не тестировала.]]></description>
		<wfw:commentRss>http://dreamhelg.ru/2010/02/create-magic-line-navigation-with-jquery/feed/</wfw:commentRss>
		<slash:comments>15</slash:comments>
		</item>
	</channel>
</rss>

