367 Stimmen

Wie lautet die Standard-Namenskonvention für html/css ids und Klassen?

Hängt es von der Plattform ab, die Sie verwenden, oder gibt es eine gemeinsame Konvention, die die meisten Entwickler vorschlagen/befolgen?

Es gibt mehrere Möglichkeiten:

  1. id="someIdentifier"' - sieht ziemlich konsistent mit Javascript-Code aus.
  2. id="some-identifier" - sieht eher aus wie html5-ähnliche Attribute und andere Dinge in html.
  3. id="some_identifier" - sieht ziemlich konsistent mit Ruby-Code aus und ist immer noch ein gültiger Bezeichner innerhalb von Javascript

Ich dachte, dass die oben genannten Nummern 1 und 3 am sinnvollsten sind, weil sie besser mit Javascript zusammenarbeiten.

Gibt es eine richtige Antwort auf diese Frage?

381voto

Bojangles Punkte 95745

Es gibt keins.

Ich verwende immer Unterstriche, da Bindestriche die Syntaxhervorhebung in meinem Texteditor (Gedit) stören, aber das ist eine persönliche Vorliebe.

Ich habe gesehen, dass all diese Konventionen überall verwendet werden. Verwenden Sie die Konvention, die Sie für die beste halten - diejenige, die für Sie am schönsten/leichtesten zu lesen und am einfachsten zu tippen ist, weil Sie sie häufig verwenden werden. Wenn Sie zum Beispiel Ihre Unterstrich-Taste auf der Unterseite der Tastatur haben (unwahrscheinlich, aber durchaus möglich), dann bleiben Sie bei Bindestrichen. Entscheiden Sie sich einfach für das, was für Sie am besten ist. Außerdem sind alle 3 Konventionen gut lesbar. Wenn Sie in einem Team arbeiten, denken Sie daran, sich an die vom Team vorgegebene Konvention zu halten (falls vorhanden).

Aktualisierung 2012

Ich habe meine Programmierung im Laufe der Zeit geändert. Ich verwende jetzt Groß- und Kleinschreibung ( thisIsASelector ) anstelle von Bindestrichen; letztere finde ich ziemlich hässlich. Verwenden Sie was auch immer Sie bevorzugen, was sich im Laufe der Zeit leicht ändern kann.

Update 2013

Es sieht so aus, als würde ich jedes Jahr etwas Neues ausprobieren... Nachdem ich auf Sublime Text umgestiegen bin und eine Zeit lang Bootstrap verwendet habe, bin ich wieder zu Bindestrichen zurückgekehrt. Für mich sehen sie jetzt viel sauberer aus als un_der_scores oder camelCase. Mein ursprünglicher Standpunkt bleibt jedoch bestehen: Es gibt ist nicht eine Norm.

Update 2015

Ein interessanter Eckfall mit Konventionen ist hier Rost . Ich mag die Sprache wirklich, aber der Compiler warnt Sie, wenn Sie etwas anderes definieren als underscore_case . Sie können die Warnung abschalten, aber es ist interessant, dass der Compiler standardmäßig eine Konvention vorschlägt. Ich kann mir vorstellen, dass es in größeren Projekten zu saubererem Code führt, was keine schlechte Sache ist.

Update 2016 ( Sie darum gebeten)

Ich habe die BEM Standard für meine zukünftigen Projekte. Die Klassennamen sind am Ende ziemlich langatmig, aber ich denke, es gibt eine gute Struktur und Wiederverwendbarkeit für die Klassen und CSS, die mit ihnen geht. Ich nehme an, BEM ist eigentlich eine Norm (so mein no wird ein yes vielleicht), aber es liegt immer noch an Ihnen, was Sie in einem Projekt verwenden wollen. Das Wichtigste ist: Bleiben Sie bei Ihrer Wahl konsequent.

Update 2019 ( Sie darum gebeten)

Nachdem ich eine ganze Weile kein CSS geschrieben hatte, begann ich an einem Ort zu arbeiten, der OOCSS in einem ihrer Produkte. Ich persönlich finde es ziemlich unangenehm, überall Klassen zu verstreuen, aber nicht ständig zwischen HTML und CSS hin- und herspringen zu müssen, fühlt sich ziemlich produktiv an.

