web-dev-qa-db-fra.com

HTML peut-il contenir deux HEAD Mots clés

Dans mon application Web, j'ai un fichier Header.jsp qui contient le contenu de l'en-tête par défaut. Je l'inclue dans toutes les autres pages à l'aide de jsp: inclure une balise à l'intérieur de la balise body de chaque page.

Header.jsp contient sa propre balise HEAD pour spécifier les balises méta, les feuilles de style de lien, les scripts et certains éléments HTML par défaut. En même temps, j'aurai un autre ensemble de balises HEAD dans toutes les autres pages individuelles pour définir le titre, le script spécifique à la page et les feuilles de style.

Par exemple:

Header.jsp

<head>
   <link rel="shortcut icon" href="<%=request.getContextPath()%>/images/favicon.ico" type="image/x-icon" />
   <meta http-equiv="X-UA-Compatible" content="IE=Edge"/>
   <script src="js/jquery.js"></script>
   <link rel=stylesheet type="text/css" href="dashboard.css" >
</head>
<h2>Dashboard</h2>

Main.jsp

<!DOCTYPE html> 
<html>
   <head>
      <title>Main page</title>
      <script src="main.js"></script>
   </head>
   <body>
      <jsp:include page="Header.jsp" flush="true" />
      .....
      other HTML contents specific to main page
      .....
   </body>
</html>

s'il est valide de faire comme ça?

16
sureshd

Ce n'est pas valide selon le standard

Partie pertinente:

4.2.1 L'élément de tête

Catégories: Aucun. 

Contextes dans lesquels cet élément peut être utilisé: En tant que premier élément d'un élément html.

Votre deuxième élément <head> ne serait pas le premier élément du document html.

11
mvillar

Permettez-moi d’étendre les réponses avec un "oui et non".

Les gens répondent généralement à ces questions en théorie, comme "non, car ce n’est pas valable selon les normes". C'est vrai, ce n'est pas. Les futurs navigateurs risquent de ne pas le prendre en charge, certains analyseurs de source peuvent être confus, les experts en ressources humaines qui vérifient votre portefeuille peuvent penser que vous en savez moins que Jon Snow et toutes sortes de mauvaises choses. En théorie.

TOUTEFOIS.

Oui, cela se produit effectivement dans le monde réel - et oui, pratiquement tous les navigateurs traitent ce cas de la même manière: ils acceptent les deux balises head} et fonctionnent comme prévu. Il y a 3 très bonnes raisons pour cela:

1. L'étiquette de tête est facultative. Les navigateurs acceptent le contenu semblable à une étiquette même en dehors de celui-ci, donc ils ignorent complètement la balise elle-même. Et s’ils en ignorent un, ils en ignoreront probablement aussi plusieurs.

