Tworzenie stron internetowych

Dziedziczenie stylów w CSS: jak działa, czego nie dziedziczą klasy i jak nadpisywać style efektywnie?

3 min czytania
Dziedziczenie stylów w CSS: jak działa, czego nie dziedziczą klasy i jak nadpisywać style efektywnie?

Czy zdarzyło Ci się, że mimo ustawienia konkretnego koloru czy rozmiaru fontu w CSS, elementy na stronie nadal wyglądały inaczej, niż się spodziewałeś? Możliwe, że winny był mechanizm dziedziczenia stylów, który z jednej strony bardzo ułatwia projektowanie layoutu, z drugiej – potrafi wprowadzić nieco chaosu. W tym artykule przyglądamy się, jak działa dziedziczenie w CSS, które właściwości faktycznie są dziedziczone, a także jak nadpisywać style.

Na czym polega dziedziczenie stylów w CSS?

W CSS style mogą być dziedziczone przez elementy podrzędne (czyli zagnieżdżone w innych). Jeśli, na przykład, ustawisz dla body kolor tekstu jako szary (color: #666;), wszystkie paragrafy (<p>) czy nagłówki (<h1>, <h2>, itd.) odziedziczą ten styl – chyba że nadpiszesz go lokalnie.

To właśnie jest dziedziczenie: przekazywanie wartości stylów z elementów nadrzędnych do potomnych. Dotyczy to jednak tylko wybranych właściwości.

Które style są dziedziczone, a które nie?

Dziedziczone są głównie właściwości dotyczące tekstu i jego otoczenia, np.:

  • color;
  • font-family;
  • font-size;
  • letter-spacing;
  • line-height;
  • text-align;
  • visibility;
  • white-space.

Z drugiej strony, właściwości dotyczące układu, wyglądu tła, ramek i rozmiarów nie są dziedziczone automatycznie. Przykłady:

  • margin, padding;
  • border;
  • width, height;
  • display;
  • background, background-color.

To oznacza, że jeśli chcesz, aby wszystkie elementy miały np. to samo tło, musisz je ustawić jawnie – dziedziczenie tego nie rozwiąże.

A co z klasami? Czy style klas się dziedziczą?

Klasy jako takie też nie są dziedziczone

Zobacz  Czy Twoja strona internetowa jest bezpieczna?

Jeśli element nadrzędny ma przypisaną klasę highlight, to jego “dzieci” nie odziedziczą tej klasy – i nie przejmą stylów, które są do niej przypisane. Jedyny sposób, aby styl z klasy przeszedł na potomne elementy, to takie ustawienie selektora, aby obejmował również dzieci. 

Przykład:

highlight {

  color: red;

}

Tutaj color: red zadziała na sam element z klasą highlight. Jeśli chcesz, by jego potomne elementy też były czerwone, musisz dodać gwiazdkę:

highlight * {

  color: red;

}

Jak w prosty sposób nadpisywać style?

Jeśli style z elementu nadrzędnego nie pasują do któregoś z elementów potomnych, możesz je zmienić na kilka sposobów.

Pierwsza, oczywista opcja – ustaw styl lokalnie dla wybranego elementu. Proste p { color: blue; } nadpisze dziedziczony kolor, bo z zasady działania arkuszy kaskadowych – element stylowany jest wg tej reguły, która w arkuszu pojawi się później.

Drugie wyjście: użyj selektora o wyższej wartości. CSS opiera się na zasadzie specificity i w przypadku konfliktu stylów stosuje reguły tego selektora, który jest bardziej szczegółowy (precyzyjnie wskazuje miejsce, które chcemy ostylować). Tak więc w przykładzie:

h1 {

  font-size: 36px;

}

h1.title {

  font-size: 42px;

}

nagłówek ostatecznie będzie miał font wielkości 42px – bo h1.title jest bardziej szczegółowy (zawiera i tag, i klasę stylowanego elementu). Dlatego też lepiej unikać stosowania zbyt wielu ogólnych selektorów – np. div, p, a – bez kontekstu; będą one bardzo łatwo nadpisywane.

Możesz też korzystać z keywordów inherit, initial oraz unset… ale świadomie (czyli tak samo, jak ze słów kluczowych w SEO). Czasem bowiem nie trzeba nic nadpisywać – wystarczy, że wymusisz dziedziczenie:

  • inherit – wymusza dziedziczenie stylu z elementu nadrzędnego (np. color: inherit;)
  • initial – przywraca wartość domyślną właściwości, jaką przewiduje specyfikacja CSS (np. display: initial;)
  • unset – działa jak inherit dla dziedziczonych właściwości i jak initial dla pozostałych.
Zobacz  Jakie dane strukturalne schema wdrożyć na stronie lokalnego biznesu?

I pamiętaj, że deklaracja !important zawsze powinna być ostatecznością. Tak, oznaczona nią reguła będzie miała najwyższy priorytet i pierwszeństwo nad innymi selektorami – ale gdy takich reguł pojawi się kilka, pojawi się też chaos. Takie siłowe nadpisywanie styli ma sens, jeśli np. musisz wymusić regułę np. w treści osadzonej z zewnętrznego źródła, ale w innych sytuacjach lepiej tego unikać.

tło banera
Genialne firmy mnożą
swój potencjał z
Ocena Clutch
5.0
Ocena Google
4.8
tło banera
Sprawdź, czy Twój
marketing działa.
Umów konsultację z Marcinem Stypułą, CEO Semcore i sprawdź swoją strategię digital marketingu.
Umów konsultację 299 zł/h
Marcin Stypuła
Jakub Rożnowski
Jakub Rożnowski Copywriter
Copywriter i student psychologii na Uniwersytecie Warszawskim, który łączy świat marketingu cyfrowego z perspektywą naukową i humanistyczną. Pisze od 2021 roku, specjalizując się w długich, eksperckich artykułach, poradnikach i treściach wizerunkowych. W pracy stawia na połączenie dwóch wartości: rzetelnego researchu oraz lekkiego, często humorystycznego stylu. Fascynuje go UX writing i projektowanie komunikacji, dlatego jego teksty nie tylko przekazują wiedzę, ale także prowadzą czytelnika w intuicyjny sposób przez temat. Wierzy, że nawet najbardziej skomplikowane zagadnienia z obszaru IT, nowych technologii czy psychologii można opisać tak, by były proste i przyjemne w odbiorze. Poza copywritingiem rozwija się twórczo — pisze opowiadania, wiersze i myśli o pierwszej powieści. Gra na kilku instrumentach, odwiedza kina studyjne, podróżuje i kończy studia psychologiczne. Największą motywacją jest dla niego sam proces tworzenia — moment, w którym słowa zaczynają nabierać kształtu i wpływu. Widok swoich tekstów na stronach klientów daje mu poczucie satysfakcji i sensu pracy.

Udostępnij

Oceń tekst

Średnia ocen 5 / 5. Liczba głosów: 1

Brak głosów - oceń jako pierwszy!

Zapytaj o ofertę SEO
Dołącz do newslettera
Powiązane artykuły Najnowsze Popularne

Zbuduj Twój potencjał SEO

Skonsultuj z nami Twoją sytuację w wyszukiwarce. Porozmawiajmy o Twoich celach i możliwościach współpracy