Должен ли <STYLE> быть в <HEAD> документа HTML?

Строго говоря, делатьstyle теги должны быть внутриhead HTML-документ? Стандарт 4.01 подразумевает это, но это прямо не указано:

Элемент STYLE позволяет авторам размещать правила таблицы стилей в заголовке документа. HTML допускает любое количество элементов STYLE в разделе HEAD документа.

Я говорю «строго говоря», потому что у меня есть приложение, которое помещает элементы стиля внутрь тела, и все браузеры, с которыми я тестировал, похоже, используют элементы стиля. Мне просто интересно, если это на самом деле законно.

 user13283708 нояб. 2011 г., 15:06
Единственным исключением из правила put <style> in <head> является html email, так как многие службы веб-почты просто удаляют любые элементы head, что означает, что ваши стили исчезли.
 WraithKenny29 нояб. 2017 г., 23:23
Спецификациитребовать браузеры для поддержкиstyle вbody, так что это достаточно хорошо для меня, независимо от того, что подразумевается под руководством автора разделов.
 Lazlo20 авг. 2009 г., 02:57
Если вы сомневаетесь, валидатор разметки W3C всегда помогает :)http://validator.w3.org/

Ответы на вопрос(10)

HTML5.2 Рекомендация W3C, 14 декабря 2017 г. (не ранее упомянутый черновик) теперь говорит, что вы можете включить<style>.

«В теле, где ожидается поток содержимого».(раздел 4.2.6)

style элементыдолжен всегда быть вhead, Какое-то время спецификации включалиscoped атрибут дляstyle элементы, которые, когда они присутствуют, позволяют размещать их внутри элемента в теле, чтобы стилизовать только потомков этого элемента ... но эта функция никогда не достигала какого-либо реального браузера (по крайней мере, без необходимости включения через флаг разработчика) и был удален из обеих спецификаций«из-за отсутствия интереса к исполнителю», Вследствие этого,style элементы теперь разрешены только в тех контекстах, которые допускают содержание метаданных, которое является только заголовком.

(Хорошо, это недовольно true - вы можете легально поместить контент метаданных, в том числеstyle элементы, внутриtemplate элемент внутриbody, но это на самом деле не вступит в силу, если вы находитесь в браузере, который поддерживает шаблоны. Это действительно просто глупая техничность.)

WhatWG spec имеет это сказать:

4.2.6.style элементкатегории:

Содержание метаданных.

Контексты, в которых этот элемент может быть использован:

гдесодержание метаданных ожидается.
В<noscript> элемент, который является потомком<head> элемент.

CTRL-Fing черезодностраничная спецификация показывает, что единственный элемент, модель содержимого которого включает в себя содержимое метаданных, - этоhead элемент.

Между тем,последние спецификации проекта W3C содержит точно такие же формулировки, за исключением того, что они также перечисляют содержимое метаданных в модели содержимогоtemplate элементы. (WhatWG концептуализируетtemplateS по-разному и перечисляет свою модель контента какnothing.)

Ненормативныйуказатель элементов в спецификации WhatWG подтверждает, что единственно допустимые родители дляstyle элемент являетсяhead или жеnoscript элемент. (Версия того же индекса W3 ошибочно утверждает, что содержимое потока может содержать<style> элементы, но это ошибка, внесенная W3C во время удаленияscoped приписывать. у меня естьзапрос на извлечение открыть, чтобы исправить это.)

где стандарты запрещают стили за пределами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 элемент встречается, поэтому неявно он недопустим в другом месте.

 dav_i20 мая 2013 г., 13:46
Я так растерялся.
 Jan Kyu Peblik08 февр. 2018 г., 20:12
Теперь следует использовать HTML5, в котором IIRC не имеет DTD. То, что говорит одна спецификация HTML5, это то, что есть или нет.

<head> не будет подтверждено правилами W3C.

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

Придерживайтесь стандарта, и вы в большей безопасности. Насколько безопаснее спорить.

тег style допускается только в заголовке документа.

Проект HTML 5.2 по тегу стиля (18 августа 2016 г.)

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

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

Решение Вопроса

style должен быть включен только наhead документа.

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

HTML 5 представилscoped атрибут, который позволилstyle теги должны быть включены везде в теле, но затем они удалили его снова.

 Esteban Küber27 янв. 2016 г., 02:35
@ZacharyMurray спасибо за головы! Я обновил ссылку в теле на веб архивную.
 Zachary Murray26 янв. 2016 г., 23:02
Связанная статья исчезла в ссылке, поэтому вот последняя доступная заархивированная версия:web.archive.org/web/20150525042412/http://bluerobot.com/web/css/...
 Jaime Hablutzel16 окт. 2015 г., 01:18
На сегодняшний день кажется, что только Firefox поддерживаетscoped атрибут, см.caniuse.com/#feat=style-scoped.
 WraithKenny29 нояб. 2017 г., 23:19
Спецификация требует соответствующих браузеров для поддержкиstyle теги вbody поэтому, несмотря на авторскую часть спецификации, я считаю, что стили тела являются допустимыми.github.com/whatwg/html/issues/1605#issuecomment-235961103

хотя вы можете заметить быстрое мерцание. Сайт не должен проверяться тегом style вне головы, но действительно ли это имеет значение? Кроме того, теги ссылок работают и вне головы, хотя они и не должны.

 geowa420 авг. 2009 г., 14:47
если тег стиля не находится первым в теле
 Esteban Küber20 авг. 2009 г., 14:37
Проблема в том, что даже если онинаходятся стиль, у вас будет некоторое мерцание на содержание, когда теstyleпнуть.
 TechNyquist13 янв. 2017 г., 09:41
Не пытайтесь делать это дома.
 Chuck20 авг. 2009 г., 03:39
Сказать «они работают» немного сложно. В лучшем случае вы можете сказать, что большинство современных браузеров будут по-прежнему отображать стили, но в этой ошибке нет ничего, что просто «работает». Это не могло работать в любой будущей версии любого браузера, и они не будут делать ничего плохого.
 geowa420 авг. 2009 г., 14:20
imo, стили рендеринга = работает; ничего сложного. последнее предложение необходимо переписать; это не имеет никакого смысла. я упомянул, что это «неправильно», когда я сказал, что это не будет подтверждено, поэтому я не должен понимать, что вы имели в виду под этим предложением.

<style> тег для размещения в теле:

http://www.html.am/tags/html-style-tag.cfm

Похоже, что это поддерживается браузерами довольно долгое время. Согласно этому ответу StackOverflow, Firefox 3+, IE6 +, Safari 2+ и Chrome 12+ поддерживают его:

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

Ваш ответ на вопрос