javascript - 如何动态创建可被早期规则覆盖的 css 样式规则

标签 javascript css dom

我一直在使用jss在我的元素中做动态样式。这在大多数情况下都非常有效,但我想做一些它似乎无济于事的事情。

我希望能够首先创建一组主要样式规则,然后创建一组默认样式规则,如果它们发生冲突,这些默认样式规则可以被主要样式规则覆盖。示例:

<div class="mainClass1 defaultClass1">text</div>
<script>
jss.set('.mainClass1', {
  color: 'red'
})

jss.set('.defaultClass1', {
  color: 'green'
})
</script>

我希望结果是文本是红色的,但是 jss 的运行方式,文本是绿色的。我希望我能以某种方式创建两个动态样式表,第一个是“默认”表,第二个是“主”表(以便主要覆盖默认值)。这可能吗?

更新 - 我确认了一种适用于原始 javascript 的技术:

var styleNode = document.createElement('style');
styleNode.type = 'text/css';
styleNode.rel = 'stylesheet';
document.head.appendChild(styleNode);
//styleNode.sheet.insertRule("#A" + ' { color:green; }', 1);

var styleNode2 = document.createElement('style');
styleNode2.type = 'text/css';
styleNode2.rel = 'stylesheet';
document.head.appendChild(styleNode2);
styleNode2.sheet.insertRule("#A" + ' { color:green; }', 0);
styleNode.sheet.insertRule("#A" + ' { color:red; }', 0);

即使在较早的样式表上添加了红色样式后,id 为“A”的元素仍保持绿色。现在我只是想知道我是否可以使用 jss 来做到这一点,或者我是否需要推出自己的东西。

为什么这不起作用?

var jss1 = jss.forDocument(document)
var jss2 = jss.forDocument(document)

jss2.set('#A', {
    color: 'green'
})
jss1.set('#A', {
    color: 'red'
})

最佳答案

对 jss 源代码的简要检查使我相信您的答案在于创建不同的样式表。从我的简短阅读来看,后来创建的样式表中的 CSS 似乎覆盖了先前创建的样式表中的 CSS。

“阅读源码”

关于javascript - 如何动态创建可被早期规则覆盖的 css 样式规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28669083/

相关文章:

css - 如何使用ie6实时编辑css

jquery 如何获取 div 的 css 属性

javascript - 有没有办法在 jquery 选择的后面添加 .trim() ?

javascript - 在函数中使用 "dynamic variables"

javascript - jQuery ajax 表单提交 - 如何确保使用动态加载的表单操作

php - CSS/PHP/MySQL - 将结果显示为 3 列

javascript - 跨浏览器跨操作系统获取 keyCode/字符按下 onkeydown 事件的方法

jquery - 图像属性是 DOM 的一部分吗(jQuery - webkit 与其他浏览器不一致)?

javascript - 如何将MediaFile对象转换为File对象?

javascript - 为 vue 组件创建别名?