2. Les navigateurs veulent que vous profitiez de votre temps. Ils veulent vous montrer la meilleure page possible, ils peuvent composer du désordre qu'ils ont. _ {C'est leur intention) ils veulent vous montrer qu'Internet fonctionne, et non vous apprendre à quel point votre site Web favori est mauvais. S'ils peuvent savoir ce que le code html veut exprimer (et qu'il n'y a pas d'ambiguïté mortelle dans la structure), ils feront de leur mieux pour corriger la page.

3. Une mauvaise tolérance de marquage est une chose. Les navigateurs ne sont pas seulement patients et tolérants, mais ils effectuent parfois des mouvements acrobatiques pour que vos documents fonctionnent. Regardez ce désordre horrible:

<!-- no doctype! -->
<!-- no HTML tag! we're all gonna die! -->
<head>
    <style>
        body {background:#002233;}
    </style>
</head>
<head><!-- let's twist again! -->
    <style>
        body {color:white}
    </style>
<!-- we didn't even close the second one!! -->

See this text?<br>
With the background AND color properly set?<br>
<br>
Your browser's quite a badass.

À propos de la tolérance du navigateur, voici beaucoup plus avec des exemples extrêmement laids - assurez-vous d'oublier tout ce que vous avez vu à votre retour!)

Alors oui, bien sûr, le principe est "sois un bon ami de ton navigateur", peu importe à quel point il corrige intelligemment tes erreurs. Mais si vous vous réveillez dans un cachot sombre avec des lions affamés et que votre seul moyen de sortir consiste à utiliser deux balises <head> - eh bien, n'hésitez pas! C'est pas syntaxe cassée, c'est pas une violation grave des règles HTML5 - ce n'est rien de plus qu'une astuce commode. Et ne tombez pas dans le mythe répandu selon lequel les sites non standard et non nettoyés prospèrent encore plus mal: les gens ne le savent généralement pas et veulent rester du côté sûr. Généralement, ce sont eux qui décrivent l’enfer comme un lieu où les auteurs de sites Web qui échouent aux validateurs vont.

TLDR: En pratique, deux balises head fonctionnent.

Maintenant, s'il vous plaît, n'en avez plus qu'un si possible.

38
dkellner

Voici une idée à essayer

Dans ta tête principale fais ceci

<!DOCTYPE html> 
<html>
<head>
   <link rel="shortcut icon" href="<%=request.getContextPath()%>/images/favicon.ico" type="image/x-icon" />
   <meta http-equiv="X-UA-Compatible" content="IE=Edge"/>
   <script src="js/jquery.js"></script>
   <link rel=stylesheet type="text/css" href="dashboard.css" >

Remarquez que j'ai laissé la balise head end . Ensuite, dans tous vos fichiers, vous devez soit fermer la balise head, soit ajouter des éléments d'en-tête supplémentaires, puis fermer votre balise head, par exemple

      <title>Main page</title>
      <script src="main.js"></script>
   </head>
   <body>
      <jsp:include page="Header.jsp" flush="true" />
      .....
      other HTML contents specific to main page
      .....
   </body>
</html>

En ce qui concerne le titre de votre page, vous pouvez lancer un peu php pour déterminer la page sur laquelle vous vous trouvez.

2
Thomas Williams

Bonne réponse @ Gwenc37. Vous pouvez avoir n'importe quelle balise dans n'importe quelle autre balise, mais il est toujours préférable de respecter les normes et spécifications du W3C. Plus tard dans le projet, vous risquez d’arriver à un point où votre code HTML n’est pas analysé correctement dans un navigateur, voire pire.

Pour être en sécurité, respectez plutôt les normes W3C. De cette façon, vous ne pouvez pas vous tromper. J'espère que cela t'aides.

2
heinkasner

Conformément aux normes W3C, non! vous ne pouvez pas l'avoir. 

Dans votre cas, vous utilisez JSP en tant que script côté serveur. Le problème peut être résolu en utilisant CONSTANTS pour la feuille de style/scripts/autres éléments HTML. 

Vous avez juste besoin d'ajouter une condition dans votre fichier "main.jsp" selon les exigences de la page.

1
Sagar Awasthi

Conformément aux normes W3C, vous ne pouvez pas avoir deux balises HEAD. 

En ce qui concerne votre problème, vous pouvez appeler le fichier header.jsp sans la balise HEAD ou vous pouvez renommer en scripts.jsp ou constants.jsp

Par exemple:

Header.jsp

<link rel="shortcut icon" href="<%=request.getContextPath()%>/images/favicon.ico" type="image/x-icon" />
<meta http-equiv="X-UA-Compatible" content="IE=Edge"/>
<script src="js/jquery.js"></script>
<link rel=stylesheet type="text/css" href="dashboard.css" >

Main.jsp

<!DOCTYPE html>
<html>
<head> 
<title>Main page</title>
<script src="main.js"></script>
<jsp:include page="Header.jsp" flush="true" />
</head>
<body> 
..... 
other HTML contents specific to main page
..... 
</body>
</html>
0
Sagar Awasthi