28173 sujets

CSS et mise en forme, CSS3

bonjour,
j'ai trois listes à puces imbriquées que je dois mettre en forme en tableau. Mon problème est que si la premiere colonne est plus petite que les deux suivantes alors mes colonnes "débordent" de la div principale; en prenant l'exemple ci-dessous, j auimerais que les trois niveaux de mon menu soit à l'intérieur de la bordure rouge. Merci de votre aide précieux.


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>super tEst</title>
<style type="text/css">
#monmenu { border:3px solid red; background:#eee url(../images/elements/bk.gif) repeat-y top left; margin:10px auto; width:530px;display:block;}

ul { border:1px solid black; list-style:none;margin:0; padding:0;}
li { padding:0; margin:0; }
li.item { color:#0000cc; }
li.selected { color:#000000; }
div#sommairearticletheme { background:url(../images/elements/bk.gif) repeat-y top left; margin:15px 5px 0px 20px; height:100%;width:530px;display:block;}	
#sommaireun {  width:176px; margin:0;  padding:0; position:relative; display:block; background-color:#CCFFCC;}
#sommairedeux {width:176px; position:absolute; top:0; left:177px; height:auto;  margin:0; padding:0; display:block; background-color:#FFC; }
#sommairetrois { width:176px; position:absolute;top:0; left:177px; padding:0; display:block; background-color:#66FFFF; }

div#sommaireun ul{ margin:0px; padding:5px 2px 5px 10px;  }	
div#sommaireun li{ font-size:95%; list-style-type:none; margin: 3px 0; }

</style>
</head>
<body>
<h1>Test pour mon menu sur trois niveauX</h1>
<div id="monmenu">
<div id="sommaireun">
<ul>
<li class="item">menu de niveau1 </li>
<li class="selected">menu<div id="sommairedeux"><ul>
<li class="item">menu de niveau2</li>
<li class="item">menu de niveau2</li>
<li class="item">menu de niveau2</li>
<li class="item">menu de niveau2</li>
<li class="item">menu de niveau2</li>
<li class="item">menu de niveau2</li>
<li class="item">menu de niveau2</li>
<li class="item">menu de niveau2</li>
<li class="item">menu de niveau2 </li>
<li class="selected">menu de niveau2
<div id="sommairetrois" ><ul>
<li class="item">menu de niveau3</li>
<li class="selected">menu de niveau3</li>
<li class="item">menu de niveau3</li>
<li class="item">menu de niveau3</li>
<li class="item">menu de niveau3</li>
</ul><div style="clear:both;"></div></div>
</li><li class="item">menu de niveau2</li>
<li class="item">menu de niveau2</li>
</ul><div style="clear:both;"></div></div></li>
<li class="item">menu de niveau1 </li>
</ul><div style="clear:both;"></div></div></div>
</body></html>
beu a écrit :
j'ai trois listes à puces imbriquées que je dois mettre en forme en tableau.


... alors fait un tableau Smiley rolleyes

sinon c'est le "problème" classique des blocs flottants qui sortent de leurs conteneur, fait une recherche là dessus.
Bonjour,

Un menu de navigation n'est pas un plan de site. Si on se retrouve à faire un menu de navigation sur trois niveaux, c'est qu'on s'est planté quelque part, ou bien qu'on a oublié de faire un plan du site. Smiley cligne

Quant à « mettre en forme en tableau », tout dépend de ce que ça veut dire au juste. Un aperçu de ce que ça devrait donner ?
Modifié par Florent V. (06 Mar 2007 - 12:13)
a écrit :
Si on se retrouve à faire un menu de navigation sur trois niveaux, c'est qu'on s'est planté quelque part, ou bien qu'on a oublié de faire un plan du site.


ou bien que le client est un grand compte avec une arborescence de dingue et qu'on a pas oublié le plan du site.

j'aurais du dire en colonne et pas en tableau voici un screenshot pour exemple:
upload/11229-menu.jpg

Merci
Administrateur
beu a écrit :
ou bien que le client est un grand compte avec une arborescence de dingue

Une arborescence "de dingue" n'implique pas forcément de se fourvoir dans l'abomination des menus à multiples imbrications.
Plusieurs sous-niveaux est invivable en pratique pour l'utilisateur.
Il faut absolument repenser cela, comme l'a laissé entendre Florent V., et aboutir à des solutions plus intuitives et ergonomiques (exemple : un clic pour atteindre une page-rubrique contenant des sous-rubriques)
Il se trouve que client a une demande claire et elle passe par un menu à trois niveaux. Je n'ai aucune marche de manoeuvre sur ce point.
mon probleme est d'ordre technnique...
Pour préciser ma réponse, un tableau avec 3 colonnes, et dans chaque cellule une liste. ça ira très bien : c'est simple, efficace, ça reste "propre" et la "sémantique" reste saine et sauve Smiley lol .
a écrit :
la "sémantique" reste saine et sauve


justement non.
Il n'y a QUE la liste à puce qui permet de savoir que le contenu de la seconde colonne est le "fils" de l'élément sélectionné dans la première.
oui mais en pratique non, ça ne sert pas à grand chose de garder à tout prix cette imbrication dans le code : la "sémantique", c'est à dire le sens que tu donne avec cette imbrication ne sera pas exploité, ça ne rendra pas ton menu plus "lisible" et compréhensible, ni même "plus" accessible pour l'utilisateur.

donc au final un tableau à 3 colonnes est une solution satisfaisante (mais pas "parfaite", j'en conviens) parmi d'autres et qui a l'avantage de te permettre de faire facilement la mise en page que tu veux obtenir.
Re-bonjour,

Si les blocs des niveaux 2 et 3 (en jaune et bleu sur l'image) sont positionnés en absolu, ils dépasseront nécessairement la bordure rouge.

Ce qui est peut-être envisageable, c'est que l'ensemble du menu (bordure rouge) soit positionné en absolu, et que les blocs à l'intérieur soit flottants ou dans des cellules de tableau. Mais dans ce cas, impossible de conserver la structure en listes imbriquées.

Pour conserver la structure en listes imbriquées ET faire apparaitre les blocs côte-à-côte plutôt qu'imbriqués, justement, il faut utiliser le positionnement absolu... mais dans ce cas, la bordure rouge ne tiendra pas compte des éléments positionnés en absolu.

À vue de nez, et même en mettant de côté le débat sur l'ergonomie et l'accessibilité, je dirais que ce n'est pas possible.
a écrit :
ça ne rendra pas ton menu plus "lisible" et compréhensible, ni même "plus" accessible pour l'utilisateur.


sauf si l'utilisateur utilise un navigateur texte....
Administrateur
beu a écrit :
ça ne rendra pas ton menu plus "lisible" et compréhensible, ni même "plus" accessible pour l'utilisateur.


sauf si l'utilisateur utilise un navigateur texte....
Attention aux gros (et mauvais) a-prioris : un tableau ne complexifie par du tout l'accès à l'information.

A mettre en gras une fois pour toute :
1- seuls les tableaux complexes et inutilement imbriqués, non-linéaires, et mal conçus sont une entrave à l'accessibilité
2- dans de nombreux cas, les tableaux sont souvent la meilleure alternative, bien plus accessible que d'autres éléments imbriqués et choisis pour une pseudo-"sémantique" tirée de nulle part
3- les tableaux permettent actuellement de pallier à certaines faiblesses des CSS ou des navigateurs (centrage vertical, "colonnes" de même hauteur) et évitent des structures bien plus complexes pour aboutir au même résultat


As-tu toi-même utilisé un navigateur texte pour en tirer cette (fausse) conclusion ?
Modifié par Raphael (06 Mar 2007 - 15:32)
a écrit :
À vue de nez, ... je dirais que ce n'est pas possible.


c'est la conclusion à laquelle j'étais arrivé...j'osais espérer me tromper !

Merci quand meme.
Au fait c'est valide de mettre des div au milieu des listes imbriqués?

Si tu fait des tableaux alors, tes listes ne seront plus imbriquées, donc si tes listes ne sont plus imbriquées, tu peux les positionner en float, donc si tu peux les positionner en float, tu peux faire une boites qui s'adapte à ce contenu sans tableaux (voir contexte de formatage) donc tu n'as plus besoin de tableaux.
Modifié par matmat (06 Mar 2007 - 19:47)
Par contre je ne comprend pas comment tu veux disposer ce menu dans ta page, parce que si ta contrainte c'est que les trois sous niveaux soient visibles, il y plein d'autre façon de le résoudre et en gardant ton code sémantique. Maintenant si cette étrange presentation t'est imposé (j'imagine que ce menu serat en haut de page?), je serait curieux de savoir pourquoi.

Souvent quand il y a un probléme qui oblige a ne pas faire un code sémantique, c'est qu'il y à un probléme de presentation, quelque chose de pas logique.
matmat a écrit :
Au fait c'est valide de mettre des div au milieu des listes imbriqués?

On peut placer un peu tout ce qu'on veut dans un li. Par contre, un ul ne peut avoir que des li comme enfants.
Bonjour,

Je me permets de déterrer ce post, je cherche vainement (et certainement mal Smiley rolleyes )
a écrit :

On peut placer un peu tout ce qu'on veut dans un li. Par contre, un ul ne peut avoir que des li comme enfants.


Où est-ce signalé sur le w3c?
http://www.w3.org/

Impossible de mettre la souris dessus Smiley sweatdrop , quelqu'un a un lien?

Merci!
Administrateur
Bonjour,

Tu peux lire cette page 10.2 Les listes non-ordonnées (UL), les listes ordonnées (OL) et les items de liste (LI) (traduction de Karl Dubost, W3C)

a écrit :
Les deux types de liste sont constitués de séquences d'items de liste définis par l'élément LI


<!ELEMENT UL - - (LI)+                 -- liste non-ordonnée -->

siginifie entre autres que UL a pour enfant(s) un ou plusieurs LI (et donc rien d'autre puisque ce n'est pas mentionné)
Cette notation pas habituelle est expliquée et prend même comme exemple UL / LI, joie Smiley smile
Modifié par Felipe (05 Feb 2008 - 15:46)
Un grand merci, je me bats (dans un grand compte) pour faire respecter au mieux les spécifications, mixant webmaster, développeur, équipes d'intégration... Smiley sweatdrop (ouch!)

La norme expliquant l'utilisation de listes imbriquées m'est nécessaire pour "prouver" que cette syntaxe est celle-ci, est non une autre!