28172 sujets

CSS et mise en forme, CSS3

Bonjour,

J'ai sur un site un menu horizontal en CSS avec 2 sous-niveaux.
Le premier sou-menu ne s'affiche quand quand on survole le <li> parent, mais le niveau suivant est affiché en permanence, et je ne comprends pas pourquoi, alors qu'il me semble avoir appliqué le même traitement à tous les sous-niveaux.

Voici le code CSS de ce menu placé dans une div nommée access (code largement inspiré du thème Twenty Ten pour Wordpress) :

#access {
	position:relative;
	top:125px; 
	background-color: transparent;
	background-image:none;
	display:block;
	float:left;
	text-align:left;
	width:800px;
	height:28px;
	margin-left:0px;
}

#access ul {
	list-style: none;
	line-height: 1;
	text-align:left;
	z-index:9999;
}
#access ul ul, #access ul ul ul {
	display:none;
	position: absolute;
	float:left;
	height: auto;
	width: 200px;
	background:#339999;
	margin:0px;
	padding: 0px;
	font-size:1.1em;
	z-index:9999;
}
#access ul ul {
	top:25px;
	left:10px;
}

#access ul ul ul {
	top:0;
	left:95%;
}
	
#access ul li {
	position:relative; /* pour position du UL enfant */
	float:left;
	list-style:none;
	display: block;
	background-image: url(images/trait2.gif);
	background-position: right;
	background-repeat: no-repeat;
	text-transform:uppercase; 
	color:#333333;
	font-size:12px;
	font-weight:bold;
	padding-top: 6px;
	padding-right: 6px;
	padding-bottom: 6px;
	padding-left: 6px;
	text-align:left;
}
#access ul ul li, #access ul ul ul li {
	position:relative;
	background:none;
	width:200px;
	display:block;
	padding-left:6px;
	font-size:0.9em;
}
#access ul li a, #access ul li a:active  {
	text-decoration: none;
	border:none;
    color:#333333;
}
#access ul li a:hover {
	color:#339999;
}
/* affichage des sous-menus sur survol li parent */
#access li:hover ul, 
#access li li:hover ul, 
#access li li li:hover ul, 
#access li.sfhover ul, 
#access li li.sfhover ul, 
#access li li li.sfhover ul { 
	display:inline;/* c'est ça qui déclenche l'affichage */
	padding-left:0px; /* avec ce 0 l'alignement est meilleur  */
}

/* important pour positionnement éléments de menu */

#access ul ul li a, #access ul ul li a:visited {
	text-transform:none;
	color:#ffffff;
	text-decoration:none;		
}

#access ul ul li a:hover, #access ul ul ul li a:hover {
	text-decoration:underline;
	color:#ffffff;
}


Avez-vous des pistes svp pour résoudre ce problème ?
Merci d'avance

Corinne
Modifié par zerflog456 (28 Feb 2012 - 21:34)
a la place de ton display:inline essaie avec display:block. C'est que j'ai fait pour mon menu et sa marche.

De plus je pense qu'en mettant ton code html on pourrait mieux t'aider.

Autre chose: tu mélange plusieurs valeurs dans ton css: em, %, px. je n'en suis pas sur mais je pense qu'il est préférable d'utiliser une ou deux valeurs.

Mel
Bonjour,

basiquement, quand tu cible : #access li:hover ul , cela cible tous les <ul> quelque soit le niveau d'imbrication.
il te faut alors prévoir aussi de masquer les <ul> enfants ... ex: #access li:hover ul ul {display:none;}.

Cordialement,
GC
Bonjour,

Merci à vous deux qui m'avez répondu.
Je travaille avec Wordpress, alors c'est du code html généré.

Mon problème a été résolu avec #access li:hover ul ul {display:none;}. Ma bonne résolution du jour, c'est de consacrer du temps au css, au lieu de naviguer à vue et à l'intuition à chaque fois !

Idem pour les mélanges de valeurs : tu as raison gc-nomade, c'est pas très cohérent tout ça !

Bonne continuation
Corinne