You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用CSS选择类为.pre的非首个元素?尝试选择器无效

解决CSS选择所有.pre元素但排除第一个的问题

首先得说清楚你原来的代码为什么没生效——看你的HTML结构,每个.pre都被包裹在单独的.line元素里,它们根本不是同级的兄弟节点!你用的.pre ~ .pre是相邻兄弟选择器,只能匹配同一个父元素下、在目标元素之后的兄弟元素,而你的每个.pre都有自己的.line父容器,这个选择器自然找不到任何匹配项。

下面给你两个可行的解决方案:

方案一:基于.line的位置选择(兼容性最好)

既然每个.pre对应一个.line,我们可以直接选中第2个及以后的.line里面的.pre,这样就能排除第一个.pre:

/* 所有.pre默认蓝色 */
.pre { 
  background: blue; 
}

/* 第2个及以后的.line下的.pre设为红色 */
.wrapper > .lines > .line:nth-child(n+2) > .pre { 
  background: red; 
}

这个方法几乎兼容所有浏览器(包括旧版IE9+),非常稳妥。

方案二:使用:has()伪类(灵活但需浏览器支持)

如果你的场景不需要兼容旧浏览器,想要更直接的选择逻辑,可以用CSS的:has()伪类来判断当前.pre的前面是否存在其他.pre元素:

.pre { 
  background: blue; 
}

/* 所有前面有其他.pre的元素设为红色 */
.wrapper .pre:has(~ .pre) { 
  background: red; 
}

注意::has()伪类需要Chrome 101+、Firefox 121+或Safari 15.4+的支持,如果你的项目需要兼容旧浏览器,优先选方案一。

验证示例

对应你的HTML结构:

<div class="wrapper">
  <span class="lines">
    <span class="line">
      <span class="pre"> Pretext 1 </span>
    </span>
    <span class="line">
      <span class="pre"> Pretext 2 </span>
    </span>
    <span class="line">
      <span class="pre"> Pretext 3 </span>
    </span>
  </span>
</div>

用方案一的代码后,第一个.pre会显示蓝色,后面的.pre都会变成红色,完全符合你的需求。

内容的提问来源于stack exchange,提问作者cycle4passion

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:52:10