28173 sujets

CSS et mise en forme, CSS3

Je débute dans le CSS et le xHTML et j'ai un léger problème a vrai dire, le menu et le contenu ne s'étendent pas en même temps, se qui pose probleme Smiley ohwell sa laisse un espace entre le menu et le footer quand le contenu est trop grand, et le menu noie le footer si le contenu est trop petit, je vous serais tres reconnaissant de m'aider. merci à vous Smiley lol

page style.css et index.php :

/* le corps de la page */
body
{
width: 800px;
background-color: #7b7b7b;
font-family: verdana, sans-serif;
font-size: 9px;
margin: 0;
}

img
{
border: none;
}

/* le menu */
#menu
{
top: 0px;
left: 597px;
position: absolute;
width: 203px;
color: #ffffff;
background-image: url("img/design/menu.jpg");
}

.element_menu
{
padding-top: 10px;
padding-left: 10px;
padding-right: 30px;
text-align: left;
color: #fff811;
}

/* la bann */
#bann
{
height: 251px;
width: 597px;
background-image: url("img/design/bann.jpg");
}

/* le speedmenu */
#speedmenu
{
height: 21px;
width: 597px;
}

/* le contenu */
#contenu
{
width: 597px;
background-image: url("img/design/contenu.jpg");
}

.element_contenu
{
padding-top: 10px;
padding-left: 15px;
padding-right: 10px;
padding-bottom: 10px;
}

/* le footer */
#footer
{
height: 42px;
width: 800px;
background-image: url("img/design/footer.jpg");
}

/* les titres */
h2 
{
 border-bottom: 3px double #cdcdcd;
 font: 9pt Verdana, sans-serif;
 text-transform: uppercase;
 font-weight: bold;
 padding: 0px 15px 2px 0px;
 text-align: right;
 color: #ffffff;
}

h1 {
 border-bottom: 3px double #cdcdcd;
 font: 9pt Verdana, sans-serif;
 text-transform: uppercase;
 font-weight: bold;
 margin: 0px;
 padding: 0px 0px 2px 15px;
 text-align: right;
 color: #ffffff;
}

/* les liens */
a
{
color: #ca3c3c;
text-decoration: none;
}

a:hover
{
color: #ca3c3c;
text-decoration: underline;
}

/* les tableaux */
table
{
border-collapse: collapse;
}

.td_staff,.th_staff
{
border: 1px dashed #000000;
}

.td_episode,.th_episode
{
border: 1px dashed #000000;
}


<!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" >
   <head>
       <title>| Our-DeathNote | Notre Death Note | Tout sur Death Note le manga de Obata Takeshi |</title>
       <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />

<link rel="stylesheet" media="screen" type="text/css" title="Style" href="style.css" />

   </head>


<div id="menu">
<div class="element_menu">
<?php include("menu.php"); ?>
</div>
</div>

<div id="bann">
</div>

<div id="speedmenu">
<img src="img/design/header.jpg" alt="Speedmenu" /><a href="/?rub=main"><img src="img/design/accueil.jpg" alt="Accueil" /></a><a href="/forum/"><img src="img/design/forum.jpg" alt="Forum" /></a><a href="/?rub=staff"><img src="img/design/staff.jpg" alt="Staff" /></a><a href="/?rub=liens"><img src="img/design/liens.jpg" alt="Liens" /></a>
</div>

<div id="contenu">
<div class="element_contenu">
<?php
$page = basename($rub);
if(!$rub)
include("main.php");
else
include("$rub.php")
?> 
</div>
</div>

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

   </body>
</html>



http://www.our-deathnote.com (juste pour montrer le problème) [/url]
Modifié par papichon (10 Dec 2006 - 10:37)
Ta « colonne » de contenu et ta « colonne » de menu ne s'agrandissent pas respectivement pour faire toujours la même taille parce que... ce ne sont pas des colonnes.

Si tu regardes ton code HTML et ton code CSS, tu remarqueras qu'il n'y a absolument rien qui indique que ces deux blocs sont liés logiquement et qu'ils devraient être (graphiquement) indissociables.

Trois solutions :
- utiliser un tableau à deux cellules (peu recommandé, mais pas bien méchant non plus) ;
- passer les deux blocs en display: table-cell, ce qui aura l'avantage de les lier logiquement... mais pas supporté par IE ;
- utiliser la technique des colonnes factices, parce qu'à la rigueur on s'en fiche que les deux éléments soient liés logiquement, on veut juste qu'ils aient la même hauteur graphiquement.

Je conseille donc la technique des colonnes factices, cf.
http://pompage.net/pompe/colonnesfactices/
http://forum.alsacreations.com/faq/#item17

Bonne continuation avec les CSS. Smiley smile
Merci beaucoup pour tes réponses,
on a utilisé la technique des colonnes factices et le problème est résolu,
vraiment merci beaucoup. Smiley smile
Merci beaucoup pour tes réponses,
on a utilisé la technique des colonnes factices et le problème est résolu,
vraiment merci beaucoup. Smiley smile

EDIT : Désolé pour le double post, et ensuite, le problème est certe résolu, mais seulement en partie, tout s'étend très bien mais sur certaines pages comme -> http://www.our-deathnote.com/?rub=staff

La page étant trop petite, et bien, le menu s'étend par dessu le footer Smiley ohwell une solution ? ^^ Merci de votre réponse Smiley smile
Modifié par papichon (10 Dec 2006 - 14:06)
papichon a écrit :
La page étant trop petite, et bien, le menu s'étend par dessu le footer Smiley ohwell une solution ? ^^ Merci de votre réponse Smiley smile

Solution = ne pas positionner le menu en absolu. Un élément positionné en absolu ne tient pas compte des autres éléments de la page (et inversement), d'où les risques non négligeables de chevauchement, par exemple.

Utiliser les flottants devrait être jouable.
et bien, au départ j'utilisais un flottant, mais sous IE6 sa ne passait pas le menu se retrouvais bien à droite, mais les autres blocks se retrouvaient dessous et au dessus au lieu d'être à coter Smiley cligne
papichon a écrit :
et bien, au départ j'utilisais un flottant, mais sous IE6 sa ne passait pas le menu se retrouvais bien à droite, mais les autres blocks se retrouvaient dessous et au dessus au lieu d'être à coter Smiley cligne

C'est tout à fait possible avec un flottant. Tu devrais retenter, et si ça ne passe pas tu reviens nous voir. Smiley smile

Le positionnement absolu, c'est uniquement lorsqu'on sait très précisément quelle taille aura un élément (donc un élément très petit, ou sans texte), ou alors lorsqu'on sait qu'aucun autre élément ne viendra se placer en dessous.
Bon, je viens à l'instant de réessayer avec un flottant, le problème est tjs présent, et sous IE, même problème que cité plus haut ... donc si on pouvait me proposer une solution ^^' merci Smiley smile
papichon a écrit :
Bon, je viens à l'instant de réessayer avec un flottant, le problème est tjs présent, et sous IE, même problème que cité plus haut ... donc si on pouvait me proposer une solution ^^' merci Smiley smile

Mais non mais non, avec un flottant c'est pas le même problème, c'est un problème de dépassement de flottant, pas un problème de dépassement de bloc positionné en absolu. Smiley lol

Plus sérieusement, il y a des moyens très simples de faire rentrer le flottant dans le rang (ce qui était impossible avec le positionnement absolu). Voir à ce sujet :
http://web.covertprestige.info/test/03-elements-flottants-et-element-parent-1.html

Une fois que ça sera fait (rendu ok sur Firefox/Opera/Safari/etc.), on s'attaquera au problème de rendu avec IE6.
Voila ^^ porblème quand la page est trop petite règler, mais, problèmes sous IE, tjs présent, (ou touche le bon bout Smiley smile )
papichon a écrit :
Voila ^^ porblème quand la page est trop petite règler, mais, problèmes sous IE, tjs présent, (ou touche le bon bout Smiley smile )

Bon, on s'y attèle.

Mais tant que j'y suis, je note que :
- pas d'information sur le jeu de caractères utilisé dans les en-têtes HTTP (voir la FAQ : http://forum.alsacreations.com/faq/#item78 ) ;
- pas de balise <body> ouvrante ???
- ya de la balise <center> inutile qui traine...
- pas mal d'erreurs de validation : http://validator.w3.org/check?uri=http%3A%2F%2Fwww.our-deathnote.com

Va falloir corriger tout ça, hein ! Smiley cligne

Ensuite, remarque en passant : pourquoi pas de vrais listes non ordonnées (ul) pour le menu ?

Et puis aussi ça :
body
{
width: 800px; /* ARGH */
position: absolute; /* ???????? */
font-size: 9px; /* ARGH */
}

Premier ARGH : un écran en 800px de large, ça fait 770-760px d'exploitable, pas 800 (fenêtre pas maximisée, bordures, barre de défilement, etc.)

Deuxième ARGH : c'est bien joli du texte fixé à 9px, mais j'ai demandé à mon navigateur de ne rien afficher en dessous de 12px (sinon sur mon 1280x1024 c'est pas lisible). Le problème, c'est que la majorité des utilisateurs ne va pas faire comme moi (qui va changer les préférences de son navigateur, à part les 10% de technophiles ?), donc ils auront du texte en 9px, potentiellement illisible. Oh joie... Un peu de lecture :
http://css.alsacreations.com/Accessibilite-du-Web/Agrandissement-de-la-taille-des-polices
http://css.alsacreations.com/Tutoriels-et-articles-divers/gerer-la-taille-du-texte-avec-les-em

Quant au position: absolute qui traine dans le code, je me demande bien ce qu'il vient faire là... Smiley sweatdrop



Bon, maintenant pour le menu flottant...
Il est possible qu'avec IE on ait des petits décalages, à cause (entre autres) du Doubled margin bug (ici ça n'a pas l'air d'être le cas), ou du Three Pixel Jog. Et les décalages, ça fait des blocs qui se rentrent dedans, voire qui passent à la ligne, et donc ça ne nous arrange pas. Bref, si on n'a pas besoin d'un truc au pixel près, autant prendre un peu de marge.

Ici, on a un bloc pour le menu, qui fait 203px de large. Mais le contenu de ce menu ne dépasse pas les 163px. Cherchez l'erreur...

Bref, vu que l'image de fond du menu est donnée par l'image de fond de body, on s'en fiche un peu que la div#menu fasse les 203px de large... 160 ou 165, ça ira bien.
Tant qu'on y est, on rajoutera si possible un fond noir à div#menu, au cas où l'image de fond ne se charge pas ou mette du temps à charger (parce que le texte jaune sur gris clair, c'est moyennement lisible...).

Ça peut donner quelque chose comme ça (remplacer le code pour les deux élément visés ci-dessous) :
/* le menu */
#menu
{
float: right;
width: 160px;
margin-right: 30px;
color: white;
background: black;
border: solid 1px red;
display: inline; /* corrige le Doubled Margin Bug dans IE6... si possible à adresser via un commentaire conditionnel */
}

.element_menu
{
padding: 10px;
text-align: left;
color: #fff811;
}

Avec un margin-right: 30px sur le flottant, on risque d'avoir une marge de 60px sur IE6 (bug bien connu de ce navigateur). Le display: inline permet de corriger ce problème. Par contre, il serait préférable de le mettre dans un commentaire conditionnel pour IE6 et inférieurs. Faire une recherche sur « les syntaxes de commentaires conditionnels » pour plus d'infos.


Voili voilou, c'est un peu en vrac et un peu speed (en général je suis plus pédagogue Smiley lol ), mais ça devrait pouvoir t'aider.
Modifié par mpop (11 Dec 2006 - 16:56)
Merci pour ta solution qui semble marché, enfin, pas totalement, vu que contenu, se retrouve un peu ... bas (sous IE6), screen :

- Screen

Est-ce normal ? :x

- Pour l'information du jeu de caractère, bah en fait j'ai jamais appris à l'utiliser, mais je corrigerais sa, merci Smiley smile

- la balise ouvrant <body> a du etre effacée lorsque j'ai fait une modification ^^' c'est corriger, merci, je ne l'aurais pas remarquer sans toi Smiley cligne

- Mon ami qui code comme un gros bourrin je suppose x)

- pour les erreurs de validation, avant que mon ami ne commence a ajouter ses petites affaire, c'était tout a fait valide, je suis déjà en train de m'atteler à ce problème ^^

- Pour le width, encore dsl, je ne savais pas, mais le design fait 800px de largeur, je ne pouvais pas mettre moin Smiley ohwell

- le position:absolute; juste un test, il est enlevé depuis belle lurette ^^

- pour la taille de police, pas non plus au courant Smiley ohwell je corrigerais sa, merci pour l'info Smiley cligne
Modifié par papichon (11 Dec 2006 - 17:27)
papichon a écrit :
Merci pour ta solution qui semble marché, enfin, pas totalement, vu que contenu, se retrouve un peu ... bas (sous IE6), screen :
- Screen
Est-ce normal ? :x

Pas trop.
J'ai du mal à m'y repérer, dans cette page. Je vais voir ce que je peux trouver.

Bon, j'ai trouvé.
Le bloc de contenu (div#contenu) est trop large sous IE. Si tu lui mets un background: red, tu peux le visualiser de manière assez frappante : au lieu de faire 597px comme demandé, il fait près de 800px.
La raison est simple : IE interprète mal les indications de largeur, et au lieu de figer la largeur de l'élément il l'étend si jamais l'élément contient des objets trop larges (images, blocs, etc.).

Deux solutions :
- la « mauvaise » : forcer IE à bloquer div#menu à la largeur demandée, en lui attribuant un overflow: hidden (l'élément qui dépasse sera tronqué) ;
- la bonne : trouver l'élément trop large à l'intérieur de div#contenu.

Je te conseille donc d'appliquer la deuxième solution.
Je vais te laisser chercher ce qui pose problème exactement (un peu de debugage n'a jamais fait de mal à personne, et c'est très formateur). Mais pour info, je l'ai déjà trouvé (donc si vraiment ça bloque je filerai l'info, bien sûr). Au passage, pas besoin d'outil particulier mais l'extension Firebug pour Firefox m'a été pas mal utile, par exemple pour vérifier l'imbrication des éléments.

