230 votes

À l'aide de <style> tags in the <body> avec d'autres HTML

<html>
  <body>
    <style type="text/css">
      p.first {color:blue}
      p.second {color:green}
    </style>

    <p class="first">Hello World</p>
    <p class="second">Hello World</p>

    <style type="text/css">
      p.first {color:green}
      p.second {color:blue}
    </style>

    <p class="first">Hello World</p>
    <p class="second">Hello World</p>
  </body>
</html>

Comment un navigateur est censée rendre css qui est non contigus? Est-il censé générer de la structure de données à l'aide de l'ensemble des styles css sur une page et l'utiliser pour le rendu?

Ou est-il rendu à l'aide des informations de style dans l'ordre qu'il voit?

344voto

Charles Salvia Points 28661

Comme d'autres l'ont déjà mentionné, HTML 4, il faut l' <style> balise à placer dans la <head> section (même si la plupart des navigateurs acceptent <style> balises à l'intérieur de l' body).

Toutefois, HTML 5 comprend l' scoped d'attribut, ce qui vous permet de créer des feuilles de style qui sont limités à l'intérieur de l'élément parent de l' <style> balise. Cela vous permet également de placer <style> balises à l'intérieur de l' <body> élément:

<!DOCTYPE html>
<html>
<head></head>
<body>

<div id = "scoped-content">
    <style type = "text/css" scoped>
    h1 { color: red }; 
    </style>

    <h1>Hello</h1>
</div>

<h1>World</h1>

</body>
</html>

Si vous utilisez le code ci-dessus dans un HTML-5 est activé sur votre navigateur qui prend en charge scoped, vous allez voir de la portée limitée de la feuille de style.

Il y a juste un majeur de mise en garde...

Au moment où j'écris cette réponse (Mai 2013) presque pas d'intégrer le navigateur prend actuellement en charge l' scoped d'attribut. (Bien que, apparemment, les versions en développement de Chrome en charge.)

CEPENDANT, il y a une implication intéressante de l' scoped attribut se rapportant à cette question. Cela signifie qu'à l'avenir les navigateurs sont mandatés par la norme afin de permettre l' <style> des éléments au sein de l' <body> (tant que l' <style> des éléments sont limités.)

Donc, étant donné que:

  • Presque tous les navigateurs existant actuellement ignore l' scoped d'attribut
  • Presque tous les navigateurs existant permet actuellement d' <style> balises à l'intérieur de l' <body>
  • Les futures implémentations seront nécessaires pour permettre (étendue) <style> balises à l'intérieur de l' <body>

...puis il n'y a littéralement pas de mal* en plaçant <style> tags à l'intérieur du corps, aussi longtemps que vous le futur avec un scoped d'attribut. Le seul problème, c'est que les navigateurs actuels ne limite le champ d'application de la feuille de style - ils vont les appliquer à l'ensemble du document. Mais le point est que, à toutes fins pratiques, vous pouvez inclure <style> balises à l'intérieur de l' <body> condition de:

  • L'avenir de votre HTML en incluant l' scoped d'attribut
  • Comprendre que, dès maintenant, la feuille de style à l'intérieur de l' <body> ne sera pas étendue (car pas d'intégrer la prise en charge du navigateur existe encore)


* sauf bien sûr, pour emmerder le HTML validateurs...


Enfin, concernant la commune (mais subjective) affirment que le fait d'intégrer le CSS dans le HTML est une mauvaise pratique, il convient de noter que le point de l'ensemble de l' scoped attribut est pour accueillir moderne typique des cadres de développement qui permettent aux développeurs d'importer des morceaux de HTML sous forme de modules ou de contenu syndiqué. Il est très pratique d'avoir CSS intégré qui seule s'applique à un morceau de code HTML, dans le but de développer encapsulé, composants modulaires spécifiques stylings.

41voto

Timberline Points 76

Quand je vois que le big-site de Systèmes de Gestion de Contenu régulièrement mis quelques <style> éléments (certains, pas tous) proche du contenu qui s'appuie sur ces classes, je conclus que le cheval est hors de la grange.

Allez voir la page des sources de cnn.com, nytimes.com, huffingtonpost.com, le plus proche de votre grand-journal de la ville, etc. Tous le faire.

Si il y a une bonne raison de mettre un extra <style> quelque part dans le corps, par exemple, si vous êtes include()ing variée et indépendante des éléments de la page en temps réel, et chacun a intégré <style> de sa propre, et l'organisation sera plus propre, plus modulaire, plus compréhensible et plus facile à gérer-je dis seulement mordre la balle. Bien sûr, il serait mieux si on pouvait avoir des "locaux" de style à portée limitée, comme les variables locales, mais vous allez travailler avec le code HTML que vous avez, pas le code HTML que vous pourriez vouloir ou souhaiter avoir plus tard.

Bien sûr, il ya des inconvénients potentiels et de bonne qualité (si pas toujours convaincant) raisons de suivre l'orthodoxie, comme d'autres l'ont élaboré. Mais pour moi, il semble de plus en plus réfléchie utilisation des balises <style> dans le <body> a déjà devenue monnaie courante.

9voto

nico Points 21115

Pas de code HTML valide, de toute façon à peu près chaque navigateur semble considérer que la deuxième instance.

Testé sous les dernières versions de FF et Google Chrome sous Fedora, et FF, Opera, IE et Chrome sous XP.

6voto

Pekka 웃 Points 249607

Je suppose que cela varie d'un navigateur à l'autre: L'affichage global des règles sera probablement mis à jour le navigateur va de même dans le code.

Vous pouvez voir de tels changements dans l'affichage global des règles parfois, quand une feuille de style externe est chargé avec un retard. Quelque chose de semblable pourrait se produire ici, mais dans un tel court succession qu'il n'est pas rendu.

Il n'est pas valide HTML de toute façon, donc je dirais que c'est une vaine chose à penser. <style> tags appartiennent à l' head de la section de la page.

5voto

Josh Stodola Points 42410

L' <style> balise appartient à l' <head> section, séparé de tout le contenu.

Références: Spécifications du W3C et W3Schools

Note de côté: Où est votre DOCTYPE?!

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X