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

CSS实现:排除页面首个img元素,选中其余所有img

问题:选中页面中除第一个img元素之外的所有img元素

页面中每个<p>标签包含混合内容,需要选中整个页面里除第一个img之外的所有img元素,尝试多种CSS选择器均未成功,以下是尝试的代码:

<style>
  img{ width:50px; height:50px; }
  
  /* 尝试的选择器均已注释 */
  /*p:not(p:first-of-type) > img{
    border:2px solid red 
  }*/
   
  /*p > :not(:first-of-type > img) {
    border:2px solid red 
  }*/
  /*p:not(p > img:nth-of-type(1)){
    border:1px solid red 
  }*/
  /*img:not(:nth-of-type(1)) {
    border:1px solid red;
  }*/
  /* *:not(img:first-of-type){
    border: 1px solid red;
  }*/
  /* *:not(img:first-of-type) > img {
    border: 1px solid red;
  }*/
  /* :not(*:first-of-type) img{
    border: 1px solid red;
  }*/ 
  *:not(:first-of-type > img) > img {
    border: 1px solid red;
  }
</style>
<p>hello</p>
<p>hello</p>
<p>hello</p>
<p>hello</p>
<p><img src="https://static.jsbin.com/images/dave.min.svg"></p>
<p>hello</p>
<p>hello</p>
<p>hello</p>

<p><img src="https://static.jsbin.com/images/dave.min.svg"></p>
<p>hello</p>
<p><img src="https://static.jsbin.com/images/dave.min.svg"></p>
<p>hello</p>
<p><img src="https://static.jsbin.com/images/dave.min.svg"></p>
<p>hello</p>
<p><img src="https://static.jsbin.com/images/dave.min.svg"></p>
<p>hello</p>
<p><img src="https://static.jsbin.com/images/dave.min.svg"></p>
<p>hello</p>
<p><img src="https://static.jsbin.com/images/dave.min.svg"></p>

问题分析

之前的选择器失效的核心原因:CSS的:first-of-type、:nth-of-type都是基于父元素的选择逻辑,每个img都在独立的<p>标签里,所以每个img都是各自父元素的第一个子元素,直接用img:not(:first-of-type)会选中所有img(因为每个img都是自身父级的:first-of-type),自然达不到预期效果。

解决方案

方法1:利用:has()选择器(现代浏览器支持)

先给所有img添加样式,再排除第一个包含img的<p>里的img:

img {
  width:50px; 
  height:50px;
  border: 2px solid red;
}

/* 选中页面中第一个包含img的p,移除其中img的边框 */
p:has(img):first-of-type img {
  border: none;
}

方法2:通用兄弟选择器(兼容性更好)

选中第一个包含img的<p>之后,所有包含img的<p>里的img:

img {
  width:50px; 
  height:50px;
}

/* 第一个含img的p之后,所有含img的p里的img添加边框 */
p:has(img) ~ p:has(img) img {
  border: 2px solid red;
}

方法3:全局选择结合优先级(无兼容性问题)

如果需要兼容不支持:has()的旧浏览器,可以用以下方式:

img {
  width:50px; 
  height:50px;
  border: 2px solid red;
}

/* 通过父级选择器优先级,仅移除第一个img的边框 */
body > p:nth-of-type(5) img {
  border: none;
}

注:这种方法依赖第一个img所在的<p>在页面中的具体位置(示例中是第5个p),如果页面结构变动需要调整选择器。


内容的提问来源于stack exchange,提问作者LΞИIИ

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 20:27:51