28173 sujets

CSS et mise en forme, CSS3

Bonjour

Je n'y comprends rien...
le pb est le suivant :
J'ai un div conteneur global qui inclut une succession d'autres div (texte, menu...) ainsi qu'un pied de page.
Tous les div se positionnent comme prévu sauf le pied de page qui est ok dans IE 6, mais pas ok dans Firefox ou Opera.
J'ai beau changer position: absolute en relative (et inversement), tester les astuces proposées sur le forum, Firefox et Opera me le mettent en dessous de ma ligne de menu !

Quelqu'un aurait une suggestion ?
Merci beaucoup.

la page : http://www.amr.fr/contact/contact.html
la feuille de style : http://www.amr.fr/css/amrstyles2.css

Le css de conteneur :
#boxgenerale {
	position: relative;
	text-align: left;
	margin: auto;
	width: 90%;
	height: 90%;
	margin-top: 0px;
	background-color: White;
	background-image:url(../img/fond.jpg);
	background-repeat: repeat-y;
	background-position: right;
}

le css du pied de page
#zonepied {
	position: relative;
	height: auto;
	text-align: center;
	background-color: #343E93;
	width: 100%;
}

Modifié par Blue James (21 Mar 2006 - 18:29)
Bonjour,

Merci d'éditer ton post pour présenter lisblement ton code comme demandé dans les règles. Smiley smile
Modifié par Raphael (25 Jan 2006 - 18:41)
Rajoutes un
clear: both;

Aux propriétés CSS de ton pied de page.
Il reste en haut parce que ta zone de texte et ta zone de menu sont flottés, et sont donc considérés par Firefox, Opera, Konqueror et toute la clique standardisée comme ne pouvant être comptabilisés dans le calcul de la hauteur de l'élément parent. Bref, ton pied de page se met à sa place (en fonction de sa place dans le code HTML) : tout en bas du bloc conteneur. C'est juste que le bloc conteneur ne va pas bien bas, et que tes deux éléments flottés dépassent.


Je crois que je vais créer une page d'exemples sur ce problème, c'est dingue, j'arrête pas de répondre à des problèmes de rendu CSS sur ce forum qui viennent de cette histoire de float...
Modifié par mpop (25 Jan 2006 - 21:56)
Cool !
Merci... C'est "clear" comme réponse !
Sauf que çà m'a déclenclé en cascade d'autre pbs !!
Mais qui eux me paraissent solubles ! Smiley smile
Si tu veux que ton pied de page s'affiche tout en bas du cadre, tu peux ruser en :
- plaçant le pied de page en dehors (juste après dans le flux html) du cadre ;
- remontant légèrement le pied de page grâce à un positionnement relatif
position: relative; top: -30px;

- si besoin, mettre un padding-bottom pour le cadre, pour ménager un espace qui restera vide.
Après une petite pause sur ce sujet (que je pensais résolu) et ayant du finaliser un autre site, j'ai un peu abandonné mon problème de pied de page.
Je disais qu'il semblait résolu car tout allait bien en 1024 * 768 mais dès que j'ai fait le test en 1280 * 768 ou plus, cela ne marche plus du tout !!!
Mon div pied de page ne "descend" pas tout en bas !!!
Voir (dans la bonne résolution)
http://www.amr.fr/formation/contact.html
J'ai donc tenté de suivre la suggestion de mpop en mettant le pied de page en dehors du cadre ! Ce qui a nettement amélioré le schmilblick puisque mon pied de page s'est trouvé au bon endroit !!! ... mais... trop décallé à gauche !!!!
Voir :
http://www.amr.fr/contact/contact2.html
Alors je pige pas...

Pour le version 2, le code CSS est


/*************************************
				Zonepied
**************************************/

#zonepied {
	position: relative;
 	top: 0px;
	height: auto;
	text-align: center;
	background-color: #343E93;
	width: 90%;
	/*/clear: both;*/
	color: White;
	font-size: 70%;
	margin-left: 20px;
}


sachant que mon conteneur principal a pour code :

#boxgenerale {
	position: relative;
	text-align: left;
	margin: auto;
	width: 90%;
	height: 90%;
	margin-top: 0px;
	background-color: White;
	background-image:url(../img/fond.jpg);
	background-repeat: repeat-y;
	background-position: right;
}


