28173 sujets

CSS et mise en forme, CSS3

Bonjour,

Je travail sur le cartouche d'un site composé d'un menu horizontal et un sous menu vertical :

http://www.simple-system.fr/test/cartouche.html

Celui-ci s'affiche correctement dans IE7 mais dans firefox 2 c 'est une boucherie !

Voici le xhtml de la page :

!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">
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
	<meta name="author" content="Simple System, Cédric Brancourt" />
	<meta http-equiv="content-language" content="fr" />
	<meta name="Keywords" xml:lang="fr" content="Informatique, solutions, infogerance, web, petites entreprises, depannage, maintenance, artisans, commercants, independants, reseaux, professions liberales, Nantes, pays de loire, 44" />
	<meta name="Description" content="Entreprise de services informatiques, dépannage, assistance, maintenance. Pour les professionnels et les paticuliers à Nantes."/>
	<meta name="robots" content="index,follow"/>
	<link rel="stylesheet" media="screen" type="text/css" title="Design" href="design.css" />
	<title>L'informatique simplement</title>
</head>

<body>
<div id="conteneur">
	<img id="logo" src="images/logosisys.jpg" alt="Logo de l'entreprise Simple System"/>
	<div id="bandeau">
	<h1 id="slogan">l'informatique Simplement !</h1>
	</div>
	<ul id="menu">
	<li><a href="">Présentation</a></li>
	<li><a href="">Services</a></li>
	<li><a href="">Forfaits</a></li>
	<li><a href="">Réferences</a></li>
	<li><a href="">Fournisseurs</a></li>
	<li><a href="">Espace Client</a></li>
	<li><a href="">Liens</a></li>
	</ul>
	<ul id="sousmenu">
	<li><a href="">sous menu</a></li>
	<li><a href="">sous menu</a></li>
	<li><a href="">sous menu</a></li>
	<li><a href="">sous menu</a></li>
	</ul>
</div>
</body>
</html>


et son CSS


*
{
margin: 0px;
padding: 0px;
}
html
{
height: 100%;
}
body
{height: 100%;
}

#conteneur
{width: 800px;
margin: auto;
}

#logo
{
float: left;
height: 160px;
width: 160px;
display: block;
position: static;
}

#bandeau
{width: 640px;
heigth: 140px;
background-color: #ffcc33;
color: #990066;
font-family: "Trebuchet MS", Arial;
position: static;
margin-left: 160px;
min-height: 130px;
}

#slogan
{text-indent: 30px;
padding-top: 35px;
font-size: 28px;
}


#menu
{
width: 640px;
background-color: #333399;
font-family: "Trebuchet MS", Arial;
font-size: 12px;
font-weight:bold;
list-style: none;

}

#menu li {
float: left;

}

#menu a {
margin: 4px 3px;
width: 80px;
height: 20px;
display: block;
text-align: center;
border: 1px solid #99cc33;
text-decoration: none;
color: #99cc33;
background: #333399;
}

#menu a:hover {
background: #99cc33;
border: 1px solid #99cc33;
color: #333399; 
}

#menu a:active {
background: #ffcc33;
border: 1px solid #ffcc33; 
color: #990066;
}
#sousmenu
{
background-color: #333399;
width: 160px;
height: 100%;
list-style: none;
}


#sousmenu li 
{
margin: 0 30px;
margin-bottom: 5px;
}

#sousmenu a 
{
     margin: 0 2px;
     width: 100px; 
     height: 20px;
     display: block;
     text-align: center;
     border: 1px solid gray;
     text-decoration: none;
     color: #99cc33;
     background: #333399;
	 }
	 
#sousmenu a:hover 
{
     background: #99cc33;
     border: 1px solid #333399; 
	 color: #333399;
}

#sousmenu a:active
{
     background: #ffcc33;
     border: 1px solid #ffcc33; 
     color: #990066;
}


Est ce qu'un des deux navigateurs ne traite pas correctement mes CSS oubien est ce que c'est moi qui ai fait caomme un pied ?

Autre question: c'est correcte dans IE 6 ?

Merci de votre aide !
( et vive les standards Smiley lol )
Modérateur
bonjour,

tu as l'air d'etre victime des flottantss .

En effet ceux-ci n'etire pas leur conteneur dans firefox.

En ajoutant par exemple un overflow:hidden; dans les conteneurs qui n'ont pas de dimensions de hauteurs definies , la page reprend un aspect normal.

quelques regles css semblaient inutile (ou reprendre les valeurs par defauts)

voici une modif de css faite en "live" avec le plug-in editcss de firefox:
* Edited with EditCSS */
/**** LINK-tag style sheet design.css ****/

*
{
margin: 0px;
padding: 0px;
}
html
{
height: 100%;
}
body
{height: 100%;
}
/*#*
{
margin: 0px;
padding: 0px;
}
.*
{
margin: 0px;
padding: 0px;
}*/




