2014-12-18 7 views
10
<!DOCTYPE html> 
... 
<style scoped> 
/* css */ 
</style> 

:Eleman tarzı bu bağlamda eleman gövdesinin çocuğu olarak izin verilmeyen (<style kapsamlı> doğrulayarak değil) w3.org doğrulayıcı bana bu hatayı veriyor

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. 

Anladığım kadarıyla olmasıdır 'scoped' özelliği, stil etiketinin belgenin başı dışında olmasını sağlar. Peki validator neden bu kadar mutsuz?

(Ben Wordpress kullanıyorum ve bu kod sadece kafasına koydu olamaz neden olan bir eklenti, tarafından üretilmektedir.)

DÜZENLEME: Bu doğrulamaz -

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

Ancak, komut dosyası etiketi stil etiketinden sonra gider. Bunun nedeni nedir? Bir HTML5 denetleyicisi olarak hareket ettiklerinde

cevap

14

W3C Markup Validator, hariç scoped nitelik mevcut olduğunda hemen style eleman sadece head öğesinin içinde görünebilir söylüyor böyle HTML 5.1 Nightly gibi çeşitli taslaklar göre bu sorunu ele alır bu durumda, “akış içeriğinin beklendiği yerlerde, ancak içerik modeli şeffaf olan bir öğenin çocuğu olarak değil, elemanlar arası boşluk ve stil unsurları dışındaki herhangi bir akış içeriğinden önce” görünebilir. Gerçek örneğinizde, öğe script öğesinden sonra (akış içeriği olarak sayılır) görüntülenir. Öğelerin sırasını değiştirmek, söz konusu tanım çerçevesinde sözdizimini geçerli olarak değiştirir.

Alternatif olarak, sadece bir div elemanda style eleman sarabilirsiniz:

<!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 nitelik W3C Tavsiye HTML5 göre hiç geçerli değil. HTML5 taslaklarında mevcuttu, ancak uygulama eksikliğinden dolayı Tavsiye'den düşülüyordu, ancak yine de “standardizasyon yolu” nda yer alıyor ve HTML 5.1'e girebiliyor. Varolan tarayıcılar genellikle (style elemanı önce bile parçalar) scoped niteliğini görmezden ve izin bir style elemanı hemen hemen her yerde ve tüm HTML belgeye içeriğini uygulamak

Not.

+3

Hey! W3C doğrulama bununla çalışır, ancak div içindeki stiller artık çalışmıyor :( – user2718671