当前位置: 首页 > 面试题库 >

CSS选择器以选择给定类的第一个元素

艾国安
2023-03-14
问题内容

我试图在ID或类’B’的元素中选择类’A’的第一个元素。我尝试了>
+和第一个子选择器的组合,因为它不是类元素’B’中的第一个元素。它起作用了,但是…我试图覆盖一些默认的CSS,并且我无法控制服务器端,似乎类’A’元素有时在不同的位置生成。这是一个例子:

<class-C>
  <class-B> might have a different name
      <some-other-classes> structure and element count might differ
      <class-A></class-A> our target
      <class-A></class-A> this shouldn't be affected
      <class-A></class-A> this shouldn't be affected
  </class-B>
</class-C>

有时,“ B”类的名称有所不同,“ A”之前的元素也有所不同。那么,有什么方法可以选择元素“ C”中首次出现的“ A”吗?因为“
C”类总是在那里。由于第一个“ A”元素的路径不同,所以我不能使用+>和第一个子选择器,但是元素“ C”始终存在,这将是一个不错的起点。


问题答案:

CSS3提供了:first-of-type伪类,用于相对于其兄弟对象选择其类型的第一个元素。但是,它没有:first-of-class伪类。

解决方法是,如果您知道其他.A元素的默认样式,则可以将覆盖规则与常规同级组合器~一起使用,以将样式应用于它们。这样,您可以“撤消”第一条规则。

坏消息是这~是一个CSS3选择器。
好消息是IE可以像CSS2一样从IE7开始识别它>,因此,如果您担心浏览器的兼容性,唯一失败的“主要浏览器”就是IE6。

因此,您有以下两个规则:

.C > * > .A {
    /* 
     * Style every .A that's a grandchild of .C.
     * This is the element you're looking for.
     */
}

.C > * > .A ~ .A {
    /* 
     * Style only the .A elements following the first .A child
     * of each element that's a child of .C.
     * You need to manually revert/undo the styles in the above rule here.
     */
}

下面说明了如何将样式应用于元素:

<div class="C">
    <!--
    As in the question, this element may have a class other than B.
    Hence the intermediate '*' selector above (I don't know what tag it is).
    -->
    <div class="B">
        <div class="E">Content</div> <!-- [1] -->
        <div class="F">Content</div> <!-- [1] -->
        <div class="A">Content</div> <!-- [2] -->
        <div class="A">Content</div> <!-- [3] -->
    </div>
    <div class="D">
        <div class="A">Content</div> <!-- [2] -->
        <div class="E">Content</div> <!-- [1] -->
        <div class="F">Content</div> <!-- [1] -->
        <div class="A">Content</div> <!-- [3] -->
    </div>
</div>
  1. 该元素没有class A。没有规则适用。

  2. 该元素具有class A,因此将应用第一个规则。但是,~选择器不需要在它之前发生任何其他此类元素,因此第二条规则 适用。

  3. 该元素具有class A,因此将应用第一个规则。根据的要求~,它也位于同一父项下具有相同类的其他元素之后,因此第二条规则也适用。第一条规则被覆盖。



 类似资料:
  • 问题内容: 我有一堆带有类名的元素,但是我似乎无法使用以下CSS规则选择第一个元素: 该选择器有什么问题,我该如何纠正? 多亏了这些评论,我才知道该元素必须是其父元素的第一个子元素才能被选中,而事实并非如此。我具有以下结构,并且该规则失败,如注释中所述: 我该如何针对上课的第一个孩子? 问题答案: 这是作者误解工作方式的最著名例子之一。在CSS2介绍,该伪类表示其父的第一个孩子。而已。有一个非常普

  • 问题内容: 以下是我的HTML页面的摘要: 在这里我想选择id =’platinum’的第三个td元素 我试过的是。 和 两者对于如何选择第三个td都不起作用 问题答案: 有一个没有ID 的空值,这会干扰计数。选择器的意思是“第n个元素”,而不是“第n个元素”。因此,具有该ID 的第三个实际上是整个行中的第四个。 使用CSS选择器无法选择具有特定ID 的第三个元素。您应该改用XPath:

  • 问题内容: 我正在寻找一个选择器,如果它们具有特定的子元素,它将选择所有元素。例如,选择所有带孩子的人。 可能? 问题答案: 如果元素包含特定的子元素,是否可以选择? 不幸的是还没有。 在CSS2和CSS3选择器的规格不允许任何形式的亲本选配。 关于规格变更的注意事项 从现在开始,这是关于此帖子准确性的免责声明。CSS中的父选择器已经讨论了很多年。由于尚未达成共识,因此变化不断发生。我将尝试使此答

  • 本文向大家介绍Jsoup 使用CSS选择器选择元素,包括了Jsoup 使用CSS选择器选择元素的使用技巧和注意事项,需要的朋友参考一下 示例 您可以在此处找到支持的选择器的详细概述。

  • 问题内容: 在以下HTML中,我想在图像悬停时将悬停效果应用于标题。是否有CSS选择器可以执行此操作? 的HTML 问题答案: 更新:主题说明符似乎已从Selectors Level 4规范的 编辑者草案(2014年5月6日)中 删除。这样就无法使用CSS来实现这一目标。 选择器级别4引入了主题说明符,该说明符允许: 选择。 当前不存在浏览器支持AFAIK。 您可以在JavaScript中对其进行

  • 问题内容: 这让我有些难过。我想在#contentdiv中将所有段落的第一个单词设为14pt,而不是默认的段落(12pt)。有没有办法在纯CSS中做到这一点,还是我将第一个单词包装在一个跨度中来完成此操作? 问题答案: 您正在寻找的是不存在的伪元素。有:first-letter和:first-line,但是没有:first-word。