Ответ 1
ТЛ; др:
Если вам неудобно использовать HTML-функции, которые не достигли уровня зрелости Рекомендация W3C, не существует стандарта способ добавления <style>
к <body>
страницы.
Если вам удобно использовать менее зрелые функции, HTML5.2, по-видимому, стандартизирует элементы <style>
, которые должны быть разрешены в любом поточном содержимом (т.е. <body>
и большинство его элементов).
Если вы уже используете атрибут [scoped]
, перестаньте использовать атрибут [scoped]
, поскольку он никогда не был стандартизирован и теряет поддержку браузера.
История:
HTML 4.01
В HTML4.01 элемент стиля был разрешен только в <head>
. Браузеры, старающиеся делать то, что хочет автор, а не то, что написал автор, уважали элементы <style>
в <body>
, несмотря на то, что эти страницы технически недействительны.
HTML 5
Элемент <style>
по-прежнему недействителен в <body>
HTML 5.1
В некоторых рабочих черновиках спецификации HTML5.1 элемент <style>
должен был указывать атрибут [scoped]
, который разрешите использовать элемент <style>
в потоке содержимого (т.е. в <body>
).
В качестве примера того, как это могло быть использовано, было бы:
<!DOCTYPE html>
<title>Example of using the scoped attribute</title>
<div>
<style scoped>
p {
color: darkred;
}
</style>
<p>this text would be dark red</p>
</div>
<p>this text would be black</p>
Поддержка расширенной функции была добавлена в Firefox в версии 21 и добавлена в Chrome за флагом в версии 20. Функция не получила достаточной поддержки, поэтому позже была удалена из HTML5.1 рабочий проект.
Chrome первым удалил эту функцию в версии 36. С тех пор Firefox установил функцию за флагом в версии 55.
HTML 5.2
В июль 2017 рабочий проект спецификации HTML5.2 была добавлена поддержка для элемента <style>
, который разрешен в потоке содержание:
Контексты, в которых этот элемент можно использовать:
- Где ожидается содержимое метаданных.
- В элементе
<noscript>
, являющемся дочерним элементом элемента<head>
.- В теле, где ожидается содержимое потока.
Акцент на мине
На момент написания это добавление осталось в спецификации HTML5.2, которая в настоящее время находится в уровне зрелости рекомендации кандидата.
Хотя это делает использование элементов <style>
в <body>
еще более рискованным, это конкретное изменение стандартизирует то, что браузеры поддерживали в течение многих лет.