Je cherche un moyen d'insérer une <style>
balise dans une page HTML avec JavaScript.
La meilleure façon que j'ai trouvée jusqu'à présent:
var divNode = document.createElement("div");
divNode.innerHTML = "<br><style>h1 { background: red; }</style>";
document.body.appendChild(divNode);
Cela fonctionne dans Firefox, Opera et Internet Explorer, mais pas dans Google Chrome. C'est aussi un peu moche avec l' <br>
avant pour IE.
Quelqu'un connaît-il un moyen de créer une <style>
balise
Est plus agréable
Fonctionne avec Chrome?
Ou peut-être
C'est une chose non standard que je devrais éviter
Trois navigateurs qui fonctionnent sont excellents et qui utilise quand même Chrome?
javascript
html
css
Ameena sana
la source
la source
document.head
est pris en charge dans tous les principaux navigateurs.document.querySelector("head")
? C'est un événement pris en charge par IE8 par la sourcequerySelector()
; aujourd'hui, j'irais probablement avecdocument.head
, disponible depuis IE9style.styleSheet.cssText
. Avant son ajout, la valeurstyle.styleSheet
était nulle.Voici un script qui ajoute un style IE
createStyleSheet()
et desaddRule()
méthodes aux navigateurs qui n'en ont pas:Vous pouvez ajouter des fichiers externes via
et créer dynamiquement des règles via
la source
Je suppose que vous souhaitez insérer une
style
balise par rapport à unelink
balise (référençant un CSS externe), c'est donc ce que fait l'exemple suivant:De plus, j'ai remarqué dans votre question que vous utilisez
innerHTML
. Il s'agit en fait d'une manière non standard d'insérer des données dans une page. La meilleure pratique consiste à créer un nœud de texte et à l'ajouter à un autre nœud d'élément.En ce qui concerne votre dernière question, vous allez entendre certaines personnes dire que votre travail devrait fonctionner sur tous les navigateurs. Tout dépend de votre public. Si personne dans votre audience n'utilise Chrome, ne le transpirez pas; cependant, si vous cherchez à atteindre le plus grand public possible, il est préférable de prendre en charge tous les principaux navigateurs de niveau A
la source
styleNode.styleSheet.cssText = ...
<style>
les balises doivent être placées dans l'<head>
élément et chaque balise ajoutée doit être ajoutée au bas de la<head>
balise.Utilisation de insertAdjacentHTML pour injecter une balise de style dans la balise d'en- tête du document :
DOM natif:
jQuery :
la source
Un exemple qui fonctionne et est compatible avec tous les navigateurs:
la source
style
n'a pasrel
ouhref
attribut - vouliez-vous direlink
?link
élément a à voir avec la question? le PO a demandé unstyle
élément. Cette réponse n'a rien à voir avec la questionstyle
est destiné à ajouter des styles en ligne,link
est correct pour les sources de feuilles de style et cela a l'avantage d'éviter les problèmes inter-navigateurs.Souvent, il est nécessaire de remplacer les règles existantes, donc l'ajout de nouveaux styles à HEAD ne fonctionne pas dans tous les cas.
Je suis venu avec cette fonction simple qui résume toutes les approches "ajouter au corps" non valides et est juste plus pratique à utiliser et à déboguer (IE8 +).
Démo: codepen , jsfiddle
la source
<style>
balise en dehors de la<head>
balise. La balise de style ne doit apparaître nulle part ailleurs que dans la<head>
balise. C'est la norme html largement adoptée. Il existe un attribut de style pour le style en ligne et un attribut de style peut être appliqué à n'importe quelle balise dans la<body>
balise, y compris la<body>
balise elle-même.Cette variable d'objet ajoutera une balise de style à la balise head avec l'attribut type et une règle de transition simple à l'intérieur qui correspond à chaque id / classe / élément. N'hésitez pas à modifier la propriété du contenu et à injecter autant de règles que nécessaire. Assurez-vous simplement que les règles CSS à l'intérieur du contenu restent sur une seule ligne (ou «échappez» chaque nouvelle ligne, si vous préférez).
la source
Voici une variante pour ajouter dynamiquement une classe
la source
Tout va bien, mais pour que styleNode.cssText fonctionne dans IE6 avec le nœud créé par javascipt, vous devez ajouter le nœud au document avant de définir le cssText;
plus d'informations @ http://msdn.microsoft.com/en-us/library/ms533698%28VS.85%29.aspx
la source
Cette fonction injectera css chaque fois que vous appelez la fonction
appendStyle
comme ceci:appendStyle('css you want to inject')
Cela fonctionne en injectant un
style
nœud dans la tête du document. Il s'agit d'une technique similaire à celle couramment utilisée pour le chargement paresseux de JavaScript. Il fonctionne de manière cohérente dans la plupart des navigateurs modernes.Vous pouvez également charger des fichiers CSS externes paresseux à l'aide de l'extrait de code suivant:
la source
Tu as écrit:
Pourquoi pas ça?
Désormais, vous pouvez facilement ajouter des règles CSS au code HTML:
... ou directement au DOM:
Je m'attends à ce que cela fonctionne partout sauf dans les navigateurs archaïques.
Fonctionne certainement dans Chrome en 2019.
la source
De loin la solution la plus simple. Tout ce que vous avez à faire est de taper la même chose que la façon dont vous déclareriez normalement les
style
balises, entre les backticksla source
Si le problème auquel vous êtes confronté consiste à injecter une chaîne de CSS dans une page, il est plus facile de le faire avec l'
<link>
élément qu'avec le<style>
élément.Ce qui suit ajoute une
p { color: green; }
règle à la page.Vous pouvez créer cela en JavaScript simplement en codant l'URL de votre chaîne de CSS et en lui ajoutant l'
HREF
attribut. Beaucoup plus simple que toutes les bizarreries des<style>
éléments ou l'accès direct aux feuilles de style.Cela fonctionnera dans IE 5.5 vers le haut
la source
http://jonraasch.com/blog/javascript-style-node
la source