如何动态创建可被早期规则重写的css样式规则
How to dynamically create a css style rule that is overridable by earlier rules
我一直在我的项目中使用js来进行动态样式。这在很大程度上起到了很好的作用,但我想做一些似乎没有帮助的事情。
我希望能够首先创建一组主样式规则,然后创建一组默认样式规则,如果主样式规则冲突,这些规则可以被覆盖。示例:
<div class="mainClass1 defaultClass1">text</div>
<script>
jss.set('.mainClass1', {
color: 'red'
})
jss.set('.defaultClass1', {
color: 'green'
})
</script>
我希望结果是文本是红色的,但按照jss的操作方式,文本是绿色的。我希望我能以某种方式创建两个动态样式表,第一个是"default"表,第二个是"main"表(这样main就会覆盖默认值)。这可能吗?
更新-我确认了一种适用于原始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。
"读取源"
使用CSS选择器
您可以非常简单地做到这一点,只需使用多个类选择器:
jss.set('.defaultClass1.mainClass1', {...});
这比.defaultClass
选择器具有更高的类别特异性。
使用JSS扩展插件
这个JSS插件简化了扩展样式。例如,您可以这样做(从存储库中的示例复制。
var button0 = {
padding: '20px',
background: 'blue'
}
var redButton = {
background: 'red'
}
window.styles = {
button0: button0,
button1: {
extend: [button0, redButton],
'font-size': '20px'
}
}
这将button0
和button1
样式注册到当前窗口(就像链接CSS文件一样)。
好吧,我发现了如何使用jss:
<div id="a">A div</div>
<script>
var jss1 = jss.forDocument(document)
jss1.defaultSheet = jss1._createSheet()
var jss2 = jss.forDocument(document)
jss2.defaultSheet = jss2._createSheet()
jss2.set('#A', {
color: 'green'
})
jss1.set('#A', {
color: 'red'
})
</script>
我发现jss懒散地创建它的工作表。因此,如果您想确保样式表的顺序,您需要使用_createSheet提前创建它们。
相关文章:
- 如何重写下面的函数,使其不会't用于循环
- 用Javascript修改内部标记的CSS规则
- 如何禁用和启用css规则
- 重写CSS:使用jquery显示none属性
- 重写需要javascript中带有import关键字的语法
- 在验证器中添加自定义规则以检查<ul>具有元素
- 模态提示-如何重写此代码
- 如何在JavaScript中创建打字机效果,这将考虑html标记规则
- Node.js Apache重写规则的版本
- 如何动态创建可被早期规则重写的css样式规则
- IIS重写规则,将querystring添加到ASP.net页面中的.css和.js引用中
- 如何在没有jquery元素的情况下重写css规则
- 在.htaccess中设置URL重写规则后javascript文件和css文件的路径
- 使用“重写”规则是否隐藏正在访问的实际URL
- 检测javascript和AngularJS重写规则后是否存在资源
- 用url参数重写规则
- htaccess重写整个网页的html标记的规则、CSS和JS文件
- 使JavaScript适应新的重写规则
- 为不同的Url重写htaccess规则
- .htaccess将规则重写为骨干路由器转换