Каковы причины использования атрибута id для целей CSS?
Я всегда использовал атрибут class
, никогда id
для выбора и стилизации CSS. Я знаю, что id
должен быть уникальным, но это, по-видимому, не является основанием для его использования для CSS.
Единственная причина, по которой я использовал атрибут id
, - это обозначение JavaScript и форм.
Я считаю, что смешивание id
и class
для CSS может вызвать путаницу, и для меня это хороший способ заставить разделение стиля и поведения.
Есть ли веская причина использовать id
для целей CSS? Есть ли что-либо, что может быть достигнуто с помощью id
, которое невозможно сделать с помощью class
?
Комментарии Я нашел полезным/интересным
- Вы можете сказать то же самое о классах. Там много JavaScript, которые делают (и должны) целевые элементы определенного класса. Изменение класса в этих случаях столь же проблематично с точки зрения поведения. - AaronSieb
- Идентификаторы имеют различную специфичность в каскаде, чем классы. - Killroy
- Использование идентификатора для стилизации имеет смысл, если это элемент, который не имеет дубликатов, особенно если он отображается во всех/большинстве страниц - RichN
Ответы
Ответ 1
Основная причина, по которой я использую теги идентификаторов, - это общение с людьми, которые читают мой код. В частности, тег ID позволяет легко ссылаться на любой конкретный элемент, который они хотят, с полным спокойствием, зная, что любые изменения, которые они вносят в него, будут влиять только на один элемент.
РЕДАКТИРОВАТЬ: Существует также более техническая причина использовать теги идентификаторов, которые вы, возможно, не знаете. Я снова обновил этот пост в соответствии с vol7ron comment и некоторыми дальнейшими исследованиями в исторических целях. Эта информация может быть весьма полезной для тех, кто не знаком с CSS.
Следующий контур показывает, как работает каскадный характер каскадных таблиц стилей:
- Winner = ! важная декларация.
- Eg.
#some-element {color: blue !important;}
бьет #some-element {color: red;}
.
- Winner = Встроенный CSS.
- Например.:
-
<div id="some-element" style="#some-element {color: yellow;}">some content</div>
бьется...
-
<style type="text/css">#some-element {color: red;}</style>
и...
-
<link type="text/css" link rel="stylesheet" href="set-some-element-color-to-blue.css"/>
.
- Победитель = наибольший # из идентификаторов.
- Eg.
#some-element#id-2 {color: blue;}
бьет #some-element {color: red;}
.
- Winner = Greatest из класса, псевдокласс и других атрибутов.
- Eg.
.some-elements.class-2 {color: blue;}
бьет .some-elements {color: red;}
.
- Winner = Наибольшее количество имен элементов и псевдоэлементов в селекторе.
- Eg.
#some-element:hover {color: blue;}
бьет #some-element {color: red;}
.
- Победитель = Последний раз прочитал машину.
- Например.:
-
<style type="text/css">#some-element {color: red;}</style>
бьет...
-
<link type="text/css" link rel="stylesheet" href="set-some-element-color-to-blue.css"/>
, потому что внутренний CSS читается после внешнего CSS.
В этой схеме начните с сравнения двух стилей CSS, основанных на верхних критериях контура, то есть "1. Winner = ! important declaration." Если один стиль имеет более высокий приоритет, чем другой в этом аспекте, он выигрывает. Если они одинаковы в этом аспекте, продолжайте до следующих критериев, пока не найдете дифференцирующий фактор.
Ответ 2
Использование идентификатора для стилизации имеет смысл, если это элемент, который не имеет дубликатов, особенно если он отображается во всех/большинстве страниц.
например:.
- Верхний и нижний колонтитулы страницы
- Поле поиска (то, что вы можете увидеть там)
- Список навигации (что-то вроде вещи справа)
Ответ 3
Выбор чего-либо с уникальным идентификатором выполняется быстрее, чем выбор с помощью класса. Разница незначительна, но в приложениях с огромным количеством элементов DOM или интенсивного приложения Javascript это имеет значение.
Например, если вы используете jQuery, проверьте это: правила производительности jquery
Ответ 4
Нет, но если у вашего элемента есть id
, почему бы не использовать его для стилизации?
Вы можете сказать то же самое о именах элементов - с p
вы ничего не можете сделать, чего не могли бы сделать с class='paragraph'
. Это не значит, что рекомендуется добавить class='paragraph'
к каждому элементу <p>
.
Ответ 5
Идентификаторы идентифицируют, классы классифицируют. Этот момент упоминался здесь несколько раз, более или менее.
Пример:
<div class="author" id="stephen">[...]</div>
С точки зрения специфичности CSS идентификаторы таргетинга сделают правила CSS более конкретными, чем правила с классами, даже несколько классов.
Таким образом:
p#recent {}
более конкретна, чем
body>p.news.recent {}
и когда пользовательский агент найдет оба из них, первое будет преобладать.
Ответ 6
Вам не нужно использовать идентификаторы. Нет дизайна, который можно создать с помощью идентификаторов, которые вы не можете создать с помощью классов.
С учетом сказанного, использование идентификатора имеет преимущество, заключающееся в четкой маркировке селектора, применительно к одному элементу страницы. Обычно я использую их для стилизации элементов в шаблонах страниц (#Content, #Navigation и т.д.).
В общем, я бы попытался использовать его в областях, которые позволяют мне сделать разметку более краткими. Когда селектор может быть нацелен на тег, вы должны использовать тег. Когда он может быть нацелен на идентификатор, используйте идентификатор. В противном случае используйте класс.
Но, опять же, независимо от того, используете ли вы идентификаторы, это не очень важно.
Ответ 7
Я склонен думать о соотношении id
и class
в HTML как аналог объектно-ориентированного программирования: a id
как экземпляр class
.
Я использую классы больше, чем я использую идентификаторы, и часто использую селектора с несколькими классами (например, .film.drama
). Но если я хочу идентифицировать определенный элемент, так что я могу применить определенный стиль или поведение, тогда я назначу id
, а часто и class
. Например.
<ul>
<li class="film drama">A</li>
<li class="book drama">B</li>
<li class="film documentary" id="film-9832">C</li>
</ul>
При назначении идентификатора я думаю: "Разве могло бы быть смысл, чтобы на странице было более одного из них". Если ответ "да", то я, скорее всего, поеду за классом.
В результате, как отмечали @RichN и @AaronSieb, я часто использую id для определенных элементов страницы, которые наверняка будут присутствовать только один раз на странице:
<ul class="sidebar" id="site-meta">[...]</ul>
Ответ 8
Если у вас несколько элементов одного и того же класса, и вам нужно указать другой стиль для одного или нескольких из них, который будет казаться мне действительно действительным.
Ответ 9
Единственное, что я могу придумать для использования идентификатора, - это если у вас есть определенная война - два элемента с одинаковой спецификой. Применение идентификатора придаст вашему элементу более высокую специфичность - +100, чтобы быть точным.
Итак, в случае, когда у вас есть два стиля, определенные с одинаковой специфичностью, вы можете захотеть "сжать" один, применив более высокую специфичность к другой. При этом вы можете добиться того же, применив к этому селектору более специфический класс, который увеличил бы специфичность на 10.
ID = 100 (#foo)
class= 10 (.bar)
element = 1 (div)
Ответ 10
IMO, использование стилей на основе идентификаторов - плохая идея.
Идентификаторы, являющиеся уникальными, должны выполняться только один раз в вашей DOM. Это ограничивает использование любого стиля, связанного с идентификатором, до 1 раза.
С другой стороны, классы CSS могут использоваться несколько раз или вообще не выполняться.
Честно говоря, я думаю, что идентификатор должен использоваться для поведения, а класс должен использоваться для стиля. Тот факт, что вы можете использовать их взаимозаменяемо, является частью того, что делает некоторые аспекты веб-разработки непоследовательными.
Ответ 11
Я использую id, когда знаю, что я буду использовать javascript для этого конкретного элемента. ID намного быстрее, чем классы в javascript.
Ответ 12
Я лично предпочитаю использовать идентификатор для статических элементов страницы (верхние и нижние колонтитулы). Причина - вес страницы.
id = "h" легче, чем class= "h".
Каждый байт считается, на мой взгляд.
Ответ 13
Основная причина, по которой я использую идентификаторы в CSS, - это макет. Если у меня есть один верхний и нижний колонтитул, тогда:
#header
{
...
...
...
}
#footer
{
...
...
...
}
Или одна обертка для моего основного содержимого или одна правая боковая панель. Если кто-то решает, что им нравится мой макет и вы хотите просмотреть источник, его легко увидеть.