我有一堆元素的类名红色,但我似乎不能选择class="red"使用以下CSS规则的第一个元素:

.home .red:第一个孩子{ 边框:1px纯红色; } < div class = "家" > < span >等等> < /跨度 < p class = "红色" >第一个< / p > < p class = "红色" >第二< / p > < p class = "红色" > < / p >第三 < p class = "红色" >第四< / p > < / div >

这个选择器出了什么问题,我如何纠正它,以类红色为目标的第一个孩子?


当前回答

您可以将代码更改为这样的内容以使其工作

<div class="home">
  <span>blah</span>
  <p class="red">first</p>
  <p class="red">second</p>
  <p class="red">third</p>
  <p class="red">fourth</p>
</div>

这是你的工作

.home span + .red{
      border:3px solid green;
    }

这里有一个来自SnoopCode的CSS参考。

其他回答

为了匹配选择器,元素的类名必须为红色,并且必须是其父元素的第一个子元素。

<div>
    <span class="red"></span> <!-- MATCH -->
</div>

<div>
    <span>Blah</span>
    <p class="red"></p> <!-- NO MATCH -->
</div>

<div>
    <span>Blah</span>
    <div><p class="red"></p></div> <!-- MATCH -->
</div>

由于其他答案涵盖了它的问题,我将尝试另一半,如何解决它。不幸的是,我不知道你有一个CSS唯一的解决方案,至少不是我能想到的。还有一些其他的选择....

在生成元素时给元素赋一个first类,如下所示: <p class="red first"></p> . < div class = "红色" > < / div > CSS: 当代。红色{ 边框:5px纯红色; } 这个CSS只匹配第一个类和红色类的元素。 或者,在JavaScript中做同样的事情,例如这里是你会使用jQuery来做这件事,使用与上面相同的CSS: $ (r:首先).addClass(“第一”);

只使用

.home > .red ~ .red{
 border: 1px solid red;
}

它会起作用的。

我相信使用相对选择器+来选择紧随其后的元素,在这里工作得最好(正如之前很少有人建议的那样)。

这种情况下也可以使用这个选择器

.home p:first-of-type

但这是元素选择器,不是类选择器。

这里你有一个CSS选择器列表:https://kolosek.com/css-selectors/

你可以使用n -of-type(1),但要确定网站不需要支持IE7等,如果是这种情况,使用jQuery添加主体类,然后通过IE7主体类找到元素,然后元素名称,然后添加第n个子样式。