3.4. Wartości inherit
, initial
, unset
i revert
inherit
, initial
, unset
i revert
Wprowadzenie: Więcej kontroli nad wartościami CSS
Oprócz standardowych wartości, które możemy przypisać właściwościom CSS (jak kolory, jednostki długości, słowa kluczowe), istnieje kilka specjalnych, globalnych słów kluczowych, które pozwalają nam precyzyjniej kontrolować mechanizmy kaskady i dziedziczenia. Są to: inherit
, initial
, unset
i revert
.
Zrozumienie ich działania pozwala na bardziej świadome zarządzanie stylami i resetowanie wartości do określonych stanów.
1. inherit
- Jawne dziedziczenie
Jak już wspomnieliśmy w poprzedniej lekcji, wartość inherit
**wymusza dziedziczenie** obliczonej wartości danej właściwości od elementu nadrzędnego. Można jej użyć dla **każdej** właściwości CSS, nawet tej, która domyślnie nie jest dziedziczona.
.rodzic {
color: blue;
border: 1px solid green;
}
.dziecko {
/* Jawne odziedziczenie koloru (choć color dziedziczy domyślnie) */
color: inherit;
/* Jawne odziedziczenie obramowania (border normalnie nie dziedziczy) */
border: inherit;
}
W tym przypadku, .dziecko
otrzyma zarówno niebieski kolor tekstu, jak i zielone obramowanie od .rodzic
.
Zastosowanie: Przydatne, gdy chcemy, aby element potomny dokładnie naśladował styl rodzica dla właściwości niedziedziczonej domyślnie, lub gdy chcemy nadpisać inną regułę i jawnie wskazać na dziedziczenie.
2. initial
- Reset do wartości początkowej
Wartość initial
ustawia właściwość elementu na jej **wartość początkową (initial value)** zdefiniowaną w specyfikacji CSS dla tej właściwości. Ignoruje ona zarówno wartość odziedziczoną, jak i jakąkolwiek inną wartość wynikającą z kaskady dla tego elementu.
body {
color: blue;
}
.reset-koloru {
/* Ustawia kolor na wartość początkową (zazwyczaj czarny dla 'color') */
color: initial;
}
.reset-wyswietlania {
/* Ustawia display na wartość początkową (zazwyczaj 'inline' dla ) */
display: initial;
}
Wartość początkowa jest specyficzna dla każdej właściwości (np. dla color
to zazwyczaj czarny, dla background-color
to transparent
, dla display
zależy od elementu, ale często inline
).
Zastosowanie: Przydatne, gdy chcemy całkowicie zresetować styl elementu do jego absolutnie domyślnego stanu zdefiniowanego w standardzie CSS, ignorując wszelkie inne style (w tym style przeglądarki czy odziedziczone).
3. unset
- Reset "inteligentny"
Wartość unset
działa nieco inaczej w zależności od tego, czy dana właściwość jest **dziedziczona domyślnie**, czy nie:
- Jeśli właściwość jest **dziedziczona** (np.
color
,font-family
),unset
działa jakinherit
. Element przejmie wartość od rodzica. - Jeśli właściwość **nie jest dziedziczona** (np.
border
,margin
,background-color
),unset
działa jakinitial
. Element przyjmie wartość początkową właściwości.
Można myśleć o unset
jako o "naturalnym" resecie – przywraca domyślne zachowanie kaskady dla danej właściwości.
.rodzic {
color: green;
border: 1px solid blue;
}
.dziecko-unset {
/* color jest dziedziczony, więc unset działa jak inherit -> green */
color: unset;
/* border nie jest dziedziczony, więc unset działa jak initial -> brak obramowania */
border: unset;
}
Zastosowanie: Bardzo użyteczne, gdy chcemy usunąć wszystkie style zastosowane do elementu przez wcześniejsze reguły i przywrócić jego "naturalne" zachowanie w kontekście dziedziczenia i wartości początkowych, bez konieczności jawnego ustawiania inherit
lub initial
w zależności od właściwości.
4. revert
- Reset do stylu z poprzedniego źródła
Wartość revert
jest nowsza i cofa wartość właściwości do tej, która byłaby zastosowana, gdyby nie było żadnych stylów autora dla tego elementu. Oznacza to, że przywraca wartość ze stylów **użytkownika** lub, jeśli ich nie ma, ze stylów **przeglądarki (user-agent)**.
Działa podobnie do unset
, ale zamiast resetować do wartości początkowej (initial
) dla właściwości niedziedziczonych, resetuje do wartości domyślnej przeglądarki lub użytkownika.
/* Styl autora */
a {
color: red; /* Nadpisanie domyślnego niebieskiego */
display: block; /* Nadpisanie domyślnego inline */
}
.link-domyslny {
/* Przywraca kolor zdefiniowany przez użytkownika lub przeglądarkę (zazwyczaj niebieski) */
color: revert;
/* Przywraca display zdefiniowany przez użytkownika lub przeglądarkę (zazwyczaj inline) */
display: revert;
}
Zastosowanie: Przydatne, gdy chcemy wycofać style wprowadzone przez nasz własny arkusz (autora) i wrócić do domyślnego wyglądu elementu zdefiniowanego przez przeglądarkę lub użytkownika, bez konieczności jawnego zgadywania, jaka to była wartość.
Podsumowanie wartości
Wartość | Działanie dla właściwości dziedziczonej | Działanie dla właściwości niedziedziczonej |
---|---|---|
inherit |
Przyjmuje wartość od rodzica | Przyjmuje wartość od rodzica |
initial |
Przyjmuje wartość początkową właściwości (wg specyfikacji CSS) | Przyjmuje wartość początkową właściwości (wg specyfikacji CSS) |
unset |
Działa jak inherit |
Działa jak initial |
revert |
Przywraca wartość z arkusza użytkownika lub przeglądarki | Przywraca wartość z arkusza użytkownika lub przeglądarki |
Zadania praktyczne
Zadanie 1 (z rozwiązaniem)
Masz element <div class="rodzic" style="font-size: 20px;">
zawierający <p class="dziecko">Tekst</p>
. Domyślnie <p>
odziedziczy rozmiar czcionki. Dodaj regułę CSS dla .dziecko
, która ustawi jego font-size
na wartość początkową (initial
). Jaki będzie efekt?
Rozwiązanie:
CSS:
.dziecko {
font-size: initial;
}
Efekt: Tekst w paragrafie .dziecko
będzie miał domyślny rozmiar czcionki zdefiniowany przez przeglądarkę (zazwyczaj 16px
lub medium
), a nie 20px
odziedziczone od rodzica. Wartość initial
nadpisała wartość odziedziczoną.
Zadanie 2 (do samodzielnego wykonania)
Masz element <blockquote>
, który domyślnie ma marginesy ustawione przez przeglądarkę. Użyj wartości unset
, aby zresetować właściwość margin
dla wszystkich elementów <blockquote>
. Jaki będzie efekt?
Zadanie 3 (do samodzielnego wykonania)
Ustaw dla wszystkich linków (a
) czerwony kolor tekstu. Następnie dla linków z klasą .domyslny-link
użyj wartości revert
dla właściwości color
. Jaki kolor będą miały linki z tą klasą?
FAQ - Najczęściej zadawane pytania
Czy wszystkie przeglądarki wspierają unset
i revert
?
Wartości inherit
i initial
są wspierane przez wszystkie nowoczesne przeglądarki od dawna. Wartość unset
również cieszy się bardzo dobrym wsparciem. Wartość revert
jest najnowsza i może nie być wspierana w starszych przeglądarkach (np. Internet Explorer). Zawsze warto sprawdzić kompatybilność na stronach takich jak Can I use.
Jaka jest różnica między unset
a initial
dla właściwości niedziedziczonych?
Dla właściwości, które domyślnie nie są dziedziczone (np. margin
, border
, background
), obie wartości - unset
i initial
- działają tak samo: ustawiają właściwość na jej wartość początkową zdefiniowaną w specyfikacji CSS.
Jaka jest różnica między unset
a revert
?
unset
resetuje do inherit
(dla dziedziczonych) lub initial
(dla niedziedziczonych). revert
resetuje do wartości z poprzedniego źródła kaskady (użytkownik lub przeglądarka). Różnica jest widoczna, gdy domyślna wartość przeglądarki różni się od wartości początkowej (initial
) zdefiniowanej w specyfikacji.
Czy mogę użyć tych wartości dla wszystkich właściwości CSS?
Tak, inherit
, initial
, unset
i revert
to globalne słowa kluczowe, które można zastosować jako wartość dla dowolnej właściwości CSS.