R-12MP, ## Documents ##, HTML 4 - Czrna księga WebMastera


Rozdział 12.

Ramki i połączenia do nich

Wyobraź sobie, że wyświetliłeś w przeglądarce bardzo dużą witrynę, składającą się z wielu poziomów stron WWW. Im dalej zagłębiasz się w zawartość witryny, tym bardziej tracisz orientację i trudniej Ci odnaleźć drogę do miejsca, z którego rozpocząłeś przeglądanie. Bardzo byś chciał, aby można było w jakiś łatwiejszy sposób poruszać się po witrynie. A oto doskonała wiadomość! Dzięki ramkom można tworzyć witryny WWW ułatwiające odwiedzającym poruszanie się i przeglądanie ich zawartości. Ramki dzielą okno przeglądarki na sekcje, z których każda może prezentować odmienną stronę WWW.

W tym rozdziale poznasz następujące zagadnienia:

Czym są ramki i gdzie są obsługiwane

Z wyjątkiem kaskadowych arkuszy stylów, większość opcji i znaczników, omawianych w poprzednich rozdziałach, będzie równie dob­rze działała we wszystkich przeglądarkach. Wygląd strony może się nieco różnić od ocze­kiwanego, ale przynajmniej użytkownicy starszych modeli przeglądarek mają dostęp do tekstu i połączeń zawartych na stronie.

W tym rozdziale poznasz nowe znaczniki, za pomocą których możesz tworzyć ramki. Ze względu na naturę tych znaczników, strony WWW zawierające ramki będą wyświetlane poprawnie tylko w tych przeglądarkach, które obsługują znaczniki ramek. Fakt ten wywołał jedną z bardziej gorących dyskusji, którą można podsumować hasłem „Netscape kontra reszta świata”. Po raz pierwszy obsługa ramek została wprowadzona w Netscape Navigatorze 2.0. Internet Explorer 3.0 także dawał możliwość obsługi ramek, które zostały nieco rozbudowane w porównaniu z Navigatorem 2.0. Otóż oprócz standardowych ramek zaprojektowanych przez firmę Netscape, Internet Explorer dawał także możliwość stosowania ramek lokalnych (czasami określanych także jako ramki pływające).

Możliwości, jakie dają ramki, udostępniają całkowicie nowy poziom kontroli układu stron, niedostępny przy wykorzystaniu rozwiązań przedstawionych we wcześniejszej części książki. Rozważ przykład przedstawiony na rysunku 12.1.

Rysunek 12.1

Prosta strona WWW z ramkami

0x01 graphic

W tym jednym oknie zgromadzone zostały informacje, które poprzednio wymagałyby kil­kakrotnego przeładowania zawartości okna. Co więcej, ponieważ informacje wyświetlane na stronie podzielone są między obszary lub ramki, zawartość pojedynczej ramki może być aktualizowana niezależnie od pozostałej zawartości. Jeśli wchodzisz w połączenie wybrane w ramce z lewej strony, zawartość dużej ramki (z prawej) jest automatycznie aktualizowa­na.

Połączenia do ramek

Zanim poznasz sposoby dodawania ramek do stron, najpierw musisz poznać nowy atrybut znacznika <A>. Ten nowy atrybut, o nazwie TARGET, ma następującą postać:

target="nazwa_okna"

Zazwyczaj, jeśli wchodzisz w połączenie, zawartość nowej strony zastępuje stronę aktualnie wyświetlaną w oknie przeglądarki. W przypadku środowiska ramek nie ma jednak powodu, dla którego zawartość nowej strony nie mogłaby być wyświetlana w nowym oknie, pozostawiając poprzednią stronę w jej własnym. Za pomocą atrybutu TARGET możesz więc poinformować przeglądarkę, by wyświetliła stronę, do której prowadzi połączenie, w oknie o nazwie nazwa_okna. W zasadzie, nazwa nowego okna może być dowolna, z jednym ogra­niczeniem — nie może rozpoczynać się od znaku podkreślenia „_”. Takie nazwy są bowiem zarezerwowane dla specjalnych wartości atrybutu TARGET, o których dowiesz się z podroz­działu „Magiczne wartości atrybutu TARGET”.

Jeśli umieścisz atrybut TARGET w znaczniku <A>, przeglądarka obsługująca ramki najpierw sprawdza, czy okno o wskazanej nazwie nazwa_okna istnieje. Jeśli tak, wskazywany przez połączenie dokument zastępuje zawartość tego okna. Jeśli nie, otwierane jest nowe okno i nadawana jest mu nazwa nazwa_okna. Dokument wskazywany przez połączenie jest wówczas ładowany do świeżo utworzonego okna.

Ćwiczenie 12.1: Posługiwanie się oknami

Podczas korzystania z układów ramek, w celu wyświetlania stron w odpowiedniej ramce układu, stosowany jest atrybut TARGET. Każde z połączeń przedstawionych w poniższym przykładzie wykorzystuje atrybut TARGET, aby wyświetlić stronę WWW w innym oknie przeglądarki. Pojęcia, które przedstawię w tym ćwiczeniu, pomogą Ci lepiej zrozumieć zagadnienia związane z docelowymi ramkami połączeń, jakie można definiować w układach ramek.

