Bonjour,

J'ai un problème avec un background pour un site en construction, en fait, il s'affiche pas. Celui qui ne s'affiche pas, c'est le bgcontenu.gif. En fait il s'affiche, mais seulement si je spécifie une taille à mon div#contenu. Comment faire pour qu'il suive la taille de div#gauchet et div#droite?

Mon CSS:


* {
border: 0;
margin: 0;
padding: 0;
font-family: arial;
font-size: 10pt;
font-weight: normal;
color: #000;
text-align: justify;
text-shadow: black;
text-decoration: none;
list-style-type: none;
}
body {
background-color: #eaeaea;
}
/*  ------------------------------------------
/*  Structure
/*  ------------------------------------------
*/
#site {
width: 880px;
background-image: url('images/background/bg.gif');
}
#site, #banniere, #courbe, #contenu, #menu, #bas, #gauche .bouton {
margin: auto;
text-align: center;
}
#banniere, #courbe, #contenu, #menu {
width: 800px;
}
/*  ------------------------------------------
/*  Banniere
/*  ------------------------------------------
*/
#banniere {
height: 200px;
background-image: url('images/background/banniere.gif');
}
/*  ------------------------------------------
/*  Courbe sous menu
/*  ------------------------------------------
*/
#courbe {
height: 49px;
padding: 0 0 10px 0;
background-image: url('images/background/courbe.gif');
}
/*  ------------------------------------------
/*  Contenu
/*  ------------------------------------------
*/
#contenu {
height: 463px;
background-image: url('images/background/bgcontenu.gif');
}
/*  ------------------------------------------
/*  Gauche Droite
/*  ------------------------------------------
*/
#gauche, #droite {
float: left;
width: 200px;
padding: 10px 5px 0 5px;
}
#gauche h1, #droite h1 {
font-size: 10pt;
font-weight: bold;
text-indent: 5px;
margin: 0 0 10px 0;
}
#gauche ul {
margin: 0 0 10px 0;
}
#gauche ul li, #gauche p {
font-size: 8pt;
color: #666;
margin-left: 15px;
}
#gauche p {
margin-bottom: 10px;
}
#gauche .box, #gauche .bouton {
width: 150px;
margin: 0 0 10px 0;
border: 1px solid #666;
display: block;
}
#droite {
width: 550px;
height: 100%;
padding: 0 10px;
background-image: url('images/background/bgbout.gif');
background-repeat: no-repeat;
background-position: bottom right;
}
#droite h1 {
font-size: 12pt;
background-color: #f8f8f8;
}
/*  ------------------------------------------
/*  Bas
/*  ------------------------------------------
*/
#bas {
width: 880px;
height: 74px;
clear: both;
background-image: url('images/background/bgbas.gif');
}
#bas p, #bas p a {
color: #000;
font-size: 8pt;
padding-top: 10px;
text-align: center;
}
#bas p a {
color: #555;
}
#bas p a:hover {
border-bottom: 1px dotted #394651;
}
/*  ------------------------------------------
/*  Menu
/*  ------------------------------------------
*/
#menu {
height: 25px;
padding-bottom: 5px;
background-color: #fff;
}
#menulist li {
float: left;
width: 80px;
}
#menulist li a {
color: #555;
padding: 3px 5px 3px 5px;
text-align: center;
display: block;
}
#menulist li a:hover {
color: #039;
cursor: pointer;
background: #f8f8f8;
border-bottom: 3px solid #bbb;
}
#menulist li a span {
color: #0000ff;
cursor: pointer;
border-bottom: 3px solid #999;
}
#menulist li a:hover span {
border-bottom: 3px solid #f90;
}


Mon code Html:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1 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>Ecupodju - Jeunesse d'Ecuvillens-Posieux UNION</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<meta name="description" content="Jeunesse d'Ecuvillens-Posieux UNION" />
<meta name="keywords" content="Jeunesse, Ecuvillens, Posieux, Alcool, Fête, Giron" />
<link rel="stylesheet" type="text/css" href="style.css" />
</head>

<body>

<div id="site">
  <div id="banniere"></div>
  <div id="menu">
    <? include('menu.php') ; ?>
  </div>
  <div id="courbe"></div>
  <div id="contenu">
    <div id="gauche">
	  <? include('contenu gauche.php') ; ?>
	</div>
	<div id="droite">
	  <?php $page = $_GET['page'] ; if (empty ($page)) {include('niouzes.php') ; } else {include($_GET['page'].'.php') ; }?>
	</div>
  </div>
  <div id="bas">
    <? include('copyright.php') ; ?>
  </div>
</div>

</body>

</html>


Merci d'avance.
Eric
Modifié par le rouge (19 Mar 2006 - 15:51)
Si un modérateur pouvait enlever mon 2ème message de ce post, ça serait cool... (erreur de manip)
Modifié par le rouge (17 Mar 2006 - 10:45)
Excuse-moi Raphael...

Alors le lien avec un attribut de hauteur sur le div#contenu:

Lien 1

Et là sans l'attribut de hauteur... (donc on ne voit pas la petite zone grisâtre sur le "menu" de gauche... (je ne veux pas mettre la couleur en background, parce que j'ai du padding)

Lien 2
Smiley eek oui, effectivement, c'est très bizarre ça lol

Je n'en vois pas la raison à première vue ... Smiley confuse

Même en mettant un height:auto; ou un height:100%; l'image en background n'apparaît pas. Alors qu'en mettant une valeur en px, ça s'affiche ... Smiley murf
Oui, c'est exactement ça...

Mais ce n'est pas possible de mettre un height: 100%; car ça ne serait par rapport à rien, vu que le div#site n'a pas de hauteur défini...

Personne n'a d'idées?
Pas trop le temps de me plonger dans le détail du code, mais ça ne serait pas un problème de flottants ?

http://web.covertprestige.info/test/03-elements-flottants-et-element-parent.html

EDIT: Finalement j'ai vérifié, et c'est ça. Cf donc le lien ci-dessus.
Le problème vient du fait que comme les deux div #gauche et #droite flottent au dessus de leur bloc parent, qui ne s'étend pas pour les contenir.
Toutes les explications sont dans la page du lien, mais il faut savoir que si vous voulez que le bloc #contenu s'étende, il faut que le clear:both soit placé à l'intérieur de ce bloc, et non pas à l'extérieur comme actuellement (il est placé sur le pied de page, ce qui permet d'étirer la page, mais pas pour autant la div#contenu).
Modifié par mpop (17 Mar 2006 - 19:17)
J'avais trouvé la solution avec le overflow: auto; sur le div#contenu.

Mais quelle est la meilleure solution alors?

- display: table;
- l'ajout d'un div "spacer" (avec clear: both;)
- overflow: auto; sur le div#contenu

Merci en tout cas pour les explications.
le rouge a écrit :
Mais quelle est la meilleure solution alors?


Aucune idée ! Smiley lol

Enfin, le display:table c'est pas trop ça niveau support…

L'ajout d'un spacer marche bien pour une mise en page de type en-tête plus "colonnes" plus pied de page. À l'intérieur d'une zone de contenu, c'est dangereux. Cf l'article de Laurent Denis sur le sujet (lien donné par clb56).

L'overflow:auto vaut son pesant de cacahouètes, mais il faut faire attention si on l'applique à un élément doté de padding latéral (bug des anciennes versiosn de gecko, jusqu'à Firefox 1.0.7 inclus, donc).

Donc plutôt ces deux dernières solutions, à déterminer au cas par cas.
mpop a écrit :

L'overflow:auto vaut son pesant de cacahouètes, mais il faut faire attention si on l'applique à un élément doté de padding latéral (bug des anciennes versiosn de gecko, jusqu'à Firefox 1.0.7 inclus, donc).


Salut,
Il faut également faire attention avec avec IE, car la solution overflow:auto ne marche pas. Dans ta page, tu marques que c'est OK avec IE6, mais en fait l'overflow n'y est pour rien : c'est simplement parceque dans ce cas le conteneur est doté d'une largeur.

Tu peux vérifier sur cette page, avec IE6 : dans les trois cas ou le conteneur est doté de layout (hauteur, zoom ou largeur), l'image en {float:left} ne sort pas du conteneur. En revanche avec {overflow:auto} si Smiley confus
Modifié par Alan (18 Mar 2006 - 16:19)
Alan a écrit :
Il faut également faire attention avec avec IE, car la solution overflow:auto ne marche pas. Dans ta page, tu marques que c'est OK avec IE6, mais en fait l'overflow n'y est pour rien : c'est simplement parceque dans ce cas le conteneur est doté d'une largeur.


Boudiou mais c'est vrai, et le pire c'est que je le savais (hélas pas assez Smiley bawling ).
Bon, je rectifie tout ça !

Donc, pour un bloc doté d'une largeur fixe, un overflow: auto; sera parfait. Pour une hauteur fixe de type height: 1%;, attention à ne pas l'utiliser en conjonction avec un overflow: auto;, sinon bug en perspective (gros bug dans IE 5 me semble-t-il, pas forcément dans IE 6).

Si le bloc n'a pas de largeur fixe et qu'on ne veut/peut pas utiliser de spacer (clear: both; ou clear: left;), la propriété zoom: 1; marche bien, mais à partir de IE 5.5 uniquement à ce qu'il me semble.
Alors voilà, pour rectifier j'ai rectifié :

Cf http://web.covertprestige.info/test/03-elements-flottants-et-element-parent-1.html
Nouvelle version, sur 4 pages !

@ Alan : pour la quatrième page, je me suis permis de reprendre ce que tu avais fait (dans l'idée, disons).

Conclusions :
- si on a un bloc dont la largeur est fixe : on utilise un overflow: auto ou un spacer, suivant les besoins.
- si on a un bloc parent qui n'est pas lui-même flottant, et dont la largeur n'est pas fixe : on utilise soit un spacer, soit un overflow: auto doublé d'une propriété conférant le layout au bloc.
[code]overflow: auto;
zoom: 1; /* propriété MS pour IE Win */

Modifié par mpop (19 Mar 2006 - 02:06)