Naucz się KodowaćHTML&CSS
Lekcja 1
Jeśli możesz, wyobraź sobie czas przed wynalezieniem Internetu. Strony internetowe nie istniały, a książki, drukowane na papierze i mocno oprawione, były Twoim podstawowym źródłem informacji. Wymagało to sporego wysiłku i czytania, aby znaleźć informację, o którą ci chodziło.
Dzisiaj możesz otworzyć przeglądarkę internetową, przejść do wybranej wyszukiwarki i szukać dalej. Każdy kawałek wyobrażalnej informacji spoczywa na wyciągnięcie ręki. I są szanse, że ktoś gdzieś zbudował stronę internetową z myślą o twoich poszukiwaniach.
W tej książce zamierzam pokazać ci, jak budować własne strony internetowe, używając dwóch najbardziej dominujących języków komputerowych – HTML i CSS.
Zanim rozpoczniemy naszą podróż w celu nauczenia się jak budować strony internetowe przy użyciu HTML i CSS, ważne jest aby zrozumieć różnice pomiędzy tymi dwoma językami, składnię każdego z nich i pewną wspólną terminologię.
Czym jest HTML & CSS?
HTML, HyperText Markup Language, nadaje treści strukturę i znaczenie poprzez definiowanie tej treści jako, na przykład, nagłówki, akapity lub obrazy. CSS, czyli Kaskadowe Arkusze Stylów, jest językiem prezentacji stworzonym do stylizacji wyglądu treści – używając, na przykład, czcionek lub kolorów.
Te dwa języki – HTML i CSS – są od siebie niezależne i tak powinno pozostać. CSS nie powinien być pisany wewnątrz dokumentu HTML i vice versa. Zasadą jest, że HTML zawsze będzie reprezentował treść, a CSS zawsze będzie reprezentował wygląd tej treści.
Zrozumiawszy różnicę pomiędzy HTML i CSS, zagłębmy się w HTML bardziej szczegółowo.
Zrozumienie powszechnych terminów HTML
Podczas rozpoczynania pracy z HTML, prawdopodobnie spotkasz się z nowymi – i często dziwnymi – terminami. Z czasem staniesz się coraz bardziej zaznajomiony z nimi wszystkimi, ale trzy powszechne terminy HTML, od których powinieneś zacząć to elementy, znaczniki i atrybuty.
Elementy
Elementy są identyfikowane przez użycie mniejszych i większych nawiasów kątowych, < >
, otaczających nazwę elementu. Tak więc, element będzie wyglądał jak poniżej:
1 2 <a>
Tagi
Użycie mniejszego i większego nawiasu kątowego wokół elementu tworzy coś, co jest znane jako znacznik. Znaczniki najczęściej występują w parach znaczników otwierających i zamykających.
Znacznik otwierający oznacza początek elementu. Składa się on ze znaku mniej niż, po którym następuje nazwa elementu, a następnie kończy się znakiem większym niż; na przykład,
<div>
.Znacznik zamykający oznacza koniec elementu. Składa się ze znaku less-than, po którym następuje ukośnik w przód i nazwa elementu, a następnie kończy się znakiem greater-than; na przykład
</div>
.Treść, która znajduje się pomiędzy znacznikami otwierającymi i zamykającymi, jest treścią tego elementu. Na przykład link kotwicy będzie miał znacznik otwierający
<a>
i zamykający</a>
. To, co znajdzie się pomiędzy tymi dwoma znacznikami, będzie treścią linku zakotwiczenia.Zatem, znaczniki zakotwiczenia będą wyglądały trochę tak:
1 2 <a>...</a>
Atrybuty
Atrybuty są właściwościami używanymi do dostarczania dodatkowych informacji o elemencie. Do najczęściej spotykanych atrybutów należą atrybut
id
, który identyfikuje element; atrybutclass
, który klasyfikuje element; atrybutsrc
, który określa źródło dla zawartości osadzalnej; oraz atrybuthref
, który zapewnia odniesienie hiperłącza do zasobu, do którego prowadzi link.Atrybuty są definiowane wewnątrz znacznika otwierającego, po nazwie elementu. Ogólnie atrybuty zawierają nazwę i wartość. Format dla tych atrybutów składa się z nazwy atrybutu, po której następuje znak równości, a następnie cytowana wartość atrybutu. Na przykład, element
<a>
zawierający atrybuthref
wyglądałby następująco:
1 2 <a href="http://shayhowe.com/">Shay Howe</a>
Common HTML Terms Demo
Zobacz Pen Common HTML Terms by Shay Howe (@shayhowe) on CodePen.
Poprzedni kod wyświetli tekst „Shay Howe” na stronie internetowej i przeniesie użytkowników do http://shayhowe.com/ po kliknięciu na tekst „Shay Howe”. Element zakotwiczenia jest zadeklarowany za pomocą znaczników otwierających
<a>
i zamykających</a>
obejmujących tekst, a atrybut referencyjny hiperłącza i wartość są zadeklarowane za pomocąhref="http://shayhowe.com"
w znaczniku otwierającym.Gdy już wiesz, czym są elementy, znaczniki i atrybuty języka HTML, przyjrzyjmy się układaniu naszej pierwszej strony internetowej. Jeśli coś wygląda tu na nowe, nie martw się – rozszyfrujemy to w trakcie pracy.
Ustawianie struktury dokumentu HTML
Dokumenty HTML są zwykłymi dokumentami tekstowymi zapisanymi z rozszerzeniem pliku
.html
zamiast rozszerzenia pliku.txt
. Aby rozpocząć pisanie HTML, potrzebujesz najpierw edytora tekstu, którego możesz swobodnie używać. Niestety nie dotyczy to Microsoft Word lub Pages, ponieważ są to edytory tekstu bogatego. Dwa z bardziej popularnych edytorów tekstu do pisania HTML i CSS to Dreamweaver i Sublime Text. Darmowe alternatywy obejmują również Notepad++ dla Windows i TextWrangler dla Mac.Deklaracja typu dokumentu, czyli
<!DOCTYPE html>
, informuje przeglądarki internetowe, która wersja HTML jest używana i jest umieszczana na samym początku dokumentu HTML. Ponieważ będziemy używać najnowszej wersji HTML, nasza deklaracja typu dokumentu to po prostu<!DOCTYPE html>
. Po deklaracji typu dokumentu, element<html>
oznacza początek dokumentu.Wewnątrz elementu
<html>
, element<head>
identyfikuje górę dokumentu, włączając w to wszelkie metadane (towarzyszące informacje o stronie). Zawartość wewnątrz elementu<head>
nie jest wyświetlana na samej stronie internetowej. Zamiast tego może zawierać tytuł dokumentu (który jest wyświetlany na pasku tytułowym w oknie przeglądarki), odnośniki do dowolnych plików zewnętrznych lub inne korzystne metadane.Wszystkie widoczne treści w obrębie strony internetowej będą mieściły się w elemencie
<body>
. Struktura typowego dokumentu HTML wygląda następująco:HTML Document Structure Demo
See the Pen HTML Document Structure by Shay Howe (@shayhowe) on CodePen.
Poprzedni kod pokazuje dokument zaczynający się od deklaracji typu dokumentu,
<!DOCTYPE html>
, po którym następuje bezpośrednio element<html>
. Wewnątrz elementu<html>
znajdują się elementy<head>
oraz<body>
. Element<head>
zawiera kodowanie znaków strony poprzez znacznik<meta charset="utf-8">
oraz tytuł dokumentu poprzez element<title>
. Element<body>
zawiera nagłówek poprzez element<h1>
oraz akapit poprzez element<p>
. Ponieważ zarówno nagłówek, jak i akapit są zagnieżdżone w elemencie<body>
, są one widoczne na stronie internetowej.Gdy element jest umieszczony wewnątrz innego elementu, znanego również jako zagnieżdżony, dobrym pomysłem jest wcięcie tego elementu, aby utrzymać strukturę dokumentu dobrze zorganizowaną i czytelną. W poprzednim kodzie, oba elementy
<head>
i<body>
zostały zagnieżdżone – i wcięte – wewnątrz elementu<html>
. Wzorzec wcięć dla elementów jest kontynuowany, gdy nowe elementy są dodawane wewnątrz elementów<head>
i<body>
.Elementy samozamykające
W poprzednim przykładzie, element
<meta>
miał tylko jeden znacznik i nie zawierał znacznika zamykającego. Nie obawiaj się, było to zamierzone. Nie wszystkie elementy składają się z tagów otwierających i zamykających. Niektóre elementy po prostu otrzymują swoją zawartość lub zachowanie z atrybutów wewnątrz pojedynczego znacznika. Element<meta>
jest jednym z takich elementów. Zawartość poprzedniego elementu<meta>
jest przypisywana za pomocą atrybutu charset i wartości. Inne często spotykane elementy samozamykające się to
<br>
<embed>
<hr>
<img>
<input>
<link>
<meta>
<param>
<source>
<wbr>
Przedstawiona tutaj struktura, wykorzystująca typ dokumentu
<!DOCTYPE html>
oraz elementy<html>
<head>
i<body>
, jest dość powszechna. Będziemy chcieli zachować tę strukturę dokumentu pod ręką, ponieważ będziemy jej często używać podczas tworzenia nowych dokumentów HTML.Weryfikacja kodu
Niezależnie od tego, jak ostrożni jesteśmy podczas pisania naszego kodu, nieuchronnie popełnimy błędy. Na szczęście, podczas pisania HTML i CSS mamy do dyspozycji walidatory, które sprawdzają naszą pracę. W3C zbudowało zarówno walidatory HTML jak i CSS, które skanują kod w poszukiwaniu błędów. Walidacja naszego kodu nie tylko pomaga w jego poprawnym renderowaniu we wszystkich przeglądarkach, ale także pomaga nam nauczyć się najlepszych praktyk pisania kodu.
W praktyce
Jako projektanci stron internetowych i front-end developerzy, mamy luksus uczestniczenia w wielu wspaniałych konferencjach poświęconych naszemu rzemiosłu. Zamierzamy stworzyć własną konferencję, Styles Conference, i zbudować dla niej stronę internetową w kolejnych lekcjach. Zaczynamy!
Zmieńmy trochę biegi, odchodząc od HTML, i przyjrzyjmy się CSS. Pamiętaj, HTML zdefiniuje treść i strukturę naszych stron internetowych, podczas gdy CSS zdefiniuje styl wizualny i wygląd naszych stron internetowych.
Zrozumienie wspólnych terminów CSS
Oprócz terminów HTML, istnieje kilka wspólnych terminów CSS z którymi będziesz chciał się zapoznać. Terminy te obejmują selektory, właściwości i wartości. Tak jak w przypadku terminologii HTML, im więcej pracujesz z CSS, tym bardziej te terminy będą stawały się drugą naturą.
Selektory
Jak elementy są dodawane do strony internetowej, mogą być stylizowane przy użyciu CSS. Selektor wyznacza dokładnie, który element lub elementy w naszym HTML-u należy obrać za cel i zastosować do nich style (takie jak kolor, rozmiar i położenie). Selektory mogą zawierać kombinację różnych kwalifikatorów aby wybrać unikalne elementy, wszystko zależy od tego jak bardzo chcemy być szczegółowi. Na przykład, możemy chcieć wybrać każdy akapit na stronie, lub możemy chcieć wybrać tylko jeden konkretny akapit na stronie.
Selektory zazwyczaj kierują się na wartość atrybutu, jak na przykład
id
lubclass
, lub kierują się na typ elementu, jak na przykład<h1>
lub<p>
.W CSS, po selektorach następują nawiasy klamrowe,
{}
, które obejmują style, które mają być zastosowane do wybranego elementu. Selektor tutaj jest skierowany do wszystkich elementów<p>
.
1 2 p { ... }
Właściwości
Po wybraniu elementu, właściwość określa style, które zostaną zastosowane do tego elementu. Nazwy właściwości pojawiają się po selektorze, wewnątrz nawiasów klamrowych,
{}
, i bezpośrednio przed dwukropkiem,:
. Istnieje wiele właściwości, z których możemy korzystać, takich jakbackground
color
font-size
height
iwidth
, a nowe właściwości są często dodawane. W poniższym kodzie definiujemy właściwościcolor
ifont-size
, które mają być stosowane do wszystkich elementów<p>
.
1 2 3 4 5 p { color: ...; font-size: ...; }
Wartości
Do tej pory wybraliśmy element za pomocą selektora i określiliśmy jaki styl chcemy zastosować za pomocą właściwości. Teraz możemy określić zachowanie tej właściwości za pomocą wartości. Wartości mogą być identyfikowane jako tekst pomiędzy dwukropkiem,
:
, a średnikiem,;
. Tutaj zaznaczamy wszystkie elementy<p>
i ustawiamy wartość właściwościcolor
naorange
oraz wartość właściwościfont-size
na16
pikseli.
1 2 3 4 5 p { color: orange; font-size: 16px; }
Przeglądając, w CSS nasz zestaw reguł zaczyna się od selektora, po którym następują nawiasy klamrowe. Wewnątrz tych nawiasów klamrowych znajdują się deklaracje składające się z par właściwości i wartości. Każda deklaracja zaczyna się od właściwości, po której następuje dwukropek, wartość właściwości, a na końcu średnik.
Powszechną praktyką jest wcięcie par właściwości i wartości wewnątrz nawiasów klamrowych. Podobnie jak w przypadku HTML, wcięcia te pomagają utrzymać nasz kod zorganizowany i czytelny.
Znajomość kilku popularnych terminów i ogólnej składni CSS to świetny początek, ale mamy jeszcze kilka rzeczy do nauczenia się zanim wskoczymy zbyt głęboko. Konkretnie, musimy przyjrzeć się bliżej jak działają selektory w CSS.
Praca z selektorami
Selektory, jak wcześniej wspomniano, wskazują które elementy HTML są stylizowane. Ważne jest by w pełni zrozumieć jak używać selektorów i jak można je wykorzystać. Pierwszym krokiem jest zapoznanie się z różnymi typami selektorów. Zaczniemy od najbardziej powszechnych selektorów: selektorów typu, klasy i ID.
Selektory typu
Selektory typu kierują elementy do ich typu. Na przykład, jeśli chcemy kierować na wszystkie elementy podziału,
<div>
, użyjemy selektora typudiv
. Poniższy kod pokazuje selektor typu dla elementów podziału, jak również odpowiadający mu HTML, który jest wybierany.CSS
1 2 div { ... }
HTML
1 2 3 <div>...</div> <div>...</div>
Selektory klas
Selektory klas pozwalają nam wybrać element na podstawie wartości atrybutu elementu
class
. Selektory klas są nieco bardziej specyficzne niż selektory typów, ponieważ wybierają one konkretną grupę elementów, a nie wszystkie elementy jednego typu.Kolektory klas pozwalają nam na zastosowanie tych samych stylów do różnych elementów jednocześnie poprzez użycie tej samej wartości atrybutu
class
w wielu elementach.Wewnątrz CSS, klasy są oznaczane przez wiodącą kropkę,
.
, po której następuje wartość atrybutuclass
. W tym przypadku selektor klasy wybierze dowolny element zawierającyclass
wartość atrybutuawesome
, w tym zarówno elementy podziału, jak i akapity.CSS
1 2 .awesome { ... }
HTML
1 2 3 <div class="awesome">...</div> <p class="awesome">...</p>
SelektoryID
SelektoryID są jeszcze bardziej precyzyjne niż selektory klas, ponieważ celują tylko w jeden unikalny element na raz. Tak jak selektory klas używają wartości atrybutu elementu
class
jako selektora, selektory ID używają wartości atrybutu elementuid
jako selektora.Niezależnie od typu elementu, na którym się pojawiają, wartości atrybutu
id
mogą być użyte tylko raz na stronie. Jeśli są używane, powinny być zarezerwowane dla znaczących elementów.W CSS, selektory ID są oznaczane przez wiodący znak hash,
#
, po którym następuje wartość atrybutuid
. W tym przypadku selektor ID wybierze tylko element zawierającyid
wartość atrybutushayhowe
.CSS
1 2 #shayhowe { ... }
HTML
1 2 <div>...</div>
Dodatkowe selektory
Selektory są niezwykle potężne, a selektory przedstawione tutaj są najczęściej spotykanymi selektorami z jakimi się zetkniemy. Te selektory to również tylko początek. Istnieje wiele bardziej zaawansowanych selektorów i są one łatwo dostępne. Kiedy poczujesz się komfortowo z tymi selektorami, nie bój się spojrzeć na niektóre z bardziej zaawansowanych selektorów.
W porządku, wszystko zaczyna się układać w całość. Dodajemy elementy do strony wewnątrz naszego HTML, a następnie możemy wybrać te elementy i zastosować do nich style używając CSS. Teraz połączmy kropki pomiędzy naszym HTML i CSS, i sprawmy by te dwa języki pracowały razem.
Odniesienie CSS
Aby nasz CSS mógł rozmawiać z naszym HTML, musimy odwołać się do naszego pliku CSS w naszym HTML. Najlepszą praktyką odwoływania się do naszego CSS jest zawarcie wszystkich naszych stylów w pojedynczym zewnętrznym arkuszu stylów, do którego odwołujemy się z poziomu elementu
<head>
naszego dokumentu HTML. Użycie pojedynczego zewnętrznego arkusza stylów pozwala nam na użycie tych samych stylów na całej stronie i szybkie wprowadzanie zmian w całym serwisie.Inne opcje dodawania CSS
Inne opcje odwołań do CSS to użycie stylów wewnętrznych i inline. Możesz natknąć się na te opcje w naturze, ale są one generalnie odrzucane, jako że czynią one aktualizację stron kłopotliwą i nieporęczną.
Aby stworzyć nasz zewnętrzny arkusz stylów CSS, będziemy chcieli użyć naszego edytora tekstu ponownie do stworzenia nowego pliku tekstowego z rozszerzeniem
.css
. Nasz plik CSS powinien być zapisany w tym samym folderze, lub podfolderze, w którym znajduje się nasz plik HTML.Wewnątrz elementu
<head>
dokumentu HTML, element<link>
jest używany do określenia relacji pomiędzy plikiem HTML a plikiem CSS. Ponieważ łączymy się z CSS, używamy atrybuturel
o wartościstylesheet
, aby określić ich relację. Ponadto, atrybuthref
(lub odwołanie do hiperłącza) jest używany do określenia lokalizacji, lub ścieżki, pliku CSS.Rozważmy następujący przykład dokumentu HTML
<head>
element, który odwołuje się do pojedynczego zewnętrznego arkusza stylów.
1 2 3 4 <head> <link rel="stylesheet" href="main.css"> </head>
Aby CSS renderował się poprawnie, ścieżka wartości atrybutu
href
musi być bezpośrednio skorelowana z miejscem, w którym zapisany jest nasz plik CSS. W poprzednim przykładzie, plikmain.css
jest przechowywany w tej samej lokalizacji co plik HTML, znany również jako katalog główny.Jeśli nasz plik CSS znajduje się w podkatalogu lub podfolderze, wartość atrybutu
href
musi być odpowiednio skorelowana z tą ścieżką. Na przykład, gdyby nasz plikmain.css
był przechowywany w podkatalogu o nazwiestylesheets
, wartość atrybutuhref
byłabystylesheets/main.css
, używając ukośnika w przód, aby wskazać przejście do podkatalogu.W tym momencie nasze strony zaczynają ożywać, powoli, ale pewnie. Nie zagłębialiśmy się zbytnio w CSS, ale być może zauważyłeś, że niektóre elementy mają domyślne style, których nie zadeklarowaliśmy w naszym CSS. Oznacza to, że przeglądarka narzuca swoje własne preferowane style CSS dla tych elementów. Na szczęście możemy nadpisać te style dość łatwo, co właśnie zrobimy używając resetowania CSS.
Używanie resetowania CSS
Każda przeglądarka ma swoje własne domyślne style dla różnych elementów. Sposób, w jaki Google Chrome renderuje nagłówki, akapity, listy i tak dalej może się różnić od tego, jak robi to Internet Explorer. Aby zapewnić kompatybilność między przeglądarkami, powszechnie stosuje się resetowanie CSS.
Resetowanie CSS bierze każdy wspólny element HTML z predefiniowanym stylem i zapewnia jeden zunifikowany styl dla wszystkich przeglądarek. Te resety zazwyczaj obejmują usunięcie wszelkich rozmiarów, marginesów, paddingów lub dodatkowych stylów i stonowanie tych wartości. Ponieważ CSS kaskaduje od góry do dołu – więcej na ten temat wkrótce – nasz reset musi być na samym szczycie naszego arkusza stylów. Zapewnia to, że te style są odczytywane jako pierwsze i że wszystkie przeglądarki internetowe pracują na wspólnym poziomie bazowym.
Istnieje kilka różnych sposobów resetowania, z których każdy ma swoje własne zalety. Jednym z najbardziej popularnych jest reset Erica Meyera, który został przystosowany do uwzględnienia stylów dla nowych elementów HTML5.
Jeśli czujesz się nieco bardziej odważny, istnieje również Normalize.css, stworzony przez Nicolasa Gallaghera. Normalize.css skupia się nie na użyciu twardego resetu dla wszystkich wspólnych elementów, ale zamiast tego na ustawieniu wspólnych stylów dla tych elementów. Wymaga to lepszego zrozumienia CSS, jak również świadomości tego, co chciałbyś, aby twoje style były.
Kompatybilność między przeglądarkami & Testowanie
Jak wcześniej wspomniano, różne przeglądarki renderują elementy w różny sposób. Ważne jest, aby rozpoznać wartość w kompatybilności między przeglądarkami i testowaniu. Strony nie muszą wyglądać dokładnie tak samo w każdej przeglądarce, ale powinny być do siebie zbliżone. To, które przeglądarki chcesz wspierać i w jakim stopniu, jest decyzją, którą musisz podjąć w oparciu o to, co jest najlepsze dla twojej strony.
W sumie jest kilka rzeczy, na które trzeba uważać przy pisaniu CSS. Dobrą wiadomością jest to, że wszystko jest możliwe, i z odrobiną cierpliwości wszystko to rozgryziemy.
W praktyce
Powracając do miejsca, w którym ostatnio skończyliśmy na naszej stronie konferencyjnej, zobaczmy czy możemy dodać trochę CSS.
Czas sprawdzić naszą pracę i zobaczyć czy nasz HTML i CSS się dogadują. Teraz otwarcie naszego pliku
index.html
(lub odświeżenie strony, jeśli jest już otwarta) w przeglądarce internetowej powinno pokazać nieco inne wyniki niż poprzednio.Demo & Kod źródłowy
Poniżej możesz obejrzeć stronę Styles Conference w jej obecnym stanie, jak również pobrać kod źródłowy strony w jej obecnym stanie.
Zobacz stronę Konferencji Stylów lub pobierz kod źródłowy (plik Zip)
Podsumowanie
Do tej pory było dobrze! Zrobiliśmy kilka dużych kroków w tej lekcji.
Pomyśl tylko, że teraz znasz podstawy HTML i CSS. W miarę jak będziemy kontynuować i spędzisz więcej czasu na pisaniu HTML i CSS, staniesz się znacznie bardziej komfortowy w posługiwaniu się tymi dwoma językami.
Aby podsumować, do tej pory omówiliśmy następujące zagadnienia:
- Różnica między HTML i CSS
- Zapoznanie się z elementami, znacznikami i atrybutami HTML
- Ustalenie struktury swojej pierwszej strony internetowej
- Zapoznanie się z selektorami CSS, właściwościami i wartościami
- Praca z selektorami CSS
- Odwoływanie się do CSS w twoim HTML
- Wartość resetowania CSS
Przyjrzyjrzyjmy się teraz bliżej HTML i nauczmy się trochę o semantyce.