28172 sujets

CSS et mise en forme, CSS3

Bonjour Alsacréations,

J'ai un soucis avec le positionnement de mon menu déroulant. Si je l'insère dans ma div header, le menu se déroule normalement, mais dès que je le déplace ailleurs sur ma page, le déroulement ne fonctionne plus. J'ai essayé de recréer la situation quand il est dans la div header, à savoir lui donner un conteneur en relative, mais rien n'y fait.

Voici le site avec le menu qui se déroule lorsqu'il est dans la div header. J'aimerais déplacer le menu entre la banderole et le <h1> accueil http://www.joelleg.ch/tests/uc/

En vous remerciant pour vos lumières.

Page

<body>
<?php include("sousmenu.php"); ?>
<div id="global">
			<div id="header">
				<img src="css/img/logo.png" alt="logo"/>
                       <div id="menu">
                            <?php 
                                $nav_en_cours = 'immobilier';
                                include("menu/menu.php");
                            ?>	
                 		</div>
            </div> 
            
     
  <div id="center">
    
        <div id="content">
               
            <h1>Accueil</h1>
                    
        </div>
        <div id="sidebar">
        </div>
  </div>
</div>
</body>
</html>

css
body, html {
	height: 100%;
	margin: 0;
	background: #807E78 url(../css/img/fond.png);	
	font: Helvetica, Arial, sans-serif;
	height: 100%;
	padding: 0;
	margin: 0;
	position:relative;
}

div#global {
	position : relative; 
}

div#header {
	background: #7fcf2e url(../css/img/accueil.jpg) no-repeat;
	color: #fff;
	height: 201px;
	position : relative; 
}

div#header img {
	margin: 0; /
	position: absolute;
	bottom: -22px;
	right: 30px;
	width: 40%;
}

div#menu {
	background-color: #f8f8f8;
	width: 95%;
	padding: 0;
	position: absolute;
}

div#content {
	float: left;
	width: 70%;
	margin-left: 10px; 
}

div#center {
	padding-bottom: 50px; 	/
	overflow: auto;
}

div#sidebar {
	float: right;
	width: 200px;
	padding-right : 3em;
}

h1 {
	font: 14px bold Arial, Helvetica, sans-serif;
	color: #f9893d;
	border-bottom: 1px solid;
	font-weight: 600;
	text-transform: uppercase;
	margin-left: 1em;
	margin-bottom: 2em;
	padding-top: 2em;
	margin-right: 1em;
}

p {
	text-align: justify;
	font-size: 13px;
	padding-left: 1em;
	padding-right: 1em;

}

/************************Menus***********************************/

#menu ul li{
	list-style-type: none;
	float: right;
}

div#sousmenu ul{
	padding: 0;
	margin: 0;
}

div#sousmenu ul li{
	list-style-type: none;
	float: left;
}

#header ul li a, #menu ul li a, #sousmenu ul li a{
	display: block;
	float: left;
	padding: 0 10px;
	border-right: 1px solid #cc051c;
	text-decoration: none;
	font: bold 12px Arial, Helvetica, sans-serif;
	text-transform: uppercase;
	color: #4C4C4C;
}
#header ul li a:hover, #header ul li a.on, #menu ul li a:hover, #menu ul li a.on, #sousmenu ul li a:hover,  #sousmenu ul li a.on{
	display: block;
	float: left;
	padding: 0 10px;
	border-right: 1px solid #cc051c;
	text-decoration: none;
	font: bold 12px Arial, Helvetica, sans-serif;
	text-transform: uppercase;
	color: #cc071e;
}

/************************Sous-menus***********************************/

#subm0, #subm1, #subm2, #subm3, #subm4, #subm5, #subm6, #subm7 {
	position: absolute;
	z-index: 2;
	width: 180px;
	overflow: hidden;
	height: 0;
	top: 55px;
	left: 0;
	opacity: 0.8;
	-moz-opacity: 0.8;
	filter: Alpha(Opacity=80);
}

#subm0 ul li a, #subm1 ul li a, #subm2 ul li a, #subm3 ul li a, #subm4 ul li a, #subm5 ul li a, #subm6 ul li a, #subm7 ul li a {
	display: block;
	text-align:right;
	font: normal 11px Arial, Helvetica, sans-serif;
	padding: 2px 0;
	text-transform:uppercase;
	background-color: white;
	padding: 3px;
	color: #000000;
	text-decoration: none;
}

