CSS селекторы. Часть первая

Подборка CSS селекторов, с данными по поддержке со стороны браузеров.

Выбор по имени тэга

Плюсы:

  • Поддерживается всеми браузерами
  • Нет необходимости вносить изменения в код

Минусы:

  • Наименее гибкий способ. Стили применяются ко всем тэгам указанного типа

CSS:

/**
 * Весь текст, заключенный в тэги <p></p>, будет зеленого цвета
 */
p {
	color: #008040;
}

/**
 * Селектор применяется ко всем тэгам, перечисленным через запятую
 */
p, span, strong {
	color: #008040;
}

Чуть более гибкая вариация:

CSS:

/**
 * Стиль применяется ко всем тэгам <span>, вложенным в тэг <p>
 * Работает во всех браузерах
 */
p span {
	color: #f00;
}

HTML:

<p><span>Red string</span></p>




Выбор по ID или имени класса стилей

Плюсы:

  • Поддерживается всеми браузерами
  • Один тэг может наследовать несколько классов стилей

Минусы:

  • Лишний код, который нужно дописывать руками
  • ID у тэгов должны быть уникальны

И так, два типа селекторов я уже упомянул и они хорошо вам известны. Это выбор по ID тэга и по имени класса тэга:

CSS:

#element {
	color: #000080;
}

.element {
	color: #ff0000;
}

HTML:

<p id="element">By ID</p>

<p class="element">By class name</p>

Всем знакомо и понятно. Отмечу лишь один момент, о котором тоже не все знают. В коде страницы, один ID может встречаться только один раз. Иными словами, ID всегда должны быть уникальны, в отличие от класса. Браузеры, конечно, прожуют несколько неуникальных ID, но это скорее их упущение, нежели достоинство. Правила есть и их нужно соблюдать.

Выбор по имени атрибута и его значению

Плюсы:

  • Можно выделить группу элементов (тэгов), не внося изменений в код

Минусы:

  • Нет поддержки в IE6 и ниже

Селекторы, основанные на атрибутах и их значениях

CSS:

/**
 * Стиль применяется ко всем полям формы, имеющим тип text
 */
input[type="text"] {
	font-family: Tahoma;
}

Цепляться можно на любой атрибут и его значение, например, так:

CSS:

p[rel="blue"] {
	color: #000080;
}

p[rel="red"] {
	color: #ff0000;
}

HTML:

<p rel="blue">Blue text</p>

<p rel="red">Red text</p>

Увы, такой метод не будет работать в IE6 или более старых версиях этого чудовища. Если вы все еще переживаете насчет совместимости с этим мамонтом, придется забыть об этом способе (и, нужно признать, о большинстве тех, которые описаны ниже).

Можно выбирать элементы не только по строгому равно, но и еще несколькими способами. Описание принципа действия каждого дано в комментариях. Учитывайте, что ни один вариант не будет работать в Internet Explorer 6 и ниже.

CSS:

/**
 * Стиль применяется ко всем тэгам абзаца, имеющим параметр align. Значение параметра не принимается во внимание.
 */
p[align] {
	color: #a00;
}

/**
 * Все абзацы, значение title которых начинается со слова "some" (регистр имеет значения) будут выделены красным цветом.
 */
p[title^="some"] {
	color: #f00;
}

/**
 * Все абзацы, значение title которых заканчивается словом "test" (регистр имеет значения) будут выделены зеленым цветом.
 */
p[title$="test"] {
	color: #008040;
}

/**
 * Все абзацы, в значение title которых присутствует слово "text" (регистр имеет значения) будут выделены оранжевым цветом.
 */
p[title*="text"] {
	color: #ff8000;
}

HTML:

<p align="right" title"Something else">Test</p>
	
<p align="left" title="some text">First test</p>

<p align="center" title="some text test">Second test</p>

Цепочки селекторов

Как и следовало ожидать, почти никакой поддержки от IE6 ждать не приходится.

CSS: селектор *

/**
 * Стиль применяется ко всем элементам
 * Работает во всех браузерах
 */
* {
	text-decoration: underline;
}

CSS: селектор p > span

/**
 * Стиль применяется ко всем тэгам <span>, которые являются прямым потомком <p>
 * Не работает в IE6 и ниже
 */
p > span {
	color: #f00;
}

HTML:

<p><span>Красный текст</span></p>

<p><strong><span>Данный текст не будет красным, так как прямым потомком является strong</span></strong></p>

CSS: селектор p + span

/**
 * Стиль применяется ко всем тэгам <span>, идущим строго после тэга <p>
 * Не работает в IE6 и ниже
 */
p + span {
	color: #f00;
}

HTML:

<p>Текст в абзаце</p>
<span>Красный текст</span>

Следующий вариант аналогичен предыдущему, за тем лишь исключением, но не требуется строгой последовательности тэгов. Пример это отражает.

CSS: селектор p ~ span

/**
 * Стиль применяется ко всем тэгам <span>, идущим после тэга <p>
 * Не работает в IE6 и ниже
 */
p ~ span {
	color: #f00;
}

HTML:

<p>Текст в абзаце</p>
<div>Дивный текст</div>
<span>Красный текст</span>

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *