Selektor CSS dla pierwszego elementu z klasą

944

Mam kilka elementów o nazwie klasy red, ale nie mogę wybrać pierwszego elementu za class="red"pomocą następującej reguły CSS:

.red:first-child {
    border: 5px solid red;
}
<p class="red"></p>
<div class="red"></div>

Co jest nie tak w tym selektorze i jak go naprawić?

Dzięki komentarzom zorientowałem się, że element musi być pierwszym dzieckiem jego rodzica, aby zostać wybranym, co nie jest moim przypadkiem. Mam następującą strukturę i ta reguła zawodzi, jak wspomniano w komentarzach:

.home .red:first-child {
    border: 1px solid red;
}
<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>

Jak mogę skierować pierwsze dziecko z klasą red?

Rajat
źródło
dla tych, które się mylą z powodu różnego rodzaju elementów w moim przykładzie (p, div), uczynienie ich takimi samymi również nie działa i problem nadal istnieje.
Rajat
4
Myślę, że tak powinien działać: selektor pierwszego dziecka ...
Felix Eve
28
: pierwsze dziecko nie byłoby wtedy dobrym imieniem. Gdybyś miał syna, a potem córkę, nie nazwałbyś swojej córki swoim pierworodnym. Podobnie, pierwszy .home> .red nie jest pierwszym dzieckiem .home, więc niewłaściwe byłoby nazywanie go takim.
BoltClock
Nie, tak powinno działać: pierwszy typ
Evan Thompson,
@EvanThompson Tak :first-of-type to działa.
TylerH

Odpowiedzi:

1423

Jest to jeden z najbardziej znanych przykładów nieporozumień autorów dotyczących sposobu :first-childdziałania. Wprowadzony w CSS2 The :first-childpseudoklasa oznacza pierwszego dziecka jego rodzica . Otóż ​​to. Istnieje bardzo powszechne nieporozumienie, że wybiera on dowolny element potomny, który jako pierwszy spełnia warunki określone przez resztę selektora złożonego. Ze względu na pracę w sposób selektorów (patrz tutaj o wyjaśnienie), że nie jest po prostu nieprawda.

Poziom selektorów 3 wprowadza :first-of-typepseudoklasę , która reprezentuje pierwszy element wśród rodzeństwa tego typu elementu. Ta odpowiedź wyjaśnia ilustracją różnicę między :first-childi :first-of-type. Jednak, podobnie jak w przypadku :first-child, nie uwzględnia żadnych innych warunków ani atrybutów. W HTML typ elementu jest reprezentowany przez nazwę znacznika. W pytaniu tym typem jest p.

Niestety, nie ma podobnej :first-of-classpseudoklasy do dopasowania pierwszego elementu potomnego danej klasy. Jednym z obejść tego problemu, które opracowaliśmy wspólnie z Leą Verou (choć całkowicie niezależnie), jest zastosowanie pożądanych stylów do wszystkich elementów w tej klasie:

/* 
 * Select all .red children of .home, including the first one,
 * and give them a border.
 */
.home > .red {
    border: 1px solid red;
}

... następnie „cofnij” style elementów z klasą następującą po pierwszej , używając ogólnego kombinatora rodzeństwa~ w nadrzędnej regule:

/* 
 * Select all but the first .red child of .home,
 * and remove the border from the previous rule.
 */
.home > .red ~ .red {
    border: none;
}

Teraz tylko pierwszy element z class="red"będzie miał obramowanie.

Oto przykład zastosowania reguł:

<div class="home">
  <span>blah</span>         <!-- [1] -->
  <p class="red">first</p>  <!-- [2] -->
  <p class="red">second</p> <!-- [3] -->
  <p class="red">third</p>  <!-- [3] -->
  <p class="red">fourth</p> <!-- [3] -->
</div>
  1. Nie stosuje się żadnych zasad; żadna ramka nie jest renderowana.
    Ten element nie ma klasy red, więc został pominięty.

  2. Stosowana jest tylko pierwsza reguła; renderowana jest czerwona ramka.
    Ten element ma klasę red, ale nie jest poprzedzony żadnymi elementami z klasą redw jej rodzicu. Zatem druga zasada nie jest stosowana, tylko pierwsza, a element zachowuje swoją granicę.

  3. Obie zasady są stosowane; żadna ramka nie jest renderowana.
    Ten element ma klasę red. Poprzedza go także co najmniej jeden inny element z klasą red. W ten sposób stosowane są obie reguły, a druga borderdeklaracja zastępuje pierwszą, a tym samym „cofając” ją, że tak powiem.

