no-prof

Предисловие: статья не нашего авторства. Скопирована из портала для разработчиков "HTML5 | Yocton". Ссылку на эту статью принесла @satsana, в ответ на вопрос о классах идентификаторах. Встречается такое что люди не видят разницы и используют их неправильно. В этом уроке и будет рассказано что это, в чём различие и как надо правильно использовать. Приятного чтения!

© "HTML5 | Yocton"

Атрибут

Описание

class

id

Указывает класс элемента (не уникальный)

Указывает идентификатор элемента (уникальный)

Классы и идентификаторы облегчают обращение к элементам HTML из сценариев и таблиц стилей. Атрибут class может использоваться в одном или нескольких тегах и используется для стилизации. Но идентификаторы предназначены для обозначения одного элемента, т.е. один и тот же идентификатор никогда не должен использоваться дважды. Идентификаторы обычно используются с JavaScript и ссылками внутри документа и не рекомендуется в CSS. В этом разделе содержатся полезные пояснения и примеры относительно правильного использования атрибутов класса и идентификатора в HTML.

Присвоение класса элементу
Классы указывают признак для элементов. Используйте атрибут class, чтобы назначить класс элементу.

Код:
<div class="example-class"></div>

Чтобы назначить несколько классов элементу разделите имена классов пробелами.

Код:
<div class="class1 class2 class3"></div>

Использование классов в CSS
Классы могут использоваться для стилизации определенных элементов без изменения всех элементов данного типа. Например, эти два элемента span могут иметь совершенно разные стили:

Код:
<span></span>
<span class="special"></span>

Множество элементов могут иметь одинаковые классы и все они получат стиль, связанный с этим классом. Это всегда будет верно, если внутри CSS вы не укажете элемент. Например, у нас есть два элемента: оба с классом highlight:

Код:
<div class="highlight">Некоторый текст</div>
<span class="highlight">Некоторый текст</span>

Если ваш стиль такой, как показано ниже, то оба элемента будут содержать зеленый текст:

Код:
.highlight { color: green; }

Однако, если мы хотим только чтобы класс работал только внутри div, мы можем добавить конкретики, как показано ниже:

Код:
div.highlight { color: green; }

Тем не менее, при стилизации с помощью CSS обычно рекомендуется использовать только классы (например, .highlight), а не элементы с классами (например, div.highlight). Как и любой другой селектор, классы могут быть вложенными:

Код:
.main .highlight { color: red; } /* селектор потомка */
.footer > .highlight { color: blue; } /* дочерний селектор */

Вы также можете связать селектор классов только с элементами, имеющими определенную комбинацию из нескольких классов. Например, если это наш HTML:

Код:
<div class="special left menu">Этот текст должен быть розовым</div>

И мы хотим покрасить текст этого элемента в розовый цвет, то можем написать в CSS следующее:

Код:
.special.left.menu { color: pink; }

Присвоение идентификатора элементу
Атрибут элемента id - это идентификатор, который должен быть уникальным во всем документе. Его цель состоит в том, чтобы однозначно идентифицировать элемент при ссылке на него, написании сценариев или стилизации (с помощью CSS).

Код:
<div id="example-id"></div>

У вас не должно быть двух элементов с одинаковым идентификатором в одном документе, даже если атрибуты привязаны к двум различным типам элементов. Например, следующий код неверен:

<div id="example-id"></div>
<span id="example-id"></span>

Браузеры сделают все возможное, чтобы выполнить этот код, но может возникнуть неожиданное поведение при стилизации или добавлении функциональности с помощью JavaScript.
Чтобы ссылаться на элементы по их идентификатору в CSS используйте префикс # перед идентификатором:

Код:
#example-id { color: green; }

Чтобы перейти к элементу с идентификатором на заданной странице, добавьте # с id элемента в URL-адрес:

Код:
http://example.com/about#example-id

Эта функция поддерживается в большинстве браузеров и не требует дополнительной работы JavaScript или CSS.

Допустимые значения

Для идентификатора

Для класса

Для HTML5 ограничениями на значение id являются:

он должен быть уникальным в документе
он не должен содержать пробелов
он должен содержать хотя бы один символ
Таким образом, значением могут быть все цифры, только одна цифра, только знаки пунктуации, включая специальные символы, все что угодно. Просто не должно быть пробелов. Таким образом, нижеследующие объявления являются допустимыми:

Код:
<div id="container"> ... </div>
<div id="999"> ... </div>
<div id="#%LV-||"> ... </div>
<div id="____V"> ... </div>
<div id="⌘⌥"> ... </div>
<div id="♥"> ... </div>
<div id="{}"> ... </div>
<div id="©"> ... </div>
<div id="♤₩¤☆€~¥"> ... </div>

Недопустимо:

<div id=" "> ... </div>

Также неверен нижеследующий код, если включен в один документ:

<div id="results"> ... </div>
<div id="results"> ... </div>

Для HTML 4.01 и ниже для значения id всегда должно начинаться с буквы, а остальными символами могут быть:

  • латинские буквы (A-Z/a-z)

  • цифры (0-9)

  • тире ("-")

  • подчеркивания ("_")

  • двоеточия (":")

  • точки (".")

В этом случае в вышеприведённом примере для HTML5, допустим только один вариант:

Код:
<div id="container"> ... </div>

Другие примеры, допустимые в HTML 4.01 и ниже:

Код:
<div id="sampletext"> ... </div>
<div id="sample-text"> ... </div>
<div id="sample_text"> ... </div>
<div id="sample:text"> ... </div>
<div id="sample.text"> ... </div>

Правила для названий классов по существу те же, что и для идентификаторов. Разница в том, что значения класса не обязательно должны быть уникальными в документе. В вышеприведенном примере недопустимо в одном документе:

<div id="results"> ... </div>
<div id="results"> ... </div>

А это совершенно нормально:

Код:
<div class="results"> ... </div>
<div class="results"> ... </div>

Как значения id и class обрабатываются вне HTML
Имейте в виду, что приведенные выше правила и примеры применяются в контексте HTML. Использование чисел, знаков препинания или специальных символов в значении id и class может вызвать проблемы в других контекстах, таких как CSS, JavaScript и регулярных выражениях. Например, хотя в HTML5 допустим следующий идентификатор:

<div id="9lions"> ... </div>

Он не допустим в CSS.

В CSS различные идентификаторы (включая имена элементов, классы и идентификаторы в селекторах) могут содержать только символы [a-zA-Z0-9] и символы из ISO 10646 U + 0080 и выше, а также дефис (-) и подчеркивание (_); они не могут начинаться с цифры, двух дефисов или дефисов, за которыми следует цифра.

В большинстве случаев лучше избегать символов, у которых есть ограничения или особый смысл.

Дублирование идентификаторов
Наличие более одного элемента с одним и тем же идентификатором трудноустранимая проблема. Парсер HTML все равно попытается отобразить страницу и обычно ошибка не возникает. Но она легко может привести к неправильной веб-странице. В этом примере:

<div id="aDiv">a</div>
<div id="aDiv">b</div

Селекторы CSS будут еще работать

Код:
#aDiv {
color: red;
}

Но JavaScript не справляется с обоими элементами:

var html = document.getElementById("aDiv").innerHTML;

В этом случае переменная html будет содержать только первое содержимое div («a»).