Crespo G. - Responsive Web Design z jQuery

Spis treści O autorze 9 O recenzentach 11 Wstęp 15 Co znajdziesz w tej książce? 15 Czego potrzebujesz? 16 Dla kogo jest ta książka? 17 Konwencje 17 Po...

6 downloads 30 Views 22MB Size


Na poniższym rysunku (przedstawionym na następnej stronie) prezentuję okno przeglądarki z przykładowymi filmami pochodzącymi z YouTube, Vimeo i Viddlera, opakowanymi za pomocą wtyczki FitVids.

Ćwiczenie 5. — tworzenie różnych wersji obrazka na główną stronę witryny Jak właśnie widzieliśmy, bardzo ważnym elementem responsywnych stron WWW jest ładowanie obrazków właściwych dla danego urządzenia. Poćwiczmy zatem poznane techniki i zaprezentujmy różne obrazki dla następujących punktów zmiany:  maksymalna szerokość = 480,  maksymalna szerokość = 1024,  minimalna szerokość = 1025.

106

Rozdział 5. • Przygotowywanie obrazków i filmów

Na poniższym rysunku prezentuję całą stronę w połączeniu z obrazkami wymagającymi odpowiedniego dobrania. Tę stronę widzieliśmy już w rozdziale 2. W ramach tego ćwiczenia proszę odpowiednio dobrać obrazki zaznaczone na rysunku czerwoną ramką:

107

Responsive Web Design z jQuery

Zalecam tu wykorzystanie wtyczki Foresight, ponieważ pozwala ona na lepszą wizualizację źródeł obrazków dla poszczególnych punktów zmiany. Nie zapomnij sprawdzić, czy dane urządzenie rzeczywiście obsługuje obrazki o wysokiej gęstości.

Podsumowanie W tym rozdziale nauczyliśmy się przekształcać stronę z wersji używającej sztywnych obrazków na wersję z elastycznymi obrazkami. Dowiedzieliśmy się też, że nie wystarczy dopasować wielkość obrazka do danego urządzenia. Poznaliśmy metody przesyłania użytkownikowi odpowiednio przygotowanego obrazka za pomocą wtyczek Foresight i Picturefill. Oprócz tego zaczęliśmy też kontrolować sposób prezentacji obrazka, skupiając się na jego najważniejszych elementach podczas zmian jego wielkości. Do tego zadania wykorzystywaliśmy wtyczkę FocalPoint. Na koniec nauczyliśmy się jeszcze używać wtyczki FitVids, która pozwala płynnie zmieniać wymiary materiałów filmowych. W następnym rozdziale dowiemy się, które wtyczki prezentujące galerie obrazów przygotowane są do tworzenia responsywnych witryn, jak należy ich używać i jak zmieniać ich opcje w celu zaprezentowania użytkownikom najlepszych efektów. Dodatkowo poznamy gesty, które są najczęściej wykorzystywane i implementowane na stronach dla urządzeń mobilnych.

108

6 Tworzenie responsywnych galerii obrazów Coraz częściej wykorzystywanym elementem stron internetowych są galerie obrazów. Za ich pomocą można tworzyć atrakcyjne przekazy wyposażone w ładne efekty przejścia i animacje, podpisy oraz opisy obrazów. Oprócz tego dobrze użyta galeria może doskonale zaprezentować produkt, przykuć uwagę użytkownika i poprawić sprzedaż. W tym rozdziale poznamy:  różne rodzaje responsywnych galerii obrazów,  metody wykorzystania gestów dotykowych w celu poprawienia współpracy z użytkownikiem,  sposoby implementowania zdarzeń dotykowych w skryptach JavaScript.

Responsywne galerie obrazów Dzisiaj to zupełnie normalne, że po otwarciu strony WWW zobaczymy w jej nagłówku zmieniające się obrazy. Takie galerie obrazów wyświetlają najważniejsze treści i doskonale się sprawdzają w ograniczonej przestrzeni. Oczywiście przestrzeń ta jest bardziej ograniczona, jeżeli stronę oglądamy za pomocą urządzenia mobilnego, ale odpowiednio przygotowana galeria nadal zwraca na siebie uwagę.

Responsive Web Design z jQuery

W przypadku komputerów stacjonarnych różnica pomiędzy ilością miejsca, jaką można użyć do wyświetlenia wyróżnianych treści, a zasobami dostępnymi do realizacji tego zadania zwykle jest ogromna. Tutaj zwykle nie mamy problemów z szybkością działania skryptów, a interakcja związana z poszczególnymi przejściami wykonywana jest za pomocą znaków strzałek przełączających obrazki. Gdy zaczęła się era responsywnych stron WWW, zaczęto obserwować normalne sposoby interakcji użytkowników ze stronami WWW i na tej podstawie zaczęto wprowadzać zmiany. Na przykład zdefiniowano sposoby zmiany obrazków w galeriach bazujące na koncepcji progresywnych rozszerzeń. Rozwiązanie polegało na przygotowaniu podobnych metod dla użytkowników urządzeń mobilnych, czyli wykorzystaniu dotyku i gestów wykonywanych na elementach galerii. W wyniku ciągłego rozwoju przeglądarek i ich technologii powstało wiele wtyczek galerii obrazów przystosowanych do responsywnych stron WWW. Do moich ulubionych wtyczek zaliczam Elastislide, FLexSlider2, ResponsiveSlides, Slicebox i Swiper. Poza nimi istnieje jeszcze wiele innych, a jedynym sposobem na znalezienie rozwiązania dla siebie jest wypróbowywanie tych dostępnych. Zobaczmy zatem, jak działają te wtyczki.

Wtyczka Elastislide Elastislide jest wtyczką biblioteki jQuery, która dopasowuje swój rozmiar i zachowanie do aktualnej wielkości ekranu. Zajmuje się ona obsługą struktury galerii, w tym i samych obrazków, nadając poszczególnym elementom szerokości wyrażane w procentach, a obrazki wyświetlając w ułożeniu poziomym lub pionowym. Pozwala też zdefiniować minimalną liczbę wyświetlanych obrazków. Wtyczka Elastislide udostępniana jest na zasadach licencji MIT. Można ją pobrać pod adresem https://github.com/codrops/Elastislide. Podczas implementowania galerii obrazów trzeba pamiętać, że proste zmniejszenie kontenera i wyświetlenie poziomego paska przewijania nie jest najlepszym rozwiązaniem na urządzeniach mobilnych. Dobrze jest jednocześnie zmniejszyć wszystkie elementy wewnętrzne. Wtyczka Elastislide doskonale rozwiązuje ten problem, pozwalając nam określić minimalną liczbę wyświetlanych elementów bez prostego ukrywania ich za pomocą stylów CSS. Oprócz tego Elastislide wykorzystuje specjalnie dostosowaną wersję biblioteki jQuery o nazwie jQuery++. Jest to kolejna biblioteka JavaScript, która świetnie nadaje się do obsługi dokumentów DOM i specjalnych zdarzeń. W tym przypadku wtyczka używa własnej wersji biblioteki jQuery++, dzięki czemu może wykorzystywać zdarzenia przeciągania (ang. swipe events) z urządzeń mobilnych.

110

Rozdział 6. • Tworzenie responsywnych galerii obrazów

Jak to zrobić? Zaprezentuję tu cztery różne sposoby użycia tej wtyczki do wyświetlenia tej samej galerii. Wystarczy nam do tego tylko jeden dokument HTML definiujący tę galerię. Później będziemy tylko modyfikować skrypt JavaScript wywołujący wtyczkę z odpowiednimi parametrami:

Na samym końcu dokumentu (przed zamykającym znacznikiem ) trzeba jeszcze dołączyć biblioteki jQuery i jQuery++ (są w tym przypadku niezbędne) i oczywiście samą wtyczkę Elastislide: src="js/jquerypp.custom.js"> src="js/modernizr.custom.17475.js"> src="js/jquery.elastislide.js">

Niezbędne jest też dopisanie wewnątrz znacznika wywołania arkusza stylów CSS:

No dobrze, mamy zatem podstawę dla naszych czterech przykładów. W ramach każdego z nich definiować będziemy inne parametry wywołania wtyczki, które pozwolą zmieniać sposób rysowania galerii.

Przykład 1 — przynajmniej trzy widoczne obrazki (ustawienie domyślne) W pierwszym przykładzie zobaczymy domyślny wygląd i zachowanie galerii. Wystarczy na końcu pliku dopisać poniższy skrypt wywołujący wtyczkę Elastislide:

Najważniejsze domyślne opcje takiego rozwiązania to:  wyświetlane będą przynajmniej trzy obrazki,  szybkość efektu przewijania ustawiona jest na 0,5 sekundy,  galeria będzie miała poziome ułożenie,

111

Responsive Web Design z jQuery

 efekt wprowadzania wykorzystuje definicję ease-in-out,  galeria zacznie pokazywanie od pierwszego obrazka z listy. Na poniższym rysunku zobaczyć można, jak będzie wyglądała galeria na tablecie i smartfonie:

Przykład 2 — układ pionowy z przynajmniej trzema widocznymi obrazkami Dostępna jest też opcja rysowania galerii w układzie pionowym. Co więcej, można też przyspieszyć efekt przewijania. Pamiętaj o przygotowaniu takich samych plików jak w przykładzie 1, a potem dopisz do pliku HTML poniższy kod:

Domyślnie wyświetlane są przynajmniej trzy obrazki, ale i to można zmienić, o czym przekonamy się na poniższym rysunku (przedstawionym na następnej stronie).

Przykład 3 — niezmienna obwódka z przynajmniej dwoma obrazkami W tym przykładzie zmienimy minimalną liczbę widocznych obrazków galerii. Różnicę będzie można zauważyć w przypadku oglądania strony na małych ekranach, na których wielkość obrazków nie zmieni się zbyt mocno. Oprócz tego zaczniemy wyświetlanie obrazków od trzeciego w kolejności.

112

Rozdział 6. • Tworzenie responsywnych galerii obrazów

Pamiętaj o dołączeniu takich samych plików jak w przykładzie 1, a następnie dopisz poniższy skrypt zmieniający parametry i umiejscowienie galerii:

113

Responsive Web Design z jQuery

Przykład 4 — przynajmniej cztery obrazki widoczne w galerii W czwartym przykładzie zobaczymy długi kod JavaScript. Głównym zadaniem tego przykładu będzie jednak zaprezentowanie możliwości, jakie daje nam wtyczka Elastislide. Dzięki wykorzystaniu funkcji wywołań zwrotnych oraz funkcji prywatnych możemy śledzić wszystkie kliknięcia i aktualnie wyświetlane obrazki, a także dowolnie zmieniać aktualnie wyświetlany obrazek, tworząc tym samym pełnoprawną galerię, tak jak na poniższym rysunku:

114

Rozdział 6. • Tworzenie responsywnych galerii obrazów

Pod tym względem wtyczka Elastide nie prezentuje się najlepiej na tle pozostałych wtyczek, ponieważ wymaga od nas dodatkowej pracy przy tworzeniu kompletnej galerii obrazków. Zobaczmy zatem, co ma do zaoferowania kolejna wtyczka.

FlexSlider2 — w pełni responsywna galeria FlexSlider2 to niewielka wtyczka biblioteki jQuery tworząca galerię obrazów wyposażoną w takie efekty, jak płynna podmiana i przewijanie obrazków, oraz obsługującą gesty dotykowe na urządzeniach mobilnych i wiele innych opcji. Ta wtyczka zyskuje coraz większą popularność w społeczności twórców stron WWW. Co więcej, takie systemy jak Drupal lub WordPress zaczęły ją już standardowo stosować, choć została ona wydana dopiero w 2011 roku. Stabilna wersja 2.0 obsługuje również starsze przeglądarki, takie jak Safari 4, Chrome 4, Firefox 3.6, Opera 10 i IE7. Równie dobrze obsługiwane są urządzenia z systemem Android i iOS.

Jak to zrobić? Poniżej przygotujemy trzy przykłady zastosowania tej wtyczki, żeby zaprezentować jak najwięcej dostępnych w niej opcji. Na początek wykorzystamy domyślny układ galerii, a potem dodamy do niej elementy nawigacyjne przydające się w sytuacjach, gdy chcemy zaprezentować obrazki o wysokiej rozdzielczości. W ostatnim przykładzie pokażę sposób przygotowania karuzeli obrazków za pomocą wtyczki FlexSlider2. Wszystkie niezbędne pliki można pobrać ze strony https://github.com/woothemes/FlexSlider, natomiast informacje o zestawie opcji oferowanych przez wtyczkę dostępne są pod adresem http://www.woothemes.com/flexslider/.

Przykład 1 — podstawowa galeria Zaczniemy od dopisania poniższego kodu wewnątrz znacznika :

Na samym końcu dokumentu (przed zamykającym znacznikiem ) trzeba jeszcze dołączyć pliki biblioteki jQuery i wtyczki FlexSlider2:

Przygotowywanie pierwszego przykładu możemy rozpocząć od zdefiniowania struktury galerii za pomocą prostej listy wypunktowanej. Musi ona spełniać tylko dwa wymagania. Po pierwsze cała lista musi znaleźć się w elemencie div klasy flexslider, a po drugie sama lista musi otrzymać klasę slides.

115

Responsive Web Design z jQuery



/> /> /> />

Po dołączeniu wtyczki FlexSlider2 możemy dopisać poniższy, uruchamiający ją kod. Zobaczymy tylko domyślny wygląd i zachowanie galerii. Wyświetlony zostanie tylko jeden obrazek, który będzie zastępowany kolejnymi. $(document).ready(function() { $('.flexslider').flexslider({ animation: "slide" }); });

Jak widać na poniższym rysunku, już nawet ten domyślny styl galerii prezentuje się dobrze zarówno na smartfonach, jak i na komputerach stacjonarnych.

Przykład 2 — galeria z karuzelą jako elementem nawigacyjnym Pierwotna struktura kodu HTML pozostaje bez zmian, ale musimy skopiować ją na potrzeby karuzeli nawigacyjnej. Uruchamiając funkcję JavaScript, połączymy obie listy obrazków i zwiążemy je za pomocą odpowiedniego zachowania. Pamiętaj, żeby dołączyć te same pliki, których używaliśmy już w przykładzie 1, a następnie zapisz poniższy kod HTML:

116

Rozdział 6. • Tworzenie responsywnych galerii obrazów



Tworząc tę galerię, musimy wyznaczyć elementy, na które wtyczka będzie miała wpływ. Zrobimy to, przypisując im identyfikatory, dzięki czemu unikniemy ewentualnych konfliktów. Inaczej niż w przykładzie 1, tym razem musimy dwukrotnie wywołać wtyczkę FlexSlider2. W pierwszej części poniższego kodu tworzona jest galeria obrazów, dla której definiujemy też kilka udostępnianych przez wtyczkę opcji, takich jak animation, itemWidth, itemMargin i asNavFor. W drugiej części kodu przygotowujemy element nawigacji w całej galerii: $(document).ready(function() { $('#carousel').flexslider({ animation: 'slide', controlNav: false, animationLoop: false, slideshow: false, itemWidth: 210, itemMargin: 5, asNavFor: '#slider' }); $('#slider').flexslider({ animation: "slide", controlNav: false, animationLoop: false, slideshow: false, sync: "#carousel" }); }); Opcja asNavFor przekształca element #slider w prezentujący miniaturki element nawigacyjny dla galerii #carousel. Opcja sync włącza odwzorowywanie działań wykonywanych na elemencie #slider na element #carousel. Na przykład jeżeli użytkownik będzie przewijał obrazy w galerii, to obrazy prezentowane w elemencie nawigacyjnym będą dopasowywały się do aktualnie wyświetlanego obrazu. I vice versa.

117

Responsive Web Design z jQuery

Bardzo prosta, profesjonalna i sprawnie działająca galeria! Zobaczmy na poniższym rysunku, jak prezentuje się ona na komputerach stacjonarnych i na smartfonach:

Przykład 3 — galeria o minimalnym i maksymalnym zasięgu Na początek dołącz te same pliki, których używaliśmy już w przykładzie 1, a potem dopisz poniższy kod HTML. Zauważ, że wykorzystamy tu taką samą strukturę jak w pierwszym przykładzie:


Tym razem musimy jednak zmienić kod JavaScript, żeby przekazać wtyczce inne parametry, takie jak itemWidth, itemMargin, minItems i maxItems. W tym celu musimy przygotować poniższy kod: $(document).ready(function() { $('.flexslider').flexslider({ animation: "slide", animationLoop: false, itemWidth: 210, itemMargin: 5, minItems: 2, maxItems: 4 }); });

118

Rozdział 6. • Tworzenie responsywnych galerii obrazów

Opcje itemWidth i itemMargin powinny być podawane w pikselach. Bez obaw — wtyczka doskonale poradzi sobie z obsługą takich sztywnych wartości.

Oprócz tego w zależności od szerokości ekranu urządzenia za pomocą opcji minItems i maxItems definiują one minimalną i maksymalną liczbę elementów wyświetlanych na ekranie. Na poniższym rysunku można zobaczyć działanie tak przygotowanej galerii na komputerze stacjonarnym i na smartfonie: to ja i mój dżej dżej

ResponsiveSlides — najlepsza z prostych galerii ResponsiveSlides to niewielka wtyczka biblioteki jQuery, która może działać w dwóch odmiennych trybach. W pierwszym automatycznie płynnie podmienia obrazki, a w drugim działa jak responsywny zasobnik z obrazkami wyposażony w różne możliwości nawigacji pomiędzy nimi. Wtyczka ta działa na wielu różnych przeglądarkach, w tym i na starszych wersjach IE oraz w przeglądarce Android 2.3 i nowszych. Do IE6 i innych starych przeglądarek dodaje też obsługę właściwości CSS max-width. Dzięki tej właściwości wtyczka może dopasowywać się do małych ekranów. Do prawidłowego działania wtyczka wymaga dołączenia biblioteki jQuery. Poza tym wszystkie prezentowane przez nią obrazki muszą mieć takie same wymiary. Wszystkie niezbędne pliki oraz dokumentację wtyczki można znaleźć pod adresem https:// github.com/viljamis/ResponsiveSlides.js.

119

Responsive Web Design z jQuery

Jak to zrobić? Za chwilę przedstawię trzy przykłady prezentujące najważniejsze funkcje opisywanej wtyczki. W pierwszym przykładzie dowiemy się, które pliki są jej niezbędne do pracy i jakie są jej domyślne ustawienia. W drugim przykładzie wykorzystamy najróżniejsze parametry pozwalające na zmianę zachowania wtyczki w celu dopasowania jej do wymagań naszego projektu. W trzecim przykładzie zaimplementujemy dodatkowe elementy nawigacyjne umożliwiające użytkownikowi szybkie przejście do wybranego przez siebie obrazka.

Przykład 1 Zaczniemy od dołączenia w znaczniku plików CSS wtyczki ResponsiveSlides:

