Style en ligne pour agir comme: survoler dans CSS


90

Je sais que l'incorporation de styles CSS directement dans les balises HTML qu'ils affectent va à l'encontre d'une grande partie de l'objectif de CSS, mais parfois c'est utile à des fins de débogage, comme dans:

<p style="font-size: 24px">asdf</p>

Quelle est la syntaxe pour incorporer une règle comme:

a:hover {text-decoration: underline;}

dans l'attribut style d'une balise A? Ce n'est évidemment pas ça ...

<a href="foo" style="text-decoration: underline">bar</a>

... puisque cela s'appliquerait tout le temps, par opposition à juste pendant le survol.


Théoriquement, si vous essayez de rendre le survol quelque chose de dynamique, vous pouvez utiliser javascript pour injecter une règle de survol dans une feuille de style en utilisant la liste window.document.styleSheets des feuilles existantes.
GAgne

Réponses:


95

J'ai bien peur que cela ne puisse pas être fait, les sélecteurs de pseudo-classes ne peuvent pas être définis en ligne, vous devrez le faire sur la page ou sur une feuille de style.

Je devrais mentionner que techniquement, vous devriez pouvoir le faire selon les spécifications CSS , mais la plupart des navigateurs ne le prennent pas en charge

Edit: Je viens de faire un test rapide avec ceci:

<a href="test.html" style="{color: blue; background: white} 
            :visited {color: green}
            :hover {background: yellow}
            :visited:hover {color: purple}">Test</a>

Et cela ne fonctionne pas dans IE7, IE8 beta 2, Firefox ou Chrome. Quelqu'un d'autre peut-il tester dans d'autres navigateurs?


3
C'est un projet de travail CSS 3 de très faible priorité qui n'a pas été mis à jour depuis six ans. D'après la spécification: «Il est inapproprié d'utiliser les brouillons de travail du W3C comme matériel de référence ou de les citer autrement que comme« travail en cours ». '
Jim

1
C'est vrai, mais les navigateurs implémentent certaines règles CSS3, devrait être probablement le mauvais mot dans ce contexte
Glenn Slaven

Les navigateurs implémentent généralement des fonctionnalités CSS qui sont dans un état de développement ultérieur, par exemple l'opacité provient de CSS Color (Last Call) et Media Queries est une recommandation candidate.
Jim

Style = ": hover {}" ne serait-il pas équivalent à "a {: hover {}}" dans la feuille de style? C'est évidemment une erreur de syntaxe.
Kornel

32
Cette réponse a été publiée il y a très longtemps, les choses ont changé depuis et la version actuelle de la spécification W3C pertinente - CSS Style Attribute Rec. ( w3.org/TR/css-style-attr/#syntax ) - indique clairement que l'attribut style ne peut contenir que le contenu d'un bloc de déclaration CSS. Il est donc désormais impossible d'insérer des pseudo éléments avec styleattribut.
Ilya Streltsyn le

24

Si vous ne faites que déboguer, vous pouvez utiliser javascript pour modifier le css:

<a onmouseover="this.style.textDecoration='underline';" 
    onmouseout="this.style.textDecoration='none';">bar</a>

1
J'ai recherché une solution avec JSF et cela m'a aidé à le réparer. onmousemove = "this.style.color = '## {cc.attrs.color}';" onmouseout = "this.style.color = 'blanc';"
kdoteu

17

Une solution simple:

   <a href="#" onmouseover="this.style.color='orange';" onmouseout="this.style.color='';">My Link</a>

Ou

<script>
 /** Change the style **/
 function overStyle(object){
    object.style.color = 'orange';
    // Change some other properties ...
 }

 /** Restores the style **/
 function outStyle(object){
    object.style.color = 'orange';
    // Restore the rest ...
 }
</script>

<a href="#" onmouseover="overStyle(this)" onmouseout="outStyle(this)">My Link</a>

16

Si c'est pour le débogage, ajoutez simplement une classe css pour le survol (puisque les éléments peuvent avoir plus d'une classe):

a.hovertest:hover
{
text-decoration:underline;
}

<a href="http://example.com" class="foo bar hovertest">blah</a>

2
C'est probablement ce qui se rapproche le plus de l'effet souhaité
Glenn Slaven

1

J'ai mis en place une solution rapide pour tous ceux qui souhaitent créer des popups de survol sans CSS en utilisant les comportements onmouseover et onmouseout.

http://jsfiddle.net/Lk9w1mkv/

<div style="position:relative;width:100px;background:#ddffdd;overflow:hidden;" onmouseover="this.style.overflow='';" onmouseout="this.style.overflow='hidden';">first hover<div style="width:100px;position:absolute;top:5px;left:110px;background:white;border:1px solid gray;">stuff inside</div></div>

0

Si cette <p>balise est créée à partir de JavaScript, vous avez une autre option: utilisez JSS pour insérer par programme des feuilles de style dans l'en-tête du document. Cela prend en charge '&:hover'. https://cssinjs.org/


-2

Je ne pense pas que jQuery charge les pseudo-sélecteurs non plus, mais il fournit un moyen rapide d'ajouter des événements à un, plusieurs ou tous vos contrôles et balises similaires sur une seule page.

Mieux encore, vous pouvez enchaîner les liaisons d'événements et tout faire dans une seule ligne de script si vous le souhaitez. Beaucoup plus facile que de modifier manuellement tout le HTML pour les activer ou les désactiver. Là encore, puisque vous pouvez faire la même chose en CSS, je ne sais pas que cela vous achète quoi que ce soit (à part apprendre jQuery).

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.