Professional Documents
Culture Documents
PRZYKADOWY ROZDZIA
SPIS TRECI
KATALOG KSIEK
KATALOG ONLINE
ZAMW DRUKOWANY KATALOG
CSS. Gotowe
rozwizania
Autor: Richard York
Tumaczenie: ukasz Piwko
ISBN: 83-246-0574-6
Tytu oryginau: CSS Instant Results
Format: B5, stron: 392
TWJ KOSZYK
DODAJ DO KOSZYKA
CENNIK I INFORMACJE
ZAMW INFORMACJE
O NOWOCIACH
ZAMW CENNIK
CZYTELNIA
FRAGMENTY KSIEK ONLINE
Wydawnictwo Helion
ul. Kociuszki 1c
44-100 Gliwice
tel. 032 230 98 63
e-mail: helion@helion.pl
O autorze ..................................................................................................................................................... 7
Podzikowania ............................................................................................................................................ 9
Wstp ...........................................................................................................................................................11
Rozdzia 1. Zakadki ....................................................................................................................................17
Projekt ........................................................................................................................ 18
Kod i jego objanienie .................................................................................................. 19
Testowanie i ograniczenia ............................................................................................. 29
Co daje nam biblioteka IE7? .................................................................................... 30
Uywanie i modyfikacja projektu .................................................................................... 31
Zakadki z obrazkami w tle ....................................................................................... 32
Obrazki w tle zawierajce tekst ................................................................................ 36
Zakadki elastyczne ................................................................................................. 39
Spis treci
Skorowidz ................................................................................................................................................381
Nastpny podrozdzia opisuje komponenty CSS, XHTML oraz JavaScript potrzebne do osignicia zamierzonych celw.
18
Projekt prezentowany w niniejszym rozdziale nie jest zbyt atrakcyjny wizualnie. Moim celem byo raczej pokazanie, jak w prosty sposb stworzy system zakadek przy uyciu CSS
bez obrazkw i tabel. W dalszej czci prezentuj, jakie naley wnie poprawki, aby zakadki pynnie si rozcigay oraz w jaki sposb ustawi waciwoci ramek oraz ta (chocia wersja podstawowa projektu jest bardzo prosta). Poniej znajduje si lista celw z poprzedniego podrozdziau wzbogacona o opis waciwoci CSS i kodu XHTML potrzebnych
do ich osignicia:
n
Rozdzia 1. n Zakadki
19
Aby utworzy system zakadek za pomoc XHTML i CSS, naley wykona ponisze polecenia:
1. Tworzymy dokumenty HTML o nastpujcej treci (rnice pomidzy
20
Rozdzia 1. n Zakadki
</head"
<body id='slashdot'"
<ul id='tabs'"
<li id='tab1'"<a href='wrox.html'"<span"Wrox P2P</span"</a"</li"
<li id='tab2'"<a href='amazon.html'"<span"Amazon</span"</a"</li"
<li id='tab3'"<a href='google.html'"<span"Google</span"</a"</li"
<li id='tab4'"<a href='slashdot.html'"<span"Slashdot</span"</a"</li"
<li id='tab5'"<a href='twit.html'"<span"This Week in Tech</span"</a"</li"
</ul"
<div id='iframe'"
<iframe src='http://www.slashdot.org'
frameborder='0' marginheight='0' marginwidth='0'"</iframe"
</div"
</body"
</html"
21
22
}
ul#tabs li {
float: left;
margin: 0 5px;
height: 23px;
text-align: center;
position: relative;
width: 150px;
border: 1px solid #000;
top: 1px;
background: #808080;
}
ul#tabs li:hover {
border-bottom: 1px solid #fff;
background: #fff;
}
ul#tabs a {
display: block;
height: 100%;
text-decoration: none;
color: #fff;
font: 14px Arial, sans-serif;
}
body#wrox li#tab1,
body#amazon li#tab2,
body#google li#tab3,
body#slashdot li#tab4,
body#twit li#tab5 {
background: #fff;
border-bottom: 1px solid #fff;
}
ul#tabs a:hover,
body#wrox li#tab1 a,
body#amazon li#tab2 a,
body#google li#tab3 a,
body#slashdot li#tab4 a,
body#twit li#tab5 a {
color: #000;
}
ul#tabs span {
display: block;
padding: 4px 10px 0 10px;
}
div#iframe {
position: absolute;
top: 0;
bottom: 0;
right: 0;
left: 0;
margin-top: 50px;
border-top: 1px solid #000;
}
iframe {
position: absolute;
Rozdzia 1. n Zakadki
23
top: 0;
bottom: 0;
right: 0;
left: 0;
width: 100%;
height: 100%;
Efekt dziaania powyszego kodu w przegldarce Mozilla Firefox przedstawiono na rysunku 1.1.
Rysunek 1.1.
Na rysunku 1.1 wida, e zakadka Wrox P2P jest podwietlana, gdy zaadowana zostaje
strona wrox.html. Po klikniciu innej zakadki, jest ona podwietlana i odpowiednia strona
wywietla si na ekranie, tak jak na rysunku 1.2.
Na rysunku 1.2 wida, e po zaadowaniu strony google.html podwietlia si zakadka Google.
Przed przejciem do wyjaniania kodu spjrzmy na poniszy bardzo interesujcy fragment:
<!-- sztuczka dostosowujca dla przegldarek Microsoftu --"
<!--[if lt IE 7]"
<script src='/ie7/ie7-standard-p.js' type='text/javascript'"</script"
<![endif]--"
24
Rysunek 1.2.
Ta cz kodu pozwala omin pewne braki w implementacji CSS w przegldarkach Internet Explorer 5.5 i 6. Na razie nie bdziemy zajmowa si bliej tym kodem (ani testowaniem
w przegldarce Internet Explorer), jako e bardziej szczegowo jest on omwiony w nastpnym podrozdziale, zatytuowanym Testowanie i ograniczenia.
Poniej znajduje si objanienie krok po kroku kadej deklaracji uytej w arkuszu tabs.css,
co pomoe czytelnikowi dopasowa projekt zakadek do wasnych potrzeb.
Pierwsza regua w pliku tabs.css suy do usunicia domylnych marginesw i dopenienia
z elementu <body>.
body, html {
margin: 0;
padding: 0;
}
Zastosowanie tej reguy nie jest konieczne dla niniejszego projektu, ale zostaa ona dodana
dla potrzeb przykadu. Niektre przegldarki (IE, Firefox) do elementu <body> domylnie
dodaj margines o okrelonej wartoci, inne przegldarki natomiast (Opera) dodaj domylnie dopenienie. Ta regua likwiduje i jedno, i drugie.
Nastpna regua suy do nadania odpowiednich waciwoci elementowi <ul>, w ktrym
s zawarte wszystkie elementy listy majce suy jako zakadki:
Rozdzia 1. n Zakadki
25
ul#tabs {
list-style: none;
margin: 0;
padding: 10px 0 0 0;
height: 25px;
border-bottom: 1px solid #000;
background: #dedede;
}
Pierwsza deklaracja w powyszej regule to list-style: none;. Usuwa ona domylne formatowanie listy nienumerowanej. Nastpnie regua margin: 0; usuwa domyln przestrze, jak
kada przegldarka dodaje wok elementu <ul>. Niestety, tak jak w przypadku elementu
<body>, rne przegldarki do elementu <ul> dodaj albo margines, albo dopenienie. Deklaracja padding: 10px 0 0 0; pozwala na uniknicie tego problemu, ustawiajc 10-pikselowe
dopenienie u gry elementu (przestrze pomidzy grn krawdzi przegldarki a grn
krawdzi kadej zakadki) i usuwajc dopenienie z pozostaych stron. Dodanie tej dodatkowej przestrzeni, tak samo jak w przypadku elementu <body>, nie jest konieczne i zaley
wycznie od indywidualnych potrzeb.
Nastpna deklaracja nadaje elementowi <ul> sta wysoko. Gdybymy tego nie zrobili, to
to i dolna krawd elementu <ul> pojawiyby si ponad zakadkami zamiast w jednej linii
z doln krawdzi elementw <li>. Dzieje si tak, poniewa elementom <li> nadano atrybut float, a tego typu elementy nie wpywaj w aden sposb na wysoko elementu nadrzdnego, jako e znajduj si one poza normalnym ukadem strony i maj wpyw tylko na
sam tre elementw, a nie waciwoci zwizane z modelem blokowym takie jak height,
padding, margin. Ostatnie dwie deklaracje take nie s niezbdne do implementacji systemu
zakadek i mona je dowolnie zmienia. Pierwsza z nich to border-bottom: 1px solid #000;
i suy ona do ustawienia waciwoci dolnej krawdzi wszystkich zakadek. Deklaracja ta
potrzebna jest do uzyskania efektu, w ktrym zakadka odpowiadajca aktualnie zaadowanej stronie nie ma krawdzi dolnej, a pozostae zakadki j maj. Jak wida na rysunku 1.1,
zakadka Wrox P2P jest podwietlona i nie ma krawdzi dolnej. To samo dzieje si z zakadk Google na rysunku 1.2. W uzyskaniu takiego efektu kluczow rol odgrywa wanie
dolna krawd elementu <ul>. Druga deklaracja to background: #dedede;. Tworzy ona kontrast kolorw pomidzy elementami <li> a zawierajcym je elementem <ul>.
Jeeli chcemy, aby cay projekt by rzeczywicie przenony, mona zastosowa pozycjonowanie absolutne i umieci go w dowolnym miejscu dokumentu za pomoc odpowiednich
atrybutw CSS (top, right, bottom, left).
Nastpna regua ustawia waciwoci wszystkich elementw <li>:
ul#tabs li {
float: left;
margin: 0 5px;
height: 23px;
text-align: center;
position: relative;
width: 150px;
border: 1px solid #000;
top: 1px;
background: #808080;
}
26
Powysza regua jest bardzo prosta: jeeli uytkownik najedzie kursorem na ktrykolwiek
z elementw <li>, to to tego elementu z szarego (ustawionego w poprzedniej regule: background: #g0g0g0;) zmieni si na biae. Kolor dolnej krawdzi take si zmieni z czarnego
Rozdzia 1. n Zakadki
27
na biay. Dziki temu uzyskujemy wraenie, e podwietlona zakadka pojawia si z przodu, jak na rysunkach 1.1 i 1.2. Jak wida, podwietlona jest tylko zakadka odpowiadajca
wczytanej stronie. Gdybymy najechali kursorem na pozostae zakadki, to one te by si
podwietliy, ale tylko do czasu usunicia znad nich kursora.
Nastpna regua suy do ustawiania waciwoci odnonikw wewntrz elementw <li>:
ul#tabs a {
display: block;
height: 100%;
text-decoration: none;
color: #fff;
font: 14px Arial, sans-serif;
}
Pierwsza deklaracja zmienia sposb formatowania elementw <a> ze rdliniowego (domylny dla tych elementw) na blokowy (domylny dla takich elementw jak <div> czy <p>).
Dziki temu odnoniki bd rozciga si poziomo na ca woln przestrze wewntrz elementw <li> (od lewej do prawej krawdzi elementu). Nastpnie deklaracja height: 100%;
powoduje, e cae wntrze elementu <li> bdzie suyo jako odnonik. Za pomoc deklaracji text-decoration: none; usuwamy domylne podkrelenie dla odnonikw, a deklaracja color: #fff; ustawia ich kolor na biay (domylnie jest zazwyczaj niebieski, a po odwiedzeniu zmienia si na fioletowy). Tak jak i inne deklaracje stosowane w celach czysto
kosmetycznych ustawianie koloru odnonikw nie jest konieczne. Na koniec zmieniamy waciwoci czcionki za pomoc deklaracji font: 14px Arial, sans-serif;.
We wszystkich piciu utworzonych na pocztku dokumentach elementowi <body> nadalimy unikalny identyfikator. Ponisza regua, przy wykorzystaniu tych identyfikatorw, pozwoli nam na zastosowanie odmiennego stylu dla zakadki odpowiadajcej aktualnie wczytanej stronie:
body#wrox li#tab1,
body#amazon li#tab2,
body#google li#tab3,
body#slashdot li#tab4,
body#twit li#tab5 {
background: #fff;
border-bottom: 1px solid #fff;
}
Sama koncepcja jest bardzo prosta. Wykorzystujc kaskadowy charakter arkuszy stylw oraz
unikalne nazewnictwo kadej strony, jestemy w stanie nada odmienny styl zakadce odpowiadajcej aktualnie wczytanej stronie. Same zakadki musz take posiada niepowtarzalne nazwy. W poczeniu z identyfikatorem elementu <body> regua body#wrox li#tab1
nadpisuje poprzedni regu (ul#tabs li), poniewa posiada ona wiksz precyzj zapisu.
Jeeli element <body> bdzie mia identyfikator wrox, a element <li> bdzie mia identyfikator tab1, to nastpi nadpisanie reguy ul#tabs li przez regu body#wrox li#tab1, co z kolei prowadzi do zastosowania biaego ta i jednolitej biaej krawdzi dolnej dla zakadki odpowiadajcej aktualnie zaadowanej stronie.
Przedstawiona powyej regua jest identyczna z regu ul#tabs li:hover, o ktrej bya ju
mowa wczeniej. Mimo e jest to znakomita okazja do zastosowania grupowania selektorw,
28
Pierwsza deklaracja w powyszej regule zmienia typ elementu <span> z domylnego rdliniowego na blokowy. Dziki temu mona zastosowa dopenienie odpowiadajce modelowi blokowemu zamiast dopenienia odpowiadajcego modelowi rdliniowemu. Robimy to,
aby mc kontrolowa woln przestrze wok tekstu na kadej zakadce. Czynnoci te mog, ale nie musz by potrzebne, w zalenoci od indywidualnych potrzeb projektu.
Moliwe, e si zastanawiasz, czemu zamiast elementu <span> nie uylimy elementu <div>.
Ot z semantycznego punktu widzenia niedozwolone jest umieszczanie elementw blokowych, takich jak np. <div>, wewntrz elementw rdliniowych, takich jak <a> (mimo e
element <a> zosta przez nas zmieniony na element blokowy). Rne przegldarki mogyby
si rnie zachowa w takiej sytuacji. Z punktu widzenia zgodnoci ze standardami nie ma
adnych przeciwwskaza, jeli chodzi o umieszczanie elementw <span> wewntrz elementw <a>, poniewa elementy rdliniowe mona bez problemu wzajemnie zagnieda.
W tym projekcie bierzemy pod uwag bdy zgaszane przez walidator W3C znajdujcy si
pod adresem http://validator.w3.org. Program ten uywany jest przez twrcw stron internetowych w celu sprawdzania, czy tworzone przez nich dokumenty zgodne s z obowizujcymi standardami.
Element <span> nie jest konieczny do tego, aby projekt mg poprawnie funkcjonowa. Tak
jak ju wspomniana wczeniej staa wysoko zakadek, tak te uycie elementu <span> do
Rozdzia 1. n Zakadki
29
kontrolowania pionowego pooenia tekstu (w odrnieniu od pooenia poziomego) na zakadkach jest opcjonalne.
Pozostae dwie reguy nie maj nic wsplnego z samym systemem zakadek i zostay dodane wycznie w celu wypenienia pustej czci dokumentu treci poprzez wczytanie dokumentw zewntrznych z popularnej strony za pomoc ramki wewntrznej.
W niniejszym podrozdziale opisuj problemy, ktre mog wystpi przy testowaniu projektu w rnych przegldarkach. Zazwyczaj podczas pracy nad projektem ograniczam si do
testowania go tylko w przegldarce Firefox, dopki nie nabierze on ksztatw i nie zacznie
zblia si do koca. Dochodzc do tego momentu, rozszerzam zestaw przegldarek testowych, dodajc Internet Explorera, Oper, Safari itd. W przypadku przegldarek dobrze obsugujcych standardy (Opera, Safari) zazwyczaj potrzebne s tylko niewielkie ulepszenia.
Problem rozpoczyna si, gdy dochodzi do testowania pod IE, ktra albo bardzo sabo obsuguje niektre standardy, albo wcale ich nie obsuguje, dlatego te w niniejszym rozdziale
skupiam si przede wszystkim na tej aplikacji.
W poprzednim podrozdziale wspominalimy niewielki fragment kodu, ktrego zadaniem
byo pomc nam sprawi, aby przegldarka Internet Explorer w wersjach 5.5 i 6 bya kompatybilna z niektrymi nieobsugiwanymi przez ni waciwociami CSS. Poniej przypominam omawiany fragment kodu:
<!-- sztuczka dostosowujca dla przegldarek Microsoftu -->
<!--[if lt IE 7]"
<script src='/ie7/ie7-standard-p.js' type='text/javascript'"</script"
<![endif]--"
Osoby, ktre czytay moj ksik Beginning CSS: Cascading Style Sheets for Web Design
(wydan przez wydawnictwo Wiley Publishing) prawdopodobnie pamitaj, e w rozdziale
18. pisaem, jak pobra i zainstalowa bibliotek JavaScript IE7. Jako e ta ksika przeznaczona jest dla bardziej zawansowanych czytelnikw, nie bd si tu szczegowo rozpisywa na temat instalacji tej biblioteki, a ogranicz si tylko do oglnego przedstawienia
procesu instalacji oraz pobienego przedstawienia jej moliwoci.
Biblioteka JavaScript IE7 zostaa napisana przez londyczyka, Deana Edwardsa, w celu uatwienia twrcom stron internetowych radzenia sobie ze sab obsug CSS przez przegldark Internet Explorer, ktra ju od piciu lat nie doczekaa si adnych powaniejszych
uaktualnie w tym kierunku. Edwards przy uyciu JavaScript dokonuje implementacji waciwoci CSS oryginalnie nieobsugiwanych przez przegldark Internet Explorer w wersjach 5.5 i 6. Dziki temu IE zblia si funkcjonalnoci do innych, jak na razie o wiele lepiej obsugujcych standardy, przegldarek, takich jak Safari czy Firefox. Biblioteka IE7
napisana jest w sposb bardzo przejrzysty, dziki czemu wydaje si, e Internet Explorer
rzeczywicie obsuguje te waciwoci CSS, ktre do tej pory sprawiay mu problemy. Ponadto osoby korzystajce z tej biblioteki nie musz zna JavaScript w stopniu wikszym ni
potrzeba, aby j wczy. Niektre z najwaniejszych waciwoci CSS, ktrych obsug
przez IE umoliwia lub naprawia biblioteka IE7, to:
30
pseudoklasy :hover, :active oraz :focus (dziaaj nie tylko z elementem <a>),
Oczywicie to nie wszystkie moliwoci klasy IE7. Powyej podaem tylko kilka przykadw. To, co jest najbardziej zaskakujce, to rozmiar i szybko dziaania tej modularnej budowy biblioteki. Dziki takiej konstrukcji twrcy uaktywniaj tylko potrzebne funkcje, co
znacznie zmniejsza ilo koniecznych do pobrania danych. Biblioteka gwna zajmuje tylko okoo 24 kB. Naprawia lub dodaje obsug podanych wyej waciwoci (oprcz :last-child, ktra znajduje si w specjalnej bibliotece selektorw CSS3).
Bibliotek JavaScript IE7 mona pobra ze strony organizacji SourceForge, ktra na swoich
serwerach udostpnia tysice projektw typu open source. Dokadny adres do pobrania biblioteki IE7 JavaScript to: https://sourceforge.net/project/showfiles.php?group_id=109983.
Po ukoczeniu pobierania biblioteki IE7 naley j rozpakowa i umieci w katalogu gwnym serwera. Na przykad, jeeli strona znajduje si pod adresem http://www.example.com/,
to biblioteka IE7 powinna znajdowa si w katalogu dostpnym pod adresem http://www.
example.com/IE7/. Klas t mona umieci take w innym katalogu, ale wtedy naley pamita o zmianie przykadw kodu w tej ksice tak, aby odpowiaday one ciece do katalogu z bibliotek.
Biblioteka JavaScript IE7 jest projektem typu open source i jest dostpna na zasadach licencji Creative Commons LGPL (ang. Lesser General Public Licence). Peny tekst tej licencji
mona przeczyta na stronie http://creativecommons.org/licenses/LGPL/2.1.
Wicej informacji na temat biblioteki JavaScript IE7 mona znale na specjalnie jej powiconej stronie pod adresem: http://dean.edwards.name/ie7.
Nastpny podrozdzia powicony jest analizie przydatnej w naszym projekcie funkcjonalnoci biblioteki Edwardsa.
Rozdzia 1. n Zakadki
31
Rysunek 1.3.
Pierwszy problem wystpi dlatego, e Internet Explorer obsuguje pseudoklas :hover tylko dla elementw <a>, a nie tak jak Firefox, Opera i Safari dla wszystkich elementw. Drugi problem ma zwizek z tym, e Internet Explorer nie radzi sobie z kombinacj atrybutw
top, right, bottom oraz left wpywajcych na rozmiary elementw pozycjonowanych absolutnie lub elementw o ustalonym pooeniu. Dziki zastosowaniu biblioteki IE7 Internet
Explorer nie ustpuje funkcjonalnoci innym przegldarkom (Opera, Firefox, Safari). Na
rysunku 1.4 pokazano t sam stron w Internet Explorerze 6, ale ju po zainstalowaniu biblioteki IE7.
Na rysunku 1.4 wida, e to zakadek zmienia kolor po najechaniu na nie kursorem, a take, e wywietla si zawarto elementu <iframe>.
W nastpnym podrozdziale poka rne sposoby modyfikacji projektu.
32
Rysunek 1.4.
n
Takie uycie obrazw w tle, aby zakadki byy elastyczne i mogy zmienia
rozmiary w okrelonych granicach.
Oczywicie te alternatywne podejcia w pewnym stopniu komplikuj nasz projekt, ale ich
celem jest dostarczenie jak najwikszej elastycznoci oraz pokazanie moliwie najwikszej
liczby implementacji zakadek.
Pierwsza modyfikacja bdzie dotyczya zastosowania obrazkw w tle zamiast zwykych kolorw i prostoktnych obramowa.
Rozdzia 1. n Zakadki
body, html {
margin: 0;
padding: 0;
}
ul#tabs {
list-style: none;
margin: 0;
padding: 10px 0 0 0;
height: 23px;
border-bottom: 1px solid #000;
background: #dadada;
}
ul#tabs li {
float: left;
margin: 0;
height: 23px;
text-align: center;
width: 160px;
background: transparent url('images/tab.png') no-repeat scroll top;
}
ul#tabs a {
display: block;
height: 100%;
text-decoration: none;
color: #fff;
font: 14px Arial, sans-serif;
}
ul#tabs li:hover,
body#wrox li#tab1,
body#amazon li#tab2,
body#google li#tab3,
body#slashdot li#tab4,
body#twit li#tab5 {
background: transparent url('images/tab_hover.png') no-repeat scroll top;
}
ul#tabs a:hover,
body#wrox li#tab1 a,
body#amazon li#tab2 a,
body#google li#tab3 a,
body#slashdot li#tab4 a,
body#twit li#tab5 a {
color: #000;
}
ul#tabs span {
display: block;
padding: 4px 10px 0 10px;
}
div#iframe {
position: absolute;
top: 0;
bottom: 0;
right: 0;
left: 0;
margin-top: 50px;
border-top: 1px solid #000;
}
33
34
Rysunek 1.5.
Liczba modyfikacji potrzebnych do ustawienia obrazkw w tle zamiast kolorw i obramowa jest zaskakujco maa. Poniej znajduje si wyjanienie krok po kroku kadej z dokonanych zmian.
Pierwsza zmiana dotyczy wysokoci elementu <ul>, ktra rwna jest wysokoci obrazka
uytego jako to elementw <li>:
ul#tabs {
list-style: none;
margin: 0;
padding: 10px 0 0 0;
height: 23px;
Rozdzia 1. n Zakadki
35
Najpierw usuwamy margines spomidzy elementw <li> oraz niepotrzebne nam ju deklaracje: position: relative; oraz top: 1px;. Poprzednio prawy i lewy margines elementw
<li> wynosi 5 pikseli. Obecnie nie potrzebujemy ju tego marginesu, bo moemy go doda za pomoc obrazkw w tle. Po marginesach przysza kolej na zmian szerokoci na 160
pikseli ze wzgldu na fakt usunicia lewego i prawego marginesu elementw <li>. Ostatnia
deklaracja suy do ustawienia obrazka jako ta zakadek. Rozmiar obrazka odpowiada rozmiarowi elementu <li>, czyli wynosi 16023 piksele. Zmieniajc wymiary zakadek, naley
pamita o atrybutach width i height pojawiajcych si w powyszej regule, a take o atrybucie height zdefiniowanym w regule ul#tabs (wszelkie modyfikacje rozmiarw zakadek
naley rozpoczyna od modyfikacji tego atrybutu). Dodatkowo, zmieniajc rozmiar zakadek, naley wzi pod uwag wartoci dopenienia zastosowanego dla elementu <span>,
w obrbie ktrego znajduje si tekst wywietlany na zakadkach, a ktry suy do kontrolowania wyrwnania tekstu w pionie.
Ostatnie zmiany dotycz zakadki odpowiadajcej aktualnie zaadowanej stronie lub obrazka, ktry pojawia si w tle po najechaniu na zakadk kursorem:
ul#tabs li:hover,
body#wrox li#tab1,
body#amazon li#tab2,
body#google li#tab3,
body#slashdot li#tab4,
body#twit li#tab5 {
background: transparent url('images/tab_hover.png') no-repeat scroll top;
}
W pierwszym arkuszu stylw regua ul#tabs li:hover wystpowaa oddzielnie. Teraz zgrupowalimy j z regu definiujc zakadk odpowiadajc aktualnie zaadowanej stronie oraz
zmodyfikowalimy deklaracj ta w taki sposb, aby wskazywaa na obrazek tab_hover.png.
36
Rozdzia 1. n Zakadki
ul#tabs li#tab3 {
background: transparent url('images/google-tab.png') no-repeat scroll top;
}
ul#tabs li#tab3:hover,
body#google li#tab3 {
background: transparent url('images/google-tab-hover.png') no-repeat scroll top;
}
ul#tabs li#tab4 {
background: transparent url('images/slashdot-tab.png') no-repeat scroll top;
}
ul#tabs li#tab4:hover,
body#slashdot li#tab4 {
background: transparent url('images/slashdot-tab-hover.png') no-repeat scroll
top;
}
ul#tabs li#tab5 {
background: transparent url('images/twit-tab.png') no-repeat scroll top;
}
ul#tabs li#tab5:hover,
body#twit li#tab5 {
background: transparent url('images/twit-tab-hover.png') no-repeat scroll top;
}
ul#tabs a:hover,
body#wrox li#tab1 a,
body#amazon li#tab2 a,
body#google li#tab3 a,
body#slashdot li#tab4 a,
body#twit li#tab5 a {
color: #000;
}
ul#tabs span {
display: block;
padding: 4px 10px 0 10px;
visibility: hidden;
}
div#iframe {
position: absolute;
top: 0;
bottom: 0;
right: 0;
left: 0;
margin-top: 50px;
border-top: 1px solid #000;
}
iframe {
position: absolute;
top: 0;
bottom: 0;
right: 0;
left: 0;
width: 100%;
height: 100%;
}
37
38
Rysunek 1.6.
Mimo e zmiany dokonane w tym przypadku s duo wiksze ni poprzednio, kiedy w tle
zakadek ustawialimy obrazek bez tekstu, to wikszo spord nich dotyczy ustawiania
innego obrazka w tle kadej zakadki.
ul#tabs li#tab1 {
background: transparent url('images/wrox-tab.png') no-repeat scroll top;
}
ul#tabs li#tab1:hover,
body#wrox li#tab1 {
background: transparent url('images/wrox-tab-hover.png') no-repeat scroll top;
}
Rozdzia 1. n Zakadki
39
ul#tabs span {
display: block;
padding: 4px 10px 0 10px;
visibility: hidden;
}
Takie ukrywanie tekstu powoduje, e jest on niewidoczny dla ludzkiego oka, ale widoczny dla
robotw wyszukujcych (np. Googlebota) i przegldarek dla niewidomych (np. JAWS), ktre
jeszcze nie obsuguj CSS. Dziki temu nasza strona jest tak samo dostpna jak wczeniej.
Ostatnia modyfikacja dotyczy tworzenia elastycznych zakadek, ktre rozcigaj si i kurcz
w zalenoci od potrzeby.
Zakadki elastyczne
Aby stworzy zakadki elastyczne, ktre si rozcigaj, wypeniajc ca dostpn im przestrze, naley wykona nastpujce czynnoci:
1. Otwieramy plik tabs.css i dokonujemy w nim nastpujcych zmian
40
Rozdzia 1. n Zakadki
ul#tabs span {
display: block;
padding: 4px 10px 0 10px;
}
div#iframe {
position: absolute;
top: 0;
bottom: 0;
right: 0;
left: 0;
margin-top: 50px;
border-top: 1px solid #000;
}
iframe {
position: absolute;
top: 0;
bottom: 0;
right: 0;
left: 0;
width: 100%;
height: 100%;
}
41
42
oraz twit.html.
5. Tworzymy nowy arkusz stylw i wpisujemy nastpujc regu:
ul#tabs {
height: 22px;
}
Rozdzia 1. n Zakadki
43
Rysunek 1.7.
44
Nastpna regua suy do ustawienia prawej strony zakadki. Do tego posuy nam prawa
strona pierwszego elementu <div>, ktremu nadalimy wysoko 23 pikseli, czyli tak sam
jak wysoko zawierajcego go elementu <li>. Nastpnie ustawiamy obrazek w tle pierwszego elementu <div>, wyrwnujc go do prawej. Drugi element <div> jest zagniedony
w pierwszym i suy do ustawienia rodkowej czci zakadki:
ul#tabs li " div " div {
height: 23px;
background: transparent url('images/tab/tab_02.png') repeat-x scroll center;
margin: 0 8px 0 7px;
}
Temu elementowi rwnie nadajemy wysoko 23 pikseli. To zostao wyrwnane do rodka elementu i bdzie si powtarzao wzdu osi x, czyli poziomo. Na koniec, w celu uniknicia nachodzenia na siebie elementw, stosujemy lewy i prawy margines o szerokoci odpowiadajcej szerokoci obrazkw uytych po lewej i prawej stronie zakadki.
Nastpne pi regu suy do pozycjonowania w poziomie wszystkich elementw <li>:
ul#tabs li#tab1
left: 0;
}
ul#tabs li#tab2
left: 20%;
}
ul#tabs li#tab3
left: 40%;
}
ul#tabs li#tab4
left: 60%;
}
ul#tabs li#tab5
left: 80%;
}
{
{
{
{
{
Kada zakadka jest wyrwnana do lewej wzgldem nadrzdnego elementu <ul>, przy czym
odlego od lewej krawdzi ronie o 20% dla kadej kolejnej zakadki.
Na koniec jeszcze raz ustawiamy waciwoci wszystkich czci zakadek, z tym, e tym
razem skupiamy si na stylach zakadki odpowiadajcej aktualnie zaadowanej stronie oraz
na dodaniu efektu podwietlenia po najechaniu na zakadk kursorem.
Rozdzia 1. n Zakadki
45
ul#tabs li:hover,
body#wrox li#tab1,
body#amazon li#tab2,
body#google li#tab3,
body#slashdot li#tab4,
body#twit li#tab5 {
background: transparent url('images/tab-hover/tab-hover_01.png') no-repeat scroll
left;
}
ul#tabs li:hover " div,
body#wrox li#tab1 " div,
body#amazon li#tab2 " div,
body#google li#tab3 " div,
body#slashdot li#tab4 " div,
body#twit li#tab5 " div {
background: transparent url('images/tab-hover/tab-hover_03.png') no-repeat scroll
right;
}
ul#tabs li:hover " div " div,
body#wrox li#tab1 " div " div,
body#amazon li#tab2 " div " div,
body#google li#tab3 " div " div,
body#slashdot li#tab4 " div " div,
body#twit li#tab5 " div " div {
background: transparent url('images/tab-hover/tab-hover_02.png') repeat-x scroll
center;
}
Tym razem jedyne, co trzeba zmieni, to obrazek ta. Technika ta, wykorzystujc kaskadowy charakter arkuszy, pozwala na zmian obrazka ta zakadki w przypadku zaadowania
przypisanej jej strony lub w przypadku najechania na ni kursorem.
Do kadego dokumentu dodalimy take wyraenie warunkowe, widoczne tylko dla Internet Explorera, wprowadzajce dodatkowy arkusz stylw przeznaczony wycznie dla tej
przegldarki:
<!--[if lt IE 7]"
<link rel='stylesheet' type='text/css' href='tabs-ie.css' /"
<script src='/ie7/ie7-standard-p.js' type='text/javascript'"</script"
<![endif]--"