Seit diese Frage gestellt wurde, hat sich das Web ziemlich weiterentwickelt. Es ist wahrscheinlich, dass Autoren von Webkomponenten (benutzerdefinierte Elemente) hier landen, um herauszufinden, welche gültigen Namen beim Definieren von Attributen für benutzerdefinierte Elemente verwendet werden können.
Es gibt hier einige Antworten, die teilweise richtig sind, daher werde ich versuchen, sie zu aggregieren und basierend auf den neuesten Spezifikationen zu aktualisieren.
Erstens können Attributnamen in HTML5 mit den meisten Zeichen beginnen und sind viel freizügiger als in früheren HTML-Versionen. Die Antwort von @ S.Lott ist korrekt für HTML 2 und XHTML, jedoch nicht für HTML5.
Für HTML5: ( spec )
Attributnamen müssen aus einem oder mehreren anderen Zeichen als den Leerzeichen U + 0000 NULL, U + 0022 QUOTATION MARK ("), U + 0027 APOSTROPHE ('), U + 003E GREATER-THAN SIGN (>), U + bestehen 002F SOLIDUS (/) und U + 003D EQUALS SIGN (=) Zeichen, die Steuerzeichen und alle Zeichen, die nicht durch Unicode definiert sind. In der HTML-Syntax können Attributnamen, auch für Fremdelemente, mit beliebigen Zeichen geschrieben werden Mischung aus Klein- und Großbuchstaben, bei denen die ASCII-Groß- und Kleinschreibung nicht mit dem Namen des Attributs übereinstimmt.
Abgesehen davon sind andere Kommentatoren hier korrekt. Wenn Sie ein Attribut für ein integriertes Element verwenden, das nicht in der Liste der gültigen Attribute enthalten ist, verstoßen Sie technisch gegen die Spezifikation. Browser-Autoren haben jedoch eine große Toleranz dafür, so dass es in der Praxis nicht (viel?) Schaden anrichtet. Viele Bibliotheken nutzen dies, um reguläre HTML-Tags zu verbessern, was zu Verwirrung führt, da es sich technisch gesehen nicht um gültiges HTML handelt. HTML5 bietet einen Mechanismus für benutzerdefinierte Daten in Attributen unter Verwendung der Namenskonvention für Datenattribute.
Diese Regeln unterscheiden sich für benutzerdefinierte Elemente.
Benutzerdefinierte Elementautoren können beliebige Attribute für ihr Element implementieren. Die Namen der Attribute sind jedoch restriktiver als bei HTML5. Tatsächlich erfordert die Spezifikation , dass der Attributname den Einschränkungen des XML-Namens entspricht :
Die ASCII-Symbole und Satzzeichen sowie eine relativ große Gruppe von Unicode-Symbolzeichen werden von Namen ausgeschlossen, da sie als Trennzeichen in Kontexten nützlicher sind, in denen XML-Namen außerhalb von XML-Dokumenten verwendet werden. Wenn Sie diese Gruppe bereitstellen, erhalten diese Kontexte harte Garantien dafür, was nicht Teil eines XML-Namens sein kann. Das Zeichen # x037E, GREEK QUESTION MARK, wird ausgeschlossen, da es bei Normalisierung zu einem Semikolon wird, das die Bedeutung von Entitätsreferenzen ändern kann.
Namen und Token
[4] NameStartChar :: = ":" | [AZ] | "_" | [az] | [# xC0- # xD6] | [# xD8- # xF6] | [# xF8- # x2FF] | [# x370- # x37D] | [# x37F- # x1FFF] | [# x200C- # x200D] | [# x2070- # x218F] | [# x2C00- # x2FEF] | [# x3001- # xD7FF] | [# xF900- # xFDCF] | [# xFDF0- # xFFFD] | [# x10000- # xEFFFF]
[4a] NameChar :: = NameStartChar | "-" | "." | [0-9] | # xB7 | [# x0300- # x036F] | [# x203F- # x2040]
[5] Name :: = NameStartChar (NameChar) *
[6] Namen :: = Name (# x20 Name) *
[7] Nmtoken :: = (NameChar) +
[8] Nmtokens :: = Nmtoken (# x20 Nmtoken) *
Für benutzerdefinierte Elementnamen können Sie also den oberen / unteren alphanumerischen Wert, den Unterstrich "_", den Doppelpunkt ":" oder eines der in der Spezifikation genannten Unicode-Zeichen als Startzeichen verwenden und dann "-", Punkte "einfügen. ", alpha etc ... als Körperzeichen.