Ответ 1
Валидатор W3C Markup Validator, действуя как средство проверки HTML5, обрабатывает эту проблему в соответствии с различными черновиками, такими как HTML 5.1 Nightly, который прямо сейчас говорит, что style
может появляться только внутри элемента head
, за исключением случаев, когда присутствует атрибут scoped
, и в этом случае он может появиться "там, где ожидается поток", но перед любым другим потоковым содержимым, отличным от межэлементных пробелов и элементов стиля, а не как дочерний элемент элемента, модель контента которого прозрачна ". В вашем фактическом примере элемент появляется после элемента script
(который считается потоком содержимого). Таким образом, изменение порядка элементов изменяет синтаксис на действительный, в соответствии с данным определением.
В качестве альтернативы вы можете просто обернуть элемент style
элементом div
:
<!DOCTYPE html>
<head>
<meta charset="UTF-8">
<title>title</title>
</head>
<body>
<script type="text/javascript"></script>
<div>
<style scoped></style>
</div>
</body>
</html>
Атрибут scoped
вообще недействителен в соответствии с Рекомендацией W3C HTML5. Он присутствовал в черновиках HTML5, но он был исключен из Рекомендации из-за отсутствия реализаций, но он все еще находится в "стандартизованной дорожке" и может перейти к HTML 5.1.
Обратите внимание, что существующие браузеры обычно игнорируют атрибут scoped
и позволяют использовать элемент style
практически везде и применять его содержимое ко всему документу HTML (даже части, предшествующие элементу style
).