以编程方式选择CSS [已关闭]

xcitsw88  于 2023-01-18  发布在  其他
关注(0)|答案(1)|浏览(145)

昨天关门了。
此帖子在19小时前编辑并提交审查。
Improve this question
我需要为相同级别的HTML元素定义CSS规则。
例如:

<li class="section_break"></li>

    <li class="background_color field-size-large"></li>
        
    <li class="background_image field-size-large"></li>

    <li class="section_break_1"></li>
    
    <li class="main_image field-size-large"></li>

我必须从section_break到section_break_1进行选择。前3个li元素是第1节的组,后面2个li元素是另一节的组。假设我们需要分别绘制覆盖它们的边框。
有什么简单的方法吗?
更接近的答案是这样的CSS selection for the random number of elements谢谢@m. pira的解决方案。但是,仍然需要在框的底部添加边框,直到最后。
P.S.不幸的是,我不能操作HTML元素,因为它们是用代码自动生成的。

uxhixvfz

uxhixvfz1#

尝试使用第n个类型的选择器。例如:

li:nth-of-type(1) {
  border-top: 1px solid red;
}

将在第一个 * li * 元素的顶部放置边框

    • 编辑**

如果你不知道页面中有多少个 * section_break * 元素,你可以添加attribute selectorsadjacent sibling combinator的组合,如下所示(codepen):

li[class*="section_break"]{
  border-top: 1px solid black;
  border-left: 1px solid black;
  border-right: 1px solid black;
  border-bottom: 0px solid black;
}

li[class*="section_break"] ~ :not(li[class*="section_break"]) { 
  border-top: 0px solid black;
  border-left: 1px solid black;
  border-right: 1px solid black;
  border-bottom: 0px solid black;
}

li[class*="section_break"] ~ :last-of-type:not(li[class*="section_break"]) {
  border-top: 0px solid black;
  border-left: 1px solid black;
  border-right: 1px solid black;
  border-bottom: 1px solid black;
}

li[class*="section_break"] ~ 
:not(li[class*="section_break"]):has(+ li[class*="section_break"]){
  border-bottom: 1px solid black;
}

第一个块选择每个在其class属性中包含字符串 * section_break * 的 * li *;第二个块选择其class属性中没有 * section_break * 的相邻 * li *;第三个块选择在其class属性中没有 * section_break * 的相邻 * li * 的最后一次迭代;最后一个块基于在其类中具有 * section_break * 的下一个兄弟向每个组的最后一个添加边界。

相关问题