28172 sujets

CSS et mise en forme, CSS3

Pages :
Bonjour.

Voilà, je tente d'accorder ensemble un div top qui a pour height 120px et un div field qui a pour height 100%. Evidemment, sous firefox en tout cas, la dimension du div field n'est pas "le reste libre de l'écran" mais l'écran (100%) + 120px. Ce qui fait que je me retrouve avec un champs field de 100%+120px.

Comment accorder ces deux oiseaux ?

Voici mon code HTML :

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">
<head>
  <title>Fragments</title>
<style type="text/css" media="screen">
@import url( style.css );
</style>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>

<body>
<div class="top">
	<div id="logo"></div>
	<div id="france"></div>
</div>

<div class="field">
	<div id="text">
	Paris change! mais rien dans ma mélancolie<br/>
	N'a bougé! palais neufs, échafaudages, blocs,<br/>
	Vieux faubourgs, tout pour moi devient allégorie<br/>
	Et mes chers souvenirs sont plus lourds que des rocs.<br/>
	 
	Aussi devant ce Louvre une image m'opprime:<br/>
	Je pense à mon grand cygne, avec ses gestes fous,<br/>
	Comme les exilés, ridicule et sublime<br/>
	Et rongé d'un désir sans trêve! et puis à vous,<br/>
	 
	Andromaque, des bras d'un grand époux tombée,<br/>
	Vil bétail, sous la main du superbe Pyrrhus,<br/>
	Auprès d'un tombeau vide en extase courbée<br/>
	Veuve d'Hector, hélas! et femme d'Hélénus!<br/><br/>
	 
	Je pense à la négresse, amaigrie et phtisique<br/>
	Piétinant dans la boue, et cherchant, l'oeil hagard,<br/>
	Les cocotiers absents de la superbe Afrique<br/>
	Derrière la muraille immense du brouillard;<br/><br/>
	 
	A quiconque a perdu ce qui ne se retrouve<br/>
	Jamais, jamais! à ceux qui s'abreuvent de pleurs<br/>
	Et tètent la Douleur comme une bonne louve!<br/>
	Aux maigres orphelins séchant comme des fleurs!<br/><br/>
	 
	Ainsi dans la forêt où mon esprit s'exile<br/>
	Un vieux Souvenir sonne à plein souffle du cor!<br/>
	Je pense aux matelots oubliés dans une île,<br/>
	Aux captifs, aux vaincus!... à bien d'autres encor!
	</div>
</div>
</body>
</html>


Voici le CSS :
html,body {
	font:12px 'Lucida Grande', 'Gill Sans', Verdana, 'Trebuchet MS', Helvetica, sans-serif;
	background-image: url(img/flower.jpg);
	background-repeat: repeat;
	height: 100%;
	width: 100%;
	border: none;
	margin:0%;
	padding:0%;
}

#logo {
	background-image: url(img/paris.png);
	float: left;
	display: inline;
	width: 46px;
	height: 120px;
}

#france {
	background-image: url(img/france.png);
	background-repeat: no-repeat;
	float: left;
	display: inline;
	width: 615px;
	height: 114px;
}	

a:link {
	background-color:inherit;
	color:#FF9933;
}

a:visited {
	background-color:inherit;
	color:#FF9933;
}

a:hover {
	background-color:inherit;
	color:#FF6600;
}

#menu {
	background-color:transparent;
	color:#000;
	margin-left:20%;
	margin-right:20%;
}

#text {
	background-color:transparent;
	color:#000;
	float: left;
	margin-top: 2%;
	margin-left:6%;
	text-align:justify;
}

#title {
	background-color:transparent;
	color:#FF6600;
	margin-top:1%;
	text-align:center;
	font-variant:small-caps;
	text-decoration:underline; 
	font-weight: bold;
	font-size:16px;
}

#name {
	background-color:transparent;
	color:#fff;
	margin-left:80%;
	font-weight: bold;
}

.top {
	background-image: url(img/haut.png);
	background-repeat: repeat-x;
	float: center;
	width: 100%;
	height: 120px;
}

.prinh {
	background-image: url(img/prinhaut.png);
	width: 1200px;
	height: 15px;
}

.field {
	background-image: url(img/prin.png);
	background-repeat: repeat-y;
	width: 1200px;
	height: 100%;
	margin-left: auto;
	margin-right: auto;
}

.perso {
	background-image: url(img/perso.png);
	vertical-align: bottom;
	float: right;
	width: 472px;
	height: 656px;
}


Je suis amateur, merci de m'expliciter le plus possible ce que vous voulez dire ^^!

Cordialement !
Modifié par csm (08 Feb 2011 - 11:58)
Bonjour,

Première chose à faire : enlever le prologue XML, totalement inutile, puisque tu sers ton XHTML en text/html et qui va faire basculer IE en mode quirks.
Laurie-Anne a écrit :
Première chose à faire : enlever le prologue XML, totalement inutile, puisque tu sers ton XHTML en text/html et qui va faire basculer IE en mode quirks.

IE 6 seulement en ce qui concerne le prologue XML. Smiley cligne
J'ai procédé selon les conseils de Mabelle. J'ai ajouté dans mon css :

#global {
	height: 100%;
}


Et dans ma page html :


<body>
<div id="global">
... ...
</div>
</body>


Mais mon div "field" occupe toujours 100% + 120 px (120 px étant le div top) ? Ou bien ai-je mal compris ?
Bonjour, une fois que tu as appliqué une hauteur de 100% à la div "global"
(ou plutôt min-height:100% ) , n'affecte plus de hauteur à ta div "field" ...

min-height affectera une hauteur de 100% SI la hauteur du contenu n'est pas suffisante, ce qui paraît ne pas être le cas (sur cette page du moins)
J'ai tenté les diverses combinaisons possibles.

En affectant
#global { height: 100%; }
et en supprimant
height: 100%
de ma div field, tout disparaît. ( de même avec min-height: 100% pour "global").

min-height : 100%
dans "global" fait, quoi qu'il en soit, tout "disparaître", avec ou sans
height:100%
dans ma div field.

J'ai lu beaucoup de sujets sur les problèmes avec height. Mais je n'ai toujours pas de solution.
Je pense qu'il s'agit clairement d'un problème de compatibilité entre l'utilisation d'un valeur height: 120px dans mon div "top" et d'une valeur en pourcentage dans mon div field.

J'ai tenté diverses configuration, par exemple height: 16% dans "top" et height: 84% dans "field". Mais évidemment ça ne s'ajuste pas parfaitement, il y a un espace dans les deux div.

Comment concilier des valeurs dans des mesures différentes ?
Si tu avais une page en ligne que l'on puisse constater le problème plus facilement... on pourrait cerner aussi la solution plus facilement...
Merci là c'est plus facile de constater.

As-tu toujours mis ton #global après ton #top ? Le #global doit englober tous les div si tu veux que ça fonctionne.
J'ouvre le #global just après le <body> et je le ferme juste avant le </body>. Est-ce ce que vous voulez dire ? Si c'est le cas, c'est bien ce que j'ai fait. Mais, pour une raison que j'ignore, chez moi cela ne semble pas pris en compte.

Voici la structure :


<body>
<div id="global">
<div class="top">

	<div id="logo"></div>
	<div id="france"></div>
</div>
<div class="field">
	<div id="text">
.... ... ... ...
	</div>
</div>
</div>
</body>
</html>


Me serai-je trompé ?
Bon , la structure semble maintenant correct.

Maintenant, j'avoue manquer de détails sur le problème et sur ce que tu veux obtenir ?
Eh bien, vous voyez le bandeau (div "top") en haut qui s'étend sur toute la largeur de la fenêtre ( width: 100%), avec une image en repeat-x ?

Je souhaite que ma div "field" fasse la même chose, toute la hauteur de la fenêtre (height: 100%) avec une image en repeat-y.

Malheureusement, la div field avec height: 100% donne 100% + hauteur de "top" (120px).

Ce qui engendre des scrollbar même s'il n'y a pas de contenu. Je voudrais donc que ma div field s'arrête à la bordure basse de la fenêtre.
Salut,
C'est quel arrière plan ? Le truc à fleur ?
Si c'est ça pourquoi ne pas mettre ce fond directement à body ou global ?
De toutes façon ta div top a un fond qui recouvrira la partie haute... Ou je ne comprend pas bien ce que tu veux faire ?
Non ce ne sont pas les fleurs. J'ai fait la modification suggéré par Mabelle pour lui montrer ce qu'il se passe si j'enlève height:100% de ma #field.

J'ai encore modifié pour retrouver l'état d'origine : http://cosme.perso.sfr.fr/

Vous voyez le plan qui s'affiche au-dessus des fleurs, qui sert d'arrière-plan au poème donc, sa longueur est de 100% la fenêtre + 120px (hauteur de la div #top). Je veux simplement que cet arrière-plan soit de la taille du reste de la fenêtre ! Sinon on a toujours 100% + 120px quelque soit la taille qu'on donne à la fenêtre.... Bref, on a 120 px de trop et les scrollbars inutiles.
Bonjour,

La technique a mettre en place est la même que celle pour coller un pied en bas de page, sauf que la on colle un element en haut de page.

il nous faut
- un conteneur en min-height:100%; pour afficher le fond sur la hateur de la page.
- un conteneur pour l'entete (au lieu du pied vu habituellement) positionné en absolue en haut de page.
- un conteneur pour le contenu avec un espace degager pour l'entete.

la base de la feuille de style serait:
html,body {
	background-image: url(img/flower.jpg);
	background-repeat: repeat;
	height: 100%;
	width: 100%;
	margin:0%;
	padding:0%;
}

#global {
	/* ie6 : */height:auto!important;
	height:100%;/* fin adatation IE6 */
	min-height: 100%;
	background-image: url(img/prin.png);
	background-repeat: repeat-y;
	width: 1200px;
	margin-left: auto;
	margin-right: auto;
}
.top {
	background-image: url(img/haut.png);
	background-repeat: repeat-x;
	position:absolute;
	width:100%;
	top:0;
	left:0;
	right:0;
	height: 120px;
}
#field {
	padding-top:120px;
}


cordialement,
GC
C'est formidable et ça fonctionne !

J'ai compris que c'était une sorte de problème de conception de l'ordre et de l'espace des div. Et aussi de contenu et de contenant.

Votre code marche à merveille. Je vous remercie, je vais l'étudier.
Pages :