0x08 graphic
Twoim zadaniem w tym ćwiczeniu będzie utworzenie czterech dokumentów zawierających połączenia i wykorzystujących atrybut TARGET. Połączenia posłużą do otwarcia dwóch nowych okien o nazwach strona_zolta i strona_niebieska, przedstawionych na rysunku 12.2. Górne okno prezentuje dokument oryginalny (stronę czerwoną). Okno strona_zolta jest widoczny u dołu rysunku o lewej stronie, a okno strona_niebieska — po prawej.

Rysunek 12.2

Za pomocą połączeń można otwie­rać nowe okna dla każdej ze stron, którą wskazują

0x01 graphic

Rozpocznij pracę od utworzenia dokumentu oryginalnego, pokazanego na rys. 12.3. Otwórz ulubiony edytor tekstu i wprowadź takie oto wiersze kodu:

0x01 graphic

<html>

<head>

<title>Główne okno - czerwone</title>

</head>

<body bgcolor="#ff9999">

<h1>Okno główne - czerwone</h1>

<p><a href="zolta.html" target="strona_zolta">Otwórz </a> Stronę Żółtą

w nowym oknie przeglądarki.<br>

<a href="blue.html" target="strona_niebieska">Otwórz</a> Stronę Niebieską

w nowym oknie przeglądarki.</p>

<p><a href="green.html" target="strona_zolta">Zastąp</a> Stronę Żółtą

Stroną Zieloną.</p>

</body>

</html>

0x01 graphic

Rysunek 12.3

Okno nadrzędne

0x01 graphic

Powyższy kod tworzy stronę o jasnoczerwonym tle, zawierającą połączenia z pozostałymi trzema stronami. Zapisz ten kod pod nazwą glowna.html.

Teraz utwórz dokument o nazwie zolta.html, którego wygląd pokazuje rys. 12.4. Oto od­powiedni kod:

0x01 graphic

<html>

<head>

<title>Strona Żółta</title>

</head>

<body bgcolor="#ffffcc">

<h1>Strona Żółta</h1>

<p>To pierwsza strona docelowa. Została ona wyświetlona w

ramce <b>strona_zolta</b>.</p>

</body>

</html>

0x01 graphic

Rysunek 12.4

Dokument zolta.html wyświetlany przez przeglądarkę w oknie o nazwie strona_zolta

0x01 graphic

Po zapisaniu pliku zolta.html, utwórz kolejny dokument o nazwie niebieska.html. Jego wygląd pokazany jest na rys. 12.5. Oto kod źródłowy dokumentu:

0x01 graphic

<html>

<head>

<title>Strona Niebieska</title>

</head>

<body bgcolor="#99ccff">

<h1>Strona Niebieska</h1>

<p>To druga strona docelowa. Została ona wyświetlona w

ramce <b>strona_niebieska</b>.</p>

</body>

</html>

0x01 graphic

Rysunek 12.5

Dokument niebieska.html wyświetlany przez przeglądarkę w oknie o nazwie strona_niebieska

0x01 graphic

Kolejny krok to utworzenie czwartego dokumentu o nazwie zielona.html:

0x01 graphic

<html>

<head>

<title>Strona Zielona</title>

</head>

<body bgcolor="#ccffcc">

<h1>Strona Zielona</h1>

<p>To trzecia strona docelowa. Została ona wyświetlona w

ramce <b>strona_zolta</b>. Ta strona powinna zastąpić Stronę

Żółtą w jej oknie przeglądarki.</p>

</body>

</html>

Aby zakończyć to ćwiczenie, wyświetl w przeglądarce stronę glowna.html (tę czerwoną). Kliknij połączenie wskazujące na żółtą stronę, aby wyświetlić ją w nowym oknie przeglądarki. Strona zostanie wyświetlona w nowym oknie przeglądarki, gdyż pierwszy znacznik połączenia zawierał atrybut TARGET="strona_zolta", który przedstawiłam na poniższym fragmencie kodu strony glowna.html:

<p><a href="zolta.html" target="strona_zolta">Otwórz </a> Stronę Żółtą w nowym oknie przeglądarki.<br />

Teraz wróć do głównej (czerwonej) strony i kliknij drugie umieszczone na niej łącze. Niebieska strona zostanie wyświetlona w trzecim oknie przeglądarki. Zwróć uwagę, iż poszczególne otwierane okna przeglądarek nie będą rozmieszczane na ekranie w sposób przedstawiony na rysunku 12.2 — konkretne okna będą się wzajemnie przesłaniać. Otworzenie nowego okna przeglądarki, po kliknięciu drugiego połączenia, spowodowane jest przez atrybut TARGET="strona_niebieska":

<a href="niebieska.html" target="strona_niebieska">Otwórz</a> Stronę Niebieską w nowym oknie przeglądarki.</p>

Każdy z przedstawionych powyżej dwóch przykładów połączeń powodował otworzenie strony docelowej w nowym oknie przeglądarki. Jednak trzecie połączenie umieszczone na stronie glowna.html, dzięki wykorzystaniu atrybutu TARGET="strona_zolta" wyświetla swoją stronę docelową w oknie przeglądarki o nazwie strona_zolta. Poniżej przedstawiony został cały kod tego połączenia:

<p><a href="zielona.html" target="strona_zolta">Zastąp</a> Stronę Żółtą

Stroną Zieloną.</p>

Okno o nazwie Yellow_page zostało otworzone już wcześniej, gdy kliknąłeś połączenie ze Stroną Żółtą. Dlatego Strona Zielona powinna zastąpić stronę, która już jest wyświetlona w tym oknie. Aby sprawdzić, czy tak się dzieje w rzeczywistości, kliknij trzecie połączenie umieszczone na Stronie Czerwonej. W ten sposób, jak pokazałam na rysunku 12.6, zastąpisz Stronę Żółtą (zolta.html), Stroną Zieloną (zielona.html) w oknie przeglądarki o nazwie strona_zolta.

