Como você adiciona CSS com Javascript?

Como você adiciona regras CSS (por exemplo, strong { color: red } ) usando JavaScript?

Você também pode fazer isso usando as interfaces CSS do DOM Nível 2 ( MDN ):

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

… em tudo menos (naturalmente) IE, que usa seu próprio texto marginalmente diferente:

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

Há uma vantagem teórica em relação ao método createElement-set-innerHTML, em que você não precisa se preocupar em colocar caracteres HTML especiais no innerHTML, mas na prática os elementos de estilo são CDATA no HTML legado e ‘<' e '&' raramente são usados ​​em folhas de estilo de qualquer maneira.

Você precisa de uma folha de estilo antes de poder começar a anexá-la desta forma. Pode ser qualquer folha de estilo ativa existente: externa, incorporada ou vazia, não importa. Se não houver uma, a única maneira padrão de criá-la no momento é com createElement.

A abordagem simples e direta é criar e adicionar um novo nó de style ao documento.

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

A solução de Ben Blank não funcionaria no IE8 para mim.

No entanto, isso funcionou no 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); } 

Aqui está uma versão ligeiramente atualizada da solução de Chris Herring , levando em consideração que você também pode usar innerHTML em vez de criar um novo nó 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 ); } 

A YUI acaba de adicionar um utilitário especificamente para isso.

Você pode adicionar classs ou atributos de estilo em um elemento por elemento.

Por exemplo:

 text 

Onde você poderia fazer this.style.background, this.style.font-size, etc. Você também pode aplicar um estilo usando este mesmo método ala

 this.className='classname'; 

Se você quiser fazer isso em uma function javascript, você pode usar getElementByID em vez de ‘this’.

Este exemplo fácil de add

in head of 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 dynamic de origem - manipulando CSS com JavaScript

Versão JavaScript (ES6)

Aqui está uma solução limpa e legível para navegadores modernos:

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

Nota: Esta solução usa Literais de Template que foram introduzidos no ES6. Isso permite uma maneira mais intuitiva de adicionar CSS.

Outra opção é usar o JQuery para armazenar a propriedade de estilo in-line do elemento, anexá-la e, em seguida, atualizar a propriedade de estilo do elemento com os novos valores. Do seguinte modo:

 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); } 

E, em seguida, execute-o com os novos atributos CSS como um object.

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

Isso pode não ser necessariamente o método mais eficiente (estou aberto a sugestões sobre como melhorar isso :)), mas definitivamente funciona.

Esta é a minha solução para adicionar uma regra css no final da última lista de folhas 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 }"); 

Aqui está minha function de propósito geral que parametriza o seletor CSS e as regras, e opcionalmente aceita um nome de arquivo css (sensível a maiúsculas e minúsculas) se você deseja adicionar uma folha em particular (caso contrário, se você não fornecer um nome de arquivo CSS, irá criar um novo elemento de estilo e anexá-lo ao header existente. Ele fará no máximo um novo elemento de estilo e o reutilizará em futuras chamadas de function). Funciona com FF, Chrome e IE9 + (talvez também anterior, não testado).

 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); } } 

use .css no Jquery como $('strong').css('background','red');

 $('strong').css('background','red'); 
   Example  

Aqui está um exemplo de modelo para ajudar você a começar

Requer 0 bibliotecas e usa apenas javascript para injetar HTML e CSS.

A function foi emprestada do usuário @Husky acima

Útil se você quiser executar um script tampermonkey e quiser adicionar uma sobreposição de alternância em um site (por exemplo, um aplicativo de annotations, por exemplo)

 // INJECTING THE HTML document.querySelector('body').innerHTML += '
Hello World
'; // CSS INJECTION FUNCTION //https://stackoverflow.com/questions/707565/how-do-you-add-css-with-javascript 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 ); } // INJECT THE CSS INTO FUNCTION // Write the css as you normally would... but treat it as strings and concatenate for multilines insertCss( "#injection {color :red; font-size: 30px;}" + "body {background-color: lightblue;}" )