Rßmy

Ji°φ Kosek ml.

Dnes pon∞kud p°ekroΦφme hranice HTML 3.2. Povφme si n∞co o rßmech. Rßmy umo₧≥ujφ rozd∞lit okno prohlφ₧eΦe na n∞kolik Φßstφ; v ka₧dΘ Φßsti pak m∙₧e b²t zobrazena jinß strßnka. Navφc lze vÜe ud∞lat tak, aby zvolenφ odkazu v jednom rßmu, vyvolalo naΦtenφ strßnky do jinΘho rßmu. Tak m∙₧eme naÜe strßnky obohatit nap°φklad o pro u₧ivatele pohodlnΘ navigaΦnφ menu. Rßmy dnes podporuje valnß v∞tÜina prohlφ₧eΦ∙, nejsou vÜak souΦßstφ standardu HTML 3.2. Jejich popis je a₧ ve verzi 4.0. I p°esto nßm dnes nic v pou₧φvßnφ rßm∙ nebrßnφ. V p°φÜtφm dφle serißlu si navφc povφme, jak za°φdit, aby strßnka s rßmy byla Φitelnß i ve starÜφch prohlφ₧eΦφch bez podpory rßm∙.

Definice rozlo₧enφ rßm∙ na strßnce

Ji₧ jsme °ekli, ₧e rßmy umo₧≥ujφ rozd∞lit strßnku na n∞kolik Φßstφ. Ka₧dß Φßst pak zobrazuje zcela b∞₧nou HTML strßnku. Pro vytvo°enφ rßm∙ tedy staΦφ pomocφ jednoho HTML dokumentu popsat rozlo₧enφ rßm∙ na strßnce a ka₧dΘmu rßmu urΦit, kterß strßnka se v n∞m mß zobrazit. Z toho vypl²vß, ₧e strßnka definujφcφ rozlo₧enφ rßm∙ bude mφt pon∞kud jinou strukturu ne₧ obyΦejn² HTML dokument.

Strßnka definujφcφ rozlo₧enφ rßm∙ musφ obsahovat zßhlavφ (HEAD) a definici rozlo₧enφ rßm∙ (FRAMESET). SamotnΘ t∞lo dokumentu (BODY) nemusφ b²t uvedeno -- zobrazuje se pouze v t∞ch prohlφ₧eΦφch, kterΘ rßmy nepodporujφ. Je to tedy to pravΘ mφsto, pro uvedenφ odkazu na alternativnφ verzi dokumentu, kterß neobsahuje rßmy.

Samotnou definici rozlo₧enφ rßm∙ na strßnce m∙₧eme provΘst pomocφ elementu FRAMESET. U n∞j lze pou₧φt dva atributy ROWS a COLS. Atributy obsahujφ Φßrkami odd∞len² seznam velikostφ jednotliv²ch vodorovn²ch Φi svisl²ch rßm∙. PoΦet polo₧ek v seznamu urΦuje poΦet rßm∙, kterΘ se na strßnce vytvo°φ. Obvykle se najednou pou₧φvß pouze jeden z atribut∙. Pokud pou₧ijeme oba dva najednou, vytvo°φ se m°φ₧ka -- poΦet rßm∙ pak odpovφdß souΦinu poΦtu vodorovn²ch a svisl²ch Φßstφ.

JednotlivΘ prvky seznamu vymezujφcφ velikost jednotliv²ch rßm∙, mohou b²t zadßny t°emi zp∙soby. Asi nejjednoduÜÜφ zp∙sob je zadat p°φsluÜn² rozm∞r napevno v pixelech. M∙₧eme pou₧φt i procentnφ hodnotu, kterß se bude vztahovat k Üφ°ce resp. v²Üce okna prohlφ₧eΦe. P°i t°etφm zp∙sobu zßpisu se velikost udßvß jako celΘ Φφslo dopln∞nΘ o hv∞zdiΦku ('*'). P°i rozd∞lovßnφ volnΘ plochy se nejprve p°i°adφ prostor rßm∙m, jejich₧ velikost je urΦena v pixelech nebo jako procento. ZbylΘ mφsto se pak rozd∞lφ mezi rßmy s velikostφ urΦenou pomocφ hv∞zdiΦky. Mφsto se p°id∞lφ proporcionßln∞ podle Φφsel uveden²ch p°ed hv∞zdiΦkou. Zßpis '*' odpovφdß zßpisu '1*'. Na obrßzku 1 si m∙₧eme prohlΘdnout n∞kolik ukßzek rozd∞lenφ okna prohlφ₧eΦe na rßmy.

Obr. 1: Jak lze pomocφ FRAMESET rozd∞lit strßnku na rßmy

Vidφme, ₧e p°φpady komplikovan∞jÜφho rozlo₧enφ rßm∙ m∙₧eme elegantn∞ vy°eÜit pomocφ vzßjemnΘho vno°enφ FRAMESET.

Definice obsahu rßmu

Ji₧ umφme definovat rozlo₧enφ rßm∙ na strßnce. Zb²vß tedy urΦit strßnky, kterΘ se v jednotliv²ch rßmech objevφ. K tomuto ·Φelu slou₧φ element FRAME a jeho atribut SRC. NaÜi poslednφ ukßzku rozlo₧enφ rßm∙ doplnφme o definici obsahu rßm∙. Zφskßme tak naÜi prvnφ strßnku s rßmy:
<!DOCTYPE HTML PUBLIC "-//W3C/DTD HTML 4.0 Draft//EN">
<HTML>
<HEAD>
    <TITLE>Prvnφ strßnka s rßmy</TITLE>
</HEAD>
<FRAMESET ROWS="100, *">
    <FRAME SRC="banner.html">
    <FRAMESET COLS="30%, 70%">
        <FRAME SRC="menu.html">
        <FRAME SRC="uvodni.html">
    </FRAMESET>
</FRAMESET>
</HTML>
Na skuteΦn²ch strßnkßch s rßmy v∞tÜinou tag <FRAME> obohatφme jeÜt∞ o dalÜφ atributy.

Pokud chceme, aby velikost rßmu nemohl u₧ivatel m∞nit, pou₧ijeme atribut NORESIZE. Hodφ se v∞tÜinou v p°φpadech, kdy je obsah rßmu tvo°en obrßzkem -- u obrßzku znßme p°esn² rozm∞r a rßm m∙₧eme nastavit tak, aby se do n∞j obrßzek veÜel cel². V ostatnφch p°φpadech bychom m∞li u₧ivateli ponechat jistou volnost, aby si mohl velikost rßm∙ p°izp∙sobit sv²m individußlnφm pot°ebßm a velikosti svΘ obrazovky.

DalÜφ atribut, kter² m∙₧eme u FRAME pou₧φt, je SCROLLING. Tento atribut rozhoduje o tom, zda bude rßm dopln∞n posuvnφkem, kter² umo₧nφ u₧ivateli pohyb po delÜφch strßnkßch zobrazen²ch v rßmu. Atribut m∙₧e nab²vat t°φ hodnot: YES, NO a AUTO. Pou₧itφm SCROLLING=YES si u rßmu p°φtomnost posuvnφku vynutφme. S hodnotou SCROLLING=NO musφme zachßzet opatrn∞ -- m∙₧e se stßt, ₧e na obrazovce s ni₧Üφm rozliÜenφm by si u₧ivatel nemohl p°eΦφst cel² obsah strßnky. Standardn∞ mß atribut hodnotu AUTO, kterß automaticky doplnφ posuvnφk v p°φpadech, kdy je strßnka v∞tÜφ ne₧ p°φsluÜn² rßm.

Normßln∞ jsou od sebe jednotlivΘ rßmy odd∞leny ·zk²m rßmeΦkem. Pokud nechceme mφt okolo rßmu rßmeΦek, staΦφ pou₧φt atribut FRAMEBORDER=0. Nesmφme vÜak zapomenout na uvedenφ atributu u vÜech rßm∙, kterΘ s rßmeΦkem sousedφ.

Pomocφ atribut∙ MARGINWIDTH a MARGINHEIGHT m∙₧eme ovliv≥ovat vzdßlenost obsahu rßmu od okraj∙. Jako hodnota atribut∙ se uvßdφ poΦet pixel∙. MARGINWIDTH urΦuje okraj nalevo a napravo, MARGINHEIGHT naho°e a dole.

Nakonec jsme si nechali jeden z velmi d∙le₧it²ch atribut∙ -- NAME. NAME slou₧φ k urΦenφ jmΘna rßmu. Na toto jmΘno se pak m∙₧eme odvolßvat v odkazech. Dosßhneme tak efektu, kdy aktivace odkazu v jednom rßmu, vyvolß naΦtenφ strßnky v jinΘm rßmu. Rßm m∙₧eme pojmenovat v podstat∞ libovoln∞, jmΘno by vÜak m∞lo zaΦφnat pφsmenem anglickΘ abecedy (A--Z).

UrΦenφ cφlovΘho rßmu pro odkaz

Pokud p°i definici rßm∙ definujeme jejich jmΘna pomocφ atributu NAME, m∙₧eme se pak v odkazech odvolßvat na jednotlivΘ rßmy pomocφ atributu TARGET. Jemu p°i°adφme jmΘno rßmu, ve kterΘm chceme zobrazit strßnku, kterß se skr²vß za odkazem. Atribut TARGET m∙₧eme pou₧φvat krom∞ odkaz∙ (element A) i u element∙ LINK, AREA a FORM, proto₧e takΘ mohou vyvolat naΦtenφ novΘ strßnky.

PraktickΘ pou₧itφ si ukß₧eme na jednoduchΘm p°φkladu. Dejme tomu, ₧e chceme na Web umφstit elektronickou podobu Φasopisu. Budeme chtφt, aby v levΘ Φßsti obrazovky byl p°ehled vÜech rubrik Φasopisu a v pravΘ v₧dy obsah jednΘ rubriky. Zvolenφ rubriky v levΘ Φßsti by m∞lo zp∙sobit zobrazenφ p°φsluÜnΘ rubriky v pravΘm rßmu. Nejprve tedy vytvo°φme dokument, kter² rozd∞lφ okno na rßmy a naΦte ·vodnφ strßnky. Rßm pro obsah rubrik nesmφme zapomenout pojmenovat:

