<?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>Code-Is-Art &#187; CSS</title>
	<atom:link href="http://www.codeisart.ru/rubric/css/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.codeisart.ru</link>
	<description>Статьи по SEO, дизайну и программированию. Переводы на веб-тематику. Исследования и наработки в области интернет-технологий.</description>
	<lastBuildDate>Tue, 08 Nov 2011 13:43:11 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Округлые уголки, CSS</title>
		<link>http://www.codeisart.ru/okruglye-ugolki-css-urok-1/</link>
		<comments>http://www.codeisart.ru/okruglye-ugolki-css-urok-1/#comments</comments>
		<pubDate>Thu, 09 Apr 2009 13:03:48 +0000</pubDate>
		<dc:creator>Octane</dc:creator>
				<category><![CDATA[CSS]]></category>

		<guid isPermaLink="false">http://www.codeisart.ru/?p=1432</guid>
		<description><![CDATA[В этой статье мы рассмотрим пример создания панелей веб-сайта с округлыми углами на заранее известном сплошном цвете фона, при этом панели будут как угодно изменять свои размеры. I. Начнем работу с Adobe Photoshop: Создадим новое изображение (Ctrl+N) небольшого размера, например: 300х200 пикселей, на белом фоне; Воспользуемся инструментом Rounded Rectangle Tool (U). Поставим радиус округления углов [...]]]></description>
			<content:encoded><![CDATA[<p>В этой статье мы рассмотрим пример создания панелей веб-сайта с округлыми углами на заранее известном сплошном цвете фона, при этом панели будут как угодно изменять свои размеры.</p>
<p><span id="more-1432"></span></p>
<p><b>I. </b>Начнем работу с Adobe Photoshop:</p>
<ol>
<li>Создадим новое изображение (Ctrl+N) небольшого размера, например: 300х200 пикселей, на белом фоне;</li>
<li>Воспользуемся инструментом <q>Rounded Rectangle Tool</q> (U). Поставим радиус округления углов <q>Radius</q> равным 10 пикселей, и управление размерностью добавляемого объекта <q>Round Rectangle Options</q> &#8212; Unconstrained<br /><img src="http://www.codeisart.ru/files/css/lesson_1/img/css_lesson-1_img-1.gif" alt="" /><br />Выберем какой-нибудь цвет для панели, например: <span style="border: 1px solid #222; background: #74c44c;">&nbsp;#74c44c&nbsp;</span><br />Используем данный инструмент на нашем холсте, затем нажмем правой кнопкой мыши в панели <q>Слои (Layers)</q> по названию появившегося слоя <q>Shape 1</q> и выберем пункт <q>Resterize Layer</q>. В итоге должно получиться что-то похожее на изображение ниже:<br /><img src="http://www.codeisart.ru/files/css/lesson_1/img/css_lesson-1_img-2.gif" alt="" /></li>
<li>Увеличим масштаб изображения до максимального (Ctrl++) и используя инструмент <q>Crop Tool</q> (C) выделим левый верхний угол нашей фигуры (Rounded Rectangle) как показано на рисунке<br /><img src="http://www.codeisart.ru/files/css/lesson_1/img/css_lesson-1_img-3.gif" alt="" /><br />Т.е. захватим только область где идет скругление углов, все что залито сплошным не попадет в зону выреза. Далее нажмем правой кнопкой мыши внутри выделенного прямоугольника и выберем пункт <q>Crop</q>, получим:<br /><img src="http://www.codeisart.ru/files/css/lesson_1/img/css_lesson-1_img-4.gif" alt="" /></li>
<li>Сохраним полученное изображение в файл, для этого нажмем Ctrl+Shift+Alt+S или выберем пункт <q>Save for Web (Сохранить для Веб)</q> в меню <q>File (Файл)</q>. В появившемся окне проделаем следующие настройки:
<ol style="list-style-type: lower-alpha;">
<li><q>GIF</q> &#8212; формат в который будем сохранять изображение;</li>
<li><q>Adaptive</q> &#8212; режим коррекции цветом, в нашем случае является наилучшим;</li>
<li>Параметры уменьшающие качество и четкость изображения (Dieter, Lossy, Web Snap) выключаем и ставим на минимум;</li>
<li>Убираем галочку напротив <q>Transparency (Прозрачность)</q>;</li>
<li>Выберем количество цветов <q>Colors</q> так чтобы не было потери качества;</li>
<li>Параметр <q>Matte</q> устанавливаем в значение <q>none</q></li>
<li>Далее нажимаем кнопку <q>Save (Сохранить)</q> и сохраняем изображение, например под именем: <q>panel_top_left.gif</q><br /><img src="http://www.codeisart.ru/files/css/lesson_1/img/css_lesson-1_img-5.gif" alt="" /></li>
</ol>
</li>
<li>Проделаем пункты 3-4 с тремя оставшимися углами, в итоге получим набор изображений:
<ol style="list-style-type: lower-alpha;">
<li><img src="http://www.codeisart.ru/files/css/lesson_1/img/panel_top_left.gif" alt="panel_top_left" class="left" /> <q>panel_top_left.gif</q> &#8212; левый верхний угол;</li>
<li><img src="http://www.codeisart.ru/files/css/lesson_1/img/panel_top_right.gif" alt="panel_top_right" class="left" /> <q>panel_top_right.gif</q> &#8212; правый верхний угол;</li>
<li><img src="http://www.codeisart.ru/files/css/lesson_1/img/panel_bottom_left.gif" alt="panel_bottom_left" class="left" /> <q>panel_bottom_left.gif</q> &#8212; левый нижний угол;</li>
<li><img src="http://www.codeisart.ru/files/css/lesson_1/img/panel_bottom_right.gif" alt="panel_bottom_right" class="left" /> <q>panel_bottom_right.gif</q> &#8212; правый нижний угол.</li>
</ol>
</li>
</ol>
<p>На этом работа с Adobe Photoshop закончена.</p>
<p><b>II. </b>Далее действия могут производится в любом текстовом редакторе, например <q>Notepad (Блокнот)</q>. Рекомендуем воспользоваться специализированным решением, например <q>Adobe Dreamweaver</q>, <q>ActiveState Komodo Edit</q>, <q>PSPad</q> и др.</p>
<ol>
<li>Создадим <q>html</q> &#8212; документ (далее планируется что, читатель данной статьи обладает начальными знаниями HTML и CSS);</li>
<li>Добавим 4 вложенных друг в друга тега &lt;div&gt;
<pre><span style="color: #009;">&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;</span>Hello World !<span style="color: #009;">&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;</span></pre>
</li>
<li>Опишем для первого тега &lt;div&gt; класс и назовем его <q>panel</q>:
<pre><span style="color: #f0f;">.panel {</span> <span style="color: #009;"><strong>background:</strong> #74c44c url(panel_top_left.gif) top left no-repeat;</span> <span style="color: #f0f;">}</span></pre>
<p>		Цвет фона следует задать только у первого (родителького) тега &lt;div&gt;;</p>
</li>
<li>Далее относительно <q>родительского</q> тега &lt;div&gt; опишем стили для всех вложенных тегов &lt;div&gt;:
<pre><span style="color: #f0f;">.panel div {</span>
<span style="color: #009;">	<strong>background:</strong> url(panel_top_right.gif) top right no-repeat;</span>
<span style="color: #f0f;">}</span>
<span style="color: #f0f;">.panel div div {</span>
<span style="color: #009;">	<strong>background:</strong> url(panel_bottom_left.gif) bottom left no-repeat;</span>
<span style="color: #f0f;">}</span>
<span style="color: #f0f;">.panel div div div {</span>
<span style="color: #009;">	<strong>background:</strong> url(panel_bottom_right.gif) bottom right no-repeat;</span>
<span style="color: #f0f;">}</span></pre>
<p>Т.е. для каждого тега &lt;div&gt; задаем в виде неповторяющегося фона ранее созданные изображения. Для первого тега &lt;div&gt; фоном будет изображение <q>panel_top_left.gif</q>, которое с помощью комбинации параметров <q>top left</q> свойства <q>background</q> разместим в верхнем левом углу. Изображение <q>panel_top_right.gif</q>, являющееся фоном первого вложенного тега &lt;div&gt; в тег &lt;div&gt; с классом <q>panel</q> с помощью комбинации параметров <q>top right</q> свойства <q>background</q> разместим в верхнем правом углу и т.д.</p>
</li>
<li>Опишем отступ текста от краев панели и применим некоторое оформление к тексту, который будет содержаться внутри панели:
<pre><span style="color: #f0f;">.panel div div div {</span>
<span style="color: #009;">	<strong>background:</strong> url(panel_bottom_right.gif) bottom right no-repeat;</span>
	<span style="color: #009;"><strong>padding:</strong> 15px;</span>
	<span style="color: #009;"><strong>color:</strong> #fff;</span>
	<span style="color: #009;"><strong>text-align:</strong> center;</span>
<span style="color: #f0f;">}</span></pre>
</li>
<li>Соберем теперь все это в один документ:
<pre><span style="color: #009;">&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Strict//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.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=windows-1251&quot; /&gt;
&lt;title&gt;Округлые уголки (CSS: Урок № 1)&lt;/title&gt;</span>
<span style="color: #f0f;"><strong>&lt;style type=&quot;text/css&quot;&gt;</strong>
.panel {</span>
	<span style="color: #009;"><strong>background:</strong> #74c44c url(panel_top_left.gif) top left no-repeat;
	width: 200px;</span>
<span style="color: #f0f;">}
.panel div {</span>
	<span style="color: #009;"><strong>background:</strong> url(panel_top_right.gif) top right no-repeat;</span>
<span style="color: #f0f;">}
.panel div div {</span>
	<span style="color: #009;"><strong>background:</strong> url(panel_bottom_left.gif) bottom left no-repeat;</span>
<span style="color: #f0f;">}
.panel div div div {</span>
	<span style="color: #009;"><strong>background:</strong> url(panel_bottom_right.gif) bottom right no-repeat;
	<strong>padding:</strong> 15px;
	<strong>color:</strong> #fff;
	<strong>text-align:</strong> center;</span>
<span style="color: #f0f;">}
<strong>&lt;/style&gt;</strong></span>
<span style="color: #009;">&lt;/head&gt;
&lt;body&gt;
	&lt;div class=&quot;<strong>panel</strong>&quot;&gt;
		&lt;div&gt;
			&lt;div&gt;
				&lt;div&gt;</span>Hello World !<span style="color: #009;">&lt;/div&gt;
			&lt;/div&gt;
		&lt;/div&gt;
	&lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;</span></pre>
<p>		и получим результат:</p>
<div style="background: #74c44c url(http://www.codeisart.ru/files/css/lesson_1/img/panel_top_left.gif) top left no-repeat !important; width: 200px; margin: 10px 0;">
<div style="background: url(http://www.codeisart.ru/files/css/lesson_1/img/panel_top_right.gif) top right no-repeat !important;">
<div style="background: url(http://www.codeisart.ru/files/css/lesson_1/img/panel_bottom_left.gif) bottom left no-repeat !important;">
<div style="background: url(http://www.codeisart.ru/files/css/lesson_1/img/panel_bottom_right.gif) bottom right no-repeat !important; padding: 15px; color: #fff; text-align: center;">Hello World !</div>
</div>
</div>
</div>
<div style="background: #74c44c url(http://www.codeisart.ru/files/css/lesson_1/img/panel_top_left.gif) top left no-repeat !important; width: 200px; margin: 10px 0;">
<div style="background: url(http://www.codeisart.ru/files/css/lesson_1/img/panel_top_right.gif) top right no-repeat !important;">
<div style="background: url(http://www.codeisart.ru/files/css/lesson_1/img/panel_bottom_left.gif) bottom left no-repeat !important;">
<div style="background: url(http://www.codeisart.ru/files/css/lesson_1/img/panel_bottom_right.gif) bottom right no-repeat !important; padding: 15px; text-align: center;">Наша панель может изменять свои размеры, как в высоту, так и в ширину, при этом качество округления уголков не теряется</div>
</div>
</div>
</div>
<div style="background: #74c44c url(http://www.codeisart.ru/files/css/lesson_1/img/panel_top_left.gif) top left no-repeat !important; width: 300px; margin: 10px 0;">
<div style="background: url(http://www.codeisart.ru/files/css/lesson_1/img/panel_top_right.gif) top right no-repeat !important;">
<div style="background: url(http://www.codeisart.ru/files/css/lesson_1/img/panel_bottom_left.gif) bottom left no-repeat !important;">
<div style="background: url(http://www.codeisart.ru/files/css/lesson_1/img/panel_bottom_right.gif) bottom right no-repeat !important; padding: 15px; text-align: center;">Создавайте сайты так,<br />чтобы они радовали глаз!</div>
</div>
</div>
</div>
</li>
</ol>
<p><strong>Заключение:</strong> данный способ позволяет создать эффект округления уголков контейнеров, находящихся на заранее известном сплошном цвете фона (в нашем случае белый), как создать такой эффект в случае градиентного или текстурированного фона, рассмотрим в следующей статье.<br />Так же стоит отметить, что при наличии большого количества разноцветных панелей, сделанных таким способом, получается большое количество запросов на сервер, например, у нас есть 5 цветов панелей, по 4 файла на каждую, уже получается 20 изображений, в этом случае такой способ не рекомендуется использовать. О том как уменьшить количество запросов изображений на сервер, а так же почему лучше использовать фоновые изображения рассмотрим отдельно в ближайших статьях.</p>
<p><small>P.S.: Когда Все браузеры будут поддерживать CSS3, такой пример можно будет осуществить по средством одного тега &lt;div&gt; и одного CSS-класса к нему, т.к. будет существовать возможность задать сразу несколько фоновых рисунков для одного элемента.</small></p>
<blockquote><p>Статья перенесена из нашего корпоративного блога ввиду полной переделки сайта. Подробнее <a href="http://www.codeisart.ru/webpp-records-replace/">можно узнать тут</a>.</p>
</blockquote>
<p>Компания <i>Web++</i>&nbsp;&mdash;&nbsp;<a title="Создание сайтов в Волгограде" href="http://www.webpp.ru/">создание сайтов Волгоград</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.codeisart.ru/okruglye-ugolki-css-urok-1/feed/</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
		<item>
		<title>CSS-селекторы в js-core</title>
		<link>http://www.codeisart.ru/js-core-css-selectors/</link>
		<comments>http://www.codeisart.ru/js-core-css-selectors/#comments</comments>
		<pubDate>Mon, 12 Jan 2009 13:10:48 +0000</pubDate>
		<dc:creator>Octane</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[js-core]]></category>

		<guid isPermaLink="false">http://www.codeisart.ru/?p=1087</guid>
		<description><![CDATA[Встроенной поддержки механизма выборки элементов с&#160;использованием CSS-селекторов&#160;нет, но&#160;легко&#160;внедрить один&#160;из&#160;существующих. Возьмем готовые решения Sizzle, Peppy и&#160;Yass, и&#160;сделаем расширение для&#160;js-core, которое будет автоматически преобразовывать список элементов, выдаваемый этими&#160;движками, в&#160;объект для&#160;работы со&#160;списками узлов, предусмотренный в&#160;framework&#8217;е. Sizzle core.query = function(selector, context) { return new core.list(Sizzle(selector, context), false); }; core.prototype.query = function(selector) { return new core.list(Sizzle(selector, this.node), false); }; Peppy [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.codeisart.ru/wp-content/uploads/2009/01/js-core-css-selectors.png" alt="Логотип js-core" width="192" height="192" class="left" />Встроенной поддержки механизма выборки элементов с&nbsp;использованием CSS-селекторов&nbsp;нет, но&nbsp;легко&nbsp;внедрить один&nbsp;из&nbsp;существующих.</p>
<p>Возьмем готовые решения <a href="http://github.com/jeresig/sizzle/tree/master/sizzle.js">Sizzle</a>, <a href="http://jamesdonaghue.com/static/peppy/">Peppy</a> и&nbsp;<a href="http://yass.webo.in/">Yass</a>, и&nbsp;сделаем расширение для&nbsp;js-core, которое будет автоматически преобразовывать список элементов, выдаваемый этими&nbsp;движками, в&nbsp;объект для&nbsp;работы со&nbsp;списками узлов, предусмотренный в&nbsp;framework&#8217;е.</p>
<p><span id="more-1087"></span></p>
<h3>Sizzle</h3>
<pre><code class="javascript">core.query = function(selector, context) {
    return new core.list(Sizzle(selector, context), false);
};
core.prototype.query = function(selector) {
    return new core.list(Sizzle(selector, this.node), false);
};</code></pre>
<h3>Peppy</h3>
<pre><code class="javascript">core.query = function(selector, context) {
    return new core.list(peppy.query(selector, context), false);
};
core.prototype.query = function(selector) {
    return new core.list(peppy.query(selector, this.node), false);
};</code></pre>
<h3>Yass</h3>
<pre><code class="javascript">core.query = function(selector, context) {
    return new core.list(yass(selector, context), false);
};
core.prototype.query = function(selector) {
    return new core.list(yass(selector, this.node), false);
};</code></pre>
<p>Добавьте одно&nbsp;из&nbsp;этих&nbsp;расширений сразу&nbsp;после&nbsp;загрузки js-core и&nbsp;соответствующего движка выборки элементов по&nbsp;CSS-селекторам.</p>
<p>Рассмотрим, как&nbsp;это&nbsp;можно&nbsp;использовать. Возьмем следующий XHTML-код:</p>
<pre><code class="html">&lt;ul id=&quot;list&quot;&gt;
    &lt;li&gt;First list item&lt;/li&gt;
    &lt;li&gt;Second list item&lt;/li&gt;
    &lt;li&gt;Third list item&lt;/li&gt;
    &lt;li&gt;Fourth list item&lt;/li&gt;
    &lt;li&gt;Fifth list item&lt;/li&gt;
    &lt;li&gt;Sixth list item&lt;/li&gt;
    &lt;li&gt;Seventh list item&lt;/li&gt;
    &lt;li&gt;Eighth list item&lt;/li&gt;
&lt;/ul&gt;</code></pre>
<p>Опишем CSS-класс:</p>
<pre><code class="css">.odd {
    background: #ffc;
}</code></pre>
<p>Теперь, с&nbsp;помощью JavaScript, добавим класс <var>odd</var> всем&nbsp;нечетным элементам списка <var>list</var>:</p>
<pre><code class="javascript">$.query('#list > li:nth-child(odd)').each('addClass', 'odd');

// или
$('list').query('li:nth-child(odd)').each('addClass', 'odd');</code></pre>
<p>Получим так называемую «зебру» из элементов списка:</p>
<pre><code class="html">&lt;ul id=&quot;list&quot;&gt;
    &lt;li class=&quot;odd&quot;&gt;First list item&lt;/li&gt;
    &lt;li&gt;Second list item&lt;/li&gt;
    &lt;li class=&quot;odd&quot;&gt;Third list item&lt;/li&gt;
    &lt;li&gt;Fourth list item&lt;/li&gt;
    &lt;li class=&quot;odd&quot;&gt;Fifth list item&lt;/li&gt;
    &lt;li&gt;Sixth list item&lt;/li&gt;
    &lt;li class=&quot;odd&quot;&gt;Seventh list item&lt;/li&gt;
    &lt;li&gt;Eighth list item&lt;/li&gt;
&lt;/ul&gt;</code></pre>
<p>В&nbsp;функции <code>$.query(…)</code> вторым&nbsp;параметром можно&nbsp;указать контекст поиска. Это&nbsp;бывает&nbsp;удобно, например, при&nbsp;поиске элементов ввода внутри форм или&nbsp;нахождении элементов в&nbsp;XML-данных, пришедших с&nbsp;сервера через&nbsp;AJAX.</p>
<pre><code class="javascript">// найти все чекбоксы в первой форме документа
$.query('input[type="checkbox"]', document.forms[0]);</code></pre>
<p>В&nbsp;методе <code>$('id'|node).query('selector')</code>, в&nbsp;качестве контекста поиска, автоматически передается текущий элемент.</p>
<p>Скачать: <a href="http://www.codeisart.ru/wp-content/uploads/2009/01/js-core-css-selectors.zip">пример</a>, <a href="http://code.google.com/p/js-core/downloads/list">js-core</a>.</p>
<p><b>В рамках акции</b> &laquo;<a href="http://www.codeisart.ru/obmen-postovimi/" title="Акция обмена постовыми">Обмен постовыми</a>&raquo;:</p>
<ul>
<li><a href="http://anna-volkova.blogspot.com/" title="Записки микростокового иллюстратора">Записки микростокового иллюстратора</a>&nbsp;&mdash;&nbsp;блог о том, как еще можно заработать в сети.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.codeisart.ru/js-core-css-selectors/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Использование CSS подмены текста изображением и&#160;SEO. Какие могут быть последствия?</title>
		<link>http://www.codeisart.ru/is-css-image-replacement-good-for-seo/</link>
		<comments>http://www.codeisart.ru/is-css-image-replacement-good-for-seo/#comments</comments>
		<pubDate>Tue, 16 Dec 2008 22:36:20 +0000</pubDate>
		<dc:creator>Skaizer</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[SEO, продвижение сайтов]]></category>
		<category><![CDATA[SEO/SEM]]></category>

		<guid isPermaLink="false">http://www.codeisart.ru/?p=971</guid>
		<description><![CDATA[Подмена текста на&#160;сайте изображением&#160;&#8212;&#160;распространенная техника среди верстальщиков. С&#160;помощью CSS вы&#160;можете спрятать текст вне поля видимости страницы на&#160;мониторе, а&#160;на&#160;его месте расположить какую-либо картинку. Для чего это нужно и как отнесутся к этому поисковые системы? Давайте приведем пример. Допустим, у&#160;нас на&#160;сайте имеется логотип в&#160;виде картинки. Следующий код реализует это: &#60;h1 class=&#34;logo&#34;&#62; &#60;img src=&#34;images/logo.jpg&#34; alt=&#34;Название логотипа или компании&#34; [...]]]></description>
			<content:encoded><![CDATA[<p><strong class="normal">Подмена текста на&nbsp;сайте изображением</strong>&nbsp;&mdash;&nbsp;распространенная техника среди верстальщиков. С&nbsp;помощью CSS вы&nbsp;можете спрятать текст вне поля видимости страницы на&nbsp;мониторе, а&nbsp;на&nbsp;его месте расположить какую-либо картинку.</p>
<p>Для чего это нужно и как отнесутся к этому поисковые системы?</p>
<p><span id="more-971"></span></p>
<p>Давайте приведем пример. Допустим, у&nbsp;нас на&nbsp;сайте имеется логотип в&nbsp;виде картинки. Следующий код реализует это:</p>
<pre><code class="html">&lt;h1 class=&quot;logo&quot;&gt;
  &lt;img src=&quot;images/logo.jpg&quot; alt=&quot;Название логотипа или компании&quot; /&gt;
&lt;/h1&gt;</code></pre>
<p>Давайте применим <strong class="normal">технику CSS-подмены</strong>. Создадим CSS-класс <code>logo</code>:</p>
<pre><code class="css">h1.logo {
width: 300px; height: 50px;
background: url(images/logo.jpg);
text-indent: -9999px;
}</code></pre>
<p>Остается немного изменить наш код логотипа:</p>
<pre><code class="html">&lt;h1 class=&quot;main-logo&quot;&gt;Название логотипа или компании &lt;/h1&gt;</code></pre>
<p>Визуально вы&nbsp;не&nbsp;найдете разницы. И&nbsp;в&nbsp;первом и&nbsp;во&nbsp;втором случае вы&nbsp;увидите изображение логотипа, и&nbsp;никакого текста.</p>
<p>Но&nbsp;давайте взглянем на&nbsp;это со&nbsp;стороны SEO. Известно, что для выделение наиболее важных ключевых слов на&nbsp;сайте (как правило, по&nbsp;которым происходит продвижение) их&nbsp;помещают в&nbsp;теги заголовков <code>&lt;h1&gt;</code>&#8230;<code>&lt;h6&gt;</code> и&nbsp;логического выделения, в&nbsp;основном <code>&lt;strong&gt;</code>, <code>&lt;em&gt;</code>.</p>
<p>Во&nbsp;втором случае, когда применяется <strong class="normal">CSS-подмена текста изображением</strong>, сам текст присутствует в&nbsp;теге <code>&lt;h1&gt;</code>. И&nbsp;поисковая система, когда будет разбирать структуру сайта, выделит этот текст, как более приоритетный на&nbsp;странице и&nbsp;придаст ему дополнительный вес.</p>
<p>Рождается вопрос, а&nbsp;не&nbsp;противоречит&nbsp;ли это правилам поисковых систем. То&nbsp;есть фактически, мы&nbsp;предоставляем пользователю и&nbsp;поисковой системе различающуюся информацию.</p>
<h3>За&nbsp;и&nbsp;против</h3>
<p>Итак, давайте поглубже вникнем в&nbsp;суть этого метода с&nbsp;точки зрения SEO. Почему оптимизаторы начинают использовать эту технику?</p>
<p>Никто не&nbsp;мешает заменять изображениями большие блоки текста, насыщенные ключевыми словами. Ведь пользователю эти блоки не&nbsp;будут видны, а&nbsp;поисковая система &laquo;проглотит&raquo; их&nbsp;и&nbsp;будет использовать в&nbsp;ранжировании. Этим SEO-специалисты и&nbsp;пользуются.</p>
<p>Но&nbsp;может&nbsp;ли данная техника повлечь бан всего сайта или наложения какого-либо фильтра?</p>
<h3>По&nbsp;словам Google?</h3>
<p>Мэтт Катс, глава отдела по&nbsp;борьбе с&nbsp;поисковым спамом в&nbsp;Google, однажды сказал:</p>
<blockquote><p>Использование CSS-подмены текста изображение является допустимой техникой. И&nbsp;Google не&nbsp;будет штрафовать сайт за&nbsp;ее&nbsp;использование, при условии, что соблюдены правила: текст на&nbsp;картинке должен полностью соответствовать заменяемому тексту. Например, если ваша компания называется &laquo;Expo Markers&raquo;, что и&nbsp;изображено на&nbsp;логотипе, и&nbsp;скрытый текст тоже &laquo;Expo Markers&raquo;, то&nbsp;вы&nbsp;можете не&nbsp;беспокоиться. Никакого нарушения правил здесь нет. Но&nbsp;если скрытый текст: &laquo;Expo Markers cheap online discount buy online Expo Markers sale &#8230;&raquo;, то&nbsp;есть повод для беспокойства, потому как Google может оштрафовать сайт, или что еще хуже&nbsp;&mdash;&nbsp;забанить.</p></blockquote>
<p>Итак, стало ясно, что если <strong class="normal">CSS-подмена текста изображением</strong> применяется не&nbsp;для поискового спама, то&nbsp;причин для беспокойства нет.</p>
<p>Используете&nbsp;ли вы&nbsp;подобный метод подмены и&nbsp;были&nbsp;ли у&nbsp;вас проблемы с&nbsp;поисковиками по&nbsp;этому поводу?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.codeisart.ru/is-css-image-replacement-good-for-seo/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Все, что вы&#160;знали о&#160;CSS&#160;&#8212;&#160; неправда</title>
		<link>http://www.codeisart.ru/everything-you-know-about-css-is-wrong/</link>
		<comments>http://www.codeisart.ru/everything-you-know-about-css-is-wrong/#comments</comments>
		<pubDate>Sun, 16 Nov 2008 11:00:17 +0000</pubDate>
		<dc:creator>Skaizer</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[Переводы]]></category>

		<guid isPermaLink="false">http://www.codeisart.ru/?p=814</guid>
		<description><![CDATA[После релиза, IE8&#160;будет поддерживать множество новых параметров для аттрибута дисплея CSS, включая параметры, относящиеся к&#160;таблицам: table, table-row и&#160;table-cell&#160;&#8212;&#160;и&#160;это последний крупный браузер с&#160;их&#160;поддержкой. Это событие обозначит конец сложных методов CSS&#160;разметки и&#160;забьет последний гвоздь в&#160;гроб использования HTML таблиц для верстки. В&#160;итоге, создание сеток разметки табличного вида будет быстрее и&#160;проще. Применение параметров табличных аттрибутов к&#160;элементам веб-страницы заставляет элементы [...]]]></description>
			<content:encoded><![CDATA[<p>После релиза, <abbr title="Internet Explorer 8">IE8</abbr>&nbsp;будет поддерживать множество новых параметров для аттрибута дисплея CSS, включая параметры, относящиеся к&nbsp;таблицам: <code>table</code>, <code>table-row</code> и&nbsp;<code>table-cell</code>&nbsp;&mdash;&nbsp;и&nbsp;это последний крупный браузер с&nbsp;их&nbsp;поддержкой. Это событие обозначит конец сложных методов CSS&nbsp;разметки и&nbsp;забьет последний гвоздь в&nbsp;гроб использования HTML таблиц для верстки. В&nbsp;итоге, создание сеток разметки табличного вида будет быстрее и&nbsp;проще.</p>
<p>Применение параметров табличных аттрибутов к&nbsp;элементам веб-страницы заставляет элементы подражать свойствам изображения с&nbsp;помощью их&nbsp;табличных эквивалентов. В&nbsp;этой статье я&nbsp;покажу каким образом это будет оказывать большое влияние на&nbsp;способы использования CSS для разметки веб-страниц.</p>
<p><span id="more-814"></span></p>
<p>CSS таблицы решают все проблемы, появляющиеся при использовании абсолютной системы коодинат или флоатов, для создания многострочной разметки в&nbsp;современных браузерах. Задание параметра <code>table</code> для аттрибута <code>display</code> позволит вам отобразить элементы так, как будто они являются элементами таблицы. Главное преимущество табличной разметки CSS&nbsp;&mdash;&nbsp;это возможность легкого определения границ клетки, позволяющее нам добавить к&nbsp;ней фон и&nbsp;прочее без семантических проблем выделения нетабличных элементов, как в&nbsp;HTML таблице документа.</p>
<pre><code class="html">&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"&gt;
&lt;html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"&gt;
  &lt;head&gt;
    ⋮ HTML head content…
  &lt;/head&gt;
  &lt;body&gt;
    &lt;div id="wrapper"&gt;
      &lt;div id="header"&gt;&lt;/div&gt;
      &lt;div id="main"&gt;
        &lt;div id="nav"&gt;
          ⋮ navigation column content…
        &lt;/div&gt;
        &lt;div id="extras"&gt;
          ⋮ news headlines column content…
        &lt;/div&gt;
        &lt;div id="content"&gt;
          ⋮ main article content…
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/body&gt;
&lt;/html&gt;
</code></pre>
<p>HTML код определяет нужный порядок вывода данных. Первой идет столбец <i>nav</i>, затем <i>extras</i>, последним идет <i>content</i>.</p>
<p>Также нам необходимо написать требуемый CSS код:</p>
<pre><code class="css">#main {
  display: table;
  border-collapse: collapse;
} 

#nav {
  display: table-cell;
  width: 180px;
  background-color: #e7dbcd;
} 

#extras {
  display: table-cell;
  width: 180px;
  padding-left: 10px;
  border-right: 1px dotted #d7ad7b;
} 

#content {
  display: table-cell;
  width: 380px;
  padding-left: 10px;
}</code></pre>
<p>Только что созданная нами <strong class="normal">табличная разметка</strong> будет корректно отображаться как в&nbsp;<abbr title="Internet Explorer 8">IE8</abbr>,&nbsp;так и&nbsp;в&nbsp;Firefox, Safari и&nbsp;Opera.</p>
<p><img src="http://www.codeisart.ru/wp-content/uploads/2008/11/css-table1.png" alt="Табличная CSS разметка" width="500" height="410" /></p>
<p>Мы&nbsp;получили разметку из&nbsp;трех столбцов равной высоты без применения особых приемов, таких как ложных столбцов с&nbsp;помощью фоновых рисунков, проблем с&nbsp;размещением или необходимости очищать <code>floats</code>!</p>
<h3>Как это работает?</h3>
<p>Аттрибут <code>display</code> позволяет вам задать ряд табличных параметров, чтобы отображать элементы так, как будто они являются элементами таблицы. Вот доступные параметры отображения:</p>
<ul>
<li><code>table</code> заставляет элемент вести себя, как элемент таблицы;</li>
<li><code>table-row</code> заставляет элемент вести себя, как элемент строки таблицы;</li>
<li><code>table-cell</code> заставляет элемент вести себя, как элемент ячейки таблицы;</li>
<li><code>table-row-group</code> заставляет элемент вести себя, как элемент группы строк таблицы;</li>
<li><code>table-header-group</code> заставляет элемент вести себя, как элемент группы заголовков таблицы;</li>
<li><code>table-footer-group</code> заставляет элемент вести себя, как элемент группы нижнего колонтитула;</li>
<li><code>table-caption</code> заставляет элемент вести себя, как элемент заголовка таблицы;</li>
<li><code>table-column</code> заставляет элемент вести себя, как элемент столбца таблицы;</li>
<li><code>table-column-group</code> заставляет элемент вести себя, как элемент группы столбцов таблицы.</li>
</ul>
<h3>Подождите, разве разметка таблицами&nbsp;&mdash;&nbsp;это правильно?</h3>
<p>Допустим, что вы&nbsp;не&nbsp;совсем согласны с&nbsp;примером, который мы&nbsp;только что привели&nbsp;&mdash;&nbsp;в&nbsp;конце концов, разве зашитники веб стандартов не&nbsp;настаивали годами на&nbsp;том, что вы&nbsp;не&nbsp;должны использовать таблицы для разметки?</p>
<p>HTML элемент <code>table</code>&nbsp;&mdash;&nbsp;это семантическая структура: он&nbsp;описывает, что из&nbsp;себя представляют данные. Поэтому, вам нужно использовать <code>table</code>, только если данные, которые вы&nbsp;размещаете&nbsp;&mdash;&nbsp;табличные, например, финансовая информация. Она обычно размещается на&nbsp;компьютере электронной таблицей, поэтому наверное следует определять её&nbsp;как таблицу в&nbsp;HTML.</p>
<p>С&nbsp;другой стороны, параметр <code>table</code> аттрибута <code>display</code>, просто показывает как что-то должно выглядеть в&nbsp;браузере и&nbsp;не&nbsp;имеет семантического значения!</p>
<blockquote><p>Использование элемента <code>table</code> для вашей разметки говорит агенту пользователя: &laquo;Это табличные данные&raquo;. А&nbsp;применение связки div-ов просит его отборазить их&nbsp;визуально определенным образом, если это возможно.</p></blockquote>
<p>Конечно&nbsp;же, нам не&nbsp;следует использовать <code>display: table;</code> в&nbsp;связке элементов div, когда мы&nbsp;имеем действительно табличные данные. Наш простой пример, описанный выше, заставляет нашу разметку выглядеть так, как будто у&nbsp;нас есть однострочная таблица с&nbsp;тремя ячейками, не&nbsp;требуется большое воображение, чтобы осознать потенциал этой техники для легкого создания комплексных видов разметок.</p>
<h3>Анонимные элементы таблиц</h3>
<p>Таблицы CSS придерживаются обычных правил табличной разметки, которые открывают очень мощное свойство табличных разметок CSS: пропущенные элементы таблиц создаются анонимно самим браузером. Спецификация CSS 2.1&nbsp;утверждает:</p>
<p>Отличные от&nbsp;HTML документальные языки могут не&nbsp;содержать всех элементов модели таблицы CSS 2.1. В&nbsp;этих случаях &laquo;пропущенные&raquo; элементы дожны быть созданы, чтобы табличная модель заработала. Любой элемент таблицы автоматически сгенерирует вокруг себя необходимые анонимные объекты таблицы, состоящие по&nbsp;крайней мере из&nbsp;трех вложенных объектов, соответсвующих элментам &laquo;<code>table</code>&raquo;/&laquo;<code>inline-table</code>&raquo;, &laquo;<code>table-row</code>&raquo;, и&nbsp;&laquo;<code>table-cell</code>&raquo;.</p>
<p>Это значит, что если мы&nbsp;используем <code>display: table-cell;</code> без предварительного размещения ячейки в&nbsp;месте, относящемся к&nbsp;<code>display: table-row;</code>, то&nbsp;строка будет подразумеваться&nbsp;&mdash;&nbsp;браузер будет вести себя так, как будто объявленная строка на&nbsp;самом деле есть.</p>
<p>Давайте используем простой пример, чтобы объяснить этот прием: разметку из&nbsp;трех ячеек, показанную ниже. Мы&nbsp;рассмотрим три разных примера HTML кода, которые приведут к&nbsp;одинаковой визуальной разметке.</p>
<p><img src="http://www.codeisart.ru/wp-content/uploads/2008/11/css-table2.png" alt="Табличная CSS разметка - макет" width="600" height="223" /></p>
<p>Сначала пример кода, который может быть использован для создания разметки из&nbsp;трех ячеек:</p>
<pre><code class="html">&lt;div class="container"&gt;
  &lt;div class="row"&gt;
    &lt;div class="cell"&gt;CELL A&lt;/div&gt;
    &lt;div class="cell"&gt;CELL B&lt;/div&gt;
    &lt;div class="cell"&gt;CELL C&lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;</code></pre>
<p>Набор вложенных элементов div не&nbsp;выглядит как-то особенно, но&nbsp;скоро мы&nbsp;это изменим. CSS тоже очень простой:</p>
<pre><code class="css">.container {
  display: table;
}

.row {
  display: table-row;
}

.cell {
  display: table-cell;
  width: 100px;
  height: 100px;
  border: 1px solid blue;
  padding: 1em;
}</code></pre>
<p>Этот CSS относит элемент с&nbsp;классом &laquo;<code>container</code>&raquo; к&nbsp;<code>display: table;</code>, элемент с&nbsp;классом &laquo;<code>row</code>&raquo; к&nbsp;<code>display: table-row;</code>, а&nbsp;элемент с&nbsp;классом &laquo;<code>cell</code>&raquo;&nbsp;&mdash;&nbsp;к&nbsp;<code>display: table-cell;</code> с&nbsp;заданием его границы, высоты и&nbsp;ширины.</p>
<p>Вышеописанная HTML разметка явно создает элементы для таблицы из&nbsp;строки с&nbsp;тремя ячейками, используя все CSS классы, созданные нами. Однако, мы&nbsp;можем уменьшить код, убирая строковые элементы div вот так:</p>
<pre><code class="html">&lt;div class="row"&gt;
  &lt;div class="cell"&gt;CELL A&lt;/div&gt;
  &lt;div class="cell"&gt;CELL B&lt;/div&gt;
  &lt;div class="cell"&gt;CELL C&lt;/div&gt;
&lt;/div&gt;</code></pre>
<p>Несмотря на&nbsp;то,&nbsp;что в&nbsp;этой разметке пропущен элемент, представляющий таблицу, она будет создана браузером, как анонимный элемент. Мы&nbsp;можем ещё сильнее сократить код:</p>
<pre><code class="html">&lt;div class="cell"&gt;CELL A&lt;/div&gt;
&lt;div class="cell"&gt;CELL B&lt;/div&gt;
&lt;div class="cell"&gt;CELL C&lt;/div&gt;</code></pre>
<p>В&nbsp;такой разметке пропущены элементы, описывающие таблицу и&nbsp;её&nbsp;строку, они оба создаются браузером, как анонимные элементы. Даже при пропуске элементов в&nbsp;разметке, конечный результат одинаков.</p>
<h3>Правила создания анонимных элементов таблицы</h3>
<p>Эти анонимные элементы создаются не&nbsp;магией, и&nbsp;они не&nbsp;будут автоматически появляться для любого недостатка вашего HTML кода. Чтобы полностью использовать преимущества анонимных элементов таблицы, желательно ознакомиться с&nbsp;правилами их&nbsp;создания. Если разметка запрашивает предполагаемый элемент, браузер создает анонимную ячейку и&nbsp;записывает ее&nbsp;CSS аттрибуту <code>display</code> одно из&nbsp;значений <code>table</code>, <code>table-row</code>, или <code>table-cell</code>, в&nbsp;зависимости от&nbsp;контекста.</p>
<p>Если у&nbsp;вас есть элемент, определенный, как <code>display: table-cell;</code>, но&nbsp;его непосредственный предок (элемент, содержащий его), не&nbsp;определен, как <code>table-row</code>, будет создан анонимный элемент <code>table-row</code>, чтобы включить в&nbsp;него ячейку и&nbsp;любые последующие родственные элементы, которые также определены <code>table-cell</code>, до&nbsp;тех пор, пока не&nbsp;попадется элемент, не&nbsp;относящийся к&nbsp;<code>table-cell</code>, таким образом они будут помещены в&nbsp;одну и&nbsp;ту&nbsp;же строку. Например, следующая разметка:</p>
<pre><code class="html">&lt;div class="cell"&gt;CELL A&lt;/div&gt;
&lt;div class="cell"&gt;CELL B&lt;/div&gt;
&lt;div class="cell"&gt;CELL C&lt;/div&gt;
&lt;div&gt;Not a cell&lt;/div&gt;</code></pre>
<p>Верхние три элемента div, имеющие класс &laquo;<code>cell</code>&raquo;, определяются в&nbsp;<code>display: table-cell;</code> и&nbsp;будут отображены друг за&nbsp;другом, как если&nbsp;бы они были в&nbsp;однострочной таблице, а&nbsp;последний элемент div не&nbsp;будет включен в&nbsp;ряд, поскольку он&nbsp;не&nbsp;относится к&nbsp;<code>display: table-cell;</code>.</p>
<p>Если элемент относится к&nbsp;<code>display: table-row;</code>, в&nbsp;то&nbsp;время как его предок не&nbsp;определен, как <code>table</code> (или <code>table-row-group</code>), будет создан анонимный элемент, отнесенный к&nbsp;<code>display: table;</code> чтобы включить в&nbsp;него ряд и&nbsp;любые последующие родственные элементы, которые также определены <code>display: table-row;</code>. Также, если элементу, определенному как <code>table-row</code>, не&nbsp;хватает элемента <code>table-cell</code> непосредственно в&nbsp;нем, будет создан анонимный элемент <code>table-cell</code>, чтобы включить в&nbsp;него все элементы, определеные как <code>table-row</code>.</p>
<p>Рассмотрим на&nbsp;примере:</p>
<pre><code class="html">&lt;div class="row"&gt;ROW A&lt;/div&gt;
&lt;div class="row"&gt;ROW B&lt;/div&gt;
&lt;div&gt;Not a row&lt;/div&gt;</code></pre>
<p>Верхние два элемента div, имеющие класс &laquo;<code>row</code>&raquo;, определяются в&nbsp;<code>display: table-row;</code> и&nbsp;будут отображены друг под другом, как если&nbsp;бы они были рядами в&nbsp;одностолбцовой таблице, а&nbsp;последний элемент div не&nbsp;будет включен в&nbsp;эту таблицу.</p>
<p>Аналогично, если элемент отнесен к&nbsp;любому другому параметру <code>display</code> , поддерживающему элементы, которые находятся прямо внутри родительского табличного элемента, такие как <code>table-row-group</code>, <code>table-header-group</code>, <code>table-footer-group</code>, <code>table-column</code>, <code>table-column-group</code> и&nbsp;<code>table-caption</code>, но&nbsp;не&nbsp;имеет предка, опеределенного как <code>display: table;</code>, будет создан анонимный элемент <code>table</code>, чтобы включить в&nbsp;него элемент и&nbsp;любые последующие родственные элементы, с&nbsp;подходящими значениями <code>display</code>.</p>
<h3>Другие полезные аттрибуты таблиц</h3>
<p>При использовании CSS таблиц, из-за того, что элементы соответствуют обычным правилам табличной разметки, вы&nbsp;можете также применять другие табличные CSS аттрибуты. Вот несколько из&nbsp;них, которые могут пригодиться:</p>
<h4>Table-layout</h4>
<p>Присваивание <code>table-layout</code> значение <code>fixed</code> сообщает браузеру, что таблица должна вопроизводиться по&nbsp;фиксированному алгоритму форматирования ширины ячеек. Это полезно в&nbsp;разметке с&nbsp;фиксированной шириной, которую мы&nbsp;создавали ранее.</p>
<h4>Border-collapse</h4>
<p>Так&nbsp;же, как и&nbsp;с&nbsp;обычными HTML таблицами, вы&nbsp;можете использовать аттрибут <code>border-collapse</code> для выбора используемых границ между ячейками таблицы разметки из&nbsp;<code>collapse</code> или <code>separate</code>.</p>
<h4>Border-spacing</h4>
<p>Если вы&nbsp;задали значение <code>separate</code> для аттрибута <code>border-collapse</code>, вы&nbsp;можете использовать аттрибут <code>border-spacing</code> для задания ширины пространства между границами ячеек.</p>
<h4>Создание идеальной сетки</h4>
<p>Создание сетки из&nbsp;равных по&nbsp;высоте элементов всегда было сложностью при использовании традиционных техник CSS разметки, но&nbsp;таблицы CSS очень хорошо подходят для этой задачи. Например, если мы&nbsp;хотим создать галерею картинок, состоящую из&nbsp;сетки изображений с&nbsp;названиями, похожую на&nbsp;нижеизображенную, то&nbsp;использование CSS таблиц сильно облегчает задачу.</p>
<p><img src="http://www.codeisart.ru/wp-content/uploads/2008/11/css-table3.png" alt="Табличная CSS разметка - галерея" width="600" height="574" /></p>
<p>Код для нашей галереи выглядит так:</p>
<pre><code class="html">&lt;div class="grid"&gt;
  &lt;div class="row"&gt;
    &lt;div class="image"&gt;
      &lt;img src="images/photo1.jpg" alt="A Lily" /&gt;
      &lt;p&gt;A lily in the gardens of The Vyne Country House&lt;/p&gt;
    &lt;/div&gt;
    &lt;div class="image"&gt;
      &lt;img src="images/photo3.jpg" alt="A Fuchsia plant" /&gt;
      &lt;p&gt;Fuchsia plant in my garden&lt;/p&gt;
    &lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="row"&gt;
    &lt;div class="image"&gt;
      &lt;img src="images/photo2.jpg" alt="A crazy looking Allium flower" /&gt;
      &lt;p&gt;A crazy looking flower&lt;/p&gt;
    &lt;/div&gt;
    &lt;div class="image"&gt;
      &lt;img src="images/photo4.jpg" alt="A Robin sitting on a fence" /&gt;
      &lt;p&gt;
        This robin has been visiting our garden over the summer.
        He is very friendly and doesn't seem to be too worried about sharing the garden with us.
      &lt;/p&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;</code></pre>
<p>Каждая ячейка изображения галереи содержит элемент <code>img</code> и&nbsp;заголовка в&nbsp;элементе p,&nbsp;находящегося в&nbsp;div c&nbsp;классом &laquo;<code>image</code>&raquo;. Каждая строка содержится в&nbsp;div с&nbsp;классом &laquo;<code>row</code>&raquo;, а&nbsp;вся галерея располагается в&nbsp;элементе div c&nbsp;классом &laquo;<code>grid</code>&raquo;.</p>
<p>CSS, требуемый для разметки нашей сетки очень прост:</p>
<pre><code class="css">.grid {
  display: table;
  border-spacing: 4px;
}
.row {
  display: table-row;
}
.image {
  display: table-cell;
  width: 240px;
  background-color: #000;
  border: 8px solid #000;
  vertical-align: top;
  text-align: center;
}
.image p {
  color: #fff;
  font-size: 85%;
  text-align: left;
  padding-top: 8px;
}</code></pre>
<p>Этот CSS довольно простой, но&nbsp;вы&nbsp;можете заметить, как мы&nbsp;используем аттрибут <code>border-spacing</code> для управления расстановкой наших ячеек изображений. Это самый легкий способ создания сетки разметки&nbsp;&mdash;&nbsp;и&nbsp;мы&nbsp;предотвратили все проблемы, связанные с&nbsp;равными высотами или хрупкими разметками, создаваемыми с&nbsp;помощью флоатед элементов.</p>
<h3>Применение примеров на&nbsp;практике</h3>
<p>В&nbsp;этой статье были рассмотрены основные примеры использования табличных параметров CSS аттрибута <code>display</code>, служащего долгожданной наградой в&nbsp;борьбе за&nbsp;создание надежных сеток разметки с&nbsp;использованием CSS! Мы&nbsp;разобрали многочисленные табличные параметры <code>display</code>, посмотрели на&nbsp;природу анонимных табличных элементов и&nbsp;открыли несколько полезных свойств таблиц CSS.</p>
<p>Следующий шаг за&nbsp;вами&nbsp;&mdash;&nbsp;в&nbsp;любом случае вы&nbsp;поняли потенциал использования CSS таблиц для создания сеток разметки и&nbsp;теперь сгораете от&nbsp;любопытства. Используя знания, полученные из&nbsp;этой статьи, вы&nbsp;можете начать эксперименты со&nbsp;своими собственными табличными CSS разметками.</p>
<p>Версия на&nbsp;<a href="http://www.digital-web.com/articles/everything_you_know_about_CSS_Is_wrong/">английском</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.codeisart.ru/everything-you-know-about-css-is-wrong/feed/</wfw:commentRss>
		<slash:comments>20</slash:comments>
		</item>
		<item>
		<title>W3C CSS API селекторы &#8212; методы querySelector() и querySelectorAll()</title>
		<link>http://www.codeisart.ru/w3c-css-selectors-api-the-queryselector-and-queryselectorall-methods/</link>
		<comments>http://www.codeisart.ru/w3c-css-selectors-api-the-queryselector-and-queryselectorall-methods/#comments</comments>
		<pubDate>Mon, 03 Nov 2008 12:20:47 +0000</pubDate>
		<dc:creator>Skaizer</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://www.codeisart.ru/?p=761</guid>
		<description><![CDATA[Методы querySelector() и&#160;querySelectorAll() позволяют принимают в&#160;качестве аргументов CSS-селектор и&#160;возвращают найденные элементы в&#160;виде элементов DOM. Разница между этими методами заключается лишь в&#160;количестве возвращаемых элементов&#160;&#8212; первый найденный или все найденные в&#160;документе. Кроме того, что они более универсальны, чем getElementById() и&#160;getElementByTagName(), наши 2&#160;метода отличаются невероятной скоростью поиска, так как они используют преимущества тех&#160;же механизмов, которые использует браузер для [...]]]></description>
			<content:encoded><![CDATA[<p>Методы <code class="javascript">querySelector()</code> и&nbsp;<code class="javascript">querySelectorAll()</code> позволяют принимают в&nbsp;качестве аргументов <abbr title="Cascading Style Sheets">CSS</abbr>-селектор и&nbsp;возвращают найденные элементы в&nbsp;виде элементов <abbr title="Document Object Model">DOM</abbr>.</p>
<p><span id="more-761"></span></p>
<p>Разница между этими методами заключается лишь в&nbsp;количестве возвращаемых элементов&nbsp;&#8212; первый найденный или все найденные в&nbsp;документе. Кроме того, что они более универсальны, чем <code class="javascript">getElementById()</code> и&nbsp;<code class="javascript">getElementByTagName()</code>, наши 2&nbsp;метода отличаются невероятной скоростью поиска, так как они используют преимущества тех&nbsp;же механизмов, которые использует браузер для идентификациии элементов стиля во&nbsp;время просмотра <abbr title="Cascading Style Sheets">CSS</abbr> страницы.</p>
<blockquote><p>Если говорить о&nbsp;совместимости с&nbsp;браузерами, то <code class="javascript">querySelector()</code> и&nbsp;<code class="javascript">querySelectorAll()</code> поддерживаются в&nbsp;<strong>Firefox 3.1+</strong>, <strong>IE8+</strong> (только в&nbsp;стандартном режиме IE8), и&nbsp;<strong>Safari 3.1+</strong>.</p></blockquote>
<h3>Метод querySelector()</h3>
<p>Этот метод относится как к&nbsp;объектам &laquo;Document&raquo;, так и&nbsp;к&nbsp;&laquo;Element&raquo;. Это позволяет вам запрашивать либо всю цепочку элементов всего документа, либо какую-либо ее&nbsp;часть в&nbsp;поиске нужного вам элемента.</p>
<p>Он принимает в&nbsp;качестве аргумента параметра любой <abbr title="Cascading Style Sheets">CSS</abbr>-селектор (IE:&nbsp;<code class="html">"#mydiv img"</code>) и&nbsp;возвращает первый совпавший элемент (если их&nbsp;несколько) или null если нет совпадений. Например:</p>
<pre><code class="javascript">document.querySelector('#myheader') //возвращает элемент с ID="myheader"
document.querySelector('p.description') //возвращает элемент P с class="description"
document.querySelector('#content img:nth-of-type(1)') //возвращает первой изображение, содержащее "#content"
document.querySelector('#myform input[type="radio"]:checked') //выбирает отмеченный пункт из "#myform"
document.querySelector('#biography, #gallery') //вовращает или элемент "#biography" или "#gallery", в зависимости от того, какой из них был найден первым в списке
</code></pre>
<p>Обратите внимание на&nbsp;последний пример&nbsp;&#8212; вы&nbsp;можете передавать несколько <abbr title="Cascading Style Sheets">CSS</abbr>-селекторов, разделяя их&nbsp;запятой (&laquo;,&raquo;). Запятая играет роль логического &laquo;или&raquo;, которое позволяет <code class="javascript">querySelector()</code> возвратить первый элемент из&nbsp;дерева документов, который совпадает с&nbsp;одним из&nbsp;введенных <abbr title="Cascading Style Sheets">CSS</abbr>-селекторов.</p>
<h4>Небольшая демонстрация</h4>
<p>Нижеописанный HTML-код создает 2&nbsp;вложенных DIV с&nbsp;изменяющимся цветом фона внутреннего DIV при наведении курсора мыши на&nbsp;внешний DIV.</p>
<p>Пример показывает использование <code class="javascript">querySelector()</code> одновременно в&nbsp;виде метода &laquo;Document&raquo; и&nbsp;&laquo;Element&raquo;:</p>
<pre><code class="javascript">&lt;div id=&quot;outerdiv&quot; style=&quot;padding:50px; width:100px; height:100px; border:1px solid black&quot;&gt;
&lt;div id=&quot;innerdiv&quot; style=&quot;width:100%; height:100%; border:1px solid black; background:silver;&quot;&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;script type=&quot;text/javascript&quot;&gt;
if (document.querySelector){
  var outerdiv=document.querySelector('#outerdiv')
  outerdiv.onmouseover=function(){
    this.querySelector('#innerdiv').style.background=&quot;yellow&quot;
  }
  outerdiv.onmouseout=function(){
    this.querySelector('#innerdiv').style.background=&quot;silver&quot;
  }
}
&lt;/script&gt;</code></pre>
<div id="outerdiv" style="padding:50px; width:100px; height:100px; border:1px solid black">
<div id="innerdiv" style="width:100%; height:100%; border:1px solid black; background:silver;"></div>
</div>
<p><script type="text/javascript">
if (document.querySelector){
 var outerdiv=document.querySelector('#outerdiv')
 outerdiv.onmouseover=function(){
  this.querySelector('#innerdiv').style.background="yellow"
 }
 outerdiv.onmouseout=function(){
  this.querySelector('#innerdiv').style.background="silver"
 }
}
</script></p>
<h3>Метод querySelectorAll()</h3>
<p>Этот метод возвращает не&nbsp;только один элемент, совпадающий с&nbsp;<abbr title="Cascading Style Sheets">CSS</abbr>-селектором, но&nbsp;и&nbsp;все остальные, в&nbsp;виде &laquo;staticNodeList&raquo;. &laquo;StaticNodeList&raquo; &mdash; это статичный набор элементов, на&nbsp;которые не&nbsp;влияют последующие изменения, происходящие в&nbsp;дереве документов, например удаление одного из&nbsp;элементов. Метод имеет аттрибут &laquo;<code>length</code>&raquo;, позволяющий вам заносить каждый из&nbsp;похожих элементов в&nbsp;массив. Примеры:</p>
<pre><code class="javascript">document.querySelectorAll('.mygroup'); //вовзращает все элементы с class="mygroup";
document.querySelectorAll('option[selected="selected"]'); //возвращает каждый выбранный по умолчанию пункт меню
document.querySelectorAll('#mytable tr>td:nth-of-type(1)'); //возвращает первый элемент каждой строки таблицы "mytable";
document.querySelectorAll('#biography, #gallery'); //возвращает и элементы "#biography" и "#gallery"</code></pre>
<h4>Время для демострации!</h4>
<p>Давайте используем <code class="javascript">querySelectorAll()</code> для быстрого определния выставленных чекбоксов:</p>
<pre><code class="javascript">&lt;form id=&quot;myform&quot; onSubmit=&quot;return false&quot;&gt;
  &lt;b&gt;Your hobbies:&lt;/b&gt;&lt;input name=&quot;hobbies&quot; type=&quot;checkbox&quot; value=&quot;movies&quot; /&gt;Movies &lt;input name=&quot;hobbies&quot; type=&quot;checkbox&quot; value=&quot;sports&quot; /&gt;Sports &lt;input name=&quot;hobbies&quot; type=&quot;checkbox&quot; value=&quot;reading&quot; /&gt;Reading &lt;input name=&quot;hobbies&quot; type=&quot;checkbox&quot; value=&quot;sleeping&quot; /&gt;Sleeping
  &lt;br /&gt;
  &lt;input type=&quot;submit&quot; /&gt;
  &lt;/form&gt;

&lt;script type=&quot;text/javascript&quot;&gt;
  if (document.querySelector){
    document.querySelector('#myform').onsubmit=function(){
      var checkedhobbies=this.querySelectorAll('input[name=&quot;hobbies&quot;]:checked');
      for (var i=0; i&lt;checkedhobbies.length; i++){
        alert(checkedhobbies[i].value);
      }
    return false
    }
  }
&lt;/script&gt;</code></pre>
<p><a href="http://www.codeisart.ru/files/w3c-css-api.html">Открыть пример</a></p>
<h3>Ограничения IE8</h3>
<p>В IE8&nbsp;есть несколько ограничений, которых нужно придерживаться используя <code class="javascript">querySelector()</code> и&nbsp;<code class="javascript">querySelectorAll()</code>:</p>
<ul>
<li>Ваш документ должен соответствовать стандартному режиму IE8, чтобы эти 2&nbsp;метода работали. Документ становится нестандартным, если он&nbsp;имеет не&nbsp;четкий тип, или настроен для работы со&nbsp;стандартом IE7&nbsp;с&nbsp;помощью мета-тега: <code>&lt;meta http-equiv=&quot;X-UA-Compatible&quot; content=&quot;IE=7&quot; /&gt;</code>.</li>
<li>IE8&nbsp;не&nbsp;поддерживает дополнительный параметр &laquo;NSResolver&raquo;, используемый в&nbsp;<code class="javascript">querySelector()</code> или <code class="javascript">querySelectorAll()</code> для определения префиксов имен в&nbsp;XHTML документах.</li>
<li>По соображениям безопасности, IE8&nbsp;не&nbsp;будет возвращать элементы, полученные с&nbsp;использованием <abbr title="Cascading Style Sheets">CSS</abbr>-селекторов &laquo;<code>:visited</code>&raquo; или &laquo;<code>:link</code>&raquo;. Это сделано для того, чтобы веб-мастера не&nbsp;могли определить ссылки на&nbsp;страницы, посещенные пользователем.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.codeisart.ru/w3c-css-selectors-api-the-queryselector-and-queryselectorall-methods/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>«reset.css» — сброс стандартных стилей</title>
		<link>http://www.codeisart.ru/reset-css/</link>
		<comments>http://www.codeisart.ru/reset-css/#comments</comments>
		<pubDate>Wed, 17 Sep 2008 15:36:51 +0000</pubDate>
		<dc:creator>Octane</dc:creator>
				<category><![CDATA[CSS]]></category>

		<guid isPermaLink="false">http://www.codeisart.ru/?p=597</guid>
		<description><![CDATA[Тема сброса стандартных стилей, устанавливаемых браузером, поднималась многими веб-разработчиками огромное количество&#160;раз. В&#160;сети Интернет существует множество готовых решений, начиная от&#160;простого *&#160;{padding:&#160;0;&#160;margin:&#160;0} и&#160;заканчивая отдельными таблицами стилей, учитывающими особенности различных браузеров и&#160;для&#160;разных устройст вывода. Я&#160;считаю, каждый верстальщик должен написать для&#160;себя такой&#160;файл самостоятельно, ну&#160;или&#160;хотя&#160;бы хорошо разобраться в&#160;готовом решении, если&#160;он, конечно, не&#160;ощущает себя&#160;&#171;макетонарезочным&#160;аппаратом&#187; или&#160;гуру технологии &#171;copy-paste&#187;. Воспользовавшись замечательной системой поиска [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.codeisart.ru/wp-content/uploads/2008/09/reset-css.jpg" alt="reset.css" width="104" height="120" class="left" />Тема сброса стандартных стилей, устанавливаемых браузером, поднималась многими веб-разработчиками огромное количество&nbsp;раз. В&nbsp;сети Интернет существует множество готовых решений, начиная от&nbsp;простого <code>*&nbsp;{padding:&nbsp;0;&nbsp;margin:&nbsp;0}</code> и&nbsp;заканчивая отдельными таблицами стилей, учитывающими особенности различных браузеров и&nbsp;для&nbsp;разных устройст вывода.</p>
<p><span id="more-597"></span></p>
<p>Я&nbsp;считаю, каждый верстальщик должен написать для&nbsp;себя такой&nbsp;файл самостоятельно, ну&nbsp;или&nbsp;хотя&nbsp;бы хорошо разобраться в&nbsp;готовом решении, если&nbsp;он, конечно, не&nbsp;ощущает себя&nbsp;&laquo;макетонарезочным&nbsp;аппаратом&raquo; или&nbsp;гуру технологии &laquo;copy-paste&raquo;.</p>
<p>Воспользовавшись замечательной системой поиска &laquo;<a href="http://www.google.ru/" rel="external nofollow">Google</a>&raquo; Вы&nbsp;сможете найти множество вариантов реализации файла &laquo;reset.css&raquo;. Я&nbsp;хочу показать Вам&nbsp;для&nbsp;примера свой&nbsp;вариант таблицы стилей сброса стандартного оформления, устанавливаемого браузером:</p>
<pre><code class="css">@charset &quot;utf-8&quot;;
body, h1, h2, h3, h4, h5, h6 {
font: 14px/18px Verdana, sans-serif;
}
code, kbd, pre, samp, tt, var {
font: 14px/18px Consolas, &quot;Courier New&quot;, monospace;
}
body, optgroup {
color: #000;
background: #fff;
}
body, code, dl, dd, form, pre {
margin: 0;
}
a:link {
color: #009;
}
a:link, a:visited, ins {
text-decoration: none;
}
a:visited {
color: #505;
}
a:hover {
text-decoration: underline;
}
a:link img, a:visited img, object, fieldset, abbr, acronym {
border: none;
}
sub, sup {
position: relative;
display: inline-block;
font-size: 11px;
line-height: 11px;
}
sub {
top: 5px;
vertical-align: middle;
}
sup {
top: -2px;
margin-top: -11px;
}
abbr, acronym {
cursor: help;
border-bottom: 1px dotted #999;
}
address, cite, dfn {
font-style: normal;
}
code, pre {
white-space: pre-wrap;
}
img {
vertical-align: bottom;
}
td, th, textarea {
vertical-align: top;
}
input, select, button {
overflow: visible;
vertical-align: middle;
}
legend {
color: #000;
margin: 0 0 -2px;
padding: 0;
}
li {
display: block;
list-style: none;
}
optgroup option {
padding-left: 22px;
}
table {
border-collapse: collapse;
}
caption, th {
text-align: left;
}
td, th {
padding: 0;
}
address, blockquote, h1, h2, h3, h4, h5, h6, fieldset, p, ol, ul {
margin: 0;
padding: 0;
}
th, h1, h2, h3, h4, h5, h6 {
font-weight: normal;
}
q {
quotes: &quot;\00ab&quot; &quot;\00bb&quot; &quot;\201e&quot; &quot;\201c&quot;;
}
q:after {
content: &quot;\00bb&quot;;
}
q:before {
content: &quot;\00ab&quot;;
}
q &gt; q:after {
content: &quot;\201c&quot;;
}
q &gt; q:before {
content: &quot;\201e&quot;;
}</code></pre>
<p>Для&nbsp;<abbr title="Internet Explorer">IE</abbr> нужно добавить&nbsp;еще:</p>
<pre><code class="css">legend {
margin-left: -7px;
}</code></pre>
<p>Таблица стилей ориентирована на&nbsp;использование совместно с&nbsp;&laquo;XHTML&nbsp;1.0&nbsp;Strict&raquo;.</p>
<p>Некоторые могут возразить и&nbsp;сказать, что&nbsp;это&nbsp; не&nbsp;&laquo;reset.css&raquo;, а&nbsp;уже&nbsp;какой-то &laquo;base.css&raquo;&nbsp;&mdash; возможно и&nbsp;так, со&nbsp;временем этот файл вырос в&nbsp;размерах и&nbsp;стал включать в&nbsp;себя некоторые стили, которые я&nbsp;обычно описывал в&nbsp;своих&nbsp;проектах.</p>
<p>Объяснять, что&nbsp;для&nbsp;чего написано, думаю, не&nbsp;стоит, до&nbsp;меня это&nbsp;уже&nbsp;сделали не&nbsp;один десяток&nbsp;раз. Поясню только эти&nbsp;выкрутасы с&nbsp;inline-цитами&nbsp;&mdash; это&nbsp;для&nbsp;правильного отображения кавычек вложенных inline-цитат в&nbsp;&laquo;Safari&raquo;.</p>
<p><a class="attach zip" href="http://www.codeisart.ru/wp-content/uploads/2008/09/resetcss.zip">Скачать &laquo;reset.css&raquo;</a></p>
<p class="bold">Полезно почитать</p>
<p>Избегайте <a href="http://rotorweb.ru/dizajn/ustarevshie-priyomy-v-veb-dizajne.html">устаревших приёмов в&nbsp;веб-дизайне</a>, а&nbsp;так&nbsp;же&nbsp;не&nbsp;забывайте, что&nbsp;и&nbsp;&laquo;Internet Explorer&raquo; оказывается тоже&nbsp;обновляется, и&nbsp;уже&nbsp;доступна 8-я&nbsp;версия (правда&nbsp;пока&nbsp;бета&nbsp;2) для&nbsp;которой тоже&nbsp;нужны&nbsp;<del>костыли</del> <a href="http://pepelsbey.net/2008/09/ie-street-magic/">специальные&nbsp;средства</a>, чтобы старые сайты корректно отображались.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.codeisart.ru/reset-css/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Использование !important в CSS</title>
		<link>http://www.codeisart.ru/using-important-in-css/</link>
		<comments>http://www.codeisart.ru/using-important-in-css/#comments</comments>
		<pubDate>Sat, 09 Aug 2008 17:20:44 +0000</pubDate>
		<dc:creator>Octane</dc:creator>
				<category><![CDATA[CSS]]></category>

		<guid isPermaLink="false">http://www.codeisart.ru/?p=419</guid>
		<description><![CDATA[В статье пойдет речь о том, какими способами можно избежать использования &#171;!important&#187; в CSS. Итак, почему же стоит отказаться от&#160;&#171;!important&#187;? Во-первых, этот параметр не поддерживает IE6. Во-вторых, в некоторых браузерах могут возникать конфликты с пользовательскими таблицами стилей. В-третьих, это лишний код, без которого, в большинстве случаев, можно обойтись. Рассмотрим простой пример использования: XHTML &#60;div id=&#34;content&#34;&#62; [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.codeisart.ru/wp-content/uploads/2008/08/stop-using-important-in-css.png" alt="Использование !important в CSS" height="192" class="left" />В статье пойдет речь о том, какими способами можно избежать использования &laquo;<code>!important</code>&raquo; в CSS.</p>
<p>Итак, почему же стоит отказаться от&nbsp;&laquo;<code>!important</code>&raquo;?</p>
<p>Во-первых, этот параметр не поддерживает IE6. Во-вторых, в некоторых браузерах могут возникать конфликты с пользовательскими таблицами стилей. В-третьих, это лишний код, без которого, в большинстве случаев, можно обойтись.</p>
<p><span id="more-419"></span></p>
<p>Рассмотрим простой пример использования:</p>
<p><b>XHTML</b></p>
<pre><code class="html">&lt;div id=&quot;content&quot;&gt;
  &lt;p&gt;Первый абзац&lt;/p&gt;
  &lt;p class=&quot;p1&quot;&gt;Второй абзац&lt;/p&gt;
  &lt;p class=&quot;p2&quot;&gt;Третий абзац&lt;/p&gt;
&lt;/div&gt;</code></pre>
<p><b>CSS</b></p>
<pre><code class="css">#content p {
color: #009;
}
.p1 {
color: #900;
}
.p2 {
color: #090 !important;
}</code></pre>
<p><b>Результат</b></p>
<div style="padding: 0 14px;border:1px solid #ccc;">
<p style="color:#009;">Первый абзац</p>
<p style="color:#009;">Второй абзац</p>
<p style="color:#090;">Третий абзац</p>
</div>
<p>Получилось, что цвет текста, описанный в классе &laquo;<var>p1</var>&raquo;, не перекрыл значение цвета, заданное через идентификатор родительского контейнера &laquo;<var>#content</var>&raquo; для дочерних элементов &laquo;<var>p</var>&raquo;. Это произошло, потому что приоритет стилей, заданных через идентификатор объекта, выше, чем приоритет класса. В случае с &laquo;<var>p2</var>&raquo; для параметра &laquo;<var>color</var>&raquo; задано значение &laquo;<code>!important</code>&raquo;, что дает ему высший приоритет, поэтому мы видим в третьем абзаце текст зеленого цвета.</p>
<p>Представим, что нам требуется таким образом перекрыть много CSS-параметров, тогда получится что-то вроде этого:</p>
<pre><code class="css">#content p {
margin: 0 12px;
padding: 12px 0;
color: #009;
font-size: 14px;
line-height: 18px;
text-align: center;
}
.p2 {
margin: 0 24px !important;
padding: 24px 0 !important;
color: #090 !important;
font-size: 12px !important;
line-height: 24px !important;
text-align: left !important;
}</code></pre>
<p>Довольно громоздко и некрасиво получилось, не так ли? Давайте подумаем, как обойтись без &laquo;<code>!important</code>&raquo;. Мы знаем, что стили идентификатора перекрывают оформление класса, поэтому и запишем все через идентификатор &laquo;<var>#content</var>&raquo;:</p>
<pre><code class="css">#content p {
margin: 0 12px;
padding: 12px 0;
color: #009;
font-size: 14px;
line-height: 18px;
text-align: center;
}
#content .p2 {
margin: 0 24px;
padding: 24px 0;
color: #090;
font-size: 12px;
line-height: 24px;
text-align: left;
}</code></pre>
<p>Вот, то, что нужно, ни одного &laquo;<code>!important</code>&raquo; и все работает так, как и хотелось. Вернемся к нашему примеру и перепишем его без использования &laquo;<code>!important</code>&raquo;:</p>
<p><b>CSS</b></p>
<pre><code class="css">#content p {
color: #009;
}
.p1 {
color: #900;
}
#content .p2 {
color: #090;
}</code></pre>
<p><b>Результат</b></p>
<div style="padding: 0 14px;border:1px solid #ccc;">
<p style="color:#009;">Первый абзац</p>
<p style="color:#009;">Второй абзац</p>
<p style="color:#090;">Третий абзац</p>
</div>
<p>Результат тот же, что и в первом примере, но мы избавились от &laquo;<code>!important</code>&raquo;, а значит избежали проблем, приведенных в начале статьи, да еще и сократили код, если требовалось бы перекрыть несколько параметров.</p>
<p>До момента написания статьи, я ни разу не встречал такого использования CSS-селекторов:</p>
<pre><code class="css">#identificator.class
/* или */
.class#identificator</code></pre>
<p>Как оказалось, применение такой конструкции есть. Допустим, у нас есть меню навигации:</p>
<pre><code class="html">&lt;ul id=&quot;nav&quot;&gt;
  &lt;li&gt;&lt;a id=&quot;main&quot; class=&quot;current&quot; href=&quot;index.html&quot;&gt;Главная&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a id=&quot;projects&quot; href=&quot;projects.html&quot;&gt;Проекты&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a id=&quot;partners&quot; href=&quot;partners.html&quot;&gt;Партнеры&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a id=&quot;about&quot; href=&quot;about.html&quot;&gt;О нас&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a id=&quot;contacts&quot; href=&quot;contacts.html&quot;&gt;Контакты&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</code></pre>
<p>И по каким-то причинам, стили описаны следующим образом:</p>
<pre><code class="css">#main, #projects, #partners, #about, #contacts {
background: #0ff;
}</code></pre>
<p>Например, для того, чтобы выделить ссылку на текущую страницу, мы добавляем для нее класс &laquo;<var>current</var>&raquo;, т. к. идентификатор уже задан, но теперь чтобы перекрыть значение параметра &laquo;<var>background</var>&raquo; нам потребуется использовать &laquo;<code>!important</code>&raquo;:</p>
<pre><code class="css">#main, #projects, #partners, #about, #contacts {
background: #0ff;
}
.current {
background: #ff0 !important;
}</code></pre>
<p>Вроде бы &laquo;<code>!important</code>&raquo; не так и сильно мешает и запись довольно короткая, но вспомним, что IE6 не понимает его. Что же делать? Перепишем код, используя конструкцию, о которой говорилось чуть выше:</p>
<pre><code class="css">#main, #projects, #partners, #about, #contacts {
background: #0ff;
}
#main.current, #projects.current,
#partners.current, #about.current,
#contacts.current {
background: #ff0;
}</code></pre>
<p>Все заработало, аналогично примеру с &laquo;<code>!important</code>&raquo;, но теперь и в IE6. Возможно, пример не совсем удачный потому, что получилось больше кода.</p>
<p>Уверен, что найдется и применение конструкции &laquo;<code>.class#identificator</code>&raquo;. Надеюсь, прочтение этой статьи, поможет Вам сократь использование &laquo;<code>!important</code>&raquo; в ваших таблицах стилей.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.codeisart.ru/using-important-in-css/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
	</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Served from: www.codeisart.ru @ 2012-02-04 10:15:58 -->
