如果我使用 CSSOM 添加样式,insertRule
我会注意到两件事。
在 Firebug 中查看时,添加的样式不会出现在 html 中。
如果样式标签被附加(例如:从头部移动到正文)到另一个元素(在 Firefox 和 Chrome 中发生),则添加的样式不起作用。
如果在附加标签之后添加样式,那么它们确实有效。他们仍然没有显示在 Firebug 中。附加工作表时必须重新分配(重新分配?),这使它显得更加陌生。
由于未在 Firebug 中显示,这可能是 Firebug 的一个怪癖,但不会动态添加的常规样式会显示出来。
对于附加后不起作用的样式,我想知道这是否是标准,因为这发生在 Firefox 和 Chrome 中。看看标准,我什么也没看到。除非我只是不理解他们。
var style = document.createElement('style'),
sheet = style.sheet;
document.head.appendChild(style);
//When line 6 is un-commented the styles work
//if line 8 is also commented out.
//document.querySelector('.container').appendChild(style);
//Get the sheet when line 6 is un-commented
sheet = style.sheet
sheet.insertRule('.test{color: red}');
document.querySelector('.container').appendChild(style);
//styles don't apply after the previous line
为清楚起见进行编辑:
如果您将<style></style>
标签附加到<head></head>
html 中,您可以使用 应用样式style.sheet.insertRule(styleString)
,并且添加的样式将应用于文档。
如果您已经将其附加<style></style>
到<head></head>
like <head><style></style></head>
,并尝试附加<style></style>
到其他地方,就像<div><style></style></div>
所有样式都丢失一样,请不要再次应用。
这是正常的吗?
代码流程:
作品:
- 追加
<style>
任何地方 - 添加样式
style.sheet.insertRule(styleString)
不起作用:
- 追加
<style>
任何地方 style.sheet.insertRule(styleString)
用to添加样式<style>
<style>
在其他地方追加相同
我的另一个问题是即使它们已应用于文档,添加的样式<style></style>
也不会显示出来。Firebug
编辑更清晰:
如果我在style
未修改样式表的情况下重新附加元素,则样式将保留:
var style = document.querySelector('style');
document.head.appendChild(style);
* {color: red}
<p>Hello world</p>
但是,如果我用 JS 更改了样式表,则更改将被撤消:
var style = document.querySelector('style'),
sheet = style.sheet;
sheet.insertRule('* {color: red}', 0);
document.head.appendChild(style); //Comment this line out, and this works.
/* CSS rules will be inserted with JS */
<p>Hello world</p>