Kurs języka HTML i CSS

Poradnik webmastera

  • Zwiększ rozmiar czcionki
  • Domyślny  rozmiar czcionki
  • Zmniejsz rozmiar czcionki

Dziedziczenie i kaskadowość

Email Drukuj PDF

Tematy: Dziedziczenie | Kaskadowość

Dziedziczenie

Zrozumienie pojęcia dziedziczenia wymaga od nas zapoznania się z hierarchią ważności poszczególnych znaczników wewnątrz dokumentu. Kaskadowe arkusze stylów wprowadzają pojęcie drzewa i na jego przykładzie doskonale widać te zależności. Poniżej znajduje się przykładowy listing prostego kodu strony oraz rozrysowane dla niego drzewo.

<html>

<head>

</head>

<body>

<p>Przykład tekstu.</p>

<table>

<tr>

<td></td>

</tr>

<tr>

<td></td>

</tr>

<tr>

<td></td>

</tr>

</table>

</body>

</html>

Przykładowe drzewo dla powyższego kodu wyglądałoby tak jak na rysunku 3.1.

Rysunek 3.1. Przykład drzewa dla powyższego listingu

Analizując rysunek, widzimy, że określenie np. koloru tekstu jako niebieski bezpośrednio dla pary znaczników <body></body> spowoduje jego użycie dla każdego elementu strony znajdującego się niżej w hierarchii. Jeżeli dodatkowo zdefiniujemy kolor listy <ul></ul> jako zielony, to tekst całego dokumentu będzie niebieski, poza listą, która zostanie sformatowana za pomocą koloru zielonego. Idąc dalej tym tokiem rozumowania, dopiszmy do stylu odpowiedzialnego za formatowanie <body></body> definicję wielkości czcionki ustawiającą jej rozmiar na 14 punktów. Strona wynikowa będzie sformatowana za pomocą czcionki o wielkości 14 punktów i w kolorze niebieskim. Natomiast lista będzie miała kolor zielony i identyczną wielkość czcionki, podobnie jak reszta dokumentu. Innymi słowy, styl odpowiedzialny za definicję czcionki będzie dziedziczony z nadrzędnego w hierarchii znaczników <body></body>.

Innym prostszym przykładem dziedziczenia może być deklaracja stylu dla odnośników opierająca się na pseudoklasach. Mam tutaj na myśli przykład z definicją dwóch rodzajów odsyłaczy.

A:link

{

color:navy;

font-size:18pt;

text-decoration:none;

}

A.maly:link

{

font-size:12pt;

}

Należy zwrócić uwagę na to, że pierwszy selektor określa rodzaj domyślnego odnośnika, któremu przypisuje kolor granatowy, wysokość 18 punktów oraz brak podkreślenia. Drugi selektor jest definicją klasy o nazwie .maly i odpowiada za utworzenie hiperłącza o takich samych właściwościach jak główny odsyłacz, a jedyna różnica ma polegać na wysokości tekstu, która tym razem wynosi zaledwie 12 punktów. Dlatego też wystarczy w przypadku mniejszego odsyłacza zadeklarować jedynie rozmiar czcionki, gdyż pozostałe elementy są dziedziczone z wyżej stojącego w hierarchii odsyłacza podstawowego.

Nic nie stoi na przeszkodzie, by poza wielkością zmienić również kolor mniejszego odsyłacza. W takiej sytuacji odpowiedni kod powinien przybrać następującą formę:

A:link

{

color:navy;

font-size:18pt;

text-decoration:none;

}

A.maly:link

{

font-size:12pt;

color:red;

}

Duży, domyślny odsyłacz będzie granatowy, natomiast małe hiperłącze określone za pomocą klasy powinno przybrać kolor czerwony.

Ciekawym przykładem dziedziczenia jest niżej przedstawiony przypadek. Przykładowy arkusz stylów wygląda następująco:

.czerwony

{

font-size:15pt;

color:red;

}

H1     

{

font-size:30pt;

color:zielony;

}

Natomiast kod XHTML/HTML ma postać:

<h1 class="czerwony">nagówek stopnia pierwszego</h1>

Analizując definicję stylów, dochodzimy do wniosku, że nagłówek stopnia pierwszego powinien mieć wysokość tekstu wynoszącą 30 punktów oraz kolor zielony. Jeżeli przyjrzymy się samemu nagłówkowi w kodzie strony, to widzimy, że nasz nagłówek ma przypisaną klasę o nazwie .czerwony.

