Jaka jest praktyczna maksymalna długość identyfikatora HTML?


88

Specyfikacja HTML mówi

Tokeny ID i NAZWA muszą zaczynać się od litery ([A-Za-z]) i mogą po nich następować dowolne litery, cyfry ([0-9]), łączniki („-”), podkreślenia („_”) , dwukropki („:”) i kropki („.”).

I chociaż deklaracja SGML w HTML 4 używa wartości 65536 dla NAMELEN, zauważa „Unikaj stałych limitów”.

Ale z pewnością przeglądarki, implementacje CSS i zestawy narzędzi JavaScript muszą mieć pewne ograniczenia długości, które obsługują. Jaki jest najmniejszy taki limit, którego można bezpiecznie używać w aplikacji HTML / CSS / JS?


3
Dziękuję i +1 za wskazanie, że identyfikatory muszą zaczynać się od litery. W przeszłości bez problemu używałem identyfikatorów, takich jak „1”, „2”, „3”, „4”, „5”. Robię wiele widżetów związanych z ankietami i elementów interaktywnych, a korzystając z IDS w ten sposób, stworzyłem wygodny atrybut „score”, jak również odniesienie do identyfikatora. Dzisiaj próbowałem uruchomić CSS, który naprawdę powinien zadziałać. Przeszedłem nawet przez walidator W3C i nie ostrzegło mnie to o tym problemie ... Ale ten post tak. A teraz, kiedy zmieniłem id = '5' na 'x5x', css działa ... Teraz muszę tylko zmienić podprogram punktacji, aby usunąć x! Dzięki jeszcze raz.
Ben A. Hilleli

Odpowiedzi:


217

Właśnie przetestowano: 1 M. znaków działa w każdej nowoczesnej przeglądarce: Chrome1, FF3, IE7, Konqueror3, Opera9, Safari3.

Podejrzewam, że nawet dłuższe identyfikatory mogą stać się trudne do zapamiętania.


15
Ten facet zrobił 10 milionów postaci! stackoverflow.com/a/1496150/74585
Matthew Lock

1
Przepraszam. 1 M? Jak za 1 milion?
beliha

8
@phihag Kiedy studiowałem CS w Toronto, a instruktor żartował, że „każdy oczywiście wie, dlaczego w kalendarzu gregoriańskim w październiku 1582 roku brakuje 10 dni”, musiałem zapytać kolegę, który spojrzał na mnie protekcjonalnie i powiedział: „ Z powodu przyjęcia kalendarza gregoriańskiego, co, nigdy nie chodziłeś do szkoły podstawowej? ” Ja nie. Nie w Kanadzie. Poszedłem do szkoły podstawowej w Egipcie i zamiast tego dowiedziałem się o kalendarzu islamskim. To samo z przedrostkami SI: możesz mieć korzyści z zachodniej edukacji, ja nie. Mimo wszystko dzięki za protekcjonalną postawę.
beliha

2
@beliha Jestem całkiem pewien, że przynajmniej tutaj, w Portugalii, nigdy nie słyszałem, że w kalendarzu gregoriańskim brakuje 10 dni w październiku 1582 r. i domyślam się, że nie jestem jedyny. Wydaje mi się, że szkoła nigdy nie uczyła tego z tego, co pamiętam, więc odważne byłoby oczekiwać, że każdy będzie o tym wiedział.
user7393973

1
@beliha Poszedłem do zachodniej szkoły i nawet nie dowiedziałem się, że używamy kalendarza gregoriańskiego (przynajmniej nie pod tą nazwą), użyliśmy tylko standardowego terminu kalendarza. io tych 10 brakujących dniach dowiedziałem się z youtube.
Tinaira

15

Praktycznym ograniczeniem jest dla mnie to, jak długi identyfikator mogę przechowywać w mojej głowie podczas pracy z HTML / CSS.

Ten limit wynosi zwykle od 8 do 13 znaków, w zależności od tego, jak długo pracowałem i czy nazwy mają sens w kontekście elementu.


5
Dodam, że w razie potrzeby można rozszerzyć „wewnętrzny bufor” za pomocą prefiksów. :-)
Ben Blank,

12
To pytanie jest nadal bardzo ważne, ponieważ w przypadku RIA często identyfikatory są generowane przez kod i aby były unikalne, mogą być długie; jako przykład: window_2_panel_12_group_6_label_2 _...
Josh

3

Czasami kończę z bardzo długimi identyfikatorami, ale nazywam je konsekwentnie, aby pasowały do ​​ich dokładnego przeznaczenia.

Na przykład...

<div id="page">
    <div id="primary-content"></div>
    <div id="secondary-content"></div>
    <div id="search-form-and-primary-nav-wrapper">
        <form id="search-form"></form>
        <ul id="primary-nav">
            <li id="primary-nav-about-us"></li>
        </ul>
    </div>
    <a id="logo"><img /></a>
</div><!-- /#page -->

Jak widać, selektory są czasami dość długie. Ale jest o wiele łatwiejsze IMHO niż praca z czymś takim jak YUI grids.css, gdzie kończy się z identyfikatorami takimi jak #doc, #bd, # yui-main itp.


3
Często robię nazywanie ich w sposób dziedziczny, więc mam div id = 'user', wtedy mogę mieć trzy divy, id = 'user-stats', id = 'user-equipment', id = 'user spells ', a następnie powiedz w statystykach użytkownika, że ​​mogę mieć 5 div, id =' user-stats-force ', id =' user-stats-agility ', id =' user-stats-defense ', id =' user- stats-intellect ', id =' user-stats-heath 'itp., które uważam za bardzo przydatne do zapamiętania ich identyfikatorów, o ile zachowuję konwencje nazewnictwa, tj.,-lub _ dla spacji lub camelCase.
Psytronic,

2

Jeśli jest to pytanie akademickie, jest całkiem interesujące ... ale jeśli chodzi o najlepsze praktyki, nie powinieneś - ani chcieć - ich rozciągać. Jeśli potrzebujesz przechowywać dane o elemencie HTML, lepiej umieścić je w atrybucie obiektu DOM.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.