Каково стандартное соглашение об именах для идентификаторов и классов html/css?

Зависит ли он от используемой вами платформы или существует общее соглашение, которое предлагает большинство разработчиков?

Существует несколько вариантов:

  • id="someIdentifier"' - выглядит довольно совместимо с кодом javascript.
  • id="some-identifier" - больше похож на html5-подобные атрибуты и другие вещи в html.
  • id="some_identifier" - выглядит довольно согласованно с кодом ruby ​​и по-прежнему является допустимым идентификатором внутри Javascript

Я думал, что № 1 и № 3 выше имеют наибольший смысл, потому что они играют лучше с Javascript.

Есть ли правильный ответ на этот вопрос?

Ответ 1

Нет.

Я использую подчеркивания все время из-за дефиса, испортившего подсветку синтаксиса моего текстового редактора (Gedit), но это личное предпочтение.

Я видел, как все эти соглашения использовались повсюду. Используйте тот, который, по вашему мнению, лучше всего - тот, который выглядит лучше всего/проще для чтения для вас, а также проще всего напечатать, потому что вы будете использовать его много. Например, если у вас есть клавиша подчеркивания на нижней стороне клавиатуры (маловероятная, но вполне возможная), тогда придерживайтесь дефиса. Просто идите с тем, что лучше для вас самих. Кроме того, все три из этих конвенций легко читаемы. Если вы работаете в команде, не забудьте сохранить соглашение с командой (если оно есть).

Обновление 2012

Я изменил способ программирования со временем. Теперь я использую теперь верблюд (thisIsASelector) вместо дефиса; Я считаю последнее довольно уродливым. Используйте все, что пожелаете, что может легко измениться с течением времени.

Обновление 2013

Кажется, мне нравится смешивать вещи каждый год... После перехода на Sublime Text и использования Bootstrap некоторое время я вернулся к тире. Для меня сейчас они выглядят намного чище, чем un_der_scores или camelCase. Моя первоначальная точка все еще стоит: нет стандарта.

Обновление 2015

Интересный угловой случай с условностями здесь Rust. Мне очень нравится язык, но компилятор предупредит вас, если вы определяете материал, используя что-либо, кроме underscore_case. Вы можете отключить это предупреждение, но интересно, что компилятор настоятельно предлагает соглашение по умолчанию. Я предполагаю, что в крупных проектах это приводит к более чистым кодам, что не плохо.

Обновление 2016 (вы просили об этом)

Я принял стандарт BEM для моих проектов в будущем. Названия классов в конечном итоге довольно многословны, но я думаю, что это дает хорошую структуру и возможность повторного использования классов и CSS, которые идут с ними. Я полагаю, что BEM на самом деле является стандартом (поэтому мой no может стать yes возможно), но он все еще зависит от вас, что вы решили использовать в проекте. Самое главное: согласуйтесь с тем, что вы выберете.

Ответ 3

Я предлагаю вам использовать подчеркивание вместо дефиса (-), так как...

<form name="myForm">
  <input name="myInput" id="my-Id" value="myValue"/>
</form>

<script>
  var x = document.myForm.my-Id.value;
  alert(x);
</script>

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

Это старый образец, но он может работать без jquery - :)

благодаря @jean_ralphio, есть способ обойти

var x = document.myForm['my-Id'].value;

Стиль Dash - это стиль Google Code, но он мне не очень нравится. Я бы предпочел TitleCase для id и camelCase для класса.

Ответ 4

Согласовано соглашение об именах для HTML и CSS. Но вы можете структурировать свою номенклатуру вокруг дизайна объекта. Более конкретно то, что я называю "Собственность и отношения".

Собственность

Ключевые слова, описывающие объект, могут быть разделены дефисом.

автомобиль новый поворачивал вправо

Ключевые слова, описывающие объект, также могут подразделяться на четыре категории (которые должны быть упорядочены слева направо): Object, Object-Descriptor, Action и Action-Descriptor.

