28172 sujets

CSS et mise en forme, CSS3

Bonjour la communauté !

J'ai pourtant tenté de faire quelque chose de propre.
Voilà, je tente de structurer les différentes <div> qui construiront les zones de mon site.
J'ai donc crée :

- Une div qui contient toutes les autres.
- Je lui ai donné un "width", un "height" auto et une position "relative".

- Toutes mes autres div, contenues dans celle-ci, sont en position "absolue". Or il s'avère que rien ne fonctionne comme je le veux. Je sais qu'il me retravailler le principe des <div>, plus que je ne le pensais.

Je vous présente mon code HTML et CSS, merci d'avance à celui ou celle qui pourrait m'aiguiller un peu sur l'absurdité qui ne prend même pas la peine de se cacher.

<body>
    	<div id="grandconteneur">
    	
        	<div id="entete">
            	<a href="http://www.test.fr/"><img class="logo" src="img/enseigne.png" alt="" title="retour accueil"></img></a>
                <h1 class="titre"> test </h1>
                <div id="intranet"><p class="test"> Test </p> </div>
            </div>
            
            
            <div id="corps">
            
            	<div id="leftmenu">
            		<div id="menu1">test <br /> test</div> 
            		<div id="menu2"> 
            			<div id="hautmenu2"></div>
            			<div id="centremenu2"></div>
            			<div id="basmenu2"></div>
            		</div>
            		
            	<div id="bloc2">
            	</div>
            	
            	<div id="centre"></div>
            	
            	<div id="rightcontent">
            	</div>
        	</div>

        	<div id="pied"> test
        	</div>
        </div>
	</body>


body {
	background-color:#F1FFEE; 
     }
     
    div#grandconteneur {
	height : auto;
	width : 960px;
	position:relatif;
	margin-right: auto;
	margin-left: auto;
	background-color:orange;
	}

	div#entete {
	height: 146px;
	width: 960px;
	background-color:#5ea34b;
	position:absolute;
	}
	
	a{
	text-decoration:none;
	}
	
	div#intranet {
	position:absolute;
	float:right;
	margin-top: -117px;
	height:133px;
	width:142px;
	background-image:url(img/intranet.png);
	}
	
	.logo {
	height:130px;
	width:127px;
	float:left;
	}
	
	.titre {
	heigth: 200px;
	width: 460px;
	margin-right: 100px;
	margin-left: 250px;
	paddind: 0px;
	text-align: center;
	
	}
	
	.test {
	height: 26px;
	width: 90px;
	style-font:arial;
	font-size:27px;
	color:#FFFFFF;
	margin-top:10px;
	margin-left:50px;
	}
	
	div#corps {
	position:absolute;
	height:auto;
	width : 960px;
	margin-top: 146px;

	}
	
	div#leftmenu{
	width:189px;
	position:absolute;
	float:left;
	padding:30px 0 0 30px;
	background-color:purple;
	}
			
	div#menu2 {
		
	}
	
	div#bloc3 {
	height: 28px;
	width: 605px;
	position:absolute;
	font-size: 19px;
	background-color:#ffdd54;
	margin-left:auto;
	margin-right:auto;
	}
	
	div#centre{
	height:100px;
	width:548px;
	position:absolute;
	margin-top:10px;
	background-color:red;
	margin-left: 40px;
		
	}
	
	
	div#rightcontent {
	}
	
	div#pied {
	height:34px;
	width: 960px;
	background-color: #brown;
	position-relative;
		}
	
	
	
  </style>
Hola PapyRuS,

Ne désespère pas, ça va venir ! Par contre, une petite relecture de ton code s'impose Smiley smile
Par exemple, tu n'as pas fermé ton bloc "grand conteneur" dans ton html, ce qui est très important. Ton bloc "leftmenu" englobe également "bloc2", "centre" et "rightcontent", ce
qui n'est pas voulu, je pense !

Dans ton css, #grandconteneur est en "position:relatif;", ce qui n'existe pas, la syntaxe correcte est "position: relative;". A partir de là, tous les blocs englobés par
"grandconteneur", si positionnés en absolute, prendront ce dernier comme repère (si il est leur dernier parent positionné).

Sur ton div #intranet, qui est positionné en absolute, tu utilise un float: right, qui est un positionnement flottant, et pas absolu. Lors d'un positionnement en relatif ou en absolu,
il faut utiliser la syntaxe : top / right / bottom / left. Par ex : right: 150px; placera ton bloc à 150px du bord droit (ou right: 0; si tu veux que ton élément soit "collé" ) de son dernier parent positionné.

Petite erreur de syntaxe pour ton bloc .titre : padding et non paddind, et height et non heigth (fautes de frappe, bien relire le code ! Smiley smile )

