【问题标题】:CSS selector to exclude contents of a DIV element?CSS选择器排除DIV元素的内容?
【发布时间】:2015-09-03 02:07:12
【问题描述】:

在以下 HTML sn-p 中:

<div class="content">
  <p>Lorem ipsum</p>
  <img src="path/to/image.jpg" />
  <div class="product">
    <p>Dolor sit amet</p>
    <img src="path/to/another/image.jpg" />
  </div>
</div>

我需要一个 CSS 选择器来选择和设置第一个图像(.content div 元素中的那个)而不是第二个(.product div 元素中的那个)的样式。

我已经使用 :not() 否定伪类进行了几轮,但类似

.content *:not(.product) img

似乎没有用(可能是因为我把语法混了)。

如何选择 .content div 中任意位置的所有图像,但排除 .product div 中任意位置的所有图像?请注意,多个 div 可能嵌套在不同级别,因此我不能引用 .content div 的特定子级。

【问题讨论】:

  • 你试过.content &gt; img吗?
  • 在下面我的回答中找到正确的解决方案,也可以满足您对嵌套容器的要求。

标签: html css


【解决方案1】:

使用.content &gt; img 仅选择.content 的直接子代

这不包括.product 中的图片。

【讨论】:

  • 任何文档或更多关于为什么这样做的信息总是好的。但答案是正确的。
  • 感谢@FrankvanWensveen,很乐意为您提供帮助。那你能把我的答案标记为正确吗?
  • "请注意,多个 div 可能嵌套在不同的级别,因此我不能引用 .content div 的特定子级。"与“是的。就是那个!”。这是非常矛盾的。
  • @connexo 谢谢,我知道这一点。 OP的问题会提出更详细的答案,但是在这种情况下我的答案就足够了。我将编辑我的答案以扩展您的 cmets。
  • 这不是必需的,因为正确的答案已经到位。
【解决方案2】:

第一张图片与您的选择器不匹配,因为它需要一个元素作为介于 .contentimg 之间的中间层(并且其类不得为 .product),因此您可以改写

:not(.product) > img {

}

【讨论】:

  • 可能 OP 更需要 .content &gt; img, .content *:not(.product) &gt; img { ... } ,因为我敢打赌,这些不会是网站上唯一的图像,而且他可能不想针对它们全部。跨度>
【解决方案3】:

您实际上需要 两个 选择器,其中一个您已经拥有。那一个必须由另一个也找到直接子 img.content 的补充:

.content > img, .content *:not(.product) > img { ... }

【讨论】:

  • 好答案!但是有些极端情况没有涵盖..请参阅我的答案
【解决方案4】:

使用.content &gt;img。希望这对您有用。

【讨论】:

  • 任何文档或更多关于为什么这样做的信息总是好的。但答案是正确的。
  • 这是因为&gt; 是一个子元素选择器,仅适用于一级子元素
  • 我知道。读你答案的人吗?添加此类内容会改善您的答案。
【解决方案5】:

您的not 选择器并没有完全按照您的意愿行事;

.content *:not(.product) img 

正在选择属于任何元素的子元素的图像,class="product" 除外,这些元素本身class="content" 元素的子元素。

但是,在您的代码中,您要选择的图像不是.content孙子;这是一个直接的孩子。假设您的标记结构不会改变,您可以使用direct descendant selector 来实现您想要的:

.content > img {}

或者,你可以给你想要的图像选择一个类名,然后选择那个类,比如:

<img class="contentImg">

.contentImg {}

【讨论】:

    【解决方案6】:

    您需要尽可能多的规则,就像 .content 和图像之间的级别一样

    .content > span,
    .content > :not(.product) > span,
    .content > :not(.product) > :not(.product) > span,
    .content > :not(.product) > :not(.product) > :not(.product) > span
    {
      background-color: lightblue;
      }
    <div class="content">
      <p>Lorem ipsum</p>
      <span>YES</span>
      <div class="product">
        <p>Dolor sit amet</p>
        <span>NO</span>
      </div>
    </div>

    类似解决方案的问题

    .content *:not(.product) > img { ... }
    

    是否会匹配后代的序列

    .content > .product > anything > img
    

    【讨论】:

      【解决方案7】:

      试试这个:

      HTML: 添加了 id="image1"

      <div class="content">
        <p>Lorem ipsum</p>
        <img id="image1" src="path/to/image.jpg" />
         <div class="product">
          <p>Dolor sit amet</p>
          <img src="path/to/another/image.jpg" />
        </div>
      

      CSS:添加 ID 选择器

      #image1{
      width:100% (example)
      
      };
      

      【讨论】:

      • 这行不通,因为 Frank 正在询问如何选择 所有 属于 .content 子级的图像。 ID 一次只能选择一个,因为它们必须是唯一的。
      • 我需要一个 CSS 选择器来选择和设置第一张图片的样式
      • 阅读问题的最后一段,开头是“如何在我的 .content div 中选择所有图像”
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-30
      • 1970-01-01
      • 2019-04-07
      • 2022-07-27
      • 1970-01-01
      相关资源
      最近更新 更多