28173 sujets

CSS et mise en forme, CSS3

Bonsoir,

Voilà plusieurs heures que je cherches une solution à mon problème malheureusement celles cio sont infructueuses et après plusieurs heures d'essais, je n'ai toujours pas réussi à obtenir ce que je veux, c'est pour celà que je viens solliciter votre aide.
La découpe de mon design était auparavant faite avec des tableaux et je me suis décidé à le faire avec des divs mais maintenant j'ai un gros soucis :\

Voilà le problème, mon div central ne s'allonge pas assez, et son contenu déborde complètement. Je sais que c'est un problème récurrent mais malgré ce que j'ai vu sur le net, je n'ai pas été capable de trouver une solution qui pare à mon problème :\
Comme une image est toujours mieux qu'un long discours, en voici une :

image


Voilà le code de la page

<html xmlns="http://www.w3.org/1999/xhtml" lang="fr" xml:lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title></title>
<style type="text/css">
body {background: #282828 url('images/fond.gif') top left repeat-x; padding:0; margin:0;}
#site { width: 1024px;
                margin: 0 auto;
                padding-left:100;
                text-align: center; }
#header {background: url(images/imgs_01.gif) no-repeat; width:1024px; height:87px;}
#head01 {background: url(images/imgs_02.gif); height:150px; width:118px; float:left;  margin-top:87px;}
#ban {background: url(images/imgs_03.gif); height:150px; width:596px; margin-top:87px; float:left;}
#headmenu {background: #DFDFDF; float:left; height:150px; margin-top:87px; width:185px;}
#headtopmenu {background: url(images/imgs_04.gif); height:31px; width:100%}
#head02 {background: url(images/imgs_05.gif); height:150px; width:125px; margin-top:87px; float:left;}

#content {background: url(images/bg_site.gif) repeat-y; width:1024px; clear:both; height:100%;}
#gauche {background: url(images/imgs_08.gif); width:118px; height:10px; float:left; }
#droite {background: url(images/imgs_10.gif); width:125px; height:10px; float:right; margin-right:0; }
#footer {clear:both; width:1024px; background: url(images/footer.gif); height:61px;}
#centre {text-align:left; width:580px; float:left;}
#menus {  margin-right:10px; float:right; padding-left:30;}
#bests {background: #242424; margin-bottom:20px; color:white; width:587px; height:72px;}
div.bests01 {padding:6; text-align:center; height:60; width:60; background:#191919; float:left;}
a.rollover {
        display:block;
     width: 185px;
     height: 62px;
     background: url(images/mini01.gif);
     border: 0;
}
a.rollover:hover {
     width: 185px;
     height: 62px;
     background: url(images/mini01o.gif);
}
a.rollover:active {
     width: 185px;
     height: 62px;
     background: url(images/mini01h.gif);
}
a.rollover2 {
        display:block;
     width: 185px;
     height: 57px;
     background: url(images/mini02.gif);
     border: 0;
}
a.rollover2:hover {
     width: 185px;
     height: 57px;
     background: url(images/mini02o.gif);
}
a.rollover2:active {
     width: 185px;
     height: 57px;
     background: url(images/mini02h.gif);
}

img.c1 {display:none;}

</style>
<link rel="stylesheet" type="text/css" href="css/css_sitediv.css" media="screen"/>
</head>
<body>

<!-- Chargement des images pour les rollovers  -->
<img src="images/mini01o.gif" alt="" class="c1" /> <img src="images/mini01h.gif" alt="" class="c1" /> <img src="images/mini02o.gif" alt="" class="c1" /> <img src="images/mini02h.gif" alt="" class="c1" />
<!-- Fin de chargement des images pour rollovers -->

<div id="site">
	<div id="header">
		<div id="head01"></div>
		<div id="ban"></div>
		<div id="headmenu">
			<div id="headtopmenu"></div>
			<a class="rollover" href="#" title="titre"></a> 
<a class="rollover2" href="#" title="titre"></a>
		</div>
		<div id="head02"></div>
	</div>
	<div id="content">
		/*<script language="Javascript">
		document.write ("<div id='content' style='height:"+document.body.clientHeight+"px;'>" );
		</script>*/
		<div id="gauche"></div>
		<div id="droite"></div>
			
		<div id="centre">
			<div id="bests">
				<div class="bests01">...</div>
				<div class="bests01">...</div>
				<div class="bests01">...</div>
					
							
				
			</div>
				
				
			<div class="content_conteneur">
				<div class="content_title"></div>
					<div class="content_bloc"><p>&nbsp;</p>
						........
					</div>
			</div>
		</div>
		<div id="menus">menus</div>
	</div>
	<div id="footer"></div>
</div>
</body>
</html>


Edit : Alors que tout à l'heure ça n'allait pas, j'ai remis le doctype et maintenant ça fonctionne mais il ne prend plus en compte mes padding et autre :\
Modifié par nuts62 (07 Feb 2008 - 22:30)
Bonjour,

Vu que ton design et notamment le bloc qui pose problème sont surtout basés sur des images de fond, il est difficile de dire en lisant ton code HTML ce qui correspond à telle ou telle partie de l'image. On gagnerait du temps avec une page en ligne.

Mais quelques remarques en passant:
- div#site est trop large (1024px... il faudrait se limiter à 980px de large maximum pour un site en pleine largeur avec un écran en 1024px de large... je te laisse deviner pourquoi Smiley cligne );
- les enfants de div#site n'ont pas besoin d'avoir une largeur figée en pixels si eux-même doivent prendre toute la largeur de leur parent (c'est le comportement par défaut d'un élément de type bloc);
- div#content a une hauteur figée à 100% de la hauteur du viewport (zone de visualisation du navigateur)... le problème vient peut-être de là?
- tous les enfants de div#content sont flottants... donc problème de dépassement des flottants, à régler avec un overflow: hidden et un zoom: 1 pour IE6.

Je te conseille de faire une recherche (google ou autre) sur le dépassement des flottants.

Et si ton design doit dessiner une grande colonne unique qui prend au minimum toute la hauteur du viewport (si le contenu est court) ou la hauteur du contenu (si celui-ci est long et plus haut que le viewport), il ne faudra pas travailler avec div#centre mais directement sur body ou sur div#site. Sur le modèle suivant:
html, body {
	height: 100%;
	margin: 0;
	padding: 0;
}
div#site {
	min-height: 100%;
}
Mais attention, c'est un peu complexe à gérer correctement.
En mettant le doctype et avec

<script language="Javascript">

		document.write ("<div id='content' style='height:"+document.body.clientHeight+"px;'>" );

		</script>


Ca passe, mais ce qui est bizarre c'est que je suis contraint d'avoir un div qui reste ouvert (pas de </div>), car dès que j'en mets un, je retrouve mon problème d'affichage Smiley decu
Auriez vous une idée ? Et pourquoi je perds tous mes padding et margin avec ce fichu doctype ? Smiley decu
Florent V. a écrit :
Bonjour,

Vu que ton design et notamment le bloc qui pose problème sont surtout basés sur des images de fond, il est difficile de dire en lisant ton code HTML ce qui correspond à telle ou telle partie de l'image. On gagnerait du temps avec une page en ligne.

Mais quelques remarques en passant:
- div#site est trop large (1024px... il faudrait se limiter à 980px de large maximum pour un site en pleine largeur avec un écran en 1024px de large... je te laisse deviner pourquoi Smiley cligne );
- les enfants de div#site n'ont pas besoin d'avoir une largeur figée en pixels si eux-même doivent prendre toute la largeur de leur parent (c'est le comportement par défaut d'un élément de type bloc);
- div#content a une hauteur figée à 100% de la hauteur du viewport (zone de visualisation du navigateur)... le problème vient peut-être de là?
- tous les enfants de div#content sont flottants... donc problème de dépassement des flottants, à régler avec un overflow: hidden et un zoom: 1 pour IE6.

Je te conseille de faire une recherche (google ou autre) sur le dépassement des flottants.

Et si ton design doit dessiner une grande colonne unique qui prend au minimum toute la hauteur du viewport (si le contenu est court) ou la hauteur du contenu (si celui-ci est long et plus haut que le viewport), il ne faudra pas travailler avec div#centre mais directement sur body ou sur div#site. Sur le modèle suivant:
html, body {
	height: 100%;
	margin: 0;
	padding: 0;
}
div#site {
	min-height: 100%;
}
Mais attention, c'est un peu complexe à gérer correctement.


Voilà la page, je viens d'y insérer le doctype

Pour le 100% c'est différents tests, mais je sais que malheureusement ça se limite à la hauteur de l'écran et non la hauteur totale de ma page :\

J'ai regardé pour le dépassement notamment sur des liens fournis sur ces forums mais sans résultat :\ Enfin j'ai peut être mal compris le fonctionnement :\

Si jamais vous avez une quelconque idée je suis preneur Smiley smile
Modifié par nuts62 (10 Feb 2008 - 00:02)
J'ai l'impression que tu n'es pas très à l'aise sur les notions suivantes:
- mode Quirks et mode Standard;
- modèle de boite CSS.

Il faudrait faire quelques recherches et se documenter là-dessus si ça n'est pas acquis.

Bon allez, un raccourci:
http://blog.alsacreations.com/2006/10/23/296-a-propos-du-modele-de-boite-microsoft-ou-quirks

Pour dire les choses simplement, si tu as commencé ton intégration en travaillant en mode Quirks et que tu viens de rajouter un Doctype en bonne et due forme (ce qui te fait passer en mode Standard, ce qui est une bonne idée dans l'absolu), ben ça va être très chiant de corriger ton intégration car tu l'as un peu construite sur le sable.
Bon, j'exagère un peu. Smiley smile

Déjà, tu devrais t'occuper du dépassement des enfants de div.content. En gros, div.content a actuellement une hauteur de... 0px, car tous ses enfants sont flottants et ne sont plus pris en compte dans le calcul de sa hauteur.

Je pense que tu dois déjà avoir une idée de comment on gère ce problème. Si ce n'est pas le cas, eh bien tu peux suivre le conseil que je donnais plus haut (faire une recherche sur le sujet).

En dehors de problèmes éventuels avec IE, il te restera alors à corriger tes décalages étranges dus je pense à l'utilisation inutile de largeurs fixes en pixels pour certains éléments.

On se rappèlera la règle d'or: tant qu'on n'est pas obligé de donner une largeur à un élément, on n'utilisera pas width. La plupart du temps, on peut faire ce que l'on souhaite en utilisant la largeur du conteneur, des marges et du padding.