2015-04-02 11 views
129

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

Вместо типичного <!-- --> многострочно комментированием я читал, я думал, я заметил, что мой 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--> 
+18

Скорее всего, это просто синтаксическая ошибка и/или абсурдный тег и поэтому игнорируются. – deceze

+0

@deceze Я несколько ожидал, что, поскольку браузеры могут быть снисходительны к тому, как они отображают html в соответствии с менее строгими правилами. – Andrew

+1

@ Lemony-Andrew Что такое IDE? Согласно выбранному ответу, мы могли бы сообщать об этом как о проблеме (или исправить ее, если с открытым исходным кодом). – Dereckson

ответ

192

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

Комментариев должен начинаться с последовательностью четыре символа U + 003C Погрешность SIGN, U + 0021 восклицательным знаком, U + 002D дефис-МИНУСОМ, U + 002D HYPHEN-МИНУС (<!--).

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

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

Следующие шаги в рамках section 8.2.4 приводят к такому выводу, который появляется Chrome, чтобы следовать букве:

  1. 8.2.4.1 Data state:

    потребляете следующий входной символ:

    "<" (U + 003C)
    Switch к открытому состоянию тега.

  2. 8.2.4.8 Tag open state:

    Потребляйте следующий входной символ: "!"

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

  3. 8.2.4.45 Markup declaration open state:

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

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

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

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

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

  4. 8.2.4.44 Bogus comment state:

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

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

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

+8

Спасибо, что нашли время, чтобы найти официальное объяснение этого инцидента. Это немного проясняет ситуацию и дает много действительности для моего противоправного предположения. – Andrew

+2

Странно, как спецификация HTML5 имеет правила для обработки «недопустимого» контента. Если он недействителен, он не должен обрабатываться вообще. –

+2

Ну, так привыкли к HTML и веб-языкам - строго. Причина неправильной структуры кода обрабатывается так снисходительно для сайтов лучшего качества. Чем больше веб-сайтов браузер может просматривать, но и правильно просматривать с неправильным синтаксисом, тем счастливее будут их конечные пользователи. Общие авторы веб-стандартов (главным образом w3, а не другие), поняли, что из-за этого разработчики браузеров не соблюдали правила. HTML5 пришел и основывался только на идее сделать дизайн более мягким. – Andrew

11

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

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

+0

Хотя это ** может ** быть правдой, как же Chrome действительно заставляет те теги закомментировать, но теперь это doctype. – Andrew

+3

Предложение (я не уверен, просто догадываюсь): пытается интерпретировать> не может> прокомментировать? – Kursion

+0

Это кажется мне достаточно разумным. – Andrew

Смежные вопросы