我有以下示例HTML:
<div class="a">
<div>
<ul class="b">
<li class="c">
<input id="123" type="checkbox" checked></input>
<label for="123">test</label>
</li>
<li class="c">
<input id="456" type="checkbox"></input>
<label for="456">test</label>
</li>
</ul>
</div>
</div>
以下CSS:
.a {
text-decoration: line-through;
}
.a .b .c input[type="checkbox"]:not(:checked) + label {
text-decoration: none !important;
}
这可以在这个JS小提琴中找到:https://jsfiddle.net/4q8a7yox/1/
我想从未检查项目的所有标签中删除直通。奇怪的是,Chrome控制台会显示“计算机”和“计算机”。文字装饰为“没有”,但它仍然显示出来。所有浏览器(IE10和FF)都以类似的方式失败。知道这里发生了什么吗?
答案 0 :(得分:1)
根据this question的答案,这是不可能的。您无法删除子节点的文本修饰属性。
因此,最好的办法是不将text-decoration: line-through;
添加到.a元素中,然后尝试将其删除以获取未经检查的输入,而是仅为已检查的输入添加直通。
答案 1 :(得分:0)
将您的选择器从.a
更改为label
。
<强> DEMO 强>
label {
text-decoration: line-through;
}
编辑:
<强> Updated Demo 强>
使用更多的特异性。深入研究html标签。对于这个例子,它将是:
.a > div > .b > .c > label {
text-decoration: line-through;
}
答案 2 :(得分:0)
你能反转css吗?
.a .b .c input[type="checkbox"]:checked + label {
text-decoration: line-through;
}
答案 3 :(得分:0)
请使用此CSS。我对你的CSS几乎没有什么改变。
.a .b .c input[type=checkbox] + label {
text-decoration: line-through;
}
.a .b .c input[type="checkbox"]:not(:checked) + label {
text-decoration: inherit !important;
}
答案 4 :(得分:0)
试试:
.a .c input[type="checkbox"]:checked + label {
text-decoration: line-through; }