web-dev-qa-db-fra.com

<STYLE> doit-il figurer dans la <HEAD> d'un document HTML?

À proprement parler, les balises style doivent-elles figurer à l'intérieur de la head d'un document HTML? La norme 4.01 implique cela, mais ce n'est pas explicitement indiqué:

L'élément STYLE permet aux auteurs de mettre les règles de la feuille de style dans la tête de le document. HTML permet n'importe quel nombre des éléments STYLE dans la section HEAD d'un document.

Je dis «à proprement parler» parce que j'ai une application qui insère des éléments de style dans le corps, et tous les navigateurs que j'ai testés semblent utiliser ces éléments. Je me demande si c'est vraiment légal.

122
eaolson

style est censé être inclus uniquement sur la head du document. 

Outre le point de validation, une mise en garde qui pourrait vous intéresser lors de l’utilisation de style sur body est le flash de contenu non style . Le navigateur obtiendrait les éléments qui seraient dénommés après ils seraient affichés, ce qui les ferait changer de taille/forme/police et/ou de scintillement. C'est généralement un signe de mauvaise facture. Généralement, vous pouvez vous contenter de mettre style où vous voulez, mais essayez de l'éviter chaque fois que cela est possible.

HTML 5 introduit un attribut scoped qui permet aux balises style d'être incluses partout dans le corps, mais elles sont ensuite supprimées.

97
Esteban Küber

Alors que les autres réponses sont correctes, je suis surpris que personne n’ait expliqué les normes interdisent les styles en dehors de head.

C'est en fait dans la section sur l'élément head (et dans le DTD ):

<!-- %head.misc; defined earlier on as "SCRIPT|STYLE|META|LINK|OBJECT" -->
<!ENTITY % head.content "TITLE & BASE?">

<!ELEMENT HEAD O O (%head.content;) +(%head.misc;) -- document head -->

Oui je sais. Les DTD sont difficiles à lire.

C’est le seul endroit où l’élément STYLE apparaît, il est donc implicitement invalide ailleurs.

19
user123444555621

Ils ne sont pas censés sortir de la tête, mais ils travaillent quand même; bien que vous puissiez remarquer un scintillement rapide. Le site ne doit pas valider avec la balise style en dehors de la tête, mais est-ce vraiment important? De plus, les étiquettes de lien fonctionnent également en dehors de la tête, même si elles ne sont pas censées le faire.

14
geowa4

Comme les autres réponses l'ont indiqué, il n'est pas nécessaire que ce soit là. Cependant, cela ne sera pas validé. Cela peut être important ou non dans ce cas, mais gardez à l’esprit que le rendu du code HTML incombe entièrement aux navigateurs. D'après ce que je sais, tous les navigateurs actuels utiliseront cette option, mais vous ne pouvez pas le garantir pour les futurs navigateurs et les futures versions de navigateurs.

Tenez-vous en à la norme et vous êtes plus en sécurité. Combien de sécurité est en place pour beaucoup de débat.

4
Louis

Une balise de style n’importe où sauf dans le <head> ne sera pas validée par les règles du W3C.

3
womp

Selon la spécification HTML 5.2 (en projet), la balise style n'est autorisée que dans l'en-tête d'un document.

HTML 5.2 Projet de balise de style (18 août 2016)

Un élément de style est limité à apparaître dans l'en-tête du document.

1
Kerry Kobashi

Selon ce site, HTML5.1 (en version préliminaire) et WHATWG permettent à la balise <style> d'être placée dans le corps:

http://www.html.am/tags/html-style-tag.cfm

Il semble également avoir été pris en charge par les navigateurs pendant un certain temps. Selon cette réponse de StackOverflow, Firefox 3+, IE6 +, Safari 2+ et Chrome 12+ le supportent: 

https://stackoverflow.com/a/10989663/297793

1
konrad

La recommandation HTML5.2 du W3C du 14 décembre 2017 (et non le précédent projet mentionné ci-dessus) indique désormais que vous pouvez inclure <style>.

"Dans le corps, où le contenu du flux est attendu." (section 4.2.6)

0
Anahata

Vous pouvez utiliser une balise de style à l'intérieur de la section de tête ou de la section du corps, ou également à l'extérieur de la balise html également (le format html latéral n'est pas recommandé). Dans les projets en temps réel, vous verrez souvent qu'ils utilisent une balise de style en dehors de la balise html

0
Adarsh Joshi