<?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/tag/layout/feed/" rel="self" type="application/rss+xml" />
	<link>http://dreamhelg.ru</link>
	<description>о моей работе в сети и не только</description>
	<lastBuildDate>Fri, 23 Dec 2011 07:10:04 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
		<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>1</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>2</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>6</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>19</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>8</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>8</slash:comments>
		</item>
		<item>
		<title>Создание формы со скользящими подписями</title>
		<link>http://dreamhelg.ru/2010/01/create-form-with-sliding-labels/</link>
		<comments>http://dreamhelg.ru/2010/01/create-form-with-sliding-labels/#comments</comments>
		<pubDate>Thu, 28 Jan 2010 08:47:34 +0000</pubDate>
		<dc:creator>dreamhelg</dc:creator>
				<category><![CDATA[верстка]]></category>
		<category><![CDATA[переводы]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[label]]></category>

		<guid isPermaLink="false">http://dreamhelg.ru/?p=1850</guid>
		<description><![CDATA[<p><img width="200" height="200" src="http://dreamhelg.ru/wp-content/uploads/2010/01/home1.png" class="attachment-200x200 wp-post-image" alt="home" title="home" /></p>Пару недель назад, я читал статью <a href="http://www.lukew.com/">Люка Вроблевски</a>. Для тех, кто еще не слышал о нем, Люк -  автор книги о правильном дизайне веб-форм.

В его статье, меня особенно заинтересовала часть, о расположении подписей внутри текстовых полей:<span id="more-1850"></span>
<br/>
<p><blockquote><em>Поскольку подписи, расположенные внутри текстовых полей, исчезают при вводе текста, вместе с ними исчезает контекст введенных данных. Так что, если вы вдруг забудете, на какой вопрос вы ввели ответ, значит вам не повезло – подпись к полю вы, скорее всего нигде не найдете. Из этого следует, что подписи, расположенные внутри текстовых полей – не самое лучшее решение для создания длинных форм. Когда вы заполните форму до конца, все подписи пропадут! В этом случае, гораздо сложнее будет вернутся и проверить свои ответы.</em>

<em>Люк Вроблевски</em></blockquote></p>

Эти слова стали хорошим поводом для размышления. Конечно, вы можете взглянуть на поле со значением “Вася Пупкин”, и точно сказать что это поле для ввода имени. Но в случае с длинными формами, очень легко забыть вопросы, на которые вы отвечали.

Самым лучшим решением, по мнению Люка, является размещение подписей за пределами текстового поля, с тем, чтобы они всегда были доступны для пользователя. Я думаю это неплохое решение, но мы можем придумать кое-что поинтереснее.
<h3>Скользящие подписи</h3>
После прочтения этой статьи, мне пришло в голову, что мы вполне можем использовать преимущества каждого из методов. Мне нравится как выглядят подсказки внутри полей, но тем не менее, я согласен с тем, что она всегда должна оставаться на экране. Но, к счастью у нас в распоряжении есть JQuery, мы знакомы с принципом постепенного улучшения, поэтому давайте создадим подписи, расположенные внутри текстовых полей, которые, вместо того, чтобы исчезать, будут сдвигаться влево (или вверх, как вам больше хочется), при клике по текстовому полю.

<h3>HTML</h3>

[html]
&lt;form action=&quot;&quot; method=&quot;post&quot; id=&quot;info&quot;&gt;
    &lt;h2&gt;Контактная информация&lt;/h2&gt;
    &lt;div id=&quot;name-wrap&quot; class=&quot;slider&quot;&gt;
        &lt;label for=&quot;name&quot;&gt;
            Имя
        &lt;/label&gt;
        &lt;input type=&quot;text&quot; id=&quot;name&quot; name=&quot;name&quot;&gt;
    &lt;/div&gt;&lt;!--/#name-wrap--&gt;
    &lt;div id=&quot;email-wrap&quot; class=&quot;slider&quot;&gt;
        &lt;label for=&quot;email&quot;&gt;
            E&amp;ndash;mail
        &lt;/label&gt;
        &lt;input type=&quot;text&quot; id=&quot;email&quot; name=&quot;email&quot;&gt;
    &lt;/div&gt;&lt;!--/#email-wrap--&gt;
    &lt;div id=&quot;street-wrap&quot; class=&quot;slider&quot;&gt;
        &lt;label for=&quot;st&quot;&gt;
            Город
        &lt;/label&gt;
        &lt;input type=&quot;text&quot; id=&quot;st&quot; name=&quot;st&quot;&gt;
    &lt;/div&gt;&lt;!--/#street-wrap--&gt;
    &lt;div id=&quot;city-wrap&quot; class=&quot;slider&quot;&gt;
        &lt;label for=&quot;city&quot;&gt;
            Улица
        &lt;/label&gt;
        &lt;input type=&quot;text&quot; id=&quot;city&quot; name=&quot;city&quot;&gt;
    &lt;/div&gt;&lt;!--/#city-wrap--&gt;
    &lt;div id=&quot;zip-wrap&quot; class=&quot;slider&quot;&gt;
        &lt;label for=&quot;zip&quot;&gt;
            Индекс
        &lt;/label&gt;
        &lt;input type=&quot;text&quot; id=&quot;zip&quot; name=&quot;zip&quot;&gt;
    &lt;/div&gt;&lt;!--/#zip-wrap--&gt;
    &lt;input type=&quot;submit&quot; id=&quot;btn&quot; name=&quot;btn&quot; value=&quot;отправить&quot;&gt;
&lt;/form&gt;
[/html]

Единственным необходимым элементом, для создания скользящих подписей (в моей реализации), является оборачивающий элемент (в моем примере DIV), и применение к нему класса “slider” (это легко можно изменить в JavaScript).

На этом этапе, у нас получилась очень простая, и некрасивая форма:
<p style="text-align: center;"><img class="aligncenter" src="http://dreamhelg.ru/wp-content/uploads/2010/01/one_thumb.jpg" alt="one" width="292" height="266" /></p>

<h3>CSS</h3>
[css]
body {
    font: 12px / 1.3 Arial, Sans-serif;
}

form {
    width: 360px;
    padding: 10px 20px 30px 60px;
    margin: auto;
    background: #f7f7f7;
    border: 1px solid #ddd;
}

div {
    clear: both;
    position: relative;
    margin: 0 0 10px;
}

label {
    cursor: pointer;
    display: block;
}

input[type =
&quot;text&quot;] {
    width: 300px;
    border: 1px solid #999;
    padding: 5px;
    -moz-border-radius: 4px;
}

input[type =
&quot;text&quot;]:focus {
    border-color: #777;
}

input[name =
&quot;zip&quot;] {
    width: 150px;
}

/* submit button */
input[type =
&quot;submit&quot;] {
    cursor: pointer;
    border: 1px solid #999;
    padding: 5px;
    -moz-border-radius: 4px;
    background: #eee;
}

input[type =
&quot;submit&quot;]:hover, input[type = &quot;submit&quot;]:focus {
    border-color: #333;
    background: #ddd;
}

input[type =
&quot;submit&quot;]:active {
    margin-top: 1px;
}
[/css]

Единственный, 100%-необходимый CSS в этом примере – это применение position: relatve, к оборачивающему элементу (DIV). Все остальное используется только для настройки внешнего вида формы, вы можете изменять его по своему вкусу.

Теперь у нас получилась вполне симпатичная форма, в которой подписи расположены сверху непосредственных полей ввода.
<p style="text-align: center;"><img class="aligncenter" title="two" src="http://dreamhelg.ru/wp-content/uploads/2010/01/two.jpg" alt="two" width="384" height="392" /></p>

<h3>jQuery</h3>
Теперь, раздел, который все обычно пропускают, переходя к демо-странице:

[javascript]
$('form#info .slider label').each(function(){
	var labelColor = '#999';
	var restingPosition = '5px';

	// стилизация и позиционирование подписей 
	$(this).css({
		'color' : labelColor,
		 	'position' : 'absolute',
	 		'top' : '6px',
			'left' : restingPosition,
			'display' : 'inline',
    	               'z-index' : '99'
	});

	// получение введенного в поле, значения
	var inputval = $(this).next('input').val();

	// получение длины подписи, и добавление к ней 5px 
	var labelwidth = $(this).width();
	var labelmove = labelwidth + 5;

	//проверяем, если поле заполнено, то сдвигаем подпись за пределы поля
	if(inputval !== ''){
		$(this).stop().animate({ 'left':'-'+labelmove }, 1);
	}    	

	// если значение поля пустое при фокусе, сдвигаем подпись влево
	// если оно осталось пустым, при потере фокуса, возвращаем их обратно
	$('input').focus(function(){
		var label = $(this).prev('label');
		var width = $(label).width();
		var adjust = width + 5;
		var value = $(this).val();

		if(value == ''){
			label.stop().animate({ 'left':'-'+adjust }, 'fast');
		} else {
			label.css({ 'left':'-'+adjust });
		}
	}).blur(function(){
		var label = $(this).prev('label');
		var value = $(this).val();
		if(value == ''){
			label.stop().animate({ 'left':restingPosition }, 'fast');
		}
	});
})
[/javascript]

Вот и все, у вас должна получится полностью работающая форма со скользящими подписями.

<a href="http://dreamhelg.ru/wp-content/uploads/2010/01/final.jpg"><img class="aligncenter size-full wp-image-1857" title="final" src="http://dreamhelg.ru/wp-content/uploads/2010/01/final.jpg" alt="" width="373" height="312" /></a>

Обратите внимание, что форма остается рабочей, даже с отключенным ява-скриптом, это является основным принципом постепенного улучшения. Верите или нет, но все еще остаются люди, не использующие ява-скрипт при просмотре веб-страниц.

<a href="http://dreamhelg.ru/demo/sliding-labels/index.htm">Демонстрационная страница</a>.
<a href="http://dreamhelg.ru/wp-content/uploads/2010/01/demo.zip">Архив с примером</a>.

Перевод статьи “<a href="http://www.csskarma.com/blog/sliding-labels/">Form Design with Sliding Labels</a>”, автор <strong>Tim Wright</strong>]]></description>
		<wfw:commentRss>http://dreamhelg.ru/2010/01/create-form-with-sliding-labels/feed/</wfw:commentRss>
		<slash:comments>28</slash:comments>
		</item>
		<item>
		<title>Создание прототипа с помощью CSS-фреймворка Grid 960</title>
		<link>http://dreamhelg.ru/2009/10/prototyping-with-the-grid-960-css-framework/</link>
		<comments>http://dreamhelg.ru/2009/10/prototyping-with-the-grid-960-css-framework/#comments</comments>
		<pubDate>Mon, 26 Oct 2009 10:55:06 +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=1641</guid>
		<description><![CDATA[<p><img width="200" height="200" src="http://dreamhelg.ru/wp-content/uploads/2009/10/home.png" class="attachment-200x200 wp-post-image" alt="home" title="home" /></p><a href="http://960.gs/">Grid 960</a> - это CSS Фреймворк, который позволяет разработчикам быстро конструировать прототипы дизайна. Они являются замечательным инструментом для создания макетов. Почему?  Потому что они делают за вас всю тяжелую работу, позволяя получить быстрые результаты.

Звучит отлично, но как это делается? В интернете есть большое количество статей, агитирующих за и против использования CSS-фреймворков, но нет ничего в помощь неопытным читателям. Поэтому в сегодняшней статье мы рассмотрим процесс создания прототипа. Как обычно, можете сразу взглянуть на <a href="http://dreamhelg.ru/demo/grid960/960.html">результат</a>.<span id="more-1641"></span>

Представьте, что вы получили дизайн, и вам нужно сверстать его для клиента. Из этой статьи вы познакомитесь с  основами Grid, проектированием сетки дизайна и кодированием прототипа. Мы будем использовать довольно простой дизайн, использующий большинство возможностей Grid  960, который поможет вам получить основную базу знаний для дальнейшей работы. После того, как вы ознакомитесь с представленным ниже дизайном, давайте начнем изучение принципов работы Grid 960.
<p style="text-align: center;"><img class="aligncenter size-full wp-image-1652" title="final" src="http://dreamhelg.ru/wp-content/uploads/2009/10/final.png" alt="final" width="690" height="718" /></p>

<h3>Создание Сетки</h3>

Grid 960 работает на основе наследования классов. Этот фреймворк предоставляет две сетки: 12 и 16 колонок. Основной контейнер всегда имеет ширину 960px. Использование числа 960 позволяет применять большинство различных комбинаций колонок, без усложнения работы с ними. Для верстки этого дизайна, мы будем использовать сетку из 12-ти колонок, но мы не будем использовать все 12 колонок. Каждой ячейке сетки назначено свойство margin: 0 10px. Это создает промежуток в 20 пикселей. При создании строки, сумма ширины всех элементов добавляется к 960. Взгляните на демонстрационную страницу Grid 960. Вы увидите сетку со всеми видами комбинаций.  Каждая ячейка сетки имеет класс, который определяет, какой она будет ширины. Далее представлена разбивка ширины столбцов для 12-ти колоночной сетки:
<ol>
	<li>60px</li>
	<li>140px</li>
	<li>220px</li>
	<li>300px</li>
	<li>380px</li>
	<li>460px</li>
	<li>540px</li>
	<li>620px</li>
	<li>700px</li>
	<li>780px</li>
	<li>860px</li>
	<li>940px</li>
</ol>
Каждая ширина соответствует имени класса, оформленного в виде: grid_X, где X это порядковый номер из представленного выше списка. Если вам нужен блок, шириной 940px, используйте класс grid_12. Откуда же Grid 960 знает, какая должна использоваться ширина? Каждый grid_X представляет собой селектор container_Y .grid_X, где значение Y равно 12 либо 16 колонок.

Давайте немного рассмотрим сам код. Вот как можно создать сетку из двух строк в 12-ти колоночном контейнере. Здесь первая строка шириной 940 пикселей, и вторая строка содержит две одинаковых колонки.

[html]
&lt;div class=&quot;container_12&quot;&gt;   
    &lt;div class=&quot;grid_12&quot;&gt;&lt;p&gt;940px&lt;/p&gt;&lt;/div&gt;   
  
    &lt;div class=&quot;clear&quot;&gt;&lt;/div&gt;   
    &lt;div class=&quot;grid_6&quot;&gt;&lt;p&gt;460px&lt;/p&gt;&lt;/div&gt;     
    &lt;div class=&quot;grid_6&quot;&gt;&lt;p&gt;460px&lt;/p&gt;&lt;/div&gt;   
  
    &lt;div class=&quot;clear&quot;&gt;&lt;/div&gt;   
&lt;/div&gt;   
[/html]

Когда вы создаете строку в сетке, убедитесь, что все дочерние номера gird_X в сумме дают число колонок, которое вы используете. Это гарантирует правильную ширину. Два дива с классом grid_6, дают в сумме 12. Вы не ограничены только этими значениями, и также можете использовать 6, 4 и 2. Вот и все, сетка готова для контента. Теперь, после того как вы узнали как работает Grid 960, давайте посмотрим как создается макет.

<h3>Макет</h3>

Визуализировать сетку дизайна довольно легко. Будет одна строка для картинки заголовка, строка для навигации, строка с двумя колонками для статьи заголовка и постера, разделитель, 4 колонки, затем подвал, состоящий из трех колонок.

<p style="text-align: center;"><img class="aligncenter size-full wp-image-1653" title="grid" src="http://dreamhelg.ru/wp-content/uploads/2009/10/grid.png" alt="grid" width="597" height="304" /></p>
После визуализации, вы должны понимать, как создать сетку макета. Используя значения ширины в имени класса, из приведенного списка, давайте вместе составим код. Помните, что необходимо добавлять очищающий div в конце каждой строки. Не забудьте включить CSS-файлы, входящие в состав Grid 960.

[html]
&lt;div class=&quot;container_12&quot;&gt;   
    &lt;div class=&quot;grid_12&quot;&gt;&lt;/div&gt;   
    &lt;div class=&quot;clear&quot;&gt;&lt;/div&gt;   
  
       
    &lt;div class=&quot;grid_12&quot;&gt;&lt;/div&gt;   
    &lt;div class=&quot;clear&quot;&gt; &lt;/div&gt;   
       
    &lt;div class=&quot;grid_7&quot;&gt;&lt;/div&gt;   
    &lt;div class=&quot;grid_5&quot;&gt;&lt;/div&gt;   
  
    &lt;div class=&quot;clear&quot;&gt;&lt;/div&gt;   
       
    &lt;div class=&quot;grid_12&quot;&gt;&lt;/div&gt;   
    &lt;div class=&quot;clear&quot;&gt;&lt;/div&gt;   
       
    &lt;div class=&quot;grid_3&quot;&gt;&lt;/div&gt;   
  
    &lt;div class=&quot;grid_3&quot;&gt;&lt;/div&gt;   
    &lt;div class=&quot;grid_3&quot;&gt;&lt;/div&gt;   
    &lt;div class=&quot;grid_3&quot;&gt;&lt;/div&gt;   
    &lt;div class=&quot;clear&quot;&gt;&lt;/div&gt;   
  
       
    &lt;div class=&quot;grid_12&quot;&gt;&lt;/div&gt;   
    &lt;div class=&quot;clear&quot;&gt;&lt;/div&gt;   
       
    &lt;div class=&quot;grid_4&quot;&gt;&lt;/div&gt;   
    &lt;div class=&quot;grid_4&quot;&gt;&lt;/div&gt;   
  
    &lt;div class=&quot;grid_4&quot;&gt;&lt;/div&gt;   
&lt;/div&gt;   
[/html]

Скелет готов. Пришло время накладывать дизайн. Зеленые панели – это просто блоки с фоновым цветом и высотой. У панели навигации высота не задана. Вместо этого, она будет контролироваться размером внутренних ссылок. Не забудьте добавить картинку заголовка.

[css]
div.spacer {   
    background-color: #8FC73E;   
    height: 1em;   
}   
  
div#navbar {   
    background-color: #8FC73E;   
    padding: 10px 0;   
}   
[/css]

Применение классов для корректировки блоков grid_12 и установка ID

[html]
&lt;div class=&quot;container_12&quot;&gt;   
    &lt;div class=&quot;grid_12&quot;&gt;&lt;a href=&quot;images/header.png&quot; alt=&quot;&quot;/&gt;&lt;/div&gt;   
    &lt;div class=&quot;clear&quot;&gt;&lt;/div&gt;   
  
       
    &lt;div class=&quot;grid_12&quot; id=&quot;navbar&quot;&gt;&lt;/div&gt;   
    &lt;div class=&quot;clear&quot;&gt; &lt;/div&gt;   
       
    &lt;div class=&quot;grid_7&quot;&gt;&lt;/div&gt;   
  
    &lt;div class=&quot;grid_5&quot;&gt;&lt;/div&gt;   
    &lt;div class=&quot;clear&quot;&gt;&lt;/div&gt;   
       
    &lt;div class=&quot;grid_12 spacer&quot;&gt;&lt;/div&gt;   
    &lt;div class=&quot;clear&quot;&gt;&lt;/div&gt;   
  
       
    &lt;div class=&quot;grid_3&quot;&gt;&lt;/div&gt;   
    &lt;div class=&quot;grid_3&quot;&gt;&lt;/div&gt;   
    &lt;div class=&quot;grid_3&quot;&gt;&lt;/div&gt;   
    &lt;div class=&quot;grid_3&quot;&gt;&lt;/div&gt;   
  
    &lt;div class=&quot;clear&quot;&gt;&lt;/div&gt;   
       
    &lt;div class=&quot;grid_12 spacer&quot;&gt;&lt;/div&gt;   
    &lt;div class=&quot;clear&quot;&gt;&lt;/div&gt;   
       
    &lt;div class=&quot;grid_4&quot;&gt;&lt;/div&gt;   
  
    &lt;div class=&quot;grid_4&quot;&gt;&lt;/div&gt;   
    &lt;div class=&quot;grid_4&quot;&gt;&lt;/div&gt;   
&lt;/div&gt;   
[/html]

Центральным колонкам не требуются никакие эффекты. Добавим немного текста для заполнения дизайна. Прежде, чем приступать к верхней части, взглянем на подвал. На скриншоте подвал однородного цвета. У вас не получится реализовать это с существующим кодом. Оборачивающий div, вокруг этих трех колонок решит проблему. Вы думаете, ничего страшного, просто нужно вставить div. Но этот див поломает сетку, поскольку Grid 960 основывается на родительских и дочерних элементах, при использовании стилей (вспомните селектор container_12 .grid_4 ). В данном случае, проблему поможет решить вложенная сетка, которую Grid 960 позволяет использовать. Создайте вложенную сетку, путем добавления блока grid_12, затем расположите внутри блоки grid_4. При использовании вложенных сеток, дочерние элементы должны иметь специальные классы. Первый дочерний элемент должен иметь класс «alpha», а последний дочерний блок – класс «omega». Отредактируйте разметку для внесения необходимых изменений для подвала.

[html]
&lt;div class=&quot;grid_12&quot; id=&quot;footer&quot;&gt;   
    &lt;div class=&quot;grid_4 alpha&quot;&gt;&lt;/div&gt;   
    &lt;div class=&quot;grid_4&quot;&gt;&lt;/div&gt;   
  
    &lt;div class=&quot;grid_4 omega&quot;&gt;&lt;/div&gt;   
&lt;/div&gt;   
[/html]


[css]
div#footer {   
    background-color: #e5e5e6;   
}   
[/css]