Jako bonus, mimo że został wprowadzony w Selectors 3, ogólny kombinator rodzeństwa jest w rzeczywistości dość dobrze obsługiwany przez IE7 i nowsze, w przeciwieństwie :first-of-typedo tych, :nth-of-type()które są obsługiwane tylko przez IE9. Jeśli potrzebujesz dobrego wsparcia przeglądarki, masz szczęście.

W rzeczywistości fakt, że kombinator rodzeństwa jest jedynym ważnym elementem tej techniki i ma tak niesamowite wsparcie przeglądarki, czyni tę technikę bardzo wszechstronną - możesz ją dostosować do filtrowania elementów innymi rzeczami, poza selektorami klas:

  • Możesz użyć tego do obejścia :first-of-typew IE7 i IE8, po prostu podając selektor typu zamiast selektora klasy (ponownie, więcej o jego niewłaściwym użyciu tutaj w dalszej części):

    article > p {
        /* Apply styles to article > p:first-of-type, which may or may not be :first-child */
    }
    
    article > p ~ p {
        /* Undo the above styles for every subsequent article > p */
    }
  • Możesz filtrować według selektorów atrybutów lub innych prostych selektorów zamiast klas.

  • Możesz także łączyć tę nadrzędną technikę z pseudoelementami, nawet jeśli pseudoelementy technicznie nie są prostymi selektorami.

Pamiętaj, że aby to zadziałało, musisz wcześniej wiedzieć, jakie będą domyślne style dla pozostałych elementów rodzeństwa, abyś mógł zastąpić pierwszą regułę. Dodatkowo, ponieważ wiąże się to z nadpisywaniem reguł w CSS, nie można osiągnąć tego samego za pomocą jednego selektora do użycia z Selectors API lub lokalizatorami Selenium CSS.

Warto wspomnieć, że Selektory 4 wprowadzają rozszerzenie :nth-child()notacji (pierwotnie zupełnie nowa pseudoklasa zwana :nth-match()), które pozwoli ci użyć czegoś :nth-child(1 of .red)w miejsce czegoś hipotetycznego .red:first-of-class. Ponieważ jest to stosunkowo nowa propozycja, nie ma wystarczającej liczby interoperacyjnych implementacji, aby można ją było zastosować w zakładach produkcyjnych. Mam nadzieję, że wkrótce się to zmieni. Tymczasem zaproponowane przeze mnie obejście powinno działać w większości przypadków.

Należy pamiętać, że ta odpowiedź zakłada, że ​​pytanie szuka każdego pierwszego elementu potomnego, który ma daną klasę. Nie ma ani pseudoklasy, ani nawet ogólnego rozwiązania CSS dla n-tego dopasowania złożonego selektora w całym dokumencie - to, czy rozwiązanie istnieje, zależy w dużej mierze od struktury dokumentu. jQuery zapewnia :eq(), :first, :lasti więcej do tego celu, ale znowu pamiętać, że działają one bardzo różnie od :nth-child()et al . Korzystając z interfejsu API Selektorów, możesz użyć pierwszego, document.querySelector()aby uzyskać pierwsze dopasowanie:

var first = document.querySelector('.home > .red');

Lub użyj document.querySelectorAll()z indeksem, aby wybrać dowolne określone dopasowanie:

var redElements = document.querySelectorAll('.home > .red');
var first = redElements[0];
var second = redElements[1];
// etc

Chociaż .red:nth-of-type(1)rozwiązanie w pierwotnie zaakceptowanej odpowiedzi Philipa Daubmeiera działa (pierwotnie napisane przez Martyn, ale od tego czasu usunięte), nie zachowuje się tak, jak byś tego oczekiwał.

Na przykład, jeśli chcesz tylko wybrać pw oryginalnym znaczniku:

