28220 sujets

CSS et mise en forme, CSS3

Bonjour , j'essaie de changer des tableaux mais pas facile .
Je voudrais centrer dans la page le menu horizontal d'alsa creation dans un div de 750 px .
de plus j'aimerais que les tailles des sous menus , voir meme des menus soient fonction des mots qu'ils comprennent et qu'ils n'aient pas surtout pour le menu du la meme taille .et pour le sous menu au moins la taille du plus grand .Seul les 3 px de padding font qu'en haut une partie reste orange au survol.

Merci



<!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>Expanding horizontal menu</title>

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">

<script type="text/javascript">
<!--
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>


<style type="text/css">

dl, dt, dd, ul,li {
margin: 0;
padding: 0;
list-style-type: none;
}

#menu {
position: absolute;
top: 113;
left: 40;
z-index:100;
width: 750px;
 margin: auto auto;
}
#menu dl {
float: left;
width: 68px;
margin: 0;
 font-size: 11px;
 font-family: Arial;
 padding-bottom: 11px;
 line-height: 26px;
 list-style-type: none;
 }
#menu dt {
cursor: pointer;
text-align: center;
font-weight: bold;
background: #FF8C00;
border: 1px solid gray;
  }
#menu dd {
border: 1px solid gray;

 }
#menu li {
text-align: center;
background: Yellow;
    }
#menu li a, #menu dt a {
color: #000;
text-decoration: none;
display: block;
height: 100%;
border: 0 none;
}
#menu li a:hover, #menu dt a:hover {
background: #00BFFF;
}

a {text-decoration: none;
color: black;
color: #222;
}
-->
</style></head>

<body>

<div id="menu" align="center">
	<dl>
		<dt onmouseover="javascript:montre();"><a href="" >Actualités</a></dt>
	</dl>
	<dl>
		<dt onmouseover="javascript:montre();"><a href="" >Visite</a></dt>
	</dl>
	<dl>
		<dt onmouseover="javascript:montre();"><a href="" >fgyhfty</a></dt>
	</dl>
	<dl>
		<dt onmouseover="javascript:montre();"><a href="" >Calendrier</a></dt>
	</dl>
	<dl>			
		<dt onmouseover="javascript:montre('smenu1');">Adresses</dt>
 			<dd  style="display: none;" id="smenu1">
				<ul>
					<li><a href="#">rtyry</a></li>
					<li><a href="#">rytt</a></li>
					
				</ul>
			</dd>
	</dl>
	
	
	<dl>	
		<dt onmouseover="javascript:montre();"><a href="">Produits</a></dt>
	</dl>
	<dl>	
		<dt onmouseover="javascript:montre();"><a href="">trytry</a></dt>
	</dl>
	
	<dl>	
		<dt onmouseover="javascript:montre('smenu3');">Région</dt>
			<dd  style="display: none;" id="smenu3">
				<ul>
					<li><a href="#">rtytr</a></li>
					<li><a href="#">Tryrty</a></li>
					<li><a href="#">rtytry</a></li>
					
				</ul>
			</dd>
	</dl>
	
	<dl>	
		<dt onmouseover="javascript:montre('smenu4');">Evénements</dt>
			<dd  style="display: none;" id="smenu4">
				<ul>
					<li><a href="#">Sub Menu 4.1</a></li>
					<li><a href="#">Sub Menu 4.2</a></li>
					<li><a href="#">Sub Menu 4.3</a></li>
				</ul>
			</dd>
	</dl>
	<dl>
		<dt onmouseover="javascript:montre();"><a href="" >Contact</a></dt>
	</dl>
	<dl>
		<dt onmouseover="javascript:montre();"><a href="" >Accueil</a></dt>
	</dl>
</div>


</body></html>

Modifié par tomtomtom (30 Jan 2006 - 12:54)
Bonjour,

La contrainte de centrage est réalisable via un conteneur, mais au prix d'un surcroît d'inaccessibilité et de rendu mal dégradé si l'utilisateur n'est pas dans les conditions d'affichages idoines (tailles des caractères, résolution, etc.)

Idée tentante, certes, mais à oublier Smiley cligne
Modifié par Laurent Denis (29 Jan 2006 - 17:17)
j'ai tenté avec
dl, dt, dd, ul,li {
margin: 0;
padding: 0;
list-style-type: none;
}

#menu {
position: relative;
top: 113;
z-index:100;
 margin: auto ;
}
#menu dl {
float: left;
width: 68px;
margin: 0;
 font-size: 11px;
 font-family: Arial;
 padding-bottom: 11px;
 line-height: 26px;
 list-style-type: none;
 }
#menu dt {
cursor: pointer;
text-align: center;
font-weight: bold;
background: #FF8C00;
border: 1px solid gray;
  }
#menu dd {
border: 1px solid gray;

 }
#menu li {
text-align: center;
background: Yellow;
    }
#menu li a, #menu dt a {
color: #000;
text-decoration: none;
display: block;
height: 100%;
border: 0 none;
}
#menu li a:hover, #menu dt a:hover {
background: #00BFFF;
}
#global {
     position: relative; /* on positionne le conteneur */
     margin-left: 0px;
     margin-right: auto;
     width: 751px; /* 751 car sous ie il décale la derniere rubrique va à la ligne pour moi */
     text-align: center;
     }

comme vous le conseillez avec un conteneur mais il est legerement decalé vers la gauche de quelques px .
De plus j'aimerais modifier la taille des items du haut en fonction de la longeurs des caracteres , je pense que oui , et surtout des sous menus.
La positoion relative aremplacé l'absolu et le sous menu quand il est déployé , maintenant décale tout le reste vers le bas (normal ) , j'ai mis le sous menu en position absolu et là iol ne veut se déployer .
Pour les menus , on ne peut faire que les verticaux?
Merci d'aider un nul .
Modifié par tomtomtom (29 Jan 2006 - 17:47)
Bonjour tomtomtom,

Pour un simple centrage horizontal dans ton cas, pas besoin de conteneur. Avec un positionnement absolu et une marge négative c'est réalisable. Mais ton menu n'est pas assez large (750px au lieu de 818px nécessaires) :


#menu {
	position: absolute;
	left:50%;
	top:113px;
	margin-left:-375px;
	width: 818px;
	z-index: 100;
}


Pour le reste, je crains que la conception du menu ne permette pas une adaptation automatique de la largeur des items.

Smiley cligne
Encore une fois, l'accessibilité la plus évidente sera perdante : le centrage par les marges verticale rogne irrémédiablement le côté gauche de l'élément concerné si la résolution est inférieure au minimum fixé par le designer. Sans parler du reste, inhérent à cette technique.

Oui, on peut bricoler à la fois un menu horizontal, un menu déroulant, un menu centré alors qu'il est à base de position absolue et de flottants... Mais autant utiliser un tableau qui ne sera pas moins accessible, sera correctement rendu sans contournement sur bien plus de navigateurs, et sera beaucoup plus économique à développer. Ce type de situation amène là où s'arrête l'intérêt des CSS2.1 telles qu'elles sont actuellement implémentées. Dans tous les cas, le code sera lourd pour un résulta médiocre. Autant le faire simplement et efficacement : tableau Smiley cligne
Modifié par Laurent Denis (29 Jan 2006 - 18:04)
Alors s'il s'agit juste de faire quelque-chose qui s'affiche.... Pourquoi diable vouloir se passer des tableaux avec lesquels tu sais sans doute le faire ? Puisque ça ne sera pas mieux, au contraire, sans le tableau ?
oui tu as raison , avec la méthode de Nilpohc je n'ai plus de décalage des sous menus .par contre ,il est vrai qu'il y a toujours ce petit px de décalage à droite mais l'interet pour moi qui utilise le javascript pour les menus est le temps de chargement de la page .
Par contre , pourrait on m'expliquer

left:50%;
top:130px;
margin-left:-375px;
width: 818px;

le left et le width à 818 ?margin-left:-375px;?
on le met le menu à la moitié puis on lui enleve 375 px ?

et ça marche .

Merci à tous les 2
Modifié par tomtomtom (29 Jan 2006 - 18:32)
Bonsoir
Je parle par rapport au code de ton premier message, je n'ai pas regardé l'autre. Tu peux essayer..

*concernant la taille des onglets :
- Pour avoir une taille qui varie en fonction du texte, supprimer le "width: 68px;" de "#menu dl"
- ajouter le "padding-left" et "padding-right" souhaités à "#menu dt"

*pour les sous menus en fonction de la taille du plus grand texte:
- ajouter "position: absolute;" à "#menu dd"
- ajouter le "padding-left" et "padding-right" souhaités à "#menu li"
Edit: - supprimer "display: block" dans "#menu li a, #menu dt a"

Pour centrer, c'est classique d'ajouter un "left: 50%", et d'ajouter un margin-left négatif correspondant à la moitié de la taille totale de ce que tu veux centrer (ici le menu). La technique est décrite dans la deuxième partie de cette page . Cette méthode peut poser notamment des problème quand l'élément est trop grand

ah oui, supprimer "height: 100%;" de "#menu li a, #menu dt a"
Modifié par Alan (29 Jan 2006 - 22:27)
Désolé auprès de Laurent de colporter des techniques à l'accessibilité douteuse, mais ma réponse n'était pas pédagogique, c'est simplement le seul moyen de répondre visuellement à la demande de centrage horizontal, compte-tenu du menu utilisé.

Pour l'explication, c'est assez simple : on positionne le menu à 50% de la page, donc au centre, mais comme ce positionnement se fait à partir du début du menu, il faut "reculer" celui-ci de la moitié de sa taille. Toutefois ici, la taille réelle (818px) ne correspond pas à la taille visible (750px). C'est la taille visible qui sert de référence pour obtenir l'effet visuel escompté.
Mais pour rebondir sur les remarques de Laurent, ce que nous voyons n'est pas forcément ce que tout le monde verra (navigateur, déficience visuelle, ...) et cette méthode est délicate. Alors suis les conseils de Laurent, il a beaucoup d'expérience et parle souvent avec sagesse Smiley jap
j'essaie ça quand je rentre et vous tiens au courant merci.
Je voulais surtout maintenant agrandir la taille des sous menus.Merci à vous tous
Modifié par tomtomtom (29 Jan 2006 - 19:51)
pour le menu , ça marche nickel sous mozilla et sous ie j'ai de grandes barres horizontales .Sous mozilla , je n'ai meme pas eu besoin de modifier les sous menus .
J'ai laiisé tomber les menus et pour les sous menus , là encore nickel sous mozilla .Par contre sous IE , le sous menus sont décallés sur la droite tres nettement .J'ai rajouté une taille de 100px aux dd car ie ne tenait pas compte des caracteres.Sans aucune position pour dd , c'est pas bon sous IE qui décale tout pour les menus du haut par contre bonne position des sous menus.Merci
dl, dt, dd, ul,li {/* début menu */
margin: 0;
padding: 0;
list-style-type: none;
}

#menu { 

	position: absolute;

	left:50%;

	top: 129px;

	margin-left:-375px;

	width: 818px;

	z-index: 100;

}
#menu dl {
float: left;
width: 68px;
margin: 0;
 font-size: 11px;
 font-family: Arial;
 padding-bottom: 11px;
 line-height: 26px;
 list-style-type: none;
 }
#menu dt {
cursor: pointer;
text-align: center;
font-weight: bold;
background: #FF8C00;
border: 1px solid gray;
  }
#menu dd {
border: 1px solid gray;
position: absolute;
width: 100px;
 }
#menu li {
text-align: center;
background: Yellow;
    padding-left: 7px;
    padding-right: 7px;
    }
#menu li a, #menu dt a {
color: #000;
text-decoration: none;
display: block;
height: 100%;
border: 0 none;
}
#menu li a:hover, #menu dt a:hover {
background: #00BFFF;
}

a {text-decoration: none;
color: black;
color: #222;
}/* fin menu */

Modifié par tomtomtom (29 Jan 2006 - 22:06)
oups, désolé par rapport à mon message... un peu pressé, j'avais oublié de préciser qu'il fallait supprimer également "display: block;" dans "#menu li a, #menu dt a" (ceci seulement dans le cadre de ce que je proposais). Oubli d'où résulte les "grandes barres horizontales" avec IE;

En revanche, si tu laisses le "with: 68", il y a effectivement ce décalage, avec IE6, sinon non. Sans le width, plus de décalage.. mais pourquoi ??

Je vais éditer mon message.
A+
Modifié par Alan (29 Jan 2006 - 22:28)
Merci avec ça , ça a l'air bien .J'ai 2 petits trucs : il manque 1 px à droite pour qu'il integre parfaitement un tableau de 750 px et j'ai beau joué sur les lettres ou sur les padding (soit je dépasse , soit je suis d'un px en dessous).Le hover maintenant ne concerne que le texte et plus le bloc , c'est joli mais peut on à nouveau sur un passage de la souris faire que tout le menu ou le sous menu change de couleur et pas que le texte.Merci.


dl, dt, dd, ul,li {/* début menu */
margin: 0;
padding: 0;
list-style-type: none;
}

#menu { 
	position: absolute;
	left:50%;
	top: 129px;
	margin-left:-375px;
	width: 818px;
	z-index: 100;
}
#menu dl {
float: left;
margin: 0;
 font-size: 11px;
 font-family: Arial;
 padding-bottom: 11px;
 line-height: 26px;
 list-style-type: none;
 }
#menu dt {
cursor: pointer;
text-align: center;
font-weight: bold;
background: #FF8C00;
border: 1px solid gray;
  padding-left: 3px;
  padding-right: 3px;
  }
#menu dd {
border: 1px solid gray;
position: absolute;
width: 100px;
 }
#menu li {
text-align: center;
background: Yellow;
    
    }
#menu li a, #menu dt a {
color: #000;
text-decoration: none;
border: 0 none;
}
#menu li a:hover, #menu dt a:hover {
background: #00BFFF;
}

a {text-decoration: none;
color: black;
color: #222;
}/* fin menu */


<div id="menu" >
	<dl>
		<dt onmouseover="javascript:montre();"><a href="" >Actualité</a></dt>
	</dl>
	<dl>
		<dt onmouseover="javascript:montre();"><a href="" >Visite</a></dt>
	</dl>
	<dl>
		<dt onmouseover="javascript:montre();"><a href="" >Carte V.I.P</a></dt>
	</dl>
	<dl>
		<dt onmouseover="javascript:montre();"><a href="" >Calendrier</a></dt>
	</dl>
	<dl>			
		<dt onmouseover="javascript:montre('smenu1');">Adresse</dt>
 			<dd  style="display: none;" id="smenu1">
				<ul>
					<li><a href="#">llllll</a></li>
					<li><a href="#">llllll</a></li>
					
				</ul>
			</dd>
	</dl>
	
	
	<dl>	
		<dt onmouseover="javascript:montre();"><a href="">Produits</a></dt>
	</dl>
	<dl>	
		<dt onmouseover="javascript:montre();"><a href="">Voyages</a></dt>
	</dl>
	
	<dl>	
		<dt onmouseover="javascript:montre('smenu3');">Evénements régionaux</dt>
			<dd  style="display: none;" id="smenu3">
				<ul>
					<li><a href="#">lllllllllll</a></li>
					<li><a href="#">lllllllllllllllllllllllll</a></li>
					<li><a href="#">llllllllllllllllllllllllllllll</a></li>
					
				</ul>
			</dd>
	</dl>
	
	<dl>	
		<dt onmouseover="javascript:montre('smenu4');">Evénements lllllllll</dt>
			<dd  style="display: none;" id="smenu4">
				<ul>
					<li><a href="#">Sub Menu 4.1</a></li>
					<li><a href="#">Sub Menu 4.2</a></li>
					<li><a href="#">Sub Menu 4.3</a></li>
				</ul>
			</dd>
	</dl>
	<dl>
		<dt onmouseover="javascript:montre();"><a href="" >Contact</a></dt>
	</dl>
	<dl>
		<dt onmouseover="javascript:montre();"><a href="" >Accueil</a></dt>
	</dl>
</div>

Modifié par tomtomtom (30 Jan 2006 - 07:57)
Salut,
Je viens d'essayer le code ci dessus, et finalement le display: block; sur #menu li a, #menu dt a ne pose plus de problème avec IE.. Je n'ai pas le temps de regarder tout de suite, mais peut être as tu supprimer qq chose qui posait ce problème quand il était avec le display.
Donc pour ce que tu demandes, tu peux le remettre.

Pour le 1px à droite, je ne sais pas.
avec le display block tout a été résolu , il y a juste un effet de transparence dans les sous menus , entre les items .Merci bien.Pour le pixel qui manque pour qu'il touche la bordure , ce n'est pas bien grave.
Merci encore , je pense que ça intéressera du monde .
Modifié par tomtomtom (30 Jan 2006 - 12:46)