una página librería incluir formas escribir elementos ejemplos documentos div dentro cómo con como cargaríamos agregar abrir javascript css

página - ¿Cómo agregas CSS con Javascript?



escribir javascript en html (11)

¿Cómo se agregan las reglas de CSS (por ejemplo, strong { color: red } ) mediante el uso de Javascript?


Versión de JavaScript (ES6)

Aquí hay una solución limpia y legible para los navegadores modernos:

const css = document.createElement( ''style'' ); css.textContent = ` a { text-decoration: underline; } strong { color: red; } `; document.head.appendChild( css );

Nota: Esta solución utiliza Literales de plantilla que se introdujeron en ES6. Esto permite una forma más intuitiva de agregar CSS.


Aquí está mi función de propósito general que parametriza el selector de CSS y las reglas, y opcionalmente toma un nombre de archivo css (distingue entre mayúsculas y minúsculas) si desea agregarlo a una hoja en particular (de lo contrario, si no proporciona un nombre de archivo CSS, creará un nuevo elemento de estilo y lo agregará a la cabecera existente. Hará como máximo un nuevo elemento de estilo y lo volverá a utilizar en futuras llamadas a funciones). Funciona con FF, Chrome e IE9 + (quizás antes también, sin probar).

function addCssRules(selector, rules, /*Optional*/ sheetName) { // We want the last sheet so that rules are not overridden. var styleSheet = document.styleSheets[document.styleSheets.length - 1]; if (sheetName) { for (var i in document.styleSheets) { if (document.styleSheets[i].href && document.styleSheets[i].href.indexOf(sheetName) > -1) { styleSheet = document.styleSheets[i]; break; } } } if (typeof styleSheet === ''undefined'' || styleSheet === null) { var styleElement = document.createElement("style"); styleElement.type = "text/css"; document.head.appendChild(styleElement); styleSheet = styleElement.sheet; } if (styleSheet) { if (styleSheet.insertRule) styleSheet.insertRule(selector + '' {'' + rules + ''}'', styleSheet.cssRules.length); else if (styleSheet.addRule) styleSheet.addRule(selector, rules); } }


Aquí hay una versión ligeramente actualizada de la solución de Chris Herring , teniendo en cuenta que también se puede usar innerHTML en lugar de crear un nuevo nodo de texto:

function insertCss( code ) { var style = document.createElement(''style''); style.type = ''text/css''; if (style.styleSheet) { // IE style.styleSheet.cssText = code; } else { // Other browsers style.innerHTML = code; } document.getElementsByTagName("head")[0].appendChild( style ); }


El enfoque simple y directo es crear y agregar un nuevo nodo de style al documento.

var css = document.createElement("style"); css.type = "text/css"; css.innerHTML = "strong { color: red }"; document.body.appendChild(css);


Esta es mi solución para agregar una regla css al final de la última lista de hojas de estilo:

var css = new function() { function addStyleSheet() { let head = document.head; let style = document.createElement("style"); head.appendChild(style); } this.insert = function(rule) { if(document.styleSheets.length == 0) { addStyleSheet(); } let sheet = document.styleSheets[document.styleSheets.length - 1]; let rules = sheet.rules; sheet.insertRule(rule, rules.length); } } css.insert("body { background-color: red }");


Este sencillo ejemplo de agregar <style> en la cabecera de html

var sheet = document.createElement(''style''); sheet.innerHTML = "table th{padding-bottom: 0 !important;padding-top: 0 !important;}/n" + "table ul { margin-top: 0 !important; margin-bottom: 0 !important;}/n" + "table td{padding-bottom: 0 !important;padding-top: 0 !important;}/n" + ".messages.error{display:none !important;}/n" + ".messages.status{display:none !important;} "; document.body.appendChild(sheet); // append in body document.head.appendChild(sheet); // append in head

Estilo dinámico de origen : manipulación de CSS con JavaScript


La solución de Ben Blank no funcionaría en IE8 para mí.

Sin embargo, esto funcionó en IE8

function addCss(cssCode) { var styleElement = document.createElement("style"); styleElement.type = "text/css"; if (styleElement.styleSheet) { styleElement.styleSheet.cssText = cssCode; } else { styleElement.appendChild(document.createTextNode(cssCode)); } document.getElementsByTagName("head")[0].appendChild(styleElement); }


Otra opción es usar JQuery para almacenar la propiedad de estilo en línea del elemento, anexarla y luego actualizar la propiedad de estilo del elemento con los nuevos valores. Como sigue:

function appendCSSToElement(element, CssProperties) { var existingCSS = $(element).attr("style"); if(existingCSS == undefined) existingCSS = ""; $.each(CssProperties, function(key,value) { existingCSS += " " + key + ": " + value + ";"; }); $(element).attr("style", existingCSS); return $(element); }

Y luego ejecútelo con los nuevos atributos CSS como un objeto.

appendCSSToElement("#ElementID", { "color": "white", "background-color": "green", "font-weight": "bold" });

Este no necesariamente es el método más eficiente (estoy abierto a sugerencias sobre cómo mejorar esto :)), pero definitivamente funciona.


Puede agregar clases o atributos de estilo elemento a elemento.

Por ejemplo:

<a name="myelement" onclick="this.style.color=''#FF0'';">text</a>

Donde podría hacer this.style.background, this.style.font-size, etc. También puede aplicar un estilo usando este mismo método ala

this.className=''classname'';

Si desea hacer esto en una función de JavaScript, puede usar getElementByID en lugar de ''this''.


También puedes hacer esto usando DOM CSS 2 interfaces ( MDN ):

var sheet = window.document.styleSheets[0]; sheet.insertRule(''strong { color: red; }'', sheet.cssRules.length);

... en todos menos (naturalmente) IE, que usa su propia fraseología marginalmente diferente:

sheet.addRule(''strong'', ''color: red;'', -1);

Hay una ventaja teórica en esto en comparación con el método createElement-set-innerHTML, en el que no tiene que preocuparse por poner caracteres HTML especiales en el innerHTML, pero en la práctica los elementos de estilo son CDATA en HTML heredado y ''<'' y ''&'' rara vez se usan en las hojas de estilo de todos modos.

Necesita una hoja de estilo en su lugar antes de poder comenzar a agregarla de esta manera. Esa puede ser cualquier hoja de estilo activa existente: externa, incrustada o vacía, no importa. Si no hay uno, la única forma estándar de crearlo en este momento es con createElement.