我刚学会了我可以通过使用数据属性来选择元素,这很棒。然后,我想根据某些计算对这些元素进行不同的风格化。例如,我希望有4种风格,我想使用元素的现有[data-pid]
属性的模数来帮助确定样式。
例如,假设有一组div包含具有四种字体颜色之一(例如红色,橙色,黄色或绿色)的文本,并且单个div的颜色取决于其模数为4。我相信CSS(如果可能的话)会是这样的:
div[0=data-pid-modulus-by-4]{
color: red;
}
div[1=data-pid-modulus-by-4]{
color: orange;
}
div[2=data-pid-modulus-by-4]{
color: yellow;
}
div[3=data-pid-modulus-by-4]{
color: green;
}
是否可以使用CSS以类似于我上面说明的方式计算data-pid /属性的模数,或者我是否必须使用javascript来完成属性值的这个模数?如果不可能有人建议他们能想到的最小/最简单的js解决方案吗?
谢谢!
答案 0 :(得分:2)
这是一个简单的JavaScript解决方案:
var pids = document.querySelectorAll('[data-pid]');
Array.prototype.forEach.call(pids, function(elem, index) {
elem.classList.add('pid-mod-' + (index % 4));
});
.pid-mod-0 {
color: red;
}
.pid-mod-1 {
color: orange;
}
.pid-mod-2 {
color: yellow;
}
.pid-mod-3 {
color: green;
}
<div data-pid="0">0</div>
<div data-pid="1">1</div>
<div data-pid="2">2</div>
<div data-pid="3">3</div>
<div data-pid="4">4</div>
<div data-pid="5">5</div>
<div data-pid="6">6</div>
<div data-pid="7">7</div>
如果所有元素都是彼此的兄弟元素,那么您可以使用范围内的:nth-of-type()
或:nth-child()
。
div[data-pid]:nth-of-type(4n+1){
color: red;
}
div[data-pid]:nth-of-type(4n+2){
color: orange;
}
div[data-pid]:nth-of-type(4n+3){
color: yellow;
}
div[data-pid]:nth-of-type(4n+4){
color: green;
}
<div class="only-pids-in-here">
<div data-pid="0">0</div>
<div data-pid="1">1</div>
<div data-pid="2">2</div>
<div data-pid="3">3</div>
<div data-pid="4">4</div>
<div data-pid="5">5</div>
<div data-pid="6">6</div>
<div data-pid="7">7</div>
</div>
答案 1 :(得分:1)
您不能直接在CSS中计算值,也不能在SASS / LESS中计算。
你必须使用Javascript才能做到这一点。
在CSS中计算html的部分是完全合理的,即使可行也是可怕的做法。
答案 2 :(得分:1)
您无法使用选择器中的属性选择器的值执行算术计算。属性值总是字符串,并且最多只支持子字符串匹配。
答案 3 :(得分:1)