Trzy sposoby dołączenia stylów CSS do strony: zewnętrzny plik przez link, wewnętrzny znacznik style i styl lokalny w atrybucie, a do tego reguła import, kaskada, dziedziczenie, !important i liczenie specyficzności selektora. Lekcja 4.1 kursu INF.03.
CSS (Cascading Style Sheets, kaskadowe arkusze stylów) to język opisujący wygląd elementów HTML: kolory, kroje czcionek, rozmiary, obramowania i rozmieszczenie bloków. HTML mówi, czym jest fragment strony, CSS mówi, jak ten fragment ma wyglądać. W części pisemnej wracają pytania „który styl ma najwyższy priorytet", „jak dołączyć zewnętrzny arkusz stylów", „w której części dokumentu umieszcza się arkusz wewnętrzny" i „czym wymusić regułę w rozbudowanym systemie stylów". W części praktycznej arkusz CKE wymaga stylów w ZEWNĘTRZNYM pliku dołączonym przez <link> i ocenia „styl CSS witryny internetowej" jako osobny rezultat, więc reguła schowana w atrybucie style kosztuje punkt.
Budowa reguły
Reguła CSS to selektor i stojący za nim blok deklaracji w nawiasach klamrowych. Selektor wskazuje, KTÓRE elementy strony reguła obejmuje, a blok mówi, co im zmienia. Pojedyncza deklaracja składa się z czterech części: właściwości, dwukropka, wartości i średnika.
h1 {
color: Tomato;
font-size: 150%;
}
Ta reguła obejmuje każdy nagłówek pierwszego stopnia w dokumencie: h1 to selektor, color i font-size to właściwości, Tomato i 150% to ich wartości. Każda deklaracja stoi w osobnym wierszu, wcięta o dwie spacje. Średnik po ostatniej deklaracji jest formalnie zbędny, ale zostawia się go, bo przy dopisywaniu kolejnej łatwo o nim zapomnieć i zepsuć obie.
Komentarz zaczyna się od /*, kończy się */ i może objąć kilka wierszy. Przeglądarka go pomija, więc służy do opisu sekcji arkusza albo do tymczasowego wyłączenia reguły. Kilka selektorów rozdzielonych przecinkami dostaje jeden wspólny blok deklaracji, co skraca arkusz wszędzie tam, gdzie kilka różnych elementów ma wyglądać tak samo.
/* wspólny krój dla banera i stopki */
header, footer {
font-family: Helvetica;
text-align: center;
}
Trzy sposoby dołączenia stylów
Dołączenie stylów to wskazanie przeglądarce, skąd ma wziąć reguły dla dokumentu. Sposoby są trzy i różnią się miejscem, w którym stoi kod, oraz zasięgiem.
›
Styl zewnętrzny leży w osobnym pliku z rozszerzeniem .css, w którym stoją same reguły, bez jednego znacznika HTML. Dokument dołącza go znacznikiem <link> w części nagłówkowej, czyli wewnątrz <head>. Jeden plik obsługuje wszystkie podstrony witryny, a przeglądarka trzyma go w pamięci podręcznej (cache), więc przy kolejnej podstronie nie pobiera go ponownie.
›
Styl wewnętrzny, nazywany też nagłówkowym, to reguły wpisane między <style> i </style> w części nagłówkowej dokumentu. Obowiązuje w tym jednym pliku i nigdzie indziej.
›
Styl lokalny to atrybut style w otwierającym znaczniku elementu. W środku stoją same deklaracje, bez selektora i bez klamer, bo wiadomo, o który element chodzi: dokładnie o ten jeden.
<head>
<link rel="stylesheet" type="text/css" href="styl.css">
<style>
h1 {
color: Teal;
}
</style>
</head>
<body>
<h1 style="color: Navy;">Sklep komputerowy</h1>
</body>
Trzy miejsca opisują tu ten sam nagłówek, więc któreś musi ustąpić. Rozstrzyga to kaskada z następnej sekcji: nagłówek będzie granatowy, bo styl lokalny bije oba arkusze.
Znacznik <link> nie ma wersji zamykającej i nie obejmuje żadnej treści; atrybut rel mówi, czym jest dołączany plik (stylesheet, arkusz stylów), href podaje jego adres, a type="text/css" bywa w arkuszach dopisany, choć dziś nie jest wymagany.
Czwarty zapis, o który pyta bank, to reguła @import. Wstawiona na POCZĄTKU arkusza, przed wszystkimi regułami, dokłada do niego zawartość innego pliku CSS: @import url("kolory.css"); działa tak samo wewnątrz znacznika <style>. Nadaje się do dzielenia dużego arkusza na części, ale ładuje się wolniej niż osobny <link>, bo przeglądarka poznaje adres pliku dopiero po pobraniu arkusza nadrzędnego.
Adres w href jest zwykle ścieżką względną, czyli liczoną od położenia pliku HTML. Gdy index.html leży bezpośrednio w katalogu Strona, a arkusz w jego podkatalogu style, poprawny zapis to href="style/default.css" albo href="./style/default.css". Gdy katalog www ma dwa podkatalogi, html z dokumentami i style z arkuszami, dokument musi najpierw wyjść katalog wyżej: href="../style/styl.css". Ścieżka z literą dysku, na przykład C:/style/styl.css, działa tylko na jednym komputerze i po wysłaniu witryny na serwer przestaje cokolwiek znaczyć.
Sposób
Gdzie stoi
Kiedy się go używa
zewnętrzny
osobny plik .css, dołączony przez <link> w <head>
zawsze na egzaminie praktycznym i w każdej wielostronicowej witrynie
wewnętrzny
znacznik <style> w <head>
jedna strona z własnym wyglądem, szybki test reguły
lokalny
atrybut style w znaczniku elementu
pojedynczy wyjątek, w praktyce prawie nigdy
@import
początek arkusza CSS albo bloku <style>
podzielenie dużego arkusza na mniejsze pliki
Kaskada: która reguła wygrywa
Kaskada to zestaw zasad rozstrzygających, która z kilku reguł opisujących tę samą właściwość tego samego elementu zostanie użyta. Nazwa bierze się stąd, że reguły spływają z kilku źródeł naraz i nakładają się na siebie warstwami, a element bierze z każdej warstwy to, czego nie dostał wyżej.
Ta sama reguła color dla h1 w trzech miejscach: wygrywa styl lokalny, a niżej drabinka specyficzności od selektora elementu po regułę !important
Źródła są trzy: najsłabsze są domyślne style przeglądarki (dzięki nim <h1> bez żadnego CSS i tak jest duży oraz pogrubiony), nad nimi stoją ustawienia użytkownika w przeglądarce, a najwyżej reguły autora strony, czyli twój arkusz. Wewnątrz arkusza autora rozstrzyga się w trzech krokach: najpierw !important, potem specyficzność selektora, a na końcu kolejność zapisu.
p {
color: DarkSlateGray;
}
p {
color: Tomato;
}
Oba selektory są jednakowo silne, więc akapity będą pomarańczowe: przy równej sile wygrywa reguła późniejsza. Styl lokalny bije oba arkusze, bo stoi przy samym elemencie i nie da się go przebić żadnym zwykłym selektorem. Między arkuszem zewnętrznym a wewnętrznym nie ma za to stałej hierarchii: przy równej specyficzności decyduje kolejność w <head>, a ponieważ <style> stawia się zwykle pod <link>, arkusz wewnętrzny w praktyce nadpisuje zewnętrzny i tak właśnie odpowiada się w teście.
Deklaracja z dopiskiem !important (ważne) przed średnikiem wychodzi ponad wszystko inne, łącznie ze stylem lokalnym. W zadaniu praktycznym nie jest potrzebna ani razu i utrudnia późniejsze poprawki, bo przebija ją tylko kolejny !important. Pytanie testowe o nią brzmi zawsze tak samo: rozbudowany system stylów zewnętrznych, wewnętrznych i lokalnych, a cecha opisana w arkuszu zewnętrznym ma pozostać nienaruszona.
Dziedziczenie to przejmowanie wartości właściwości od elementu nadrzędnego. Dziedziczą się właściwości tekstu: color, font-family, font-size, line-height, text-align, więc krój ustawiony raz na body obowiązuje w całym dokumencie. Nie dziedziczą się właściwości pudełka: margin, padding, border, background-color, width. Wartość inherit (odziedzicz) wymusza przejęcie wartości od rodzica tam, gdzie samo z siebie nie zachodzi.
Pułapka: dziedziczenie i kaskada to nie to samo. Kaskada wybiera zwycięzcę spośród reguł dla TEGO elementu, dziedziczenie działa dopiero wtedy, gdy żadnej takiej reguły nie ma.
Specyficzność selektora
Specyficzność to liczbowa miara siły selektora, zapisywana jako trójka liczb. Pierwsza to liczba identyfikatorów w selektorze, druga to liczba klas, pseudoklas i selektorów atrybutu, trzecia to liczba selektorów elementów i pseudoelementów. Trójki porównuje się od lewej: jedynka w lewej kolumnie przebija dowolną wartość w kolumnach na prawo.
Selektor
Specyficzność
Stąd wniosek, który myli najczęściej: #menu a wygrywa z nav ul li a, choć jest krótszy. Cztery nazwy znaczników dają 0,0,4 i przegrywają z jednym identyfikatorem, bo 1 z pierwszej kolumny bije każdą liczbę z trzeciej. Selektor uniwersalny * ma zero we wszystkich trzech pozycjach i przegrywa z każdym innym selektorem, więc obejmuje wprawdzie cały dokument, ale nadaje się wyłącznie na formatowanie domyślne, nadpisywane później regułami szczegółowymi. Styl lokalny stoi ponad całą tą drabinką, a !important ponad stylem lokalnym.
Arkusz sklepu na start
Cały dział styluje tę samą stronę sklepu komputerowego, którą zbudowała lekcja o znacznikach sekcji: baner header, menu nav, panel boczny aside, blok main i stopka footer. Pierwsze reguły trafiają do pliku styl.css leżącego obok index.html i dołączonego jednym <link>. body {
background-color: #f4f4f4;
color: #222;
font-family: Helvetica;
}
header {
background-color: DarkSlateGray;
color: #f4f4f4;
}
h1 {
font-size: 150%;
text-align: center;
}
Reguła dla body ustawia tło i krój czcionki dla całego dokumentu, a dwie kolejne tylko poprawiają to, co elementy odziedziczyły: baner dostaje ciemne tło, więc potrzebuje jasnego tekstu, a nagłówek zostaje przy odziedziczonym kroju i zmienia sam rozmiar oraz wyrównanie. Kolory podaje się nazwą CSS (Tomato, DarkSlateGray) albo szesnastkowo (#f4f4f4), bo obie formy stoją w poleceniach arkuszy CKE. Który zapis ostatecznie wygrał, widać w narzędziach deweloperskich przeglądarki (klawisz F12): panel ze stylami wypisuje reguły od najsilniejszej, a deklaracje przekreślone to te, które przegrały kaskadę.
Na egzaminie
Pytania pisemne o dołączanie stylów mają kilka stałych kształtów. Pierwszy to priorytet: najwyższy ma styl lokalny, a prawidłowa kolejność od najsilniejszego brzmi lokalny, wewnętrzny, zewnętrzny. Drugi to poprawny zapis dołączenia arkusza zewnętrznego, gdzie wśród odpowiedzi z <meta>, <div> i <option> prawidłowy jest <link rel="stylesheet" type="text/css" href="styl.css">, a w innym wariancie pytania trzeba wskazać sam znacznik <link> zamiast <style>, <meta> albo nieistniejącego <css>. Trzeci dotyczy stylu wewnętrznego: umieszcza się go w części nagłówkowej dokumentu, znacznikiem <style>. Czwarty to !important jako sposób na to, by cecha z rozbudowanego systemu stylów została zachowana. Piąty pyta o polecenie załączające arkusz wewnątrz CSS i wśród odpowiedzi open, require oraz include prawidłowa jest import. Szósty dotyczy selektora uniwersalnego *: formatowanie nim zapisane obejmuje cały dokument HTML jako ustawienie domyślne, które późniejsze reguły mogą nadpisać. Wraca też ścieżka względna do pliku CSS oraz symbole selektorów, gdzie klasa to kropka, a identyfikator krzyżyk.
W zadaniu praktycznym pierwszą czynnością po zbudowaniu strony jest utworzenie pliku CSS o nazwie podanej w arkuszu, znak w znak, razem z podkreśleniem i cyfrą, na przykład styl_1.css, i dołączenie go przez <link> w części nagłówkowej. Nazwa z literówką znaczy, że egzaminator otworzy stronę bez stylów. Styl lokalny w atrybucie style nie jest błędem składniowym, ale nie spełnia polecenia „styl CSS witryny internetowej zapisany w zewnętrznym pliku", więc rezultat przepada. Zdanie „formatowanie wyłącznie przy pomocy selektora dla danego znacznika" oznacza selektory takie jak header, nav, h1 czy td, bez klas i bez identyfikatorów, więc dopisanie class="baner" odbiera punkt, choć strona wygląda poprawnie.
Ściąga
Sposób albo selektor
Zapis
Siła
arkusz zewnętrzny
<link rel="stylesheet" href="styl.css">
najsłabszy z trzech, w <head>
doklejenie arkusza
@import url("kolory.css");
jak arkusz, w którym stoi
arkusz wewnętrzny
<style> w <head>
bije zewnętrzny, gdy stoi za nim
styl lokalny
style="color: Tomato;"
bije oba arkusze
wymuszenie
color: Tomato !important;
bije wszystko
selektor uniwersalny
* { }
0,0,0, cały dokument
selektor elementu
h1 { }
0,0,1
selektor klasy
.tytul { }
0,1,0
selektor identyfikatora
#baner { }
1,0,0
Pobierz ściągę PDF