Kehykset ("freimit", engl. frames) ovat selainikkunan osia, jotka toimivat joissakin suhteissa itsenäisinä ali-ikkunoina. Kehyksen sisällä näkyy yleensä HTML-dokumentti, mutta siellä voi olla myös kuva, pelkkä tekstitiedosto tms. Kehyksen sisällys voi olla vieritettävissä (skrollattavissa) ylös ja alas, kenties myös vaakasuunnassa, kuten normaali dokumentti normaalissa selainikkunassa on. Kehykset ovat suorakulmaisia: ikkuna voidaan jakaa kahteen tai useampaan suorakulmaiseen osaan vaakasuunnassa tai pystysuunnassa. Näin saatuja osia voi vielä jakaa edelleen. Periaatteessa muunkinmuotoiset kehykset olisivat ajateltavissa, mutta ne eivät ole mahdollisia HTML:ssä. Yritykset jäljitellä niitä rakentamalla suorakulmaisista paloista monimutkainen kehikko johtavat juuri siihen mihin voi olettaakin niiden johtavan.
Sana "kehys", samoin kuin sana "frame", on aika
epäonnistunut tässä yhteydessä. Parempi sana olisi ehkä "kehikko".
Huomattakoon, että
englannin sana "frame"
tarkoittaa monenlaisia asioita ja
esiintyy HTML:n yhteydessäkin myös
aivan muussa merkityksessä kuin siinä, mistä on kyse.
Taulukoiden yhteydessä voidaan käyttää
frame
-määritettä, joka (joissakin selaimissa)
vaikuttaa reunaviivoihin taulukon ympärillä.
Kehysidea lienee peräisin siitä, että useissa ohjelmissa on mahdollista katsella isohkoa dokumenttia siten, että vasemmalla on kapeassa ali-ikkunassa sisällysluettelo ja oikealla isommassa ali-ikkunassa kulloinkin katsottavan osan sisältö. Seuraavassa on tästä esimerkkikuva, jossa Acrobat Readerillä luetaan sen omaa käyttöohjetta:
Tällaisella esitystavalla on useita etuja. Käyttäjä voi siirtyä vasemmassa kehyksessä, "navigointikehyksessä" haluamaansa kohtaan ja valita klikkaamalla haluamansa kohdan. Jos hän huomaa, ettei se sisältänytkään sitä mitä hän etsi, hän voi saman tien valita toisen kohdan. Erityisesti hakuteostyyppisissä dokumenteissa tämä voi olla näppärää. Esimerkiksi Eesti keele käsiraamat on kehyksiä käyttävä HTML-muotoinen dokumentti, joka havainnollistaa tätä.
Ilmeisistä ongelmista mainittakoon, että jos navigointikehys on kapeahko, otsikot täytyy kirjoittaa hyvin lyhyiksi tai niistä näkyy vain vähän alkua. Tämä helposti pilaa koko idean. Tosin jos käyttäjä voi säätää koko ikkunan kokoa ja ali-ikkunoiden suhdetta, ongelma pienenee. Sen sijaan yritys helpottaa ongelmaa pienentämällä tekstin kokoa navigointikehyksessä helposti vain aiheuttaa lisäongelmia, etenkin jos pienentämisessä ei olla hyvin kohtuullisia. Mutta kehyksellisyys joka tapauksessa asettaa suurempia vähimmäisvaatimuksia selainikkunan leveydelle. Ja kuvaruututila vaakasuunnassa on resurssi, josta järkevässä käytössä on muutenkin pulaa, koska ruudulla on useita ikkunoita. Lisäksi navigointikehys on koko ajan läsnä, silloinkin kun ei kaivata. Miksiköhän TV-ruudussa ei näytetä ruudun vasemmassa reunassa koko ajan illan TV-ohjelmaa tai saman yhtiön muiden kanavien tarjontaa? Tai miksi kirjan joka sivulla ei ole sisällysluetteloa?
Edellä oli esimerkki yhdistyksen pääsivun rakenteesta. Oletetaanpa, että haluaisimme muodikkaasti tehdä sen kehyksillä. Jos on ensin suunniteltu ja toteutettu ja hiottu kehyksetön versio, kehyksellisen version tekeminen on suhteellisen helppoa, mutta vaatii oman työnsä. Tyypillisesti tällaisessa tapauksessa tehdään ns. navigointikehys ja sisältökehys sekä kehikko, jossa nämä ovat vasemmalla ja oikealla. Tätä varten tarvitaan kolme erillistä HTML-dokumenttia.
Kehikko (frameset) voisi olla seuraavanlainen:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN">
<html>
<head>
<title>Mahdollisimman paljon yhteistä hyvää kaikille ry.</title>
<link rel="stylesheet" href="util.css">
</head>
<frameset cols="30%,70%">
<frame name="valikko" src="valikko.html" title="päävalikko">
<frame name="sisalto" src="etusivu.html" title="sisältökehys">
<noframes>
<body>
<h1>Mahdollisimman paljon yhteistä hyvää kaikille ry.</h1>
<p><a href="etusivu.html">Yleisesittely</a></p>
<h2>Toimintaa</h2>
<ul>
<li> <strong><a href="kal.html">Tapahtumia</a></strong> </li>
<li> <a href="kannat.html">Kannanottoja</a> </li>
<li> <cite><a href="kasik/">Käsikirja</a></cite> </li>
<li> <a href="liitt.html">Liittyminen</a> </li>
<li> <a href="yht.html">Yhteystiedot</a> </li>
</ul>
<h2>Taustaa</h2>
<ul>
<li> <a href="saannot.html">Säännöt</a> </li>
<li> <a href="suunn.html">Toimintasuunnitelma</a> </li>
<li> <a href="kert/">Toimintakertomukset</a> </li>
<li> <a href="ptk/">Pöytäkirjat</a> </li>
<li> <a href="ark.html">Arkisto</a> </li>
</ul>
</body>
</noframes>
</frameset>
</html>
Tässä noframes
-osa sisältää kehyksettömän
vaihtoehdon eli sen, minkä selain näyttää, jos se ei tue
kehyksiä tai se on asetettu näyttämään kehyksetön vaihtoehto.
Sitä edeltää kehysvaihtoehto, joka koostuu yhdestä
frameset
-elementistä. Kyseisessä elementissä
cols="30%,70%"
määrää jakamaan selaimen
ikkunan vaakasuunnassa kahtia eli kahteen "palstaan"
(columns) suhteessa 30:70; jos haluttaisiin jakaa
pystysuunnassa, olisi koodin cols
tilalla
koodi rows
; osia voisi olla enemmänkin kuin
kaksi (esim. rows="25%,25%,25%,25%"
jakaisi
pystysuunnassa neljään yhtäsuureen osaan)
frame
-elementit ilmoittavat
kunkin kehyksen nimen (name
),
alkusisällön osoitteen (src
) ja
otsakkeen (title
); näistä nimi tarvitaan
lähinnä siihen, että sen avulla voidaan ilmoittaa
mihin kehykseen
selaimen tulisi avata se dokumentti, johon linkki viittaa.
Huomaa, että
"pakollisiin kuvioihin" kuuluva
dokumenttityypin määrittelyn (DOCTYPE
) on erilainen
kuin normaaleissa dokumenteissa. Tämä koskee kehyksiä käytettäessä
vain kehikkoa, ei niitä dokumentteja, jotka halutaan
näyttää eri kehyksissä
(paitsi siinä tapauksessa, että ne itsessään ovat kehikoita).
Kysehän on siitä, että Frameset-määrittely
sallii ja vaatii, että dokumentissa on frameset
-elementti,
joka muutoin ei ole sallittu.
Valikkokehys sisältäisi
olennaisesti saman kuin kehikon noframes
-osa.
Tämä johtuu siitä, että tämäntapaisessa tyypillisessä kehysten
käytössä kehyksettömäksi vaihtoehdoksi sopii
hypertekstisisällysluettelona toimiva
linkkilista. Pieni mutta tärkeä ero on kuitenkin se, että
valikkokehyksessä näytettävässä dokumentissa on alussa
<base target="sisalto">
Tämä aiheuttaa sen, että kun seurataan dokumentissa olevaa
linkkiä, niin dokumentti johon se viittaa ei avaudu normaalilla
tavalla koko selainikkunaan vaan siihen osaikkunaan, kehykseen,
jolla on nimi sisalto
. Linkin "kohde" tässä
mielessä voidaan asettaa myös linkkikohtaisesti
target
-määritteellä, mutta base
-elementti
on usein kätevä silloin, kun halutaan muuttaa oletusarvoa.
Sisältökehyksen sisällön on tarkoitus muuttua, kun käyttäjä "liikkuu" sivuston sisällä. Kehikkosivu määrää vain sisältökehyksen alkusisällön ilmoittamalla sen sivun, joka aluksi latautuu sisältökehykseen. Tässä tapauksessa kyseinen sivu sisältää olennaisesti saman yleisesittelyn kuin sivuston alkuperäisen version pääsivu (mutta ilman linkkilistaa), jonka on tarkoitus näkyä toisessa kehyksessä.
Näin saatavan kokonaisuuden, yhdistyksen sivuston kehyksiä käyttävän version osoite (URL) on sen kehikkosivun osoite. Tästä aiheutuvia ongelmia tarkastellaan jäljempänä. Seuraavassa on esimerkki siitä, miltä kehikko näyttää alkutilassa eräässä katselutilanteessa:
Tämä on hyvin yksinkertainen rakennelma, jossa monet kehysten haitat eivät tule esiin, eivät myöskään mahdolliset hyödyt. Erityisesti mainittakoon, että tässä ei yritetään navigointikehyksessä korostaa (esim. eri värillä) sitä linkkiä, jota vastaava sivu näkyy sisältökehyksessä. Tämä vaatisi oman tekniikkansa, tavallisimmin JavaScriptiin perustuvan. Se, että kohtaa "Tapahtumia" on korostettu - koska sen oletetaan erityisesti kiinnostavan niitä, jotka vierailevat sivuilla usein - saattaa hämätä niitä, jotka ovat tottuneet siihen, että korostus tarkoittaa "olet nyt tässä"!
Näin tehty kehyksiä käyttävä versio toimii parhaimmillaan
lähes yhtä hyvin kuin kehyksetön, jonkun mielestä ehkä joskus
paremminkin. Valitettavasti kehyksiä käytetään yleensä ihan toisin,
jopa niin, että ensin tehdään kehysversio - ja ehkä
sen noframes
-osassa luvataan tehdä
kehyksetön versio. (Tai jopa jätetään noframes
-osa
tyhjäksi tai kirjoitetaan sinne jotain päätöntä kuten väite siitä,
että käyttäjän selain ei tue kehyksiä ja että hänen pitäisi hankkia
IE 3. Sitä on surkuhupaisaa lukea selaimella, joka tukee kehyksiä
ja jonka käyttäjä on asettanut näyttämään kehyksettömän vaihtoehdon.)
Saatetaan jopa vedota siihen, että "pienelle joukolle käyttäjiä"
ei ehditä tai viitsitä tehdä kehyksetöntä versiota.
Tämä on aivan nurinkurista.
Kehyksiä käytettäessä kannattaa tehdä ensin kehyksetön versio. Ensinnäkin näin sivustosta saadaan nopeammin toimiva versio. Toiseksi se on jatkossakin jatkuvasti käytettävissä vaihtoehtona. Kolmanneksi kehyksetön versio on luonnollinen lähtökohta kehysversion tekemiselle. Neljänneksi saatetaan käytännössä havaita, että kehyksetön versio on ihan hyvä eikä kehyksellisen tekemisestä olisi mitään hyötyä.
Periaate kehyksettömän vaihtoehdon tekemisestä ensin on erikoistapaus lisäilevästä lähestymistavasta: tehdään ensin yksinkertainen rakenne, joka toimii, ja sitten sille vaihtoehdoksi jotain mutkikkaampaa ja ehkä hienompaa. Ks. kirjoitustani Augmentative authoring.
Kehyksiin siis liittyy itse ideasta johtuviakin ongelmia. Mutta niiden aiheuttamat sotkut Web-sivuilla johtuvat kuitenkin pääosin seuraavista kahdesta syystä:
Kehysten käytöstä on muodostunut monille sivuntekijöille paradigma. Sana paradigma johtuu kreikan sanasta, joka tarkoittaa esimerkkiä, ja paradigman noudattaminen on esimerkin apinoimista. Ilmiö on sinänsä yleinen ja oppimiselle välttämätön, mutta ongelmia syntyy, kun kehysideaa ruvetaan soveltamaan ollenkaan ajattelematta, milloin sen käytössä on edes vähän järkeä ja milloin ei. Valitettavan tyypillistä on, että sivustossa on muutama hassu sisältösivu ja "kokonaisuudesta" tehdään kehyksiä käyttävä rakenne. Ja kovin usein vielä aloitetaan siitä rakenteesta ja sen hienovirittelystä ja efekteistä, esim. navigointikehyksen linkki muuttaa väriä tai vinkaisee, kun sitä ollaan valitsemassa. Innostusta ei sitten enää oikein riitä sisällön aikaansaamiseen.
Ylinavigointi (navigoinnin ylikorostus) ei ilmeisestikään vastaa käyttäjien tottumuksia. Jakob Nielsen kirjoittaa:
Lähes seitsemän vuoden ajan tutkimukseni ovat osoittaneet saman käyttäjien käyttäytymistavan: käyttäjät katsovat suoraan sisältöä ja jättävät navigointialueet huomiotta silmäillessään uutta sivua. - -
Ei ole mitään syytä mainita sivuston kaikkia piirteitä kaikilla sivuilla. Valitse sen sijaan hyvin pieni määrä erittäin hyödyllisiä piirteitä ja rajoita kaikilla sivuilla olevat linkit ehkä viiteen tai kuuteen asiaan kuten hakutoimintoon: käyttäjät siirtyvät hakuihin, kun he ovat eksyksissä, etkä voi ennustaa, milloin niin saattaa tapahtua. Vähemmän on enemmän: jos jokaisella sivulla on pieni määrä vakiolinkkejä, on todennäköisempää, että käyttäjät tarvitessaan huomaavat ne. - -
Is Navigation Useful?, suom. JK
Lisäksi kehyksiä käytettäessä tehdään teknisiä virheitä, jotka vahvistavat edellä kuvattujen perusongelmien vaikutusta. Esimerkiksi jos navigointikehyksen kapeuden aiheuttamaa ongelmaa ei yritetä "ratkaista" käyttämällä paljain silmin näkymätöntä kirjasinkokoa niin sitten ehkä valitaan linkkien nimet niin lyhyiksi ja arvoituksellisiksi, ettei siinä ole tolkkua. (Tämän toki voi tehdä ilman kehyksiäkin, ks. esim. Peilaajan teilaaja, mutta kehykset vahvasti viettelevät siihen.) Ja kun alkuperäinen idea vahvasti perustuu siihen, että käyttäjä mieltää kehykset erillisiksi, niin tyypillisessä kehyshömpötyksessä nimenomaan pyritään estämään kehyksiä erottumasta toisistaan. (Yksi tavallisimpia kehysten tekoon liittyviä kysymyksiä on, miten saan pois rajaviivat kehysten väliltä, ei suinkaan fiksumpi kysymys, miten ne saisi paremmin erottuviksi.)
Kaikki selaimet eivät tue kehyksiä. Mutta tämä ei ole suinkaan keskeisin syy siihen, miksi kehyksiä käyttävälle sivustolle tulisi aina tarjoa myös kehyksetön vaihtoehto!
Mainittakoon, että tekstipäätteilläkin toimiva
Lynx-selain tukee
kehyksiä, joskin varsin eri tavalla kuin esim. IE ja
Netscape. Kehikkosivun Lynx käsittelee näyttämällä
kehysten nimet (sellaisina kuin ne on frame
-elementtien
name
-määritteissä asetettu) linkkeinä, jotka viittaavat
kehysten alkusisältöihin (jotka on src
-määritteissä
asetettu) ja lisäksi näyttämällä
noframes
-elementin sisällön. Tästä seuraa, että
kehyssivustoa voi käyttää Lynxilläkin, kunhan sivuntekijä on
kirjoittanut järkevän noframes
-vaihtoehdon tai edes
antanut kehyksille järkevät nimet, jotka kuvaavat niiden
sisältöä ja tarkoitusta (eikä esim. vasen
ja oikea
taikka frame1
ja frame2
).
Hakupalveluilla on erittäin suuri
merkitys Webissä. Yksi osa niiden teknistä perustaa ovat
ns. indeksointirobotit eli järjestelmät, jotka käyvät automaattisesti
läpi Webiä seuraamalla sivuilla olevia linkkejä. Jos
sellainen löytää kehikkosivun, jolla ei ole noframes
-osaa,
se ei ehkä löydä mitään seurattavaa. Tosin osa
indeksointiroboteista katsoo myös frame
-elementeissä
olevia src
-määritteitä, jotka jossain mielessä vastaavat
linkkejä. Mutta läheskään kaikki eivät. Niinpä kehyssivustosta ei
käytännössä ehkä indeksoidu mitään eli sillä olevaa aineistoa
ei löydy hakupalvelimilla. Tätä voidaan yrittää ratkoa eri tavoin,
esimerkiksi yrittämällä rekisteröidä kaikki alasivut erikseen
hakujärjestelmiin, mutta tämä ei suinkaan aina toimi vaan voi johtaa
jopa kielteisiin seurauksiin. Luonnollinen tapa on
kirjoittaa noframes
-osa, jossa on linkkejä, joiden
kautta alasivut löytyvät.
Sen lisäksi, että kehikkodokumentissa on noframes
-osa,
voi olla järkevää tarjota linkki "kokonaan kehyksettömään"
vaihtoehtoon. Syynä on se, että esimerkiksi Operan tai Lynxin
käyttäjä voi kyllä valita noframes
-vaihtoehdon mutta
IE:n tai Netscapen käyttäjä ei.
Esimerkissämme tämä vaihtoehto on tarjottu
valikkokehyksen viimeisenä linkkinä
seuraavasti:
<p><small>Tästä sivustosta on myös
<a href="index.html" target="_top"
>kehyksetön vaihtoehto</a>.</small></p>
Tässä "_top"
on erityinen ennaltamääritelty
(ise HTML-kielessä määritelty) arvo, joka tarkoittaa, että
linkkiä seurattaessa dokumentti avautuu koko selainikkunan kokoisena,
siis "murtautuu ulos kehyksistä".
Tässä kohdassa käsittelemme, miten kehyksiä käyttävässä sivustossa viitataan linkeillä siitä ulospäin. Toisensuuntaista linkitystä käsitellään seuraavissa kohdissa (kahdelta kannalta: viittaaminen kehyksissä näytettäviksi tarkoitettuihin sivuihin ulkopuolelta ja viittaaminen koko kehikkoon).
Edellä mainittu target="_top"
on yleisesti tarpeellinen,
kun kehyksessä olevassa sivussa on linkki, joka viittaa sivustosta
muualle. Muutoin käy niin, että seurattaessa vaikkapa Lafka Oy:n sivustossa
olevaa linkkiä Höpsötysviraston sivulle sivu aukeaa kehyksessä ja
ruudulla näkyy Lafka Oy:n navigointikehys yms. Jos Höpsötysviraston sivukin
käyttää kehyksiä, tulos on erinomaisen sekava. Joka tapauksessa
luvaton toisen sivuston sivujen "omiminen" omaan kehikkoon on asia,
joka on kiistanalaisimpia kysymyksiä keskusteltaessa siitä,
milloin linkittäminen on oikeudellisesti sallittua.
Kirjoittamisvaivaa voi säästää base
-elementillä. Kun dokumentin
otsikko-osaan (head
-osaan)
kirjoitetaan
<base target="_top">
niin se vastaa sitä, että jokaisessa linkissä olisi
target="_top"
. Tästä seuraa, että jos linkin
halutaankin avautuvan nimenomaan siihen kehykseen, jossa dokumentti on,
on tällöin käytettävä linkissä määritettä
target="_self"
Kehyksettömän vaihtoehdon tarjoaminenkaan ei poista sitä ongelmaa, että jos sivut on suunniteltu katsottaviksi nimenomaan kehyksissä, niistä on erittäin usein jätetty pois niiden asiayhteyttä koskevat tiedot. Toisin sanoen niistä on tehty irrallisia sivuja.
Otetaanpa esimerkki. Eräällä haulla löysin joukon sivuja, joista ensimmäinen alkaa näin:
KOPIRAITTI - TEKIJÄNOIKEUTTA SARJAKUVANA
Mitä yhteistä on tappajasammakoilla, taiteilijaurasta unelmoivilla flegmaattisilla teineillä ja identtisillä poliisikaksosilla? Vastaus: kaikki esittäytyvät Kopiraitti-tekijänoikeussarjakuvassa.
Mielenkiintoista, mutta mihin tämä liittyy? Itse tekstissä ei ole ensimmäistäkään linkkiä. Lukemalla jutun voi ehkä päätellä jotain asiayhteydestä. Mutta miksi sitä ei kerrota suoraan, normaaleilla tavoilla? Koska sivu on suunniteltu katsottavaksi kehyksissä, jolloin muut kehykset antavat kontekstitietoa siitä, missä mennään ja mitä aiheeseen liittyviä muita sivuja on. Mutta hakupalvelun antama linkki viittaa suoraan itse dokumenttiin.
Käytännössä kokenut käyttäjä saattaa osata hakea
kontekstitietoa siten, että kokeilee, mille sivulle ehkä päästään
poistamalla URLin lopusta merkkejä viimeiseen
vinoviivaan asti ja ehkä vielä jatkamalla tällaista "peräytymistä".
Mutta ei pidä luottaa siihen, että käyttäjä osaa tehdä niin.
Ja tässä tapauksessa kun URLia
http://www.kopiosto.fi/hallinto/Opettaja.html
lyhennetään saadaan
http://www.kopiosto.fi/hallinto/
joka kyllä ilmeisesti liittyy asiayhteyteen, mutta epäselväksi jää
miten.
Aivan vastaava ongelma syntyy, jos joku tekee suoran linkin kyseiseen sivuun. Joku ehkä on sitä mieltä, ettei niin saa tehdä tai ei ole järkevää tehdä. Mutta sellainen on vastoin hypertekstin ja Webin perusideoita.
Esimerkkitapaus ei ole ihan niin mahdoton kuin edellä sanotun perusteella voisi luulla. Lopussa on sentään linkki Kopiosto ry:n pääsivulle. Eri asia sitten on, miten helposti sieltä löytää puheena olevan sivun ja siten sen tarkemman kontekstin. Mainittakoon vielä, että lopussa on myös näennäislinkki, jossa on teksti "takaisin". Kyseessä on järjetön viritys, joka tekee (jos tekee mitään) JavaScriptillä sen, minkä jokainen käyttäjä voi tehdä oman selaimensa tutulla Back- tai Takaisin-toiminnolla ja lisäksi se perusteellisesti harhauttaa sivulle eksyneen. Esimerkkitapauksessa se tietenkin vie takaisin sille sivulle, jolta oltiin tultu, eli hakupalvelun antamaan listaan, ei suinkaan Kopioston jollekin sivulle, jonka "alainen" tämä sivu on jossakin hierarkiassa!
Vaikka sivu onkin tarkoitettu katsottavaksi vain kehyksissä, sille on syytä kirjoittaa normaalit linkkeinä esitetyt tiedot asiayhteydestä, koska tosiasiassa sivu usein nähdään "kehyksistä irrotettuna".
Se, että kontekstitiedot
näkyvät kahdesti - toisaalta navigointikehyksessä, toisaalta
kehyksen sisällä näkyvällä sivulla esim. alussa tai lopussa -
on paljon pienempi paha kuin kontekstittomuus. Sikäli kuin
se on paha asia ollenkaan. Edellä tarkastellussa
alkeisesimerkissä tehty
kehyksiä käyttävä sivusto on sellainen,
että kunkin alasivun alussa on yhdistyksen nimi, joka on linkki
kehikkosivuun. Linkkiä seuraamalla voi siis kehyksiä käytettäessä
päästä aloitustilaan, jossa näkyy yleisesittelysivu, ja
kehyksettömässä tilassa kehikkosivun noframes
-vaihtoehtoon.
Tämä on helppoa tehdä:
<center><a href="kehikko.html" title="Yhdistyksen esittelysivu">Mahdollisimman paljon yhteistä hyvää kaikille ry.</a></center>
Kyseisen tekstin tilalla voisi myös olla logo (mieluiten tekstin kera, ellei logo ole hyvin yleisesti tunnettu ja siten ilman muuta tunnistettavissa). Otsikkoa siitä sen sijaan ei kannata tehdä, koska se ei loogisesti ole sivun otsikko vaan verrattavissa esim. kirjeen yläreunassa näkyvään lähettäjätietoon. - Pienen ongelman aiheuttaa se, että sisältökehyksen alkusivulle tällaista ei ole luonnollista tehdä, koska sillä yhdistyksen nimi on jo otsikkona. Sen tekeminen linkiksi olisi luultavasti hämäävää. Niinpä kyseiseen dokumenttiin olen kirjoittanut, uusnaivismin hengessä, pienellä präntätyn toteamuksen siitä, että käyttäjä on nyt sivuston alkusivulla. Jos hän olikin päätynyt lukemaan sivua "kehyksistä irrotettuna", tekstiin liittyvä linkki toivottavasti auttaa oikeille jäljille.
Kun käyttäjä liikkuu kehyksiä käyttävässä sivustossa, niin selaimen näyttämä sivun osoite pysyy samana eli alkuperäisenä. Tämä johtuu kehysten yhdestä perusominaisuudesta: määrätyllä kehysten yhdistelmällä ei ole omaa osoitetta, jolla siis voisi viitata kehyskokonaisuuteen sellaisena, kuin se määrätilanteessa näkyy. Ei siis ole mahdollista kirjoittaa URLia, joka viittaisi kehikkoon (frameset-dokumenttiin) siten, että kussakin kehyksessä on määrätty sisältö. Joskus tämä esitetään ratkaisuna ongelmaan "miten estän käyttäjää näkemästä, millä sivulla hän on?"; en tiedä miten usein ratkaisu esitetään ironisessa mielessä. Joka tapauksessa ongelmia syntyy, kun käyttäjä ottaa sivun "kirjanmerkkeihinsä" tai ottaa URLin talteen tehdäkseen linkin siihen, kertoakseen siitä kavereille tms. - ja vasta myöhemmin huomaa, että URL toki viittaa kehikkoon sen alkutilassa, siis aivan eri asiaan kuin on tarkoitus.
Lyhyesti asia on esitetty WDG:n Web Authoring FAQ:ssa kohdassa 8.7 (suom. JK):
Miten ilmoitan erityisen kehysten yhdistelmän oletusdokumentin asemesta?
Tämä ei valitettavasti ole mahdollista. Kun kuljet sivustossa käyttäen kehyksiä, URL ei muutu, kun dokumentit eri kehyksissä vaihtuvat. Tämä merkitsee, ettei ole mitään tapaa osoittaa osoittaa sitä dokumenttien yhdistelmää, joka muodostaa kehikon nykyisen tilan.
Sivuntekijä voi tehdä useita kehikkodokumentteja, yhden kutakin kehyssisältöjen yhdistelmää varten, ja viitata niihin linkeillä. Näitä kehikkodokumentteja voi luoda automaattisesti, ehkä jopa "lennosta" CGI-ohjelmalla.
Havainnollinen esitys tämän tekniikan soveltamisesta on Slartin sivustossa Good and bad Frames!, luonnollisestikin osassa Create GOOD frames.
Eräs mahdollinen hyötysovellus kehyksille olisi lainselitys, jossa yksi kehys näyttää lakitekstin, toinen kommentaarin ja kolmas oikeustapauksia. Tai ehkä neljäskin kehys voisi olla; siinä voisi näyttää lainkohdan virallisia perusteluja hallituksen esityksessä, jonka pohjalta laki on säädetty. Ideana tämä on kiehtova. Mutta siinä olisi melkoisesti työtä. Ja miten tähän voisi viitata? Jos tavoitteena olisi, että yhdellä osoitteella viitataan sellaiseen kehysten yhdistelmään, jossa on yhdessä kehyksessä lakipykälä, toisessa sen selitys jne., jouduttaisiin tekemisiin edellä kuvatun osoitteettomuusongelman kanssa. Kuten edellä selitettiin, ongelma on eräässä mielessä ratkaistavissa, mutta aika työläästi.
Hiukan sensuuntaista, jota edellä on hahmoteltua, on pienessä mittakaavassa tehty kokeilussani, joka on tekijänoikeusfakin kehyksellinen versio. Siinä tilanne on se, että varsinaisessa fakissa olevan pykäläviittauksen seuraaminen muuttaa lakitekstikehyksen sisältöä niin, että siinä näkyy kyseinen kohta laista. Sen sijaan sen kehyksen sisältö, jossa näkyy lain rakenne (sisällysluettelona), ei muutu. Tässä tapauksessa kysymykseen "miten muutan kahta kehystä samanaikaisesti" voisi mielekkäästi vastata myös JavaScript-ratkaisulla, koska toinen kehysten päivittämisestä (se, joka hoidettaisiin JavaScriptillä) olisi vain mukava lisäpiirre, ei olennainen osa sivuston toimivuutta. Ratkaisu olisi sellainen, että kukin pykäläviittaus, joka nyt on muotoa
<a target=laki href="tekl.html#n">n §</a>)muutettaisiin seuraavanlaiseksi:
<a target=laki href="tekl.html#n" onclick= "if(self!=top && parent.sis)parent.sis.location='tekl-sis.html#n'" >n §</a>
Ehto self!=top && parent.sis
huolehtii
siitä, että jos sivua katsotaan muutoin kuin tarkoitetussa
kehikossa, ei synny ongelmia siitä, että selain yrittäisi
päivittää olematonta kehystä.
Kehyksiä voisi ajatella käytettäväksi myös alaviitteiden esittämiseen. Silloin ikkuna jakautuisi ylempään kehykseen, jossa on varsinainen juttu, ja pienempään kehykseen sen alla, jossa näkyvät alaviitteet. Ja ylemmässä kehyksessä oleva alaviitemerkintä olisi linkki, jonka seuraaminen muuttaisi alempaa kehystä niin, että siinä näkyy kyseisen alaviitteen teksti. Tämäntapainen kokeilu on kehysversio sivusta Passiivin käytöstä. Kyseisessä kokeilussa alaviitteillä ei ole kovin suurta merkitystä, mutta laajemmassa ja tieteellistyyppisessä jutussa idea ehkä olisi toteuttamisen arvoinen. Käytännössä toteutus vaatisi sopivia työkaluja, joilla tarvittava merkkaus tuotetaan, koska "käsin" sitä tuskin kukaan jaksaisi kirjoitella.
Edellä mainittu esimerkki havainnollistaa sitä, miten tärkeää
on, että sivuntekijä ei estä käyttäjää muuttamasta
kehysten mittasuhteita.
Yleensä alaviitteet ovat vähemmän tärkeitä kuin varsinainen teksti,
ja siksi niille voidaan aluksi varata pienempi tila. Mutta sellainen
lukija, joka haluaa rauhassa lukea pitkähkön alaviitteen, voi siirtää
kehysten rajaa ylöspäin, jolloin alaviitekehys saa suuremman osan ikkunasta.
Tämä on tilanne, jos sivuntekijä ei erikseen estä sitä
noresize
-määritteellä taikka
poistamalla kehysten välisen rajan.
Joissakin tilanteissa voidaan varsinaisten kehysten asemesta käyttää
ns. upotettuja kehyksiä. Upotettu kehys (inline frame) on
on ikäänkuin dokumentin sisällä oleva ikkuna, josta näkyy toinen
dokumentti tai vieritettävissä oleva osa siitä.
Inline-kehys itse kokonaisuutena "rullaa" sen dokumentin mukana, jossa se on.
Ks. Using inline frames
(iframe
elements)
to embed documents into HTML documents.