如何使用Javascript添加CSS规则(例如strong { color: red }
)?
答案 0 :(得分:181)
简单直接的方法是在文档中创建并添加新的style
节点。
// 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)
答案 1 :(得分:94)
您也可以使用DOM Level 2 CSS接口(MDN)执行此操作:
var sheet = window.document.styleSheets[0];
sheet.insertRule('strong { color: red; }', sheet.cssRules.length);
...除了(自然)IE之外的所有IE,它使用自己的略有不同的措辞:
sheet.addRule('strong', 'color: red;', -1);
与createElement-set-innerHTML方法相比,这有一个理论上的优势,因为您不必担心在innerHTML中放置特殊的HTML字符,但在实践中,样式元素是旧版HTML中的CDATA,并且无论如何,'<'和'&'很少用在样式表中。
您需要一个样式表,然后才能开始像这样添加样式表。这可以是任何现有的活动样式表:外部,嵌入或空,无关紧要。如果没有,那么目前创建它的唯一标准方法是使用createElement。
答案 2 :(得分:25)
Ben Blank的解决方案对我来说不适用于IE8。
然而,这在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);
}
答案 3 :(得分:22)
以下是Chris Herring's solution的略微更新版本,考虑到您也可以使用innerHTML
而不是创建新的文本节点:
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 );
}
答案 4 :(得分:3)
YUI最近added a utility专门用于此。请在此处查看stylesheet.js。
答案 5 :(得分:3)
您可以逐个元素地添加类或样式属性。
例如:
<a name="myelement" onclick="this.style.color='#FF0';">text</a>
你可以在哪里做this.style.background,this.style.font-size等。你也可以使用同样的方法来应用一个样式ala
this.className='classname';
如果你想在javascript函数中执行此操作,可以使用getElementByID而不是'this'。
答案 6 :(得分:3)
这是在html
的头部添加<style>
的简单示例
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
答案 7 :(得分:2)
这是我在最后一个样式表列表末尾添加css规则的解决方案:
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 }");
答案 8 :(得分:1)
另一个选择是使用JQuery存储元素的内联样式属性,附加到它,然后使用新值更新元素的样式属性。如下:
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);
}
然后使用新的CSS属性作为对象执行它。
appendCSSToElement("#ElementID", { "color": "white", "background-color": "green", "font-weight": "bold" });
这可能不一定是最有效的方法(我对如何改进这个建议持开放态度。:)),但它确实有效。
答案 9 :(得分:1)
这是一个示例模板,可帮助您入门
需要0个库,并且仅使用javascript注入HTML和CSS。
该功能是从上述@Husky用户那里借来的
如果您想运行tampermonkey脚本并想在网站上添加切换叠加层(例如笔记应用),则很有用
// INJECTING THE HTML
document.querySelector('body').innerHTML += '<div id="injection">Hello World</div>';
// 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;}"
)
答案 10 :(得分:1)
最短的班轮
// One liner function:
const addCSS = (s)=>((d,e)=>{ e = d.createElement("style");e.innerHTML = s;d.head.appendChild(e)})(document);
// Usage:
addCSS("body{ background:red; }")
答案 11 :(得分:0)
这是我的通用函数,它参数化CSS选择器和规则,如果你想要添加到特定的工作表,可选择接受css文件名(区分大小写)(否则,如果你不提供CSS filename,它将创建一个新的样式元素并将其附加到现有的头部。它将最多创建一个新的样式元素,并在将来的函数调用中重用它。适用于FF,Chrome和IE9 +(可能更早,未经测试)。
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);
}
}
答案 12 :(得分:0)
在Jquery中使用.css
,例如$('strong').css('background','red');
$('strong').css('background','red');
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<strong> Example
</strong>
&#13;
答案 13 :(得分:0)
如果您知道页面中至少存在一个<style>
标签,请使用此功能:
CSS=function(i){document.getElementsByTagName('style')[0].innerHTML+=i};
用法:
CSS("div{background:#00F}");