<!DOCTYPE HTML PUBLIC "-//W3C/DTD HTML 4.0 Draft//EN">
<HTML>
<HEAD>
    <TITLE>ObΦansk² obΦasnφk</TITLE>
</HEAD>
<FRAMESET COLS="30%, 70%">
    <FRAME SRC="rubriky.html">
    <FRAME SRC="uvodnik.html" NAME=Rubrika>
</FRAMESET>
</HTML>
Nßs hlavn∞ zajφmß, jak bude vypadat strßnka s p°ehledem vÜech rubrik -- rubriky.html:
<!DOCTYPE HTML PUBLIC "-//W3C/DTD HTML 4.0 Draft//EN">
<HTML>
<HEAD>
    <TITLE>P°ehled rubrik</TITLE>
</HEAD>
<BODY>
OOO aneb "Obsah ObΦanskΘho obΦasnφku":
<UL>
    <LI><A HREF=uvodnik.html TARGET=Rubrika>┌vodnφk</A>
    <LI><A HREF=domov.html TARGET=Rubrika>Zprßvy
         z domova</A>
    <LI><A HREF=zahranici.html TARGET=Rubrika>Zprßvy ze
         sousedstvφ</A>
    <LI><A HREF=inzerce.html TARGET=Rubrika>Inzerce fÜeho
         drugu</A>
</UL>
</BODY>
</HTML>
Pou₧itφ atributu TARGET zajistφ, ₧e obsahy jednotliv²ch rubrik (ulo₧enΘ v souborech uvodnik.html, domov.html, zahranici.html a inzerce.html) se zobrazφ v pravΘm rßmu.

Pokud strßnka -- jako v naÜem p°φklad∞ -- slou₧φ jako jakΘsi menu, je v²hodnΘ specifikovat jmΘno cφlovΘho rßmu spoleΦnΘ pro vÜechny odkazy na strßnce. UÜet°φme si tak psanφ. Standardnφ jmΘno cφlovΘho rßmu nastavφme pomocφ tagu <BASE TARGET=jmΘno_rßmu>. Nesmφme zapomenout, ₧e element BASE musφ b²t uveden v zßhlavφ dokumentu. Menu ulo₧enΘ v souboru rubriky.html tedy m∙₧eme zapsat zkrßcen∞ jako:

<!DOCTYPE HTML PUBLIC "-//W3C/DTD HTML 4.0 Draft//EN">
<HTML>
<HEAD>
    <TITLE>P°ehled rubrik</TITLE>
    <BASE TARGET=Rubrika>
</HEAD>
<BODY>
OOO aneb "Obsah ObΦanskΘho obΦasnφku":
<UL>
    <LI><A HREF=uvodnik.html>┌vodnφk</A>
    <LI><A HREF=domov.html>Zprßvy z domova</A>
    <LI><A HREF=zahranici.html>Zprßvy ze sousedstvφ</A>
    <LI><A HREF=inzerce.html>Inzerce fÜeho drugu</A>
</UL>
</BODY>
</HTML>
Pokud pou₧ijeme atribut TARGET p°φmo u odkazu, mß v∞tÜφ vßhu ne₧ cφlovΘ okno urΦenΘ elementem BASE. Pokud cφlovΘ okno nespecifikujeme ₧ßdn²m zp∙sobem, strßnka se nahraje do rßmu, kter² odkaz obsahuje. Pokud omylem zadßme neexistujφcφ cφlov² rßm, prohlφ₧eΦ otev°e novΘ okno a p°i°adφ mu toto jmΘno. Jako jmΘna cφlov²ch rßm∙ m∙₧eme pou₧φvat i Φty°i p°eddefinovanΘ hodnoty, je₧ jsou popsßny v tabulce 1.
Tab. 1: Specißlnφ jmΘna rßm∙
_blankDokument se zobrazφ v novΘm nepojmenovanΘm okn∞.
_selfDokument se zobrazφ ve stejnΘm okn∞. Tato vlastnost se m∙₧e hodit v p°φpadech, kdy v dokumentu pou₧ijeme <BASE TARGET=jmΘno_rßmu>.
_parentDokument se zobrazφ v rßmu nebo okn∞, kterΘ obsahuje nejbli₧Üφ nad°azen² element FRAMESET.
_topDokument se nahraje do celΘho okna prohlφ₧eΦe a vÜechny rßmy se zruÜφ.

P°φÜt∞ si ukß₧eme praktickou ukßzku rßm∙ a °ekneme si, jak strßnky s rßmy upravit tak, aby byly p°φstupnΘ i pro starÜφ prohlφ₧eΦe bez podpory rßm∙.

© Ji°φ Kosek 1999