HTML5 меняет стандарт для комментирования HTML?

128

Недавно я обнаружил, что есть, возможно, новый способ комментирования в HTML5.

Вместо типичного многострочного комментария <!-- -->, о котором я читал, мне показалось, что я заметил, что моя IDE сделала регулярный <!div > комментарий. Поэтому я протестировал его, и, к моему удивлению, Chrome прокомментировал этот тег. Он только прокомментировал тег, а не содержимое div, поэтому мне пришлось прокомментировать ближе <!/div>, чтобы не закрывать другие div.

Я тестировал другой, и кажется, что, как правило, помещая восклицательный знак перед открытием любого тега, этот символ < делает этот тег прокомментированным.

Это действительно ново? Это плохая практика? Это на самом деле очень удобно, но насколько это практично (если не новое)?

Изменить дополнительные сведения: Хотя синтаксическая ошибка или неправильное толкование этого конкретного синтаксиса является веской причиной, почему Chrome действительно делает их полными комментариями?

Код написан как:

<!div displayed> some text here that is still displayed <!/div>

И затем он отображается как:

<!--div displayed--> some text here that is still displayed <!--/div-->
  • 19
    Скорее всего, это просто синтаксическая ошибка и / или бессмысленный тег и поэтому игнорируется.
  • 0
    @deceze Я несколько ожидал, что браузеры могут быть осторожны с тем, как они отображают HTML в соответствии с менее строгими правилами.
Показать ещё 2 комментария
Теги:
comments

2 ответа

201
Лучший ответ

В HTML5 нет нового стандарта для комментариев. Единственным допустимым синтаксисом комментариев остается <!-- -->. Из раздела раздела 8.1.6 W3C HTML5:

Комментарии должны начинаться с четырехсимвольной последовательности U + 003C LESS-THAN SIGN, U + 0021 EXCLAMATION MARK, U + 002D HYPHEN-MINUS, U + 002D HYPHEN-MINUS (<!--).

Синтаксис <! происходит из разметки SGML DTD, которая не является частью HTML5. В HTML5 он зарезервирован для комментариев, разделов CDATA и декларации DOCTYPE. Поэтому, является ли эта альтернатива плохой практикой, зависит от того, считаете ли вы, что использование (или, что еще хуже, зависимость от) устаревшей разметки, является плохой практикой.

Validator.nu называет то, что у вас есть комментарий Bogus. - это означает, что он рассматривался как комментарий, даже если это недействительный комментарий. Это, по-видимому, для обратной совместимости с pre-HTML5, который был основан на SGML, и имел объявления разметки, которые приняли форму <!FOO>, поэтому я бы не назвал это новым. Причина, по которой они рассматриваются как комментарии, заключается в том, что объявления разметки SGML были специальными декларациями, которые не предназначены для рендеринга, но поскольку они не имеют смысла в HTML5 (с вышеупомянутыми исключениями), что касается HTML5 DOM, это не что иное, как комментарии.

Следующие шаги в разделе в разделе 8.2.4 приводят к такому выводу, который, по-видимому, выглядит в Chrome:

  • 8.2.4.1 Состояние данных:

    Используйте следующий символ ввода:

    "<" (U + 003C)
    Переключитесь в открытое состояние тега.

  • 8.2.4.8 Откроем открытое состояние:

    Используйте следующий символ ввода:

    "!" (U + 0021)
    Переключитесь в открытое состояние объявления разметки.

  • 8.2.4.45 Открытое состояние объявления разметки:

    Если следующие два символа являются символами "-" (U + 002D), потребляют эти два символа, создают токен комментария, данные которого являются пустой строкой и переключаются в состояние начала комментария.

    В противном случае, если следующие семь символов являются ASCII-регистрозависимым совпадением для слова "DOCTYPE", затем используйте эти символы и переключитесь в состояние DOCTYPE.

    В противном случае, если есть скорректированный ток node, и он не является элементом в пространстве имен HTML, а следующие семь символов соответствуют регистровому совпадению для строки "[CDATA [" (пять заглавных букв "CDATA" с символом U + 005B LEFT SQUARE BRACKET до и после), затем используйте эти символы и переключитесь в состояние секции CDATA.

    В противном случае это ошибка синтаксического анализа. Переключитесь в состояние фиктивного комментария. Следующий символ, который потребляется, если таковой имеется, является первым символом, который будет в комментарии.

    Обратите внимание, что он говорит, что переключается в состояние запуска комментария только в том случае, если встреченная последовательность символов <!--, в противном случае это фиктивный комментарий. Это отражает то, что указано в разделе 8.1.6 выше.

  • 8.2.4.44 Состояние комментария Bogus:

    Используйте каждый символ до и включая первый символ " > " (U + 003E) или конец файла (EOF), в зависимости от того, что наступит раньше. Извлеките токен комментария, данные которого являются конкатенацией всех символов, начиная с символа, который заставил конечный автомат переключиться в состояние фиктивного комментария, вплоть до и включив символ непосредственно перед последним потребляемым символом (то есть до символа перед символом U + 003E или EOF), но с любыми символами U + 0000 NULL, замененными символами U + FFFD REPLACEMENT CHARACTER. (Если комментарий был начат до конца файла (EOF), токен пуст. Точно так же токен пуст, если он был сгенерирован строкой "<!>".)

    На простом английском языке это превращает <!div displayed> в <!--div displayed--> и <!/div> в <!--/div--> точно так, как описано в вопросе.

В заключение вы можете ожидать, что другие синтаксические анализаторы, совместимые с HTML5, будут вести себя так же, как Chrome.

  • 11
    Спасибо, что нашли время, чтобы найти официальное обоснование этого инцидента. Это немного проясняет ситуацию и придает большое значение моему ошибочному предположению.
  • 2
    Странно, что в спецификации HTML5 есть правила для обработки «недопустимого» контента. Если он недействителен, он не должен обрабатываться вообще.
Показать ещё 5 комментариев
11

Я не думаю, что это хорошая привычка, так как <! обозначает объявления разметки типа <!DOCTYPE. Таким образом, вы думаете, что он прокомментировал (ну... браузер попытается его интерпретировать).

Даже если он не отображается, это, похоже, не является правильным синтаксисом для комментирования HTML-кода.

  • 0
    Хотя это может быть правдой, почему Chrome делает эти теги закомментированными, но теперь это тип документа.
  • 4
    Предложение (я не уверен, просто догадываюсь): пытается интерпретировать> не могу> прокомментировать?
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню