Яка стандартна умова іменування для html / css ідентифікаторів та класів?


250

Це залежить від платформи, яку ви використовуєте, чи є загальна конвенція, яку пропонують / дотримуються більшість розробників?

Є кілька варіантів:

  1. id="someIdentifier"' - виглядає досить узгоджено з кодом JavaScript.
  2. id="some-identifier" - більше схожий на атрибути, схожі на html5 та інші речі в html.
  3. id="some_identifier" - виглядає цілком відповідає рубіновому коду і все ще є дійсним ідентифікатором всередині Javascript

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

Чи є правильна відповідь на це?



Відповіді:


256

Немає жодної.

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

Я бачив усі ці умовності, що використовуються всюди. Використовуйте той, який ви вважаєте найкращим - той, який виглядає найприємніше / найпростішим для читання, а також найпростіший набір, тому що ви будете користуватися ним багато. Наприклад, якщо у вас є нижня клавіша підкреслення на нижній стороні клавіатури (навряд чи, але цілком можливо), тоді дотримуйтесь дефісів. Просто займіться тим, що найкраще для себе. Крім того, всі 3 ці конвенції легко читаються. Якщо ви працюєте в команді, не забудьте дотримуватися визначеної командою конвенції (якщо така є).

Оновлення 2012 року

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

Оновлення 2013 року

Схоже, мені подобається щорічно перемішувати речі ... Після переходу на піднесений текст та використання Bootstrap деякий час я повернувся до тире. Мені зараз вони виглядають набагато чистіше, ніж un_der_scores або camelCase. Моя оригінальна точка все ще стоїть: не існує стандарту.

Оновлення 2015 року

Цікавий кутовий випадок з умовами тут - Іржа . Мені дуже подобається мова, але компілятор попередить вас, якщо ви визначатимете речі, використовуючи щось інше, крім underscore_case. Можна вимкнути попередження, але цікаво, що компілятор настійно пропонує конвенцію за замовчуванням. Я думаю, що у великих проектах це призводить до більш чистого коду, що не є поганим.

Оновлення 2016 ( ви просили про це)

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

Оновлення 2019 ( ви просили про це)

Після того, як довгий час не писав CSS, я почав працювати в місці, де OOCSS використовує один із своїх продуктів. Особисто мені здається, що уроки сміття скрізь неприємні, але не потрібно весь час переходити між HTML та CSS, відчуваючи себе досить продуктивним.

Я все ще влаштувався на BEM. Це багатослівно, але простір імен робить роботу з ним у компонентах React дуже природним. Він також чудово підбирає конкретні елементи під час тестування браузера.

OOCSS та BEM - лише деякі стандарти CSS. Виберіть той, який працює для вас - вони всі сповнені компромісів, тому що CSS просто не так добре .

Оновлення 2020 року

Нудне оновлення цього року. Я все ще використовую BEM. Моя позиція насправді не змінилася з оновлення 2019 року з перелічених вище причин. Використовуйте те, що працює для вас, що масштабується з розміром вашої команди та приховує стільки ж, скільки мало поганого набору функцій CSS, скільки вам подобається.


10
Я думаю, що відповідно до збільшення програми ваш ідентифікатор починає бути довгим і складним, то в цей момент тире не виглядає добре. Я також використовую Sublime і Twitter Bootstrap, і я згоден у використанні тире для таких класів, як Bootstrap. Але ідентифікатор більше для JavaScript, тому я вважаю за краще використовувати camelCase в такому випадку.
glrodasz

3
Мені все ще більше подобається стиль підкреслення. Просто тому, що всі теги та атрибути HTML - це малі регістри. Я тут уникаю жодної верхньої справи.
яоксін

3
Я бачив один квазі-стандарт (який, як видається, Bootstrap робить щось із цього) - додати "js-" до будь-яких класів CSS або ідентифікаторів, які спеціально використовуються для Javascript. Можливо, це зробить скорочення на 2016 рік :)
Dolan Antenucci

1
@Bojangles - BEM виглядає цікаво, хоча використання тире та підкреслення для різних цілей потребує певного звикання; аналогічно, і подвійні тире / підкреслення також буде спасибі :) Дякую за обмін
Dolan Antenucci

7
Однією з причин я вважаю, що люди віддають перевагу тире в ідентифікаторах CSS, а класи - для функціональності. Використовуючи опцію + стрілка вліво / вправо для переміщення кодового слова за словом, зупиняється на кожному тирі, що дозволяє легко переходити ідентифікатор або ім’я класу за допомогою комбінацій клавіш. Підкреслення та верблюд не підхоплюються, і курсор буде плисти прямо над ними, як ніби це все одне єдине слово.
Кайл Васселла


