Duplicate possible:
Est-ce que <STYLE> doit figurer dans la <HEAD> d'un document HTML?
Je fais partie d'une équipe qui a développé un système de gestion de contenu.
Nous aimerions pouvoir insérer des balises <style>
dans le <body>
d'une page HTML de manière à valider les normes W3C, car la validation est une exigence de notre consultant en référencement.
La balise style fonctionne parfaitement dans la balise body dans tous les navigateurs, mais elle refuse de valider.
La DTD HMTL ne le permet pas, donc elle ne valide pas. Peu importe, tous les navigateurs le supportent de toute façon.
La spécification HTML 4 indique qu'il est supposé se trouver dans l'élément HEAD, pas dans l'élément BODY. Voir aussi cette question connexe (dupliquer?)
Est-ce-que-le-style-doit-être-dans-la-tête-d'un-document-html
Référence W3C HTML 4.01 sur <style>
HTML autorise n'importe quel nombre d'éléments STYLE dans la sectionHEADd'un document.
Les éléments <style>
contiennent des métadonnées qui s'appliquent à l'ensemble du document. C'est ce que l'élément <head>
a été conçu pour contenir. Il est tout à fait logique pour eux de vivre dans la tête, c’est donc là que la spécification l’exige.
Littéralement, une balise <style>
à l'intérieur de la balise <body>
ne sera pas validée car toutes les spécifications HTML indiquent qu'elle ne peut pas être présente.
Quant à pourquoi les spécifications le disent, je ne sais pas. L'exigence est toujours dans la dernière spécification HTML, et récemment, les choses qui fonctionnaient dans le monde réel et qui étaient interdites par les spécifications précédentes (par exemple, l'omission de l'attribut type
sur la balise <style>
) ont été autorisées, donc je suppose qu'il doit y avoir une raison pourquoi l'exigence est toujours là.
J'imagine qu'il y a des cas où l'inclusion d'une balise <style>
dans le corps rend le rendu de page plus difficile/plus lent/moins fiable.
Contre quoi vous validez? HTML, XHTML Transitional, XHTML strict?
Probablement parce que les styles en ligne ne sont pas valides dans XHTML Strict. Vous devez utiliser class="foo"
à la place et définir foo dans un fichier CSS.