5568 sujets

Sémantique web et HTML

Bonjour à tous Smiley cligne

Je suis en train de créer mon site personnel et je voudrais le faire en HTML5.

Comme je voudrais que mon menu soit tout en haut de la page, je me demandais si je pouvais mettre la balise HTML5 <nav> dans la balise HTML5 <header>, comme ceci :

<header role"banner">
<nav>
	<ul>
		<li><a href="">Présentation</a></li>
		<li><a href="">Blog</a></li>
		<li><a href="">Me contacter</a></li>
		
	</ul>
</nav>

<header>


Merci beaucoup d'avance !

Cordialement

Marc..
Salut,

Oui, c'est possible.

Attention, tu as oublié le signe = dans l'attribut role, ainsi que le / dans la balise fermante </header>.
De manière générale, comment savoir si on peut mettre telle balise dans telle autre balise ?
Bonjour,

- On ne place pas NAV dans un HEADER.
- NAV et HEADER décrivent des contenus. Ce n'est pas parce que tu as une zone visuelle en haut de page que ça doit être un HEADER dans ton code HTML.
- Je rappelle à tout hasard que DIV n'est pas déprécié en HTML5 et peut (doit) être utilisé lorsqu'il est pertinent, par exemple pour des questions de mise en page.
Salut Florent, merci de ton intervention Smiley cligne

Deux petites question,

Est-ce qu'une page web avec un doctype HTML5 doit obligatoirement posséder une balise Header ou est-ce facultatif ?

Supposons mon cas de figure avec en haut de page une image ou une information du contenu ( par exemple un titre ) et un menu de navigation.

Peut-on "couper" le header afin qu'il ne prenne pas toute la place en largeur et qu'il partage la place avec un menu de navigation.

Une illustration s'impose.

A gauche en rouge la balise HTML5 Header ou alors un div="header" et à droite en vert le menu de navigation avec le balise HTML5 <nav>.

http://i46.servimg.com/u/f46/11/06/60/26/header10.jpg

Merci encore de ton aide !!
marc.suisse a écrit :
Est-ce qu'une page web avec un doctype HTML5 doit obligatoirement posséder une balise Header