html
{
height: 100%;
}
body
{height: 100%;
font-size:100%;

}



#conteneur
{width: 800px;
margin: auto;
}

#logo
{

float:left;
}

#bandeau
{
width: 640px;
background-color: #ffcc33;
color: #990066;
font-family: "Trebuchet MS", Arial;
margin-left:160px;
}

#slogan
{text-indent: 30px;
padding-top: 35px;
font-size: 28px;
}


#menu
{
width: 640px;
background-color: #333399;
font-family: "Trebuchet MS", Arial;
font-size: 12px;
font-weight:bold;
list-style: none;
overflow:hidden;/*     EN PLUS  */
}

#menu li {
float: left;

}

#menu a {
margin: 4px 3px;
width: 80px;
height: 20px;
display: block;
text-align: center;
border: 1px solid #99cc33;
text-decoration: none;
color: #99cc33;
background: #333399;
}

#menu a:hover {
background: #99cc33;
border: 1px solid #99cc33;
color: #333399; 
}

#menu a:active {
background: #ffcc33;
border: 1px solid #ffcc33; 
color: #990066;
}
#sousmenu
{
background-color: #333399;
width: 160px;
height: 100%;
list-style: none;
overflow:hidden; /* en plus */
font-family: "Trebuchet MS", Arial;
}


#sousmenu li 
{
margin: 0 30px;
margin-bottom: 5px;

}

#sousmenu a 
{
     margin: 0 2px;
     width: 100px; 
     height: 20px;
     display: block;
     text-align: center;
     border: 1px solid gray;
     text-decoration: none;
     color: #99cc33;
     background: #333399;
	 }
	 
#sousmenu a:hover 
{
     background: #99cc33;
     border: 1px solid #333399; 
	 color: #333399;
}

#sousmenu a:active
{
     background: #ffcc33;
     border: 1px solid #ffcc33; 
     color: #990066;
}




... je n'est pas tester sous IE , En fait il ne manquait pas grand chose Smiley smile .

Dans IE6 , même aspect que dans IE7 .

bonsoir
Modifié par gcyrillus (12 Oct 2006 - 21:22)
Merci beaucoups

Même si je ne suis pas certain d'avoir compris toutes les propriétes de overflow et ses effets, j'essaierais d'en tirer une leçon.

dans ton CSS il manquais juste un truc au #bandeau ( height : 130px; )
et tout est parfait Smiley smile

Décidement même les nouvelles générations de navigateurs web n'ont toujours pas la même interprétation du code Smiley decu
Modérateur
bonsoir,

de rien Smiley smile

Pour l'overflow:auto ou hidden c'est une alternative (ou autre option possible selon les cas) au classique hr(ou autre balise) en clear left, right ou both.

l'overflow risque de ne pas etre adapté dans le cas ou le conteneur est deja dimensionné , ou il cachera ce qui deborde ou il ajoutera les barre de defilement , d'autres effets de "layout" peuvent etre possible comme ne plus passer sous un flottant exterieur et se positionné a coté et si une marge etait donné elle partira alors du flottant et non plus du bord du conteneur principal.
Il est generalement preferable au fait de devoir ajouté une balise et modifié ainsi le code html de base . ... , un petit test avant de jeter son devolue dessus s'impose le temps de prendre l'habitude de ses effets visuels lorsqu'il s'agit de regler un probleme visuel d'interference avec un flottant.

++
Modifié par gcyrillus (12 Oct 2006 - 23:28)
Bonjour,

a écrit :
Est ce qu'un des deux navigateurs ne traite pas correctement mes CSS oubien est ce que c'est moi qui ai fait caomme un pied ?


Comme un pied n'est peut-être pas l'expression exacte, disons plutôt que tu à cumulé une série de petites erreurs et quelques tentatives désespérées pour "scotcher" le tout.

La solution de gcyrillus peut fonctionner, en revanche elle ne corrige pas toutes les petites erreurs CSS et de structure Html.

Première erreur :

C'est sans doute la plus grave : Tu à développé ton gabarit en utilisant IE comme navigateur de test : Il ne faut jamais faire ça
IE n'offre pas un support suffisant de CSS et utilise un moteur de rendu qui possède des caractéristiques particulières qui génèrent des écarts par rapport au modèle de mise en forme visuel standard.

Si tu avais développé en utilisant un navigateur plus conforme comme firefox, tu n'aurais jamais pu obtenir le rendu recherché en utilisant ce gabarit.

Du point de vue de CSS, le rendu que tu obtiens avec Firefox est le rendu normal et conforme à ce qui doit être produit.

Seconde erreur :

Tu n'à pas compris le fonctionnement des flottants.
Un flottant permet à un contenu adjacent (avant ou après) de s'écouler le long de celui-ci.
Mais l'objectif est de laisser s'écouler le contenu, pas la boite qui le contient.
Pour être plus précis :
- Lorsque la boite adjacente est de type bloc non positionnée elle garde sa position de flux normal comme si le flottant n'existait pas.
- Lorsque la boite adjacente est une boite en ligne elle conserve également sa position en flux normal mais elle fait ce que doit faire toute boite en ligne : elle laisse la place nécessaire pour l'affichage de tout ce qui la précède et donc se réduit de la largeur du flottant.

a écrit :
Une boîte flottante se trouvant hors du flux normal, les boîtes de bloc non positionnées, crées avant et après elle, s'écoulent verticalement comme si celle-ci n'existait pas. Cependant, les boîtes de lignes, crées juste après la boîte flottante, se réduisent pour laisser de la place à celle-ci. Le contenu de la ligne, celui avant la boîte flottée, se répand dans la première ligne disponible contre l'autre bord de cette boîte.
Spécification CSS2 - 9.5 Les flottants


Dans ton gabarit, plus concrètement, ton image est flottante et précède une boite div non positionnée : les deux coins supérieurs de l'image et de la boite div sont donc superposés.
En affectant une largeur à cette boite div tu la réduit en partant de la gauche de la page et pas du tout en partant du bord droit de l'image.
C'est la raison pur laquelle tu t'es sentis obligé de rajouter une marge gauche qui est tout à fait inutile (la boite elle-même est d'ailleurs inutile).

Ce même phénomène se répète pour tes deux menus :
Les bords gauches de tes boites ul se superposent au bord gauche de leur conteneur, en loccurence la boite "id=contener".

Tu peux aisément observer ce phénomène en affectant des bordures d'épaisseur différentes à tes éléments ou en utilisant la webdevelopper toolbar et en "entourant" tes éléments de types block.

Enfin, le comportement des items du premier menu est tout à fait normal : Tu essais de faire tenir 755 px de "contenu" (largeur + marge + bordure) dans une boite (la boite ul) que tu à définis à 640px : C'est impossible ! donc les items qui ne peuvent pas tenir se décalent à la ligne suivante.

Comme ils sont en flottants, le contenu suivant, les items de ton second menus qui ne sont pas positionnés doivent s'écouler sur leur droite et en conséquence l'ensemble se décale !

Tu peux observer ce phénomène en repartant d'une page blanche et en introduisant, un à un tes éléments sans styles, en observant qu'elle est leur position "normale" et en leur affectant les styles progressivement : tu verras tes erreurs se construirent pas à pas.

Dernière erreur :
Dés lors que tu à constaté le problème, tu à tenté d'appliquer des propriétés "correctrices", comme des heights 100% par exemple.

Il ne faut pas procéder de cette manière.

Lorsque tu constates un problème il faut au contraire retirer les styles en cause, regarder quel est le rendu en flux normal et tester une à une les propriétés qui semblent générer les erreurs.
Si cela ne résoud pas le problème ou qu'une partie : faire cette opération sur les boites adjacentes et ainsi de suite.

Faute de quoi tu rajoutes, tu complexifie, tu perds le contrôle et finalement, par chance ou par hasard tu va trouver un "overflow qui va bien".

Mais dans ce contexte c'est exactement équivalent à faire tenir un mur qui menace de s'écrouler par le mobilier...

Voici ci-dessous une version de ton gabarit non scotchée, plus économique et plus normale pour CSS, ce n'est pas la seule manière d'obtenir le rendu recherché, mais cela économise une boite html et pas mal de propriétés CSS :


*{
margin: 0px;
padding: 0px;
}
#conteneur{
width: 800px;
margin: auto;
}
#logo{
float: left;
}
#slogan{
background-color: #ffcc33;
color: #990066;
height:95px;
font-family: Trebuchet MS, Arial;
text-indent: 30px;
padding-top: 35px;
font-size: 28px;
}
#menu{
float:left;
padding-right:24px;
background-color: #333399;
font-family: Trebuchet MS, Arial;
font-size: 12px;
font-weight:bold;
}
#menu li {
float: left;
list-style-type:none;
}
#menu a {
margin: 4px 3px;
width: 80px;
height: 20px;
display: block;
text-align: center;
border: 1px solid #99cc33;
text-decoration: none;
color: #99cc33;
background: #333399;
}
#sousmenu{
clear:both;
background-color: #333399;
width: 160px;
}
#sousmenu li {
list-style-type: none;
text-align:center;
margin-bottom:5px;
}
#sousmenu a{
margin:auto;
width: 100px; 
height: 20px;
display: block;
border: 1px solid gray;
text-decoration: none;
color: #99cc33;
background: #333399;
}

#menu a:hover, #sousmenu a:hover{
background: #99cc33;
color: #333399; 
}
#sousmenu a:hover{
border: 1px solid #99cc33;
}
#menu a:active,#sousmenu a:active {
background: #ffcc33;
border: 1px solid #ffcc33; 
color: #990066;
}

Et pour le html

<div id="conteneur">

	<img id="logo" src="logosisys.jpg" alt="Logo de l'entreprise Simple System"/>

	<h1 id="slogan">l'informatique Simplement !</h1>

	<ul id="menu">

	<li><a href="">Présentation</a></li>

	<li><a href="">Services</a></li>

	<li><a href="">Forfaits</a></li>

	<li><a href="">Réferences</a></li>

	<li><a href="">Fournisseurs</a></li>

	<li><a href="">Espace Client</a></li>

	<li><a href="">Liens</a></li>

	</ul>

	<ul id="sousmenu">

	<li><a href="">sous menu</a></li>

	<li><a href="">sous menu</a></li>

	<li><a href="">sous menu</a></li>

	<li><a href="">sous menu</a></li>

	</ul>

</div>


Jean-Pierre

Ps : Il y à d'autres soucis à ton gabarit, notamment l'utilisation de taille de polices fixes par exemple, mais cela déborde du sujet...
Modifié par jpv (13 Oct 2006 - 01:41)
Merci Jean pierre

C'est un peu ce que je cherchais a entendre, je me suis bien rendu compte qu' a chaque comportement inattendu je completais par une rustine qui créais un fuite d'un autre coté ...

Bref le comportement de CSS ne me semble jamais naturel ( enfin c 'est surtout que je n'en ai pas l'habitude )

Quant au développement sous IE bien je pense que tu a deviné que je le privélégie car il est le navigateur le plus présent.

Enfin il faut dire que le code est relativement propre par raport a mon précedent site, mais je comprend que l'on peut encore faire plus propre Smiley smile , cependant comme je commence seulement a me faire la main sur CSS on va pas pousser trop loin le bouchon Smiley cligne .

( je ne comprend pas le probleme des polices de tailles fixes ? je sais utiliser des polices en "em" aussi et je vais corriger ca mais , j'aimerais savoir pourquoi Smiley smile )
Bonjour,

a écrit :
je me suis bien rendu compte qu' a chaque comportement inattendu je completais par une rustine qui créais un fuite d'un autre coté ...


C'est un pas immense vers le succès... Smiley smile Smiley smile

a écrit :
Bref le comportement de CSS ne me semble jamais naturel ( enfin c 'est surtout que je n'en ai pas l'habitude )


On peut reprocher certaines choses à CSS, notamment le fait qu'il demande un certain niveau d'abstraction et de conceptualisation de la part de l'utilisateur.

Mais du point de vue du langage lui-même, CSS est un pur chef d'oeuvre de simplicité, de richesse et d'adaptabilité.

Le revers de la médaille c'est que si on obtiens rapidement des résultats, notamment lors de la phase de découverte on ne peut progresser qu'avec l'acquisition des bases théoriques du langage.


a écrit :
je ne comprend pas le probleme des polices de tailles fixes ? je sais utiliser des polices en "em" aussi et je vais corriger ca mais , j'aimerais savoir pourquoi


Très simplement parce que si j'ai besoin d'agrandir les tailles de caractères pour lire un contenu je ne peux pas le faire, sur IE, si elles sont définies en pixels.

Je pourrais te faire la même remarque d'ailleurs sur la taille "fixe" de ton contener principal (800 pixels) qui est trop importante pour un écran 800x600 (scrollbar horizontal) et, éventuellement ,trop petite pour des écrans de grandes résolution...

L'utilisation d'unités relatives est un concept de base pour l'accessibilité des contenus et l'interopérabilité.

En revanche cela pourrait demander de modifier en profondeur ton gabarit CSS initial, car si un contenu peut s'agrandir cela nécessite de gérer également le redimensionnement des boites elle-mêmes.

Jean-pierre
Modifié par jpv (13 Oct 2006 - 01:45)
Je viens de tester ton code, il reste quelque bugs d'affichage dans IE7 .

Pour les designs extensibles , je verrais ca une autre fois , j'ai deja ma dose la Smiley bawling
bonjour,

T'inquietes, patience et longueur de temps...

Ceci dit c'est un soucis qu'il faudra résoudre...

Il ne devrait pas te rester des bugs d'affichage...

Quel version de IE7 utilises- tu ?

Peux tu mettre ce que tu obtiens en ligne ?

jean-pierre
j'utilise la 7.0.5700.7

en fait les flotants ne sont pas correctement positionnés

(image et sous menu )

la hauteur du bandeau est plus courte que dans FF2

et il ne centre pas la page.

par contre sous firefox le design est parfait....