<p class="red"></p>
<div class="red"></div>

... wtedy nie możesz użyć .red:first-of-type(odpowiednika .red:nth-of-type(1)), ponieważ każdy element jest pierwszym (i jedynym) jednym z jego typów ( pi divodpowiednio), więc oba zostaną dopasowane przez selektor.

Gdy pierwszy element pewnej klasy jest również pierwszym tego typu , pseudoklasa będzie działać, ale dzieje się tak tylko przez przypadek . To zachowanie zostało wykazane w odpowiedzi Filipa. Gdy tylko włożysz element tego samego typu przed tym elementem, selektor zawiedzie. Biorąc zaktualizowany znacznik:

<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>

Zastosowanie reguły z .red:first-of-typebędzie działać, ale gdy dodasz inną pbez klasy:

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

... selektor natychmiast zawiedzie, ponieważ pierwszy .redelement jest teraz drugim p elementem.

BoltClock
źródło
15
Czy jest jakiś sposób naśladować :last-of-class? Wybierz ostatni element klasy.
Rakieta Hazmat
1
@Rocket: Nie, że nie widzę :(
BoltClock
4
Niezła technika z rodzeństwem. Warto zauważyć, że działa to również z wieloma kombinatorami rodzeństwa, np. P ~ p ~ p wybierze trzeci element i poza nim: jsfiddle.net/zpnnvedm/1
Legolas
2
@BoltClock Tak, przepraszam, przyszedłem tutaj po rozwiązanie i nie przejmowałem się tak bardzo konkretnym przypadkiem OP. Naprawdę nie rozumiem, dlaczego general sibling selector ~działa jak a :not(:first-of-*)dla określonego typu, zakładam, że powinien on zastosować regułę do każdego pasującego elementu, ale jest stosowany tylko przy pierwszym dopasowaniu, nawet jeśli istnieją 3 lub więcej możliwych dopasowań.
Gerard Reches
2
Według caniuse o :nth-child(1 of .foo)przedłużenie został już wdrożony na Safari 9.1+. (Nie sprawdziłem jednak)
Danield
329

:first-childSelektor jest przeznaczony, jak sama nazwa mówi, aby wybrać pierwsze dziecko znacznika macierzystego. Dzieci muszą być osadzone w tym samym znaczniku nadrzędnym. Twój dokładny przykład zadziała (właśnie wypróbowałem tutaj ):

<body>
    <p class="red">first</p>
    <div class="red">second</div>
</body>

Może umieściłeś tagi w różnych tagach nadrzędnych? Czy Twoje tagi klasy są rednaprawdę pierwszymi tagami nadrzędnymi?

Zauważ też, że nie dotyczy to tylko pierwszego takiego znacznika w całym dokumencie, ale za każdym razem, gdy jest zawijany nowy rodzic, na przykład:

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

firsti wtedy thirdbędzie czerwony.

Aktualizacja:

Nie wiem, dlaczego Martyn usunął swoją odpowiedź, ale miał rozwiązanie, :nth-of-typeselektor:

.red:nth-of-type(1)
{
    border:5px solid red;
} 
<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>

Kredyty dla Martyn . Więcej informacji na przykład tutaj . Pamiętaj, że jest to selektor CSS 3, dlatego nie wszystkie przeglądarki go rozpoznają (np. IE8 lub starszy).

Philip Daubmeier
źródło
Mogła to być moja wina - jak wskazałem Martyn, że selektor CSS3 :nth-of-typecierpi na niewielki problem polegający na tym, że w ogóle nie działa w żadnej obecnej wersji IE.
Már Örlygsson
25
Trochę się zdezorientowałem czytając to. Ściśle .red:nth-of-type(1)wybierze dowolny element, który (a) jest pierwszym dzieckiem tego typu elementu, a (b) ma klasę „czerwoną”. Więc jeśli w przykładzie pierwszy <p> nie miałby klasy „czerwonej”, nie zostałby wybrany. Alternatywnie, jeśli oba <span> i pierwszy <p> miały klasę „czerwoną”, obie byłyby wybrane. jsfiddle.net/fvAxn
David
7
@ Dan Mundy: :first-of-typejest równoważne :nth-of-type(1), więc oczywiście też działa. Może również zawieść w ten sam sposób z tego samego powodu, który został podany w mojej odpowiedzi.
BoltClock
4
@David Jestem pewien, że :nth-of-typeoznacza „element / tag”, gdy mówi „typ”. Więc bierze pod uwagę tylko element, a nie rzeczy takie jak klasy.
gcampbell
2
@gcampbell: Tak, właśnie to oznacza i dlatego ta odpowiedź jest błędna. Powodem, dla którego wybrano słowo „typ”, jest to, aby nie łączyć Selektorów z HTML / XML, ponieważ nie wszystkie języki mają pojęcie „znaczników”, które definiują elementy.
BoltClock
74

Poprawna odpowiedź to:

.red:first-child, :not(.red) + .red { border:5px solid red }

Część I: Jeśli element jest pierwszy od swojego rodzica i ma klasę „czerwoną”, powinien uzyskać granicę.
Część II: Jeżeli element „.red” nie jest pierwszy względem elementu nadrzędnego, ale natychmiast podąża za elementem bez klasy „.red”, zasługuje również na honor tej granicy.

Fiddle lub tak się nie stało.

Odpowiedź Philipa Daubmeiera, mimo że została zaakceptowana, jest nieprawidłowa - patrz załączone skrzypce.
Odpowiedź BoltClock działałaby, ale niepotrzebnie definiuje i zastępuje style
(szczególnie problem, w którym inaczej dziedziczy inną granicę - nie chcesz deklarować innej granicy: brak)

EDYCJA: W przypadku, gdy kilkakrotnie „czerwony” następuje po kolorze innym niż czerwony, każda „pierwsza” czerwień otrzyma ramkę. Aby temu zapobiec, trzeba użyć odpowiedzi BoltClock. Zobacz skrzypce

SamGoody
źródło
2
Ta odpowiedź nie jest zła, selektor jest poprawny dla danego znacznika, ale powinienem powtórzyć, że sytuacja wymieniona w edycji jest powodem, dla którego stwierdzam, że zastąpienie jest konieczne, przynajmniej wtedy, gdy nie można zagwarantować struktury znaczników - tylko dlatego, że .redpodążanie za :not(.red)nie zawsze czyni go pierwszym .redwśród rodzeństwa. A jeśli granica musi zostać odziedziczona, wystarczy po prostu zadeklarować border: inheritzamiast border: nonew regule zastępowania.
BoltClock
3
To rozwiązanie jest najlepszym IMO, ponieważ możesz łatwo zrobić to samo dla ostatniego dziecka.
A1rPun
@ A1rPun Jak to zmienić dla ostatniego dziecka?
Willem
@Willem Wystarczy zmienić first-childna last-child, ale po przetestowaniu widzę, że to nie zawsze załatwia sprawę .
A1rPun
3
Przykro mi, ale nie pasuje do „pierwszego elementu potomnego, który ma klasę .red”, zamiast tego pasuje do „pierwszego elementu, jeśli ma klasę .red i pierwszy .red element po elemencie innym niż .red”. Te dwa nie są równoważne. Fiddle: jsfiddle.net/Vq8PB/166
Gunchars
19

możesz użyć first-of-typelubnth-of-type(1)

.red {
  color: green;  
}

/* .red:nth-of-type(1) */
.red:first-of-type {
  color: red;  
}
<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>

Nerdroid
źródło
6
To nie zadziała, jeśli masz klasę <p></p>między pierwszym spana pierwszym pelementem red. Spójrz na to JSFiddle .
Francisco Romero,
1
Widziałem teraz, że odtwarza w ostatnim przykładzie jego odpowiedzi to samo zachowanie, które tu wskazałem. Kiedy wypróbowałem twój przykład i „trochę grałem”, zauważam to zachowanie i chciałem wskazać, aby przyszli czytelnicy byli tego świadomi.
Francisco Romero,
13

Powyższe odpowiedzi są zbyt złożone.

.class:first-of-type { }

Spowoduje to wybranie pierwszego typu klasy. Źródło MDN

Gabriel Fair
źródło
4
Nie mogę znaleźć żadnego odniesienia do pierwszego typu, a pierwszy z typów dotyczy tylko nazwy znacznika; czy jesteś pewien, że ta odpowiedź jest poprawna?
Matt Broatch,
1
first-type przemianowano na first-of-type
Gabriel Fair
7
Nie działa z klasami. Tak powinno to działać, ponieważ wybranie n-tej klasy byłoby bardziej przydatne niż wybranie n-tej zmiennej. Ale „: first-of-type” zawsze działało tylko przez tagName. Jeśli tak się dzieje, że „pierwszorzędny” i „pierwszy z tagów” ​​odnoszą się do tego samego elementu, co często robią, łatwo jest pomylić się z myśleniem, że tak działa; a potem zastanawiasz się, co się zepsuło, gdy dojdziesz do sprawy, w której tak nie jest.
Evan Thompson,
2
Nie jestem pewien, dlaczego nie jest to wybrana odpowiedź. Robi dokładnie to, o co prosił PO, i działa idealnie. SMH.
Bernesto
1
@Bernesto, jeśli masz przypadek, w którym masz wiele elementów tego samego „typu”, powiedzmy <span>, a kilka ma klasę highlight. .highlight:first-of-typeSelektor będzie wybrać pierwszą instancję „typ” z wybranej klasy, w tym przykładzie pierwszym <span>, a nie pierwsza instancja klasy highlight. Tylko jeśli ta pierwsza instancja zakresu ma również wyróżnienie klasy, styl zostanie zaimplementowany. ( codepen.io/andrewRmillar/pen/poJKJdJ )
Sl4rtib4rtf4st
9

Aby dopasować selektor, element musi mieć nazwę klasy redi musi być pierwszym dzieckiem swojego rodzica.

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

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

<div>
    <span>Blah</span>
    <div><p class="red"></div> <!-- MATCH -->
</div>
Chetan Sastry
źródło
jest to poprawne i wydaje się, że to mój problem, ale czy istnieje sposób na wybranie pierwszego elementu z klasą, niezależnie od tego, czy poprzedza go inny element?
Rajat
Jeśli spojrzałeś na odpowiedź Martyns, nie musiałeś o to pytać :)
Philip Daubmeier
9

Ponieważ pozostałe odpowiedzi obejmować co złego z nią, postaram drugą połowę, jak to naprawić. Niestety nie wiem, czy masz tutaj rozwiązanie oparte wyłącznie na CSS , a przynajmniej nie o tym myślę . Istnieją jednak inne opcje ....

  1. Przypisuj firstklasę do elementu podczas jego generowania, w następujący sposób:

    <p class="red first"></p>
    <div class="red"></div>

    CSS:

    .first.red {
      border:5px solid red;
    }

    Ten CSS dopasowuje tylko elementy do obu first i redklas.

  2. Alternatywnie, wykonaj to samo w JavaScript, na przykład oto jQuery, którego byś użył do tego, używając tego samego CSS jak powyżej:

    $(".red:first").addClass("first");
Nick Craver
źródło
Jakiś czas temu wpadłem na rozwiązanie oparte wyłącznie na CSS ; Powtórzyłem to tutaj jako odpowiedź kanoniczną.
BoltClock
1
Dopóki nie ma czegoś takiego :first-of-class, sugerowałbym również dodanie dodatkowej klasy do pierwszego elementu. Na razie wydaje się najłatwiejszym rozwiązaniem.
Kai Noack,
7

Mam to w moim projekcie.

div > .b ~ .b:not(:first-child) {
	background: none;
}
div > .b {
    background: red;
}
<div>
      <p class="a">The first paragraph.</p>
      <p class="a">The second paragraph.</p>
      <p class="b">The third paragraph.</p>
      <p class="b">The fourth paragraph.</p>
  </div>

