Estoy buscando una manera de insertar una <style>
etiqueta en una página HTML con JavaScript.
La mejor forma que encontré hasta ahora:
var divNode = document.createElement("div");
divNode.innerHTML = "<br><style>h1 { background: red; }</style>";
document.body.appendChild(divNode);
Esto funciona en Firefox, Opera e Internet Explorer pero no en Google Chrome. También es un poco feo con el <br>
frente para IE.
¿Alguien sabe de una manera de crear una <style>
etiqueta que
Es mejor
Funciona con Chrome?
O tal vez
Esto es algo no estándar que debo evitar
Tres navegadores son geniales y ¿quién usa Chrome de todos modos?
javascript
html
css
Ameena sana
fuente
fuente
document.head
es compatible con todos los principales navegadores.document.querySelector("head")
? Es el evento apoyado por IE8 por fuentequerySelector()
; hoy, probablemente iríadocument.head
, disponible desde IE9style.styleSheet.cssText
. Antes de que se añadierastyle.styleSheet
era nulo.Aquí hay un script que agrega estilo IE
createStyleSheet()
yaddRule()
métodos a los navegadores que no los tienen:Puede agregar archivos externos a través de
y crear dinámicamente reglas a través de
fuente
Supongo que desea insertar una
style
etiqueta en lugar de unalink
etiqueta (haciendo referencia a un CSS externo), así que eso es lo que hace el siguiente ejemplo:Además, noté en su pregunta que está utilizando
innerHTML
. Esta es en realidad una forma no estándar de insertar datos en una página. La mejor práctica es crear un nodo de texto y agregarlo a otro nodo de elemento.Con respecto a su pregunta final, escuchará a algunas personas decir que su trabajo debería funcionar en todos los navegadores. Todo depende de tu audiencia. Si nadie en su audiencia está usando Chrome, entonces no se preocupe; sin embargo, si está buscando llegar a la mayor audiencia posible, entonces es mejor admitir todos los principales navegadores de grado A
fuente
styleNode.styleSheet.cssText = ...
<style>
las etiquetas deben estar ubicadas dentro del<head>
elemento, y cada etiqueta agregada debe agregarse al final de la<head>
etiqueta.Usando insertAdarestHTML para inyectar una etiqueta de estilo en la etiqueta del encabezado del documento :
DOM nativo:
jQuery :
fuente
Un ejemplo que funciona y cumple con todos los navegadores:
fuente
style
no tienerel
ohref
atributo, ¿quiso decirlink
?link
tiene que ver el elemento con la pregunta? el OP solicitóstyle
elemento. Esta respuesta no tiene nada que ver con la preguntastyle
es para agregar estilos en línea,link
es correcto para las fuentes de hojas de estilo y tiene la ventaja de evitar problemas entre navegadores.A menudo es necesario anular las reglas existentes, por lo que agregar nuevos estilos al HEAD no funciona en todos los casos.
Se me ocurrió esta función simple que resume todos los enfoques no válidos de "agregar al cuerpo" y es más conveniente de usar y depurar (IE8 +).
Demostración: codepen , jsfiddle
fuente
<style>
etiqueta fuera de la<head>
etiqueta. La etiqueta de estilo no debería aparecer en ningún otro lugar sino dentro de la<head>
etiqueta. Ese es un estándar html ampliamente adoptado. Hay un atributo de estilo para el estilo en línea y el atributo de estilo se puede aplicar a cualquier etiqueta dentro de la<body>
etiqueta, incluida la<body>
etiqueta propia.Esta variable de objeto agregará una etiqueta de estilo a la etiqueta principal con un atributo de tipo y una regla de transición simple dentro que coincida con cada id / clase / elemento. Siéntase libre de modificar la propiedad del contenido e inyectar tantas reglas como necesite. Solo asegúrese de que las reglas css dentro del contenido permanezcan en una línea (o 'escape' cada nueva línea, si así lo prefiere).
fuente
Aquí hay una variante para agregar dinámicamente una clase
fuente
Todo bien, pero para que styleNode.cssText funcione en IE6 con el nodo creado por javascipt, debe agregar el nodo al documento antes de configurar el cssText;
más información @ http://msdn.microsoft.com/en-us/library/ms533698%28VS.85%29.aspx
fuente
Esta función inyectará CSS cada vez que llame a la función de
appendStyle
esta manera:appendStyle('css you want to inject')
Esto funciona inyectando un
style
nodo en el encabezado del documento. Esta es una técnica similar a la que se usa comúnmente para cargar JavaScript de forma diferida. Funciona de manera consistente en la mayoría de los navegadores modernos.También puede cargar archivos CSS externos de forma diferida utilizando el siguiente fragmento de código:
fuente
Tu escribiste:
¿Por qué no esto?
En adelante, puede agregar reglas CSS fácilmente al código HTML:
... o directamente al DOM:
Espero que esto funcione en todas partes, excepto en los navegadores arcaicos.
Definitivamente funciona en Chrome en el año 2019.
fuente
Con mucho, la solución más sencilla. Todo lo que tiene que hacer es escribir lo mismo que normalmente declararía las
style
etiquetas, entre las teclas de retrocesofuente
Si el problema que enfrenta es inyectar una cadena de CSS en una página, es más fácil hacerlo con el
<link>
elemento que<style>
elemento.Lo siguiente agrega una
p { color: green; }
regla a la página.Puede crear esto en JavaScript simplemente codificando su cadena de CSS y agregando el
HREF
atributo. Mucho más simple que todas las peculiaridades de los<style>
elementos o acceder directamente a las hojas de estilo.Esto funcionará en IE 5.5 hacia arriba
fuente
http://jonraasch.com/blog/javascript-style-node
fuente