如何使用Javascript添加CSS?
如何使用Javascript添加CSS规则(例如如何使用Javascript添加CSS?,javascript,css,Javascript,Css,如何使用Javascript添加CSS规则(例如strong{color:red})简单而直接的方法是创建一个新的样式节点并将其添加到文档中 // Your CSS as text var styles = ` .qwebirc-qui .ircwindow div { font-family: Georgia,Cambria,"Times New Roman",Times,serif; margin: 26px auto 0 auto;
strong{color:red}
)简单而直接的方法是创建一个新的样式
节点并将其添加到文档中
// 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)
您还可以使用DOM级别2 CSS接口()来实现这一点: …除了(自然)IE8和之前的版本外,其他所有版本都使用了略微不同的措辞:
sheet.addRule('strong', 'color: red;', -1);
与createElement集innerHTML方法相比,这在理论上有一个优势,即您不必担心在innerHTML中放入特殊的HTML字符,但实际上,样式元素是旧式HTML中的CDATA,而“YUI最近专门针对这一点。请参见此处。您可以逐个元素添加类或样式属性 例如:
<a name="myelement" onclick="this.style.color='#FF0';">text</a>
如果您想在javascript函数中执行此操作,可以使用getElementByID而不是“this”。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);
}
考虑到您也可以使用
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 );
}
这里是我的通用函数,它将CSS选择器和规则参数化,如果您希望添加到特定的工作表中,还可以选择使用CSS文件名(区分大小写)(否则,如果您不提供CSS文件名,它将创建一个新的样式元素并将其附加到现有的head。它将最多生成一个新的样式元素,并在将来的函数调用中重新使用)。与FF、Chrome和IE9+一起使用(可能更早,未经测试)
另一个选项是使用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" });
这不一定是最有效的方法(我愿意接受关于如何改进的建议:),但它确实有效。这是一个简单的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
Source这是我在最后一个样式表列表末尾添加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 }");
在Jquery中使用
.css
,比如$('strong').css('background','red')代码>
$('strong').css('background','red')代码>
示例
以下是一个示例模板,可以帮助您开始使用
需要0个库,仅使用javascript注入HTML和CSS
该函数是从上面的用户@Husky处借用的
如果您希望运行tampermonkey脚本并希望在网站上添加切换覆盖(例如,便笺应用程序),此功能非常有用
//注入HTML
document.querySelector('body').innerHTML+='Hello World';
//CSS注入函数
//https://stackoverflow.com/questions/707565/how-do-you-add-css-with-javascript
函数insertCss(代码){
var style=document.createElement('style');
style.type='text/css';
if(style.styleSheet){
//即
style.styleSheet.cssText=代码;
}否则{
//其他浏览器
style.innerHTML=代码;
}
document.getElementsByTagName(“head”)[0].appendChild(样式);
}
//将CSS注入到函数中
//像平常一样编写css。。。但将其视为字符串并连接多行
插入(
“#注入{颜色:红色;字体大小:30px;}”+
“正文{背景色:浅蓝色;}”
)
如果您知道页面中至少存在一个
标记,请使用此功能:
CSS=function(i){document.getElementsByTagName('style')[0].innerHTML+=i};
用法:
CSS("div{background:#00F}");
最短的一条衬垫
//一个线性函数:
const addCSS=s=>document.head.appendChild(document.createElement(“样式”)).innerHTML=s;
//用法:
addCSS(“body{background:red;}”)
是否应该将其附加到文档的头部而不是正文?@bobince-根据HTML规范,这是绝对的,但所有浏览器都可以在任何地方识别它们document.body
比document.getElementsByTagName(“head”)[0]
的键入时间短,执行速度快,避免了insertRule/addRule的跨浏览器问题。解决方案后面应该有一个长的“duhhh”。真不敢相信我竟然没有想到。在所有最近的浏览器中,你都可以使用document.head.appendChild
。这个解决方案要好得多!假设您有多个样式表:使用@bobince解决方案,您新添加的CSS可能会被页面上的第二个/第三个/etc.样式表覆盖。使用document.body.appendChild(css)代码>确保新CSS始终是最后一条规则。“颜色”。。哦,是的,哎呀!谢天谢地,这只是一个例子。我怀疑可能有一个DOM方法用于此,谢谢+1sheet来自sheet=window.document.styleSheets[0]
(你必须至少有一个)。谢谢,当我只需要刷新这两行的记忆时,Google首先显示的所有示例都非常庞大。我知道已经有一段时间了,但当我测试第一行时,我得到了SecurityError:操作不安全。
@user10089632您正在访问的样式表需要从与父文档相同的主机上提供,才能正常工作。我目前正在使用YUI进行工作,并试图找出如何编辑现有css规则的外部样式表。我不知道这个实用程序,它看起来很完美!谢谢Russell。同样的问题(答案是crossbrowser jQuery)@monkey:这是一个非常糟糕的解决方案,实际上并没有达到这里的要求。例如:如果文档中添加了一个新的
元素,会发生什么?使用事件处理程序内联JavaScript是一个非常糟糕的主意。您应该将内容与JavaScript中的功能和绑定事件处理程序分离—最好是在外部文件中。好的旧IE总是让生活更轻松。在设置之前,您应该将元素附加到头中。cssText
,否则如果cssCode
包含@指令,IE6-8将崩溃,像@import
或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 }");
CSS=function(i){document.getElementsByTagName('style')[0].innerHTML+=i};
CSS("div{background:#00F}");