Non. En passant, "Header" n'est pas une balise mais le nom d'un élément. Les balises correspondantes sont <header> et </header>. Smiley cligne
Par ailleurs il peut y avoir plusieurs éléments HEADER (jusqu'à un par section).
La doc est par là (pour une version un peu lisible):
http://developers.whatwg.org/sections.html#the-header-element

marc.suisse a écrit :
Peut-on "couper" le header afin qu'il ne prenne pas toute la place en largeur et qu'il partage la place avec un menu de navigation.

Ça c'est de la mise en page. Ça n'a pas un grand rapport avec la sémantique de HTML5, hein. Smiley smile

Apparemment tu as une section principale qui est ton élément BODY, qui a un contenu d'en-tête au sens de HTML5 (donc tu peux utiliser un HEADER) et une navigation principale (NAV), ainsi qu'un contenu principal (pas d'élément dédié). Tu peux donc partir sur une structure comme suit:
<body>
  <header>
    ...
  </header>
  <nav>
    ...
  </nav>
  Contenu
</body>

Si tu as besoin d'une mise en forme particulière de ton contenu, ça peut être bien de rajouter un élément DIV pour l'englober. Si tu as besoin de grouper le HEADER et le NAV pour des questions de mise en forme, tu peux utiliser un autre DIV. Ce qui nous donne:
<body>
  <div class="top">
    <header>
      ...
    </header>
    <nav>
      ...
    </nav>
  </div>
  <div class="middle">
    Contenu
  </div>
</body>

Du point de vue sémantique, ces deux exemples sont strictement identiques.
fvsch a écrit :

Non. En passant, &quot;Header&quot; n'est pas une balise mais le nom d'un élément. Les balises correspondantes sont &lt;header&gt; et &lt;/header&gt;. Smiley cligne
Par ailleurs il peut y avoir plusieurs éléments HEADER (jusqu'à un par section).
La doc est par là (pour une version un peu lisible):
http://developers.whatwg.org/sections.html#the-header-element


Tu as raison, je me suis mal exprimé Smiley confused

Oui, pour la possibilité d'avoir plusieurs HEADER, j'étais au courant.

fvsch a écrit :
Ça c'est de la mise en page. Ça n'a pas un grand rapport avec la sémantique de HTML5, hein. smile


Si tu fais allusion à la capture d'écran, oui, c'est effectivement une mise en page un peu bordel, d'autant plus que j'ai mis une bordure de la même couleur à 2 blocs, cela peut effectivement porter à confusion.

Si par contre tu veux dire qu'il ne s'agit pas d'une question relative au sujet initial, je peux éventuellement poser la question sur une autre section du forum à toi de me dire ce qui est le mieux.

J'ai essayé de revoir le code et je te préviens, j'expérimente, alors cela peut être pas joli joli...

Voici le résultat et le code, dis moi si tu as crié Smiley eek en voyant "mon oeuvre" Smiley lol

Ce qui est bien, c'est que si je redimensionne la fenêtre, le design suit bien et s'adapte relativement correctement.

http://i46.servimg.com/u/f46/11/06/60/26/captur10.jpg

<!DOCTYPE html )

<html lang="fr">
 
<head>
    <meta charset="utf-8">
    <title>Marc Schaefges | Blog</title>
    <meta name="author" content="Marc Schaefges">
    <link rel="stylesheet" media="all" type="text/css" title="style" href="index.css" />
</head>



<body>

  <div class="top">

    <header>

      <h1 class="titre">La partie blog..</h1>

    </header>

    <nav>

    <ul>
		<li><a href="">Accueil</a></li>
		<li><a href="">Blog</a></li>
		<li><a href="">Contact</a></li>

	</ul>

    </nav>

  </div>

  <div class="middle">
<article>
    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean sollicitudin feugiat erat. Quisque elit augue, dapibus et feugiat ut, ornare id nisl. In id magna eu dui gravida lobortis. Aliquam erat volutpat. Integer a ante nibh, nec placerat risus. Donec nec lectus libero. Maecenas non lacus ac mi tincidunt ullamcorper. Nunc lacus odio, sagittis ac porta id, adipiscing sit amet sem. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Nam vitae nibh leo. In auctor lorem quis risus congue rutrum sed eu magna. Nulla in consequat neque. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque vitae neque mi, a porta mi. Integer iaculis metus et augue blandit elementum. Suspendisse ullamcorper ornare augue nec bibendum.

Integer justo arcu, suscipit in euismod vel, eleifend tincidunt ipsum. Pellentesque ligula libero, vulputate ut iaculis at, porttitor ut lorem. Maecenas gravida risus eu erat aliquam porta. Vestibulum id metus ut risus facilisis ultricies. Maecenas at risus non magna sodales euismod vitae non eros. Cras non ultricies lorem. Sed ut ligula lectus. Ut porta tellus et est tempor placerat. Suspendisse potenti. Pellentesque quis tortor et arcu molestie pretium. Aliquam tempus, lectus eu vehicula aliquet, orci ante vulputate massa, in facilisis arcu libero eget lorem. Nulla rhoncus placerat sollicitudin. Nunc accumsan lacinia egestas. Sed posuere, neque ut egestas tincidunt, eros leo mollis mi, ut fringilla elit augue rhoncus dolor. Mauris pretium, dui et luctus lacinia, magna justo scelerisque urna, fringilla semper felis nulla non odio. Donec lacinia eros vitae sapien cursus ultricies. </p>
</article>

<div class="colonne_droite">
<p>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean sollicitudin feugiat erat. Quisque elit augue, dapibus et feugiat ut, ornare id nisl. In id magna eu dui gravida lobortis. Aliquam erat volutpat. Integer a ante nibh, nec placerat risus. Donec nec lectus libero. Maecenas non lacus ac mi tincidunt ullamcorper. Nunc lacus odio, sagittis ac porta id, adipiscing sit amet sem. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Nam vitae nibh leo. In auctor lorem quis risus congue rutrum sed eu magna. Nulla in consequat neque. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque vitae neque mi, a porta mi. Integer iaculis metus et augue blandit elementum. Suspendisse ullamcorper ornare augue nec bibendum.

Integer justo arcu, suscipit in euismod vel, eleifend tincidunt ipsum. Pellentesque ligula libero, vulputate ut iaculis at, porttitor ut lorem. Maecenas gravida risus eu erat aliquam porta. Vestibulum id metus ut risus facilisis ultricies. Maecenas at risus non magna sodales euismod vitae non eros. Cras non ultricies lorem. Sed ut ligula lectus. Ut porta tellus et est tempor placerat. Suspendisse potenti. Pellentesque quis tortor et arcu molestie pretium. Aliquam tempus, lectus eu vehicula aliquet, orci ante vulputate massa, in facilisis arcu libero eget lorem. Nulla rhoncus placerat sollicitudin. Nunc accumsan lacinia egestas. Sed posuere, neque ut egestas tincidunt, eros leo mollis mi, ut fringilla elit augue rhoncus dolor. Mauris pretium, dui et luctus lacinia, magna justo scelerisque urna, fringilla semper felis nulla non odio. Donec lacinia eros vitae sapien cursus ultricies. 
</p>
</div>

  </div>
  
  <footer>
  
  </footer>

</body>


@font-face {
    font-family: 'BoycottRegular';
    src: url('BOYCOTT_-webfont.eot');
    src: url('BOYCOTT_-webfont.eot?#iefix') format('embedded-opentype'),
         url('BOYCOTT_-webfont.woff') format('woff'),
         url('BOYCOTT_-webfont.ttf') format('truetype'),
         url('BOYCOTT_-webfont.svg#BoycottRegular') format('svg');
    font-weight: normal;
    font-style: normal;

}

html 

{

}

body

{
background-image: url("fond.gif");
background-repeat: repeat;
width:960px;
padding:0;
margin:0;
width:100%;
min-height:100%;
color:white;
}

.top

{
display:table;
width:100%;
}

header

{
display:table-cell;
width:60%;
padding-left:20px;
}

h1.titre 
{
font-family:BoycottRegular;
font-size:3em;
-moz-border-radius: 8px;
-webkit-border-radius: 8px;
border-radius: 8px;
-moz-box-shadow: 1px 1px 13px #999; 
-webkit-box-shadow: 1px 1px 13px #999; 
box-shadow: 1px 1px 13px #999;
-moz-transform: rotate(-8deg); 
-webkit-transform: rotate(-8deg);
width:400px;
margin-top:100px;
margin-left:50px;
padding-left:20px;
}

nav

{
display:table-cell;

width:40%;

}

nav li

{
list-style-type:none;
display:inline;
padding-left:40px;
}

nav li a

{
font-size:2em;
font-family:BoycottRegular;
color:white;
text-decoration:none;
}

nav li a:hover

{

}

.middle

{
display:table;
width:100%;
margin-top:30px;
}

article

{
display:table-cell;
width:50%;
padding:20px;
}

.colonne_droite

{
display:table-cell;
width:50%;
padding:20px;
}








 
marc.suisse a écrit :
Si tu fais allusion à la capture d'écran, oui, c'est effectivement une mise en page un peu bordel, d'autant plus que j'ai mis une bordure de la même couleur à 2 blocs, cela peut effectivement porter à confusion.

Non, je disais juste que le fait de mettre deux blocs côte-à-côte c'est une question de mise en page, et que ça ne doit pas influer sur la sémantique de ton code HTML. C'est à dire que tu vas gérer ce besoin de design uniquement en CSS, ou essentiellement en CSS et en te servant éventuellement d'un élément HTML neutre pour regrouper certains contenus (les conteneurs neutres en HTML sont SPAN et DIV).
Ce n'était pas un commentaire sur les qualités du design. Smiley cligne

Pour le code HTML que tu montres: ça me semble bien.
Salut salut Smiley cligne

C'est noté je te remercie !!

Je sais qu'il n'est pas question de CSS dans cette partie du forum, mais j'aimerais juste une petite précision encore.

TU dis avoir regardé le code HTML, mais as-tu vu dans le fichier CSS que j'ai placé les différents contenu grâce à display:table et display:table-cell ?

Donc la mise en page se base exclusivement sur un tableau ( 2 tableaux en fait, un pour les 2 blocs en hauts, header et nav et un autre pour séparer le contenu du milieu en 2 parties horizontales, en CSS évidemment ).

Est-ce une bonne manière de faire ?

Si tu préfères que je pose la question dans la partie CSS, dis le moi.

Merci encore à toi Smiley lol
marc.suisse a écrit :
TU dis avoir regardé le code HTML, mais as-tu vu dans le fichier CSS que j'ai placé les différents contenu grâce à display:table et display:table-cell ?
(...)
Est-ce une bonne manière de faire ?

Ça me semble bien aussi. Du moins si tu ne cherches pas à être compatible avec IE7 (qui ne comprend pas display:table-cell, et a actuellement dans les 3-4% de parts de marché en Europe d'après StatCounter).
Modifié par fvsch (25 Jan 2012 - 19:00)
Salut Smiley cligne

Non, ce n'est pas grave, car ce sera un site perso, sans grande prétention.

D'ailleurs même s'il s'agissait d'un site "pro", vu le faible taux d'utilisation de IE7, je pense que j'aurai quand même utilisé les tableaux.

En tout cas je te remercie infiniment des précisions apportées Smiley lol

Bonne journée à toi !

Cordialement

Marc
fvsch a écrit :
On ne place pas NAV dans un HEADER.

Victor BRITO a écrit :
Et pourtant, le validateur du W3C ne dit rien. Smiley confus

Et moi de mon côté j'étais allé voir la structure du blog de Raphaël Goetter qu'il propose comme modèle ici : Et il met les <nav> dans les <header> ! J'avais donc copié cette partie de la structure...

... Mais fvsch m'avais repris à ce sujet, et je pense que c'est avec raison : la doc explique qu'il faut éviter de le faire avec le footer, je me dis qu'il doit en être de même avec le header. J'ai fait la modif' pour mon site, mais sans aller voir plus avant...
@fvsch : peut être devrait-je revoir ma copie ! Smiley eek Regarde ce que je viens de trouver comme structure sur la page à laquelle tu renvoies plus haut :
<body>
 <header>
  <h1>Wake up sheeple!</h1>
  <p><a href="news.html">News</a> -
     <a href="blog.html">Blog</a> -
     <a href="forums.html">Forums</a></p>
  <p>Last Modified: <time>2009-04-01</time></p>
  <nav>
   <h1>Navigation</h1>
   <ul>
    <li><a href="articles.html">Index of all articles</a></li>
    <li><a href="today.html">Things sheeple need to wake up for today</a></li>
    <li><a href="successes.html">Sheeple we have managed to wake</a></li>
   </ul>
  </nav>
 </header>
 <div>
  <article>
   <header>
    <h1>My Day at the Beach</h1>
   </header>
   <div>
    <p>Today I went to the beach and had a lot of fun.</p>
    ...more content...
   </div>
   <footer>
    <p>Posted <time pubdate="" datetime="2009-10-10T14:36-08:00">Thursday</time>.</p>
   </footer>
  </article>
  ...more blog posts...
 </div>
 <footer>
  <p>Copyright © 2006 The Example Company</p>
  <p><a href="about.html">About</a> -
     <a href="policy.html">Privacy Policy</a> -
     <a href="contact.html">Contact Us</a></p>
 </footer>
</body>

Et voici l'explication approximative en français (traduction "à l'arrache" Google) :

developers.whatwg.org a écrit :
L'élément nav représente une section d'une page que les liens vers d'autres pages ou à des parties dans la page: une section avec des liens de navigation.

Pas tous les groupes de liens sur une page besoin d'être dans un élément de nav - l'élément est principalement destiné aux sections qui composent de blocs de navigation majeure. En particulier, il est fréquent que des pieds de page pour avoir une courte liste de liens vers des pages différentes d'un site, telles que les conditions de service, la page d'accueil, et une page de copyright. L'élément footer seule est suffisante pour de tels cas, tandis que d'un élément de navigation peuvent être utilisées dans de tels cas, il est généralement inutile.

Les agents utilisateurs (comme les lecteurs d'écran) qui sont destinés aux utilisateurs qui peuvent bénéficier d'informations de navigation étant omise dans le rendu initial, ou qui ne peuvent bénéficier d'informations de navigation étant immédiatement disponible, ne peut utiliser cet élément comme un moyen de déterminer quel contenu sur le page à un premier saut et / ou fournir sur demande.

Dans l'exemple suivant, la page a plusieurs lieux où des liens sont présents, mais seulement un de ces endroits est considérée comme une section de navigation.

Modifié par Olivier C (26 Jan 2012 - 17:37)
Effectivement, dans les exemples pour NAV et dans un exemple pour HEADER ils mettent un NAV dans le HEADER. Par ailleurs la définition de HEADER c'est «désigne un contenu d'introduction ou de navigation».

Ceci dit:
1. La sémantique de l'élément NAV seul est suffisante pour qu'il soit identifié comme «outil de navigation principal pour la section parente», donc il ne me semble pas obligatoire de le placer dans HEADER.
2. Le plan du document résultant n'est pas affecté si je place la navigation en fin de HEADER ou juste après le HEADER (vérifié dans la spec et avec HTML5 outliner).

Donc j'ai envie de dire que c'est kif-kif, les deux sont possibles, même si la spec recommande plutôt de mettre NAV dans HEADER.

Edit: j'ai croisé d'autres exemples dans la spec avec <header /><nav /> ou encore <h1 /><nav /> (pas de header).
Modifié par fvsch (27 Jan 2012 - 13:46)
Bonjour

Il faut peut être aussi noter que Jaws 11 (et Jaws 10) utilisé avec Firefox 3.6 ne lit pas le contenu de la balise header (bug corrigé avec Jaws 12). Il est difficile d'avoir des statistiques du nombre d'utilisateurs de ces versions mais à priori, Firefox est de plus en plus utilisé (http://webaim.org/projects/screenreadersurvey3/) donc comme dit fvsch, si c'est kif kif, il vaut peut être mieux ne pas mettre nav dans header, non ?
Source : http://www.accessibleculture.org/