Нужно ли писать HEAD, BODY и HTML-tags?

Нужно ли писать tags , и ?

Например, я могу сделать такую ​​страницу:

   Page Title   
Some html

И Firebug правильно разделяет голову и тело: введите описание изображения здесь

Валидация W3C говорит, что она действительна.

Но я редко вижу эту практику в Интернете.

Есть ли причина писать эти tags?

Solutions Collecting From Web of "Нужно ли писать HEAD, BODY и HTML-tags?"

Опускание тегов html , head и body безусловно, допускается спецификациями HTML. Основная причина заключается в том, что браузеры всегда стремились соответствовать существующим веб-страницам, а самые ранние версии HTML не определяли эти элементы. Когда HTML 2,0 сначала это было сделано так, чтобы tags были выведены при отсутствии.

Мне часто бывает удобно опускать tags при прототипировании и особенно при написании тестовых примеров, поскольку это помогает сохранить наценку, ориентированную на рассматриваемый тест. Процесс вывода должен создавать элементы точно так, как вы видите в Firebug, и браузеры вполне согласуются с этим.

Но…

IE имеет хотя бы одну известную ошибку в этой области. Даже IE9 демонстрирует это. Предположим, что это разметка:

 < !DOCTYPE html> Test case 

Вы должны (и делать в других браузерах) получить DOM, который выглядит так:

 HTML HEAD TITLE BODY FORM action="#" INPUT name="var1" 

Но в IE вы получаете это:

 HTML HEAD TITLE FORM action="#" BODY INPUT name="var1" BODY 

Смотрите сами.

Эта ошибка, по-видимому, ограничена начальным тегом form предшествующим любому текстовому контенту и любому тегу начала body .

В Руководстве по стилю Google для HTML рекомендуется исключить все необязательные tags.
Это включает , , ,

и

  • .

    https://google.github.io/styleguide/htmlcssguide.html#Optional_Tags

    Для оптимизации размера файла и возможности сканирования рекомендуется исключить необязательные tags. Спецификация HTML5 определяет, какие tags могут быть опущены.

    (Этот подход может потребовать установления льготного периода в качестве более широкого руководства, поскольку он значительно отличается от того, что обычно обучают веб-разработчики. Для целей последовательности и простоты лучше всего отказаться от всех необязательных тегов, а не только для выбора.)

      < !DOCTYPE html>   Spending money, spending bytes   

    Sic.

    < !DOCTYPE html> Saving money, saving bytes

    Qed.

    В отличие от примечания @Liza Daly о HTML5, эта спецификация на самом деле довольно специфична, о том, какие tags можно опустить, и когда (и правила немного отличаются от HTML 4.01, в основном для выяснения того, где находятся неоднозначные элементы, такие как комментарии и пробелы)

    Соответствующая ссылка – http://www.w3.org/TR/2011/WD-html5-20110525/syntax.html#optional-tags , и в ней говорится:

    • Начальный тег элемента html может быть опущен, если первое, что внутри элемента html не является комментарием.

    • Конечный тег элемента html может быть опущен, если элемент html не сразу следует комментарию.

    • Начальный тег элемента заголовка может быть опущен, если элемент пуст, или если первым элементом внутри элемента head является элемент.

    • Конечный тег элемента заголовка может быть опущен, если за элементом заголовка не следует сразу пробельный символ или комментарий.

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

    • Конечный тег элемента тела может быть опущен, если за элементом body сразу не следует комментарий.

    Таким образом, ваш пример действителен HTML5 и будет анализироваться следующим образом: с тегами html, head и body в их предполагаемых позициях:

     < !DOCTYPE html>  Page Title   
    Some html

    Обратите внимание, что комментарий «этот скрипт будет в голове» фактически анализируется как часть тела, хотя сам скрипт является частью головы. Согласно спецификации, если вы хотите, чтобы это было совсем другое, tags и не могут быть опущены. (Хотя tags и все еще могут быть)

    Это действительно так, чтобы опустить их в HTML4:

     7.3 The HTML element start tag: optional, End tag: optional 7.4.1 The HEAD element start tag: optional, End tag: optional 

    http://www.w3.org/TR/html401/struct/global.html

    В HTML5 нет «необходимых» или «необязательных» элементов точно, поскольку синтаксис HTML5 более слабо определен. Например, title :

    Элемент title является обязательным ребенком в большинстве ситуаций, но когда протокол более высокого уровня предоставляет информацию о названии, например, в строке Subject сообщения электронной почты, когда HTML используется в качестве формата авторинга электронной почты, элемент заголовка может быть опущен ,

    http://www.w3.org/TR/html5/semantics.html#the-title-element-0

    Недопустимо опускать их в истинном XHTML5, хотя это почти никогда не используется (по сравнению с XHTML-act-like-HTML5).

    Однако с практической точки зрения вы часто хотите, чтобы браузеры работали в «стандартном режиме», для предсказуемости при визуализации HTML и CSS. Предоставление DOCTYPE и структурированное дерево HTML гарантируют более предсказуемые результаты кросс-браузера.

    Это правда, что спецификации HTML позволяют в некоторых случаях опускать определенные tags, но в целом делать это неразумно.

    Он имеет два эффекта: он усложняет спецификацию, что, в свою очередь, затрудняет для авторов браузера правильную реализацию (как показывает IE, ошибочно).

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

    Более того, последняя спецификация WG 5.1 в настоящее время говорит (помните, что это незавершенная работа и может все же измениться).

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

    http://www.w3.org/html/wg/drafts/html/master/sections.html#the-body-element

    Это немного тонко. Вы можете опустить тело и голову, и тогда браузер будет определять, где эти элементы должны быть вставлены. Это несет риск не быть явным, что может вызвать путаницу.

    Итак, это

      

    hello

    приводит к тому, что элемент скрипта является дочерним элементом элемента body, но этот

       

    приведет к тому, что тег скрипта будет дочерним элементом элемента head.

    Вы можете быть явным, делая это

        

    и то, что у вас есть, сценарий или h1, они оба будут предсказуемо появляться в элементе body. Это те вещи, которые легко упускать из виду при рефакторинге и отладке кода. (скажем, например, у вас есть JS, который ищет первый элемент сценария в теле - во втором fragmentе он перестанет работать).

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

    Так что да, вы можете опустить их и быть технически обоснованными, но это обычно неразумно делать.

    Firebug показывает это правильно, потому что ваш браузер автоматически исправляет плохую разметку для вас. Это поведение не указывается нигде и может (будет) изменяться от браузера к браузеру. Эти tags требуются DOCTYPE, которые вы используете, и их не следует опускать.

    Элемент html является корневым элементом каждой страницы html. Если вы посмотрите на описание всех других элементов, в нем говорится, где можно использовать элемент (и почти все элементы требуют либо головы, либо тела).