28172 sujets

CSS et mise en forme, CSS3

Bonjour à tous !

Mon site est coupé en trois parties :


<div id="header">
</div>
<div id="body">
</div>
<div id="footer">
</div>


Mon header fait 107px, et mon footer 15px.
Mon footer est callé en bas de page (le site n'est jamais plus grand qu'un écran)

Mon probleme est que je voudrais que mon div body prenne la hauteur complete entre mon header et mon footer pour pouvoir faire des vertical-align.

Quelqu'un a une idée de comment faire?

Merci d'avance !!
Modifié par lowkey (13 Mar 2008 - 12:07)
Bonjour et bienvenue parmi nous lowkey Smiley smile

En tant que modérateur, je me dois de te faire remarquer que tu n'as malheureusement pas respecté l'une des Règles de base du forum qui est d'afficher les codes et exemples proprement à l'aide des boutons [ code]... ici ton code HTML, CSS, PHP, etc.[ /code] (sans espace).

Je te remercie par avance de bien vouloir éditer ton message afin de le rendre conforme à cette règle. Smiley cligne

D'ailleurs, je rappelle que le lien qui apparaît en bandeau tout en haut du forum ("Nouveau sur le forum ?...") est important. Il contient des pistes de recherche, des indications sur les règles de vie de la communauté, etc.
Il serait courtois de ta part de bien vouloir en prendre connaissance.

Bonne continuation Smiley smile

upload/1-code.gif
Salut Benjamin.

Désolé pour le non respect des règles (habitude des forums codes-sources), je vais aller les lire immédiatement.
Bonjour,

lowkey a écrit :
le site n'est jamais plus grand qu'un écran

Cent balles que si. Smiley lol


lowkey a écrit :
Mon probleme est que je voudrais que mon div body prenne la hauteur complete entre mon header et mon footer pour pouvoir faire des vertical-align.

Ça veut dire quoi «pour pouvoir faire des vertical-align»? Tu veux que div#body prenne toute la hauteur de la zone de visualisation du navigateur en partant de 107px depuis le haut et jusqu'à 15px vers le bas? C'est possible en utilisant le positionnement absolu (mais pas compatible IE6, par contre), avec top: 107px; bottom: 15px;. Possible, mais pas des masses conseillé (vu que dans certains cas les pages ne tiendront pas dans l'espace ainsi dessiné par div#body.

Ce que je ferais plutôt:
1. Obtenir un centrage vertical de l'ensemble du contenu en passant par un tableau à une cellule pour la compatibilité IE. Cf. http://web.covertprestige.info/test/39-centrage-bloc-vertical-horizontal.html

2. Positionner le td global en relatif, et positionner l'en-tête et le pied de page en absolu...
... ah ben non, ça n'a pas l'air de marcher. Le positionnement fixe marche, bien entendu, mais apparemment l'utilisation du td comme référent pour le positionnement absolu ne fonctionne pas bien.

Bon ben je sais pas trop comment faire.

Une exemple qui marche à peu près avec le positionnement fixe (que je ne recommande pas particulièrement, d'ailleurs):
<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xml:lang="fr" xmlns="http://www.w3.org/1999/xhtml" lang="fr">

<head>
	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
	<title>Un bloc centré horizontalement et verticalement dans la page</title>
	<style type="text/css" media="screen">

	/* BASE POUR CENTRAGE VERTICAL */
	html {
		height: 100%;
	}
	body {
		height: 100%;
		margin: 0;
		padding: 0;
	}
	#page-table {
		height: 100%;
		width: 100%;
		border-collapse: collapse;
		text-align: center;
	}
	#page-td {
		height: 100%;
		padding: 0;
		vertical-align: middle;
	}

	/* POSITIONNEMENT DES PRINCIPAUX BLOCS */
	div#header, div#footer {
		position: fixed;
		left: 10%;
		width: 80%;
		background: yellow;
	}
	div#header {
		top: 0;
		height: 110px;
	}
	div#footer {
		bottom: 0;
		height: 30px;
	}
	div#body {
		margin: 120px 10% 40px 10%;
		padding: 100px;
		background: blue;
		text-align: left;
	}
	</style>
</head>

<body>
<table id="page-table"><tbody><tr><td id="page-td">

<div id="header">En-tête</div>

<div id="body"><p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Sed non risus. Suspendisse lectus tortor, dignissim sit amet, adipiscing nec, ultricies sed, dolor.</p></div>

<div id="footer">Pied de page</div>

</td></tr></tbody></table>
</body>
</html>
Salut Florent !
Merci pour ta réponse.

Tout d'abord :

a écrit :
lowkey a écrit :
le site n'est jamais plus grand qu'un écran


Cent balles que si. lol


Non, justement, toutes mes pages à insérer feront 10 lignes au maximum donc ça rentrera (un peu dans le style de eyeOS)

Ensuite, je n'utilise pas de table (choix personnel).

Et pour finir, MERCI !
a écrit :
C'est possible en utilisant le positionnement absolu (mais pas compatible IE6, par contre), avec top: 107px; bottom: 15px;

Ca répond totalement à ma questoin. J'ai cherché ça pendant une dixaine d'heure alors que c'était pas si compliqué que ça...
lowkey a écrit :
Non, justement, toutes mes pages à insérer feront 10 lignes au maximum donc ça rentrera (un peu dans le style de eyeOS)

Hmm... j'ai gagné cent balles, moi. Smiley smile
Fais-moi confiance si je te dis que non, ça ne rentrera pas forcément. Ça rentrera sans doute avec ta résolution et ta taille de texte par défaut. Mais ça ne rentrera peut-être pas sur l'écran d'un iPhone, sur un écran en 800x600, sur un écran de portable en 1280x800 pour peu que l'utilisateur ait configuré une taille de texte par défaut un peu trop grande, etc.

Je t'invite à tester ton site en 800x600 avec un ou deux niveaux d'agrandissement du texte (en faisant Ctrl-Plus dans Firefox par exemple). Si ça passe, ça devrait être bon pour les modes de consultation «classiques». Si ça ne passe pas, c'est une faiblesse, qu'il peut être intéressant de connaitre. Smiley cligne

lowkey a écrit :
Ensuite, je n'utilise pas de table (choix personnel).

Mauvais choix. Pas forcément dans ce cas-ci, mais dans l'absolu il n'y a pas de raison de bannir d'emblée une solution technologique. Il s'agit de faire des choix informés, pas de dire «les tables céleumal» parce qu'on l'a lu ici ou là (y compris sur Alsacréations, c'est vrai).

Lecture rapide:
http://blog.alsacreations.com/2007/03/06/335-coup-de-gueule-3-malefiques-tableaux

Bonne continuation. Smiley smile
Modifié par Florent V. (13 Mar 2008 - 12:40)