HTML CSS
HTML CSS
Ćwiczenia
HTML i CSS
HTML
• Hipertekstowy język znaczników
• Skrót z angielskiego HyperText Markup Language
• Podstawowy język stron internetowych
• Opisuje strukturę informacji zawartej w dokumencie: nagłówek, stopka, akapity, artykuł, lista, tabela
itd.
• Pozwala integrować w jednym dokumencie test, grafikę, wideo, muzykę
• Oferuje prostą nawigację między dokumentami
CSS
• Kaskadowe arkusze stylów
• Skrót z angielskiego Cascading Style Sheets
• Język opisujący wizualną formę prezentacji dokumentów HTML
• Pozwala odseparować wygląd dokumentu od jego struktury
• Arkusz stylów CSS to lista reguł określających wygląd elementów.
Zalecenia organizacji W3C
h010.html
Historia HTML
• 1990: Tim Berners-Lee (fizyk pracujący dla CERN) tworzy specyfikację HTML, pierwszy serwer www oraz przeglądarkę.
• 1991: Berners-Lee publikuje dokument HTML tags
• 1993: IETF publikuje specyfikację HTML jako szkic (draft)
• 1995: IETF towrzy HTML 2.0 i publikuje go w 1996 jako RFC 1867 + kilka późniejszych RFC
• 1995: powstaje propozycja HTML 3.0 ale prace nad nią zostają przerwane
• 1997: HTML 3.2 zostaje opublikowany jako rekomendacja W3C
• 1997: HTML 4.0 zostaje opublikowany jako rekomendacja W3C
• 1999: HTML 4.01 zostaje opublikowany jako rekomendacja W3C
• rozwój HTML miał na tym się zakończyć. Przyszłością miał być XHTML
• 2000: HTML ISO/IEC 15445:2000 (na bazie HTML 4.01 strict)
• 2000: XHTML 1.0 opublikowany jako rekomendacja W3C
• 2001: XHTML 1.1 opublikowany jako rekomendacja W3C
• 2004: WHATWG rozpoczyna prace nad ulepszeniem HTML
• 2007: W3C tworzy grupę pracującą nad następcą HTML 4.01
• 2008: pierwszy roboczy szkic HTML 5 (working draft W3C)
• 2009: prace nad XHTML 2.0 zostają wstrzymane
• 2014: HTML 5 opublikowany jako rekomendacja W3C
• 2016: HTML 5.1 opublikowany jako rekomendacja W3C
• 2017: HTML 5.2 opublikowany jako rekomendacja W3C
• 2018: HTML 5.3 opublikowany jako wersja robocza
• 2019: W3C i WHATWG uzgadniają że specyfikacja HTML będzie zarządzana przez WHATWG jako „living document”
Tim Berners Lee
• Nagłówek protokołu http (pole content-type) określa czy dokument jest HTML czy
dokumentem XML (XHTML)
• Nagłówek ustawia się w konfiguracji serwera www
• typ dokumentu = application/xhtml+xml - dokument jest przetwarzany przez
przeglądarkę jako XML (XHTML): można korzystać z dobrodziejstw XML
• typ dokumentu = text/html - dokument jest przetwarzany jako HTML i funkcje
XML nie są dostępne
• Dopiero Internet Explorer 9 zaczął obsługiwać typ application/xhtml+xml
• Wiele stron XHTML w Internecie jest serwowanych jako text/html
czyli są przetwarzane przez przeglądarki jako … HTML z błędami.
XHTML w praktyce: IE
• Współczesne przeglądarki znają typ application/xhtml+xml, bardzo stare (np. Internet Explorer 8) go
nie znają.
• W poniższym przykładzie dokument XHTML jest serwowany jako XHMTL (przesyłany jako
application/xhtml+xml protokołem http). Firefox wyświetla dokument, IE 8 traktuje dokument jako
nieznany typ i proponuje zapisanie go na dysku.
XHTML w praktyce na przykładzie Firefox
• Niedomknięty tag </p> - różnica interpretacji w
Firefox przy Content-Type: text/html i
application/xhtml+xml
• Poniższy dokument XHTML jest błędy. Element <p>
nie został zamknięty. Brakuje </p>
• Jeśli serwer przesyła go do Firefox jako HTML
(text/html), dokument jest wyświetlany. Jeśli serwer
przesyła go do Firefox jako XHTML
(application/xhtml+xml) przeglądarka wyświetla błąd.
• Przeglądarka opiera decyzję o tym czy przetwarzać
dokument jako XHTML, czy jako HTML w oparciu o
dane z protokołu HTTP, a nie z nagłówka HTML!
Aktualne rekomendacje wersji HTML
HTML: https://html.spec.whatwg.org/
CSS: https://www.w3.org/standards/techs/css#w3c_all
CSS
Wersje
• CSS 1 - rekomendacja w 1996
• CSS 2 - rekomendacja w 1998
• CSS 2.1 – rekomendacja od 2011
• CSS 3 / 4 – prace w toku
• Rozbite na kilkadziesiąt niezależnych modułów
• Status poszczególnych modułów można sprawdzić tutaj: https://www.w3.org/Style/CSS/
• Używaj wybiórczo – wiele elementów niekoniecznie jest wspieranych przez przeglądarki.
CSS – sytuacja
• Przeglądarki różnie interpretują CSS, czasem są to niezamierzone błędy (bugi), czasem celowe
działanie
• Czasem różne wersje tej samej przeglądarki mogą dawać różny efekt dla tego samego kodu.
• Konieczne jest testowanie strony w kilku przeglądarkach
• Niekiedy koniecznie tworzenie kilku wersji arkusza CSS (dla różnych przeglądarek)
Wsparcie przeglądarek dla poszczególnych elementów HTML i CSS
• http://caniuse.com/
• http://html5test.com
• http://www.w3schools.com/cssref/css3_browsersupport.asp
Sprawdzanie poprawności dokumentów
https://www.w3.org/
https://developer.mozilla.org/pl/docs/Web/HTML
Znaki w dokumentach HTML
<!DOCTYPE html>
<html lang="pl">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Strona internetowa</title>
</head>
<body>
<p>Przykładowy akapit</p>
</body>
</html>
HTML – wersje (pierwsza linia dokumentu)
• znaki <, >, ”, & są częścią języka HTML - przeglądarki mogą błędnie zinterpretować
fragment treści dokumentu jako kod HTML
• Zalecane jest używanie < > " i & w treści dokumentu w miejscach
gdzie ma wyświetlić się <, >, ", &
• W poniższym przykładzie użyto ostrych nawiasów w miejscu gdzie powinny się one
wyświetlić jako treść – przeglądarka zinterpretowała je jako rozpoczęcie elementu
HTML.
Używanie w treści znaków <, >, ", & - przykład
<!doctype html> <html lang="en">
<head>
<meta charset="UTF-8" /> <title>Moja strona</title>
</head>
<body>
<p>
W html akapit tekstu otwiera się tagiem <p>
a zamyka tagiem </p>
</p>
</body>
</html>
<!DOCTYPE html>
<html lang="pl">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Strona internetowa</title>
</head>
<body>
<h1 id="naglowek">Oto nagłówek</h1>
</body>
</html>
Atrybuty uniwersalne (występujące dla większości elementów)
<!DOCTYPE html>
<html lang="pl">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Strona internetowa</title>
</head>
<body>
<!-- to miejsce na treść dokumentu! Ten komentarz nie jest widoczny
w przeglądarce. -->
</body>
</html>
HTML – <div>, <span>, nagłówki
<address> - element (liniowy) opisuje dane kontaktowe. Atrybuty: id, class, lang, title,
style, zdarzenia
<!DOCTYPE html>
<html lang="pl">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Przykładowa witryna</title>
</head>
<body>
<address>
Wyższa Szkoła Bankowa w Poznaniu <br>
ul. Powstańców Wielkopolskich 5 <br>
61-895 Poznań <br>
tel. 61 655 33 33 <br>
fax 61 655 32 27 <br>
</address>
</body>
</html>
Tekst dwukierunkowy
<!DOCTYPE html>
<html lang="pl">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Przykładowa witryna</title>
</head>
<body>
<p>
H<sub>2</sub>O <br>
E = mc<sup>2</sup>
</p>
</body>
</html>
Tekst preformatowany
• - zapis wymusza „twardą” spację (zakaz łamania linii) – jest to również
sposób na wymuszenie wyświetlenia więcej niż 1 spacji jedna po drugiej.
• Myślniki – 2 rodzaje
• Zwykły myślnik wprowadzany jako znak z klawiatury traktowany jest jak każdy
inny znak
• „Miękki” myślnik – wyświetlany jako „–” ale wprowadzany jako ­ , - lub
- - pozwala na łamanie linii (przeniesienie tekstu do następnej linii)
• <pre> - el. blokowy dla sformatowanego tekstu – przeglądarka nie łączy ze sobą
kolejnych „białych” znaków (np. spacje) i stara wyświetlić się tekst, w takiej formie w
jakiej jest on wprowadzony. (Atrybuty: id, class, lang, title, style, zdarzenia)
Przykład: tekst preformatowany
<body>
<p>W tej linii jest kilka spacji jedna po drugiej. Co na to przeglądarka?</p>
<p>W tej linii jest kilka twardych spacji nbsp jedna po
drugiej. Co na to przeglądarka?</p>
<p>W tej linii używam długiej nazwy domeny. Ponieważ to jeden długi wyraz, przeglądarka nie
może go złamać: www.bardzodlugaaletonaprawdebardzodluganazwadomeny.com.pl. </p>
<p>W tej linii używam nazwy domeny z "miękkimi" myślnikami, które pozwalają na łamanie
tekstu we wskazanym miejscu jeśli zajdzie taka
potrzeba:www.bardzo­dluga­ale­to­naprawde­bardzo­dluga­nazwa­d
omeny.com.pl.
</p>
<pre>
W tym tekście jest kilka spacji jedna po drugiej. Przed tym tekstem.
Jest też kilka znaków
przejścia
do nowej
linii
czyli
enterów.
Co na to przeglądarka?
</pre>
</body>
</html>
070 – Cytaty i tekst formatowany: efekt
070 – Cytaty i tekst formatowany
• Ramki cieszyły się w latach 90tych i na początku XXI wieku dużą popularnością ze względu
na wygodę tworzenia menu
• Dają możliwość wyświetlania kilku niezależnych dokumentów jako 1 strony
• Obecnie nie są stosowane, ponieważ
• Nie widać adresów podstron (w pasku przeglądarki)
• kłopoty z dodawaniem podstron do ulubionych
• Kłopoty z przekazaniem adresu podstrony innym użytkownikom
• Kłopoty z drukowaniem
• Kłopoty z wyszukiwarkami
• Przy odświeżeniu strony następuje powrót do strony głównej
• Kłopoty z prezentacją w przeglądarkach tekstowych i czytnikach dla niewidomych
• Jedyny współcześnie wykorzystywany element ramek to <iframe> - jest częścią specyfikacji
HTML 5. Pozwala na wyświetlenie w ramce zewnętrznej strony
• atrybut sandbox, który pozwala dodać restrykcje poprawiające bepieczeństwo: allow-
forms, allow-popups, allow-same-origin, allow-scripts, and allow-top-navigation
• atrybut seamless pozwala regulować czy czy zawartość w ramce ma wyglądać na
zintegrowaną ze stroną ,czy ma się wyróżniać
Dzielenie treści na sekcje
<body> - element, w którym zawarta jest treść dokumentu. Występuje tylko jeden w
dokumencie.
<article> - element zawierający kompletną, samodzielną treść. Na przykład artykuł, wpis
na blogu, post w mediach społecznościowych czy na forum, raport itp.
<section> – służy do grupowania treści. Przykładami sekcji mogą być rozdziały eBooka,
Strona główna podzielona na sekcje wstępu, aktualności i danych kontaktowych itp.
<nav> – sekcja zawierająca nawigację (linki) prowadzące do treści zewnętrznych lub
wewnątrz witryny.
<aside> – sekcja powiązana z główną treścią, ale stanowiąca odrębną treść. Często będzie
reprezentowana graficznie w formie bocznych pasków takich jak „podobne artykuły” itp.
<h1>, <h2>, <h3>, <h4>, <h5>, <h6> - Elementy służące do wyróżniania nagłówków
sekcji. <h1> to najwyższy poziom (ważność) nagłówka, <h6> to najniższy poziom
nagłówka.
<header> - Element służący do oznaczania treści wstępnej w sekcjach
<footer> - Element służący do oznaczania treści końcowej w sekcjach (stopka)
Przykład użycia sekcji
<article>
<header>
<h2>Jastrząb zwyczajny</h2>
<p><time datetime="2020-12-31">Opublikowano 3 dni temu</time></p>
</header>
<p> W dzisiejszym wpisie na blogu chciałbym przybliżyć ...</p>
<section>
<h3>Komentarze</h3>
<ol>
<li id="k1">
<p>Autor: Marian Kowalski</p>
<p>Miałem szczęście. Widziałem jastrzębia bodajże ...</p>
</li>
<li id="c2">
<p>Autor: Cecylia Dudek</p>
<p>Ja chyba jeszcze nigdy nie widziałam jastrzębia. Czy ... </p>
</li>
</ol>
</section>
<aside>
<h4>Podobne wpisny na temat ptaków drapieżnych</h4>
<nav> <a href="orlik.html">Orlik krzykliwy</a>,<br> </nav>
</aside>
<footer> <p>2 123 wyświetleń</p> </footer>
</article>
090 – Artykuły: efekt
090 – Artykuły
<!DOCTYPE html>
<html lang="pl">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Przykładowa witryna</title>
</head>
<body>
<p>
<a href="http://www.onet.pl">Link do Onetu</a>
</p>
</body>
</html>
Względne adresy
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>Strona o gruszkach</title>
</head>
<body>
<p>Wszelkie informacje o gruszkach</p>
<p>Szukasz informacji o innych roślinach?
Zajrzyj na strony o:
<a href="../jablka/index.html">jabłkach</a>,
<a href="../../warzywa/por/index.html">porach</a> lub
<a href="../../warzywa/seler/index.html">selerach</a>
</p>
</body>
</html>
130 – Linki
• Atrybut target został stworzony z myślą o ramkach, ale często jest stosowany do
wyświetlenia łącz w nowym oknie.
• Wyświetlanie linków w nowym oknie jest uznawane za złą praktykę (jest denerwujące
dla użytkowników)
• Zastosowanie w elementach: <a>, <area>, <base>, <form>, <link>
• Następujące nazwy celów (atrybut target) są zarezerwowane
• _blank – przeglądarka ma otworzyć łącze w nowym nienazwanym oknie
• _self – przeglądarka ma otworzyć link w bieżącym oknie
• _parent – przeglądarka ma otworzyć link w nadrzędnym oknie, jeśli takiego nie
ma to jest równoznaczne z _self
• _top – przeglądarka ma otworzyć link w głównym oknie (pierwszym) – jeśli
takiego nie ma, równoważne _self
150 – Target
<!doctype html>
<html lang="pl">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-
scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Przykładowa witryna - wtyczki</title>
</head>
<body>
<h1>Grusza pospolita</h1>
<img src="grafika/grusza-pospolita.jpg" alt="Zdjęcie gruszy
pospolitej">
</body>
</html>
170 – Grafika
• Ekran telefonu jest wielokrotnie mniejszy niż ekran laptopa czy komputera.
• Dopasowanie wymiarów grafiki do ekranu laptopa czy komputera, spowoduje,
że na urządzenie mobilne ściągnięty zostanie duży plik, który trzeba
przeskalować w dół, aby go poprawnie wyświetlić.
• Dopasowanie wymiaru grafiki do rozmiaru telefonu spowoduje, że dla ekranu
komputera trzeba będzie je przeskalować w górę, co negatywnie odbije się na
jakości obrazu (efekt widocznych pikseli itp.).
Wyzwania związane z wyświetlaniem grafiki – rozdzielczość
• Rozdzielczość ekranu oznaczamy w pikselach, czyli punktach z których składa się ekran. Na
przykład ekran o rozdzielczości 1024 na 768 pikseli, składa się z pikseli ułożonych w 1024
kolumnach i 768 wierszach.
• Rozróżniamy dwa rodzaje pikseli:
• piksele fizyczne: ilość fizycznych punktów świetlnych, z których składa się ekran.
• piksele CSS: ilość punktów ekranu rozróżnianych przez przeglądarkę.
• Te 2 wartości mogą się różnić, ponieważ producenci w droższych urządzeniach decydują się
na większą niż standardowa gęstość pikseli fizycznych, aby poprawić jakość obrazu. Poniższy
przykład przedstawia w powiększeniu jakość krawędzi jaką można uzyskać na zwykłym
ekranie oraz na ekranach o podwójnej lub potrójnej gęstości pikseli.
Wyzwania związane z wyświetlaniem grafiki – współczynnik skalowania
• Stosunek liczby pikseli fizycznych do pikseli CSS określamy jako współczynnik skalowania.
• Współczynnik skalowania zwykle podawany jest w zaokrągleniu. Jeśli urządzenie ma współczynnik
skalowania 1, oznacza to, że aby wyświetlić w odpowiedniej jakości obraz o rozmiarze 100px na 100px,
wystarczy go dostarczyć w rozmiarze 100px na 100px.
• Jeśli chcemy wyświetlić taką grafikę na wyświetlaczu o wyższym poziomie gęstości pikseli, np. o
współczynniku skalowania 2, to obraz powinien mieć wymiary 200px na 200px.
• Jeśli będzie dostarczony w mniejszym rozmiarze, to przeglądarka lub system operacyjny dokona jego
skalowania do rozmiaru 200px na 200px, co spowoduje spadek jakości. Poniższa tabela przedstawia
niektóre telefony firmy Apple – ich rozmiar, liczbę pikseli fizycznych, liczbę pikseli CSS oraz
współczynnik skalowania. Model Przekątna Rozdzielczość Rozdzielczość Gęstość Wsp.
telefonu ekranu fizyczna (px) CSS (px) pikseli skalowania
(cale) (ppi)
iPhone 3 3,5 320x480 320x480 165 1
Właściwości własnego urządzenia możesz
iPhone 4 3,5 640x960 320x480 326 2
sprawdzić np. na stronie http://mydevice.io
iPhone 5 4 640x1136 320x568 326 2
<!doctype html>
<html lang="pl">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Przykładowa witryna - wtyczki</title>
</head>
<body>
<embed src="plik.swf"> <!-- dołączenie animacji flash -->
<object type="application/x-java-applet"> <!-- dołączenie apletu java-->
<param name="code" value="MyJavaClass">
<p>Nie posiadasz lub nie włączyłeś wtyczki obsługującej
aplety Java
</p>
</object>
</body>
</html>
Wideo i audio
• Element <label> tworzy etykietę dla danego pola w formularzu. Powiązanie z polem tworzy
się za pomocą atrybutu for, lub zamykając pole wewnątrz elementu <label>. Ważniejsze
atrybuty:
• Atrybuty globalne, zdarzenia,
• for - tworzy powiązanie etykiety, z konkretnym polem formularza. Jako wartość podaje
się identyfikator (ustawiony przez atrybut id) pola, którego ma dotyczyć etykieta.
• Atrybut placeholder elementu <input> umożliwia stworzenie wskazówki dla użytkownika,
w formie słowa lub zdania. Wskazówka jest zwykle wyróżniania kolorem szarym i znika w
momencie, gdy użytkownik rozpocznie wprowadzanie do pola danych. Atrybut ten jest
uzupełnieniem elementu <label> i nie powinien go zastępować.
Opisywanie pól - przykład
<!doctype html> <html lang="pl"> <head> <meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<datalist> - element pozwala stworzyć listę sugerowanych wartości, które mogą być
podpowiadane użytkownikowi w czasie wypełniania pola powiązanego z danym
elementem <datalist>. Sugestie zamieszcza się w elementach <option> wewnątrz
<datalist>
Ważniejsze atrybuty: Atrybuty globalne, zdarzenia
Podpowiadanie - przykład
<!doctype html>
<html lang="pl">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Przykład formularza</title>
</head>
<body>
<h1>Jakiego ssaka ostatnio widziałeś w lesie?</h1>
<form action="http://www.wsb.pl/skrypt.php" method="post">
<input type="text" list="ssaki">
<datalist id="ssaki">
<option value="borsuk">
<option value="jeleń">
<option value="sarna">
</datalist>
<input type="submit" value="Zapisz">
</form>
</body>
</html>
Pokazywanie wyników i postępu: <output>, <progress>, <meter>
<output> - element służy do wyświetlania wyników obliczeń lub efektów akcji podjętej przez użytkownika. Atrybuty:
Atrybuty globalne, zdarzenia,
for – opisuje, dla których pól przeprowadzono obliczenie
form - sprawdź opis atrybutu dla elementu <input>,
name - sprawdź opis atrybutu dla elementu <input>,
<progress> - element służy do wyświetlania postępu zadania Atrybuty:
Atrybuty globalne, zdarzenia,
value – bieżąca wartość
max – maksymalna możliwa wartość
<meter> - element służy do przedstawiania pomiaru w znanym zakresie wartości, na przykład odsetka głosujących
na daną odpowiedź w ankiecie. Atrybuty:
Atrybuty globalne, zdarzenia,
value – bieżąca wartość
min – minimalna możliwa wartość
max – maksymalna możliwa wartość
low – jeśli wartość value jest poniżej low, to przeglądarka może wyróżnić element <meter> innym kolorem
(zwykle żółty, czerwony)
high – jeśli wartość value jest powyżej high, to przeglądarka może wyróżnić element <meter> innym kolorem
(zwykle żółty, czerwony)
optimum – w połączeniu z atrybutami low i/lub high, przeglądarka jest w stanie zidentyfikować czy wartość
value elementu <meter> jest w optymalnym zakresie i może to podkreślić kolorystycznie.
Przykład pokazywania wyników i postępu
<section >
<h2>Kalkulator</h2>
<form oninput="suma.value = a.valueAsNumber + b.valueAsNumber">
<label for="a-id">Pierwsza liczba</label>
<input name="a" type="number" step="any" id="a-id"><br>
<label for="b-id">Druga liczba</label>
<input name="b" type="number" step="any" id="b-id"><br>
<label for="suma-id">Suma obu liczb</label>
<output name="suma" for="a b" id="suma-id"></output><br>
</form>
</section>
<section>
<h2>Postęp</h2>
<label for="postep">Odpowiedziałeś już na 75% pytań!</label>
<progress id="postep" max="100" value="75"> <span>75%</span> </progress>
</section>
<section>
<h2>Wynik</h2>
<label for="wynik">Liczba pytań na które odpowiedziałeś poprawnie:</label>
<meter id="wynik" min="0" max="30" low="15" value="14"> 14 (z 30) </meter>
</section>
240 – Formularz: podpowiadanie wskazanych wartości
<?xml-stylesheet href="http://www.serwer.pl/style.css"
type="text/css"?>
<?xml-stylesheet href="#wewnetrznyStyl" type="text/css"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pl" lang="pl">
<head>
<title>Tytuł</title>
<style type="text/css" id="wewnetrznyStyl">
p {
color: green;
}
</style>
</head>
<body>
<p>Treść akapitu</p>
</body>
</html>
HTML – tematy zaawansowane
HTML
Tematy zaawansowane
(wymagające użycia
skryptów)
HTML – Ważniejsze atrybuty globalne przydatne w zastosowaniach zaawansowanych
• aria-*, role - atrybuty zdefiniowane w rekomendacji Web Accessibility Initiative – Accessible Rich
Internet Applications (w skrócie WAI-ARIA lub ARIA). ARIA to zbiór atrybutów, które umożliwiają
tworzenie aplikacji webowych (szczególnie tych, które wykorzystują AJAX, Javascript, CSS) w sposób
przyjazny ludziom z niepełnosprawnościami. Dla przykładu, dodanie atrybutów ARIA umożliwia
zorientowanie się czytnikowi dla niewidomych czy dany link jest częścią menu nawigacyjnego oraz czy
menu lub treść są w danym momencie widoczne czy też ukryte za pomocą stylów CSS lub skryptu
JavaScript.
• contenteditable (true, false) – określa, czy dany element można edytować. Można go użyć z
elementami, które w ogóle nie są przeznaczone do edycji – takimi jak np. <p> czy <span>.
Przeglądarka nic nie zrobi z wprowadzoną czy zmienioną treścią. Należałoby utworzyć skrypt, który
coś zrobi z wprowadzonymi zmianami. Przykład w jakim można by wykorzystać ten atrybut, to
stworzenie edytora tekstu działającego w przeglądarce.
• dir (ltr, rtl) – określa kierunek tekstu w elemencie, w którym go użyto: od lewej do prawej (ltr) lub od
prawej do lewej (rtl).
• draggable (true, false) – atrybut określający, czy element można przeciągać. Przy użyciu tego
atrybutu wraz ze skryptami JavaScript, da się stworzyć stronę w której użytkownik może przeciągać
elementy z jednego miejsca w inne.
• spellcheck (true, false) – określa, czy sprawdzać pisownię i gramatykę tekstu. Działa dla elementów
edytowalnych – czyli elementów formularzy oraz elementów z atrybutem contenteditable ustawionym
na true.
• translate (yes, no) – określa, czy przeglądarka może tłumaczyć tekst elementu
Przykład użycia atrybutów WAI ARIA - efekt
Przykład użycia atrybutów WAI ARIA
<!doctype html> <html lang="pl"> <head> <meta charset="UTF-8">
<link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
<link rel="stylesheet" href="/resources/demos/style.css">
<script src="https://code.jquery.com/jquery-1.12.4.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
<script> $( function() { $( "#zakladki" ).tabs(); } ); </script>
</head> <body>
<!-- Dzięki stylom CSS i skryptowi JS fragment HTML poniżej jest wyświetlany jako zakładki.
Atrybuty WAI ARIA: role, aria-* dają szansę np. czytnikowi dla niewidomych zrozumienie
kontekstu wyświetlania i w efekcie na przeczytanie etykiety dla danego akapitu zawartej w
elementach li, przed odczytaniem treści danego akapitu. -->
<div id="zakladki" role="tablist">
<ul>
<li id="l1" role="tab"><a href="#z1">HTML</a></li>
<li id="l2" role="tab"><a href="#z2">CSS</a></li>
<li id="l3" role="tab"><a href="#z3">JavaScript</a></li>
</ul>
<div>
<p id="z1" role="tabpanel" aria-labelledby="l1">HTML pozwala opisać strukturę...</p>
<p id="z2" role="tabpanel" aria-labelledby="l2">Arkusz stylów CSS to lista dyrektyw... </p>
<p id="z3" role="tabpanel" aria-labelledby="l3">Najczęściej spotykanym zastosowaniem...</p>
</div></div></body></html>
Przykład użycia atrybutów contenteditable i spellcheck
<!doctype html>
<html lang="pl">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>HTML - atrybuty globalne</title>
</head>
<body>
<p contenteditable="true" spellcheck="true">
HTML pozwala opisać strukturę informacji zawartych wewnątrz strony internetowej,
nadając znaczenie poszczególnym fragmentom tekstu – formując hiperłącza, akapity, nagłówki,
listy – oraz osadza w tekście dokumentu obiekty plikowe np. multimedia bądź elementy baz
danych np. interaktywne formularze danych.
</p>
</div>
</body>
</html>
280 – Atrybuty
<html>
<head><title>Tytuł strony</title>
<link rel="stylesheet" href="arkusz.css" media="all" />
</head>
<body>
<h1>Nagłówek</h1>
<p>To jest akapit</p> selektor właściwość wartość
</body>
</html>
arkusz.css
h1 { color: red; }
CSS – deklaracje reguł
h1 {
color: red;
font-style: 12pt; /* błąd: font-style nie może być liczbą. Powinno być
jedną z wartości: normal|italic|oblique|initial|inherit */ }
p {
color: blue;
font-vendor: any; /*błąd: właściwość font-vendor nie istnieje */}
}
h1 {
color: red;
}
p {
color: blue;
}
CSS – znaki i komentarze
• /* komentarz */
• Ciągi znaków w cudzysłowiach
pojedyncze (‘tekst’) lub podwójne (”tekst”).
Cudzysłów w cudzysłowiach:
”tekst ’ tekst ” lub ‘tekst ” tekst’
znak maskujący (”tekst \” tekst”) lub (‘tekst \’ tekst’)
Przykład – komentarze i ciągi znaków
• Liczby
całkowite (np. 2) i rzeczywiste (np. 1.2)
W liczbach rzeczywistych używa się kropki . (tak jak w języku angielskim) nie
przecinka , (tak jak w języku polskim)
Liczby dodatnie (bez znaku, lub znak +)
Liczby ujemne (znak -)
Procenty (%)
h1 {
font-size: 1.2ex;
/*przykład użycia ułamka: używamy kropki, a nie przecinka!*/
}
h2 {
font-size: 120%; /* przykład użycia procentów */
Jednostki i obliczenia
• Jednostki kąta
• deg – 1deg to 1 stopień, 360 stopni to pełny obrót.
• grad – 1grad to 1 gradian. 400 gradianów to pełny obrót.
• rad – 1rad to 1 radian. 2*pi radianów to pełny obrót.
• turn – 1turn to 1 obrót. 1trun to pełny obrót.
• Jednostki czasu
• s – 1s to 1 sekunda.
• ms – 1ms to 1 milisekunda. 1000ms to 1 sekunda.
• Jednostki częstotliwości
• Hz – 1Hz to 1 Hertz.
• kHz – 1kHz to 1 kilo Hertz. 1kHz to tysiąc Hertzów.
• Jednostki rozdzielczości
• dpi – 1dpi to 1 punkt na cal.
• dpcm – 1dpcm to 1 punkt na centymetr
• dppx - 1dppx to 1 punk na piksel
Przykład – długość i wysokość – 320.html
<!DOCTYPE html> <html lang="pl"> <head> <meta charset="utf-8"> <title>Jednostki </title>
<link rel="stylesheet" href="arkusz.css" type="text/css">
</head>
<body>
<h1>Przykłady użycia jednostek względnych dla rozmiaru czcionki:</h1>
<span id="j_em">| Tekst 1em |</span>
<span id="j_ex">| Tekst 1ex |</span>
<span id="j_ch">| Tekst 1ch |</span>
<span id="j_rem">| Tekst 1rem |</span><br>
<span id="j_vw">| Tekst 1vw |</span>
<span id="j_vh">| Tekst 1vh |</span>
<span id="j_vmin">| Tekst 1vmin |</span>
<span id="j_vmax">| Tekst 1vmax |</span>
<h1>Przykłady użycia jednostek bezwzględnych dla szerokości elementu:</h1>
<div id="j_cm">2,54cm</div>
<div id="j_mm">25,4mm</div>
<div id="j_Q">101.6Q</div>
<div id="j_in">1in</div>
<div id="j_pc">6pc</div>
<div id="j_pt">72pt</div>
<div id="j_px">96px</div> </body> </html>
Przykład – długość i wysokość – arkusz CSS
html { font-size: 40px; }
body { font-size: 30px; }
#j_em { font-size: 1em; } /* użycie różnych jednostek względnych */
#j_ex { font-size: 1ex; }
#j_ch { font-size: 1ch; }
#j_rem { font-size: 1rem;}
#j_vw { font-size: 5vw;}
#j_vh { font-size: 5vh;}
#j_vmin { font-size: 5vmin;}
#j_vmax { font-size: 5vmax;}
#j_cm { width: 2.54cm;} /*wszystkie szerokości poniżej to 2,54cm czyli 1 cal*/
#j_mm { width: 25.4mm;}
#j_Q { width: 101.6Q;}
#j_in { width: 1in;}
#j_pc { width: 6pc;}
#j_pt { width: 72pt;}
#j_px { width: 96px;}
/* ustawienie szerokości, wysokości i koloru elementów div */
div { height: 1cm; background-color: lightblue; border-style: solid; border-width: 1px;
border-color: black; font-size: 0.5rem; }
h1 {font-size: 0.5rem;}
Przykład – długość i wysokość – arkusz CSS - efekt
Obliczenia
<html>
<head>
…
…
</head>
<body>
<p style='color: red; font-weight: bold;'> To jest akapit.
Jego wygląd (kolor, krój czcionki) jest ustalany przez
kaskadowe arkusze stylów</p>
…
</body>
</html>
Wewnętrzny arkusz stylów
<html>
<head>
…
<style>
p{
color: red;
font-weight: bold;
}
…
</style>
…
</head>
<body>
<p> To jest akapit. Jego wygląd (kolor, krój czcionki) jest ustalany przez kaskadowe arkusze stylów</p>
…
</body>
</html>
Zewnętrzny arkusz stylów
strona.html
<html>
<head>
…
<link rel="stylesheet" href="arkusz.css" type="text/css" media="all”/>
…
</head>
<body>
<p> To jest akapit. Jego wygląd (kolor, krój czcionki) jest ustalany przez kaskadowe arkusze stylów</p>
…
</body>
</html>
arkusz.css
p{
color: red;
font-weight: bold;
}
Import arkusza stylów
• @import musi występować przed innymi regułami
• Możliwe jest importowanie pliku css przez inny plik css, ale najlepiej tego unikać miejąc na względzie
optymalizację prędkości ładowania się strony. Plik css nie rozpocznie być importowany, dopóki nie
zostanie ściągnięty plik css dokonujący importu. Przy klasycznym dołączaniu plików przy
wykorzystaniu elementu <link>, bądź importowaniu pliku wewnątrz elementu <style>, przeglądarka
może ściągać wszystkie pliki CSS równolegle, dzięki czemu strona ma szansę załadować się nieco
szybciej. Przy importowaniu pliku css przez inny plik css, wczytywanie plików przez przeglądarkę
odbywa się po kolei
Import arkusza stylów - przykład
<html>
<head>
…
<style>
@import "arkusz.css";/*@import
musi być przed innymi regułami CSS!*/
… arkusz.css
</style> @import url(”http://www.inny-serwer.pl/drugi-arkusz.css”);
@import url(”trzeci-arkusz.css”) print;
…
/*@import musi być przed innymi regułami CSS!*/
</head> p {
color: red;
<body>
font-weight: bold; trzeci-arkusz.css
<p> treść strony </p> } h2 {
</body> color: black;
font-weight: bold;
</html> }
…
Zalety zewnętrznego arkusza
• Ten sam arkusz można dołączyć do wielu (pod)stron
• Do zmiany wyglądu wystarczy modyfikacja arkusza (zamiast modyfikowania n plików HTML)
arkusz.css
p {
color: red;
font-weight: bold;
}
…
Dołączanie stylów - podsumowanie
#a1 {
font-weight: bold; /*czcionka pogrubiona*/
font-size: 1rem; /*rozmiar czcionki taki jak dla elementu HTML*/
line-height: 2rem; /*wysokość linii, w której będzie tekst */
font-family: Arial, Helvetica, sans-serif; /*rodziny czcionek, jakich
należy użyć od najbardziej preferowanej do najmniej preferowanej*/
}
#a2 { /* zapis skrócony - użycie właściwości font */
font: bold 1rem/2rem Arial, Helvetica, sans-serif;
}
Rozszerzenia przeglądarek 1/2
• Producenci przeglądarek wprowadzają własne rozszerzenia CSS, które działają tylko w tej danej
przeglądarce lub silniku o który oparto przeglądarkę.
• Rozszerzenia przeglądarek rozpoczynają się od prefiksu, zwykle w postaci myślnika.
• Na przykład rozszerzenia przeglądarki firefox rozpoczynają się od prefiksu –moz-, rozszerzenia
przeglądarek opartych o silnik webkit (np. Chrome) rozpoczynają się od prefiku -webkit- a
rozszerzenia przeglądarek firmy Microsoft rozpoczynają się od prefiksu –ms-
• Przykłady rozszerzenia:
–moz-force-broken-image-icon – rozszerzenie przeglądarki Firefox które umożliwia wymuszenie
wyświetlenie ikony niedziałającej grafiki zamiast opisu tej grafiki zawartej w atrybucie alt.
• Rozszerzenia przeglądarki działają tylko w tej przeglądarce której dotyczą, więc co do zasady lepiej ich
nie używać, chyba że tworzymy aplikację wyłącznie dla jednej konkretnej przeglądarki.
• Producenci przeglądarek podczas prac nad dodaniem wsparcia dla nowych właściwości CSS, które
mają stać się oficjalną rekomendacją dopiero w przyszłości, najczęściej początkowo dodają ich
obsługę z prefiksem. Przykładem może być właściwość animation (tworzenie animacji CSS) która
początkowo w starszych wersjach Firefox dostępna była pod nazwą -moz-animation a obecnie jest
dostępna pod oficjalną nazwą animation.
• Przy wykorzystywaniu nowości użycie prefiksów może być niezbędne. To czy dana właściwość wymaga
prefiksu w danej przeglądarce lub jej wersji można sprawdzić na witrynie producenta przeglądarki lub
na witrynie http://caniuse.com.
Rozszerzenia przeglądarek 1/2
p {
/*tworzenie gradientu. -webkit-linear-gradient zadziała dla przestarzałych
przeglądarek opartych o starą wersję silniku webkit: Chrome poniżej
wersji 26, Safari poniżej wersji 7, Android Browser poniżej wersji 4.4.
Nowsze przeglądarki wykorzystają linear-gradient. */
background: -webkit-linear-gradient(top, lime, yellow, red);
background: linear-gradient(to bottom, lime, yellow, red); }
DOM – Document Object Model
Jeśli arkusze stylów nie definiują wprost któregoś z parametrów wyglądu to jest on
dziedziczony od przodków (elementów nadrzędnych)
<html>
<head>
<link rel="stylesheet" href="arkusz.css" type="text/css" media="all”/>
</head>
<body>
<h1>To jest <span>nagłówek</span></h1>
</body>
</html>
arkusz.css arkusz.css
h1 { h1 , p , li {
color: red; color: red;
font-size: 12pt; font-size: 12pt;
background-color: white; background-color: white;
} }
p {
color: red;
font-size: 12pt;
background-color: white;
}
li {
color: red;
font-size: 12pt;
background-color: white;
}
Selektor uniwersalny
• Znak *
• Jeśli to nie jedyny element prostego selektora, to można go pominąć (i w większości przypadków się
go pomija). Oba pliki poniżej będą działać tak samo.
arkusz.css
*[lang=pl] { color: red }
*.klasa { color: red }
*#identyfikator { color: red }
arkusz.css
[lang=pl] { color: red }
.klasa { color: red }
#identyfikator { color: red }
Selektor typu
• Selektor ma takie brzmienie jak element (X)HTML którego dotyczy
• Reguła będzie dotyczyć wszystkich elementów tego typu w całym dokumencie
<html>
<head>
<title>Tytuł strony</title>
<link rel="stylesheet" href="arkusz.css" media="all" />
</head>
<body>
<h1>Nagłówek</h1>
<p>To jest akapit</p>
<p>To jest drugi akapit</p>
</body>
h1 {
</html>
font-size: 18pt;
color: red;
}
p {
color: black;
font-size: 14px;
}
Selektory potomków
• Jeśli w selektorze elementy oddzielone są spacją, to reguła zadziała jeśli w dokumencie (X)HTML
późniejszy element jest potomkiem poprzedniego
<html>
<head>
<title>Tytuł strony</title>
<link rel="stylesheet" href="arkusz.css" media="all" />
</head>
<body>
<h1>To jest <em> nagłówek </em> </h1>
</body>
</html>
h1 { color: red }
em { color: red };
h1 em { color: blue }
Selektory potomków – ciąg dalszy
• W selektorze można określić pokolenia potomków do których reguła ma być stosowana
<html>
<head><title>Tytuł strony</title>
<link rel="stylesheet" href="arkusz.css" media="all" />
</head>
<body>
<div>
<p>To jest pierwszy akapit</p>
<div>
<p>To jest drugi i akapit</p>
</div>
<p>To jest trzeci akapit</p>
</div>
</body>
</html>
p { color: black }
div { color: blue }
div * p { color: red }
Selektory dzieci
• Przy uściślaniu że reguła ma być tylko dla dzieci, między rodzicem a dzieckiem jest znak >
<html>
<head>
<title>Tytuł strony</title>
<link rel="stylesheet" href="arkusz.css" media="all" />
</head>
<body>
<p>To jest pierwszy akapit</p>
<div>
<p>To jest drugi i akapit</p>
<p>To jest trzeci akapit</p>
</div>
</body>
</html
h1 , h2 {color: black }
h1 + h2 { color: red }
442 – Selektory: efekt
442 – Selektory
1. Ściągnij z Moodle archiwum pliki-startowe.zip i rozpakuj. W środku znajduje się plik style.html
oraz folder grafika. Wkopiuj je do katalogu w którym pracujesz.
2. Przeanalizuj plik style.html i zapisz pod nazwą 442.html
3. Stwórz nowy plik 442.css i dołącz go do pliku html poprawiając <link href="stylesheet"
href="…">. W pliku css ustaw wygląd jak poniżej:
4. Utwórz regułę dla elementu html i ustaw rozmiar czcionki na 20px (font-size)
5. Nagłówki h1 i h2 mają być wyświetlane w kolorze darkmagenta.
6. Kolor tła (background-color) dla h1, h2, p, ul, table ma być w kolorze lightgray. Wykorzystaj
przecinek do oddzielenia selektorów.
7. Akapity <p> zawarte wewnątrz <footer> mają mieć kolor tła kolorze gray. Wykorzystaj selektor
potomstwa: w kodzie CSS pomiędzy footer i p pozostaw spację.
8. Podobnie element form ma mieć kolor tła w kolorze gray.
9. Fragmenty tekstu „Mieszko I” w akapitach <p>, zawarte wewnątrz <strong> mają być
wyświetlone w kolorze darkmagenta, a fragment tekstu „to historyczny pierwszy władca…”
zawarty wewnątrz <strong>, ma być wyświetlony przy użyciu czcionki o rozmiarze 1.5rem
(font-size). Wykorzystaj fakt, że elementy <strong> które mają być kolorowane są dziećmi <p>
(selektor >), a element <strong> z tekstem do powiększenia jest wnukiem <p> (selektor
potomstwa: spacja, selektor uniwersalny: *)
10.Podejrzyj stronę w 2 przeglądarkach i sprawdź poprawność kodu CSS pod adresem
http://jigsaw.w3.org/css-validator
Selektory atrybutów
<html>
<head>
<title>Tytuł strony</title>
<link rel="stylesheet" href="arkusz.css" media="all" />
</head>
<body>
<h1>To jest pierwszy nagłówek</h1>
<h1 title="tytul">To jest drugi nagłówek</h1>
<h1 title="tytul2">To jest trzeci nagłówek</h1>
</body>
</html>
h1 {color: black }
h1[title] { color: red }
Selektory atrybutów – przykład 2
<html>
<head>
<title>Tytuł strony</title>
<link rel="stylesheet" href="arkusz.css" media="all" />
</head>
<body>
<h1>To jest pierwszy nagłówek</h1>
<h1 dir=”ltr” title="tytul”>To jest drugi nagłówek</h1>
<h1 title="tytul">To jest trzeci nagłówek</h1>
</body>
</html>
h1 {color: black }
h1[title="tytul"][dir="ltr"] { color: red }
Selektory atrybutów – przykład 3
<html>
<head>
<title>Tytuł strony</title>
<link rel="stylesheet" href="arkusz.css" media="all" />
</head>
<body>
<img src=”obrazek.png” alt=”to jest opis obrazka” />
<br />
<img src=”obrazek.png” alt=”to jest
opis grafiki” />
</body>
</html>
img {
border-color: black;
border-width: 3px;
border-style: solid; }
img[alt~="obrazka"] {
border-color: red;
border-width: 3px;
border-style: solid; }
Selektory atrybutów – przykład 4
<html>
<head>
<title>Tytuł strony</title>
<link rel="stylesheet" href="arkusz.css" media="all" />
</head>
<body>
<p lang=”en-US” xml:lang=”en-us” >USA</p>
<p lang=”en-UK” xml:lang=”en-uk” >UK</p>
<p lang=”pl-PL” xml:lang=”pl” >Polska</p>
</body>
</html>
p { color: black; }
p[lang|="en"] { color: red; }
Selektory atrybutów – przykład 5
h1::before {
content: "Tytuł: ";
font-size: 0.5em }
h1::after {
content: " koniec tytułu";
font-size: 0.5em }
Selektory linków
:first-child – pierwsze dziecko elementu
:lang – język elementu
:link – nieodwiedzony link
:visited – odwiedzony link (przeciwieństwo :link)
<html><head><title>Tytuł strony</title>
<link rel="stylesheet" href="arkusz.css" media="all" /></head>
<body>
<div>
<p>To jest <em>pierwszy</em> akapit</p>
<a href="testA.html">Odwiedzony link</a><br />
<a href="testB.html">Nieodwiedzony link</a>
</div><div>
arkusz.css
<h1 lang="pl">To jest pierwszy nagłówek</h1>
<p>To jest <em>drugi</em> akapit</p>
p:first-child em { color: blue }
</div> h1:lang(pl) {
</body> color: yellow }
</html> a:link {
color: red }
:visited {
color: green }
Selektory linków – ciąg dalszy
:hover – kursor znajduje się nad elementem
:active – element aktywowany (np. w trakcie kliknięcia)
:focus – element w trakcie przyjmowania danych
a:hover musi być zdefiniowany po :link i :visited – (zostanie nadpisany bo te stany się nie wykluczają)
<html>
<head>
<title>Tytuł strony</title>
<link rel="stylesheet" href="arkusz.css" media="all" />
</head>
<body>
<a href="testB.html">Link 1</a><br />
<input type="text" />
</body>
</html>
1. Zapisz style.html pod nazwą 472.html. Stwórz nowy plik 472.css i dołącz go do
html modyfikując element <link>. W pliku css ustaw poniższy wygląd:
2. Tekst w pierwszym akapicie w każdym z artykułów article ma być wyświetlony w
kolorze darkslategray (właściwość color). Użyj selektora :first-of-type
3. Teksty w elementach i w języku łacińskim (la) mają być wyświetlone w kolorze
darkgoldenrod. Użyj selektora :lang( język)
4. Linki <a> które nie były jeszcze odwiedzone, mają być wyświetlone na zielono. Użyj
selektora :link i szesnastkowego zapisu koloru #00FF00
5. Linki <a> odwiedzone mają być wyświetlone na szaro (gray) (selektor :visited)
6. Linki <a> nad którymi znajdzie się kursor mają być wyświetlane w kolorze
niebieskim. Użyj selektora :hover i procentowego zapisu koloru rgb(0%,0%,100%)
7. Linki <a> w momencie kliknięcia mają być wyświetlane na czerwono. Użyj
selektora :active i zapisu liczbowego koloru rgb(255,0,0)
8. Kolor tekstu w polu input w momencie wprowadzania danych ma być niebieski.
Użyj selektora :focus i skróconego zapisu szesnastkowego koloru #00F
9. Podejrzyj stronę w 2 przeglądarkach i sprawdź poprawność kodu CSS pod adresem
http://jigsaw.w3.org/css-validator
Selektor :nth-child(An+B) 1/3
• Selektor zlicza numer dziecka. Poniższy przykład ustawia właściwości parzystych i nieparzystych
wierszy tabeli (które są parzystym i nieparzystym dzieckiem rodzica).
<!DOCTYPE html><html lang="pl">
<head><meta charset="utf-8" /><title>Wpis na blogu</title>
<link rel="stylesheet" href="620.css" type="text/css" />
</head>
<body>
<table>
<tr><td>Gruszka</td></tr>
<tr><td>Jabłko</td></tr>
<tr><td>Śliwka</td></tr>
<tr><td>Czereśnia</td></tr>
<tr><td>Wiśnia</td></tr>
<tr><td>Brzoskwinia</td></tr>
<tr><td>Morela</td></tr>
</table>
</body>
</html>
• Pseudo klasy :nth-of-type i nth-last-of-type mają podobne działanie do pseudo klas :nth-
child i nth-last-child – podobnie jako one przeszukują rodzeństwo. Różnica polega na tym,
że selektory nth-of-type i nth-last-of są bardziej specyficzne: zliczają tylko elementy danego
typu, podczas gdy selektory rodzeństwa zliczają wszystkie elementy rodzeństwa.
• nth-of-type i nth-last-of-type jest bezpieczniejsze w użyciu, jeśli w kodzie HTML rodzeństwa
występują różne rodzaje elementów i nie możemy wykluczyć późniejszych modyfikacji kodu
HTML.
• Pseudo klasa :nth-of-type zlicza elementy od początku kodu, pseudo klasa nth-last-of-type
zlicza elementy od końca kodu.
• Argumenty przyjmowane przez obie pseudo klasy, są identyczne jak w przypadku :nth-child i
:nth-last-child:
wzór w formacie An+B, gdzie
A to liczba całkowita mnożona przez n,
n to liczba pod którą przeglądarka podstawia wyliczony numer elementu
B to liczba dodawana do wyniku mnożenia
even – elementy parzyste (to samo co wzór 2n+0 lub 2n)
• odd – elementy nieparzyste (to samo co wzór 2n+1)
Przykład różnic w działaniu :nth-of-type i :nth-child - HTML
<main><section id="sowy">
<h2>Sowy</h2> <!-- dziecko nr 1: nieparzyste-->
<h3>Puszczyk zwyczajny</h3> <!-- dziecko nr 2: parzyste -->
<p>Puszczyk (Strix aluco)... </p> <!-- dziecko nr 3: nieparzyste i pierwszy el. p: nieparzysty -->
<h3>Puchacz zwyczajny</h3> <!-- dziecko nr 4: parzyste -->
<p>Puchacz zwyczajny, puch... </p> <!-- dziecko nr 5: nieparzyste, i drugi element p: parzysty -->
<h3>Pójdźka zwyczajna</h3> <!-- dziecko nr 6: parzyste -->
<p>Pójdźka zwyczajna, pójdź...</p><!-- dziecko nr 7: nieparzyste, i trzeci el. p: nieparzysty -->
<h3>Sóweczka zwyczajna</h3> <!-- dziecko nr 8: parzyste -->
<p>Sóweczka zwyc...</p> <!-- dziecko nr 9: parzyste, jednocześnie czwarty element p: parzysty -->
</section><section id="dzieciolowate">
<h2>Dzieciołowate</h2>
<h3>Dzięcioł duży</h3>
<p>Dzięcioł duży, dzięci... </p><!-- dziecko nr 3: nieparzyste, i pierwszy el. p: nieparzysty -->
<h3>Dzięcioł średni</h3>
<p>Dzięcioł średni (Dendroc...</p> <!-- dziecko nr 5: nieparzyste, i drugi element p: parzysty -->
<h3>Dzięciołek</h3>
<p>Dzięciołek, dzięcioł mał...</p><!-- dziecko nr 7: nieparzyste, i trzeci el. p: nieparzysty -->
<h3>Dzięcioł czarny</h3>
<p>Dzięcioł czarny (Dryoco ...</p><!-- dziecko nr 9: parzyste, i czwarty element p: parzysty -->
</section></main>
Przykład różnic w działaniu :nth-of-type i :nth-child - CSS
main { display: flex; flex-direction: row; }/*wyświetlanie elementów dzieci w jednym wierszu*/
section { margin: 5px; } /*ustawienie marginesów dla elementu section */
/*wyszukanie w elemencie o identyfikatorze #sowy, takich akapitów p które są jego nieparzystymi
dziećmi. W tym przykładzie wszystkie akapity są nieparzystymi dziećmi, ale wystarczyłoby dodać
1 dowolny element aby stały się parzystymi i kod przestałby działać*/
#sowy p:nth-child(odd) { background-color: lightblue; }
#sowy p:nth-child(even) { /*parzyste mają być zielone – ale żadnego nie ma!*/
background-color: lightgreen; }
/*wyszukanie w elemencie o identyfikatorze #dzieciolowate, takich akapitów p które są
nieparzyste. Przy zliczaniu pod uwagę brane są wyłącznie akapity - pozostałe rodzeństwo jest
pomijane. Tak więc dodanie dowolnego rodzeństwa innego niż p nie wpłynie na działanie kodu */
#dzieciolowate p:nth-of-type(odd) { background-color: lightblue; }
#dzieciolowate p:nth-of-type(even){ background-color:lightgreen} /*parzyste mają być zielone */
/*wyszukanie od końca w elemencie o identyfikatorze #sowy, takich nagłówków h3 które są jego
parzystymi dziećmi. W tym przykladzie wszystkie nagłówki h3 są parzystymi dziećmi, ale
wystarczyłoby dodać 1 dowolny element aby stały się nieparzystymi i kod przestałby działać*/
#sowy h3:nth-last-child(even) { background-color:aquamarine; }
#sowy h3:nth-last-child(odd) { background-color:lime; }/*zliczanie od końca */
#dzieciolowate h3:nth-last-of-type(even) { background-color:aquamarine;}/*zliczanie od końca */
#dzieciolowate h3:nth-last-of-type(odd) { /*zliczanie od końca */
background-color:lime; }
Przykład różnic w działaniu :nth-of-type i :nth-child - Efekt
492 – Selektory nth-: efekt
492 – Selektory nth-
1. Zapisz style.html pod nazwą 492.html. Stwórz nowy plik 492.css i dołącz go do
html modyfikując element <link>. W pliku css ustaw poniższy wygląd:
2. Utwórz regułę dla elementu html ustawiając rozmiar czcionki na 20px (font-size)
3. Tło (background-color) parzystych wierszy tr ustaw na kolor lightblue. Użyj
selektora :nth-of-type(even),
4. Tło nieparzystych wierszy tr ustaw na kolor lightgreen. Użyj :nth-child (2n+1).
5. Przetestuj działanie w 2 przeglądarkach? Czemu jeden z wierszy nie pasuje wizualnie?
6. Tło dla czwartego wiersza tr od końca ustaw na ligthgreen. Np. :nth-last-child()
7. W drugiej komórce td każdego wiersza ustaw pogrubienie tekstu (font-weight:
bold). Użyj selektora :nth-of-type() lub :nth-child().
8. Przetestuj stronę w 2 przeglądarkach. Dlaczego w 2 wierszach pogrubienie odstaje
wizualnie od reszty dokumentu?
9. Dla parzystych elementów label ustaw kolor czcionki na brown. Najpierw użyj
selektora nth-of-type(2n) i przetestuj, a następnie nth-child(2n) i przetestuj.
Dlaczego w pierwszym przypadku faktycznie co druga etykieta jest wyświetlana na
brązowo, a w drugim nie?
10.Sprawdź poprawność kodu CSS pod adresem http://jigsaw.w3.org/css-validator
Ważniejsze pseudo-klasy 1/4
• :link – linki które jeszcze nie zostały odwiedzone
• :visited – linki które zostały odwiedzone. Ten mechanizm umożliwia tworzenie skryptów sprawdzających czy
użytkownik odwiedzał w przeszłości daną stronę, stąd niektóre przeglądarki ze względu na poprawę prywatności
mogą nie obsługiwać tej pseudoklasy
• :hover – pseudoklasa dotycząca sytuacji gdy kursor znajduje się nad elementem
• :active –pseudoklasa dotycząca momentu aktywacji elementu, na przykład momentu kliknięcia myszki
• :focus – pseudoklasa dotycząca sytuacji gdy element jest aktywny: przyjmuje dane z klawiatury czy myszki
• :focus-within – to samo co :focus, ale dotyczy również potomstwa, tj. żeby element na którym użyto :focus-within
został wybrany, to wystarczy by którykolwiek z jego potomków był aktywny (był w trakcie przyjmowania danych).
• :target – pseudoklasa oznaczająca aktywną kotwicę, to jest taką, do której przeglądarka właśnie przeniosła widza
po kliknięciu przez niego w link do niej prowadzący. Kotwice to nazwane miejsca w dokumencie – takie dla
których ustawiono atrybut id. Dzięki temu mogą do nich prowadzić linki. W linku kotwicę oznacza się znakiem #.
• :lang( język) – pseudoklasa dotycząca języku elementu. Język jest określany w HTML zwykle przez atrybut lang,
może też wynikać ze znaczników meta czy nagłówków protokołu http. Na przykład argument pl lub pl-pl będzie
oznaczał język polski, argument en język angielski, a argument en-US język angielski w wariancie amerykańskim
• :enabled – pseudoklasa dotycząca elementów włączonych
• :disabled – psudoklasa dotycząca elementów wyłączonych, czyli takich których nie da się aktywować. Przykładem
zablokowanego elementu będzie pole formularza z ustawionym atrybutem disabled.
• :checked – pseudoklasa dotycząca wybranych elementów formularza typu radio i checkbox.
Ważniejsze pseudo-klasy 2/4
:indeterminate - pseudoklasa dotycząca niektórych pól formularza, gdy ich stan jest nieokreślony (na przykład gdy
żaden z wykluczających się przycisków radio w danej grupie nie jest jeszcze zaznaczony)
:in-range – oznacza element input, którego wartość mieści się pomiędzy wartościami wskazanymi atrybutami min i
max.
:out-of-range – oznacza element input, którego wartość NIE mieści się pomiędzy wartościami wskazanymi
atrybutami min i max. Przeciwieństwo :in-range.
:required – oznacza pola formularza które są wymagane, to jest mają ustawiony atrybut required.
:optional – oznacza pola formularza które nie są wymagane, to jest nie mają ustawionego atrybutu required.
:read-only – oznacza element którego użytkownik NIE może edytować
:read-write – oznacza element który użytkownik może edytować.
:root – pseudoklasa dotycząca elementu - korzenia dokumentu. W języku html będzie to po prostu element <html>
:invalid – pseudo-klasa dotycząca pól formularza w których stwierdzono błędy (np. wprowadzona wartość nie
zgadza się z wzorcem określonym atrybutem pattern)
:valid – pseudo-klasa dotycząca pól formularza w których nie stwierdzono błędów. Przeciwieństwo :invalid.
:default – dotyczy pól wyboru w formularzach takich jak radio czy checkbox. Pseudo-klasa oznacza takie elementy,
które są domyślnie zaznaczone (np. element typu radio wstępnie wybrany przy użyciu atrybutu checked).
:defined – oznacza element zdefiniowany, taki który już istnieje. Może być przydatne w sytuacjach, gdy elementy w
dokumencie są tworzone w locie przez skrypt. Jeśli tworzenie elementu jest czasochłonne bo na przykład posiada
wiele elementów-dzieci, to element można ukrywać do czasu gdy zostanie w pełni stworzony.
Ważniejsze pseudo-klasy 3/4
:empty – oznacza element który nie ma potomstwa
:first – używane w połączeniu z regułą @page i dotyczy drukarek. Oznacza pierwszą stronę wydruku.
:left – używane w połączeniu z regułą @page i dotyczy drukarek. Oznacza że strona jest „lewa”, co wynika
bezpośrednio z kierunku tekstu na pierwszej stronie.
:right – używane w połączeniu z regułą @page i dotyczy drukarek. Oznacza że strona jest „prawa”, co wynika
bezpośrednio z kierunku tekstu na pierwszej stronie.
:fullscreen() – oznacza wyświetlanie dokumentu w trybie pełnoekranowym
:not() – negacja – oznacza listę wszystkich elementów które nie pasują do selektorów podanych jako argument
dla not().
:nth-child(An+B) – pseudoklasa określająca który w kolejności jest dany element wśród swego rodzeństwa.
Wzorzec wskazany jako argument to wzór na podstawie którego przeglądarka wybiera czy dany element do
niego pasuje czy nie. Przeglądarka zlicza całe rodzeństwo, bez względu na typ elementu. Wzór w formacie
An+B, oznacza:
A to liczba całkowita mnożona przez n,
n to liczba, pod którą przeglądarka podstawia numer elementu liczonego względem reszty
rodzeństwa.
B to liczba dodawana do wyniku mnożenia
Słowo „even” to elementy parzyste (to samo co wzór 2n+0 lub 2n)
Słowo „odd” to elementy nieparzyste (to samo co wzór 2n+1)
Ważniejsze pseudo-klasy 4/4
input:disabled {
color: green; border-color: yellow;
border-style: solid; border-width: 3px;
}
input:enabled {color: blue;}
input:checked {background-color: yellow;}
Pseudoklasy: :target, :not, :root
• Ustawienie właściwości akapitu który jest celem linku
• Ustawienie tła dla wszystkich elementów które nie są typu p
• Ustawienie tła dla korzenia dokumentu (root), czyli dla html (od którego odziedziczą kolor wszystkie
elementy).
<!DOCTYPE html><html lang="pl">
<head><meta charset="utf-8" /><title>Wpis na blogu</title>
<link rel="stylesheet" href="660.css" type="text/css" />
</head>
<body>
<a href="#gruszka">Gruszka</a><br>
<a href="#jablko">Jabłko</a><br>
<p id="gruszka">Gruszki są smaczne</p>
<p id="jablko">Jabłka też są niczego sobie</p>
<p>Wiśnie jeszcze nie dojrzały</p>
<div>A co z porzeczkami?</div>
</body></html>
1. Zapisz style.html pod nazwą 512.html. Stwórz nowy plik 512.css i dołącz go do
html modyfikując element <link>. W pliku css ustaw poniższy wygląd:
2. Utwórz regułę dla elementu html ustawiając rozmiar czcionki na 20px (font-size)
3. Zaznaczone pole checkbox (input) ma zmieniać lewy margines na (margin-left)
40px. Do wybrania zaznaczonego pola użyj selektora :checked
4. Opis pola checkbox (label), po zaznaczeniu checkbox ma zmieniać kolor na
darkgreen. Zauważ że label jest w kodzie HTML zaraz po input – użyj selektora +
5. Artykuły (article) które są kotwicami (atrybut id), mają zmieniać kolor tła
(background-color) na chartreuse po kliknięciu linku prowadzącego do danej
kotwicy. Użyj selektora :target. Kolor zmienia się dopiero po kliknięciu na link.
6. Pierwsza linia w każdym akapicie p ma być pogrubiona (font-weight: bold). Użyj
selektora :first-line
7. Pierwsza litera w każdym akapicie p ma być w rozmiarze 1.5rem (właściwość font-
size) oraz pisana czcionką monospace (właściwość font-family)
8. Przetestuj działanie w 2 przeglądarkach.
9. Sprawdź poprawność kodu CSS pod adresem http://jigsaw.w3.org/css-validator
Nazewnictwo klas i metodyki tworzenia kodu CSS
• Rekomendacja W3C definiuje jak mają działać klasy, ale nie daje żadnych wskazówek, co do ich
nazewnictwa. Konwencja nazewnicza zostaje więc w rękach twórcy witryny.
• Przez lata powstało wiele konkurencyjnych, mniej lub bardziej formalnych metodyk tworzenia kodu
CSS oraz różnych konwencji nazewniczych. Blogi dotyczące CSS pełne są sporów dotyczących
wyższości danej metodyki nad innymi podejściami.
• Żadna z metodyk nie jest idealna ani najlepsza. Każda ma swoje zalety i wady.
• Zamiast wymyślać własną konwencję nazywania klas czy wręcz metodykę tworzenia kodu CSS, lepiej
wybrać którąkolwiek z istniejących, popularnych metodyk i się jej konsekwentnie trzymać.
• Przykłady popularnych metodyk/konwencji tworzenia kodu CSS:
AMCSS - Attribute Modules for CSS - https://amcss.github.io/
Atomic CSS - https://css-tricks.com/lets-define-exactly-atomic-css/
BEM – Block Element Modifier - http://getbem.com/ https://en.bem.info/methodology/quick-
start/
FUN – Flat hierarchy of selectors, Utility Styles, Name-spaced components -
https://benfrain.com/enduring-css-writing-style-sheets-rapidly-changing-long-lived-projects/
MCSS - Multilayer CSS - https://operatino.github.io/MCSS/en/
OOCSS - Object Oriented CSS. Link: https://github.com/stubbornella/oocss/wiki
RSCSS – Reasonable System for CSS - https://rscss.io/
SMACSS - Scalable and Modular Architecture for CSS. Link: https://smacss.com/
Przykład metodyki tworzenia stylów CSS: BEM 1/2
• BEM to jedna z wielu dostępnych metodyk tworzenia stylów CSS.
• Metodyka opiera się na podziale elementów w dokumencie na bloki, elementy i modyfikatory:
• bloki - niezależne fragmenty takie jak na przykład menu nawigacyjne, formularz, które mogą być wielokrotnie
używane niezależnie od innych fragmentów kodu.
Nazwy bloków powinny odzwierciedlać ich cel a nie ich wygląd.
Bloki nie powinny wpływać na elementy wokół nich. Z tego względu dla bloków nie powinno ustawiać się
takich właściwości jak pozycja czy marginesy.
Dla bloków nie powinno się używać selektorów typu czy identyfikatorów, lecz wyłącznie klas CSS. Pozwala to
na ich wielokrotne użycie w kodzie.
Bloki można w sobie zagnieżdżać w kodzie HTML.
Przykład nazwy klasy bloku: .formularz
• elementy to składowe bloków (nie mylić z elementami HTML!). Nie mogą być niezależnie wykorzystane bez bloku,
w którym występują. Nazwy elementów odpowiadają ich nazwom (np. input) lub celom (np. wyslij) . Przykładami
elementów mogą być link w menu, pole w formularzu, tekst (zawartość elementu HTML).
Nazwa klasy elementu zawiera dwa podkreśliniki __ które występują przed słowem opisującym element, a po
słowie opisującym blok w którym zawarty jest element, na przykład .formularz__input
BEM zakłada, że elementy są zawsze zależne od bloków – są w nich zawarte i nie występują samodzielnie.
Elementy można w sobie zagnieżdżać. Wówczas nazwa elementu w kodzie CSS powinna to odzwierciedlać, na
przykład: .formularz__tresc__wyslij (zakłada że w HTML element dotyczący „wyślij” jest zagnieżdżony wewnątrz
elementu o klasie .formularz__tresc)
Powyższe zasady umożliwiają tworzenie „płaskiego” kodu, to jest takiego który eliminuje korzystanie z
dziedziczenia. Dzięki temu kod jest bardziej przejrzysty i łatwiejszy do zarządzania.
Przykład metodyki tworzenia stylów CSS: BEM 2/2
• Modyfikatory – klasy która określają wygląd (np. wymiar), stan (np. zablokowany, tylko
do odczytu) lub zachowanie (np. górny prawy róg) danego bloku/elementu.
Nazwa klasy modyfikatora zawiera dwa myślniki które występują przed słowem
opisującym modyfikację, a po słowie opisującym blok lub element, na przykład
.formularz__input--zablokowany
Modyfikatory nie mogą istnieć samodzielnie – zawsze są używane w połączeniu z
blokiem lub elementem.
• Inne zasady:
Nie należy używać identyfikatorów
Nie należy używać selektorów w postaci nazw elementów
Tworzony kod ma być płaski, tj. nie należy używać selektorów potomstwa.
BEM opisuje nawet strukturę katalogów i plików w kodzie źródłowym i zaleca
trzymanie kodu dotyczącego danego bloku czy elementu w osobnym pliku. Kod
dotyczący każdego z bloków powinien być w osobnym katalogu o nazwie takiej, jak
nazwa tego bloku. Wewnątrz katalogów dotyczących bloków, należy zmieszczać
podkatalogi dotyczące elementów, o nazwach takich jak nazwy tych elementów
(włącznie z dwoma podkreślnikami).
Uproszczony przykład użycia BEM - HTML
<body>
<form action="http://www.wsb.pl/skrypt.php" method="get" class="formularz
formularz--zimowy"> <!-- dodanie 2 klas: głównej klasy bloku i klasy modyfikującej -->
<h1 class="formularz__naglowek">Wprowadź swoje dane</h1>
<label for="imie-id" class="formularz__etykieta">Imię lub pseudonim:</label>
<input type="text" name="imie" id="imie-id" class="formularz__poletekst"><br>
<label for="telefon-id" class="formularz__etykieta">Nr telefonu:</label>
<input type="tel" name="telefon" disabled id="telefon-id" class="formularz__poletekst
formularz__poletekst--zablokowane"><br><!--dodanie 2 klas: klasy bloku i klasy modyfikującej-->
<label for="url-id" class="formularz__etykieta formularz__etykieta--ukryta">Twoja witryna
internetowa:</label> <!-- powyższa etykieta zostanie ukryta przez klasę modyfikatora-->
<input type="url" name="witryna" hidden="hidden" id="url-id" class="formularz__poletekst
formularz_poletekst--ukryte"><br><!--dodaje 2 klasy: główną klasę bloku i klasę modyfikującą-->
<label for="email-id" class="formularz__etykieta">Adres email:</label>
<!-- dodanie 2 klasy: głównej klasy bloku i klasy modyfikującej -->
<input type="email" name="email" readonly id="email-id"
class="formularz__poletekst formularz__poletekst--tylkoodczyt"><br>
<label for="haslo-id" class="formularz__etykieta">Hasło:</label>
<input type="password" name="haslo" id="haslo-id"
class="formularz__poletekst"><br>
<input type='submit' value="Utwórz konto" class="formularz__zapisz">
</form></body>
Uproszczony przykład użycia BEM - CSS
.formularz { /*blok*/ border: 1px dotted blue; padding: 10px; }
.formularz--zimowy{/*blok i modyfikator. Przed modyfikatorem są 2 myśliniki*/
background-image: url('https://upload.wikimedia.org/wikipedia/commons/d/d6/Field-with-snow-
champ-enneige.jpg'); background-size: 50%;
} /*formularz zimowy, to modyfikacja, która wyświetla zimowe tło */
.formularz__etykieta { /*blok i element. Przed elementem są 2 podkreśliniki*/
font-size: 1rem; font-weight: bold; text-align: right; width: 12rem; display: inline-block;}
.formularz__etykieta--ukryta { /*blok, element i modyfikator*/
visibility: hidden; /*modyfikacja polega na ukrywaniu elementu*/ }
.formularz__poletekst { /*blok i element*/
font-size: 1rem; border: 1px solid blue; margin: 1px; }
.formularz__poletekst--zablokowane{ /*blok, element i modyfikator*/
background-color: lightslategray; /*modyfikacja ustawia szare tło*/ }
.formularz__poletekst--tylkoodczyt{ /*blok, element i modyfikator */
background-color: lightslategray; /*modyfikacja ustawia szare tło*/ }
.formularz_poletekst--ukryte{ /*blok, element i modyfikator*/
visibility: hidden; /*modyfikacja ukrywa element*/ }
.formularz__zapisz { /*blok i element*/
background-color: lightblue; margin-top: 1rem; margin-left: 12rem; border-style: none; }
.formularz__naglowek{
color:darkblue; }
Uproszczony przykład użycia BEM - efekt
517 – Selektory klas: efekt
517 – Selektory klas
1. Zapisz style.html pod nazwą 517.html. Stwórz nowy plik 517.css i dołącz go do html
modyfikując element <link>. W pliku css dodaj reguły dla poniższych klas
2. .dokument ustaw rozmiar czcionki na 20px (font-size), kolor tła (background-color) na
snow, kolor tekstu (color) na black, wyśrodkowanie treści (margin: 0 auto;) oraz odstęp
treści (padding) na 0.5rem
3. .nagłówek – kolor tekstu na midnightblue
4. .article – krawędź border: 1px solid midnightblue, odstęp treści (padding) – 0.5rem,
margines dolny (margin-bottom) na 0.5rem, minimalną wysokość (min-height) na 22rem
5. .article__img – wyrównanie do prawej strony ze zgodą na opływanie (float: right),
maksymalną wysokość (max-height) na 20rem, marginesy (margin) na 1rem
6. .article__h2 – wyrównanie do lewej strony (float: left), marginesy na 1rem;
7. .table – scalanie krawędzi wewnątrz tabeli: border-collapse: collapse
8. .table__td – odstęp od treści na 1rem i krawędź border: 1px dashed midnightblue
9. .stopka – kolor tekstu na slategray;
10..formularz__label – wyświetlanie elementu jako bloku: display: block
11. .formularz__pole – wyświetlanie elementu jako bloku: display: block
12..formularz__pole--do-lewej - wyrównanie do lewej i zezwolenie na opływanie: float:left
13.Przetestuj działanie w 2 przeglądarkach i sprawdź poprawność kodu CSS
Kaskada
• 3 źródła arkuszy
Autor (witryny)
Użytkownik (przeglądający witrynę) Przykład opcji w przeglądarce opera gdzie
Możliwość istnieje, ale nikt z niej użytkownik można ustawić własne arkusze
nie korzysta – niszowe stylów:
funkcjonalność
Przeglądarka (domyślne ustawienia
stylów)
Sposób ustawienia arkuszy
użytkownika zależy od przeglądarki
Co jeśli reguły (autora, użytkownika i
przeglądarki) się wykluczają?
Algorytm kaskady
Marginesy w poziomie (lewa, prawa) nie mogą się zlewać. Odległość między
elementami jest sumą marginesów pomiędzy elementami.
Marginesy w pionie (dół, góra) przylegających elementów zlewają się:
odległość między elementami nie jest sumą marginesów, lecz jest równa
wartości większego z marginesów
jeśli jeden z marginesów jest dodatni, a drugi ujemny – wyliczana jest suma ich
wartości.
Przyjrzyj się ponownie wcześniejszemu przykładowi dotyczącemu marginesów:
margines górny elmentu <p> to 30px, margines dolny elementu <h3> to 20px.
Wydawałoby się więc że odległość między elementami powinna wynosić 50px,
tymczasem wynosi ona 30px.
Wyjątki od reguły zlewania się marginesów:
w choć jednym z elementów używane jest pozycjonowanie float,
w choć jednym z elementów overflow jest inne niż visible,
w choć jednym z elementów używane jest pozycjonowanie absolutne,
choć jeden z elementów jest wyświetlany w trybie in-line.
Odstępy wewnętrzne
Plik graficzny PNG z przezroczystym tłem, z którego są wycinane fragmenty na potrzeby tworzenia
krawędzi. Ma rozmiar 81px na 81px. 27 pikseli na 27 pikseli to rozmiar pojedynczego diamentu,
stąd takie właśnie liczby są używane w przykładzie – pozwalają wyciąć dokładnie 1 diament.
Szerokość, wysokość i przepełnienia 1/2
box-sizing – określa w jaki sposób przeglądarka ma wyliczać szerokość i wysokość elementu.
Najważniejsze wartości
content-box – to zachowanie domyślne przeglądarki - określa że przestrzeń jest liczona
względem miejsca na treść. Na przykład jeśli box-sizing ma wartość content-box i szerokość
elementu (width) została ustawiona na 100px, to dotyczy ona szerokości treści. Jeśli element ma
odstępy (padding) o rozmiarze 10px oraz krawędzie (border) o grubości 5px, to faktyczna
szerokość elementu wyniesie 100px+2*10px+2*5px.
border-box - oznacza że przy wyliczaniu szerokości i wysokości zostaną uwzględnione pełne
wymiary elementu, uwzględniające także krawędź (border) i odstępy (padding). Na przykład jeśli
box-sizing ma wartość border-box i element ma odstępy (padding) o rozmiarze 10px oraz
krawędzie (border) o grubości 5px, to cały rozmiar elementu będzie miał 100px a rozmiar treści w
elemencie wyniesie 100px-2*10px-2*5px.
width – określa szerokość elementów blokowych (ale nie elementów linii, wierszy tabel). Wartość
może być określona jako długość (np. px), procenty, auto.
min-width, max-width – analogiczne do width – pozwala określić dopuszczalny zakres szerokości
(przydatne w witrynach responsywnych).
height – określa wysokość elementów blokowych (ale nie elementów linii, wierszy tabel). Wartość
może być określona jako długość (np. px), procenty, auto.
min-height, max-height – analogiczne do height – pozwala określić dopuszczalny zakres szerokości
(przydatne w witrynach responsywnych).
Szerokość, wysokość i przepełnienia 2/2
overflow-x – instrukcje dla przeglądarki co zrobić, jeśli treść się nie mieści w założonym
obszarze. Przeglądarka może ukryć zawartość która się nie mieści, pokazać pasek przewijania
lub zignorować narzucone ograniczenie i wyświetlić zawartość. Właściwość overflow-x opisuje
reakcję na przepełnienie w poziomie.
overflow-y – działanie jak powyżej, ale dla przepełnienia w pionie.
overflow – skrócony zapis overflow-x i overflow-y. Jako wartość przyjmuje dwie wartości:
pierwsza to instrukcja overflow-x, drugi to overflow-y. Jeśli podano tylko jedną wartość,
oznacza to że instrukcja dla overflow-x i overflow-y jest taka sama.
Dopuszczalne wartości overflow-x, overflow-y i overflow:
visible – zawartość która się nie mieści jest po prostu wyświetlana
hidden – zawartość która się nie mieści, jest ukrywana. Twórca mógłby stworzyć skrypt i
mechanizm który pozwoli użytkownikowi wyświetlić niewidoczną treść.
clip – niedawno dodane do specyfikacji i jeszcze nie obsługiwane przez przeglądarki. To
samo co hidden, z tym że nie daje dostępu do ukrytych danych nawet za pomocą
interfejsu programistycznego
scroll – zawartość która się nie mieści jest ukrywana, ale przeglądarka wyświetla pasek
przewijania umożliwiający wyświetlenie ukrytej treści.
auto – przeglądarka sama wybiera tryb.
Przykład box-sizing - HTML
<nav>
<ul>
<li><a href="#sowy">Informacje o sowach</a></li> <!--link do kotwicy-->
<li><a href="#dzieciolowate">Informacje o dzięciołowatych</a></li>
</ul>
</nav>
<main>
<section id="sowy"> <!-- kotwica -->
<h2>Sowy</h2>
<h3>Puszczyk zwyczajny</h3> <p>Puszczyk (Strix aluco) – gatunek ptaka z rodziny …</p>
<h3>Puchacz zwyczajny</h3> <p>Puchacz zwyczajny, puchacz (Bubo bubo) – gatunek dużego, …</p>
<h3>Pójdźka zwyczajna</h3> <p>Pójdźka zwyczajna, pójdźka (Athene noctua) – gatunek …</p>
<h3>Sóweczka zwyczajna</h3> <p>Sóweczka zwyczajna, sóweczka (Glaucidium passerinum) ...</p>
</section><section id="dzieciolowate">
<h2>Dzieciołowate</h2>
<h3>Dzięcioł duży</h3> <p>Dzięcioł duży, dzięcioł pstry większy (Dendrocopos major) ...</p>
<h3>Dzięcioł średni</h3> <p>Dzięcioł średni (Dendrocoptes medius)[3] – gatunek średn ...</p>
<h3>Dzięciołek</h3> <p>Dzięciołek, dzięcioł mały (Dryobates minor ) – gatunek mał...</p>
<h3>Dzięcioł czarny</h3> <p>Dzięcioł czarny (Dryocopus martius) – gatunek średniej ...</p>
</section>
</main>
Przykład box-sizing - CSS
nav {/*kontener na nawigację*/
box-sizing: content-box; /*szerokość i wysokość liczona tylko dla treści. grubość krawędzi i
odstępy (padding) nie są uwzględnione */
background-color: greenyellow;/*kolor tła*/
width: 800px; /*szerokość elementu - tu szerokości treści*/
border: 10px solid darkgreen; /*krawędź o grubości 10px*/
padding: 5px; /*odstęp treści od krawędzi 5px z każdej strony*/
margin: 50px; /*margines od sąsiednich elementów - z każdej strony*/
}
main {/*kontenter na treść główną*/
box-sizing: border-box; /*szerokość i wysokość liczona z uwzględnieniem grubości krawędzi
oraz wymiarów odstępów (padding)*/
background-color: lime; /*kolor tła*/
width: 800px; /*szerokość - tu liczona względem wymiarów
krawędzi, tak więc jest to faktycznie szerokość krawędzi */
border: 10px solid darkgreen; /*krawędź o grubości 10px*/
padding: 5px; /*odstęp treści od krawędzi 5px z każdej strony*/
margin: 50px; /*margines od sąsiednich elementów - z każdej
strony*/
}
Przykład przepełnienia - HTML
<nav>
<ul>
<li><a href="#sowy">Informacje o sowach</a></li> <!--link do kotwicy-->
<li><a href="#dzieciolowate">Informacje o dzięciołowatych</a></li>
</ul>
</nav>
<main>
<section id="sowy"> <!-- kotwica -->
<h2>Sowy</h2>
<h3>Puszczyk zwyczajny</h3> <p>Puszczyk (Strix aluco) – gatunek ptaka z rodziny …</p>
<h3>Puchacz zwyczajny</h3> <p>Puchacz zwyczajny, puchacz (Bubo bubo) – gatunek dużego, …</p>
<h3>Pójdźka zwyczajna</h3> <p>Pójdźka zwyczajna, pójdźka (Athene noctua) – gatunek …</p>
<h3>Sóweczka zwyczajna</h3> <p>Sóweczka zwyczajna, sóweczka (Glaucidium passerinum) ...</p>
</section><section id="dzieciolowate">
<h2>Dzieciołowate</h2>
<h3>Dzięcioł duży</h3> <p>Dzięcioł duży, dzięcioł pstry większy (Dendrocopos major) ...</p>
<h3>Dzięcioł średni</h3> <p>Dzięcioł średni (Dendrocoptes medius)[3] – gatunek średn ...</p>
<h3>Dzięciołek</h3> <p>Dzięciołek, dzięcioł mały (Dryobates minor ) – gatunek mał...</p>
<h3>Dzięcioł czarny</h3> <p>Dzięcioł czarny (Dryocopus martius) – gatunek średniej ...</p>
</section>
</main>
Przykład przepełnienia - CSS
body, nav, ul, li, main, section, h2, h3, p { /*ustawienia dla kliku elementów*/
margin: 10px; /* marginesy*/ padding: 10px; /*odstęp*/ text-align: justify; /*justyfikacja*/ }
ul {/*kontener na listę*/ background-color: lightskyblue;/*kolor tła: niebieski*/ }
li {/*element listy*/ background-color: yellow; /*kolor żółty*/ }
h2 { /*nagłówki h2*/
width:300px; /*szerokość*/ height:40px;/*wysokość */background-color: coral;/*pomarańczowy*/}
h3 {/*nagłówki h3*/
background-color: aquamarine; max-width: 350px; /*szerokość nie większa niż*/ }
p { background-color: fuchsia; }
p:first-of-type { /*pierwszy akapit wewwnątrz rodzica*/
max-height: 20px; /*wysokość nie większa niż */
overflow: hidden; /*ukrywanie treści w x i y jeśli się nie mieści*/ }
p:nth-of-type(2) { /*drugi akapit wewwnątrz rodzica*/
max-height: 40px; /*wysokość nie większa niż */
overflow-y: scroll; /*przewijanie treści w pionie jeśli się nie mieści*/ }
p:nth-of-type(3) {/*trzeci akapit wewwnątrz rodzica*/
height: 50px; /*wysokość */ width: 50px; /*szerokość*/
overflow: scroll hidden; /*przewijanie treści w x i ukrywanie w y */}
p:nth-of-type(4) {/*czwarty akapit wewwnątrz rodzica*/
height: 10px; /*wysokość */
overflow: visible visible; /*wyświetlanie nie mieszczącej się treści w x i y*/ }
Przykład przepełnienia - efekt
Cieniowanie elementów blokowych
1. Pliki z poprzedniego ćwiczenia zapisz pod nazwami 532.html i 532.css. W pliku HTML
zmodyfikuj element <link> aby wskazywał na 532.css. Dodaj reguły dla poniższych klas:
2. .article_img – Ustaw typ wyświetlania (display) na block flow aby element zaczął
zachowywać się jak element blokowy. Następnie ustaw:
1. marginesy pionowe w rozmiarze 15px a marginesy poziome ustaw na auto, aby
wyśrodkować grafikę w ramach obszaru rodzica.
2. cień (box-shadow) w kolorze szarym (gray) z przesunięciem w poziomie: 20px, w
pionie 10px oraz promieniem rozmycia 15px.
3. Maksymalną szerokość (max-width) na 70vw, aby grafika skalowała się dla mniejszych
szerokości ekranu.
3. .article__h2 - ustaw zaokrąglanie rogów (border-radius) o promieniu 1rem oraz ustaw:
a. Kolor tła (background-color) na maroon a kolor tekstu na biały (white)
b. Ustaw szerokość (width) na 50% obszaru wyświetlania, to jest 50vw.
c. Odstęp od treści (padding) równy 1rem.
4. .aside – ustaw maksymalną szerokość (max-width) na 90vw oraz ustaw:
a. aby przy przepełnieniu (overflow) wyświetlane były paski przewijania (scroll scroll)
5. Przetestuj stronę w 2 przeglądarkach. Zmniejsz okno przeglądarki aby sprawdzić
zachowanie grafiki i tabeli dla małych ekranów. Sprawdź poprawność kodu CSS.
Listy w CSS 1/2
display: list-item tworzy miejsce na zawartość listy oraz na zawartość wyróżnienia konkretnej pozycji
listy.
Właściwości list pozwalają określić rodzaj wyróżnienia i pozycję elementów listy.
list-style-image ustawia obrazek który będzie działał jako wyróżnik pozycji w liście. Ma wyższy
priorytet niż list-style-type (nadpisuje go). Obrazek podaje się jako url,
Domyślna wartość: none – brak obrazka.
np. ul { list-style-image: url("obrazek.png") }.
list-style-position – pozycja wyróżnika
outside – wyróżnik pozycji listy znajduje się na zewnątrz bloku w którym znajdują się wartości listy
inside – wyróżnik pozycji listy znajduje się w tym samym bloku co wartości listy
inherit – dziedziczenie od rodzica
list-style zapis skrócony dla list-style-type list-style-position list-style-image
można podać 1,2 lub wszystkie 3 własności,
np. ul { list-style: upper-roman inside url(”obrazek.png”) }
Listy w CSS 2/2
list-display-style – rodzaj wyróżnika
disc – koło
circle – okrąg
square – kwadrat
decimal - Liczba dziesiętna (1, 2, 3 …)
decimal-leading-zero - liczba dziesiętna z zerami z przodu (01, 02, 03 …)
lower-roman – małe liczby rzymskie (i, ii, iii …)
upper-roman – duże liczby rzymskie (I, II, III …)
lower-greek – małe litery greckie (alfa, beta, gama …)
lower-latin – małe litery łacińskie (a, b, c …)
upper-latin – duże litery łacińskie (A,B, C …)
armenian – numerowanie armeńskie
georgian – numerowanie gruzińskie
lower-alpha – to samo co lower-latin
upper-alpha - to samo co upper-latin
none – brak wyróżnika
inherit – dziedziczenie od rodzica
Listy w CSS - przykład
<html><head><title>Tytuł strony</title><link rel="stylesheet" href="arkusz.css"
type="text/css" media="all" />
</head>
<body>
<ul>
<li>pierwszy element listy</li>
<li>drugi element listy</li>
<li>trzeci element listy</li>
</ul>
<ul class="lista2">
<li>pierwszy element listy</li>
<li>drugi element listy</li>
<li>trzeci element listy</li>
</ul>
</body>
</html>
• Jeśli nie wystarczy miejsca, aby element opływający zmieścił się obok opływanego
zostanie wyświetlony pod spodem
• float
left – element przesunięty do lewej
right – element przesunięty do prawej
none – opływanie wyłączone
• clear
none – element może opływać elementy z ustawionym float
left – element NIE może opływać elementów z float: left
right – element NIE może opływać elementów z float: right
both – element NIE może opływać elementów z ustawionym float
• CSS 3 wprowadziło nowe modele wyświetlania display: flex, oraz display: grid w
których łatwiej osiągnąć założony układ witryny. W związku z czym popularność float
oraz display: inline-block systematycznie spada.
Opływanie - przykład
<html>
<head>
<title>Tytuł strony</title>
<link rel="stylesheet" href="arkusz.css" type="text/css" media="all" />
</head>
<body>
<img src="obrazek.png" />
<p>To jest tekst akapitu. To jest tekst akapitu. To jest tekst akapitu. </p>
</body>
</html>
body {
display: block; font-size:14px;
line-height: 200%;
width: 200px; height: 400px body {
} display: block; font-size:14px;
p { display: block } line-height: 200%;
span { display: inline } width: 200px; height: 400px }
#outer { color: red } p { display: block }
#inner { float: right; span { display: inline }
width: 70px; #outer { position: absolute;
color: blue top: 200px; left: 100px;
} width: 100px; color: red; }
#inner { color: blue }
552 – Pozycjonowanie względne, absolutne i sticky: efekt
552 – Pozycjonowanie względne, absolutne i sticky
1. Zapisz style.html pod nazwą 552.html. Stwórz nowy plik 552.css i dołącz go do
html modyfikując element <link>. W pliku css dodaj reguły dla poniższych klas
2. .dokument ustaw rozmiar czcionki na 20px (font-size), kolor tła (background-color)
na snow, kolor tekstu (color) na black, marginesy na 0 (margin). odstęp treści
(padding) na połowę wysokości czcionki w elemencie html: 0.5rem
3. .lista--linki ustaw kolor tła (background-color) na cornsilk, pozycjonowanie
(position) na fixed, położenie na 10px od góry (top) i 10px od prawej strony
(right), maksymalną szerokość (max-width) na 150px oraz przezroczystość
(opacity) na 0.9.
4. .article ustaw krawędź o szerokości 1px jako linię ciągłą (solid) w kolorze brown;
5. .article__img ustaw szerokość (width) na 30%, pozycjonowanie (position)
względne (relative) i odległość od lewej strony (left) na 150px.
6. .article__h2 ustaw pozycjonowanie (position) na wartość sticky, maksymalną
szerokość (max-width) na 150px i kolor tła (bakcground-color) na lightgray.
7. Przetestuj stronę w 2 przeglądarkach. Co się dzieje przy przewijaniu w dół? Zmień
pozycjonowanie w .lista--linki z fixed na absolute. Co się zmieniło?
8. Sprawdź poprawność kodu CSS pod adresem http://jigsaw.w3.org/css-validator
Pozycje: warstwy
z-index –położenie w trzecim wymiarze (odległość od widza - im większa liczba tym bliżej widza –
domyślnie=0)
<html>
<head>
<title>Tytuł strony</title>
<link rel="stylesheet" href="arkusz.css" media="all">
</head>
<body>
<img id="obrazek" class="stos" src="obrazek.png" />
<div id="tekst1" class="stos">Ten tekst jest na górze</div>
<div id="tekst2">Ten tekst będzie pod spodem wszystkiego</div>
<div id="tekst3" class="stos" >Ten tekst jest poniżej tekstu 1, ale powyżej obr</div>
</body>
</html>
.stos {
position: absolute; left: 20px; top: 20px;
width: 200px; height: 50px;font-size: 18px;
}
#obrazek {z-index: 1}
#tekst1 { z-index: 3; color: red;}
#tekst3 { z-index: 2; color: blue; position: relative;
top: -3px; }
Rozmieszczanie w kolumnach
#a1 {
column-count: 2; -moz-column-count: 2; -webkit-column-count: 2;
column-gap: 50px; -moz-column-gap: 50px; -webkit-column-gap: 50px;
column-rule-color: red; -moz-column-rule-color: red; -webkit-column-rule-color: red;
column-rule-style:solid;-moz-column-rule-style:solid;-webkit-column-rule-style:solid;
column-rule-width:10px; -moz-column-rule-width:10px;-webkit-column-rule-width:10px;
}
562 – Kolumny: efekt
562 – Kolumny
1. Zapisz style.html pod nazwą 562.html. Stwórz nowy plik 562.css i dołącz go do
html modyfikując element <link>. W pliku css dodaj reguły dla poniższych klas
2. .dokument ustaw rozmiar czcionki na 20px (font-size), kolor tła (background-color)
na snow, kolor tekstu (color) na black, marginesy (margin) i odstęp treści
(padding) na 0px
3. .tresc ustaw wyświetlanie w 2 kolumnach (column-count), z przerwą między
kolumnami (column-gap) 30px, kolor linii między kolumnami (column-rule-color)
w kolorze maroon, styl linii (column-rule-style) - double, grubość krawędzi
(column-rule-width): 5px
4. .article ustaw unikanie łamania elementu do kolejnej kolumny (page-break-inside:
avoid)
5. .article__img ustaw maksymalną szerokość (max-width) na 100%,
6. Przetestuj stronę w 2 przeglądarkach. Co się dzieje gdy usuniesz właściwość page-
break-inside?
7. Sprawdź poprawność kodu CSS pod adresem http://jigsaw.w3.org/css-validator
Elastyczne ułożenie elementów – kontener flex 1/2
• Rekomendacja W3C CSS Flexible Box Layout wprowadza 2 nowe wartości dla właściwości display: flex i inline-
flex
• Przy pozycjonowaniu elementów na stronie element z wartością flex zachowuje się jak element blokowy, inline-flex
zachowuje się jak element liniowy
• Wartości flex i inline-flex tworzą kontener, który pozwala na umieszczanie elementów (dzieci) w liniach (wierszach
lub kolumnach). Do ustalenia układu elementów służy szereg właściwości CSS. Najważniejsze właściwości
przedstawiono poniżej:
• flex-direction – określa jak elementy są umieszczane w kontenerze typu flex:
row – rozmieszczenie elementów wieszami, jeden obok drugiego.
row-reverse – tak samo jak row, ale w odwrotnej kolejności – od końca
column – rozmieszczenie elementów kolumnami, jeden pod drugim.
column-reverse – tak samo jak column, ale w odwrotnej kolejności – od dołu
• flex-wrap – określa czy elementy mają być rozkładane w wielu liniach (wierszach lub kolumnach), czy w jednej.
nowrap – wszystkie dzieci mają być rozmieszczone w jednej linii (wierszu lub kolumnie)
wrap – dzieci mogą być rozmieszczone w wielu liniach (wierszach lub kolumnach)
wrap-reverse – tak jak wrap, ale kolejność wyświetlania jest odwrócona.
• flex-flow - zapis skrócony dla powyższych wartości flex-direction i flex-wrap. Przyjmuje 1 (wartości takie jak dla
flex-direction) lub 2 argumenty (jedna wartość taka jak dla flex-direction, druga tak jak dla flex-wrap)
• order - właściwość dla dzieci elastycznego kontenera. Jako wartość przyjmuje liczbę. Pozwala zmieniać kolejność
wyświetlania w kontenerze – im mniejsza liczba, tym wcześniej dziecko zostanie wyświetlone.
Elastyczne ułożenie elementów – kontener flex 2/2
• flex - właściwość dla dzieci elastycznego kontenera. Skrócony zapis dla 3 poniższych właściwości
flex-grow, flex-shring i flex-basis. W tym wypadku W3C wyraźnie zaleca użycie zapisu
skróconego, co pozwoli uniknąć niespodziewanego zachowania gdyby autor przeoczył określenie
wartości dla jednej z 3 właściwości zapisanych w formie skróconej.
• flex-basis - właściwość dla dzieci elastycznego kontenera. ustawia preferowaną szerokość
elementu. Przyjmuje następujące wartości:
rozmiar - podany w jednostkach odległości, np. pikselach.
auto – automatycznie dobiera rozmiar wynikający z właściwości width, height
content – dobiera rozmiar w zależności od zawartości elementu
• flex-grow - właściwość dla dzieci elastycznego kontenera. Jeśli jest dostępna wolna przestrzeń,
to określa ile razy więcej miejsca w kontenerze dany element może zająć niż jego rodzeństwo. Dla
przykładu, jeśli w kontenerze mamy troje dzieci, wszystkie o rozmiarze flex-basis: 100px, dwoje
dzieci ma współczynnik flex-grow: 1, jedno dziecko ma współczynnik flex-grow: 2 i w kontenerze
została jeszcze wolna przestrzeń, to dziecko ze współczynnikiem 2 będzie miało 200px.
• flex-shrink: działa podobnie jak flex-grow, ale tutaj współczynnik określa pomniejszenie
elementu w przypadku gdyby w kontenerze zabrakło miejsca. Dla przykładu, jeśli w kontenerze
mamy troje dzieci, wszystkie o rozmiarze flex-basis: 100px, dwoje dzieci ma współczynnik flex-
shrink: 1, jedno dziecko ma współczynnik flex-shrink: 2 i w kontenerze zabrakło miejsca (ma
szerokość mniejszą niż 300px), to dziecko ze współczynnikiem 2 będzie miało 50px.
Elastyczne ułożenie elementów – kontener flex: justify-content
justify-content: - określa jak rozmieszczać wolną przestrzeń między dziećmi kontenera w linii (pozostałą po
ustaleniu wszystkich marginesów):
flex-start lub start – wypełnianie kontenera od początku i zostawienie wolnego miejsca na końcu linii
end lub flex-end – wypełnianie kontenera od końca i zostawienie wolnego miejsca na początku linii
center – ułożenie elementów na środku, obok siebie i zostawienie wolnego miejsca po bokach.
space-between – wolne miejsce jest równomiernie rozmieszczane pomiędzy elementami (ale nie przed
pierwszym i nie po ostatnim – one przylegają do krawędzi kontenera)
space-around – podobne do space-between, z tym że wolna przestrzeń rozmieszczana jest także przed
pierwszym elementem i za ostatnim elementem. W tym wypadku wolna przestrzeń przypadająca na dany
element jest dzielona na pół – jedna połowa jest wyświetlana z jednej strony elementu, druga połowa z drugiej
strony elementu
space-evenely – podobne do space-between, z tym że wolna przestrzeń rozmieszczana jest także przed
pierwszym elementem i za ostatnim elementem. W tym wypadku wszystkie wolne przestrzenie między
elementami mają jednakowy rozmiar.
left - wypełnianie kontenera od lewej i zostawienie wolnego miejsca po prawej
right - wypełnianie kontenera od prawej i zostawienie wolnego miejsca po lewej
normal – elementy są ustawiane, jak gdyby wartość właściwości nie została ustawiona.
safe – używanie w połączeniu z innymi wartościami powyżej (np. safe center). W przypadku gdyby miało dojść
do przepełnienia w wyniku którego część któregoś z elementów nie mogłaby być wyświetlona, to wówczas
zostanie użyte wyrównanie start.
unsafe - przeciwieństwo safe: nawet jeśli miałoby dojść do przepełnienia i obcięcia części treści, wyrównanie
zostanie wykonane zgodnie z wartością podaną po unsafe.
Elastyczne ułożenie elementów – justify-content
Wizualizacja niektórych wartości właściwości justify-content wg specyfikacji W3C – elementy są oznaczone kolorami,
wolna przestrzeń kolorem szarym.
Elastyczne ułożenie elementów – align-items i align-self 1/2
• align-items i align-self– align items to właściwość kontenera elastycznego która ustawia align-self dla jego dzieci, align-
self to właściwość elementu (dziecka) w kontenerze. Przyjmują identyczne wartości i mają identyczne działanie, z tym, że
pierwsza właściwość dotyczy całego kontenera, a druga właściwość opisuje zachowanie danego dziecka w kontenerze.
Właściwości określają jak wyrównywać elementy (dzieci), gdy nie zajmują całej dostępnej dla nich przestrzeni w linii w
kierunku prostopadłym (czyli gdy element nie zajmuje całej wysokości wiersza albo gdy nie zajmuje całej szerokości
kolumny):
auto – dziedziczenie od rodzica
flex-start lub start lub self-start - wyrównanie do początku linii (dla języka polskiego do góry przy rozmieszczaniu
wierszami, do lewej strony przy rozmieszczaniu kolumnami)
flex-end lub end lub self-end – wyrównanie od końca linii (dla języka polskiego do dołu przy rozmieszczaniu wierszami,
do prawej strony przy rozmieszczaniu kolumnami)
center – ułożenie elementów na środku
stretch lub normal – rozciąganie elementów by dopasować ich rozmiar do kontenera
safe – używanie w połączeniu z innymi wartościami powyżej (np. safe center). W przypadku gdyby miało dojść do
przepełnienia w wyniku którego część któregoś z elementów nie mogłaby być wyświetlona, to wówczas zostanie użyte
wyrównanie start.
unsafe - przeciwieństwo safe: nawet jeśli miałoby dojść do przepełnienia i obcięcia części treści, wyrównanie zostanie
wykonane zgodnie z wartością podaną po unsafe.
baseline, first baseline, last baseline – wyrównanie do odpowiedniej linii bazowej: linia bazowa elementu jest
wyrównywana z linią bazową całej grupy, do której element należy. baseline lub first baseline oznaczają pierwszą linię
bazową, last baseline oznacza ostatnią linię bazową. Linia bazowa to linia, w której jest wyświetlany tekst (oznaczona
czerwony kolorem na poniższym przykładzie).
Elastyczne ułożenie elementów – align-items i align-self 2/2
• align-content - działa w sposób podobny do justify-content, ale dotyczy całych linii, a nie
pojedynczych elementów (dzieci). jak układać linie w kontenerze, jeśli jest w nim wiele linii i
pozostaje wolna przestrzeń. Wartości przyjmuje takie jak justify-content.
Wizualizacja niektórych wartości właściwości align-content wg specyfikacji W3C – elementy
są oznaczone kolorami, wolna przestrzeń kolorem szarym.
Elastyczny kontener – przykład: HTML
<body>
<main>
<article>
<h1>Bocian Biały</h1>
<img src="https://upload.wikimedia.org/wikiped..." alt="Bocian biały">
<p>Gatunek dużego ptaka brodzącego z rodziny bocianów (Ciconiidae)</p>
</article>
<article class="wazne">
<h1>Bocian czarny</h1>
<img src="https://upload.wikimedia.org/wikiped... " alt="Bocian czarny">
<p>Gwarowo: hajstra (Ciconia nigra) – gatunek dużego ptaka ...</p>
</article>
<article>
<h1>Bocian czaronodzioby</h1>
<img src="https://upload.wikimedia.org/wi..." alt="Bocian czarnodzioby">
<p>Bocian czarnodzioby (Ciconia boyciana) – gatunek dużego ...</p>
<p>Od bociana białego różni się czarnym dziobem i czerwoną ...</p>
</article>
<!-- i tak dalej ...-->
</main>
</body>
Elastyczny kontener – przykład: CSS
html { font-size: 14px; /*rozmiar czcionki*/ }
main {
display: flex; /* stworzenie kontenera flex - dzieci main podlegają układaniu liniami*/
flex-direction:row;/*układanie wierszami*/flex-wrap:wrap;/*dopuszczalnych jest wiele wierszy*/
justify-content: space-between; /*gdyby zostało wolne miejsce w poziomie między dziećmi, to
rozłożenie tego miejsca równo między dziećmi*/
align-items: stretch; /*jeśli wymiary dzieci w pionie nie są równe, to rozciągnięcie
elementów, aby wszystkie dzieci w wierszu miały taką samą wysokość*/
align-content: flex-start; /*wyrównanie treści elementów do góry*/
border: 1px solid black; /*krawędź*/ padding: 10px; /*odstępy*/
margin: 10px auto; /*marginesy pionowe 10px, poziome automatyczne, czyli wyśrodkowanie*/ }
article {
flex: 1 1 25vw; /*ustawia kolejno flex-grow (możliwość powiększania wymiaru) - współczynnik 1
(nie powiększa wymiaru), flex-shink (możliwość pomniejszania) - współczynnik 1 – nie pomniejsza
wymiaru, oraz flex-basis (rozmiar pożądany) - 25vw to będzie 25% szerokości okna przeglądarki*/
border: 1px dotted darkblue; /*krawędź*/
min-width: 280px; /*szerokość co najmniej 280px */ padding: 10px; /*odstępy*/ }
.wazne {
flex: 2 1 40vw; /*jeśli miejsce pozwala, to ten element może być 2 razy szerszy niż
rodzeństwo, nie powinien być pomniejszany, a jego pożądana szerokość to 40% okna przeglądarki*/
order: -1; /*ten element będzie wyświetlany przed wszystkimi innymi*/ }
img { width: 20vw; /*grafika powinna mieć szerokość równą 20% szerokości przeglądarki*/ }
Elastyczny kontener – przykład: efekt
Efekt dla dużego ekranu (1280px) Efekt dla Galaxy S9 (360px x740px)
Przykład układu elementów flex trudny do osiągnięcia w Przykład układu elementów grid trudny do osiągniecia
kontenerach grid w kontenerach flex
Siatka grid 2/3
Siatka w całości (brak definicji) lub częściowo (powyższe definicje nie wystarczają by
rozmieścić w kontenerze wszystkie jego dzieci) może być generowana automatycznie
na podstawie zawartości. Wówczas przydatne są następujące właściwości:
grid-auto-columns – określenie wymiarów kolumn
grid-auto-rows – określenie wymiarów wierszy
grid-auto-flow – wskazanie jak ma zachowywać się algorytm tworzący siatkę
automatycznie:
row – dokładanie do siatki wierszy (tak siatka działa domyślnie)
colum – dokładanie do siatki kolumn
dense – słowo kluczowe występujące przed row lub column, które oznacza że
przed dokładaniem dodatkowych wierszy lub kolumn, algorytm ma wypełnić
elementami ewentualne wolne miejsca w siatce nie wypełnione jeszcze przez
żadne elementy.
Przykłady definicji siatek - HTML
<body>
<main>
<article>
<h2>Jeden</h2>
</article>
<article class="wazne">
<h2>Dwa</h2>
</article>
<article>
<h2>Trzy</h2>
</article>
<article>
<h2>Cztery</h2>
</article>
<!-- i tak dalej ...-->
<article>
<h2>Piętnaście</h2>
</article>
</main>
</body>
Przykłady definicji siatek – CSS 1/7
brak siatki
main { siatka automatyczna
background-color: lightgoldenrodyellow; (domyślnie elementy rozłożone w wierszach)
border: 1px solid blue; main {
} background-color: lightgoldenrodyellow;
article { border: 1px solid blue;
background-color: lightcyan; display: grid;
border: 1px solid black; }
}
Przykłady definicji siatek – CSS 2/7
main {
background-color: lightgoldenrodyellow;
border: 1px solid blue;
display: grid;
grid-template-columns: repeat(6, 130px); /* stworzenie 6ciu kolumn*/
grid-template-rows: repeat(3, 90px); /*stworzenie 3 wierszy 90px*/
row-gap: 40px; /*przerwa między wierszami*/
column-gap: 10px; /*przerwa między kolumnami*/
}
article {
background-color: lightcyan;
border: 1px solid black;
}
Kierunek siatki
• Kierunek siatki zależy od języka – dla języków pisanych od lewej do prawej zachowanie
elementów jest takie jak opisano w tym kursie. Jednak istnieją języki pisane od góry do dołu,
gdzie znaczenie pojęć wiersz i kolumna nie odpowiada temu znanemu z języków
europejskich. Zamiast słowa wiersz właściwszym byłoby więc użycie pojęcia „inline” –
oznaczającego kierunek rozkładania tekstu, a zamiast słowa kolumna użycie pojęcia „block” –
oznaczającego kierunek rozkładania bloków. Dla większości języków odpowiada to jednak
pojęciom wiersz i kolumna użytym w tym kursie.
• Kierunek siatki można zmienić używając właściwości writing-mode. Najważniejsze
wartości:
horizontal-tb – elementy są układane poziomo od lewej do prawej i od góry w dół.
vertical-rl – elementy są układane od góry do dołu, a w poziomie od prawej do lewej
vertical-lr – elementy są układane od góry do dołu, a w poziomie od lewej do prawej
Przykład zmiany kierunku siatki - HTML
<body>
<main>
<article>
<h2>Jeden</h2>
</article>
<article class="wazne">
<h2>Dwa</h2>
</article>
<article>
<h2>Trzy</h2>
</article>
<article>
<h2>Cztery</h2>
</article>
<!-- i tak dalej ...-->
<article>
<h2>Piętnaście</h2>
</article>
</main>
</body>
Wyrównanie całej siatki i jej dzieci
main {
background-color: lightgoldenrodyellow;
border: 1px solid blue;
display: grid;
grid-template-columns: repeat(6, 130px); /* stworzenie
6ciu kolumn*/
grid-template-rows: repeat(3, 90px); /*stworzenie 3
wierszy 90px*/
row-gap: 40px; /*przerwa między wierszami*/
column-gap: 10px; /*przerwa między kolumnami*/
writing-mode: vertical-lr; /* siatka w pionie, tekst od
lewej do prawej*/
}
article {
background-color: lightcyan;
border: 1px solid black;
}
Siatka grid – przykład responsywnego układu: HTML
<body>
<main>
<article>
<h1>Bocian Biały</h1>
<img src="https://upload.wikimedia.org/wikiped..." alt="Bocian biały">
<p>Gatunek dużego ptaka brodzącego z rodziny bocianów (Ciconiidae)</p>
</article>
<article class="wazne">
<h1>Bocian czarny</h1>
<img src="https://upload.wikimedia.org/wikiped... " alt="Bocian czarny">
<p>Gwarowo: hajstra (Ciconia nigra) – gatunek dużego ptaka ...</p>
</article>
<article>
<h1>Bocian czaronodzioby</h1>
<img src="https://upload.wikimedia.org/wi..." alt="Bocian czarnodzioby">
<p>Bocian czarnodzioby (Ciconia boyciana) – gatunek dużego ...</p>
<p>Od bociana białego różni się czarnym dziobem i czerwoną ...</p>
</article>
<!-- i tak dalej ...-->
</main>
</body>
Siatka grid – przykład responsywnego układu: HTML
<body>
<main>
<article>
<h1>Bocian Biały</h1>
<img src="https://upload.wikimedia.org/wikiped..." alt="Bocian biały">
<p>Gatunek dużego ptaka brodzącego z rodziny bocianów (Ciconiidae)</p>
</article>
<article class="wazne">
<h1>Bocian czarny</h1>
<img src="https://upload.wikimedia.org/wikiped... " alt="Bocian czarny">
<p>Gwarowo: hajstra (Ciconia nigra) – gatunek dużego ptaka ...</p>
</article>
<article>
<h1>Bocian czaronodzioby</h1>
<img src="https://upload.wikimedia.org/wi..." alt="Bocian czarnodzioby">
<p>Bocian czarnodzioby (Ciconia boyciana) – gatunek dużego ...</p>
<p>Od bociana białego różni się czarnym dziobem i czerwoną ...</p>
</article>
<!-- i tak dalej ...-->
</main>
</body>
Siatka grid – przykład responsywnego układu: CSS
html {
font-size: 14px; /*rozmiar czcionki*/
}
main {
display: grid; /* utworzenie kontenera grid*/
/* auto-fit: utworzenie tyle kolumn ile jest potrzebne, każda o szer. 1fr*/
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
grid-gap: 1rem; /*odległości między komórkami siatki*/
border: 1px solid black; /*krawędź*/
padding: 10px; /*odstępy*/
}
article {
border: 1px dotted darkblue; /*krawędź*/
min-width: 240px; /*nie mniej niż 280px szerokości*/
padding: 10px; /*odstępy*/
}
.wazne {
order: -1; /*ten element będzie wyświetlany przed wszystkimi innymi*/
}
img { width: 100%; /*grafika powinna mieć szerokość równą 100% dostępnego */ }
Siatka grid – przykład responsywnego układu: Efekt
Efekt dla dużego ekranu (1280px) Efekt dla Galaxy S9 (360x740 px)
• Głównym wyzwaniem przy tworzeniu układu strony jest umieszczenie elementów obok siebie, a nie jeden pod
drugim.
• Podejście do tworzenia takich układów zmieniało się wraz z rozwojem technologii CSS i możliwościami
przeglądarek.
• Techniki tworzenia układu strony (ustawiania elementów obok siebie), można pogrupować od najstarszych do
najnowszych w następujący sposób:
Wykorzystanie tabel HTML – stosowane w czasach, gdy nie było jeszcze stylów CSS.
Wykorzystanie właściwości float – stosowane do dziś, ale nowocześniejsze metody są wygodniejsze. W metodzie
float aby uzyskać pożądany rezultat często trzeba używać nieoczywistych sztuczek.
Wykorzystanie właściwości display: inline-block lub inline-table (umożliwiają ustawianie elementów blokowych
obok siebie) – stosowane do dziś, jako mniej problematyczne niż float, jednak nowocześniejsze metody są
wygodniejsze.
Wykorzystanie elastycznych kontenerów flex (display: flex)
• Wykorzystanie siatki grid (display: grid) – co do zasady najwygodniejszy ze wszystkich sposobów.
CSS – widoczność
<!doctype html>
<html lang="pl">
<head>
<meta charset="UTF-8" />
<title>Obraz tła</title>
<link href="h280.css" rel="stylesheet">
</head>
<body>
<p id="a1">Lorem ipsum dolor sit amet, consectetur adipisicing elit...</p>
<p id="a2">Lorem ipsum dolor sit amet, consectetur adipisicing elit. ...</p>
</body>
</html>
Grafika tła – przykład: CSS
p {
background-image: url('grafika/css.png'); /*dołączenie pliku*/
background-repeat: no-repeat; /*zakaz powtarzania grafiki*/
width: 300px;
border-width: 30px;
border-style: dotted;
border-color: red;
padding: 30px;
}
#a1 {
background-size: 80px 100px; /*wymiar grafiki*/
background-origin: content-box; /*wyświetlanie w miejscu
przeznacznonym na zawartość*/
}
#a2 {
background-origin: border-box; /*rozpoczęcie wyświetlania
w miejscu przeznaczonym na krawędź*/
background-clip: content-box; /*obcięcie części grafiki
znajdującej się poza miejscem przeznaczonym na zawartość*/
}
592 – Listy i grafika tła: efekt
592 – Listy i grafika
1. Zapisz style.html pod nazwą 592.html. Stwórz nowy plik 592.css i dołącz go do html
modyfikując element <link>. W pliku css dodaj reguły dla poniższych klas
2. .dokument ustaw rozmiar czcionki na 20px (font-size), kolor tła (background-color) na
snow, kolor tekstu (color) na black, marginesy (margin) i odstępy (padding) na 0px
3. .lista - ustaw typ listy (list-style-type), tak aby jej elementy były numerowane jako małe
rzymskie liczby (lower-roman)
4. .naglowek - ustaw jako tło kolor whitesmoke oraz grafikę Plemiona.png z plików
startowych (background-image: url(…)), aby znalazła się w prawym dolnym rogu
(background-position: right bottom). Grafika ma mieć określony rozmiar: (background-
size: 390px 390px). Jej wyświetlanie ma rozpoczynać się w miejscu na krawędź
(background-origin: border-box), ale ma być wyświetlany tylko fragment w obszarze
treści (background-clip: content-box). Grafika ma się przewijać razem z elementem
(bacground-attachment: scroll). Plik ma być wyświetlony tylko 1 raz (background-repeat:
no-repeat). Dodaj odstęp (padding) 20px oraz krawędź border: 30px ridge brown;
5. .tresc - ustaw tło - grafikę gradient-poziomy.png i wymuś powtarzanie w pionie (repeat-y)
6. .aside- ustaw tło - grafikę gradient-pionowy.png i wymuś powtarzanie w poziomie
7. Przetestuj stronę w 2 przeglądarkach. Co się stanie gdy zmienisz background-attachment
ze scroll na fixed?
8. Sprawdź poprawność kodu CSS pod adresem http://jigsaw.w3.org/css-validator
Czcionki
• Rodziny czcionek
• font-family – definiuje rodziny czcionek (określonych lub generycznych), które należy
wykorzystać. Jeśli podana czcionka nie istnieje w systemie użytkownika, przeglądarka
próbuje wykorzystać kolejną z listy. W wartości do oddzielenia czcionek używa się przecinka:
np.: body { font-family: Gill, Helvetica, sans-serif }.
• Czcionki określone – konkretna czcionka, np. Helvetica.
• Czcionki generyczne
• Czcionek generycznych nie wolno zamieszczać w cudzysłowie, ponieważ są to słowa
kluczowe:
• serif – czcionki szeryfowe – z poprzecznymi lub ukośnymi ogonkami, zawijasami (np.
Times);
• sans-serif – czcionki bezszeryfowe – bez dodatkowych elementów wykańczających (np.
Helvetica);
• cursive – czcionki odręczne – naśladują odręczne pismo
(np. Zapf-Chancery);
• fantasy – czcionki fantazyjne – stosują wymyślne metody dekorowania liter (np. Western);
• monospace – czcionki nieproporcjonalne (lub czcionki stałej szerokości) – każdy znak
zajmuje tyle samo miejsca (np. Courier).
• system-ui – czcionka odpowiada domyślnej czcionce w danym systemie operacyjnym.
Style czcionek
1. Zapisz style.html pod nazwą 612.html. Stwórz nowy plik 612.css i dołącz go do
html modyfikując element <link>. W pliku css dodaj reguły dla poniższych klas
2. .dokument ustaw rozmiar czcionki na 20px (font-size), kolor tła (background-color)
na snow, kolor tekstu (color) na black, marginesy (margin) i odstępy (padding) na
0px
3. Dla kolejnych klas ustaw następujące czcionki (generyczne) używając właściwości:
font-family, font-style, font-weight i font-size:
4. .naglowek – czcionka szeryfowa (serif), pochylona (oblique), o grubości 100,
rozmiar podwójna wysokość litery x: 2ex
5. .tresc – czcionka bezszeryfowa (sans-serif), kursywa (italic), o grubości 400,
rozmiar medium
6. .aside – czcionka odręczna (cursive), normalna (normal), o grubości 600, rozmiar
x-large
7. .stopka – czcionka nieproporcjonalna (monospace), normalna (normal) o grubości
900, rozmiar larger
8. Przetestuj stronę w 2 przeglądarkach
9. Sprawdź poprawność kodu CSS pod adresem http://jigsaw.w3.org/css-validator
Własne czcionki
• CSS daje twórcom witryn pełną kontrolę nad wyglądem tekstu poprzez możliwość
definiowania własnych czcionek. Służy do tego reguła @font-face
• Popularne formaty czcionek:
Web Open Font Format – .woff,
TrueType – .ttf,
OpenType – .ttf, .otf,
Embedded OpenType – .eot,
SVG Font – .svg, .svgz.
• Własne czcionki:
• Przykładowy serwis z czcionkami (także darmowymi): http://www.fontsquirrel.com.
• Podczas ściągania/zakupu upewnij się, że otrzymujesz licencję na używanie czcionek
w Internecie (często na używanie czcionki w Internecie wymagana jest oddzielna
licencja).
• Upewnij się, że czcionka obsługuje polskie litery (niestety wiele czcionek obsługuje
jedynie litery anglosaskie).
Własna czcionka - przykład
<!doctype html>
<html lang="pl">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="465_font-face.css">
<title>Czcionka</title> @font-face {
</head> font-family: "czcionka";
<body> src: url("font.ttf");
<p> }
Trudna do czytania czcionka p {
</p> font-family: czcionka;
font-size: 60px;
</body> }
</html>
622 – Własne czcionki: efekt
622 – Własne czcionki
p {
font-size: 30px;
overflow-wrap:break-word; /*zezwolenie na łamanie tekstu w
środku słowa*/
text-align:justify; /*justyfikacja tekstu*/
text-justify:inter-word; /*powiększenie przestrzeni między
słowami aby dokonać justyfikacji*/ }
.obcinaj {
white-space:nowrap; /*zakaz znaków łamania linii*/
width:12em; border:1px solid #000000;
overflow:hidden; /*ukrywanie tekstu który wykracza poza obszar*/
text-overflow:ellipsis; /*jeśli tekst się nie mieści, to w miejscu gdzie
się kończy miejsce, zostaną wyświetlone trzy kropki ...*/ }
Tekst: dekoracje, transformacje
• text-decoration – zapis skrócony dla następujących właściwości szczegółowych:
text-decoration-line – sposoby wyróżniania tekstu przy użyciu linii takie jak na przykład
podkreślenie, linia nad tekstem, przekreślenie.
text-decoration-color – ustalenie koloru dekoracji (na przykład podkreślenia)
text-decoration-style – uszczegóławia styl dekoracji wprowadzonej przy pomocy text-
decoration-line. Można min. określić czy linia ma być ciągła, przerywana czy kreskowana.
Szczegółowy opis właściwości i wartości z wiązanych z dekorowaniem można znaleźć pod tym
linkiem: https://developer.mozilla.org/en-US/docs/Web/CSS/text-decoration
Niektóre wartości:
underline – podkreślenie tekstu;
overline – linia nad tekstem;
line-through – tekst przekreślony;
blink – tekst miga (na zmianę znika i pojawia się);
• text-transform – przekształcenia tekstu – drukowane i zwykłe litery. Ważniejsze wartości:
• uppercase – używane są drukowane litery;
• capitalize – pierwsza litera każdego wyrazu jest zastępowana literą drukowaną;
• lowercase – używane są małe litery;
• none – brak przekształcenia tekstu;
Tekst: odstępy
• letter-spacing – odstępy między literami:
normal – domyślne odstępy dla czcionki;
długość – (np. px) – określa dodatkowy odstęp dodany
do domyślnego (wartość może być ujemna – wtedy litery będą gęściej upakowane);
• word-spacing – odstępy między słowami:
• normal – domyślne odstępy dla czcionki;
• długość – (np. px) – określa dodatkowy odstęp dodany
do domyślnego (wartość może być ujemna);
• line-height – wysokość linii w bloku:
liczba (mnożnik * wielkość czcionki), długość (np. px), procenty, normal.
• white-space – określa zachowanie niewidocznych znaków (np. spacji, tabulacji):
normal – zastępowanie ciągów niewidocznych znaków jednym znakiem; znaki łamania linii w tekście
źródłowym są ignorowane, linie są łamane według ograniczeń miejsca wyświetlania;
pre – wyłącza zastępowanie niewidocznych znaków jednym; linie są łamane jedynie, jeśli znak łamania linii
wystąpi w tekście źródłowym;
nowrap – to samo co normal, ale w ogóle nie łamie linii;
pre-wrap – to samo co pre, ale dodatkowo linie mogą być łamane
tak jak w normal (tj. według ograniczeń miejsca wyświetlania tekstu);
pre-line – niewidoczne znaki są zastępowane jednym; linie są łamane, jeśli znak łamania linii wystąpi w tekście
źródłowym lub zgodnie
z ograniczeniami miejsca wyświetlania tekstu;
Kierunek tekstu
1. Zapisz style.html pod nazwą 642.html. Stwórz nowy plik 642.css i dołącz go do html
modyfikując element <link>. W pliku css dodaj reguły dla poniższych klas
2. .dokument ustaw rozmiar czcionki na 20px (font-size), kolor tła (background-color) na
snow, kolor tekstu (color) na black, marginesy (margin) i odstępy (padding) na 0px
3. .naglowek – wcięcie pierwszej linii (text-indent): 50px, wyrównanie tekstu (text-align)
do lewej (left), podkreślenie tekstu (text-decoration: underline), wszystkie litery mają
być wyświetlane są jako małe (text-transform: lowercase), ustaw wysokość linii (line-
height) na 150%.
4. .tresc – wcięcie pierwszej linii 100 px, wyrównanie tekstu do obu stron (justify),
odstępy między wyrazami 1,5 razy większe niż normalnie (word-spacing: 1.5),
przekształcenie tekstu na kapitaliki (text-transform: capitalize)
5. .aside – odległość między literami (letter-spacing) równa wysokości litery x (1ex),
wyrównanie tekstu do prawej strony
6. .stopka – odległość między literami 2px, wyśrodkowanie tekstu (center),
przekształcenie tekstu na litery drukowane (text-transform: upperrcase)
7. Przetestuj stronę w 2 przeglądarkach
8. Sprawdź poprawność kodu CSS pod adresem http://jigsaw.w3.org/css-validator
Cieniowanie tekstu
p {
padding: 20px;
width: 600px;
font-size: 28px;
}
#a1 {
text-shadow: 4px 7px 3px red;
}
#a2 {
color: white;
text-shadow: 0.1em 0.1em 0.1em black;
}
662 – Cień tekstu
1. Zapisz style.html pod nazwą 662.html. Stwórz nowy plik 662.css i dołącz go do
html modyfikując element <link>. W pliku css dodaj reguły dla poniższych klas
2. .dokument ustaw rozmiar czcionki na 20px (font-size), kolor tła (background-color)
na snow, kolor tekstu (color) na black, marginesy (margin) i odstępy (padding) na
0px
3. .article__h2 – ustaw cień tekstu (text-shadow) z przesunięciem w prawo 5px, w
dół 5px, promieniem rozmycia 5px, kolor gray.
4. .article__p – ustaw cień tekstu z przesunięciem w lewo -1px, w górę -1px,
promień rozmycia 3px, kolor red.
5. Przetestuj stronę w 2 przeglądarkach
6. Sprawdź poprawność kodu CSS pod adresem http://jigsaw.w3.org/css-validator
Generowanie treści w CSS
CSS pozwala na generowanie treści:
elementom, które właściwość display mają ustawioną na list-item,
za pomocą właściwości content (w połączeniu z pseudo-elementami ::before i ::after). Do
wygenerowanego pseudo-elementu można zapisać za pomocą content między innymi takie
wartości:
none – treść nie jest generowana,
normal –dla elementów ::before i ::after to samo co none
dowolny ciąg znaków – tekstowa wartość treści która będzie wyświetlana
url – link do zewnętrznego zasobu (np. grafiki). Jeśli nie uda się wyświetlić zasobu, to albo
pseudo-element zostanie pominięty, albo zostanie wyświetlona odpowiednia ikona
informująca o problemie z wyświetleniem.
grafika – może być wskazana np. jako url lub gradient wygenerowany przez CSS.
licznik – licznik zdefiniowany funkcjami counter() lub counters()
attr(atrybut) – funkcja attr pobierze z elementu zawartość atrybutu o zadanej nazwie i
wstawi go jako treść
open-quote – znak otwierający cytat (określony przez właściwość quotes),
close-quote – znak zamykający cytat (określony przez właściwość quotes),
no-open-quote – nie wyświetla zawartości, ale zwiększa liczbę otwartych cytatów,
no-close-quote – nie wyświetla zawartości, ale zmniejsza liczbę otwartych cytatów,
Znak cudzysłów
1. Zapisz style.html pod nazwą 672.html. Stwórz nowy plik 672.css i dołącz go do html
modyfikując element <link>. W pliku css dodaj reguły dla poniższych klas
2. .dokument ustaw rozmiar czcionki na 20px (font-size), kolor tła (background-color) na
snow, kolor tekstu (color) na black, marginesy (margin) i odstępy (padding) na 0px
3. .naglowek - ustaw licznik o nazwie numer-linku na 0: counter-reset: numer-linku 0;
4. .lista__li--linki:before
1. ustaw zwiększanie licznika numer-linku o 1: counter-increment: numer-linku 1.
2. Wyświetl numer-linku, dwukropek i spację: content: counter(numer-linku) ": "
5. .tresc – podobnie jak w klasie .naglowek utwórz licznik o nazwie wladca
6. .article__h2:before
1. podobnie jak w klasie .lista__li--linki:before ustaw zwiększanie licznika wladca oraz
wyświetlanie jego zawartości, jednak tu sformatuj licznik tak, aby wyświetlany był
przy użyciu cyfr rzymskich: counter(wladca, upper-roman).
2. Użyj kropki zamiast dwukropka do oddzielenia wygenerowanej treści od treści
HTML
7. Przetestuj stronę w 2 przeglądarkach
8. Sprawdź poprawność kodu CSS pod adresem http://jigsaw.w3.org/css-validator
Media stronicowane (wydruki)
• Media stronicowane – czyli takie, w których strona nie może być renderowana na 1 egzemplarzu medium (np.
wydruk na drukarce na kilku arkuszach).
• @page określa reguły dla strony (np. wydruku).
• Przy wydrukach dwustronnych możliwe jest, że miejsce na zawartość będzie różne dla lewych i prawych stron. Może
to być uwzględnione poprzez pseudo-klasy @page:left, @page:right.
• Wymuszanie kolejnej strony:
page-break-before – zasady kończenia strony przed elementem,
page-break-after – zasady kończenia strony po elemencie,
page-break-inside – zasady kończenia strony w ramach elementu (tylko avoid, auto lub inherit).
Ważniejsze wartości dla 3 właściwości powyżej:
auto – nie określa zasady,
always – wymusza zakończenie strony,
avoid – nakazuje unikanie zakończenia strony,
left – wymusza takie zakończenie strony, aby była ona drukowana na stronie „lewej” (przy druku
dwustronnym),
right – wymusza takie zakończenie strony, aby była ona drukowana na stronie „prawej” (przy druku
dwustronnym),
inherit – dziedziczenie z elementu nadrzędnego.
• Kończenie stron w ramach elementu:
orphans – określa minimalną liczbę linii elementu, które muszą pozostać na dole strony,
widows – określa minimalną liczbę linii elementu, które muszą pozostać na górze strony.
Kontury
1. Zapisz style.html pod nazwą 682.html. Stwórz nowy plik 682.css i dołącz go do
html modyfikując element <link>. W pliku css dodaj reguły dla poniższych klas
2. .dokument ustaw rozmiar czcionki na 20px (font-size), kolor tła (background-color)
na snow, kolor tekstu (color) na black, marginesy (margin) i odstępy (padding) na
0px
3. .article
1. Ustaw odstępy na 5px a marginesy na 10px.
2. Ustaw krawędź border: 2px solid black.
3. Ustaw kontur na kolor (outline-color) maroon, szerokość (outline-width) 2px i
linię ciągłą (outline-style: solid). Przesuń kontur o 2px względem krawędzi
(outline-offset).
4. Ustaw kursor myszki na celownik (cursor: crosshair).
4. .formularz__pole – ustaw kursor wprowadzania tekstu (caret-color) na red
5. Przetestuj stronę w 2 przeglądarkach. Czy kontur zajmuje miejsce marginesów?
6. Sprawdź poprawność kodu CSS pod adresem http://jigsaw.w3.org/css-validator
Kursor w CSS
• cursor – typ kursora dla urządzenia wskazującego (np. myszki). Można podać kilka typów kursorów
oddzielonych spacjami. Jeśli pierwszy będzie niedostępny dla przeglądarki, spróbuje ona użyć kolejnego.
Ważniejsze wartości:
auto – przeglądarka wybiera kursor w zależności od kontekstu,
crosshair – celownik przypominający +,
default – kursor domyślny (zwykle przypominający strzałkę),
pointer – kursor oznaczający link/odnośnik,
move – kursor oznaczający, że coś można przenieść.
e-resize, ne-resize, nw-resize, n-resize, se-resize, sw-resize, s-resize,
w-resize – kursor oznaczający przemieszczenie krawędzi obiektu (przy skalowaniu), gdzie krawędzie
oznaczone są literami e – wschód (prawa), n – północ (górna), s – południe (dolna), w – zachodnia (lewa), np.
se-resize będzie oznaczało kursor, który pojawia się przy zmianie pozycji dolnego lewego rogu okna.
text – kursor do zaznaczania tekstu.
wait – kursor oznaczający, że przeglądarka jest zajęta (często przypominający klepsydrę).
progress – kursor oznaczający, że przeglądarka coś przetwarza, ale użytkownik może ciągle wydawać kolejne
polecenia.
help – kursor oznaczający, że dla zawartości pod nim dostępna jest pomoc.
url – przeglądarka ma pobrać ikonę kursora spod wskazanego adresu (kursor może być np. w formacie SVG).
Pełną listę wartości i ich wygląd można sprawdzić: https://developer.mozilla.org/en-US/docs/Web/CSS/cursor
• caret-color – kolor kursora przy wprowadzaniu danych (np. do formularza). Np. caret-color: red; użyte w polu
input spowoduje, że kursor wprowadzania danych będzie czerwony:
Przestrzenie nazw (namespaces)
CSS Namespaces to jeden z modułów CSS. Jest stosowany podczas:
formatowania dokumentów XML korzystających z wielu przestrzeni nazw,
wykorzystywania tego samego arkusza stylów do formatowania dokumentów xhtml, w których
zagnieżdżone są też grafiki SVG czy równania MathML (np. niektóre elementy mają te same nazwy w SVG
i w XHTML.). Zarówno SVG jak i MathML są oparte o XML.
/*poniższa reguła dotyczy elementów XHTML - domyślną przestrzenią nazw jest XHTML, a nie
użyto prefiksu przestrzeni nazw*/
a {}
/* poniższa reguła ma zastosowanie tylko dla elementów a języka SVG - svg| dotyczy
przestrzeni nazw svg*/
svg|a {}
/*poniższa reguła ma zastosowanie i dla elementów a języka html i elementów a języka SVG - *
oznacza dowolną przestrzeń nazw*/
*|a {}
Tabele: display i ważniejsze właściwości 1/4
• border-style – niektóre rodzaje ramek mają inne znaczenie dla tabel niż
dla pozostałych elementów. Poniżej tylko te rodzaje ramek, których
wygląd się różni:
hidden – to samo co none, dodatkowo w przypadku border-collapse:
collapse blokuje wyświetlanie ramek pochodzących od innych
elementów (przy rozwiązywaniu konfliktów),
inset – w modelu osobnych ramek dla komórek (border-collapse:
separate) ramka wygląda na wklęsłą, w modelu łączenia ramek (border-
collapse: collapse) zachowuje się jak ridge,
outset – w modelu osobnych ramek dla komórek (border-collapse:
separate) ramka wygląda na wypukłą, w modelu łączenia ramek
(border-collapse: collapse) zachowuje się jak groove.
Tabele – przykład: HTML
<body>
<table> <!-- tabela na całą szerokość -->
<caption>Rasy psów</caption>
<colgroup> <col id="kol1"> <col> <col> </colgroup>
<thead>
<tr> <th>Oryginalna nazwa rasy</th> <th>Nazwa polska</th> <th>Pochodzenie</th> </tr>
</thead>
<tbody>
<tr>
<td lang="de-DE">deutsch Drahthaar</td> <td class="kom1">wyżeł niemiecki szorstkowłosy</td>
<td class="kom2">Niemcy</td>
</tr>
<tr>
<td lang="fr-FR">basset fauve de Bretagne</td><td>basset bretoński</td> <td>Francja</td>
</tr>
</tbody>
<tfoot>
<tr> <th>Podsumowanie:</th> <th>2 rasy</th> <th>2 kraje</th> </tr>
</tfoot>
</table>
</body>
Tabele – przykład: CSS
table {
border-collapse: collapse; /*krawędzie scalone, zamiast odrębnych krawędzi dla sąsiednich
komórek*/
border: 5px solid brown; /*krwędź dla całej tabeli*/ }
#kol1 { border: 3px solid black; } /*krawędź dla kolumny o identyfikatorze #kol1*/
td {
border: 1px solid red; /*krawędź zwykłej komórki*/ padding: 1em; }
th {
border: 2px solid fuchsia; /*krawędź komórki nagłówkowej*/ padding: 1em; }
td.kom1 { border: 5px dashed blue; } /*krawędź komórki o klasie kom1*/
td.kom2 { border: 5px solid green; } /*krawędź komórki o klasie kom2*/
/*tło sekcji tfoot w tabeli*/
tfoot {background-color: lightgray;}
/*tło sekcji thead w tabeli*/
thead {background-color: lightyellow;}
/*tło sekcji tbody w tabeli*/
tbody {background-color: white;}
692 – Krawędzie tabeli: efekt
692 – Krawędzie tabeli
1. Zapisz style.html pod nazwą 692.html. Stwórz nowy plik 692.css i dołącz go do html
modyfikując element <link>. W pliku css dodaj reguły dla poniższych klas
2. .dokument ustaw rozmiar czcionki na 20px (font-size), kolor tła (background-color) na
snow, kolor tekstu (color) na black, marginesy (margin) i odstępy (padding) na 0px
3. .tabela – ustaw scalanie krawędzi komórek (border-collapse: collapse) oraz krawędzie:
1. Górna krawędź tabeli ma być ciągłą (solid) niebieską (blue) linią o grubości 3px
(border-top-width, border-top-style, border-top-color lub border)
2. Prawa krawędź tabeli ma być kropkowaną (dotted) zieloną (green) linią 4px
3. Dolna krawędź tabeli ma być ciągłą (solid) czerwoną (red) linią 5px
4. Lewa krawędź tabeli ma być przerywaną (dashed) szarą (gray) linią 2px
5. .tabela__tr – ustaw aby krawędzie dolna i górna (border-top, border-bottom) były
wyświetlane przerywaną (dashed) niebieską (blue) linią 1px.
4. .tabela__td – ustaw aby krawędzie lewa i prawa (border-left, border-right) nie były
wyświetlane (none). Ustaw odstępy (padding) 5px.
5. .tabela__th – ustaw kolor tła na żółty (yellow)
6. Przetestuj stronę w 2 przeglądarkach
7. Sprawdź poprawność kodu CSS pod adresem http://jigsaw.w3.org/css-validator
Responsywny układ strony
Responsywny układ
strony
Atrybut „media” w HTML
Atrybut media elementu link określa dla jakich typów urządzeń przygotowano arkusz stylów
Przeglądarka wie na jakim urządzniu działa, i wczyta jedynie te arkusze które pasują do urządzenia –
zgodnie wartością atrybutu media
Do CSS 2.1 włącznie dostępne były jedynie poniższe wartości
all - wszystkie dostępne typy z listy poniżej
braille - urządzenia obsługujące język Braille’a
handheld - niewielkie urządzenia przenośne np. PDA
print - drukarki
projection - projektory
screen - ekrany
aural - syntezatory mowy
tty - terminale znakowe
tv – telewizory
<html>
<head>
<link rel="stylesheet" href="arkusz.css" type="text/css" media=”screen”>
</head>
<body>…</body>
</html>
CSS Media Queries
• Media Queries to jeden z zatwierdzonych modułów CSS 3
• Wspierany przez nowe wersje ważniejszych przeglądarek
• Rozszerza możliwości atrybutu media znanego z CSS 2.1 o wstawianie warunków
• Style z przykładów zostaną użyte tylko dla mediów (ekranów, drukarek itp.) które są w stanie
prezentować kolory
<html>
<head>
<title>Tytuł strony</title>
<link rel="stylesheet" type="text/css" href="/style.css" media="all and (color)">
</head>
<body> … </body>
</html>
<html>
<head>
<title>Tytuł strony</title>
<link rel="stylesheet" media="screen and (color)" href="a.css" />
<link rel="stylesheet" type="text/css" href="b.css" media="all and (color)">
<link rel="stylesheet" media="not screen and (color)" href="c.css" />
<link rel="stylesheet" media="only screen and (color)" href="d.css" />
<link rel="stylesheet" media="print and (min-width: 25cm)" href="e.css" />
<link rel="stylesheet" media="screen and (device-height: 600px)" href="f.css"
/>
<link rel="stylesheet" media="all and (min-color-index: 256)" href="g.css" />
<link rel="stylesheet" media="print and (color)" href="h.css" />
<link rel="stylesheet" media="print and (monochrome)" href="i.css" />
</head>
<body> … </body>
</html>
Media queries – przykład użycia w CSS 1/2
Naciśnięcie
tabulatora
730 – Emmet
nav {
ul {
margin: 0; arkusz.css (po skompilowaniu)
padding: 0; nav ul {
list-style: none; margin: 0;
} padding: 0;
list-style: none;
li { }
display: inline-block; nav li {
} display: inline-block;
}
a { nav a {
display: block; display: block;
padding: 6px 12px; padding: 6px 12px;
text-decoration: none; text-decoration: none;
}
} }
Scss – pliki z fragmentami kodu
Pliki z fragmentami kodu (tzw. partials) – można tworzyć pliki z fragmentami kodu które można
potem wielokrotnie wykorzystywać w innych miejscach. Pozwala to zredukować ilość tworzonego kodu.
Nazwy plików z fragmentami kodu rozpoczynają się od podkreślenia, a dołącza się je za pomocą
instrukcji @import – (nie trzeba podawać pełnej nazwy pliku: pomija się początkowe podkreślenie i
rozszerzenie pliku)
_reset.scss arkusz.css (po skompilowaniu)
// _reset.scss html,
html, body,
body, ul,
ul, ol {
ol { margin: 0;
margin: 0; padding: 0;
padding: 0; }
} body {
font: 100% Helvetica, sans-serif;
arkusz.scss
@import 'reset'; background-color: #efefef;
body { }
font: 100% Helvetica, sans-serif;
background-color: #efefef;
}
Scss - Fragmenty kodu z parametrami (tzw. mixins)
Fragmenty kodu z parametrami (tzw. mixins). Przydatne na przykład w sytuacji, gdzie trzeba dodawać
oprócz właściwości CSS także jej warianty z prefiksami specyficznymi dla poszczególnych przeglądarek.
Definicja takiego fragmentu rozpoczyna się od słowa @mixin, a przy użyciu używa się słowa @include.
Fragmenty kodu które mogą być dziedziczone przez inne fragmenty kodu. Kod
który może być dziedziczony oznacza się znakiem procent - %.
arkusz.scss
%krawedz-i-odstepy {
border: 1px solid #ccc;
padding: 10px;
color: #333;
} arkusz.css (po skompilowaniu)
.ostrzezenie { .ostrzezenie, .sukces, .blad {
@extend %krawedz-i-odstepy; border: 1px solid #ccc;
} padding: 10px;
.sukces { color: #333;
@extend %krawedz-i-odstepy; }
border-color: green; .sukces {
} border-color: green;
.blad { }
@extend %krawedz-i-odstepy; .blad {
border-color: red; border-color: red;
} }
Scss - operatory
Operatory, działania matematyczne i pętle: możliwe jest dokonywanie obliczeń
• Elementy które mają znaleźć się w tym samym wierszu należy zamknąć w rodzicu z
ustawioną klasą „row”.
• Punkty przełamania (szerokości ekranu) przy których Bootstrap przechodzi do innego układu
witryny, uzależnionego od użytej klasy:
Urządzenia małe, to te, które, mają szerokość ekranu mniejszą niż 576px.
Urządzenia bardzo duże to te, które mają szerokość ekranu większą niż 1200px
• Pomiędzy są jeszcze 2 kolejne punkty przełamania.
Bootstrap – klasy .col-
• W zależności od tego, dla jakiego rozmiaru ekranu przewidujemy dany układ treści,
używamy odpowiedniej klasy col-nn lub col-xx-nn. Dla danego elementu możemy
równocześnie użyć wielu klas, określając różny układ dla różnych rozmiarów ekranów.
• Witryna z której można ściągnąć framework i zapoznać się z dokumentacją:
https://getbootstrap.com
Bootstrap – przykłady układów 1/?2
• Elementy które powinny znajdować się w tym samym wierszu zamyka się w klasie row
• 3 równe kolumny dla małych lub większych ekranów (klasa col-sm). Dla bardzo małych ekranów
elementy będą wyświetlać się jeden pod drugim
Bootstrap – przykłady układów 2/2
W pierwszym wierszu 4 równe kolumny, w drugim wierszu 2 kolumny, jedna o szerokości 8/12, druga o
szerokości 4/12. Układ będzie zachowany nawet dla urządzeń z bardzo małymi ekranami (klasa col)
Bootstrap – przykład układu responsywnego 1/2
• Układ będzie zachowywać się inaczej dla urządzeń z bardzo małą szerokością ekranami
(klasy col) a inaczej dla urządzeń ze średnią szerokością ekranu (klasy col-md).
Dla średnich i większych ekranów (klasy col-md-nn)
W pierwszym wierszu, pierwszy element wyświetli się na 8/12 dostępnego miejsca a
drugi na 4/12 miejsca
W drugim wierszu wszystkie 3 elementy będą miały taką samą szerokość
W trzecim wierszu oba elementy zajmą po połowie miejsca.
Dla bardzo małych ekranów (klasy col):
Pierwszy element z pierwszego wiersza wyświetli się na całą szerokość (col-12). Przez
to drugi element z pierwszego wiersza się nie zmieści i przez to zostanie wyświetlony
poniżej, na połowę dostępnej szerokości (col-6)
W drugim wierszu zmieszczą się tylko 2 z 3 elementów (oba zostaną wyświetlone na
połowę dostępnej szerokości – col-6). Trzeci element się nie zmieści i zostanie
wyświetlony poniżej na połowę szerokości (col-6)
W trzecim wierszu oba elementy zajmą po połowie miejsca.
Bootstrap – przykład układu responsywnego 2/2
Bootstrap – przykład: HTML 1/2
<!doctype html> <html lang="pl"> <head> <meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<link rel="stylesheet" <!-- Bootstrap CSS -->
href="https://stackpath.bootstrapcdn.com/bootstrap/4.2.1/css/bootstrap.min.css"
integrity="sha384-GJzZqFGwb1QTTN6wy59ffF1BuGJpLSa9DkKMp0DgiMDm4..." crossorigin="anonymous">
<title>Bociany</title> </head> <body>
<main class="container-fluid">
<section class="row">
<article class="col-12 col-md-3 col-xl-5 order-2 bg-secondary"> <h1>Bocian Biały</h1>
<img class="img-fluid" src="https://upload.wikimedia.org/wikipedia... " alt="Bocian biały">
<p>Gatunek dużego ptaka brodzącego z rodziny bocianów (Ciconiidae) ...</p> </article>
<article class="col-12 col-md-9 col-xl-7 order-1 wazne bg-primary">
<h1>Bocian czarny</h1>
<img class="img-fluid " src="https://upload.wikimedia.org/wikipe...jpg" alt="Bocian czarny">
<p>Gwarowo: hajstra (Ciconia nigra) – gatunek dużego ptaka z rodziny ... </p> </article>
</section>
<section class="row ">
<article class="col-6 col-sm-12 col-xl-6 bg-success"> <h1>Bocian czaronodzioby</h1>
<img class="img-fluid float-left m-2„ src="https://upload.... " alt="Bocian czarnodzioby">
<p>Bocian czarnodzioby (Ciconia boyciana) – gatunek dużego ...</p> </article>
Bootstrap – przykład: HTML 2/2
<article class="col-6 cols-sm-6 col-xl-3 bg-danger"> <h1>Bocian białobrzuchy</h1>
<img class="img-fluid " src="https://upload.wikimedia.org/w..." alt="Bocian białobrzuchy">
<p>Gatunek dużego ptaka brodzącego z rodziny bocianów występuj...</p></article>
<article class="col-12 col-sm-6 col-xl-3 bg-warning">
<h1>Bocian białoszyi</h1>
<img class="img-fluid " src="https://upload.wikimedia.org..." alt="Bocian białoszyi">
<p>Gatunek ptaka z rodziny bocianów (Ciconidae) z błyszczącym,...</p></article>
</section><section class="row">
<article class="col-10 col-sm-6 col-xl-4 bg-info"> <h1>Bocian garbaty</h1>
<img class="img-fluid float-left m-2" src="https://upload.wikime..." alt="Bocian garbaty">
<p>gatunek dużego ptaka z rodziny bocianów (Ciconiidae)... </p> </article>
<article class="col-12 col-sm-6 col-xl-8 bg-dark"> <h1>Bocian sinodzioby</h1>
<img class="img-fluid float-left" src="https://upload.wikime..." alt="Bocian sinodzioby">
<p>gatunek dużego ptaka z rodziny bocianów (Ciconiidae) z pros...</p></article>
</section> </main><!--Optional JavaScript jQuery first, then Popper.js, then Bootstrap JS -->
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-
q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4Y..." crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.6/umd/popper.min.js"
integrity="sha384-wHAiFfRlMFy6i5SRaxvfOCifBUQy1xHdJ/yoi7..." crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.2.1/js/bootstrap.min.js"
integrity="sha384-B0UglyR+jN6CkvvICOB2joaf5I4l3gm9GU6Hc1..." crossorigin="anonymous"></script>
</body></html>
Bootstrap – przykład: efekt
Efekt dla dużego ekranu (1280px) Efekt dla iPada. (768x1024) px
1. Plik z ćw. 775 zapisz pod nazwą 780.html i dostosuj dodając dodatkowe klasy:
1. Wewnątrz elementu <header> dla elementu <h1> dodaj klasę col-md-4 a dla
elementu <p> klasę col-md-8. Elementowi <nav> dodaj taką klasę, aby wyświetlał się
na całą szerokość dla bardzo małych, małych i średnich urządzeń.
2. Artykuły <article> wyświetlają się w 6ciu równych kolumnach dla bardzo dużych
urządzeń. Dla mniejszych urządzeń wyświetlają się jeden pod drugim. Dodaj odpowiednie
klasy, aby dla dużych urządzeń wyświetlany były 4 artykuły obok siebie, dla średnich
urządzeń 3 artykuły obok siebie a dla małych urządzeń 2 artykuły obok siebie. Dla
bardzo małych urządzeń artykuły mają wyświetlać się jeden pod drugim.
3. Dla elementu <table> dodaj klasy które poprawią wygląd tabeli: table-striped
(wyróżnianie co drugiego wiersza), table-dark (ciemny motyw) oraz table-hover
(wyróżnianie wiersza nad którym jest kursor)
4. Dla etykiet formularza <label> dodaj klasę form-text a dla pól formularza <input>
dodaj klasę form-control – pola będą wyświetlane pod etykietami.
5. Ustaw kolory tła wyróżniające sekcje dokumentu: dla <header> dodaj bg-warning, dla
<main> dodaj bg-light a dla <footer> dodaj bg-secondary.
6. Sprawdź wygląd witryny w 2 przeglądarkach. Co się dzieje gdy zmniejszysz szerokość
okna przeglądarki?
lorem ipsum
Efekty
wizualne
Gradienty
img {
max-height: 60px; float: left; margin: 5px; }
article { color: white; margin: 10px; }
article:first-of-type { /*od lewej do prawej */
background: -webkit-linear-gradient(left, red, blue); /* dla starego Safari*/
background: -o-linear-gradient(right, red, blue); /* dla starych Oper */
background: -moz-linear-gradient(right, red, blue); /* dla starych Firefox */
background: linear-gradient(to right, red, blue);
}
article:nth-of-type(2) { /* skośny do dolnego prawego rogu*/
background: linear-gradient(to bottom right, red, blue);
}
article:nth-of-type(3) { /* określenie własnego kąta*/
background: linear-gradient(60deg, red, blue);
}
article:nth-of-type(4) { /*od lewej do prawej, kilka kolorów*/
background: linear-gradient(to right, red, orange, yellow, green, blue, indigo, violet);
}
Gradient kołowy - przykład
img {
max-height: 60px; /*maksymalna wysokość grafiki*/
float: left; /*wyrównanie z lewej i opływanie z prawej*/
margin: 5px; /*marginesy*/
}
article { color: white; /*kolor tekstu*/ margin: 10px; /*margines 10px*/ }
article:first-of-type { /*kołowy */
background: -webkit-radial-gradient(red, green, blue); /* stare Safari */
background: -o-radial-gradient(red, green, blue); /* stare Opery */
background: -moz-radial-gradient(red, green, blue); /* stare Firefox */
background: radial-gradient(circle, red, green, blue);
}
article:nth-of-type(2) { /* nieproporcjonalny podział kolorów*/
background: radial-gradient(circle, red 7%, green 17%, blue 65%);
}
article:nth-of-type(3) { /* elitpyczny */
background: radial-gradient(ellipse, red, green, blue);
}
article:nth-of-type(4) { /* wiele kolorów */
background: radial-gradient(red, green, blue, purple, red, gray);
}
Przykład gradientu z określoną pozycją środka
img {
max-height: 60px; /*maksymalna wysokość grafiki*/
float: left; /*wyrównanie z lewej i opływanie z prawej*/
margin: 5px; /*marginesy*/
}
article { color: white; /*kolor tekstu*/ margin: 10px; /*margines 10px*/ }
article:first-of-type { /* rozmiar do najbliższego brzegu*/
background: radial-gradient(circle closest-side at 30% 30%, red, green, blue);
}
article:nth-of-type(2) { /* rozmiar do najdalszego brzegu */
background: radial-gradient(circle farthest-side at 30% 30%, red, green, blue);
}
article:nth-of-type(3) { /* rozmiar do najbliższego rogu */
background: radial-gradient(circle closest-corner at 30% 30%, red, green, blue);
}
article:nth-of-type(4) { /* rozmiar do najdalszego rogu */
background: radial-gradient(circle farthest-corner at 30% 30%, red, green, blue);
}
Przykład gradientu z powtarzaniem
img {
max-height: 60px; /*maksymalna wysokość grafiki*/
float: left; /*wyrównanie z lewej i opływanie z prawej*/
margin: 5px; /*marginesy*/
}
article {
color: white; /*kolor tekstu*/
margin: 10px; /*margines 10px*/
}
article:first-of-type { /* powtarzanie gradientu liniowego*/
background: repeating-linear-gradient(red, yellow 10%, green 20%);
}
article:nth-of-type(2) { /* powtarzanie gradientu kołowego*/
background: repeating-radial-gradient(red, yellow 10%, green 15%);
}
802 – Gradienty: efekt
802 – Gradienty
1. Zapisz style.html pod nazwą 802.html. Stwórz nowy plik 802.css i dołącz go do html
modyfikując element <link>. W pliku css dodaj reguły dla poniższych klas
2. .dokument ustaw rozmiar czcionki na 20px (font-size), kolor tła (background-color) na
snow, kolor tekstu (color) na black, marginesy (margin) i odstępy (padding) na 0px
3. .article – ustaw jako tło (background) gradient liniowy (linear-gradient()) od lewej do
prawej (to right) składający się z kolorów white 30% oraz red
4. naglowek – ustaw jako tło (background) gradient kołowy (radial-gradient()) w formie koła
(circle) o rozmiarze wynikającym z odległości do najbliższego rogu (closest-corner) z
centrum w 80% szerokości i 65% wysokości (at 80% 65%) w kolorach red i white
5. .table – ustaw jako tło (background) powtarzalny gradient liniowy (repeating-linear-
gradient()) o kącie minus 45 stopni (-45 deg) składający się z kolorów white , red 10% i
white 10%
6. stopka – ustaw jako tło (background) powtarzalny gradient kołowy (repeating-radial-
gradient()) w formie koła (circle) o rozmiarze wynikającym z odległości do najbliższego
rogu (closest-corner) z centrum w 80% szerokości i 65% wysokości (at 80% 65%) w
kolorach white, red 10% i white 10%
7. Przetestuj stronę w 2 przeglądarkach
8. Sprawdź poprawność kodu CSS pod adresem http://jigsaw.w3.org/css-validator
Efekty przejścia
• Transitions to moduł CSS, który pozwala tworzyć przejścia, czyli efekty graficzne polegające na
zmianie w zadanym czasie określonej właściwości CSS.
• transition-property - właściwość CSS która ma podlegać transformacji
można podać wiele właściwości oddzielając je przecinkami
• transition-duration - czas trwania transformacji (w sekundach)
jeśli dla różnych właściwości jest różny czas transformacji, można podać wiele właściwości oddzielając je
przecinkami
• transition-timing-function - określa jakiej funkcji użyć do liczenia wartości punktów pośrednich w
animacji.
ease: to samo co cubic-bezier(0.25,0.1,0.25,1), wolny start, szybki środek, wolne zakończenie.
linear: równomiernie – to samo co cubic-bezier(0,0,1,1)
ease-in: wolny start. To samo co cubic-bezier(0.42,0,1,1)
ease-out: wolna końcówka. To samo co cubic-bezier(0,0,0.58,1)
ease-in-out: wolny start i końcówka. To samo co cubic-bezier(0.42,0,0.58,1)
cubic-bezier(n,n,n,n): zdefiniowanie własnej funkcji
• transition-delay - opóźnienie rozpoczęcia animacji
• transition - skrócony zapis wszystkich powyższych właściwości w kolejności: property, duration,
timing function, delay
Przejścia – przykład: HTML
<body>
<main>
<article>
<h1>Bocian Biały</h1>
<img src="https://upload.wikimedia.org/wikiped..." alt="Bocian biały">
<p>Gatunek dużego ptaka brodzącego z rodziny bocianów (Ciconiidae)</p>
</article>
<article class="wazne">
<h1>Bocian czarny</h1>
<img src="https://upload.wikimedia.org/wikiped... " alt="Bocian czarny">
<p>Gwarowo: hajstra (Ciconia nigra) – gatunek dużego ptaka ...</p>
</article>
<article>
<h1>Bocian czaronodzioby</h1>
<img src="https://upload.wikimedia.org/wi..." alt="Bocian czarnodzioby">
<p>Bocian czarnodzioby (Ciconia boyciana) – gatunek dużego ...</p>
<p>Od bociana białego różni się czarnym dziobem i czerwoną ...</p>
</article>
<!-- i tak dalej ...-->
</main>
</body>
Przejścia – przykład: CSS
img {
height: 60px;
}
p {
transition-property: color, background-color; /*właściwości podlegające zmianie*/
transition-delay: 0.5s; /* zmiana rozpoczyna się po 0.5 sekunkdy*/
transition-duration: 5s; /*czas trwania zmiany*/
transition-timing-function:ease-in-out; /*tempo zmiany: powolny start, szybki środek,
powolny koniec*/
color: black;
background-color: white;
}
/*w momencie najechania myszką nad obszar po 0.5 s zacznie
* on stopniowo zmieniać kolor tekstu
* na niebieski a kolor tła na żółty
*/
p:hover{
color: blue;
background-color: yellow;
}
Przejścia – przykład: efekt
Przed zmianą:
Po najechaniu
myszką nad akapit
stopniowo zmienia
się jego wygląd
Po najechaniu myszką
nad nagłówek
stopniowo zmienia
się jego wygląd
812 – Przejścia CSS
1. Zapisz style.html pod nazwą 812.html. Stwórz nowy plik 812.css i dołącz go do html
modyfikując element <link>. W pliku css dodaj reguły dla poniższych klas
2. .dokument ustaw rozmiar czcionki na 20px (font-size), kolor tła (background-color) na
snow, kolor tekstu (color) na black, marginesy (margin) i odstępy (padding) na 0px
3. .article__p – ustaw trwające 3 sekundy przejście które po najechaniu myszką nad akapit
zmienia tło akapitu na czarny (black), a kolor tekstu na biały (white). Przejście ma się
rozpoczynać natychmiast (transition-delay:0), ma trwać 3 sekundy (transition-
duration: 3s). Zmieniane właściwości (transition-property) to color i background-
color. Przejście ma wykonywać się w sposób liniowy (transition-timing-function:
linear).
4. article__p:hover – ustaw stan docelowy właściwości color i background-color
5. .article__h2 - ustaw trwające 3 sekundy przejście które po najechaniu myszką zmienia
rozmiar czcionki (font-size) do 300%, a kolor czcionki na niebieski (blue).
6. .article__h2:hover - ustaw stan docelowy właściwości font-size i color
7. Przetestuj stronę w 2 przeglądarkach – najedź kursorem nad akapity i nagłówki w
artykułach i odczekaj chwilę.
8. Sprawdź poprawność kodu CSS pod adresem http://jigsaw.w3.org/css-validator
Transformacje CSS - transform
transform: - właściwość do której można przypisać jedną lub więcej transformacji rozdzielonych spacjami.
none - bez transformacji
translateX(x) - przesunięcie elementu w prawo lub lewo
translateY(y) - przesunięcie elementu w dół lub w górę
translate(x,y) – zapis skrócony dla translateX, translateY
translateZ( z ) - przesunięcie elementu w tył lub w przód
translate3d( x,y,z ) - zapis skrócony dla translateX, translateY, translateZ
scaleX(x) – zwężenie lub rozciągnięcie elementu (szerokość)
scaleY(y) – skrócenie lub wydłużenie elementu (wysokość)
scale( x,y ) – zapis skrócony dla scaleX, scaleY
scaleZ( z ) - przeskalowanie elementu w osi Z (odległość od widza)
scale3d( x,y,z ) - zapis skrócony dla scaleX, scaleY, scaleZ
połączenie funkcji scaleX(), scaleY() oraz saleZ()
skewX( x ) - pochylenie w prawą lub lewą stronę
skewY( y ) - pochylenie w dół lub w górę
skew( x,y ) – zapis skrócony dla skewX, skewY
rotate( a ) - obrócenie elementu (2D)
rotateX( x ) - obrócenie elementu wokół osi X (3D) rotateY( y ) - obrócenie elementu wokół osi Y (3D)
rotateZ( z ) - - obrócenie elementu wokół osi Z (3D) rotate3d( x,y,z,a ) – obracanie 3D
matrix(n,n,n,n,n,n) - transformacja 2D wg matrycy (6 wartości)
matrix3d (n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n) – transformacja 3D wg matrycy (16 wartości)
Transformacje
#a1 {
background-color: lightblue;
transform: rotate3d(1,10,1,45deg);
}
#a2 {
background-color: yellow;
transform: skewX(20deg) translate(10px,35px);
}
822 – Transformacje: efekt
822 – Transformacje
1. Zapisz style.html pod nazwą 822.html. Stwórz nowy plik 822.css i dołącz go do
html modyfikując element <link>. W pliku css dodaj reguły dla poniższych klas
2. .dokument ustaw rozmiar czcionki na 20px (font-size), kolor tła (background-
color) na snow, kolor tekstu (color) na black, marginesy (margin) i odstępy
(padding) na 0px
3. .naglowek – obróć o 170 stopni (170 deg) wokół osi X (rotateX(…)). Ustaw
kolor tła na gold.
4. .tresc – obróć o 170 stopni (170 deg) wokół osi Y (rotateY(…)). Ustaw kolor tła
na goldenrod.
5. .table – obróć o 170 stopni (170 deg) wokół osi Z (rotateZ(…)). Ustaw kolor tła
na gold.
6. .stopka – obróć 3D o 40 stopni (40 deg) wokół punktu 10,60,1 (rotate3d(…)).
Ustaw kolor tła na goldenrod.
7. Przetestuj stronę w 2 przeglądarkach.
8. Sprawdź poprawność kodu CSS pod adresem http://jigsaw.w3.org/css-validator
Animacje CSS
• Pozwalają animować przejście z jednego stylu na inny
• animation-delay: po jakim czasie animacja się rozpoczynma
• animation-direction: czy gdy animacja się skończy powinna być odtwarzana w odwrotnej
kolejności czy powtórzona.
• animation-duration: ile sekund / milisekund trwa animacja. Infinite – ma być powtarzana w
nieskończoność.
• animation-fill-mode: jakie style mają zastosowanie gdy animacja jest niekatywna (zakończyła się
albo oczekuje na uruchomienie)
• animation-iteration-count: liczba powtórzeń animacji
• animation-name: nazwa animacji ustalona przez @keyframes
• animation-play-state: określa czy animacja jest aktywna czy nie.
• animation-timing-function: funkcja czasowa określająca prędkość animacji.
• animation: skrócona forma zapisu powyższych właściwości (z wyjątkiem animation-play-state i
animation-fill-mode)
• @keyframes – nadanie nazwy animacji i zdefiniowanie reguł określających jej wygląd. Czas
animacji jest określony przez animation-duration, więc wewnątrz @keyframes punkt w czaise
określa się procentami, ewentualnie słowami kluczowymi from (0%) i to (100%).
Animacja – przykład: HTML
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>Przejście</title>
<link href="h250.css" type="text/css" rel="stylesheet">
</head>
<body>
<p id="a1">Lorem ipsum dolor sit amet, consectetur adipisicing elit... </p>
<p id="a2">Lorem ipsum dolor sit amet, consectetur adipisicing elit...</p>
</body>
</html>
Animacja – przykład: CSS
#a1 {
animation-duration: 3s;
animation-name: animacja;
animation-iteration-count: infinite;
animation-direction: alternate;
height: 300px; padding: 3px; margin: 3px;
}
@keyframes animacja {
from {
font-size: 10px;
color: black;
}
64% {
font-size: 20px;
color: green;
}
to {
font-size: 40px;
color: red;
}
}
832 – animacje: efekt
832 – animacje
1. Zapisz style.html pod nazwą 832.html. Stwórz nowy plik 832.css i dołącz go do
html modyfikując element <link>. W pliku css dodaj reguły dla poniższych klas
2. .dokument ustaw rozmiar czcionki na 20px (font-size), kolor tła (background-color)
na snow, kolor tekstu (color) na black, marginesy (margin) i odstępy (padding) na
0px
3. .article__h2 – ustaw trwającą 3 sekundy animację która zmienia kolor tła. Animacja
ma trwać 3 sekundy (animation-duration), nazwa to animacja (animation-name),
liczba powtórzeń (animation-iteration-count) w nieskończoność (infinite), animacja
ma odbywać się w tą i z powrotem (animation-direction: alternate)
4. Ustaw animację używając @keyframes nazwa-animacji {…}. Wskaż 4 kroki
pośrednie
1. 0% {…} - kolor tła (background-color) biały (white)
2. 33% {…} - kolor tła yellow
3. 66% {…} - kolor tła gold
4. 100% {…} - kolor tła goldenrod
5. Przetestuj stronę w 2 przeglądarkach.
6. Sprawdź poprawność kodu CSS pod adresem http://jigsaw.w3.org/css-validator
Kadrowanie - clip-path