Kurs HTML

3.4. Wartości 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 jak inherit. Element przejmie wartość od rodzica.
  • Jeśli właściwość **nie jest dziedziczona** (np. border, margin, background-color), unset działa jak initial. 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.