Чем отличаются id и class. Разница между class и id на примере тега div

На первый взгляд нет никакой разницы что использовать: id или class . Ведь присвоив одинаковые параметры CSS стилей для id и class - результат будет идентичен. На самом деле, отличий между id и class в CSS практичесски нет, за исключением приоритета их обработки. Но в некоторых других случаях, которые весьма часто используются в web-разработке, разница весьма ощутима. Эта статья как раз и выделяет все отличия class и id .

Id

Id - это уникальный идентификатор элемента. На одной странице один идентификатор применяется только единожды, хотя можно применять и несколько одинаковых идентификаторов в пределах одной страницы, но это может вызвать проблемы при использовании HTML-якорей и JS. Если попытаться присвоить одному элементу (HTML-тегу) два различных ID, то сработает только правила из первого (самого левого) ID

Пример 1: как не желательно использовать идентификаторы (ID)

Блок выделенного текста

Блок выделенного текста

Пример 2: как нельзя использовать идентификаторы (ID)

Присвоение двух или более id 1-му элементу не допускается

В случае одновременного применения к одному элементу id и class, приоритет у ID будет выше, чем у class:

Определение стилей CSS

#my_id_r7t { color : green ; font-weight : bold ; }

Этому абзацу присвоены класс my_class и идентификатор my_id.

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

Если же дописать дескриптору еще и стиль: , то результат будет таким:

Самым высоким приоритетом обладает стиль, присвоенный дискриптору с помощью style="...".

Хороший пример приоритетов, приведен в официальной документации по CSS (eng) . В кратце, приоритеты в порядке убывания таковы: style, id, class, стиль тега.

Элемент id может быть применён в качестве HTML-якоря, вместо более древней конструкции , для того, чтобы можно было сослаться на определенную часть страницы, без ее перезагрузки с попомщью Наверх . Если на странице окажется несколько идентичных id, возникнет неоднозначная ситуация.

При программировании страниц с помощью JS, зачастую используется функция getElementById() , которая также "рассчитывает" на то, что идентификатор должен быть уникальным. В противном случае могут возникнуть ошибки в коде.

Class

При использовании class , одному HTML-дескриптору можно назначить стили из нескольких классов одновременно:

My_class_r7t { color : blue ; font-style : italic ; }
.my_class_ffR5 { color : black ; background-color : #fafafa ; padding : 3px ; border : 1px solid #757575 ; margin-left : 30px ; }

Имена различных классов записываются через пробел:

Пример применения 2-ух различных классов для 1-го HTML-тега.

Результат применения двух различных классов для 1-го дескриптора HTML.

Классы my_class_r7t и my_class_ffR5 устанавливают различные цвета содержимому HTML-тега. Использован будет тот цвет, который определен в файле стилей позже (в данном случае class my_class_ffR5 записан после my_class_r7t). Порядок применения классов в самом HTML-дескрипторе значения не имеет.

Чтобы назначить составным классам уникальное стилевое оформление, они записываются вместе, без проблеов:

My_class_bbbb755 { font-weight : bold ; }
.my_class_ffR5 .my_class_bbbb755 { text-align : right ; }

Выравнивание по правому краю, будет применено только в случае, когда одному HTML-дескриптору присвоено сразу 2 класса:

Пример применения стилей для составных классов

Как это выглядит, смотрите ниже:

Пример применения стилей для составных классов

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

...
...
...
...
...

Class или id - что использовать?

На самом деле, нельзя выбирать, что использовать: class или id. Это на подобии, как выбирать, что лучше: есть или пить? Пользоваться необходимо и классами и идентификаторами, в зависимости от поставленной цели. В большинстве случаев лучше использовать class, чтобы нечаяно не использовать id на одной странице более одного раза. Но там где необходимо, нужно применять id: выделение уникального блока страницы, для якорей, для JS и др.

Один из самых частых вопросов в процессе знакомства с новыми стандартами - в чем разница между атрибутами HTML-элементов "id" и "class". Ведь эффект, вроде бы, одинаковый.

Одинаковый эффект у них только в самых простых случаях использования в CSS. На самом деле отличий полно.

Суть id уникальное собственное имя элемента на странице, то есть на странице не должно быть нескольких элементов с одним id. Например блоку с шапкой сайта можно дать id="title" . class вольный признак, который дается обычно нескольким элементам, чтобы отличать их от других. Например, картинкам, которые просто сопровождают текст, можно дать class="decor" , а картинкам, которые важны для понимания текста - class="content" . Следствия

Из этой сути прямо или косвенно вытекают остальные отличия, которые видны и в HTML, и в CSS, и в скриптах.

Якорные ссылки Если нужно поставить ссылку на какой-то элемент в странице, то ему достаточно дать id (...) и ссылаться на него якорем (http://site/path/#about). Это, кстати, предпочтительный способ взамен старого . Множественные признаки

Элементу можно задавать несколько классов через пробелы: . Причем их можно использовать и по отдельности:

/* все important элементы */ .important {color:red;}

И в сочетании:

/* элементы с important и centered одновременно */ .important.centered {border:solid black 1px;}

Обратите внимание, что между классами в CSS-правиле нет пробела.

Разный вес в CSS

У каждого правила в CSS есть "вес", по которому определяется порядок их применений. У id этот вес больше. Поэтому если у элемента задан и id, и class:

...

То из двух правил

#about {color:green;} .important {color:red;}

Выиграет первое, цвет заголовка будет зеленым. (Веса правил - это отдельная песня, о ней будет статья в свое время.)

Поиск в скрипте Элемент с "id" можно легко найти в скрипте с помощью функции document.getElementById() . Для классов такой функции нет.

Эта статья - часть находящегося в процессе написания цикла под рабочим названием "Учебник". Я рекомендую ознакомиться и с другими статьями, которые можно найти в категории "Учебник ", где они сейчас собраны в обратном хронологическом порядке.

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

Для начала перечислим характерные признаки этих селекторов.

Идентификаторы

  • В коде документа каждый идентификатор уникален и должен быть включён лишь один раз.
  • Имя идентификатора чувствительно к регистру.
  • Через метод getElementById можно получить доступ к элементу по его идентификатору и изменить свойства элемента.
  • Стиль для идентификатора имеет приоритет выше, чем у классов.

Классы

  • Классы могут использоваться в коде неоднократно.
  • Имена классов чувствительны к регистру.
  • Классы можно комбинировать между собой, добавляя несколько классов к одному тегу.
Идентификаторы

Если во время работы веб-страницы требуется изменить стиль некоторых элементов «на лету» или выводить внутри них какой-либо текст, с идентификаторами это делается гораздо проще. Обращение к элементу происходит через метод getElementById , параметром которого служит имя идентификатора. В примере 21.1 к текстовому полю формы добавляется идентификатор с именем userName , затем с помощью функции JavaScript делается проверка на то, что пользователь ввёл в это поле какой-либо текст. Если никакого текста нет, но кнопка Submit нажата, выводится сообщение внутри тега с идентификатором msg . Если всё правильно, данные формы отправляются по адресу, указанному атрибутом action .

Пример 21.1. Проверка данных формы

HTML5 IE Cr Op Sa Fx

Проверка формы function validForm(f) { user = document.getElementById("userName"); if(user.value == "") document.getElementById("msg").innerHTML = "Пожалуйста, введите имя."; else f.submit(); }

Введите свое имя:

Поскольку идентификаторы чувствительны к регистру, имеет значение их однотипное написание. Внутри тега используется имя userName , его же следует указать и в методе getElementById . При ошибочном написании, например, username , скрипт перестанет работать, как требуется.

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

Пример 21.2. Сочетание стилей

HTML5 CSS 2.1 IE Cr Op Sa Fx

Идентификаторы #A, .a { border: none; background: #f0f0f0; color: green; padding: 5px; } .b { border: 1px solid red; color: red; padding: 0; }

Стиль идентификатора

Стиль классов a и b

Стиль класса b

Для первого абзаца устанавливается стиль от идентификатора A и класса b , свойства которых противоречат друг другу. При этом стиль класса будет игнорироваться из-за особенностей каскадирования и специфичности. Для второго абзаца стиль задаётся через классы a и b одновременно. Приоритет у классов одинаковый, значит, в случае противоречия будут задействованы те свойства, которые указаны в стиле ниже. К последнему абзацу применяется стиль только от класса b . На рис. 21.1 показан результат применения стилей.

Рис. 21.1. Использование стилей для текста

Специфичность в каскадировании начинает играть роль при разрастании стилевого файла за счёт увеличения числа селекторов, что характерно для больших и сложных сайтов. Чтобы стиль применялся корректно, необходимо грамотно управлять специфичностью селекторов путем использования идентификаторов, повышения важности через !important , порядком следования свойств.

Классы

Поскольку к элементу одновременно можно добавлять более одного класса, это позволяет завести несколько универсальных классов со стилевыми свойствами на все случаи и включать их к тегам при необходимости. Предположим, что большинство блоков на странице имеют закругленные уголки, причём некоторые блоки ещё имеют красную рамку, а некоторые нет. В этом случае можем написать такой стиль (пример 21.3).

Пример 21.3. Использование классов

R, .b { padding: 10px; background: #FCE3EE; } .r { border-radius: 8px; -webkit-border-radius: 8px; -moz-border-radius: 8px } .b { border: 1px solid #ED1C24; } .n { border: none; }

Указывая разные классы в атрибуте class мы можем комбинировать набор стилевых свойств и получить таким образом блоки с рамкой, блоки без рамки, со скруглёнными или прямыми уголками. Это несколько похоже на группирование селекторов, но обладает большей гибкостью.

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

Благодаря этому тегу весь HTML код документа имеет наглядную и логически понятную структуру. В которой легко разобраться не только верстальщику, но и другим специалистам, совместно работающим над одним проектом. Однако тег без своих «сателлитов» - селекторов id и class ничего не стоит.

Классы и идентификаторы

Классы (class) и идентификаторы (id) выполняют одни и те же задачи. Они задают разные стили для тега , как во внешнем CSS файле, так и внутри документа, через тег style . Тут надо пояснить, что они работают в связке не только с тегом , но и со многими другими тегами.

Рассмотрим на примере ниже следующий код HTML-разметки: