28172 sujets

CSS et mise en forme, CSS3

Bonjour a tous...

**EDIT Allez directement à mon dernier message tout le reste est inutile


Bon je pensais avoir enfin compris toutes les subtilités des positions après avoir lu la doc sur votre site... Mais il faut croire que non. Si quelqun pouvais m'aider ou m'expliquer je bloque et ca me rend fou lol Smiley smile

L'idée:

On a un fond motif sur le body.

On a un div degrade qui est fixé en haut et passe derrière tout le reste.

Ensuite viens un menu fluide qui s'adapte à la taille de la fenetre.

Puis le contenu en dessous que j'aimerai centrer,

et enfin le pied avec une couleur de fond différente qui cache le motif; que j'aimerai au choix:
-faire soit s'agrandir comme la fenêtre,
-soit être collé en bas de page; mais alors ne pas remonter par dessus le contenu.
(je n'arrive ni l'un ni l'autre pour le moment, pourtant dans d'autre situation j'y arrive sans souci)

Voila la situation html:

<body> pos:Relatif

<div id="degrade"></div> pos:Fixed

<div id="content">

       <div id="entete"> pos:Relatif
            <div id="col_gauche">
               <div id="logo"></div>
               <div id="menu_fond"></div>      
           </div>  
           <div id="inscription"></div>
       </div>

      <div class="clear"></div>   
   
      <div id="contenu"></div> pos:Relatif
      
      <div id="pied"></div> pos:Relatif
     
</div>

</body>


Bon déjà je n'arrive pas à centrer mon contenu;
margin:auto n'as aucun effet; j'ai donc mis margin left 20% ce qui passe graphiquement..
mais j'aurai bien aime comprendre ce qui cloche, pour la forme.

Et deuxieme grosse difficulté: le pied de page.

Tel qu'il est la il ne s'agrandis pas en hauteur, il reste coller en dessous de mon contenu à la taille de son contenant. Si la fenetre du navigateur est agrandi au dela de la taille du contenant du pied le motif du body reapparait en dessous le pied.

Si je le met:
-en absolute height:100%
-ou height:100% pour le div#content
-ou encore si je le place le div#pied après mon div#content, en relative 100% ,

Alors j'optiens le résultat voulu il s'agrandis, seulement le problème est qu'il deviens immense, en plus de la taille de son contenant, il semble ajouter la taille du reste de la page ayant un contenu, ou quelquechose du style. Ce qui fait que je me retrouve avec une immense zone vide (noir en l'occurence vu que c'est la couleur de fond du pied) après le contenant du pied.

pour plus de detail voici mon css:

/* CSS Document RAMACI GENERAL*/

/*--------------RESET--------------*/
html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, font, img, ins, kbd, q, s, samp, small, strike, sub, sup, tt, var, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td {
	margin: 0;
	padding: 0;
	border: 0;
	outline: 0;
	font-weight: inherit;
	font-style: inherit;
	font-size: 100%;
	font-family: inherit;
	vertical-align: baseline;
	list-style:none;
} 


html, body{ 
	background:url(IMG/motif.gif) repeat;
	height:100%;	
	width:100%;  
	position:relative;
}
div#degrade{
	background:url(IMG/motif_deg.gif) repeat-x; 	
	position:fixed; 
	top:0px; 
	height:444px;	
	width:100%; 
}
div#content{ 
}
div.clear {
	clear: both;
}
/*--------------ENTETE--------------*/
div#content div#entete{ 
	position:relative;
	z-index:20;
}
div#content div#entete div#col_gauche{ 
	height: 126px;
	width: 100%;
	float: left;
	margin-right: -255px; 
}
div#content div#entete div#col_gauche div#logo{ 
	float:left; 
	height:126px;
	width:243px;
}
div#content div#entete div#col_gauche div#menu_fond{ 
	background:url(IMG/fond_entete.png) repeat-x;
	height:126px;
	margin-left:243px;
}
div#content div#entete div#inscription{  
	background:url(IMG/inscription.png) no-repeat; 
	float:right;
	width:255px;
	height:124px;
}
/*--------------CONTENU--------------*/

div#content div#contenu{
	position:relative;
	z-index:10;
	margin-left:20%;
}
/*--------------PIED --------------*/
div#pied{
	position:relative;
	background:#26221f url(IMG/deg_noir.gif) repeat-x;
	width:100%;
	height:100%;
}


Voila en espérant que c'est pas trop compliqué pour motivé une petite réponse d'un expert ^^..

Soit pour ne plus avoir cette taille de pied immense, soit autre solution à la rigeur le fixer en bas en absolute à la rigeur, mais alors qu'il ne passe pas pardessus le contenu si on reduit la taille de la fentêtre alors.

Cordialement, Casp.
Modifié par casp (21 Oct 2009 - 20:36)
Salut,

Déjà à voir les commentaires que tu as mis dans ton code concernant le positionnement, je pense que tu cherche trop à positionner tout tes différents éléments, hors il vaut mieux globalement les laisser dans le flux, ce qui évite beaucoup de désagréments de mise en page
Un peu de lecture sur le positionnement :
Initiation au positionnement en CSS
Initiation au positionnement CSS (partie 2)

Concernant le pied de page en bas du conteneur, un peu de lecture ici aussi :
Comment positionner un texte ou un bloc au bas d’un conteneur?

En souhaitant que cela te donne déjà de bonne pistes pour avancer. Smiley cligne
Bonjour,

Quelques pistes, si cela peut aider:
Centrage du div#contenu:
ce div n'a pas de largeur, donc il prend toute la largeur de son ancêtre (#content) qui n'en n'a pas non plus, donc celle de body qui est de 100%.
J'ai essayé ceci (FF3.0):

/*--------------CONTENU--------------*/
/* div#content div#contenu 
  {position:relative; z-index:10; margin-left:20%; background: #0000FF} */
div#content div#contenu
  {position:relative; z-index:10; width: 80%; margin: 0px auto 0px auto; background: #0000FF}


Pied de page:
En plus des lectures de Mikachu et dans le même sens:
pour que le pied soit en bas du dégradé, il faut le mettre dans le div#degrade:

<body> <!-- pos:Relatif -->
  <div id="degrade">
    <div id="pied">Pied</div>
  </div> <!-- pos:Fixed -->
  <div id="content">         
    <div id="entete"> <!-- pos:Relatif -->             
      <div id="col_gauche">
        <div id="logo">Logo</div>
        <div id="menu_fond">Menu</div>
      </div>
      <div id="inscription">Inscription</div>
    </div>
  <div class="clear"></div>
  <div id="contenu">texte du contenu</div> <!-- pos:Relatif -->
<!--  <div id="pied">Pied</div> -->
  </div>
</body> 


en le positionnant en bas de son conteneur ancêtre (div#degrade):

/*--------------PIED --------------*/
/* div#pied
  {position:relative; background: #26221f; width:100%; height:100%; } */
div#pied
  {position:absolute; bottom: 0px; background: #26221f; width:100%}


En tout cela donne:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 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>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <meta name="language" content="fr" />
    <meta http-equiv="Content-Language" content="fr" />
    <link rel="stylesheet" type="text/css" href="style.css" media="screen" />

</head>
<body> <!-- pos:Relatif -->
  <div id="degrade">
    <div id="pied">Pied</div>
  </div> <!-- pos:Fixed -->
  <div id="content">         
    <div id="entete"> <!-- pos:Relatif -->             
      <div id="col_gauche">
        <div id="logo">Logo</div>
        <div id="menu_fond">Menu</div>
      </div>
      <div id="inscription">Inscription</div>
    </div>
  <div class="clear"></div>
  <div id="contenu">texte du contenu</div> <!-- pos:Relatif -->
<!--  <div id="pied">Pied</div> -->
  </div>
</body> 
</html>


et


/* nom   : style.css                                        */
/* CSS Document RAMACI GENERAL*/
/*--------------RESET--------------*/
html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, font, img, ins, kbd, q, s, samp, small, strike, sub, sup, tt, var, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td 
{margin: 0; padding: 0; border: 0; outline: 0; font-weight: inherit; font-style: inherit; font-size: 100%; font-family: inherit; vertical-align: baseline;     list-style:none; color: #FF0000}
html, body
  {background: #606060; height:100%; width:100%}
div#degrade
  {position: fixed; top: 0px; background: #80FFFF; height:444px; width:100%;}
/* div#content{  } */
div.clear
  {clear: both}
/*--------------ENTETE--------------*/
div#content div#entete
  {position:relative; background: #A0A0A0}
div#content div#entete div#col_gauche
  {height: 126px; width: 100%; float: left; margin-right: -255px; background: #FF0000}
div#content div#entete div#col_gauche div#logo
  {float:left; height:126px; width:243px; background: #800000}
div#content div#entete div#col_gauche div#menu_fond
  {background:url(IMG/fond_entete.png) repeat-x; height:126px; margin-left:243px; background: #008000}
div#content div#entete div#inscription
  {background:url(IMG/inscription.png) no-repeat; float:right; width:255px; height:124px; background: #000080}
/*--------------CONTENU--------------*/
/* div#content div#contenu 
  {position:relative; margin-left:20%; background: #0000FF} */
div#contenu
  {position:relative; width: 80%; margin: 0px auto 0px auto; background: #0000FF}
/*--------------PIED --------------*/
/* div#pied
  {position:relative; background: #26221f; width:100%; height:100%; } */
div#pied
  {position:absolute; bottom: 0px; background: #26221f; width:100%}


avec cet aspect (FF3.0)

upload/19451-EcranModif.png

Etait-ce cela que tu recherchais?
Salut,
déjà merci pour vos réponses


** EDIT **
Je laisse une partie de la reponse.. mais vous pouvez zapper le problème est désormais clair et identifié voir message suivant.
**


Smiley murf mais...

@ Mikachu
Les positions que je met sont à priori toutes justifié.
Le degradé etant fixed en haut. Il doit passer en dessous du contenu que je dois positionner donc en relatif. Et vu que en plus au sein de mon contenu j'ai des z-index à gérer (le menu fait se deplier au survol des jolies petits parchemins d'information devant passer au dessus du contenu qui se trouve après l'entete). Donc de nouveau relatif obligé il me semble. Je pourrai suppriemr le relatif du body qui me sert à rien... mais c'etait un test.
Je vais relire la doc encore ^^... on decouvre toujours de nouveau truc ou redecouvre plustôt.. Mais a priori je sais déjà tout ce qu'il y a ecris.

@Sellig
Alors pour le centrage nickel, merci... effectivement j'avais complètement zapper d'indiquer un width, bête de ma part ! J'aimerai que mon histoire de pied soit aussi simple Smiley langue ...

Mais hélas pour le pied tu as mal compris, je n'ai sans doute pas été clair:

Cas 1 -il doit soit débuter en bas du contenu pour se prolonger jusqu'en bas et suivre l'agrandissement de fenetre du navigateur. (l'idéal)

Cas 2- Ou simplement être attaché en bas de la fenetre du navigateur (mais dans ce cas la ne pas se supperposer au contenu si la taille de la fenetre navigateur est inférieur à la taille du contenu.)
Modifié par casp (21 Oct 2009 - 20:41)
Bon j'y perd mon latin...

Alors la question est devenu très simple.
Comment faire un div de hauteur 100% mais qui prenne en compte la taille du contenu le précedent ?

Voici le code à tester:

html, body{ 
	background:#333366;
	color:#FFF; 
	font-family:Verdana, Arial;	
	font-size:12px;	
	margin:0;
	padding:0;
	height:100%;
}
p{
	background-color:#FF4400;
	margin:0;
	padding:0;
   height:25px;
}
#pied{
	background-color:#26221f;
	margin:0;
	padding:0;
	height:100%;
}



<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>	
<link rel="stylesheet" type="text/css" href="CSS/styles_TEST.css" media="screen"/>
</head>

<body>
	 <p> ESSAI </p>    
	<div id="pied"> LE PIED </div>    
</body>

</html>


Actuellement quand je fait cela; mon pied de page prend 100% + la hauteur du p.
Il fait donc apparaitre une scrollbar ....

Je n'avais jamais été confronter à cela...
Comment lui faire comprendre que c'est 100% à partir de la ou il est. Et pas 100% de la taille de la fenetre ?
Modifié par casp (21 Oct 2009 - 22:29)
La scrollbar apparait à cause du margin qu'il y a sur la balise p... Ajoute ceci pour voir :

p { margin: 0; }
Non change rien.
J'edit le code du précedent message en fonction de ta remarque. Mais y'a toujours la scrollbar.. La taille des margin du p en moins soit ... Mais le problème reste le même.
Tester chez vous vous allez voir ... Un beau casse tête.

C'est fou que je me soit jamais appercu d'un truc aussi enorme .. ya quelquechose qui m'echappe dans cette histoire de 100% ^^....
Modifié par casp (21 Oct 2009 - 22:24)
Alors ma dernière trouvaille..
Dans le test présent si
#pied{height:96%;}


Mais bon .... ? C'est saoulant de tester chaque valeur, et surtout dans le cas d'un site dynamique .. Bah ca marche pas vu la taille de du contenu varie...

Bon après mûre réflexion je m'avous vaincu ...
Il semble que c'est une impossibilité du CSS..

Dans le cas de colonne en float; si on a une premiere colonne gauche de 100px;
on peux utilise margin-right:-100px; sur la colonne droite de width:100% Ce qui fonctionne.

Mais dans le cas de la hauteur, le margin-bottom:-""px ne fonctionne pas.

Sinon je m'etais dis qu'avec du javascript il y aurait eu moyen de calculé la taille du contenu et ensuite de modifier le margin-bottom du pied...
Mais non même pas..

Bon he bien tans pis il vas me falloir envisager une autre facon de voir mon site Smiley ohwell

J'éspère qu'un jour dans l'evolution du web on verra une balise qui prend en compte le pourcentage-total moins la taille des élements du flux. Ca ouvrirai pleins de porte.


Sinon Concrêtement pour mon problème je pense avoir une solution quand même Smiley smile
Je vais rajouter un div contenant; et puis ce que le body veux apparaitre en bas de la page, he bien je vais le laisser faire.
Je vais mettre la couleur de fond du pied au body.
Et le degradé je vais essayer de le mettre sur un autre div qui lui ne soit pas 100%.. d'ailleurs je sais pas pourquoi j'y ai pas pensé avant ^^..

Si quelqun peux me dire ou faire pour moi la petite balise resolu devant mon fil ; ce serait sympa.
Modifié par casp (22 Oct 2009 - 00:37)