Ich habe mich aber immer noch für BEM entschieden. Es ist langatmig, aber das Namespacing macht das Arbeiten mit ihm in React-Komponenten sehr natürlich. Es ist auch großartig für die Auswahl bestimmter Elemente bei Browser-Tests.

OOCSS und BEM sind nur einige der CSS-Standards, die es gibt. Suchen Sie sich einen aus, der für Sie funktioniert - sie sind alle voller Kompromisse, denn CSS ist einfach nicht so gut .

Aktualisierung 2020

Ein langweiliges Update in diesem Jahr. Ich benutze immer noch BEM. Meine Position hat sich gegenüber dem Update 2019 aus den oben genannten Gründen nicht wirklich geändert. Verwenden Sie das, was für Sie funktioniert, das mit der Größe Ihres Teams skaliert und so viel oder so wenig wie möglich von den schlechten Funktionen von CSS verbirgt, wie Sie möchten.

49voto

Weijing Jay Lin Punkte 2480

Tl;dr; 2022

Es scheint, dass "-" jetzt der Industriestandard ist.

# Veraltet

Ich schlage vor, dass Sie einen Unterstrich statt eines Bindestrichs (-) verwenden, da ...

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

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

können Sie auf den Wert über die ID leicht zugreifen. Wenn Sie jedoch einen Bindestrich verwenden, kommt es zu einem Syntaxfehler.

Dies ist ein altes Beispiel, aber es kann ohne Jquery funktionieren -:)

Dank @jean_ralphio gibt es eine Möglichkeit, dies zu vermeiden, indem

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

Der Dash-Stil wäre ein Google-Code-Stil, aber ich mag ihn nicht wirklich. Ich würde TitleCase für id und camelCase für class bevorzugen.

24voto

RoboticRenaissance Punkte 1012

Tl;dr;

Es gibt keine einzig wahre Antwort. Sie können einen der vielen Standards wählen oder Ihre eigenen Standards erstellen, je nachdem, mit wem Sie zusammenarbeiten. Und das ist zu 100 % abhängig von der Plattform.


Original-Post

Nur ein weiterer alternativer Standard, der in Betracht gezogen werden sollte:

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

Und in Ihrem Drehbuch:

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

Hier wird lediglich ein camelCase, under_score bzw. hyphen-ation für Variablen, ids und Klassen verwendet. Ich habe über diesen Standard auf verschiedenen Websites gelesen. Obwohl ein wenig redundant in css/jquery-Selektoren, Redundanzen machen es einfacher, Fehler zu fangen. zB: Wenn Sie sehen .unknown_name o #unknownName in Ihrer CSS-Datei, wissen Sie, dass Sie herausfinden müssen, worauf sich das eigentlich bezieht.


UPDATE 2019

(Bindestriche werden als "Kebab-Case" bezeichnet, Unterstriche als "Snake_case", und dann gibt es noch "Title Case", "PascalCase" und "CamelCase")

