Professional Documents
Culture Documents
HTML I CSS
HTML I CSS
Strony internetowe to podstawa internetu, a wszystkie one są zbudowane z trzech podstawowych technologii.
Te podstawowe technologie nie wystarczą do stworzenia strony internetowej. Podczas programowania używane są
edytory kodu, systemy kontroli wersji, buildery, frameworki, biblioteki, hostingi i inne koncepcje, z którymi
koniecznie trzeba się zapoznać.
HTML
HyperText Markup Language (hipertekstowy język znaczników) - język znaczników dokumentów internetowych.
Zestaw reguł do strukturyzowania (znaczników) informacji tekstowej, dodawania zdjęć, tworzenia tabel, formularzy,
list itp.
Dokument HTML - plik tekstowy z rozszerzeniem .html. Dokument oznaczony za pomocą HTML, interpretowany
przez przeglądarkę, dzięki czemu użytkownicy widzą nie kod źródłowy z elementami znaczników, ale ostateczny
wynik przetwarzania - stronę internetową.
Popularność HTML i jego wykorzystanie jako podstawy kodowania stron internetowych doprowadziły do potrzeby
tworzenia, utrzymywania i rozwijania standardów. Teraz tym się zajmuje Web Hypertext Application Technology
Working Group (WHATWG), która pracuje nad specyfikacją HTML Living Standard.
Znaczniki i atrybuty
Znacznik (tag) — element hipertekstowego języka znaczników. To jest najmniejszy element składowy każdej strony
internetowej. Każdy tag oznacza jakąś jednostkę: nagłówek, listę, akapit tekstu, obraz.
Aby zaznaczyć znaczniki w tekście dokumentu, stosowane są nawiasy ostre, w których jest określona nazwa
znacznika i jego atrybuty.
<nazwa_znacznika>...</nazwa_znacznika>
Znacznik otwierający wskazuje, gdzie zaczyna się element, a znacznik zamykający gdzie kończy się. Znacznik
zamykający jest tworzony przez dodanie ukośnika (/) przed nazwą znacznika. Zawartość znacznika – treść – znajduje
się między otwierającym a zamykającym znacznikiem.
Przykłady znaczników.
<section>Sekcja</section>
<p>Akapit</p>
<a>Link</a>
<button>Przycisk</button>
Komentarze
Komentarze służą do tego, żeby pozostawiać objaśnienia, uwagi w kodzie źródłowym, tymczasowo skomentować
fragment kodu itp.
<!-- To jest komentarz, jego treść nie będzie wyświetlana na stronie -->
<!--
Komentarz może być wielowierszowy.
Jest to wygodne w przypadku bardziej obszernych opisów.
-->
Atrybuty
Atrybuty to dodatkowe ustawienia znaczników, za pomocą których można zmieniać właściwości i zachowanie
elementu. Każdy znacznik ma obowiązkowe i nieobowiązkowe atrybuty, może ich być kilka lub nie być wcale.
Atrybuty są zapisywane wewnątrz znacznika otwierającego, a ich wartości znajdują się w podwójnych cudzysłowach.
Kilka atrybutów oddzielamy spacją.
<button type="submit">...</button>
<p class="text">...</p>
<img
src="https://picsum.photos/640/480"
alt="Dowolny obraz z generatora"
/>
alt - tekst alternatywny, który będzie wyświetlony, jeśli obraz nie zostanie załadowany.
Pomocne
Aby poznać dostępne atrybuty znaczników oraz ich przeznaczenie, można przejść do dokumentacji lub
przewodników, na przykład htmlreference.io.
Znaczniki sparowane
Składają się z otwierających i zamykających znaczników, które zawijają treść, umożliwiając zmianę jego właściwości
lub sposobu wyświetlania, grupowanie według znaczenia. Wewnątrz sparowanych znaczników można zagnieżdżać
inne znaczniki, podobnie do matrioszki.
Znaczniki pojedyncze
Składają się tylko z znacznika otwierającego, nie zawierają treści tekstowej i otrzymują treść lub zachowanie na
podstawie atrybutów. Służy do zmiany właściwości dokumentu, połączenia plików itp.
Interesująco
W poprzednich standardach HTML pojedyncze znaczniki były koniecznie zapisywane z odwrotnym ukośnikiem /
przed nawiasem zamykającym. Na przykład <img /> albo <input />. W nowoczesnym standardzie jest to opcjonalne i
na nic nie wpływa.
Zagnieżdżanie znaczników
Zgodnie z pewnymi zasadami znaczniki można zagnieżdżać w sobie. Podczas zagnieżdżania kolejność ich zamykania
należy zachować zgodnie z zasadą matrioszki.
<znacznik1>
<znacznik2>
<znacznik4>...</znacznik4>
<znacznik5>...</znacznik5>
</znacznik2>
<znacznik3>
<znacznik6>...</znacznik6>
</znacznik3>
</znacznik1>
Oto są ważne znaczniki akapitu z linkiem i zaznaczonym tekstem, a także lista zalet wraz z opisem.
<p>
<a href="squoosh.app">Squoosh</a> - serwis <em>optymalizacja</em> obrazków.
</p>
<p>Zalety</p>
<ul>
<li>Działa w przeglądarce</li>
<li>Nie ładuje systemu</li>
<li>Wygodny interfejs</li>
</ul>
Specyfikacja HTML
Specyfikacja HTML Living Standard - główny dokument opisujący standardy, możliwości i przyszły rozwój języka
HTML.
Aby przestudiować layout, przede wszystkim są ważne sekcje opisujące jakie są rodzaje elementów, co oznacza każdy
z nich , oraz rozumienie tego, jak można je zagnieżdżać w sobie.
Pomocne
Element HTML -jest to termin opisujący pewną semantyczną całość w standardzie HTML. Na przykład akapit,
nagłówek, listę lub link. W dokumencie HTML element jest reprezentowany przez znacznik (sparowany lub
pojedynczy) – składnię języka HTML.
Zagnieżdżanie znaczników
Jeśli kategoria jest odpowiednia, a ograniczenia nie zabraniają, można zagnieżdżać, inaczej jest niemożliwe.
Po kilku dniach używania HTML przyzwyczaicie się do prawidłowego zagnieżdżania elementów w sobie, ponieważ
zasady zagnieżdżania będą intuicyjnie zrozumiałe po zapoznaniu się z głównymi znacznikami.
<!DOCTYPE html>
<html lang="ru">
<head>
<!-- Informacje serwisowe -->
</head>
<body>
<!-- Zawartość -->
</body>
</html>
Na podstawie DOCTYPE przeglądarka określa wersję HTML i poprawnie wyświetla stronę. Deklaracja
typu dokumentu powinna być pierwszą rzeczą, którą przeglądarka widzi podczas przetwarzania dokumentu
HTML.
<!-- Wskazuje na to, że dokument jest napisany zgodnie ze specyfikacją HTML Living
Standard -->
<!DOCTYPE html>
Interesująco
Wcześniej HTML miał wersje, najnowsza to HTML5. Teraz HTML Living Standard jest to jedyna
specyfikacja HTML, w której wersje zostały porzucone, ona po prostu aktualizuje się. Jeśli mówią o
HTML5, oznacza to to samo, co „nowoczesny HTML” lub HTML Living Standard, tylko krócej.
Znacznik <html>
Główny element dokumentu jest jako kontener, który zawiera całą zawartość strony. Nic poza nim nie jest
postrzegane przez przeglądarkę jako kod HTML i nie jest przetwarzane.
<!DOCTYPE html>
<html lang="ru"></html>
Atrybut lang wskazuje na to, w jakim języku napisany jest tekst strony. Jest to wymagane w przypadku
technologii asystujących, takich jak czytniki ekranu itp.
Znacznik <head>
<!DOCTYPE html>
<html lang="ru">
<head>
<!-- Informacje serwisowe -->
</head>
</html>
Znacznik <body>
Zawiera treść przyszłej strony internetowej. Treść, która ma być wyświetlana na stronie, powinna znajdować
się wewnątrz tego znacznika.
<!DOCTYPE html>
<html lang="ru">
<head>
<!-- Informacje serwisowe -->
</head>
<body>
<!-- Zawartość -->
</body>
</html>
Nagłówek strony
Tekst umieszczony wewnątrz znacznika <title> jest wyświetlany w zakładce przeglądarki. Długość
nagłówka nie powinna przekraczać 60 znaków, aby całkowicie zmieścić się w nagłówku. Tekst nagłówka
powinien zawierać krótki opis treści strony internetowej.
<!DOCTYPE html>
<html lang="ru">
<head>
<title>HTML5 to proste!</title>
</head>
<body>
<!-- Zawartość -->
</body>
</html>
Metadane
Aby przeglądarka poprawnie wyświetlała tekst, należy wskazać kodowanie strony. Jeśli nie zostanie to
zrobione lub podać nieprawidłowe kodowanie, zamiast znaków przeglądarka może wyświetlać hieroglify.
<!DOCTYPE html>
<html lang="ru">
<head>
<!-- utf-8 - najbardziej rozpowszechnione kodowanie -->
<meta charset="utf-8" />
<title>HTML5 to proste!</title>
</head>
<body>
<!-- Zawartość -->
</body>
</html>
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="utf-8" />
<meta name="description" content="Nauka podstaw HTML5 dla początkujących" />
<title>HTML5 to proste!</title>
</head>
<body>
<!-- Zawartość -->
</body>
</html>
Układ dokumentów
Układ to pionowa i pozioma kolejność wyświetlania elementów na stronie. Układ przebiega pionowo od
góry do dołu i domyślnie elementy są wyświetlane na stronie w takiej kolejności, w jakiej są one wskazane
w dokumencie HTML. Poziomo układ przebiega od strony lewej do prawej (lub od prawej do lewej dla
krajów wschodnich).
Wszystkie elementy bez wyjątku to prostokątne obszary, które zajmują określone miejsce w tak zwanych
„liniach”, jak słowa zdania na kartce w linie. Są dwa główne typy elementów - blokowe i liniowe.
<!-- Akapit jest elementem blokowym -->
<p>Element blokowy 1</p>
<p>Element blokowy 2</p>
<p>Element blokowy 3</p>
Element blokowy (block-level element) - zajmuje całą linię, niezależnie od rozmiaru jej zawartości,
dlatego kilka elementów blokowych wizualnie idzie za sobą od góry do dołu.
Element liniowy (inline element) - zajmuje miejsce zgodnie z zawartością, dlatego kilka elementów
liniowych może znajdować się w tej samej linii. Jeśli w linii nie ma wystarczającej ilości miejsca, aby
zmieścić element liniowy, jest on przenoszony do nowej.
Semantyka
Znaczniki przyszłej strony internetowej powinny mieć sens, jak strona gazety lub magazynu. Strona zawiera
sekcje, nagłówki, listy, obrazki, akapity tekstu itd. Aby opisać całe bogactwo gatunkowe treści, są
odpowiednie znaczniki. Oznacza to, że semantyka jest pierwotnie częścią kodu HTML, ale ona jest
bezużyteczna, jeśli jest nieprawidłowo zrealizowana.
Czyli znaczniki semantyczne oznaczają, że znaczniki nie są wybierane na podstawie tego, w jaki sposób
one są wyświetlane w przeglądarce, one są dobierane na podstawie rodzaju i struktury zaznaczanych treści.
Znaczniki tekstowe
Akapit
Znacznik <p> - uniwersalny pojemnik do grupowania małych elementów frazowych, oddzielania ich od
siebie i dalszej stylizacji. Domyślnie akapit jest elementem blokowym, to znaczy, że on zaczyna się w nowej
linii i ma dopełnienie pionowe, które można zmienić w CSS.
<p>
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Neque eligendi, a
eaque, esse itaque porro non exercitationem odio earum quos perferendis!
</p>
<p>
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Illo, totam velit
asperiores non temporibus ut nisi minima?
</p>
Często konieczne jest wypełnienie znacznika pustym tekstem, w przypadku, gdy sam tekst, który zostanie
umieszczony w serwisie, nie będzie jeszcze dostępny. Aby to zrobić, używa się specjalnego symbolu
zastępczego.
Pomocne
W edytorze VSCode, w dokumencie HTML można wpisać kod lorem10, następnie nacisnąć klawisz Tab.
Stworzy to tablicę tekstową składającą się z 10 słów. Zamiast 10 można wpisać dowolną liczbę.
Nagłówki
Grupa znaczników<h1>...<h6> - definiuje nagłówki tekstowe sekcji semantycznych różnych poziomów,
które wskazują znaczenie sekcji treści znajdującej się po nich. Jest to narzędzie do strukturyzacji treści
tekstowych.
Znacznik <h1> jest najczęściej używany tylko raz, jako nagłówek strony głównej. Reszta nagłówków może
być używana tyle razy, ile się chce, ale one zawsze powinny być używane poprawnie, zgodnie z hierarchią.
Listy
Listy pozwalają uporządkować kolekcje i zaprezentować je w sposób wizualny i wygodny dla użytkownika.
Lista to kontener, którego elementami podrzędnymi mogą być tylko elementy listy, znaczniki <li>.
Znacznik <ol> - tworzy listę numerowaną (uporządkowaną), to znaczy każdy element listy jest
numerowany. Przeglądarka automatycznie numeruje elementy w kolejności, a jeśli usunąć jeden lub więcej
elementów takiej listy, pozostałe numery zostaną automatycznie przeliczone. Numerację elementów można
kontrolować za pomocą specjalnych atrybutów listy.
<ol>
<li>Zagotować wodę</li>
<li>Wsypać herbatę do kubka</li>
<li>Wlać wrzątek do kubka</li>
<li>Czekać 10 minut, po czym można pić</li>
</ol>
Znacznik <ul> - tworzy listę wypunktowaną (nieuporządkowaną), której każdy element zaczyna się od
małego znaku (punktora). Dzięki CSS punktor można usunąć lub zastąpić.
<h1>Najgorętsze kurorty</h1>
<p>Eksperci zalecają odwiedzenie w tym roku następujących lokalizacji.</p>
<ul>
<li>Tunezja</li>
<li>Turcja</li>
<li>Grecja</li>
<li>Egipt</li>
</ul>
Listy zagnieżdżone
Tworzenie listy wielopoziomowej jest proste - umieszczamy jeszcze jedną listę w element listy. Jest to
często używane do tworzenia menu wielopoziomowych.
<ul>
<li>
Komputery i akcesoria
<ul>
<li>Procesory</li>
<li>Monitory</li>
<li>Karty graficzne</li>
</ul>
</li>
<li>
Artykuły gospodarstwa domowego
<ul>
<li>Lodówki</li>
<li>Telewizory</li>
<li>Pralki</li>
</ul>
</li>
<li>
Sprzęty gospodarstwa domowego
<ul>
<li>Fotele</li>
<li>Materace</li>
<li>Kominki elektryczne</li>
</ul>
</li>
</ul>
Link
Znacznik <a> - służy do tworzenia linków, tekstu, po kliknięciu którego przechodzimy do innej strony,
ściągamy plik itp. Tekst linku jest wyświetlany w przeglądarce z podkreśleniem, kolor czcionki jest
niebieski, po najechaniu na link kursor myszy zmienia widok.
Adres linku jest określony w wymaganym atrybuciehref="adres". Adres to URL, który może wskazywać
stronę, plik, dowolny zasób.
Domyślnie link otwiera się w bieżącej zakładce przeglądarki. Atrybut target="wartość" określa, w której
zakładce ma zostać otwarty dokument, do którego prowadzi link. Jeśli wartość _blank, to strona otworzy się
na nowej karcie przeglądarki.
Atrybut rel uzupełnia atrybut href o informacje o relacji między bieżącym dokumentem a połączonym, i
jest używany w połączeniu z atrybutem target="_blank".
Atrybut download
Jeśli w href linku ścieżka do pliku jest określona, przeglądarka spróbuje go otworzyć w bieżącym oknie,
jeśli potrafi przetwarzać pliki tego typu. Zwykle dzieje się tak w przypadku obrazków i plików PDF.
Atrybut download="nazwa pliku" informuje przeglądarkę, że określony zasób nie powinien być
otwierany, ale ładowany w momencie kliknięcia linku przez użytkownika. Wartość atrybutu określa nazwę
wczytywanego pliku, czyli można zmienić nazwę podczas pobierania. Atrybutu można użyć bez określania
wartości, wtedy będzie użyta nazwa oryginalnego pliku.
Linki umożliwiają nie tylko przejście do innych stron i pobieranie plików, ale także wykonywanie połączeń
telefonicznych, wysyłanie wiadomości czy wykonywanie połączeń przez Skype.
Link do zakotwiczenia
Link do zakotwiczenia służy do tworzenia nawigacji na bieżącej stronie. Na przykład, aby szybko przejść do
jakiejś sekcji (jak w tych materiałach). Po kliknięciu takiego linku przeglądarka przewinie stronę do
zakotwiczenia, bez jej ponownego ładowania.
Aby utworzyć link do zakotwiczenia, trzeba dodać do znacznika, do którego chcemy przewinąć stronę,
atrybut id - unikalny identyfikator. Natomiast atrybutowi href w linku ustawić wartość zaczynającą się od
znaku #, po którym jest wskazany identyfikator elementu.
Przycisk
Element interaktywny, który ożywia się za pomocą JavaScript. Na przykład przycisk do otwierania i
zamykania wyskakującego okienka, przełączania menu mobilnego lub przesyłania formularza. Musi być
wyraźnie określony atrybut type. Jego wartość domyślna to - submit, ale najczęściej potrzebujemy wartości
button. Tak, przycisk typu „przycisk”, taka osobliwość.
Atrybut lang
Jeśli strona zawiera tekst w różnych językach, aby zrobić go bardziej dostępnym dla technologii
asystujących, można ustawić atrybut lang nie tylko dla całego dokumentu, ale także dla poszczególnych
znaczników.
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="utf-8" />
<meta name="description" content="Instrukcja obsługi ciasteczek" />
<title>Ciasteczka są smaczne!</title>
</head>
<body>
<p>Instrukcja obsługi</p>
<p lang="en">Operating instructions</p>
<p lang="fr">Manuel d'utilisation</p>
</body>
</html>
Obrazki
Zastosowanie grafiki sprawia, że strony internetowe są bardziej atrakcyjne wizualnie. Obrazki pomagają
lepiej przekazać istotę i treść dokumentu. Znacznik <img> jest przeznaczony do oznaczania obrazków w
różnych formatach graficznych.
<img
src="https://images.pexels.com/photos/67112/pexels-photo-67112.jpeg"
alt="Macbook Air na szarym drewnianym stole"
width="400"
/>
src="ścieżka" - obowiązkowy atrybut, który wskazuje adres obrazka. Ścieżka dostępu do obrazka
może być bezwzględna lub względna.
alt="opis" - obowiązkowy atrybut, alternatywny opis.
width="wartość" i height="wartość" - ustawiają wymiary obrazu w pikselach. Bez zmiany
rozmiaru obraz jest wyświetlany na stronie w oryginalnym rozmiarze. Jeśli ustawić tylko jedną
wartość, przeglądarka automatycznie obliczy drugą, aby zachować proporcje.
Atrybut alt
Jest potrzebny do dostarczania istotnych informacji użytkownikom, którzy nie widzą obrazu (niedowidzący)
lub jeśli obraz nie został załadowany. Tekst alternatywny musi znajdować się w każdym znaczniku <img>.
W przypadku, gdy mamy tylko galerię zdjęć, bez żadnego opisu tekstowego, konieczne jest
doprecyzowanie, co dokładnie jest pokazane na obrazku.
<img
src="kittens.jpg"
alt="Troje kociąt bawi się na słomie. Dwoje szarych i jedno czarne."
/>
Odsyłacz obrazkowy
Link nie obowiązkowo musi zawierać treść tekstową. Bardzo często, szczególnie w sklepach internetowych,
kliknięcie zdjęcia produktu na liście produktów przekierowuje użytkownika na stronę tego produktu.
<a href="https://www.pexels.com/photo/animals-sweet-cat-kitty-57416/">
<img
src="https://images.pexels.com/photos/57416/cat-sweet-kitty-animals-57416.jpeg?
w=640"
alt="Rudy kot"
width="640"
/>
</a>
Obraz z podpisem
Takie zadanie jest często spotykane w artykułach, w których znajduje się wiele obrazków z objaśnieniami
pod lub nad obrazkiem, na przykład ilustracje, wykresy lub diagramy. Jeśli trzeba oznaczyć znacznikami
obraz z podpisem, można użyć znaczników<img> i akapit <p>. Ale właśnie dla takich zadań istnieją
znaczniki semantyczne <figure> i <figcaption>.
Wewnątrz <figure> umieszczamy znaczniki obrazu i opisu. Znacznik <figcaption> musi być pierwszym
lub ostatnim elementem dzieckiem elementu <figure>.
<figure>
<!-- Dowolna treść graficzna: zdjęcie, wykres, diagram itp. -->
<img src="adres obrazu" alt="tekst alternatywny" />
<figcaption>
Tekst wyjaśnienia, który będzie znajdował się pod obrazem
</figcaption>
</figure>
Ścieżka bezwzględna
Określa dokładną lokalizację pliku w strukturze folderów na serwerze. Bezwzględna ścieżka umożliwia
dostęp do pliku z zasobów zewnętrznych.
https://images.pexels.com/photos/583842/pexels-photo-583842.jpeg
Adresy bezwzględne składają się z co najmniej trzech części: protokołu, nazwy serwera i ścieżki pliku.
https:// - protokół.
images.pexels.com - nazwa serwera.
/photos/583842/pexels-photo-583842.jpeg — ścieżka do pliku obrazu, gdzie «photos» i
«583842» nazwy folderów. Folder «583842» zagnieżdżony w «photos».
Interesująco
Na przykład po kliknięciu w link z tym adresem, przeglądarka otworzy kartę z obrazem, który znajduje się
gdzieś na serwerze w Internecie.
Ścieżka względna
Opisuje ścieżkę do zasobu odnośnie bieżącego pliku. Służy do tworzenia ścieżek do obrazów, plików stylów
lub tworzenia nawigacji do innych stron internetowych, które stwarzacie.
Żeby w index.html dotrzeć do obrazu logo z folderu images, w atrybucie src należy określić ścieżkę
względną, czyli względną do dokumentu HTML.
<a href="">
<img src="images/logo.png" alt="Logo strony" />
</a>
Znak / oznacza przejście o jeden poziom niżej. Taką ścieżkę przeglądarka dosłownie rozumie, jak: „W
folderze images, na jednym poziomie z bieżącym plikiem index.html, wziąć plik logo.png».
W przyszłości konieczne będzie dołączenie obrazów do pliku stylów. Aby w pliku styles.css dotrzeć do
obrazu logo z folderu images, trzeba określić ścieżkę względną (względem pliku stylów).
background-image: url('../images/logo.png');
Ciąg znaków ../ wskazuje na przejście o jeden folder (poziom) wyżej. Przeglądarka dosłownie rozumie tę
ścieżkę jako: „Przejdź o jeden folder wyżej (wstecz), wejdź do folderu images i weź w nim plik logo.png».
Grafika rastrowa
Grafika rastrowa (raster, bitmap) - opis pliku graficznego w postaci tablicy ze współrzędnymi każdego
piksela oraz opisem koloru tego piksela. Jak paleta kolorów o stałym rozmiarze.
JPEG - duże pliki, które nie wymagają przezroczystego tła ani animacji. Ten format jest idealny do
żywych, fotorealistycznych zdjęć, ponieważ mogą one zawierać miliony kolorów.
PNG - w przeciwieństwie do JPEG ma dodatkowy parametr do opisu przezroczystość (kanał alfa).
Odpowiedni dla obrazów z przezroczystym lub monochromatycznym tłem. Używany do ikonek i
przedmiotów dekoracyjnych. Używany również do obrazów o wysokiej precyzji - zrzutów ekranu,
rysunków, wykresów itp.
webP - format zastępujący PNG i JPEG, ale nadal z niepełną obsługą w przeglądarkach. Przy tej
samej jakości obrazu skompresowane pliki będą mniejsze niż PNG i JPEG średnio o 25%.
Grafika wektorowa
Grafika wektorowa (SVG, Scalable Vector Graphics) - jest opisywana za pomocą reguł lub równań
definiujących linie, a także dodatkowych właściwości, koloru linii i tła kształtów.
Grafika wektorowa jest idealna do prostych obrazów, które można skalować i zajmują bardzo mało miejsca.
Jednak wraz ze wzrostem złożoności obrazu rozmiar pliku sprawia, że użycie formatu SVG jest
nieopłacalne. Grafika wektorowa zastępuje PNG i służy do tworzenia ikonek, logo, wykresów, grafiki
abstrakcyjnej i elementów dekoracyjnych.
Optymalizacja obrazów
Obrazy stanowią około 90% całkowitej masy zasobów strony, dlatego należy je najpierw zoptymalizować.
W przyszłości do optymalizacji zasobów projektu zostaną zaangażowane specjalne narzędzia, które będą to
robić automatycznie. Ale teraz trzeba myśleć o optymalizacji wagi strony i używać specjalnych usług online
do kompresowania obrazów.
Trzeba pamiętać, że optymalizacja pliku JPEG prowadzi do utraty jakości obrazu. Dlatego wraz ze
zmniejszeniem wagi obrazu jego wygląd ulegnie pogorszeniu. Optymalizacja formatu JPEG sprowadza się
do znalezienia równowagi między jakością obrazu a wagą.
Progresywny JPEG
Progresywne obrazy JPEG - są to pliki graficzne w formacie JPEG, które zostały zakodowane w taki
sposób, że podczas wyświetlania są ładowane w postaci warstw. Progresywny JPEG wygląda dokładnie tak,
jak zwykłe obrazy JPEG. Różnica polega na sposobie ich wyświetlania podczas uruchamiania.
Zwykłe pliki JPEG są ładowane i renderowane w postaci pasków (linia po linii) od góry do dołu. Dla
użytkownika stwarza to efekt słabej szybkości ładowania strony. Jest to szczególnie widoczne w przypadku
dużych obrazów lub na urządzeniach mobilnych o słabej jakości połączenia sieciowego.
Progresywny JPEG ładowany jest w taki sposób, że cały obraz jest wyświetlany od razu, ale w słabej
jakości, a w trakcie wczytywania jakość stopniowo poprawia się do maksimum.
Tworzenie
Aby zrobić progresywny obraz JPEG, wystarczy użyć specjalnych narzędzi, w tym online. Na przykład
podczas optymalizacji obrazów JPEG w Squoosh, one domyślnie (automatycznie) stają się progresywne.
Znaczniki strukturalne
Istnieje cały zestaw znaczników semantycznych do oznaczania dużych sekcji logicznych i ulepszania
semantyki strukturalnej strony. Każdy z nich może być użyty pod pewnymi warunkami. Wpływa to na
działanie technologii asystujących, indeksowanie strony i jej ranking w wynikach wyszukiwania.
Nagłówek (header) podkreśla wprowadzającą część całej strony, złożonej sekcji lub artykułu. Zwykle
zawiera logo, nawigację, tekst wprowadzający, złożony nagłówek. Na stronie może być kilka.
<body>
<!-- Nagłówek -->
<header>
<a href="/">Logo strony</a>
<ul>
Menu nawigacyjne do innych stron
</ul>
</header>
</body>
Znacznik <footer>
Stopka (footer) to ostatnia część całej strony, jej sekcji lub artykułu. Często zawiera prawa autorskie, listę
linków do sieci społecznościowych, dane kontaktowe i tak dalej. Na stronie może być kilka.
<body>
<!-- Nagłówek -->
<header>
<a href="/">Logo strony</a>
<ul>
Menu nawigacyjne do innych stron
</ul>
</header>
Znacznik <main>
Główna (unikalna) treść, która nie powtarza się na innych stronach internetowych. Na stronie może być
tylko jeden.
<body>
<!-- Nagłówek -->
<header></header>
Sekcje semantyczne
Znacznik <nav>
Definiuje sekcję głównej nawigacji z linkami do sekcji bieżącej lub innych stron. Używany tylko do
nawigacji głównej, a nie do dowolnej grupy linków w dokumencie
<body>
<!-- Nagłówek -->
<header>
<a href="/">Logo strony</a>
<nav>
<!-- Nawigacja do innych stron -->
<ul>
<li><a href="/portfolio">Portfolio</a></li>
<li><a href="/contact">Contact</a></li>
<li><a href="/about">About</a></li>
</ul>
</nav>
</header>
Znacznik <article>
Niezależna, odłączalna i znacząca część dokumentu. Na przykład post na forum, tweet, artykuł na blogu,
widżet reklamowy, historia na Instagramie, karta produktu w sklepie.
<article>
<h1>Słodkie ciasteczko</h1>
<img src="link do obrazu ciasteczka" alt="ciasteczko" />
<p>
Pyszne pieczone ciasteczka z różnymi nadzieniami: wiśniowym, śliwkowym,
brzoskwiniowym lub truskawkowym.
</p>
<p>Cena: 50 kredytów</p>
</article>
Znacznik section
Duża sekcja, która łączy treści według znaczenia. Nierozłączna z głównym dokumentem. Na przykład
sekcja listy produktów, blok danych osobowych w profilu użytkownika, sekcja danych kontaktowych.
<section>
<h1>Najpopularniejsze ciasteczka w tym tygodniu</h1>
<!-- Każdy <li> może zawierać karteczkę z ciasteczkiem z sekcji «Znacznik <article>»
-->
<ul>
<li>Smażone z grzybami</li>
<li>Smażone z mięsem</li>
<li>Smażone z jabłkami</li>
<li>Pieczone z twarogiem</li>
</ul>
</section>
Znacznik <div>
Uniwersalny kontener bez znaczenia semantycznego. Używany jako blok opakowujący do dalszej stylizacji
treści.
Pomocne
Jeśli nie udaje się nadać grupie treści rozsądnej nazwy (nie „prawej kolumny”, ale mającej sens) - jest
to<div> i najprawdopodobniej jest potrzebny po prostu wspólny kontener do stylizacji.
W przykładzie brakuje znaczników szkieletu dokumentu, ponieważ sama platforma interaktywna dodaje go
automatycznie codepen.io. Aby uzyskać pełny obraz, zapiszmy podstawowe znaczniki dokumentu.
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8" />
<title>Web studio mango.dev</title>
</head>
<body>
<!-- Wszystkie znaczniki są prawdziwymi przykładami -->
</body>
</html>
Walidacja
W kodzie każdy przecinek, cudzysłów i nawias, nazwa atrybutu i znacznika, znacznik otwierający i
zamykający są ważne. Oczy, szczególnie w początkujących, nie mogą za tym wszystkim podążać, więc
został wymyślony walidator.
Walidacja jest potrzebna do wykrywania błędów w składni znaczników dokumentu HTML i rozbieżności ze
specyfikacją HTML określoną w <!DOCTYPE >. Program do tego sprawdzenia nazywany jest walidatorem.
W wyniku walidacji dokument przechodzi walidację lub otrzymuje listę zalecanych poprawek.
Uwaga
Jest specjalna usługa online (walidator) która sprawdza, czy kod dokumentu HTML spełnia standardy.
Aby to sprawdzić, są potrzebne tylko dwa kroki, pierwszy to wysłanie kodu źródłowego do walidatora,
drugi to kliknięcie przycisku do sprawdzania. Można przesłać kod do walidacji, pobierając plik HTML,
przesyłając link do działającej strony internetowej lub kopiując i wklejając cały kod.
Pomocne
Jeśli przekazać tylko oddzielne znaczniki HTML do walidatora, to on zwróci błąd, ponieważ każda strona
musi mieć podstawowy szkielet dokumentu.
<section>
<!-- Kolejność zamykania znaczników nie jest przestrzegana. -->
<p><a href="squoosh.app">Squoosh - serwis <em></a>optymalizacji</p> obrazów.</em>
Błędy są oznaczone jako Error i muszą zostać naprawione w takiej kolejności, w jakiej są wymienione.
Ostrzeżenia są oznaczone jako Warning, nie ma konieczności ich naprawy, ale jest to powód do
przemyślenia i ponownego rozważania jakości znaczników.
<section>
<p>
<a href="squoosh.app">Squoosh</a> - serwis <em>optymalizacji</em> obrazów.
</p>
<p>Zalety</p>
<ul>
<li>Działa w przeglądarce</li>
<li>Nie ładuje systemu</li>
<li>Wygodny interfejs</li>
</ul>
</section>
Tabele
Tabele pozwalają wyświetlać złożone relacje, umieszczając dowolną zawartość w komórkach. Należy ich
używać tylko do zaznaczania danych tabelarycznych: harmonogram transportu, kalendarz, wyniki meczów,
transakcje finansowe, menu w restauracji, cennik itp. To znaczy informacje, które logicznie można
przedstawić w formie tabelarycznej, na przykład za pomocą Google Sheets.
Pomocne
Elementy tabeli semantycznie opisują dane tabelaryczne, a używanie ich do innych celów stanowi
naruszenie semantyki.
<table>
<tr>
<td>433</td>
<td>Kijów - Kowel</td>
<td>5 godzin</td>
</tr>
<tr>
<td>701</td>
<td>Charków - Dniepr</td>
<td>7 godzin</td>
</tr>
<tr>
<td>258</td>
<td>Lwów - Odessa</td>
<td>4 godziny</td>
</tr>
</table>
Pomocne
Domyślnie tabela nie ma specjalnego formatowania, na przykład tak ciemnej ramki jak na obrazku. W tym
celu używany jest CSS, podobnie jak w przypadku każdego innego formatowania treści.
Komórki nagłówkowe
Aby utworzyć wiersz z nagłówkami kolumn, używamy standardowego znacznika <tr> dla wiersza i
oznaczamy komórki specjalnym znacznikiem <th> (table header) - semantycznym znacznikiem komórki
nagłówkowej. Domyślnie tekst wewnątrz <th> jest zaznaczony pogrubioną czcionką i jest wyśrodkowany.
<table>
<tr>
<th>Numer</th>
<th>Trasa</th>
<th>Czas podróży</th>
</tr>
<tr>
<td>433</td>
<td>Kijów - Kowel</td>
<td>5 godzin</td>
</tr>
<tr>
<td>701</td>
<td>Charków - Dniepr</td>
<td>7 godzin</td>
</tr>
<tr>
<td>258</td>
<td>Lwów - Odessa</td>
<td>4 godziny</td>
</tr>
</table>
Sekcje tabeli
Aby ulepszyć semantykę znaczników tabeli, istnieje kilka znaczników strukturalnych.
W rozkładzie pociągów można wybrać nagłówek z jednego wiersza z nazwami kolumn i ciało.
<table>
<thead>
<tr>
<th>Numer</th>
<th>Trasa</th>
<th>Czas podróży</th>
</tr>
</thead>
<tbody>
<tr>
<td>433</td>
<td>Kijów - Kowel</td>
<td>5 godzin</td>
</tr>
<tr>
<td>701</td>
<td>Charków - Dniepr</td>
<td>7 godzin</td>
</tr>
<tr>
<td>258</td>
<td>Lwów - Odessa</td>
<td>4 godziny</td>
</tr>
</tbody>
</table>
Nagłówek tabeli
Jeśli tabela ma nagłówek, można oczywiście oznaczyć go za pomocą znaczników nagłówka.
Ale byłoby bardziej semantycznie użyć specjalnego znacznika tabeli <caption>, który powinien znajdować
się wewnątrz tabeli jako pierwszy element.
<table>
<caption>
Rozkład jazdy pociągów
</caption>
Oto przykład wyniku na żywo. W zakładce CSS można zobaczyć style, w których każda z reguł CSS ma
komentarz z wyjaśnieniem.
Łączenie komórek
Niektóre tabele są zrobione tak, że trzeba połączyć kilka komórek poziomo lub pionowo.
Napiszmy znaczniki takiej tabeli dodając dodatkowe komórki, biorąc pod uwagę, że „Usługa w chmurze”
zajmie dwie komórki w pionie, a „Użycie” - trzy w poziomie.
<table>
<thead>
<tr>
<th>Usługa w chmurze</th>
<th>Użycie</th>
<th></th>
<th></th>
</tr>
<tr>
<th></th>
<th>Użytkownicy</th>
<th>Odwiedzenia</th>
<th>Rozmiar</th>
</tr>
</thead>
<tbody>
<tr>
<td>Google</td>
<td>12000</td>
<td>307000</td>
<td>1000 Tb</td>
</tr>
<tr>
<td>Amazon</td>
<td>9000</td>
<td>200500</td>
<td>800 Tb</td>
</tr>
</tbody>
</table>
Zwróćcie uwagę na puste znaczniki <th>, każdy wiersz musi mieć taką samą liczbę komórek, więc na razie
zostawimy "dodatkowe" puste. W rezultacie otrzymujemy taką tabelę.
Zasady równej liczby komórek w wierszach i kolumnach nie można cofnąć, ale można ją ominąć. Aby
rozszerzyć komórkę w poziomie, używa się atrybutu colspan, w pionie - rowspan.
Trzeba określić grupę komórek do scalenia, a następnie ustawić atrybut colspan dla najwyższej lewej
komórki w grupie z liczbą komórek do scalenia po prawej stronie i / lub rowspan na dole. Następnie
konieczne jest usunięcie komórek, które stały się niepotrzebne po prawej stronie i / lub na dole.
W naszym zadaniu komórka "Usługa w chmurze" powinna zajmować 2 komórki w pionie, więc dodajemy
do niej rowspan="2" i usuwamy puste <th> w wierszu poniżej. Podobnie z komórką "Użycie" ustawiamy
colspan="3"i usuwamy dwie sąsiednie komórki po prawej stronie w tym wierszu.
<table>
<thead>
<tr>
<th rowspan="2">Usługa w chmurze</th>
<th colspan="3">Użycie</th>
</tr>
<tr>
<th>Użytkownicy</th>
<th>Odwiedzenia</th>
<th>Rozmiar</th>
</tr>
</thead>
<!-- Znaczniki tbody -->
</table>
Znaczniki tekstu
Znacznik <dl>
Znacznik <dl> (description list) jest to kontener na listę par terminów i ich opisów, czyli słownik. Istnieje
znacznik <dt> do tagowania terminów i znacznik <dd> do opisów. Służy do zaznaczania (tagowania) listy
definicji, na przykład podczas tworzenia glosariusza, książki telefonicznej itp.
Znacznik <span>
Uniwersalny kontener dla małej zawartości tekstowej, takiej jak pojedyncze słowa, fragmenty słów lub frazy
w tablicy tekstowej. Podobnie jak znacznik <div>, nie ma znaczenia semantycznego i służy do dodatkowej
stylizacji.
<p>
Znacznik <span class="accent">span</span> jest to uniwersalny pojemnik na małą
zawartość tekstową.
</p>
Interesująco
Spanowi z atrybutem class="accent" za pomocą CSS można dodać style, na przykład inny kolor tekstu,
jego rozmiar itp.
Znacznik <pre>
Domyślnie przeglądarka ignoruje podziały wierszy i więcej niż jedną spację z rzędu. Ten znacznik
umożliwia dodanie przeformatowanego tekstu z wymuszonymi znakami końca wiersza. Na przykład
zaznaczanie tekstu piosenki lub wiersza.
Znacznik <time>
Datę i godzinę można zapisać zwykłym tekstem, ale lepiej jest użyć specjalnego znacznika <time>. Data dla
osoby to tekst wewnątrz znacznika, a dla maszyny - wartość atrybutu datetime w formacie ISO 8601.
<p>
Najnowsze wiadomości <time datetime="2019-12-14">14 grudnia 2019 roku</time>.
</p>
<p>
Spotkanie odbyło się o <time datetime="2018-07-14T11:30">11:30 rano</time>.
</p>
Przeglądarka wyświetli tylko tekst wewnątrz znacznika. Osoba zobaczy zrozumiały tekst, a technologie
asystujące odczytają atrybut datetime i uzyskają dokładną wartość w wymaganym formacie.
Znacznik <address>
Przeznaczony do przechowywania danych kontaktowych autora artykułu, bloku informacji lub całej strony
internetowej. Informacje kontaktowe mogą mieć dowolną odpowiednią formę, na przykład adres fizyczny,
adres e-mail, link do strony internetowej, numeru telefonu, znacznik sieci społecznościowej.
<address>
Kijów, <br />
Bulwar Łesi Ukrainki, 26, <br />
Czwarte piętro biuro 427
</address>
<address>
<a href="mailto:mango@mail.pig">mango@mail.pig</a>
<a href="tel:+1112223344">(111) 222-33-44</a>
</address>
Zwróćcie uwagę na znacznik <br>, służy on do oznaczania tablicy tekstu z wymuszonymi podziałami
wierszy w celu wizualnego formatowania. Na przykład zaznaczenie jednego wiersza adresu w kilku
wierszach.
Uwaga
Znacznik <br/> (skrót od line break) nie jest używany do wymuszonego dodawania podziałów wierszy
między znacznikami ani do dzielenia tablicy tekstu na akapity.
Znacznik <strong> semantycznie podkreśla tekst jako ważny i wskazuje, że jest to znaczące słowo lub
fraza. Na przykład zaznaczyć ostrzeżenie lub dowolną część tekstu, na którą użytkownik powinien najpierw
zwrócić uwagę.
<p>
<strong>Uwaga!</strong> Okres subskrypcji dobiega końca.
<strong>Konto zostanie zawieszone.</strong> Odnów subskrypcję lub skontaktuj
się z pomocą techniczną.
</p>
Znacznik <b> (skrót od bold) powoduje, że tekst jest tylko wizualnie pogrubiony, przyciąga uwagę, ale nie
przywiązuje szczególnej wagi.
Interesująco
W przypadku technologii asystujących, takich jak czytnik ekranu, tekst zawinięty w <strong> ma
szczególne znaczenie i będzie dodatkowo wyróżniony intonacją.
Znacznik <em> (skrót od emphasis) semantycznie podkreśla tekst, na który kładzie się specjalny nacisk,
który zmienia znaczenie frazy. Na przykład można podkreślić sarkazm.
Znacznik <i> (skrót od italic) sprawia, że tekst jest tylko wizualnie kursywą, zwraca na siebie uwagę, ale
nie przywiązuje szczególnej wagi. Na przykład wydzielić terminy w zdaniu.
Znaki specjalne
Nie wszystkie znaki można wpisać na klawiaturze. Na przykład zastrzeżony znak towarowy ®, znak
handlowy ™, znak praw autorskich ©. Aby wprowadzić takie znaki, używa się znaków specjalnych.
Interesująco
Standard kodowania Unicode zawiera znaki z prawie wszystkich języków świata, a także znaki specjalne i
usługowe. Znaki specjalne to linki-mnemoniki dzięki którym przeglądarka wie, który znak Unicode
wyświetlić.
Znaki specjalne to specjalne wiersze, które przeglądarki konwertują na znaki. Zmiany można dokonać na
kilka sposobów.
Znaki specjalne są używane nie tylko do wstawiania znaków, których nie ma na klawiaturze, ale także do
znaków, które mają specjalne przeznaczenie w HTML. Na przykład, jeśli trzeba wyświetlić na stronie tekst
zawierający znaczniki jako tekst.
Znak < i > jest częścią składni HTML, otwiera i zamyka znaczniki. Dlatego bezpośrednie wstawienie ich do
kodu strony prowadzi do interpretacji <strong> i </strong> jako znaczników. W tym przypadku zamiast
znaków < i > trzeba użyć znaków specjalnych < i >.
<p>
Aby uzyskać efekt pogrubienia tekstu, trzeba wydzielić go znacznikami <strong>
i </strong>.
</p>
Istnieje oficjalna strona W3C oraz serwis od Toptal, gdzie można znaleźć mnemonik dla dowolnego znaku.
Wideo i audio
Przed HTML5 znaczniki wideo i audio były trudnym zadaniem. W nowoczesnym standardzie dodano nowe
znaczniki do oznaczania treści multimedialnych z obsługą różnych formatów, wbudowanych elementów
sterujących itp.
Wideo
Sparowany znacznik służy do oznaczania treści wideo <video>.
<video
src="http://techslides.com/demos/sample-videos/small.webm"
poster="https://images.pexels.com/photos/595804/pexels-photo-595804.jpeg?w=640"
width="640"
controls
autoplay
loop
preload="auto"
></video>
Przeanalizujmy atrybuty.
Atrybut preload wskazuje tryb wstępnego ładowania wideo. Jego wartość wpływa na to, jakie informacje
zostaną załadowane. Wartość domyślna zależy od przeglądarki, w której została otwarta strona internetowa.
Formaty wideo
Pobranie tylko jednego formatu pliku wideo nie wystarczy, niektóre przeglądarki mogą go nie obsługiwać, a
użytkownik nie będzie mógł obejrzeć wideo. Istnieje kilka popularnych formatów wideo, które należy
udostępnić przeglądarce do wyboru: webm, mp4 i ogg.
Aby to zrobić, trzeba usunąć atrybut src z znacznika <video> i dodać nowy znacznik <source> dla
każdego formatu. W atrybucie src należy ukazać adres pliku wideo, natomiast w atrybucie type format
wideo. Przeglądarka wybierze pierwszy z listy, który obsługuje i załaduje, ignorując resztę.
<video
poster="https://images.pexels.com/photos/595804/pexels-photo-595804.jpeg?w=640"
width="640"
controls
>
<source
src="http://techslides.com/demos/sample-videos/small.webm"
type="video/webm"
/>
<source
src="http://techslides.com/demos/sample-videos/small.mp4"
type="video/mp4"
/>
<source
src="http://techslides.com/demos/sample-videos/small.ogv"
type="video/ogg"
/>
</video>
Interesująco
Konwersja wideo i audio do wymaganych formatów jest zadaniem twórcy treści, menedżera treści lub w
skrajnych przypadkach programisty.
Audio
Sparowany znacznik <audio> jest używany do oznaczania treści audio. Jego użycie jest bardzo podobne do
<video>, ale można ustawić mniej atrybutów.
Przeanalizujmy atrybuty.
Atrybut preload wskazuje tryb wstępnego ładowania pliku audio. Jego wartość wpływa na to, jakie
informacje zostaną załadowane. Wartość domyślna zależy od przeglądarki, w której została otwarta strona
internetowa.
Formaty audio
Z obsługą formatu w przeglądarce z audio sytuacja jest lepsza. Wszystkie nowoczesne przeglądarki
obsługują jeden z dwóch formatów: mp3 albo ogg.
Podobnie jak w przypadku wideo, usuwamy atrybut src i używamy znacznika <source> z atrybutamisrc i
type.
<audio controls>
<source src="song.mp3" type="audio/mpeg" />
<source src="song.ogg" type="audio/ogg" />
</audio>
Wsparcie dla starszych przeglądarek
Jeśli przeglądarka jest bardzo stara i nie obsługuje treści multimedialnych HTML5, trzeba poinformować o
tym użytkownika. Aby to zrobić, wewnątrz znaczników <video> albo <audio>, po wszystkich znacznikach
<source> trzeba dodać wiersz tekstu, który przeglądarka wyświetli, jeśli nie obsługuje treści
multimedialnych.
<video
poster="https://images.pexels.com/photos/595804/pexels-photo-595804.jpeg?w=640"
width="640"
controls
>
<source
src="http://techslides.com/demos/sample-videos/small.webm"
type="video/webm"
/>
<source
src="http://techslides.com/demos/sample-videos/small.mp4"
type="video/mp4"
/>
<source
src="http://techslides.com/demos/sample-videos/small.ogv"
type="video/ogg"
/>
<audio controls>
<source src="song.mp3" type="audio/mpeg" />
<source src="song.ogg" type="audio/ogg" />
Wprowadzenie do CSS
CSS (Cascading Style Sheets, Kaskadowe arkusze stylów) - jest językiem do opisu i zmiany wyglądu
elementów. HTML służy do definiowania struktury i semantyki treści dokumentu, a CSS jest używany do
projektowania i pozycjonowania.
Składnia
Blok kodu CSS nazywany jest regułą, która składa się z selektora i bloku deklaracji w nawiasach
klamrowych.
Selektor informuje przeglądarkę, do których elementów zastosować style z tej reguły. Każda deklaracja
składa się z pary właściwość: wartość;, gdzie właściwość i jej wartość są oddzielone dwukropkiem ze
spacją i koniecznie kończą się średnikiem. One opisują, co dokładnie należy zrobić ze stylami elementu.
selektor {
właściwość: wartość;
właściwość: wartość;
właściwość: wartość;
}
Dodanie stylów
Istnieją trzy sposoby dodawania stylów do dokumentu HTML: style wbudowane (inline styles), wbudowany
arkusz stylów (embedded stylesheet) i zewnętrzny arkusz stylów (external stylesheet). Każdy sposób ma
swoje zalety, wady, ograniczenia i zakres użycia.
Style wbudowane
Style wbudowane (inline) są ustawiane dla znacznika bezpośrednio w atrybucie style. Nie można ich
skalować, są trudne do zastąpienia i ponownego użycia, więc są rzadko używane. Na przykład w przypadku
stylów dynamicznych, które są ustawiane podczas wykonywania kodu JavaScript, gdy nie wiemy z góry,
jaka będzie wartość właściwości.
<head>
<style type="text/css">
p {
color: blue;
font-size: 24px;
}
</style>
</head>
Interesująco
Czasami takie podejście jest stosowane w celu optymalizacji szybkości renderowania strony przez dodanie
najważniejszych stylów bezpośrednio do dokumentu HTML. Ta zaawansowana technika nazywa się
Critical CSS.
Zewnętrzny kod CSS jest łatwy do skalowania, konserwacji i ponownego wykorzystania na innych stronach,
więc jest to standard łączenia stylów. Projekt tworzy oddzielny plik arkusza stylów z rozszerzeniem .css i
podłącza się do dokumentu HTML.
<head>
<link rel="stylesheet" href="./css/styles.css" />
</head>
Na tym samym poziomie co index.html tworzony jest folder css, a wewnątrz niego arkusz stylów
styles.css.
W znaczniku <head>, za pomocą znacznika <link>, podłączany jest wcześniej utworzony plik.
Atrybut href określa ścieżkę do arkusza stylów względem dokumentu HTML.
Atrybut rel określa typ dołączonego dokumentu - stylesheet (arkusz stylów).
Pomocne
Możesz dołączyć dowolną liczbę plików CSS, dodając do każdego znacznik <link>.
Selektory
Korzystając z różnych selektorów, można wybrać jeden lub grupę elementów. Selektorów jest dość dużo,
dlatego rozpatrzymy te główne, które można stosować każdego dnia
Selektor elementu (znacznika)
Opisuje, do jakiego typu elementów będzie stosowana reguła CSS. Selektor elementu nie jest wystarczająco
specyficzny, aby nadać styl poszczególnym elementom, dlatego jest najczęściej używany do stylizacji
wszystkich znaczników tego samego typu na stronie. Na przykład, jeśli trzeba usunąć podkreślenie ze
wszystkich linków w dokumencie.
Selektor klasy
Główny selektor w nowoczesnym designie. Używany w połączeniu z atrybutem globalnym class. Nazwa
klasy ustawia się tylko w języku angielskim i jest to koniecznie rzeczownik opisujący, jakiego rodzaju jest
ten element. Aby poszerzyć swoje słownictwo proszę używać przewodnika i słownika terminów.
CSS używa selektora klasy do nadania stylu jednemu lub większej liczbie elementów o tej samej wartości
atrybutu class (nazwa klasy). W selektorze przed nazwą klasy umieszczana jest kropka ..
Uwaga
Nazwa klasy zawiera tylko małe litery i myślnik. Na przykład, list, list-item, logo-image itp.
Podkreślenialist_item, duże litery ListItem lub liczby listitem27 są uznawane za niewłaściwą formę.
Kompozycja klas
Można to wykorzystać do łączenia i ponownego wykorzystywania stylów. Utwórzmy znaczniki i style dla
komponentu alertów.
W stylach opisujemy kilka reguł, które są wspólne dla wszystkich alertów i specyficzne dla każdego typu.
.warning {
color: orange;
}
.error {
color: red;
}
Selektor identyfikatora
Podobnie jak w przypadku klasy, znaczniki mogą mieć globalny atrybut id. Różnica polega na tym, że
wartość id musi być unikalna na stronie, to znaczy nie mogą istnieć dwa elementy o tej samej wartości
identyfikatora.
#title {
font-weight: 500;
color: orange;
}
Pomocne
Nie używaj identyfikatorów do projektowania. Reguła wyjątkowej wartości uniemożliwia ponowne użycie
stylów. Identyfikatory dotyczą "kotwic".
Selektor potomka
Selektor potomka lub selektor kontekstowy stosuje style do elementów podrzędnych i potomnych elementu
na dowolnej głębokości zagnieżdżenia.
<ul class="social-links">
<li>
<a href="">Twitter</a>
</li>
<li>
<a href="">Instagram</a>
</li>
<li>
<a href="">Facebook</a>
</li>
</ul>
Na przykład, zamiast ustawiać style wszystkim linkom, wystarczy zmienić style tylko tych, które znajdują
się na liście z klasą social-links.
/* ✅ Będzie zastosowane tylko do linków, które znajdują się wewnątrz znacznika z klasą
social-links */
.social-links a {
color: blue;
text-decoration: none;
}
Selektor dziecka
Kolejny popularny selektor, który pozwala wybrać tylko bezpośrednie dziecko w elemencie nadrzędnym.
Używamy znaczników dla wielopoziomowego menu sklepu, w którym trzeba nadać styl znacznikom <li>
na liście z klasą menu, ale nie submenu.
<ul class="menu">
<li>
Komputery i akcesoria
<ul class="submenu">
<li>Procesory</li>
<li>Monitory</li>
<li>Karty graficzne</li>
</ul>
</li>
<li>
Artykuły gospodarstwa domowego
<ul class="submenu">
<li>Lodówki</li>
<li>Telewizory</li>
<li>Pralki</li>
</ul>
</li>
<li>
Sprzęty gospodarstwa domowego
<ul class="submenu">
<li>Fotele</li>
<li>Materace</li>
<li>Kominki elektryczne</li>
</ul>
</li>
</ul>
Jeśli używać selektora potomka (kontekstowego), reguła CSS będzie zastosowana do wszystkich
znaczników <li>, a każdy z nich będzie miał czerwoną obwódkę.
Selektor dziecka pomaga rozwiązać ten problem, wybierając tylko te <li>, które są dziećmi (pierwszym
zagnieżdżeniem) listy ul.menu.
Selektor atrybutu
Umożliwia stosowanie stylów do elementów o określonym atrybucie lub jego wartości.
element[atrybut]
a[title] {
color: teal;
}
element[atrybut="wartość"]
a[href="https://cssreference.io"]
{
color: orange;
}
a[href="https://www.youtube.com"]
{
color: tomato;
}
Pseudoklasy stanowe
Selektory stanowe służą do użycia stylów dla elementów interaktywnych na określone zdarzenie, takie jak
najechanie kursorem na link lub fokus z klawiatury.
Pseudoklasa definiuje określony stan elementu i jest dołączona do selektora znacznika, klasy itp. Pomiędzy
selektorem a pseudoklasą nie ma spacji wskazującej, że są one ze sobą powiązane. Jeśli dodać spację, to
pseudoklasa będzie dotyczyć wszystkich elementów w dokumencie.
selektor:pseudoklasa {
/* Właściwości */
}
Pseudoklasa :hover
Zostaje uruchamiana, gdy kursor myszy znajduje się w granicach elementu, na przykład gdy wskaźnik
myszy znajduje się nad linkiem lub innym elementem.
<p>
Znaleźć doskonałą ściągawkę do tagów można
<a class="link" href="https://htmlreference.io">kliknąc w link</a>.
</p>
.link {
color: teal;
}
.link:hover {
color: tomato;
}
Dodamy styl podstawowy oraz styl po najechaniu kursorem do linku wewnątrz listy.
.social-links .link {
color: teal;
}
.social-links .link:hover {
color: tomato;
}
Pomocne
Taki selektor brzmi jak „Gdy najedziesz kursorem na elementy z klasą link, które znajdują się wewnątrz
elementu z klasą social-links”. Oznacza to, że selektory są czytane od prawej strony do lewej. :::
Pseudoklasa :focus
Jest aktywowana, gdy element interaktywny (link, przycisk, pole formularza) otrzymuje fokus podczas
nawigacji po stronie za pomocą klawiatury (klawisz Tab).
<ul class="social-links">
<li><a class="link" href="https://twitter.com">Twitter</a></li>
<li><a class="link" href="https://www.instagram.com">Instagram</a></li>
<li><a class="link" href="https://www.facebook.com">Facebook</a></li>
</ul>
.social-links .link {
color: teal;
}
.social-links .link:focus {
color: orange;
}
Aby wziąć pod uwagę najechanie kursorem i fokus, warto od razu stylizować oba stany. Odbywa się to po
prostu poprzez wyświetlenie selektorów.
.social-links .link {
color: teal;
}
Pseudoklasa :active
Występuje, gdy element jest aktywowany. Na przykład link staje się aktywny, jeśli najechać na niego
kursorem i kliknąć myszą. Pomimo faktu, że prawie każdy element może stać się aktywny, pseudoklasa
:active jest używana głównie dla linków i przycisków.
<ul class="social-links">
<li><a class="link" href="https://twitter.com">Twitter</a></li>
<li><a class="link" href="https://www.instagram.com">Instagram</a></li>
<li><a class="link" href="https://www.facebook.com">Facebook</a></li>
</ul>
.social-links .link {
color: teal;
}
.social-links .link:hover,
.social-links .link:focus {
color: orange;
}
.social-links .link:active {
color: red;
}
Pseudoklasa :visited
Ta pseudoklasa jest aktywowana na linkach, które zostały już odwiedzone. Domyślnie linki są wyświetlane
na niebiesko, a po odwiedzeniu zmieniają kolor na fioletowy.
<ul class="social-links">
<li><a href="https://twitter.com" class="link">Twitter</a></li>
<li><a href="https://www.instagram.com" class="link">Instagram</a></li>
<li><a href="https://www.facebook.com" class="link">Facebook</a></li>
</ul>
.social-links .link {
color: teal;
}
.social-links .link:hover,
.social-links .link:focus {
color: orange;
}
.social-links .link:active {
color: red;
}
.social-links .link:visited {
color: green;
}
Hover i tabele
Pseudoklasa :hover nie koniecznie musi być stosowana do linków, można ją dodać do innych elementów
dokumentu. Na przykład do wierszy lub komórek tabeli, aby zmienić kolor tła po najechaniu kursorem.
<table class="schedule">
<thead>
<tr>
<th>Numer</th>
<th>Trasa</th>
<th>Czas podróży</th>
</tr>
</thead>
<tbody class="schedule-body">
<tr>
<td>433</td>
<td>Kijów - Kowel</td>
<td>5 godzin</td>
</tr>
<tr>
<td>701</td>
<td>Charków - Dniepr</td>
<td>7 godzin</td>
</tr>
<tr>
<td>258</td>
<td>Lwów - Odessa</td>
<td>4 godziny</td>
</tr>
</tbody>
</table>
.schedule th,
.schedule td {
padding: 8px;
border: 1px solid #212121;
}
Właściwość cursor
Ustawia typ wskaźnika myszy, gdy znajduje się w granicach elementu. Typ kursora zależy od systemu
operacyjnego i jego ustawień. Zmieniać typ kursora bez powodu to zły pomysł, to tylko zmyli użytkownika,
gdy zamiast zwykłej dłoni lub szkła powiększającego zobaczy coś innego. W większości przypadków
najlepiej zostawić go tak, jak jest.
<p class="text">
Lorem, ipsum dolor sit amet consectetur adipisicing elit. Obcaecati commodi,
veritatis nihil alias iste odit similique sit eius optio veniam, impedit
cumque fuga facere labore quo id necessitatibus quaerat rerum.
</p>
.text {
color: tomato;
}
Pomocne
Kolor tła
Właściwość background-color umożliwia zmianę koloru tła elementu.
<p class="text">
Lorem, ipsum dolor sit amet consectetur adipisicing elit. Obcaecati commodi,
veritatis nihil alias iste odit similique sit eius optio veniam, impedit
cumque fuga facere labore quo id necessitatibus quaerat rerum.
</p>
.text {
background-color: tomato;
color: white;
}
Nazwane kolory
Aby opisać kolor w stylach, można użyć zestawów zarezerwowanych słów. We współczesnym tworzeniu
stron internetowych nie są już używane, ale są przydatne, jeśli trzeba szybko ustawić określony kolor.
p {
color: tomato;
}
RGB
Istnieją trzy podstawowe kolory: czerwony, zielony i niebieski. Mieszając je w różnych proporcjach,
możesz uzyskać dowolny inny kolor.
Ten format używa funkcji rgb() do ustawienia wartości, która określa proporcje każdego z trzech kolorów
podstawowych, po czym są one mieszane i uzyskuje się żądany kolor.
Uwaga
Nie musisz zapamiętywać kombinacji wartości RGB, wszystkie kolory są w układzie od projektanta.
Hexadecimal
Ten opis koloru jest oparty na liczbie szesnastkowej. Udział każdego z trzech kolorów podstawowych jest
opisany dwoma liczbami.
Uwaga
Nie musisz pamiętać kombinacji wartości HEX, wszystkie kolory są w układzie od projektanta.
Przezroczystość koloru
Głównym sposobem dodania przezroczystości do koloru jest użycie funkcji rgba(). W przeciwieństwie do
rgb() dodaje się także przezroczystość (kanał alfa).
Interesująco
Można również ustawić przezroczystość kolorów w formacie Hex, ale ze względu na złożoność takiego
zapisu i zapamiętywania wartości zawsze używają tej funkcji rgba().
Kaskada stylów
Kaskadowość - to mechanizm, który zarządza końcowymi wartościami właściwości elementu, gdy stosuje
się do niego wiele reguł CSS.
p {
color: teal;
}
Aby zebrać ostateczne style elementu i rozwiązać konflikty wartości właściwości, przeglądarka
wykorzystuje dwa mechanizmy: specyficzność i dziedziczenie.
Specyficzność selektorów
Dla każdej reguły CSS przeglądarka oblicza specyficzność (wagę) selektora. Jeśli właściwości z różnych
reguł muszą być zastosowane do elementu i istnieją sprzeczne (identyczne) właściwości, używa się wartości
właściwości z reguły z największą specyficznością selektora.
Wartość specyficzności składa się z czterech rang, których znaczenie rośnie od prawej strony do lewej.
<article>
<h1>Lorem ipsum dolor sit amet</h1>
<p>
Lorem, ipsum dolor sit amet consectetur adipisicing elit. Obcaecati commodi,
veritatis nihil alias iste odit similique sit eius optio veniam, impedit
cumque fuga facere labore quo id necessitatibus quaerat rerum.
</p>
<a href="">Czytaj więcej...</a>
</article>
Kolor tekstu akapitu będzie pomarańczowy, ponieważ specyficzność drugiej reguły jest większa.
/* Specyficzność - 0 0 0 1 */
p {
color: green;
}
/* ✅ Specyficzność - 0 0 0 2 */
article > p {
color: orange;
}
Selektory trzeciej rangi
<article class="post">
<h1 class="post-title">Lorem ipsum dolor sit amet</h1>
<p>
Lorem, ipsum dolor sit amet consectetur adipisicing elit. Obcaecati commodi,
veritatis nihil alias iste odit similique sit eius optio veniam, impedit
cumque fuga facere labore quo id necessitatibus quaerat rerum.
</p>
<a href="" class="post-link">Czytaj więcej...</a>
</article>
Tekst nagłowka będzie miał kolor pomarańczowy, ponieważ specyficzność trzeciej reguły jest większa.
/* Specyficzność - 0 0 1 0 */
.post-title {
color: green;
}
/* Specyficzność - 0 0 1 1 */
.post > h1 {
color: red;
}
/* ✅ Specyficzność - 0 0 2 0 */
.post > .post-title {
color: orange;
}
Kolor tekstu linku będzie brązowy, ponieważ specyficzność piątej reguły jest większa.
/* Specyficzność - 0 0 0 1 */
a {
color: green;
}
/* Specyficzność - 0 0 1 0 */
.post-link {
color: orange;
}
/* Specyficzność - 0 0 1 1 */
a.post-link {
color: blue;
}
/* Specyficzność - 0 0 2 0 */
.post > .post-link {
color: red;
}
/* ✅ Specyficzność - 0 0 2 1 */
.post > a.post-link {
color: brown;
}
Selektory drugiej rangi
<article class="post">
<h1 class="post-title" id="title">Lorem ipsum dolor sit amet</h1>
<p>
Lorem, ipsum dolor sit amet consectetur adipisicing elit. Obcaecati commodi,
veritatis nihil alias iste odit similique sit eius optio veniam, impedit
cumque fuga facere labore quo id necessitatibus quaerat rerum.
</p>
<a href="" class="post-link">Czytaj więcej...</a>
</article>
Tekst nagłówka będzie miał kolor pomarańczowy, ponieważ specyficzność drugiej reguły jest większa.
/* Specyficzność - 0 0 1 0 */
.post-title {
color: green;
}
/* ✅ Specyficzność - 0 1 0 0 */
#title {
color: orange;
}
Style wbudowane dodają jednostkę do pierwszej rangi, mają największą specyficzność i nie można ich
zastąpić za pomocą CSS.
Jednakowa specyficzność
Jeśli specyficzność jest taka sama, wygrywa reguła, która znajduje się niżej w kodzie.
a {
color: brown;
}
Jeśli selektor wygląda jak A > B > C + X Y, warto to rozważyć. Im prostszy selektor, tym mniej
problemów ze specyficznością. Dobrą zasadą jest używanie selektorów klasy. Atrybut class nie tylko
pomaga uniknąć problemów ze specyficznością, ale także poprawia czytelność znaczników HTML.
Pierwszym podejściem jest przypisanie klasy do wspólnego bloku rodzica i użycie selektorów dziecka i
potomka.
<article class="post">
<h1>Lorem ipsum dolor sit amet</h1>
<p>
Lorem, ipsum dolor sit amet consectetur adipisicing elit. Obcaecati commodi,
veritatis nihil alias iste odit similique sit eius optio veniam, impedit
cumque fuga facere labore quo id necessitatibus quaerat rerum.
</p>
<a href="">Czytaj więcej...</a>
</article>
Taki CSS działa dobrze, gdy znaczniki są proste. Jednak wraz ze wzrostem złożoności znaczników
blokowych wygodne stylizowanie za pomocą selektorów znacznika staje się niemożliwe. Na przykład, jeśli
post zawiera 5 linków, a nie jeden, punktowo wybrać jakiś link nie uda się lub selektor będzie zbyt złożony.
.post {
/* Style artykułu */
}
.post > h1 {
/* Style nagłówka */
}
.post > p {
/* Style tekstu */
}
.post > a {
/* Style linku */
}
Drugie podejście polega na dodaniu klas opisowych do bloku rodzica i znajdujących się w nim znaczników.
<article class="post">
<h1 class="title">Lorem ipsum dolor sit amet</h1>
<p class="text">
Lorem, ipsum dolor sit amet consectetur adipisicing elit. Obcaecati commodi,
veritatis nihil alias iste odit similique sit eius optio veniam, impedit
cumque fuga facere labore quo id necessitatibus quaerat rerum.
</p>
<a class="link" href="">Czytaj więcej...</a>
</article>
Ten CSS dobrze się skaluje i jest dobrze obsługiwany. To jest punkt wyjścia do napisania dobrego CSS.
Jednak wraz ze wzrostem złożoności znaczników mogą wystąpić drobne problemy ze specyficznością.
.post {
/* Style artykułu */
}
Trzecie podejście polega na przypisaniu bardzo konkretnych klas do bloku rodzica i do każdego znacznika
w nim na zasadzie nazwa_rodzica-nazwa_dziecka.
<article class="post">
<h1 class="post-title">Lorem ipsum dolor sit amet</h1>
<p class="post-text">
Lorem, ipsum dolor sit amet consectetur adipisicing elit. Obcaecati commodi,
veritatis nihil alias iste odit similique sit eius optio veniam, impedit
cumque fuga facere labore quo id necessitatibus quaerat rerum.
</p>
<a href="" class="post-link">Czytaj więcej....</a>
</article>
To podejście wykorzystuje proste selektory klas, nie trzeba myśleć o specyficzności. Taki CSS jest dobrze
skalowalny i dobrze obsługiwany. Współczesny programista wykorzystuje różne odmiany tego podejścia
podczas pisania stylów.
.post {
/* Style artykułu */
}
.post-title {
/* Style nagłówka */
}
.post-text {
/* Style tekstu */
}
.post-link {
/* Style linku */
}
.post-link:hover {
/* Style linku po najechaniu kursorem */
}
Pomocne
Nie ograniczaj się do jednego podejścia. Wszystkie trzy metody nazywania klas znaczników i stylów pisania
mogą być używane razem, w zależności od sytuacji.
Słowo kluczowe!important
Specyficzność reguły można zwiększyć za pomocą słowa kluczowego !important, dodając go po wartości
właściwości.
Wartość tej właściwości ma pierwszeństwo przed wszystkimi innymi, a tekst akapitu będzie miał kolor
pomarańczowy.
p {
color: orange !important;
}
p#text-id.text {
color: blue;
}
Uwaga
Dziedziczenie właściwości
Dziedziczenie genetyczne jest zwyczajowo widoczne w życiu. Na przykład wysocy rodzice często mają
wysokie dzieci, kolor włosów jest często przenoszony i tak dalej. Coś w tym stylu jest również w CSS. Jeśli
ustawić kolor tekstu rodzica na zielony, to jeśli jakakolwiek reguła nie zastąpi tej wartości, kolor tekstu
wszystkich jej elementów potomków również będzie zielony.
<article class="post">
<h1>Popularne w tym miesiącu</h1>
<p>
Lorem, ipsum dolor sit amet consectetur adipisicing elit. Obcaecati commodi,
veritatis nihil alias iste odit similique sit eius optio veniam, impedit
cumque fuga facere labore quo id necessitatibus quaerat rerum.
</p>
<a href="">Czytaj więcej...</a>
</article>
.post {
color: green;
}
W narzędziach programistycznych, na karcie Styles na samym dole zobaczymy dziedziczenie dla akapitu i
nagłówka.
W
życiu nie wszystkie atrybuty rodziców są przekazywane dzieciom. Tak samo jest w CSS, nie każda
właściwość jest dziedziczona domyślnie przez potomków. W rzeczywistości, gdyby wszystkie właściwości
były dziedziczone, efekt byłby podobny do braku dziedziczenia, a wiele CSS musiałoby zostać napisanych,
aby zresetować odziedziczone style i zastąpić to zachowanie.
Wyjątki
Nie wszystkie elementy dziedziczą wartości właściwości od swoich przodków. Na przykład link nie
dziedziczy koloru tekstu.
<article class="post">
<h1>Popularne w tym miesiącu</h1>
<p>
Lorem, ipsum dolor sit amet consectetur adipisicing elit. Obcaecati commodi,
veritatis nihil alias iste odit similique sit eius optio veniam, impedit
cumque fuga facere labore quo id necessitatibus quaerat rerum.
</p>
<a href="" class="post-link">Czytaj więcej...</a>
</article>
Jeśli chcesz, aby post miał taki sam kolor jak reszta tekstu, można użyć specjalnej wartości inherit dla
właściwości color, aby nie duplikować koloru w dwóch miejscach.
.post {
color: green;
}
.post-link {
color: inherit;
}
Pomocne
Aby ustawić podstawowy (dominujący) kolor tekstu całego dokumentu, utwórz regułę dla znacznika <body>
i dodaj właściwość color. Ten kolor będzie dziedziczony przez całą zawartość tekstową z wyjątkiem
linków.
body {
color: #2a2a2a;
}
Zmienne CSS
Właściwości użytkownika (CSS Custom Properties), znane również jako zmienne CSS, to kontenery dla
wartości, określone w dokumencie CSS w celu powtórnego wykorzystania. Zmienne CSS ułatwiają
używanie i zmienianie powtarzających się wartości w pliku stylów. Wspierane są natywnie przez
przeglądarkę i nie potrzebują żadnych dodatkowych narzędzi.
CSS
HTML
styles.css
.section {
/* Inne style */
border: 2px solid #3f51b5;
}
.section-title {
/* Inne style */
color: #3f51b5;
}
.section-title::before {
/* Inne style */
background-color: #3f51b5;
}
W podanym przykładzie wartość #3f51b5 występuje trzykrotnie. Przyjmijmy, że to główny kolor marki,
który jest cały czas wykorzystywany na różnych podstronach strony internetowej. Jeżeli zmieni się kolor
marki, będziemy musieli wszędzie zmienić tę wartość, a w dużym projekcie mogą to być setki miejsc.
Najlepsze, co możemy zrobić, to używać opcji znajdź i zamień.
Zadeklarowanie zmiennej
Z pomocą przychodzą zmienne CSS. Nazwa zmiennej jest czuła na wielkość liter i może zawiera litery
łacińskie, cyfry, podkreślniki i pauzy. Utworzymy zmienną --brand-color do przechowywania koloru
marki (#3f51b5) i będziemy z niej korzystać.
styles.css
:root {
--brand-color: #3f51b5;
}
Zmienne globalne, dostępne w innej dowolnej zasadzie, określane są w selektorze :root – bardziej
specyficznym selektorze elementu <html>. Zadeklarowanie zmiennej zaczyna się od podwójnego łącznika
--, za którym pojawia się jej nazwa w dowolnej notacji. Na przykład brand-color lub brandColor - to
poprawne nazwy zmiennej. Najważniejsze, aby wszystkie zmienne w projekcie były w jednakowej notacji.
Nazwa i wartość rozdzielane są dwukropkiem, a na końcu deklaracji wstawia się średnik.
Ciekawostka
Deklaracja zmiennej to utworzenie nowej właściwości CSS, które jest dziedziczone, dlatego występuje
wszędzie, ponieważ dowolny element staje się potomkiem elementu <html>.
Wykorzystywanie zmiennej
W celu otrzymania dostępu do zmiennej przyjmowana jest wbudowana funkcja var(), której jako pierwszy
argument przekazuje się nazwę zmiennej.
styles.css
:root {
--brand-color: #3f51b5;
}
.section {
/* Inne style */
border: 2px solid var(--brand-color);
}
.section-title {
/* Inne style */
color: var(--brand-color);
}
.section-title::before {
/* Inne style */
background-color: var(--brand-color);
}
Zrobiło się trochę więcej kodu, ale jest on bardziej elastyczny i czytelny. Jeśli trzeba będzie zmienić kolor
marki, wystarczy podmienić wartość zmiennej --brand-color i kolor zmieni się wszędzie, gdzie jest ona
wykorzystywana.
Wskazówka
Zmienne CSS wykorzystuje się nie tylko do zapisywania palety kolorów projektu, można w nich
przechowywać dowolne informacje, na przykład standardowe wielkości czcionek, promień obramowania,
odstępny i pola, szerokości kontenerów, punkty zwrotne dla układu adaptacyjnego i tak dalej, to znaczy
dowolne wartości, które wykorzystuje się ponownie w różnych zasadach CSS.
Wartości rezerwowe
Funkcja var(nazwa_zmiennej, fallback) może przyjmować dwie wartości. Drugi argument to fallback –
wartość, która będzie wykorzystywana, jeżeli zmienna, przekazana przez pierwszy argument, nie jest
określona.
styles.css
.section {
border: 2px solid var(--brand-color, orange);
}
.section-title {
color: var(--brand-color, black);
}
.section-title::before {
background-color: var(--brand-color, tomato);
}
Wskazówka
Możliwość przekazania wartości domyślnie to po pierwsze możliwość, a nie obowiązkowe wymaganie przy
wykorzystaniu zmiennych CSS. Nie ma potrzeby pokazywania wszędzie fallbacku.
Zasięg widoczności
Zmienna --brand-color jest globalna, dlatego że została określona w :root, to znaczy jest dostępna w
dowolnym innym elemencie. Jeżeli wartość będzie wykorzystywana tylko w określonej części strony,
można tworzyć zmienne o lokalnym zasięgu widoczności. Będą dostępne tylko dla tego elementu i jego
potomków, w którym były zadeklarowane.
CSS
HTML
styles.css
.alert {
--alert-text-color: black;
--alert-accent-color: tomato;
}
.alert-text {
color: var(--alert-text-color);
border: 1px solid var(--alert-accent-color);
}
.alert-icon {
background-color: var(--alert-accent-color);
}
Przedefiniowanie wartości
Zmienne można przedefiniowywać lokalnie przy pomocy innych wartości. W tym celu należy zadeklarować
zmienną o takiej samej nazwie, co w przodku i wprowadzić do niej wymagane wartości.
Dekoracja tekstu
Tekst jest główną treścią stron internetowych i istnieje wiele różnych właściwości CSS, które są używane na
co dzień do nadawania mu dekoracji.
Właściwość text-decoration
Ustawia różne dekoracyjne podkreślenia i inne efekty tekstowe.
Arkusz stylów z przeglądarki ustawia znaczenie większości elementów na none, czyli wyłączone. Ale na
przykład linki mają domyślnie underline.
.link {
text-decoration: none;
}
Właściwość text-transform
Kontroluje wielkość liter w tekście, na przykład zrobić wszystkie wielkie litery. W znacznikach tekst jest
zawsze wpisywany zgodnie z regułami języka. Następnie za pomocą funkcji text-transform, zostaje
poprawiany do pożądanej formy, bo wszystkie dekoracje muszą być w CSS.
Utwórzmy znacznik menu nawigacyjnego, którego tekst elementów w układzie jest narysowany wielkimi
literami.
<ul class="site-nav">
<li><a href="" class="link">Blog</a></li>
<li><a href="" class="link">Workshops</a></li>
<li><a href="" class="link">Podcasts</a></li>
<li><a href="" class="link">About</a></li>
</ul>
.site-nav .link {
text-transform: uppercase;
}
Właściwość text-align
Steruje wyrównaniem w poziomie zawartości tekstowej elementu.
<article class="post">
<h1 class="post-title">Lorem ipsum dolor sit amet</h1>
<p class="post-text align-right">
Lorem, ipsum dolor sit amet consectetur adipisicing elit. Obcaecati commodi,
veritatis nihil alias iste odit similique sit eius optio veniam, impedit
cumque fuga facere labore quo id necessitatibus quaerat rerum.
</p>
.align-right {
text-align: right;
}
.align-justify {
text-align: justify;
}
Uwaga
Używanie wartości justify nie jest dobrym pomysłem. Chociaż tekst jest dociskany równomiernie do
lewej i prawej krawędzi bloku, jego czytelność jest znacznie ograniczona. Dzieje się tak, ponieważ odstępy
między słowami mają różną szerokość, co negatywnie wpływa na postrzeganie tekstu.
Właściwość text-indent
Ustawia wielkość wcięcia pierwszego wiersza bloku tekstu, na przykład akapitu. Nie wpływa na wszystkie
inne wiersze z wyjątkiem pierwszej.
Dowolne jednostki długości są akceptowane jako wartości, na przykład piksele (px). W przypadku
ustawienia wartości w procentach wcięcie jest obliczane w zależności od szerokości bloku.
<article class="post">
<h1 class="post-title">Lorem ipsum dolor sit amet</h1>
<p class="post-text">
Lorem, ipsum dolor sit amet consectetur adipisicing elit. Obcaecati commodi,
veritatis nihil alias iste odit similique sit eius optio veniam, impedit
cumque fuga facere labore quo id necessitatibus quaerat rerum.Obcaecati
commodi, veritatis nihil alias iste odit similique sit eius optio veniam,
impedit cumque fuga facere labore quo id necessitatibus quaerat rerum.
</p>
</article>
.post-text {
text-indent: 100px;
}
Właściwość line-height
Ustawia odstępy między wierszami (interlinia, wysokość wiersza) tekstu. Domyślnie odstępy między
wierszami zależą od rodzaju czcionki i jej rozmiaru i są określane automatycznie przez przeglądarkę.
Wartość można określić w jednostkach bezwzględnych lub względnych oraz w mnożniku. Najlepiej ustawić
wartość jako mnożnik, wtedy interlinia jest obliczana na podstawie aktualnego rozmiaru czcionki tekstu.
<p class="text">
Lorem, ipsum dolor sit amet consectetur adipisicing elit. Obcaecati commodi,
veritatis nihil alias iste odit similique sit eius optio veniam, impedit
cumque fuga facere labore quo id necessitatibus quaerat rerum.Obcaecati
commodi, veritatis nihil alias iste odit similique sit eius optio veniam,
impedit cumque fuga facere labore quo id necessitatibus quaerat rerum.
</p>
Na przykład, jeśli rozmiar czcionki w układzie to 16px a interlinia 24px, po prostu dzielimy 24 przez 16 i
uzyskamy mnożnik 1.5. Użycie mnożnika zapewnia równomierne skalowanie odstępów między wierszami
w przypadku zmiany rozmiaru tekstu.
.text {
font-size: 16px;
line-height: 1.5;
}
Właściwość letter-spacing
Określa odstępy między znakami. Domyślnie odległość między znakami jest ustalana na podstawie rodzaju i
typu czcionki, jej rozmiaru oraz ustawień systemu operacyjnego.
Czasami projektanci ustawiają niestandardową wartość odstępów między znakami i dlatego istnieje
właściwość letter-spacing.
<article class="post">
<h1 class="post-title">Lorem ipsum dolor sit amet</h1>
<p class="post-text">
Lorem, ipsum dolor sit amet consectetur adipisicing elit. Obcaecati commodi,
veritatis nihil alias iste odit similique sit eius optio veniam, impedit
cumque fuga facere labore quo id necessitatibus quaerat rerum.Obcaecati
commodi, veritatis nihil alias iste odit similique sit eius optio veniam,
impedit cumque fuga facere labore quo id necessitatibus quaerat rerum.
</p>
</article>
Dla jasności ustawmy duże wartości letter-spacing dla tekstu nagłówka i akapitu.
.post-title {
letter-spacing: 10px;
}
.post-text {
letter-spacing: 5px;
}
Właściwość word-spacing
Określa odstępy między wyrazami. Domyślnie odległość między słowami jest ustalana na podstawie typu i
rodzaju czcionki, jej rozmiaru oraz ustawień systemu operacyjnego.
Interesująco
Właściwość text-shadow
Steruje cieniem tekstu, a także ustawia jego parametry: kolor, przesunięcie i promień rozmycia.
text-shadow: <przesunięcie wzdłuż osi x>, <przesunięcie wzdłuż osi y>, <promień
rozmycia>, <kolor>
kolor - można określić w dowolnym formacie. Domyślnie kolor cienia jest taki sam jak kolor tekstu.
przesunięcie wzdłuż osi x - poziome przesunięcie cienia względem tekstu. Pozytywna wartość
określa przesunięcie cienia w prawo, ujemna - w lewo.
przesunięcie wzdłuż osi y - pionowe przesunięcie cienia względem tekstu. Pozytywna wartość
ustawia przesunięcie cienia w dół, ujemna - w górę.
promień rozmycia - im wyższa wartość, tym bardziej cień jest rozmyty i staje się jasniejszy.
Domyślnie, jeśli nie jest ustawiony, będzie 0.
Zróbmy biały tekst z ciemnym cieniem. Aby to zrobić, ustawimy przesunięcie X i Y na 2px, promień
rozmycia na 4px i czarny kolor cienia.
.title {
color: #ffffff;
text-shadow: 2px 2px 4px #000000;
}
Można dodać wiele cieni do jednego elementu, oddzielając je przecinkami. Otrzymujemy wielowarstwowe
ciasto z cieni.
Kolejność wyświetlania jest następująca - pierwszy cień na liście jest umieszczony na samej górze, ostatni -
na samym dole. Oznacza to, że im wcześniej cień zostanie określony, tym wyżej będzie się znajdował w
warstwach i będzie wizualnie nakładał się na wszystkie kolejne.
.title {
color: #ffffff;
text-shadow: 2px 2px 20px #ff0000, 5px 5px 5px #000000;
}
Właściwość white-space
Domyślnie przeglądarka ignoruje więcej niż jedną spację i podział wiersza w znacznikach HTML.
Właściwość white-space, podobnie jak znacznik <pre>, ale bardziej elastycznie, kontroluje formatowanie
spacji i dzielenie wyrazów.
<p class="text">
Lorem, ipsum dolor sit amet consectetur adipisicing elit. Obcaecati commodi,
veritatis nihil alias iste odit similique sit eius optio veniam, impedit
cumque fuga facere labore quo id necessitatibus quaerat rerum.
</p>
Domyślny rozmiar czcionki dla akapitów, który jest ustawiony w arkuszu stylów przeglądarki, to 16px.
.text {
font-size: 20px;
}
Właściwość font-weight
Kontroluje grubość (wagę) liter w czcionce. Wartość właściwości można określić jako zestaw
zarezerwowanych słów lub liczb od 100 do 900 ze skokiem 100, który określa grubość glifu od cienkiego
100 do grubego 900.
font-weight: 100 | 200 | 300 | 400 | 500 | 600 | 700 | 800 | 900
Słowa kluczowe są powiązane z liczbami, na przykład normal to 400, а bold to 700. Podczas
programowania używane są tylko liczby, ze względu na możliwość ustawienia tej samej dokładnej wagi we
wszystkich przeglądarkach.
Domyślnie grubość czcionki w akapitach, która jest ustawiona w arkuszu stylów przeglądarki, to 400, a
grubość nagłówków to 700.
.text {
font-weight: 700;
}
Właściwość font-style
Ustawia styl tekstu, na przykład można ustawić kursywę.
.title {
font-style: italic;
}
Właściwość font-family
Czcionka — to zbiór znaków typograficznych, cyfr i znaków specjalnych o określonym stylu do
wpisywania tekstu.
Czcionki są podzielone na kilka głównych grup (rodzin): czcionki szeryfowe (serif), czcionki bezszeryfowe
(sans-serif), czcionki o stałej szerokości (monospace), czcionki dekoracyjne i odręczne. MacOS, Linux i
Windows zawierają zestaw standardowych czcionek z każdej rodziny. Domyślnie, jeśli nie określono innej
czcionki, przeglądarka używa Times New Roman z rodziny szeryfowej (serif).
Właściwość font-family ustawia czcionkę tekstu elementu. Można podać dowolną liczbę czcionek
oddzielonych przecinkami, które przeglądarka, w kolejności od lewej do prawej, spróbuje znaleźć w
systemie użytkownika i zastosuje pierwszą znalezioną.
body {
font-family: 'Helvetica Neue', 'Roboto', 'Verdana', 'Tahoma', sans-serif;
}
Rodzina czcionek jest zawsze wyświetlana na końcu listy, na wypadek gdyby żadna z wymienionych
czcionek nie została znaleziona. Wtedy zastosowana zostanie standardowa czcionka z tej rodziny, która jest
w systemie użytkownika.
Pseudoelementy tekstowe
Pseudoelement ::first-letter
Steruje stylem pierwszego znaku w tekście elementu, do którego jest dodawany. Do tego pseudoelementu
można zastosować tylko właściwości czcionki, koloru, tła, a także geometrie elementu.
element::first-letter {
}
<pre>
Nudno jest tu bez ciebie. Nudno do obłędu!
Jestem jeszcze wraz z wiewiórką i pieskiem,
Piszę, czytam i palę, wciąż mam oczy niebieskie,
Lecz to wszystko tylko siłą rozpędu.
</pre>
<pre>
Wciąż jeszcze świt jest szary, zmierzch niebiesko -złoty,
Dzień przechodzi na jedną, noc na drugą stronę
I róże zakwitają bez wielkiej ochoty:
Bo tak są już przyzwyczajone.
</pre>
<pre>
A jednak świat się skończył. Czy wy rozumiecie?
Świata nie ma i ja go nie stworzę.
Czas jest równy i cichy. Lecz czekajcie... może -
Może ja jestem już na tamtym świecie?
</pre>
Dodamy style dla pseudoelementu ::first-letter znacznika pre. Zmienimy czcionkę, rozmiar i kolor
czcionki.
pre {
font-family: 'Arial', 'Helvetica', sans-serif;
color: #2a2a2a;
font-size: 16px;
}
pre::first-letter {
font-family: 'Tahoma', serif;
font-size: 32px;
color: #f44336;
}
Pseudoelement ::selection
Steruje stylem zaznaczania tekstu elementu, nadpisując standardowe wartości z arkusza stylów przeglądarki.
W projekcie można używać tylko właściwości color i background-color.
Niestandardowe czcionki
Czcionka sprawia, że witryna jest jasna i zapadająca w pamięć. Miliony witryn z jedną czcionką „Times
New Roman” prawdopodobnie byłyby zbyt nudne. Dlatego projektanci tworzą własne czcionki, a
programiści mogą ich używać w projektach.
Interesująco
Czcionki są podzielone na płatne i bezpłatne. Należy zakupić płatną licencję na czcionkę, a używanie jej bez
licencji jest obarczone naruszeniem praw autorskich. Istnieje wiele pięknych darmowych czcionek
należących do domeny publicznej.
Skopiuj i wklej następujący kod HTML do swojego pliku znaczników i otwórz stronę w przeglądarce. Tekst
renderowany niestandardową czcionką nie różni się niczym innym niż wyglądem, więc do dekoracji możesz
użyć dowolnej właściwości CSS.
<html>
<head>
<link
href="https://fonts.googleapis.com/css2?family=Tangerine:wght@700&display=swap"
rel="stylesheet"
/>
<style>
.title {
font-family: 'Tangerine', cursive;
}
</style>
</head>
<body>
<h1 class="title">Making the Web Beautiful!</h1>
</body>
</html>
Aby podłączyć niestandardową bezpłatną czcionkę z usługi Google Fonts, kliknij w link i przejdź do strony
wyników wyszukiwania.
Możesz przewijać galerię czcionek i wyszukiwać tę, która Ci się podoba, lub, jeśli znasz nazwę czcionki,
wprowadź ją w polu wyszukiwania i kliknij kartę czcionki.
Na stronie czcionki wybieramy żądaną grubość. Nie trzeba wybierać wszystkich dostępnych grubości, im
więcej opcji, tym cięższy będzie plik czcionki i tym dłużej wczytuje się Twoja strona internetowa. To samo
dotyczy liczby czcionek, zwykle ograniczają się do jednej, maksymalnie dwóch czcionek dla całej witryny.
Uwaga
Nie wszystkie czcionki obsługują pełny zakres grubości (od 100 do 900) i styl czcionki (standardowa lub
kursywa). Projektant tworzy zestaw najpopularniejszych wartości. Jeśli czcionka nie obsługuje określonej
wagi, przeglądarka wyrenderuje ją najbliższą dostępną grubością.
Na karcie Embed skopiujemy znacznik <link>, który zawiera link do arkusza stylów czcionek i dodajemy go
do nagłówka dokumentu HTML, przed pozostałymi stylami.
Teraz możesz użyć czcionki Tangerine w arkuszu stylów, określając ją we właściwości font-family.
Dyrektywa @font-face
Zobaczmy, co dokładnie połączyliśmy z dokumentem HTML w ostatniej sekcji.
/* latin */
@font-face {
font-family: 'Tangerine';
font-style: normal;
font-weight: 700;
font-display: swap;
src: local('Tangerine Bold'), local('Tangerine-Bold'),
url(https://fonts.gstatic.com/s/tangerine/v12/Iurd6Y5j_oScZZow4VO5srNZi5FNym499g.woff2)
format('woff2');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA,
U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215,
U+FEFF, U+FFFD;
}
Tak więc Google Fonts zwróciło nam najpopularniejszy plik CSS, który zawiera dyrektywę @font-face -
deklarację czcionki. Ta dyrektywa umożliwia określenie parametrów podłączonej czcionki.
Pomocne
Wszystkie symbole znane ludzkości (języki, znaki matematyczne itp.) są zebrane i opisane w standardzie o
nazwie Unicode, w którym każdy symbol ma swoją nazwę (na przykład „latin capital letter a”) oraz kod
(code point) — liczba od 0 do 10FFFF.