28173 sujets

CSS et mise en forme, CSS3

Bonjour à tous,

Je voudrais coller un footer en bas de page quelque soit la taille de la fenêtre et la longueur du texte.

Pour ça j'ai trouvé l'article suivant : http://pompage.net/pompe/pieds/ et cela fonctionne très bien avec le javascript.

Néanmoins mon site a une structure différente et je n'arrive pas à réaliser précisément ce que je souhaite.

Je m'explique avec un schéma :

<modération>Merci d'éviter les images de grande taille</>

http://www.hiboox.com/images/1007/e2463ce2.png

Comme on peut le voir j'ai un header, un footer coller en bas de la page et le "corps du site" qui est un fond qui se répète verticalement jusqu'au footer.
Le site est centré horizontalement et il possède un fond qui se répète horizontalement (le dégradé jaune / orange).

Le but étant de pouvoir coller le footer en bas de page et de répéter le fond (dégrade blanc / noir dans le corps) jusqu'à celui-ci.

Je n'y arrive pas du tout...

Voici le code html :

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Titre</title>
<link href="styles.css" rel="stylesheet" type="text/css" media="screen" />
<script type="text/javascript">
		<!--
		function getWindowHeight() {
			var windowHeight = 0;
			if (typeof(window.innerHeight) == 'number') {
				windowHeight = window.innerHeight;
			}
			else {
				if (document.documentElement && document.documentElement.clientHeight) {
					windowHeight = document.documentElement.clientHeight;
				}
				else {
					if (document.body && document.body.clientHeight) {
						windowHeight = document.body.clientHeight;
					}
				}
			}
			return windowHeight;
		}
		function setFooter() {
			if (document.getElementById) {
				var windowHeight = getWindowHeight();
				if (windowHeight > 0) {
					var contentHeight = document.getElementById('content').offsetHeight;
					var footerElement = document.getElementById('footer');
					var footerHeight  = footerElement.offsetHeight;
					if (windowHeight - (contentHeight + footerHeight) >= 0) {
						footerElement.style.position = 'relative';
						footerElement.style.top = (windowHeight - (contentHeight + footerHeight)) + 'px';
					}
					else {
						footerElement.style.position = 'static';
					}
				}
			}
		}
		window.onload = function() {
			setFooter();
		}
		window.onresize = function() {
			setFooter();
		}
		//-->
		</script>
</head>

<body>
<!-- centrage de la page -->
<div id="page">

	<!-- le header -->
	<div id="header"><img src="images/header.png" alt="header" /></div>
	
	<!-- le corps -->
	<div id="corps">			
	<p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Nullam rutrum commodo elit. Cras in libero. Donec vitae orci vel metus dictum ultrices. Proin dolor augue, ultrices id, elementum et, consequat nec, nisi. Curabitur purus eros, commodo quis, mattis in, lacinia placerat, lacus. Donec consequat mauris luctus ante. In nulla urna, consequat tincidunt, tristique quis, posuere et, lectus. Suspendisse dignissim fringilla enim. Nulla non dui nec justo tristique tincidunt. Fusce mollis placerat libero. Sed tortor. Curabitur nibh pede, convallis vestibulum, blandit cursus, molestie quis, turpis. Suspendisse potenti. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Mauris ornare lorem ut arcu.</p>		
	</div>
	<!-- fin du corps -->
	
	<!-- le footer -->
	<div id="footer"></div>

</div>
<!-- fin du centrage de la page -->

</body>
</html>


et le CSS :
/* ------ GENERAL ------ */

* { margin:0px; padding:0px; }

body {	
	text-align:center;	
	font:11px Tahoma, Geneva, Arial, Helvetica, sans-serif;	
	background:url(images/fond-page.png) repeat-x;
	background-color:#1a1f22;
}

#page {
	width:990px;
	margin:0px auto;
	text-align:left;
	background:url(images/fond-site.png) repeat-y;
	background-color:#CCCCCC;
}

/* ------ HEADER ------ */

#header {
	width:990px;
	height:238px;	
}

/* ------ CORPS ------ */

#corps {
	width:990px;	
	height:auto;	
	float:left;
	display:inline;	
}

/* ------ FOOTER ------ */

#footer {
	background:url(footer.png) no-repeat;
	width:990px;
	height:96px;	
	position:relative;
	bottom:0;
}


PS : pour plus de clareté je peux heberger ces pages web Smiley cligne

Merci d'avance de votre aide Smiley cligne
Modifié par Snoopy17 (12 Mar 2007 - 18:56)
Bonjour,

Le tutoriel qui va bien :
Page sur toute la hauteur de la fenêtre, avec pied de page en bas.

Au passage : attention à bien lire le petit avertissement. Smiley cligne


Edit : la solution que je propose dans ce tutoriel est d'ailleurs la même que celle proposée dans la première partie de l'article de Bobby van der Sluis sur Pompage, à une différence de taille près : je n'utilise pas de Hack CSS peu fiable, mais un commentaire conditionnel qui va bien.

Je n'ai jamais exploré la deuxième solution proposée, à base de Javascript. Donc je ne peux pas dire si elle est fiable ou pas.
Modifié par Florent V. (10 Mar 2007 - 12:19)
Bonjour,

Merci Florent je suis arrivé à positionner le footer en bas de page.
Mais dans mon corps principal je souhaite avoir ceci :
http://www.hiboox.com/vignettes/1007/653788eb.png

Mettre un menu et un bloc de texte dans le corps et que le footer reste toujours en bas. Si le menu s'allonge alors le footer devrait descendre, et si le bloc s'allonge lui aussi alors le footer devrait descendre lui aussi.

Cependant voila ce qui se passe sous FF si le menu s'allonge :
http://www.hiboox.com/vignettes/1007/98a0509c.png