0x08 graphic
0x01 graphic

Rysunek 12.6

Dokument zielona.html wyświetlany przez przeglądarkę w oknie o nazwie strona_zolta

0x01 graphic

Znacznik <BASE>

Stosując atrybut TARGET w definicjach połączeń, napotkasz czasami sytuacje, w których wszystkie połączenia na stronie (lub ich większość) skierowane są do tego samego okna — zdarza się to najczęściej w przypadku korzystania z ramek.

W takich przypadkach, zamiast dodawać atrybut TARGET do każdego znacznika <A>, możesz skorzystać ze znacznika <BASE> i zdefiniować za jego pomocą globalny cel wszystkich połączeń na stronie WWW. Znacznik ten ma następującą postać:

<base target="nazwa_okna">

Jeśli znacznik <BASE> umieszczony zostanie w sekcji <HEAD>…</HEAD> dokumentu, każde połączenie utworzone za pomocą znacznika <A>, nie posiadającego odpowiedniego atrybutu TARGET, spowoduje wyświetlenie wskazywanego przez nie dokumentu w oknie określonym przez kod <BASE TARGET="nazwa_okna">. Na przykład, gdyby znacznik <BASE TARGET="pierwsze_okno"> został umieszczony w kodzie źródłowym pliku glowna.html, to trzy połączenia można by zdefiniować w taki oto sposób:

<html>

<head>

<title>Główne okno - czerwone</title>

<base target="strona_zolta"> <!-- tu dodaj znacznik base -->

</head>

<body bgcolor="#ff9999">

<h1>Okno główne - czerwone</h1>

<p><a href="zolta.html"> <!-- atrybut target niepotrzebny -->

Otwórz </a> Stronę Żółtą w nowym oknie przeglądarki.<br>

<a href="niebieska.html" target="strona_niebieska">Otwórz</a>

Stronę Niebieską w nowym oknie przeglądarki.</p>

<p><a href="zielona.html"> <!-- atrybut target niepotrzebny -->

Zastąp</a> Stronę Żółtą Stroną Zieloną.</p>

</body>

</html>

W tym przypadku dokumenty zolta.html i zielona.html są ładowane do domyślnego okna wskazanego w znaczniku <BASE> (strona_zolta). Ustawienia domyślne nie dotyczą połączenia do do­kumentu niebieska.html, bowiem dla niego zdefiniowane jest własne okno — strona_niebieska.

Możesz również zdefiniować docelowe okno połączenia, używając jednej z dwóch nazw specjalnych. Jeśli w definicji połączenia zastosujesz atrybut TARGET="_blank", otwierane jest nowe okno przeglądarki, które nie ma własnej nazwy. Natomiast jeśli zastosujesz TARGET="_self", do wyświetlenia dokumentu wykorzystane zostanie okno bieżące, a nie okno zdefiniowane w znaczniku <BASE>.

0x01 graphic

Zapamiętaj! Jeśli nie zastosujesz atrybutu TARGET w znaczniku <BASE> i nie wskażesz celu połączenia w znaczniku <A>, otwierany połączeniem dokument zostanie wyświetlony w tej samej ramce, z której pochodzi połączenie.

Posługiwanie się ramkami

Wprowadzenie obsługi ramek w przeglądarce Netscape 2.0 otworzyło nową erę dla twór­ców stron WWW. Dzięki ramkom możesz tworzyć strony zdecydowanie różniące się od wszystkich innych. Możesz umieszczać tabele w tabelach, dodawać do stron nagłówki, stopki i paski z połączeniami, żeby wspomnieć tylko najpopularniejsze opcje.

Jednocześnie ramki zmieniają sposób widzenia „strony” przez przeglądarkę i czytelników. Kiedyś, wyświetlane na ekranie informacje stanowiły zawartość pojedynczej strony HTML — teraz, gdy tworzysz witryny korzystające z ramek, na jednym ekranie wyświetlane są informacje z kilku powiązanych ze sobą, jednak osobnych dokumentów HTML. Rys. 12.7 przed­sta­wia na schemacie, ile osobnych dokumentów jest koniecznych, by stworzyć stronę zapre­zentowaną na rys. 12.1

Rysunek 12.7

Dokumenty HTML, które musisz utworzyć, aby powstał zaprezentowany tu układ ramek

Opis

HTML File — Plik HTML

Frame definition — Definicja ramki

Frame x contents — Zawartość ramki x

Podstawowym dokumentem HTML, który musisz utworzyć, jest dokument układu ramek. Wprowadzasz w nim kody HTML definiujące układ poszczególnych ramek. Dokument przedstawiony w poprzednim przykładzie miał cztery ramki.

Dokument układu ramek zawiera także nazwy dokumentów HTML, których zawartość będzie wyświetlana w odpowiednich ramkach. Każdy z pozostałych czterech dokumentów (wyświetlanych w poszczególnych ramkach) zawiera normalne znaczniki HTML definiujące zawartość poszczególnych ramek. Do tych dokumentów odwołuje się właśnie dokument układu ramek.

0x01 graphic

Dokument układu ramek to strona, która zawiera informacje na temat układu poszczególnych ramek oraz nazwy dokumentów HTML, które zostaną w nich umieszczone.

Znacznik <FRAMESET>

Aby móc stworzyć dokument układu ramek, musisz poznać znacznik <FRAMESET>. Znacznik ten zastępuje w dokumencie HTML znacznik <BODY>, tak jak poka­zano poniżej:

<html>

<head>

<title>Tytuł strony</title>

</head>

<frameset>

... tu rozpoczyna się definicja Twojej ramki. ...

</frameset>

</html>

Zrozumienie różnicy pomiędzy zwykłym dokumentem HTML, a dokumentem zawierającym definicje układu ramek jest niezwykle istotne. Umieszczenie znacznika <FRAMESET> w do­kumencie HTML wyklucza stosowanie znacznika <BODY>. Innymi słowy, oba znaczniki wzajemnie się wykluczają. Co więcej, dokument układu ramek nie może zawie­rać innych znaczników formatujących, połączeń oraz dokumentów tekstowych. Jedynym wyjątkiem jest sytuacja, gdy stosowany jest znacznik <NOFRAMES>, przeczytasz o tym w dalszej części tego rozdziału. Element <FRAMESET> zawiera więc wyłącznie definic­je ra­mek dla tego dokumentu, noszą one nazwę układu ramek.

Znacznik <FRAMESET> został dołączony do specyfikacji HTML 4.0, podobnie jak i jego dwa atrybuty: COLS i ROWS.

0x01 graphic

Układ ramek to grupa ramek zdefiniowanych w dokumencie układu ramek przy zastosowaniu znaczników <FRAMESET>.

Atrybut COLS

Definiując układ ramek za pomocą znacznika <FRAMESET>, musisz dołączyć do definicji jeden z atrybutów znacznika. Pierwszym z nich jest atrybut COLS. Oto odpowiednia postać znacznika:

<frameset cols="szerokość kolumny, szerokość_kolumny, ...">

Atrybut COLS informuje przeglądarkę, by podzieliła ekran na odpowiednią liczbę pionowych ramek, których szerokości zdefiniowane są poprzez kolejne wartości atrybutu COLS (szerokość_kolumny), oddzielone przecinkami. Szerokość ramki może być wprowadzana na trzy sposoby: bezpośrednio w pikselach, w procentach względem całkowitej szerokości układu ramek oraz za pomocą znaku „*”. W tym ostatnim przypadku przeglądarka przydziela tak zdefiniowanej ramce maksymalną możliwą szerokość.

Jeśli w pełnej definicji układu ramek pojawi się znacznik <FRAMESET> w postaci <FRAMESET COLS="100,50%,*">, ekran zostanie podzielony na trzy pionowe ramki, takie jak pokazane na rys. 12.8. Pierwsza ramka ma szerokość 100 pikseli, szerokość drugiej stanowi 50% szerokości całego okna przeglądarki, a trzecia zajmie pozostały obszar.

0x01 graphic

<html>

<head>

<title>Trzy kolumny</title>

</head>

<frameset cols="100, 50%, *">

<frame src="kol_lewa.html">

<frame src="kol_srodkowa.html">

<frame src="kol_prawa.html">

</frameset>

</html>

0x01 graphic

Rysunek 12.8

Atrybut COLS definiuje liczbę pionowych ramek (lub kolumn) układu ramek

0x01 graphic

0x01 graphic

Ponieważ projektowane przez Ciebie strony będą wyświetlane w oknach o różnych rozmiarach, powinieneś unikać stosowania absolutnych rozmiarów ramek. Jeśli jednak definiujesz rozmiar ramki w ten sposób, wymiary pozostałych ramek określaj za pomocą gwiazdki (*), aby pozostała część ekranu została wypełniona.

0x01 graphic

Aby zdefiniować układ trzech ramek, w którym szerokości wszystkich kolumn są jednakowe, zastosuj atrybut COLS="*, *, *". W ten sposób nie musisz walczyć z procentami; przeglądarka obsługująca ramki automatycznie przydzieli ramkom identyczne obszary.

Atrybut ROWS

Atrybut ROWS działa tak, jak atrybut COLS, z tym, że podział ekranu następuje w poziomie. Na przykład, aby podzielić ekran na dwie ramki o równej wysokości, takie jak na rys. 12.9, odpowiedni kod powinien wyglądać w ten sposób:

<html>

<head>

<title>Trzy kolumny</title>

</head>

<frameset rows="50%, 50%">

<frame src="wiersz_gorny.html">

<frame src="wiersz_dolny.html">

</frameset>

</html>

Alternatywna postać to:

<frameset rows="*,*">

Rysunek 12.9

Atrybut ROWS definiuje liczbę pozio­mych ramek (lub wierszy) układu ra­mek

0x01 graphic

0x01 graphic

Jeśli spróbujesz sam wprowadzać omówione przykłady układów ramek, stwierdzisz, że znacznik <FRAMSET> nie powoduje oczekiwanego podziału na ramki. Dzieje się tak, bowiem zawartość wierszy i kolumn układu ramek nie została jeszcze zdefiniowana. Aby ją zdefiniować, musisz skorzystać ze znacznika <FRAME>. Zajmujemy się tym w następnym podrozdziale.

Znacznik <FRAME>

Po zdefiniowaniu układu ramek, musisz stowarzyszyć dokumenty HTML z poszczególnymi ramkami. Służy do tego znacznik <FRAME>, którego zawartość powinna być następująca:

<frame src="dokument_URL">

Taka definicja powinna pojawić się dla każdej z ramek układu ramek utworzonego za po­mocą znacznika <FRAMESET>:

