Comme vous le savez (ou devriez le savoir), un navigateur dit "aux normes" peut appliquer les
pseudo-classes hover et focus sur n'importe quelle balise.
Bref rappel
:hover
Souvenez-vous, la pseudo-classe hover, c'est ceci :
Code : CSS1
2
3
4
5
6 | h1 {
color: #000000;
}
h1:hover { /* Pseudo-classe */
color: #FF0000;
}
|
Donc, au passage de la souris sur la balise
H1, le texte, qui était noir d'origine, devient rouge.
C'est un bref rappel, tout cela est expliqué dans le cours XHTML/CSS de M@teo.
Le problème avec IE, c'est qu'il ne reconnaît cette fameuse pseudo-classe que pour les balises A (les liens hypertextes (ou hyperliens)).
:active
Code : CSS1
2
3
4
5
6 | h1 {
color: #000000;
}
h1:active { /* Pseudo-classe */
color: #FF0000;
}
|
Dans cet exemple, si vous cliquez sur l'élément H1, le texte se colorera en rouge. Bien évidemment ça ne marche pas avec le pauvre IE
:focus
Code : CSS1
2
3
4
5
6 | textarea {
background: #999999;
}
textarea:focus {
background: #FFFFFF;
}
|
Dans cet exemple, la couleur de fond de l'élément TEXTAREA deviendra blanche si le curseur d'écriture s'y trouve. Internet Explorer ne gère pas cette pseudo-classe.
Passons au script
Merci, tu nous informes que ça ne va pas, et alors ?
Alors ? Eh ben, à tout problème il y a une solution ne dit-on pas ?
La solution, n'est pas de moi, mais je vous la donne quand même (en citant la source, évidemment

).
Place au Javascript !
Créez un fichier dénommé
csshover.htc, avec un éditeur de texte (Bloc-notes) ou un éditeur HTML quelconque. Dans ce fichier fraîchement créé, copiez-collez le code ci-dessous.
Un fichier HTC est une sorte de fichier Javascript externe qui permet d'agir sur le comportement des éléments XHTML, tout cela, dans Internet Explorer.
Citation : ThundersebEn raison de problème avec les balises de code, j'ai placé le fichier
csshover.htc sur mon FTP. Il est exactement
ici.
Le script vient de ce site :
CSSHover
Personnellement, je ne saurais pas vous l'expliquer, donc, je ne vais pas le faire, de peur de dire des bêtises. De toute façon, l'important, c'est que cela marche
Maintenant, il s'agit de lier
csshover.htc à la page qui contient les pseudo-classes. Pour cela, il y a 2 manières de procéder :
- Via la propriété CSS behavior qui rendra invalide votre page CSS, mais est simple et courte
- Via un petit script Javascript intégré dans la page. C'est valide, mais il faut le mettre sur toutes vos pages. Cette deuxième méthode m'a été proposée par Steven. Merci à lui

Utilisation invalide avec les CSS
Dans votre feuille CSS, pour la balise body, faites comme ceci :
Code : CSS1
2
3 | body {
behavior:url("csshover.htc");
}
|
Behavior signifie
comportement. C'est en fait une propriété, créée par Microsoft, et qui permet d'attacher un fichier HTC. Cette propriété n'est pas valide W3C.
Et voilà, ça devrait marcher
Petite note
La propriété
behavior pose un problème. En effet, elle n'est pas valide ! Et pour cause, c'est une propriété propriétaire de Microsoft. Personnellement, enfin, on va peut-être m'engueuler ou me taper sur les doigts, mais la validité d'une page CSS n'est pas ma préoccupation première. Ce que je cherche, c'est une validation complète du code HTML, une bonne sémantique et un code bien propre. Dans mon optique, les CSS sont accessoires (on s'en sortait bien sans avant, non ? ). C'est un très beau langage, qu'il faut utiliser (à la poubelle des balises
font 
), mais je ne pense pas que la non-validité d'une page CSS à cause d'une seule petite propriété, qui nous permet de résoudre des problèmes de navigateur, puisse poser un réel problème. Mais c'est mon avis, et comme tous les avis, il est discutable
Utilisation valide avec les CSS
Si le fait d'avoir une page CSS invalide vous fait devenir chauve, voici une autre solution, valide : utiliser
behaviors via une expression conditionnelle, comme ceci :
Code : Autre - HTML1
| <!--[if IE]><style type="text/css">body{ behavior: url("csshover.htc") }</style><![endif]--> |
Utilisation valide avec Javascript
Pour cette méthode, nous n'allons pas utiliser un fichier
.htc, mais un fichier
.js (Javascript). Renommez simplement votre fichier
csshover.htc en
csshover.js. Cela dit, il faut apporter quelques modifications au fichier. En effet, dans le
.htc il y a 2 balises :
ATTACH et
SCRIPT. Supprimez la balise
ATTACH et supprimez les balises
SCRIPT d'ouverture et de fermeture
sans supprimer le contenu. Je ne vais pas afficher la source ici, mais vous pouvez la voir derrière ce lien :
http://nayi.free.fr/dev/xhtml-css/csshover.js 
.
Dans votre HEAD, placez ceci :
Code : HTML1 | <script type="text/javascript" src="csshover.js"></script>
|
C'est le script qui fera le lien entre la page en cours et le fichier .js.
Maintenant, il s'agit d'associer l'événement
onload pour «
actionner » le script au chargement de la page. Faites comme ceci :
Code : HTML1 | <body onLoad="parseStylesheets()">
|
Au chargement de la page (événement
onload), la fonction
parseStylesheets() va être appelée. C'est cette fonction qui est contenue dans le fichier
csshover.js.
Que ce soit avec le fichier .htc ou .js, si le Javascript est désactivé, ça ne fonctionnera pas ! Je n'ai qu'une chose à dire sur ça : temps pis pour ceux qui le désactivent
Pour finir, voici un petit exemple de menu déroulant en full-CSS :
http://www.xs4all.nl/~peterned/examples/cssmenu.html.