Прекрасно! Теперь у подвала есть заливка однородным цветом, и вы можете указать размеры колонок, если это необходимо. Добавим немного текста для колонок подвала и перейдем к панели навигации. Навигация выполнена в виде простого маркированного списка Добавим немного ссылок и соответствующих стилей.

[html]
&lt;div class=&quot;grid_12&quot; id=&quot;navbar&quot;&gt;&lt;/div&gt;   
    &lt;ul&gt;   
        &lt;li&gt;Articles&lt;/li&gt;   
        &lt;li&gt;Topics&lt;/li&gt;   
  
        &lt;li&gt;About&lt;/li&gt;   
        &lt;li&gt;Editors&lt;/li&gt;   
        &lt;li&gt;Contact&lt;/li&gt;   
    &lt;/ul&gt;   
  
&lt;/div&gt;   
[/html]

[css]
div#navbar ul {   
    list-style: none;   
    display: block;   
    margin: 0 10px;   
}   
  
div#navbar ul li {   
    float: left;   
    margin: 0 1.5em;   
    font: bold 1em Arial;   
}   
[/css]

Замечательно. Страница скоро будет готова. Все что нам нужно сделать, это создать эффекты блока в верхней секции. Это не так просто, как кажется. Прежде чем мы начнем, вы должны кое-что понять о Grid 960 и CSS-фреймворках в целом.

<h3>CSS-фреймворки не решат всех ваших проблем</h3>
Внимательные читатели, наверное, уже заметили кое-что. В нашей странице абсолютно отсутствует гибкость. Всем элементам заданы определенные размеры, и изменение этих размеров может повлечь за собой проблемы или даже развалить весь дизайн в целом. Кроме того, в связи с ограничением Grid 960, дизайнеры не могут использовать некоторые из своих идей.

Например, если бы этот же дизайн был шириной в 1000 пикселей. Grid 960 создает сетку шириной 960 пикселей, так что макеты большего размера уже использовать нельзя.  Что если вы захотите расширить макет до 1000 пикселей, вместо 960-ти? Можно с уверенностью сказать, что вы не сможете это сделать без реализации нескольких сложных изменений кода.

Фреймворк ограничивает дизайнеров набором жестких правил. Скажем, клиент хочет дизайн шире или уже 960-ти пикселей. Дизайнеру будет проще создать код с нуля, для реализации новых задач, чем использовать ранее созданный.

Есть и другая, еще не выявленная, проблема – колонки одинаковой высоты. Поскольку центральные колонки имеют одинаковый фоновый цвет, они выглядят одинаковыми по высоте. В подвале, содержащий блок, устанавливает одинаковый фоновый цвет, позади трех колонок. Grid 960 не поможет вам в создании одинаковых по высоте колонок. Существуют, конечно, способы реализовать это самостоятельно, но поскольку мы просто создаем прототип дизайна, то не будем тратить время на решение мелких проблем в дальнейшем функционировании сайта. На данном этапе, вам нужно понять саму идею.

Есть еще один аспект Grid 960, который следует принять во внимание, прежде, чем мы перейдем к верхней секции. Grid 960 основывается на размерах элементов и отступов, при создании строки правильного размера. Если вы используете рамку или внутренний отступ (padding), макет сломается. Следовательно, если вам нужно их использовать, вы должны предусмотреть это в размере блока, для отражения изменений. Это очень утомительно. Указание размеров элементов в двух местах, всегда будет приводить к путанице, к тому же макет будет гораздо сложнее в обслуживании. Вот и все. Давайте закончим верхнюю секцию.

<h3>Верхняя секция</h3>
К счастью, вы можете манипулировать колонками одинаковой высоты в верхней секции. Поскольку картинке справа назначена ширина и высота, нам известен размер другой колонки. Создадим эффект блока, с помощью добавления нового дива с рамкой, внутри существующих дивов. Не забудьте указать размеры. Не назначайте padding дивам, потому что это изменит ширину блоков и сломает сетку. Вместо этого, укажите margin дочерним элементам. Это не изменит ширину родительских блоков. Применим margin к строчным элементам. Это создаст желаемый эффект и текст будет отступать от края.

[html]
&lt;div class=&quot;grid_7 topSection&quot;&gt;   
    &lt;div&gt; &lt;/div&gt;   
&lt;/div&gt;   
&lt;div class=&quot;grid_5 topSection&quot;&gt;   
  
&lt;/div&gt;   
[/html]

Используйте классы, вместо ID, потому что класс topSection применяется к обоим блокам. Это к тому же, упрощает изменение высоты. Выберите значение высоты, и создайте класс.

[css]
div.topSection div {   
    border: solid 10px #e5e5e6;   
    height: 280px;   
}   
  
div.topSection div p {   
    margin: 10px;   
}   
[/css]

Отлично! Давайте посмотрим на нашу работу.

<p style="text-align: center;"><img class="aligncenter size-full wp-image-1654" title="boxes" src="http://dreamhelg.ru/wp-content/uploads/2009/10/boxes.png" alt="boxes" width="599" height="292" /></p>
Приступаем к наполнению контентом. Заполните левый блок небольшим количеством текста. Только не увлекайтесь, если текста будет слишком много, он вылезет за край блока. Это создает потенциальную проблему в макете. Как вы узнаете, какое количество текста будет слишком большим? В производственном дизайне, для предотвращения этой проблемы, дизайнеру пришлось бы создать функцию, выводящую определенное количество слов.

Теперь, давайте вставим картинку. Только, прежде чем ее вставлять, укажите размеры. Если вы нормальный математик и понимаете боксовую модель, вы, скорее всего, уже знаете, какого размера она должна быть. Если не знаете, запустите Firebug и взгляните на DOM. Включите кнопку Inspect и кликните по блоку, в котором будет размещаться картинка. Откройте вкладку Layout. Firebug отобразит боксовую модель выделенного вами блока.

<img class="aligncenter size-full wp-image-1656" title="firebug-resized" src="http://dreamhelg.ru/wp-content/uploads/2009/10/firebug-resized.png" alt="firebug-resized" width="500" height="268" />

Скриншот показывает размер картинки 360 x 280. Найдите картинку, и создайте стиль. Я решил позволить картинке целиком заполнить весь блок. Если вы хотите создать 10-ти пиксельные отступы, убедитесь в том, что уменьшили размеры по 20 пикселей с каждой стороны.

[css]
img#poster {   
    width: 360px;   
    height: 280px;   
}   
[/css]

У вас должно было получиться следующее. Можете смело менять текст или картинку.
<p style="text-align: center;"><img class="aligncenter size-full wp-image-1652" title="final" src="http://dreamhelg.ru/wp-content/uploads/2009/10/final.png" alt="final" width="591" height="615" /></p>

<h3>Помните об ограничениях</h3>
Теперь, когда прототип готов, давайте подведем итоги проделанной работы. Вы научились быстро создавать прототипы дизайна. Grid 960 легко создает сетку для нас. И что же дальше? Естественно, нужно показать клиенту, и послушать, что он скажет. Хотя, есть несколько предостережений. Тестировался ли дизайн в IE6 и IE7? Нет. Нужно ли это делать? Нет. Это только прототип. Конечно же, все особенности браузеров будут учтены, до производства.

А что если клиенты захотят создать более комплексный дизайн? В таком случае, вы быстро обнаружите ограничения фреймворка. Что если дизайн должен быть резиновым или эластичным? Фреймворк не сможет вам в этом помочь, поэтому вам придется делать все с нуля. Помните, что CSS-фреймворки не решат все ваши проблемы, но они могут помочь с некоторыми. Grid 960 также как и другие фреймворки, замечательно подходит для создания прототипов.

Вы, конечно, можете использовать концепцию Grid 960, в дальнейшей разработке кода, но фреймворки не рекомендуется полностью использовать в своих проектах. Помните, что CSS-фреймворки, также как и любой другой инструмент, имеют своих поклонников.

<a href="http://nettuts.s3.amazonaws.com/126_prototyping/prototyping-with-grid-960.zip">Скачать архив с примером</a>.

Перевод статьи "<a href="http://net.tutsplus.com/tutorials/html-css-techniques/prototyping-with-the-grid-960-css-framework/">Prototyping With The Grid 960 CSS Framework</a>", автор <strong>Adam Hawkins</strong>]]></description>
		<wfw:commentRss>http://dreamhelg.ru/2009/10/prototyping-with-the-grid-960-css-framework/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>Дизайн и верстка эластичного макета</title>
		<link>http://dreamhelg.ru/2009/10/how-to-design-and-code-a-flexible-website/</link>
		<comments>http://dreamhelg.ru/2009/10/how-to-design-and-code-a-flexible-website/#comments</comments>
		<pubDate>Tue, 06 Oct 2009 06:56:39 +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=1482</guid>
		<description><![CDATA[В сегодняшней статье, мы создадим дизайн и сверстаем простую страницу в стиле блога. При этом особое внимание, мы уделим созданию тянущегося макета с использованием только XHTML и CSS. Эта статья [...]]]></description>
		<wfw:commentRss>http://dreamhelg.ru/2009/10/how-to-design-and-code-a-flexible-website/feed/</wfw:commentRss>
		<slash:comments>22</slash:comments>
		</item>
		<item>
		<title>CSS-cвойство z-index: подробный обзор</title>
		<link>http://dreamhelg.ru/2009/09/css-property-z-index/</link>
		<comments>http://dreamhelg.ru/2009/09/css-property-z-index/#comments</comments>
		<pubDate>Wed, 16 Sep 2009 08:33:33 +0000</pubDate>
		<dc:creator>dreamhelg</dc:creator>
				<category><![CDATA[верстка]]></category>
		<category><![CDATA[переводы]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[z-index]]></category>

		<guid isPermaLink="false">http://dreamhelg.ru/?p=1330</guid>
		<description><![CDATA[<p><img width="200" height="189" src="http://dreamhelg.ru/wp-content/uploads/2009/09/hove.jpg" class="attachment-200x200 wp-post-image" alt="hove" title="hove" /></p>Большинство CSS-свойств довольно просты в использовании. Зачастую, применение CSS-свойства к элементу в разметке дает мгновенный результат – как только вы обновите страницу, набор значений свойства применится, и вы сразу же увидите результат. Другие CSS-свойства, однако, более комплексные и будут работать только после задания определенного набора условий.

Свойство z-index принадлежит к последней группе свойств. Это свойство так часто вызывало всеобщую путаницу и разочарование, как ни одно, из существующих CSS-свойств. По иронии судьбы, однако, когда вы поближе познакомитесь с <strong>z-index</strong>, вы поймете, что это свойство очень простое, и предлагает эффективный метод решения многих проблем верстки.<span id="more-1330"></span>

В этой статье вы узнаете, что представляет собой z-index, как он может быть неправильно истолкован, а также некоторые примеры его использования. Кроме того, вы узнаете некоторые различия в поведении браузеров при обработке свойства z-index, это касается в основном предыдущих версий Internet Explorer и Firefox. Этот подробный обзор z-index предоставит разработчикам отличную основу для использования этого свойства уверенно и эффективно.
<h3>Что это такое?</h3>
Свойство <strong>z-index</strong> определяет уровень стека HTML-элемента. «Уровень стека» обозначает позицию элемента на оси Z (направленно перпендикулярно оси X, или оси Y). Элемент, которому назначено самое большое значение z-index, будет расположен в самом верху стека слоев. Этот стек слоев, располагается перпендикулярно к экрану, или области просмотра.

<strong>3-д представление оси Z:</strong>

<a href="http://dreamhelg.ru/wp-content/uploads/2009/09/graphical-z-index.jpg"><img class="aligncenter size-full wp-image-1349" title="graphical-z-index" src="http://dreamhelg.ru/wp-content/uploads/2009/09/graphical-z-index.jpg" alt="graphical-z-index" width="500" height="443" /></a>

Для того, чтобы продемонстрировать как работает<strong> z-index</strong>, картинка, представленная выше, немного увеличивает отображение элементов стека по отношению к области просмотра.
<h3>Обычный порядок стека</h3>
На HTML-странице, обычный порядок стека (то есть порядок элементов на оси Z), определяет ряд факторов. Далее представлен список, отображающий порядок, в котором элементы укладываются в стек, начиная снизу. В этом списке нет элементов, с назначенным свойством z-index:
<ul>
	<li>Фон и рамка элемента, создающие контекст стека</li>
	<li>Элементы с отрицательным контекстом стека, в порядке появления</li>
	<li>Не позиционированные, не плавающие, блочные элементы, в порядке появления</li>
	<li>Не позиционированные, плавающие элементы, в порядке появления</li>
	<li>Строчные элементы, в порядке появления</li>
	<li>Позиционированные элементы, в порядке появления</li>
</ul>
Когда свойство z-index используется правильно, оно может изменить обычный порядок стека.

Конечно, порядок элементов в стеке не является таким наглядным, пока элементы позиционируются, перекрывая друг друга. Поэтому, чтобы увидеть обычный порядок стека, можно использовать отрицательные поля, как показано ниже:
<div style="border: 1px solid #cccccc; background: #dddddd none repeat scroll 0% 0%; width: 200px; height: 200px; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; margin-top: 20px;">
<p style="padding-left: 30px; padding-top: 60px;">Серый блок</p>

</div>
<div style="border: 1px solid #4a7497; background: #8daac3 none repeat scroll 0% 0%; width: 200px; height: 200px; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; margin-top: -50px; margin-left: 50px;">
<p style="padding-left: 30px; padding-top: 60px;">Синий блок</p>

</div>
<div style="border: 1px solid #8b6125; background: #ba945d none repeat scroll 0% 0%; width: 200px; height: 200px; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; margin-top: -50px; margin-left: 100px; margin-bottom: 20px;">
<p style="padding-left: 30px; padding-top: 60px;">Коричневый блок</p>

</div>
Блокам, показанным выше, назначен разный фоновый цвет и цвет рамки, а последним двум блокам, специально назначены отрицательные верхние отступы, чтобы проиллюстрировать обычный порядок стека. Серый блок появляется первым в разметке, синий блок вторым и коричневый блок третьим. Назначенные отрицательные поля отлично демонстрируют этот факт. Этим элементам не назначены значения <strong>z-index</strong>, они располагаются на странице в обычном порядке, или по умолчанию. Они накладываются друг на друга, благодаря отрицательным полям.
<h3>Почему появляется путаница?</h3>
Несмотря на то, что z-index не сложное для понимания свойство, при ошибочном толковании, оно может привести в заблуждение начинающих разработчиков. Это заблуждение появляется потому, что свойство z-index будет работать только с тем элементом, у которого свойство position установлено в одно из трех значений: <strong><code>absolute</code></strong>, <strong><code>fixed</code></strong> или <strong><code>relative</code></strong>.

Чтобы продемонстрировать, что z-index, работает только с позиционированными элементами, вот те же самые три блока, вместе с примененными значениями z-index, для изменения обычного порядка слоев:
<div style="border: 1px solid #cccccc; background: #dddddd none repeat scroll 0% 0%; width: 200px; height: 200px; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; margin-top: 20px; z-index: 9999;">
<p style="padding-left: 30px; padding-top: 60px;">Серый блок</p>

</div>
<div style="border: 1px solid #4a7497; background: #8daac3 none repeat scroll 0% 0%; width: 200px; height: 200px; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; margin-top: -50px; margin-left: 50px; z-index: 500;">
<p style="padding-left: 30px; padding-top: 60px;">Синий блок</p>

</div>
<div style="border: 1px solid #8b6125; background: #ba945d none repeat scroll 0% 0%; width: 200px; height: 200px; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; margin-top: -50px; margin-left: 100px; margin-bottom: 20px; z-index: 1;">
<p style="padding-left: 30px; padding-top: 60px;">Коричневый блок</p>

</div>
Серому блоку, установлено значение z-index, равное <code>“9999”</code>; синему блоку, установлено значение z-index, равное <code>“500”</code>; и коричневому блоку, установлено значение z-index, равное <code>“1”</code>. Логично было бы предположить, что порядок, в котором уложены блоки, должен изменится. Но этого не случилось в данном примере, потому что, не одному из этих элементов, не назначено свойство <code>position</code>.

Вот те же самые блоки, но только с добавленным свойством <code>position: relative</code>, к каждому из них, и ранее назначенные свойства z-index:
<div style="border: 1px solid #cccccc; background: #dddddd none repeat scroll 0% 0%; width: 200px; height: 200px; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; margin-top: 20px; z-index: 9999; position: relative;">
<p style="padding-left: 30px; padding-top: 60px;">Серый блок</p>

</div>
<div style="border: 1px solid #4a7497; background: #8daac3 none repeat scroll 0% 0%; width: 200px; height: 200px; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; margin-top: -50px; margin-left: 50px; z-index: 500; position: relative;">
<p style="padding-left: 30px; padding-top: 60px;">Синий блок</p>

</div>
<div style="border: 1px solid #8b6125; background: #ba945d none repeat scroll 0% 0%; width: 200px; height: 200px; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; margin-top: -50px; margin-left: 100px; margin-bottom: 20px; z-index: 1; position: relative;">
<p style="padding-left: 30px; padding-top: 60px;">Коричневый блок</p>

</div>
Вот теперь, мы получили желаемый результат: Порядок элементов изменился; серый блок перекрывает синий, а синий, в свою очередь, перекрывает коричневый.
<h3>Синтаксис</h3>
Свойство z-index может влиять на порядок слоев, как у блочных, так и у строчных элементов, и устанавливается назначением положительного или отрицательного, целого значения, или значения auto. Значение <code>auto</code>, определяет элементу такой же порядок слоев, как у родительского элемента.

Вот так выглядит CSS-код третьего примера, где свойство z-index применяется правильно:

[css]
#grey_box {
width: 200px;
height: 200px;
border: solid 1px #ccc;
background: #ddd;
position: relative;
z-index: 9999;
}

#blue_box {
width: 200px;
height: 200px;
border: solid 1px #4a7497;
background: #8daac3;
position: relative;
z-index: 500;
}