O zgrozo, co tu teraz zadziała?... Otóż nie jest to takie skomplikowane, gdyż specyfikacja CSS określa specyficzność poszczególnych elementów. W moim przykładzie specyficzność kształtuje się następująco:

  • H1 — niższa specyficzność równa 1;

  • .czerwony — wyższa specyficzność równa 10.

Zgodnie z założeniami zawartymi w specyfikacji realizowana jest reguła z większym numerem. Dlatego w tym konkretnym przypadku nagłówek zostanie wyświetlony czcionką o wysokości 15 punktów w kolorze czerwonym, gdyż ta klasa ma wyższą specyficzność.

Zdarza się tak, że chcemy wyłączyć dziedziczenie pewnych stylów w czasie formatowania. W takim przypadku należy skorzystać z ważności danych stylów. Również tym razem oprę się na przykładzie z nagłówkiem. Chciałbym, aby mój nagłówek na stronie został wyświetlony czcionką o wysokości 15 punktów w kolorze zielonym. Niestety, moja zachcianka to połączenie wybranych właściwości klasy .czerwony oraz selektora h1. Najprostszym rozwiązaniem jest przygotowanie odpowiedniej klasy i przypisanie jej do nagłówka h1. Tym razem na potrzeby nauki nie można dodawać nowych definicji do arkusza, a jedynie dokonać kosmetycznej poprawki. W poprzednim przykładzie nagłówek został sformatowany za pomocą klasy .czerwony, gdyż miała ona wyższą specyficzność, a styl dla selektora h1 został zupełnie pominięty. Teraz skorzystamy z zaistniałej sytuacji i dla selektora h1, a dokładniej dla koloru zielonego, dodamy polecenie !important. Zmodyfikowany arkusz jest widoczny poniżej.

.czerwony

{

font-size:15pt;

color:red

}

H1     

{

font-size:30pt;

color:green !important;

}

Szalenie istotny jest sposób, w jaki polecenie !important zostało dodane do konstrukcji stylu. Zawsze występuje ono po wartości przypisanej dla właściwości konkretnego selektora. Oczywiście sam kod XHTML/HTML nie uległ żadnej zmianie i nadal ma następującą postać:

<h1 class="czerwony">Nagłówek stopnia pierwszego</h1>

Przypisywanie ważności umożliwia zablokowanie dziedziczenia pewnych stylów z nadrzędnych elementów, dzięki czemu mamy jeszcze większe możliwości kontrolowania wyglądu strony WWW.

Polecenie !important jest poprawnie obsługiwane przez wiodące przeglądarki. Niestety, w przypadku starszych wersji przeglądarek np. Netscape Navigatora nie działa ono poprawnie i dany styl jest dziedziczony z elementu znajdującego się wyżej w hierarchii. Na szczęście przeglądarki te stanowią mały ułamek procentu i uważam, że nie musimy sobie nimi zawracać głowy.

Kaskadowość

Kolejnym bardzo ważnym pojęciem stosowanym w kaskadowych arkuszach stylów, a przy tym występującym w samej nazwie, jest kaskadowość. Funkcja ta odpowiada za określenie hierarchii stosowanych stylów w dokumencie. Wiemy już, że style możemy wstawiać do dokumentu na kilka sposobów (bezpośrednio w kodzie strony jako atrybut dowolnego znacznika, w nagłówku <head></head>, globalnie dla danego dokumentu oraz przez dołączenie zewnętrznego arkusza). Mieszanie zastosowanych stylów jest jak najbardziej możliwe i często spotykane, dlatego konieczne stało się określenie ważności poszczególnych metod. Zasada kaskadowości przyjęta przez twórców wygląda następująco: najpierw ładowane i uwzględniane są zewnętrzne arkusze, następnie style wpisane do nagłówka <head></head>, a na samym końcu style wpisane bezpośrednio do znacznika. Takie rozwiązanie umożliwia pełną kontrolę nad dokumentem, a w przypadku sprzeczności zdefiniowanych stylów użyty zostanie ten, który jest najbliżej formatowanego dokumentu.

  <html>

    <head>

      <style type="text/CSS">

     H1

      {

       color: red;

      }

        </style>

    </head>

    <body>

