28173 sujets

CSS et mise en forme, CSS3

Bonjour,

Après 10 ans de codage à l'ancienne, je me décide enfin à faire mes sites en divs and co...

Pour ça, je m'exerce sur un petit site... et vous propose au fur et à mesure des bugs IE rencontré de vous les exposer (ceux pour lesquels, je n'ai pas trouvé de solution evidement)

L'idée de base est de partir sur une architecture globale en tableau la plus simple possible... dans ce cas, 3 colonnes, 1 lignes... certainement 2 par la suite pour le footer.
Le tout en essayant d'être sémantiquement ok... le plus possible et d'eviter d'avoir recours aux hacks pour IE (le plus possible aussi).

Voici le code HTML :

<table border="0" cellspacing="0" cellpadding="0" bgcolor="#000000">
  <tr>
    <td class="gauche">
		<div id="menu_container">
			<div id="logo"><!-- --></div>
			<form id="connexion">
			<div>
			<label>login</label><input type="text">
			<label>pass</label><input type="text">
			<!--<input type="image">-->
			</div>
			</form>
			<div id="nav_container">
			<ul id="navigation">
			<li><a id="lien1" title="accueil" accesskey="1" href="index.php"><span>accueil</span></a></li>
			<li><a id="lien2" title="articles" accesskey="2" href="articles.php"><span>articles</span></a></li>
			<li><a id="lien3" title="tests live" accesskey="3" href="tests_live.php"><span>tests live</span></a></li>
			<li><a id="lien4" title="clan" accesskey="4" href="tests_live.php"><span>clan</span></a></li>
			<li><a id="lien5" title="matchs" accesskey="5" href="matchs.php"><span>matchs</span></a></li>
			<li><a id="lien6" title="videos" accesskey="6" href="videos.php"><span>clan</span></a></li>
			<li><a id="lien7" title="forum" accesskey="7" href="forum.php" target="_blank"><span>forum</span></a></li>
			</ul>
			</div>
			<div id="navigation_bas"><!-- --></div>
		</div>   
	</td>
	<td class="seperation"><img src="img/fond_separation.gif" alt=""\></td>
	<td class="droite">
			<h1><!-- --></h1>
			<div id="bandeau"><!-- --></div>
	</td>
  </tr>
</table>


Et le code CSS, en commentaire LE problème :

/* CSS Document */

html * {
margin:0;
padding:0;
}
body {
background:#e4dbc7 url("img/fond_bg.gif") repeat-y;
font:11px "Trebuchet MS", sans-serif;
color:#FFF;
}
table {
width:100%;
}
form label {
	cursor:pointer;
}
fieldset {
	border:none;
}

/* Form field text-scaling */
input, select, textarea {
	font-size:100%;
}
img {
border:0;
}
/**********************************************************
	GAUCHE
************************************************************/
.gauche {
background-color:#591418;
width:445px;
vertical-align:top;
}

#menu_container {
width:445px;
height:600px;
}

#logo {
height:53px;
background:url("img/logo.gif") no-repeat;
}

form#connexion{
height:29px;
background-color:#000000;
padding:0 10px 0 10px;
}

div#nav_container {
height:157px;
background:url("img/main.gif") no-repeat;
position:relative;
}

ul#navigation{
/********* ligne à problème **************/
position:absolute;
/**************************************/
right:10px;
list-style-type:none;
}

ul#navigation li a{
display:block;
margin:0;
padding:0;
height:21px;
width:55px;
background:url("img/accueil.gif") no-repeat;
text-decoration: none;
border:1px solid #FFF;
}

ul#navigation li a:hover{
background:url("img/accueil_over.gif") no-repeat;
}

ul#navigation li a span{
position:absolute;
text-indent:-5000px;
}

div#navigation_bas{
height:19px;
background-color:#000000;
}

/**********************************************************
	FIN GAUCHE
************************************************************/
.seperation {
width:10px;
background-color:#FFFFFF;
vertical-align:top;
}
.droite {
background:#e4dbc7 url("img/fond_content.gif") repeat-x;
vertical-align:top;
}

h1{
margin-top:46px;
margin-left:431px;
margin-bottom:33px;
background:url("img/titre.gif") no-repeat;
width:101px;
height:12px;
}
#bandeau {
background:url("img/bandeau.jpg") no-repeat;
height:157px;
}


Avec ce code sur des navigateurs respectueux des standarts type firefox ou Safair... c'est impecc... par contre IE, cette ligne provoque un espacement de mes liens du menu... d'ailleurs un display:none fait le même effet sur les liens...
On retire le position:absolute et hop, ça marche sur IE et, bien entendu, plus sur les autres.

Biensûr ce problème pourrait vite contourner avec une feuille de style pour IE et les autres ou des commentaires IE mais ce qui me taraude, c'est pourquoi ces espaces sont créés par IE ?

J'ai volontairement encadré mes liens pour que vous puissiez constater la difference sur l'exemple en ligne, ici

Merci pour votre aide.
Modifié par u-lounge (12 Dec 2006 - 18:19)
Eldebaran a écrit :
Bonjour,

Ton problème ressemble à un problème de haslayout.

De plus, le code utilisé pour masquer les span me semble douteux. En général, on utilisera une des deux solutions suivantes, mais pas un mixte des deux :
[b]Solution 1 :[/b]
ul#navigation li a span{
	position: absolute;
	left: -5000px;
}

[b]Solution 2 :[/b]
ul#navigation li a span{
	text-indent: -5000px;
}
Merci beaucoup pour vos réponses... je vais tester tout ça... le code a évolué depuis... j'intègre vos nouvelles informations et conseils et je vous tiens au courant... le cas échéant, je mettrai "resolu".
Modifié par u-lounge (12 Dec 2006 - 12:59)
Bon, on avance... en effet, les symptomes concernant l'espacement vertical de mes liens étaient bien ceux d'un haslayout.
J'ai donc donné un width:100% à mes spans et comme par magie, le problème a disparu... plus étrange, quand je l'enlève ça marche encore... certainement le cache...
Par contre, en mettant les bons graphiques, je me suis aperçu que l'alignement était pas bon (il est à gauche par défaut), j'ai besoin de l'avoir à droite.
N'ayant pas pu faire l'alignment à droite dans le flow, j'ai donc opté pour une solution qui me resoud à la fois le problème d'espacement entre les liens et l'alignement recherché... le placement en absolu... inconvénient, je sors les elements du flux, ce qui est dans mon cas pas trop grave (du moins je crois), vu qu'ils restent "dans le flux" au niveau du code...

Concernant la ligne qui posait problème par rapport à l'affiche du texte sur les liens avec background image, les techniques à mpop dans notre cas (des spans dans des a dans des li), donnent les resultats suivants :

solution 1 (position absolue, left à -5000px) est ok sur IE 6 PC, Firefox 2 et Safari.

solution 2 (text-indent à -5000px) est ok sur IE 6 PC, pas bon sur Firefox et Safari.

De plus, la technique du text-indent avec un petit overflow:hidden marche à merveille sur les h1... sur IE 6 PC et Firefox, Safari.

Voilà, en tout cas merci à vous deux pour votre aide, je mets resolu et l'enlèverai si j'ai d'autres soucis sur ce projet. En tout cas, pour info, ci-dessous, les codes HTML et css qui marchent sur IE 6, Safari et Firefox :



<table border="0" cellspacing="0" cellpadding="0" bgcolor="#000000">
  <tr>
    <td class="gauche">
		<div id="menu_container">
			<div id="logo"><!-- --></div>
			<form id="connexion">
			<div id="form_container">
			<label id="logintxt" for="login">login</label><input type="text" id="login" name="login">
			<label id="passtxt" for="pass">pass</label><input type="text" id="pass" name="pass">
			<!--<input type="image">-->
			</div>
			</form>
			<ul id="navigation">
			<li><a id="lien1" title="accueil" accesskey="1" href="index.php"><span>accueil</span></a></li>
			<li><a id="lien2" title="articles" accesskey="2" href="articles.php"><span>articles</span></a></li>
			<li><a id="lien3" title="tests live" accesskey="3" href="tests_live.php"><span>tests live</span></a></li>
			<li><a id="lien4" title="clan" accesskey="4" href="tests_live.php"><span>clan</span></a></li>
			<li><a id="lien5" title="matchs" accesskey="5" href="matchs.php"><span>matchs</span></a></li>
			<li><a id="lien6" title="videos" accesskey="6" href="videos.php"><span>clan</span></a></li>
			<li><a id="lien7" title="forum" accesskey="7" href="forum.php" target="_blank"><span>forum</span></a></li>
			</ul>
			<div id="navigation_bas"><!-- --></div>
		</div>   
	</td>
	<td class="seperation"><img src="_img/bg_separation.gif" alt=""\></td>
	<td class="droite">
			<h1>accueil</h1>
			<div id="bandeau"><!-- --></div>
	</td>
  </tr>
</table>


/* CSS Document */

html * {
margin:0;
padding:0;
}
body {
background:#e4dbc7 url("../_img/_couleur_rouge/bg.gif") repeat-y;
font:11px "Trebuchet MS", sans-serif;
color:#FFF;
}
table {
width:100%;
}
form label {
	cursor:pointer;
}
fieldset {
	border:none;
}

/* Form field text-scaling */
input, select, textarea {
	font-size:100%;
}
img {
border:0;
}
/**********************************************************
	GAUCHE
************************************************************/
.gauche {
background-color:#591418;
width:445px;
vertical-align:top;
}
#menu_container {
width:445px;
height:600px;
}
#logo {
height:53px;
background:url("../_img/_couleur_rouge/logo.gif") no-repeat;
}

/***************************** FORMULAIRE **************************/
form#connexion{
height:29px;
background-color:#000000;
padding:0 10px 0 10px;
}
div#form_container {
padding-top:8px;
}
form#connexion label#passtxt{
padding-left:15px;
}
form#connexion label{
padding-right:10px;
}
form#connexion input{
background-color:#000000;
border:1px solid #FFF;
width:120px;
height:12px;
color:#FFFFFF;
}
/***************************** // FORMULAIRE **************************/

/***************************** NAVIGATION **************************/

ul#navigation{
list-style-type:none;
height:157px;
background:url("../_img/bg_nav.gif") no-repeat;
position:relative;
}

ul#navigation li a{
display:block;
position:absolute;
right:10px;
margin:0;
padding:0;
text-decoration: none;
height:21px;
/*border:1px solid #FFF;*/
}
ul#navigation li a#lien1{
background:url("../_img/_menu/accueil.gif") no-repeat;
width:55px;
top:10px;
}
ul#navigation li a#lien1:hover{
background:url("../_img/_menu/accueil_over.gif") no-repeat;
}
ul#navigation li a#lien2{
background:url("../_img/_menu/articles.gif") no-repeat;
width:60px;
top:31px;
}
ul#navigation li a#lien2:hover{
background:url("../_img/_menu/articles_over.gif") no-repeat;
}
ul#navigation li a#lien3{
background:url("../_img/_menu/tests_live.gif") no-repeat;
width:74px;
top:52px;
}
ul#navigation li a#lien3:hover{
background:url("../_img/_menu/tests_live_over.gif") no-repeat;
}
ul#navigation li a#lien4{
background:url("../_img/_menu/clan.gif") no-repeat;
width:31px;
top:73px;
}
ul#navigation li a#lien4:hover{
background:url("../_img/_menu/clan_over.gif") no-repeat;
}
ul#navigation li a#lien5{
background:url("../_img/_menu/matchs.gif") no-repeat;
width:57px;
top:94px;
}
ul#navigation li a#lien5:hover{
background:url("../_img/_menu/matchs_over.gif") no-repeat;
}
ul#navigation li a#lien6{
background:url("../_img/_menu/videos.gif") no-repeat;
width:50px;
top:115px;
}
ul#navigation li a#lien6:hover{
background:url("../_img/_menu/videos_over.gif") no-repeat;
}
ul#navigation li a#lien7{
background:url("../_img/_menu/forum.gif") no-repeat;
width:46px;
top:136px;
}
ul#navigation li a#lien7:hover{
background:url("../_img/_menu/forum_over.gif") no-repeat;
}
ul#navigation li a span{
position:absolute;
left:-5000px;
}

div#navigation_bas{
height:19px;
background-color:#000000;
}
/***************************** // NAVIGATION **************************/

/**********************************************************
	// GAUCHE
************************************************************/
.seperation {
width:10px;
background-color:#FFFFFF;
vertical-align:top;
/*background:#FFF url("img/fond_separation.gif") no-repeat top;*/
}
.droite {
background:#e4dbc7 url("../_img/bg_top.gif") repeat-x;
vertical-align:top;
}

h1{
margin-top:46px;
margin-left:431px;
margin-bottom:33px;
background:url("../_img/_couleur_rouge/titre/accueil.gif") no-repeat;
width:101px;
height:12px;
overflow:hidden;
text-indent:-5000px;
}
#bandeau {
/*margin-top:33px;*/
background:url("../_img/_bandeau/accueil/bandeau.jpg") no-repeat;
height:157px;
}



Et enfin, un lien temporaire pour le rendu, ici.