Yener Örer
źródło
5

Zgodnie z zaktualizowanym problemem

<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>

Co powiesz na

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

Spowoduje to wybranie klasy domu , następnie rozpiętość elementu i wreszcie wszystkie elementy .red które zostaną umieszczone bezpośrednio za elementami rozpiętości.

Odniesienie: http://www.w3schools.com/cssref/css_selectors.asp

StinkyCat
źródło
3

Możesz użyć n-tego typu (1), ale upewnij się, że witryna nie musi obsługiwać IE7 itp. Jeśli tak jest, użyj jQuery, aby dodać klasę ciała, a następnie znajdź element za pośrednictwem klasy treści IE7, a następnie nazwę elementu, a następnie dodaj w stylu n-tego dziecka.

Jamie Paterson
źródło
3

Możesz zmienić kod na taki, aby działał

<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>

To spełni twoje zadanie

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

Oto odniesienie CSS od SnoopCode na ten temat.

Prabhakar Undurthi
źródło
3

Używam poniżej CSS, aby mieć obraz tła dla listy ul li

#footer .module:nth-of-type(1)>.menu>li:nth-of-type(1){
  background-position: center;
  background-image: url(http://monagentvoyagessuperprix.j3.voyagesendirect.com/images/stories/images_monagentvoyagessuperprix/layout/icon-home.png);
  background-repeat: no-repeat;
}
<footer id="footer">
  <div class="module">
    <ul class="menu ">
      <li class="level1 item308 active current"></li>
      <li> </li>
    </ul> 
  </div>
  <div class="module">
    <ul class="menu "><li></li>
      <li></li> 
    </ul>
  </div>
  <div class="module">
    <ul class="menu ">
      <li></li>
      <li></li>
    </ul>
  </div>
