Стиль элемента не допускается в качестве дочернего элемента тела элемента в этом контексте (не проверяется)
<!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 элемент).