À proprement parler, les style
balises doivent-elles se trouver à l'intérieur 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 des règles de feuille de style dans l'en-tête du document. HTML autorise n'importe quel nombre d'éléments STYLE dans la section HEAD d'un document.
Je dis «à proprement parler» parce que j'ai une application qui met des éléments de style dans le corps, et tous les navigateurs avec lesquels j'ai testé semblent utiliser les éléments de style. Je me demande simplement si c'est vraiment légal.
html
coding-style
html-head
eaolson
la source
la source
style
dans lebody
, donc c'est assez bon pour moi, indépendamment de ce qu'impliquent les sections des lignes directrices de l'auteur.Réponses:
style
est censé être inclus uniquement sur lehead
du document.Outre le point de validation, une mise en garde qui pourrait vous intéresser lors de l'utilisation
style
sur lebody
est le flash du contenu sans style . Le navigateur obtiendrait des éléments qui seraient stylisés après leur affichage, les faisant changer de taille / forme / police et / ou scintillement. C'est généralement un signe de mauvais savoir-faire. En général, vous pouvez vous en sortir en rangeantstyle
où vous le souhaitez, mais essayez de l'éviter chaque fois que cela est possible.HTML 5 a introduit un
scoped
attribut qui permettaitstyle
d'inclure des balises partout dans le corps, mais ils l'ont à nouveau supprimé.la source
scoped
attribut, voir caniuse.com/#feat=style-scoped .style
balises dans le.body
Ainsi, malgré la partie auteur de la spécification, je considère que les styles de corps sont valides. github.com/whatwg/html/issues/1605#issuecomment-235961103Réponse courte
Selon la spécification actuelle, oui, les
style
éléments doivent toujours être dans lehead
. Il n'y a pas d'exceptions (sauf unstyle
élément à l'intérieur d'untemplate
élément , si vous voulez le compter).Cela n'a pas toujours été le cas dans le passé. Si vous vous souciez des détails de la spécification et de son historique, continuez à lire.
Peu importe ce que dit la spécification, l'utilisation d'
style
éléments dans lebody
fonctionne plus ou moins dans tous les principaux navigateurs. Cependant, elle est considérée comme une mauvaise pratique à la fois parce qu'elle enfreint les spécifications et parce qu'elle peut entraîner des conséquences indésirables telles que des performances de rendu moins bonnes ou un «flash de contenu non stylisé».Historique des spécifications
style
les éléments n'existaient pas dans HTML 2 . Ils ont été introduits dans HTML 3.0, où ils ont été inclus dans la liste des éléments pouvant être inclus dans The Head Element , mais pas inclus dans la liste des éléments qui pourraient être présents dans The Body Element . Ainsi, au moment où l'élément a été spécifié pour la première fois, il ne pouvait être inclus que dans le fichierhead
.Cela est resté le cas (bien qu'exprimé en utilisant un libellé différent) jusqu'à HTML 5, qui a introduit l'
scoped
attribut (supprimé depuis) pour lesstyle
éléments. Cet attribut, lorsqu'il était présent, était destiné à permettre à unstyle
élément d'être placé dans un élément du corps pour styliser uniquement les descendants de cet élément. Cependant, cette fonctionnalité n'a jamais été intégrée à un navigateur réel (du moins pas sans avoir besoin d'être activée via un indicateur de développeur) et a été supprimée à la fois des spécifications du W3C et de WhatWG "en raison du manque d'intérêt de l'implémenteur" . Par la suite, lesstyle
éléments n'étaient autorisés que dans des contextes qui autorisent le contenu de métadonnées, qui n'est que la tête. Nous sommes donc revenus aux mêmes règles qu'avant HTML 5.Cependant, en raison d'une erreur commise par les deux organisations de spécification, un index non normatif des éléments inclus en annexe dans les deux spécifications n'a pas été correctement mis à jour pour refléter la suppression de
scoped
, le rendant incompatible avec la spécification normative. Je l'ai signalé à la fois au WhatWG et au W3C , et ce faisant, j'ai involontairement déclenché des événements qui ont provoqué une divergence entre les deux spécifications.La solution de WhatWG à l'incohérence entre la spécification normative et l'index non normatif a été d' accepter mon patch corrigeant l'index non normatif.
Le W3C, d'un autre côté, a rejeté mon correctif équivalent en faveur de la mise à jour de la spécification normative pour permettre l'utilisation d'
style
éléments dans lebody
, tout en mettant en garde cela avec une note que cela peut causer des problèmes et doit être fait "avec précaution". Le raisonnement derrière ce changement était d'aligner la spécification sur le comportement réel du navigateur.Ainsi, à partir de mars 2017, il était vrai que la réponse officielle à cette question dépendait de l'organisme de normalisation que vous avez choisi d'écouter. Si vous avez répertorié la spécification WhatWG (généralement plus respectée), un
style
élément n'était pas autorisé dans lebody
. Si vous avez répertorié les spécifications du W3C, cela était autorisé, mais pas recommandé.Cet état de choses stupide a pris fin (peut-être comme beaucoup d'autres incohérences de ce genre) avec le traité de paix d'avril 2019 entre le W3C et WhatWG , qui a convenu que la spécification WhatWG deviendrait le seul véritable standard HTML vivant, le W3C ne faisant que publier des instantanés numérotés. Spécifications HTML au lieu de développer une spécification concurrente en parallèle. Ainsi, le changement de 2017 au fork du W3C qui permettait des
style
éléments dans lebody
ne fait plus partie d'aucune spécification actuelle; ce n'est qu'une curiosité de l'histoire.Donc, aujourd'hui, il suffit de regarder les spécifications WhatWG pour déterminer ce qui est officiellement autorisé. Il a ceci à dire:
CTRL-Fing à travers la spécification d'une seule page révèle que le seul élément dont le modèle de contenu inclut le contenu des métadonnées est l'
head
élément.L' index non normatif des éléments dont j'ai parlé plus tôt confirme également que les seuls parents autorisés pour un
style
élément sont un élémenthead
ounoscript
.la source
Bien que les autres réponses soient correctes, je suis surpris que personne n'ait expliqué où les normes interdisent les styles en dehors de
head
.C'est en fait dans la section sur The
head
Element (et dans la DTD ):Oui je sais. Les DTD sont difficiles à lire.
C'est le seul endroit où l'
STYLE
élément se produit, donc implicitement, il est invalide ailleurs.la source
Ils ne sont pas censés sortir de la tête, mais ils fonctionnent quand même; bien que vous remarquiez peut-être un scintillement rapide. Le site ne devrait pas valider avec la balise de style en dehors de la tête, mais est-ce vraiment important? De plus, les balises de lien fonctionnent également en dehors de la tête, même si elles ne sont pas censées le faire.
la source
style
Comme les autres réponses l'ont indiqué, il n'a pas besoin d'être là. Cependant, il ne validera pas. Cela peut ou non avoir une importance dans ce cas, mais gardez à l'esprit que le rendu du HTML dépend entièrement des navigateurs. D'après ce que je sais, tous les navigateurs utilisés d'aujourd'hui prendront en charge le mettre en dehors de la tête, mais vous ne pouvez pas le garantir pour les futurs navigateurs et les futures versions de navigateur.
Restez fidèle à la norme et vous êtes plus en sécurité. Combien plus sûr est à débattre.
la source
La recommandation HTML5.2 W3C du 14 décembre 2017 (et non le projet précédent mentionné ci-dessus) indique désormais que vous pouvez inclure
<style>
.la source
style
labody
, donc nous sommes de retour à celle - ci étant clairement interdit. Voir ma réponse si vous êtes intéressé par le chemin sinueux par lequel nous sommes arrivés ici.Une balise de style n'importe où sauf à l'intérieur du
<head>
ne sera pas validée avec les règles du W3C.la source
Selon ce site, HTML5.1 (en brouillon) et WHATWG permettent de mettre la
<style>
balise dans le corps:http://www.html.am/tags/html-style-tag.cfm
Il semble également avoir été pris en charge par les navigateurs depuis un certain temps. Selon cette réponse StackOverflow, Firefox 3+, IE6 +, Safari 2+ et Chrome 12+ le prennent en charge:
https://stackoverflow.com/a/10989663/297793
la source
Selon la spécification HTML 5.2 (en brouillon), la balise de style n'est autorisée que dans l'en-tête d'un document.
HTML 5.2 Brouillon sur la balise de style (18 août 2016)
la source
Vous pouvez utiliser la balise de style à l'intérieur de la section head ou body ou également à l'extérieur de la balise html (le html à l'extérieur n'est pas recommandé). Dans les projets en temps réel, vous pouvez voir à plusieurs reprises qu'ils utilisent la balise de style à côté de la balise html
la source