Vous ne pouvez pas styliser une pseudo-classe uniquement sur un élément particulier, de la même manière que vous ne pouvez pas avoir une pseudo-classe dans un attribut inline style = "..." (car il n'y a pas de sélecteur).
Vous pouvez le faire en modifiant la feuille de style, par exemple en ajoutant la règle:
#elid:hover { background: red; }
en supposant que chaque élément que vous souhaitez affecter a un ID unique pour lui permettre d'être sélectionné.
En théorie, le document que vous voulez est http://www.w3.org/TR/DOM-Level-2-Style/Overview.html, ce qui signifie que vous pouvez (étant donné une feuille de style intégrée ou liée préexistante) en utilisant une syntaxe telle que:
document.styleSheets[0].insertRule('#elid:hover { background-color: red; }', 0);
document.styleSheets[0].cssRules[0].style.backgroundColor= 'red';
IE, bien sûr, nécessite sa propre syntaxe:
document.styleSheets[0].addRule('#elid:hover', 'background-color: red', 0);
document.styleSheets[0].rules[0].style.backgroundColor= 'red';
Les navigateurs plus anciens et mineurs ne prendront probablement pas en charge l'une ou l'autre syntaxe. Le violon dynamique des feuilles de style est rarement fait car il est assez ennuyeux de bien faire, rarement nécessaire et historiquement gênant.
function sameOrigin(url) { var loc = window.location, a = document.createElement('a'); a.href = url; return a.hostname === loc.hostname && a.port === loc.port && a.protocol === loc.protocol; }
J'ai rassemblé une petite bibliothèque pour cela car je pense qu'il existe des cas d'utilisation valides pour manipuler des feuilles de style dans JS. Les raisons étant:
la source
Une fonction pour faire face aux trucs multi-navigateurs:
la source
Placez simplement le css dans une chaîne de modèle.
Créez ensuite un élément de style et placez la chaîne dans la balise de style et attachez-la au document.
La spécificité s'occupera du reste. Ensuite, vous pouvez supprimer et ajouter des balises de style de manière dynamique. C'est une alternative simple aux bibliothèques et à jouer avec le tableau de feuilles de style dans le DOM. Bon codage!
la source
insertAdjacentElement
nécessite 2 arguments dans les principaux navigateurs (Chrome, Firefox, Edge), dont le premier établissant la position par rapport à l'élément de référence ( voir ici ). Est-ce un changement récent? (Ajouté 'beforeend' à la réponse).Mon truc utilise un sélecteur d'attribut. Les attributs sont plus faciles à configurer par javascript.
css
javascript
html
la source
Il existe une autre alternative. Au lieu de manipuler directement les pseudo-classes, créez des classes réelles qui modélisent les mêmes choses, comme une classe "survolée" ou une classe "visitée". Style les classes avec le "." Habituel. syntaxe et vous pouvez ensuite utiliser JavaScript pour ajouter ou supprimer des classes d'un élément lorsque l'événement approprié se déclenche.
la source
:before
&:after
sont des pseudo éléments, pas des classes.Au lieu de définir directement des règles de pseudo-classe avec javascript, vous pouvez définir les règles différemment dans différents fichiers CSS, puis utiliser Javascript pour désactiver une feuille de style et en activer une autre. Une méthode est décrite dans A List Apart (qv. Pour plus de détails).
Configurez les fichiers CSS comme,
Et puis basculez entre eux en utilisant javascript:
la source
Comme déjà indiqué, ce n'est pas quelque chose que les navigateurs prennent en charge.
Si vous ne trouvez pas les styles de manière dynamique (c'est-à-dire en les extrayant d'une base de données ou autre), vous devriez être en mesure de contourner ce problème en ajoutant une classe au corps de la page.
Le css ressemblerait à quelque chose comme:
Et le javascript pour changer cela serait quelque chose comme:
la source
element.classList.add
pas bien pris en charge? Je continue de voir des gens faireelement.className +=
.Basculer entre les feuilles de style et les sortir est le moyen de le faire. Voici une bibliothèque pour créer des feuilles de style de manière dynamique, afin que vous puissiez définir des styles à la volée:
http://www.4pmp.com/2009/11/dynamic-css-pseudo-class-styles-with-jquery/
la source
Dans jquery, vous pouvez facilement définir des pseudo-classes de survol.
la source
voici une solution comprenant deux fonctions: addCSSclass ajoute une nouvelle classe css au document, et toggleClass l'allume
L'exemple montre l'ajout d'une barre de défilement personnalisée à un div
la source
Si vous utilisez REACT, il existe quelque chose qui s'appelle le radium . C'est tellement utile ici:
la source