0x01 graphic

<html>

<head>

<title>Znacznik FRAME</title>

</head>

<frameset rows="*,*,*">

<frame src="doc1.html">

<frame src="doc2.html">

<frame src="doc3.html">

</frameset>

</html>

W tym przykładzie definiowany jest układ trzech poziomych ramek o jednakowej wysokoś­ci (patrz rys. 12.10). Zawartość dokumentu doc1.html wyświetlana jest w pierwszej ramce, dokumentu doc2.htm w drugiej, a w trzeciej zawartość pliku doc3.html.

0x01 graphic

Rysunek 12.10

Zawartość każdej z ramek definiowana jest za pomocą znacznika <FRAME>

0x01 graphic

0x01 graphic

Gdy tworzysz dokument definiujący układ ramek, pomocne jest zastosowanie wcięcia do znaczników <FRAME>; w ten sposób oddzielisz je wizualnie od znaczników <FRAMESET>. Wcięcie nie wpływa w żaden sposób na wygląd stron WWW, pomaga natomiast czytać postać źródłową.

Znacznik <NOFRAMES>

A co się stanie, jeśli dokument zawierający definicje ramek jest ładowany do przeglądarki, która nie potrafi obsługiwać ramek? Nic, w przeglądarce pojawi się pusta strona. Na szczęście, można rozwiązać ten problem.

Specjalny znacznik <NOFRAMES> umożliwia zdefiniowanie w dokumencie układu ramek dodatkowego fragmentu kodu HMTL. Kod HTML umieszczony wewnątrz tego znacznika nie jest wyświetlany w przeglądarkach obsługujących ramki; pojawia się on wyłącznie w przeglądarkach, które nie są w stanie wyświetlać ramek.

<html>

<head>

<title>Układ ramek bez żadnej zawartości w ramkach</title>

</head>

<frameset>

Tu rozpoczynają się definicje ramek.

<noframes>

Tu wprowadź dowolny tekst, połączenia i znaczniki.

</noframes>

</frameset>

</html>

Tekst, zawarty między otwierającym znacznikiem <NOFRAMES> a znacznikiem zamykającym </NOFRAMES>, nie będzie wyświetlany przez przeglądarki, które obsługują ramki, a pojawi się jedynie tam, gdzie obsługa ramek jest niemożliwa. A zatem, wykorzystując ramki oraz element <NORFRAMES>, możesz więc tworzyć strony, które działają w obu typach przeglądarek. W dalszej części rozdziału zdefiniujesz zawartość elementu <NOFRAMES>.

Zmiana obramowań ramek

Jak zapewne zauważyłeś, wszystkie ramki w tym rozdziale mają szerokie obramowania oddzielające je od siebie. W pierwszej implementacji ramek, w Netscape 2.0, użytkownik nie miał możliwości wpływania na sposób oddzielania ramek. W przeglądarkach Netscape 3.0 i Internet Explorer 3.0 pojawiły się nowe atrybuty znaczników <FRAME> i <FRAMESET>, które umożliwiają kontrolę koloru i szerokości obramowania ramek.

Rozpocznijmy od znacznika <FRAME>. Korzystając z atrybutów i FRAMEBORDER, możesz sto­sować obramowania lub z nich rezygnować oraz definiować ich kolor. Wartością atrybutu BORDERCOLOR może być nazwa koloru lub liczba szesnastkowa, która go definiuje. Atrybut FRAMEBORDER przybiera dwie możliwe wartości: 1 (oznaczającą, że ramki mają być wyświetlane) oraz 0 (oznaczającą, że ramki mają być niewidoczne).

0x01 graphic

Jeśli zrezygnujesz z obramowania, przeglądarka obsługująca ramki nie wyświetli trójwymiarowego obramowania ramki, ale pozostawi na nie wolną przestrzeń.

0x01 graphic

Na liście atrybutów specyfikacji HTML 4.0 znajduje się jedynie atrybut FRAMEBORDER. Atrybut BORDERCOLOR jest traktowany jako rozszerzenie.

Na przykład, przedstawiony poniżej fragment kodu wyświetla ciemnoczerwoną (#cc3333) ramkę wokół środkowej ramki układu:

<html>

<head>

<title>Znacznik FRAME</title>

</head>

<frameset rows="*,*,*">

<frame src="doc1.html">

<frame src="doc2.html" frameborder="1" bordercolor="#cc3333">

<frame src="doc3.html">

</frameset>

</html>

Choć w standardzie HTML-a 4.0 nie została przewidziana możliwość zastosowania któregokolwiek z tych atrybutów w znaczniku <FRAMESET>, to jednak zarówno i w Internet Explorerze, jak i w Netscape Navigatorze można ich używać do określania domyślnego wyglądu całego układu ramek.

Oczywiście, korzystanie z kolorowych obramowań może być źródłem nieporozumień. W przedstawionym poniżej przykładowym układzie ramek występuje konflikt, gdyż dwóm ramkom mającym wspólną krawędź zostały przypisane inne kolory (przy użyciu atrybutu BORDERCOLOR):

<html>

<head>

<title>Znacznik FRAME</title>

</head>

<frameset rows="*,*,*" frameborder="0">

<frame src="doc1.html" frameborder="1" bordercolor="#yellow">

<frame src="doc2.html" bordercolor="#cc3333">

<frame src="doc3.html" >

</frameset>

</html>

W tym przypadku układ ramek został zdefiniowany jako nieposiadający obramowań, nato­miast w definicji pierwszej ramki umieszczono obramowanie. Jak ten problem zostanie roz­wiązany? W takich sytuacjach należy zastosować trzy proste zasady:

Atrybuty dodatkowe

W tabeli 12.1 przedstawiłam kilka dodatkowych atrybutów znacznika <FRAME>. Atrybuty te umożliwiają uzyskanie dodatkowej kontroli sposobu interakcji użytkownika z ramkami. Pozostałe atrybuty określają postać marginesów oraz odstępów pomiędzy ramkami oraz sposób wyświetlania pasków przewijania.

Tabela 12.1: Atrybuty znacznika <FRAME>

Atrybut

Wartość

Opis

FRAMEBORDER

1

Wyświetla obramowanie wokół każdej z ramek (wartość domyślna).

FRAMEBORDER

0

Tworzy ramki bez obramowań.

LONGDESC

URL

Określa URL strony zawierającej bardziej wyczerpujący opis zawartości układu ramek. Atrybut ten jest przede wszystkim używany w przeglądarkach, które nie prezentują stron w formie wizualnej.

MARGINHEIGHT

piksele

Aby określić wysokość marginesu wyświetlanego powyżej oraz poniżej dokumentu wewnątrz ramki, przypisz temu atrybutowi odpowiednią wartość liczbową.

MARGINWIDHT

piksele

Aby określić szerokość marginesu wyświetlanego z lewej oraz prawej strony dokumentu wewnątrz ramki, przypisz temu atrybutowi odpowiednią wartość liczbową.

NAME

łańcuch

Określa nazwę ramki, wykorzystywaną przy opisywaniu ramek, w jakich mają być wyświetlane strony docelowe połączeń.

NORESIZE

Według domyślnych ustawień użytkownicy mogą zmieniać położenie krawędzi wyświetlanych wokół ramki, przeciągając te krawędzie przy użyciu myszy. Zastosowanie tego atrybutu uniemożliwia modyfikację położenia krawędzi ramki.

SCROLLING

AUTO

Domyślnie, jeśli zawartość ramki zajmuje większy obszar, niż obszar udostępniany przez ramkę, Netscape automatycznie wyposaża ramkę w paski przewijania, aby użytkownicy, przewijając zawartość, mieli dostęp do całego dokumentu.

SCROLLING

NO

Takie ustawienie powoduje, że paski przewijania nie będą wyświetlane (pamiętaj jednak, że użytkownik może w ten sposób zostać odcięty od ukrytej części dokumentu, jeśli zawartość dokumentu nie zmieści się w obszarze ramki).

SCROLLING

YES

W takim przypadku paski przewijania będą wyświetlane w ramce zawsze, niezależnie od potrzeb.

SRC

URL

Określa URL dokumentu HTML, który zostanie początkowo wyświetlony w ramce, w momencie pierwszego wyświetlenia układu ramek w przeglądarce.

Tworzenie złożonych układów ramek

Układy ramek, o których uczyłeś się dotychczas, reprezentują podstawowe typy ramek. Zazwyczaj jednak będziesz stosował zdecydowanie bardziej skomplikowane układy.

Dlatego właśnie, by pomóc Ci w zrozumieniu możliwych kombinacji ramek, połączeń i do­kumentów, które są stosowane w witrynie WWW, w tym podrozdziale zajmiemy się two­rzeniem złożonych układów ramek.

Ćwiczenie 12.2. Tworzenie stron z zawartością układu ramek

W większości przypadków układy ramek służą do stworzenia paska nawigacyjnego ułatwiającego użytkownikom poruszanie się po witrynie. Zdecydowanie najpopularniejszym miejscem, w którym są umieszczane takie paski nawigacyjne, jest lewa część okna przeglądarki. Za każdym razem, gdy użytkownik klika połączenie w lewej, nawigacyjnej ramce, wybrana strona jest wyświetlana w ramce głównej. Bardzo prosty układ ramek, jaki stworzysz w tym ćwiczeniu przedstawi tę technikę. Choć nie jest to praktyczny przykład, to jednak jest prosty i zabawny, a dodatkowo demonstruje te same techniki, które są wykorzystywane przy tworzeniu pasków nawigacyjnych.

Zazwyczaj, projektując strony WWW wykorzystujące ramki, układ ramek projektowany jest, zanim zostanie podjęty trud związany z projektowaniem zawartości stron, które będą w nim wyświetlane. Wynika to z faktu, iż należy znać wielkość ramek jeszcze przed rozpoczęciem tworzenia grafik oraz pozostałej zawartości stron.

W tym ćwiczeniu wykonam czynności w odwrotnej kolejności, lecz mam po temu ważny powód. Sądzę, że zobaczenie „faktycznej” zawartości ramek, przed zaprojektowaniem układu ramek, może pomóc Ci zrozumieć, w jaki sposób jego poszczególne elementy pasują do siebie. Właśnie dlatego najpierw zaprojektuję zawartość stron.

Strony przedstawione w dalszej części ćwiczenia nie zawierają żadnych znaczników służących do tworzenia układów ramek, o których mówiliśmy w poprzedniej części rozdziału. W sumie zostanie użytych osiem stron, więc obiecuję, że ich kod będzie jak najkrótszy, tak abyś mógł je stworzyć naprawdę szybko. Gotowy?

Podpowiedź

Zazwyczaj, określając strukturę układu ramek, nie będziesz chciał zawracać sobie głowy szczegółami, takimi jak faktyczna zawartość stron, które będą wyświetlane w ramkach. Jednak układ ramek nie zostanie poprawnie wyświetlony w przeglądarce, jeśli nie zdefiniujesz w nim znaczników <FRAME> odwołujących się do istniejących dokumentów. W przypadku, gdybyś chciał tworzyć układ ramek przed stworzeniem stron, które mają być w nim wyświetlane, możesz stworzyć mały, zupełnie pusty dokument HTML o nazwie, na przykład: test.html i użyć go do testowania układu.

Układ ramek, jaki stworzysz w ćwiczeniach od 12.3 do 12.7, składa się z trzech ramek. Ich układ został przedstawiony na rysunku 12.11. W pierwszej kolejności ładowany jest dokument układu ramek, który instruuje przeglądarkę, iż jej okno należy podzielić na trzy części. Następnie są pobierane trzy strony wyświetlane w górnej, lewej oraz głównej ramce. W końcu, jeśli użytkownik próbuje otworzyć układ ramek w przeglądarce, która dysponuje wymaganymi możliwościami, to zostaje pobrana i wyświetlona strona alternatywna.

Rysunek 12.11

Stworzysz układ składający się z trzech ramek: górnej, lewej oraz głównej

0x01 graphic

W górnej ramce zawsze będzie wyświetlana ta sama strona WWW, o nazwie tytul.html. Strona o nazwie wybor.html zawiera listę połączeń z sześcioma stronami podającymi powody nieobecności, o nazwach powod1.html do powod6.html. Każda z tych sześciu stron zostanie wyświetlona w głównej ramce, zajmującej prawą, dolną część układu.

Zaczniemy od kodu tworzącego górną ramkę. Ta strona zawsze będzie widoczna w układzie ramek. Bez trudu można na niej umieścić dowolne informacje, jakie mają być zawsze widoczne w czasie, gdy użytkownik będzie przeglądał zawartość witryny. W realnych przykładach ramka ta może zawierać nazwę witryny, jej logo, adres poczty elektronicznej autora oraz inne, podobne informacje. Wpisz przedstawiony poniżej kod i zapisz go na dysku w pliku o nazwie tytul.html. Przykład tej strony został przedstawiony na rysunku 12.12.

<html>

<head>

<title>Nie ma mnie przy biurku, gdyż</title>

</head>

<body bgcolor="#cc6600" text="#ffcc33">

<h3>Nie ma mnie przy biurku, gdyż ... </h3>

</body>

</html>

Rysunek 12.12.

Zawartość górnej ramki układu ramek

0x01 graphic

Teraz stworzysz lewą ramkę układu. Zazwyczaj, w praktycznych zastosowaniach, ramka ta zawiera tekstowe lub graficzne paski nawigacyjne umożliwiające przechodzenie do kilku kluczowych stron witryny. Witryna personalna może, na przykład, zawierać pasek nawigacyjny umożliwiający przechodzenie do strony głównej, listy gości, strony o zainteresowaniach autora, itp. W przypadku witryny firmowej, strona ta może zawierać sekcje dotyczące produktów, serwisu, często zadawanych pytań, sekcję dotyczącą zatrudnienia, itp.

Strona przedstawiona poniżej działa dokładnie w taki sam sposób, jak wszystkie paski nawigacyjne, które można znaleźć w witrynach na WWW; po kliknięciu odpowiedniego połączenia, wyświetla odpowiednią stronę w ramce głównej. Strona ta zawiera połączenia do sześciu stron o nazwach powod1.html do powod6.html, które stworzysz w dalszej części ćwiczenia.

Po wpisaniu przedstawionego poniżej kodu strony, zapisz ją na dysku w pliku o nazwie wybor.html i umieść w tym samym folderze, w którym wcześniej zapisałeś dokument tytul.html. Twoja strona powinna wyglądać podobnie do strony przedstawionej na rysunku 12.13.

<html>

<head>

<title>Powody mojej nieobecności</title>

</head>

<body bgcolor="#006699" text="#FFCC66" link="#FFFFFF" vlink="#66CCFF" alink="#FF6666">

<p>Wybierz powód:</p>

<hr>

<p><a href="powod1.html" target="glowna">Powód 1</a></p>

<p><a href="powod2.html" target="glowna">Powód 2</a></p>

<p><a href="powod3.html" target="glowna">Powód 3</a></p>

<p><a href="powod4.html" target="glowna">Powód 4</a></p>

<p><a href="powod5.html" target="glowna">Powód 5</a></p>

<p><a href="powod6.html" target="glowna">Powód 6</a></p>

</body>

</html>

Rysunek 12.13.

Zawartość lewej ramki układu

0x01 graphic

Teraz przejdziemy do stworzenia sześciu stron, które będą wyświetlane w głównej ramce, gdy użytkownik kliknie jedno z połączeń dostępnych w lewej ramce układu. Ramka główna jest przeznaczona do wyświetlania stron, które normalnie byłyby wyświetlane w całym oknie przeglądarki. Jest jednak pewna rzecz, o jakiej powinieneś pamiętać, jeśli masz zamiar wyświetlać strony w układzie zawierającym lewą ramkę nawigacyjną. Otóż grafika oraz pozostałe elementy strony powinne być mniejsze niż w przypadku, gdybyś wyświetlał je w całym oknie przeglądarki.

Aby przykładowe strony były względnie proste, podstawowy układ każdej z nich będzie taki sam. Na każdej ze stron będą się zmieniały wyłącznie trzy, przedstawione poniżej elementy.

Aby stworzyć pierwszą z sześciu stron, jakie będą wyświetlane w ramce głównej, wpisz podany poniżej kod i zapisz go w dokumencie o nazwie powod1.html. Na rysunku 12.14 pokazałam, w jaki sposób będzie wyglądała każda ze stron, wyświetlona w Internet Explorerze.

<html>

<head>

<title>Powód 1 - Zapomniałem drugiego śniadania</title>

</head>

<body bgcolor="#FFFFFF">

<h2><img src="uhoh.jpg" width="275" height="275" align="LEFT">

Zapomniałem w domu drugiego śniadania.</h2>

</body>

</html>

Rysunek 12.14.

Pierwsza z sześciu stron wyświetlanych w głównej ramce

0x01 graphic

W podobny sposób należy stworzyć pięć pozostałych stron wyświetlanych w ramce głównej. Zmodyfikuj wpisany przed chwilą kod, aby stworzyć drugą z sześciu stron. Jedyne różnice, jakie należy prowadzić (w porównaniu z kodem dokumentu powod1.html), zostały wyróżnione szarym tłem. Zapisz przedstawiony poniżej kod w pliku o nazwie powod2.html. Oto kod tego dokumentu:

<html>

<head>

<title>Powód 2 - Kawa</title>

</head>

<body bgcolor="#FFFFFF">

<h2><img src="flirty.jpg" width="275" height="275" align="LEFT">

Robię sobie kawę.</h2>

</body>

</html>

Aby stworzyć trzecią stronę, ponownie zmodyfikuj kod i zapisz go w pliku o nazwie powod3.html. Kod tej strony przedstawiłam poniżej:

<html>

<head>

<title>Powód 3 - Nie pytaj!</title>

</head>

<body bgcolor="#FFFFFF">

<h2><img src="grumpy.jpg" width="275" height="275" align="LEFT">

Nie Twój interes!</h2>

</body>

</html>

Oto kod czwartej strony (powod4.html):

<head>

<title>Powód 4 - Obiad</title>

</head>

<body bgcolor="#FFFFFF">

<h2><img src="happy.jpg" width="275" height="275" align="LEFT">

Poszedłem na obiad.</h2>

</body>

</html>

Piąta strona (powod5.html) wygląda następująco:

<head>

<title>Powód 5 - U szefa</title>

</head>

<body bgcolor="#FFFFFF">

<h2><img src="scared.jpg" width="275" height="275" align="LEFT">

Poszedłem na rozmowę z szefem.</h2>

</body>

</html>

A oto kod ostatniej, szóstej strony (powod6.html):

<head>

<title>Powód 6 - Już tu nie pracuję</title>

</head>

<body bgcolor="#FFFFFF">

<h2><img src="duh.jpg" width="275" height="275" align="LEFT">

Właśnie mnie wyrzucili mnie.</h2>

</body>

</html>

Teraz dysponujesz już sześcioma stronami, które będą wyświetlane w głównej ramce układu. Jesteś już gotów, by stworzyć sam układ ramek.

Ćwiczenie 12.3. Łączenie atrybutów ROWS i COLS

Aby przypomnieć Ci wygląd układu ramek, który będziesz miał stworzyć, na rysunku 12.15 jeszcze raz przedstawiłam wygląd gotowej strony. Na jej podstawie można zaprezentować w prosty sposób, jak należy wykorzystywać ramki do stworzenia witryny o skomplikowanej strukturze.

0x08 graphic
Rysunek 12.15

Układ składający się z trzech ramek: górnej, lewej i głównej

0x01 graphic

0x01 graphic

Przy projektowaniu skomplikowanego układu ramek niezastąpionym narzędziem jest notatnik. Pomoże Ci on naszkicować strukturę układu i będzie także nieoceniony, gdy zaczniesz dodawać połączenia. Przekonasz się o tym w ćwiczeniu 12.5, pt.: „Stosowanie połączeń i ramek posiadających nazwy”.

Na rys. 12.15 przedstawiony jest układ, w którym prawa część okna przeglądarki podzielona jest na dwie poziome ramki, natomiast ramka trzecia, umiejscowiona z lewej strony okna zajmuje całą jego wysokość. Aby utworzyć dokument definiujący taki układ ramek, otwórz swój edytor tekstu i wprowadź następujące strukturalne szczegóły HTML-a:

<html>

<head>

<title>Dlaczego mnie nie ma - układ ramek</title>

</head>

<frameset>

</frameset>

</html>

Teraz musisz zdecydować, czy w podstawowym znaczniku <FRAMESET> zastosujesz atrybut ROWS czy COLS. Spójrz na swój szkic (jest nim w tym przypadku rys. 12.15) i sprawdź, czy w jakimś przypadku obszar ramki rozciąga się w poprzek lub wzdłuż ekranu. Jeśli którakolwiek z ramek układu zajmuje całą wysokość okna przeglądarki, tak jak w tym przykładzie, to musisz najpierw zdefiniować układ ramek z atrybutem COLS, w przeciwnym przypadku (gdy jedna z ramek układu zajmuje całą szerokość okna) — układ z atrybutem ROWS. Jeśli natomiast żadna z ramek nie rozciąga się na cały ekran w żad­nym z kierunków, powinieneś wystartować od definicji układu ramek z atrybu­tem COLS.

To samo można wyrazić prościej, w postaci trzech zasad: