Действительно ли использование селектора по ID — признак абсолютно плохого стиля?

Лично я не вижу ничего плохого в умеренном использовании селекторов по ID. Например, я всегда применяю селектор #wrapper или #container к главному контент-контейнеру, или к контейнеру модальных данных #modal. Это, прежде всего, подчеркивает, что данный элемент должен быть на странице в единственном числе, и чревато проблемами тому, кто захочет добавить еще, нарушив, тем самым, заранее продуманную структуру.
Классы же своей сутью подчеркивают возможность использовать данный элемент с этим классом еще раз. И для некоторых моментов (вроде описанных выше) мне это кажется убернекрасивым в плане архитектуры и семантики, вроде использования strong вместо h1.

В то же время, против данного вида селекторов пытаются выставить аргументы (habrahabr.ru/post/160177/) вроде:

id можно использовать на странице только один раз;
класс можно использовать сколько угодно;
большинство правил, применяемых к id можно разбросать по нескольким классам;
id в 255 раз специфичнее класса;
Это значит, что вам понадобится применить 256 классов к элементу, чтобы перевесить один id.

Но ведь именно поэтому и используется селектор по ID, чтобы подчеркнуть поведение пунктов 1 - 2! Оставшиеся три пункта вообще не имеют смысла, как по мне...

Так что хотелось бы услышать мнения экспертов)
  • Вопрос задан
  • 4123 просмотра
Решения вопроса 1
somenumboola
@somenumboola
Team Lead in B-online Solutions
Пробежал статью глазами. Мое мнение - весьма бредовая статья. Клинический перфекционизм в разработке + собственные вкусовые пристрастия выставлять как канон... В ID нет ничего ничего, ну абсолютно ничего плохого, особенно учитывая описанный вами подход.

Хотя если очень захотеть то можно извращаться сколько угодно. В свое время пробовал построить веб страницу используя haml scss и модификатор строгости в CSS. Удалось полностью избавится и от классов и от ID. Вот только код был как Китайская стена длинной. Оно вам надо?

Более того при разработке фронта (javascript) от ID полностью уйти невозможно. А в общем вы правильно описали принципы применения и того и другого, так что не смешивайте конвенции сжатого и читабельного кода с идеей божественного сечения. Главное пишите, пишите и еще раз пишите, стиль как свой так и "правильный" вырабатывается только с практикой. И не всегда "как надо" необходимо больше нежели "как хочется" ;)
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 7
Тот кто говорит об избегании использовании id в селекторах - клинический идиот с завышенной самооценкой. Не слушайте этих людей.

Селекторы по классам и по id - это основа выборки элементов. Селекторы по классам предназначены для определения групп элементов. Селекторы по id для определения конкретных элементов. Сочетание этих селекторов позволяет выделять конкретные элементы в определённых группах.
Ответ написан
Комментировать
@Quilin
Full-stack разработчик
Я бы все-таки настоятельно не рекомендовал вам использовать селекторы ID именно в CSS по одной простой причине.

Движки рендеринга Gecko и Webkit при формировании Reflow и Layout соответственно строят индексы по ID ровно таким же способом, как и по имени класса. В качестве побочного явления - вы можете написать примерно то же, что и здесь, и код будет работать именно таким образом. Как по мне, это несколько неочевидное поведение, что стили применяются ко всем элементам с таким идентификатором, а не только к первому.

Многие разработчики, да и начинающие верстальщики путают концепцию CSS и их селекторов с особенностями языка XML. Надо понимать, что ID в XML - это строгий параметр, по которому строится индекс с BST, который позволяет быстро находить первое совпадение идентификатора (то же происходит и в JS при вызове document.getElementById("test")), но в CSS и при построении лайаута все гораздо менее строго. И следует заметить, что сами разработчики браузеров решили так сделать, основываясь, вероятнее всего, на концепции того, что верстальщикам нередко приходится повторно пользоваться стилями, описанными для селекторов ID.

Таким образом, с точки зрения быстродействия "#" ничем не отличается от ".", по крайней мере, в современных вебкитах и фаерфоксах. Теперь что касается точки зрения good practice.

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

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

Ну а что касается аргументов про "больше кода", могу предложить таким борцам за лишний десяток знаков перейти на шаблонизаторы; или перенять даже целиком концепцию БЭМ, тогда код совсем в разы уменьшится.
Ответ написан
Комментировать
@vdem
Смысл той статьи (насколько я понял) - стараться не использовать id в CSS, только классы. Без id в HTML обойтись, вообще говоря, сложновато (достаточно вспомнить про label, про якоря (anchors)), а в JavaScript/jQuery получение элемента с помощью простого id-селектора должно работать гораздо быстрее, чем с использованием классов.
Ответ написан
@Lici
поддерживаю. id иногда нужны и уместны.
Ответ написан
Комментировать
Глупости какие-то. Давайте тогда и в СУБД не будем идентификаторы использовать - и так ведь можно сделать выборку по определенным условиям и получить тот же результат. Вот только выполняется запрос по идентификатору в разы быстрее. То же самое с id в HTML. Как в Javascript, так и в CSS селекторы по id выполняются в разы быстрее. Только использовать их нужно разумно. Вы очень правильно подметили семантические правила для использования id и class.
Ответ написан
Комментировать
Есть мнение, что назначение css стилей через #id работает в разы медленней, чем через .class и по этому лучше не использовать #id для задания стилей.
Ответ написан
Комментировать
Я для себя давно выработал такую методику:
- все что связано именно со стилем - CLASS
- где 100% будет JS - то меняю CLASS на ID
- если блок по стилю повторяется, но на один из них надо повесить JS - то и CLASS и ID

... хотя смотрю последние проекты - во 2 и 3 пункте использую уникальные классы ... а почему?
... а вспомнил. Из-за использования различных фреймворков начал иногда точно попадать в их стили и индентификаторы. Типа в бутсрапе modal - вот и перешел на уникальные классы.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы