Имеет ли <STYLE> have to be in the <HEAD> значение для HTML-документа?
-
19-09-2019 - |
Вопрос
Строго говоря, делайте style
теги должны быть внутри head
из HTML-документа?Стандарт 4.01 подразумевает это, но это явно не указано:
Элемент STYLE позволяет авторам размещать правила таблицы стилей в заголовке документа.HTML допускает любое количество элементов СТИЛЯ в ЗАГОЛОВОЧНОМ разделе документа.
Я говорю "строго говоря", потому что у меня есть приложение, которое помещает элементы стиля внутрь тела, и все браузеры, с которыми я тестировал, похоже, используют элементы стиля.Мне просто интересно, действительно ли это законно.
Решение
style
предполагается, что он должен быть включен только в head
из документа.
Помимо пункта проверки, одно предостережение, которое может заинтересовать вас при использовании style
на body
является ли вспышка неструктурированного контента.Браузер получил бы элементы, которые были бы стилизованы после они отображаются, заставляя их меняться в зависимости от размера / формы / шрифта и / или мерцать.Как правило, это признак плохого мастерства.Как правило, вам может сойти с рук нанесение style
где угодно, но старайтесь избегать этого, когда это возможно.
HTML 5 представил scoped
атрибут, который позволял style
теги должны были быть включены повсюду в теле, но затем они снова удалили их.
Другие советы
Хотя другие ответы верны, я удивлен, что никто не объяснил где стандарты запрещают стили за пределами head
.
Это на самом деле в разделе, посвященном head
Элемент (и в DTD):
<!-- %head.misc; defined earlier on as "SCRIPT|STYLE|META|LINK|OBJECT" -->
<!ENTITY % head.content "TITLE & BASE?">
<!ELEMENT HEAD O O (%head.content;) +(%head.misc;) -- document head -->
Да, я знаю.DTD трудно читать.
Это единственное место, где STYLE
элемент встречается, поэтому неявно он недопустим в другом месте.
Согласно последним спецификациям WhatWG и W3C, да, style
элементы должен всегда быть в head
.Какое-то время спецификации включали в себя scoped
атрибут для style
элементы, которые, когда они присутствуют, позволяют размещать их внутри элемента в теле для оформления только потомков этого элемента...но эта функция так и не появилась ни в одном реальном браузере (по крайней мере, без необходимости включения с помощью флага разработчика) и была удалена из обеих спецификаций "из-за отсутствия интереса со стороны исполнителя".Следовательно, style
элементы теперь разрешены только в контекстах, допускающих содержимое метаданных, которым является только заголовок.
(Ладно, это не вполне верно - вы можете легально размещать содержимое метаданных, включая style
элементы, находящиеся внутри template
элемент внутри body
, но на самом деле это не вступит в силу, если вы находитесь в браузере, поддерживающем шаблоны.На самом деле это просто глупая формальность.)
В Спецификация WhatWG должен ли это сказать:
4.2.6.В
style
элементКатегории:
Контексты, в которых этот элемент может быть использован:
Где содержание метаданных ожидается.
В<noscript>
элемент , который является дочерним элементом<head>
элемент.
CTRL-Проведите пальцем по спецификация на одной странице показывает, что единственным элементом, модель содержимого которого включает содержимое метаданных, является head
элемент.
Между тем, в последняя спецификация проекта W3C содержит абсолютно идентичные формулировки, за исключением того, что они также перечисляют содержимое метаданных в модели содержимого template
элементы.(Что концептуализирует WG template
s по-разному и перечисляет их модель контента как nothing
.)
Ненормативный индекс элементов в спецификации WhatWG подтверждается, что единственные допустимые родители для style
элемент - это head
или noscript
элемент.(В версии W3 того же индекса ошибочно указано, что содержимое потока может содержать <style>
элементы, но это ошибка, введенная W3C во время удаления scoped
атрибут.У меня есть запрос на извлечение открой, чтобы это исправить.)
Предполагается, что они не должны выходить за пределы головы, но они все равно работают;хотя вы могли бы заметить быстрое мерцание.Сайт не должен проверяться с помощью тега style вне заголовка, но действительно ли это имеет значение?Кроме того, теги ссылок также работают вне заголовка, даже если они не должны этого делать.
Как и в других ответах, указано, что на самом деле это не обязательно должно быть там.Однако он не будет подтвержден.В данном случае это может иметь значение, а может и не иметь, но, пожалуйста, имейте в виду, что рендеринг html полностью зависит от браузеров.Из того, что я знаю, все используемые браузеры на сегодняшний день будут поддерживать вывод его за пределы head, но вы не можете гарантировать этого для будущих браузеров и будущих версий браузера.
Придерживайтесь стандарта, и вы в большей безопасности.Насколько безопаснее, вызывает очень много споров.
Тег стиля где угодно, но не внутри <head>
не будет проверяться с помощью правил W3C.
В Рекомендация HTML5.2 W3C, 14 декабря 2017 г. (не в более раннем проекте, упомянутом выше) теперь говорится, что вы можете включить <style>
.
"В организме, где ожидается содержание жидкости". (раздел 4.2.6)
Согласно этому сайту, HTML5.1 (в черновике) и WHATWG позволяют <style>
метка, которая будет помещена в тело:
http://www.html.am/tags/html-style-tag.cfm
Похоже, он также уже довольно давно поддерживается браузерами.Согласно этому ответу StackOverflow, Firefox 3 +, IE6 +, Safari 2 + и Chrome 12 + поддерживают его:
Согласно спецификации HTML 5.2 (в черновике), тег style разрешен только в заголовке документа.
Черновик HTML 5.2 для тега Style (18 августа 2016)
Элемент стиля может отображаться только в заголовке документа .
Вы можете использовать тег style внутри раздела head или body, а также за пределами html-тега (внешний html-код не рекомендуется).В проектах реального времени вы часто можете видеть, что они используют тег style вне html-тега