33

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

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

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

ви можете отримати доступ до значення, легко id таким чином. Але якщо використовувати дефіс, це призведе до синтаксичної помилки.

Це старий зразок, але він може працювати без jquery - :)

завдяки @jean_ralphio, існує робота, яку можна уникати

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

Стиль Dash був би стилем коду google, але мені це не дуже подобається. Я віддаю перевагу TitleCase для id та camelCase для класу.


5
Хтось позначив це. Ваша англійська могла б бути кращою, але якщо припустити, що це правильно, це здається корисним доповненням до корпусу знань, тому я проголосую проти її видалення.
Том Зич

3
Ця відповідь недооцінена!
K - Токсичність в SO зростає.

19
Обхідний шляхvar x = document.myForm['my-Id'].value;
етан

Я б не використовував жоден із цих методів, а навпаки getElementById('whatever-you-want_my_friend'). Це залежить. Якщо у вашому коді є HTML-рендеринг кодування на зворотній стороні (на сервері), використовуючи camelCase, щоб відповідати вашим умовам іменування, або snake_case, якою б не використовувалася ваша мова кодування, є, мабуть, найкращим, так що пошук як через ваш передній, так і ззаду кінцевий код відповідає.
Олівер Вільямс

12

tl; dr;

Немає жодної правдивої відповіді. Ви можете вибрати один із безлічі там або створити свої власні стандарти на основі того, що має сенс, залежно від того, з ким ви працюєте. І це на 100% залежить від платформи.


Оригінальна публікація

Ще один альтернативний стандарт, який слід врахувати:

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

І у вашому сценарії:

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

Це просто використовує camelCase, under_score та дефіс відповідно для змінних, ідентифікаторів та класів. Я читав про цей стандарт на кількох різних веб-сайтах. Хоча дещо зайве у селекторах css / jquery, надмірність полегшує пошук помилок. наприклад: Якщо ви бачите .unknown_nameабо #unknownNameу своєму CSS-файлі, ви знаєте, що вам потрібно розібратися, на що насправді йдеться.


ОНОВЛЕННЯ 2019 року

(Дефіси називаються "шашликом", підкреслення - "snake_case", і тоді у вас є "TitleCase", "pascalCase")

Мені особисто не подобаються дефіси. Я спочатку розмістив це як одну з альтернатив (тому що правила прості). Однак дефіси роблять ярлики вибору дуже важкими (подвійне клацання, ctrl/ option+ left/ rightі ctrl/ cmd+ Dу vsCode. Також, назви класів та назви файлів - це єдине місце, де працюють дефіси, оскільки вони майже завжди в лапках чи в css тощо) . Але річ із ярликом все ще діє.

Окрім змінних, назв класів та ідентифікаторів, ви також хочете ознайомитись із умовами імен файлів. І Гіт Гілки.

Група кодування мого офісу насправді мала зустріч місяць-два тому, щоб обговорити, як ми збираємось називати речі. Для гілок git ми не могли вибрати між описом 321-the_issue_description або 321_the-issue-description. (Я хотів 321_theIssueDescription, але моїм співробітникам це не сподобалось.)

Приклад, щоб продемонструвати роботу зі стандартами інших народів ...

Vue.js має стандарт. Насправді у них є два альтернативні стандарти для декількох предметів. Мені не подобаються обидві їх версії за назви файлів. Вони рекомендують "/path/kebab-case.vue"або "/path/TitleCase.Vue". Перший важче перейменувати, якщо ви спеціально не намагаєтесь перейменувати його частину. Останнє не добре для сумісності між платформами. Я б віддав перевагу "/path/snake_case.vue". Однак, працюючи з іншими людьми або існуючими проектами, важливо дотримуватися того, що вже було викладено. Тому я їду з шашликом для назви файлів у Vue, хоча я буду повністю скаржитися на це. Тому що не дотримуватися цього означає змінити багато файлів, які встановлює vue-cli.


так само, як і мої уподобання. camelCase для змінних та under_score для id, однак я зазвичай застосовую under_scores і для класів, і для імен.
Вінсент Едвард Гедарія Бінуа

Мені сподобалось, тому що це те саме, що я вважаю за краще використовувати. 'snake_case' для id, 'kebab-case' для css, 'camelCase' для функцій та змінних.
Едуардо Пас

