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