Modifié par p_tite_jo (01 Feb 2011 - 18:45)
Salut,
Alors comment dire...
Déjà au niveau de la structure c'est pas génial... Dans l'idéal tes sous menus ne devraient pas êtres tout en haut de ton code séparé du menu normal et dans des divs positionnées en absolute par rapport à la fenetre du navigateur (essaie de redimensionner la fenêtre du navigateur et de retrouver tes sous menus !).

Pour faire des sous menus, il faudrait intégrer tes liens de sous menus en imbricant les listes ul / li de cette façon :

<div id="menu">
   <ul id="topmenu">
       <li><a href="lien1">Lien 1</a></li><!--menu simple sans imbrication-->
       <li><a href="Lien2">Lien 2</a><!--menu avec imbrication-->
            <ul id="sousmenu">
                <li><a href="lien2.1">Lien sous menu 2.1</a></li><!--sous menu imbriqué-->
                 <li><a href="lien2.2">Lien sous menu 2.2</a></li>
            </ul>
       </li>
       ...
    </ul>
</div>


Donc ce code est à intégrer dans ton menu.php avec liens de menus normaux + liens de sous menu imbriqués et exit le fichier sousmenu.php.

A partir de là, il te sera bien plus facile de positionner correctement tes menus et sous menus en CSS.
Modifié par oliviadox (30 Jan 2011 - 23:21)
Bonjour,

Les CSS qui concernent ton menu incluent #header dans leur cascade, normal donc si tu déplace le menu qu'il ne réagisse plus (puisque la localisation des éléments ne correspond plus).
Effectivement Smiley ohwell
Mais il doit y avoir un autre soucis car même en ayant mis la bonne référence, ça ne fonctionne toujours pas.

Merci pour vos réponses Smiley smile

Le code source actualisé :

Page

<body>
<?php include("sousmenu.php"); ?>
<div id="global">
			<div id="header">
				<img src="css/img/logo.png" alt="logo"/>
                       
            </div> 
            
     
  <div id="center">
  		<div id="menu">
			<?php 
                $nav_en_cours = 'immobilier';
                include("menu/menu.php");
            ?>	
        </div>
    
        <div id="content">
               
            <h1>Accueil</h1>
                    
        </div>
        <div id="sidebar">
        </div>
  </div>
</div>
</body>
</html>

css

body, html {
	height: 100%;
	margin: 0;
	background: #807E78 url(../css/img/fond.png);	
	font: Helvetica, Arial, sans-serif;
	height: 100%;
	padding: 0;
	margin: 0;
}

div#global {
	min-height: 100%; 
	width: 1023px; 
	margin: 0 auto; 
	background: #f8f8f8 url(../css/img/colones.gif) center repeat-y; 
}

div#header {
	background: #7fcf2e url(../css/img/accueil.jpg) no-repeat;
	color: #fff;
	height: 201px;
	position : relative; 
}

div#header img {
	margin: 0; 
	position: absolute;
	bottom: -22px;
	right: 30px;
	font: 3em Georgia, serif;
	width: 40%;
	z-index: 5;
}
div#header img#home{
	width: 100%;
	position: relative;
}

div#menu {
	background-color: #f8f8f8;
	width: 95%;
	padding: 0;
	position: absolute;
}

div#content {
	float: left;
	width: 70%;
	margin-left: 10px; 
	border: 1px solid green;
}

div#center {
	padding-bottom: 50px; 	
	overflow: auto; 
	position: relative;
	border: 1px solid red;
}

div#sidebar {
	float: right;
	width: 200px;
	padding-right : 3em;
}

h1 {
	font: 14px bold Arial, Helvetica, sans-serif;
	color: #f9893d;
	border-bottom: 1px solid;
	font-weight: 600;
	text-transform: uppercase;
	margin-left: 1em;
	margin-bottom: 2em;
	padding-top: 2em;
	margin-right: 1em;
}

p {
	text-align: justify;
	font-size: 13px;
	padding-left: 1em;
	padding-right: 1em;

}

/************************Menus***********************************/

#menu ul li{
	list-style-type: none;
	float: left;
}

div#sousmenu ul{
	padding: 0;
	margin: 0;
	border :1px dotted black;
}

div#sousmenu ul li{
	list-style-type: none;
	float: left;
}

#center ul li a, #menu ul li a, #sousmenu ul li a{
	display: block;
	float: left;
	padding: 0 10px;
	border-right: 1px solid #cc051c;
	text-decoration: none;
	font: bold 12px Arial, Helvetica, sans-serif;
	text-transform: uppercase;
	color: #4C4C4C;
}
#center ul li a:hover, #center ul li a.on, #menu ul li a:hover, #menu ul li a.on, #sousmenu ul li a:hover,  #sousmenu ul li a.on{
	display: block;
	float: left;
	padding: 0 10px;
	border-right: 1px solid #cc051c;
	text-decoration: none;
	font: bold 12px Arial, Helvetica, sans-serif;
	text-transform: uppercase;
	color: #cc071e;
}

/************************Sous-menus***********************************/

#subm0, #subm1, #subm2, #subm3, #subm4, #subm5, #subm6, #subm7 {
	position: absolute;
	z-index: 10;
	width: 180px;
	overflow: hidden;
	height: 0;
	top: 55px;
	left: 0;
	opacity: 0.8;
	-moz-opacity: 0.8;
	filter: Alpha(Opacity=80);
}

#subm0 ul li a, #subm1 ul li a, #subm2 ul li a, #subm3 ul li a, #subm4 ul li a, #subm5 ul li a, #subm6 ul li a, #subm7 ul li a {
	display: block;
	text-align:right;
	font: normal 11px Arial, Helvetica, sans-serif;
	padding: 2px 0;
	text-transform:uppercase;
	background-color: white;
	padding: 3px;
	color: #000000;
	text-decoration: none;
}

Laurie-Anne a écrit :
Bonjour,

Les CSS qui concernent ton menu incluent #header dans leur cascade, normal donc si tu déplace le menu qu'il ne réagisse plus (puisque la localisation des éléments ne correspond plus).


C'est ce que je croyais aussi à première vue mais à chaque fois il y avait bien un rappel vers #menu tout court sans #header devant (après une virgule)... (ou alors j'en ai loupé un).

Par contre tu sais ptite_jo que si tu nous donnes jpas le code de l'include php, ça nous permets pas de voir le code html qu'il y a dans ce fichier php (menu.php par ex)...
Bon en regardant le code généré, tes sous menu sont toujours séparés de tes liens de menu principaux et positionnés en absolute presque tout en haut à gauche de la fenêtre de ton navigateur... Regarde avec Firebug ou autre outil similaire et tu comprendras ce que je veux dire...

Les styles de ton menu normal fonctionnent très bien, le souci vient uniquement de tes sous menus déroulants qui ne s'affichent pas c'est bien ça ?
Voici les codes manquants :
menu.php
<ul>
	<li>
		<a href="../index.php" id="m0"><img id="home" src="menu/home.gif" alt="Accueil" /></a>					
	</li>
    <li>
		<a href="entreprise.php" id="m1"> Entreprise</a>					
	</li>
    <li>
		<a href="realisations.php" id="m2">Réalisations</a>					
	</li>
    <li>
		<a href="immobilier.php" id="m3">Immobilier</a>					
	</li>	
</ul>

et sousmenu.php

<div id="subm0">
</div>

<div id="subm1" onmouseover="clearTimeout(cacher)" onmouseout="hidemenu('m1')">
    <ul> 
		<li><a href="#">Prestation</a> </li>
        <li><a href="#">Historique</a> </li>
 		<li><a href="#">Equipe</a> </li>
    </ul>
</div>

<div id="subm2">

 <ul> 
		<li><a href="#">titre1</a> </li>
        <li><a href="#">titre2</a> </li>
 		<li><a href="#">titre3</a> </li>
    </ul>
    
</div>

<div id="subm3">
   
</div>


   	


J'ai rapatrié les sous-menus près des menus principaux dans la div menu... mais pas sure que ça soit leur place... Oui les styles de mon menu principal sont ok.. mais ça reste un mystère pourquoi ça ne fonctionne que dans le header... est-ce que ça viendrait du script qui "déroule" les menus ?
Tes sous menus sont bien en rapport avec tes liens de menu principaux non ?
Donc ils doivent être intégré non pas séparément dans des divs mais imbriqué dans leur lien de rubrique. Par exemple pour des listes d'aliments ça parait quand mm plus logique de faire ça :


menu:
fruit
    orange
    poire
    abricot
légume
    patate
    tomate



(Et me dites pas que la tomate c un fruit je sais Smiley lol )

Donc pour ton menu en reprenant les id certainement nécessaire pour le JS :
(code à mettre dans le fichier include)
<div id="menu"> 
   <ul id="topmenu"><!--pour styler les liens de premier niveau : #topmenu ul li {} en css--> 
       <li>
         <a href="../index.php" id="m0"><img id="home" src="menu/home.gif" alt="Accueil" /></a>
       </li>
       
       <li><a href="entreprise.php" id="m1"> Entreprise</a>
           <ul  id="subm1" onmouseover="clearTimeout(cacher)" onmouseout="hidemenu('m1')"> 
                <li><a href="#">Prestation</a> </li>
                <li><a href="#">Historique</a> </li>
                <li><a href="#">Equipe</a> </li>
           </ul>
       </li>
       
       <li><a href="realisations.php" id="m2">Réalisations</a>
           <ul id="subm2" onmouseover="clearTimeout(cacher)" onmouseout="hidemenu('m1')"> 
                <li><a href="#">titre1</a> </li>
                <li><a href="#">titre2</a> </li>
                <li><a href="#">titre3</a> </li>
           </ul>  					
       </li>

        <li>
           <a href="immobilier.php" id="m3">Immobilier</a>
        </li>	
    </ul> 
</div> 


Il faudra peut être adapter un peu les css à cette nouvelle structure et voir comment le script est appelé pour les sous menus mais avec ces quelques retouches ça devrait mieux fonctionner.
Modifié par oliviadox (01 Feb 2011 - 14:42)
Bonjour,

j'ai apporté les modifications suggérées mais je n'arrive toujours pas à résoudre mon problème...
D'autres suggestions ? Smiley ohwell
Allez, t'as du bol aujourd'hui je m'ennuie un peu au taf... Smiley biggol
Voilà les CSS qui vont avec et qui en plus te permettent d'éviter le javascript et qui sont accessibles au clavier (que demande le peuple Smiley lol )

Par contre j'ai viré certains styles au passage (genre les couleurs de font au hover)... que tu devras remettre.

Donc à la place de tes styles menu ET sous menu tu mets :

/************************Menus & Sous Menus***************************/

#menu {
            padding: 0;
            margin-bottom:4em;/*marge pour le menu déroulant*/
}
#menu ul li{
            list-style-type: none;
}

#topmenu li {
            position:relative;/*positionne le li parent*/
            display:block;
            margin-right:30px;
            float:left;/*permet l'alignement en ligne du premier niveau de menu*/
}

#topmenu li a{
            display: block;
            text-decoration: none;
            font: bold 12px Arial, Helvetica, sans-serif;
            text-transform: uppercase;
            color: #4C4C4C;
}

#topmenu ul li a{
            font: normal 11px Arial, Helvetica, sans-serif;
            text-transform:uppercase;
}
#topmenu ul {
            padding: 0;
            border :1px dotted black;
            position:absolute; /*se positionne en absolu par rapport au li parent*/
            top:0.8em;/*espacement*/
            visibility:hidden;/*caché au départ*/

}
#topmenu li:hover ul, #topmenu li:focus ul{
           visibility:visible;/*apparait au survol ou focus*/
}


Je sais qu'on doit pas trop donner de codes tout fait mais il y avait tellement de modif à apporter que ça va plus vite comme ça... Par contre p_tite_jo, essaye d'apprendre le positionnement CSS, ça t'aidera pour la suite et pour comprendre ce que tu fais ou pourquoi ça marche (pas).
Modifié par oliviadox (01 Feb 2011 - 16:41)
bon ben... merci beaucoup Smiley ohwell

Je vais essayer de comprendre ces modif... ce que je devrais peut être pas dire c'est que c'est pas le premier site que je fais... certes le dernier date un petit peu mais à voir un rafraîchissement est nécessaire. Quoi qu'il en soit merci beaucoup pour ton aide et tes conseils...
La communauté Alsa est toujours aussi efficace et sympathique.
Merci

A bientôt