Comment ajouter des règles CSS (par exemple strong { color: red }
) en utilisant Javascript?
<strong>
élément est ajouté au document.
Comment ajouter des règles CSS (par exemple strong { color: red }
) en utilisant Javascript?
<strong>
élément est ajouté au document.
Réponses:
Vous pouvez également le faire en utilisant les interfaces CSS de niveau 2 DOM ( MDN ):
var sheet = window.document.styleSheets[0];
sheet.insertRule('strong { color: red; }', sheet.cssRules.length);
... sur tout sauf (naturellement) IE8 et antérieurs, qui utilise sa propre formulation légèrement différente:
sheet.addRule('strong', 'color: red;', -1);
Il y a un avantage théorique à cela par rapport à la méthode createElement-set-innerHTML, en ce que vous n'avez pas à vous soucier de mettre des caractères HTML spéciaux dans le fichier innerHTML, mais en pratique, les éléments de style sont CDATA dans l'ancien HTML, et '<' et «&» sont de toute façon rarement utilisés dans les feuilles de style.
Vous avez besoin d'une feuille de style en place avant de pouvoir commencer à y ajouter comme ceci. Cela peut être n'importe quelle feuille de style active existante: externe, incorporée ou vide, peu importe. S'il n'y en a pas, le seul moyen standard de le créer pour le moment est d'utiliser createElement.
sheet = window.document.styleSheets[0]
(vous devez avoir au moins un <style type = "text / css"> </style>).
SecurityError: The operation is insecure.
L'approche simple et directe consiste à créer et à ajouter un nouveau style
nœud au document.
// Your CSS as text
var styles = `
.qwebirc-qui .ircwindow div {
font-family: Georgia,Cambria,"Times New Roman",Times,serif;
margin: 26px auto 0 auto;
max-width: 650px;
}
.qwebirc-qui .lines {
font-size: 18px;
line-height: 1.58;
letter-spacing: -.004em;
}
.qwebirc-qui .nicklist a {
margin: 6px;
}
`
var styleSheet = document.createElement("style")
styleSheet.type = "text/css"
styleSheet.innerText = styles
document.head.appendChild(styleSheet)
document.body
est également plus court à taper et plus rapide à exécuter que document.getElementsByTagName("head")[0]
et évite les problèmes inter-navigateurs de insertRule / addRule.
document.head.appendChild
.
document.body.appendChild(css);
vous, assurez-vous que le nouveau CSS est toujours la dernière règle.
La solution de Ben Blank ne fonctionnerait pas dans IE8 pour moi.
Cependant, cela a fonctionné dans 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);
}
head
before.cssText
, ou IE6-8 plantera si le cssCode
contient une @ -directive, comme @import
ou @font-face
, consultez la mise à jour de phpied.com/dynamic-script-and-style-elements-in-ie et stackoverflow .com / a / 7952904
Voici une version légèrement mise à jour de la solution de Chris Herring , en tenant compte du fait que vous pouvez également l'utiliser innerHTML
au lieu de créer un nouveau nœud de texte:
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 );
}
head
before.cssText
, ou IE6-8 plantera si le code
contient une @ -directive, comme @import
ou @font-face
, consultez la mise à jour de phpied.com/dynamic-script-and-style-elements-in-ie et stackoverflow .com / a / 7952904
La doublure la plus courte
// One liner function:
const addCSS = s =>(d=>{d.head.appendChild(d.createElement("style")).innerHTML=s})(document);
// Usage:
addCSS("body{ background:red; }")
Vous pouvez ajouter des classes ou des attributs de style élément par élément.
Par exemple:
<a name="myelement" onclick="this.style.color='#FF0';">text</a>
Où vous pouvez faire this.style.background, this.style.font-size, etc. Vous pouvez également appliquer un style en utilisant cette même méthode ala
this.className='classname';
Si vous voulez faire cela dans une fonction javascript, vous pouvez utiliser getElementByID plutôt que «this».
Cet exemple simple d'ajout <style>
en tête 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
YUI a récemment ajouté un utilitaire spécialement pour cela. Voir stylesheet.js ici.
C'est ma solution pour ajouter une règle css à la fin de la dernière liste de feuilles de style:
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 }");
Une autre option consiste à utiliser JQuery pour stocker la propriété de style en ligne de l'élément, y ajouter, puis mettre à jour la propriété de style de l'élément avec les nouvelles valeurs. Comme suit:
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);
}
Et puis exécutez-le avec les nouveaux attributs CSS en tant qu'objet.
appendCSSToElement("#ElementID", { "color": "white", "background-color": "green", "font-weight": "bold" });
Ce n'est peut-être pas nécessairement la méthode la plus efficace (je suis ouvert aux suggestions sur la façon d'améliorer cela. :)), mais cela fonctionne définitivement.
Voici un exemple de modèle pour vous aider à démarrer
Nécessite 0 bibliothèques et utilise uniquement javascript pour injecter à la fois HTML et CSS.
La fonction a été empruntée à l'utilisateur @Husky ci-dessus
Utile si vous souhaitez exécuter un script tampermonkey et souhaitez ajouter une superposition à bascule sur un site Web (par exemple, une application de notes par exemple)
// INJECTING THE HTML
document.querySelector('body').innerHTML += '<div id="injection">Hello World</div>';
// CSS INJECTION FUNCTION
///programming/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;}"
)
si vous savez qu'au moins une <style>
balise existe dans la page, utilisez cette fonction:
CSS=function(i){document.getElementsByTagName('style')[0].innerHTML+=i};
utilisation:
CSS("div{background:#00F}");
Voici ma fonction à usage général qui paramètre le sélecteur CSS et les règles, et prend éventuellement un nom de fichier css (sensible à la casse) si vous souhaitez ajouter à une feuille particulière à la place (sinon, si vous ne fournissez pas de nom de fichier CSS, il créera un nouvel élément de style et l'ajoutera à l'en-tête existant. Il créera au plus un nouvel élément de style et le réutilisera lors des futurs appels de fonction). Fonctionne avec FF, Chrome et IE9 + (peut-être plus tôt aussi, non testé).
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);
}
}
utiliser .css
dans Jquery comme$('strong').css('background','red');
$('strong').css('background','red');
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<strong> Example
</strong>