给定一个 * flat * 元素列表(必须是flat),我想找到一个理想的CSS选择器组合,它只****************************************************************************************************************************************************************************************************************************
(The每个复选框的项目数是动态的)
有办法重构CSS选择器吗?
我尝试过:has
或:is
的组合,但无法找到正确的组合。
理想情况下,我希望有一个选择器,用于在选中的输入和DOM树中其后的输入之间的<a>
项上着色。
下面的情况也有bug(见第4行):
- (这是个难题)*
* {
float: left;
user-select: none;
}
input {
clear: left;
}
input:checked ~ a,
input:checked ~ a ~ input:not(:checked) ~ :checked ~ a{
background: gold;
}
input:checked ~ a ~ input:not(:checked) ~ a {
background: none;
}
<input type=checkbox checked>
<a>🍒</a>
<a>🍒</a>
<a>🍒</a>
<input type=checkbox>
<a>🍒</a>
<a>🍒</a>
<a>🍒</a>
<a>🍒</a>
<input type=checkbox checked>
<a>🍒</a>
<input type=checkbox>
<a>🍒</a>
<a>🍒</a>
3条答案
按热度按时间gev0vcfq1#
我实际上能看到的唯一解决方案是一个“金字塔”选择器,使用
+
直到你知道你将拥有的最大元素数。0kjbasz62#
复杂CSS解决方案
这个解决方案涉及
position
、伪元素和:has()
。此解决方案将适用于未知数量的<a>
s和预先存在或动态添加的行(参见示例A)。示例A
示例中有详细注解
简单HTML解决方案
如果您正在寻找最简单的选择器,则需要使用HTML隔离布局中的每个组。将每个组 Package 在
<label>
中,并将clear: left
分配给每个label
。不需要最后一个规则集(参见例B)。示例B
c0vxltue3#
您可以将背景金作为一个宽伪元素,在紧跟着选中的输入的第一个樱桃下。
然后,紧跟着输入的每个cherry都有一个宽白色的after伪元素。
有点黑客的感觉,但给视觉效果,是需要的,但有多少樱桃: