Что причины состоят в том, чтобы использовать идентификационный атрибут в целях CSS? [закрытый]

Большой ответ, MizardX! Я настроил его немного для обработки цифр как отдельных слов, так, чтобы "AddressLine1" стал "Строкой адреса 1" вместо "Адреса Line1":

Regex.Replace(s, "([a-z](?=[A-Z0-9])|[A-Z](?=[A-Z][a-z]))", "$1 ")
14
задан casperOne 5 April 2012 в 14:28
поделиться

13 ответов

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

EDIT: Существует также еще один техническая причина для использования идентификационных тегов, о которых вы, возможно, не знаете. Я снова обновил этот пост в соответствии с комментарием vol7ron и некоторыми дальнейшими исследованиями в исторических целях. Эта информация может быть весьма полезной для тех, кто плохо знаком с CSS.

Следующая схема показывает, как именно работает «каскадный» характер каскадных таблиц стилей. В этой схеме начнем со сравнения двух стилей CSS на основе самых верхних критериев схемы, то есть «1. Победитель = ! Important объявление ». Если в этом аспекте один стиль имеет более высокий приоритет, чем другой, он выигрывает. Если они совпадают в этом аспекте, переходите к следующему критерию в, пока не найдете дифференцирующий фактор.

  1. Победитель = ! Важное объявление .
    • Например. # some-element {color: blue! Important;} превосходит # some-element {color: red;} .
  2. Winner = Встроенный CSS .
    • Например:
      • какой-то контент
        превосходит ...
      • и ...
      • .
  3. Победитель = Наибольшее количество селекторов ID .
    • Например. # some-element # id-2 {color: blue;} превосходит # some-element {color: red;} .
  4. Победитель = # наибольшее количество в классе Селекторы , псевдокласса и других атрибутов .
    • Например. .some-elements.class-2 {color: blue;} превосходит .some-elements {color: red;} .
  5. Победитель = Наибольшее количество элементов имена и псевдоэлементов в селекторе.
    • Например. # some-element: hover {color: blue;} beats # some-element {color: red;} .
  6. Winner = Последний раз прочитано на машине.
    • Например:
      • beats...
      • because internal CSS is read after external CSS.
4
ответ дан 1 December 2019 в 06:03
поделиться

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

Например, если вы используете jQuery, проверьте следующее: правила производительности jquery

10
ответ дан 1 December 2019 в 06:03
поделиться

Нет, но если у вашего элемента есть id , почему бы не использовать его для стилизации?

То же самое можно сказать и об именах элементов - вы ничего не можете сделать с p , что нельзя было сделать с class = 'paragraph' . Это не означает, что добавлять class = 'paragraph' в каждый элемент

- хорошая идея.

8
ответ дан 1 December 2019 в 06:03
поделиться

Вам НЕ ОБЯЗАТЕЛЬНО использовать идентификаторы. Не существует дизайна, который можно было бы создать с использованием идентификаторов, которые нельзя создать с помощью классов.

С учетом сказанного, использование идентификатора имеет то преимущество, что четко помечает селектор как применимый только к одному элементу на странице. Я обычно использую их для стилизации элементов в своих шаблонах страниц (#Content, #Navigation и т. Д.).

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

Но, опять же, неважно, используете ли вы идентификаторы или нет.

4
ответ дан 1 December 2019 в 06:03
поделиться

IDs идентифицировать , классы классифицируют . Этот момент упоминался здесь несколько раз, более или менее.

Примером может быть:

<div class="author" id="stephen">[...]</div>

С точки зрения специфичности CSS, таргетинг ID сделает правила CSS более конкретными, чем правила с классами, даже с несколькими классами.

Таким образом:

p#recent {}

более конкретен, чем

body>p.news.recent {}

, и когда пользовательский агент находит оба из них, первое будет преобладать.

5
ответ дан 1 December 2019 в 06:03
поделиться

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

1
ответ дан 1 December 2019 в 06:03
поделиться

IMO, использование стилей на основе идентификаторов - плохая идея.

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

Классы CSS, с другой стороны, могут использоваться несколько раз или не использоваться вообще.

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

0
ответ дан 1 December 2019 в 06:03
поделиться

Я использую идентификатор, когда знаю, что собираюсь использовать javascript для этого конкретного элемента. Идентификаторы намного быстрее, чем классы в javascript.

0
ответ дан 1 December 2019 в 06:03
поделиться

Основная причина, по которой я использую идентификаторы в CSS, - это макет. Если у меня один верхний и нижний колонтитулы, то:

#header
{
...
...
...
}

#footer
{
...
...
...
}

Или одна оболочка для моего основного содержимого, или одна правая боковая панель. Если кто-то решит, что ему нравится мой макет и он хочет просмотреть исходный код, это легко увидеть.

0
ответ дан 1 December 2019 в 06:03
поделиться

Using ID for styling makes sense if it's an element that doesn't have duplicate, especially if it's something that shows up in all/most pages.

E.g.:

  • Page header & footer
  • Search box (the thing you can see up there)
  • Navigation list (something like the thing on the right)
20
ответ дан 1 December 2019 в 06:03
поделиться

Я склонен думать о взаимосвязи id и класса в HTML как об аналоге объектно-ориентированного программирования: id похож на экземпляр class .

Я использую классы чаще, чем идентификаторы, и часто использую мультиклассовые селекторы (например, .film.drama ). Но если я действительно хочу идентифицировать конкретный элемент, чтобы применить определенный стиль или поведение, то я назначу id , а часто и класс . Например,

<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 ' s для определенных элементов страницы, которые обязательно присутствуют на странице только один раз:

<ul class="sidebar" id="site-meta">[...]</ul>
4
ответ дан 1 December 2019 в 06:03
поделиться

Единственное, что я могу придумать для использования идентификатора, это если у вас есть война специфичности - два элемента с одинаковой специфичностью. Применение ID придаст вашему элементу более высокую специфичность - +100, если быть точным.

Таким образом, в случае, когда у вас есть два стиля, определенных с равной специфичностью, вы можете захотеть «заткнуть» один, применив более высокую специфичность к другому. При этом вы можете добиться того же, применив более конкретный класс к этому селектору, что увеличит специфичность на 10.

ID = 100 (#foo) class = 10 (.bar) element = 1 (div)

1
ответ дан 1 December 2019 в 06:03
поделиться

Лично я предпочитаю использовать идентификаторы для статических элементов страницы (верхние и нижние колонтитулы). Причина - вес страницы.

id = "h" светлее, чем class = "h".

На мой взгляд, на счету каждый байт.

0
ответ дан 1 December 2019 в 06:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: