28220 sujets

CSS et mise en forme, CSS3

Pages :
Bonjour,

J'ai quelques soucis pour faire une mise en page.
Pour bien expliquer mon problème, je joins un schéma pour illustrer ce que je veux.

upload/363-miseenpage.jpg

C'est dans la création de mon entête que j'ai des soucis.

Il y a trois zones dans celle-ci :

Le Logo (en taille fixe 160*160 pixel),
La barre de navigation (entouré en rouge) qui contient "item 1", "item 2", "item 3", "item 4" doit faire 80px en hauteur et doit occuper tout le reste de l'espace en largeur.
La barre de titre qui doit elle aussi tenir toute la largeur et fait 80px de hauteur également.

j'ai commencé une partie de code mais je suis un peu perdu !

Voici mon code XHTML :

<div id="entete">
	
	<div id="bandeaunav">
		<ul>
					<li id="item1"><a href="#">Item 1</a></li>
					<li id="item2"><a href="#">Item 2</a></li>		
					<li id="item3"><a href="#">Item 3</a></li>
					<li id="item4"><a href="#">Item 4</a></li>	
		</ul>
	</div>
	
	<div id="logo"></div>
	
		<div id="bandeauesp">
			<h1>Titre de ma page</h1>
	  </div>
	    	
</div>



Voici mon code CSS :

#entete{
	height:160px;
}
#logo{
	position: absolute;
	width:160px;
	height:160px;
	top:0;
	left:0;
	background-color:#A3A3A3;
}

#bandeaunav li{
	position: absolute;
	top:0;
	height:80px;
	list-style: none;
	width:20%;
}

#item1, #item2, #item3, #item4{
	top:0;
	height:80px;
	list-style: none;
	width:20%;
	border-bottom:2px solid #D9D9D9;
}
#item1{
	left:0;
	margin-left:155px;
	background-color: #D9D9D9;
}
#item2{
	left:20%;
	margin-left:155px;
	background-color: #C3C3C3;
}
#item3{
	left:40%;
	margin-left:155px;
	background-color: #999897;
}
#item4{
	left:60%;
	margin-left:155px;
	background-color: #757574;
}

#bandeauesp{
	position:absolute;
	height:80px;
	top:80px;
	left:160px;
	background-color:#EFEFEF;
}


Je n'arrive pas à mettre le menu et la zone de titre sur tout le reste de la page.

Egalement le soucis c'est que j'aimerai bien que mes "Items" de menus soit de la même taille...

Merci d'avance

TD
Modifié par TylerD (25 Mar 2005 - 19:00)
En fait, je sais pas si ça va vraiment aider un screen shot car c soit j'arrive à aligner le menu à droite de la fenêtre et j'ai un écart entre le menu et le logo ou soit j'aligne à gauche et j'ai un décalage de l'autre côté...

Je ne comprend plus grand chose là ! le truc c'est que j'aimerai bien que quelqu'un m'aide en m'expliquant un peu les positionnements car je trouve ça un peu aléatoire et j'ai pas envie de faire à l'ancienne avec des tableaux pour la mise en forme... Smiley biggrin
<style type="text/css">
<!--
#entete{
height:160px;
margin:0px;
}
#logo{
width:160px;
height:160px;
background-color:#A3A3A3;
float:left;
margin:0px;
border:0px;
}

#bandeaunav ul,li{
margin:0px 0px 0px 0px;
list-style: none;
display:inline;
}

#bandeaunav ul{
padding:0px;
}

#bandeaunav li{
list-style: none;
height:80px;
width:25%;
border-bottom:2px solid #D9D9D9;
}

#bandeauesp{
height:80px;
background-color:#EFEFEF;
}

-->
</style>


<div id="entete">
	<div id="logo"></div>

	<div id="bandeaunav">
		<ul>
			<li style="background-color: #D9D9D9; " ><a href="#">Item 1</a></li>
			<li style="background-color: #C3C3C3; " ><a href="#">Item 2</a></li> 
			<li style="background-color: #999897; " ><a href="#">Item 3</a></li>
			<li style="background-color: #757574; "  ><a href="#">Item 4</a></li> 
		</ul>
	</div>


	<div id="bandeauesp">
		<h1>Titre de ma page</h1>
	</div>

</div>

</body>


Voilà ce que j'ai pu faire, ca n'est pas parfait:
- Sous Mozilla c'est affreux Smiley ohwell
- Le fait d'utiliser des height:80px; provoque de petites marges entre le logo et le menu idem pour le couple logo titre (bizzare ????)

Pour ce qui est des explications:
- Je déclare dans ton div "entete" un div "logo" qui se place en haut à gauche du conteneur.
- Il faut spécifier l'attribut float:left; sur "logo" sinon le <ul> se place automatiquement en-dessous (théorie des balises blocs, regarde dans les articles du site). Le menu va donc se placer sur le côté grâce à float.
-On force le menu à venir en ligne avec display:inline; et on enlève les puces avec list-style: none;
- On met les largeurs des <li> à 25% parcequ'il y en à 4
Pour finir on déclare le dernier div avec le titre qui se positionne automatique en dessous (c'est une balise bloc).
Voilà, je sais pas si c'est clair mais c'est tout ce que je peux faire . Smiley lol
d'où mon post !!

j'aimerai vraiment bien comprendre car pour moi c'est vraimenet pas clair, un coup ça marche presque, après ça marche plus du tout, c'est pas très stable j'ai l'impression...
Bonjour,
Voici ce que je te propose:
1/CSS

html, body {border:0; padding:0px; margin:0px;}
#entete{
height:160px;
border:0; padding:0px; margin:0px;
}
#logo{
border:0; padding:0px; margin:0px;
float:left;
width:160px;
height:160px;
background-color:#A3A3A3;
}
ul#bandeaunav {height: 78px ;padding:0px; margin:0px 0px 0px 160px; border-bottom:2px solid #D9D9D9;}
ul#bandeaunav li {list-style-type: none ;border:0; padding:0px; margin:0px;width: 25%;float:left;}
ul#bandeaunav li a{margin:0px;padding:0px;border:0;}

#bandeauesp{
border:0; padding:0px; margin:0px;
height:80px;
background-color:#EFEFEF;
}
h1 {border:0; padding:0px; margin:0px;}

2/html

<div id="entete">
<div id="logo"></div>

<ul id="bandeaunav">
<li style="background-color: #D9D9D9; " ><a href="#">Item 1</a></li>
<li style="background-color: #C3C3C3; " ><a href="#">Item 2</a></li>
<li style="background-color: #999897; " ><a href="#">Item 3</a></li>
<li style="background-color: #757574; " ><a href="#">Item 4</a></li>
</ul>
<div id="bandeauesp">
<h1>Titre de ma page</h1>
</div>
</div>
Merci comar91, Smiley biggrin
Tu vas dire mais qu'est ce qu'il est pénible lui ! mais mes items ne font pas 80px de hauteur, il y a une zone blanche entre les items et la zone de titre !

J'ai spécifié une hauteur mais rien n'y fait... Smiley decu
Oups !

J'ai ajouté ceci :

ul#bandeaunav li {list-style-type: none ;border:0; padding:0px; margin:0px;width: 25%;float:left;height:100%;}
ul#bandeaunav li a{margin:0px;padding:0px;border:0;display:block;width:100%;height:100%;}


Et maintenant j'ai donc mes items qui font toute la hauteur et le lien est cliquable sur toute la zone...

Par contre, petit détail que je ne comprend pas (sûrement le float) mais sous IE j'ai un petit décalage de 1 ou 2 px entre le logo et les items (entre les deux !)

Merci beaucoup Smiley biggrin Smiley biggrin Smiley biggrin Smiley biggrin
Salut,

La solution de comar91 est excellente, et tu noteras au passage la disparition de quelques balisages <div> qui étaient inutiles dans ton code. Pour aller au bout de cette démarche, tu devrais même supprimer celui qui entoure ton h1 et lui appliquer directement le id.

J'en profite pour renvoyer sur la remarque de Raphael à ce sujet :

XHTML-trop-de-div-tue-les-div

Smiley cligne
C'est vrai qu'on est pas obligé d'utiliser les div chaque fois, c'est assez pratique cette solution !

Par contre, avec l'exemple donné, j'ai des problèmes d'affichage sous IE (encore lui !) car lorsqu'on réduit la page par exemple (à peine), le dernier item passe en dessous, cassant ainsi toute la mise en page !
Pages :