Ich persönlich mag keine Bindestriche. Ursprünglich habe ich dies als eine Alternative gepostet (weil die Regeln einfach sind). Allerdings machen Bindestriche Auswahlkürzel sehr schwierig (Doppelklick, ctrl / option + left / right y ctrl / cmd + D in vsCode. Außerdem sind Klassennamen und Dateinamen die einzigen Orte, an denen Bindestriche funktionieren, weil sie fast immer in Anführungszeichen oder in CSS usw. stehen. Aber die Abkürzung Sache gilt immer noch.

Zusätzlich zu Variablen, Klassennamen und IDs sollten Sie auch die Konventionen für Dateinamen beachten. Und Git-Zweige.

Die Kodiergruppe meines Büros hatte vor ein oder zwei Monaten ein Treffen, um zu besprechen, wie wir die Dinge benennen wollten. Für Git-Zweige konnten wir uns nicht zwischen 321-the_issue_description und 321_the-issue-description entscheiden. (Ich wollte 321_theIssueDescription, aber das gefiel meinen Kollegen nicht.)

Ein Beispiel, um zu zeigen, wie man mit den Normen anderer Leute arbeitet...

Vue.js hat einen Standard. Eigentlich haben sie zwei alternative Standards für mehrere ihrer Elemente. Ich mag beide Versionen für Dateinamen nicht. Sie empfehlen entweder "/path/kebab-case.vue" o "/path/PascalCase.Vue" . Ersteres ist schwieriger umzubenennen, es sei denn, Sie wollen speziell einen Teil davon umbenennen. Letzteres ist nicht gut für die plattformübergreifende Kompatibilität. Ich würde bevorzugen "/path/snake_case.vue" . Wenn man jedoch mit anderen Personen oder bestehenden Projekten arbeitet, ist es wichtig, sich an den bereits festgelegten Standard zu halten. Daher verwende ich für Dateinamen in Vue die Groß-/Kleinschreibung, auch wenn ich mich darüber beschweren werde. Denn dem nicht zu folgen bedeutet, eine Menge Dateien zu ändern, die vue-cli einrichtet.


UPDATE 2021

An diesem Punkt in meinem Leben versuche ich, ausschließlich die kebab-case für Projektdateinamen.

Und eine seltsame Kombination aus snake_case.kebab-case.dot.case.Title.Case für Dateien, die für die menschliche Kommunikation bestimmt sind. Eine Excel-Datei, die einen Bericht enthält, könnte zum Beispiel sein "Report_Name-Report_Type-2021.05.04_13.02" für einen Bericht, der am 4. Mai um 13:02 Uhr erstellt wurde. Ich wollte eigentlich Title Case im Berichtsnamen, aber wenn Sie die Datei erneut speichern, erhalten Sie keine Leerzeichen. Und ich wollte eigentlich die Groß- und Kleinschreibung verwenden und den Datumsstempel isokonform machen, aber der Kunde war verwirrt, weil er das amerikanische Monat-Tag-Jahr-Format für Daten verwendet. Ein anderes Beispiel ist "SomeRequestForm-ProjectName-01.pdf" .

Client-lesbares Material ist schwer zu handhaben.

Ich vermeide Leerzeichen, wo immer es möglich ist (und der Kunde sie nicht verlangt), weil sie nicht cli-sicher sind. Ich habe den Angular-Ansatz für Dateinamen in Projekten übernommen. some-thing.type.ts , wobei die Beschreibung lautet kebab-case und der Standardtyp des in der Datei gespeicherten Objekts wird durch Punkte wie die Erweiterung getrennt. Ich mache normalerweise nicht some-area_some-thing.type.ts Es sei denn, die Datei ist eigenständig und portabel. Wenn sie in einem Projekt enthalten ist, verwende ich einfach Ordner wie some-area/some-thing.type.ts

Außerdem verwende ich kebab-case für css-Klassen, und ich mische manchmal snakeAndCamel_case für Html-Ids, aber normalerweise verwende ich keine Html-Ids mehr, weil ich mit wiederverwendbaren Komponenten arbeite, und das geht nicht. Wenn ich ids verwende, ist es typischerweise etwas wie someComponent-someElement_49bea6c9-551b-400a-a3e0-59ed40967646 wobei diese uuid eine generierte uuid ist, die von jeder Komponenteninstanz selbst vergeben wird. Dies ist nicht in Angular unterstützt, so dass ich neige dazu, mit anderen Workarounds zu kommen, wie halten die gesamte Formulareingabe innerhalb des Labels.

Außerdem verwende ich für Variablennamen immer noch hauptsächlich CamelCase, außer für Klassennamen und manchmal für Funktionsnamen. Wenn ich mit einem externen Paket arbeite, mache ich einfach das, was sie tun. Für Dinge, die Umgebungsvariablen imitieren, verwende ich ALL_CAPS_SNAKE_CASE Dies schließt node.js ein. process.env.SOME_ENV_VAR y combinedConfiguration.SOME_ENV_VAR (für den Fall, dass ich process.env mit einem Parameter config überschreibe)

Mein Fazit: Das gilt auch noch einige Jahre später. Es gibt keine einzig wahre Antwort. Aber versuchen Sie, einen Stil pro Projekt beizubehalten. Und reduzieren Sie die Anzahl der Wörter in Ihren Symbolen wo immer möglich.

12voto

tim-montague Punkte 13518

Es gibt keine vereinbarte Namenskonvention für HTML und CSS. Aber Sie könnten Ihre Nomenklatur nach dem Objektdesign strukturieren. Genauer gesagt um das, was ich "Ownership" und "Relationship" nenne.

Eigentümerschaft

Schlüsselwörter, die das Objekt beschreiben, können durch Bindestriche getrennt werden.

Auto-Neu-Rechts-gedreht

Schlüsselwörter, die das Objekt beschreiben, können auch in vier Kategorien fallen (die von links nach rechts geordnet werden sollten): Objekt, Objekt-Deskriptor, Aktion und Aktions-Deskriptor.

Auto - ein Substantiv, und ein Objekt
neu - ein Adjektiv und ein Objekt-Deskriptor, der das Objekt näher beschreibt
gedreht - ein Verb und eine Handlung, die zum Objekt gehört
right - ein Adjektiv und ein Handlungsdeskriptor, der die Handlung näher beschreibt

Hinweis: Verben (Handlungen) sollten in der Vergangenheitsform stehen (drehte sich um, tat, rannte usw.).

Beziehung

Objekte können auch Beziehungen wie Eltern und Kind haben. Die Aktion und der Aktions-Deskriptor gehören zum übergeordneten Objekt, sie gehören nicht zum untergeordneten Objekt. Für Beziehungen zwischen Objekten können Sie einen Unterstrich verwenden.

Auto-neu-rechts-gedreht-Rad-links-gedreht-links

  • Auto-neu-nach-rechts-gedreht (folgt der Besitzregel)
  • Rad-links-gedreht-links (entspricht der Eigentumsregel)
  • Auto-neu-rechts-abgedreht-Rad-links-abgedreht-links (folgt der Beziehungsregel)

Abschließende Anmerkungen:

  • Da bei CSS die Groß- und Kleinschreibung keine Rolle spielt, ist es besser, alle Namen in Kleinbuchstaben (oder Großbuchstaben) zu schreiben; vermeiden Sie Camel-Case oder Pascal-Case, da sie zu mehrdeutigen Namen führen können.
  • Sie wissen, wann Sie eine Klasse und wann Sie eine ID verwenden sollten. Es geht nicht nur darum, dass eine id einmal auf der Webseite verwendet wird. In den meisten Fällen sollten Sie eine Klasse und nicht eine id verwenden. Webkomponenten wie Schaltflächen, Formulare, Panels usw. sollten immer eine Klasse verwenden. Id's können leicht zu Namenskonflikten führen und sollten nur sparsam für Namensabstände im Markup verwendet werden. Die oben genannten Konzepte von Eigentum und Beziehung gelten sowohl für die Benennung von Klassen als auch von Ids und helfen Ihnen, Benennungskonflikte zu vermeiden.
  • Wenn Ihnen meine CSS-Benennungskonvention nicht gefällt, gibt es auch noch andere: Strukturelle Namenskonvention, Präsentationsnamenskonvention, Semantische Namenskonvention, BEM-Namenskonvention, OCSS-Namenskonvention, usw.

4voto

Kyle Vassella Punkte 1909

Ein weiterer Grund, warum viele Menschen Bindestriche in CSS-id- und Klassennamen bevorzugen, ist die Funktionalität.

Mit Tastaturkürzeln wie option + left / right (oder ctrl + left / right unter Windows), um den Code Wort für Wort zu durchlaufen, hält der Cursor bei jedem Bindestrich an, so dass Sie die ID oder den Klassennamen mithilfe von Tastenkombinationen genau durchlaufen können. Underscores und camelCase werden nicht erkannt, und der Cursor bewegt sich über sie hinweg, als ob es sich um ein einziges Wort handeln würde.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X