автомобиль - существительное, а объект
new - прилагательное и объект-дескриптор, который описывает объект более подробно
turn - глагол и действие, которое принадлежит объекту
right - прилагательное и дескриптор действия, который описывает действие более подробно

Примечание: глаголы (действия) должны быть в прошедшем времени (повернуты, выполнены, запущены и т.д.).

Отношения

Объекты могут также иметь отношения, такие как родительский и дочерний. Action и Action-Descriptor принадлежит родительскому объекту, они не принадлежат к дочернему объекту. Для отношений между объектами вы можете использовать символ подчеркивания.

автомобиль новый поворачивал right_wheel налево поворачивал влево

  • car-new-turn-right (следует правилу собственности)
  • wheel-left-turn-left (следует правилу владения)
  • car-new-turn-right_wheel-left-turn-left (следует за правилом отношения)

Заключительные примечания:

  • Поскольку CSS не чувствителен к регистру, лучше записать все имена в нижнем регистре (или в верхнем регистре); избегайте случаев верблюда или паскаля, поскольку они могут привести к неоднозначным именам.
  • Знайте, когда использовать класс и когда использовать идентификатор. Это не просто идентификатор, который используется один раз на веб-странице. В большинстве случаев вы хотите использовать класс, а не идентификатор. Веб-компоненты, такие как (кнопки, формы, панели и т.д.), Должны всегда использовать класс. Идентификатор может легко привести к конфликтам именования и должен использоваться экономно для namespacing вашей разметки. Вышеупомянутые концепции владения и отношения применяются для обозначения обоих классов и идентификаторов и помогут избежать конфликтов имен.
  • Если вам не нравится мое соглашение об именовании CSS, есть еще несколько других: соглашение об организационном наименовании, соглашение о присвоении имен, соглашение о семантическом именовании, соглашение об именах BEM, соглашение об именах OCSS и т.д.

Ответ 5

Еще один альтернативный стандарт:

<div id="id_name" class="class-name"></div>

И в вашем script:

var variableName = $("#id_name .class-name");

Это просто использует camelCase, under_score и дефис, соответственно для переменных, идентификаторов и классов. Я читал об этом стандарте на нескольких разных сайтах. Несмотря на небольшую избыточность в селекторах css/jquery, избыточность упрощает поиск ошибок. например: Если вы видите .unknown_name или #unknownName в вашем файле CSS, вы знаете, что вам нужно выяснить, что на самом деле ссылается.

Ответ 6

Другая причина, по которой многие предпочитают дефисы в именах CSS и именах классов, - это функциональность.

Использование сочетаний клавиш, таких как option + left/right (или ctrl + left/right в Windows) для перемещения кодового слова по слову, останавливает курсор на каждой тире, что позволяет точно пересечь идентификатор или имя класса с помощью сочетаний клавиш. Подчеркивания и camelCase не обнаруживаются, и курсор дрейфует прямо над ними, как будто это все одно слово.

Ответ 7

Недавно я начал изучать XML. Версия underscore помогает мне отделить все связанные с XML (DOM, XSD и т.д.) Языки программирования, такие как Java, JavaScript (случай верблюда). И я согласен с вами в том, что использование идентификаторов, которые разрешены в языках программирования, выглядит лучше.

Изменить: может быть несвязано, но вот ссылка на правила и рекомендации по именованию XML-элементов, которые я использую при именовании идентификаторов (разделы "Правила именования XML" и "Наилучшие правила именования" ).

http://www.w3schools.com/xml/xml_elements.asp

Ответ 8

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

Это объясняется тем, что мои представления опираются на строго типизированные модели представлений. Свойства моделей С# являются паскалями. Ради связывания модели с MVC имеет смысл, что имена элементов HTML, которые связываются с моделью, согласуются со свойствами модели представления, которые являются регистром Паскаля. Для простоты мои идентификаторы используют то же соглашение об именах, что и имена элементов, за исключением переключателей и флажков, которые требуют уникальных идентификаторов для каждого элемента в именованной группе ввода.