#gold_box {
width: 200px;
height: 200px;
border: solid 1px #8b6125;
background: #ba945d;
position: relative;
z-index: 1;
}
[/css]

Опять же, не будет лишним еще раз напомнить, особенно начинающим разработчикам, что свойство z-index не будет работать до тех пор, пока вы не примените позиционирование к элементу.
<h3>Использование JavaScript</h3>
Если вы хотите динамически изменить значение z-index у элемента, с помощью JavaScript, то это довольно просто. Синтаксис используется такой же, как и для доступа к большинству CSS-свойств, просто замените, записанные через дефис CSS-свойства, на код, как показано ниже:

[javascript]
var myElement = document.getElementById(&quot;gold_box&quot;);
myElement.style.position = &quot;relative&quot;;
myElement.style.zIndex = &quot;9999&quot;;
[/javascript]

Как показано в примере, CSS-свойство «<code>z-index</code>», записывается как «<code>zIndex</code>». Точно так же, «<code>background-color</code>» становится «<code>backgroundColor</code>», «<code>font-weight</code>» становится «<code>fontWeight</code>», и так далее.

Также, с помощью вышеуказанного кода, изменяется свойство <code>position</code>, потому что, z-index будет работать только с позиционированным элементом.
<h3>Неправильная обработка в IE и Firefox</h3>
При определенных обстоятельствах, в некоторых браузерах, свойство z-index может обрабатываться по-разному, это касается браузера Internet Explorer, версии 6 и 7, а также Firefox версии 2.

<strong>Элементы <code>&lt;select&gt;</code> в IE6</strong>

В Internet Explorer 6, элемент <code>&lt;select&gt;</code> всегда появляется в самом верху в порядке слоев, нарушая обычный порядок, значения позиционирования или z-index. Эта проблема проиллюстрирована на картинке ниже:
<p style="text-align: center;"><a href="http://dreamhelg.ru/wp-content/uploads/2009/09/ie6.jpg"><img class="size-full wp-image-1350 aligncenter" title="ie6" src="http://dreamhelg.ru/wp-content/uploads/2009/09/ie6.jpg" alt="ie6" width="320" height="237" /></a></p>
Элемент <code>&lt;select&gt;</code> появляется первым в обычном порядке слоев, и получает значение z-index, равное <code>«1»</code>, наряду со значением свойства <code>position</code>, равному <code>relative</code>. Коричневый блок, появляется вторым, в порядке слоев, и ему назначено свойство z-index, равное <code>«9999»</code>. В соответствии с правилом обычного порядка слоев, и назначенных свойств z-index, коричневый блок должен перекрыть элемент <code>&lt;select&gt;</code>, что и происходит во всех текущих браузерах, за исключением IE6:
<div style="padding-left: 25px; padding-top: 25px;"><select style="z-index: 1; position: relative;"><option>– Выберите год –</option><option>2009</option><option>2010</option><option>2011</option></select></div>
<div style="border: 1px solid #8b6125; background: #ba945d none repeat scroll 0% 0%; width: 200px; height: 200px; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; margin-top: -30px; margin-left: 100px; margin-bottom: 20px; z-index: 9999; position: relative;">
<p style="padding-left: 30px; padding-top: 60px;">Коричневый блок</p>

</div>
Если вы посмотрите на этот пример, с помощью браузера IE6, вы увидите, что элемент <code>&lt;select&gt;</code>, перекрывает коричневый блок, игнорируя обычный порядок слоев и свойства z-index.

Этот баг в IE6 создает проблемы с выпадающим меню, которое не может перекрыть элементы <code>&lt;select&gt;</code>. Есть два решения этой проблемы. Первое, это с помощью JavaScript временно скрывать элемент <code>&lt;select&gt;</code>, а затем, снова его отображать, после того, как выпадающее меню скроется. Другое решение предполагает <a href="http://www.macridesweb.com/oltest/IframeShim.html">использование <code>&lt;iframe&gt;</code></a>.

<strong>Позиционирование Родительских элементов в IE6/7</strong>

Internet Explorer версии 6 и 7, неправильно сбрасывает контекст стека, по отношению к ближайшим, позиционированным, дочерним элементам. Для того чтобы продемонстрировать эту, чуть более сложную проблему, давайте снова отобразим два блока, но в этот раз, мы заключим первый блок, в позиционированный элемент.
<div style="position: relative;">
<div style="border: 1px solid #cccccc; background: #dddddd none repeat scroll 0% 0%; width: 200px; height: 200px; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; margin-top: 20px; z-index: 9999; position: relative;">
<p style="padding-left: 30px; padding-top: 60px;">Серый блок</p>

