Стиль элемента не допускается в качестве дочернего элемента тела элемента в этом контексте (не проверяется)

<!DOCTYPE html>
...
<style scoped>
/* css */
</style>

w3.org валидатор дает мне эту ошибку:

Line 883, Column 17: Element style not allowed as child of element body in this context.
(Suppressing further errors from this subtree.)
        <style scoped>...
Contexts in which element style may be used:
If the scoped attribute is absent: where metadata content is expected.
If the scoped attribute is absent: in a noscript element that is a child of a head element.
If the scoped attribute is present: where flow content is expected, but before any other flow     content other than inter-element whitespace and style elements, and not as the child of an element whose content model is transparent.
Content model for element body:
Flow content.

насколько я понимаю, свойство "scoped"позволяет тегу стиля находиться вне головы документа. Так почему же валидатор недоволен этим?

(Я использую Wordpress, и этот код создается плагином, поэтому я не могу просто поместить его в голову.)

изменить: Это не подтверждает -

<!DOCTYPE html>
<head>
<meta charset="UTF-8">
<title>title</title>
</head>
<body>
<script type="text/javascript"></script>
<style scoped></style>
</body>
</html>

но это так, если тег скрипта идет после тег style. В чем причина этого?

1 ответов


валидатор разметки W3C, действуя в качестве проверки 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.

обратите внимание, что существующие браузеры обычно игнорируют и разрешение style элемент почти в любом месте и применить его содержимое ко всему HTML-документа (даже части, которые предшествуют style элемент).