Psevdorazredi in psevdoelementi omogočajo, da v CSS izberemo element v posebnem stanju ali pa poseben del elementa. Tako lahko določimo slog povezave, ko je nad njo kazalec, slog polja, ko je v fokusu, ali pa posebej oblikujemo prvo črko odstavka.
Psevdorazredi se zapisujejo z enim dvopičjem, psevdoelementi pa v sodobnem CSS praviloma z dvojnim dvopičjem. Pri nekaterih starejših psevdoelementih se zaradi združljivosti še vedno pojavlja tudi starejši zapis z enim dvopičjem, vendar je dvojni zapis preglednejši.
Pomni: Psevdorazred izbere element glede na stanje, položaj ali lastnost. Psevdoelement pa izbere določen del elementa ali ustvari navidezni del vsebine.
Osnovna pravila
- Psevdorazredi se zapisujejo z enim dvopičjem, na primer
:hover. - Psevdoelementi se v sodobnem CSS zapisujejo z dvojnim dvopičjem, na primer
::before. - Psevdorazredi pogosto opisujejo stanje elementa, na primer fokus, aktivnost ali položaj med sorodnimi elementi.
- Psevdoelementi pogosto omogočajo oblikovanje dela besedila ali dodajanje dekorativne vsebine.
- Pri uporabi obeh skupin moramo paziti, ali izbiramo element kot celoto ali samo njegov poseben del.
Pozor: Psevdoelement ne pomeni novega HTML elementa. Gre samo za poseben del prikaza ali za navidezno dodano vsebino.
Psevdorazredi
Psevdorazred izbere element glede na njegovo stanje, položaj ali lastnosti. Primer je :hover, ki izbere element, ko je nad njim kazalec.
Sintaksa psevdorazreda:
selektor:psevdorazred {
lastnost: vrednost;
}
Pogosto uporabljeni psevdorazredi so:
| Selektor | Primer | Opis |
|---|---|---|
:link |
a:link |
izbere neobiskane povezave |
:visited |
a:visited |
izbere obiskane povezave |
:hover |
a:hover |
izbere element, ko je nad njim kazalec |
:active |
a:active |
izbere element v trenutku aktivacije |
:focus |
input:focus |
izbere element, ki je trenutno v fokusu |
:focus-visible |
input:focus-visible |
izbere element v fokusu takrat, ko je smiselno prikazati poudarjen fokusni obris |
:focus-within |
form:focus-within |
izbere element, če je v fokusu on sam ali kateri od njegovih potomcev |
:first-child |
p:first-child |
izbere element, ki je prvi otrok svojega starša |
:last-child |
p:last-child |
izbere element, ki je zadnji otrok svojega starša |
:first-of-type |
p:first-of-type |
izbere prvi element dane vrste pri istem staršu |
:last-of-type |
p:last-of-type |
izbere zadnji element dane vrste pri istem staršu |
:nth-child(n) |
tr:nth-child(2) |
izbere n-ti otrok svojega starša |
:nth-of-type(n) |
p:nth-of-type(2) |
izbere n-ti element dane vrste pri istem staršu |
:not(selektor) |
p:not(.poseben) |
izbere elemente, ki ne ustrezajo podanemu selektorju |
:checked |
input:checked |
izbere označene potrditvene ali izbirne elemente |
:disabled |
input:disabled |
izbere onemogočene obrazčne elemente |
:enabled |
input:enabled |
izbere omogočene obrazčne elemente |
:required |
input:required |
izbere obvezna polja obrazca |
:optional |
input:optional |
izbere neobvezna polja obrazca |
:valid |
input:valid |
izbere polja z veljavno vrednostjo |
:invalid |
input:invalid |
izbere polja z neveljavno vrednostjo |
:target |
#odsek:target |
izbere element, na katerega kaže sidro v URL-ju |
:root |
:root |
izbere korenski element dokumenta, v HTML je to navadno html |
Psevdorazred :focus-visible je posebej uporaben pri dostopnosti, ker omogoča, da poudarjen fokus prikažemo takrat, ko ga uporabnik dejansko potrebuje, na primer pri uporabi tipkovnice.
Primer uporabe psevdorazreda :nth-child():
<table>
<tr>
<td>1</td>
<td>1</td>
<td>1</td>
</tr>
<tr>
<td>2</td>
<td>2</td>
<td>2</td>
</tr>
<tr>
<td>3</td>
<td>3</td>
<td>3</td>
</tr>
<tr>
<td>4</td>
<td>4</td>
<td>4</td>
</tr>
<tr>
<td>5</td>
<td>5</td>
<td>5</td>
</tr>
</table>
table { width: 400px; border-collapse: collapse; }
td { border: 1px solid gray; height: 40px; text-align: center; }
tr:nth-child(even) td { background-color: #FCCC88; }
| 1 | 1 | 1 |
| 2 | 2 | 2 |
| 3 | 3 | 3 |
| 4 | 4 | 4 |
| 5 | 5 | 5 |
Fokus in dostopnost
Psevdorazredi :focus, :focus-visible in :focus-within so zelo pomembni pri obrazcih in dostopnosti. :focus izbere element, ki je trenutno v fokusu, :focus-visible pa se uporablja takrat, ko mora biti fokusni poudarek jasno viden. :focus-within izbere nadrejeni element, če je v fokusu on sam ali kateri od njegovih potomcev.
<form class="obrazec">
<label for="ime">Ime:</label>
<input id="ime" type="text" placeholder="Vnesi ime" />
</form>
.obrazec {
padding: 10px;
border: 1px solid #ccc;
}
input:focus-visible {
outline: 3px solid orange;
outline-offset: 2px;
}
.obrazec:focus-within {
background-color: #FEF3D0;
}
Pozor: Fokusnega obrisa ne odstranjujemo brez ustrezne zamenjave. Uporabnik, ki uporablja tipkovnico, mora jasno videti, kateri element je trenutno izbran.
Strukturni psevdorazredi
Strukturni psevdorazredi izbirajo elemente glede na njihov položaj med sorodnimi elementi. Sem sodijo na primer :first-child, :last-child, :first-of-type, :last-of-type, :nth-child() in :nth-of-type(). Uporabni so, kadar želimo določene elemente izbrati brez dodatnih razredov v HTML kodi.
Pomni: :nth-child(n) upošteva položaj med vsemi otroki istega starša, :nth-of-type(n) pa položaj samo med elementi iste vrste.
Psevdoelementi
Psevdoelement izbere določen del elementa ali pa ustvari navidezni del vsebine, ki ga v HTML kodi ni. Tako lahko oblikujemo prvo črko, prvo vrstico ali dodamo dekorativno vsebino pred oziroma za elementom.
Sintaksa psevdoelementa:
selektor::psevdoelement {
lastnost: vrednost;
}
Zakaj uporabljamo dvojno dvopičje ::?
V starejših različicah CSS so se psevdoelementi pogosto zapisovali z enim dvopičjem. V sodobnem CSS se za psevdoelemente uporablja dvojno dvopičje ::, da jih lažje ločimo od psevdorazredov.
Najpogosteje uporabljeni psevdoelementi so:
| Selektor | Primer | Opis |
|---|---|---|
::before |
p::before |
vstavi vsebino pred element |
::after |
p::after |
vstavi vsebino za element |
::first-letter |
p::first-letter |
izbere prvi znak elementa |
::first-line |
p::first-line |
izbere prvo vrstico elementa |
::selection |
p::selection |
oblikuje del besedila, ki ga je uporabnik označil |
Pozor: Psevdoelementa ::before in ::after uporabljamo predvsem za dekorativno ali pomožno vsebino. Z njima ne nadomeščamo pomembne vsebine, ki bi morala biti zapisana v HTML.
Primer uporabe psevdoelementa ::first-letter:
<div>
<p>To je odstavek Paragraph 1 v elementu div.</p>
<p>To je odstavek Paragraph 2 v elementu div.</p>
<p>To je odstavek Paragraph 3 v elementu div.</p>
</div>
p::first-letter {
font-size: 2em;
font-weight: bold;
}
To je odstavek Paragraph 1 v elementu div.
To je odstavek Paragraph 2 v elementu div.
To je odstavek Paragraph 3 v elementu div.
Primer uporabe psevdoelementov ::before in ::after:
p::before {
content: "➜ ";
padding-right: 6px;
}
p::after {
content: " Pregledano!";
color: red;
font-style: italic;
}
➜ To je prvi odstavek. Pregledano!
➜ To je drugi odstavek. Pregledano!
Primerjava
| Vrsta | Izbira | Primer |
|---|---|---|
| psevdorazred | element v določenem stanju ali položaju | a:hover, input:focus |
| psevdoelement | poseben del elementa ali navidezna vsebina | p::first-letter, p::before |
Priporočila
- Za stanje elementa uporabi psevdorazred, za del elementa pa psevdoelement.
- Pri interaktivnih elementih ohrani jasno viden fokus.
- Strukturne psevdorazrede uporabi takrat, ko želiš izbirati elemente po položaju brez dodatnih razredov.
::beforein::afteruporabljaj predvsem za dekorativno vsebino.- Pri psevdoelementih v sodobni kodi uporabljaj zapis z dvojnim dvopičjem.
Pogoste napake
- Zamenjevanje psevdorazredov in psevdoelementov.
- Odstranjevanje fokusnega obrisa brez ustrezne nadomestne rešitve.
- Napačno razumevanje razlike med
:nth-child()in:nth-of-type(). - Uporaba
::beforein::afterza vsebino, ki bi morala biti del HTML dokumenta.