Bonjour tous,

D'abord un grand merci a tous ceux qui font vivre ce site qui est une sacré réference en CSS /XHTML !

Je viens faire une remarque sur le tuto du menu déroulant horizontal et vertical. Les concepteurs utilisent des balises DT DL et DD pour structurer leur code mais celles-ci ne sont pas indiqués pour la conception de menu déroulant (balises de descriptions)...
Je viens vous proposer une alternative utlisant des div et surtout (ce qui me semble important pour un menu respectant les principes WAI) des balises de titre h2.

Merci de me dire ce que vous en pensez (oui, non, kif kif? Smiley murf )
-Les styles de couleurs et qq elements de mise en forme changent avec des .class (2 CSS forme + style)
- y'a des commentaires pour voir les balises remplacées.
-Les DD ont carrement étaient supprimées: pour moi ca servait vraiment à rien Smiley confus


Bonne continuation alsa!

Le HTML
a écrit :

<div id="navigation">
<div class="sous_navigation">
<h2 class="menu1" onmouseover="javascript:montre('smenu1');"><a href="index.php?page=menu1">Menu 1</a></h2>
<ul id="smenu1" onmouseover="javascript:montre('smenu1');" onmouseout="javascript:montre('');">
<li><a href="#">Sous-Menu 1.1</a></li>
</ul>
</div>
<div class="sous_navigation">
<h2 class="menu2" onmouseover="javascript:montre('smenu2');"><a href="index.php?page=menu2">Menu 2</a></h2>
<ul id="smenu2" onmouseover="javascript:montre('smenu2');" onmouseout="javascript:montre('');">
<li><a href="#">Sous-Menu 1.1</a></li>
<li><a href="#">Sous-Menu 1.2</a></li>
<li><a href="#">Sous-Menu 1.3</a></li>
<li><a href="#">Sous-Menu 1.4</a></li>
<li><a href="#">Sous-Menu 1.5</a></li>
<li><a href="#">Sous-Menu 1.6</a></li>
</ul>
</div>
<div class="sous_navigation">
<h2 class="menu3" onmouseover="javascript:montre('smenu3');"><a href="index.php?page=menu3">Menu 3</a></h2>
<ul id="smenu3" onmouseover="javascript:montre('smenu3');" onmouseout="javascript:montre('');" >
<li><a href="#">Sous-Menu 1.1</a></li>
<li><a href="#">Sous-Menu 1.2</a></li>

</ul>
</div>
<div class="sous_navigation">
<h2 class="menu4" onmouseover="javascript:montre('smenu4');"><a href="index.php?page=menu4">Menu 4</a></h2>
<ul id="smenu4" onmouseover="javascript:montre('smenu4');" onmouseout="javascript:montre('');">
<li><a href="#">Sous-Menu 1.1</a></li>
<li><a href="#">Sous-Menu 1.2</a></li>
<li><a href="#">Sous-Menu 1.3</a></li>
<li><a href="#">Sous-Menu 1.4</a></li>
<li><a href="#">Sous-Menu 1.5</a></li>
<li><a href="#">Sous-Menu 1.6</a></li>
</ul>
</div>
</div>


Le CSS de mise en page
a écrit :

h2, ul, li {
margin: 0;
padding: 0;
list-style-type: none;
}
#navigation { /* equivalent de #menu */
position: relative;
top: 0;
left: 0;
z-index:100;
width: 750px;

}
.sous_navigation { /*dl*/
float: left;
width: 83px;

}
#navigation h2 { /* dt */
cursor: pointer;
text-align: center;
font-weight: bold;
border: 1px solid gray;
margin: 1px;
font-size:80%;
}

#smenu1, #smenu2, #smenu3, #smenu4, #smenu5, #smenu6, #smenu7, #smenu8, #menu9 {
/* dd */
display: none;
border: 1px solid gray;
/*li*/
text-align: left;
padding:0 5px;
background: #fff;
width:150px;
position:absolute;}

#navigation li a, #navigation h2 a {
color:#FFFFFF;
text-decoration: none;
display: block;
height: 100%;
border: 0 none;
}
#navigation li a:hover, #navigation li a:focus, #navigation h2 a:hover, #navigation h2 a:focus {
background-color: #000000;
}


CSS de styles
a écrit :

#smenu1, .menu1 {
background-color:#333399;
}
.menu1, #smenu1 li {
color:#FFFFFF;}
#smenu2, .menu2 {
background-color:#3399ff;}
#smenu2,.menu2 a {
color:#FFFFFF;}
#smenu3, .menu3 {
background-color:#339999;
}
#smenu3, .menu3 a {

