Какова практическая максимальная длина идентификатора HTML?


88

В спецификации HTML говорится

Жетоны ID и NAME должны начинаться с буквы ([A-Za-z]) и могут сопровождаться любым количеством букв, цифр ([0-9]), дефисами ("-"), подчеркиванием ("_"). , двоеточия (":") и точки (".").

И хотя в объявлении SGML HTML 4 для NAMELEN используется значение 65536, в нем отмечается: «Избегайте фиксированных ограничений».

Но, безусловно, браузеры, реализации CSS и наборы инструментов JavaScript должны иметь некоторые ограничения на длину, которую они поддерживают. Каков наименьший такой предел, который можно безопасно использовать в приложении HTML / CSS / JS?


3
Спасибо и +1 за указание на то, что идентификаторы должны начинаться с буквы. Раньше я без проблем использовал такие идентификаторы, как «1», «2», «3», «4», «5». Я использую множество виджетов и интерактивных элементов, связанных с опросами, и использую IDS, подобную этой, созданную для удобного атрибута «оценка», а также ссылки на идентификатор. Сегодня я пытался заставить работать CSS, который действительно должен был работать. Я даже пропустил его через валидатор W3C, и он не предупредил меня об этой проблеме ... Но этот пост сделал. И теперь, когда я изменил id = '5' на 'x5x', css работает ... Теперь мне просто нужно изменить подпрограмму подсчета очков, чтобы убрать x! Еще раз спасибо.
Бен А. Хиллели

Ответы:


217

Только что протестировано: 1 миллион символов работает во всех современных браузерах: Chrome1, FF3, IE7, Konqueror3, Opera9, Safari3.

Я подозреваю, что даже длинные идентификаторы будет трудно запомнить.


15
Этот парень сделал 10 «миллионов» персонажей! stackoverflow.com/a/1496150/74585
Мэтью Лок,

1
Мне жаль. 1 млн? Как в 1 миллион?
beliha

8
@phihag Когда я изучал CS в Торонто, и инструктор язвительно заметил, что «каждый, конечно, знает, почему в григорианском календаре в октябре 1582 года пропущено 10 дней», мне пришлось спросить коллегу, который снисходительно посмотрел на меня и сказал: « Что, вы никогда не ходили в начальную школу из-за принятия григорианского календаря? " Я не знал. Не в Канаде. Я ходил в начальную школу в Египте и вместо этого узнал об исламском календаре. То же самое и с приставками SI: вы можете получить пользу от западного образования, а я - нет. Но все же спасибо за снисходительное отношение.
beliha

2
@beliha Совершенно уверен, что, по крайней мере, здесь, в Португалии, я никогда не слышал, чтобы в грегорианском календаре пропущено 10 дней в октябре 1582 года, и я предполагаю, что я не единственный. Я не думаю, что школа когда-либо учила этому, исходя из того, что я помню, поэтому было бы смело ожидать, что все это узнают.
user7393973

1
@beliha Я ходил в западную школу и даже не узнал, что мы используем григорианский календарь (по крайней мере, под этим названием), мы просто использовали стандартный календарный термин. и про эти 10 пропавших без вести дней я узнал из youtube.
Тинаира

15

Практическим пределом для меня является длительность идентификатора, который я могу хранить в голове во время работы с HTML / CSS.

Этот предел обычно составляет от 8 до 13 символов, в зависимости от того, как долго я работаю, и имеют ли имена смысл в контексте элемента.


5
Я бы добавил, что при необходимости можно будет расширить свой «внутренний буфер» с помощью префиксов. :-)
Бен Бланк,

12
Этот вопрос по-прежнему очень важен, потому что с RIA часто идентификаторы генерируются кодом и, чтобы быть уникальными, могут быть длинными; в качестве примера: window_2_panel_12_group_6_label_2 _...
Джош,

3

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

Например...

<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 -->

Как видите, селекторы иногда бывают довольно длинными. Но, IMHO, это намного проще, чем работать с чем-то вроде YUI grids.css, где вы получаете такие идентификаторы, как #doc, #bd, # yui-main и т. Д.


3
Я часто называю их по иерархии, так что у меня есть div id = 'user', тогда у меня может быть три div, id = 'user-stats', id = 'user-inventory', id = 'user- заклинания ', затем скажите в пользовательской статистике, что у меня может быть 5 div, id =' user-stats-Strength ', id =' user-stats-agility ', id =' user-stats-defense ', id =' user- stats-intellect ', id =' user-stats-heath 'и т. д., которые, как мне кажется, очень полезны для запоминания их идентификаторов, пока я поддерживаю соглашения об именах, то есть-или _ для пробелов или camelCase.
Psytronic

2

Если это академический вопрос, это довольно интересно ... но что касается лучших практик, вам не нужно - или хотеть - растягивать их. Если вам нужно сохранить данные об элементе HTML, лучше поместить их в атрибут объекта DOM.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.