28173 sujets

CSS et mise en forme, CSS3

Tout d'abord, pour mon premier post, je tiens à remercier les créateurs de ce site, véritable bible, bourré d'astuces et de bonnes idées pour les débutants comme moi. Merci Smiley lol

Voilà mon problème:
J'ai fait un menu avec des rollovers, mais il n'est pas du tout stable. Au passage de la souris tout se décale, alors que je voudrais juste que l'élément sélectionné change de couleur, en restant fixe.
J'ai pourtant mis les li en block, mais l'image de background se met dessus comme si c'était du inline. Enfin je sais pas si c'est ça, parceque j'ai pris des bouts de codes à droite et gauche, transformé le tout, et au final ca m'a l'air un peu chargé Smiley confus
A noter que je tiens à conserver l'aspect de barre qui parcours tout l'écran en largeur.

http://uzi.jupiterii.com/testmenu/html.html


Merci à tous Smiley biggrin
Modifié par uZi (14 Oct 2006 - 21:36)
Bonjour,

A vrai dire, tout est un peu en vrac ...
Regarde dans la galerie de menu http://css.alsacreations.com/Galeries-de-menus-en-CSS

Sinon pour t'inspirer :


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" >		
<head> 
   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
   <title></title> 
   <meta name="TITLE" content="" />
	<style type="text/css">
#navcontainer{
width:100%;
height:37px;
background-image: url('pagebar_bg.gif');
background-repeat: repeat-x;
}

ul {
list-style-type: none;
padding-left: 180px;
}

#navlist li {
float: left;
}

#navlist a {
margin: 0 2px;
width: 70px;
height: 37px;
display: block;
text-align: center;
text-decoration: none;
line-height: 37px;
color: #fff;
font-family: "Trebuchet MS", Verdana, Arial, Sans-Serif;
font-size: 0.8em;

}

#navlist a:hover, #current {
background-image: url('pagebar_bg4.gif');

}

#navlist a:active {
background: green;
color: #fff;
}

	</style>



</head>
<body>
<div id="navcontainer">
	<ul id="navlist">
		<li><a href="#1" id="current">UN</a></li>
		<li><a href="#2">DEUX</a></li>
		<li><a href="#3">TROIS</a></li>
		<li><a href="#4">QUATRE</a></li>
		<li><a href="#5">CINQ</a></li>
	</ul>
</div>
</body>

</html>


Bonne continuation.
Modérateur
bonjour,

tu donne une largeur a tes <a> , qui sont par defaut inline et qui ne peuvent pas etre dimensionnés, ensuite sur le hover tu applique un float:left; , et la ils prennent la dimension que tu leur donne.

ou applique le float a <a> aussi , ou enleve le sur le hover .

++
Merci bcp, grâce à votre aide j'ai parfaitement résolu le problème.

Je suis du coup passé en V2 (lol), et j'ai fait des menus déroulants !
J'ai juste un petit souci avec, je n'arrive pas à afficher le contenu du menu sur une ligne.
Dans #menu dl, j'ai mis 75px pour que les pages ne soient pas collées les unes contre les autres.
Par contre dans #menu dd, j'ai bien width:auto, mais le menu reste bloqué aux 75px. Alors que quand je mets 100px, les menus passent bien à 100px.

http://uzi.jupiterii.com/testmenu_v2/htmlv2.html

HTML
<script type="text/javascript">
<!--
window.onload=montre;
function montre(id) {
var d = document.getElementById(id);
	for (var i = 1; i<=10; i++) {
		if (document.getElementById('smenu'+i)) {document.getElementById('smenu'+i).style.display='none';}
	}
if (d) {d.style.display='block';}
}
//-->
</script>

<body>

<div id="menu">
	<dl>
		<dt onmouseover="javascript:montre();"><a href="" title="Retour à l'accueil">ACCEUIL</a></dt>
	</dl>
	
	<dl>			
		<dt id="active"onmouseover="javascript:montre('smenu1');"><a href="" title="UN" id="current">UN</a></dt>
			<dd id="smenu1" onmouseover="javascript:montre('smenu1');" onmouseout="javascript:montre('');">
				<ul>
					<li><a href="#" class="rollopaque">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>

			</dd>
	</dl>
	<dl>	
		<dt onmouseover="javascript:montre('smenu2');"><a href="" title="DEUX">DEUX</a></dt>
			<dd id="smenu2" onmouseover="javascript:montre('smenu2');" onmouseout="javascript:montre('');">
				<ul>
					<li><a href="#">Sous-Menu 2.1</a></li>
					<li><a href="#">Sous-Menu 2.2</a></li>
					<li><a href="#">Sous-Menu 2.3</a></li>
					<li><a href="#">Sous-Menu 2.4</a></li>
				</ul>
			</dd>
	</dl>
			
</body>


CSS
body {
background-image:url(04.jpg);
}

dl, dt, dd, ul, li {
margin: 0;
padding: 0;
list-style-type: none;
}
#menu {
position: absolute; /* placement du menu, à modifier selon vos besoins */
top: 0;
left: 0;
z-index:100;
width:100%; /* correction pour Opera */
padding-left: 180px;
background:url(pagebar_bg.gif);
height: 37px;
}
#menu dl {
float: left;
width: 75px;

}
#menu dt {
cursor: pointer;
text-align: center;
font-weight: normal;
height: 37px;
line-height: 37px;
}

#menu dt a {
color: #fff;
font-family: "Trebuchet MS", Verdana, Arial, Sans-Serif;
font-size: 0.8em;
text-decoration: none;
padding-left: 3px;
display: block;
height: 100%;
border: 0 none;
}

#menu dd {
display: none;
border:#292929 px solid;
border-top: none;
width: auto;
}

#menu li {
text-align: left;
background-color: #2C2C2C;
filter: alpha(opacity=65);  
-moz-opacity: 0.65;
-khtml-opacity: 0.65;
opacity: 0.65;
}

#menu li a {
text-decoration: none;
display: block;
height: 100%;
border: 0 none;
color: #FFFFFF;
font-family: "Trebuchet MS", Verdana, Arial, Sans-Serif;
font-size: 0.8em;
}

#menu li a:hover, #menu li a:focus{ 
background:#808080;
color: #FFFFFF;
font-family: "Trebuchet MS", Verdana, Arial, Sans-Serif;
font-size: 0.8em;
}

#menu dt a:hover, #menu dt a:focus {
background:url(pagebar_bg2.gif)
}

#menu #active a 
{ 
background-image: url('pagebar_bg4.gif');
}



J'imagine que c'est pas compliqué, mais au bout d'heure à me retourner le cerveau, je me suis dit qu'il valait mieux vous consulter peut etre Smiley biggol
Modérateur
bonsoir ,

il te faut changer un peu le css .

pour passer les liste en horizontal , un display:inline ou un float permettent d'obtenir cette effet, ensuite , un position absolute et une largeur pour IE a dd conteneur de la sous liste apporte l'effet escompté . Il y a peut-etre plus logique .
pour test :
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head><title>XHTML 1.0 Strict</title>
<style type='text/css'>
body {
background:#555;
}
dl, dt, dd, ul, li {
margin: 0;
padding: 0;
list-style-type: none;
}
#menu {
position: absolute; /* placement du menu, à modifier selon vos besoins */
top: 0;
left: 0;
z-index:100;
width:100%; /* correction pour Opera */
padding-left: 180px;
background:url(pagebar_bg.gif);
height: 37px;
}
#menu dl {
float: left;
width: 75px;
}
#menu dt {
cursor: pointer;
text-align: center;
font-weight: normal;
height: 37px;
line-height: 37px;
}
#menu dt a {
color: #fff;
font-family: "Trebuchet MS", Verdana, Arial, Sans-Serif;
font-size: 0.8em;
text-decoration: none;
padding-left: 3px;
display: block;
height: 100%;
border: 0 none;
}
#menu dd {
display:none;
border:#292929 px solid;
border-top: none;
width: auto ;
/* @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ */
_width:600px;            /* valeur pour IE , max 6 liens de 100px de large */
position:absolute;      /* valeur pour firefoxe*/
/* @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ */

}
#menu li {
text-align: left;
background-color: #2C2C2C;
filter: alpha(opacity=65);  
-moz-opacity: 0.65;
-khtml-opacity: 0.65;
opacity: 0.65;
/* @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ */
float:left;             
height:30px;
width:100px;
/* @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ */
}
#menu li a {
text-decoration: none;
display: block;
height: 100%;
border: 0 none;
color: #FFFFFF;
font-family: "Trebuchet MS", Verdana, Arial, Sans-Serif;
font-size: 0.8em;
}
#menu li a:hover, #menu li a:focus{ 
background:#808080;
color: #FFFFFF;
font-family: "Trebuchet MS", Verdana, Arial, Sans-Serif;
font-size: 0.8em;
}
#menu dt a:hover, #menu dt a:focus {
background:url(pagebar_bg2.gif)
}
#menu #active a 
{ 
background-image: url('pagebar_bg4.gif');
}</style><script type='text/javascript'><!--
window.onload=montre;
function montre(id) {
var d = document.getElementById(id);
	for (var i = 1; i<=10; i++) {
		if (document.getElementById('smenu'+i)) {document.getElementById('smenu'+i).style.display='none';}
	}
if (d) {d.style.display='block';}
}
//--></script></head><body><body>
<div id="menu">
	<dl>
		<dt onmouseover="javascript:montre();"><a href="" title="Retour à l'accueil">ACCEUIL</a></dt>
	</dl>
	<dl>			
		<dt id="active"onmouseover="javascript:montre('smenu1');"><a href="" title="UN" id="current">UN</a></dt>
			<dd id="smenu1" onmouseover="javascript:montre('smenu1');" onmouseout="javascript:montre('');">
				<ul>
					<li><a href="#" class="rollopaque">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>
			</dd>
	</dl>
	<dl>	
		<dt onmouseover="javascript:montre('smenu2');"><a href="" title="DEUX">DEUX</a></dt>
			<dd id="smenu2" onmouseover="javascript:montre('smenu2');" onmouseout="javascript:montre('');">
				<ul>
					<li><a href="#">Sous-Menu 2.1</a></li>
					<li><a href="#">Sous-Menu 2.2</a></li>
					<li><a href="#">Sous-Menu 2.3</a></li>
					<li><a href="#">Sous-Menu 2.4</a></li>
				</ul>
			</dd>
	</dl>
</body>
</html>


++
dommage le scroll a cause d'opera ...
Merci de ta réponse, et pardon de m'être mal exprimer, car ce que je souhaitais faire c'étais garder le menu déroulant en colonne, mais que la colonne se mette à la largeur du contenu. Pas de retour à ligne en quelque sorte.

Dsl encore de t'avoir fait répondre à côté
Smiley confus
Modérateur
bonsoir,

ça m'apprendra a lire en diagonale Smiley smile .

por le resultat escompté , il faut alors gardé le position absolute , redimensionné en hauteur , 30px je crois pour toi ? et pour faire entré IE dans le droit chemin un white-space:nowrap; sur les item de liste .