Pour ton pied de page : background-color: brown et non background-color: #brown; le # étant réservé à la correspondance hexadécimale d'une couleur.

Voici un article qui pourra t'aider pour le positionnement (tu utilise beaucoup le positionnement absolu ici, il n'est pas toujours nécessaire) :

http://www.alsacreations.com/article/lire/53-guide-de-survie-du-positionnement-css.htm

En attendant, voici quelques modifications (loin d'être parfaites, mais le temps me manque) :


        <div id="grandconteneur"> 
            <div id="entete"> 
                <a href="http://www.test.fr/"><img class="logo" src="img/enseigne.png" alt="" title="retour accueil"></img></a> 
                <h1 class="titre"> test </h1> 
                <div id="intranet">
					<p class="test"> 
						Test
					</p>
				</div> 
            </div> 
             
            <div id="corps"> 
			
                <div id="leftmenu"> 
                    <div id="menu1">
					test <br /> test
					</div>  
                    <div id="menu2">  
                        <div id="hautmenu2">
						</div> 
                        <div id="centremenu2">
						</div> 
                        <div id="basmenu2">
						</div> 
                    </div> 
                </div>  
				
                <div id="bloc2"> 
                </div> 
                 
                <div id="centre">
				</div> 
                 
                <div id="rightcontent"> 
                </div> 
				
			</div> 
		</div>
		<div id="pied"> 
		test 
        </div> 


et le CSS :


body 
{ 
background-color:#F1FFEE;  
} 
	 
a
{ 
text-decoration:none; 
} 
      
    div#grandconteneur { 
    width : 960px; 
    position: relative; 
    margin: auto;
    background-color:orange; 
    } 
 
		div#entete { 
		height: 146px; 
		width: 960px; 
		background-color:#5ea34b; 
		position:absolute;
		top: 0;
		} 

			.logo { 
			height:130px; 
			width:127px; 
			float:left; 
			} 
		
			.titre { 
			height: 200px; 
			width: 460px; 
			margin-right: 100px; 
			margin-left: 250px; 
			padding: 0px; 
			text-align: center; 
			} 
		 

			div#intranet { 
			position:absolute; 
			top: 0;
			right: 0;
			height:133px; 
			width:142px; 
			background-color: red;
			} 
		
				.test { 
				height: 26px; 
				width: 90px; 
				font-style: arial; 
				font-size:27px; 
				color:#FFFFFF; 
				margin-top:10px; 
				margin-left:50px; 
				} 
		 
		div#corps { 
		position:absolute; 
		height:auto; 
		width : 960px; 
		margin-top: 146px; 
		} 
		 
			div#leftmenu{ 
			width:189px; 
			position:absolute; 
			float:left; 
			padding: 30px 0 0 30px; 
			background-color: purple; 
			} 
					 
				div#menu2 { 
				/*vide*/	
				} 
				 
			div#bloc3 { /* c'est bloc2, je pense, je te laisse corriger et le placer à ta guise */
			height: 28px; 
			width: 605px; 
			position:absolute; 
			font-size: 19px; 
			background-color:#ffdd54; 
			margin-left:auto; 
			margin-right:auto; 
			} 
			 
			div#centre{ 
			height: 465px; /* généralement, pas de height ici, c'est ton contenu qui régit la hauteur de ton bloc */
			width: 741px; 
			position:absolute; 
			top: 0;
			left: 219px;
			background-color:red; 
			} 
			 
			div#rightcontent { 
			} 
     
    div#pied { 
    height: 34px; 
    width: 960px; 
    background-color: brown; 
	position: absolute;
	bottom: 0;
	margin: auto;
	left: 50%;
	margin-left: -480px;
    } 


Tu n'es pas obligé d'indenter ce dernier, mais je trouve cela bien plus lisible et pratique, surtout quand ta feuille de style s'étend sur plusieurs centaines de lignes.

Pour positionner correctement ton pied de page en bas de page, je te conseille cette technique (que je n'ai pas suivi dans mon code, mais qui fonctionne parfaitement) :

http://www.cssstickyfooter.com/

Bon courage, et c'est en travaillant qu'on progresse !!

Larry
Oups,
j'ai oublié ma question !
Si quelqu'un pouvait m'éclairer sur un point, ce serait formidable.

> Pourquoi ma div "pied" n'est-elle pas collée au bas de la div qui la contient ?

Merci d'avance Smiley cligne

Edit : Je viens de voir une réponse, je m'empresse de la relire.
Modifié par PapyRuS33 (14 Feb 2011 - 18:19)
Merci à toi.
J'ai changé par ton css et tout fonctionne Smiley cligne

Ps : j'avais déjà retravaillé mon html et je suis content de voir qu'on avait la même chose.
Merci beaucoup Smiley cligne
++
Modifié par PapyRuS33 (14 Feb 2011 - 18:29)