CSS (ang. Cascading Style Sheets) czyli kaskadowe arkusze stylów
Transkrypt
CSS (ang. Cascading Style Sheets) czyli kaskadowe arkusze stylów
krzysztof moszczyński http://ci.swps.pl/ http://pk.uni.wroc.pl/ CSS (ang. Cascading Style Sheets) czyli kaskadowe arkusze stylów to Utwórz dokument XHTML 1.0, np. w oparciu o poniższe źródło: język, który służy do prezentacji m.in. elementów HTML, XHTML. CSS służy odseparowaniu treści/znaczenia zawartego w HTML, XHTML od <?xml version="1.0" encoding="utf-8"?> formy. Takie rozwiązanie ma wiele zalet. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> Stosowanie CSS i HTML/XHTML według wytycznych konsorcjum W3 poprawia 'uniwersalności' kodu HTML/XHTML. Kod HTML/XHTML <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pl" pozbawiony informacji o formatowaniu jest mniejszy, spójny, posiada lang="pl"> <head> znaczenie (tzw. kod semantyczny), łatwiej go interpretować. Te cechy są o <meta http-equiv="Content-type" tyle istotne, iż coraz częściej do przeglądania stron internetowych służą content="text/html;charset=UTF-8" /> różne platformy, choćby urządzenia przenośne, które dysponują własnymi <title>tytuł</title> przeglądarkami (ang. smartphone). </head> CSS umożliwia globalne i automatyczne formatowanie całych serwisów <body> internetowych, przez co zmiany wyglądu mogą być wprowadzane <p>to jest dowolna treść akapitu a obok znajduje się stosunkowo szybko i są mniej pracochłonne. <a href="#">odsyłacz</a></p> </body> CSS jest rozwijany od połowy lat 90-tych i do dziś (tj. do 2010 roku) </html> doczekał się wersji: 1.0, 2.0, 2.1. Obecnie trwają prace nad wersją 3.0. Niniejszy kurs operuje przykładami CSS w wersji 2.0 oraz dokumentem XHTML 1.0 według specyfikacji konsorcjum W3. Przykłady są realizowane w darmowym edytorze Notepad ++. Szczegóły instalacji i pracy znajdziesz w kursie XHTML. 1 krzysztof moszczyński http://ci.swps.pl/ http://pk.uni.wroc.pl/ W Notepad++ zapisz ten dokument jako html tak aby otrzymać Gdy odsyłacz zostanie zatwierdzony/'kliknięty', a lokalizacja do której rozpoznawanie i interpretowanie składni języka: odsyła zostanie odwiedzona, odsyłacz będzie wyświetlony przy pomocy czcionki w kolorze zbliżonym do fioletowego. Pomimo że nie deklarowaliśmy obu kolorów, automatycznie się pojawiły. Za te domyślne formy prezentacji odsyłaczy odpowiada CSS przeglądarki, który określany jest jako styl przeglądarki (ang. browser style). Większość Zapisz zmiany i otwórz projekt w przeglądarce internetowej: producentów przeglądarek umożliwia własne ustawienia np. kolorów czy krojów domyślnych czcionek poprzez odpowiednie menu. Te operacje to de facto modyfikacja ustawień fabrycznych CSS przeglądarek. Gdy CSS przeglądarki zostanie zmieniony i zastąpiony własnymi ustawieniami nazywany jest stylem użytkownika (ang. user style). Odsyłacz jest wyświetlony przy pomocy niebieskiej czcionki. 2 krzysztof moszczyński http://ci.swps.pl/ http://pk.uni.wroc.pl/ Jak 'świadomie' tworzyć CSS, tak aby wpływać na prezentację/wygląd A oto i efekt zmian: tworzonych stron internetowych? Aby odpowiedzieć na to pytanie w pierwszej kolejności warto zwrócić uwagę na składnię języka CSS i sposób jej stosowania. CSS załączony Do stworzonego dokumentu XHTML dodamy/załączymy CSS. Miejscem załączenia CSS jest część head. Zmodyfikuj dokument dodając poniższą frazę (przed końcem części head): Tekst w akapicie (znacznik HTML <p>, czyli ang. paragraph) jest <style type="text/css"> wyświetlany czcionką szarą. Dlaczego? p {color: #999999;} </style> W składni CSS odnieśliśmy się do znacznika <p> Źródło dokumentu powinno wyglądać np. jak niżej: p {color: #999999;} Takie odniesienie do znacznika/elementu HTML w CSS nazywamy selektorem. Innymi słowy w CSS określiliśmy selektor p. Pojęcie selektor 'zaznacza/wybiera' i formatuje określony element HTML. Selektor zawiera cechę lub cechy, które otoczone są klamrą. W omawianym przykładzie cechą jest kolor: p {color 3 krzysztof moszczyński http://ci.swps.pl/ http://pk.uni.wroc.pl/ Cecha powinna zawierać po nazwie dwukropek i wartość, np. powinniśmy Aby sprawdzić przypiszmy jeszcze jedną wartość selektorowi p, tak aby sprecyzować kolor: zwiększyć czcionkę: p {color: #999999} Wartość #999999 wyraża natężenie trzech składowych: RGB (ang. Red Green Blue). Każda ze składowych kodowana jest przez 2 miejsca w A oto i rezultat: kodzie 16-stkowym (ang. hexadecimal code). Zawarte w klamrach cechy i ich wartości powinny być odseparowane średnikiem. Dobrą praktyka jest stosowanie średnika, nawet gdy posiadamy tylko jedną cechę i wartość: p {color: #999999;} Zatem schemat składni można uogólnić: selektor {cecha: wartość;} Zauważ, iż powiększyła się nie tylko czcionka frazy, ale i odsyłacza. lub Dlaczego? Ponieważ w kodzie HTML odsyłacz jest zawarty wewnątrz selektor {cecha1: wartość1; cecha2: wartość2;} elementu p. Czasami, aby zwiększyć przejrzystość kodu spotyka się formę: selektor { cecha1: wartość1; Prze tę hierarchię i przez CSS odsyłacz dziedziczy cechy akapitu (jednak cecha2: wartość2; nie wszystkie). } 4 krzysztof moszczyński http://ci.swps.pl/ http://pk.uni.wroc.pl/ Ta właściwość CSS nazywana jest dziedziczeniem. Można ja stosować Aby w pełni wykorzystać możliwości CSS potrzebna jest znajomość m.in. znacznie szerzej, np. pod pierwszym akapitem dodaj drugi akapit: możliwych cech i ich wartości. Te informacje konsorcjum W3 przedstawia na stronach: http://www.w3schools.com/css/ Jeżeli chcesz sprawdzić poprawność własnego arkusza odwiedź adres: http://jigsaw.w3.org/css-validator/ Dla zainteresowanych: http://www.w3.org/Style/CSS/ - pod tym adresem znajdziesz dokumentację i specyfikację CSS Zewnętrzne arkusze CSS Powszechnie stosowaną praktyką jest oddzielenie kodu CSS i HTML/XHTML. W pierwszej kolejność usuń z części head poniższą deklarację CSS: <head> <meta http-equiv="Content-type" content="text/html;charset=UTF-8" /> <title>tytuł</title> <style type="text/css"> Zatem reguła dziedziczenia dotyczy każdego akapitu. W ten prosty sposób p {color: #999999; font-size:2em;} (przy pomocy zaledwie kliku deklaracji) można sformatować wszystkie </style> akapity w serwisie internetowym. </head> 5 krzysztof moszczyński http://ci.swps.pl/ http://pk.uni.wroc.pl/ W Notepad++ utwórz (File/New lub Ctrl+N) drugi dokument. Wprowadź Nawet po wprowadzeniu zmian i zapisaniu arkusza CSS, modyfikacje nie tylko tę frazę: będą widoczne w przeglądarce internetowej. p {color: #999999; font-size:2em;} Zmodyfikuj rozmiar i kolor Następnie, w tej samej lokalizacji/folderze co plik HTML, zapisz nowo utworzony dokument jako arkusz CSS: Dlaczego? Ponieważ dokument XHTML 'nie wie nic' o nowo powstałym arkuszu CSS. Nie ma między tymi dokumentami powiązania. Fraza, która 'dowiąże' arkusz CSS powinna się znaleźć z część head dokumentu XHTML: Poprawnie wykonana operacja spowoduje powstanie dwóch plików: <link rel="stylesheet" type="text/css" href="styl.css" media="all" /> i dwóch zakładek: Sprawdź czy ta fraza przyniosła pożądany rezultat. 6 krzysztof moszczyński http://ci.swps.pl/ http://pk.uni.wroc.pl/ Użyta fraza zawiera atrybuty: rel, type, href, media. Sprawdź na Prawdopodobnie posiadasz podobną strukturę plików: stronach konsorcjum W3 (http://www.w3schools.com/tags/) jakie te Jest powiązanie między dokumentem atrybuty pełnia funkcje i jakie mogą przyjmować wartości. index.html i styl.css (jaka fraza za to powiązanie odpowiada?). Dyskutowane wyżej rozwiązanie określane jest jako 'linked style'. W części head można użyć więcej niż jeden zewnętrzny arkusz CSS, np.: Jednak styl.css jest pusty. Natomiast informacje o formatowaniu zawierają pliki czcionki.css i kolory.css. czcionki.css i kolory.css nie mają jednak powiązań z pozostałymi plikami. Zewnętrzne arkusze CSS - importowanie Jak to zmienić. Wystarczy do pliku styl.css zaimportować pliki: W przypadku dużych serwisów internetowych i skomplikowanego czcionki.css i kolory.css. Do tego celu służy fraza: stylizowania często style CSS 'rozbija się' na pojedyncze pliki, tak aby @import url(dowlony_plik.css); łatwo można było strukturalizować formatowanie i organizować pracę. Styl lokalny Stwórz w tej samej lokalizacji co poprzednie pliki arkusze CSS: Styl ten określany jako 'inline style' stosowany bezpośrednio jest w źródle czcionki.css i kolory.css. Następnie wytnij zawartość pliku styl.css i XHTML: wklej do pliku czcionki.css. W pliku kolory.css dodaj poniższą treść: <p style=”color: #999999; font-size: 2em;”>treść</p> body {background-color: #6d8fe3;} Zapisz zmiany i w przeglądarce przeładuj dokument XHTML. Dlaczego nie Jednak z uwagi na specyfikację Strict XHTML 1.0 (patrz kurs XHTML) działa? 'inline style' nie znajduje zastosowania. Zastanów się dlaczego? 7 krzysztof moszczyński http://ci.swps.pl/ http://pk.uni.wroc.pl/ <head> Selektory <meta http-equiv="Content-type" Selektor atrybutów content="text/html;charset=UTF-8" /> W CSS występuje kilka typów selektorów <title>tytuł</title> (http://webmaster.helion.pl/index.php/selektory/6/145-wprowadzenie-do- </head> selektorow). <body> Pierwszym typem (str.3) był selektor elementu p, a jego zastosowanie formatowało każdy element p, tzn. każdy akapit. Zdecydowana większość </body> elementów może posiadać atrybuty. Zestaw wspólnych atrybutów (ang. </html> core atributes) podany jest na stronach konsorcjum W3 (http://www.w3schools.com/tags/ref_standardattributes.asp). Ten zestaw Zapisz dokument jako index.html. Zostaw/utwórz arkusz styl.css, wspólnych atrybutów można zastosować do formatowania w CSS. Do tego pozostałe dokumenty css usuń. Przypisz plikowi index.html odwołanie do właśnie służy selektor atrybutów, a w tym przykładzie jako atrybutu zewnętrznego arkusza styl.css. użyjemy tytułu (title) (uwaga: chodzi o atrybut title, który Uzupełnij arkusz styl.css np. poniższą frazą: przypisywany jest elementom, a nie o element title, który pojawia się w części head dokumentu XHTML/HTML). Utwórz dokument XHTML 1.0, np. w oparciu o poniższe źródło: <?xml version="1.0" encoding="utf-8"?> Zapisz zmiany i przeładuj projekt w przeglądarce. Sprawdź poprawność <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" utworzonego kodu za pomocą walidatora HTML(kurs XHTML, str. 6-7) i CSS (str. 5). "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pl" lang="pl"> 8 krzysztof moszczyński http://ci.swps.pl/ http://pk.uni.wroc.pl/ W treści dokumentu umieść wykaz nieuporządkowany, który będzie zawierał 5 odsyłaczy o dowolnych adresach/odwołaniach i nazwach (konstrukcja wykazów nieuporządkowanych: kurs XHTML, str. 25-26, 35). Ponadto dwa akapity z dowolną treścią. Nadaj wykazowi nieuporządkowanemu i jednemu z akapitów dwa różne tytuły (atrybut title). Wykorzystajmy teraz w styl.css zdefiniowany w index.html atrybut title. Oto rezultat (zauważ, że odsyłacze nie zmieniły koloru): Ta deklaracja spowodowała, że każdy element, który zawiera atrybut tilte będzie formatowany w określony sposób. 9 krzysztof moszczyński http://ci.swps.pl/ http://pk.uni.wroc.pl/ Czas na precyzyjniejszą definicję w CSS. Odwołajmy się do konkretnego Selektor – identyfikator elementu, który ma atrybut title: Analizując wspólny dla większości znaczników/elementów zestaw atrybutów można m.in. spotkać atrybut id (identyfikator). Identyfikatory wraz ze elementami div (kurs XHTML, str. 27) stanowią podstawowe Tym razem zostały wybrane tylko akapity. narzędzie budowania layout współczesnych dokumentów internetowych. Selektory są unikatowe, tzn. w jednym dokumencie mogą zostać użyte Można również odwołać się do tytułu o określonej wartości (w przypadku tylko raz. wątpliwości zobacz kod xhtml ze strony 9): W kodzie XHTML identyfikator jest definiowany jak niżej: <div id="container"> dowolna treść Zadanie 1 </div> Stwórz selektor w arkuszu CSS dla wykazu nieuporządkowanego Warto podkreślić, że podobnie jak miało to miejsce w przypadku wartości powołując się na jego tytuł i wartość tego tytułu. atrybutu title, wartość id może być ciągiem znaków (najlepiej unikać stosowania znaków diaktrycznych). W kodzie CSS odwołanie do identyfikatora 'container' może wyglądać tak: #container {} Aby poprawnie odwołać się, pamiętaj o wielkości liter - zdecydowana większość przeglądarek rozpoznaje i odróżnia wielkość liter dla wartość. 10 krzysztof moszczyński http://ci.swps.pl/ http://pk.uni.wroc.pl/ Usuń w kodzie XHTML wcześniej zadeklarowane atrybuty title. Otocz Aby dostrzec te zmiany zainstaluj w przeglądarce firefox dodatek Web całą treść zawartą w części body elementem div (tzw. blok dokumentu) i Developer. Wpisz tę nazwę przypisz temu elementowi identyfikator: jako hasło w wyszukiwarce, odwiedź pierwszy odsyłacz, zatwierdź instalację, a następnie zrestartuj przeglądarkę. Efekt instalacji to niewielki, ale bardzo pożyteczny pasek na górze (dostępny również z menu Narzędzia/Web Developer): Zapisz zmiany i przeładuj projekt w przeglądarce. Wybierz z tego paska Nie wygląda, aby cokolwiek się zmieniło. Jak zatem działa blok dokumentu Zaznacz/Elementy – element div? blokowe 11 krzysztof moszczyński http://ci.swps.pl/ http://pk.uni.wroc.pl/ Rezultat tej operacji może wyglądać jak niżej: CSS umożliwia, aby blok dokumentu 'container' faktycznie był 'kontenerem'. margin:auto pozwala na wyśrodkowanie; width określa szerokość za pomocą różnych jednostek (tu w pikselach), określ szerokość w procentach Selektor – klasa Zielonym kolorem został zaznaczony wykaz, czerwonym akapity, a blok W przeciwieństwie do identyfikatorów, dokumentu (w moim przypadku o identyfikatorze 'container') został klasy można i należy używać wielokrotnie zaznaczony kolorem niebieskim. w jednym dokumencie. Praca z klasami może odrobinę przypominać pracę ze Skoro już 'zidentyfikowaliśmy' miejsce bloku dokumentu 'container' czas na stylami w edytorach tekstu (np. panel w jego formatowanie. Uzupełnij arkusz CSS jak np. niżej: MS Word 2007 ). Style w edytorach tekstu mają znacznie (np. Nagłówek 1) i mogą być w różny sposób formatowane. Gdy zmienimy w panelu np. format Nagłówka 1, wszystkie Zapisz zmiany i sprawdź. elementy zadeklarowane wcześniej w tym stylu ulegną zmianie. 12 krzysztof moszczyński http://ci.swps.pl/ http://pk.uni.wroc.pl/ W XHTML za deklarację klasy odpowiada atrybut class. Podobnie jak id, Można jednak sprecyzować formatowanie, np.: class należy do 'core atributes', a jego zastosowanie może wyglądać jak p.normal {font-weight: bold;} poniżej: Sprawdź efekt. <p class=”normal”>dowolna treść</p> Tym razem odnosimy się do wszystkich akapitów, które posiadają klasę .normal. Z kolei w CSS odwołanie do klasy wygląda np. tak: .normal {font-weight: bold;} Zachowaj projekt jako 1.html i 1.css! W ramach eksperymentów zmodyfikuj wcześniejszy kod, tak aby wykazowi nieuporządkowanemu i jednemu z akapitów nadać tę sama klasę. Następnie zadeklaruj klasę w CSS (np. w oparciu o w/w składnię dla klasy .normal). Zapisz zmiany i sprawdź efekt. W tym wypadku zarówno wykaz nieuporządkowany jak i akapit zostały podobnie sformatowane (np. czcionka pogrubiona). Decyduje o tym wyrażenie: .normal {font-weight: bold;} tzn. każdy element opatrzony klasą .normal będzie pisany czcionką pogrubioną. To dość ogólne. 13 krzysztof moszczyński http://ci.swps.pl/ http://pk.uni.wroc.pl/ Przy stosowaniu, klasy można ze sobą łączyć. Stosowanie klas 'Semantyczny' XHTML i 'logiczny/hierarchiczny' CSS to nie tylko standardy, ale przede wszystkimi łatwość administracji. Takie podejście powoduje, że dokumenty zawierają mniej kodu, mają więc mniejszy rozmiar, a co za tym idzie skraca się czas potrzebny na ich załadowanie. Dość teorii, czas na antyprzykład. Znając klasy trudno oprzeć się pokusie, aby ich nie nadużyć. Łatwo wpaść w pułapkę precyzyjnego 'zaklasowania' elementów. Chcemy, aby każdy akapit w serwisie zawierał pewne atrybuty (np. czcionkę pogrubioną). Czy w takim wypadku musimy uciekać się do Zwróć uwagę, że wykaz nieuporządkowany ma przypisane dwie klasy: poniższego: normal i navi. Ponadto drugi akapit ma przypisaną klasę normal. <p class="normal">to jest pierwszy akapit o mnie</p> <p class="normal">a to drugi akapit, w którym Zdefiniujmy z CSS obie klasy: dla odmiany bezpośrednio odniosę się do siebie</p> Zaproponuj rozwiązanie Jaki jest efekt zmian? 14 krzysztof moszczyński http://ci.swps.pl/ http://pk.uni.wroc.pl/ Zauważ, że obie klasy mają te same właściwości. W takim przypadku Grupowanie selektorów możemy zgrupować klasy, oddzielając je od siebie przecinkiem: Zmodyfikuj/stwórz nowy dokument XHTML, tak aby jego treść zawierała podobne elementy: Zadanie 2 Stwórz kilka akapitów, przypisz im różne klasy. Za pomocą portalu http://www.typetester.org/ skonfiguruj dla każdej z klas właściwości. Postaraj się aby część właściwości pokrywała się dla części klas. Wygeneruj kod CSS (opcja Get CSS for:) i wklej go do własnego arkusza CSS. Za pomocą metody grupowania zaproponuj skrócenie kodu CSS. Dodaj w pierwszym wierszu do arkusza CSS: Przypisz w zewnętrznym arkuszu CSS właściwości dla tych klas: Zapisz projekt i sprawdź zmiany w przeglądarce. Zmień dowolnie właściwość font-size dla selektora body. Jakie zmiany Zapisz projekt, sprawdź poprawność XHMTL i CSS, otwórz dokument w zaszły? Jaka jest relacja między właściwością font-size dla selektora przeglądarce. body wyrażoną w jednostkach px (piksele), a właściwością font-size dla klas wyrażoną w jednostkach względnych em? 15 krzysztof moszczyński http://ci.swps.pl/ http://pk.uni.wroc.pl/ Zauważ, że poza blokiem dokumentu 'container' został umieszczony inny Dziedziczenie element blokowy – akapit (wiadomości na temat elementów blokowych i W zrozumieniu działania CSS kluczowe znaczenie ma struktura liniowych znajdziesz w kursie XHTML, str. 22, str. 28). Z kolei akapit XHTML/HTML. Zmodyfikuj/utwórz kod CSS jak niżej: zawiera element liniowy – odsyłacz (wiadomości na temat odsyłaczy znajdziesz w kursie XHTML, str. 30). Ponieważ dodany akapit jest 'wydzielony' (poza blokiem 'container') nie dotyczą go reguły formatowania zawarte w arkuszu CSS. Zmodyfikuj/utwórz kod XHTML jak niżej: Przenieś akapit, tak aby znalazł się wewnątrz bloku dokumentu 'container'. Zapisz i sprawdź zmiany, sprawdź poprawność kodu przy pomocy walidatora. 16 krzysztof moszczyński http://ci.swps.pl/ http://pk.uni.wroc.pl/ O ile cała operacja zakończyła się powodzeniem, rezultat zmian powinien Element head jest 'rodzicem' dla trójki 'dzieci' – elementów: meta, title, być podobny do poniższego: link. Innymi słowy elementy meta, title, link są dziećmi elementu head. Jednak elementy meta, title, link nie są dziećmi elementu html, ale są potomkami (ang. descendant) elementu html! Z kolei element html jest przodkiem (ang. ancestor) dla elementów meta, title, link. Styl pozostał ten sam, ale wygląd akapitu uległ zmianie, ponieważ zmienił się kod XHTML - akapit znalazł się wewnątrz bloku dokumentu 'container' i Jeżeli więc jeden z elementów jest nadrzędny, a drugi podrzędny i oba odziedziczył pewne właściwości (np. margines). Aby zrozumieć dlaczego elementy sąsiadują bezpośrednio ze sobą, to relacje między nimi można doszło do tych zmian warto przeanalizować kod XHTML i relacje jakie określić jako rodzic-dziecko. Jeżeli jeden z elementów jest nadrzędny, a występują pomiędzy poszczególnymi elementami. drugi podrzędny, ale elementy nie sąsiadują bezpośrednio ze sobą, to relacje między nimi można określić jako przodek-potomek. Element html (ang. root element) jest 'rodzicem' (ang. parent) dla dwójki 'dzieci' (ang. child): elementu head i elementu body. 17 krzysztof moszczyński http://ci.swps.pl/ http://pk.uni.wroc.pl/ Ostatnią możliwością jest przypadek, gdy elementy nie są od siebie Znając zasadę dziedziczenia i strukturę kodu łatwo zrozumieć wygląd zależne (nadrzędno-podrzędne), ale są na tym samym poziomie akapitu, który został przeniesiony do bloku dokumentu 'container'. ('partnersko'?). Przykładem może być relacja między elementami li Zadanie 4 wewnątrz wykazu nieuporządkowanego: Przenieś ten akapit tak, aby był rodzeństwem dla bloku dokumentu 'container'. Zapisz i sprawdź zmiany, sprawdź poprawność kodu przy pomocy walidatora. Dziedziczenie – specyficzność. Te elementy są dla siebie 'rodzeństwem' (ang. sibling). Znajomość zasady dziedziczenia pozwala na precyzyjne wskazywanie elementów poprzez odpowiednie konstruowanie selektorów CSS. Zadanie 3 W oparciu o źródło na str. 16 ustal relacje między: – blokiem dokumentu 'container' i elementem body; – blokiem dokumentu 'container' i elementem ul; – blokiem dokumentu 'container' i elementami li; – elementami akapitów o klasach first i second i wykazem Poniższy przykład oparty jest na kodzie XHTML otrzymanym w Zadaniu 4. Zmodyfikuj/utwórz arkusz CSS jak poniżej nieuporządkowanym. Zauważ, że ostatni wiersz został zakomentowany przy pomocy wyrażeń /* Zachowaj odpowiedzi w pliku tekstowym o dowolnej nazwie. oraz */. Komentarz powoduje zignorowanie objętego nim kodu. 18 krzysztof moszczyński http://ci.swps.pl/ http://pk.uni.wroc.pl/ Zadanie 5 Dodaj na dole arkusza CSS poniższą frazę: Na podstawie reguły specyficzności zbuduj w CSS selektory dla odsyłaczy w taki sposób, aby odsyłacze w menu (o mnie, o mnie znów itd.) różniły się Zapisz i sprawdź zmiany, sprawdź poprawność kodu XHTML i CSS przy wyglądem od odsyłacza w akapicie. Zapisz i sprawdź zmiany, sprawdź pomocy walidatora. poprawność kodu XHTML i CSS przy pomocy walidatora. Zachowaj projekt. Powyższa deklaracja jest na tyle ogólna, że dotyczy każdego akapitu. W jaki sposób określić tylko akapity, które są zawarte w elemencie o Podsumowując zasadę specyficzności warto zwrócić uwagę na pewną identyfikatorze 'container'? subtelność, która może powodować błędy, szczególnie przy stawianiu pierwszych kroków z CSS. Zmodyfikuj arkusz CSS jak poniżej: W arkuszu CSS na początku frazy w piątym wierszu: #container p {font-family: Arial; ...} dodaj wyrażenie div jak poniżej: div#container p {font-family: Arial; ...} Zapisz i sprawdź zmiany, sprawdź poprawność kodu XHTML i CSS przy pomocy walidatora. Zapisz i sprawdź zmiany. 19 krzysztof moszczyński http://ci.swps.pl/ http://pk.uni.wroc.pl/ Dlaczego nic się nie zmieniło? Ponieważ składnia: Tym razem składnię: div#container p {font-family: Arial; ...} div #container p {font-family: Arial; ...} oznacza: należy przetłumaczyć: „dla akapitu (selektor p), który zawarty jest w bloku dokumentu (selektor „dla akapitu (selektor p), zawartego w dowolnym elemencie o znacznika div) o identyfikatorze 'container' (selektor #container) identyfikatorze 'container' (selektor #container), który to element zawarty przypisz następujące właściwości” jest w bloku dokumentu (selektor div ) przypisz następujące właściwości” Innymi słowy w XHTML spodziewamy się następującej relacji elementów: Tym razem w XHTML spodziewamy się zupełnie innej relacji elementów: <div id=”container”> <p>cokolwiek</p> </div> <div> <element id=”container”> <p>cokolwiek</p> </element> </div> rodzic dla p dziecko div rodzic dla element, przodek dla p dziecko div, rodzic dla p dziecko element, potomek div Wstaw teraz spację jak poniżej: div #container p {font-family: Arial; ...} Zadanie 6 Zapisz i sprawdź zmiany. Rezultat w przeglądarce wskazuje, że Pozostaw w arkuszu CSS składnię: skonstruowany selektor CSS nie odnosi się do żadnego z elementów w div #container p {font-family: Arial; ...} kodzie XHTML. Dlaczego? Ponieważ wprowadzenie spacji zupełnie Zmodyfikuj kod XHTML tak aby selektor zadziałał. Zapisz i sprawdź zmienia sens (to właśnie ta subtelność!). zmiany, sprawdź poprawność kodu XHTML i CSS przy pomocy walidatora. Zachowaj projekt. 20 krzysztof moszczyński http://ci.swps.pl/ http://pk.uni.wroc.pl/ Utwórz/zmodyfikuj kod CSS aby wyglądał jak poniżej: Konflikty Podczas tworzenia arkusza CSS często dochodzi do powstawania konfliktów, czyli deklaracji które są ze sobą sprzeczne. Utwórz/zmodyfikuj kod XHTML aby wyglądał jak poniżej: Czas wywołać konflikt! Zmodyfikuj arkusz CSS aby wyglądał jako poniżej: Zauważ, że wiersz 3 i 4 zawiera selektor określający właściwości tego samego elementu – p. Jednak deklaracje te są różne. Powstaje więc pytanie, który z selektorów p jest 'aktualny'. Sprawdź to. 21 krzysztof moszczyński http://ci.swps.pl/ http://pk.uni.wroc.pl/ W przypadku konfliktu ten selektor 'wygrywa', który jest niżej, 'bliżej' źródła Zauważ, że pomimo arkusza CSS (w postaci jak na górze tej strony) dokumentu XHTML/HTML. Jest to konsekwencja 'kaskadowości' arkuszy wprowadzony w kod XHTML/HTML styl 'zwyciężył'. Taki styl nosi nazwę stylów. Aby się o tym przekonać możesz zamienić selektory miejscami: 'inline style', a jego stosowanie jest powszechnie odradzane ponieważ złamana jest podstawowa reguła separacji treści i formy. Dlatego też zastosowany w tym przykładzie 'inline style' został użyty jedynie do celów dydaktycznych. Usuń 'inline style' ze źródła. Oczywiście przedstawiony konflikt jest jawny i do tego banalny. Jednak podczas projektowania złożonego arkusza CSS konflikty mogą być Innym sposobem na rozwiązywanie konfliktów jest reguła specyficzności, znacznie bardziej skomplikowane konflikty, a ten kto potrafi rozwiązywać tzn. precyzowanie selektorów. Zmodyfikuj arkusz CSS jak poniżej: konflikty panuje nad CSS. Istnieje kilka sposobów na rozwiązywanie konfliktów. Pierwszym jest skorzystanie z zasady 'kaskadowości' i wprowadzenie stylu, który jest 'jeszcze' bliżej źródła bezpośrednio w kod XHTML/HTML. Zmodyfikuj Zastosowaliśmy precyzyjne selektory i zgrupowaliśmy (str. 15 i 16). W ten źródło jak poniżej: sposób każdy akapit, któremu przypisana jest klasa 'first' i 'second' będzie formatowany w określony sposób. Przytoczony przykład może Cie jednak nie przekonać ponieważ Zapisz i sprawdź zmiany. formatowanie może nie wynikać ze specyficzności ale z kolejności/'kaskadowości' stylów (patrz lewa kolumna). W takim wypadku zamieńmy kolejność: Zapisz i sprawdź zmiany. 22 krzysztof moszczyński http://ci.swps.pl/ http://pk.uni.wroc.pl/ Specyficzność selektorów CSS można wyrazić za pomocą 4 liczb. Dla Co oznaczają pozostałe pozycje opisujące specyficzność? przykładu deklarację: można wyrazić jako 0,0,0,1 Ostatnia pozycja (w tym wypadku 1) określa liczbę elementów do jakich się odnosimy. Zmodyfikuj arkusz CSS jak poniżej: Rozpatrzmy jeszcze jedno rozwiązanie przy pomocy zasady specyficzności: Efekt tej zmiany jest przewidywalny – wszystkie akapity będą pisane domyślną dla systemu operacyjnego czcionką szeryfową o rozmiarze 2 Dla selektora w wierszu 3 specyficzność można opisać liczbami: 0,0,0,2 em. Jednak gdy ten kod zmodyfikujemy ja poniżej: Dla selektora w wierszu 4 specyficzność można opisać liczbami: 0,0,1,1 (mamy tu przypadek 1 klasy -'first' i jednego elementu – p). Liczba 0,0,1,1 efekt będzie inny. Dlaczego selektory w wierszu 3 są ważniejsze, bardziej jest 'większa' od 0,0,0,2, dlatego też akapit z klasą 'first' będzie miał inne specyficzne? Dlatego, że ich opis za pomocą liczb wygląda następująco: formatowanie niż pozostałe akapity zawarte w elemencie body. 0,0,0,2 Wartość 2 wskazuje, że tym razem określiliśmy 2 elementy. Wartość 0,0,0,2 dla wiersza 3 jest 'większa' od wartości 0,0,0,1 dla wiersza 4 i dlatego też 'wygrywa' konflikt. 23 krzysztof moszczyński http://ci.swps.pl/ http://pk.uni.wroc.pl/ Zadanie 7 Konflikty – diagnoza W oparciu o źródło XHTML (podane na stronie 21) oraz arkusz CSS: Zmodyfikuj kod XHTML (str. 31) tak aby w części head zagnieździć styl: a) dla elementu p stwórz 2 selektory, których specyficzność można opisać Zmodyfikuj zewnętrzny arkusz CSS (według powyższe źródła ten arkusz liczbami: 0,0,0,3 i 0,0,1,2. zawarty jest w pliku styl.css) jak poniżej: b) dla elementu p, stwórz 2 selektory, których specyficzność można opisać liczbami: 0,1,1,1 oraz 0,1,1,3; dla obu selektorów powołaj się na tę samą klasę Zapisz i sprawdź zmiany. Według stylu zawartego w XHTML wszystkie akapity powinny być pisane czcionką pogrubioną Arial o rozmiarze 1em, podczas gdy według kodu CSS wszystkie akapity zawarte w części body powinny być pisane domyślą, pogrubioną czcionką szeryfową o rozmiarze 2em. Oczywiście 'wygrywa' selektor zawarty w zewnętrznym arkuszu (body p) ponieważ jego specyficzność wynosi 0,0,0,2, podczas gdy selektor (p) zawarty w stylu w kodzie XHTML ma specyficzność 0,0,0,1. Załóżmy jednak, że nie pamiętamy o zewnętrznym arkuszu stylów. Wszelkie zmiany wprowadzone w zawartym w kodzie XHTML stylu nie będą przynosiły 24 krzysztof moszczyński http://ci.swps.pl/ http://pk.uni.wroc.pl/ rezultatu, co nierzadko jest frustrujące. Aby zbadać czy omawiana sytuacja Często taki błąd trudno zauważyć. Jeżeli więc zastosujemy frazę nie wynika z konfliktu można użyć poniższego wyrażenia: !important i taki zabieg nie przyniesie pożądanego efektu warto przyjrzeć się Zapisz i sprawdź rezultat. dokładnie samej składni, ewentualnie dokonać jej walidacji. Fraza !important okazała się ważniejsza, nadała pożądany atrybut, czyli rozmiar 1em. Fraza !important nie służy do 'wymuszania' specyficzności w przypadku konfliktu, a jedynie do jego diagnozy. Nie jest więc dobrą praktyką pozostawienie jej. Konflikt powinien zostać rozwiązany poprzez wprowadzenie specyficzności – zaproponuj rozwiązanie. Warto zwrócić uwagę, że fraza !important może również służyć do wykrycia zwykłego błędu literowego, np. podczas pisania definicji zamiast otworzenia klamry został wprowadzony z lewej strony zwykły nawias: 25 krzysztof moszczyński http://ci.swps.pl/ http://pk.uni.wroc.pl/ Oto przykładowy wynik: Czcionki Doskonałym narzędziem do testowania i wyboru odpowiednich czcionek jest omawiany wcześniej serwis http://www.typetester.org/, za pomocą którego można wybrać: Jednak wygenerowany przez czcionkę, http://www.typetester.org/ kod nie uwzględnia wszystkich wybranych jej rozmiar, odstępy między parametrów jakie przewiduje css. wierszami, odstępy między literami, wyrównanie, odstępy między słowami, rodzaj dekoracji, kolor oraz kolor tła Przede wszystkim właściwość font-family może, a nawet powinna mieć Zadeklarowane parametry można następnie pobrać w postaci kodu css, w więcej pozycji, np.: prawej, górnej sekcji: font-family: Verdana, Arial, Helvetica, sans; Taką deklarację można wytłumaczyć następująco: użyj pierwszej czcionki (Verdana), a jeżeli nie ma jej zainstalowanej w systemie operacyjnym użyj kolejnej (Arial, Helvetica). W przypadku gdy żadna z powyższych nie jest obecna w systemie, użyj domyślnej dla tego systemu bezszeryfowej czcionki (sans). 26 krzysztof moszczyński http://ci.swps.pl/ http://pk.uni.wroc.pl/ Skoro typografia css operuje na zainstalowanych w systemie czcionkach Zadanie 8 pojawia się pytanie: jaki zestaw czcionek jest wspólny dla najbardziej Przy pomocy serwisów http://www.typetester.org/ oraz popularnych systemów operacyjnych? Taki zestaw nosi nazwę 'safe list' i http://www.w3schools.com/css/ (sekcje font i text) wybierz jedną z pozycji z jest między innymi wyszczególniony w serwisie http://www.typetester.org/ 'safe list', stwórz klasy w których pozostanie ten sam rozmiar czcionki, ale przy wyborze czcionki: dodaj/zmień inne właściwości tak aby osiągnąć podobny rezultat jak poniżej: Pamiętaj aby w testowym tekście zostały użyte tylko małe litery. Różną pisownie Choć prezentowany zestaw zawiera zaledwie 9 czcionek, stosując osiągniesz odpowiednie parametry można osiągnąć całkiem ciekawe spektrum. przy pomocy odpowiednich własności css. Zachowaj projekt 27 krzysztof moszczyński http://ci.swps.pl/ http://pk.uni.wroc.pl/ Dodaj do kodu XHTML poniższą frazę: Czcionki – zastępowanie tekstu obrazem. Mimo, że w powyższym przykładzie został zastosowany zaledwie jeden krój udało się osiągnąć dość zróżnicowany zestaw czcionek. Często jednak manipulacja parametrami w css nie wystarcza. Teoretycznie css W tym przykładzie posłużyłem się serwisem umożliwia załączenie czcionki której nie ma w systemie. Informacje na ten (http://www.searchfreefonts.com/free/coca-cola-ii.htm). W polu tekstowym temat można znaleźć np. po słowach kluczowych 'css font embedding'. W wpisałem frazę 'To jest czcionka Coca Cola ii!' i wykonałem zrzut ekranu praktyce jednak autorzy bardzo często zastrzegają możliwość (do pobrania jako plik coca.png). Zapisz ten plik w katalogu images, który wykorzystania czcionek w serwisach internetowych. Rozwiązaniem jest to katalog będzie w tej samej lokalizacji co plik index.html użycie darmowej czcionki, zakupienie czcionki z odpowiednią licencją lub Sprecyzujmy nowa klasę coca: zaprojektowanie własnej czcionki. Innym rozwiązaniem dyskutowanego problemu jest zastąpienie tekstu obrazem. Rozwiązanie to jest dość powszechne i można je spotkać np. w wielu demonstracyjnych kompozycjach serwisu Zadeklarowane własności width i height wynikają z rozmiaru pliku, który http://www.csszengarden.com/. w tym przykładzie został wstawiony w tło (background), deklaracja norepeat wskazuje aby obraz tła został zastosowany tylko jeden raz. A oto i rezultat: 28 krzysztof moszczyński http://ci.swps.pl/ http://pk.uni.wroc.pl/ Zadanie 9 Teraz wystarczy tylko usunąć zbędny tekst: W oparciu o przedstawioną metodę podstaw plikami graficznymi z dowolną czcionką (zawierającymi adekwatny tekst) pozycje w menu: Dokonaliśmy tego poprzez własność wcięcia, której wartość jest tak duża, że tekst jest 'wcięty' poza obszar monitora. Wadą tego rozwiązania jest Zachowaj projekt stosunkowo mała elastyczność (konieczność edycji plików grafiki przy każdej zmianie serwisu) natomiast zaletą tego rozwiązania jest wciąż Cenne informacje dotyczące zagadnień typografii internetowej można widoczny tekst (a więc i kod który zachowuje znaczenie), o czym można znaleźć między innymi pod adresem: http://webtypography.net/. się przekonać wyłączając styl css (np. dla Firefox: Widok/Styl strony/Ignoruj style). Czcionki – stosowanie koloru Na ekranie monitorów barwy generowane są według modelu RGB (http://pl.wikipedia.org/wiki/RGB). Model ten zakłada zastosowanie trzech składowych R (czerwonego, ang. red), G (zielonego, ang. green), B (niebieskiego, ang. blue). Definiowany w css kolor dla czcionki może mieć np. postać: .dowolna_klasa { color: #e424d9; } Ten zapis to tzw. zapis szesnastkowy. 29 krzysztof moszczyński http://ci.swps.pl/ http://pk.uni.wroc.pl/ Znany wszystkim kod binarny zawiera tylko dwie wartości, np. 0/1 lub Przestawiona składnia dotyczy definicji w css koloru w ogóle (nie tylko dla prawda/fałsz lub tak/nie. Z kolei stosowany powszechnie kod dziesiętny czcionek). Budowanie palet barwnych i harmonizowanie barw, choć zawiera dziesięć elementów (0-9). Kod szesnastkowy zawiera dziesięć cyfr wykracza poza ramy tego kursu, to kluczowe umiejętności dla web design. (od 0 do 9) oraz sześć liter: a, b, c, d, e, f (o jest najniższą wartością, Zainteresowany czytelnik może jednak odwiedzić dość przydatne serwisy: podczas gdy f najwyższą). – http://colorschemedesigner.com/ - poświęcony paletom barwnym Zapis szesnastkowy opisuje każdą ze składowych RGB na podstawie – http://www.snook.ca/technical/colour_contrast/colour.html – dwóch miejsc: poświęcony ocenie czytelności poprzez analizę kontrastu między color: #e424d9; tłem i figurą (tekstem) – Gdy w kodzie szesnastkowym barwy występują pary takich samych http://colorfilter.wickline.org/ - generuje obraz typowy dla różnych jednostek chorobowych oczu. wartości to całość można skrócić z sześciu do trzech pozycji jak poniżej: color: #ff00ff; Zadanie 10 color: #f0f; Posługując się dowolnym programem graficznym zapisz za pomocą dwóch innych formatów kolor tła elementu #container ze strony (wartości te W praktyce mało kto pamięta notację szesnastkową, ale można ją spotkać znajdziesz np. na str. 24). w większości programów graficznych podczas edycji barwy. Zachowaj projekt Innymi sposobami zapisu wartości RGB w css są: color: rgb(0,255,0); color: rgb(0%,100%,0%); 30 krzysztof moszczyński http://ci.swps.pl/ http://pk.uni.wroc.pl/ Czcionki – zastosowanie pseudoklas Ten przykład budowy pseudoklas oparty jest o kod XHTML (str 21) oraz Pseudoklasy to narzędzie pozwalające wyróżnić stan elementu. poniższy kod css: Przykładem może być odsyłacz, który przyjmuje następujące stany: – link (stan spoczynku); – visited (odwiedzony); – hover (stan, w którym kursor myszy znajduje się nad odsyłaczem); – active lub focus (stan, w którym odsyłacz został zatwierdzony Zadanie 11 przyciskiem myszy i przycisk ten pozostaje wciąż wciśnięty). Wprowadź zmiany i sprawdź rezultat. Następnie zmodyfikuj parametry dla Podczas deklaracji pseudoklas kolejność w/w stanów jest kluczowa. Aby pseudoklas tak aby osiągnąć własny efekt (w razie wątpliwości skorzystaj z łatwiej zapamiętać te kolejność niektórzy autorzy wskazują na serwisów: http://www.typetester.org/ oraz http://www.w3schools.com/css/). podobieństwo do słynnego tatuażu na kostkach pięści – love/hate czyli: Zachowaj projekt L link o V visited e H hover A active (focus) t e 31 krzysztof moszczyński http://ci.swps.pl/ http://pk.uni.wroc.pl/ treść – dowolny tekst jaki zawiera element; Podstawy layout – 'Box model' odstęp – wewnętrzny, przezroczysty obszar separujący treść od ramki, 'Box model' to termin, który określa sposób generowania elementów html oraz sposób stylizacji ich za pomocą css właściwością css określającą odstęp jest padding; (http://www.w3schools.com/css/css_boxmodel.asp). Według tego modelu ramka – właściwość wyrażana w css za pomocą border; element generowany jest następująco: margines – zewnętrzny, przezroczysty obszar między ramką i innym elementem, w css wyrażany jest jako właściwość margin; Uprość istniejące źródło lub stwórz nowy dokument XHTML tak aby część body zawierała jeden element bloku dokumentu, który z kolei zawiera dowolną treść. W css określ właściwości tego elementu blokowego tak aby: – był środkowany względem strony; – posiadał tło w dowolnym kolorze; – jego szerokość i wysokość wynosiła 200 px (jeżeli nie pamiętasz tych właściwości zobacz str. 16). 32 krzysztof moszczyński http://ci.swps.pl/ http://pk.uni.wroc.pl/ Oto przykładowy rezultat Czas na zastosowanie właściwości. W arkuszu css umieść poniższy kod dla przeglądarki Chrome tak aby odnosił się do bloku dokumentu: padding: 10px; Oto i efekt: Udało się uzyskać odstęp. Po prawej i lewej stronie odstęp wydaje się równy i wynosi 10 px (kto nie jest usatysfakcjonowany tą argumentacją, może zmierzyć tę przestrzeń za pomocą linijki: Zakładka Różne/Wyświetl linijkę). Nie ma jednak wątpliwości, że odstęp między górną krawędzią bloku dokumentu i tekstem jest zdecydowanie większy. Tym oraz dla przeglądarki Firefox; jednak zajmiemy się za chwilę. zauważ, że włączenie zaznaczania elementów Czas na ramkę. Posłużę się prostą składnią: blokowych we wtyczce Web border-style: dotted; Developer (Zaznacz/Elementy border-width: 2px; blokowe, str.11) wskazuje dwa border-color: #999999; elementy: czerwony – akapit oraz niebieski – element bloku dokumentu 33 krzysztof moszczyński http://ci.swps.pl/ http://pk.uni.wroc.pl/ A to efekt zastosowanej składni: Podobnie jak w przypadku deklaracji właściwości padding, także i tu odległości od lewej krawędzi i górnej krawędzi są różne (zainteresowanych odsyłam do narzędzia linijka). Skąd te różnice? W obu przypadkach za te różnice odpowiada domyślny arkusz css przeglądarki. Aby tego dowieść wprowadź lub zmodyfikuj we własnym arkuszu css selektor body który będzie miał przypisaną właściwość: margin: 0; Zapisz i sprawdź zmiany. Idąc tym tokiem rozumowania można również zapytać, czy elementowi p Pozostał jeszcze margines, np.: nie jest przypisany selektor wraz z określoną domyślną wartością margin:20px; marginesu. Rozwiąż ten problem, tak aby otrzymać poniższy rezultat: Jeżeli wyśrodkowanie bloku dokumentu zostało osiągnięte poprzez właściwość margin: auto; to teraz doprowadziliśmy do konfliktu – deklarując inną wartość dla tej samej własności. Jeżeli ta ostatnia własność została dodana na dole to właśnie ona 'wygrywa' konflikt (str. 21). 34 krzysztof moszczyński http://ci.swps.pl/ http://pk.uni.wroc.pl/ Podczas formatowania bloku dokumentu, określiliśmy m.in. że jego Zadanie 12 szerokość będzie wynosiła 200px oraz przypisaliśmy mu poniższe Na podstawie serwisu http://www.w3schools.com/css/default.asp właściwości: zadeklaruj właściwości css tak aby otrzymać poniższy rezultat. padding: 10px; border-style: dotted; border-width: 2px; border-color: #999999; margin: 0; Jednak pomiar tego bloku (za pomocą narzędzia linijka) wskazuje, że jego szerokość jest większa niż 200 px. Warto więc zapamiętać, że szerokość 200px odnosi się do treści elementu. Aby więc prawidłowo wymiarować elementy należy uwzględnić nie tylko zadeklarowany rozmiar ich treści, ale należy również uwzględnić wszystkie ich właściwości zadeklarowane w css. W tym przypadku dokładna szerokość bloku dokumentu wynosi: 200px (szerokość treści) + 10px (odstęp z lewej) +10 px (odstęp z prawej). 35 krzysztof moszczyński http://ci.swps.pl/ http://pk.uni.wroc.pl/ Podstawy layout – 'opływanie' Gdy jednak obraz znajduje się W poniższym przykładzie przeanalizujemy 'zachowanie' grafiki i tekstu. w środku treści wyraźnie widać Posłużyłem się fragmentem definicji egocentryzmu ze stron Wikipedii brak odpowiedniego (http://pl.wikipedia.org/wiki/Egocentryzm) oraz ikoną 'opływania' tekstu. (http://iphone.iusethis.com/icon/iphone/ego.png). Zmodyfikuj źródło poprzedniego dokumentu aby otrzymać podobny efekt. Aby zadeklarować opływanie posłużymy się właściwością float, która może przyjąć dwie wartości: left lub right. Stwórz selektor dla elementu obrazu i przypisz mu właściwość foat. Dla poprawienia czytelności Dodaj do akapitu dowolną grafikę (w przypadku gdy nie pamiętasz składni zwiększę odstępy między zajrzyj na instrukcji xhtml, str. 39). wierszami oraz margines dla obrazu. Jeżeli obraz dodam na początku treści całość wygląda Dla deklaracji marginesu zastosowałem poniższą składnię: jeszcze 'w miarę przyzwoicie'. margin: 10px 10px 10px 10px; Tak zapisane wartości należy odczytywać zgodnie z ruchem wskazówek zegara zaczynając od góry, czyli góra, prawo, dół, lewo. 36 krzysztof moszczyński http://ci.swps.pl/ http://pk.uni.wroc.pl/ Podstawy layout – 'opływanie' bloków dokumentu Zastosowanie elementów bloku dokumentu (znacznik div) pozwala na budowanie layout dokumentów HTML/XHTML. Przed zastosowanym elementem bloku dokumentu (container) dodaj menu (w postaci wykazu nieuporządkowanego, str. 29), które również będzie elementem bloku dokumentu (np. o identyfikatorze menu). Usuń Zmodyfikuj arkusz css tak aby wyrównać lewą krawędź obrazu i tekstu. właściwość margin:auto dla elementu container. Aby dostrzec granice bloku menu możesz w zakładce Web Developer wybrać: Zaznacz/Elementy blokowe Domyślnie bloki wstępują jeden pod drugim, co wskazuje na 'naturalny'/liniowy przebieg dokumentu. Ten przebieg jest tym bardziej widoczny gdy wyłączymy css (np. Widok/Styl strony/Ignoruj). 37 krzysztof moszczyński http://ci.swps.pl/ http://pk.uni.wroc.pl/ Aby zmodyfikować domyślne reguły opływania również dla elementów Zmień nazwę container na adekwatną nazwę do obecnej funkcji tego blokowych użyjemy właściwości float. Zdefiniuj szerokość dla menu (np. bloku (np. content) zarówno w kodzie html jak i css. Identyfikator 200px) i container (np. 400px). Dla menu przypisz właściwości float: container z kolej wykorzystamy dla budowy bloku, który będzie left, a dla container float:right;. 'pojemnikiem' dla menu i content. Kod realizujący ten zamiar będzie miał postać: Zauważ, że przez zwinięcie (klawisz -) nie są pokazane zamknięcia niektórych znaczników div. Zbuduj selektor dla container i zadeklaruj jego szerokość (np. Zauważ, że container nie tylko pływa menu po prawej stronie ale 700px). pozycjonuje się 'maksymalnie' do prawej. Jednym ze sposobów na zadeklarowanie precyzyjniej pozycji container jest zamknięcie obu elementów blokowych w kolejnym bloku. 38 krzysztof moszczyński http://ci.swps.pl/ http://pk.uni.wroc.pl/ Interesująca w omawianej właściwości float jest możliwość zmiany pozycji Przypisz obu elementom blokowym właściwość float:left (względem siebie) elementów bez zmiany kodu html. Zmodyfikuj kod css Zauważ na różnice w aby doprowadzić do poniższego rezultatu: pozycji elementów w stosunku do przykładu z poprzedniej strony. Tego typu rozwiązanie jest szczególnie przydatne gdy mam do czynienia z większą liczbą elementów blokowych, które chcemy umieścić obok siebie. 39 krzysztof moszczyński http://ci.swps.pl/ http://pk.uni.wroc.pl/ Warto podkreślić, że nadanie właściwości float jednemu elementowi Aby umieścić nową warstwę pod istniejącymi należy przerwać regułę powoduje, że inne elementy go opływają (nawet jeśli nie mają opływania. Do tego celu w css służy właściwość clear:both;. Dość zadeklarowanej właściwości float). Aby zweryfikować to twierdzenie dodaj częstym rozwiązaniem jest stworzenie w arkuszu css klasy (np. o nazwie za container dowolny element bloku dokumentu, w css przypisz mu tylko clear), której jest przypisana powyższa właściwość, a następnie powołanie właściwość szerokości (która wraz z wymiarami menu i content nie się na tą klasę w kodzie html: powinna przekraczać szerokości container). <br class=”clear” /> Zadanie 13 Umieść nową warstwę W oparciu o wiadomości z sekcji Podstawy layout – 'Box model', Podstawy obok warstwy layout – 'Opływanie' zrealizuj poniższy układ. Zachowaj projekt content. 40 krzysztof moszczyński http://ci.swps.pl/ http://pk.uni.wroc.pl/ Tło Odwiedź stronę serwisu W3 http://www.w3schools.com/css/css_background.asp i poeksperymentuj z tłem. Skorzystaj z poprzedniego layout oraz z pliku flower.png tak aby osiągnąć poniższy rezultat: 41