recode a tester :
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head><title>XHTML 1.0 Strict</title>
<style type='text/css'>
body {
background:#555 url(http://uzi.jupiterii.com/testmenu_v2/04.jpg);
}
dl, dt, dd, ul, li {
margin: 0;
padding: 0;
list-style-type: none;
}
#menu {
position: absolute; /* placement du menu, à modifier selon vos besoins */
top: 0;
left: 0;
z-index:100;
width:100%; /* correction pour Opera */
padding-left: 180px;
background:#000 url(http://uzi.jupiterii.com/testmenu_v2/pagebar_bg.gif);
height: 37px;
}
#menu dl {
float: left;
width: 75px;
}
#menu dt {
cursor: pointer;
text-align: center;
font-weight: normal;
height: 37px;
line-height: 37px;
}
#menu dt a {
color: #fff;
font-family: "Trebuchet MS", Verdana, Arial, Sans-Serif;
font-size: 0.8em;
text-decoration: none;
padding-left: 3px;
display: block;
height: 100%;
border: 0 none;
}
#menu dd {
display:none;
border:#292929 px solid;
border-top: none;
width: auto ;
/* @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ */
position:absolute;      
/* @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ */

}
#menu li {
text-align: left;
background-color: #2C2C2C;
filter: alpha(opacity=65);  
-moz-opacity: 0.65;
-khtml-opacity: 0.65;
opacity: 0.65;

}
#menu li a {
text-decoration: none;
display: block;
height: 100%;
border: 0 none;
color: #FFFFFF;
font-family: "Trebuchet MS", Verdana, Arial, Sans-Serif;
font-size: 0.8em;
/* @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ */
white-space:nowrap;   /* pour IE qui elargira les listes a la demande */
height:30px;   /* reprise de la hauteur */
/* @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ */
}
#menu li a:hover, #menu li a:focus{ 
background:#808080;
color: #FFFFFF;
font-family: "Trebuchet MS", Verdana, Arial, Sans-Serif;
font-size: 0.8em;
}
#menu dt a:hover, #menu dt a:focus {
background:url(http://uzi.jupiterii.com/testmenu_v2/pagebar_bg2.gif)
}
#menu #active a 
{ 
background-image: url('pagebar_bg4.gif');
}</style><script type='text/javascript'><!--
window.onload=montre;
function montre(id) {
var d = document.getElementById(id);
	for (var i = 1; i<=10; i++) {
		if (document.getElementById('smenu'+i)) {document.getElementById('smenu'+i).style.display='none';}
	}
if (d) {d.style.display='block';}
}
//--></script></head><body><body>
<div id="menu">
	<dl>
		<dt onmouseover="javascript:montre();"><a href="" title="Retour à l'accueil">ACCEUIL</a></dt>
	</dl>
	<dl>			
		<dt id="active"onmouseover="javascript:montre('smenu1');"><a href="" title="UN" id="current">UN</a></dt>
			<dd id="smenu1" onmouseover="javascript:montre('smenu1');" onmouseout="javascript:montre('');">
				<ul>
					<li><a href="#" class="rollopaque">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>
			</dd>
	</dl>
	<dl>	
		<dt onmouseover="javascript:montre('smenu2');"><a href="" title="DEUX">DEUX</a></dt>
			<dd id="smenu2" onmouseover="javascript:montre('smenu2');" onmouseout="javascript:montre('');">
				<ul>
					<li><a href="#">Sous-Menu 2.1</a></li>
					<li><a href="#">Sous-Menu 2.2</a></li>
					<li><a href="#">Sous-Menu 2.3</a></li>
					<li><a href="#">Sous-Menu 2.4</a></li>
				</ul>
			</dd>
	</dl>
</body>
</html>


toujours ce fichu sroll a cause d'opera , est ce vraiment necessaire Smiley smile !

++
Modifié par gcyrillus (16 Oct 2006 - 00:03)
J'ai pas trop compris comment marchait ce "position: absolute", mais ca marche nickel Smiley lol

Mucho Thanks-!
Modérateur
le position absolue, sort du "flux " l'element qui reçoit ce "style".
il est en quelque sorte "desolidarisé" du reste de la page , il ne subit plus de contraintes d'affichages "2d" duent aux autres elements ....
du coup il peut-etre placé n'importe ou sur la page , s'etirer ou etre dimensionné sans provoqué un decallage des autres elements ...

son positionnement de départ est par defaut celui ou il apparait dans la lecture du flux html par le navigateur.

il peut etre positionné a l'aide de coordonnées. par defaut les coordonnées prennent la "fenêtre" comme refernce / reperes , pour prendre une autre zone en reference , elle doit etre positionné en relatif et etre un parent .

++
Si j'ai bien compris, c'est parfait, parcequ'en plus le menu déroulant (actionné) ne viendra pas décaler le content vers bas Smiley lol