Le menu passe sous le footer et uniquement sur Firefox Smiley ohwell
Je positionne mon menu en float:left; avec un display:inline; (même chose pour mon bloc) dans une div #corps.

Voici le code css :
/* ------ GENERAL ------ */

* { margin:0px; padding:0px; }

html, body {	
	text-align:center;	
	font:11px Tahoma, Geneva, Arial, Helvetica, sans-serif;
	color:#ffffff;	
	background:url(images/fond_page_site.png) repeat-x;
	background-color:#1a1f22;
	height:100%;
}

#page {
	width:990px;
	margin:0px auto;
	text-align:left;
	background:url(images/fond-corps.png) repeat-y;
	position:relative;
	min-height:100%;
	height:100%;
    voice-family:"\"}\"";
    voice-family:inherit;
    height:auto;	
}

/* ------ HEADER ------ */

#header {
	width:990px;
	height:243px;	
}

/* ------ CORPS ------ */

#corps {
	width:990px;
	padding-bottom:96px;	
}

/* ------ MENU ------ */

#menu {
	width:185px;	
	margin:0px 0px 0px 160px;
	float:left;
	display:inline;	
}

#titre-menu1 {
	width:185px;
	height:20px;
	background:url(images/menu1.png) no-repeat;
	padding:11px 0px 0px 0px;
	text-align:center;
	font:15px Verdana, Arial, Helvetica, sans-serif;
}

#titre-menu2 {
	width:185px;
	height:20px;
	background:url(images/menu2.png) no-repeat;
	padding:11px 0px 0px 0px;
	text-align:center;
	font:15px Verdana, Arial, Helvetica, sans-serif;
}

#titre-menu3 {
	width:185px;
	height:20px;
	background:url(images/menu3.png) no-repeat;
	padding:11px 0px 0px 0px;
	text-align:center;
	font:15px Verdana, Arial, Helvetica, sans-serif;
}

#menu ul {
	list-style:none;
	margin:0px 0px 15px -4px;
}

#menu li {
	background:url(images/fond-lien-menu_liste.png) no-repeat;
	height:19px;
	padding:6px 0px 0px 40px;
}

/* ------ BLOC ------ */

#bloc {
	width:530px;	
	float:left;
	display:inline;	
}

/* ------ FOOTER ------ */

#footer {
	background:url(images/footer_site.png) no-repeat;
	width:990px;
	height:33px;
	position:absolute;
	bottom:0;
	font-weight:bold;
	padding:63px 0px 0px 0px;
	text-align:center;
}


le code html :
<!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="corps-Type" corps="text/html; charset=iso-8859-1" />
<title>Titre</title>
<link href="styles.css" rel="stylesheet" type="text/css" media="screen" />
</head>

<body>

<!-- centrage de la page -->
<div id="page">

	<!-- le header -->
	<div id="header"><img src="images/header.png" alt="header" /></div>
	
	<!-- le corps -->
	<div id="corps">
	
		<!-- le menu -->
		<div id="menu">
		
			<!-- menu vert -->
			<div id="titre-menu1"><h5>MENU</h5></div>
			<ul>
				<li><a href="#">Lien N°1</a></li>
				<li><a href="#">Lien N°2</a></li>
				<li><a href="#">Lien N°3</a></li>
				<li><a href="#">Lien N°4</a></li>
				<li><a href="#">Lien N°5</a></li>
			</ul>
			
			<!-- menu orange -->
			<div id="titre-menu2"><h5>MENU</h5></div>
			<ul>
				<li><a href="#">Lien N°1</a></li>
				<li><a href="#">Lien N°2</a></li>
				<li><a href="#">Lien N°3</a></li>
				<li><a href="#">Lien N°4</a></li>
				<li><a href="#">Lien N°5</a></li>
			</ul>
			
			<!-- menu jaune -->
			<div id="titre-menu3"><h5>MENU</h5></div>
			<ul>
				<li><a href="#">Lien N°1</a></li>
				<li><a href="#">Lien N°2</a></li>
				<li><a href="#">Lien N°3</a></li>
				<li><a href="#">Lien N°4</a></li>
				<li><a href="#">Lien N°5</a></li>
			</ul>		
		
		</div>
		<!-- fin du menu -->
		
		<!-- le bloc -->
		<div id="bloc">		
		<p>Lorem Lorem Lm Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem</p>
		<p>Lorem Lorem Lm Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem</p>
		<p>Lorem Lorem Lm Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem</p>
		<p>Lorem Lorem Lm Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem</p>
		<p>Lorem Lorem Lm Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem</p>
		<p>Lorem Lorem Lm Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem</p>
		</div>
		
	</div>	
	<!-- fin du corps -->
	
	<!-- le footer -->
	<div id="footer">2222222</div>

</div>
<!-- fin du centrage de la page -->

</body>
</html>


et une démo ici

Merci d'avance Smiley smile
Modifié par Snoopy17 (11 Mar 2007 - 12:16)
Il me semble qu'il y a une confusion entre deux choses differentes:

1. placer un footer toujours en bas de la FENETRE
2. placer un footer toujours en bas de la PAGE

Dans le premier cas c'est la solution du site de pompage avec un zest de js et effectivement comme le footer est toujours en bas de la fenêtre forcément si il y a du contenu qui est plus grand que cette fenêtre, le footer vient par dessus, ce n'est pas un probléme, c'est l'effet recherché par cette méthode...
Dans le deuxiéme C'est beaucoup plus simple il suffit de mettre son footer a la fin du contenu et de lui mettre clear:both, pour qu'il vienne systématiquement se mettre sous l'élement le plus grand du document. bien sur il ne faut pas placer les élement du contenu en absolu mais en float pour que ça marche.
Modifié par matmat (11 Mar 2007 - 23:28)