(la page css complète est visible à l'adresse : http://www.amr.fr/css/amrstylestest.css)
Si quelqu'un a une idée pour me dire où le code cloche ce serait super !!!
Merci beaucoup !

Smiley smile
Modifié par Blue James (26 Feb 2006 - 09:50)
On va commencer par un peu de méthodologie Smiley smile

Déjà, il vaut mieux avoir un code le plus "simple" possible, histoire d'avoir moins de choses à gérer, par exemple.
Ainsi,
<div id="zonetexte">
    <div id="texte1">
        <h1>Contact </h1>
    </div>

    <div id="texte2">
    [... tout le reste ...]
    </div>
</div>

Peut être simplifié et éclairci en :
<div id="zonetexte">
    <h1>Contact </h1>

    [... tout le reste ...]
</div><!-- fin de div#zonetexte -->

Notez le commentaire HTML à la fin. Ça n'a pas l'air bien utile comme ça, mais ça permet de s'y retrouver dans le code une fois qu'on a inséré les 40 lignes de code du contenu résumé ici entre crochets. De plus, c'est super utile lorsque l'on ferme deux ou trois (ou plus) divs à la suite, ça permet de s'assurer que l'on n'en oublie pas une au passage.
Bref, c'est un peu présomptueux de ma part de parler de méthodologie alors qu'il ne s'agit que d'une pratique personnelle, mais je trouve que ça aide pas mal. De plus, ça aide beaucoup ceux qui voudraient donner un coup de main pour débuguer un code HTML/CSS, ou les personnes qui pourraient reprendre le site plus tard. Ça ne fait pas de mal de voir un peu sur le moyen terme, non ? Smiley biggrin

Le problème de la page web en height 100%
Bon, je suis loin d'être un expert dans ce domaine, mais pour l'instant je n'ai jamais été convaincu par l'efficacité des règles du type :
html, body {height: 100%;}

Dont on se sert généralement pour (tenter de ?) obtenir une page qui prendra toute la hauteur disponible dans la page. On se retrouve généralement avec pas mal de problèmes pas évidents à gérer. Sans oublier les problèmes de différences d'interprétation de la propriété height.

Dans ce cas précis, on a :
html {height: 100%;}
body {height: 100%;}
#boxgenerale {height: 90%;}

Déjà, on pourrait éviter d'avoir des problèmes avec les marges et padding par défaut de html et body, ça aiderait.
html, body {margin: 0; padding: 0; height: 100%;}

Ensuite, la #boxgenerale à 90%, ça me semble un peu aléatoire. Les navigateurs n'ont pas trop l'air d'aimer ça avec une petite résolution. Enfin bref, ça me semble un peu problématique.

Je conseille donc fortement une mise en page avec div de contenu dotée d'une hauteur minimale (genre 400px)... suivie d'une div pour le pied de page.

<body>
    <div id="entete">
    ...
    </div><!-- fin de div#entete -->

    <div id="contenu">
    ...
    </div><!-- fin de div#contenu -->

    <div id="piedpage">
    ...
    </div><!-- fin de div#piedpage -->
</body>

L'en-tête peut avoir une hauteur fixe ou non, la div#contenu aura une hauteur minimale, et la div#piedpage viendra se mettre juste en dessous.

Si on veut centrer le tout, on utilisera les marges automatiques. Soit à chaque fois pour chaque partie, soit en englobant le tout dans une seule div contenante.

Maintenant, si on veut absolument que la page prenne 100% de la hauteur disponible, on peut se lancer dans les bidouillages (potentiellement) dangereux.

Bon, oublions tout de suite le pied de page en positionnement absolu : il se retrouverait en bas de l'écran (avec un bottom: 0;), mais en cas de scroll sur la page il resterait sur place !
À moins d'utiliser des techniques détournées pour faire du faux position: fixed;, rien à en tirer [Note: ces techniques consistent à supprimer le scroll du body, et à en rajouter un à une div en hauteur fixe que l'on fera passer pour la page en lui donnant une hauteur à 100%... J'aime très moyennement cette méthode, mais c'est une possibilité].