Firebug :
http://www.getfirebug.com/

papichon a écrit :
Pour l'information du jeu de caractère, bah en fait j'ai jamais appris à l'utiliser, mais je corrigerais sa, merci Smiley smile

C'est donc le moment d'apprendre.
Si serveur Apache, s'intéresser aux moyens de déclarer un jeu de caractères via un fichier .htaccess

papichon a écrit :
Pour le width, encore dsl, je ne savais pas, mais le design fait 800px de largeur, je ne pouvais pas mettre moin Smiley ohwell

Je mesure, et le design fait très exactement 775 px de large...
En fait, si tu regardes bien, ma solution (utiliser un flottant) marche parfaitement... par contre, au fur et à mesure, on corrige les erreurs et imprécisions du code de la page de départ. Smiley cligne
Si je te passe l'image originelle du design, elle fait bien 800 px, si tu regardes la largeur de l'image du fouteur et du body, elles font toutes les deux 800 px ^^

Pour se qui est du problème dans le div#contenu j'voix pas x.x j'ai beau cherhcher je trouve pas Smiley ohwell si tu pouvais (pas forcément me dire ou est l'erreur) me mettre sur la voie ^^ ca serait simpa Smiley cligne
papichon a écrit :
Si je te passe l'image originelle du design, elle fait bien 800 px, si tu regardes la largeur de l'image du fouteur et du body, elles font toutes les deux 800 px ^^

Soyons clairs : ce n'est pas parce que l'image fait 800px que le design fait 800px. Une image de 800px pour un design qui visuellement fait 775px, c'est ce qu'on appelle une mauvaise découpe.
La composition de tes images de fond c'est :
5px de gris | le design avec sa bordure blanche | 20px de gris à droite
Soit 25px de trop.

À titre indicatif, on peut positionner une image de fond grâce à la propriété background-position.

papichon a écrit :
Pour se qui est du problème dans le div#contenu j'voix pas x.x j'ai beau cherhcher je trouve pas Smiley ohwell si tu pouvais (pas forcément me dire ou est l'erreur) me mettre sur la voie ^^ ca serait simpa Smiley cligne

Un indice : tu as un élément de 800px de large (grosso modo) qui déforme ton div#contenu. Ce qui signifie que 1) cet élément est à l'intérieur de div#contenu et 2) il a peut-être une largeur fixe élevée.

Tu peux vérifier le deuxième point en regardant les propriétés width (et les éléments auxquels elles s'appliquent) dans ta feuille de style. Et tu peux vérifier le premier point avec (par exemple) l'extension Firebug pour Firefox (cf. le lien ci-dessus), en jetant un oeil à l'imbrication des éléments.

Au passage, l'imbrication des éléments serait facile à vérifier dans le code source si seulement les balises fermantes </div> ne se ressemblaient pas toutes. Quand on en a trois ou quatres d'affilée, on ne sait plus toujours laquelle ferme quoi. Dans ce cas, on a tout intérêt à utiliser des commentaires :
<div id="contenu">
	...
</div><!-- fin de div#contenu -->


Je donne la solution dans la soirée si ça coince toujours (je voudrais pas que tes visiteurs pâtissent de ce petit jeu pédagogique Smiley cligne ).
Voila j'ai trouver, j'avais mis le footer dans le div#contenu, et le footer fait 800px ^^' j'l'avais placer la pour un test et j'ai oublier de le remettre à sa place initiale, le problème sous IE est maintenant règler, merci pour ton aide ^^
Modifié par papichon (12 Dec 2006 - 06:55)
C'est re moi xD (encore désolé pour le double post, mais ne sachant pas si tu avais déjà vu mon message, au moin, je suis sur que comme sa toi, ou un de tes collegues le vera ^^), a vrai dire, j'ai voulu essayer les differentes techniques apprises pour our-deathnote, sur un autre site, et malheureusement j'ai un problèmes, visible ici :

Screen

Est-ce moi qui est fait une erreur (que j'ai beaucoup chercher, sans pour autant trouver), ou est-ce un effet normal ^^ (en sachant que sa le fait seulement sous Firefox, sa marche a peu près sous IE.)

site visible ici Wii-Source Test.

Merci à toi ^^
Modifié par papichon (12 Dec 2006 - 15:18)