</footer>

li bing zhao
źródło
2

Spróbuj tego :

    .class_name > *:first-child {
        border: 1px solid red;
    }
Loy
źródło
2

Z jakiegoś powodu żadna z powyższych odpowiedzi nie dotyczyła przypadku prawdziwego pierwszego i jedynego pierwszego dziecka rodzica.

#element_id > .class_name:first-child

Wszystkie powyższe odpowiedzi zakończą się niepowodzeniem, jeśli chcesz zastosować styl tylko do elementu podrzędnego pierwszej klasy w tym kodzie.

<aside id="element_id">
  Content
  <div class="class_name">First content that need to be styled</div>
  <div class="class_name">
    Second content that don't need to be styled
    <div>
      <div>
        <div class="class_name">deep content - no style</div>
        <div class="class_name">deep content - no style</div>
        <div>
          <div class="class_name">deep content - no style</div>
        </div>
      </div>
    </div>
  </div>
</aside>
Jawor Iwanow
źródło
1
Twoja odpowiedź jest zasadniczo zawarta w dwóch najwyższych odpowiedziach na to pytanie i nic nie dodaje. Ponadto użycie :first-childpseudoklasy jest mylące, ponieważ dodawanie go .class_nameprzed zmianą nie zmienia sposobu jego działania, a jedynie powoduje, że działa on jak filtr. Jeśli masz div, <div class="class_name">First content that need to be styled</div>to selektor nie pasuje, ponieważ nie jest to pierwsze dziecko.
j08691
Nie sądzę, że jest to takie proste dla kogoś, kto potrzebuje informacji. I tak, masz rację w tej sprawie. To służy bardziej konkretnemu przypadkowi. Właśnie dlatego pomyślałem, że może się przydać.
Jawor Iwanow
Właśnie tego potrzebowałem, precyzyjnego i zwięzłego. Dziękuję @YavourIvanov
Quantme
1

Wypróbuj to proste i skuteczne

 .home > span + .red{
      border:1px solid red;
    }
Przyjaciel
źródło
-1

Uważam, że przy użyciu względnego selektora + do wybierania elementów umieszczonych bezpośrednio po nim działa tutaj najlepiej (jak mało sugerowało wcześniej).

W tym przypadku można również użyć tego selektora

.home p:first-of-type

ale jest to selektor elementów, a nie klasa.

Tutaj masz ładną listę selektorów CSS: https://kolosek.com/css-selectors/

Nesha Zoric
źródło
-2

Wypróbuj to rozwiązanie:

 .home p:first-of-type {
  border:5px solid red;
  width:100%;
  display:block;
}
<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>

Link CodePen

Santosh Khalse
źródło
Pytanie brzmi: „ Selektor CSS dla pierwszego elementu z klasą ”, a nie „ Selektor CSS dla pierwszego elementu z nazwą znacznika ”.
GeroldBroser przywraca Monikę