Responsive Web Design. Projektowanie elastycznych witryn w
Transkrypt
Responsive Web Design. Projektowanie elastycznych witryn w
Tytuł oryginału: Responsive Web Design with HTML5 and CSS3, 2nd Edition Tłumaczenie: Łukasz Piwko ISBN: 978-83-283-2343-8 Copyright © Packt Publishing 2015. First published in the English language under the title ‘Responsive Web Design with HTML5 and CSS3 – Second Edition – (9781784398934)’ Polish edition copyright © 2016 by Helion S.A. All rights reserved. All rights reserved. No part of this book may be reproduced or transmitted in any form or by any means, electronic or mechanical, including photocopying, recording or by any information storage retrieval system, without permission from the Publisher. Wszelkie prawa zastrzeżone. Nieautoryzowane rozpowszechnianie całości lub fragmentu niniejszej publikacji w jakiejkolwiek postaci jest zabronione. Wykonywanie kopii metodą kserograficzną, fotograficzną, a także kopiowanie książki na nośniku filmowym, magnetycznym lub innym powoduje naruszenie praw autorskich niniejszej publikacji. Wszystkie znaki występujące w tekście są zastrzeżonymi znakami firmowymi bądź towarowymi ich właścicieli. Autor oraz Wydawnictwo HELION dołożyli wszelkich starań, by zawarte w tej książce informacje były kompletne i rzetelne. Nie biorą jednak żadnej odpowiedzialności ani za ich wykorzystanie, ani za związane z tym ewentualne naruszenie praw patentowych lub autorskich. Autor oraz Wydawnictwo HELION nie ponoszą również żadnej odpowiedzialności za ewentualne szkody wynikłe z wykorzystania informacji zawartych w książce. Wydawnictwo HELION ul. Kościuszki 1c, 44-100 GLIWICE tel. 32 231 22 19, 32 230 98 63 e-mail: [email protected] WWW: http://helion.pl (księgarnia internetowa, katalog książek) Pliki z przykładami omawianymi w książce można znaleźć pod adresem: ftp://ftp.helion.pl/przyklady/trash2.zip Drogi Czytelniku! Jeżeli chcesz ocenić tę książkę, zajrzyj pod adres http://helion.pl/user/opinie/trash2 Możesz tam wpisać swoje uwagi, spostrzeżenia, recenzję. Printed in Poland. • Kup książkę • Poleć książkę • Oceń książkę • Księgarnia internetowa • Lubię to! » Nasza społeczność Spis treĂci Zespóï wydania oryginalnego 11 O autorze 13 O korektorach merytorycznych 15 Przedmowa 17 Rozdziaï 1. Podstawowe wiadomoĂci o projektowaniu responsywnych stron internetowych 21 Rozpoczynamy przygodÚ Projekt responsywny — definicja Projektowanie responsywnych stron internetowych w piguïce Ustawianie poziomu obsïugi przeglÈdarek Kilka uwag na temat narzÚdzi i edytorów tekstu Pierwszy przykïad projektu responsywnego Podstawowy plik HTML OkieïznaÊ obrazy Zapytania medialne wkraczajÈ do akcji Wady opisanego przykïadu Podsumowanie 22 23 23 23 25 26 26 29 32 37 38 Rozdziaï 2. Zapytania medialne: obsïuga zróĝnicowanych obszarów roboczych 39 Dlaczego zapytania medialne sÈ potrzebne do budowy ukïadów responsywnych Podstawowa logika warunkowa w CSS Skïadnia zapytañ medialnych Zapytania medialne w znaczniku <link> Èczenie zapytañ medialnych Importowanie zapytañ medialnych za pomocÈ dyrektywy @import Zapytania medialne w arkuszach stylów Co moĝna sprawdzaÊ za pomocÈ zapytañ medialnych 40 41 41 42 43 44 44 44 Kup książkę Poleć książkę Spis treĞci Modyfikowanie projektu strony za pomocÈ zapytañ medialnych W zapytaniu medialnym moĝna wpisaÊ kaĝdÈ reguïÚ CSS Zapytania medialne dla urzÈdzeñ o duĝej gÚstoĂci pikseli Metody organizacji i pisania zapytañ medialnych DoïÈczanie róĝnych plików CSS za pomocÈ zapytañ medialnych ZasadnoĂÊ dzielenia zapytañ medialnych na wiele plików ¥ródliniowe zagnieĝdĝanie zapytañ medialnych ÈczyÊ zapytania medialne w bloki czy rozpraszaÊ je w róĝnych miejscach pliku Znacznik meta viewport Zapytania medialne — poziom 4. Obsïuga skryptów UrzÈdzenia wskazujÈce Funkcja sprawdzania obsïugi efektu hover Zapytania dotyczÈce otoczenia Podsumowanie Rozdziaï 3. Ukïady pïynne i obrazy responsywne Konwertowanie ukïadu staïego na elastyczny Do czego sïuĝy model flexbox Bloki Ăródliniowe i biaïe znaki Elementy pïywajÈce WïasnoĂci tabelaryczne Flexbox — wprowadzenie Wyboista droga do flexboksa Obsïuga flexboksa przez przeglÈdarki Podstawy flexboksa Idealne Ărodkowanie tekstu w pionie Przesuwanie elementów Zmienianie kolejnoĂci elementów Róĝne rodzaje ukïadu flexboksa w róĝnych zapytaniach medialnych WïasnoĂÊ inline-flex Wyrównywanie treĂci we flexboksie WïasnoĂÊ flex Lepka stopka Zmienianie kolejnoĂci elementów Podsumowanie wiadomoĂci o flexboksie Obrazy responsywne WewnÚtrzny problem obrazów responsywnych Proste przeïÈczanie rozdzielczoĂci za pomocÈ atrybutu srcset Zaawansowane techniki przeïÈczania obrazów za pomocÈ atrybutu srcset Prezentowanie obrazów za pomocÈ elementu picture Podsumowanie Rozdziaï 4. HTML5 i projekty responsywne Znaczniki HTML5 sÈ rozpoznawane przez wszystkie nowoczesne przeglÈdarki Prawidïowe rozpoczynanie strony HTML5 Znacznik doctype Element HTML i atrybut lang 46 48 48 49 49 50 50 51 52 54 54 55 56 57 58 59 60 64 65 65 65 66 66 66 68 68 70 71 72 73 74 79 82 83 88 88 88 89 90 91 92 95 96 97 97 98 4 Kup książkę Poleć książkę Spis treĞci Definiowanie róĝnych jÚzyków Kodowanie znaków Jak najlepiej pracowaÊ z jÚzykiem HTML5 RozsÈdne podejĂcie do pisania kodu Oddajmy czeĂÊ wszechmocnemu elementowi <a> Nowe elementy semantyczne HTML5 Element main Element <section> Element <nav> Element <article> Element <aside> Elementy <figure> i <figcaption> Elementy <details> i <summary> Element <header> Element <footer> Element <address> Uwaga na temat elementów h1 – h6 ¥ródliniowe elementy semantyczne HTML5 Element <b> Element <em> Element <i> Elementy jÚzyka HTML, które ulegïy dezaktualizacji Praktyczne wykorzystanie elementów strukturalnych HTML5 RozsÈdne wybieranie elementów Standardy dostÚpnoĂci stron WCAG i WAI-ARIA WCAG Standard WAI-ARIA ZapamiÚtaj tylko jednÈ rzecz Krok dalej z ARIA Osadzanie elementów multimedialnych w HTML5 Dodawanie do stron internetowych filmów i děwiÚków Znaczniki audio i video dziaïajÈ niemal identycznie Responsywne odtwarzacze filmów i ramki wewnÚtrzne Aplikacje sieciowe w trybie offline Podsumowanie Rozdziaï 5. CSS3: selektory, typografia, tryby kolorów i nowe funkcje Nikt nie wie wszystkiego Struktura reguï CSS Przydatne triki w CSS3 Ukïad wielokolumnowy w CSS3 dla projektu responsywnego Zawijanie tekstu Obcinanie tekstu Tworzenie poziomych przewijanych okienek RozgaïÚzianie kodu CSS Zapytania o obsïugÚ wïasnoĂci Èczenie warunków Biblioteka Modernizr 98 98 98 99 100 101 101 102 102 103 103 103 104 105 105 106 106 107 107 107 108 108 109 109 110 110 111 111 112 112 113 115 115 116 117 119 120 120 121 121 124 125 126 128 128 129 130 5 Kup książkę Poleć książkę Spis treĞci Nowe selektory CSS3 i sposób ich wykorzystania Selektory atrybutów w CSS3 Szczegóïowe selektory atrybutów CSS3 Puïapki zwiÈzane z uĝywaniem selektorów wartoĂci atrybutów Za pomocÈ selektorów wartoĂci atrybutów moĝna wybieraÊ identyfikatory i klasy zaczynajÈce siÚ od cyfr Strukturalne pseudoklasy CSS3 Selektor :last-child Selektory n-tego potomka Zasada dziaïania selektorów n-tego potomka Selektory n-tego potomka w projektach responsywnych Selektor negacji (:not) Selektor :empty Formatowanie pierwszego wiersza akapitu bez wzglÚdu na obszar roboczy WïasnoĂci uĝytkownika i zmienne CSS Funkcja CSS calc Selektory, poziom 4. Pseudoklasa :has Jednostki zaleĝne od rozmiaru obszaru roboczego Typografia sieciowa Reguïa @font-face Odwoïanie do fontów w regule @font-face Uwagi na temat reguïy @font-face i projektów responsywnych Nowe formaty barw CSS3 i kanaï alfa Format RGB Format HSL Kanaïy alfa Moduï kolorów poziomu 4. Podsumowanie Rozdziaï 6. Spektakularny wyglÈd i CSS3 Cienie tekstu w CSS3 Opuszczanie wartoĂci rozmycia, gdy jest niepotrzebna Definiowanie wielu cieni dla tekstu Cienie elementów Cieñ wewnÈtrz elementu Definiowanie wielu cieni dla elementu WartoĂÊ spread Gradienty tïa Liniowe gradienty tïa Gradienty promieniste Gradienty responsywne Powtarzanie gradientu Gradientowe desenie tïa Wiele obrazów tïa jednoczeĂnie Wymiary tïa WïasnoĂÊ background position Zbiorcza wïasnoĂÊ background 132 132 133 135 136 136 137 137 138 141 143 144 145 145 146 147 147 147 148 149 149 151 152 152 152 154 154 155 157 158 159 159 159 160 161 161 162 162 165 166 167 168 169 170 170 171 6 Kup książkę Poleć książkę Spis treĞci Obrazy tïa o wysokiej rozdzielczoĂci Filtry CSS DostÚpne filtry CSS Èczenie filtrów CSS Uwaga na temat wydajnoĂci CSS Uwagi na temat masek CSS i przycinania grafiki Podsumowanie Rozdziaï 7. Grafika SVG niezaleĝna od rozdzielczoĂci ekranu Historia SVG w piguïce Grafika, która jest dokumentem Element gïówny SVG Przestrzeñ nazw Elementy <title> i <desc> Element <defs> Element <g> Ksztaïty SVG ¥cieĝki SVG Najpopularniejsze programy i usïugi do tworzenia grafiki SVG OszczÚdzaj czas dziÚki usïugom oferujÈcym ikony SVG Wstawianie grafik SVG na strony internetowe Element <img> Element <object> Ustawianie grafik SVG w tle elementów Krótka uwaga na temat kodowania danych w URI Generowanie sprite’ów graficznych Wstawianie dokumentów SVG bezpoĂrednio do kodu HTML Wielokrotne wykorzystywanie obiektów graficznych z symboli Osadzone grafiki SVG mogÈ mieÊ róĝne kolory w róĝnych kontekstach Wielokrotne wykorzystywanie obiektów graficznych ze ěródeï zewnÚtrznych MoĝliwoĂci kaĝdej z metod wstawiania grafik SVG na strony internetowe Problemy z przeglÈdarkami Inne moĝliwoĂci i dziwactwa SVG Animacje SMIL Stylizowanie grafik SVG za pomocÈ zewnÚtrznych arkuszy stylów Formatowanie grafik SVG za pomocÈ arkuszy wewnÚtrznych Animowanie grafik SVG za pomocÈ CSS Animowanie SVG za pomocÈ JavaScript Prosty przykïad animacji na bazie biblioteki GreenSock Optymalizacja grafik SVG Filtry SVG Uwaga na temat zapytañ medialnych w SVG Porady implementacyjne Dodatkowe ěródïa informacji Podsumowanie 172 172 174 179 179 180 181 183 185 186 187 188 188 188 188 189 189 189 190 191 191 191 192 194 195 195 196 197 198 199 200 201 201 202 203 204 205 206 207 208 210 211 212 212 7 Kup książkę Poleć książkę Spis treĞci Rozdziaï 8. PrzejĂcia, transformacje i animacje Czym sÈ przejĂcia CSS3 i jak z nich korzystaÊ? Rodzaje przejĂÊ Zbiorcza wïasnoĂÊ do definiowania przejĂÊ PrzejĂcia róĝnych wïasnoĂci w róĝnych przedziaïach czasowych Funkcje czasu Zabawne typy przejĂÊ dla stron responsywnych Transformacje dwuwymiarowe CSS3 scale translate rotate skew matrix WïasnoĂÊ transform-origin Transformacje trójwymiarowe WartoĂÊ translate3d Animacje w CSS3 WïasnoĂÊ animation-fill-mode Podsumowanie Rozdziaï 9. Formularze w HTML5 i CSS3 Formularze HTML5 Elementy formularzy HTML5 Atrybut placeholder Atrybut required Atrybut autofocus Atrybut autocomplete Atrybut list (i powiÈzany element datalist) Rodzaje kontrolek HTML5 Typ email Typ number Typ url Typ tel Typ search Typ pattern Typ color Kontrolki daty i godziny Typ range Wypeïnienia dla starszych przeglÈdarek Formatowanie formularzy HTML5 za pomocÈ arkuszy CSS3 Oznaczanie pól wymaganych Wypeïnianie tïa Podsumowanie 215 216 218 218 219 219 221 221 222 222 225 226 226 227 229 232 236 238 239 241 242 243 243 244 244 246 246 248 248 249 250 252 253 253 254 254 257 258 259 262 264 265 8 Kup książkę Poleć książkę Spis treĞci Rozdziaï 10. Ogólne zasady projektowania responsywnych stron internetowych 267 OglÈdanie projektu w przeglÈdarce najszybciej jak to moĝliwe WartoĂci punktów kontrolnych powinny byÊ ustalane w odniesieniu do projektu OglÈdaj i testuj projekt w prawdziwych urzÈdzeniach Na czym dokïadnie polega stopniowe ulepszanie strony Wybór funkcji obsïugiwanych przez róĝne przeglÈdarki RównoĂÊ funkcjonalna, nie estetyczna Wybór obsïugiwanych przeglÈdarek Stopniowanie funkcjonalnoĂci Implementacja warstw funkcjonalnych Èczenie punktów kontrolnych CSS i JavaScript Unikaj szkieletów CSS w produkcji Kodowanie pragmatycznych rozwiÈzañ Kiedy odnoĂnik staje siÚ przyciskiem Pisz jak najprostszy kod Ukrywanie, pokazywanie i wczytywanie treĂci na róĝnych ekranach WarstwÚ wizualnÈ strony definiuj za pomocÈ CSS Sprawdzanie skïadni WydajnoĂÊ Co szykuje przyszïoĂÊ Podsumowanie Skorowidz 268 268 269 270 271 271 271 272 272 273 275 275 277 278 278 279 280 281 282 283 284 9 Kup książkę Poleć książkę Spis treĞci 10 Kup książkę Poleć książkę 2 Zapytania medialne: obsïuga zróĝnicowanych obszarów roboczych W poprzednim rozdziale przyjrzeliĂmy siÚ podstawowym skïadnikom responsywnej strony internetowej: pïynnemu ukïadowi, pïynnym obrazom i zapytaniom medialnym. Tutaj dokïadnie przyjrzymy siÚ zapytaniom medialnym, aby poznaÊ ich wszystkie moĝliwoĂci oraz elementy skïadni. W tym rozdziale: Q dowiesz siÚ, dlaczego zapytania medialne sÈ potrzebne w RWD; Q poznasz skïadniÚ zapytañ medialnych; Q nauczysz siÚ definiowaÊ zapytania medialne za pomocÈ znacznika <link>, dyrektywy @import oraz w plikach CSS; Q dowiesz siÚ, jakie wïaĂciwoĂci urzÈdzeñ moĝna testowaÊ za pomocÈ zapytañ medialnych; Q nauczysz siÚ wprowadzaÊ wizualne zmiany na stronie za pomocÈ zapytañ medialnych w zaleĝnoĂci od iloĂci dostÚpnego miejsca na ekranie; Q poznasz argumenty przedstawiane w dyskusji, czy zapytania medialne powinno siÚ grupowaÊ w jednym miejscu, czy wpisywaÊ w tych miejscach, w których sÈ potrzebne; Kup książkę Poleć książkę Responsive Web Design. Projektowanie elastycznych witryn w HTML5 i CSS3 Q nauczysz siÚ korzystaÊ ze znacznika meta viewport, dziÚki któremu zapytania medialne mogÈ dziaïaÊ zgodnie z przeznaczeniem takĝe w urzÈdzeniach z systemami iOS i Android; Q poznasz kolejne funkcje proponowane do dodania do nastÚpnych wersji specyfikacji zapytañ medialnych. Specyfikacja CSS3 skïada siÚ z pewnej liczby moduïów. Jednym z nich jest Media Queries (Level 3), czyli zapytania medialne. Za ich pomocÈ moĝna wybieraÊ, które zestawy reguï CSS majÈ zostaÊ zastosowane w urzÈdzeniach o okreĂlonych moĝliwoĂciach. Przykïadowo: wystarczy tylko kilka wierszy kodu CSS, aby zmieniÊ sposób wyĂwietlania strony w odpowiedzi na zmianÚ szerokoĂci obszaru roboczego, wspóïczynnika proporcji ekranu, orientacji (pionowa lub pozioma) itd. Zapytania medialne sÈ dobrze obsïugiwane przez przeglÈdarki. ObsïugujÈ je wïaĂciwie wszystkie aplikacje oprócz przedpotopowych potworów (od IE 8 w dóï). Krótko mówiÈc: nie ma ĝadnego powodu, aby siÚ przed nimi broniÊ! Specyfikacje W3C przechodzÈ przez proces ratyfikacji w konsorcjum W3C (jeĂli masz wolny dzieñ, zapoznaj siÚ z przebiegiem tego procesu przedstawionym na stronie: http://www.w3.org/2005/10/Process-20051014/tr). MówiÈc najkrócej: kaĝda specyfikacja najpierw jest tzw. projektem roboczym (ang. Working Draft — WD), potem przechodzi w fazÚ rekomendacji kandydujÈcej (ang. Candidate Recommendation — CR), nastÚpnie zamienia siÚ w propozycjÚ rekomendacji (ang. Proposed Recommendation — PR), a na koniec, po wielu latach prac, otrzymujemy oficjalnÈ rekomendacjÚ W3C (ang. W3C Recommendation — REC). Wynika z tego, ĝe bezpieczniejszymi moduïami sÈ te, które osiÈgnÚïy wyĝszy stopieñ dojrzaïoĂci. Przykïadowo: moduï transformacji CSS poziomu 3. (http://www.w3.org/TR/css3-3d-transforms/) osiÈgnÈï status projektu roboczego w marcu 2009 r., w zwiÈzku z czym jest on obsïugiwany znacznie gorzej niĝ moduïy bÚdÈce na etapie CR, takie jak zapytania medialne. Dlaczego zapytania medialne sÈ potrzebne do budowy ukïadów responsywnych Zapytania medialne CSS3 umoĝliwiajÈ tworzenie reguï przeznaczonych tylko dla urzÈdzeñ o okreĂlonych moĝliwoĂciach lub do zastosowania wyïÈcznie w wybranych warunkach. W specyfikacji W3C zapytañ medialnych (http://www.w3.org/TR/css3-mediaqueries/) moĝna przeczytaÊ nastÚpujÈce wprowadzenie do tej technologii: „Zapytanie medialne skïada siÚ z czÚĂci okreĂlajÈcej typ medium i opcjonalnie kilku wyraĝeñ, które sprawdzajÈ, czy zaszïy warunki uruchamiajÈce konkretne reguïy. WĂród wïaĂciwoĂci urzÈdzeñ, jakie moĝna sprawdzaÊ za pomocÈ zapytañ medialnych, znajdujÈ siÚ: szerokoĂÊ, wysokoĂÊ i kolor. Przy uĝyciu zapytañ medialnych moĝna dostosowaÊ prezentacjÚ do wybranych rodzajów urzÈdzeñ wyjĂciowych bez zmieniania samej treĂci”. 40 Kup książkę Poleć książkę Rozdziaá 2. • Zapytania medialne: obsáuga zróĪnicowanych obszarów roboczych Bez zapytañ medialnych, za pomocÈ samych arkuszy stylów, nie daïoby siÚ radykalnie zmieniaÊ warstwy wizualnej strony. DziÚki tym zapytaniom moĝemy pisaÊ reguïy CSS przygotowujÈce naszÈ stronÚ na takie ewentualnoĂci, jak zmiana orientacji ekranu, zmniejszenie lub powiÚkszenie obszaru roboczego itd. ChoÊ ukïad pïynny równieĝ sprawia, ĝe projekt prezentuje siÚ lepiej przy róĝnych szerokoĂciach ekranu, to jeĂli wziÈÊ pod uwagÚ róĝnorodnoĂÊ urzÈdzeñ, czasami potrzebne sÈ bardziej kompleksowe rozwiÈzania. Ich wdroĝenie jest moĝliwe dziÚki zapytaniom medialnym. Traktuj je jak podstawowÈ logikÚ warunkowÈ CSS. Podstawowa logika warunkowa w CSS Wszystkie prawdziwe jÚzyki programowania zawierajÈ konstrukcje pozwalajÈce wybraÊ jednÈ lub wiÚcej gaïÚzi kodu do wykonania w zaleĝnoĂci od pewnych warunków. NajczÚĂciej majÈ one postaÊ powszechnie uĝywanych instrukcji if-else. JeĂli kod ěródïowy jÚzyków programowania kïuje CiÚ w oczy, nie musisz siÚ przejmowaÊ. To, o czym teraz piszÚ, to bardzo prosta koncepcja. Posïugujesz siÚ niÈ np., gdy prosisz kolegÚ z pracy, aby zamówiï Ci coĂ w kawiarni: „JeĂli majÈ babeczki z potrójnÈ czekoladÈ, to weě mi jednÈ, a jeĂli nie, to weě mi kawaïek ciasta marchewkowego”. Jest to prosta instrukcja warunkowa z dwoma moĝliwymi wynikami (i kaĝdy jest tak samo przyjemny). W czasie, gdy piszÚ tÚ ksiÈĝkÚ, w CSS nie ma instrukcji logicznych ani ĝadnych innych konstrukcji typowych dla prawdziwych jÚzyków programowania. PÚtle, funkcje, iteracja i skomplikowane obliczenia matematyczne nadal naleĝÈ do Ăwiata procesorów CSS (wspominaïem juĝ o bardzo ciekawej ksiÈĝce o Sass pt. Sass i Compass. Praktyczny przewodnik dla projektantów?). A jednak zapytania medialne sÈ rodzajem mechanizmu umoĝliwiajÈcego wyraĝanie prostej logiki warunkowej w CSS. Zawarte w nich reguïy znajdujÈ zastosowanie tylko wtedy, gdy zostanÈ speïnione okreĂlone warunki. Funkcje programistyczne w przygotowaniu PopularnoĂÊ preprocesorów CSS nie umknÚïa uwadze ludzi pracujÈcych nad specyfikacjami tej technologii. TrwajÈ juĝ prace nad wstÚpnÈ wersjÈ roboczÈ specyfikacji zmiennych CSS: http://www.w3.org/TR/css-variables/. Niestety, obecnie obsïuguje je tylko przeglÈdarka Firefox, wiÚc na razie zmiennych nie moĝna wykorzystywaÊ w realnych projektach. Skïadnia zapytañ medialnych Jak wyglÈda zapytanie medialne i — co waĝniejsze — jak ono dziaïa? Wprowadě poniĝszy kod na samym dole dowolnego pliku CSS i obejrzyj w przeglÈdarce stronÚ internetowÈ, do której jest on doïÈczony. Ewentualnie otwórz przykïadowy plik z folderu 02-01: 41 Kup książkę Poleć książkę Responsive Web Design. Projektowanie elastycznych witryn w HTML5 i CSS3 body { background-color: grey; } @media screen and (min-width: 320px) body { background-color: green; } } @media screen and (min-width: 550px) body { background-color: yellow; } } @media screen and (min-width: 768px) body { background-color: orange; } } @media screen and (min-width: 960px) body { background-color: red; } } { { { { Otwórz teraz stronÚ internetowÈ w przeglÈdarce i zmieñ wielkoĂÊ okna. Kolor strony zmieni siÚ w zaleĝnoĂci od aktualnych wymiarów obszaru roboczego. Bardziej szczegóïowy opis skïadni zapytañ medialnych zamieĂciïem dalej. Najpierw chciaïbym Ci pokazaÊ, jak i gdzie moĝna ich uĝywaÊ. Zapytania medialne w znaczniku <link> Jeĝeli pracowaïeĂ juĝ z arkuszami stylów CSS 2, to wiesz, ĝe moĝna w nich zadeklarowaÊ rodzaj urzÈdzenia (uĝywajÈc sïów kluczowych screen i print) w atrybucie media znacznika <link>. TakÈ deklaracjÚ naleĝy umieĂciÊ wewnÈtrz elementu <head>; ma ona nastÚpujÈcÈ postaÊ: <link rel="stylesheet" type="text/css" media="screen" href="screen-styles.css"> Zapytania medialne pozwalajÈ na dopasowanie formatowania strony do moĝliwoĂci i wïaĂciwoĂci urzÈdzenia, a nie tylko do jego typu. Moĝna to potraktowaÊ jak skierowane do przeglÈdarki zapytanie. JeĂli przeglÈdarka „stwierdzi”, ĝe podane w zapytaniu warunki zostaïy speïnione, nada wïaĂciwe formatowanie. Jeĝeli tak nie bÚdzie, zastosowane zostanie inne. Zamiast wysyïaÊ do przeglÈdarki zapytanie: „Czy jesteĂ ekranem?” — co byïo dawniej szczytem moĝliwoĂci CSS 2 — zapytania medialne pozwalajÈ nam na wiÚkszÈ dociekliwoĂÊ. Za ich pomocÈ moĝemy zapytaÊ: „Czy jesteĂ ekranem w orientacji pionowej?”. RzuÊ okiem na poniĝszy przykïad: <link rel="stylesheet" media="screen and (orientation: portrait)" ´href="portrait-screen.css" /> 42 Kup książkę Poleć książkę Rozdziaá 2. • Zapytania medialne: obsáuga zróĪnicowanych obszarów roboczych Najpierw zapytanie medialne prosi o potwierdzenie typu urzÈdzenia („Czy jesteĂ ekranem?”), a nastÚpnie wïaĂciwoĂci („Czy twój obraz ma orientacjÚ pionowÈ?”). Arkusz stylów portrait-screen.css zostanie zaïadowany dla dowolnego urzÈdzenia w trybie pionowym i zignorowany w innych. Istnieje moĝliwoĂÊ odwrócenia zapytania poprzez dodanie na poczÈtku zapytania medialnego sïowa kluczowego not. Ilustruje to niĝej przedstawiona deklaracja, która odwraca dziaïanie kodu z poprzedniego przykïadu i powoduje zaïadowanie pliku, jeĂli tylko dany ekran nie ma orientacji pionowej: <link rel="stylesheet" media="not screen and (orientation: portrait)" ´href="portrait-screen.css" /> Èczenie zapytañ medialnych Istnieje równieĝ moĝliwoĂÊ poïÈczenia wielu wyraĝeñ. Rozszerzmy nasz przykïad pierwszego zapytania medialnego i ograniczmy stosowanie pliku do urzÈdzeñ, które majÈ obszar operacyjny wiÚkszy niĝ 800 pikseli. <link rel="stylesheet" media="screen and (orientation: portrait) ´and (min-width: 800px)" href="800wide-portrait-screen.css" /> Moĝemy teĝ przygotowaÊ caïÈ listÚ zapytañ medialnych. JeĂli dowolne z wypisanych w zapytaniu warunków bÚdÈ zgodne z prawdÈ, plik zostanie zaïadowany. JeĂli ĝaden z nich nie zostanie speïniony, reguïy nie zostanÈ odczytane: <link rel="stylesheet" media="screen and (orientation: portrait) and ´(min-width: 800px), projection" href="800wide-portrait-screen.css" /> W tym miejscu naleĝy zwróciÊ uwagÚ na dwa waĝne aspekty: po pierwsze, kaĝde zapytanie medialne jest oddzielone przecinkiem, po drugie, ïatwo zauwaĝyÊ, ĝe po sïowie kluczowym projection nie wystÚpujÈ ĝadne uzupeïniajÈce sïowa and i nie ma wartoĂci podanych w nawiasach. Oznacza to, ĝe przy braku zdefiniowanych wartoĂci dane zapytanie medialne bÚdzie dotyczyÊ wszystkich typów danego urzÈdzenia. W naszym przykïadzie formatowanie to bÚdzie dotyczyÊ wszystkich projektorów. W zapytaniach medialnych moĝna uĝywaÊ dowolnej jednostki miary CSS. Do najczÚĂciej stosowanych naleĝÈ piksele (px), ale równie dobrze moĝna siÚ posïugiwaÊ jednostkami em i rem. WiÚcej informacji na ten temat moĝna znaleěÊ w moim artykule dostÚpnym pod adresem: http://benfrain.com/just-use-pixels. JeĂli wiÚc chcesz ustawiÊ punkt kontrolny na 800 pikselach (tylko wyraĝonych w jednostce em), po prostu podziel liczbÚ pikseli przez 16. Na przykïad 800px jest równe 50em (800/16=50). 43 Kup książkę Poleć książkę Responsive Web Design. Projektowanie elastycznych witryn w HTML5 i CSS3 Importowanie zapytañ medialnych za pomocÈ dyrektywy @import Moĝemy teĝ uĝyÊ dyrektywy @import, która jeĂli zostanÈ speïnione pewne warunki, wczyta arkusz stylów w innym arkuszu. NastÚpujÈcy kod zaïadowaïby arkusz phone.css, ale tylko jeĂli urzÈdzenie, w którym strona zostaïa otwarta, miaïoby obszar roboczy nie szerszy niĝ 360 pikseli: @import url("phone.css") screen and (max-width:360px); PamiÚtaj, ĝe uĝycie dyrektywy @import oznacza dodatkowe ĝÈdanie HTTP (które wpïywa na szybkoĂÊ wczytywania strony), polegaj wiÚc na tej metodzie tylko okazyjnie. Zapytania medialne w arkuszach stylów Wiesz juĝ, jak stosowaÊ zapytania medialne w odnoĂnikach do plików CSS umieszczonych w nagïówku (miÚdzy znacznikami <head> i </head>) dokumentu HTML oraz za pomocÈ dyrektywy @import. Jednak najczÚĂciej zapytania medialne wpisuje siÚ bezpoĂrednio w arkuszach stylów. GdybyĂmy np. dodali do arkusza stylów poniĝszy kod, to wszystkie elementy <h1> na stronie staïyby siÚ zielone, ale tylko w urzÈdzeniach o szerokoĂci ekranu nieprzekraczajÈcej 400 pikseli. @media screen and (max-device-width: 400px) { h1 { color: green } } Najpierw za pomocÈ reguïy @media informujemy przeglÈdarkÚ, ĝe tworzymy zapytanie medialne, a nastÚpnie okreĂlamy, jakie urzÈdzenia nas interesujÈ. W tym przykïadzie odnosimy siÚ tylko do ekranów (a wiÚc np. nie do druku — print). Póěniej w nawiasie podajemy konkretne wïaĂciwoĂci wybranego urzÈdzenia. Dalej znajdujÈ siÚ juĝ normalne reguïy CSS. W tym miejscu powinienem chyba podkreĂliÊ, ĝe oznaczanie typu mediów jako screen jest opcjonalne. Oto odpowiedni fragment specyfikacji, który o tym mówi: „JeĂli zapytanie medialne odnosi siÚ do wszystkich rodzajów mediów, to moĝna w jego definicji posïuĝyÊ siÚ skïadniÈ skróconÈ, tzn. moĝna opuĂciÊ sïowo kluczowe all (wraz ze znajdujÈcym siÚ za nim sïowem and). Innymi sïowy: jeĂli typ mediów nie zostanie okreĂlony, to znaczy, ĝe chodzi o wszystkie typy mediów”. Jeĝeli wiÚc nie piszesz stylów przeznaczonych wyïÈcznie dla konkretnego rodzaju mediów, moĝesz opuĂciÊ czïon screen and. RobiÚ to we wszystkich nastÚpnych przykïadach. Co moĝna sprawdzaÊ za pomocÈ zapytañ medialnych Projektanci stron responsywnych najczÚĂciej uĝywajÈ zapytañ medialnych do sprawdzania szerokoĂci obszaru roboczego (width). Z mojego doĂwiadczenia wynika, ĝe pozostaïe parametry (moĝe z wyjÈtkiem okazjonalnego sprawdzania rozdzielczoĂci ekranu i wysokoĂci obszaru robo44 Kup książkę Poleć książkę Rozdziaá 2. • Zapytania medialne: obsáuga zróĪnicowanych obszarów roboczych czego) nie sÈ zbyt uĝyteczne. Na wszelki wypadek jednak zamieszczam peïnÈ listÚ parametrów, które moĝna sprawdzaÊ za pomocÈ zapytañ medialnych poziomu 3. CzÚĂÊ z nich moĝe Ci siÚ przydaÊ: Q width — szerokoĂÊ obszaru roboczego. Q height — wysokoĂÊ obszaru roboczego. Q device-width — szerokoĂÊ powierzchni wyĂwietlania (bÚdziemy jÈ traktowaÊ Q Q Q Q Q Q Q Q jako szerokoĂÊ urzÈdzenia). device-height — wysokoĂÊ powierzchni wyĂwietlania (bÚdziemy jÈ traktowaÊ jako wysokoĂÊ urzÈdzenia). orientation — ta wïasnoĂÊ sïuĝy do sprawdzenia, czy urzÈdzenie jest ustawione poziomo, czy pionowo. aspect-ratio — stosunek szerokoĂci obszaru roboczego do jego wysokoĂci. Stosunek 16:9 moĝna zapisaÊ jako aspect-ratio: 16/9. device-aspect-ratio — parametr podobny do aspect-ratio, tylko odnoszÈcy siÚ do szerokoĂci i wysokoĂci powierzchni wyĂwietlania urzÈdzenia, a nie do obszaru roboczego. color — liczba bitów przypadajÈca na kaĝdy skïadnik koloru. Przykïadowa wïasnoĂÊ min-color:16 sprawdza, czy urzÈdzenie wyĂwietla 16-bitowe kolory. color-index — liczba wpisów w tabeli przeglÈdu kolorów urzÈdzenia. WartoĂci muszÈ byÊ liczbami i nie mogÈ byÊ ujemne. monochrome — parametr sïuĝÈcy do sprawdzania, ile bitów przypada na piksel w monochromatycznym buforze klatek. WartoĂciÈ jest liczba caïkowita, np. 2 — ta liczba nie moĝe byÊ ujemna. resolution — ta opcja sïuĝy do sprawdzania rozdzielczoĂci ekranu lub wydruku, np. deklaracja min-resolution: 300dpi. WïasnoĂÊ ta przyjmuje teĝ wartoĂci wyraĝone w liczbie plamek na centymetr (ang. dots per centimeter), np. deklaracja min-resolution: 118dpcm. Q scan — ten parametr odnosi siÚ gïównie do telewizorów i sïuĝy do sprawdzania, czy stosowane jest skanowanie progresywne, czy przeplatane. Przykïadowo: do telewizora 720p HD (litera p w 720p oznacza wyĂwietlanie „progresywne”) moĝna siÚ odwoïaÊ za pomocÈ deklaracji scan: progressive, podczas gdy do telewizora 1080i HD (litera i w 1080i oznacza wyĂwietlanie z przeplotem) moĝna siÚ odnieĂÊ deklaracjÈ scan: interlace. Q grid — ta wïasnoĂÊ pomaga ustaliÊ, czy urzÈdzenie dziaïa na podstawie siatki punktów, czy bitmapy. Wszystkie te opcje, z wyjÈtkiem scan i grid, moĝna poprzedziÊ przedrostkami min i max, aby stworzyÊ deklaracje zakresów. W ramach przykïadu rozwaĝmy nastÚpujÈcy fragment kodu: @import url("tiny.css") screen and (min-width:200px) and (max-width:360px); 45 Kup książkę Poleć książkę Responsive Web Design. Projektowanie elastycznych witryn w HTML5 i CSS3 Jak widaÊ, przedrostki minimum (min) i maksimum (max) zostaïy uĝyte z wïasnoĂciÈ width, tym samym zostaï zdefiniowany zakres. Plik tiny.css zostanie odczytany tylko w przypadku urzÈdzeñ wyposaĝonych w ekrany z obszarem roboczym nie wÚĝszym niĝ 200 pikseli i nie szerszym niĝ 360 pikseli. Elementy wycofywane w Media Queries CSS poziomu 4. Warto wiedzieÊ, ĝe w szkicu specyfikacji Media Queries poziomu 4. kilka wïasnoĂci oznaczono do usuniÚcia (http://dev.w3.org/csswg/mediaqueries-4/#mf-deprecated). Najwaĝniejsze z nich to: device-height, device-width oraz device-aspect-ratio. PrzeglÈdarki nadal bÚdÈ je obsïugiwaÊ, ale zaleca siÚ nie uĝywaÊ ich juĝ w nowych arkuszach stylów. Modyfikowanie projektu strony za pomocÈ zapytañ medialnych Arkusze stylów zostaïy zaprojektowane tak, aby style zadeklarowane niĝej zastÚpowaïy style zdefiniowane wyĝej (chyba ĝe te znajdujÈce siÚ wyĝej dotyczÈ bardziej konkretnych fragmentów strony). Moĝemy bez trudu ustanowiÊ na samym poczÈtku arkusza podstawowe style, które bÚdÈ dotyczyÊ wszystkich wersji naszego projektu, a nastÚpnie nadpisaÊ interesujÈce nas fragmenty za pomocÈ zapytañ medialnych umieszczonych w dolnej czÚĂci dokumentu. Przykïadowo: najpierw moĝemy zdefiniowaÊ odnoĂniki czysto tekstowe (albo o zmniejszonym rozmiarze pisma) w nawigacji przeznaczonej dla urzÈdzeñ o wÈskim obszarze roboczym, a nastÚpnie nadpisaÊ te reguïy zapytaniem medialnym, które powiÚkszy elementy nawigacji i doda do nich ikony w urzÈdzeniach o wiÚkszym ekranie. Zobaczmy, jak to moĝe wyglÈdaÊ w praktyce (przykïad 02-02). Najpierw spójrz na kod HTML: <a <a <a <a href="#" href="#" href="#" href="#" class="CardLink class="CardLink class="CardLink class="CardLink CardLink_Hearts">Kier</a> CardLink_Clubs">Trefl</a> CardLink_Spades">Pik</a> CardLink_Diamonds">Karo</a> Teraz przyjrzyj siÚ reguïom CSS: .CardLink { display: block; color: #666; text-shadow: 0 2px 0 #efefef; text-decoration: none; height: 2.75rem; line-height: 2.75rem; border-bottom: 1px solid #bbb; position: relative; } 46 Kup książkę Poleć książkę Rozdziaá 2. • Zapytania medialne: obsáuga zróĪnicowanych obszarów roboczych @media (min-width: 300px) { .CardLink { padding-left: 1.8rem; font-size: 1.6rem; } } .CardLink:before { display: none; position: absolute; top: 50%; transform: translateY(-50%); left: 0; } .CardLink_Hearts:before { content: " "; } .CardLink_Clubs:before { content: " "; } .CardLink_Spades:before { content: " "; } .CardLink_Diamonds:before { content: " "; } @media (min-width: 300px) { .CardLink:before { display: block; } } Pobieranie przykïadów kodu Wszystkie pliki z przykïadami kodu ěródïowego moĝna pobraÊ z serwera FTP wydawnictwa Helion pod adresem: ftp://ftp.helion.pl/przyklady/trash2.zip. Tak te odnoĂniki bÚdÈ wyglÈdaÊ w urzÈdzeniu o niewielkiej szerokoĂci (patrz rysunek na nastÚpnej stronie). 47 Kup książkę Poleć książkę Responsive Web Design. Projektowanie elastycznych witryn w HTML5 i CSS3 A taki wyglÈd przybiorÈ w szerszych urzÈdzeniach: W zapytaniu medialnym moĝna wpisaÊ kaĝdÈ reguïÚ CSS Naleĝy pamiÚtaÊ, ĝe w zapytaniu medialnym moĝna wpisaÊ wszystko, co wpisaïoby siÚ w zwykïym arkuszu stylów. DziÚki temu moĝliwe jest caïkowite zmienienie ukïadu i wyglÈdu strony w zaleĝnoĂci od warunków jej wyĂwietlania (np. zmiennych rozmiarów obszaru roboczego). Zapytania medialne dla urzÈdzeñ o duĝej gÚstoĂci pikseli Zapytañ medialnych czÚsto uĝywa siÚ teĝ do zmieniania stylów w przypadkach, gdy strona jest oglÈdana w urzÈdzeniach o bardzo wysokiej rozdzielczoĂci. Spójrz na poniĝszy kod: @media (min-resolution: 2dppx) { /* Style. */ } To zapytanie stanowi, ĝe zawarte w nim reguïy majÈ zostaÊ zastosowane tylko w urzÈdzeniach o rozdzielczoĂci ekranu wynoszÈcej 2 plamki na piksel (2dppx). Dotyczy to iPhone’a 4 (urzÈdzenia firmy Apple z ekranami o duĝej gÚstoĂci pikseli nazywajÈ siÚ Retina) i wielu urzÈdzeñ z systemem Android. W razie potrzeby moĝna zmniejszyÊ wartoĂÊ dppx, aby zapytanie odnosiïo siÚ do wiÚkszej liczby urzÈdzeñ. 48 Kup książkę Poleć książkę Rozdziaá 2. • Zapytania medialne: obsáuga zróĪnicowanych obszarów roboczych JeĂli przy definiowaniu zapytania z minimalnÈ rozdzielczoĂciÈ zaleĝy Ci na obsïudze jak najwiÚkszej liczby urzÈdzeñ, dodaj przedrostki producentów za pomocÈ jakiegoĂ sïuĝÈcego do tego narzÚdzia. Nie przejmuj siÚ, jeĂli nie wiesz, co to sÈ przedrostki producentów, poniewaĝ wkrótce wszystko wyjaĂniÚ. Metody organizacji i pisania zapytañ medialnych Na chwilÚ zmienimy temat i przyjrzymy siÚ innym metodom pisania i organizacji zapytañ medialnych w arkuszach stylów. Kaĝda z nich ma pewne zalety i wady. Warto o nich wiedzieÊ, nawet jeĂli teraz wydaje Ci siÚ, ĝe nie sÈ potrzebne w Twoich projektach. DoïÈczanie róĝnych plików CSS za pomocÈ zapytañ medialnych Dla przeglÈdarki internetowej arkusze stylów sÈ zasobami „blokujÈcymi renderowanie strony”. PrzeglÈdarka musi je pobraÊ z serwera i przeanalizowaÊ, aby móc wyĂwietliÊ stronÚ na ekranie. Nowoczesne przeglÈdarki internetowe sÈ przynajmniej wystarczajÈco „bystre”, ĝe rozróĝniajÈ, które style (doïÈczone w nagïówku przy uĝyciu zapytañ medialnych) trzeba przetworzyÊ natychmiast, a które moĝna odïoĝyÊ na póěniej, gdy zostanie zakoñczona wstÚpna faza renderowania. PrzeglÈdarki mogÈ odïoĝyÊ na póěniej wczytywanie stylów doïÈczonych do strony przy uĝyciu niemajÈcych zastosowania zapytañ medialnych (np. jeĂli ekran jest zbyt maïy, by dane zapytanie zostaïo zastosowane) i wróciÊ do nich po zakoñczeniu wstÚpnego wczytywania strony. W ten sposób zyskuje siÚ nieco na wydajnoĂci. WiÚcej informacji na ten temat moĝna znaleěÊ w portalu dla programistów Google na stronie: https://developers.google.com/web/fundamentals/performance/critical-rendering-path/renderblocking-css. Chciaïbym jednak zwróciÊ TwojÈ uwagÚ na nastÚpujÈcy fragment tekstu: „PamiÚtaj, ĝe pojÚcie zasób blokujÈcy renderowanie odnosi siÚ tylko do faktu, ĝe przeglÈdarka wstrzymuje pierwsze renderowanie strony z powodu tego zasobu. Niezaleĝnie od tego, czy nastÚpuje czy nie, przeglÈdarka zawsze pobiera zasób CSS, chociaĝ w przypadku zasobów nieblokujÈcych z niĝszym priorytetem”. Powtórzmy zatem: wszystkie doïÈczone do strony pliki zostanÈ pobrane, ale przeglÈdarka nie musi wstrzymywaÊ renderowania, jeĂli niektóre z nich nie sÈ natychmiast potrzebne. 49 Kup książkę Poleć książkę Responsive Web Design. Projektowanie elastycznych witryn w HTML5 i CSS3 Zatem nowoczesna przeglÈdarka wczytujÈca responsywnÈ stronÚ internetowÈ (zobacz przykïad z folderu 02-03) z czterema arkuszami stylów doïÈczonymi przy uĝyciu czterech róĝnych zapytañ medialnych (zawierajÈcymi róĝne style dla poszczególnych przedziaïów rozmiarowych urzÈdzeñ) pobierze wszystkie te pliki, ale najprawdopodobniej najpierw przetworzy ten, który jest natychmiast potrzebny do renderowania strony. ZasadnoĂÊ dzielenia zapytañ medialnych na wiele plików ChoÊ, jak juĝ wiesz, dzielenie zapytañ medialnych ma pewne zalety, nie zawsze korzyĂci te sÈ warte zachodu (oczywiĂcie nie liczÈc preferencji projektanta w zakresie dzielenia kodu na osobne pliki). Tak czy inaczej, kaĝdy dodatkowy plik oznacza koniecznoĂÊ wysïania do serwera jednego ĝÈdania HTTP wiÚcej, co w niektórych sytuacjach spowalnia proces ïadowania strony. W internecie nic nigdy nie jest ïatwe! Dlatego zanim zdecydujesz siÚ na zastosowanie tej metody, zawsze dokïadnie wszystko przemyĂl i przetestuj wydajnoĂÊ swojej strony w róĝnych urzÈdzeniach. Sam postÚpujÚ w ten sposób, ĝe jeĂli nie mam nadmiaru czasu do wykorzystania, jest to ostatnia technika, za pomocÈ której próbujÚ przyspieszyÊ dziaïanie swoich stron. Najpierw wykonujÚ nastÚpujÈce czynnoĂci: Q kompresujÚ wszystkie obrazy; Q ïÈczÚ i minimalizujÚ wszystkie skrypty; Q Q Q kompresujÚ algorytmem gzip wszystkie serwowane zasoby; buforujÚ statycznÈ treĂÊ w sieciach CDN; usuwam wszystkie niepotrzebne reguïy CSS. Dopiero potem mogÚ rozwaĝyÊ moĝliwoĂÊ wydzielenia zapytañ medialnych do osobnych plików w celu zyskania na wydajnoĂci. Algorytm gzip sïuĝy do kompresowania i dekompresowania plików. Kaĝdy szanujÈcy siÚ serwer powinien umoĝliwiaÊ kompresowanie za jego pomocÈ plików CSS, dziÚki czemu z serwera do przeglÈdarki (w której nastÚpuje dekompresja) przesyïane sÈ mniejsze iloĂci danych. Dobre wprowadzenie do gzip moĝna znaleěÊ w Wikipedii: https://pl.wikipedia.org/wiki/Gzip. ¥ródliniowe zagnieĝdĝanie zapytañ medialnych Prawie zawsze, nie liczÈc pewnych ekstremalnych przypadków, zalecam wstawianie zapytañ medialnych do istniejÈcych arkuszy stylów, obok „normalnych” reguï. 50 Kup książkę Poleć książkę Rozdziaá 2. • Zapytania medialne: obsáuga zróĪnicowanych obszarów roboczych JeĂli Tobie równieĝ to odpowiada, musisz rozwaĝyÊ jeszcze jednÈ kwestiÚ: czy zapytania medialne powinno siÚ definiowaÊ bezpoĂrednio pod zwiÈzanymi z nimi selektorami, czy w caïkiem osobnych blokach na koñcu pliku? CieszÚ siÚ, ĝe pytasz. ÈczyÊ zapytania medialne w bloki czy rozpraszaÊ je w róĝnych miejscach pliku Jestem zwolennikiem pisania zapytañ medialnych bezpoĂrednio pod „normalnymi” reguïami. Powiedzmy np., ĝe chcemy modyfikowaÊ szerokoĂÊ kilku elementów w kilku miejscach arkusza stylów w zaleĝnoĂci od szerokoĂci obszaru roboczego. Ja zastosowaïbym takie rozwiÈzanie: .thing { width: 50%; } @media screen and (min-width: 30rem) { .thing { width: 75%; } } /* Kilka innych reguá. */ .thing2 { width: 65%; } @media screen and (min-width: 30rem) { .thing2 { width: 75%; } } Na pierwszy rzut oka ten kod wyglÈda makabrycznie. SÈ w nim dwa zapytania medialne odnoszÈce siÚ do minimalnej szerokoĂci ekranu 30rem. Przecieĝ takie wielokrotne powtarzanie deklaracji @media to czyste marnotrawstwo. Czy nie powinienem wiÚc zachÚcaÊ do grupowania zapytañ medialnych w pojedyncze bloki, jak poniĝej? .thing { width: 50%; } .thing2 { width: 65%; } 51 Kup książkę Poleć książkę Responsive Web Design. Projektowanie elastycznych witryn w HTML5 i CSS3 @media screen and (min-width: 30rem) { .thing { width: 75%; } .thing2 { width: 75%; } } NiewÈtpliwie tak teĝ moĝna, ale wedïug mnie taka organizacja kodu utrudnia jego modyfikowanie i poprawianie. OczywiĂcie nie ma jedynego poprawnego sposobu zapisywania zapytañ medialnych, ale ja preferujÚ wstawianie ich bezpoĂrednio pod reguïami, których dotyczÈ, dziÚki czemu wszystkie warianty danej reguïy znajdujÈ siÚ w jednym miejscu. Gdy zechcÚ znaleěÊ deklaracjÚ odpowiadajÈcÈ wybranej regule, nie muszÚ potem przeszukiwaÊ caïego arkusza stylów. Procesory CSS majÈ jeszcze wygodniejsze funkcje, poniewaĝ pozwalajÈ na zagnieĝdĝanie zapytañ medialnych w reguïach. W ksiÈĝce Sass i Compass. Praktyczny przewodnik dla projektantów poĂwiÚciïem temu tematowi caïy rozdziaï. Jednym z logicznych argumentów przeciw preferowanej przeze mnie metodzie jest kwestia objÚtoĂci kodu. Ale czy na pewno sam rozmiar pliku jest waĝny do tego stopnia, by zniechÚciÊ nas do organizowania arkuszy stylów w taki sposób? Wiadomo, ĝe nikt nie chce wysyïaÊ swoim uĝytkownikom rozdÚtych do gigantycznych rozmiarów plików. Z drugiej strony, kompresja gzip (kompresowane powinny byÊ wszystkie zasoby, jakie da siÚ skompresowaÊ) sprawia, ĝe wzrost rozmiaru pliku CSS staje siÚ nieistotny. Sprawdziïem to na wiele sposobów, wiÚc jeĂli ten temat szczególnie CiÚ interesuje, moĝesz przeczytaÊ mój artykuï: http://benfrain.com/inline-or-combined-media-queries-in-sass-fight/. Ogólnie chodzi w nim o to, ĝe moim zdaniem kwestia rozmiaru pliku w dyskusji o tym, jakÈ metodÚ definiowania zapytañ medialnych stosowaÊ, jest nieistotna. JeĂli chcesz wpisywaÊ zapytania medialne bezpoĂrednio pod reguïami, których dotyczÈ, i jednoczeĂnie wszystkie reguïy zwiÈzane z danym zapytaniem mieÊ w jednym bloku, to moĝesz skorzystaÊ z narzÚdzi kompilacyjnych (w tej chwili Grunt i Gulp majÈ odpowiednie wtyczki). Znacznik meta viewport JeĂli chcesz maksymalnie wykorzystaÊ moĝliwoĂci zapytañ medialnych, musisz sprawiÊ, aby urzÈdzenia z mniejszymi ekranami wyĂwietlaïy strony w odpowiednich dla siebie wymiarach (a nie np. prezentowaïy strony o szerokoĂci 980 pikseli, które trzeba by byïo powiÚkszaÊ i pomniejszaÊ). 52 Kup książkę Poleć książkę Rozdziaá 2. • Zapytania medialne: obsáuga zróĪnicowanych obszarów roboczych Kiedy w 2007 r. firma Apple wyprodukowaïa iPhone’a, wprowadziïa wraz z nim wïasny znacznik meta viewport, który jest juĝ obsïugiwany przez system Android i wiele innych platform. Znacznik ten sïuĝy do sygnalizowania przeglÈdarkom urzÈdzeñ przenoĂnych przez strony internetowe, w jaki sposób naleĝy je renderowaÊ. W przyszïoĂci kaĝda responsywna strona, która ma dobrze prezentowaÊ siÚ takĝe na maïych ekranach, bÚdzie musiaïa mieÊ zdefiniowany ten znacznik. Testowanie projektów responsywnych w emulatorach ChoÊ nic nie zastÈpi testów witryn na wïaĂciwych urzÈdzeniach, warto skorzystaÊ z emulatorów dla systemów Android i iOS. Gwoli ĂcisïoĂci: symulator tylko symuluje dane urzÈdzenie, podczas gdy emulator naprawdÚ próbuje interpretowaÊ pierwotny kod urzÈdzenia. Emulator Androida dla systemów Windows, Linux i Mac jest darmowy — wystarczy ĂciÈgnÈÊ i zainstalowaÊ zestaw narzÚdzi Android Software Development Kit (SDK) z witryny: http://developer.android.com/sdk/. Symulator iOS dostÚpny jest tylko dla uĝytkowników systemu Mac OS X — jest czÚĂciÈ pakietu Xcode (dostÚpnego za darmo w Mac App Store). Takĝe same przeglÈdarki internetowe zawierajÈ coraz to lepsze emulatory róĝnych urzÈdzeñ. Zarówno Firefox, jak i Chrome posiadajÈ specjalne ustawienia pozwalajÈce emulowaÊ wiele róĝnych urzÈdzeñ przenoĂnych i obszarów roboczych. Znacznik meta viewport wstawia siÚ w elemencie <head> dokumentu HTML. Moĝna go ustawiÊ na konkretnÈ szerokoĂÊ (wyraĝonÈ np. w pikselach) lub na wspóïczynnik skalowania, np. 2.0 (dwukrotnoĂÊ rzeczywistego rozmiaru). Poniĝej znajduje siÚ przykïadowa definicja z ustawionÈ skalÈ na 200% (2.0): <meta name="viewport" content="initial-scale=2.0,width=device-width" /> Przeanalizujmy skïadniÚ tego znacznika, aby dokïadnie zrozumieÊ zasadÚ jego dziaïania. atwo rozszyfrowaÊ znaczenie atrybutu name="viewport". Atrybut content="initial-scale=2.0" powoduje dwukrotne powiÚkszenie treĂci na stronie (wartoĂÊ 0.5 spowodowaïaby dwukrotne zmniejszenie, a 3.0 trzykrotne zwiÚkszenie itd.). Natomiast fragment width=device-width mówi przeglÈdarce, ĝe szerokoĂÊ strony powinna byÊ równa szerokoĂci urzÈdzenia. Za pomocÈ znacznika meta moĝna teĝ kontrolowaÊ maksymalny stopieñ powiÚkszania i zmniejszania strony przez uĝytkownika. Poniĝszy prosty przykïad umoĝliwia uĝytkownikom powiÚkszenie obrazu na szerokoĂÊ trzykrotnie wiÚkszÈ niĝ szerokoĂÊ ekranu i zmniejszenie go na szerokoĂÊ dwukrotnie mniejszÈ od szerokoĂci ekranu. <meta name="viewport" content="width=device-width, maximum-scale=3, minimum-scale=0.5" /> Istnieje teĝ moĝliwoĂÊ wyïÈczenia funkcji zmniejszania i powiÚkszania (choÊ trzeba pamiÚtaÊ, ĝe jest ona bardzo waĝnym mechanizmem dostÚpnoĂci i dlatego w praktyce rzadko kiedy zaleca siÚ ten krok): <meta name="viewport" content="initial-scale=1.0, user-scalable=no" /> 53 Kup książkę Poleć książkę Responsive Web Design. Projektowanie elastycznych witryn w HTML5 i CSS3 Tutaj najwaĝniejszy jest fragment user scalable=no. Zmienimy wartoĂÊ wspóïczynnika skalowania na 1.0, dziÚki czemu przeglÈdarka dopasuje wielkoĂÊ strony do 100% wielkoĂci obszaru roboczego. Ustawienie tego parametru na szerokoĂÊ urzÈdzenia sprawia, ĝe strona bÚdzie renderowana na caïej szerokoĂci obsïugujÈcych te ustawienia przeglÈdarek. W wiÚkszoĂci przypadków definicja tego znacznika powinna wyglÈdaÊ nastÚpujÈco: <meta name="viewport" content="width=device-width,initial-scale=1.0" /> Konsorcjum W3C zauwaĝyïo, ĝe znacznik meta viewport jest w coraz powszechniejszym uĝyciu, wiÚc stara siÚ przenieĂÊ jego funkcjonalnoĂÊ do CSS. Na stronie: http://dev.w3.org/csswg/css-device-adapt/ znajdziesz informacje o deklaracji @viewport. Chodzi o to, by zamiast wprowadzaÊ oddzielny znacznik <meta> w sekcji <head> witryny, moĝna byïo deklarowaÊ wyraĝenia typu @viewport { width: 320px; } w arkuszu stylów. Deklaracja ta ustawiïaby szerokoĂÊ przeglÈdarki na 320 pikseli. Niestety, przeglÈdarki internetowe sïabo obsïugujÈ tÚ technikÚ, wiÚc dla pewnoĂci moĝna siÚ posïugiwaÊ kombinacjÈ znacznika meta i deklaracji @viewport. MyĂlÚ, ĝe juĝ doĂÊ dobrze orientujesz siÚ, do czego sïuĝÈ i jak dziaïajÈ zapytania medialne. Zanim przejdziemy do caïkiem nowego tematu, chciaïbym jeszcze zrobiÊ przeglÈd tego, co szykuje nam przyszïoĂÊ w nastÚpnej wersji specyfikacji. Zobaczmy! Zapytania medialne — poziom 4. W czasie, gdy piszÚ tÚ ksiÈĝkÚ, specyfikacja CSS Media Queries Level 4 jest na etapie szkicu (http://dev.w3.org/csswg/mediaqueries-4/) i opisane w niej nowoĂci nie sÈ zaimplementowane w wielu przeglÈdarkach. Dlatego teĝ, choÊ poniĝej robiÚ przeglÈd najwaĝniejszych elementów tej specyfikacji, naleĝy pamiÚtaÊ, ĝe wiele jeszcze moĝe siÚ zmieniÊ. Zawsze upewnij siÚ, czy to, czego chcesz uĝyÊ, jest juĝ obsïugiwane, i sprawdě, czy nie nastÈpiïy jakieĂ zmiany w skïadni. Omawiana specyfikacja zawiera wiele nowoĂci, ale ja skupiam siÚ tylko na skïadnikach dotyczÈcych skryptów, urzÈdzeñ wskazujÈcych, kwestii wskazywania elementów kursorem oraz Ăwiatïa otoczenia. Obsïuga skryptów W dokumentach HTML czÚsto stosuje siÚ technikÚ polegajÈcÈ na domyĂlnym przypisaniu elementu do klasy oznaczajÈcej, ĝe nie ma ĝadnego skryptu JavaScript, a nastÚpnie zmianie tej klasy na innÈ, gdy zostanie uruchomiony skrypt. Jest to prosty sposób na rozgaïÚzienie kodu (wliczajÈc CSS) na podstawie tej nowej klasy HTML. Technika ta sïuĝy przede wszystkich do pisania reguï przeznaczonych dla uĝytkowników, których przeglÈdarka ma wyïÈczonÈ obsïugÚ JavaScript. 54 Kup książkę Poleć książkę Rozdziaá 2. • Zapytania medialne: obsáuga zróĪnicowanych obszarów roboczych Nie wiem, czy powyĝszy akapit jest zrozumiaïy, wiÚc dodam prosty przykïad. DomyĂlnie w dokumencie HTML znajdowaïby siÚ taki element: <html class="no-js"> Gdy na tej stronie zostanie uruchomiony skrypt JavaScript, jego pierwszym zadaniem bÚdzie zamiana klasy no-js na js: <html class="js"> Teraz moĝemy napisaÊ reguïy CSS przeznaczone do zastosowania tylko wtedy, gdy dziaïajÈ skrypty JavaScript, np. .js .header {display: block;}. W nowej specyfikacji zapytañ medialnych podjÚto próbÚ ustandaryzowania tej metody tak, aby test obsïugi JavaScript moĝna byïo wykonywaÊ wprost z poziomu CSS: @media (scripting: none) { /* Reguáy do zastosowania, gdy brakuje obsáugi JavaScript. */ } Moĝna teĝ sprawdzaÊ, czy JavaScript jest wïÈczony: @media (scripting: enabled) { /* Reguáy do zastosowania, gdy JavaScript jest wáączony. */ } Istnieje teĝ moĝliwoĂÊ sprawdzenia, czy obsïuga JavaScript jest wïÈczona tylko poczÈtkowo. W specyfikacji W3C podano przykïad drukowanej strony, której ukïad jest najpierw budowany z uĝyciem skryptów, ale póěniej JavaScript staje siÚ niedostÚpny. Ten test zapisuje siÚ nastÚpujÈco: @media (scripting: initial-only) { /* Reguáy do zastosowania, gdy JavaScript dziaáa tylko początkowo. */ } Szerszy opis wstÚpnej wersji tej funkcji moĝna znaleěÊ pod adresem: https://drafts.csswg.org/ mediaqueries-4/#mf-scripting. UrzÈdzenia wskazujÈce Na stronach W3C znajduje siÚ nastÚpujÈcy opis funkcji dotyczÈcej urzÈdzeñ wskazujÈcych: „Funkcja ta sïuĝy do sprawdzania obecnoĂci i dokïadnoĂci urzÈdzeñ wskazujÈcych, takich jak mysz. Jeĝeli urzÈdzenie dysponuje kilkoma mechanizmami wskazywania, funkcja musi odzwierciedlaÊ wïaĂciwoĂci podstawowego z nich zgodnie z ustaleniami klienta uĝytkownika”. UrzÈdzenie wskazujÈce moĝe mieÊ jednÈ z trzech wïaĂciwoĂci: none, coarse i fine. 55 Kup książkę Poleć książkę Responsive Web Design. Projektowanie elastycznych witryn w HTML5 i CSS3 UrzÈdzeniem wskazujÈcym o wïaĂciwoĂci coarse (gruby) moĝe byÊ palec w przypadku ekranu dotykowego albo kursor z konsoli do gier, w której nie ma tak precyzyjnego wskaěnika jak mysz. @media (pointer: coarse) { /* Reguáy do zastosowania dla niezbyt precyzyjnego wskaĨnika. */ } UrzÈdzenia o wïaĂciwoĂci fine (precyzyjny) to np.: mysz, rysik lub jakiĂ inny wynalazek do precyzyjnego wskazywania elementów na ekranie. @media (pointer: fine) { /* Style do zastosowania dla precyzyjnych wskaĨników. */ } Moim zdaniem im szybciej przeglÈdarki zacznÈ obsïugiwaÊ te wïasnoĂci, tym lepiej. Obecnie wszyscy majÈ problemy ze stwierdzeniem, czy uĝytkownik dysponuje myszÈ, ekranem dotykowym, czy jednym i drugim, oraz z czego aktualnie korzysta. Najbezpieczniej jest zakïadaÊ, ĝe uĝytkownik korzysta z ekranu dotykowego i zgodnie z tym zaïoĝeniem ustawiaÊ odpowiednie rozmiary elementów. DziÚki temu, nawet jeĂli ktoĂ uĝywa myszy, bez problemu bÚdzie mógï siÚ posïugiwaÊ naszym interfejsem. GdybyĂmy natomiast przyjÚli, ĝe uĝytkownik uĝywa myszy, a ten posïugiwaïby siÚ ekranem dotykowym, to korzystanie z naszej strony byïoby dla niego utrudnione. JeĂli chcesz siÚ dowiedzieÊ, jak wielkie trudnoĂci trzeba przezwyciÚĝyÊ przy projektowaniu stron dla urzÈdzeñ z myszÈ i ekranem dotykowym, polecam zestaw slajdów pt. Getting touchy Patricka H. Lauke'a: https://patrick ´hlauke.github.io/getting-touchy-presentation/. Szerszy opis wstÚpnej wersji tej funkcji moĝna znaleěÊ pod adresem: http://dev.w3.org/csswg/ mediaqueries-4/#mf-interaction. Funkcja sprawdzania obsïugi efektu hover Nietrudno zgadnÈÊ, ĝe funkcja sprawdzania obsïugi efektu hover dotyczy testowania, czy uĝytkownik jest w stanie umieĂciÊ kursor nad elementem na stronie. JeĂli obecnych jest kilka urzÈdzeñ wejĂciowych (np. ekran dotykowy i mysz), pod uwagÚ brane sÈ wïaĂciwoĂci tego podstawowego. Poniĝej przedstawiam moĝliwe wartoĂci i przykïady kodu. Dla uĝytkowników bez moĝliwoĂci umieszczania kursora nad elementami moĝemy pisaÊ reguïy z wartoĂciÈ none: @media (hover: none) { /* Style do zastosowania, gdy uĪytkownik nie moĪe umieszczaü kursora nad elementami. */ } Dla uĝytkowników, którzy mogÈ posïugiwaÊ siÚ kursorem, ale muszÈ w tym celu wykonaÊ jakÈĂ znaczÈcÈ czynnoĂÊ, naleĝy napisaÊ deklaracjÚ z wartoĂciÈ on-demand: 56 Kup książkę Poleć książkę Rozdziaá 2. • Zapytania medialne: obsáuga zróĪnicowanych obszarów roboczych @media (hover: on-demand) { /* Style do zastosowania, gdy uĪytkownik moĪe uĪywaü kursora, ale wymaga to od niego /* konkretnego wysiáku. */ } Aby wyznaczyÊ reguïy dla uĝytkowników mogÈcych bez ĝadnych przeszkód posïugiwaÊ siÚ kursorem, wystarczy uĝyÊ wartoĂci hover. @media (hover) { /* Style do zastosowania, gdy uĪytkownik moĪe bez przeszkód posáugiwaü siĊ kursorem. */ } IstniejÈ jeszcze opcje any-pointer i any-hover. DziaïajÈ podobnie jak opisane powyĝej ustawienia pointer i hover, z tym ĝe sprawdzajÈ, czy danÈ moĝliwoĂÊ ma którekolwiek z dostÚpnych urzÈdzeñ. Zapytania dotyczÈce otoczenia Czy nie byïoby przyjemnie, gdybyĂmy mogli zmieniaÊ nasze projekty na podstawie warunków panujÈcych w otoczeniu uĝytkownika, np. natÚĝenia Ăwiatïa? DziÚki temu, gdyby uĝytkownik znajdowaï siÚ w ciemnym pokoju, moglibyĂmy zastosowaÊ nieco przytïumione kolory. Albo odwrotnie: gdyby oĂwietlenie otoczenia miaïo duĝe natÚĝenie, moglibyĂmy zwiÚkszaÊ kontrast kolorów. PodjÚto juĝ próby rozwiÈzania tego typu problemów za pomocÈ zapytañ medialnych. Spójrz na poniĝsze przykïady: @media (light-level: normal) { /* Style dla standardowych warunków oĞwietlenia. */ } @media (light-level: dim) { /* Style dla sáabego Ğwiatáa otoczenia. */ } @media (light-level: washed) { /* Style dla jasnego Ğwiatáa otoczenia. */ } Warto wiedzieÊ, ĝe jest kilka implementacji tych zapytañ medialnych. Poza tym moĝna siÚ spodziewaÊ zmian w specyfikacji, zanim bÚdzie moĝna bezpiecznie z niej korzystaÊ. Jednak juĝ teraz dobrze jest siÚ orientowaÊ, jakie zmiany mogÈ nastÈpiÊ w ciÈgu kilku najbliĝszych lat. Szerszy opis wstÚpnej wersji tej funkcji moĝna znaleěÊ pod adresem: http://dev.w3.org/ csswg/ mediaqueries-4/#mf-environment. 57 Kup książkę Poleć książkę Responsive Web Design. Projektowanie elastycznych witryn w HTML5 i CSS3 Podsumowanie W tym rozdziale dowiedziaïeĂ siÚ, czym sÈ zapytania medialne CSS3, jak je zadeklarowaÊ w plikach CSS i jak mogÈ Ci one pomóc w stworzeniu projektu RWD witryny. DowiedziaïeĂ siÚ teĝ, jak za pomocÈ znacznika meta zmusiÊ nowoczesne przeglÈdarki przenoĂne, aby wczytywaïy strony w taki sposób, w jaki chcesz. Ostatecznie przekonaïeĂ siÚ jednak, ĝe za pomocÈ samych zapytañ medialnych moĝna tworzyÊ projekty adaptacyjne, czyli takie, które zmieniajÈ skokowo ukïad w zaleĝnoĂci od warunków. Prawdziwie responsywna strona gïadko przechodzi od jednego ukïadu do innego. Do osiÈgniÚcia naszego celu potrzebna bÚdzie wiÚc teĝ znajomoĂÊ ukïadów pïynnych, które mogÈ siÚ elastycznie zmieniaÊ miÚdzy kolejnymi punktami kontrolnymi. Tworzenie ukïadów pïynnych uïatwiajÈcych harmonijne przejĂcie miÚdzy stanami narzucanymi przez nasze zapytania medialne jest tematem kolejnego rozdziaïu. 58 Kup książkę Poleć książkę Skorowidz A algorytm gzip, 50, 52 animacja, 201 CSS, 215, 236 SVG, 195, 201, 204, 205, 206, 212 API, 95 Archibald Jake, 207 atrybut alt, 132 aria-label, 276 autocomplete, 246 autofocus, 244, 246 data-*, 133 fill, 198 height, 187 lang, 98, 108 list, 246, 247 placeholder, 243 required, 244, 248, 262 selektor, Patrz: selektor sizes, 90, 91 srcset, 89, 90, 91 viewbox, 187 width, 187 Autoprefixer, 68, 157 B Béziera krzywa, Patrz: krzywa Béziera biblioteka Modernizr, Patrz: Modernizr blok Ăródliniowy, 65 Kup książkę Bootstrap, 275 BrowserSync, 269 C Chrome, 53 cieñ, 158, 159, 172 elementu, 159, 161 wewnÚtrzny, 160 Coyier Chris, 65, 180 CSS animacja, Patrz: animacja CSS preprocesor, Patrz: preprocesor CSS przejĂcie, Patrz: przejĂcie CSS szkielet, 275 transformacja, Patrz: transformacja CSS wydajnoĂÊ, 179 CSS Masking Module, 180 CSS3 reguïa, Patrz: reguïa custom propertiy, Patrz: wïasnoĂÊ uĝytkownika D deseñ tïa, 168 dokument HTML5, 97, Patrz: HTML5 DPI, 91 DPR, 91 Draw SVG, 190 dyrektywa @import, 44 @media, 33, 44, 56, 57 @supports, 129, 130 děwiÚk, 113 E efekt hover, 56 wypeïnienia, 264 ekran dotykowy, 56 orientacja, 42 Retina, Patrz: Retina rozdzielczoĂÊ, 48 element a, 100 address, 106 article, 103 aside, 103 b, 107 cieñ, Patrz: cieñ elementu datalist, 246, 247 defs, 188 desc, 188 details, 104 div, 109 em, 107, 110 fieldset, 242 figcaption, 104 figure, 103, 104 footer, 105 g, 188 h1, 106 Poleć książkę Skorowidz header, 105 hgroup, 106, 108 html, 98 HTML5, 96 i, 108, 110 img, 91, 191, 199 main, 101, 102 multimedialny, 113 format alternatywny, 114 nav, 102 object, 191, 199 picture, 91 pïywajÈcy, 65 pozycjonowanie bezwzglÚdne, 229 przestarzaïy, 108 rola, 111 script, 108 section, 102, 103, 109 semantyczny, 101 na poziomie tekstu, 107 source, 92, 114 summary, 104 SVG, 187, 188 title, 188 use, 196, 198 em, 33, 43 Embedded Content, 89 emulator, 53 F feature query, Patrz: zapytanie o obsïugÚ wïasnoĂci film, 113 responsywny, 115 wspóïczynnik ksztaïtu, 116 Filter Effects, 173 filtr, 172, 173 blur, 174 brightness, 174 contrast, 174 CSS, 174, Patrz: filtr drop-shadow, 173, 174 grayscale, 175 hue-rotate, 176, 179 invert, 176 ïÈczenie, 179 opacity, 177 saturate, 178 sepia, 178 SVG, 173, 208 url, 174 Firefox, 41, 53 flexbox, 59, 64, 66, 88, 126, 129, 282 automatyczne dodawanie przedrostków, 68 inline, 73 kolejnoĂÊ elementów, 83 obsïuga przez przeglÈdarki, 66 specyfikacja, 66 wïasnoĂÊ, 68, 70, 71, 72, 73, 74 Flexible Box, Patrz: flexbox font Roboto, 149 sieciowy, 148, 151 format GIF, 183, 191 JPEG, 183, 191 PNG, 183, 190, 191, 192 SVG, Patrz: SVG WebP, 92 formularz HTML5, 242, 243 formatowanie CSS, 259 pole adres URL, 250 color, 254 date, 255 email, 248 liczbowe, 249 month, 255 pattern, 253 tel, 252 time, 256 week, 256 wymagane, 262 wyszukiwania, 253 zakres, 257 Foundation, 275 funkcja calc, 146 cubic-bezier, 219 czasu, 219, 220 ease, 219, 220 ease-in, 219 ease-in-out, 219 ease-out, 219 linear, 219 G graceful degradation, Patrz: strona elegancka redukcja funkcjonalnoĂci gradient, 162 generator, 166 kierunek, 163 liniowy, 162, 166 powtarzajÈcy siÚ, 167 promienisty, 165, 166, 168 punkty kontrolne, 163, 164 responsywny, 166 grafika SVG, Patrz: SVG wektorowa, 185 GreenSock, 205, 206, 207 H HSB, 152 HSL, 152, 153, 158 HSLA, 154 HTML5, 26, 95 element, Patrz: element HTML5 semantyka, 95, 101 skïadnia, 99 HTML5 Boilerplate, 99 HTTP2, 281 I IcoMoon, 190, 196 Iconizr, 195 identyfikator URI, Patrz: URI ikona, 190 Illustrator, 189 Inkscape, 190 instrukcja if-else, 41, 128 switch, 128 interfejs programistyczny, Patrz: API 285 Kup książkę Poleć książkę Skorowidz Internet Explorer wersja, 24 Irish Paul, 229 J JavaScript, 54, 273, 279 jednostka dpcm, 172 dpi, 172 dppx, 172 em, Patrz: em piksel, Patrz: piksel procent, 33 rem, Patrz: rem vh, 90, 148 vmax, 148 vmin, 148 vw, 90, 148 jÚzyk HTML, 186 SMIL, 201 XML, 186 znacznikowy, 186 jQuery, 192 K kanaï alfa, 152, 154 klasa js, 55 no-js, 55 klatka kluczowa, 236 Koblentz Thierry, 116 kodu rozgaïÚzienie, 54 kolor, 152, 197 kontrolka, 247, 248 daty i godziny, 254 krzywa Béziera, 220 L LESS, 25 M Marcotte Ethan, 23, 60 maska, 180 Matrix Construction Set, 227 Media Queries, 40 poziom 4, 46, 54 Method Draw, 190 Modernizr, 99, 130, 132, 193, 272 O obraz, 29, 191 responsywny, 60, 88, 90, 92 rozdzielczoĂÊ, 89, 172 SVG, Patrz: SVG szerokoĂÊ, 30, 31 technika obcinania, 180 tïa, 169 WebP, Patrz: format WebP obszar roboczy, 28, 187 Offline Web Applications, 116 okna przewijanie inercyjne, 127 poziome, 126, 132, 141 oĂ czasu, 236 P piksel, 33, 43 w CSS, 90 plik css/styles.css, 30 kompresowanie, 50, 52 PostCSS, 25 preprocesor CSS, 25, 41 LESS, Patrz: LESS PostCSS, Patrz: PostCSS Sass, Patrz: Sass Stylus, Patrz: Stylus program Adobe Illustrator, Patrz: Illustrator Inkscape, Patrz: Inkscape Sketch, Patrz: Sketch progressive enhancement, Patrz: strona stopniowe ulepszanie przedrostek producenta, 49, 157 przeglÈdarka funkcjonalnoĂci, 271 obsïugiwana, 271 odĂwieĝanie, 269 przeglÈdarka internetowa, 23 Firefox, Patrz: Firefox funkcjonalnoĂci, 25 Internet Explorer, Patrz: Internet Explorer przejĂcie CSS, 215, 216, 219 rodzaj, 218 przestrzeñ nazw, 188 przezroczystoĂÊ, 154 pseudoelement, 145 ::after, 127 ::before, 127 :first-line, 145 pseudoklasa, 136, 142 :has, 147 :root, 146 strukturalna, 144 pseudoselektor :placeholdershown, 244 punkt kontrolny, 33, 273 R reguïa @font-face, 149, 151 break-word, 124 column-count, 123 column-width, 121 deklaracja, 120 keyframes, 236 selektor, 120 struktura, 120 word-wrap, 124 rem, 34, 43 Responsive Web Design, Patrz: RWD Retina, 48 RGB, 152, 158 RGBA, 152 Rieger Bryan, 33 RWD, 22, 23 S Sass, 25, 41 sekcja body, 26 selektor, 132, 135, 265 empty, 144 fragmentu, 133, 134 286 Kup książkę Poleć książkę Skorowidz has, 147 klasy, 136 last-child, 137 negacji, 143 n-tego potomka, 137, 138, 141 nth-last-of-type, 140 nth-of-type, 140 pseudoklas, 142 relacyjny, 147 strukturalny, 137 szybkoĂÊ, 179 Service Workers, 117 Sharp Remy, 96 Sketch, 188, 189 skrypt JavaScript, 54, 96 sïowo kluczowe print, 42 screen, 33, 42 SMIL, 201, 202 Snap.svg, 205 Soueidan Sara, 181 sprite graficzny, 193, 195, 211 stopka, 82 strona elegancka redukcja funkcjonalnoĂci, 24 HTML5, 97 projekt responsywny, Patrz: RWD responsywna, 26, 59, 60, 63, 64, 66, 115, 268, 271 offline, 116 wydajnoĂÊ, 281 standard dostÚpnoĂci, 110, 111 testowanie, 112 WAI-ARIA, 111, 112 WCAG, 110 stopka, 82 stopniowe ulepszanie, 24, 130, 269, 270, 272 transformacje, 233 ukïad o staïej szerokoĂci, 59, 60, 63, 64 pïynny, 59, 60, 63, 64 tabelaryczny, 65 wielokolumnowy, 121 Style Tiles, 268 Stylus, 25 SVG, 184, 191, 199, 211 animacja, 195, 201 CSS, 204 JavaScript, 205, 206 filtr, Patrz: filtr SVG formatowanie, 202, 203 ikona, Patrz: ikona kolor, 197 ksztaït, 189 optymalizacja, 207 rysowanie linii, Patrz: technika stroke-dashoffset Ăcieĝka, Patrz: Ăcieĝka Ăródliniowe, 199 ukïad wspóïrzÚdnych, 188 w kodzie HTML, 195 w przeglÈdarkach, 200 w tle, 192, 199 zapytanie medialne, Patrz: zapytanie medialne w SVG SVG-edit, 190 SVGO, 207 SVGOMG, 207 symulator, 53 ¥ Ăcieĝka, 189 fill, 198 T technika stroke-dashoffset, 206, 207 tïo, 264 obraz, Patrz: obraz tïa SVG, Patrz: SVG w tle wymiary, 170 transformacja CSS, 215 dwuwymiarowa, 221 macierzowa, Patrz: transformacja CSS matrix matrix, 221, 226, 227, 228 rotate, 221, 225, 232 scale, 221, 222 skew, 221, 226 translate, 221, 222 trójwymiarowa, 229, 230, 232 U URI, 194, 195, 211 urzÈdzenie wskazujÈce, 55 UTF-8, 98 V Velocity.js, 205 viewport, Patrz: obszar roboczy W W3C, 40 WAI-ARIA header, 111 walidator ostrzeĝenie, 108 Webshims Lib, 258 Wendelken Aurelius, 265 wïasnoĂÊ, 120 align-items, 76 align-self, 76 animation-duration, 237 animation-fill-mode, 237, 238 animation-play-state, 238 appearance, 277 backface-visibility, 231 background, 163, 165, 166 background-image, 162 background-position, 170, 171 background-size, 170 box-shadow, 159, 160, 161, 172, 173 spread, 161 clear, 65 display :none, 216 flex, 79, 80, 83 flexbox, 68, 70, 71, 72, 73, 74, 79 flex-flow, 72 flex-shrink, 80 justify-content, 78 287 Kup książkę Poleć książkę Skorowidz wïasnoĂÊ max-width, 31 opacity, 154 order, 85 overflow-scrolling, 132 perspective, 230 stroke, 203 SVG fill, 193 tabelaryczna, 65 text-indent, 148 text-overflow, 125 text-shadow, 158, 159 transform-origin, 227 transition, 218, 221 transition-delay, 218 transition-duration, 218 transition-property, 218 transition-timing-function, 218 uĝytkownika, 145 white-space, 126 width, 31 wypeïniacz, 96, 258 wyraĝenie regularne, 253 Z zapytanie medialne, 32, 33, 40, 46 dzielenie na pliki, 50 importowanie, 44 ïÈczenie, 43 o obsïugÚ wïasnoĂci, 128 o rozdzielczoĂÊ, 172 parametry, 44 punkt kontrolny, 268 skïadnia, 41, 43, 51, 52 specyfikacja, 37 w arkuszach stylów, 44, 49 w SVG, 210 zagnieĝdĝanie Ăródliniowe, 50 zagnieĝdĝanie w reguïach, 52 zmienna, 145, Patrz teĝ: wïasnoĂÊ uĝytkownika znacznik audio, 113, 115 doctype, 97 link, 42 meta viewport, 28, 53, 54 Ăródliniowy, 107 video, 113, 115 znaku kodowanie, 98 ¿ ĝÈdanie HTTP, 50 288 Kup książkę Poleć książkę Kup książkę Poleć książkę