28173 sujets

CSS et mise en forme, CSS3

Bonjour j'essaie de refaire la mise en page de mon site et je tombe sur un problème que j'avais déjà résolu auparavent, mais là impossible de me souvenir :s

Le contenu de ma page est centré, j'utilise des blocs avec des images de fond pour faire un cadre, le problème c'est que la partie centrale est recouvert pas le pied.

<body>
		<div id="conteneur">
		<div id="contenu">
			<div id="entete">
				<div id="eg"></div><div id="ec"></div><div id="ed"></div>
			</div>
			
			<div id="centre">
				<div id="cg"></div>
				<div id="cc">
blablalba<br /><br /><br /><br /><br /><br /><br />
blablalba<br /><br /><br /><br /><br /><br /><br />
blablalba<br /><br /><br /><br /><br /><br /><br />
				</div>
				<div id="cd"></div>
			</div>
			
			<div id="pied">
				<div id="pg"></div><div id="pc"></div><div id="pd"></div>
			</div>
		</div>
		</div>
	</body>


Les blocs entete, centre et pied sont en position relative, et les sous-blocs sont en absolute. Est-ce la bonne solution ?

/* CONTENEUR */
#conteneur {
position: absolute;
left: 0px; 
top: 0px;
margin: 0;
width: 100%;
height: 100%;
}

#contenu {
position: relative;
margin-top: 20px;
margin-bottom: 20px;
margin-left: auto;
margin-right: auto;
width: 1000px; /* largeur obligatoire pour être centré */
text-align: left; /* on rétablit l'alignement normal du texte */
}


/* ENTETE */
#entete {
position: relative;
width: 1000px;
height: 30px;
background-color:red;
}

#eg {
position: absolute;
left: 0px; 
top: 0px;
width: 30px;
height: 30px;
background: url(images/eg.jpg) no-repeat top left;
}

#ec {
position: absolute;
left: 30px; 
top: 0px;
width: 940px;
height: 30px;
background: url(images/ec.jpg) repeat-x top left;
}

#ed {
position: absolute;
left: 970px; 
top: 0px;
width: 30px;
height: 30px;
background: url(images/ed.jpg) no-repeat top left;
}


/* CENTRE */
#centre {
position: relative;
width: 1000px;
background-color:blue;
}

#cg {
position: absolute;
left: 0px; 
top: 0px;
width: 30px;
background: url(images/cg.jpg) repeat-y top left;
}

#cc {
position: relative;
left: 30px; 
top: 0px;
margin: 20px 20px 20px 20px;
width: 940px;
}

#cd {
position: absolute;
left: 970px; 
top: 0px;
width: 30px;
background: url(images/cd.jpg) repeat-y top left;
}


/* PIED */
#pied {
position: relative;
width: 1000px;
height: 30px;
background-color:green;
}

#pg {
position: absolute;
left: 0px; 
top: 0px;
width: 30px;
height: 30px;
background: url(images/pg.jpg) no-repeat top left;
}

#pc {
position: absolute;
left: 30px; 
top: 0px;
width: 940px;
height: 30px;
background: url(images/pc.jpg) repeat-x top left;
}

#pd {
position: absolute;
left: 970px; 
top: 0px;
width: 30px;
height: 30px;
background: url(images/pd.jpg) no-repeat top left;
}

Modifié par ToxiK (31 Mar 2007 - 16:07)
Bonjour,

Je ne visualise pas tout à fait ce que ça peut donner, mais ça a l'air d'être un bordel sans nom cette histoire.

1. Tu as, si je ne m'abuse, quantité d'éléments vides qui dessinent une sorte de découpage, un peu comme avec des tableaux mais sans tableaux (ce qui est sans doute le pire qu'on puisse faire...).
2. Tous tes blocs sont positionnés, soit en absolu, soit en relatif. C'est quand même chercher les problèmes (ou bien ne rien connaitre au positionnement CSS, ce qui arrive quand on débute Smiley smile ).

Sur le positionnement CSS :
http://openweb.eu.org/articles/initiation_flux/
http://openweb.eu.org/articles/initiation_float/
http://openweb.eu.org/articles/initiation_absolue/
Aïe, mais j'ai déjà lu tout ça :s

Mais donc si c'est pas comme ça qu'il faut faire, comment on fait une belle mise en page sans tableau pour faire l'équivalent de ça :


<table class='principal' border='0' cellpadding='0' cellspacing='0'>
		
			<!-- Haut de page -->
			<tr>
			
				<th class='hautgauche'></th><th class='haut'><br></th><th class='hautdroit'></th>

			</tr>
			
			<tr>
			
				<!-- Bordure gauche -->
				<th class='gauche' style='width:<? echo $largeurbordure; ?>px;'></th>
				
				<!-- Centre -->
				<td>
				
					<center><table class='centre' border='0'>
						
						<!-- Titre -->
						<tr>
						
							<th colspan='2'>
								<center>
									<? include 'titre.php'; ?>
								</center>
							</th>
						
						</tr>
						
						<!-- Contenu -->
						<tr>
							
							<!-- Parti changeante -->
							<td>
								<center>
									<? include 'blabla.php'; ?>
								</center>	
							</td>
							
							<!-- Partie coms fixe -->
							<td>
								<center>
									
								</center>	
							</td>
						
						</tr>
					
					</table></center>
				
				</td>
				
				<!-- Bordure droite -->
				<th class='droit'></th>
				
			</tr>
			
			<!-- Bas de page -->
			<tr>
				<th class='basgauche'></th><th class='bas'><br></th><th class='basdroit'></th>
			</tr>
			
		</table>
... parfois de jolies images parlent plus que de longues lignes de code ... Smiley ravi

Que veux-tu obtenir exactement ?
On pourrait peut-être t'aider plus facilement en sachant où tu veux y aller. Smiley cligne
ToxiK a écrit :
Aïe, mais j'ai déjà lu tout ça :s

Mais donc si c'est pas comme ça qu'il faut faire, comment on fait une belle mise en page sans tableau pour faire l'équivalent de ça :



Bonjour,

Pour passer d'une mise en page par tableau à une mise en page css, il faut d'abord comprendre et apprendre.

Florent t'a donné des indications qu'il serait judicieux de prendre en compte.
Pour le dire autrement, on ne remplace pas les cellules d'un tableau par un conteneur, la mise en page en css passe est une autre technique de mise en page ...

Le plus simple, lorsqu'on débute, est de choisir, parmi les modèles de mise en page proposés, celui qui correspond le mieux à la structure recherchée.

Ce tutoriel permet également d'appréhender une mise en page complète, en pratique (vivement conseillé)

Smiley cligne
Modifié par Vero (26 Feb 2007 - 19:23)
Bonjour,

tout d'abord merci et désolé de ne pas avoir répondu plus tôt...

Maintenant que j'ai un petit plus de temps devan tmoi je vais relire ces articles, et comme l'a conseillé Cygnus je met une explication visuelle.

http://toxik13.free.fr/autres/maquette.jpg

Donc les coins sont de longueurs et largeurs fixes 50px, les bandes du haut et du bas sont de largeurs fixes 600px hauteurs 50px.

Les bandes latérales sont de largeurs fixes 50px et de longueurs variables en fonction du contenu. Et le bloc central s'adapte à son contenu.

Le tout est centré horizontalement, et a 50px du haut de la fenêtre.

Voilà tout. Je m'y met dessuite Smiley smile
Salut,

Qu'y a-t-il dans le bloc du milieu ? Une ou 2 colonnes de texte ?

Que représentent les coins ? Ce sont des images de décoration ?

Tu dis que le bloc central s'adapte à son contenu, mais que les bandes du haut & du bas sont de largeur fixe. Donc, le bloc central s'adapte au contenu uniquement selon la hauteur ?
Salut,

Un truc comme ça?
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
  <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
			
<head> 

<title>Test</title>
<style type="text/css">
html,
body {
	margin: 0;
	padding: 0;
	
}
#container {
	width:600px;
	margin:auto;
	position: relative;
	background-color:blue;
	overflow: hidden;	
}

#milieu {
	width:500px;
	margin:50px auto 50px;
	position: relative;
	background-color:#000;
	color: #fff;
}

.coin_droit_haut, .coin_gauche_haut, .coin_gauche_bas, .coin_droit_bas{
	width:50px;
	height: 50px;
	background-color:red;
	position: absolute;	
}

.coin_droit_haut{
	right: 0;
	top: 0;
}

.coin_droit_bas{
	right: 0;
	bottom: 0;
}

.coin_gauche_bas{
	left: 0;
	bottom: 0;
}

.coin_gauche_haut{
	left: 0;
	top: 0;
}
</style>
</head>

<body>
<div id="container">
	<div class="coin_droit_haut">
	</div>
	<div class="coin_droit_bas">
	</div>
	<div class="coin_gauche_haut">
	</div>
	<div class="coin_gauche_bas">
	</div>
	<div id="milieu">
	<p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas nunc nibh, facilisis a, condimentum ac, eleifend non, nisi. Praesent metus. Nulla sollicitudin mi non pede. Aliquam imperdiet lacus ac lorem. Nulla viverra magna non nibh interdum dignissim. Cras orci. Fusce neque. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos hymenaeos. Fusce sed justo. Aliquam erat volutpat. Sed augue metus, condimentum at, posuere ac, iaculis a, elit. Cras vitae pede quis diam dignissim dapibus. Maecenas et neque eget erat vehicula gravida. In auctor leo ut nisl. Aenean sapien. Ut euismod sapien at velit. Fusce rutrum. Vivamus vulputate nunc vel dolor. Mauris ultrices, erat quis accumsan fringilla, metus eros consectetuer diam, sed condimentum libero massa euismod justo.
	</p>
	
	</div>
</div>
	
</body>
</html>

Thomas D. a écrit :
Salut,

Qu'y a-t-il dans le bloc du milieu ? Une ou 2 colonnes de texte ?

Que représentent les coins ? Ce sont des images de décoration ?

Tu dis que le bloc central s'adapte à son contenu, mais que les bandes du haut & du bas sont de largeur fixe. Donc, le bloc central s'adapte au contenu uniquement selon la hauteur ?



Dans le bloc du milieu il y aura un div. Et effectivement il s'adapte uniquement en hauteur.

Les coins et les bandes du haut, du bas et latérales c'est de la déco.



Merci ghost pour le code, à première vu ça à l'air d'être bon.
Je vais comparer avec mon ancien code, pour comprendre mes erreurs.

- - - - - - - - - - - - -

Par contre comment je fais si je veux mettre une image de fond pour les bandes latérales?
Modifié par ToxiK (29 Mar 2007 - 10:46)
Salut,

Ca change les données du problème !!
Si tu nous donnais l'objectif final tout d'un coup, suis sûr que ça irait plus vite
J'avais mis les bande en bleu sur le schéma mais j'ai oublié de préciser dans le texte...

Désolé
Re,

Alors, il te faut quoi dans ces bandes ?
Que les verticales ?
même image à droite et à gauche?
En fait il faut que les 4 bandes soient des blocs, après je vais surement faire un background repeat dedans.

Les bandes du haut et du bas sont de hauteurs et de largeurs fixes.

Les bandes latérales sont de largeurs fixes et de hauteurs variables.
Moi quand je vois un bloc (le site) découpé en 9 cellules (quatre coins, quatre bandes, et un bloc central), je pense à ceci : c'est une tentative de design par « découpage », qui singe ce que l'on fait avec une mise en page en tableaux.

Une info : la mise en page via CSS ne fonctionne pas du tout de la même manière. On ne fait pas de « découpage », mais on place des blocs, on joue sur des marges ou des retraits et on utilise des images de fond.

Si tu te contentes de présenter un schéma avec des zones sans indiquer ce que les zones doivent contenir ou pas, et sans donner une idée de tes contraintes en terme de graphisme, tu ne risques pas d'obtenir une aide véritable. Ou bien on t'aidera, et tu viendras dire « ah ouais... mais en fait ça va pas parce que j'ai telle contrainte au niveau du graphisme ou du contenu ». L'autre problème, c'est que ton schéma ne présente pas ce que tu veux obtenir, mais la façon dont tu veux l'obtenir (c'est à dire par un découpage en neuf zones), façon qui n'est probablement pas la meilleure.

Bref : à quoi ça doit ressembler, au final ?
Modifié par Florent V. (29 Mar 2007 - 13:50)
C'est vrai que je suis pas très clair, et en plus j'avais pas pensé à ça.

Nouvelle maquette, j'aimerais un rendu comme ça :

http://teampangloss.chez-alice.fr/maquette2.jpg

Donc les bords c'est de la déco, le bloc rouge c'est une entete avec logo et menu, le vert c'est la partie changeante, en bleu c'est un pied de page avec un autre menu ou autre qui reste toujours en bas de page.

Au début j'avais fait une mise en page avec un tableau du coup pas de problème pour le changement de hauteur du bloc centrale, depuis je me suis mis à la mise en page css pour quelques sites avec simplement entete, partie centrale et pied, mais là j'ai du mal ...

Quelle méthode utiliser ?
Une div qui entoure tout le site. Tu lui donnes la largeur (600px), des marges auto à gauche et à droite pour centrer le site. Et une image de fond en repeat-y de 600px de large qui contient un bout de 2 bords de gauche et droite.
A l'intérieur, une div header qui contient ton logo et ton menu avec une image de fond en top constituée de ton bord haut et tes 2 coins.
Puis ta div de contenu. Et enfin une div footer comme le header.
Modifié par <nicolas> (29 Mar 2007 - 22:15)
Ok merci j'essaie de faire ça.

Pour l'instant ça convient, je vais faire quelques essais.


Parfait c'est exactement ce qu'il me fallait, merci encore.
Modifié par ToxiK (31 Mar 2007 - 16:08)