Нужно ли писать <html>
, <head>
и <body>
теги?
Например, я могу сделать такую страницу:
<!DOCTYPE html>
<meta http-equiv="Content-type" content="text/html; charset=utf-8">
<title>Page Title</title>
<link rel="stylesheet" type="text/css" href="css/reset.css">
<script src="js/head_script.js"></script><!-- this script will be in head //-->
<div>Some html</div> <!-- here body starts //-->
<script src="js/body_script.js"></script>
И Firebug правильно разделяет голову и тело:
Проверка W3C говорит, что она действительна.
Но я редко вижу эту практику в Интернете.
Есть ли причина писать эти теги?
title
тег. Это самый маленький документ, который он считает действительным:<!DOCTYPE html> <title>A</title>
Ответы:
Опуская
html
,head
иbody
теги , безусловно , допускается в HTML спецификации. Основная причина заключается в том, что браузеры всегда стремились соответствовать существующим веб-страницам, и самые ранние версии HTML не определяли эти элементы. Когда HTML2,0во-первых, это было сделано таким образом, что теги будут выведены при отсутствии.Я часто нахожу удобным опускать теги при создании прототипа и особенно при написании тестовых случаев, поскольку это помогает сосредоточить разметку на рассматриваемом тесте. Процесс вывода должен создавать элементы точно так, как вы видите в Firebug, и браузеры довольно последовательны в этом.
Но...
В IE есть как минимум одна известная ошибка в этой области. Даже IE9 демонстрирует это. Предположим, разметка такая:
Вы должны (и делать это в других браузерах) получить DOM, который выглядит следующим образом:
Но в IE вы получаете это:
Убедитесь сами.
Эта ошибка, кажется, ограничена
form
начальным тегом, предшествующим любому текстовому содержимому и любомуbody
начальному тегу.источник
Руководство по стилю Google для HTML рекомендует исключить все необязательные теги.
Это включает в себя
<html>
,<head>
,<body>
,<p>
и<li>
.https://google.github.io/styleguide/htmlcssguide.html#Optional_Tags
источник
<script src="http://localhost:35729/livereload.js"></script>
. Для экзотических шаблонов они не понимают, куда они должны вставить свой код.Вопреки замечанию @Liza Daly о HTML5, эта спецификация на самом деле довольно специфична в отношении того, какие теги могут быть опущены и когда (и правила немного отличаются от HTML 4.01, главным образом, чтобы уточнить, где находятся неоднозначные элементы, такие как комментарии и пробелы)
Соответствующая ссылка: http://www.w3.org/TR/2011/WD-html5-20110525/syntax.html#optional-tags , и в ней говорится:
Начальный тег элемента html может быть опущен, если первое, что находится внутри элемента html, не является комментарием.
Конечный тег элемента html может быть опущен, если за элементом html сразу не следует комментарий.
Начальный тег элемента head может быть опущен, если элемент пустой или если первым элементом внутри элемента head является элемент.
Конечный тег элемента head может быть опущен, если за элементом head сразу не следует пробел или комментарий.
Начальный тег элемента body может быть опущен, если элемент пуст или если первое, что находится внутри элемента body, не является пробелом или комментарием, за исключением случаев, когда первое, что находится внутри элемента body, является элементом script или style.
Конечный тег элемента body может быть опущен, если за элементом body не сразу следует комментарий.
Таким образом, ваш пример является допустимым HTML5 и будет проанализирован следующим образом, с тегами html, head и body в их подразумеваемых позициях:
Обратите внимание, что комментарий «этот скрипт будет в голове» фактически анализируется как часть тела, хотя сам скрипт является частью заголовка. Согласно спецификации, если вы хотите, чтобы она вообще отличалась, теги
</HEAD>
и<BODY>
не могут быть опущены. (Хотя соответствующие<HEAD>
и</BODY>
теги еще можно)источник
Допустимо опускать их в HTML4:
http://www.w3.org/TR/html401/struct/global.html
В HTML5 нет «обязательных» или «необязательных» элементов, так как синтаксис HTML5 определен более свободно. Например,
title
:http://www.w3.org/TR/html5/semantics.html#the-title-element-0
Недопустимо опускать их в истинном XHTML5, хотя это почти никогда не используется (в отличие от XHTML-действующих-like-like-HTML5).
Однако с практической точки зрения часто требуется, чтобы браузеры работали в «стандартном режиме» для предсказуемости при рендеринге HTML и CSS. Предоставление DOCTYPE и более структурированного HTML-дерева гарантирует более предсказуемые кросс-браузерные результаты.
источник
html
,head
иbody
, элементы являются обязательными, но теги являются необязательными.Это правда, что спецификации HTML разрешают опускать определенные теги в определенных случаях, но, как правило, делать это неразумно.
У этого есть два эффекта - это делает спецификацию более сложной, что, в свою очередь, затрудняет авторам браузера писать правильные реализации (как продемонстрировал IE, неправильно понимающий).
Это повышает вероятность ошибок браузера в этих частях спецификации. Как автор веб-сайта вы можете избежать этой проблемы, включив эти теги - поэтому, хотя в спецификации не говорится, что это необходимо, это снижает вероятность того, что что-то пойдет не так, что является хорошей инженерной практикой.
Более того, последняя спецификация HTML 5.1 WG в настоящее время гласит (имейте в виду, что эта работа еще не завершена и может измениться).
http://www.w3.org/html/wg/drafts/html/master/sections.html#the-body-element
Это немного неуловимо. Вы можете опустить тело и заголовок, и браузер определит, где эти элементы должны быть вставлены. Это несет в себе риск не быть явным, что может привести к путанице.
Так это
приводит к тому, что элемент script является дочерним элементом элемента body, но это
приведет к тому, что тег script будет дочерним по отношению к элементу head.
Вы могли бы быть явным, делая это
и затем, в зависимости от того, что у вас есть, скрипт или h1, они оба, как и ожидалось, появятся в элементе body. Это вещи, которые легко пропустить при рефакторинге и отладке кода. (скажем, например, у вас есть JS, который ищет 1-й элемент скрипта в теле - во втором фрагменте он перестал бы работать).
Как правило, быть откровенным о вещах всегда лучше, чем оставлять вещи открытыми для интерпретации. В этом отношении XHTML лучше, потому что он заставляет вас быть полностью откровенным в отношении структуры вашего элемента в коде, что делает его более простым и, следовательно, менее подверженным неправильной интерпретации.
Так что да, вы можете опустить их и быть технически действительными, но это, как правило, неразумно.
источник
<!DOCTYPE html>
.Firebug показывает это правильно, потому что ваш браузер автоматически исправляет плохую разметку для вас. Это поведение нигде не указано и может (будет) варьироваться от браузера к браузеру. Эти теги требуются для используемого вами DOCTYPE и не должны быть пропущены.
Элемент html является корневым элементом каждой страницы html. Если вы посмотрите на описание всех других элементов, там написано, где можно использовать элемент (и почти для всех элементов требуется голова или тело).
источник
<title>
после<p></p>
, например.)