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, selektor2ne 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, selektor2uporabi 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, selektor2se 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.