28172 sujets

CSS et mise en forme, CSS3

Bonjour à vous Smiley smile

Je viens de m'inscrire en espérant que quelqu'un pourra m'aider à résoudre un petit problème que je rencontre en essayant de rendre un projet sur lequel je travaille compatible entre navigateurs.

Il s'agit d'un menu à base d'ul/li qui utilise la transparence d'images au format png. Comme souvent, tout fonctionne au poil sur firefox, mais je rencontre un souci sous internet explorer (7 et 8 on deux soucis différents, le 6 je n'ose même pas tester) et sous chrome (webkit).

Je vous laisse juger par vous même :
http://zizicoincoin.free.fr/exemple.html


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
	<head>
		<meta http-equiv="content-type" content="text/html; charset=utf-8;" />
		<link rel="stylesheet" type="text/css" href="styles.css" />
	</head>
	<body>		
		<ul class="onglets decal">
			<li><a href="#">item 1</a></li>
			<li class="active"><a href="#">item 2</a></li>
			<li><a href="#">item 3</a></li>
			<li><a href="#">item 4</a></li>
			<li><a href="#">item 5</a></li>
			<li><a href="#">item 6</a></li>
		</ul>
		<table class="body" cellpadding="0" cellspacing="0">
			<tr>
				<td style="background: url(images/simple-sprite-c.png) repeat scroll 0px 0px; width: 19px; height: 20px;"></td>
				<td style="background: url(images/simple-sprite-h.png) 0px 0px; width: 846px; height: 20px;"></td>
				<td style="background: url(images/simple-sprite-c.png) repeat scroll -23px 0px; width: 25px; height: 20px;"></td>
			</tr>
			<tr>
				<td style="background: url(images/simple-sprite-v.png) repeat-y scroll 0px 0px; width: 19px; height: 10px;"></td>
				<td style="background: #f0d99b; width: 846px;">
					<div class="content">
						<br />
						<br />
						<br />
					</div>
				</td>
				<td style="background: url(images/simple-sprite-v.png) -19px 0px; width: 25px;"></td>
			</tr>
			<tr>
				<td style="background: url(images/simple-sprite-c.png) repeat scroll 0 -20px; width: 19px; height: 23px;"></td>
				<td style="background: url(images/simple-sprite-h.png) 0px -20px; width: 846px; height: 23px;"></td>
				<td style="background: url(images/simple-sprite-c.png) repeat scroll -23px -20px; width: 25px; height: 23px;"></td>

			</tr>
		</table>
	</body>
</html>



* 		{ margin: 0px; padding: 0px; border: 0px; }
body 	{ padding-top: 15px; font-family: Trebuchet MS; background: #180c06; }

ul.onglets 							{ width: 850px; margin: auto; padding: 0px 40px 0px 30px; }
ul.onglets.decal 				{ margin-top: 28px; }
ul.onglets li 					{ height: 35px; margin: -24px 0px 0px; float: left; list-style: none; background: url("images/onglets-marron-small-left.png") no-repeat left top; }
ul.onglets li a 				{ height: 100%; margin: 0px 0px 0px 5px; padding: 0px 17px 0px 12px; display: block; text-decoration: none; color: #e4c780; font-size: 18px; line-height: 30px; background: url("images/onglets-marron-small-right.png") no-repeat right top; }
ul.onglets li:hover 	{ height: 59px; margin: -24px -13px 0px; background: url("images/onglets-marron-full-left.png") no-repeat left top; }
ul.onglets li:hover a 	{ margin: 0px 0px 0px 30px; padding: 0px 30px 0px 0px; background: url("images/onglets-marron-full-right.png") no-repeat right top; }
ul.onglets li.active 	{ height: 59px; margin: -24px -13px 0px; background: url("images/onglets-vert-full-left.png") no-repeat left top; }
ul.onglets li.active a 	{ margin: 0px 0px 0px 30px; padding: 0px 30px 0px 0px; background: url("images/onglets-vert-full-right.png") no-repeat right top; }

.body						{ width: 890px; margin: -35px auto 0px; clear: both; }
.body	.content 	{ margin: 20px 20px 30px 50px; }


Tout fonctionne bien sous firefox, mais avec les autre navigateurs (sauf ie7) un décalage apparait entre les onglets et le corps de la page. Pour être franc, j'avais ce souci sous firefox aussi, mais j'ai réglé le problème en ajoutant un margin-top négatif sur table.body. Donc, en fin de compte, le problème reste entier : comment faire pour supprimer ce décalage ?

Sous ie7, c'est encore différent car le margin négatif est bien pris en compte, mais les onglets restent derrière le corps de la page. Je suppose qu'un z-index réglera le problème si je garde ce bidouillage du margin négatif. Je n'ai pas encore testé.

En espérant que quelqu'un pourra m'aider Smiley smile
Modifié par myother (01 Apr 2010 - 12:37)
Coucou,

j'ai essayé une petite chose, mais je n'ai pas approfondi.

Au lieu de la marge négative, j'ai plutôt mis le tableau en position:absolute et un top (environ 15px)

Bien entendu, il faudra entourer ton tableau par une div en position relative Smiley cligne


Par ailleurs, je ne pense pas que le tableau pour ton contenu soit la meilleure solution... Sur le site, tu as des tutos pour faire des arrondis avec des div, c'est mieux !

Bon courage !
Merci beaucoup d'avoir jeté un oeil, même rapide ! Je commençais à me sentir largué novice que je suis Smiley smile

Si j'ai bien compris tes indications, ça doit m'amener à quelque chose comme ça http://zizicoincoin.free.fr/exemple2.html

Si c'est bien ça, l'affichage est homogène sur les trois navigateurs et c'est déjà une bonne chose, mais du coup l'onglet actif et les onglets :hover ne sont plus affichés par dessus le corps de la page (http://zizicoincoin.free.fr/exemple.html), il restent en dessous. C'est vraiment compliqué parce que je joue en plus avec les ombres en png ..

Sinon pour les arrondis en css3, j'ai découvert ça il y a pas longtemps oui ... mais trop tard malheureusement. Mais les arrondis ne fonctionnent pas sur ie ? Et en plus de ça je joue aussi avec des ombres autour du corps de la page ... Y a bien des ombres en css3 aussi, mais ie connait pas ça non plus ... Enfin ça peut vite devenir un sac de noeuds pour un débutant, surtout si je dois bidouiller avec des hack ou autres htc.

De plus le corps de la page que tu vois ici est une version simplifiée pour l'exemple. En réalité ça donne plutôt un bloc divisé en plusieurs parties visuelles chacune ayant une couleur de fond particulière (et donc les coins appartenant à des couleurs différentes seront eux aussi de couleurs différentes et arrondis). Par exemple le corps est divisé en deux dans sa hauteur, la partie de gauche étant plus large et faisant office de conteneur. La partie droite est une colonne elle-même divisée en deux dans sa largeur. L'une est beige, l'autre "beige foncé" et la dernière verte. Et pour bien faire, elles sont séparées par un effet d'ombre ...

Ca doit être compliqué à imaginer. Je vais mettre encore un exemple en ligne pour illustrer ça Smiley smile


edit : Voilà, un truc dans ce genre là : http://zizicoincoin.free.fr/exemple3.html. C'est pas le même exemple que celui que j'ai tenté de décrire, mais ça donne une idée
Modifié par myother (29 Mar 2010 - 12:15)
J'avais essayé le z-index sans que ça fonctionne, mais je l'avais mal utilisé. Merci pour les liens ça m'a aidé. J'ai donc placé le menu en position:relative tout en lui affectant un z-index. Et là, ça fonctionne partout ... sauf sur ie7. Pas l'histoire du z-index, juste qu'il y a le fameux décalage qu'on avait au début et qui n'était pas sur ie7 qui maintenant l'est, sur ie7. C'est grave ? Y a du monde qui traine sous ie7 ?
Je comprends vraiment pas le principe du haslayout ... J'ai essayé de mettre des zoom:1 et des height:1% mais ça n'a rien fait. En fait j'ai remarqué que sur tous les navigateurs (chrome, safari, firefox, ie8), le ul n'apparaissait pas (merci les outils de debug). Mais que sur ie7 il apparaissait et était aussi grand que le décalage. donc j'ai essayé de mettre height: 1px à ce ul et ça a fonctionné, plus de décalage.

Maintenant il y a plus qu'un petit détail qui cloche : sur ie7, il n'y a pas le même décalage entre le haut de la page et le menu (http://zizicoincoin.free.fr/exemple2.html). Je me demande si je finirai pas en lâche avec un petit commentaire conditionnel pour cibler ie7 uniquement ..
Très contente d'avoir pu t'aider Smiley langue

Surtout que j'adore l'équitation, donc je suis d'autant plus contente que le site soit tout beau !

Bravo pour ton travail !