Имеет ли <STYLE> have to be in the <HEAD> значение для HTML-документа?

StackOverflow https://stackoverflow.com/questions/1303416

  •  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 templates по-разному и перечисляет их модель контента как 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 + поддерживают его:

https://stackoverflow.com/a/10989663/297793

Согласно спецификации HTML 5.2 (в черновике), тег style разрешен только в заголовке документа.

Черновик HTML 5.2 для тега Style (18 августа 2016)

Элемент стиля может отображаться только в заголовке документа .

Вы можете использовать тег style внутри раздела head или body, а также за пределами html-тега (внешний html-код не рекомендуется).В проектах реального времени вы часто можете видеть, что они используют тег style вне html-тега

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top