Drogi Czytelniku! Jeżeli chcesz ocenić tę książkę, zajrzyj pod adres
http://helion.pl/user/opinie7cssppw
Możesz tam wpisać swoje uwagi, spostrzeżenia, recenzję. Printed in Poland.
twglomi^
c
CSS. Projektowanie p r o f e s j o n a l n y c h stron WWW Rozdział Rozdział Rozdział Rozdział Rozdział
1. 2. 3. 4. 5.
Rozdział 6. Rozdział 7. Rozdział 8. Rozdział 9. Dodatek A Dodatek B Dodatek C Dodatek D Skorowidz
Najlepsze praktyki w XHTML i CSS Blogger.com: efekt rollover i design touches Witryna internetowa mistrzostw PGA Witryna University of Florida Stuff and Nonsense Ltd.: strategie przełączania arkuszy stylów Przygody CindyLi.com: modyfikacja blogu AIGA Cincinnati: szablony HTML wiadomości e-mail Witryna internetowa książki: używanie przezroczystych obrazów PNG Tworzenie układów CSS Elementy HTML 4.01 Zasady konwersji HTML na XHTML Własności CSS 2.1 Rozwiązywanie problemów z CSS
Spis treści Rozdział 1. Najlepsze praktyki w XHTML i CSS Upychanie warstwy strukturalnej i prezentacyjnej razem Pokochać swój kod X H T M L - n o w a era Oddzielenie struktury od stylu
CSS — dodawanie warstwy stylów Lepiej zapoznaj się z selektorami Inne selektory Łączenie deklaracji Selektory grupujące Tajniki dziedziczenia Wykorzystanie wszystkiego w praktyce
Kaskadowość Pochodzenie stylów Sortowanie według precyzji Sortowanie według kolejności
Praktyka Praca w solidnej przeglądarce Usprawiedliwienie potrzeby stosowania hacków Problem hacków Hackowanie dla zabawy i pożytku
Podsumowanie
Rozdział 2. Blogger.com: efekt rolloyer i design touches Wywiad z projektantem Efekt rollover w CSS Zmienianie koloru tekstu i tła odnośników — łatwe Zmiana koloru tekstu i tła odnośników — skomplikowane Zmienianie koloru tła wierszy tabeli Zmienianie koloru tekstu Zmienianie pozycji tła odnośników
Spis treści Alternatywne arkusze stylów Inne rozwiązanie, którego prawie nie możesz zastosować
Rzeczywistość, czyli jak to może działać dzisiaj? Wykorzystanie JavaScriptu Zastosowanie PHP
153 155
156 157 165
CSS poza przeglądarką
168
Typy mediów Problem z wyborem
169 173
Stuff and Nonsense: budowa lepszego przełącznika Spotkanie z projektantem Andym Clarke'em Podsumowanie
Rozdział 6. Przygody CindyLi.com: modyfikacja blogu Błogi CSS: Cindy Li zaczyna publikować Elementy projektu
173 176 180
181 181 183 183
Tworzenie układu Układ projektu
183 184
Tworzenie witryny
186
Projektowanie paska nawigacyjnego Grafiki efektu rollover Pisanie kodu XHTML i CSS dla nawigacji Integracja grafik rollover
Chmurka ze słowami Kod chmurki Ponowne wykorzystanie efektu Wstawianie plakietki Flickr
Formatowanie pól wyboru Podsumowanie
Rozdział 7. AIGA Cincinnati: szablony HTML wiadomości e-mail Problemy z formatem HTML wiadomości e-mail Tworzenie szablonu Drukowanie projektu Tworzenie układu tabelkowego Korygowanie projektu Analiza wpływu reguł CSS na szablon
Rozdział 9. Tworzenie układów CSS 0 siatkach i układach Robienie tego, co w druku jest niemożliwe Pozycjonowanie przy użyciu CSS — podstawy Pozycjonowanie bezwzględne Pozycjonowanie absolutnie względne
Układ trzykolumnowy — kładzenie fundamentów Pisanie kodu XHTML — od makiety do gotowego projektu Warstwa stylów Zwalczanie błędów przeglądarek
Określanie granic: własność max-width Podsumowanie
233 233 235
235 235 237
241
243 243 247 249 250 253
255 256 259 267
274 276
Dodatek A Elementy HTML 4.01
277
Dodatek B Zasady konwersji HTML na XHTML
283
Dodatek C Własności CSS 2.1
289
Dodatek D Rozwiązywanie problemów z CSS
303
Skorowidz
8
309
O autorach Christopher Schmitt jest dyrektorem kreatywnym w Heatvision.com, Inc., niewielkiej firmie zajmującej się projektowaniem i publikowaniem w nowych mediach, której siedziba znajduje się w Cincinnati w stanie Ohio. Schmitt zajmuje się internetem od 1993 roku. W tym czasie zdobył wiele nagród; w połowie lat 90. ubiegłego wieku pracował jako stażysta Davida Siegela i Lyndy Weinman. Był wówczas na studiach licencjackich na Florida State University, gdzie robił dyplom ze sztuk pięknych z naciskiem na projektowanie grafiki. Następnie ukończył studia magisterskie z komunikacji w technologiach interaktywnych i nowych technologii komunikacyjnych. W tym samym czasie uzyskał dyplom Graduate Certificate z zarządzania projektami w College of Communication na Florida State University. W 2000 roku poprowadził do zwycięstwa swój zespół w konkursie Cool Site in a Day, w którym wraz z pięcioma innymi utalentowanymi współpracownikami zbudował w osiem godzin w pełni funkcjonalną, dobrze zaprojektowaną witrynę internetową dla organizacji typu non profit. Jest autorem książki CSS Cookbook, która została przetłumaczona na wiele języków i okrzyknięta najlepszą książką o projektowaniu 2006 roku, oraz jednej z pierwszych książek poświęconych projektom witryn w CSS — Designing CSS Web Pages (New Riders). Jest także współautorem książek Photoshop in 10 steps or Less (Wiley) i Dreamweaver Design Projects (Glasshaus) oraz napisał cztery rozdziały do książki XML, HTML, and XHTML Magie (New Riders). Ponadto Christopher Schmitt pisze artykuły dla magazynów „New Architect Magazine", „A List Apart", „Digital Web" oraz „Web Reference". Na konferencjach typu Train the Trainer i SXSW Schmitt wygłasza przemowy na temat korzyści płynących z używania praktycznych projektów budowanych w oparciu o standardy sieciowe. Jest moderatorem listy mailingowej Babble (www.babblelist.com) — społeczności zainteresowanej zaawansowanymi tematami dotyczącymi programowania i projektowania sieciowego. W swojej witrynie internetowej www.christopherschmitt.com pokazuje prawdziwą twarz i informuje o najnowszych projektach. Ma około dwóch metrów wzrostu, ale nie gra zawodowo w koszykówkę, nie odmówiłby natomiast partyjki szachów. Todd Dominey pochodzi z Atlanty i jest założycielem firmy Dominey Design (domineydesign. com) zajmującej się programowaniem i projektowaniem na potrzeby internetu. Do jego klientów należą m.in. Budweiser, „The Washington Post", Google, Winterfresh Gum. Dominey jest także starszym projektantem aplikacji interaktywnych w Turner Sports Interactive, gdzie zajmuje się projektowaniem i programowaniem witryn najważniejszych turniejów PGA (włącznie z PGA Championship oraz The Ryder Cup). Cindy Li mieszka w San Francisco i zajmuje się projektowaniem grafiki nie tylko na potrzeby internetu. Urodziła się na Tajwanie, stopień licenq'ata sztuk pięknych z projektowania grafiki uzyskała na University of Florida. Jej witryna internetowa znajduje się pod adresem cindyli.com. Ethan Marcotte jest z Bostonu i pracuje w zajmującej się projektowaniem na potrzeby internetu firmie o nazwie Airbag (airbagindustries.com). Będąc członkiem komisji nadzorczej Web Standards Project, jest jedną z najważniejszych osób w świecie projektowania zgodnego ze standardami sieciowymi. Marcotte jest także właścicielem witryny unstoppablerobotninja.com, popularnego dziennika internetowego częściowo poświęconego projektowaniu i programowaniu, a częściowo ględzeniu o niczym.
O autorach Dunstan Orchard mieszka w Dorset w Wielkiej Brytanii i w San Francisco. Jest starszym inżynierem projektowania interfejsu użytkownika w sklepie internetowym Apple, a także członkiem Web Standards Project oraz cichym deweloperem pracującym na rzecz popularnej platformy blogów typu open source o nazwie Wordpress. Czasami dostarcza jakieś materiały na swoją witrynę http://1976design.com. Mark Trammell mieszka w San Francisco. Zanim zaczął pracę w Digg (digg.com) jako specjalista do spraw wrażeń użytkownika, zajmował się witryną internetową University of Florida.
10
Pod z i ę k o w a n i a Dziękuję zespołowi z wydawnictwa Wiley za pomoc w przygotowaniu tej książki. Specjalne podziękowania należą się Carole Jeleń McClendon z Waterside za wskazówki i okazane mi wsparcie. Dzięki pomocy współautorów, czyli Cindy, Todda, Ethana, Dunstana i Marka, książka ta jest znacznie lepsza i grubsza od mojej oryginalnej wersji. Dziękuję wszystkim za ciężką pracę. Szczególne podziękowania chcę przekazać dla mojej rodziny i przyjaciół. Nieustanne wsparcie, jakiego udzielali mi podczas pisania kolejnej książki, było bezcenne. Dziękuję nawet tym, którzy z politowaniem kiwali głowami, kiedy rzucałem mięsem na przeglądarkę Internet Explorer dla Windows. Jeśli w którejś z książek nie umieszczę podziękowań dla mojej siostry Tiffany, chyba się mnie wyrzeknie. Oto więc one: „Cześć, Tiffany! Dzięki, że jesteś moją najlepszą siostrą na świecie! Bez ciebie bym tej książki nie napisał!". — Christopher Schmitt
Przede wszystkim dziękuję wszystkim pracownikom firmy Turner Sports Interactive z Atlanty — zwłaszcza Philowi Sharpe'owi, Michaelowi Adamsonowi oraz Johnowi Buzzellowi — za umożliwienie mi wzięcia udziału nie tylko w PGA Championship, lecz również The Ryder Cup i wielu innych projektach internetowych PGA. Bez nich mój udział w tej książce byłby niemożliwy. Dodatkowe podziękowania należą się osobom ze społeczności programistów sieciowych, którzy na początku mojej kariery byli dla mnie niewyczerpanym źródłem inspiracji. Dziękuję Jeffreyowi Zeldmanowi, którego niezmordowane promowanie standardów sieciowych i prawidłowego formowania kodu zmieniły moje podejście do projektowania oraz guru CSS Douglasowi Bowmanowi, Danowi Cederholmowi oraz Dave'owi Shea nie tylko za ich ciągłe badanie i eksperymentowanie z CSS, ale także za udostępnienie swojego kodu nieodpłatnie wszystkim ludziom na świecie. Na zakończenie dziękuję mojej żonie Heather i całej naszej rodzinie za wsparcie. — Todd Dominey
Dla Veerle, Geerta i mojej rodziny oraz przyjaciół za wiarę we mnie i zajmowanie się mną. — Cindy Li
Podziękowania Po napisaniu takiej książki zawsze jest komu dziękować. Mimo iż Jeffrey Zeldman, Doug Bowman, Dave Shea i Dan Cederholm są już uznanymi pionierami CSS, uważam, że za mało mówi się o ich talencie do inspirowania pisarzy. W tym miejscu zwracam na to uwagę. Dziękuję moim rodzicom za wyratowanie mnie z opresji kilka razy podczas pisania tej książki. To samo zrobił Richard Ohlsten i muszę przybić mu piątkę. Mimo że nie rozmawiałem z nią przez jakiś czas, Marion Wells odnowiła moją wiarę w siebie jako pisarza, kiedy najbardziej tego potrzebowałem. Gdyby nie Garret Keizer zabrakłoby mi słów. W końcu jest jedna osoba, która okazała mi nieskończoną cierpliwość i wsparcie podczas pisania tej książki. Ona wie, że to o niej mowa. Nie ma tyle farby drukarskiej, żeby wyrazić moją wdzięczność. — Ethan Marcotte
Dziękuję za pomoc Douglasowi Bowmanowi, Mike'owi Davidsonowi, Molly Holzschlag i współautorom. — Dunstan Orchard
Gorące podziękowania dla Ala, Daniela, Taylor, Joe, Malika, Chucka, Gaila oraz Christiana za zaufanie i wsparcie. To prawdziwe szczęście pracować z ludźmi, którzy kochają swoją pracę i to, dlaczego ją wykonują. Christopher, Dunstan, Ethan i Todd są jednymi z najbardziej utalentowanych deweloperów i komentatorów we współczesnym internecie. Praca z nimi była dla mnie wielkim zaszczytem, a zarazem dawała mi odczuć, jaki mały przy nich jestem. — Mark Trammell
12
Wstęp Projektanci to najczęściej ludzie kreatywni, intensywniej wykorzystujący prawą stronę mózgu. Programiści lepiej znają szczegóły technologii i uaktywniają lewą półkulę. Dlatego projektowanie sieciowe może być dla projektantów swego rodzaju oksymoronem, ponieważ wymaga użycia technologii o nazwie Cascading Style Sheets (CSS). CSS to opracowany przez World Wide Web Consortium (W3C) standard umożliwiający definiowanie spójnych stylów stron internetowych i używanie tego samego szablonu na wielu stronach naraz. Natura CSS powoduje, że w większości przypadków, aby osiągnąć pożądany efekt, należy napisać kod własnoręcznie. Problem w tym, że wielu projektantów ma problemy z pisaniem kodu. Nie ma projektantów narzekających na własnoręczne pisanie kodu PostScript. Są natomiast tacy, którzy pracują w środowisku Adobe Illustrator i pozwalają mu utworzyć pliki PostScript, kryjąc kod gdzieś za plecami. Mimo iż wizualne (WYSIWYG) edytory stron internetowych coraz bardziej zbliżają się do ideału, nadal nie dorównują poziomem profesjonalizmowi, jakim wyróżnia się Illustrator dla PostScriptu. Przy korzystaniu z CSS napotykamy jeszcze jeden problem, który nie występuje w przypadku PostScriptu — są nim przeglądarki internetowe. Producenci tych programów bardzo wolno adaptują technologię CSS w swoich produktach. Mimo że sytuacja cały czas poprawia się (szczególnie po znacznym ulepszeniu obsługi CSS w przeglądarce Internet Explorer dla Windows), ciągle są problemy z tworzeniem stron działających w starszych przeglądarkach. Pociąga to za sobą konieczność dokładnego poznania CSS i opanowania różnych sztuczek. W ostateczności oznacza to więcej czasu na pisanie i sprawdzanie kodu, a mniej na pracę z narzędziami wizualnymi. Nawet dla osób znających podstawy CSS (własności, akceptowalne wartości, selektory itp.) efektywne wykorzystanie tej wiedzy może być trudne, a czasami wręcz dołujące. CSS potrafi wprawić w zakłopotanie nawet najlepszych — tych, którzy naprawdę rozumieją specyfikacje publikowane przez W3C — w przeciwieństwie do tych, którzy czytają je tylko pobieżnie z nieukrywanym podziwem. Jednak CSS we właściwych rękach to świetne narzędzie. Jy a £
oo o.5
Gdy projektant opanuje podstawy tej technologii, zrozumie jej zastosowanie oraz nabędzie odpowiedniego doświadczenia, prawie każdy szkic narysowany na serwetce lub opracowany szczegółowo w programie Adobe Photoshop staje się możliwy do zrealizowania w CSS. Aby dojść do tego etapu, nie rozstawaj się z tą książką. Professional CSS jest jedną z niewielu dostępnych na rynku książek, która traktuje o pisaniu standardowego kodu CSS użytego w dobrze zaprojektowanych i dostępnych w świecie rzeczywistym witrynach, składających się z wielu stron. Koncentrując się na najlepszych
Wstęp praktykach programowania sieciowego i prezentując przykłady z prawdziwych witryn internetowych, książka ta oferuje unikatowe rozwiązania problemów związanych z projektowaniem CSS. Christopher Schmitt ChristopherSchmitt.com Cincinnati, OH Styczeń 2007
Dla kogo jest ta książka? Największe korzyści z przeczytania tej książki odniosą projektanci znający CSS na średnio zaawansowanym i zaawansowanym poziomie, którzy nie są pewni, jak efektywnie tworzyć profesjonalne projekty CSS. Szczególnie przydatna okazuje się dla dwóch grup czytelników: •
średnio zaawansowanych i zaawansowanych użytkowników języka HTML, zaczynających naukę CSS — doświadczonych programistów sieciowych, którzy zetknęli się już z CSS, ale potrzebują więcej informacji, jak złożyć profesjonalną witrynę internetową z poszczególnych części;
•
profesjonalnych projektantów — profesjonalnych projektantów uczących się CSS (nieznających tradycyjnych technik z lat 90. ubiegłego wieku), którzy chcą nauczyć się, jak najlepiej wykorzystywać tę technologię.
Układ książki Każdy rozdział został napisany przez jednego projektanta, który opisuje opracowaną przez siebie witrynę. Zawiera łatwe do zrozumienia wskazówki dotyczące użycia CSS oraz opisy technik zastosowanych w danym projekcie. Ponadto projektanci pozwalają zajrzeć głębiej w swój proces twórczy, opisując, co teraz zrobiliby inaczej. Poniżej znajduje się krótki przegląd rozdziałów tej książki.
14
•
Rozdział 1. — Najlepsze praktyki w XHTML i CSS — Ethan Marcotte, członek komisji nadzorczej Web Standards Project oraz uznany lider ruchu na rzecz projektowania w zgodzie ze standardami sieciowymi, dzieli się pewnymi spostrzeżeniami na temat używania XHTML i CSS.
•
Rozdział 2. — Blogger.com: efekt rollover i design touches — Dunstan Orchard, również członek Web Standards Project, zagląda za kulisy prac nad nowym stylem witryny blogger.com (będącej własnością Google witryny umożliwiającej tworzenie blogów). Z wywiadu przeprowadzonego przez Orcharda z Douglasem Bowmanem (wpływowym projektantem, którego głośne i bardzo efektywne przeprojektowania kilku witryn internetowych wyniosły na sam szczyt projektantów stosujących standardy) można dowiedzieć się kilku pożytecznych rzeczy.
•
Rozdział 3. — Witryna internetowa mistrzostw PGA — Todd Dominey, jako starszy projektant interaktywny w firmie Turner Sports Interactive, projektuje i rozwija witryny internetowe najważniejszych turniejów PGA (włącznie z PGA Championship oraz The Ryder Cup). W swoim rozdziale Dominey opisuje proces projektowania witryny odwiedzanej przez miliony fanów sportu z całego świata. Najważniejsze tematy poru-
Wstęp szane w tym rozdziale to cienie, menu rozwijane oraz wstawianie animacji Flasha na strony internetowe. •
Rozdział 4. — Witryna University of Florida — Mark Trammel, który zajmuje się witryną internetową jednego z najlepszych uniwersytetów w USA, objaśnia, jak uczelnia ta opracowała witrynę internetową doskonale służącą zarówno uczelni, jak i studentom. Najważniejsze tematy tego rozdziału to radzenie sobie z przeglądarkami i tworzenie funkcjonalnych nawigacji.
•
Rozdział 5. — Stuff and Nonsense Ltd.: strategie przełączania arkuszy stylów — poza wywiadem przeprowadzonym z Andym Clarke'em (dyrektorem kreatywnym w firmie Stuff and Nonsense), Ethan Marcotte przedstawia sposoby zwiększenia dostępności witryny internetowej. Zagłębia się w przełączanie CSS i omawia sposoby radzenia sobie z uciążliwymi problemami zgodności kodu z przeglądarkami. Innowacje wprowadzone w witrynie Stuff and Nonsense są świetnym przykładem zastosowania tych technik.
•
Rozdział 6. — Przygody CindyLi.com: modyfikacja blogu — Cindy Li opowiada 0 tym, jak opracowała swoją witrynę internetową przy użyciu własnych ilustracji 1 własnoręcznie napisanego kodu CSS.
•
Rozdział 7. — AIGA Cincinnati: szablony HTML wiadomości e-mail — Christopher Schmitt opisuje proces tworzenia szablonów HTML listów e-mail oraz opisuje, jaką rolę w tym wszystkim odgrywają CSS.
•
Rozdział 8. — Witryna internetowa książki: używanie przezroczystych obrazów PNG — Christopher Schmitt opisuje, jak podczas tworzenia witryny tej książki użył przezroczystych obrazów PNG oraz obszedł problem braku pełnej obsługi tego formatu w przeglądarce Internet Explorer.
•
Rozdział 9. — Tworzenie układów CSS — Christopher Schmitt pisze, jak ważne są siatki i układy w projektowaniu, a Ethan Marcotte pokazuje, jak utworzyć stabilny szkielet układu trzykolumnowego.
Dodatki do książki zawierają poręczne zestawienie elementów HTML 4.01, opis reguł konwersji HTML na XHTML, własności CSS 2.1, a nawet wskazówki dotyczące rozwiązywania najczęściej spotykanych problemów.
Konwencje typograficzne W książce zastosowano kilka konwencji typograficznych, które pomogą wynieść jak najwięcej z jej treści oraz zorientować się w opisywanych zagadnieniach.
Ramki, takie jak ta, zawierają ważne informacje, których nie można zapomnieć, a dotyczą otaczającego je tekstu
Wskazówki, podpowiedzi, sztuczki i uwagi do bieżącego tekstu są przesunięte i napisane kursywą.
15
Wstęp Style w tekście: •
nowe pojęcia i ważne słowa są pogrubione,
•
kombinacje klawiszy są opisane tak: Ctrl+A,
•
nazwy plików i adresy URL zapisane są kursywą,
•
fragmenty kodu zapisywane są czcionką o stałych odstępach między znakami: persistence.properties.
Kod źródłowy Gdy zechcesz wypróbować kod źródłowy przedstawiony w książce, możesz przepisać go w całości ręcznie lub skopiować z plików dostępnych na serwerze FTP wydawnictwa Helion: ftp://ftp.helion.pl/przyklady/cssppw.zip
Errata Dokładamy wszelkich starań, aby wydawane przez nas książki i towarzyszące im pliki z kodem źródłowym były wolne od błędów. Niestety, błędy zdarzają się każdemu. Jeśli znajdziesz jakiś błąd w jednej z naszych książek (literówka lub błędny fragment kodu), będziemy bardzo wdzięczni za informaqe. Jeśli wyślesz erratę, możesz zaoszczędzić innym czytelnikom kilku godzin nerwów, a przy okazji pomóc nam w podniesieniu jakości naszych publikacji. Erratę do tej książki można znaleźć na stronie www.helion.pl. Odpowiednią pozycję można znaleźć za pomocą wyszukiwarki lub na liście publikacji. Następnie na stronie książki znajdziesz odnośnik Zgłoś erratę oraz, jeśli już została jakaś zgłoszona, Erraty. Jeśli nie znajdziesz znalezionego przez siebie błędu na stronie Erraty, przejdź do strony Zgłoś erratę i wyślij nam informacje o znalezionym błędzie. Sprawdzimy je, po czym — jeśli się potwierdzą — umieścimy na stronie Erraty oraz uwzględnimy w kolejnych wydaniach książki.
16
Najlepsze praktyki w XHTML i CSS Wspaniałe dzieła nie są owocem siły, ale wytrwałej pracy. — Samuel Johnson
Na początku istnienia internet nie był najciekawszym miejscem na ziemi. Został stworzony przez fizyków nuklearnych na własne potrzeby a hipertekst służył wyłącznie jako sposób udostępniania dokumentów w otwartej, rozproszonej sieci. Nie trzeba chyba dodawać, że szczegółowo dopracowane projekty tych dokumentów nie były priorytetem ówczesnych twórców stron internetowych. Faktycznie szeroko stosowany element HTML (a nawet nadużywany, o czym nieco dalej) o nazwie tabl e został utworzony w jednym celu — służył do przedstawiania danych w formie tabelarycznej. Przez długi czas w latach 90. ubiegłego wieku często w nazwie HTML ignorowano literę L. Wielu fachowców uznawało, że kod używany przy tworzeniu stron internetowych nie jest prawdziwym językiem programowania, a więc nie podlega zasadom i ograniczeniom prawdziwych języków. Ponadto klienci nie chcieli płacić za zgodny ze standardami, dostępny i przyszłościowy kod. W istocie wiele witryn projektowano z zachowaniem zgodności wstecznej. Oznaczało to konieczność zgodności z wersjami 4.0 przeglądarek i nowszymi. Przeglądarki w tamtych czasach były, mówiąc delikatnie, marudne. Z powodu słabej obsługi standardów publikowanych przez konsorcjum World Wide Web (W3C) — www.w3.org — można było się spodziewać, że ta sama strona w każdej przeglądarce będzie wyglądać inaczej. Niewielu programistów wiedziało wówczas o istnieniu standardów W3C, a przeglądarki, którymi dysponowali, praktycznie nie obsługiwały kodu zgodnego z tymi standardami. W tym sensie rozdźwięk między nauką a rzeczywistością był zdecydowanie zbyt duży. Programiści celowo używali nieprawidłowych znaczników HTML działających tylko w wybranych przeglądarkach, aby zapewnić w nich jak najlepszy wygląd stron. Przez jakiś czas wszystko było w porządku. Programiści nie musieli czytać zbyt długich specyfikacji, mieli określone terminy, nie płacono im za godziny pracy i — jak widać — mieli mnóstwo wymówek.
Rozdział 1. Najlepsze praktyki w XHTML i CSS Oczywiście, szybko spostrzeżono, że po wyzerowaniu dopełnienia wewnątrz komórek tabeli oraz usunięciu innych odstępów wraz z krawędziami można było uzyskać skomplikowane układy stron oparte o siatkę. W ten sposób wzniesiono się na wyższy poziom estetyczny. Biorąc pod uwagę słabą obsługę CSS przez przeglądarki w tamtych czasach, nie było innego wyboru jak tylko obciążenie strony mnóstwem prezentacyjnego kodu. W wyniku powstawały ciężkie od samego kodu strony, którymi trudno było zarządzać, a na dodatek ich przeprojektowanie było drogie, nie wspominając już o zapychaniu łączy użytkowników. Na szczęście, znalazło się wyjście. Extensible Hypertext Markup Language (XHTML) i CSS to dwie standardowe technologie, które pozwalają pozbyć się niepotrzebnego kodu i umożliwiają tworzenie znacznie lżejszych, lepiej dostępnych i łatwiejszych w konserwacji stron. Oczywiście, efektywność tych narzędzi jest mierzona umiejętnościami programisty, który się nimi posługuje. W rozdziale tym opisuję, dlaczego XHTML i CSS są potrzebne, oraz przedstawiam kilka strategii inteligentnego wdrażania ich we własnych projektach.
Upychanie warstwy strukturalnej i prezentacyjnej razem Weź głęboki oddech i odpowiedz sobie szczerze na to pytanie: „Czy poniższy fragment kodu wygląda znajomo?".
Na początku istnienia internetu w taki właśnie sposób znakowano treść stron internetowych. Gdyby nie te cztery atrybuty, projekty byłyby otoczone marginesem o grubości dziesięciu pikseli, a przez to niektóre z nich byłyby na tyle skomplikowane i kłopotliwe, że niejednemu spędzałyby sen z powiek. Podejście to ukazuje, do jakiego stopnia kładziono nacisk na odpowiedni wygląd stron. Bez względu na pochodzenie języka HTML jako języka o dobrze sformułowanej strukturze, strony w drodze ewolucji zmieniły się w swoistą mieszaninę znaczników — niezbyt smaczny gulasz z kodu prezentacyjnego i strukturalnego. Ponieważ ówczesne przeglądarki obsługiwały CSS w niewielkim stopniu lub wcale, programiści używali prześwitujących obrazów do tworzenia odstępów, elementów font oraz wielopoziomowych, zagnieżdżonych tabel stanowiących szkielet układu strony. Doskonałym przykładem tego nieporozumienia jest wypełniony atrybutami powyższy znacznik body. Mimo iż element ten pełni bardzo ważną rolę w strukturze dokumentu (zawiera treść strony internetowej), wszystkie jego atrybuty służą tylko temu, aby sprawić, żeby struktura ta wyglądała w pewien określony sposób. Sam mały znacznik body nie byłby może taki straszny. Czy warto rozpisywać się o jednym elemencie? Przykład problemów związanych z kodem prezentacyjnym można znaleźć na głównej stronie uniwersytetu Harvarda (www.harvard.edu). Projekt tej witryny (rysunek 1.1) świetnie oddaje charakter uznanej marki. Konserwatywna ziemista kolorystyka podkreśla będący znakiem rozpoznawczym tej uczelni kolor bordowy. Natomiast wyśrodkowany dwukolumnowy układ pozwala przedłożyć treść nad formę. Bez wątpienia jest to dobrze zaprojektowana witryna, którą każdego dnia odwiedza niemało ludzi.
18
Rozdział 1. Najlepsze praktyki w XHTML i CSS ^>Welcome to Harvard University - Mozilla Firefox Plik
Edycja •
l&idok
Historia
C
-Mj
Zakładki ' ®
Narzędzia
B B B
Pomot
http://www.harvard.edu/
•Cr
J Google
aa. ca •
v es , Harvard University : • Admissions & Financial Aid • Empłoyment • libro ries • Museums • Arts President • Adminisłratkm • Schoołs • Neighbors & Visitors • Athietics • Alumni • Search December 1 0 , 2 0 0 7
Researchers at the Harvard Stem Celt Institutc pursue science specifically largeted at curing some o f humankind'* most terrible diseases.
SCHOOLS O F HARVARD
Butineil Cottege Continuing Education Dentai Design DMnKy Education I Events
tnginwring Goyernment Graduate School Law Medkol Pubik Hsatlh
> Research
B« Multimedia
In Other News Admissions r o a d trip looks for top studenta G o r b a c t i o calis for new elfort to elimiimte imke-s B r a i n s y f i l i s become les-s c o o r d m a t e d with a ę e
Slow readine in dvslexia tied to disoreaiiiied brain t r a c t s
H g r v a r d G n / ę t l e i Recent N t » s I RSS i
Rysunek 1.1. Strona główna Harvard University
Z pewnością projekt jest prosty i efektywny. Jeśli jednak włączy się obramowanie wszystkich elementów tabeli w jej kodzie HTML, oczom ukazuje się coś całkiem innego (rysunek 1.2). Istnieje wiele narzędzi, przy użyciu których można szybko zmienić wygląd oglądanej w przeglądarce strony internetowej. Dla przeglądarek Mozilla dostępny jest świetny program o nazwie Web Deweloper Toolbar (http://chrispederick.com/work/web-developer/). Jest to bezcenny składnik zestawu narzędzi programisty CSS, pozwalający włączać obramowanie różnych elementów strony, szybko edytować kod CSS i w łatwy sposób sprawdzać kod w walidatorach internetowych. Programiści pracujący na komputerach Mac mogą poszukać dodatków na stronie http://hicksdesign.co.uk/journal/web-development-with-safari.
19
Rozdział 1. Najlepsze praktyki w XHTML i CSS ę JWelcome
I
PIk
Edycja
^ ^
to Harvard University - Mozilla Firefox
Widok
-
Historia
C
Zaktacki 1
Ł
®
Narzędzia
Pomoc
http://www.harvard.edu/
sJiWt m v
, gs J Harvard University
Pm$i«fe«l
:»
• Admłwistfratkas • ^ f i Sc&eols ' *• | N^ighbcrs^&yiSttors: '
Researcher* at the Hazard Stern Celi Institute pursue science speciftcaily targeted at curing somc of humankmd md's most terrible diseases
SCHOOLS OF HARVA*D
Business College Contmuing Educotion Dental Design Divintty Education
Engineering Government Graduałe School Law Medical Publk Health
In Other News Admissions road trip loots for top studenti Gorbaches calls for new effort to eliroinale nukes Brain w stęnff become l ę » coordinaled srithpęe Lniyersity rtcycles half its trash for first linie Slo» readinfi in dyslucia tied to disoreaniied
[•Eyents
»Research
»
Rysunek 1.2. Strona główna Harvard University po włączeniu obramowań tabeli
Spora zmiana. Do budowy takiego prostego układu użyto bardzo dużej ilości kodu. Tabele zostały zagnieżdżone na głębokość pięciu poziomów, logo podzielono na części z dokładnością do jednego piksela i umieszczono je w różnych wierszach tabeli. Nawet kod głównego paska nawigacyjnego przyprawia o zawrót głowy.
20
Rozdział 1. Najlepsze praktyki w XHTML i CSS
Na początku został ustawiony kolor tła pierwszego wiersza nawigacyjnego (#cdd397 — jasny słabo nasycony zielony), usunięto obramowanie tabeli i dopełnienie wewnątrz komórek oraz odstępy między komórkami. Dzięki temu uzyskano niewidoczną siatkę, na której można ustawiać obrazy graficzne z dokładnością do jednego piksela. Co druga komórka zawiera obraz nav_bullet.gif, punktor widoczny obok każdego elementu nawigacji. W pozostałych komórkach znajdują się same obrazy elementów nawigacyjnych zdefiniowanych jako odnośniki z atrybutami onmouseover i onmouseout odpowiedzialnymi za efekt rollover.
Pamiętaj, że ten cały kod służy do utworzenia tylko jednego paska nawigacyjnego. Reszta strony powstała na tej samej zasadzie — wyzerowanie domyślnych atrybutów tabeli, wstawienie treści, grafiki i dodatkowego kodu oraz powtórzenie, jeśli trzeba. Po pewnym czasie czytanie tego kodu powoduje zawroty głowy. Gdy wydaje się, że znalazłeś koniec jednej tabeli, pojawia się kolejna i wtedy można sobie uświadomić, jak dużo wysiłku kosztuje osiągnięcie świętego Graala dobrej prezentacji strony, czyli spójnego i zawsze takiego samego wyglądu we wszystkich przeglądarkach. Oczywiście, święty Graal to tylko część prawdziwego sukcesu. Do niedawna wszyscy przejmowali się tylko wizualną prezentacją stron internetowych w przeglądarkach graficznych. Są jednak odmienne rodzaje przeglądarek, z których korzystają inni użytkownicy i ich potrzeby również powinno się brać pod uwagę. Co zatem się stanie, jeśli stronę główną uniwersytetu Harvarda wyświetlimy w przeglądarce nieobsługującej grafiki? Odpowiedź na to pytanie znajduje się na rysunku 1.3, prezentującym zrzut ekranu przeglądarki tekstowej. Bez pomocy kolorów i nagłówków zdecydowanie trudniej poruszać się po tej stronie. Skoro problemy mają osoby bez wad wzroku, pomyśl, co w takim przypadku przeżywają niewidomi.
21
Rozdział 1. Najlepsze praktyki w XHTML i CSS http://www.harvard.edu/ Harward U n i w e r s i t y s h i e l d Harward U n i w e r s i t y s h i e l d Ha
ard
Uniwersity
Harward U n i w e r s i t y s h i e l d IIone fnaw . b u l l e t . I A d n i s s i o n s E n p l o y n e n t [naw b u l l e t l L i b r a r i e s [naw b u l l e t ] Huseums
Arts
[naw_bullet] (naw b u l l e t ]
The P r e s i d e n t ' s O f f i c e [naw2 . b u l l e t l A d m i n i s t r a t i o n tnaw2 b u l l e t l S c h u o l s o f Harward l n a w 2 _ b u l l e t ] N e i g h b o r s K U i s i t o r s t n a w 2 „ b u l l e t 1 A t h l e t i c s [ n a w 2 _ b u l l e t 1 Alumni £ n a w 2 _ b u l l e t ] S e a r c h
Harward's classrooms, lecture but a l s o t h e
i s a c o n n u n i t y unto i t s e l f , h a l l s , l a b o r a t o r i e s and t h e
w i t h not , of
only
the course,
, and, — p r e s s s p a c e f o r n e x t page — Arrow k e y s : Up and Down t o nowe. R i g h t t o f o l l o w a l i n k ; L e f t t o go b a c k . H > e l p 0 > p t i o n s P > r i n t G>o M>ain s c r e e n Q ) u i t / = s e a r c h t d e l e t e ] = h i s t o r y l i s t
Rysunek 1.3. Widok strony www.harvard.com w przeglądarce tekstowej Lynx
Niektóre obrazy na tej stronie nie mają np. atrybutu al t, który jest ważnym wymogiem dostępności oraz wymaganym elementem języka XHTML. Utworzenie poprawnego kodu HTML pozwala zastosować do niego kod CSS. Jeśli ponadto niewidomy użytkownik odczytywałby zawartość tej strony przy użyciu programu czytającego, nazwy plików pozbawionych atrybutu al t zostałyby odczytane. Usłyszałby coś takiego: „Łącze" Home nav podkreślenie bullet kropka gif łącze Admissions nav podkreślenie bullet kropka gif łącze Employment nav podkreślenie bullet kropka gif łącze Libraries" itd. Przede wszystkim zaznaczam, że nie jest to krytyka witryny uniwersytetu Harvarda. Kiedyś dokładnie tak tworzono strony internetowe. Jest to raczej pozostałość po internecie, w którym jeszcze do niedawna wszyscy musieliśmy pracować. Przy tak marnej obsłudze CSS tabele były czymś oczywistym. Projektanci musieli zapewnić doskonały wygląd stron we wszystkich przeglądarkach graficznych za cenę zapychania łączy ciężkimi plikami i osłabienia dostępności stron. Oczywiście, w tym miejscu nasuwa się pytanie: „Co robić?". Jeśli myślisz, że musi być jakieś wyjście z tej sytuacji, masz rację. Dzisiejsze przeglądarki są znacznie bardziej inteligentne i również tacy powinni być deweloperzy. Dobra obsługa CSS powoduje, że nie trzeba tworzyć układów stron opartych na tabelach, które tylko zwiększają wagę plików. W zamian można skupić się na oddzieleniu warstwy prezentacyjnej od reszty kodu i przeniesieniu jej do osobnego kaskadowego arkusza stylów. Obietnica oddzielenia struktury od stylu jest główną częścią projektu zgodnego ze standardami oraz stanowi jeden z najbardziej przekonujących argumentów za stosowaniem CSS. Oddzielenie treści strony internetowej od jej warstwy prezentacyjnej sprawia, że strona staje się nie tylko znacznie lżejsza, ale również łatwiejsza w konserwacji.
22
Rozdział 1. Najlepsze praktyki w XHTML i CSS
Pokochać swój kod Wróćmy jeszcze raz do opisywanego wcześniej elementu body:
Warto pamiętać, że ani jeden z tych atrybutów nigdy nie pojawił się w żadnej specyfikacji języka HTML (www.w3.org/MarkUp). Atrybuty marginwidth i marginheight działały tylko w przeglądarce Netscape, a 1 eftmargi n i topmargi n usuwały marginesy w Internet Explorerze. Brak ich obecności w specyfikacji nie miał wpływu na projektantów, którzy stosowali je na swoich stronach. Pracowali z przeglądarkami oferującymi niestandardowe (i często wykluczające się) implementacje języka HTML. Nie zrażało ich to jednak i często stosowali niepoprawny kod działający tylko w jednej, konkretnej przeglądarce. Ponieważ ten sam niepoprawny kod był serwowany wszystkim przeglądarkom, łatwo spostrzec, jak tolerancyjne były (i nadal są) w stosunku do błędów w kodzie. Jeśli zapomni się wstawić zamknięcie znacznika (np. lub ) albo wprowadzić element przeznaczony dla jednej przeglądarki, aby ominąć problem błędu w układzie (jak w zaprezentowanym wcześniej znaczniku body), przeglądarka ma gotowe procedury postępowania kryzysowego. Naprawia kod podczas jego analizy i wyświetla stronę bez względu na pewne niedociągnięcia. Prawdziwe problemy polegają na tym, że każda przeglądarka interpretuje nieprawidłowy kod na swój sposób, co nieuchronnie prowadzi do nieprzewidywalnych wyników podczas testowania w różnych przeglądarkach. Jedna może bardzo elegancko poradzić sobie z brakującym nawiasem ostrym, a inna z tego powodu całkowicie zawalić układ strony. Te niespójne strategie naprawiania błędów powodują, że jedno jest pewne: nieprawidłowy kod oznacza więcej czasu spędzonego na pisaniu i testowaniu go w różnych przeglądarkach, aby zapewnić w nich spójny wygląd strony. Zamiast skupić się na ulepszaniu projektu i treści strony, projektant jest zmuszony poświęcić o wiele za dużo czasu na pielęgnowanie niepoprawnego kodu. Prawdą jest, że stosowanie takiego niepoprawnego kodu w przeszłości pozwalało zapewnić spójny wygląd stron w różnych starych przeglądarkach. Jednak pozwalając sobie na stosowanie sztuczek w kodzie HTML, projektanci uzależniali swoje wyroby od konkretnych przeglądarek. Kiedy aktualnie wykorzystywane przeglądarki w końcu przekroczą pewien próg i nadejdzie era nowej jakości tych programów, wszystkie sztuczki staną się potencjalnymi pułapkami. Czy nowe przeglądarki będą tak samo tolerancyjne dla rozdętego kodu pełnego niestandardowych składników? Czy tekstowa wersja przeglądarki Internet Explorer także będzie miała błąd niepozwalający wyświetlić strony zawierającej atrybut marginheight w elemencie body? Tak, o takie rzeczy trzeba martwić się zawczasu. Prawda jest taka, że niepoprawny kod powoduje długoterminowe uzależnienia, których nie można zignorować. Zamiast zatem zastanawiać się, jak sztuczki te będą działać (lub czy w ogóle będą) za rok lub kilka lat, lepiej zacząć w końcu zwracać uwagę na literę L w akronimie HTML.
23
Rozdział 1. Najlepsze praktyki w XHTML i CSS
XHTML — nowa era J ę z y k X H T M L n a s t r o n a c h W 3 C jest o p i s y w a n y j a k o j ę z y k „ p r z e n o s z ą c y ścisłe z a s a d y języka X M L n a strony i n t e r n e t o w e " ( w w w . w 3 . o r g / M a r k U p / # x h t m l l ) . P o r ó w n a j p o n i ż s z y fragment kodu H T M L z jego odpowiednikiem w XHTML: Moja przykładowa strona
Zwyk?y element listy,
inny element listy.
Lubię dużo kodu, prawdę mówię Wam.
Taka moja natura, tak już mam. Wersja X H T M L :
Moja przykładowa strona
Zwykl'y element listy,
inny element listy.
Lubię dużo kodu, prawdę mówię Wam.
Taka moja natura, tak już mam.
N i e p r z e j m u j się, jeśli nie w i d z i s z ż a d n e j różnicy. Te d w i e w e r s j e k o d u z n a c z n i e więcej łączy, niż dzieli. N a d o d a t e k obie w p r z e g l ą d a r k a c h w y g l ą d a j ą tak s a m o . O d w i e d z a j ą c y witrynę n i e potrafiliby r o z p o z n a ć o b u wersji. M i m o że p o d o b i e ń s t w jest d u ż o więcej niż różnic, te ostatnie s ą b a r d z o w a ż n e .
24
Rozdział 1. Najlepsze praktyki w XHTML i CSS Deklaracja typu
dokumentu
Pierwszy element obu tych przykładowych stron to DOCTYPE (czyli deklaracja typu dokumentu). Wpisz w swojej przeglądarce internetowej poniższy adres URL: http://www.w3.org/TR/xhtmll/DTD/xhtml1-transitional.dtd
W zależności od programu i tego, jak system operacyjny obsługuje pliki z rozszerzeniem .dtd, może zostać wyświetlone okno pobierania pliku na dysk lub jego zawartość zostanie wyświetlona w przeglądarce jak zwykły tekst. Po wyświetleniu zawartości tego pliku w przeglądarce lub edytorze tekstu zobaczysz długi i skomplikowany tekst zwany definicją typu dokumentu (ang. Document Type Definition — DTD). DTD definiuje zasady języka, do których kod HTML strony powinien się stosować. Zadeklarowanie DTD na początku kodu HTML informuje klientów (wszystkie programy i urządzenia używane do otwierania stron internetowych), jaki język został użyty. Problem nie dotyczy tylko graficznych przeglądarek internetowych instalowanych w komputerach. Klientem jest także drukarka, telefon komórkowy i czytnik ekranowy. Każde z tych urządzeń lepiej radzi sobie z wyświetlaniem, jeśli wie, jaki dokładnie język został użyty do budowy otwieranej strony. Innym przykładem klientów są internetowe narzędzia do walidacji kodu. A te najbardziej ze wszystkich potrzebują deklaracji typu dokumentu. Za jej pomocą mogą ocenić, w jakim stopniu strona jest zgodna z zadeklarowanym DTD — czyli czy jest poprawnie złożona, czy nie.
Dbanie o dobrą formę kodu Dobrze sformułowany kod jest nowym ujęciem starej zasady. Oznacza to tyle, że wszystkie elementy muszą być odpowiednio zagnieżdżone. Spójrz na poniższy przykład:
To jest mój pierwszy akapit!
Moja przykładowa strona
W tym kodzie najpierw został otwarty znacznik em, a po nim strong. Jednak w języku HTML obowiązuje zasada, że pierwszy otwarty znacznik musi zostać zamknięty jako ostatni. Ponieważ znacznik em został otwarty przed strong, musi zostać zamknięty po nim. Po poprawieniu zagnieżdżenie elementów w dobrze sformułowanym kodzie będzie nieco inne:
To jest mój pierwszy akapit!
Moja przykładowa strona
Jak zapewne wiele osób zauważy, ta koncepcja zagnieżdżania nie jest nowa. Mimo że niepoprawne zagnieżdżanie znaczników nigdy nie było uważane za dobre, do dziś można spotkać strony z takim kodem. W wyniku tego przeglądarki internetowe stały się zbyt tolerancyjne dla podawanej im zupy ze znaczników. Ponieważ każda przeglądarka radzi sobie z błędami kodu w inny sposób, w każdej strona może wyglądać nieco inaczej. XHTML to język wymagający poprawnej struktury kodu. Taka restrykcyjna składnia zmusza programistę do wystrzegania się wszelkich niedociągnięć. Oczywiście, należy pamiętać, że „właściwa forma" jeszcze nie oznacza poprawności. Spójrz na poniższy przykład:
Powyższy kod jest pod względem zagnieżdżania znaczników idealny, ale daleko mu do poprawności. W języku HTML wyróżnia się dwa rodzaje elementów: blokowe (np. di v, p, table itp.) i liniowe (np. a, em, strong). Elementy liniowe nie mogą zawierać elementów blokowych i dlatego właśnie powyższy kod jest niepoprawny. Mimo że przeglądarki najprawdopodobniej odpowiednio sobie z nim poradzą, jest prawie pewne, że po zastosowaniu CSS pojawią się problemy. W zależności od przeglądarki, style zastosowane do łącza mogą, ale nie muszą, zostać przejęte przez tekst znajdujący się w elemencie div. Nie byłoby to nic przyjemnego, gdyby nagle wszystkie elementy na stronie stały się podkreślonymi odnośnikami lub zaczęły zmieniać wygląd po najechaniu na nie kursorem. Jest to jeszcze jeden dowód na to, jak ważna jest walidacja. Dzięki umieszczeniu deklaracji DOCTYPE na początku dokumentu i częstemu sprawdzaniu poprawności kodu wszelkie błędy układu można zdusić w zarodku. To przekłada się na konieczność poświęcenia mniejszej ilości czasu na usuwanie błędów, a więc pozostaje więcej czasu na właściwą pracę.
Zamykaj wszystkie
elementy
W HTML nie każdy element trzeba było bezpośrednio zamykać. Specyfikaq'a HTML 4.01 wyróżnia nawet grupy znaczników, które muszą zostać zamknięte (takie jak em czy strong: www.w3.org/TR/REC-html40/struct/text.html#h-9.2.1), które mogą zostać zamknięte (np. akapit: www.w3.orglTRIREC-html40lstructltext.html#h-9.3.1), oraz takie, których zamykać wręcz nie wolno (znacznik br: www.w3.org/TR/REC-html40/struct/text.html#h-9.3.2). Na szczęście, w XHTML wprowadzono wymóg poprawnego formułowania kodu, a to wymusiło zlikwidowanie opisywanej zasady. Każdy otwarty element musi zostać zamknięty i już. Poniższy kod jest poprawny w HTML w wersji 4.:
Zwykły element listy,
inny element listy.
Lubię dużo kodu, prawdę mówię Wam.
Taka moja natura, tak już mam.
Natomiast odpowiadający powyższemu kod XHTML wygląda nieco inaczej:
Zwykły element listy,
inny element listy.
Lubię dużo kodu, prawdę mówię Wam.
Taka moja natura, tak już mam.
W XHTML nie można pozostawić elementów listy (<1 i>) i akapitów (
) otwartych. Przed rozpoczęciem nowego elementu tego typu zawsze trzeba najpierw zamknąć bieżący za pomocą, odpowiednio, i
. Uważny czytelnik zapewne zapyta, dlaczego do elementu br wstawiany jest prawy ukośnik /. To nie tak, że ktoś za bardzo lubi ukośniki. Elementy, takie jak br, img, meta i hr, są tzw. elementami pustymi, ponieważ nie zawierają treści — w przeciwieństwie do większości
26
Rozdział 1. Najlepsze praktyki w XHTML i CSS elementów HTML, np. p, 1 i, td itd. Mimo że elementy puste nigdy nie miały zamykających znaczników, XHTML jest bezkompromisowy w zakresie dbałości o prawidłową formę dokumentu. Dlatego dodanie ukośnika (/>) do pustego znacznika oznacza jego zamknięcie. Zabieganie o spójność jest bardzo ważną cechą języka XHTML. Zwróć uwagę na spację między . Dzięki niej stare przeglądarki (powstałe przed specyfikacją XHTML) mogą poprawnie odczytywać nowe dokumenty.
Nazwy elementów i atrybutów pisze się małymi
literami
W specyfikacji HTML nie ma ani słowa na temat tego, jakimi literami pisać nazwy znaczników i atrybutów. Dlatego programiści przyzwyczaili się do pisania jak popadnie:
Uwaga!
Moja przykładowa strona W XHTML wszystkie elementy i ich atrybuty muszą być pisane małymi literami. Bierze się to stąd, że język XML jest wrażliwy na wielkość liter i tak np. , i byłyby trzema różnymi znacznikami. Z tego powodu specjaliści opracowujący specyfikację XHTML zdecydowali się na ujednolicenie w postaci wymogu stosowania tylko małych liter:
Uwaga!
Moja przykładowa strona Jak widać, wartość Warni ng atrybutu cl ass pozostała niezmieniona. Jest to w pełni akceptowalne, ponieważ wartości atrybutów w XHTML mogą być pisane dowolnymi literami (np. atrybut href może zawierać adres URL do serwera rozpoznającego wielkość liter). Muszą natomiast znajdować się w cudzysłowie.
Każdy atrybut musi mieć wartość W HTML jest kilka atrybutów, które kiedyś nie musiały mieć żadnej wartości:
Atrybuty checked i compact są przykładami tego rodzaju atrybutów. Ponieważ nie była wymagana dla nich wartość, wystarczyło tylko je zadeklarować i można było przejść dalej. W XHTML jednak każdy użyty atrybut musi mieć wartość. W przypadku wymienionych atrybutów wystarczy zastosować rozwinięcie, takie jak poniższe:
Moja przykładowa strona To niewielka różnica, ale o kluczowym znaczeniu dla poprawności kodu.
Oddzielenie struktury od stylu Wielu zwolenników standardów głosi, że „oddzielenie stylu od struktury" jest najważniejszą korzyścią płynącą z użycia CSS do budowy witryny internetowej. Zgadzam się z tym stwierdzeniem, ale mam jedno zastrzeżenie. Jak przekonasz się dalej, kodów HTML i CSS nie da się nigdy w pełni rozdzielić. Wystarczy zmienić strukturę pierwszego, a niektóre reguły drugiego mogą przestać działać.
Rozdział 1. Najlepsze praktyki w XHTML i CSS Ponieważ kody HTML i CSS są w dość znacznym stopniu ze sobą splecione, można uznać, że style zostały wydzielone ze struktury. Najważniejszym zadaniem kodu HTML jest opis treści dokumentu i, mimo że jest to prawdą, zawsze będzie zawierać w sobie pewną dawkę informacji prezentacyjnych. Od projektanta zależy jednak, do jakiego stopnia tak będzie. W zasadzie można bez problemu przenieść ciężar prezentacji na kod XHTML, wypełniając go elementami font, tabl e i obrazkami GIF służącymi jako odstępy. Z drugiej strony, w arkuszu stylów można umieścić reguły determinujące wszystkie aspekty projektu strony: kolor, własności typograficzne, obrazy, a nawet układ. Jeśli na dodatek reguły te zostaną umieszczone w osobnym pliku arkuszy stylów, do którego odnośnik zostanie umieszczony na wszystkich stronach witryny, będzie można kontrolować wygląd setek, a nawet tysięcy dokumentów w jednym miejscu. Nie dość, że jest to kusząca perspektywa z punktu widzenia codziennych aktualizaq'i, to jeszcze ile czasu można zaoszczędzić dzięki temu przy pierwszej poważnej zmianie projektu witryny. Za pomocą modyfikacji kilku wierszy kodu w jednym centralnym pliku zyskuje się niespotykaną do tej pory kontrolę nad prezentacją całej witryny. To z pewnością dobra wiadomość dla Ciebie i działu marketingu w Twojej firmie. Dzięki możliwości wstawienia całego kodu CSS do osobnego pliku przeglądarka użytkownika może zapisać go w pamięci podręcznej przy pierwszej wizycie w witrynie. Jest to całkiem inna filozofia w porównaniu z zupą znaczników serwowaną przeglądarkom kiedyś, gdy użytkownicy byli zmuszeni do pobierania za każdym razem całego rozdętego kodu każdej strony. Teraz styl i wygląd całej witryny pobiera się tylko raz i przegląda lekki kod, z którego zbudowana jest reszta strony. To jest dobra wiadomość dla użytkowników. W końcu, najbardziej oczywistą korzyścią jest znaczne uproszczenie kodu źródłowego strony. To będzie miało także pozytywny wpływ na zużycie łącza przez użytkowników, którzy pobiorą strony szybciej. Ponadto lżejszy kod pozwala poprawić notowania w wyszukiwarkach. Jeśli uważasz, że nie sprawia Ci problemu przejrzenie pięciu wierszy nienumerowanej listy, pomyśl, jak roboty wyszukiwarek internetowych polubią indeksowanie treści na Twoich lekkich jak piórko stronach. To powinna być, jak się zapewne domyślasz, dobra wiadomość dla Ciebie.
Jak uniknąć divicy i klasicy? Początkujący programiści przerzucający się z tabel na lżejszy kod bardzo często nadużywają atrybutu cl ass, za którego pomocą wypełniają lukę po swoich ukochanych znacznikach font. W wyniku powstają tabele pasków nawigacyjnych, takie jak poniższa:
Z j a w i s k o to n a z y w a się k l a s i c ą , o d a n g i e l s k i e g o s ł o w a classitis
w y m y ś l o n e g o przez Jeffreya
Zeldmana (www.zeldman.com). Oznacza ono kod rozdęty przez nadużywanie atrybutu class, czyli z a m i e n i ł s t r y j e k s i e k i e r k ę n a k i j e k . Z a m i a s t b e z p o ś r e d n i o w s t a w i a ć w k o d z n a c z n i k i p r e z e n t a c y j n e , o s i ą g a m y to s a m o p r z y u ż y c i u k l a s . J e d y n a k o r z y ś ć w t y m p r z y p a d k u to p r z e n i e s i e n i e w a r t o ś c i a t r y b u t ó w b g c o l o r i z n a c z n i k ó w f o n t d o z e w n ę t r z n e g o a r k u s z a stylów — dobry początek, ale k o d nadal jest m o c n o zaśmiecony. C o g o r s z a , j e s z c z e ł a t w i e j p o p a ś ć w d i v i c ę ( d w i t i s ) o b j a w i a j ą c ą się z a m i a n ą d o b r e g o k o d u w p a p k ę , k t ó r e j g ł ó w n y m s k ł a d n i k i e m j e s t e l e m e n t di v:
Jeśli rozumiesz coś z tego kodu, zadzwoń i powiedz nam, o co w nim chodzi. Nie kiwnięto nawet palcem, aby nadać mu poprawną strukturę. Mimo że elementy di v i span są doskonałymi narzędziami pracy, nadużywanie ich może prowadzić do powstania rozdętego i trudnego do pojęcia kodu. Ze zrozumieniem problemy będą mieć nie tylko programiści, lecz również użytkownicy. Pamiętasz zrzut ekranu z przeglądarki tekstowej (rysunek 1.3)? Jeśli ktoś wyłączy obsługę arkuszy stylów, sam kod HTML będzie trudny do zinterpretowania w takim środowisku.
Prawidłowe używanie
znaczników
W zamian można elementów HTML używać zgodnie z przeznaczeniem — znaczniki di v i span służą do wypełniania luk, gdy nie ma żadnego innego pasującego elementu. Tutaj zostaną opisane strategie pozbywania się niepotrzebnego kodu w celu pozostawienia tylko niezbędnego minimum. Wskazówki przygotują Ciebie i Twoje strony do stosowania technik CSS opisywanych w dalszych rozdziałach książki. Wrócimy do kodu strony uniwersytetu Harvarda (rysunek 1.1). Spróbujemy poprawić ją, stosując nowy sposób myślenia do kodu starej szkoły.
Zapoznawanie
się z innymi
elementami
W tym miejscu przechodzisz przez proces opisywania treści, a niej projektowania. Dlatego im lepiej znasz specyfikację XHTML, tym lepiej będziesz mógł opisać strukturę swojej witryny.
Lepiej zapoznaj się z nagłówkami Spójrz na kod jednej z nowości w prawej kolumnie: 'IUuminating the beauty of life' Yannatos starts 41st year conducting Harvard-Radcliffe Orchestra More
Treść tej wiadomości jest opatrzona nagłówkiem prezentującym jej tytuł. Z kodu jednak nie da się zgadnąć, że to jest nagłówek: 'Illuminating the beauty of life' Zamiast przy użyciu kodu opisywać, jak dany element powinien wyglądać dla użytkowników ze zdrowym wzrokiem, może lepiej byłoby użyć po prostu nagłówka:
'II1uminating the beauty of life'
30
Rozdział 1. Najlepsze praktyki w XHTML i CSS Użycie nagłówka h4 jest uzasadnione, jeśli nad nim znajdują się trzy poziomy innych nagłówków w hierarchii dokumentu. Teraz klient wczytujący tę stronę rozpozna nagłówek i zinterpretuje go najlepiej, jak potrafi. Tworząc kod dobrze opisujący strukturę dokumentu, warto kierować się myślą, że dokument ten musi być zgodny z pewnym szkieletem — najważniejszy nagłówek powinien znajdować się na samej górze i być oznaczony znacznikiem hi. Pod nim znajdują się nagłówki h2, pod którymi są h3 itd. do h6. Jak widać, szkielet strony w całości zależy od projektanta. Zdecyduj się na określony model i trzymaj się go na wszystkich stronach witryny.
Tutaj widać, że odnośnik More znajduje się w akapicie — później zobaczysz, że łatwo można go przenieść do nowego wiersza przy użyciu CSS. A więc, mimo że odnośnik ten został umieszczony wewnątrz akapitu celowo, można też wybrać inne rozwiązanie.
Lepiej zapoznaj się z listami
nieuporządkowanymi
Jeśli chodzi o menu na górze strony, czym, jeśli nie listą odnośników, jest pasek nawigacyjny? Ciężkie menu nawigacyjne oparte na tabelach można zastąpić nieuporządkowaną listą. Każdy element takiej listy zawiera odnośnik do innej części witryny:
Przy użyciu języka JavaScript zagnieżdżone nieuporządkowane listy można łatwo zamienić w dynamiczne menu rozwijane. Jednym z najbardziej znanych przykładów tego typu skryptów obsługujących menu jest Son of Suckerfish (SoS) (www.htmldog.com/articles/suckerfish/ "-»•dropdowns), którego twórcami są Patrick Griffiths i Dan Webb. Skrypt SoS jest doskonałym przykładem tego, jak zachowanie (JavaScript) i styl (CSS) mogą bazować na podstawie tworzonej przez dobrze uformowany kod XHTML przy zachowaniu elegancji także w klientach nieobsługujących CSS lub JavaScript.
31
Rozdział 1. Najlepsze praktyki w XHTML i CSS Zrób bilans treści, nie grafiki Przede wszystkim sporządź inwentarz obszarów swojej strony, w których można umieszczać treść. Na stronie uniwersytetu Harvarda (rysunek 1.4) widać, że jej układ można rozłożyć na następujące czynniki: •
Nagłówek,
•
Nawigacja,
•
•
Główna,
•
Dodatkowa,
Treść, •
Główna,
•
Dodatkowa,
•
Stopka nawigacyjna,
•
Informacja o prawach autorskich.
i
Bu: IB cs ;
H a r v a r d
U n i v e r s i t y
• Admiłiionf & Financial Aid • impłoyment • Ubraras • Muttums • Am >residef*» • Admimstratfon • Scboois • Neighbors A Yuitcrs * Athłetics • Alumni • Search December 10,2007
Researekers al the Harvard Stern Celi Institute pursue science specifically tarected at curing some o f humankind s most terrible diseases.
SCHOOLS OF KA*VA*D
In Ołher News Admissions r o a d trip looks for top stodents
Continuing Cducation
i Eyeflts
• Research
a* Multimedia
Slow readinę tn dvslexia tied to disorganized brain tracts
B u n d
Abouł Harvard
• Direcłories
• Contact Us
• Info Tech
I R^ceotNew I RSS I <
•
News
Copyright C 2 0 0 7 The Presidcat and Fellows o f Haiysrd College
Rysunek 1.4. Cała strona główna uniwersytetu Harvarda
32
• Sife Guide
Rozdział 1. Najlepsze praktyki w XHTML i CSS W tych dwóch kolumnach można wyróżnić kolejne bloki z treścią, co zrobiono na rysunku 1.5. W kolumnie z główną treścią znajduje się dłuższy artykuł, lista odnośników do szkół oraz lista różnych innych odnośników. Większość drugiej kolumny została poświęcona wiadomościom. Pierwszy blok przedstawia ważniejsze wiadomości, a drugi inne, o mniejszej wadze.
a
Nagłówek
,rt»
Nawigacja
;h
Wiadomości
Artykuł
Lista szkół
Inne wiadomości
Różne odnośniki
WL
Stopka Prawa autorskie
Rysunek 1.5. Obszary treści na stronie głównej uniwersytetu Harvarda
Posługując się tą mapą treści strony, można przystąpić do opisywania jej przy użyciu kodu XHTML. Każdy obszar można oznaczyć znacznikiem di v z unikatowym identyfikatorem id. Ponadto w każdej kolumnie z treścią można zagnieździć dodatkowe elementy di v. Po tych zabiegach uzyskasz dokument XHTML, podobny do tego na rysunku 1.6. Każdy obszar z treścią jest odpowiednio oznaczony elementem div z identyfikatorem. Sposób zagnieżdżenia elementów odzwierciedla powiązania przedstawione w inwentarzu treści (rysunek 1.5).
33
Rozdział 1. Najlepsze praktyki w XHTML i CSS y id ="www -Harvard -edu" v id ="containeiJ" div id='*head" div id -"na» -top" 1'
1 1
div id="content" div id—"content-mam" div id ="featured-story"
dtv id ="school -listing" •eden' cŁass="ck- ar'* »
div td="footer*'
Rysunek 1.6. Szkic nowego dokumentu XHTML Na tym etapie kod XHTML jest czystą tablicą, na którą można nałożyć style. Użytkownicy niemogący zobaczyć stylów mają do dyspozycji dobrze uformowaną i łatwą do zrozumienia strukturę (rysunek 1.7). Do końca tej książki będziesz poznawać techniki pozwalające jak najlepiej umieścić warstwę prezentacyjną na fundamentach z dobrze uformowanego kodu XHTML.
CSS — dodawanie warstwy stylów Tak jak z wszystkimi językami, opanowanie CSS zależy od zapoznania się z jego składnią. Pozwala to nie tylko na uzyskanie biegłości w pisaniu arkuszy stylów, lecz również lepsze zrozumienie, w jaki sposób pisane przez Ciebie reguły interpretuje przeglądarka.
Lepiej zapoznaj się z selektorami Kod CSS składa się z reguł, które przeglądarka interpretuje i stosuje do odpowiednich elementów w dokumencie. Spójrz np. na rysunek 1.8.
Welcome to Harvard University (Standards style...) (pl of 2)
A
Skip navigation. * Home * Admissions & Financial Aid * Employment * Libraries * Museums * Arts * * * * * * *
President Administration Schools Campus Life Athłetics Alumni Search
Harvard Athłetics Image of female hockey players In 2004, the women's hockey team captured its sixth-straight Beanpot champ squad in the Boston area; Angela Ruggiero, who embraced the Beanpot after later named the 2004 recipient of the Patty Kazmaier Memoriał Award. The Schools of Harvard: * * * * * * * * * * * *
Co11ege/Gradua te Government Business Law Continuing Education Dental Design Medical Divinity Public Health Education Rade1 iffe Institute
m
* Events
Ł
Arrow keys: Up and Down to move. Right to folIow a link; Left to go bock. H)elp O)ptions P)rint G)o h)ain screen Q)uit /=search [delete]=history list
•
|
Rysunek 1.7. Widok poprawionej strony w przeglądarce Lynx
Selektor A
hl
Deklaracja
r
1
,
{ c o l o r : #36C; } ' i — " — r Własność
Wartość
Rysunek 1.8. Przykładowa reguła stylistyczna Każda reguła CSS składa się z tych dwóch części: selektora, informującego przeglądarkę, którego elementu dotyczy, oraz deklaracji, określającej, które własności elementu mają zostać zmodyfikowane. Na rysunku 1.8 widać, że na selektor składa się wszystko, co znajduje się przed pierwszą klamrą ({).
35
Rozdział 1. Najlepsze praktyki w XHTML i CSS Klamry otaczają blok deklaracji decydujący o działaniu całej reguły. Składa się on z przynajmniej jednej deklaracji oraz par własność-wartość określających sposób modyfikaq'i elementów wyznaczonych przez selektor. Na rysunku 1.8 własnością jest col or, a #36c jest jej wartością. Jeśli wydaje Ci się, że to jest proste, masz rację. Składnia CSS jest oparta na zdrowym rozsądku. To jednak tylko początek. Stosując te proste zasady, można tworzyć bardzo skomplikowane reguły pozwalające jeszcze lepiej kontrolować prezentację strony.
Selektor
typu
Wróćmy do prostej reguły modyfikującej nagłówek h 1: hl { color: #36C; } Jest to tzw. selektor typu, ponieważ instruuje przeglądarkę, żeby zastosowała tę regułę do wszystkich elementów wymienionego typu (w tym przypadku wszystkich elementów hl) i wyświetliła je w niebieskim kolorze. W tej właśnie chwili tysiące znaczników font wyzionęło dech i odeszło w niepamięć. Ciekawi Cię, co to jest, ta dziwna wartość #36C? Jest to skrócony zapis koloru w systemie szesnastkowym. W ten sposób można skracać wartości RGB, jeśli każda z par opisujących poszczególne komponenty składa się z takich samych wartości. A więc zamiast pisać I3366CC, możesz napisać #36C, ponieważ wartości składników czerwonego (33), zielonego (66) i niebieskiego (CC) składają się z dwóch takich samych znaków. Analogicznie można skrócić wartość IFFFFOO do #FF0, #000000 do #000 oraz #CC3300 do #C30 itd.
Selektor
uniwersalny
Inny selektor o znacznie szerszym zasięgu to selektor uniwersalny. Nie wybiera on tylko elementów określonego typu, a dopasowuje wszystkie elementy w ogóle. Ma postać gwiazdki, zwanej też często symbolem wieloznacznym: * { color: #000; } Powyższa reguła zamienia kolor treści w całym dokumencie na czarny. Proste, prawda? Takich reguł nie spotyka się jednak często, ponieważ zakres selektora uniwersalnego jest w wielu przypadkach zbyt szeroki. Ponadto istnieje kilka kwestii związanych z obsługą, które mogą wymusić dodatkowe testowanie. Później przedstawię kilka specyficznych zastosowań tego selektora.
Selektor
potomka
Wyobraź sobie, że masz poniższy kod XHTML:
Po prostu kocham wyróżnienie!
A Ty?!
36
Rozdział 1. Najlepsze praktyki w XHTML i CSS
0ch, rozumiem.
Nadal to kocham!
Domyślnie większość przeglądarek wyświetla zawartość elementu em kursywą. Ale co zrobić, jeśli masz ochotę trochę pozmieniać? Wyobraź sobie, że chcesz, aby zawartość wszystkich elementów em znajdujących się w elementach ul była pisana wielkimi literami. Wykorzystując zdobytą dotychczas wiedzę, możesz z użyciem selektora typu napisać regułę dopasowującą wszystkie elementy em: em { text-transform: uppercase;
) Jednak chcesz dopasować tylko te elementy em, które znajdują się w elementach ul — innymi słowy, elementy em w otwierającym akapicie nie powinny być modyfikowane przez tę regułę. Zwykłe użycie selektora em spowoduje dopasowanie wszystkich elementów tego typu, a więc trzeba napisać bardziej konkretny selektor: ul em {
)
text-transform: uppercase;
Na początku powyższej reguły znajduje się selektor potomka instruujący przeglądarkę, żeby „wybrała wszystkie elementy em będące potomkami elementów ul". Tak jak Ty jesteś dzieckiem swoich rodziców, jesteś też potomkiem swoich dziadków, pradziadków itd. W ten sposób powyższy styl zostałby zastosowany do każdego elementu em na każdym poziomie listy nieuporządkowanej. Co najważniejsze, reguła ta nie wybrałaby elementu em w otwierającym akapicie p, zgodnie z Twoimi intencjami. Zgoda, takie wystylizowanie elementu em nie zdarza się zbyt często. Zapamiętaj jednak, że selektory tego rodzaju umożliwiają bardzo precyzyjną kontrolę wyglądu strony. Jeśli kiedykolwiek będziesz potrzebował wyróżnienia określonej sekcji treści z globalnych reguł, dysponujesz już odpowiednim do tego celu narzędziem.
Selektor
klasy
Potrzebujesz jeszcze bardziej precyzyjnej kontroli? Arkusze stylów można związać z innymi aspektami strony. Pamiętasz atrybut cl ass użyty w przeróbce strony Harvarda? Wtedy posłużył do oznaczenia kategorii i tem elementów di v. Oto przykład użycia tego selektora: input.text { border: lpx solid #C00;
} Powyższy selektor pozwala dostać się do tych elementów, których atrybut cl ass ma wartość podaną po kropce. W tym przypadku powyższa reguła wybiera wszystkie elementy i nput z atrybutem cl ass ustawionym na text:
Przycisk zatwierdzający, który znajduje się na końcu formularza, pozostaje nietknięty, a reguła zostanie zastosowana do dwóch pól tekstowych, których atrybuty cl ass mają wartość text. Jeśli chcesz uogólnić selektor klasy, możesz usunąć to, co znajduje się przed kropką: .text { border: lpx solid #C00;
} Mimo że nie zdajesz sobie z tego sprawy, w tej regule został użyty selektor uniwersalny Można by ją było z takim samym skutkiem zapisać następująco: *.box { border: lpx solid #C00;
} Oba selektory działają tak samo: wybierają wszystkie elementy, których atrybut cl ass ma wartość text.
Selektor
identyfikatora
Podobnie jak selektor klasy, selektor identyfikatora pozwala wybrać element na podstawie wartości atrybutu id: hl#page-title { text-align: right;
} Podczas gdy w selektorze klasy używa się kropki, w selektorze identyfikatora korzysta się ze znaku #. Powyższa reguła wybiera elementy hl z atrybutem id mającym wartość taką samą jak tekst za znakiem #, czyli page-ti tl e. Również, tak jak w przypadku selektora klasy, i tu można używać niejawnego selektora uniwersalnego, opuszczając znacznik hl: #page-title { text-align: right;
} Jak to możliwe? Wartość atrybutu id musi być unikatowa w skali całego poprawnego dokumentu XHTML — żaden inny element w jego treści nie może mieć takiego samego atrybutu. Dlatego wiadomo, że żadna z tych reguł nie zostanie zastosowana do jakiegokolwiek innego elementu, dzięki czemu obie one dają taki sam rezultat.
38
Rozdział 1. Najlepsze praktyki w XHTML i CSS Możesz stwierdzić, że to nic wielkiego. Prawdziwa siła selektorów identyfikatora ujawnia się, gdy zostaną użyte jako podstawa selektorów potomka, jak poniżej: #content hZ { text-transform: uppercase;
} Tego rodzaju reguły są podstawowym budulcem skomplikowanych układów. Przy ich użyciu można tworzyć style, które doskonale rozpoznają swój kontekst. Powyższa reguła wybierze wszystkie elementy h2, które są potomkami elementu z identyfikatorem content. Wszystkie inne nagłówki drugiego stopnia pozostaną nietknięte.
Inne selektory W tym punkcie opiszę kilka innych selektorów wymienianych w specyfikami CSS. IV czasie pisania tego tekstu przeglądarka Microsoft Internet Explorer 6 dla Windows (MSIE 6/Win) nie obsługiwała tych selektorów. Inne przeglądarki natomiast radziły sobie z nimi bardzo dobrze (np. Internet Explorer 7, Firefox, Opera i Safari). Podczas gdy wiele z nich zostało wprowadzonych w CSS 2, przeglądarka MSIE 6/Win, delikatnie mówiąc, słabo radzi sobie z tą specyfikacją. Mimo że przeglądarka Internet Explorer 7 radzi sobie z tym bardzo dobrze i z czasem wyprze swoją poprzedniczkę, warto sprawdzić dzienniki swojej witryny przed zastosowaniem tych selektorów, aby dowiedzieć się, czy nie odwiedza jej wielu użytkowników korzystających ze starego oprogramowania.
Selektor
dziecka
Wcześniej opisałem reguły pozwalające zmienić wygląd wszystkich elementów będących potomkami jednego określonego elementu. Wyobraź sobie, że chcesz zmienić styl wszystkich akapitów w swoim dokumencie:
Jestem modelem...
Nowoczesnego sposobu pisania kodu.
Najlepiej się mnie uczyć już za młodu.
Aby tekst wszystkich akapitów był pogrubiony, można użyć jednej z poniższych reguł: P ( font-weight: bold; 1 lub body p { font-weight: bold;
}
39
Rozdział 1. Najlepsze praktyki w XHTML i CSS Obie dadzą taki sam efekt. Jak pisałem wcześniej, wybrałyby one wszystkie akapity znajdujące się w elemencie body, na każdym poziomie. Co jednak zrobić, aby ograniczyć zakres dopasowania do akapitów będących bezpośrednimi potomkami elementu body w hierarchii dokumentu? Trzeba użyć selektora dziecka: body>p { font-weight: bold;
} Znak większości (>) informuje klienta, aby regułę zastosował do wszystkich elementów p będących dziećmi elementu body, a nie ogólnie potomkami. W związku z tym, akapity znajdujące się w elementach di v zostałyby niezmienione, ponieważ są dziećmi tego elementu, a nie body. Natomiast akapity znajdujące się przed elementem di v i za nim zmieniłyby wygląd, ponieważ ich rodzicem jest element body.
Selektor
atrybutu
Aby umożliwić uniknięcie „przyprawiania" dokumentu zbyt dużą liczbą atrybutów cl ass, w specyfikacji CSS zdefiniowano selektory atrybutów. Pozwalają one tworzyć dopasowania w oparciu nie tylko o atrybut cl ass, ale także o inne atrybuty. Selektory atrybutów oznaczane są kwadratowymi nawiasami i mogą mieć jedną z czterech form wymienionych w poniższej tabeli. Składnia selektora atrybutu
Wynik
[x]
Dopasowanie, jeśli element ma określony atrybut x, bez względu na jego wartość.
[x=y]
Dopasowanie, jeśli atrybut x elementu ma wartość y.
[x~=y]
Dopasowanie, jeśli wartość atrybutu x elementu jest rozdzielaną spacjami listą słów, z których jedno to y.
[x | =y]
Dopasowanie, jeśli wartość atrybutu x elementu jest listą słów oddzielanych myślnikami, z których pierwsze to y.
Wydaje się nieco skomplikowane? Poniższa tabela zawiera kilka przykładów użycia tych selektorów oraz opis elementów, które zostałyby przez nie wybrane. Selektor
Znaczenie
Co wybierze?
Czego nie wybierze?
pflang]
W y b i e r a wszystkie elementy p z atrybutem lang.
Wybiera wszystkie elementy p, których atrybut 1 ang
p[lang="fr"]
m a wartość f r.
40
Rozdział 1. Najlepsze praktyki w XHTML i CSS Selektor
Znaczenie
Co wybierze?
Czego nie wybierze?
p[lang~="fr"]
Wybiera wszystkie elementy p, których atrybut 1 ang zawiera słowo fr.
p[lang|="en"]
Wybiera wszystkie elementy p, których atrybut 1 ang zawiera wartość en lub zaczynającą się od en-.
Potencjalne zastosowania tych selektorów są — delikatnie mówiąc — fascynujące. Przy użyciu zaprezentowanego wcześniej formularza praca z nimi stała się znacznie łatwiejsza.