28172 sujets

CSS et mise en forme, CSS3

Bonjour à tous.

J'essaie de faire un menu proprement en utilisant une liste. Jusque-là ca va. Mais lorsque je veux mettre un effet d'ombre au texte de mes boutons, c'est un plus galère. Ca fonctionne avec FF, mais IE, Safari et Chrome me font des misères. J'ai fait une recherche sur le forum et je n'ai pas trouvé la réponse. J'aimerai donc votre aide.

Voici le HTML :
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
      "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<?xml version="1.0" encoding="iso-8859-1"?>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">
	<head>
		<title>Sport</title>
		<meta http-equiv="Content-Type" content="application/xhtml+xml; charset=iso-8859-1" />
		<link rel="stylesheet" type="text/css" href="style.css" />
	</head>
	<body>
		<div name="site">
			<img src="bandeau_bleu.jpg" />
			<ul name="menu">
				<li><a href="index.htm" name="acceuil"><p class=ombre><span>Acceuil</span>Acceuil</p></a></li>
				<li><a href="skate.htm" name="skate"><p class=ombre><span>Skate</span>Skate</p></a></li>			
				<li><a href="roller.htm" name="roller"><p class=ombre><span>Roller</span>Roller</p></a></li>
				<li><a href="kite.htm" name="kite"><p class=ombre><span>Kite</span>Kite</p></a></li>
				<li><a href="surf.htm" name="surf"><p class=ombre><span>Surf</span>Surf</p></a></li>
				<li><a href="contact.htm" name="contact"><p class=ombre><span>Contact</span>Contact</p></a></li>
			</ul>
		</div>
	</body>


Et la CSS :
body {
	margin: 0;
	padding: 0;
	background-color: white;
	text-align: center;
	color: black;
}

div {
	margin-left: auto; 
	margin-right: auto; 
	width: 998px;
	font-family: Verdana, Arial, Helvetica, sans-serif;
	font-size: 11px;
	font-weight: bold;
	color: #001968;
	letter-spacing:1px; 
	background-color: yellow;
}

ul {
	padding: 0;
	margin: 0;
	list-style-type: none;

}

li {
	display: inline;
}

a {

	float: left;
	text-decoration: none;
	border: 0;
	color:#001968;
	outline: none;
}

p.ombre {
	color: pink;/*#aed0ff;*/
	background-color: red;
}

span {
	position: absolute;
	color: #001968;
	margin-top: -1px;
	height: 46px;
}


a[name=acceuil] {
	background-image: url("bouton_menu_acceuil.jpg");
	width: 100px;
	height: 46px;
}

a[name=skate] {
	background-image: url("bouton_menu.jpg");
	width: 197px;
	height: 46px;
}

a[name=roller] {
	background-image: url("bouton_menu.jpg");
	width: 197px;
	height: 46px;
}

a[name=kite] {
	background-image: url("bouton_menu.jpg");
	width: 197px;
	height: 46px;
}

a[name=surf] {
	background-image: url("bouton_menu.jpg");
	width: 197px;
	height: 46px;
}

a[name=contact] {
	background-image: url("bouton_menu_contact.jpg");
	width: 110px;
	height: 46px;
}

a:link { 
	text-decoration: none; 
	border: 0;
} 

a:focus {
	text-decoration:none;
	color:#001968;
	border:0;
}

a:visited { 
	text-decoration:none;
	color:#001968; 
} 

a:active { 
	text-decoration:none; 
	border:0;
} 


img {
	border:0;
}


Merci beaucoup pour votre aide.
Modifié par Bob33 (27 Jul 2009 - 12:46)
Bonjour,

Plusieurs choses, en mode compact:

1. J'ai l'impression que tu déclares le mauvais type MIME dans ton code HTML. Le type MIME déclaré devrait être le même que celui du serveur, et il y a de fortes chances pour que ton serveur déclare du text/html.

2. Dans la droite ligne du point précédent, je ne suis pas sûr que faire du XHTML 1.1 soit pertinent. Bon, concrètement ça ne change pas grand chose, les navigateurs s'en foutant royalement que tu fasse du faux XHTML 1.1 (en text/html...) ou du HTML 3.2 ou du machin pas déclaré, les seules choses qui leur importent étant le type MIME et la présence ou non d'un doctype. Mais, pour le principe, il est fort possible qu'HTML 4 ou XHTML 1.0 correspondent mieux à ce que tu veux faire.

3. Une déclaration XML après un doctype, ça se fait ça? Je n'ai pas vérifié mais ça ressemble fort à une erreur.

4. Un paragraphe (P) dans un lien (A), ce n'est pas possible en HTML 4, ou XHTML 1.*. Ce n'est valide qu'en HTML 5 (d'après les brouillons actuels).

5. Les effets d'ombrage, ça se fait a) avec du texte en image si on vise la compatibilité IE/FF3, ou b) avec du text-shadow en CSS autrement. Je recommande les images (avec texte alternatif qui va bien) pour les logos et éléments importants de l'interface, et text-shadow pour les petites améliorations esthétiques non indispensables (principe d'amélioration progressive).

6. Plutôt que d'utiliser des attributs name pour tes liens et tes conteneurs, il serait préférable d'utiliser des attributs id (ou à l'occasion class). Ça te fera des sélecteurs CSS compatibles IE6. Et name est destiné avant tout aux formulaires et éléments de formulaires.
Bonjour Bob33 et bienvenue sur Alsacréations,

a écrit :
3. Une déclaration XML après un doctype, ça se fait ça? Je n'ai pas vérifié mais ça ressemble fort à une erreur.


Voir Faut-il utiliser la déclaration XML dans ma page web ?

a écrit :
Les effets d'ombrage, ça se fait a) avec du texte en image si on vise la compatibilité IE/FF3, ou b) avec du text-shadow en CSS autrement. Je recommande les images (avec texte alternatif qui va bien) pour les logos et éléments importants de l'interface, et text-shadow pour les petites améliorations esthétiques non indispensables (principe d'amélioration progressive).


Oui, néanmoins, text-shadow ne fonctionne qu'avec Safari, d'après ce tutoriel.
Modifié par jQz (27 Jul 2009 - 14:08)
Merci pour ces premières réponses. Je vais corriger de ce pas les erreurs relevées par Florent V.

Ma question reste cependant entière. Je confirme que text-shadow ne fonctionne qu'avec Safari (et Chrome ?). Et mettre directement le texte de mes boutons dans les images ca a trois inconvénients :
1- page plus lourde. Une image par bouton au lieu d'une image pour tous les boutons
2- référencement. Le texte des images ne sera pas lu.
3- accessibilité. Idem, le texte des images ne sera pas lu par des synthétiseurs vocaux. La description de l'image peut y palier. Mais un texte à part serait vraiment mieux.
Modifié par Bob33 (27 Jul 2009 - 14:40)
jQz a écrit :
BOui, néanmoins, text-shadow ne fonctionne qu'avec Safari, d'après ce tutoriel.

Pas à jour. Fonctionne dans Safari 3+, Opera 9.5+, et Firefox 3.5.

Bob33 a écrit :
Je confirme que text-shadow ne fonctionne qu'avec Safari

C'est faux.

Bob33 a écrit :
1- page plus lourde. Une image par bouton au lieu d'une image pour tous les boutons

C'est vrai.

Bob33 a écrit :
2- référencement. Le texte des images ne sera pas lu.

À ma connaissance, c'est faux. Du moins si par «texte des images» tu entends le contenu de l'attribut alt de chaque image.

Bob33 a écrit :
3- accessibilité. Idem, le texte des images ne sera pas lu par des synthétiseurs vocaux.

C'est faux. Et l'attribut alt n'est pas une description de l'image, mais (autant que faire se peut) un équivalent textuel de l'image. Renseigner correctement l'attribut alt des images-bouton est LA technique d'accessibilité de référence pour rendre accessible ces images-bouton.

En passant, je déconseille la technique que tu as essayé d'appliquer dans ton exemple ci-dessus justement parce qu'elle pose un problème d'accessibilité: l'intitulé est présent en double, et sera restitué en double en mode vocal ou braille, et affiché en double avec des styles CSS désactivés. Il se peut que cette technique pose aussi un problème de référencement (anchor text redondant), mais ce n'est pas mon domaine.
Quand je parle de renseigner la description des images, je parle bien de l'attribut alt. Là on est d'accord.

text-shadow semble avoir conquis d'autres navigateurs que safari ok. Mais pas IE alors qu'il est utilisé par la majorité. Il faut donc trouver une autre solution.

Bien que discuter du bien-fondé de ma méthode soit très intéressant, j'avoue que j'aimerai bien trouver comment la faire fonctionner sur tous les navigateurs...
a écrit :
Pas à jour. Fonctionne dans Safari 3+, Opera 9.5+, et Firefox 3.5.


Je n'aurais pas du me fier au tutoriel et tester la propriété par moi même.
Néanmoins, merci pour l'information Smiley cligne .

a écrit :
C'est faux. Et l'attribut alt n'est pas une description de l'image, mais (autant que faire se peut) un équivalent textuel de l'image. Renseigner correctement l'attribut alt des images-bouton est LA technique d'accessibilité de référence pour rendre accessible ces images-bouton.


Pour en savoir plus sur l'attribut alt et sur l'accessibilité des images, consulter ce tutoriel.
Bob33 a écrit :
Bien que discuter du bien-fondé de ma méthode soit très intéressant, j'avoue que j'aimerai bien trouver comment la faire fonctionner sur tous les navigateurs...

Ok, it's your call. Pour ma part la question ne m'intéresse pas une seconde donc je passe mon tour, mais si quelqu'un d'autre veut se pencher dessus...
Merci pour tes réponses en tout cas.

Pour préciser peut-être un peu plus le problème, sous IE l'ombre se met bien mais le texte et son ombre sont positionnés en haut du bouton. Un line-height et un vertical-align: center n'y change rien. Sur Safari l'ombre est bien centré mais le texte est collé à gauche du bouton.

Une idée du pourquoi de ces différences et de comment y remédier ?