10

Про узгодження імен для HTML та CSS немає узгодженості. Але ви можете структурувати свою номенклатуру навколо дизайну об'єктів. Більш конкретно те, що я називаю власністю та відносинами.

Власність

Ключові слова, що описують об'єкт, можна розділити дефісами.

машина-нова-повернена праворуч

Ключові слова, що описують об'єкт, також можуть поділятися на чотири категорії (які слід упорядкувати зліва направо): Об'єкт, Дескриптор об'єкта, Дія та Дескриптор дій.

автомобіль - іменник, а об’єкт
новий - прикметник, а об’єкт-дескриптор, який більш детально описує об'єкт
- дієслово, а дія, що належить об'єкту
праворуч - прикметник та дескриптор дії, що описує дія більш детально

Примітка: дієслова (дії) повинні бути в минулому часі (повернув, зробив, пробіг тощо).

Відносини

Об'єкти також можуть мати стосунки, як батько та дитина. Дескриптор Action і Action належить до батьківського об'єкта, вони не належать дочірньому об'єкту. Для відносин між об'єктами ви можете використовувати підкреслення.

автомобіль-новий-повернутий право-колесо-ліворуч-повернутий ліворуч

  • автомобіль-новий-повернутий праворуч (дотримується правила власності)
  • колесо вліво-вліво-вліво (дотримується правила власності)
  • автомобіль-новий-повернутий право-колесо-ліво-повернутий ліворуч (дотримується правила відносин)

Підсумкові зауваження:

  • Оскільки CSS нечутливий до регістру, краще написати всі імена в малі регістри (або великі регістри); уникайте футляра з верблюдами чи паскальцями, оскільки вони можуть призвести до неоднозначних імен.
  • Знайте, коли використовувати клас та коли використовувати ідентифікатор. Справа не лише в тому, що ідентифікатор, який використовується один раз на веб-сторінці. Більшу частину часу ви хочете використовувати клас, а не ідентифікатор. Веб-компоненти, такі як кнопки, форми, панелі, тощо, завжди повинні використовувати клас. Ідентифікатор може легко призвести до конфліктування імен, і його слід використовувати в порядок для простору імен для розмітки. Вищеописані поняття власності та відносин стосуються іменування класів, і ідентифікаторів, і допоможуть вам уникнути конфліктів імен.
  • Якщо вам не подобається моя умовна умова іменування CSS, є ще декілька: Конструкція структурного іменування, Конвенція про презентаційне іменування, Конвенція про семантичне іменування, Конвенція іменування BEM, Конвенція іменування OCSS тощо.

4

Ще одна причина, чому багато хто вважає за краще дефіси в ідентифікаторах CSS та класах - це функціональність.

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


Просто, щоб інших не плутати: для Windows це CTRL + Вліво /
Вправо

Це насправді моя найбільша причина використовувати підкреслення або camelCase замість тире, де це можливо. the-red-boxнеможливо вибрати простим подвійним клацанням або двома натисканнями клавіш. Також cmd / ctrl + D для vsCode. Натомість вам потрібно йти кілька разів або перетягувати мишкою. Але the_red_boxпідтримує всі три швидкі клавіші швидкого вибору.
RoboticRenaissance

1

Я нещодавно почав вивчати XML. Версія підкреслення допомагає мені відокремити все, що стосується XML (DOM, XSD тощо) від мов програмування, таких як Java, JavaScript (корпус верблюда). І я згоден з вами, що використання ідентифікаторів, дозволених у мовах програмування, виглядає краще.

Редагувати: Можливо, це не пов’язано між собою, але ось посилання на правила та рекомендації щодо іменування XML-елементів, яких я дотримуюся під час іменування ідентифікаторів (розділи "Правила іменування XML" та "Найкращі практики іменування").

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


1

Я думаю, що це залежить від платформи. При розробці в .Net MVC я використовую малі регістри стилів завантаження та дефіси для імен класів, а для ідентифікаторів використовую PascalCase.

Підставою для цього є те, що мої погляди підтримуються сильно набраними моделями перегляду. Властивості моделей C # - це регістр pascal. Задля зв’язування моделі з MVC має сенс, що назви елементів HTML, які прив'язуються до моделі, відповідають властивостям моделі перегляду, що є регістром. Для простоти мої ідентифікатори використовують ті ж умови іменування, що імена елементів, за винятком радіо кнопок і прапорців, які вимагають унікальних ідентифікаторів для кожного елемента в названій групі вводу.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.