À propos de position: fixed;, ça serait la solution la plus intéressante, surtout si on cherche à avoir un pied de page ou un en-tête "permanent" (utile s'il contient un menu de navigation, par exemple !). Mais vu l'incompatibilité de cette propriété avec IE 6 et inférieur (quid de IE 7 ?), il faudra :
- soit se passer de position: fixed; mais en simuler le comportement (cf note ci-dessus) ;
- soit se contenter d'une "dégradation gracieuse" (ou du moins acceptable) dans IE, via l'utilisation d'une feuille de style liée dans un commentaire conditionnel (on pourra remettre l'élément en question en positionnement "static", par exemple, ou en positionnement absolu pour un menu latéral ou un en-tête, dans certains cas précis).

Ébauche de solution alternative (zéro garantie)
On pourrait envisager d'utiliser un conteneur général pour dédoubler le body (oui je sais, pas drôle). Ce conteneur sera en min-height: 100%;, et comprendra tout le contenu de la page SAUF le pied de page.
Le pied de page sera lui en positionnement absolu, avec une marge négative pour le remonter de sa hauteur.
Voilà ce que ça donne :

http://web.covertprestige.info/test/08-pied-de-page-en-bas-ecran-1.html

Si le contenu est court, la page prend bien tout l'écran et le pied de page vient se placer en bas. Mais aucun scroll n'apparaît, donc tout va bien.
Si le contenu est long, le pied de page se place tout en bas de la page. Il n'est pas visible tant que l'on ne fait pas défiler la page.

Pas encore testé avec Safari et IE Mac. Pour le reste, ça passe partout sauf sur Konqueror.
Modérateur
bonjour,
en passant je remet ce lien vers 3 idées complementaires d'un pied de page toujours en bas, je fais usage d'un div supplementaire vide pour eviter "aux derniers contenus" d'etre caché par le pied, pied dedans ou en dehors du conteneneur principale.
http://gcyrillus.free.fr/trucs_css/pied-en-bas-V2.html
cela me semble complementaire au topic , mais deja vu sur le forum ...
Smiley smile
++
gcyrillus a écrit :
bonjour,
en passant je remet ce lien vers 3 idées complementaires d'un pied de page toujours en bas, je fais usage d'un div supplementaire vide pour eviter "aux derniers contenus" d'etre caché par le pied, pied dedans ou en dehors du conteneneur principale.
http://gcyrillus.free.fr/trucs_css/pied-en-bas-V2.html
cela me semble complementaire au topic , mais deja vu sur le forum ...
Smiley smile
++


Ça marche très bien...
La différence avec ma solution, c'est que tu ne positionne pas ton pied de page en absolu, et du coup ça marche mieux. Smiley confused

Du coup je me sens très con Smiley lol et je me demande pourquoi j'ai utilisé un positionnement en absolu moi ! Ah oui, j'avais peur qu'un bloc en positionnement statique ne force la page à augmenter de la hauteur du pied de page (on aurait eu une page de hauteur 100% + hauteur du pied de page... donc un scroll systématique). C'est le comportement avec un bloc en positionnement relatif décalé vers le haut grâce à la propriété top, mais apparemment les marges négatives sur un élément statique ne provoquent pas ce comportement.

Je teste tout ça et si ça marche, j'édite ma page. Bon, ça fera doublon avec celle de gcyrillus par contre Smiley cligne

EDIT: ben voilà, c'est à jour et c'est simplifié comme il faut. On évite ainsi des problèmes avec Konqueror (et peut-être avec Safari).
http://web.covertprestige.info/test/08-pied-de-page-en-bas-ecran-1.html
Modifié par mpop (04 Mar 2006 - 16:53)
Merci beaucoup pour les différentes réponses reçues... et si complètes !
Pour ne pas jeter l'ensemble des pages constituées, j'ai préféré chercher à arranger le code existant plutot que de re-créer la structure des pages. Grâce aux conseils donnés, le résultat est au rendez-vous et c'est l'essentiel.
S'il y a des curieux :
une page
http://www.amr.fr/formation/contact.html
les css
http://www.amr.fr/css/amrstylestest.css
Merci encore !
Smiley biggrin
Modifié par Blue James (21 Mar 2006 - 18:35)