Что такое действительный документ HTML5?

Я только что прочитал спецификацию автора HTML5. В нем указано, что теги <html>, <head> и <body> являются необязательными. Означает ли это, что вы можете полностью исключить их и при этом иметь действующий документ HTML5?

Если я правильно это интерпретирую, это означает, что это должно быть полностью действительным:

<!DOCTYPE html>
<p>Hello!</p>

Это правильно?

Вы можете проверить спецификацию здесь:

http://dev.w3.org/html5/spec-author-view/syntax.html#syntax

«8.1.2.4 Необязательные теги» — это бит о том, что можно опускать <html>, <head> и <body>.


person d13    schedule 21.03.2012    source источник
comment
Только что попробовал на validator.w3.org/#validate_by_input. Не понравилось, читал спецификацию в настоящее время....   -  person Adam    schedule 21.03.2012
comment
@ Адам, если вы добавите пустой набор тегов <title></title> во вторую строку, он пройдет проверку.   -  person Ben Lee    schedule 21.03.2012
comment
У вас ДОЛЖЕН быть тег <html>, как написано в вашей ссылке: Документы должны состоять из [...] корневого элемента в виде элемента html. <head> и <body> посмотрю.   -  person zessx    schedule 21.03.2012
comment
@samsamX, нет, это неточно. Если вы прочитаете весь документ, вы увидите позже: HTML-документ всегда имеет корневой элемент html, даже если строка ‹html› не появляется нигде в разметке. Если вы опустите тег ‹html› допустимым образом, в любом случае есть неявный корневой элемент html.   -  person Ben Lee    schedule 21.03.2012
comment
Да, я был неправ. Я читаю всю страницу, и это (эффективно) довольно тревожно   -  person zessx    schedule 21.03.2012
comment
@samsamX, они обманывают вас, заставляя поверить, что это предназначено для чтения людьми. Даже профессионалу было бы трудно со спецификацией HTML5.   -  person Ben Lee    schedule 21.03.2012
comment
Обратите внимание, что это не вещь HTML5. Это указано в каждой версии HTML (кроме XHTML).   -  person Alohci    schedule 21.03.2012
comment
@BenLee - я не согласен. Несмотря на то, что в спецификации HTML5 есть несколько хитрых моментов, на которых вам нужно очень сильно сконцентрироваться (на ум приходит обработка пространств имен), подавляющее большинство из них очень удобочитаемо.   -  person Alohci    schedule 21.03.2012
comment
@Alohci, хорошо, я использовал гиперболу. Но все же вы должны признать, что это немного сумбурно, даже если это понятно при внимательном чтении. Кто-то даже составил это: developers.whatwg.org — объяснение спецификации, разработанной с учетом удобочитаемости. , а также разработан с учетом интересов разработчиков (удалено все, что важно только для поставщиков браузеров)   -  person Ben Lee    schedule 21.03.2012


Ответы (5)


Это минимальный HTML5-действительный документ:

<!doctype html><title> </title>
person Soufiane Hassou    schedule 21.03.2012
comment
Согласно MDN, даже тег заголовка может быть опущен, если элемент является <iframe> srcdoc, или если информация о заголовке доступна из протокола более высокого уровня. Таким образом, минимальный допустимый документ HTML5 зависит от контекста. (Я слышал, что утверждалось, что «информация о заголовке доступна из протокола более высокого уровня» относится к электронной почте.) - person Mark Amery; 14.01.2014
comment
Он больше недействителен, так как теперь черновики HTML5 требуют, чтобы элемент title имел непустое содержимое. Подойдет любой символ (даже пробел). (До тех пор, пока, возможно, они снова не изменят правила.) - person Jukka K. Korpela; 11.07.2014
comment
Согласно Validator.nu и валидатор W3C тег <title> с пробелом считается пустым. Внутри должен быть какой-то не пробельный символ. - person Sebastian Simon; 29.11.2015

Элемент title действительно обязателен, но как отмечает Юкка Корпела, он также не должен быть пустым. Кроме того, модель содержимого элемента title такова:

Текст, отличный от межэлементный пробел.

Следовательно, наличие только пробела в элементе title не считается допустимым HTML. Вы можете проверить это в валидатор W3C.

Итак, пример минимального и действительного документа HTML5 следующий:

<!doctype html><title>a</title>
person Smi    schedule 10.10.2014

Сопровождающий HTML-валидатор W3C здесь. К вашему сведению, что касается поведения валидатора, на сегодняшний день валидатор теперь применяет требование спецификации HTML о том, что элемент title должен содержать хотя бы один непробельный символ —

http://validator.w3.org/nu/?doc=data%3Atext%2Fhtml%3Bcharset%3Dutf-8%2C%3C%2521doctype%2520html%3E%3Ctitle%3E%2520%2520%2520%3C%252Ftitle%3E

person sideshowbarker    schedule 24.02.2015
comment
Правда ли, что спецификация требует этого? Я вижу модель содержимого: текст, который не является пробелом между элементами. Но пробелы между элементами определяются как определенные формы текстовых узлов. <title></title> не имеет дочерних текстовых узлов, поэтому у него нет пробелов между элементами. Текст, с другой стороны, определяется либо как ничто, либо как текстовые узлы. Ничего не совпадает, поэтому строгое прочтение говорит о том, что модель контента удовлетворена. Несомненно, это не намерение определений, но, возможно, здесь есть недостаток спецификации. - person Alohci; 02.09.2016

В то время как начальный и конечный теги <html>, <head> и <body> являются необязательными, теги <title> необходимы, за исключением особых обстоятельств, поэтому нет, ваш образец (обычно) недействителен.

person Alohci    schedule 21.03.2012

Я думаю, вы читаете это правильно. Хотя браузеры будут отображать даже неправильный HTML (попробуйте нарушить правила, и FF отобразит то же самое).

person dbrin    schedule 21.03.2012