Načrtovanje in razvoj spletnih aplikacij

Verige selektorjev v CSS

Selektorje v CSS lahko povezujemo v daljše izraze. Tako izberemo elemente glede na njihov položaj v drevesni strukturi dokumenta, torej glede na odnos med starši, otroki, potomci in sorojenci.

Takšne povezave imenujemo kombinatorji. Najpogosteje uporabljamo kombinator za potomce (presledek), kombinator za neposredne otroke >, kombinator za neposrednega naslednjega sorojenca + in kombinator za vse naslednje sorojence ~.

 

Pomni: Presledek med selektorjema ni samo navaden razmik, ampak pomeni kombinator za potomce. Z njim izberemo elemente, ki so kjer koli znotraj drugega elementa.

Kombinacija Pomen
selektor1, selektor2 izbere elemente, ki ustrezajo prvemu ali drugemu selektorju
selektor1 selektor2 izbere elemente selektor2, ki so potomci elementov selektor1
selektor1 > selektor2 izbere elemente selektor2, ki so neposredni otroci elementov selektor1
selektor1 + selektor2 izbere element selektor2, če neposredno sledi elementu selektor1 in imata istega starša
selektor1 ~ selektor2 izbere vse elemente selektor2, ki sledijo elementu selektor1 in imajo istega starša

Okoli operatorjev >, + in ~ lahko zaradi boljše preglednosti pišemo presledke. Ti presledki so priporočljivi, niso pa nujni. Pri zapisu s podpičjem , ne gre za kombinator odnosa med elementi, ampak za združevanje več selektorjev v eno pravilo.

Osnovna pravila

  • Kombinatorji povezujejo selektorje in določajo odnos med elementi v dokumentu.
  • Presledek pomeni, da iščemo potomce, ne nujno neposredne otroke.
  • Kombinator > izbere samo neposredne otroke.
  • Kombinator + izbere samo en element, ki neposredno sledi drugemu elementu.
  • Kombinator ~ izbere vse naslednje sorojence istega starša.
  • Zapis selektor1, selektor2 ne opisuje sorodstvenega odnosa, ampak združuje več ločenih selektorjev.

Pozor: Kombinatorja + in ~ delujeta med sorojenci. To pomeni, da morata imeti oba elementa istega starša. Če tega pogoja ni, selektor ne bo deloval.

V spodnjih primerih bomo uporabili isto strukturo HTML:

<div>
   <p>To je odstavek Paragraph 1 v elementu div.</p>
   <p>To je odstavek Paragraph 2 v elementu div.</p>
   <span><p>To je odstavek Paragraph 3 v elementu div.</p></span>
</div>

<p>To je odstavek Paragraph 4, ki ni v elementu div.</p>
<p>To je odstavek Paragraph 5, ki ni v elementu div.</p>

Skupina selektorjev: div, p

Zapis div, p pomeni, da isto pravilo velja za oba selektorja. Izbrani bodo vsi elementi div in vsi elementi p. Ta zapis ne pomeni razmerja med elementi, ampak združevanje več selektorjev v eno pravilo.

div, p {
    color: orange;
}

To je odstavek Paragraph 1 v elementu div.

To je odstavek Paragraph 2 v elementu div.

To je odstavek Paragraph 3 v elementu div.

To je odstavek Paragraph 4, ki ni v elementu div.

To je odstavek Paragraph 5, ki ni v elementu div.

Pojasnilo: Obarvajo se vsi elementi div in vsi elementi p. Med njima ni posebnega razmerja; pravilo preprosto velja za obe skupini elementov.

Pomni: Zapis s podpičjem , uporabimo takrat, ko želimo isti slog uporabiti za več različnih selektorjev, ne da bi med njimi zahtevali sorodstveni odnos.

Potomec: div p

Selektor div p izbere vse odstavke p, ki so kjer koli znotraj elementa div. Ni pomembno, ali so neposredni otroci ali globlje v strukturi.

div p {
    color: orange;
}

To je odstavek Paragraph 1 v elementu div.

To je odstavek Paragraph 2 v elementu div.

To je odstavek Paragraph 3 v elementu div.

To je odstavek Paragraph 4, ki ni v elementu div.

