Web-julkaisemisen opas, luku 3 Lisukkeet: Mitä kaikkea voisikaan lisäksi tehdä:

Kehykset (frames)

Sisällys

Mitä kehykset ovat

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:

[Vasemmalla on ohjeen hakemisto, oikealla osa dokumentista.
Ylhäällä on valikko ja painikkeita, ja alhaalla on tietoja
suurennussuhteesta, sivunumerosta ym.]

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?

Alkeisesimerkki kehysten käytöstä

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ä

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:

[kuva]

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.

Miksi kehykset sopivat Webiin huonosti

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.)

Kehyksetön vaihtoehto, ja miksi se on tärkeä

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ä".

Linkit kehyksissä

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"

Miten kehys toimii "otettuna irti kehyksistään"?

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.

Kehysjoukon osoitteettomuus

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.

Ajatuksia kehysten mahdollisuuksista

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.

Lisätietoja kehysten käytöstä