color:#FFFFFF;}
#smenu4, .menu4 {
background-color:#339933;}
#smenu4, .menu4 a {
color:#FFFFFF;}


Modifié par alx75 (30 Nov 2006 - 02:53)
Administrateur
Hello et bienvenue,

Je n'ai pas le temps de m'y pencher aujourd'hui, mais en attendant, je déplace dans le salon des Tutoriels, puisqu'il s'agit bien d'une proposition de modification d'un tuto existant Smiley cligne

EDIT : pour info, ce tutoriel des menus déroulants est effectivement un peu obsolète (tant au niveau sémantique, que code javascript et - surtout - de l'accessibilité).
Il est actuellement en pleine refonte.

PS : en tout cas merci à toi pour cette initiative communautaire Smiley cligne
Modifié par Raphael (26 Nov 2006 - 19:35)
Pas pour faire le rabat-joie, mais ce menu ne fonctionne ni avec Safari ni FirefoxMac ni OperaMac ni Camino.
Modifié par largowin (26 Nov 2006 - 21:02)
Modérateur
Salut,

Ah ! de l'aide ??! Smiley biggrin yes !!! Smiley ola

Attention... La critique coûte chère, j'en sais quelquechose... Smiley lol

Allez... Je te donne mon point de vue sur ce que tu as fait et ce qui est nécessaire à la constitution de bons menus déroulants (sur lesquels je bosse depuis un moment sans avoir résolu tous les problèmes)... Smiley cligne

Les balises div et h semblent plus adaptées que l'emploi de liste de définitions mais ce n'est pas top encore... Le mieux, c'est la liste énumérative ul...
Le Javascript intrusif ( onmouseover="javascript:montre('smenu2');" ) n'a pas lieu d'être non plus... Sémantiquement parlant, ce n'est pas propre et on peut facilement s'en passer...
Les liens pour chaque titre de section ( <a href="index.php?page=menu1">Menu 1</a> ) ne sont utiles qu'au JS et ne sont pas nécessaires en temps normal.
La navigation clavier n'est pas possible sur ton exemple... C'est un problème.
Comme l'a précisé largowin, ça pêche encore au niveau du support sur certains navigateurs.

Bref, pour le code xhtml, tu dois arriver à quelquechose dans ce genre là :
	<ul id="menus">
		<li>menu1
			<ul>
				<li><a href="#">lien1</a></li>
				<li><a href="#">lien2</a></li>
				<li><a href="#">lien3</a></li>
				<li><a href="#">lien4</a></li>
			</ul>
		</li>
		<li>menu2
			<ul>
				<li><a href="#">lien1</a></li>
				<li><a href="#">lien2</a></li>
				<li><a href="#">lien3</a></li>
			</ul>
		</li>
		<li>menu3
			<ul>
				<li><a href="#">lien1</a></li>
				<li><a href="#">lien2</a></li>
				<li><a href="#">lien3</a></li>
				<li><a href="#">lien4</a></li>
				<li><a href="#">lien5</a></li>
			</ul>
		</li>
		<li>menu4
			<ul>
				<li><a href="#">lien1</a></li>
				<li><a href="#">lien2</a></li>
				<li><a href="#">lien3</a></li>
				<li><a href="#">lien4</a></li>
			</ul>
		</li>
	</ul>


Maintenant, la liste des contraintes est la suivante :

- Le menu doit supporter n'importe quel navigateur récent et chaque version d'IE depuis IE5
- Le menu doit prendre en charge la navigation clavier
- Le menu doit supporter la désactivation des couleurs
- Le menu ne doit avoir aucune perte d'informations lorsque javascript est désactivé.
- Le menu doit pouvoir être désactivé si l'utilisateur ne souhaite (ou ne peut) pas s'en servir.
- Pour les menus agissant au survol, il faut laisser un labs de temps avant fermeture afin de faciliter l'utilisation du menu par les personnes souffrant de tremblements.
- Le menu serait censé être positionné de façon relative afin d'éviter au mieux les problèmes de superposition. (c'est mieux d'après l'auteur du menu de FairyTells mais je ne suis pas sûr que ça facilite l'intégration de ce menu au sein des pages des personnes intéressées. C'est aussi à eux de s'en assurer même si on passe en absolu)
- Chaque sous-menu doit comprendre peu d'items. (Les sous-sous-menu doivent être évités car difficilement accessibles)
- Il faut minimiser le risque d'interactions avec d'autres scripts (en somme, le rendre le plus autonome et le moins gênant possible, particulièrement sur la gestion des événements)
- et euh... il y aurait encore d'autres choses mais si déjà, tu sais répondre à tous les critères de cette liste, t'es un chef ! Smiley ravi

Pour ma part, je lutte depuis belle lurette et n'ai pas encore réussi à tout mettre en place... principalement sur la gestion de la fermeture des sous-menus avec les méthodes de type DOM2.

Actuellement, les ébauches que j'ai pu faire concernent plus ce type de menu. J'en ai parlé ici.
(A ce propos, si un utilisateur Mac peut me dire comment ça se passe sur les navigateurs cités par largowin, ça m'arrangerait... J'ai besoin des erreurs JS retournées s'il y a lieu)

donc si quelqu'un peut me filer un coup de main voire tester sur les plates-formes dont je ne dispose pas, ce sera avec plaisir. ( Me laissez pas dans ce pétrain, please ! ça fait 4 mois que ça dure... Smiley bawling )

NB : Qui croit encore que faire un menu déroulant, c'est facile ? Smiley biggol
Modifié par koala64 (26 Nov 2006 - 21:45)
koala64 a écrit :

(A ce propos, si un utilisateur Mac peut me dire comment ça se passe sur les navigateurs cités par largowin, ça m'arrangerait... J'ai besoin des erreurs JS retournées s'il y a lieu)


Voici ce que ça donne sur tous les navigateurs cités plus haut; le menu2 est affiché tel quel dans chaque navigateur. Très franchement par contre, l'affichage du smilie est plutôt pénible... Ça ralentit le processus de sélection des menus pour rien.

upload/2695-Image.jpg
Modérateur
Arf... Le menu2 est affiché volontairement dans cet exemple... La question de ce sujet était d'afficher le menu concernant la page courante. Si on supprime la classe CSS située dans la partie xhtml, le menu sera fermé. Celui-ci laisse le choix d'avoir des menus ouverts ou non au démarrage.

Par ailleurs, l'objectif de cette image lourde était justement de faire une page test pour voir si la sélection des menus était possible avant même que cette image soit chargée. Ce dispositif fonctionne sur Firefox, IE, Opera et normalement Safari. N'est-ce pas le cas pour ce dernier ?

Et sinon, pas de problème particulier ? Le menu fonctionne ?

PS : Bien entendu que je ne compte pas laisser l'image ! Smiley lol
Modifié par koala64 (26 Nov 2006 - 23:03)
Ok. Je n'avais pas vu qu'il était écrit "image lourde" à côté du lien...

Il est possible en effet de sélectionner les onglets du menu, mais le procédé est tout de même bcp ralenti.

<edit> Oui, oui... Le menu fonctionne sur tous les navigateurs cités.
Modifié par largowin (26 Nov 2006 - 23:22)
Bonjour à tous
koala64 a écrit :
Le mieux, c'est la liste énumérative ul...
Le Javascript intrusif ( onmouseover="javascript:montre('smenu2');" ) n'a pas lieu d'être non plus... Sémantiquement parlant, ce n'est pas propre et on peut facilement s'en passer...

Tout a fait d'accord
a écrit :


Les liens pour chaque titre de section ( <a href="index.php?page=menu1">Menu 1</a> ) ne sont utiles qu'au JS et ne sont pas nécessaires en temps normal.

Je trouve au contraire qu'il doit y avoir un lien réel dans chaque item :

Pour les 7 à 10% n'ayant pas JS, tu as choisi de montrer le menu entièrement développé. Ce qui peut casser la mise en page .

Je propose que les sous-menus cachés le restent, mais que les titres de section mènent à une page avec le sous-menu correspondant ouvert, gràce au language serveur et ou CSS. Je m'exprime mal mais voilà un exemple ou les sous-menus cachés sont absents pour économiser le code et le rendre plus accessible
Ce serait la version sans javascript.
Là dessus, viendrait se greffer en surcouche ton menu dynamique qui permettrait aux heureux javascriptés d'accéder rapidement à tous les liens de ton site.
a écrit :

La navigation clavier n'est pas possible sur ton exemple... C'est un problème.

aussi d'accord, et pour conclure j'ai fait un script pas propre à corriger pour accéder aux sous-menus avec la souris ou clavier+javascript. Dans ce cas cela devient plus un plan de site.
à méditer... Smiley cligne
Modifié par chmel (28 Nov 2006 - 23:35)
Modérateur
Salut chmel, Smiley smile

a écrit :
Je trouve au contraire qu'il doit y avoir un lien réel dans chaque item :
Pour les 7 à 10% n'ayant pas JS, tu as choisi de montrer le menu entièrement développé. Ce qui peu casser la mise en page .
Oui, c'est aussi pour ça que le menu doit être le plus concis possible et idéalement placé en relatif. Pour le lien en tête de sous-menu, je suis un peu indécis parce qu'effectivement, ça peut permettre d'arriver sur une page intermédiaire reprenant la liste de ce sous-menu mais ça en fait aussi un paramètre obligatoire pour ne pas avoir de liens inactifs, ce qui dans le cadre du tuto va être difficile à faire comprendre... ("vous pouvez prendre le menu tel quel mais il va falloir créer toutes les pages intermédiaires")
J'avais vu une approche "similaire"... Pour rendre le menu plus concis, on ne mettait que les titres de sections sous forme de liens et le menu de la section survolée était appelé via Ajax... (Approche de Christian Heilmann dans "Beginning Javascript With DOM Scripting And Ajax: From NOvice to Professional").

Je trouvais celle-ci intéressante dans la mesure où un menu complexe ne pouvait alors se retrouver qu'avec le strict nécessaire (5, 6 items environ plus le sous-menu survolé), ce qui semble rejoindre ton idée (si j'ai bien compris Smiley cligne ) et facilite la navigation.

Encore une fois, le plus dur dans tout ça est à mon avis de faire comprendre comment ça marche, en particulier aux novices parce que ça change radicalement comparé aux menus qu'on a l'habitude de voir... Smiley confus
Modifié par koala64 (27 Nov 2006 - 11:58)
Ok!
J'ai enormement de chose à lire et à integrer du coup Smiley confused

Cette ligne <a href="index.php?page=menu1">Menu 1</a> Koala64 était utile à mon site. Pour afficher un menu deplié à un autre endroit du site (pour garantir la visibilité des sous menus en l'absence de javascript). Dsl j'ai quasiment pas épuré mon code avant de vous le présenter. Merci quand meme de vos réactions!

-Mais comment garantir la possibilité de faire des raccourcis clavier? Pour moi il suffisait de rajouter des < accesskey="4" > ou désiré.
-Est ce que le fin mot c'est de bannire les balises de titre? Je trouvai qu'elles avaient leur utilitées. En general les rubriques principales d'un menu constituent souvent le sommaire d'un site...

Sur ce je vais me plonger dans vos remarques ^^
Modérateur
Salut, Smiley cligne

alx75 a écrit :
Mais comment garantir la possibilité de faire des raccourcis clavier? Pour moi il suffisait de rajouter des < accesskey="4" > ou désiré.
Le plus important, c'est de conserver la navigation via la touche tab. Chaque lien du menu doit être accessible (Tu ne vas pas mettre des accesskeys sur chaque lien. Smiley cligne ) Pour cela, il faut doubler les "mouseover" par des "focus" et les "mouseout" par des "blur". (voir ce tuto )
a écrit :
Est ce que le fin mot c'est de bannire les balises de titre? Je trouvai qu'elles avaient leur utilitées. En general les rubriques principales d'un menu constituent souvent le sommaire d'un site...
Je suis parti dans cette direction aussi il y a quelques temps mais force est de constater que la liste est plus sémantique que la structure que tu as donné. Autant je n'ai pas réellement de reproches aux titres (qui peuvent être intégrés dans la liste), autant les div restent à éviter.
Modifié par koala64 (27 Nov 2006 - 12:09)
Bonjour,
Comme ce n'est pas résolu, je rajoute mon grin de sel Smiley cligne
alx75 a écrit :
-Mais comment garantir la possibilité de faire des raccourcis clavier? Pour moi il suffisait de rajouter des < accesskey="4" >

J'ai lu qqpart que les accesskey pouvaient perturber les utilisateurs du clavier. De plus, tu dois fournir le détail de tes raccourcis que le visiteur ne lira pas car il utilise les siens qu'il connait bien et qui peuvent (en plus) se trouver en conflit avec les tiens. Smiley biggol
Première étape avant de greffer le js :

Le mieux est peut-être de commencer la page avec un petit menu d'accessiblilité :
Aller au menu | au contenu.
- Mettre un lien dans chaque item.
- Puis renseigner correctement les attributs CSS : focus et active pour permettre la navigation comme l' a dit Koala64 avec la touche TAB ou A et Q pour Opéra.
a écrit :

-Est ce que le fin mot c'est de bannir les balises de titre? Je trouvai qu'elles avaient leur utilitées. En general les rubriques principales d'un menu constituent souvent le sommaire d'un site...

Je dirait que le texte contenu dans l'élément LI contenant un sous-menu (élément UL) est forcément un titre de rubrique.
Modifié par chmel (29 Nov 2006 - 00:16)
Ma page prévoit un menu d'accessibilité. merci du conseil Smiley smile

Oui ma remarque a largement etait répondu [résolu] donc Smiley langue