To je odstavek Paragraph 5, ki ni v elementu div.

Pojasnilo: Obarvajo se vsi odstavki p, ki so znotraj elementa div, tudi tisti, ki niso neposredni otroci.

Pomni: Potomec pomeni širši odnos kot neposredni otrok. Med obema elementoma je lahko več vmesnih elementov.

Neposredni otrok: div > p

Selektor div > p izbere samo tiste odstavke p, ki so neposredni otroci elementa div. Če je odstavek znotraj drugega elementa, na primer span, ne bo izbran.

div > p {
    color: orange;
}

To je odstavek Paragraph 1 v elementu div.

To je odstavek Paragraph 2 v elementu div.

To je odstavek Paragraph 3 v elementu div.
(Ni neposredni otrok elementa div.)

To je odstavek Paragraph 4, ki ni v elementu div.

To je odstavek Paragraph 5, ki ni v elementu div.

Pojasnilo: Obarvajo se samo odstavki p, ki so neposredno v elementu div.

Neposredni naslednji sorojenec: div + p

Selektor div + p izbere samo tisti odstavek p, ki neposredno sledi elementu div. Izbran je le prvi naslednji sorojenec, če je ustrezne vrste.

div + p {
    color: orange;
}

To je odstavek Paragraph 1 v elementu div.

To je odstavek Paragraph 2 v elementu div.

To je odstavek Paragraph 3 v elementu div.

To je odstavek Paragraph 4, ki ni v elementu div.

To je odstavek Paragraph 5, ki ni v elementu div.

Pojasnilo: Obarva se samo tisti odstavek p, ki neposredno sledi elementu div.

Pozor: Kombinator + ne izbere vseh naslednjih elementov, ampak samo prvega ustreznega sorojenca takoj za prvim elementom.

Vsi naslednji sorojenci: div ~ p

Selektor div ~ p izbere vse odstavke p, ki sledijo elementu div in imajo z njim istega starša. Ni nujno, da mu sledijo neposredno.

div ~ p {
    color: orange;
}

To je odstavek Paragraph 1 v elementu div.

To je odstavek Paragraph 2 v elementu div.

To je odstavek Paragraph 3 v elementu div.

To je odstavek Paragraph 4, ki ni v elementu div.

To je odstavek Paragraph 5, ki ni v elementu div.

Pojasnilo: Obarvajo se vsi odstavki p, ki sledijo elementu div in imajo z njim istega starša. Med njimi so lahko tudi drugi elementi.

Primerjava zapisov

Zapis Izbere
selektor1, selektor2 vse elemente, ki ustrezajo prvemu ali drugemu selektorju
presledek vse potomce
> samo neposredne otroke
+ samo prvega naslednjega sorojenca
~ vse naslednje sorojence

Zapis selektor1, selektor2 združuje več selektorjev v isto pravilo. Presledek in operatorji >, + ter ~ pa določajo odnos med elementi v strukturi dokumenta.

Priporočila

  • Najprej razmisli, ali želiš združiti več selektorjev ali pa opisati odnos med elementi.
  • Zapis selektor1, selektor2 uporabi takrat, ko želiš isti slog uporabiti za več različnih elementov.
  • Za bolj natančno ciljanje elementov uporabi kombinator >, kadar potrebuješ samo neposredne otroke.
  • Kombinator + uporabi, kadar želiš izbrati samo prvi naslednji element.
  • Kombinator ~ uporabi, kadar želiš zajeti vse naslednje sorojence iste vrste.
  • Pri pisanju selektorjev ohrani preglednost in se izogibaj predolgim izrazom brez potrebe.

Pogoste napake

  • Zapis selektor1, selektor2 se razume, kot da bi opisoval odnos med elementoma, čeprav gre samo za združevanje selektorjev.
  • Presledek se razume kot nepomemben razmik, čeprav pomeni kombinator za potomce.
  • Zamenjuje se pomen potomca in neposrednega otroka.
  • Kombinator + se uporablja, kot da bi izbral več naslednjih elementov.
  • Kombinator ~ se uporablja med elementi, ki niso sorojenci.
  • Predpostavlja se, da bodo kombinatorji delovali tudi med elementi na različnih ravneh drevesne strukture.