Wtyczka wykorzystuje wypunktowane listy HTML do przygotowania pokazu slajdów. Trzeba jednak nadać elementowi
    odpowiednią klasę, tak żeby wtyczka mogła wykryć listę, której powinna użyć:


    • />
    • /> /> />

      Następnie na samym dole dokumentu (przed zamykającym znacznikiem ) musimy dołączyć pliki biblioteki jQuery oraz wtyczki ResponsiveSlides.

      Teraz wystarczy już tylko wywołać kod wtyczki dla listy rslides. Poniższy kod dopisz zaraz za powyższym: W pliku demo.css (jest dołączany do wtyczki) zapisanych jest wiele stylów CSS, które mogą wspomagać prace nad dopasowaniem wyglądu galerii. Sam plik nie jest niezbędny do jej działania, ale bardzo poprawia jej wygląd i z pewnością przyda się podczas dalszych prac.

      120

      Rozdział 6. • Tworzenie responsywnych galerii obrazów

      W domyślnych ustawieniach galeria prezentuje się tak, jak na poniższym rysunku:

      Przykład 2 Zaczniemy dokładnie tak samo jak w poprzednim przykładzie, czyli od dołączenia plików CSS w znaczniku naszej strony i zapisania wywołań biblioteki jQuery oraz wtyczki ResponsiveSlides tuż przed zamykającym znacznikiem . W tym przykładzie dodamy jeszcze element div klasy slider_container opakowujący listę z obrazkami. Ułatwi to nam umiejscowienie strzałek oraz podpisów przy każdym slajdzie. Jeżeli w danym projekcie konieczne będzie przygotowanie podpisów pod slajdami z galerii, to wtyczka ResponsiveSlides doskonale sobie poradzi z tym zadaniem. Zapiszmy zatem kod nowej galerii:
      • Podpis pod obrazkiem

      • Inny podpis

      • A tutaj trzeci podpis

      • I koncowy obrazek



      121

      Responsive Web Design z jQuery

      Na koniec trzeba jeszcze wywołać skrypt wtyczki dla elementu div, w którym umieściliśmy listę obrazków. Zrobimy to natychmiast po załadowaniu strony, umieszczając poniższy kod zaraz za znacznikiem dołączającym wtyczkę. Możliwe jest też poinformowanie wtyczki, że ma rysować jedynie strzałki następnego i poprzedniego slajdu, całkowicie pomijając inne elementy nawigacyjne. W tym celu należy przypisać opcji pager wartość false, a opcji nav wartość true.

      Na poniższym rysunku można zobaczyć obrazki z podpisami oraz elementami nawigacyjnymi przygotowanymi przez style z pliku demo.css (dołączanego do wtyczki):

      122

      Rozdział 6. • Tworzenie responsywnych galerii obrazów

      Przykład 3 W tym przykładzie skoncentrujemy się na realizacji własnych elementów nawigacyjnych, wykorzystujących miniaturki obrazków, które musimy sobie wcześniej przygotować. W ten sposób będziemy mogli zaprezentować nieco inną galerię. W tym celu musimy dopisać do kodu kolejną listę wypunktowaną przechowującą miniaturki i nadać jej identyfikator, który później przekażemy wtyczce:


      • />
      • /> /> />

        Ponownie przypominam o konieczności dołączenia plików CSS już w znaczniku i późniejszym dołączeniu plików biblioteki jQuery oraz wtyczki ResponsiveSlides na końcu pliku HTML. W ramach wywołania wtyczki dla listy o identyfikatorze #slider-example3 przekażemy jej parametr manualControl, w którym podamy identyfikator listy z miniaturkami tworzącymi element nawigacyjny:

        Na poniższym rysunku (przedstawionym na następnej stronie) można zobaczyć nasz świeżo zaimplementowany element nawigacji w galerii.

        Swiper — dotykowa galeria obrazków Swiper to lekka galeria dla urządzeń mobilnych wykorzystująca sprzętowo wspomagane efekty przejść (tam, gdzie jest to możliwe) i niesamowite domyślne reakcje na działania użytkownika. Powinna być stosowana na stronach mobilnych, ale doskonale sprawdza się też na przeglądarkach komputerów stacjonarnych. Ta wtyczka jest moim ulubieńcem z dwóch powodów: działa naprawdę bardzo szybko, szczególnie na smartfonach, a jednocześnie umożliwia użytkownikom komputerów stacjonarnych na wykonywanie niemal tych samych gestów podczas przeglądania zawartości galerii.

        123

        Responsive Web Design z jQuery

        Wszystkie pliki tej wtyczki można pobrać ze strony https://github.com/nolimits4web/Swiper/, a jej pełna dokumentacja dostępna jest pod adresem http://www.idangero.us/sliders/swiper/ api.php.

        Jak to zrobić? Zaczynamy od dołączenia plików CSS i JavaScript w znaczniku :

        Teraz możemy uruchomić skrypt Swiper, przekazując mu parametry container i pagination:

        Zauważ, że plik CSS zmienia tylko sposób animacji slajdów. Musimy zatem dopisać kilka stylów, dopasowując strukturę galerii do naszych potrzeb. Uzupełnimy zatem domyślne style wtyczki za pomocą poniższego kodu:

        Trzeba pamiętać, że do tworzenia pokazu slajdów wtyczka wykorzystuje proste wypunktowane listy języka HTML. Oznacza to, że musimy w tej strukturze zdefiniować kilka klas zapewniających poprawne działanie całości.

        Slajd 1

        Slajd 2



        Klasy swiper-container i swiper-wrapper opakowują całą strukturę galerii. Dodatkowo za pomocą klasy swiper-slide oznaczane są elementy div zawierające poszczególne slajdy, a klasa pager wyznacza element, w którym umieszczone zostaną elementy nawigacyjne. Wygląd galerii przygotowany na stronie demonstracyjnej wtyczki jest naprawdę niesamowity, ale wykorzystane w nim style nie zostały dołączone do pliku idangerous.swiper.css. Oznacza to, ze faktyczny wygląd galerii zależeć będzie wyłącznie od naszych wysiłków, czego przykładem może być poniższy rysunek:

        125

        Responsive Web Design z jQuery

        Dostępne opcje Przeglądając kod wtyczki, można się przekonać, że została ona bardzo sprytnie przygotowana, gdyż umożliwia przeglądarce szybkie rysowanie galerii. Inną ważną cechą są ciągłe aktualizacje wykonywane przez społeczność, która poprawia mniejsze i większe błędy. Aktualnie ta wtyczka wyróżnia się spośród pozostałych między innymi:  możliwością przewijania w poziomie i w pionie,  rozbudowanym API,  elastyczną konfiguracją,  możliwością zagnieżdżania galerii,  funkcją 3D flow. W ramach wersji 1.8.5 do wtyczki Swiper wprowadzona została funkcja 3D flow. Generuje ona niesamowicie realistyczny efekt trójwymiarowy z dynamicznymi cieniami, który mocno wyróżnia się na tle pozostałych wtyczek. Spróbujmy zatem wykorzystać ten efekt w naszej galerii.

        Wykorzystanie funkcji 3D flow Funkcja 3D flow uzupełnia normalne pliki wtyczki, dlatego w pierwszej kolejności trzeba wpisać do znacznika wszystkie pliki wykorzystane w poprzednim przykładzie, a potem jeszcze dołączyć poniższe pliki JavaScript i CSS definiujące style nowej funkcji:

        126

        Rozdział 6. • Tworzenie responsywnych galerii obrazów

        Teraz musimy zmienić kod wywołujący wtyczkę. Poniższa wersja ma wiele parametrów, za pomocą których określamy zachowanie funkcji 3D flow:

        Już teraz możemy podziwiać, jak wielką różnicę wprowadza ta funkcja do wyświetlanej galerii. Samo wykorzystanie funkcji CSS3 Transform sprawia, że wtyczka Swiper pozwala nam na zdefiniowanie najróżniejszych efektów w pokazie slajdów, co widać na poniższym rysunku:

        Więcej przykładów i dokładny opis wszystkich opcji związanych z funkcją 3D flow można znaleźć na stronie http://www.idangero.us/sliders/swiper/plugins/3dflow.php.

        127

        Responsive Web Design z jQuery

        Slicebox — animacja z użyciem obrazów z galerii Slicebox jest wtyczką biblioteki jQuery tworzącą responsywne i trójwymiarowe galerie obrazów z automatyczną redukcją do prostszych rozwiązań dla starszych przeglądarek nieobsługujących nowych właściwości CSS. Efekt wizualny realizowany przez tę wtyczkę naprawdę robi wrażenie. Po zmianie slajdu obrazek jest dzielony na trzy do pięciu części, które obracając się, tworzą niesamowity efekt.

        Jak to zrobić? Po pobraniu plików wtyczki ze strony https://github.com/codrops/Slicebox możemy zacząć od dołączenia plików CSS w znaczniku :

        Niestety w plikach CSS dołączanych do wtyczki brakuje stylu dla elementu opakowującego galerię, dlatego obok musimy dopisać jeszcze jeden styl:

        Następnie wykorzystamy prostą listę wypunktowaną, żeby przygotować dane dla naszej galerii. W strukturze listy wykorzystamy niezbędne identyfikatory, takie jak sb-slider, shadow, nav-arrows i nav-dots, które wyznaczają poszczególne sekcje w kodzie:
        • Kreatywny ratownik

        • Poważny komik

        • Odważny astronauta



        • 128

          Rozdział 6. • Tworzenie responsywnych galerii obrazów

          Uczciwy inwestor



        W prezentowanym kodzie użyłem też specjalnych klas używanych przez wtyczkę, takich jak wrapper (opakowuje całą galerię) i sb-description (wyświetla treść elementu jako opis slajdu). Na samym końcu dokumentu (przed zamykającym znacznikiem ) dołącz jeszcze pliki biblioteki jQuery i wtyczki Slicebox:

        Na zakończenie dopisz jeszcze poniższy kod uruchamiający skrypt wtyczki. Moim zdaniem największy problem jest z tą wtyczką, ponieważ wymaga ona wpisania sporych ilości kodu.

        Niestety wspomniany kod jest zbyt rozbudowany, żeby podać go tutaj, nie ryzykując błędów przy przepisywaniu, dlatego jego działającą postać możesz pobrać ze strony ftp://ftp.helion.pl/ przyklady/rewejq.zip. Na poniższym rysunku (przedstawionym na następnej stronie) można zobaczyć efekt działania tej wtyczki na urządzeniu mobilnym i na komputerze stacjonarnym.

        Wykorzystanie gestów dotykowych Dzisiaj świat urządzeń mobilnych opanowały ekrany dotykowe. Większość smartfonów i tabletów ma już elementy wykorzystujące gesty dotykowe, a teraz technologia ta wkracza też do komputerów stacjonarnych. Luke Wroblewski w swoim artykule Optimizing for Touch Across Devices pisze: Co oznacza uwzględnianie funkcji dotyku na urządzeniach o dowolnej wielkości ekranu? Dwie rzeczy: wielkości elementów dotykowych i ułożenie kontrolek.

        129

        Responsive Web Design z jQuery

        Luke Wroblewski definiuje dwie najważniejsze rzeczy, o których trzeba pamiętać podczas projektowania responsywnych stron dotykowych:  Wielkość elementów dotykowych — Można je dość łatwo zaimplementować, a każdy dotykowy system nawigacji wymaga zastosowania elementów, których użytkownik będzie mógł wygodnie używać nawet za pomocą niedokładnych palców. Odpowiednio przygotowane elementy powinny zapobiegać przypadkowym dotknięciom i wynikającym z tego błędom. W niektórych artykułach minimalna wielkość obszaru dotykowego definiowana jest jako nie mniejsza niż 44 piksele.  Umiejscowienie kontrolek — Kontrolki powinny zostać ułożone w sposób dopasowany do sposobu, w jaki użytkownicy trzymają i wykorzystują swoje urządzenia dotykowe. W przypadku aplikacji na smartfona najczęściej używane i najważniejsze elementy powinny znajdować się w dolnej części ekranu, tak żeby były łatwo dostępne. Proszę spojrzeć na poniższy przykład strony:

        130

        Rozdział 6. • Tworzenie responsywnych galerii obrazów

        Podobnie można przeanalizować typowy sposób trzymania tabletu przez użytkowników. Zwykle trzymane są one dwiema rękami po bokach albo po prostu kładzione są na kolanach:

        Implementowanie zdarzeń dotykowych we wtyczkach JavaScript Istnieje kilka ważnych rozszerzeń i wtyczek języka JavaScript umożliwiających wykorzystanie gestów dotykowych na responsywnych stronach WWW, co bardzo poprawia interakcję z użytkownikiem. Dobrymi przykładami takich wtyczek są QuoJS i Hammer.

        QuoJS — prosta biblioteka interakcji dotykowych Jest to niewielka, modularna, obiektowa i spójna biblioteka języka JavaScript, która upraszcza przeglądanie dokumentów HTML, a także obsługę zdarzeń i żądań Ajax podczas szybkiego tworzenia mobilnych stron WWW. Należy tu zaznaczyć, że QuoJS nie wymaga biblioteki jQuery do działania, a mimo to jest bardzo prostym i użytecznym uzupełnieniem tworzonych stron. Ta niewielka wtyczka (5 do 6 KB spakowanego kodu) pozwala na tworzenie rozbudowanego, elastycznego i dopasowanego do wymagań kodu. Wszystkie niezbędne pliki można pobrać spod adresu https://github.com/soyjavi/QuoJS, natomiast dokładny opis wszystkich opcji dostępny jest pod adresem http://quojs.tapquo.com/. Biblioteka QuoJS obsługuje między innymi takie przydatne gesty, jak:

        131

        Responsive Web Design z jQuery

         pojedyncze dotknięcie,  przytrzymanie (ponad 650 ms),  podwójne dotknięcie, a także różne rodzaje przeciągnięć, uszczypnięć i obrotów.

        Jak to zrobić? Na samym końcu dokumentu (przed zamykającym znacznikiem ) dołącz skrypt biblioteki QuoJS. Tylko w ten sposób będziemy mogli go wykorzystać, tworząc metody obsługi zdarzeń. W poniższym przykładzie zaimplementujemy reakcję na przytrzymanie palca nad elementem o identyfikatorze toolbox:

        Biblioteka QuosJS wykorzystuje składnię z symbolem podwójnego znaku dolara ($$), żeby uniknąć konfliktu z symbolem dolara ($) stosowanym w bibliotece jQuery, która zapewne też będzie używana na wielu stronach.

        Hammer — mała biblioteka wielodotyku Hammer to niewielka (3 KB po spakowaniu) wtyczka biblioteki jQuery obsługująca gesty wielodotyku. Wtyczka ta obsługuje następujące gesty:  dotknięcie,  podwójne dotknięcie,  przesunięcie,  przeciągnięcie,  szczypnięcie,  obrót. Każdy z tych gestów wywołuje odpowiednie zdarzenia uzupełnione przydatnymi danymi.

        132

        Rozdział 6. • Tworzenie responsywnych galerii obrazów

        Jak to zrobić? Po pierwsze trzeba pobrać plik wtyczki ze strony https://github.com/EightMedia/hammer.js. Potem pobrany plik należy dołączyć na końcu dokumentu (przed zamykającym znacznikiem ), tak żeby później możliwe było wykorzystanie tworzonych przez niego zdarzeń: Czasami wersja niewymagająca biblioteki jQuery wydaje się pracować szybciej, ale może nie działać prawidłowo we wszystkich przeglądarkach. Chcąc zamienić wersje wtyczki, wystarczy plik jquery.hammer. min.js podmienić plikiem hammer.min.js.

        Zobaczmy teraz przykładowy kod:

        W tym przykładzie reagujemy na pojedyncze dotknięcie dodaniem lub usunięciem klasy open-box z wybranego elementu. Dostępnych jest jednak wiele innych zdarzeń dotykowych, których szczegóły zostały opisane na stronie https://github.com/EightMedia/hammer.js/wiki.

        Ćwiczenie 6. — tworzenie galerii obrazków za pomocą wtyczki Swiper Dla przypomnienia — tak wygląda galeria z naszego pierwotnego projektu:

        Ten obrazek to tylko sugestia. Możesz zastąpić go dowolnym innym. Głównym zadaniem jest przygotowanie tutaj responsywnej galerii z responsywnymi opisami.

        133

        Responsive Web Design z jQuery

        Podczas tworzenia galerii wybierz jeden obrazek na slajd i wykorzystując wtyczkę Swiper, dodaj do każdego slajdu jeden slogan:  Elastyczność ponad wszystko  Kilka doskonałych chwil  Pełna kontrola nad mięśniami  Sprawność fizyczna kluczem do szczęścia Jak dowiedzieliśmy się już w rozdziale 4., dla stron responsywnych wysoce zalecane jest użycie reguł @font-face. Do wyświetlania sloganów (jako dodatkowe ćwiczenie) wykorzystaj zatem czcionkę Titan One z biblioteki Google Fonts. Pamiętaj, że w razie potrzeby możesz skorzystać z narzędzia FontSquirrel.

        Podsumowanie W tym rozdziale poznaliśmy kilka wtyczek przeznaczonych do tworzenia responsywnych galerii obrazów, takich jak Elastislide, FlexSlider, ResponsiveSlides, Swiper i Slicebox. Nauczyliśmy się ich używać i poznaliśmy ich zalety oraz oferowane efekty. Wiele z tych wtyczek ma już zaimplementowane funkcje obsługi gestów dotykowych. Mimo to na stronie zaprezentowałem jeszcze możliwości wykorzystania tych gestów za pomocą bibliotek QuoJS i Hammer. W następnym rozdziale dowiemy się, jak należy przygotowywać tabele na urządzeniach o niewielkiej szerokości. Poznamy sposoby implementowania różnych często używanych technik, takich jak przewijanie w poziomie, zmniejszanie widocznych kolumn i przekształcanie tabel w sztaple.

        134

        7 Projektowanie tabel responsywnych Tabela na stronie HTML może być naprawdę szerokim elementem, jeżeli ma prezentować dużo różnych danych. Czasami tabela zachowuje swój sens tylko wtedy, gdy wyświetlane są wszystkie dane z każdego wiersza. Tabele same w sobie są w miarę elastyczne, ale jeżeli staną się zbyt wąskie, to zawartość komórek zacznie się zawijać, a to zawsze pogarsza czytelność! Garret Dimon już dawno temu mówił o problemach z dopasowaniem tabeli do zmieniających się wymiarów ekranu z zachowaniem czytelności prezentowanych przez nią danych: Tabele nie najlepiej współpracują z projektami responsywnymi. Tak tylko mówię. W tym rozdziale poznamy cztery różne typy tabel responsywnych oraz sposoby ich tworzenia:  Rozwijane tabele responsywne  Tabele sztaplowane  Poziome przewijanie  Odsyłacze do pełnych tabel

        Tabele responsywne Poniżej przedstawiam rysunek obrazujący najczęstsze problemy związane z tabelami responsywnymi, a mianowicie: minimalna szerokość tabeli większa niż szerokość ekranu oraz zmniejszenie wymiarów całej tabeli (włącznie z rozmiarem tekstu).

        Responsive Web Design z jQuery

        Przyjrzyjmy się zatem różnym metodom rozwiązywania tych problemów.

        Rozwijane tabele responsywne Za pomocą wtyczki FooTable możemy przekształcić standardowe tabele HTML w responsywne tabele rozwijane, dzięki czemu urządzenia z małymi ekranami mogą prezentować tę samą treść, a naszym zadaniem jest tylko ustalenie priorytetów dla tych treści. Zadaniem tej wtyczki jest ukrywanie kolumn uznanych za mniej istotne przy pierwszym przeglądaniu. Oznacza to, że ukryta część danych pojawi się po kliknięciu lub dotknięciu danego wiersza tabeli. Jeżeli dokładniej przyjrzymy się tej wtyczce biblioteki jQuery, zauważymy, że na wysoką jakość jej kodu i łatwość pracy wpłynęły dwie najistotniejsze funkcje: domyślna konfiguracja (realizowana za pomocą atrybutów DOM) oraz ustalanie punktów zmiany (które można ustalać inaczej w stosunku do tych punktów, które być może zostały zdefiniowane na stronie). W następnym przykładzie zobaczymy, jak można to wszystko zdefiniować w dokumencie DOM.

        Jak to zrobić? Po pobraniu plików wtyczki ze strony https://github.com/bradvin/FooTable/ trzeba dołączyć style CSS w znaczniku dokumentu HTML:

        Domyślnie wtyczka FooTable stosuje tylko dwa punkty zmiany: phone ustalony na 480 pikseli i tablet ustalony na 1024 piksele. Te wartości nie muszą pokrywać się z tymi, których używasz dla swoich stron, ponieważ zależą one od tego, ile miejsca przeznaczymy na tabelę. Później dowiemy się też, jak można je w razie potrzeby zmienić. Aby sprawdzić działanie wtyczki, proponuję zastosować poniższy kod HTML:

        136

        Rozdział 7. • Projektowanie tabel responsywnych

        Nazwa kontaktu Telefon Email Zdjęcie
        Bob Budowniczy 555-12345 [email protected] Zdjęcie do profilu
        Bridget Jones 544-776655 [email protected] Zdjęcie do profilu
        Tom Cruise 555-99911 [email protected] Zdjęcie do profilu


        Podstawą funkcjonowania wtyczki FooTable są atrybuty danych. Informacja o tym, które kolumny zostaną ukryte na telefonach i tabletach, zapisana jest już w strukturach DOM. Poniżej przedstawiam najważniejsze atrybuty wykorzystywane przez FooTable:  data-class — definiuje klasę CSS, która ma zostać przypisana komórkom tej kolumny.  data-hide — definiuje punkty zmiany, przy których dana kolumna ma zostać ukryta. Można tu podać kilka punktów zmiany, oddzielając je od siebie przecinkami.  data-ignore — powoduje ukrycie danych treści, ale tylko w przypadku wyświetlania informacji szczegółowych. Zazwyczaj używany jest w połączeniu z atrybutem data-hide i przyjmuje wartość true lub false. Więcej informacji na temat wszystkich atrybutów rozpoznawanych przez wtyczkę można znaleźć pod adresem http://fooplugins.com/footable/demos/data-attributes.htm. Korzystając z atrybutów danych, należy stosować je w znacznikach , a wtyczka sama przeniesie je do odpowiednich komórek tabeli.

        137

        Responsive Web Design z jQuery

        Na samym końcu dokumentu (przed zamykającym znacznikiem ) trzeba dołączyć dwa pliki: biblioteki jQuery i wtyczki FooTable. Potem musimy jeszcze dopisać poniższy kod uruchamiający wtyczkę:

        Jeżeli byśmy chcieli inaczej zdefiniować punkty zmiany, to wystarczy tylko podać nowe wartości w parametrach wywołania skryptu, tak jak w poniższym kodzie:

        Na poniższym rysunku można zobaczyć, co stanie się z tabelą po kliknięciu wiersza z danymi Boba. Porównaj wygląd tabeli w wersji dla smartfonów i dla tabletów:

        138

        Rozdział 7. • Projektowanie tabel responsywnych

        W tym przykładzie na każdym z urządzeń są pewne pola widoczne dopiero po kliknięciu wiersza tabeli w celu wyświetlenia dodatkowych danych. Takie rozwiązanie pozwala wprawdzie uniknąć wyświetlania zbyt wielu danych jednocześnie, ale utrudnia odszukanie kontaktu na przykład na podstawie adresu e-mail, ponieważ wymaga to klikania kolejnych wierszy w celu wyświetlenia tej informacji. Na szczęście istnieją rozszerzenia tej wtyczki rozwiązujące takie problemy. Zobaczmy, jak one działają.

        Rozszerzenia do wtyczki Kolejną zaletą stosowania wtyczki FooTable jest możliwość jej rozbudowywania. Sama wtyczka jest całkowicie modularna, dzięki czemu istnieje możliwość dodawania kolejnych funkcji, takich jak sortowanie, filtrowanie, podział na strony. Wystarczy zastosować odpowiednie rozszerzenia. Istnieje na przykład rozszerzenie dodające możliwość sortowania danych zapisanych w tabeli. W tym celu należy dołączyć do strony plik małego skryptu:

        Teraz trzeba przypisać atrybut data-sort-initial z wartością true do wszystkich elementów, które mają zezwalać na sortowanie. Z kolei atrybut data-sort-ignore z wartością true należy przypisać wszystkim takim elementom, jak obrazki albo numery telefonów, w przypadku których sortowanie nie ma sensu. Nazwa kontaktu Telefon

        Na poniższym rysunku można zobaczyć ikony strzałek, których wtyczka używa do oznaczenia kolumn pozwalających na sortowanie:

        Rozszerzenie filtrujące uzupełnia wtyczkę o pola wyszukiwania pozwalające użytkownikowi odnaleźć potrzebne mu dane. Wyniki takiego wyszukiwania uwzględniają dane, które mogą być aktualnie niewidoczne na ekranie. Dodaj zatem do skryptu kolejny plik:

        139

        Responsive Web Design z jQuery

        Na stronie umieść też pole tekstowe (pod lub nad tabelą), nadaj mu identyfikator filter, a w tabeli dopisz atrybut data-filter o wartości #filter. Kod pola wyszukiwania powinien wyglądać tak: Filtr:

        Na poniższym rysunku cała tabela została przefiltrowana, w wyniku czego pozostała tylko jedna pozycja. Wyszukiwanie się powiodło, mimo że poszukiwana informacja była pierwotnie ukryta:

        Kolejny ciekawy dodatek wyświetla zawartość tabeli na stronach, na których domyślnie mieści się do 10 wierszy danych. Aby go zastosować, należy do kodu strony poniższego pliku dołączyć:

        Do naszej przykładowej tabeli (zaraz za zamykającym znacznikiem ) dopisz poniższy kod wstawiający do niej funkcję podziału na strony. Elementowi div koniecznie trzeba nadać klasę pagination, natomiast pozostałe klasy, takie jak pagination-centered i hide-if-no-paging, są opcjonalne:

        Na potrzeby tego przykładu wprowadziłem limit dwóch elementów na stronę (inaczej by się nie włączyła funkcja podziału na strony), dopisując w elemencie table atrybut data-page-size o wartości 2. A tak wygląda tabela z funkcją podziału:

        140

        Rozdział 7. • Projektowanie tabel responsywnych

        Więcej informacji na temat tych rozszerzeń i listę pozostałych opcji oraz pełną dokumentację wtyczki można znaleźć pod adresem http://fooplugins.com/footable-demos/. Przedstawiona właśnie wtyczka wygląda na rozwiązanie doskonałe, ale istnieją sytuacje, w których konieczne są inne rozwiązania. Przyjrzyjmy się teraz wtyczce Stackedtables.

        Stackedtables Stackedtables jest wtyczką biblioteki jQuery i kolejnym wariantem tworzenia tabel responsywnych. Można ją pobrać ze strony http://johnpolacek.github.io/stacktable.js/. Wtyczka przygotowuje kopię całej tabeli i przekształca szerokie tabele do dwukolumnowego formatu klucz-wartość, który lepiej sprawdza się na małych ekranach. To rozwiązanie nadaje się jedynie dla tabel o niewielkiej liczbie wierszy, ponieważ zbytnio podnosi wysokość tabeli.

        Wykorzystując proste zapytania o media, możemy ukryć pierwotną tabelę i w zamian wyświetlić jej zmienioną wersję. Zobaczmy, jak można użyć tej wtyczki na naszych stronach.

        Jak to zrobić, wykorzystując tabelę z poprzedniego przykładu? Zaczniemy od dołączenia stylów CSS w znaczniku przygotowywanej strony:

        Jeżeli chcielibyśmy inaczej wyznaczyć punkt zmiany, dostosowując to rozwiązanie do smartfonów, to wystarczy otworzyć plik stacktable.css i zmienić w nim właściwość max-width: @media (max-width: 480px) { .large-only { display: none; } .stacktable.small-only { display: table; } }

        141

        Responsive Web Design z jQuery

        Następnie wykorzystamy tę samą tabelę, której użyliśmy już w poprzednim przykładzie, dodając do niej jedynie odpowiedni identyfikator i klasę:
        Nazwa kontaktu Telefon Email Zdjęcie
        Bob Budowniczy 555-12345 [email protected] Zdjęcie do profilu
        Bridget Jones 544-776655 [email protected] Zdjęcie do profilu
        Tom Cruise 555-99911 [email protected] Zdjęcie do profilu


        Na samym końcu dokumentu (przed zamykającym znacznikiem ) musimy dołączyć jeszcze pliki biblioteki jQuery i wtyczki Stacktable. Za nimi trzeba dopisać poniższy kod uruchamiający wtyczkę i przekazujący jej identyfikator tabeli oraz klasę wygenerowanej wersji tabeli, która pozwala wyświetlić ją tylko na smartfonach:

        Na poniższym rysunku można zobaczyć wygląd tabeli na małych urządzeniach i na komputerach stacjonarnych:

        142

        Rozdział 7. • Projektowanie tabel responsywnych

        Poziome przewijanie To rozwiązanie powoduje zablokowanie pierwszej kolumny tabeli i jednocześnie pozwala na przewijanie pozostałych kolumn w poziomie. W ten sposób cały czas widzimy zawartość pierwszej kolumny tabeli, a możliwość przewijania pozostałych umożliwia łatwe porównanie zawartości poszczególnych wierszy. Ten rodzaj prezentacji najlepiej nadaje się do wyświetlania tabel składających się z wielkiej liczby kolumn, w których zawartość pierwszej kolumny jest istotniejsza od zawartości pozostałych. W następnym przykładzie postaram się dokładniej wyjaśnić zasadę działania tego rozwiązania.

        Jak to zrobić? Zaczniemy od pobrania niezbędnych plików ze strony http://zurb.com/playground/responsive-tables. Następnie musimy przygotować zupełnie nowy plik HTML i w znaczniku dołączyć do niego arkusz stylów CSS:

        W kolejnym kroku trzeba dopisać poniższy kod tabeli HTML, w której zdefiniowałem więcej kolumn niż w poprzednich przykładach. Samej tabeli trzeba też nadać klasę responsive:

        143

        Responsive Web Design z jQuery

        Nagłowek 1 Nagłowek 2 Nagłowek 3 Nagłowek 4 Nagłowek 5 Nagłowek 6
        pierwsza kolumna, wiersz 1, komórka wiersz 1, komórka wiersz 1, komórka wiersz 1, komórka wiersz 1, komórka
        pierwsza kolumna, wiersz 2, komórka wiersz 2, komórka wiersz 2, komórka wiersz 2, komórka wiersz 2, komórka


        ważne dane 2 3 4 5 6 ważne dane 2 3 4 5 6

        Na samym końcu dokumentu (przed zamykającym znacznikiem ) musimy jeszcze dołączyć pliki biblioteki jQuery i wtyczki ResponsiveTables:

        Na poniższym rysunku można zobaczyć wynik działania wtyczki na smartfonie lub tablecie:

        144

        Rozdział 7. • Projektowanie tabel responsywnych

        W tabeli wprowadzane są zmiany, jeżeli dostępna szerokość ekranu przekracza 767 pikseli. Chcąc zmienić tę domyślną granicę, należy otworzyć plik responsive-tables.css, odszukać w nim wartość 767 i zastąpić ją inną.

        Jak widać, nie ma w tym nic trudnego. Trzeba docenić skuteczność tego systemu, ponieważ ułatwia on odczytywanie informacji z tabeli, szczególnie wyświetlanych na ekranach małych urządzeń.

        Odwrócenie ułożenia nagłówka Jeżeli uznasz, że wiersz nagłówków tabeli jest ważniejszy od pierwszej kolumny i dlatego musi on być ciągle wyświetlany również na małych ekranach, to możesz skorzystać z ciekawego rozwiązania Davida Bushella wykorzystującego wyłącznie kod CSS. W tym rozwiązaniu nagłówek tabeli zajmuje miejsce pierwszej kolumny. I nie potrzeba tu żadnych dodatkowych bibliotek JavaScript. Wystarczy sam kod CSS3. Zaczniemy od wpisania stylów CSS do znacznika naszej przykładowej strony:

        Tym razem w przykładowej tabeli HTML zapiszemy nieco bardziej realistyczne treści:

        146

        Rozdział 7. • Projektowanie tabel responsywnych

        Nazwisko lekarza Wartości Daty Koszta Status Miasto Województwo
        Dr Kubiak 102 20.03.1940 60,42 PLN Opłacone Wrocław Dolnośląskie
        Dr Maciejczak 137 18.03.1953 69,68 PLN Opłacone Kraków Małopolskie
        Dr Donat 154 01.03.1976 86,68 PLN Oplacone Gdańsk Pomorskie
        Dr Groch 113 30.03.1981 63,50 PLN Opłacone Warszawa Mazowieckie


        Tak wygląda wynik działania tych kilku stylów na ekranie smartfona i tabletu:

        Odnośnik do pełnej tabeli Odnośnik do pełnej tabeli jest techniką rzadziej stosowaną, ponieważ nie rozwiązuje ona całkowicie problemu. Polega ona na zastąpieniu tabeli z danymi jedynie jej szkicem i odnośnikiem do pełnej wersji. Sam problem nie znika, ale tym razem użytkownik, przeglądając wszystkie dane, może przewijać ekran w lewo i w prawo. Istnieje też zapytanie o media uruchamiające ten mechanizm jedynie na małych ekranach.

        147

        Responsive Web Design z jQuery

        Jak to zrobić? Po pierwsze, rozpoczniemy od pobrania pliku full-table.css, który jest dostępny w przykładach dołączanych do tej książki. Jego zawartość należy umieścić w znaczniku tworzonej strony. Wprawdzie jest to tylko kod CSS, ale jest zbyt rozbudowany i wprowadza duże prawdopodobieństwo popełnienia pomyłki przy przepisywaniu. Ponownie wykorzystamy kod tabeli z poprzedniego przykładu, ale wprowadzimy małe zmiany w elemencie table:

        Na samym końcu dokumentu (przed zamykającym znacznikiem ) trzeba jeszcze dołączyć bibliotekę jQuery i dopisać poniższy kod ukrywający i wyświetlający pełną tabelę o podanej nazwie klasy:

        Na poniższym rysunku można zobaczyć zmniejszoną tabelę wyświetlaną na ekranie smartfona z odnośnikiem kierującym do jej pełnej wersji. Ten efekt pojawia się dopiero na ekranach mniejszych niż 520 pikseli (choć tę granicę można zmienić w pliku CSS).

        Wtyczka generuje poziomy pasek przewijania pozwalający zobaczyć pełną szerokość tabeli.

        148

        Rozdział 7. • Projektowanie tabel responsywnych

        Ćwiczenie 7. — tworzenie tabeli responsywnej z cenami za pomocą wtyczki FooTable Przygotujmy teraz tabelę z treścią przedstawioną na poniższym rysunku, wykorzystując do tego wtyczkę FooTable. Treści umieszczone w tabeli nie są rzeczywiste. Wymyśliłem je tylko na potrzeby tego ćwiczenia.

        Na poniższym rysunku prezentuję tabelę wyświetlaną na smartfonie i tablecie. Dla każdego z tych urządzeń przygotowałem osobny wygląd tabeli:

        Zacznij od przygotowania struktury tabeli na podstawie wersji dla tabletów, a potem wykorzystaj wtyczkę FooTable, żeby automatycznie wygenerować wersję dla smartfonów.

        Podsumowanie W tym rozdziale poznaliśmy cztery różne metody obsługi szerokich tabel na ekranach o niewielkiej szerokości. Skoncentrowaliśmy się na implementowaniu poszczególnych technik, ponieważ ich zastosowanie uzależnione jest od rodzaju treści prezentowanych w tabeli. Zaprezentowałem tutaj takie techniki, jak: rozwijane tabele responsywne (wtyczka FooTable), tabele

        149

        Responsive Web Design z jQuery

        w układzie pionowym (wtyczka Stackedtables), tabele z poziomym przewijaniem oraz odnośnik do pełnej tabeli. W następnym rozdziale przyjrzymy się metodom obsługi formularzy i nauczymy się implementować takie funkcje, jak automatyczne uzupełnianie, kalendarze i podpowiedzi.

        150

        8 Implementowanie formularzy responsywnych Język HTML5 ma ogromny wpływ na sposób tworzenia stron internetowych. Dzięki możliwości używania odpowiednich rodzajów pól i wbudowanych w nie mechanizmów kontroli danych możemy teraz budować znacznie lepsze formularze, a to wszystko z kolei poprawia nasze możliwości pozycjonowania stron w wyszukiwarkach. Poszczególne funkcje formularzy są stopniowo wprowadzane we wszystkich nowoczesnych przeglądarkach. Dzięki zastosowaniu biblioteki jQuery możemy jeszcze bardziej wpłynąć na działanie tworzonych stron HTML5, uzupełniając je o funkcje poprawiające interakcję z użytkownikiem. W tym rozdziale poznamy:  typy i atrybuty elementów formularzy,  funkcję autouzupełniania (autocomplete),  funkcję kalendarza (datepicker),  funkcję podpowiedzi (tooltips),  responsywne formularze tworzone przez wtyczkę IdealForms.

        Responsive Web Design z jQuery

        Typy i atrybuty elementów formularzy Elementy pól formularzy wprowadzone w języku HTML5 pozwoliły na skrócenie czasu projektowania stron internetowych oraz poprawę jakości współpracy z użytkownikiem. Te nowe elementy oraz atrybuty zostały już wprowadzone w wielu nowoczesnych przeglądarkach, dzięki czemu może z nich korzystać cała społeczność sieci WWW, a to jeszcze bardziej przyspiesza ich upowszechnienie. Najczęściej wykorzystywanymi elementami formularzy HTML są email, date, tel, number i time. Oprócz tego często stosowane są też definiowane przez język HTML5 atrybuty, takie jak placeholder, required, autocomplete i multiple. W rozdziale 10. dowiemy się, że nie wszystkie przeglądarki jednakowo obsługują te nowe funkcje języka HTML5, dlatego niezbędne jest zastosowanie biblioteki jQuery, która ujednolica sposób ich obsługi. Niestety nadal trzeba używać biblioteki jQuery, żeby skorzystać z takich funkcji jak autouzupełnianie i bardziej zaawansowane mechanizmy kontroli wprowadzonych danych. Zazwyczaj wtyczki biblioteki jQuery doskonale współpracują z nowymi elementami formularzy, dzięki czemu stają się prawie niezbędnymi elementami responsywnych stron WWW. Zanim zaczniemy implementować nowe funkcje, musimy przygotować prosty formularz, którego będziemy używać we wszystkich późniejszych przykładach. Utwórz zatem nowy dokument HTML z podstawową strukturą znaczników i dołączoną biblioteką jQuery: Responsywny formularz

        W tym rozdziale każda z przedstawianych funkcji będzie omawiana niezależnie od pozostałych i za każdym razem będziemy używali tego podstawowego kodu. Prezentowane tu wtyczki w żaden sposób nie mogą zastąpić kontroli danych po stronie serwera. Ich zadaniem jest jedynie usprawnienie wprowadzania danych przez użytkownika, zmniejszenie liczby żądań wysyłanych do serwera i tworzenie bardziej interaktywnej strony.

        152

        Rozdział 8. • Implementowanie formularzy responsywnych

        Funkcja autouzupełniania z wtyczką Magicsuggest Magicsuggest jest elastyczną listą rozwijaną (combobox) z funkcją autouzupełniania, która zaczyna podawać swoje propozycje, gdy tylko użytkownik rozpocznie wpisywanie tekstu. Dzięki niej zmniejsza się ilość tekstu, jaki trzeba wpisać, co przydaje się szczególnie na urządzeniach mobilnych, gdzie pisanie tekstu bywa uciążliwe. Domyślnie wtyczka Magicsuggest udostępnia kilka ciekawych funkcji, takich jak możliwość wybrania kilku pozycji po przyciśnięciu klawisza Ctrl albo pozwolenie na dalsze wprowadzanie tekstu po naciśnięciu klawisza Enter. Aby wypełnić danymi listę rozwijaną, wykorzystamy źródło danych JSON, choć dostępne są też inne opcje, takie jak:  Brak źródła danych — Jeżeli zastosujemy wartość null, to lista nie będzie podawała żadnych podpowiedzi. Użytkownik nadal będzie mógł wprowadzić kilka wartości, o ile opcji FreeEntries przypisana zostanie wartość true (jest to ustawienie domyślne).  Statyczne źródło danych — Jako źródło danych wykorzystywana jest tablica obiektów JSON, tablica ciągów znaków, a nawet ciąg wartości rozdzielanych przecinkami (CSV).  Adres URL — Możliwe jest podanie adresu URL, z którego komponent będzie pobierał dane w formacie JSON. Pobieranie będzie się odbywało za pomocą żądań Ajax typu POST, w których parametrem zapytania będzie wprowadzony do tej pory tekst.  Funkcja — Można też podać funkcję, która zwracać będzie tablicę obiektów JSON. Do działania tego mechanizmu wystarczy jedna funkcja wywołania zwrotnego lub wartość zwracana przez tę funkcję.

        Jak to zaimplementować? Zaczniemy od pobrania niezbędnych plików ze strony http://nicolasbize.github.io/magicsuggest/. Następnie do naszej przykładowej strony dołączymy pliki JavaScript i CSS, dopisując w znaczniku poniższy kod:

        W kolejnym kroku zapiszemy przedstawiony poniżej kod przygotowujący dane JSON z nazwami miast, a następnie wywołamy skrypt wtyczki Magicsuggest, przekazując jej kilka niezbędnych opcji:

        153

        Responsive Web Design z jQuery



        Następnie trzeba jeszcze dodać pole city wewnątrz znacznika :

        Na poniższym rysunku widać, że po kliknięciu listy i wpisaniu choćby jednego znaku od razu zaczną pojawiać się podpowiedzi:

        W poprzednim przykładzie wykorzystaliśmy tylko podstawowe funkcje oferowane przez wtyczkę. Umożliwia ona jednak wykorzystanie wielu innych ciekawych rozwiązań, które mogą się przydać w przyszłości:  przypinanie wybranych elementów po prawej,  zastosowanie stylu elementu z usługi Gmail,  element filtrujący kolumny,  wykorzystanie własnych szablonów oraz obrazków.

        154

        Rozdział 8. • Implementowanie formularzy responsywnych

        Funkcje wyboru daty i czasu Użytkownicy urządzeń mobilnych mają już mechanizmy ułatwiające wprowadzanie daty i czasu, z których na pewno często korzystają. Poznamy tutaj jednak wtyczkę biblioteki jQuery, która pozwala zachować spójność wyglądu tworzonej strony dzięki zastosowaniu tych samych mechanizmów na wszystkich urządzeniach.

        Pickadate — responsywne wybieranie daty i czasu Pickadate to wtyczka biblioteki jQuery, która jest jednocześnie niewielka, responsywna i przyjazna dla urządzeń mobilnych. Pozwala na przygotowanie własnego interfejsu, niezależnego od przeglądarki i urządzenia. Niezwykle ułatwia ona wprowadzanie daty w formularzu, ponieważ uniemożliwia popełnianie błędów przy wprowadzaniu daty z klawiatury, prezentując użytkownikowi cały kalendarz miesiąca, z którego może on wybrać właściwy dzień.

        Jak to zrobić? Po pobraniu niezbędnych plików ze strony http://amsul.ca/pickadate.js/ możemy zacząć od dołączenia plików JavaScript i CSS w znaczniku właśnie przygotowanej strony: Jeżeli musisz obsłużyć też starsze przeglądarki, to proponuję dołączyć jeszcze plik legacy.js.

        Następnie musimy wywołać skrypt dla elementów datepicker i timepicker:

        W kolejnym kroku trzeba na stronie umieścić pola wyboru daty i czasu. W poniższym kodzie pogrubieniem wyróżniłem elementy wymagane przez wtyczkę:
            

        155

        Responsive Web Design z jQuery



        Poniższy rysunek prezentuje działanie wtyczki podczas wybierania daty na smartfonie i na tablecie:

        Z kolei na poniższym rysunku prezentuję zachowanie pola wyboru czasu:

        Wtyczka Pickadate jest bardzo dobrze dopracowanym rozwiązaniem, które udostępnia mechanizmy obsługi takich funkcji, jak:

        156

        Rozdział 8. • Implementowanie formularzy responsywnych

         tłumaczenia (włączając w to języki o odwrotnym kierunku czytania),  różne formaty daty i czasu,  ograniczenia dla wprowadzanej daty i czasu. Więcej informacji na temat tych rozszerzeń można znaleźć pod adresem http://amsul.ca/pick adate.js/date.htm#options.

        Funkcja podpowiedzi Podpowiedź (ang. tooltip) jest ciekawym sposobem prezentowania dodatkowych, kontekstowych informacji na temat poszczególnych elementów strony WWW. Zazwyczaj umieszczana jest ona pomiędzy etykietą a samym polem formularza. Zadaniem takiej podpowiedzi jest dostarczanie uzupełniających informacji o poszczególnych polach. Podpowiedzi wciąż zyskują na popularności, ponieważ poprawiają one interakcję użytkownika z elementami strony. Z tego powodu coraz ważniejsze staje się przygotowanie dobrego projektu mechanizmu tworzenia tych podpowiedzi. Zazwyczaj podpowiedź wyświetlana jest po umieszczeniu wskaźnika myszy nad elementem. Niestety w urządzeniach mobilnych nie mamy wskaźnika, dlatego w ich przypadku podpowiedź jest wyświetlana po dotknięciu wybranego elementu.

        Tooltipster — nowoczesna funkcja podpowiedzi Tooltipster to rozbudowana wtyczka biblioteki jQuery pozwalająca na łatwe tworzenie semantycznych i nowoczesnych podpowiedzi.

        Jak to zrobić? Na początek musimy pobrać pliki wtyczki ze strony http://calebjacob.com/tooltipster/, a w znaczniku nowo przygotowanej strony dołączyć pliki JavaScript i CSS:

        Do aktywowania wtyczki wystarczy wywołać jej skrypt dla tych wszystkich elementów, którym przypisana została klasa tooltip (w tym przykładzie będzie tylko jeden taki element, ale na rzeczywistych stronach jest ich zwykle więcej):

        157

        Responsive Web Design z jQuery

        Następnie umieścimy na stronie obrazek znaku zapytania i przypiszemy mu klasę tooltip, podobnie jak i każdemu innemu elementowi, przy którym chcielibyśmy wyświetlić podpowiedź:

        Na poniższym rysunku można zobaczyć, co się stanie po kliknięciu lub dotknięciu obrazka z podpowiedzią:

        Możemy też nieco zmienić domyślny wygląd podpowiedzi, edytując plik tooltipster.css albo zmieniając istniejące już style przez podanie odpowiedniego parametru podczas wywoływania wtyczki:

        Tworzenie formularzy responsywnych za pomocą biblioteki IdealForms IdealForms to biblioteka przeznaczona do tworzenia i kontrolowania responsywnych formularzy HTML5, która jest dostępna pod adresem https://github.com/elclanrs/jq-idealforms. W niemal wszystkich przeglądarkach ma ona wbudowaną obsługę klawiatury, szybkie mechanizmy kon-

        158

        Rozdział 8. • Implementowanie formularzy responsywnych

        troli danych uruchamiane przy przejściu do kolejnego pola formularza oraz obsługę wypełniaczy (ang. placeholder). Biblioteka ta oferuje też opcję podziału formularza na strony, co może poprawić samopoczucie użytkownika przy wypełnianiu rozbudowanych formularzy. Zaraz poznamy szczegóły jej działania, wykonując kilka ćwiczeń.

        Jak to zaimplementować? Utwórz nową kopię pliku HTML z naszym podstawowym kodem, który przygotowaliśmy na samym początku tego rozdziału. Następnie w znaczniku dołącz plik arkusza stylów CSS:

        Teraz wstaw do pliku poniższy kod formularza, który został podzielony na dwie części za pomocą znaczników
        :

        Dane do profilu:



        W pierwszej karcie umieścimy pola nazwy użytkownika, hasła i adresu e-mail:


        W drugiej karcie znajdą się pola pliku zdjęcia, listy języków i numer telefonu:


        159

        Responsive Web Design z jQuery

        Na zakończenie dodamy jeszcze przycisk wysyłający dane z formularza:



        Na dole dokumentu (przed zamykającym znacznikiem ) musimy dołączyć jeszcze biblioteki jQuery i IdealForms:

        Potem trzeba dopisać poniższy kod, w którym uruchamiamy skrypt przygotowujący funkcję ostrzegającą użytkownika o wprowadzeniu nieprawidłowych informacji:

        160

        Rozdział 8. • Implementowanie formularzy responsywnych

        I to wszystko! Kontrola danych po stronie klienta została przygotowana. Na poniższym rysunku można zobaczyć działanie przykładowego formularza na smartfonach:

        Tę samą stronę można oglądać też na komputerze stacjonarnym, a jej domyślny wygląd doskonale się do niego dopasuje, co widać na poniższym rysunku:

        161

        Responsive Web Design z jQuery

        Ćwiczenie 8. — tworzenie formularza kontaktowego za pomocą biblioteki IdealForms Przygotujmy teraz responsywny formularz kontaktowy dla naszego ćwiczebnego projektu. Wykorzystaj przedstawiony przed chwilą przykład z biblioteką IdealForms do przygotowania prezentowanego poniżej formularza. Podobnie jak w przykładzie, zacznij od dołączenia pliku CSS i zdefiniowania następujących pól: nazwisko, adres e-mail, proponowana data rozpoczęcia i numer telefonu. Poszczególne pola ułóż tak, jak na poniższym rysunku:

        162

        Rozdział 8. • Implementowanie formularzy responsywnych

        Opisując bibliotekę IdealForms, nie wspomniałem o polu wyboru daty, ponieważ domyślnie obsługiwane jest ono za pomocą biblioteki jQueryUI. Proponuję jednak wykorzystać do tego wtyczkę Pickadate, ponieważ jest znacznie mniejsza od biblioteki jQueryUI. Poza tym dobrze jest poćwiczyć z rozwiązaniami, o których mówiliśmy w tym rozdziale.

        Podsumowanie W tym rozdziale dowiedzieliśmy się, jak należy pracować z elementami formularzy HTML5, uzupełniając kod strony wtyczkami biblioteki jQuery, takimi jak: Magicsuggest (realizuje funkcję autouzupełniania), Tooltipster (tworzy podpowiedzi) i Pickadate (ułatwia wyznaczenie daty i czasu). Dodatkowo ćwiczyliśmy też budowanie formularzy za pomocą biblioteki IdealForms, przeznaczonej do tworzenia formularzy responsywnych. W następnym rozdziale skoncentrujemy się na testowaniu stron WWW za pomocą narzędzi i skryptów kontrolujących ich responsywne zachowania na wszystkich urządzeniach. Bardzo ważne jest dokładne poznanie zagadnień prezentowanych w następnym rozdziale, ponieważ umożliwią nam one wyszukiwanie potencjalnych błędów naszej implementacji w starszych przeglądarkach albo na urządzeniach mobilnych. Nie muszę też chyba wspominać, że testowanie jest niezwykle ważne, żeby uniknąć późniejszych niespodzianek zgłaszanych przez naszych klientów.

        163

        Responsive Web Design z jQuery

        164

        9 Testowanie responsywnych stron Rzeczywiście nie ma lepszego testu niż wypróbowanie przygotowanej strony na docelowym urządzeniu, choć na pewno zajmie to więcej czasu niż testy prowadzone w emulatorach. Narzędzia do testowania w przeglądarkach znacznie przyspieszają cały proces, choć nie są w stanie w stu procentach odwzorować rzeczywistych warunków. Udaje im się całkiem dobrze realizować to zadanie, dlatego możemy określić ten rodzaj testów jako proces wstępny. Nie zastąpi on jednak testów na rzeczywistych urządzeniach, ponieważ tylko one mogą jednoznacznie potwierdzić, że wszystkie funkcje działają prawidłowo. W tym rozdziale nauczymy się:  symulować urządzenia za pomocą narzędzi dla przeglądarek,  testować urządzenia za pomocą emulatora,  testowania jednostkowego responsywnych stron WWW.

        Symulowanie urządzeń za pomocą narzędzi dla przeglądarek Narzędzia dla przeglądarek nie będą w stanie idealnie zasymilować konkretnego urządzenia, ale ułatwiają zdefiniowanie punktów zmiany w stylach CSS i dzięki temu pozwalają na ocenę wyglądu strony na najpopularniejszych urządzeniach, takich jak iPad, iPhone oraz dowolne urządzenie z systemem Android.

        Responsive Web Design z jQuery

        Zmiana wielkości ekranu nie wyłapuje niezgodności występujących między przeglądarkami i używanymi w nich mechanizmami rysującymi. Na przykład zmiana wielkości okna w przeglądarce Chrome nie powie nam nic na temat problemów, jakie mogą wystąpić w mobilnej przeglądarce Safari. Przyjrzyjmy się teraz kilku witrynom, które twórcom stron WWW pomagają ocenić, jak ich dzieło będzie się zachowywać na konkretnym urządzeniu.

        Narzędzie sieciowe Viewport Resizer Viewport Resizer to narzędzie sieciowe ułatwiające testowanie responsywnych stron WWW. Doskonale sprawdza się zarówno w trakcie prac, jak i już po opublikowaniu strony. Oprócz zalet wymienionych na głównej stronie tego narzędzia warto wspomnieć jeszcze o:  możliwości dowolnego definiowania nowych rozmiarów ekranu;  podglądzie danych urządzenia (zdarzenie onMouseOver);  dostarczaniu informacji o ekranie (wielkość, proporcje, ułożenie i agent użytkownika);  możliwości drukowania, ale tylko w przeglądarkach używających silnika WebKit (Chrome i Safari). Niestety to narzędzie nie współpracuje z żadną wersją Internet Explorera, a byłoby to przydatne do oceny działania stron na telefonach z systemem Windows Phone. Nie ma potrzeby pobierania ani instalowania żadnego programu. Wystarczy tylko otworzyć stronę http://lab.maltewassermann.com/viewport-resizer i zapisać w zakładkach odsyłacz z przycisku Click or Bookmark. Poniżej (na następnej stronie) przedstawiam przykład wyświetlenia strony WWW na smartfonie symulowanym za pomocą tego narzędzia.

        Narzędzie sieciowe Surveyor Surveyor jest narzędziem sieciowym, które działa bardzo podobnie do poprzedniego, ułatwiając ocenę responsywności zarówno tworzonej właśnie strony, jak i dowolnej już opublikowanej. Można je wypróbować na stronie http://surveyor.io. Wystarczy wprowadzić adres URL testowanej strony oraz szerokości ekranu, jakie mają zostać sprawdzone (nie ma żadnej listy domyślnych ustawień szerokości ekranu). Responsywność swojego projektu można sprawdzić, oglądając wygląd strony przy wszystkich punktach zmiany naraz, co ułatwia porównywanie przygotowanych wariantów.

        166

        Rozdział 9. • Testowanie responsywnych stron

        Czasami podczas analizy pasek przewijania wyświetlany w tym narzędziu może nas zmylić, sugerując problem tam, gdzie go wcale nie ma. W takiej sytuacji dobrze jest sprawdzić swoją stronę za pomocą narzędzia przedstawionego w następnym podrozdziale.

        Na poniższym rysunku można zobaczyć porównanie strony wyświetlanej w ułożeniu dla tabletu i dla smartfona.

        167

        Responsive Web Design z jQuery

        Narzędzie sieciowe ScreenFly Za pomocą tego narzędzia również można zmieniać wielkość ekranu, na którym będzie wyświetlana nasza strona. Tutaj też wystarczy podać adres URL (działa to też dla rozwijanych dopiero projektów) i wybrać rozdzielczość ekranu, przy której chcemy przetestować stronę. To narzędzie daje twórcy kilka szablonów wielkości ekranu dopasowanych do najpopularniejszych urządzeń na rynku. Dzięki temu nie musimy zapamiętywać tych wszystkich wartości. Oczywiście istnieje też możliwość podania własnych wymiarów ekranu. Wystarczy tylko kliknąć przycisk Custom Screen Size. ScreenFly dostępne jest pod adresem https://quirktools.com/screenfly, gdzie należy podać adres testowanej strony. Domyślnie prezentowana jest przy ustawieniach 10-calowego tabletu w ułożeniu poziomym. Z innych urządzeń można korzystać, klikając przyciski w nagłówku strony i wybierając konkretny model urządzenia. ScreenFly udostępnia jeszcze jedną ciekawą funkcję pozwalającą na udostępnienie odnośnika ułatwiającego komunikację między klientem a twórcą (to działa już tylko dla stron opublikowanych w internecie). Takie odnośniki bardzo usprawniają rozmowy między klientem a wykonawcą, ponieważ łatwo obrazują konkretne funkcje lub problemy. Chcąc przygotować taki odnośnik, wystarczy kliknąć przycisk Share i wysłać przygotowany adres. Korzystając z tego odnośnika, klient będzie mógł zobaczyć ekran podobny do tego z poniższego rysunku:

        168

        Rozdział 9. • Testowanie responsywnych stron

        Emulator przeglądarki Opera Mobile Wprawdzie przeglądarka Opera Mobile swoją największą popularność ma już za sobą, jednak nadal korzysta z niej 16,62% użytkowników urządzeń mobilnych (według statystyk StatCounter. com). Z tego powodu konieczne jest sprawdzenie w tej przeglądarce przynajmniej najważniejszych funkcji naszej witryny. Firma Opera Software doskonale pomaga w tym zadaniu twórcom stron WWW, udostępniając im emulator swojej mobilnej przeglądarki. Jego podstawą rzeczywiście jest przeglądarka Opera Mobile, którą można przetestować na szerokim spektrum różnych urządzeń mobilnych. Całą aplikację można pobrać spod adresu http://www.opera.com/developer/mobile-emulator. Po zainstalowaniu programu wystarczy wybrać konkretne urządzenie i kliknąć przycisk Uruchom. Emulator zostanie uruchomiony, jak widać to na poniższym rysunku:

        Wskazówki dotyczące testowania responsywnych stron WWW Za pomocą przedstawionych powyżej narzędzi do testowania stron responsywnych możemy łatwiej przygotowywać elastyczne projekty dopasowujące się do różnych urządzeń. Podczas testowania zwracaj uwagę na następujące elementy:

        169

        Responsive Web Design z jQuery

         Nie kończ projektu strony bez jej dokładnego przetestowania. Najlepiej jest testować każdą funkcję zaraz po jej zaimplementowaniu, ponieważ ułatwia to wyszukiwanie ewentualnych problemów, jakie mogła ona spowodować.  Testy regresyjne to bardzo ważny element zapobiegania powstawaniu kaskad błędów. Po przetestowaniu dopiero co zaimplementowanej funkcji sprawdź, czy nie wprowadziła ona niekorzystnych zmian w innych częściach witryny. Testy regresyjne polegają na poszukiwaniu błędów w istniejącym już oprogramowaniu, które zostało właśnie rozbudowane.

         Kontroluj jakość obrazków i ikon, a także płynność treści umieszczonych w strukturze strony.  Przeprowadź analizę wydajności strony responsywnej, szczególnie w wariancie przeglądania na urządzeniach mobilnych (temu zagadnieniu poświęcony zostanie następny rozdział).

        Ćwiczenie 9. — przetestujmy naszą stronę na różnych wielkościach ekranu Do tego zadania wybierzemy jedno z narzędzi zaprezentowanych w tym rozdziale. Na poniższym rysunku (przedstawionym na następnej stronie) prezentuję punkty zmiany dla smartfona i tabletu wprowadzone do narzędzia Surveyor. Podczas testowania najpierw zapisuj wszystkie znalezione problemy z zaimplementowanymi właśnie funkcjami, a potem staraj się je po kolei rozwiązywać. Postępując w ten sposób, nie stracisz koncentracji na aktualnym zadaniu, a tym samym oszczędzisz czas.

        Podsumowanie W tym rozdziale koncentrowaliśmy się na wykorzystywaniu narzędzi i skryptów sprawdzających responsywność naszych stron WWW na wszystkich urządzeniach. Dowiedzieliśmy się, jak istotne jest wyszukiwanie w naszej implementacji potencjalnych błędów za pomocą narzędzi sieciowych, takich jak ViewportResizer, Surveyor i ScreenFly. Poznaliśmy również emulator przeglądarki Opera Mobile, pozwalający na sprawdzenie działania stron w tej przeglądarce działającej na emulowanych urządzeniach mobilnych.

        170

        Rozdział 9. • Testowanie responsywnych stron

        W następnym rozdziale przygotowywać będziemy awaryjne rozwiązania dla naszej strony zapewniające jej działanie we wszystkich przeglądarkach. Dowiemy się, jak można zapewnić obsługę starszych przeglądarek, wyświetlając odpowiedni projekt strony z coraz bardziej ograniczonymi funkcjami.

        171

        Responsive Web Design z jQuery

        172

        10 Prawidłowa obsługa przeglądarek Niektóre przeglądarki wyposażone są w różne własnościowe funkcje, a poszczególne podzbiory standardowych funkcji implementowane są w nich w inny sposób. W efekcie musimy włożyć wiele pracy w to, żeby nasze strony działały jednakowo we wszystkich przeglądarkach. Powodem tych wszystkich różnic jest to, że specyfikacje tworzone przez konsorcjum W3C są cały czas aktualizowane, a ciągła konkurencja między przeglądarkami sprawia, że producent każdej z nich chce promować swój produkt jako ten z najlepszymi funkcjami. Mimo tych niedogodności biblioteka jQuery zapewnia całkiem niezłą zgodność pomiędzy różnymi przeglądarkami i pozwala na pominięcie niektórych różnic w ich funkcjonowaniu. Istnieją też specjalne narzędzia ujednolicające działanie pewnych funkcji we wszystkich przeglądarkach. Takie narzędzia nazywane są wypełniaczami (ang. polyfill). Wypełniacze będą głównym tematem tego rozdziału. Poruszymy w nim następujące zagadnienia:  sprawdzanie funkcji obsługiwanych przez przeglądarkę,  znaczenie wypełniaczy,  wykorzystywanie narzędzi do wykrywania dostępności funkcji,  implementacje wypełniaczy funkcji języków HTML5 i CSS3.

        Responsive Web Design z jQuery

        Sprawdzanie funkcji obsługiwanych przez przeglądarkę Podczas tworzenia stron WWW doświadczenie pozwala programiście na znacznie sprawniejszą pracę. Niestety wiedza bardzo szybko się przedawnia i musimy cały czas uczyć się nowych funkcji, selektorów i rozszerzeń oraz elementów różnych przeglądarek. Główne strony prezentujące dane o technikach i funkcjach dostępnych w różnych przeglądarkach oraz urządzeniach to: CanIUse.org, MobileHTML5.org i QuirksMode.org.

        CanIUse.com Strona CanIUse.com jest najbardziej znanym źródłem informacji o funkcjach dostępnych w przeglądarkach. Można na niej znaleźć tabele zgodności przeglądarek stacjonarnych i mobilnych, wyszczególniające właściwości języków HTML5, CSS3, SVG i innych. Po otwarciu strony http://caniuse.com zobaczysz, że te wszystkie dane gromadzone są na podstawie statystyk zbieranych przez StatCounter GlobalStats i w związku z tym są na bieżąco aktualizowane. Warto też przeczytać działy Notes (uwagi) i Known Issues (znane problemy) widoczne na poniższym rysunku, ponieważ sami jesteśmy częścią społeczności, która również ma wpływ na rozwój tych technologii. W tabelach podawane są wyjątki, które trzeba brać pod uwagę podczas tworzenia stron, albo prezentowane są techniki, które należy zastosować w określonych sytuacjach.

        174

        Rozdział 10. • Prawidłowa obsługa przeglądarek

        Mobile HTML5.org Strona MobileHTML5.org bazuje na zgodności przeglądarek mobilnych z językiem HTML5. Należy zaznaczyć, że wszystkie funkcje testowane są na rzeczywistych urządzeniach. To naprawdę duża różnica, ponieważ jak dowiedzieliśmy się z poprzedniego rozdziału, istnieją pewne niezgodności między wyglądem strony symulowanym w przeglądarce stacjonarnej a jej rzeczywistym wyglądem na urządzeniu mobilnym. Różnica ta będzie jeszcze większa, jeżeli pod uwagę weźmiemy dodatkowo sprzęt i system operacyjny danego urządzenia. Po prostu pewne rodzaje problemów można wykryć tylko podczas przeprowadzania testów na rzeczywistych urządzeniach. Różnorodność przedstawionych na tej stronie urządzeń naprawdę robi wrażenie. Na poniższym rysunku można zobaczyć część możliwości starszych urządzeń, które dzisiaj nie mają już wielkiego znaczenia na rynku. Prezentowane są nawet urządzenia działające pod kontrolą wydanego niedawno systemu FirefoxOS.

        Nie pozostaje mi nic innego, jak tylko zachęcić do odwiedzenia strony http://mobilehtml5.org i samodzielnego przejrzenia wszystkich list.

        QuirksMode.org Na stronie QuirksMode.org możemy zapobiegać nieprzyjemnym niespodziankom powstającym podczas tworzenia stron WWW. Wystarczy na niej sprawdzić, czy wybrany selektor lub

        175

        Responsive Web Design z jQuery

        pseudoklasa są obsługiwane przez daną przeglądarkę. Innym rozwiązaniem jest sprawdzanie każdego elementu w różnych przeglądarkach już po zastosowaniu go w kodzie. Strona QuirksMode.org koncentruje się na przechowywaniu zaktualizowanych informacji o poziomie obsługi niemal wszystkich właściwości i selektorów CSS. Jak można zobaczyć na stronie http://www.quirksmode.org/css/selectors, te informacje pogrupowane są według następujących kategorii:  Kombinatory  Selektory atrybutów  Pseudoelementy  Pseudoklasy Na poniższym rysunku widoczna jest część strony QuirksMode.org poświęcona selektorom pseudoelementów:

        Definiowanie rozwiązań zastępczych Rozwiązania zastępcze (ang. fallback) są częścią procesu tworzenia stron WWW. Jego zadaniem jest przygotowanie alternatyw dla technologii zastosowanych na przygotowywanej stronie na wypadek, gdyby przeglądarka nie obsługiwała danej funkcji. Pojęcie to można podzielić na dwie kategorie: wypełniacze (ang. polyfills) i wstawki (ang. webshims). Wypełniacz to specjalny kod emulujący daną funkcję w przeglądarce, która nie obsługuje jej samodzielnie. Wypełniacze zawsze starają się odwzorować konkretną funkcję w każdej prze-

        176

        Rozdział 10. • Prawidłowa obsługa przeglądarek

        glądarce, choć czasami może się to wiązać z różnymi efektami ubocznymi, takimi jak zwiększenie czasu ładowania strony albo spadek wydajności. Przykładem wypełniacza może być skrypt html5shiv, który możemy po prostu umieścić w kodzie strony i tworzyć ją dalej tak, jakby nic się nie zmieniło. Ten skrypt będę omawiał w dalszej części tego rozdziału. Wstawki natomiast definiują rozwiązania zastępcze, często udostępniając własne API, i mogą wymagać specjalnego dostosowania kodu strony do swoich wymagań. To właśnie dlatego czasami niezbędne jest załadowanie takich bibliotek jak yepnope.js, o której będę mówił później. Przyjrzyjmy się teraz dwu narzędziom do wykrywania dostępności funkcji w przeglądarkach, które są bardzo pomocne podczas przygotowywania rozwiązań zastępczych.

        Narzędzia do wykrywania dostępności funkcji Wykrycie dostępnych funkcji jest pierwszym krokiem pozwalającym na zastosowanie na naszej stronie progresywnych rozszerzeń. Najpierw musimy sprawdzić, czy dana funkcja została już zaimplementowana w przeglądarce. Jeżeli tak, to nie musimy ponownie implementować czegoś, co już jest dostępne. Jeśli jednak w przeglądarce brakuje danej funkcji, to dobrze byłoby dodać jej prawidłową obsługę. Czasami musimy obsłużyć również takie przeglądarki, w których dana funkcja nie została jeszcze całkowicie zaimplementowana. Pamiętajmy jednak, że zastosowanie nowych funkcji na naszych stronach ma znaczenie dla przeglądających ją użytkowników, a to może się przełożyć na jej popularność.

        CSS Browser Selector + Ta biblioteka wspomagająca projektowanie responsywnych stron dla wszystkich przeglądarek jest znacznie prostsza od biblioteki Modernizr, ponieważ zawiera wyłącznie mechanizmy wykrywania dostępnych funkcji. Wykrywanie to odbywa się na etapie ładowania i analizowania kodu strony za pomocą klasy umieszczonej w znaczniku . Biblioteka ta ma bardzo prostą strukturę i pozwala na napisanie specjalnego kodu rozwiązującego problemy z wyświetlaniem elementów strony, które mogą ograniczać się na przykład do określonego systemu operacyjnego albo przeglądarki. Na tyle pozwalają sztuczki ze stylami CSS. Dzięki wspomnianej bibliotece JavaScript dostępne są dla nas następujące informacje:

        177

        Responsive Web Design z jQuery

         rodzaj i wersja przeglądarki,  mechanizm rysowania stron,  platforma i system operacyjny,  urządzenie,  maksymalna i minimalna szerokość ekranu,  ułożenie okna przeglądarki,  język przeglądarki. Narzędzie to można wypróbować, otwierając stronę http://ridjohansen.github.io/css_browser_ selector/ i sprawdzając klasy przypisane elementowi . W ten sposób możliwe jest usunięcie problemów z konkretną przeglądarką albo przygotowanie rozwiązań zastępczych, takich jak to w poniższym przykładzie: .orientation_landscape .div-example { border: 2px solid red; } Im mniej mamy specjalnego kodu obsługującego wyjątki, tym łatwiej jest w przyszłości implementować aktualizacje i zmiany. Jeżeli jest to możliwe, dobrze jest odnaleźć prawdziwą przyczynę problemu, a nie zajmować się maskowaniem wizualnych różnic między przeglądarkami.

        Jak to zrobić? Po pobraniu pliku css_browser_selector.css dołącz go do swojej strony w znaczniku :

        Dzięki takiemu wykrywaniu możliwe jest załadowanie skryptów realizujących poszczególne funkcje, choć nie są one częścią tego rozwiązania. Z tą częścią problemu można sobie poradzić za pomocą innego rozwiązania: biblioteki Modernizr, która dodatkowo pozwala na znacznie szersze wykrywanie braków w przeglądarce.

        Modernizr Modernizr to biblioteka języka JavaScript, która wykrywa funkcje HTML5 i CSS3 w przeglądarce użytkownika, co ułatwia tworzenie warunkowych skryptów i stylów działających w każdej sytuacji, i to niezależnie od tego, czy przeglądarka obsługuje daną funkcję, czy też nie. Biblioteka ta działa przez dodawanie klas do elementu html naszej strony, z których można później korzystać w stylach CSS. Co więcej, tworzy też obiekt JavaScript przechowujący wyniki, które wspomagają późniejsze wykonywanie różnych testów. Podczas pobierania biblioteki ze

        178

        Rozdział 10. • Prawidłowa obsługa przeglądarek

        strony http://modernizr.com mamy możliwość wybrania albo pełnej wersji na potrzeby procesu projektowania strony, albo tylko wybranych części, z których ostatecznie będziemy korzystać. Na stronie biblioteki Modernizr zaleca się pobranie jej wyselekcjonowanych części, które będą lepiej dopasowane do tworzonej witryny. Po prostu zazwyczaj taka wersja będzie znacznie większa od wersji pełnej, która lepiej sprawdza się podczas prac nad projektem.

        Na koniec możemy dołączyć plik modernizr.custom.85330.js do kodu swojej strony, dopisując w jej nagłówku poniższą deklarację:

        Teraz można już sprawdzić, jakie klasy zostały dołączone do znacznika . Poniżej przedstawiam listę funkcji wykrytych na stronie wyświetlanej przez przeglądarkę Firefox:

        A teraz przyjrzyjmy się liście funkcji wykrytych na stronie oglądanej w Internet Explorerze 8:

        Dzięki temu możemy przygotować kod w taki sposób, aby w przeglądarkach, które nie obsługują właściwości boxshadow, symulować cień za pomocą podwójnego obramowania: .box { border:1px solid #DDD; border-bottom: 1px solid #AAA; border-right: 1px solid #AAA; } .boxshadow div.box { border: none; -webkit-box-shadow: 1px 1px 3px #777; -moz-box-shadow: 1px 1px 3px #777; box-shadow: 1px 1px 3px #777; }

        179

        Responsive Web Design z jQuery

        Na poniższym rysunku zobaczyć można różnicę między cieniem rzeczywistym a symulowanym:

        Teraz sprawdźmy, co można zrobić, jeżeli dane rozwiązanie wymaga dodania zróżnicowanych bibliotek do tworzonej strony. W takiej sytuacji pomoże nam biblioteka YepNope.js.

        YepNope.js YepNope.js to biblioteka języka JavaScript pozwalająca na asynchroniczne ładowanie zewnętrznych zasobów JavaScript i CSS. Poniższy kod prezentuje sposób wykorzystania biblioteki Modernizr do sprawdzenia dostępności animacji CSS w połączeniu z biblioteką YepNope.js, za pomocą której ładowane jest rozwiązanie zastępcze w przypadku, gdy przeglądarka nie obsługuje tych animacji:

        html5shiv Biblioteka html5shiv pozwala na obsługę elementów języka HTML5 w starszych wersjach przeglądarki Internet Explorer, w szczególności chodzi tu o wersje od 6 do 8, ale uzupełnia też część funkcji w wersji 9. Oprócz tego do tej biblioteki należy też plik html5shiv-printshiv.js, który zawiera również elementy ułatwiające drukowanie. Dzięki temu możliwe jest wydrukowanie odpowiednio elementów HTML5 z nałożonymi stylami CSS również w przeglądarkach IE6 do IE8. Z biblioteki tej można skorzystać, wybierając odpowiednią opcję podczas konfigurowania pobierania biblioteki Modernizr, tak jak na poniższym rysunku. Po dołączeniu tej biblioteki do projektu w przeglądarkach, które nie obsługują elementów HTML5, zostaną dodane niezbędne wypełniacze:

        180

        Rozdział 10. • Prawidłowa obsługa przeglądarek

        Implementacje wypełniaczy Istnieją setki różnych wypełniaczy, gotowych już do zastosowania na naszych stronach. Ich liczba cały czas rośnie, ponieważ ciągle przygotowywane są nowe funkcje, elementy i rozszerzenia. W tym podrozdziale przedstawię niektóre z tych implementacji, ale niezależnie od tego zachęcam do odwiedzenia strony https://github.com/Modernizr/Modernizr/wiki/HTML5-Cross-Browser-Polyfills i sprawdzenia, czy istnieje już wypełniacz rozwiązujący trapiące nas problemy.

        MediaElements.js MediaElements jest wypełniaczem wprowadzającym spójną obsługę elementów