157 21 8MB
Polish Pages 509 Year 2011
Spis treści Część I Elementarz ...................................................................... 11 Rozdział 1. Wprowadzenie ................................................................................................13 Dla kogo jest ta książka? ................................................................................................................... 13 Jak czytać tę książkę? ........................................................................................................................ 14 Warsztat pracy ................................................................................................................................... 14 Firefox ............................................................................................................................................... 16 Testowanie stron WWW ................................................................................................................... 16 Edycja kodu XHTML ....................................................................................................................... 17 Rozdział 2. Składnia języka XHTML ...................................................................................21 Znaczniki i elementy ......................................................................................................................... 21 Wszystkie elementy języka XHTML ................................................................................................ 22 Elementy puste i niepuste .................................................................................................................. 22 Znaczniki wymagane i opcjonalne oraz elementy puste .................................................................... 23 Wielkość liter w nazwach znaczników .............................................................................................. 24 Białe znaki wewnątrz znaczników .................................................................................................... 24 Białe znaki w treści elementów ......................................................................................................... 25 Zagnieżdżanie elementów ................................................................................................................. 25 Znaki specjalne ................................................................................................................................. 26 Atrybuty znaczników ........................................................................................................................ 28 Białe znaki w wartościach atrybutów ................................................................................................ 30 Atrybuty logiczne, wyliczeniowe i inne ............................................................................................ 30 Komentarze w XHTML .................................................................................................................... 32 Struktura dokumentu HTML ............................................................................................................. 33 Pierwsza strona WWW ..................................................................................................................... 34 Rozdział 3. Znaki diakrytyczne i oznaczanie języka dokumentu ..........................................37 Polskie znaki diakrytyczne ................................................................................................................ 37 Metody kodowania polskich znaków diakrytycznych ....................................................................... 37 Fizyczne kodowanie pliku ................................................................................................................. 38 Element meta ustalający kodowanie dokumentu XHTML ................................................................ 39 Pangramy .......................................................................................................................................... 40 Atrybuty lang oraz xml:lang .............................................................................................................. 41 Szablony pustych polskich stron WWW ........................................................................................... 42 Znaki diakrytyczne w postaci encji ................................................................................................... 42 Kodowanie stron zawierających teksty w kilku językach ................................................................. 43 Jakiego kodowania używać? ............................................................................................................. 47 Błędne wyświetlanie polskich znaków diakrytycznych .................................................................... 47 Ćwiczenia .......................................................................................................................................... 48
4
Spis treści
Rozdział 4. XHTML poprawny składniowo ..........................................................................53 Czy poprawność składniowa jest ważna? .......................................................................................... 53 Obecny stan internetu ........................................................................................................................ 54 Metody sprawdzania poprawności składniowej ................................................................................ 54 Rozdział 5. Praca w trybie standardów ..............................................................................61 Quirks mode i standard mode — dwa tryby pracy przeglądarek internetowych ............................... 61 Problemy z trybami pracy ................................................................................................................. 62 Które przeglądarki mają tryb standardów? ........................................................................................ 62 Jak sprawdzić tryb pracy przeglądarki? ............................................................................................. 63 W jaki sposób przeglądarka wybiera tryb pracy? .............................................................................. 65 Błędne wyświetlanie witryny wynikające z przełączenia trybu pracy przeglądarki .......................... 66 Stosuj DOCTYPE języka XHTML 1.0 strict .................................................................................... 69 Rozdział 6. Podstawowe elementy XHTML ........................................................................71 Akapit ................................................................................................................................................ 71 Dzielenie wyrazów ............................................................................................................................ 76 Zakaz łamania wiersza ...................................................................................................................... 77 Złamanie wiersza .............................................................................................................................. 78 Znaki interpunkcyjne ........................................................................................................................ 80 Nagłówki ........................................................................................................................................... 80 Wyróżnianie tekstu ............................................................................................................................ 83 Tekst preformatowany ...................................................................................................................... 85 Indeksy dolny i górny ........................................................................................................................ 86 Linia pozioma ................................................................................................................................... 87 Popularne znaki specjalne ................................................................................................................. 88 Zestawienie ....................................................................................................................................... 88 Rozdział 7. Kaskadowe arkusze stylów .............................................................................91 Struktura a wygląd dokumentów HTML ........................................................................................... 91 Dołączanie stylów do dokumentu ..................................................................................................... 91 Style zewnętrzne ......................................................................................................................... 91 Style wewnętrzne ........................................................................................................................ 92 Atrybut style ............................................................................................................................... 93 Domyślny język stylów ..................................................................................................................... 94 Ujmowanie stylów wewnętrznych w komentarz ............................................................................... 95 Rozdział 8. Składnia kaskadowych arkuszy stylów ............................................................97 Terminologia ..................................................................................................................................... 97 Wielkość liter w selektorach ............................................................................................................. 98 Wielkość liter w nazwach i wartościach właściwości ....................................................................... 99 Białe znaki ........................................................................................................................................ 99 Komentarze ..................................................................................................................................... 100 Formatowanie kodu CSS ................................................................................................................. 100 Rozdział 9. Przykładowe właściwości CSS .......................................................................103 Czcionki .......................................................................................................................................... 103 Wysokość wiersza tekstu ................................................................................................................ 104 Wyrównanie poziome tekstu ........................................................................................................... 105 Marginesy ....................................................................................................................................... 105 Kolory ............................................................................................................................................. 106 Obramowanie .................................................................................................................................. 108 XHTML — struktura, CSS — wygląd ............................................................................................ 109 Zestawienie sumaryczne ................................................................................................................. 109 Rozdział 10. Klasy i identyfikatory ..................................................................................111 Atrybut class ................................................................................................................................... 111 Selektory dotyczące klas ................................................................................................................. 112
Spis treści
5
Stosowanie klas ............................................................................................................................... 112 Atrybut id ........................................................................................................................................ 113 Selektory dotyczące identyfikatorów .............................................................................................. 113 Stosowanie identyfikatorów ............................................................................................................ 114 Walka z classitis: selektory potomne .............................................................................................. 115 Rozdział 11. Projekty .....................................................................................................119
Część II Czcionki na stronach WWW ........................................... 127 Rozdział 12. Rodzaje czcionek ........................................................................................129 Czcionki szeryfowe i bezszeryfowe ................................................................................................ 129 Czcionki proporcjonalne i nieproporcjonalne ................................................................................. 130 Inne podziały czcionek .................................................................................................................... 131 Testowanie czcionek ....................................................................................................................... 133 Rozdział 13. Czcionki dla webmastera ............................................................................135 Core fonts for the Web .................................................................................................................... 138 Czcionki dostępne na różnych platformach ..................................................................................... 138 Definiowanie kroju czcionki ........................................................................................................... 139 Osadzanie czcionek na stronach WWW .......................................................................................... 141 Google Fonts ................................................................................................................................... 143 Rozdział 14. Wszystkie właściwości CSS 2.1 dotyczące czcionek i tekstu .......................145 font-family ...................................................................................................................................... 145 font-size ........................................................................................................................................... 146 font-style ......................................................................................................................................... 148 font-weight ...................................................................................................................................... 148 font-variant ...................................................................................................................................... 148 font .................................................................................................................................................. 148 text-align ......................................................................................................................................... 149 text-decoration ................................................................................................................................ 149 text-indent ....................................................................................................................................... 149 text-transform .................................................................................................................................. 150 word-spacing ................................................................................................................................... 150 letter-spacing ................................................................................................................................... 150 white-space ..................................................................................................................................... 150 line-height ....................................................................................................................................... 151 Rozdział 15. Projekty .....................................................................................................153
Część III Układ strony ................................................................ 159 Rozdział 16. Elementy blokowe i liniowe .........................................................................161 Elementy blokowe i liniowe — definicja składniowa ..................................................................... 161 Elementy blokowe i liniowe — definicja prezentacyjna ................................................................. 165 Który ze sposobów definiowania elementów blokowych i liniowych jest lepszy i dlaczego? ........ 167 Elementy ogólne div i span ............................................................................................................. 168 Używanie elementów div i span w połączeniu z klasami i identyfikatorami .................................. 169 Typowy przykład użycia elementów div ......................................................................................... 170 Domyślny format wizualny elementów blokowych i liniowych ..................................................... 171 Rozdział 17. Obszar zajmowany przez element .................................................................175 Właściwość display ......................................................................................................................... 179 Wyśrodkowanie elementu blokowego ............................................................................................ 180 Łączenie marginesów pionowych ................................................................................................... 183 Wymiary minimalne i maksymalne ................................................................................................. 184
6
Spis treści
Rozdział 18. Elementy pływające ....................................................................................187 Właściwość float ............................................................................................................................. 187 Układy kolumnowe ......................................................................................................................... 190 Znikające tło pojemnika .................................................................................................................. 192 Czyszczenie elementów pływających ............................................................................................. 193 Rozdział 19. Zaawansowane metody pozycjonowania elementów blokowych ....................195 Właściwość position ........................................................................................................................ 195 Pozycjonowanie statyczne ............................................................................................................... 197 Pozycjonowanie względne .............................................................................................................. 198 Pozycjonowanie bezwzględne ......................................................................................................... 200 Pozycjonowanie trwałe ................................................................................................................... 201 Pozycjonowanie kontekstowe ......................................................................................................... 202 Właściwości left, right, top oraz bottom .......................................................................................... 205 Warstwy i ich kolejność .................................................................................................................. 210 Przycinanie ...................................................................................................................................... 212 Rozdział 20. Układy o stałej szerokości ..........................................................................215 Dobieranie szerokości układu ......................................................................................................... 215 Układy przylegające do okna przeglądarki ..................................................................................... 217 Rozdział 21. Układy płynne .............................................................................................227 Rozdział 22. Układy hybrydowe .......................................................................................231 Układy dwukolumnowe .................................................................................................................. 231 Układ trójkolumnowy ..................................................................................................................... 235 Rozdział 23. Projekty .....................................................................................................239
Część IV Elementy XHTML ......................................................... 247 Rozdział 24. Tekst .........................................................................................................249 Elementy frazowe ............................................................................................................................ 249 Trudne wybory ................................................................................................................................ 251 Cytaty .............................................................................................................................................. 252 Tekst na stronach WWW — podsumowanie ................................................................................... 253 Rozdział 25. Listy ...........................................................................................................255 Wypunktowanie .............................................................................................................................. 255 Numerowanie .................................................................................................................................. 256 Lista definicji .................................................................................................................................. 256 Zagnieżdżanie list ............................................................................................................................ 257 Właściwości CSS list ...................................................................................................................... 259 Rozdział 26. Element img ...............................................................................................263 Pliki graficzne ................................................................................................................................. 264 Składnia elementu img .................................................................................................................... 264 Wymiary obrazów ........................................................................................................................... 265 Obrazy nieprostokątne ..................................................................................................................... 268 Animacje ......................................................................................................................................... 270 Opływanie ....................................................................................................................................... 271 Dlaczego elementy pływające nie generują wysokości? ................................................................. 273 Osadzanie obrazów w kodzie XHTML ........................................................................................... 275 Rozdział 27. Tabele ........................................................................................................279 Obramowanie i łączenie obramowania ............................................................................................ 280 Podstawowe formatowanie komórek i całych tabel ........................................................................ 281 Nagłówki kolumn i nagłówki wierszy ............................................................................................. 283 Podpis i opis tabeli .......................................................................................................................... 285
Spis treści
7
Tabele regularne i nieregularne ....................................................................................................... 286 Nagłówek, stopka i treść tabeli ........................................................................................................ 288 Kolumny tabeli ................................................................................................................................ 290 Tabele XHTML — podsumowanie ................................................................................................. 294 Rozdział 28. Odsyłacze ...................................................................................................297 Spis treści w postaci listy numerowanej bądź wypunktowanej ....................................................... 298 Style CSS witryny z hiperłączami ................................................................................................... 299 Atrybut title ..................................................................................................................................... 300 Odsyłacze do różnych typów plików .............................................................................................. 300 Odsyłacze wskazujące strony w internecie ..................................................................................... 301 Odsyłacze wewnętrzne .................................................................................................................... 301 Obrazy jako odsyłacze .................................................................................................................... 303 Style CSS odsyłaczy ....................................................................................................................... 304 Otwieranie nowych okien ................................................................................................................ 305 Mapa odsyłaczy ............................................................................................................................... 306 Rozdział 29. Pozostałe elementy XHTML .........................................................................309 Oznaczanie zmian w dokumencie ................................................................................................... 309 Element object ................................................................................................................................. 310 Osadzanie na stronie WWW filmów z serwisu YouTube ......................................................... 311 Osadzanie na stronie WWW apletów pisanych w języku Java ................................................. 313 Bazowy adres URL ......................................................................................................................... 314 Rozdział 30. Projekty .....................................................................................................317
Część V Tła ................................................................................ 339 Rozdział 31. Właściwości CSS dotyczące tła ...................................................................341 Rozdział 32. FIR — wymiana obrazów na teksty ..............................................................351 Efekt FIR wykonany przy użyciu display: none .............................................................................. 353 Efekt FIR wykonany przy użyciu text-indent .................................................................................. 353 Efekt FIR wykorzystujący kolejność warstw .................................................................................. 354 Rozdział 33. Udawane kolumny ......................................................................................359 Rozdział 34. Przyciski rollover w CSS .............................................................................367 Wymiana obrazu tła ........................................................................................................................ 367 Przycisk z etykietą tekstową ............................................................................................................ 368 Przyciski pozycjonowane kontekstowo ........................................................................................... 369 Rozdział 35. Kafelkowanie ..............................................................................................381 Etap pierwszy: pokrojenie szablonu na oddzielne pliki ............................................................ 388 Etap drugi: sklejenie oddzielnych plików w jeden plik sprite.png ............................................ 389 Rozdział 36. Projekty .....................................................................................................393
Część VI Zagadnienia zaawansowane ......................................... 405 Rozdział 37. Struktura funkcjonalna witryny ....................................................................407 Rozdział 38. Uzupełnienie wiadomości na temat CSS ......................................................411 Selektory ......................................................................................................................................... 411 Pseudoklasy ..................................................................................................................................... 414 Importowanie stylów ....................................................................................................................... 418 Dziedziczenie .................................................................................................................................. 419 Style do druku ................................................................................................................................. 419 Style alternatywne ........................................................................................................................... 422
8
Spis treści
Rozdział 39. Kolejność elementów w kodzie XHTML ........................................................423 Zmiana kolejności kolumn pionowych ........................................................................................... 424 Zmiana kolejności poziomych pasów ............................................................................................. 427 Zmiana kolejności kolumn oraz poziomych pasów ......................................................................... 428 Rozdział 40. Atrybuty XHTML .........................................................................................431 Atrybuty zasadnicze ........................................................................................................................ 431 Atrybuty językowe .......................................................................................................................... 431 Zdarzenia ......................................................................................................................................... 432 Atrybuty ogólne .............................................................................................................................. 433 Atrybuty dotyczące aktywnego punktu ........................................................................................... 433 Rozdział 41. Formularze .................................................................................................435 Atrybuty formularza ........................................................................................................................ 436 Kontrolki formularza ....................................................................................................................... 437 Atrybuty ogólne kontrolek formularza ............................................................................................ 438 Zdarzenia dotyczące kontrolek ........................................................................................................ 439 Elementy input ................................................................................................................................ 439 Przyciski zatwierdzające i resetujące formularz .............................................................................. 440 Wiersz wprowadzania danych ......................................................................................................... 441 Pole hasła ........................................................................................................................................ 441 Pola wyboru .................................................................................................................................... 441 Wykluczające pola wyboru ............................................................................................................. 442 Kontrolki ukryte .............................................................................................................................. 443 Przyciski .......................................................................................................................................... 443 Kontrolka wyboru pliku .................................................................................................................. 443 Obraz ............................................................................................................................................... 444 Element button ................................................................................................................................ 444 Listy ................................................................................................................................................ 445 Pole tekstowe .................................................................................................................................. 447 Grupowanie i podpisywanie kontrolek formularza ......................................................................... 447 Podsumowanie ................................................................................................................................ 448 Rozdział 42. Powiązania dokumentów .............................................................................449 Element link .................................................................................................................................... 449 Kanały RSS i Atom ......................................................................................................................... 451 Następny, poprzedni oraz spis treści ............................................................................................... 455 Ikona witryny WWW ...................................................................................................................... 457 Twórcy witryny WWW ................................................................................................................... 460 Plik robots.txt .................................................................................................................................. 460 Plik sitemap.xml .............................................................................................................................. 461 Rozdział 43. Element meta — dodatkowe informacje na temat strony WWW ...................463 Składnia elementu meta .................................................................................................................. 464 Znaczenie elementu meta ................................................................................................................ 464 Dwa rodzaje elementów meta ......................................................................................................... 464 Jakie metainformacje umieszczać w witrynach? ............................................................................. 465 Kodowanie znaków ................................................................................................................... 465 Języki, w jakich przygotowano dokument ................................................................................ 465 Autor, prawa autorskie i firma .................................................................................................. 466 Słowa kluczowe i opis ............................................................................................................... 466 Roboty ....................................................................................................................................... 467 Data powstania i ważności dokumentu ..................................................................................... 467 Przechowywanie stron WWW przez pośredników ................................................................... 468 Skrypty i style — domyślny język ............................................................................................ 468 Metainformacje w kilku językach ............................................................................................. 468 Przekierowania .......................................................................................................................... 469 Różności ................................................................................................................................... 469
Spis treści
9
Rozdział 44. Dostępność strony WWW ............................................................................471 Kilka prostych zasad ....................................................................................................................... 471 Treść umieszczaj jako pierwszą ................................................................................................ 471 Etykietuj kontrolki formularzy .................................................................................................. 472 Pamiętaj o atrybutach alt ........................................................................................................... 472 Definiuj tytuły hiperłączy ......................................................................................................... 472 Twórz czytelne tabele ............................................................................................................... 472 Nie otwieraj nowych okien ....................................................................................................... 473 Nie używaj przekierowań meta refresh ..................................................................................... 473 Definiuj powiązania między poszczególnymi podstronami witryny ......................................... 473 Stosuj atrybut lang .................................................................................................................... 473 Definiuj skróty i skrótowce ....................................................................................................... 473 Rozdział 45. HTML czy XHTML? ......................................................................................475 XHTML zgodny z HTML ............................................................................................................... 475 Wielkość liter ............................................................................................................................ 475 Elementy puste i niepuste ......................................................................................................... 476 Znaczniki opcjonalne ................................................................................................................ 477 Cudzysłów otaczający wartości atrybutów ............................................................................... 477 Minimalizacja atrybutów logicznych ........................................................................................ 478 Identyfikator fragmentu ............................................................................................................ 478 Style i skrypty ........................................................................................................................... 478 Encje ......................................................................................................................................... 479 Dokumenty HTML/XHTML w sieci WWW .................................................................................. 479 Content-type .............................................................................................................................. 479 Czy to HTML, czy XHTML? ................................................................................................... 481 Jak przeglądarka traktuje dokument HTML, a jak XHTML? ................................................... 481 Po czym przeglądarka rozpoznaje język dokumentu? ............................................................... 482 Nagłówek Content-type dokumentu HTML oraz XHTML ....................................................... 482 Problemy z Internet Explorerem ............................................................................................... 482 Strona XHTML wysyłana jako application/xhtml+xml .................................................................. 483 Zmiana nagłówków wysyłanych przez serwer Apache ............................................................. 483 Wysyłanie nagłówka HTTP w PHP .......................................................................................... 483 Cztery proste zasady ....................................................................................................................... 483 HTML czy XHTML? ...................................................................................................................... 484 Rozdział 46. Semantyczny XHTML ..................................................................................485 Witryna WWW widziana oczami człowieka i robota ..................................................................... 485 Semantyczna sieć ............................................................................................................................ 486 Semantyka kodu XHTML ............................................................................................................... 486 Semantyka przez małe s .................................................................................................................. 487 Kto ma rację, czyli o braku specyfikacji semantyki XHTML ......................................................... 488 Praktyczne rozwiązania popularnych problemów ........................................................................... 488 Menu witryny ............................................................................................................................ 488 Nawigacja: jesteś tutaj .............................................................................................................. 488 Ilustracja ................................................................................................................................... 489 Listing ....................................................................................................................................... 489 Złożenia ........................................................................................................................................... 489 Złożenie: dialog ........................................................................................................................ 490 Bibliografia ............................................................................................................................... 490 Problemy semantyczne XHTML i CSS ........................................................................................... 491 Czy strong jest bardziej semantyczny niż b? ................................................................................... 494 Elementy em oraz span ................................................................................................................... 495 Drzewo elementów .......................................................................................................................... 496 Element czysto prezentacyjny ......................................................................................................... 497
10
Spis treści
Czy wszystkie elementy tekstowe są równoważne? ........................................................................ 497 Czy klasa wzbogaca semantykę elementu? ..................................................................................... 498 Czy XHTML jest bardziej semantyczny niż HTML? ..................................................................... 499 Praktyczne porady dotyczące semantyki ......................................................................................... 499 Skorowidz ......................................................................................................................501
Część I
Elementarz
12
Część I ♦ Elementarz
Rozdział 1. ♦
13
Rozdział 1.
Wprowadzenie Współczesny webmastering to dziedzina złożona. Tworząc strony WWW, trzeba znać podstawy grafiki komputerowej i typografii oraz ogólne zasady składu komputerowego. Niezbędna jest biegła znajomość języków XHTML, CSS, a nierzadko również JavaScript. Trzeba także znać ograniczenia, które uniemożliwiają dostęp do informacji zawartych na stronach WWW osobom niepełnosprawnym. Funkcjonalny i łatwy w obsłudze interfejs witryny należy wykonać w taki sposób, by roboty i wyszukiwarki internetowe mogły bez problemu przeanalizować i sklasyfikować zawartość serwisu. Wszystko to sprawia, że nauka tworzenia stron WWW jest czymś więcej niż poznawaniem podstaw języka XHTML. Książka HTML, XHTML i CSS. Praktyczne projekty stanowi kompendium wiedzy na temat języków HTML, XHTML oraz CSS, w którym szczególny nacisk położono na: poprawność składniową XHTML oraz CSS, pracę w trybie standardów, zgodność tworzonych stron ze standardami, semantykę kodu XHTML, dostępność.
Dla kogo jest ta książka? Książka jest skierowana do początkujących oraz średniozaawansowanych twórców witryn internetowych, którzy chcą poznać języki XHTML oraz CSS lub pogłębić swoją wiedzę o nich. Oprócz szczegółowego omówienia niemal całego języka XHTML oraz dużej części CSS znajdziesz w niej wyjaśnienie: jak sprawnie edytować kod XHTML, na czym polega różnica między HTML a XHTML, jak pracować w trybie standardów, jakich czcionek używać na stronach WWW, w jaki sposób tworzyć układy stron przy użyciu stylów CSS w połączeniu z elementami div, jak wykorzystywać tła na stronach WWW (w szczególności poznasz efekty FIR, udawane kolumny oraz kafelkowanie), jakimi cechami wyróżnia się semantyczny kod XHTML, jak projektować szablony stron WWW.
Część I ♦ Elementarz
14
Jeśli tworzysz witryny za pomocą wizualnych edytorów WYSIWYG (ang. What You See Is What You Get — otrzymujesz to, co widzisz) i nie chcesz poznawać zawartości plików XHTML i CSS, to książka ta zdecydowanie nie jest dla Ciebie.
Jak czytać tę książkę? Książka jest zorganizowana w dwa rodzaje zadań praktycznych: ćwiczenia oraz projekty. Ćwiczenia są zadaniami krótszymi: demonstrują użycie poszczególnych elementów XHTML czy właściwości CSS. Projekty podsumowują większe partie materiału. Czytając książkę, należy samodzielnie wykonywać wszystkie ćwiczenia i projekty. Ułatwia to materiał zawarty na płycie. Na stronie każdego ćwiczenia i projektu można pobrać komplet danych niezbędnych do wykonania zadania. Czasami są to pliki tekstowe, kiedy indziej pliki graficzne. Wykonanie ćwiczeń i projektów opisanych w książce nie wymaga przepisywania żadnych tekstów: gotowe teksty są dostępne w formacie TXT. Aby wykonać zadanie, należy przygotować odpowiedni kod XHTML oraz CSS, wykorzystując gotowe teksty oraz obrazy.
Warsztat pracy Zanim rozpoczniesz naukę tworzenia stron WWW, musisz zadbać o przygotowanie stanowiska pracy. Ponieważ każdy użytkownik wędrujący po internecie może używać innego oprogramowania, musisz zastanowić się, w jaki sposób przygotowywać witryny WWW, które będą dostępne dla jak najszerszego grona odbiorców. Najprostszą metodą upewnienia się, że Twoje witryny są poprawnie wyświetlane, jest przetestowanie ich w różnych przeglądarkach. Dlatego na komputerze, na którym tworzę strony WWW, zazwyczaj instaluję wszystkie najpopularniejsze przeglądarki. Jakie przeglądarki należy zainstalować? Odpowiedź na to pytanie znajdziesz, odwiedzając serwis ranking.pl. Pod adresem http://ranking.pl/pl/rankings/web-browsers.html dostępne jest zestawienie przeglądarek, z których korzystają polscy internauci. Wykres prezentujący popularność przeglądarek jest przedstawiony na rysunku 1.1. Zwróć uwagę, że popularność przeglądarek podlega ciągłym zmianom. Po odwiedzeniu witryny http:// ranking.pl odszukaj zestawienie najpopularniejszych przeglądarek za okres od 1 stycznia 2009 r. do 31 grudnia 2010 r. Jeszcze kilka lat temu prym wiodły produkty firmy Microsoft. Obecnie najpopularniejsza jest przeglądarka Firefox. Niektóre przeglądarki, jak na przykład Netscape, zniknęły z rynku. Ich miejsce zajęły nowe produkty — Chrome oraz Safari. Z zestawienia widocznego na rysunku 1.1 wynika, że pod koniec roku 2010 najpopularniejszymi przeglądarkami były: Firefox 3.x 47,9% MSIE 8.x 15,4% MSIE 7.x 10,4% Opera 10.x 9,3% Chrome 7.x 9,2% MSIE 6.x 3,0% Opera 9.x 0,9% Firefox 2.x 0,6% Safari 5.x 0,4%
Rozdział 1. ♦ Wprowadzenie
15
Rysunek 1.1. Statystyki popularności przeglądarek dostępne w witrynie ranking.pl
Biorąc pod uwagę trendy zmian, można prognozować, że około połowy roku 2011, czyli w momencie, w którym drugie wydanie książki HTML, XHTML i CSS. Praktyczne projekty pojawi się w sklepach, najważniejszymi przeglądarkami będą: Firefox, MSIE, Opera, Chrome, Safari. Zatem przygotowanie warsztatu pracy rozpoczynamy od zainstalowania najnowszych wersji pięciu przeglądarek: Firefoksa, Internet Explorera, Opery, Chrome’a oraz Safari. Przeglądarki te znajdziesz na stronach: Firefox: IE 8: Opera: Chrome: Safari:
http://www.mozilla-europe.org/pl/ http://www.microsoft.com/poland/windows/internet-explorer/ http://www.opera.com http://www.google.com/chrome?hl=pl http://www.apple.com/pl/safari/
Wszystkie opisane w książce ćwiczenia i projekty będziemy wykonywali w taki sposób, by wyglądały one poprawnie we wszystkich pięciu przeglądarkach.
16
Część I ♦ Elementarz
W okresie, w którym przygotowywałem książkę, czyli pod koniec 2010 roku, aktualnymi wersjami przeglądarek były: Firefox 3.6.13, Internet Explorer 8.0, Opera 10.63, Chrome 8.0, Safari 5.0.2. Wszystkie wystąpienia nazw przeglądarek pozbawione numeru odnoszą się do podanych wyżej wersji.
Firefox Szczególną rolę będzie odgrywała przeglądarka Firefox. Ze względu na liczne dodatki1 oraz rozszerzenia jest ona bardzo wygodna do testowania witryn internetowych. Po zainstalowaniu przeglądarki Firefox zainstaluj także następujące dodatki: Web Developer Toolbar https://addons.mozilla.org/en-US/firefox/addon/60/ HTML Validator https://addons.mozilla.org/pl/firefox/addon/249/ Firebug https://addons.mozilla.org/en-US/firefox/addon/1843/ Live HTTP Headers https://addons.mozilla.org/en-US/firefox/addon/3829/ Site navigation bar https://addons.mozilla.org/pl/firefox/addon/1949/
Testowanie stron WWW Każda wykonana strona WWW powinna zostać sprawdzona pod kilkoma względami: poprawności składniowej XHTML i CSS, wyglądu w pięciu wymienionych przeglądarkach, wpływu rozdzielczości monitora na wygląd witryny, wyglądu przy wyłączonych stylach CSS. Pierwszym rodzajem testu jest sprawdzenie poprawności kodu XHTML oraz CSS. Służą do tego: wtyczka HTML Validator przeglądarki Firefox, serwis http://validator.w3.org oraz walidator http://jigsaw.w3.org/css-validator/.
1
Obecnie wszystkie przeglądarki zawierają ułatwienia dla twórców witryn. W Internet Explorerze występuje panel Narzędzia/ Narzędzia deweloperskie. W Operze należy zainstalować dodatek Dragonfly (http://www.opera.com/ dragonfly/). W Safari włączenie opcji Edycja/Preferencje/Zaawansowane/Pokazuj menu Programowanie w pasku menu spowoduje pojawienie się w menu głównym pozycji Programowanie. Natomiast w przeglądarce Chrome występuje opcja Narzędzia/Narzędzia dla programistów. Dostępna jest także wtyczka Chrome Web Developer Tools.
Rozdział 1. ♦ Wprowadzenie
17
Drugi test polega na sprawdzeniu wyglądu strony WWW w kilku przeglądarkach. Ćwiczenia i projekty omówione w książce zostały sprawdzone w przeglądarkach: Firefox 3.6, Internet Explorer 8.0, Opera 10.63, Chrome 8.0, Safari 5.0. Jeśli pracujesz na monitorze o dużej rozdzielczości (np. 1680×1050), to test witryny w różnych rozdzielczościach możesz przeprowadzić, zmniejszając okno przeglądarki. Ostatni test, użycie arkuszy stylów, możesz wykonać, wykorzystując wbudowane możliwości przeglądarek. W przeglądarce Firefox style wyłącza opcja Widok/Styl strony/ Ignoruj style, a w przeglądarce Internet Explorer — Widok/Styl/Brak stylu. W Firefoksie możesz także skorzystać z wtyczki Web Developer Toolbar. Po zainstalowaniu wtyczki do wyłączenia stylów CSS służy skrót klawiszowy Ctrl+Shift+S. Wyłączanie stylów CSS ♦ Firefox: Widok/Styl strony/Ignoruj style lub (po zainstalowaniu wtyczki Web Developer Toolbar) skrót klawiszowy Ctrl+Shift+S. ♦ Internet Explorer: Widok/Styl/Brak stylu. ♦ Opera: Strona/Styl/Tryb użytkownika (należy jeszcze w konfiguracji trybu użytkownika wyłączyć wszystkie style: Strona/Styl/Zarządzaj trybami). ♦ Chrome: po zainstalowaniu rozszerzenia Web Developer opcja Disable/Disable site CSS. ♦ Safari: Programowanie/Wyłącz style (najpierw Edycja/Preferencje/Zaawansowane/Pokazuj menu Programowanie w pasku menu)
Edycja kodu XHTML Edycja kodu XHTML jest zadaniem żmudnym. Ręczne przygotowanie kodu XHTML (tj. bez wykorzystywania techniki kopiuj-wklej czy innych udogodnień) nawet pustej strony WWW widocznej na listingu 2.1 może odstraszyć każdego. Wprowadzenie z klawiatury nagłówka DOCTYPE, znacznika otwierającego czy elementu meta odpowiedzialnego za kodowanie znaków po pierwsze zajmie dużo czasu, a po drugie otrzymany kod zazwyczaj będzie błędny. Te dwa problemy powodują, że tworzenie stron WWW w zwykłym notatniku jest rozwiązaniem złym. Wielokrotnie w ramach prowadzonych zajęć natrafiałem na literówki, których poprawienie wymagało stosunkowo wiele czasu. Przykładami są brak znaku / w znaczniku zamykającym oraz zamiana atrybutu src elementu img na scr. Błędy te dość trudno zlokalizować wzrokowo w kodzie strony. Bez użycia walidatora, pracując w notatniku, w swojej codziennej pracy napotkasz mnóstwo tego typu trudności. Rozwiązaniem części problemów jest walidator sprawdzający poprawność kodu XHTML. Wszelkie błędy składniowe zostaną przez niego wychwycone. Drugi problem, ilość czasu potrzebnego na wprowadzenie podstawowych elementów XHTML, rozwiązałem poprzez opracowanie edytora NotH. W programie tym większa część elementów XHTML jest dostępna w postaci predefiniowanych komend aktywowanych skrótami klawiszowymi lub podwójnym kliknięciem w oknie szablonów. W ten sposób realizuję główny cel, którym jest nauczanie języka XHTML, bez tracenia czasu na zadania czysto edycyjne. Główne okno programu NotH jest widoczne na rysunku 1.2. Instrukcja obsługi NotH-a jest dołączona do programu. Po zainstalowaniu NotH-a uruchom go, a następnie naciśnij przycisk F1. Poznasz wówczas szczegóły pracy w programie.
Część I ♦ Elementarz
18
Rysunek 1.2. Edytor NotH Książka jest podręcznikiem języków XHTML i CSS, a nie programu NotH. Wszystkie omówione przykłady, ćwiczenia i projekty mogą być wykonane w dowolnym innym edytorze plików tekstowych.
Innym bardzo ciekawym rozwiązaniem, jeśli chodzi o edycję kodu XHTML, jest technika nazywana Zen Coding. Znaczniki XHTML są generowane na podstawie zapisu zbliżonego do selektora CSS. Po wpisaniu w edytorze tekstu: div#pojemnik>div.lewa+ul.menu>li*3>a[href="#"]
oraz wykonaniu konwersji otrzymamy kod:
Wlazł kotek na płotek
Wlazł kotek na płotek
Niektóre elementy nie mają znaczników zamykających. Elementy takie nazywamy pustymi. Przykładami elementów pustych są br oraz hr. Elementy puste zapisuje się w postaci jednego znacznika o nieco innym zakończeniu:
Elementami pustymi są: area, base, br, button, col, hr, img, input, link, meta i param. Wszystkie pozostałe elementy są niepuste, a więc mają obowiązkowe znaczniki zamykające. Zwróć uwagę, że element niepusty nie może być zapisywany tak jak elementy puste, nawet gdy nie zawiera treści:
PRZYKŁAD NIEPOPRAWNY
Poprawnym zapisem jest:
Podobnie element pusty nie może być zapisywany przy użyciu znacznika otwierającego i zamykającego:
PRZYKŁAD NIEPOPRAWNY
Jedynym poprawnym rozwiązaniem jest:
Spacja przed znakiem / nie jest wymagana i może być pominięta3:
Znaczniki wymagane i opcjonalne oraz elementy puste W języku XHTML nie występują znaczniki opcjonalne. Oznacza to, że każdy znacznik otwierający musi mieć znacznik zamykający. Odstępstwem od tej reguły są wyłącznie wymienione już elementy puste. One jako jedyne nie mają znaczników zamykających. Nie możesz więc pisać:
3
Specyfikacja języka XHTML 1.0 w punkcie C.2 zaleca stosowanie spacji, gdyż jej brak może powodować błędy w przypadku starszych przeglądarek. Uwaga ta była pisana dziesięć lat temu i już się zdezaktualizowała. Już od dawna wszystkie przeglądarki rozumieją zapis
i żadna z nich nie ma z tym kłopotu. Powodem, dla którego go nie używam, jest tak naprawdę przyzwyczajenie! W dalszej części książki będę konsekwentnie stosował notację ze spacją, czyli
.
Część I ♦ Elementarz
24
PRZYKŁAD NIEPOPRAWNY
lorem ipsum a b lorem c d a b c d e f lorem ipsum XXXlorem ipsumYYY Lorem ipsum dolor sit amet... dolor sit amet Dokument pochodzi z serwisu http://example.net. drukuj dokument Dolor sit amet... Dolor sit amet... przejdź do treści lorem Lorem ipsum dolor sit amet... Quoting a well known French proverb: C'est la vie... ...
jest poprawnym znacznikiem otwierającym elementu p. Pamiętaj jednak, że białe znaki poprzedzające nazwę znacznika są niedozwolone. Żaden z poniższych trzech znaczników nie jest poprawny:
PRZYKŁAD NIEPOPRAWNY <
p>
Najlepiej nie umieszczać białych znaków wewnątrz znaczników (o ile nie jest to konieczne). Nie stanowi to żadnego istotnego ograniczenia, a uchroni Cię przed trudnymi do odnalezienia błędami. Zamiast:
>lew służą do zapisu znaczników, wprowadzenie nierówności:
PRZYKŁAD NIEPOPRAWNY x7
w tekście strony WWW będzie prowadziło do dwuznaczności. Napis zostanie zinterpretowany jako znacznik. W jaki zatem sposób wprowadzić znak mniejszości tak, by został on potraktowany jako fragment tekstu? Służą do tego znaki specjalne6 (ang. character references). Zamiast znaku < należy użyć napisu — napisu >. Poprzedni przykład po zastosowaniu znaków specjalnych ma postać: x7
Dziesiętnym kodem ASCII znaku < jest liczba 60, która wyrażona w systemie szesnastkowym ma wartość 3c. Ten sam znak < możesz zapisać w dokumencie XHTML na trzy sposoby: stosując encję nazwaną ( F
Selektor dziecka
Pasuje do elementu F zawartego bezpośrednio w E.
E + F
Selektor następnego brata
Pasuje do elementu F bezpośrednio poprzedzonego przez E.
E[foo]
Selektor atrybutu
Pasuje do elementów, które mają atrybut foo (o dowolnej wartości).
E[foo="bar"]
Selektor atrybutu o podanej dokładnej wartości
Pasuje do elementów, które mają atrybut foo o wartości bar.
E[foo~="bar"]
Selektor atrybutu o zadanej wartości
Pasuje do elementu E z atrybutem foo, którego jedną z wartości jest bar.
E[lang|="en"]
Selektor języka
Pasuje do elementów, których atrybut lang jako jedną z wartości zawiera język en. Języki należy oddzielić dywizami, np. lang="en-de-fr".
*
Selektor uniwersalny
Pasuje do każdego elementu.
S1, S2, S3
Selektor grupowy
S1, S2 i S3 są dowolnymi selektorami. Selektor grupowy pasuje
Pasuje do elementu F zawartego (dowolnie głęboko) wewnątrz E.
do każdego z nich. Liczba selektorów w grupie może być dowolna.
Selektor klasy wykorzystuje znak kropki. Może być zapisywany bez nazwy elementu: .zaznaczenie { }
lub z nazwą elementu: p.zaznaczenie { }
W pierwszym przypadku selektor dotyczy wszystkich elementów klasy zaznaczenie, a w drugim tylko elementów p klasy zaznaczenie. Co ciekawe, ponieważ atrybut class może przyjmować kilka wartości oddzielonych spacjami:
selektor klasy może składać się z kilku członów. Selektor: p.zaznaczenie.specjalny { }
dotyczy tych elementów p, które w atrybucie class mają wymienione co najmniej dwie klasy: zaznaczenie oraz specjalny. Natomiast selektor:
Rozdział 38. ♦ Uzupełnienie wiadomości na temat CSS
413
.inny.zaznaczenie.tekst { }
dotyczy wszystkich elementów, które mają co najmniej trzy klasy: inny, zaznaczenie i tekst. Obejmie więc między innymi element:
Selektor: .lorem { }
dotyczy każdego elementu, który jako jedną z wartości atrybutu class ma lorem, a więc między innymi elementów:
Selektor potomka składa się z dwóch członów oddzielonych spacją, np. h1 em { } #naglowek em { } .menu .tytul { } #stopka .nazwa { }
Członami mogą być elementy, klasy lub dowolne inne selektory. Pierwszy z podanych selektorów dotyczy elementu em zawartego dowolnie głęboko wewnątrz h1. Swoim działaniem obejmie więc między innymi napisy lorem, ipsum oraz dolor: lorem ipsum dolor
Selektor dziecka różni się od selektora potomka separatorem członów: h1 > em { } #naglowek > em { } .menu > .tytul { } #stopka > .nazwa { }
Drugi z podanych elementów musi być zawarty bezpośrednio (a nie głębiej) w pierwszym. Pierwszy z przykładowych selektorów dotyczy elementu em zawartego wewnątrz h1. Swoim działaniem obejmie napis dolor, a nie obejmie napisów lorem oraz ipsum: lorem ipsum dolor
Selektor następnego brata: em + span { }
wskazuje elementy span, które występują bezpośrednio po elemencie em. Obejmuje więc napis ipsum:
414
Część VI ♦ Zagadnienia zaawansowane
Selektor ten wybiera zawsze tylko jeden element. Spośród czterech poniższych elementów span selektor em + span obejmie tylko element zawierający literę c:
Selektor atrybutu powoduje zastosowanie podanej reguły do elementów mających konkretny atrybut o zadanej wartości. Selektor: th[scope="col"] { }
dotyczy tych komórek th, które mają atrybut scope o wartości col, np.:
Selektor ten można stosować bez podawania wartości: th[scope] { }
wówczas dotyczy on wszystkich elementów th mających atrybut scope o dowolnej wartości. Inną metodą stosowania tego atrybutu jest podawanie jednej z dopuszczalnych wartości: em[lang~="en"] { }
Selektor ten dotyczy elementu em, którego atrybut lang ma jako jedną z wartości en. Ostatnim selektorem w tabeli 38.1 jest selektor grupowy. Przyjmuje on postać dowolnej liczby selektorów oddzielonych przecinkami, np.: h1, h2, h3 { }
Powyższa reguła CSS zostanie zastosowana zarówno do h1 i h2, jak i h3. Natomiast reguła: .nazwapliku, .naglowek h3 { }
zostanie zastosowana do elementów klasy nazwapliku oraz do elementów h3 zawartych w elemencie klasy naglowek.
Ćwiczenie 38.1 Wykonaj witrynę sprawdzającą działanie wszystkich selektorów.
Pseudoklasy W języku CSS 2.1 dostępnych jest jedenaście pseudoklas zawartych w tabeli 38.2. Wszystkie przeglądarki wymienione w rozdziale 1. obsługują pełny zestaw pseudoklas z tabeli 38.2. Pseudoklasa :first-child wybiera elementy, które są pierwszymi dziećmi swoich rodziców. Selektor: p:first-child { }
będzie dotyczył akapitów zawierających litery a oraz d:
Rozdział 38. ♦ Uzupełnienie wiadomości na temat CSS
415
Tabela 38.2. Pseudoklasy języka CSS 2.1 Selektor
Nazwa
Znaczenie
E:first-child
Pseudoklasa :first-child
Pasuje do elementów E, które są pierwszym dzieckiem swojego rodzica.
E:first-line
Pseudoklasa :first-line
Pasuje do pierwszego wiersza tekstu elementu E.
E:first-letter
Pseudoklasa :first-letter
Pasuje do pierwszej litery elementu E.
E:before
Pseudoklasa :before
Umożliwia wstawianie zawartości przed podanym elementem.
E:after
Pseudoklasa :after
Umożliwia wstawianie zawartości za podanym elementem.
E:link
Pseudoklasa :link
Pasuje do hiperłączy, które nie były jeszcze odwiedzone.
E:visited
Pseudoklasa :visited
Pasuje do hiperłączy, które były odwiedzone.
E:hover
Pseudoklasa :hover
Pasuje do hiperłącza, które jest wskazane kursorem myszy.
E:active
Pseudoklasa :active
Pasuje do hiperłącza, które jest właśnie aktywowane (np. po naciśnięciu i przytrzymaniu przycisku myszki na hiperłączu).
E:focus
Pseudoklasa :focus
Pasuje do elementu E, który jest aktywny, tzn. w którym jest umiejscowiony kursor wprowadzania danych (dotyczy głównie kontrolek formularzy).
E:lang(c)
Pseudoklasa :lang
Pasuje do elementu E, który jest w języku c.
Selektory :first-line oraz :first-letter obejmują pierwszy wiersz oraz pierwszą literę wewnątrz elementu. Pseudoklasy :before oraz :after służą do wstawiania dodatkowej zawartości wewnątrz elementów. Można je wykorzystywać m.in. do umieszczania w tekście cudzysłowów, dodawania etykiet oraz automatycznego numerowania rozdziałów. Listing 24.1 przedstawia style CSS, które wykorzystując pseudoklasy :before oraz :after, umieszczają w dokumencie cudzysłowy zależne od języka. Reguła: q[lang="pl"]:before { content: "„"; } q[lang="pl"]:after { content: "”"; }
wstawia przed każdym elementem q, którego treść jest oznaczona językiem pl, polski cudzysłów. Wartością właściwości content jest wstawiany napis. Reguła: p:before { content: "XXX"; } p:after { content: "YYY"; }
powoduje wstawienie na początku i na końcu każdego akapitu tekstów XXX oraz YYY. Powyższa reguła zmienia akapit:
Część VI ♦ Zagadnienia zaawansowane
416
tak, że będzie w przeglądarce wyglądał tak samo jak:
W ten sposób możemy we wszystkich akapitach klasy .uwaga dodać na początku tekst UWAGA: .uwaga:before { content: "UWAGA: "; }
Pamiętaj jednak, że tekst podany jako wartość właściwości content nie może zawierać kodu XHTML:
PRZYKŁAD NIEPOPRAWNY .uwaga:before { content: "UWAGA"; }
Łącząc selektory :before i:after z licznikami i właściwościami counter-reset, counter--increment i content oraz funkcją counter(), możemy w dokumentach zdefiniować automatyczną numerację elementów. W projekcie 30.5 wewnątrz elementów h4 umieściliśmy numery rozdziałów, np.: 1. The Cyclone 2. The Council with the Munchkins 3. How Dorothy Saved the Scarecrow ...
Numerację taką możemy wykonać w sposób automatyczny, wykorzystując style z listingu 38.1. Listing 38.1. Automatyczna numeracja rozdziałów oznaczonych nagłówkami h4 body { }
counter-reset: rozdzial;
h4:before { content: counter(rozdzial) ". "; counter-increment: rozdzial; } The Cyclone The Council with the Munchkins How Dorothy Saved the Scarecrow ...
Właściwość counter-reset resetuje licznik o nazwie rozdzial. Można powiedzieć, że w ten sposób definiujemy zmienną o nazwie rozdzial. Wykorzystując pseudoklasę :before, wartość zmiennej rozdzial wstawiamy w tytułach podrozdziałów. Po numerze rozdziału dodajemy kropkę oraz spację. W deklaracji: content: counter(rozdzial) ". ";
funkcja counter() zwraca bieżącą wartość licznika o nazwie rozdzial. Do zwróconej wartości dołączany jest napis ujęty w cudzysłów, czyli kropka oraz spacja. Po wstawieniu wartości zmiennej rozdzial do dokumentu zwiększamy jej wartość: counter-increment: rozdzial;
Automatyczna numeracja może być wielopoziomowa. Takie rozwiązanie prezentuje listing 38.2. Listing 38.2. Wielopoziomowa automatyczna numeracja body { counter-reset: h1; } h1 { counter-reset: h2;
Rozdział 38. ♦ Uzupełnienie wiadomości na temat CSS
417
} h1:before { content: counter(h1) ". "; counter-increment: h1; } h2 { counter-reset: h3; } h2:before { content: counter(h1) "." counter(h2) ". "; counter-increment: h2; } h3 { counter-reset: h4; } h3:before { content: counter(h1) "." counter(h2) "." counter(h3) ". "; counter-increment: h3; } Lorem ipsum Dolor sit amet Duis sapien Pellentesque viverra Curabitur non turpis Lorem Ipsum Dolor Sit Amet
W stylach z listingu 38.2 definiujemy cztery liczniki: h1, h2, h3 oraz h4. Licznik h1 jest resetowany na początku dokumentu. Licznik h2 resetujemy po wystąpieniu każdego nagłówka h1. Dzięki temu numeracja nagłówków h2 po wystąpieniu nagłówka h1 będzie rozpoczynała się od 1. W podobny sposób resetujemy liczniki h3 oraz h4. Kolejnymi pseudoklasami z tabeli 38.2 są :link, :visited, :hover oraz :active. Służą one do formatowania odsyłaczy. Ich działanie szczegółowo omówiliśmy w rozdziałach 28. oraz 34. Pseudoklasa :focus dotyczy kontrolek formularzy. Selektor: input:focus { }
dotyczy tego elementu input, w którym obecnie jest wprowadzany tekst. Ostatnia pseudoklasa z tabeli 38.2 służy do różnicowania formatu elementów na podstawie języka. Selektor: :lang(fr) { }
obejmuje wszystkie elementy w języku francuskim (tj. te, których atrybut lang jako jedną z wartości przyjmuje fr).
Ćwiczenie 38.2 Wykonaj witrynę sprawdzającą działanie wszystkich pseudoklas.
Ćwiczenie 38.3 Wykonaj projekt 30.5, wykorzystując automatyczną numerację przedstawioną na listingu 38.1.
418
Część VI ♦ Zagadnienia zaawansowane
Ćwiczenie 38.4 Wykonaj witrynę sprawdzającą działanie wielopoziomowej automatycznej numeracji z listingu 38.2.
Importowanie stylów W arkuszach stylów możemy osadzać zawartość zewnętrznych plików2 CSS. Służy do tego reguła @import. Jeśli w stylach CSS umieścisz instrukcję: @import "uklad.css";
to spowoduje ona dołączenie zawartości pliku uklad.css. Dzięki regule @import plik CSS może zostać podzielony na kilka fragmentów. Na przykład w dokumencie XHTML dołączamy style zewnętrzne z pliku style.css:
Natomiast w pliku style.css umieszczamy dwie reguły: @import "uklad.css"; @import "szczegoly.css";
Tak wykonana witryna będzie się składała z czterech plików: index.html, style.css, uklad.css, szczegoly.css. Wykorzystując to, można na przykład przyznać uprawnienia do modyfikowania wyglądu dokumentu bez możliwości modyfikacji kodu XHTML. Jeśli masz uprawnienia do modyfikacji plików uklad.css oraz szczegoly.css, to możesz zmieniać wygląd witryny. Nie są Ci potrzebne żadne uprawnienia do kodu XHTML. Importowanie stylów możesz wykonać bezpośrednio w kodzie XHTML. Reguła @import może wystąpić w stylach wewnętrznych:
W takiej sytuacji witryna będzie składała się z dwóch plików: index.html, uklad.css. Importowanie stylów CSS bywa wykorzystywane do ominięcia różnic w interpretacji CSS przez przeglądarkę Internet Explorer. W dokumencie XHTML umieszczamy specjalne komentarze, a w nich instrukcję @import:
Komentarze tego typu są ignorowane przez wszystkie przeglądarki oprócz Internet Explorera. Internet Explorer interpretuje je natomiast jako instrukcję warunkową if dołączającą podany plik ie5.css tylko wówczas, gdy witryna jest przeglądana przy użyciu przeglądarki IE w wersji niższej niż 6 (skrót lt pochodzi
2
Osadzanie kodu XHTML umożliwia opisany w rozdziale 29. element object.
Rozdział 38. ♦ Uzupełnienie wiadomości na temat CSS
419
od słów less than — mniejszy niż). W ten sposób style przeznaczone dla konkretnej wersji przeglądarki IE są zawarte w zewnętrznym pliku. Szczegółowa dokumentacja komentarzy dla przeglądarki IE jest dostępna na stronie: http://msdn. microsoft.com/en-us/library/ms537512%28v=vs.85%29.aspx. Komentarze warunkowe if/endif Internet Explorera mogą się okazać przydatne, gdy zechcesz poddać walidacji kod CSS zawierający właściwości niewystępujące w specyfikacji CSS. Style przeznaczone wyłącznie dla IE i niezgodne ze specyfikacją CSS przenosimy do osobnego pliku i dołączamy do dokumentu, stosując komentarze warunkowe if/endif. W ten sposób wynik automatycznej walidacji dokumentu w serwisie http://jigsaw.w3.org/css-validator/ nie będzie zawierał informacji o błędnych właściwościach.
Ćwiczenie 38.5 Przekształć projekt 36.5 tak, by style były zawarte w trzech plikach: style.css, uklad.css oraz szczegoly.css. W pliku style.css umieść tylko reguły @import. W pliku uklad.css umieść style odpowiedzialne za układ witryny, a w pliku szczegoly.css — pozostałe style. Wykonując ćwiczenie, nie powinieneś dokonywać żadnych modyfikacji w żadnym z plików XHTML.
Dziedziczenie Kaskadowe arkusze stylów umożliwiają dziedziczenie wartości. Dzięki temu nie musisz przypisywać wartości do wszystkich elementów, a jedynie do jednego elementu nadrzędnego. Jeśli w stylach umieścisz regułę: body { text-align: center; }
to wartość center zostanie zastosowana do wszystkich elementów zawartych wewnątrz body, między innymi do div, blockquote oraz obu akapitów:
lorem ipsum
Dzieje się tak dlatego, że właściwość text-align podlega dziedziczeniu. Niektóre właściwości CSS, jak na przykład font-family, font-size oraz font-style, podlegają dziedziczeniu. Inne, m.in. border, margin, padding, width, height — nie podlegają. Dziedziczenie możesz wymusić, stosując wartość inherit, np.: width: inherit; padding: inherit;
Style do druku W wykonywanych do tej pory ćwiczeniach i projektach style CSS służyły do formatowania wyglądu witryny WWW na monitorze. Wykorzystując język CSS, możemy także sformatować witrynę WWW tak, by dobrze prezentowała się na wydruku. Umożliwia to atrybut media elementu link. Jeśli wartością elementu media jest screen, to style są przeznaczone do formatowania dokumentu wyświetlanego na ekranie:
420
Część VI ♦ Zagadnienia zaawansowane
Jeśli wartością atrybutu media jest print, to style są przeznaczone do formatowania wydruku:
Style, które są dołączone do strony WWW elementem link zawierającym atrybut media= "print ", będą używane, gdy użytkownik wykona w przeglądarce operację Plik/Drukuj. Style wydruku często sprowadzają się do: usunięcia elementów dekoracyjnych, menu, nagłówka, stopki; dodania informacji o pochodzeniu wydrukowanych treści. Usuwanie elementów strony WWW wykonujemy, wykorzystując właściwość display wartości none. Reguła: #menu { display: none; }
zawarta w stylach print.css wyłącza widoczność menu na wydruku. Natomiast w celu dodania tekstu w drukowanym dokumencie należy właściwość display zastosować do dokumentu wyświetlanego na ekranie. W kodzie XHTML umieszczamy element:
Style przeznaczone na ekran będą zawierały regułę, która sprawi, że powyższy element będzie niewidoczny: #copyright { display: none; }
Natomiast w stylach przeznaczonych do wydruku nadpisujemy podaną wartość, podając: #copyright { display: block; }
Wtedy witryna wyświetlana na ekranie będzie pozbawiona elementu o identyfikatorze #copyright, a wydruk będzie ten element zawierał. Często stosowanym trikiem jest połączenie stylów do wydruku z pseudoklasą :after. Dzięki takiemu połączeniu możesz wykonywać odsyłacze, które na wydruku zawierają adres URL. Jeśli w dokumencie umieścisz odsyłacz i sformatujesz go stylami widocznymi na listingu 38.3, wówczas wydruk będzie zawierał pełny adres URL odsyłacza. Listing 38.3. Połączenie stylów do druku i pseudoklasy :after
... Opis kafelkowania znajdziesz w artykule
CSS Sprites: Image Slicing's Kiss of Death , którego autorem jest Dave Shea.
Rozdział 38. ♦ Uzupełnienie wiadomości na temat CSS
421
Jeśli chcesz, by aktywacja hiperłącza powodowała wyświetlenie okna dialogowego Drukuj, to użyj specjalnego adresu URL, który zawiera kod JavaScript: ...
Skrypt ten możesz również umieścić w nagłówku strony WWW:
...
wówczas otworzenie witryny w przeglądarce będzie automatycznie powodowało wyświetlenie okna dialogowego wydruku strony. NOTH Style do druku — Ctrl+B+P
Style formatujące wydruk dokumentu możemy dołączyć na dwa sposoby. Pierwszą metodą jest zastosowanie opisanego powyżej elementu link zawierającego atrybut media o wartości print. Drugą metodą jest osadzenie stylów wydruku w stylach CSS. Jeśli do dokumentu XHTML dołączamy style zawarte w pliku style.css, to bez względu na wartość atrybutu media dołączającego plik możemy wewnątrz dokumentu style.css umieścić regułę: @media print { h1 { } P { } }
Reguła @media print powoduje, że style podane w nawiasach klamrowych będą stosowane wyłącznie do formatowania wydruku.
Ćwiczenie 38.6 Wykonaj witrynę WWW prezentującą teksty i nuty trzech kolęd. Format witryny ustal plikami style.css oraz print.css. Pierwszy z plików CSS ma definiować wygląd witryny w przeglądarkach graficznych, a drugi — na wydruku. Style do druku przygotuj w taki sposób, by wydruki wykonywane opcją Plik/Drukuj nie zawierały menu, a tylko tekst kolędy oraz nuty. Dodatkowo wzbogać wydruki o informację na temat pochodzenia dokumentów. Informacje te mają być niewidoczne w oknie przeglądarki. Na każdej ze stron umieść odsyłacz z ikoną drukarki. Ma on powodować uruchomienie okna dialogowego Plik/Drukuj.
Ćwiczenie 38.7 Wykonaj stronę WWW przedstawioną na listingu 38.3. W treści witryny dodaj przycisk:
Regułą: .przycisk { display: none; }
wyłącz widoczność przycisku na wydruku. Po wykonaniu witryny sprawdź jej wygląd po wykonaniu opcji Plik/Podgląd wydruku.
Część VI ♦ Zagadnienia zaawansowane
422
Style alternatywne Style formatujące wygląd witryny możemy wykonać w kilku wersjach. Przełączanie stosowanych stylów wykonujemy, wybierając odpowiednią opcję w menu przeglądarki Widok/Styl strony. Jeśli dokument XHTML zawiera trzy elementy link:
domyślnie zastosowane zostaną style z pliku style.css. Style z plików duzy-kontrast.css oraz jasne.css będziemy mogli zastosować, wybierając opcje Widok/Styl strony/Style o wysokim kontraście oraz Widok/ Styl strony/Style jasne. Style domyślne mają atrybut: rel="stylesheet"
Wartością atrybutu rel dla stylów alternatywnych jest: rel="alternate stylesheet"
Tytuły ustalone atrybutem title nadają nazwy opcjom w menu przeglądarki Widok/Styl strony. Działanie stylów alternatywnych możesz sprawdzić, odwiedzając witrynę http://www.w3.org/Style/ Examples/007/alternatives. Po odwiedzeniu podanego adresu z menu Widok/Styl strony wybierz kilka różnych formatów witryny.
Ćwiczenie 38.8 Do rozwiązania ćwiczenia 34.6 dołącz style alternatywne menu-z-prawej.css oraz menu-na-gorze.css. Pierwszy plik ma formatować dokument tak, by kolumna menu była tekstowa, nie zawierała żadnych obrazów tła i pojawiała się z prawej strony. Style menu-na-gorze.css mają sformatować witrynę tak, by style CSS pojawiły się w postaci poziomego paska w górnej części strony.
Rozdział 39. ♦ Kolejność elementów w kodzie XHTML
423
Rozdział 39.
Kolejność elementów w kodzie XHTML Kolejność elementów w kodzie XHTML ma istotny wpływ na wygląd witryny. Strona: Lorem ipsum
będzie wyglądała inaczej niż strona:
Mając na uwadze dostępność stron WWW, kod XHTML należy organizować w taki sposób, by treść występowała w kodzie XHTML przed menu i przed stopką1. Zatem zamiast w ten sposób:
PRZYKŁAD NIEZALECANY
...
...
stronę WWW tworzymy tak:
PRZYKŁAD ZALECANY
...
...
1
Mark Pilgrim, W głąb dostępności, Dzień 10.
424
Część VI ♦ Zagadnienia zaawansowane
Jeśli jest to trudne do wykonania, to należy przynajmniej na początku strony umieścić odsyłacz wewnętrzny umożliwiający szybkie przejście do treści:
PRZYKŁAD DOPUSZCZALNY #przejdz-do-tresci { display: none; } ...
...
...
Widoczność odnośnika przejdź do treści w przeglądarkach graficznych wyłączamy stylami display: none.
Zmiana kolejności kolumn pionowych W rozdziale 20. przygotowaliśmy wielokolumnowe układy o stałej szerokości. W szablonach dwukolumnowych numer 3 oraz 4 możemy modyfikować kolejność elementów div#menu oraz div#tresc, nie zmieniając stylów CSS. Jeśli w kodzie z listingu 20.6 kolumnę div#tresc umieścimy w pojemniku jako pierwszą, wówczas otrzymamy kod przedstawiony na listingu 39.1. Kod z listingu 39.1 sformatowany stylami z listingu 20.5 będzie wyglądał tak jak na rysunku 20.4. Listing 39.1. Układ nr 3 z rozdziału 20 po zmianie kolejności kolumn w kodzie XHTML
W przypadku układów trójkolumnowych sytuacja jest trochę bardziej skomplikowana, gdyż kolumna z treścią ma wystąpić jako pierwsza w kodzie. Nie możemy jej jednak dosunąć ani do lewej, ani do prawej strony, gdyż ma ona znaleźć się wizualnie na środku. Możemy zastosować dwa rozwiązania: dodać dodatkowy element div lub użyć ujemnych marginesów. Pierwsze rozwiązanie polega na tym, by układ podzielić na dwa układy dwukolumnowe. Do układu z listingu 20.10 dodajmy dodatkowy element div#tmp oraz zmieńmy kolejność kolumn tak, by treść występowała jako pierwsza. Otrzymamy kod przedstawiony na listingu 39.2. Listing 39.2. XHTML układu nr 5 z rozdziału 20. po dodaniu dodatkowego elementu div i zmianie kolejności kolumn
Rozdział 39. ♦ Kolejność elementów w kodzie XHTML
425
Style CSS z listingu 39.3 sformatują kod XHTML z listingu 39.2 tak, że będzie on wyglądał identycznie jak układ przedstawiony na rysunku 20.6. Listing 39.3. Style CSS formatujące kod z listingu 39.2 do postaci z rysunku 20.6 #pojemnik { width: 980px; margin: 0 auto; } #tmp { float: left; width: 730px; } #menulewe { float: left; width: 200px; } #tresc { float: right; width: 526px; border-left: 2px solid black; border-right: 2px solid black; } #menuprawe { float: right; width: 250px; } br.czyszczenie { clear: both; }
Szerokość kolumny div#tmp jest równa sumie szerokości kolumn div#menulewe oraz div#tresc. Element div#tmp dosuwamy do lewej strony, a element div#menuprawe — do prawej. Wewnątrz elementu div#tmp element div#tresc dosuwamy do prawej strony, a element div#menulewe — do lewej. Druga metoda modyfikacji kolejności kolumn układu 5. z rozdziału 20. wykorzystuje ujemne marginesy. Gotowe rozwiązanie jest przedstawione na listingu 39.4. Listing 39.4. Modyfikacja kolejności elementów div w układzie 5. przy użyciu ujemnych marginesów #pojemnik { width: 980px; margin: 0 auto; } #menulewe { float: left; width: 200px; margin-left: -730px; } #tresc { float: left; width: 526px; border-left: 2px solid black; border-right: 2px solid black; margin-left: 200px; } #menuprawe { float: left; width: 250px;
426
Część VI ♦ Zagadnienia zaawansowane
} ...
... ... ...
W kodzie XHTML pierwszym elementem jest div#tresc. Element ten jest dosunięty do lewej krawędzi (float: left). Należy go odsunąć od lewej krawędzi o szerokość kolumny div#menulewe. Dlatego w regule o selektorze #tresc pojawia się wpis: margin-left: 200px;
Po sformatowaniu elementu div#tresc przechodzimy do elementu div#menulewe. Ustalamy jego szerokość, i podając ujemną wartość marginesu, przesuwamy na lewo od elementu div#tresc: #menulewe { float: left; width: 200px; margin-left: -730px; }
Podana wartość –730 jest równa sumie szerokości elementów div#tresc (530 pikseli) oraz div#menulewe (200 pikseli). Style elementu p nie ulegają zmianie. Układ 5. z rozdziału 20. składa się z trzech pionowych kolumn: ... ... ...
Kolumny te oznaczmy literami L, T oraz P od pierwszych liter słów: lewa, treść, prawa. Oryginalny układ numer 5 z rozdziału 20. stosuje kolejność LTP. Listing 39.2 przedstawia rozwiązanie, w którym elementy są uporządkowane TLP. Stosując ujemne marginesy oraz dosuwanie do lewej i do prawej krawędzi, elementy L, T oraz P można uporządkować w dowolny inny sposób. Wszystkich kombinacji jest sześć: 1. LTP, 2. TLP, 3. LPT, 4. PTL, 5. TPL, 6. PLT. Kombinację LTP wykorzystaliśmy w układzie nr 5 z rozdziału 20., a porządek TLP omówiliśmy w dwóch wersjach: rozwiązanie z dodatkowym elementem div#tmp — listing 39.2, rozwiązanie bazujące na ujemnych marginesach — listing 39.4.
Ćwiczenie 39.1 Wykonaj dwukolumnowy układ nr 3 z rozdziału 20. Kolumny umieść w kodzie XHTML w porządku przedstawionym na listingu 39.1: najpierw treść, potem menu.
Ćwiczenie 39.2 Wykonaj dwukolumnowy układ nr 4 z rozdziału 20. Kolumny umieść w kodzie XHTML w porządku przedstawionym na listingu 39.1: najpierw treść, potem menu.
Rozdział 39. ♦ Kolejność elementów w kodzie XHTML
427
Ćwiczenie 39.3 Wykonaj trójkolumnowy układ nr 5 z rozdziału 20. Kolumny umieść w kodzie XHTML w porządku TLP. Wykorzystaj technikę dosuwania dodatkowego elementu div#tmp przedstawioną na listingach 39.2 oraz 39.3.
Ćwiczenie 39.4 Wykonaj trójkolumnowy układ nr 5 z rozdziału 20. Kolumny umieść w kodzie XHTML w porządku TLP. Wykorzystaj przedstawioną na listingu 39.4 technikę ujemnych marginesów.
Ćwiczenie 39.5 Wykonaj układ nr 5 z rozdziału 20. Kolumny umieść w kodzie XHTML w porządku LPT.
Ćwiczenie 39.6 Wykonaj układ nr 5 z rozdziału 20. Kolumny umieść w kodzie XHTML w porządku PTL.
Ćwiczenie 39.7 Wykonaj układ nr 5 z rozdziału 20. Kolumny umieść w kodzie XHTML w porządku TPL.
Ćwiczenie 39.8 Wykonaj układ nr 5 z rozdziału 20. Kolumny umieść w kodzie XHTML w porządku PLT.
Zmiana kolejności poziomych pasów Układ 2. z rozdziału 20. prezentował podział na trzy poziome pasy. Kolejność elementów w kodzie XHTML jest przedstawiona na listingu 39.5. Elementy te w skrócie oznaczymy jako N, T oraz S (od słów: nagłówek, treść, stopka). Listing 39.5. Kolejność elementów XHTML w układzie 2. z rozdziału 20.
... ... ...
Witryna zoptymalizowana pod względem dostępności powinna mieć kod XHTML przedstawiony na listingu 39.6. Pierwszym elementem jest treść, po niej następują nagłówek i stopka. Listing 39.6. Kolejność elementów XHTML w układzie 2. z rozdziału 20 #pojemnik { width: 760px; margin: 0 auto; position: relative; } #naglowek { height: 100px; position: absolute; top: 0; width: 760px; } #tresc { padding-top: 100px; }
428
Część VI ♦ Zagadnienia zaawansowane
...
... ... ...
W celu zmiany kolejności elementów w kodzie XHTML wykorzystujemy pozycjonowanie kontekstowe omówione w rozdziale 19. Pojemnik otrzymuje wpis position: relative, zaś nagłówek i treść są wzbogacone o position: absolute. Treść przesuwamy o wysokość nagłówka do dołu, podając dopełnienie górne równe 100px. Następnie ustalamy wysokość nagłówka (height: 100px) oraz przesuwamy go do góry (top: 0). Konieczne jest również ustalenie szerokości nagłówka (width: 760px). Style stopki nie wymagają modyfikacji. Podział na pasy NTS również może być wykonany w sześciu wariantach: 1. NTS (układ 2. z rozdziału 20.), 2. TNS (listing 39.3), 3. NST, 4. STN, 5. TSN, 6. SNT.
Ćwiczenie 39.9 Wykonaj układ nr 2 z rozdziału 20. Kolumny umieść w kodzie XHTML w porządku: TNS.
Ćwiczenie 39.10 Wykonaj układ nr 2 z rozdziału 20. Kolumny umieść w kodzie XHTML w porządku: NST.
Ćwiczenie 39.11 Wykonaj układ nr 2 z rozdziału 20. Kolumny umieść w kodzie XHTML w porządku: STN.
Ćwiczenie 39.12 Wykonaj układ nr 2 z rozdziału 20. Kolumny umieść w kodzie XHTML w porządku: TSN.
Ćwiczenie 39.13 Wykonaj układ nr 2 z rozdziału 20. Kolumny umieść w kodzie XHTML w porządku: SNT.
Zmiana kolejności kolumn oraz poziomych pasów Oczywiście opisane techniki modyfikacji kolejności pionowych kolumn oraz poziomych pasów możemy połączyć. Układ nr 8 z rozdziału 20. należy wykonać tak, by element div#tresc wystąpił w kodzie XHTML jako pierwszy. Rozwiązanie takie jest przedstawione na listingu 39.7. Listing 39.7. Układ nr 8 z rozdziału 20. po ustaleniu kolejności elementów TLPNS #pojemnik { width: 980px; margin: 0 auto; position: relative;
Rozdział 39. ♦ Kolejność elementów w kodzie XHTML } #srodek { padding-top: 100px; padding-bottom: 100px; } #tmp { float: left; width: 730px; } #menulewe { float: left; width: 200px; } #tresc { float: right; width: 526px; border-left: 2px solid black; border-right: 2px solid black; } #menuprawe { float: right; width: 250px; } #naglowek { border-bottom: 2px solid black; position: absolute; top: 0; left: 0; width: 980px; height: 100px; } #stopka { border-top: 2px solid black; position: absolute; bottom: 0; left: 0; width: 980px; height: 100px; } .czyszczenie { clear: both; }
Ćwiczenie 39.14 Wykonaj układ nr 8 z rozdziału 20. Kolumny umieść w kodzie XHTML w porządku: TLPNS.
429
Część VI ♦ Zagadnienia zaawansowane
430
Ćwiczenie 39.15 Wykonaj układ nr 8 z rozdziału 20. Kolumny umieść w kodzie XHTML w porządku: TNLPS. Ponieważ nagłówek jest pozycjonowany bezwzględnie, możesz go umieścić w kodzie XHTML w dowolnym miejscu.
Rozdział 40. ♦ Atrybuty XHTML
431
Rozdział 40.
Atrybuty XHTML Specyfikacja języka XHTML wyróżnia cztery ważne grupy atrybutów1: atrybuty zasadnicze (ang. core attributes), atrybuty językowe (ang. internationalization attributes, I18N3), zdarzenia (ang. events), atrybuty dotyczące aktywnego punktu (ang. focus attributes).
Atrybuty zasadnicze Atrybutami zasadniczymi są: id — identyfikator elementu; class — klasa elementu; style — style CSS elementu,; title — tytuł elementu. Atrybut id może być stosowany dla każdego elementu XHTML. Atrybuty class, style oraz title mogą być stosowane dla każdego elementu XHTML z wyjątkiem: html, head, title, base, meta, style, script i param. Oczywiście jeden element może mieć kilka atrybutów zasadniczych. Poprawnym przykładem jest: ...
Atrybuty językowe Do grupy tej należą atrybuty: lang — określenie języka elementu; xml:lang — określenie języka elementu (składnia XML); dir — kierunek przetwarzania tekstu. 1
3
Podział taki można znaleźć w pliku xhtml1-strict.dtd dołączonym do specyfikacji XHTML 1.0. Specyfikacja XHTML Modularization 1.1, Second Edition, W3C Recommendation 29 July 2010 przedstawia na stronie 32 trochę inny podział atrybutów. Symbol I18N jest specyficznym rodzajem skrótowca. Słowo internationalization ma 18 liter. Pierwsza litera to I, a ostatnia to N.
432
Część VI ♦ Zagadnienia zaawansowane
Atrybuty te mogą towarzyszyć wszystkim elementom XHTML z wyjątkiem: base, script, br i param. Atrybuty lang oraz xml:lang należy stosować razem4, podając tę samą wartość: ...
Wartością atrybutu dir może być ltr (ang. left to right — od lewej do prawej) lub rtl (ang. right to left — od prawej do lewej).
Zdarzenia Do grupy zdarzeń należą: onclick — kliknięcie; ondblclick — podwójne kliknięcie; onmousedown — naciśnięcie przycisku myszy; onmouseup — zwolnienie przycisku myszy; onmousemove — przesunięcie wskaźnika myszy nad element; onmouseout — przesunięcie wskaźnika myszy poza element; onkeypress — naciśnięcie i zwolnienie przycisku na klawiaturze; onkeydown — naciśnięcie przycisku na klawiaturze; onkeyup — zwolnienie przycisku na klawiaturze. Atrybuty te mogą być stosowane w odniesieniu do wszystkich elementów oprócz: html, head, title, base, meta, style, script, br i param. Wartością powyższych atrybutów jest kod JavaScript, który zostanie wykonany po wystąpieniu zdarzenia. Na przykład kliknięcie napisu lorem w elemencie span: lorem
spowoduje wyświetlenie okna z tekstem ipsum. Wygląd elementu możemy zmienić, stosując style: span { color: blue; cursor: pointer; text-decoration: underline; }
Ćwiczenie 40.1 Przygotuj stronę WWW, która będzie zawierała jeden element span , reagujący na kliknięcie. Rozwiązanie ćwiczenia jest przedstawione na listingu 40.1. Listing 40.1. Rozwiązanie ćwiczenia 40.1 span { color: blue; cursor: pointer; text-decoration: underline; } ...
4
Specyfikacja XHTML 1.0, punkt C.7.
Rozdział 40. ♦ Atrybuty XHTML
433
Ćwiczenie 40.2 Wykorzystując ćwiczenie 5.1, przygotuj stronę WWW, która po kliknięciu w dowolnym miejscu będzie wyświetlała informacje o trybie pracy przeglądarki. Rozwiązanie ćwiczenia jest przedstawione na listingu 40.2. Listing 40.2. Rozwiązanie ćwiczenia 40.2
Atrybuty ogólne Wymienione trzy grupy, czyli atrybuty zasadnicze, atrybuty językowe oraz zdarzenia, są określane wspólnym mianem atrybutów ogólnych (ang. generic attributes). W specyfikacji języka stosowane jest oznaczenie %attrs;. Atrybuty te mogą być stosowane w odniesieniu do każdego elementu XHTML z wyjątkiem: html, head, title, meta, br, base, param, style i script. Oznacza to, że każdy spośród elementów: body, address; div, span; h1, h2, h3, h4, h5, h6; p, pre, q, blockquote, sub, sup, em, strong, dfn, code, samp, kbd, var, cite, abbr, acronym; ins, del; ul, ol, li, dl, dt, dd; table, tr, td, th, thead, tfoot, tbody, caption, col, colgroup; a, link; img, object, map, area; form, input, button, select, option, optgroup, textarea, label, fieldset, legend; noscript; hr, bdo może mieć dowolne spośród atrybutów: id, class, style, title; lang, xml:lang, dir; onclick, ondblclick, onmousedown, onmouseup, onmousemove, onmouseout, onkeypress, onkeydown, onkeyup.
Atrybuty dotyczące aktywnego punktu Ostatnią grupą atrybutów są atrybuty dotyczące zmiany aktywnego elementu na stronie WWW. Atrybutami tymi są: accesskey — definicja skrótu klawiszowego; tabindex — kolejność elementów wyróżnianych przyciskiem tabulacji;
Część VI ♦ Zagadnienia zaawansowane
434
onfocus — zdarzenie występujące wówczas, gdy element zostaje aktywny; onblur — zdarzenie występujące wówczas, gdy element przestaje być aktywny. Atrybuty tej grupy mogą towarzyszyć elementom: a, area, input, textarea i button. Dodatkowo: Atrybut accesskey może być użyty dla elementów label oraz legend. Atrybut tabindex może towarzyszyć elementom object i select. Zdarzenia onfocus i onblur są generowane również dla elementów label i select.
Ćwiczenie 40.3 Przygotuj stronę WWW z czterema odsyłaczami do stron: http://www.google.com, http://www.onet.pl, http://www.allegro.pl i http://www.e-bay.com występującymi na stronie w dokładnie takiej kolejności. Witrynę wykonaj w taki sposób, by tabulator przechodził po odsyłaczach w kolejności: Allegro, Google, eBay, Onet. Dodatkowo zdefiniuj skróty klawiszowe: A (Allegro), G (Google), E (eBay) oraz O (Onet). Rozwiązanie ćwiczenia jest przedstawione na listingu 40.3. Listing 40.3. Rozwiązanie ćwiczenia 40.3
Wykonaną stronę otwórz w przeglądarce. Naciskaj przycisk tabulacji i obserwuj kolejność, w jakiej będą wyróżniane odsyłacze. Następnie naciśnij w Firefoksie skróty klawiszowe: Lewy Alt+Shift+G, Lewy Alt+Shift+O, Lewy Alt+Shift+A, Lewy Alt+Shift+E. Powrót do poprzedniej strony realizuje przycisk backspace. W przeglądarce Chrome skróty klawiszowe aktywujemy identycznie jak w Firefoksie. W przeglądarce IE należy najpierw nacisnąć kombinację Lewy Alt + litera (np. Lewy Alt+G), a następnie wybór potwierdzić Enterem. Przeglądarka Safari aktywuje skróty po naciśnięciu kombinacji Lewy Alt + litera, bez konieczności naciskania Entera. W celu aktywacji skrótów klawiszowych w Operze należy nacisnąć kombinację przycisków Shift+Esc. Wówczas na ekranie zostanie wyświetlona lista dostępnych skrótów wraz z informacją o tym, jak uaktywnić każdy z nich. Etykietami prezentowanych skrótów są napisy zawarte w hiperłączach, wartości atrybutów title lub — w przypadku kontrolek formularzy — wartości atrybutu value.
Rozdział 41. ♦ Formularze
435
Rozdział 41.
Formularze Przetwarzanie formularza oprogramowujemy w języku takim jak na przykład PHP, Python lub PERL. Formularza nie da się przetworzyć w języku XHTML. Kod XHTML w połączeniu z CSS ustala jedynie, jakie kontrolki są zawarte w formularzu i jak całość ma wyglądać.
Formularz w języku XHTML definiujemy elementem form. Element ten należy do grupy elementów blokowych. Pomiędzy znacznikami oraz umieszczamy zawartość formularza, na którą składają się elementy input, button, select, optgroup, option, textarea, label, fieldset oraz legend. Kontrolki te układamy, stosując akapity oraz elementy div. Zwróć uwagę na fakt, że kontrolki formularza są elementami liniowymi i nie mogą znajdować się bezpośrednio w elemencie form. Poprawną zawartością formularza jest co najmniej jeden element blokowy z wykluczeniem samego formularza (formularzy nie można zagnieżdżać). Zatem pomiędzy znacznikami oraz umieszczamy elementy p lub div, zaś dopiero wewnątrz elementów blokowych właściwe kontrolki formularza. Pamiętaj także, że kontrolki formularza należy podpisywać przy użyciu elementu label. Kod widoczny na listingu 41.1 jest niepoprawny. Brakuje w nim elementu blokowego oraz etykiet. Poprawna wersja formularza z listingu 41.1 jest widoczna na listingu 41.2. Listing 41.1. Błędny formularz, w którym brakuje elementu blokowego oraz etykiet
PRZYKŁAD NIEPOPRAWNY
Login: Hasło:
Listing 41.2. Przykładowy formularz
Login: Hasło:
Ćwiczenie 41.1 Przygotuj stronę zawierającą formularz przedstawiony na listingu 41.2. Tabela 41.1 zawiera zestawienie wszystkich elementów języka XHTML dotyczących formularzy.
Część VI ♦ Zagadnienia zaawansowane
436 Tabela 41.1. Wszystkie elementy języka XHTML dotyczące formularzy Element
Znaczenie
Poprawna zawartość
form
Formularz
Elementy blokowe z wykluczeniem elementu form
input
Wiersz wprowadzania danych, przycisk, pole wyboru, wykluczające pole wyboru
Element pusty
button
Przycisk
Element blokowy lub liniowy z wyjątkiem: a, form, fieldset oraz kontrolek formularzy input, select, textarea, label i button
select
Lista opcji
Wyłącznie elementy optgroup oraz option
optgroup
Grupa opcji
Element option
option
Pojedyncza opcja
Tekst pozbawiony znaczników
textarea
Pole tekstowe
Tekst pozbawiony znaczników
label
Etykieta kontrolki formularza
Elementy liniowe
fieldset
Grupa kontrolek formularza
Tekst pozbawiony znaczników, legend oraz elementy blokowe lub liniowe
legend
Etykieta grupy kontrolek
Elementy liniowe (w tym kontrolki formularzy input, select, textarea, label oraz button)
Atrybuty formularza Element form ma — oprócz atrybutów ogólnych %attrs; — własne atrybuty charakterystyczne: action, method, enctype, accept, name, onsubmit, onreset oraz accept-charset. NOTH ... — Ctrl+G+F
Najważniejszym z nich jest obowiązkowy atrybut action. Ustala on adres URL skryptu, który będzie wywołany po zatwierdzeniu formularza przyciskiem Wyślij. Dane wprowadzone do formularza zostaną przekazane do podanego skryptu. Drugim ważnym atrybutem formularza jest atrybut method. Jego wartością jest nazwa metody protokołu HTTP. Dwoma dopuszczalnymi wartościami są get oraz post. Wprawdzie wartością domyślną jest get, jednakże zaleca się — głównie z powodów bezpieczeństwa — stosowanie metody post. Atrybut enctype ustala sposób kodowania danych dołączonych do zapytania. Ma on znaczenie jedynie, gdy formularz przekazujemy metodą post (w przypadku metody get zawsze stosowane jest kodowanie application/x-www-form-urlencoded ). Domyślnie wartością tego atrybutu jest typ application/ x-www-form-urlencoded. W przypadku przekazywania pliku na serwer należy ustalić wartość tego atrybutu na multipart/form-data. Z atrybutu enctype korzystamy na dwa sposoby. Jeśli formularz służy do przekazywania pliku na serwer, wówczas należy nadać atrybutowi enctype wartość enctype="multipart/form-data". W przeciwnym razie (czyli w przypadku zwykłego formularza zawierającego kilka kontrolek) atrybut enctype pomijamy. Przyjmie on wówczas wartość domyślną. Atrybut accept nie jest wykorzystywany. Miał on umożliwiać wskazywanie typów plików, jakie mogą być wysyłane formularzem na serwer, jednakże współczesne przeglądarki ignorują jego wartość. Żadna przeglądarka nie filtruje plików na podstawie atrybutu accept elementu form:
Rozdział 41. ♦ Formularze
437
KOD NIEOBSŁUGIWANY PRZEZ ŻADNĄ PRZEGLĄDARKĘ
Wreszcie zdarzenia onsubmit oraz onreset umożliwiają wykonywanie skryptów po zatwierdzeniu oraz zresetowaniu formularza. Tabela 41.2 zawiera sumaryczne zestawienie wszystkich specyficznych atrybutów formularza. Tabela 41.2. Atrybuty specyficzne elementu form Wartość domyślna
Uwagi
Adres URL skryptu przetwarzającego formularz
Brak
Wymagany.
method
get lub post: metoda protokołu HTTP używana do przekazywania wprowadzonych danych
get
Zalecane jest stosowanie metody post.
enctype
Sposób kodowania danych zawartych w formularzu
application/ ´x-www-form´urlencoded
W przypadku zwykłego formularza należy stosować metodę post i domyślną wartość atrybutu enctype (pomijamy atrybut enctype w znaczniku ). W przypadku formularza, który przesyła na serwer plik, stosujemy metodę post i enctype="multipart/form-data".
accept
Typ plików, jakie mają być zawarte w oknie dialogowym do wyboru nazwy pliku
-
Atrybut ignorowany przez przeglądarki.
name
Nazwa identyfikująca formularz
-
Użycie tego atrybutu jest odradzane. W jego miejsce należy stosować atrybut id.
onsubmit
Skrypt JavaScript wykonywany po zatwierdzeniu formularza, przed wysłaniem zapytania HTTP
-
Obsługa zdarzenia może być wykorzystywana do walidacji formularza. Jeśli skrypt zwraca wartość false, wówczas formularz nie zostaje wysłany.
onreset
Skrypt JavaScript wykonywany po zresetowaniu formularza
-
Umożliwia inicjalizację pól formularza wartościami domyślnymi.
accept-charset
Kodowanie znaków
-
Kodowanie znaków stosowane w formularzu.
Atrybut
Znaczenie
action
Kontrolki formularza Formularz może zawierać kilka rodzajów kontrolek. Należą do nich: wiersze wprowadzania tekstu, wiersze wprowadzania haseł, przyciski, przyciski wyboru (ang. checkbox), wzajemnie wykluczając się przyciski wyboru (ang. radio buttons), listy rozwijane,
Część VI ♦ Zagadnienia zaawansowane
438
listy wyboru, pola tekstowe, pola ukryte, przyciski do wyboru pliku.
Kontrolki te umieszczamy wewnątrz formularza, stosując elementy input, button, select, optgroup, option i textarea. Dodatkowo elementy label, fieldset i legend umożliwiają grupowanie i podpisywanie kontrolek.
Atrybuty ogólne kontrolek formularza Większość kontrolek zawartych w formularzu ma atrybut name (wyjątkami są przyciski zatwierdzające i resetujące formularz, opcje i grupy opcji option oraz optgroup, a także elementy fieldset, legend i label). Atrybut ten ustala nazwę kontrolki, jaka będzie przekazana do skryptu. Jeśli wewnątrz następującej kontrolki input:
wprowadzimy napis [email protected], wówczas do skryptu przetwarzanego po stronie serwera zostanie przekazana zmienna: [email protected]
W języku PHP powyższa zmienna będzie dostępna (w zależności od atrybutu method elementu form) w jednej z tablic $_POST lub $_GET, np.: $_GET['email'] === '[email protected]' $_POST['email'] === '[email protected]'
Następnym atrybutem, który będziemy dołączać do większości kontrolek, jest atrybut value. W zależności od kontrolki atrybut ten ustala bieżącą wartość zmiennej lub etykietę kontrolki. Również atrybuty readonly, disabled, accesskey oraz tabindex znajdują zastosowanie w odniesieniu do wielu kontrolek formularza. Atrybuty readonly oraz disabled są atrybutami logicznymi, których wartość ustalamy następująco:
Atrybut readonly uniemożliwia modyfikację wartości kontrolki. Kontrolka taka jest widoczna i może stać się aktywna (tj. możemy, korzystając na przykład z tabulatora, umieścić kursor wewnątrz kontrolki). Nie możemy jednak zmieniać jej wartości. Po zatwierdzeniu formularza kontrolka taka jest przesyłana do skryptu przetwarzającego formularz. Natomiast kontrolki mające atrybut disabled są niedostępne. Nie możemy zmieniać ich wartości ani ich uaktywniać. Co więcej, po przesłaniu formularza wartości kontrolek oznaczonych atrybutem disabled nie są przesyłane do skryptu. Jedynym sposobem na odblokowanie kontrolek readonly oraz disabled jest odpowiednie oprogramowanie zdarzeń formularza lub kontrolek w JavaScript. W przeciwnym razie kontrolki takie będą przez cały czas niedostępne. Atrybut accesskey ustala skrót klawiszowy dla danej kontrolki. Skróty klawiszowe formularzy aktywujemy identycznie jak skróty klawiszowe opisane w ćwiczeniu 40.3. Ostatni z atrybutów ogólnych, tabindex, umożliwia ustalenie kolejności, w jakiej kontrolki formularza będą aktywowane tabulatorem. Wartością atrybutu jest liczba całkowita ustalająca pozycję kontrolki na liście.
Rozdział 41. ♦ Formularze
439
Ćwiczenie 41.2 Przygotuj formularz zawierający jedną kontrolkę tylko do odczytu i jedną kontrolkę niedostępną.
Ćwiczenie 41.3 Przygotuj formularz umożliwiający przechodzenie do pól wprowadzania danych przy użyciu skrótów klawiszowych.
Ćwiczenie 41.4 Przygotuj formularz, który stosuje atrybut tabindex do ustalenia kolejności aktywacji pól.
Zdarzenia dotyczące kontrolek Kontrolkom formularza możemy oprogramować kilka zdarzeń, które występują podczas wypełniania formularza. Zdarzeniami tymi są onfocus (występuje ono wtedy, gdy kontrolka staje się aktywna, tj. gdy kursor zostaje umieszczony wewnątrz niej), onblur (występuje ono wtedy, gdy kursor opuszcza kontrolkę), onselect (występuje wówczas, gdy w polu tekstowym zostaje zaznaczony pewien tekst; dotyczy ono tylko pól tekstowych) oraz onchange (występuje wówczas, gdy kontrolka zmienia wartość). Zdarzenia oprogramowujemy w języku JavaScript.
Elementy input Element input służy do umieszczania w formularzu kilku różnych rodzajów kontrolek, m.in. wierszy wprowadzania danych, pól wyboru oraz wykluczających pól wyboru. O rodzaju kontrolki decyduje atrybut type. Wartością domyślną atrybutu type jest text. Kontrolka input typu text służy do wprowadzania jednego wiersza tekstu. Wartości atrybutu type są zawarte w tabeli 41.3. Tabela 41.3. Typy elementu input Typ kontrolki
Zastosowanie
submit
Przycisk do wysyłania formularza
reset
Przycisk do resetowania wprowadzonych danych
text
Pojedynczy wiersz do wprowadzania tekstu
password
Pojedynczy wiersz do wprowadzania tekstu; wprowadzane znaki nie są widoczne
checkbox
Pole wyboru
radio
Wykluczające pole wyboru
hidden
Przycisk niewidoczny służący do dołączania dodatkowych zmiennych do formularza
button
Przycisk
file
Przycisk umożliwiający wybranie pliku
image
Obraz; po jego kliknięciu do skryptu zostają przesłane współrzędne klikniętego piksela
NOTH — Ctrl+G+I
Lista atrybutów elementu input jest dość pokaźna. Pełne zestawienie jest zawarte w tabeli 41.4. Atrybuty elementu input mają różne znaczenie w zależności od typu kontrolki (czyli wartości atrybutu type).
Część VI ♦ Zagadnienia zaawansowane
440 Tabela 41.4. Atrybuty kontrolki input Atrybut
Znaczenie
type
Typ kontrolki
name
Nazwa kontrolki
value
Etykieta lub wartość
checked
Wybrana/niewybrana
disabled
Dostępna/niedostępna
readonly
Tylko do odczytu
size
Rozmiar kontrolki mierzony liczbą znaków
maxlength
Maksymalna liczba znaków mieszczących się w kontrolce
src
Adres URL obrazu
alt
Objaśnienie obrazu
usemap
Mapa
ismap
Czy kontrolka jest mapą?
tabindex
Kolejność wędrówki po kontrolkach formularza tabulatorem
accesskey
Skrót klawiszowy
onfocus
Obsługa zdarzenia uaktywnienia kontrolki
onblur
Obsługa zdarzenia deaktywacji kontrolki
onselect
Obsługa zdarzenia zaznaczania tekstu
onchange
Obsługa zdarzenia modyfikacji kontrolki
accept
Rodzaj plików, jakie mogą być wybrane przy przesyłaniu pliku na serwer
Przyciski zatwierdzające i resetujące formularz W niemal każdym formularzu znajduje się przycisk zatwierdzający. Przycisk taki tworzymy za pomocą kontrolki input typu submit:
Atrybut value ustala etykietę przycisku. Etykietą może być dowolny napis, na przykład OK, Szukaj lub Zaloguj. Jeden formularz może mieć kilka przycisków zatwierdzających wysłanie. Wówczas przyciski powinny mieć atrybut name, umożliwiający stwierdzenie, który z nich został naciśnięty:
Po naciśnięciu dowolnego z trzech podanych wyżej przycisków formularz zostanie wysłany na serwer.
Ćwiczenie 41.5 Przygotuj formularz, który zawiera trzy przyciski do wysyłania. Przycisk do resetowania formularza ma typ reset. Podobnie jak w przypadku przycisku wysyłającego formularz, atrybut value stanowi etykietę przycisku:
Rozdział 41. ♦ Formularze
441
Wiersz wprowadzania danych Najczęściej stosowaną kontrolką formularzy jest wiersz wprowadzania danych. Kontrolkę taką tworzymy elementem input typu text:
Ponieważ wartość text jest wartością domyślną, powyższą kontrolkę można w równoważny sposób zapisać jako:
W stosunku do wiersza wprowadzania danych zastosowanie znajdują wymienione już atrybuty ogólne name, value, readonly, disabled, accesskey oraz tabindex, jak również size i maxlength. Atrybut size ustala szerokość pola mierzoną liczbą znaków. Natomiast wartość maxlength ogranicza liczbę znaków, jaką kontrolka może pomieścić.
Ćwiczenie 41.6 Przygotuj formularz prezentujący wszystkie atrybuty wiersza wprowadzania danych.
Pole hasła Pole input typu password służy do wprowadzania hasła. Napis wprowadzany do kontrolki nie jest widoczny na ekranie. Kontrolka taka ma postać:
Należy pamiętać, że hasło wprowadzone do formularza nie podlega żadnej ochronie. Jest ono przekazywane w zapytaniu HTTP jako zwykły, niezaszyfrowany tekst. Jedyną ochroną, jaką zapewnia pole typu password, jest uniemożliwienie podejrzenia hasła na ekranie, co ilustruje rysunek 41.1. Rysunek 41.1. Standardowy wiersz wprowadzania danych oraz pole typu password
Dla pola tekstowego typu password znaczenie atrybutów jest identyczne jak w przypadku zwykłego pola tekstowego. Ustalanie szerokości kontrolek input możemy zrealizować, stosując atrybut size lub wykorzystując arkusze stylów. W formularzu z rysunku 41.1 kontrolki input mają szerokość 100 pikseli ustaloną stylem: input { width: 100px; }
Ćwiczenie 41.7 Przygotuj formularz zawierający pole do wprowadzania hasła.
Pola wyboru Element input typu checkbox stanowi pole wyboru, które możemy zaznaczyć lub odznaczyć. W najprostszej postaci pole wygląda następująco:
442
Część VI ♦ Zagadnienia zaawansowane
Po przesłaniu formularza zawierającego powyższe pole dostępna będzie w skrypcie PHP zmienna $_POST['win95'] o wartości on. Jeśli pole ma atrybut value, np.:
to zmienna dostępna w skrypcie PHP przyjmie wartość ustaloną atrybutem value, czyli $_POST['dos'] będzie równe 'MSDOS'. Dodatkowo logiczny atrybut checked może być wykorzystany do inicjalizacji pól wyboru. Pola niemające atrybutu checked są domyślnie odznaczone, zaś pola z podanym atrybutem checked są zaznaczone. Dowolna liczba pól wyboru może być równocześnie zaznaczona:
co ilustruje rysunek 41.2. Rysunek 41.2. Pola wyboru
Ćwiczenie 41.8 Przygotuj formularz zawierający pola wyboru widoczne na rysunku 41.2.
Wykluczające pola wyboru Drugim rodzajem pól wyboru są pola wzajemnie się wykluczające. W odróżnieniu od pól wyboru typu checkbox, spośród kilku pól input typu radio tylko jedno może być zaznaczone: POLSKA: NIEMCY:
Wszystkie powiązane ze sobą pola muszą mieć identyczną wartość atrybutu name. W powyższym przykładzie wartością tą jest napis kraj. Ponadto każde pole wyboru musi mieć wartość ustaloną atrybutem value. Kontrolki możemy inicjować, stosując — podobnie jak w przypadku pól typu checkbox — atrybut checked. Tym razem jednak zaznaczyć możemy co najwyżej jedno pole. Formularz może zawierać kilka niezależnych grup kontrolek radio. Przykładem może być wybór kraju oraz dyscypliny sportu — oba wybory są niezależne. W ramach każdej kategorii możemy zaznaczyć jedynie jeden element. W takim przypadku obie grupy kontrolek są odróżniane na podstawie atrybutu name. Kontrolki z każdej grupy współdzielą unikalną nazwę. Wygląd wykluczających się przycisków jest przedstawiony na rysunku 41.3. Rysunek 41.3. Wykluczające się wzajemnie pola wyboru
Rozdział 41. ♦ Formularze
443
Ćwiczenie 41.9 Przygotuj formularz zawierający wzajemnie wykluczające się pola wyboru z rysunku 41.3.
Ćwiczenie 41.10 Przygotuj formularz zawierający dwie niezależne grupy wzajemnie wykluczających się pól wyboru.
Kontrolki ukryte Kolejnym typem kontrolek input są kontrolki ukryte. Kontrolki takie są niewidoczne i służą do przekazywania dodatkowych zmiennych w zapytaniach HTTP. Ponieważ nie są one widoczne, nie można zmieniać ich wartości za pomocą myszy czy klawiatury. Oto przykładowe kontrolki ukryte:
Możemy je wykorzystać na przykład do podpisywania formularza. Umieszczając w formularzu pole ukryte zawierające pewną wygenerowaną przez skrypt i trudną do odgadnięcia wartość, możemy upewnić się, że dane przesłane po zatwierdzeniu skryptu faktycznie pochodzą z formularza. Należy mieć świadomość, że kontrolki ukryte nie są w żaden sposób zaszyfrowane. Zaglądając do źródła strony, ujrzymy wszystkie ukryte kontrolki zawarte w formularzu. Ponieważ kontrolki te nie są w ogóle wyświetlane przez przeglądarkę, w odniesieniu do nich nie ma sensu stosowanie dodatkowych atrybutów.
Ćwiczenie 41.11 Przygotuj formularz zawierający kilka kontrolek ukrytych.
Przyciski Kontrolka input typu button jest przyciskiem. Przyciski takie po naciśnięciu nie wywołują żadnej predefiniowanej akcji ze strony przeglądarki. Ani nie resetują zawartości, ani nie wysyłają formularza. W celu wykorzystania takiego przycisku należy oprogramować obsługę zdarzeń JavaScript. Oto przykładowe przyciski:
Ćwiczenie 41.12 Przygotuj formularz zawierający przyciski input typu button.
Kontrolka wyboru pliku Pole input typu file służy do przekazywania plików za pomocą formularza. Kontrolka taka jest przedstawiana w formularzu w postaci przycisku z napisem Przeglądaj…. Po naciśnięciu przycisku przeglądarka wyświetla okno dialogowe, które umożliwia wybór pliku. Po dokonaniu wyboru i zatwierdzeniu formularza wybrany plik zostaje przekazany na serwer. Kontrolka do wyboru pliku ma dwa istotne atrybuty: type oraz name. Atrybut name ustala nazwę zmiennej przekazywanej do skryptu:
444
Część VI ♦ Zagadnienia zaawansowane
Formularz zawierający kontrolki typu file musi być przekazywany metodą post. Ponadto należy ustalić sposób kodowania danych pochodzących z formularza jako enctype="multipart/form-data". W formularzu warto umieścić (przed kontrolką typu file) ukryte pole ustalające wartość zmiennej MAX_FILE_SIZE. Wartość taka ogranicza wielkość pliku, jaki możemy przekazać za pomocą formularza. Nie jest to skuteczne zabezpieczenie przed złośliwymi użytkownikami, gdyż łatwo je ominąć (na przykład przygotowując własny formularz). Dzięki zawarciu w formularzu informacji o maksymalnym rozmiarze pliku unikniemy jednak sytuacji, w której użytkownik czeka dłuższy odcinek czasu tylko po to, by zobaczyć komunikat (pochodzący z serwera) informujący o tym, że wybrany plik jest zbyt duży. Jeśli informacja o maksymalnym rozmiarze jest zawarta w formularzu, to przeglądarka nie wysyła na serwer zbyt dużych plików. Podana wielkość jest mierzona w bajtach. Kod:
ogranicza wielkość pliku do 3000 bajtów. Atrybut accept ustala maskę nazwy plików dla okna dialogowego:
Jest on obsługiwany wyłącznie przez Operę.
Ćwiczenie 41.13 Przygotuj formularz zawierający kontrolkę do przekazywania plików na serwer.
Obraz Ostatnim typem kontrolki input jest image. Kontrolka taka służy do umieszczania w formularzu obrazów. Po kliknięciu obrazu formularz zostaje przesłany, zaś do skryptu przekazywane są współrzędne klikniętego piksela. Obowiązkowymi atrybutami są type, name, src oraz alt. Atrybut src ustala adres URL wyświetlanego obrazu, natomiast alt zawiera tekst alternatywny. (Rola obydwu atrybutów jest analogiczna jak w przypadku elementu img). Oto kod przykładowej kontrolki tego typu:
Ćwiczenie 41.14 Przygotuj formularz zawierający kontrolkę input typu image.
Element button Kolejnym elementem służącym do tworzenia kontrolek formularzy jest element button. Element ten służy do tworzenia przycisków. Atrybut type, o poprawnych wartościach submit, reset oraz button, ustala rodzaj przycisku. NOTH ... — Ctrl+G+B
Przycisk wykonany z wykorzystaniem elementu button ma następujący kod:
Wyślij
Rozdział 41. ♦ Formularze
445
Jego działanie jest identyczne jak przycisku:
Podobnie przycisk button typu reset odpowiada przyciskowi input typu reset, zaś button typu button — przyciskowi input typu button. Jedyna różnica pomiędzy przyciskami tworzonymi elementami button i input polega na tym, że przyciski button mają znaczniki otwierający i zamykający. Dzięki temu mogą zawierać inne znaczniki. Jako zawartość przycisku możemy podać tekst lub element img. Podany obraz zostanie umieszczony na przycisku. Kod:
tworzy przycisk przedstawiony na rysunku 41.4. Rysunek 41.4. Przycisk z ikoną
Ćwiczenie 41.15 Przygotuj formularz zawierający przycisk button z ikoną widoczną na rysunku 41.4.
Listy Elementy select, option oraz optgroup służą do tworzenia list. Wewnątrz elementu select umieszczamy poszczególne elementy listy definiowane elementem option. Dodatkowo opcje listy mogą być pogrupowane elementami optgroup. Poprawną zawartością elementu select są wyłącznie elementy option oraz optgroup. NOTH ... — Ctrl+G+S ... — Ctrl+G+O ... — Ctrl+G+O
W najprostszym przypadku lista składa się z elementu select zawierającego kilka opcji option:
Poniedziałek Wtorek Środa ...
Opcje option mogą mieć atrybuty value oraz selected. Atrybut value ustala wartość zmiennej przekazywanej do skryptu. Natomiast atrybut selected służy do wskazania elementu listy, który powinien być początkowo wybrany. Domyślnie listy wyboru są wyświetlane w postaci list rozwijanych, które umożliwiają wybranie tylko jednego elementu. Właściwości listy możemy zmienić, stosując atrybuty size oraz multiple elementu select.
446
Część VI ♦ Zagadnienia zaawansowane
Atrybut size ustala liczbę elementów listy, które będą widoczne na ekranie (wartością domyślną jest 1 — lista rozwijana). Lista:
Poniedziałek Wtorek Środa Czwartek ...
będzie wyświetlana w postaci prostokąta zawierającego trzy wiersze i wyposażonego w suwak. Natomiast atrybut multiple jest atrybutem logicznym, który umożliwia zaznaczanie na liście kilku elementów. Rysunek 41.5 przedstawia trzy przykładowe listy wyboru.
Rysunek 41.5. Listy wyboru
Stosując element optgroup, mamy możliwość nadania liście struktury. Opcje ograniczone znacznikami optgroup stanowią podmenu niższego poziomu. Atrybut label elementu optgroup ustala etykietę grupy opcji:
Albea Multipla ...
Escort Fiesta ...
...
Etykieta taka jest wytłuszczona na liście i nie można jej zaznaczyć. Lista stosująca elementy optgroup została przedstawiona na rysunku 41.6. Rysunek 41.6. Lista z opcjami pogrupowanymi elementami optgroup
Rozdział 41. ♦ Formularze
447
Ćwiczenie 41.16 Przygotuj formularz zawierający trzy rodzaje list widoczne na rysunku 41.5.
Ćwiczenie 41.17 Przygotuj formularz zawierający listę przedstawioną na rysunku 41.6.
Pole tekstowe Ostatnim rodzajem kontrolek dostępnych w języku XHTML, które umożliwiają wprowadzanie danych, są pola tekstowe. Pole takie definiujemy elementem textarea. Atrybuty rows oraz cols ustalają wymiar pola tekstowego mierzony liczbą wierszy i kolumn tekstu. Poniższe pole tekstowe liczy pięć wierszy tekstu. W każdym wierszu możemy umieścić 10 znaków:
Kto? Gdzie? Kiedy?
Po wprowadzeniu większej liczby wierszy tekstu suwak pionowy kontrolki staje się aktywny. Natomiast szerokość kontrolki nie ulega zmianie nawet po wprowadzeniu długiego tekstu. Suwak poziomy również się nie pojawia — zbyt długi tekst zostaje zawinięty. Początkowa zawartość kontrolki jest umieszczana pomiędzy znacznikami elementu textarea. NOTH ... — Ctrl+G+T
Ćwiczenie 41.18 Przygotuj formularz zawierający pole tekstowe textarea.
Grupowanie i podpisywanie kontrolek formularza Dodatkowymi elementami, które możemy umieścić w formularzu, są etykiety label, elementy grupujące fieldset oraz podpisy grup legend. Elementy te nie umożliwiają wprowadzania danych do formularza. Modyfikują jedynie wygląd oraz strukturę formularza, dzięki czemu staje się on bardziej czytelny i dostępny. NOTH ... — Ctrl+G+L ... — Ctrl+G+L ... — Ctrl+G+F
Etykiety label służą do podpisywania kontrolek. Umieszczamy je w formularzu na dwa sposoby. Po pierwsze, możemy podpisywaną kontrolkę umieścić wewnątrz etykiety:
Imię:
Część VI ♦ Zagadnienia zaawansowane
448
W powyższym przykładzie tekst Imię jest podpisem pola input (pamiętajmy, że element label nie może występować bezpośrednio w formularzu; konieczne jest użycie elementu blokowego, na przykład akapitu). Po drugie, możemy wykorzystać atrybut for elementu label. Atrybut ten zawiera identyfikator kontrolki, z którą związana jest etykieta: Imię:
Etykiety, podobnie jak i inne kontrolki formularzy, mogą mieć skrót klawiszowy. W przypadku przeniesienia kursora do etykiety (poprzez aktywację skrótu klawiszowego lub kliknięcie w etykietę) kursor zostanie faktycznie umieszczony w kontrolce skojarzonej z etykietą. Kontrolki dotyczące podobnej tematyki możemy zgrupować, stosując element fieldset. Element ten należy do grupy elementów blokowych i może występować bezpośrednio pomiędzy znacznikami formularza. Kontrolki umieszczone wewnątrz elementu fieldset zostaną otoczone obramowaniem. Ramkę możemy wzbogacić o podpis, stosując element legend. Jedynymi atrybutami elementu fieldset są atrybuty grupy %attrs;, natomiast element legend ma ponadto atrybut accesskey. Rysunek 41.7 przedstawia formularz zawierający dwie grupy kontrolek podpisane Kto wygra mistrzostwa świata w piłce nożnej w 2006 roku? oraz Którzy polscy zawodnicy zostaną powołani do kadry?. Pierwsza z grup jest zdefiniowana następującym kodem XHTML:
Kto wygra
Niemcy Polska Francja Włochy
Rysunek 41.7. Pola wyboru pogrupowane elementami fieldset. Obie grupy podpisano, stosując element legend
Ćwiczenie 41.19 Przygotuj formularz przedstawiony na rysunku 41.7. Wykorzystaj w nim elementy fieldset oraz legend.
Podsumowanie Pamiętaj, że formularze stanowią pomost łączący trzy rodzaje języków: język znaczników, język przetwarzania po stronie serwera (ang. server-side) i język przetwarzania po stronie klienta (ang. client-side). Sam formularz jest przygotowywany w języku XHTML (język znacznikowy), kod przetwarzający dane wprowadzane w formularzu piszemy np. w języku PHP (język przetwarzany po stronie serwera), a obsługę zdarzeń dotyczących formularza i jego kontrolek oprogramowujemy w języku JavaScript (przetwarzanie po stronie klienta). Wykorzystywanie formularzy w sposób pełny wymaga zatem znajomości aż trzech języków.
Rozdział 42. ♦
449
Rozdział 42.
Powiązania dokumentów Witryna WWW zazwyczaj składa się z wielu różnych plików. W omówionych dotychczas ćwiczeniach treść dostępna na stronach była zapisana w plikach XHTML, a ich format wizualny w pliku CSS. Znacznikiem:
ustalaliśmy powiązanie pomiędzy plikami XHTML i CSS. Strona WWW zawierająca powyższy element link będzie sformatowana zgodnie ze stylami zawartymi w pliku przyklad.css. Informacja o tym, że plik przyklad.css zawiera arkusze stylów, jest zawarta w atrybucie rel. Atrybut ten ustala typ relacji łączącej plik XHTML, w którym występuje element link, z plikiem, którego nazwa jest zawarta w atrybucie href. Powiązanie dokumentów .html oraz .css jest więc wykonywane w sposób jawny elementem link zawartym w nagłówku. Innymi typami powiązań, z którymi zetkniesz się, tworząc strony WWW, są: wskazanie kanału RSS/Atom dla witryny, wskazanie na spis treści, indeks, następną i poprzednią stronę witryny, dołączenie do strony WWW ikony, ustalenie listy osób tworzących witrynę. Jako dokumenty połączone z witryną WWW możemy także traktować pliki robots.txt oraz sitemap.xml. Są one powiązane w sposób niejawny. Powiązanie takie występuje zawsze, bez konieczności podawania w kodzie XHTML jakichkolwiek znaczników. Sumaryczne zestawienie wszystkich rodzajów powiązań jest zawarte w tabeli 42.1. Jawność powiązania oznacza, że w kodzie XHTML musimy umieścić odpowiedni znacznik XHTML. Powiązania niejawne są zdefiniowane zawsze, bez konieczności umieszczania jakichkolwiek znaczników w kodzie XHTML.
Element link Element link jest elementem pustym, który umieszczamy w nagłówku strony WWW. Najważniejszym jego atrybutem jest rel, który definiuje typ powiązania między dokumentami. Poprawne wartości1 atrybutu rel są zawarte w tabeli 42.2.
1
Pełna lista poprawnych wartości atrybutu rel jest podana w specyfikacji XHTML Modularization 1.1, Second Edition, W3C Recommendation 29 July 2010, na stronie 26.
Część VI ♦ Zagadnienia zaawansowane
450 Tabela 42.1. Rodzaje powiązań plików tworzących witrynę WWW Rodzaj powiązania
Sposób definicji powiązania
Typy dołączanych zasobów
Rozszerzenia nazw plików
Style CSS witryny
Jawny, elementem link
text/css
.css
Alternatywne style witryny
Jawny, elementem link
text/css
.css
Struktura nawigacyjna witryny
Jawny, elementem link
text/html
.html, .htm
Kanał RSS/Atom dla witryny
Jawny, elementem link
application/rss+xml
.xml
Ikona strony WWW
Jawny, elementem link, lub niejawny (wówczas plik musi się nazywać Favicon.ico)
application/atom+xml image/vnd.microsoft.icon
.ico
image/png
.png
image/gif
.gif
Lista twórców witryny
Jawny, elementem link
text/plain
.txt
Plik z instrukcjami dla robotów
Niejawny, plik zawsze musi się nazywać robots.txt
text/plain
.txt
Plik z mapą witryny
Jawny, zawarty w pliku robots.txt
application/xml
.xml
Tabela 42.2. Wartości atrybutu rel Wartość atrybutu rel
Opis
stylesheet
Style CSS dokumentu
alternate
Alternatywna wersja dokumentu (np. kanał RSS, Atom lub dodatkowe arkusze stylów)
start
Strona główna witryny
next
Następna strona witryny
prev
Poprzednia strona witryny
contents
Spis treści witryny
index
Indeks zawartości witryny
glossary
Słownik pojęć występujących w treści witryny
copyright
Prawa autorskie do witryny
chapter
Rozdział
section
Punkt
subsection
Podpunkt
appendix
Dodatek
help
Pomoc
bookmark
Odsyłacz do dokumentu związanego z treścią dostępną na danej stronie i zawierającego obszerniejszy opis
NOTH Wszystkie rodzaje elementów link — Ctrl+B+L
Pierwsza z wartości zawartych w tabeli 42.2 definiuje powiązanie dokumentów XHTML oraz CSS. Druga dostępna wartość pozwala na dołączenie do dokumentu alternatywnych arkuszy stylów2: 2
Alternatywne arkusze stylów omówiliśmy w rozdziale 38.
Rozdział 42. ♦ Powiązania dokumentów
451
lub kanałów RSS/Atom. Pozostałe wartości definiują wzajemne powiązania pomiędzy poszczególnymi plikami .html. Ułatwiają one nawigację oraz indeksację witryny. Specyfikacja XHTML 2.0 oprócz wartości podanych w tabeli 42.2 zawiera także: ♦ up — dokument nadrzędny w hierarchii; ♦ first — pierwszy dokument w kolekcji; ♦ last — ostatni dokument w kolekcji.
Kanały RSS i Atom Kanały RSS oraz Atom służą do informowania czytelników witryny o nowych artykułach i stronach dostępnych w serwisie. Odwiedź witrynę http://helion.pl i kliknij hiperłącze, które na rysunku 42.1 zostało wskazane strzałką. Ujrzysz wówczas stronę z rysunku 42.2. Jest to lista nowości, jakie oferuje serwis helion.pl.
Rysunek 42.1. Ikona kanału RSS wyświetlana przez przeglądarkę Firefox dla witryny helion.pl
Treść kanału zapisujemy w pliku XML i dołączamy do dokumentu XHTML znacznikiem link. W celu dodania do strony WWW kanału RSS zapisanego w pliku rss.xml stosujemy znacznik:
452
Część VI ♦ Zagadnienia zaawansowane
Rysunek 42.2. Wygląd kanału RSS witryny helion.pl
Element dołączający kanał Atom różni się wartością atrybutu type oraz nazwą pliku:
Jeśli stronę WWW zawierającą jeden z powyższych elementów link udostępnisz w sieci, to przeglądarki Firefox i Opera wyświetlą w wierszu adresu ikonę RSS. Wiele osób umieszcza jednak w treści witryny dodatkowe hiperłącze ułatwiające dotarcie do kanału. Na rysunku 42.3 wskazane są dwie ikony RSS. Górna ikona jest wyświetlana przez przeglądarkę, dolna jest umieszczona w dokumencie XHTML jako zwykłe hiperłącze.
Ćwiczenie 42.1 Dana jest witryna WWW składająca się z czterech stron: lorem.html, ipsum.html, dolor.html oraz sit-amet.html. Wzbogać ją o kanał RSS. Wykonanie ćwiczenia rozpocznijmy od przygotowania pliku rss.xml. Struktura dokumentów RSS jest opisana w specyfikacji dostępnej pod adresem http://cyber.law.harvard.edu/rss/rss.html oraz w Wikipedii: http://pl.wikipedia.org/wiki/RSS. Kanał RSS jest zapisany w języku XML. W wersji 2.0 zawiera on następujące elementy: rss — główny element pliku RSS; channel — element definiujący jeden kanał wiadomości; title — tytuł kanału wiadomości; link — adres strony, dla której kanał jest zdefiniowany; description — opis kanału;
Rozdział 42. ♦ Powiązania dokumentów
Rysunek 42.3. Ikony ułatwiające dotarcie do kanału RSS
language — język; copyright — prawa autorskie do dokumentu, elementy item. Każdy z elementów item opisuje jedną nową informację na stronie, podając: title — tytuł informacji; link — adres strony zawierającej pełną informację (wszystkie adresy zawarte w dokumencie RSS muszą być bezwzględne); pubDate — datę publikacji informacji; description — krótki opis informacji. Przykładowy plik rss.xml jest przedstawiony na listingu 42.1. Listing 42.1. Plik rss.xml z ćwiczenia 42.1
Lorem ipsum dolor sit amet http://www.example.net www.example.net - lorem ipsum dolor sit amet pl Jan Kowalski
Lorem http://example.net/lorem.html Mon, 3 January 2010 8:00:00 +0100
453
Część VI ♦ Zagadnienia zaawansowane
454 Opis strony lorem...
Ipsum http://example.net/ipsum.html Mon, 10 January 2010 18:30:00 +0100 Opis strony ipsum...
...
Plik rss.xml z listingu 42.1 dołączamy do każdej z czterech stron, umieszczając w nich identyczny element link:
W treści każdej ze stron dodajemy hiperłącze: RSS
Identyfikator jest wykorzystywany do pozycjonowania przycisku, a element span służy do wykonania warstwowego efektu FIR. Hiperłącza zawarte w pliku rss.xml muszą być bezwzględne. W celu uruchomienia przykładu trzeba go zatem opublikować w internecie. Podane adresy http://example.net/ zastąp poprawnymi adresami stosowanymi na Twoim serwerze.
Ćwiczenie 42.2 Zmodyfikuj ćwiczenie 42.1. Informacje o nowościach na stronie opublikuj w formacie Atom. Struktura formatu Atom jest opisana w Wikipedii: http://pl.wikipedia.org/wiki/Atom_%28standard%29. Pliki Atom, podobnie jak RSS, są dokumentami XML. Dokument z listingu 42.1 przekonwertowany do formatu Atom jest przedstawiony na listingu 42.2. Listing 42.2. Plik atom.xml z ćwiczenia 42.2
Lorem ipsum Dolor sit amet! http://example.net/atom/
2008-01-02T10:15:00Z
Jan Kowalski
Copyright (c) 2003 Jan Kowalski
Lorem
2007-12-18T8:10:00Z Opis strony lorem...
Ipsum
2007-12-19T9:15:00Z
Rozdział 42. ♦ Powiązania dokumentów
455
Opis strony ipsum...
...
Plik atom.xml z listingu 42.2 należy dołączyć do każdej ze stron, stosując element link:
oraz hiperłącze: ATOM
Następny, poprzedni oraz spis treści Element link o atrybucie rel przyjmującym jedną z wartości: start, next, prev, contents, index, glossary, copyright, chapter, section, subsection, appendix, help, bookmark, first, last lub up definiuje powiązanie pomiędzy kilkoma dokumentami XHTML. Przykładowe użycie może mieć postać:
Powiązania takie są przez niektóre przeglądarki wyświetlane w postaci osobnego paska narzędzi. Na rysunku 42.4 widoczny jest pasek narzędzi udostępniany przez przeglądarkę Firefox po zainstalowaniu wtyczki Site Navigation Toolbar3.
Ćwiczenie 42.3 Przygotuj witrynę przedstawiającą szesnaście zdjęć kapsli piwnych. Zadanie wykonaj w taki sposób, by każde zdjęcie było prezentowane na osobnej stronie WWW. W każdym pliku XHTML umieść odsyłacze pozwalające na przejście do następnej, poprzedniej, pierwszej i ostatniej strony, a także do strony zawierającej indeks wszystkich fotografii. Na stronie prezentującej indeks umieść szesnaście miniaturowych zdjęć będących odsyłaczami do stron z poszczególnymi zdjęciami. Każde hiperłącze wykonaj podwójnie: stosując element a oraz element link. Witryna ma prezentować 16 zdjęć kapsli i ma zawierać indeks. Będzie ją zatem tworzyło siedemnaście plików XHTML: plik z indeksem (index.html) oraz szesnaście plików kapsle-1.html, kapsle-2.html, …, kapsle-16.html. Każde ze zdjęć jest dostępne w czterech rozdzielczościach: 200×150, 400×300, 800×600 i 3264×2448. Do wykonania witryny wykorzystamy więc 16·4 = 64 pliki ze zdjęciami kapsli. Zdjęcia o wymiarach 200×150 są zapisane w folderze img/200×150 i nazywają się: kapsle-01.jpg, kapsle-02.jpg, ... kapsle-16.jpg
Zdjęcia o wymiarach 400×300 są zapisane w folderze img/400×300 w plikach: kapsle-01.jpg, kapsle-02.jpg, ... kapsle-16.jpg 3
Wtyczka ta jest dostępna na stronie http://www.bolwin.com/software/snb.shtml.
456
Część VI ♦ Zagadnienia zaawansowane
Rysunek 42.4. Pasek narzędzi Następny/Poprzedni widoczny na stronie http://gimp.gajdaw.pl
Podobnie jest w przypadku zdjęć o rozdzielczości 800×600 (folder img/800×600) oraz 3264×2448 (folder img/3264×2448). Ostatnie dziewięć obrazów to strzałki: first.png, first-brak.png next.png, next-brak.png index.png last.png, last-brak.png prev.png, prev-brak.png
Zawarte w folderze img/. Struktura folderów i pliki tworzące rozwiązanie ćwiczenia są przedstawione na rysunku 42.5. Wstawiając do strony WWW obraz zawarty w folderze, musisz pamiętać o podaniu ścieżki dostępu, np.:
Listing 42.3 ilustruje powiązania wykonane w postaci zwykłych hiperłączy na stronie numer 6. Powrót do strony poprzedniej jest hiperłączem do strony 5, przejście do strony następnej jest odsyłaczem do strony 7. Pierwsza strona ma numer 1, a ostatnia — 16. Na listingu 42.4 przedstawione zostały te same powiązania wykonane elementem link.
Rozdział 42. ♦ Powiązania dokumentów
457
Rysunek 42.5. Struktura folderów i pliki tworzące rozwiązanie ćwiczenia 42.3
Listing 42.3. Powiązania pomiędzy dokumentami wykonane przy użyciu odsyłaczy
Listing 42.4. Powiązania pomiędzy dokumentami wykonane przy użyciu elementu link
...
Oba rodzaje powiązań są przedstawione na rysunku 42.6.
Ikona witryny WWW Element:
dołącza do witryny ikonę zapisaną w pliku ikona.ico. Ikona witryny jest wyświetlana przez przeglądarki w polu adresu oraz na przyciskach kart, co ilustruje rysunek 42.7.
Część VI ♦ Zagadnienia zaawansowane
458
Rysunek 42.6. Przyciski następny/poprzedni wiążące strony witryny z ćwiczenia 42.3 Rysunek 42.7. Ikony witryn w przeglądarce Firefox
W specyfikacji języka XHTML lista poprawnych wartości atrybutu rel nie zawiera shortcut icon. Mimo to podany powyżej znacznik link z atrybutem rel="shortcut icon" działa poprawnie we wszystkich przeglądarkach.
Rozdział 42. ♦ Powiązania dokumentów
459
Współczesne przeglądarki rozpoznają ikony w formatach ICO, PNG oraz GIF. Starsze wersje Internet Explorera obsługiwały wyłącznie format ICO. Pliki ICO oznaczamy typem: image/vnd.microsoft.icon
Element link wzbogacony o typ przyjmuje postać:
Ikonę możesz narysować w dowolnym programie graficznym umożliwiającym zapis obrazu w formacie ICO, PNG lub GIF, na przykład w GIMP-ie. Pamiętaj o tym, że: Ikona powinna mieć wymiary 16×16 pikseli. Obraz może być wielowarstwowy, lecz przed zapisaniem wszystkie warstwy należy połączyć w jedną (tj. obraz należy spłaszczyć). Obraz może zawierać obszary przezroczyste. Podczas zapisywania należy podać rozszerzenie ICO. Rysunek 42.8 przedstawia rysunek ikony w programie GIMP. Ikona ta umieszczona na białym tle będzie wyglądała tak jak na rysunku 42.9. Rysunek 42.8. Ikona narysowana w programie GIMP
Rysunek 42.9. Ikona ikona.ico umieszczona na białym tle
Część VI ♦ Zagadnienia zaawansowane
460
Część przeglądarek wyświetla ikonę, nawet jeśli kod XHTML nie zawiera elementu link. Dzieje się tak wtedy, gdy na serwerze WWW w folderze głównym zostanie umieszczony plik favicon.ico. Powiązanie witryny z plikiem ikony możemy zatem traktować zarówno jako jawne (w kodzie XHTML umieszczamy element link, plik z ikoną nazywa się dowolnie), jak i niejawne (w kodzie XHTML nie ma elementu link wskazującego ikonę, plik z ikoną nazywa się favicon.ico).
Ćwiczenie 42.4 W dowolnym programie graficznym narysuj ikonę o wymiarach 16×16 pikseli. Wykonany obraz wykorzystaj jako ikonę witryny z tekstem Lorem ipsum.
Twórcy witryny WWW Element:
wiąże stronę z plikiem tekstowym humans.txt, który zawiera listę nazwisk twórców witryny. Przykładowy plik humans.txt jest przedstawiony na listingu 42.5. Listing 42.5. Fragment pliku http://humanstxt.org/humans.txt Chef:Juanjo Bernabeu Contact: hello [at] humanstxt.org Twitter: @cssbarcelona From:Barcelona, Catalonia, Spain CSS3 and HTML5 Girl: Maria Macias Twitter: @lafabricaverde From:Barcelona, Catalonia, Spain
Więcej informacji na temat plików humans.txt jest dostępnych na stronie http://humanstxt.org. Specyfikacja języka XHTML nie zawiera informacji o atrybucie rel="author". Jest to nowość, którą na razie należy traktować wyłącznie jako ciekawostkę.
Plik robots.txt Plik robots.txt jest powiązany z witryną WWW w sposób niejawny. Roboty internetowe rozpoczynają pobieranie stron z wybranej domeny od pobrania pliku robots.txt zawartego w folderze głównym. Dla księgarni internetowej Helion pobierany plik ma adres http://helion.pl/robots.txt. Plik robots.txt może zawierać reguły Disallow zakazujące automatycznego wędrowania po zasobach oraz regułę Sitemap, która wskazuje mapę witryny WWW. Zawartość przykładowego pliku robots.txt jest przedstawiona na listingu 42.6. Listing 42.6. Przykładowy plik robots.txt User-agent: * Disallow: /cgi/ Disallow: /private/ Disallow: /tmp/ Sitemap: http://gajdaw.pl/sitemap.xml
Rozdział 42. ♦ Powiązania dokumentów
461
Więcej informacji na temat plików robots.txt znajdziesz w Wikipedii: http://pl.wikipedia.org/wiki/Robots_ Exclusion_Protocol oraz pod adresem http://www.robotstxt.org/wc/robots.html.
Plik sitemap.xml Plik sitemap.xml zawiera zestawienie wszystkich adresów URL tworzących witrynę wraz z informacjami o częstotliwości zmian plików. Rola pliku sitemap.xml polega na ułatwieniu indeksacji całej witryny WWW przez wyszukiwarkę. Listing 42.7 przedstawia fragment pliku sitemap.xml witryny http://gajdaw.pl. Listing 42.7. Fragment pliku sitemap.xml witryny http://gajdaw.pl
http://www.gajdaw.pl/php/pear-auth/index.html 2007-11-02 monthly 0.6
http://www.gajdaw.pl/gimp/gimp-kurs-3/index.html 2007-10-31 monthly 0.6
...
Więcej informacji o plikach sitemap.xml znajdziesz w Wikipedii: http://pl.wikipedia.org/wiki/Sitemap oraz na stronie http://sitemaps.org.
Ćwiczenie 42.5 Witrynę omówioną w ćwiczeniu 42.1 wzbogać o wszystkie rodzaje powiązań omówionych w tym rozdziale. Rozwiązanie ćwiczenia składa się z: czterech plików XHTML (lorem.html, ipsum.html, dolor.html, sit-amet.html); dwóch plików CSS (style główne — style.css, style alternatywne — inne.css); ikony (plik favicon.ico); kanału RSS (plik rss.xml); pliku humans.txt; plików robots.txt oraz sitemap.xml. Foldery i pliki rozwiązania ćwiczenia 42.5 są widoczne na rysunku 42.10. Rysunek 42.10. Foldery i pliki rozwiązania ćwiczenia 42.5
462
Część VI ♦ Zagadnienia zaawansowane
Nagłówek head z pliku lorem.html jest przedstawiony na listingu 42.8. Listing 42.8. Nagłówek head z pliku lorem.html
Lorem
Rozdział 43. ♦ Rozdział 43. Element meta — dodatkowe informacje na temat strony WWW
463
Rozdział 43.Elementmeta—dodatkoweinformacje na temat strony WWW
Rozdział 43.
Element meta — dodatkowe informacje na temat strony WWW Element meta — dodatkowe informacje na temat strony WWW
Elementy meta występują w nagłówkach stron WWW, czyli pomiędzy znacznikami oraz . Ich zadaniem jest dostarczanie dodatkowych informacji na temat witryny WWW. Dane ustalane elementami meta są nazywane metainformacjami. Listing 43.1 przedstawia kod przykładowej witryny wzbogacony o trzy elementy meta. Metainformacje zawarte na tej stronie ustalają kodowanie znaków, nazwisko autora oraz prawa autorskie. Elementy meta mogą występować w kodzie XHTML w dowolnej kolejności, zarówno w stosunku do siebie, jak i pozostałych elementów nagłówka strony. Listing 43.1. Witryna zawierająca przykładowe metainformacje
Metainformacje nie są wyświetlane przez przeglądarki podczas wizyty na stronie. Ich zadanie polega na dostarczaniu dodatkowych danych na temat dokumentu XHTML. Dane te odgrywają następującą rolę: Ustalają kodowanie znaków. Zawierają krótki opis zawartości witryny. Zawierają nazwisko autora, nazwę wydawcy oraz inne dane identyfikujące twórców dokumentu. Ustalają czas ważności dokumentu i zezwalają (lub nie) na zapisywanie dokumentu w pamięci podręcznej (ang. cache).
Część VI ♦ Zagadnienia zaawansowane
464
Metainformacje są związane z konkretną witryną i należy je zawrzeć w kodzie XHTML. Jeśli witryna składa się z wielu podstron, wtedy metainformacje dołączamy na każdej podstronie z osobna.
Składnia elementu meta Element meta należy — wraz z elementami style oraz link — do grupy elementów, które mogą wystąpić tylko w nagłówku strony WWW. Jest to element pusty o atrybutach przedstawionych w tabeli 43.1. Jak widać na listingu 43.1, na jednej stronie możemy zawrzeć dowolną liczbę elementów meta. Tabela 43.1. Atrybuty elementu meta Lp.
Atrybut
Opis
1.
lang, dir
Atrybuty ustalające język i kierunek przetwarzania tekstu
2.
name
Identyfikuje rodzaj metainformacji
3.
http-equiv
Identyfikator metainformacji używany zamiennie z atrybutem name
4.
content
Atrybut wymagany, zawierający metainformacje
5.
scheme
Nazwa profilu metainformacji ustalonego atrybutem profile elementu head
Znaczenie elementu meta Każda z metainformacji definiowanych elementami meta ma postać: nazwa=wartosc
Do ustalania nazwy służą atrybuty name oraz http-equiv, zaś do ustalania wartości — obowiązkowy atrybut content:
Powyższy kod ustala dwie metainformacje. Pierwsza z nich ma nazwę imie i wartość Jan, zaś druga — nazwę nazwisko i wartość Nowak. Specyfikacja języka XHTML nie definiuje zbioru dopuszczalnych wartości atrybutu name, ani tym bardziej content. Ustala jedynie składnię znacznika .
Dwa rodzaje elementów meta Ponieważ nazwa elementu meta może być określona atrybutem name lub http-equiv, w istocie mamy do czynienia z dwoma rodzajami elementów meta. Pierwszy z nich posługuje się atrybutem name:
drugi — atrybutem http-equiv:
Nazwa atrybutu http-equiv oraz wartość Content-Type sugerują, że poprawnymi wartościami dla atrybutu http-equiv są parametry nagłówka HTTP. Jest to mylne: przeglądarki nie interpretują elementu meta jako nagłówka HTTP. Stosowanie dla atrybutu http-equiv jakichkolwiek innych wartości poza Content-Type nie jest dobrym pomysłem.
Rozdział 43. ♦ Element meta — dodatkowe informacje na temat strony WWW
465
Elementy meta przyjmują jedną z dwóch postaci:
lub
Jakie metainformacje umieszczać w witrynach? Znając składnię oraz ogólne znaczenie elementu meta, możemy przejść do zagadnień praktycznych. Kolejno omówimy metainformacje dotyczące: kodowania znaków, języków występujących w dokumencie, identyfikacji autora dokumentu, opisu zawartości dokumentu, indeksacji dokumentu przez roboty wyszukiwarek internetowych, ustalania daty powstania oraz daty ważności dokumentu, przechowywania dokumentu przez serwery pośredniczące, a także zagadnień nietypowych. NOTH Wszystkie elementy meta — Ctrl+B+M, Ctrl+B+N
Kodowanie znaków Metainformacja o kodowaniu pozwala przeglądarce poprawnie wyświetlić dokument. Brak takiej informacji powoduje, że polskie znaki diakrytyczne wyglądają błędnie u części użytkowników. Wprawdzie przeglądarki mają opcję Widok/Kodowanie znaków, umożliwiającą wybór kodowania znaków, jednak witryna powinna wyglądać poprawnie bez żadnej akcji ze strony użytkownika. Oto trzy elementy meta ustalające kodowanie polskich znaków na utf-8, iso-8859-2 oraz windows-1250:
Języki, w jakich przygotowano dokument Informacje na temat języka, w jakim wykonana jest strona, służą do klasyfikacji dokumentów między innymi przez wyszukiwarki oraz umożliwiają inteligentne przetwarzanie tekstu (np. sprawdzanie pisowni zależne od stosowanego języka). Informację na temat języka dokumentu dostarczamy na dwa sposoby: korzystając z atrybutów lang oraz umieszczając w nagłówku odpowiedni element meta. Ponieważ każde z rozwiązań odgrywa inną rolę, w dokumentach należy stosować oba rozwiązania naraz. Atrybut lang ustala jednoznacznie język stosowany wewnątrz konkretnego elementu. Nadając wartość atrybutowi lang elementu XHTML, definiujemy język całej strony:
Część VI ♦ Zagadnienia zaawansowane
466
Jeśli dokument zawiera wstawki obcojęzyczne, wówczas korzystamy z atrybutu lang w stosunku do użytych elementów:
... Witamy!
Definicje języka ustalane za pomocą atrybutu lang jednoznacznie określają język pewnego fragmentu tekstu wewnątrz strony. Dzięki temu możliwe jest kontekstowe sprawdzanie pisowni, zależne od użytego języka, czy wybór odpowiedniego procesora tekstu w przypadku przeglądarki czytającej zawartość strony. Nieco inną rolę odgrywa definicja języka dokumentu ustalana elementem meta:
Powyższa informacja ustala potencjalne grono czytelników witryny. Witryna zawiera teksty przeznaczone dla osób znających język polski, angielski lub francuski.
Autor, prawa autorskie i firma Metainformacje służą również do identyfikacji autora witryny, firmy oraz wydawcy, właściciela praw autorskich czy oprogramowania użytego do wykonania witryny, jak również dostarczenia adresu poczty elektronicznej do kontaktu z osobą odpowiedzialną za utrzymanie witryny. Informacje takie podajemy, stosując następujące elementy meta:
Atrybuty elementu meta mogą zawierać znaki specjalne. Wiele osób oznacza prawa autorskie, stosując symbol ©:
Słowa kluczowe i opis Element meta o atrybucie name="description" dostarcza opis zawartości dokumentu. Opis ten powinien liczyć pomiędzy 100 a 200 znaków i w sposób jasny informować o zawartości witryny:
Podany opis witryny jest wyświetlany przez wyszukiwarki internetowe na liście znalezionych wyników. Natomiast następujący element meta:
definiuje listę słów kluczowych, jakich dotyczy strona. Lista ta powinna liczyć od kilkunastu do kilkudziesięciu słów (podobnie jak poprzednio około 100 – 200 znaków). Kolejne słowa oddzielamy przecinkami lub spacjami. Spotykanymi formatami są:
Słowa kluczowe definiowane elementem meta straciły swoją wartość. Z powodu nadużyć (tzw. spamowania wyszukiwarek) wyszukiwarka Google ignoruje je.
Rozdział 43. ♦ Element meta — dodatkowe informacje na temat strony WWW
467
Roboty Roboty internetowe to programy, które pobierają witryny w sposób automatyczny w celu umieszczenia odpowiednich informacji w bazie danych wyszukiwarki. Robot pobiera kod XHTML witryny, analizuje go, po czym indeksuje witrynę. Indeksacja polega na wprowadzeniu do bazy danych wyszukiwarki informacji umożliwiających znalezienie witryny. Stosując element meta, możemy wpływać na zachowanie robotów indeksujących strony WWW. Metainformacje o atrybucie name="robots" dotyczą robotów i zezwalają na indeksację strony oraz przeszukanie witryn podanych w odnośnikach danej strony. Aby zezwolić na zaindeksowanie bieżącego dokumentu i przeanalizowanie wszystkich jego podstron, stosujemy jeden z dwóch równoważnych zapisów:
Jeżeli indeksacja i przeszukiwanie mają być zabronione, wówczas stosujemy elementy:
Poprawne są również rozwiązania mieszane:
Szczegółową dokumentację elementów meta dotyczących wyszukiwarek i robotów znajdziemy na stronach http://www.robotstxt.org/wc/robots.html. Poszczególne roboty mogą także stosować własne, niestandardowe rozwiązania. Przykładem jest wyszukiwarka Google, która przechowuje kopie zaindeksowanych witryn. Jeśli nie chcemy, by wyszukiwarka Google tworzyła kopię strony, wtedy stosujemy element:
zaś element:
powoduje, że wyniki wyszukiwania zwracane przez Google nie będą zawierały fragmentu strony WWW z zaznaczonymi wyszukiwanymi wyrazami. Więcej szczegółów na temat metainformacji zdefiniowanych na potrzeby Google znajdziemy pod adresami: http://www.google.com/bot.html oraz http://www.google.com/webmasters/faq.html.
Data powstania i ważności dokumentu Do oznaczenia daty powstania dokumentu stosujemy element:
Specyfikacja protokołu HTTP 1.1 ustala, że data i czas powinny być zapisane w formacie opisanym w dokumencie RFC 1123. Format ten składa się z dnia tygodnia oddzielonego przecinkiem od daty, godziny oraz napisu GMT: wkday "," SP date SP time SP "GMT"
gdzie SP oznacza spację, wkday — dzień tygodnia (tj. jedno z: Mon, Tue, Wed, Thu, Fri, Sat, Sun), zaś date i time — godzinę i datę. Przykładami dat zgodnymi z powyższym formatem są: Wed, 01 Jun 2005 10:05:32 GMT Mon, 05 Apr 2004 11:44:55 GMT Thu, 31 May 2005 22:00:00 GMT
468
Część VI ♦ Zagadnienia zaawansowane
Data jest opisana przez numer dnia (dwie cyfry z ewentualnymi zerami z przodu), nazwę miesiąca (angielski skrót Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov lub Dec) oraz czterocyfrowy numer roku. Natomiast godzina jest zapisana w formacie: gg:mm:ss
gdzie gg, mm oraz ss są liczbami dwucyfrowymi oznaczającymi godziny, minuty i sekundy. Poprawna wartość godziny jest zawarta pomiędzy wartościami 00:00:00 i 23:59:59.
Przechowywanie stron WWW przez pośredników Strony WWW mogą być przechowywane przez systemy pośredniczące w transakcji pomiędzy klientem a serwerem. Przykładami są serwery proxy, które zazwyczaj zapisują kopie pobieranych witryn w celu przyspieszenia kolejnych transakcji. Jeśli witryna nie powinna być zapisywana przez systemy pośredniczące, należy użyć jednego z dwóch równoważnych elementów meta:
Skrypty i style — domyślny język Style osadzone w dokumencie zazwyczaj zawierają informacje na temat zastosowanego języka. Do tego celu służy atrybut type elementów link oraz style:
Jeżeli jednak na stronie pojawiają się style definiowane atrybutem style:
wtedy język stylów możemy ustalić elementem:
Podobnie sprawa wygląda w przypadku skryptów. Element script ma atrybut type definiujący język dołączanego skryptu:
Jeśli jednak stosujemy skrypty w obsłudze zdarzeń:
XXXXXX
wówczas możemy umieścić w dokumencie element ustalający domyślny język skryptów:
Ponieważ języki CSS oraz JavaScript są domyślnie stosowane przez wszystkie przeglądarki, znaczniki:
są zbędne. Jest to obecnie tylko ciekawostka historyczna.
Metainformacje w kilku językach Jak wynika z tabeli 43.1, element meta może zawierać atrybut lang. Poprawnymi elementami są zatem:
Rozdział 43. ♦ Element meta — dodatkowe informacje na temat strony WWW
469
oraz
Tego typu rozwiązania są jednak niezmiernie rzadkie w internecie. Wynika to głównie z faktu, iż witryny są zazwyczaj przygotowywane w jednym konkretnym języku, zaś ewentualne tłumaczenia są osobnymi stronami WWW. Gdy cały dokument został przygotowany w jednym języku, wówczas stosujemy atrybuty lang w odniesieniu do elementu XHTML.
Przekierowania Do niewymienionych dotychczas elementów meta należą przekierowania. Element:
PRZYKŁAD NIEZALECANY
spowoduje po upłynięciu pięciu sekund pobranie dokumentu o adresie http://gajdaw.pl. Przekierowań tego typu nie należy stosować, gdyż stwarzają one problemy z dostępnością. Rozwiązanie takie jest stosowane przez archiwa oprogramowania, na przykład SourceForge. Pobieranie biblioteki GTK+ ze strony http://gimp-win.sourceforge.net/stable.html zakończy się przekierowaniem:
PRZYKŁAD NIEZALECANY