J'ai besoin de créer une classe de feuille de style CSS dynamiquement en JavaScript et de l'assigner à certains éléments HTML comme - div, table, span, tr, etc. et à certains contrôles comme asp: Textbox, Dropdownlist et datalist.
C'est possible?
Ce serait bien avec un échantillon.
javascript
css
stylesheet
Himadri
la source
la source
Réponses:
Bien que je ne sache pas pourquoi vous souhaitez créer des classes CSS avec JavaScript, voici une option:
la source
Trouvé une meilleure solution, qui fonctionne sur tous les navigateurs.
Utilise document.styleSheet pour ajouter ou remplacer des règles. La réponse acceptée est courte et pratique mais cela fonctionne sur IE8 et moins aussi.
La fonction est utilisée comme suit.
la source
var styleSheetLength = styleSheet.cssRules ? styleSheet.cssRules.length : 0
et à substituer son utilisation à l'implémentation de la fonction.Réponse courte, elle est compatible "sur tous les navigateurs" (spécifiquement IE8 / 7):
Et ce dernier bit applique la classe à un élément:
Voici également une petite page de test: https://gist.github.com/shadybones/9816763
La clé est le fait que les éléments de style ont une propriété "styleSheet" / "sheet" que vous pouvez utiliser pour ajouter / supprimer des règles.
la source
Il existe un plugin jQuery léger qui permet de générer des déclarations CSS: jQuery-injectCSS
En fait, il utilise JSS (CSS décrit par JSON), mais il est assez facile à manipuler afin de générer des feuilles de style CSS dynamiques.
la source
YUI a de loin le meilleur utilitaire de feuille de style que j'ai vu. Je vous encourage à le vérifier, mais voici un avant-goût:
Il existe évidemment d'autres façons beaucoup plus simples de changer de style à la volée, comme celles suggérées ici. S'ils ont un sens pour votre problème, ils pourraient être meilleurs, mais il y a certainement des raisons pour lesquelles la modification de css est une meilleure solution. Le cas le plus évident est celui où vous devez modifier un grand nombre d'éléments. L'autre cas majeur est si vous avez besoin de vos changements de style pour impliquer la cascade. L'utilisation du dom pour modifier un élément aura toujours une priorité plus élevée. C'est l'approche du marteau et équivaut à utiliser l'attribut style directement sur l'élément html. Ce n'est pas toujours l'effet souhaité.
la source
Depuis IE 9. Vous pouvez maintenant charger un fichier texte et définir une propriété style.innerHTML. Donc, essentiellement, vous pouvez maintenant charger un fichier css via ajax (et obtenir le rappel), puis définir simplement le texte à l'intérieur d'une balise de style comme celle-ci.
Cela fonctionne dans d'autres navigateurs, je ne sais pas à quelle distance. Mais tant que vous n'avez pas besoin de prendre en charge IE8, cela fonctionnera.
et puis vous pouvez le faire extraire un fichier externe comme myCss.css
la source
Voici la solution de Vishwanath légèrement réécrite avec des commentaires:
la source
JSS est un projet intéressant qui pourrait vous aider dans votre tâche .
La bibliothèque JSS vous permet d'injecter dans la section DOM / head en utilisant la
.attach()
fonction.Repl version en ligne pour évaluation.
Plus d' informations sur JSS .
Un exemple:
la source
Utilisation de la fermeture de Google:
vous pouvez simplement utiliser le module ccsom:
Le code javascript tente d'être cross-browser lors de la mise en place du nœud CSS dans l'en-tête du document.
la source
https://jsfiddle.net/xk6Ut/256/
Une option pour créer et mettre à jour dynamiquement une classe CSS en JavaScript:
classe CSS
.....
...
la source
Regardé à travers les réponses et le plus évident et le plus simple est manquant: utilisez
document.write()
pour écrire un morceau de CSS dont vous avez besoin.Voici un exemple (regardez-le sur codepen: http://codepen.io/ssh33/pen/zGjWga ):
la source
la source
Voici ma solution modulaire:
Vous essentiellement partout dans votre code faites:
addNewStyle('body', 'color: ' + color1);
, oùcolor1
est définie la variable.Lorsque vous souhaitez "publier" le fichier CSS actuel que vous faites
submitNewStyle()
,puis vous pouvez encore ajouter plus de CSS plus tard.
Si vous souhaitez l'ajouter avec des "requêtes multimédias", vous avez la possibilité.
Après "ajout de nouveaux styles", vous utilisez simplement
submitNewStyleWithMedia('min-width: 1280px');
.C'était assez utile pour mon cas d'utilisation, car je modifiais le CSS du site Web public (pas le mien) en fonction de l'heure actuelle. Je soumets un fichier CSS avant d'utiliser des scripts "actifs", et le reste après (donne au site un aspect similaire à ce qu'il devrait avant d'accéder aux éléments via
querySelector
).la source
Pour le bénéfice des chercheurs; si vous utilisez jQuery, vous pouvez effectuer les opérations suivantes:
Évidemment, vous pouvez changer le CSS interne en ce que vous voulez.
Appréciez que certaines personnes préfèrent le JavaScript pur, mais cela fonctionne et a été assez robuste pour l'écriture / le remplacement dynamique des styles.
la source
Je regardais certaines des réponses ici, et je n'ai rien trouvé qui ajoute automatiquement une nouvelle feuille de style s'il n'y en a pas, et si ce n'est pas simplement en modifiant une existante qui contient déjà le style nécessaire, j'ai donc créé une nouvelle fonction ( devrait fonctionner sur tous les navigateurs, bien qu'il ne soit pas testé, utilise addRule et, en plus, seul le JavaScript natif de base, faites-moi savoir si cela fonctionne):
puis ajoutez simplement ces 2 fonctions d'assistance soit à l'intérieur de la fonction ci-dessus, soit n'importe où ailleurs:
(notez que dans les deux, j'utilise une boucle for au lieu de .filter, car les classes de style / liste de règles CSS n'ont qu'une propriété length et aucune méthode .filter.)
Puis pour l'appeler:
Faites-moi savoir si cela fonctionne pour votre navigateur ou donne une erreur.
la source