<h1>Nagłówek stopnia pierwszego formatowany przez arkusz wpisany w HEAD</h1>

        <h1 style="color: green; font-size: 10pt">Nagłówek stopnia pierwszego</h1>

    </body>

</html>

Domyślnie dla każdego nagłówka stopnia pierwszego został zdefiniowany kolor czerwony bezpośrednio w <head></head> dokumentu. Następnie dla drugiego nagłówka w samym znaczniku <h1></h1> wpisałem dodatkowy styl określający kolor tekstu jako zielony i wielkość 10 punktów. Oczywiście każdy następny nagłówek stopnia pierwszego, wpisany do dokumentu i ograniczony tylko znacznikami <h1></h1> bez dodatkowych wpisów, również będzie sformatowany zgodnie z definicją znajdującą się w znacznikach <head></head> strony.

Kaskady nie ograniczają się jedynie do trzech możliwości zdefiniowania stylów w dokumencie — jest jeszcze kilka innych poziomów. W praktyce wygląda to tak, że każda przeglądarka ma zdefiniowane swoje domyślne arkusze, za pomocą których formatuje znaczniki w dokumencie. Jeśli na przykład w kodzie strony znajduje się znacznik <h1></h1>, dla którego nie ustawiono żadnych stylów, to przeglądarka wyświetli taki nagłówek zgodnie z tym, jak ją zaprogramowano dla tego typu elementów.

Niektóre przeglądarki pozwalają na przypisanie swoich arkuszy stylów, które potrafią zastąpić domyślne formatowanie przeglądarki. W ten sposób zdefiniowany arkusz jest kolejnym poziomem kaskady.

Trzecim poziomem kaskady są style zdefiniowane przez projektanta strony WWW. Innymi słowy, są to te wszystkie polecenia, które zostały opisane w kursie.

W praktyce wygląda to mniej więcej tak, że jeżeli internauta wejdzie na stronę, na której nie zastosowano żadnych stylów, to przeglądarka skorzysta ze swoich domyślnych ustawień. Jeżeli właściciel przeglądarki przygotuje własny arkusz stylów i wejdzie na tę samą stronę, na której nie ma zdefiniowanych żadnych stylów, to do wyświetlenia jej zawartości zostanie użyty arkusz użytkownika, gdyż jest on ważniejszy w hierarchii kaskad. Idąc dalej tym tokiem myślenia, rozpatrzmy trzeci przypadek, gdy internauta wejdzie na stronę, w której są umieszczone dowolne style autora witryny. Teraz załóżmy, że nadal korzysta z przeglądarki, w której zdefiniował swój własny arkusz stylów. W takim przypadku do wyświetlenia strony zostanie użyty styl przygotowany przez autora strony, gdyż stoi on wyżej w hierarchii niż domyślny styl przeglądarki oraz arkusz internauty.

Oczywiście w przypadku arkusza autora mamy do czynienia z kolejnymi kaskadami, o których wspominałem na samym początku.

Wewnątrz samego arkusza stylów również mamy do czynienia z kaskadami, a idealnym przykładem takiej sytuacji był listing przedstawiony na początku tego rozdziału. W jednym dokumencie starły się style wpisane do nagłówka <head></head> ze stylami wpisanymi bezpośrednio do danego znacznika. Pomimo tego, że obie deklaracje dotyczyły tego samego elementu, wygrał styl wpisany bezpośrednio do formatowanego akapitu. W razie potrzeby sytuację taką możemy zmienić poprzez zastosowanie polecenia !important.

  <html>

    <head>

        <style type="text/CSS">

     H1

      {

       color: red !important;

      }

        </style>

    </head>

    <body>

<h1>Nagłówek stopnia pierwszego formatowany przez arkusz wpisany w HEAD</h1>

        <h1 style="color: green; font-size: 10pt">Nagłówek stopnia pierwszego</h1>

    </body>

</html>

 

 

CSS. Tworzenie nowoczesnych stron WWW.

CSS3. Tworzenie nowoczesnych stron WWW
(czerwiec 2012)

HTML5 i CSS3. Standardy przyszłości

HTML5 i CSS3
Standardy przyszłości

CSS3. Szybki start. Wydanie V

CSS3. Szybki start.
Wydanie V

Nowości Helionu

Statystyki

Użytkowników : 766
Artykułów : 513
Zakładki : 28
Odsłon : 15211469