</div>
</div>
<div style="border: 1px solid #4a7497; background: #8daac3 none repeat scroll 0% 0%; width: 200px; height: 200px; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; margin-top: -50px; margin-left: 50px; margin-botton: 20px; z-index: 1; position: relative;">
<p style="padding-left: 30px; padding-top: 60px;">Синий блок</p>

</div>
Серому блоку, назначено свойство z-index, равное <code>«9999»</code>, синему блоку назначен z-index, равный <code>«1»</code>, и оба элемента позиционированы. Следовательно, при правильной обработке, серый блок, должен быть расположен поверх синего блока.

Опять же, если вы посмотрите на этот пример в браузере IE6, или IE7, вы увидите, как синий блок перекрывает серый блок. Эти браузеры неправильно «сбрасывают» контекст стека, по отношению к позиционированному родителю, но так быть не должно. Серому блоку назначено самое высокое значение z-index, и он должен быть расположен поверх синего блока. Все другие браузеры обрабатывают этот пример правильно.

<strong>Отрицательные значения в Firefox 2</strong>

В Firefox версии 2, отрицательное значение z-index, позиционирует элемент позади порядка слоев, вместо того, чтобы расположить его поверх фона и рамок элемента, которые устанавливают контекст стека. Ниже представлена картинка, иллюстрирующая этот баг в Firefox 2:

<a href="http://dreamhelg.ru/wp-content/uploads/2009/09/ff2.gif"><img class="aligncenter size-full wp-image-1351" title="ff2" src="http://dreamhelg.ru/wp-content/uploads/2009/09/ff2.gif" alt="ff2" width="500" height="380" /></a>

Ниже представлена HTML-версия этой картинки, так что, если вы посмотрите на страницу в Firefox 3 или в другом, современном браузере, вы увидите правильную обработку:  Фон серого блока (который является элементом, устанавливающим контекст стека) появляется в самом низу, и текст, расположенный в сером блоке, появляется поверх синего блока, который соблюдает правила «обычного порядка слоев», как говорилось выше.
<div style="border: 1px solid #cccccc; background: #dddddd none repeat scroll 0% 0%; width: 200px; height: 200px; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; margin-top: 20px; z-index: 1; position: relative;">
<p style="padding-left: 30px; padding-top: 60px;">Серый блок</p>

<div style="border: 1px solid #4a7497; background: #8daac3 none repeat scroll 0% 0%; width: 200px; height: 200px; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; margin-top: -50px; margin-left: 50px; z-index: -500; position: relative;">
<p style="padding-left: 30px; padding-top: 60px;">Синий блок</p>

</div>
</div>
<div style="border: 1px solid #8b6125; background: #ba945d none repeat scroll 0% 0%; width: 200px; height: 200px; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; margin-top: -50px; margin-left: 100px; margin-bottom: 20px; z-index: 300; position: relative;">
<p style="padding-left: 30px; padding-top: 60px;">Gold Box</p>

</div>
<h3>Примеры использования</h3>
Применение свойства z-index к различным элементам на странице, может предоставить быстрое решение для различных задач макета, и позволяет дизайнерам создавать более творческие проекты. Некоторые, интересные примеры использования z-index, на практике, приведены ниже.

<strong>CSS-Тултипы</strong>

Свойство z-index может быть использовано в качестве части тултипа, основанного на CSS, как показано в примере ниже, от  <a href="http://trentrichardson.com/examples/csstooltips/">trentrichardson.com</a>:

<a href="http://dreamhelg.ru/wp-content/uploads/2009/09/trent-tooltip.jpg"><img class="aligncenter size-full wp-image-1352" title="trent-tooltip" src="http://dreamhelg.ru/wp-content/uploads/2009/09/trent-tooltip.jpg" alt="trent-tooltip" width="500" height="203" /></a>

<strong>Фото-галерея</strong>

<a href="http://line25.com/tutorials/how-to-create-a-pure-css-polaroid-photo-gallery">Polaroid Photo Gallery</a>, использует некоторые возможности CSS3 вместе с z-index, для создания фото-галереи, с забавным эффектом наведения.

<a href="http://dreamhelg.ru/wp-content/uploads/2009/09/line25.jpg"><img class="aligncenter size-full wp-image-1353" title="line25" src="http://dreamhelg.ru/wp-content/uploads/2009/09/line25.jpg" alt="line25" width="500" height="400" /></a>

<a href="http://www.sohtanaka.com/web-design/fancy-thumbnail-hover-effect-w-jquery">Fancy Thumbnail Hover Effect</a> – здесь, значение z-index изменяется с помощью JQuery-скрипта.

<a href="http://dreamhelg.ru/wp-content/uploads/2009/09/fancy-hover.jpg"><img class="aligncenter size-full wp-image-1354" title="fancy-hover" src="http://dreamhelg.ru/wp-content/uploads/2009/09/fancy-hover.jpg" alt="fancy-hover" width="500" height="300" /></a>

<strong>LightBox</strong>

Существует огромное количество качественных скриптов light box, для бесплатного использования, например плагин к JQuery <a href="http://fancybox.net/">FancyBox</a>. Большинство, если не все они, используют свойство z-index:

<a href="http://dreamhelg.ru/wp-content/uploads/2009/09/fancybox-light.jpg"><img class="aligncenter size-full wp-image-1355" title="fancybox-light" src="http://dreamhelg.ru/wp-content/uploads/2009/09/fancybox-light.jpg" alt="fancybox-light" width="500" height="400" /></a>

Скрипты Light box используют полупрозрачное PNG-изображение, для затемнения фона, в то время как новый элемент, похожий на окно &lt;div&gt;, отображается на переднем плане. PNG-слой и &lt;div&gt; используют свойство z-index, для того чтобы расположить эти элементы поверх всех остальных элементов на странице.

Перевод статьи "<a href="http://www.smashingmagazine.com/2009/09/15/the-z-index-css-property-a-comprehensive-look/">The Z-Index CSS Property: A Comprehensive Look</a>", автор <strong>Louis Lazaris</strong>]]></description>
		<wfw:commentRss>http://dreamhelg.ru/2009/09/css-property-z-index/feed/</wfw:commentRss>
		<slash:comments>28</slash:comments>
		</item>
	</channel>
</rss>

