Frames
By Kevin Yank
([email protected])
27 September 1998
Kevin Yank

Basic Frames

 • Introduksjon

Element�re Frames

 • V�rt f�rste Frameset
 • Mer om <FRAMESET>
 • Mer om <FRAME>

Videreg�ende

 • M�lrettede Lenker
 • Spesialm�l
 • En Frames-basert site

Avanserte emner

 • Multi-Frame Lenker
 • Scripted Frames

Oppsummering og forslag til videre arbeid

I denne seksjonen vil vi begynne med � lage et helt grunnleggende sett med vinduer (frameset). Vi skal s� modifisere noen av egenskapene for � f� dem til � se ut og virke slik vi �nsker.


V�rt f�rste Frameset

Det overrasker ofte folk hvor enkelt det er � sette opp en frames-basert Webside. Enhver rektangul�r seksjon du �nsker � dele browservinduet opp i kalles en frame. For � definere det settet med frames du vil skal vises, trenger du bare � skrive en spesiell HTML fil som definerer st�rrelsen, posisjonen, og f�rstegangsinnholdet til hver frame. Deretter m� du skrive separate HTML filer som skal bestemme innholdet i hver frame, akkurat p� samme m�te som du ville gj�re til vanlig n�r du skriver for hele browservinduet.

Ikke bekymre deg om dette ikke sier deg stort s� langt... Jeg kommer tilbake til disse sakene i detalj. La oss s� langt konsentrere oss om den HTML fila som definerer oppsettet av frames (vinduer). Denne fila kan vi enkelt kalle framesettet (engelsk: frameset), og den kan se ut som f�lger:

<HTML>
<HEAD>
<TITLE> V�rt f�rste Frameset </TITLE>
</HEAD>

<FRAMESET>
  <FRAME>
  <FRAME>
  ...
</FRAMESET>

<NOFRAMES>
...
</NOFRAMES>

</HTML>

Legg merke til at denne HTML fila ikke inneholder en <BODY> tag. Merk ogs� bruken av tre nye tag's i denne fila:

  • <FRAMESET>
  • <FRAME>
  • <NOFRAMES>

<FRAMESET> tag'en overtar plassen til <BODY> tag'en i en "vanlig" HTML fil, og brukes til � gi informasjon om det settet med frames som skal fremkomme i browser vinduet. Under denne tag'en blir det bestemt hvordan vinduet skal deles opp, hvor mange frames det skal v�re, etc. Enhver informasjon vedr�rende det settet med frames vi vil ha, spesifiseres alts� her.

La oss ta et konkret eksempel. Tenk deg at du �nsker � lage en Web side som er delt horisontalt p� tvers av midten av browser vinduet. Det vil alts� si at du �nsker to frames, som hver skal bruke 50% av den vertikale plassen i vinduet. Det er viktig � tenke seg frames som deler av den totalt tilgjengelige plassen, fordi det er nettopp det som er utgangspunktet for bruken av <FRAMESET> tag'er:

<FRAMESET ROWS="50%,*">

Dette forteller ganske enkelt browseren:

Jeg �nsker et frameset som deler opp vinduet i rader. Av den tilgjengelige plassen skal den f�rste frame'n bruke 50%, og den andre skal bruke det som m�tte v�re igjen..

Legg spesielt merke til at asterisken ("*") st�r for "det som m�tte v�re igjen". mer om dette senere. For � plassere skillet vertikalt (nedover) p� siden i steden, ville du bare skrive f�lgende:

<FRAMESET COLS="50%,*">

Merk deg at HTML tolker "COLS" som "columns". Det betyr at COLUMNS="50%,*" ikke vil fungere!

Som du har gjettet <FRAME> tag'en s�rger for spesifisert informasjon til hver enkelt frame. Du m� legge inn det antallet <FRAME> tag'er som samsvarer med antallet frames du spesifiserte med <FRAMESET> tag'en. I v�r sv�rt enkle eksempel vil denne tag'en kun bli brukt til � fortelle browseren hvilken HTML fil den skal laste inn i hver frame:

<FRAME SRC="topframe.html">
<FRAME SRC="botframe.html">

S� den f�rste (top) frame i v�rt frameset vil lastes opp med topframe.html som 'innmat', mens den andre (bottom) frame vil inneholde botframe.html.

Tilslutt f�lger <NOFRAMES> tag'en <FRAMESET> tag'en, og brukes til � spesifisere det som skal vises til brukere som har browsere som ikke kan h�ndtere frames. Selv om det har blitt sv�rt uvanlig, finnes det fortsatt mange utdanningsinstitusjoner som tillater studentene adgang til internett p� tekstbaserte terminaler. De Web-browserne som brukes i denne sammenheng, f.eks. Lynx, er vanligvis ikke i stand til � vise frames.

<NOFRAMES>
<P>Sorry, but it appears you are using a Web browser that does not support frames / Beklager, din browser kan ikke vise frames - Click/klikk <A HREF="noframes/index.html">here</A> to access the non-frames version of our site / for tilgang til framesfrie sider.</P>
</NOFRAMES>

M�ten <NOFRAMES> tag'en virker p�, er � si til enhver browser som ikke st�tter frames: "Ikke vis dette." Siden alle Web browsere som ikke st�tter frames vil v�re uvitende om tag'ene <FRAMESET> og <FRAME>, vil de simpelthen ignorere dem og kun vise teksten i mellom tag'ene. I eksemplet ovenfor har jeg lagt inn en lenke til en versjon av site'n som ikke anvender frames. Selv om det kanskje ikke er helt n�dvendig, er det god praksis � inkludere en melding til brukere av browsere som ikke leser frames at site'n din ikke er tilgjengelig. Du kan jo eventuelt legge inn en oppfordring om � laste ned en ny versjon.

Sl�r vi alt dette sammen, s� har vi v�rt enkle oppsett med to frames.


 
Se det i virksomhet!   |   Studer koden!

 

Mer om <FRAMESET>

Som nevnt ovenfor, blir <FRAMESET> tag'en brukt til � bestemme informasjon om hvordan vinduet skal deles opp i frames. Dette blir gjort ved bruk av ROWS og COLS attributtene til � definere hvorledes henholdsvis radene og kolonnene skal inndeles.

Disse inndelingene kan bestemmes p� tre m�ter: prosentvis, i antall pixtler, og som forholdstall. Disse tre metodene kan enkelt vises ved noen f� eksempler.

<FRAMESET COLS="50,*,*">

I dette eksemplet vil vinduet bli delt opp i tre kolonner; det f�rste vil bruke en bredde p� 50 pixtler. Den andre og tredje framen vil hver bruke halvparten av den gjenv�rende plassen.

<FRAMESET COLS="50%,*,20%">

Dette eksemplet definerer tre kolonner som henholdsvis benytter 50%, 30% og 20% av vinduet. Den f�rste og tredje har den prosentvise dekningsgraden definert, mens den andre bruker de gjenv�rende 30% av vinduet.

<FRAMESET ROWS="3*,1*,2*">

Denne gangen vil vinduet deles opp i rader i stedet for kolonner. Den f�rste framen vil bruke halvparten av vinduet, den andre en seksdel, og den siste vil bruke en tredel av vinduet. Dette kan sikkert virke litt forvirrende umiddelbart, men tenk p� det hele som forholdstall. Vinduet er delt opp i 6 like deler (3+1+2=6). Den f�rste framen bruker tre av dem (tre seksdeler er lik en halv), den andre bruker en del (dvs. en seksdel), og den siste framen vil bruke de gjenv�rende to delene (to seksdeler er lik en tredel).

<FRAMESET ROWS="30,50%,2*,1*">

Denne gangen vil det v�re fire framesrader. Den f�rste framen vil bruke 30 pikstler av h�yden p� vinduet. Resten fordeles p� de gjenv�rende tre. Den andre framen vil bruke 50% av den totale h�yden p� browser vinduet. Den tredje og fjerde framen bruker resten av den plassen som er igjen i forholdet 2:1. Dette betyr at den andre av disse to vil bruke dobbelt s� mye plass som den andre. Generelt sett anbefales det ikke � blande tre ulike metoder slik det er gjort her. I slike tilfelle anbefaler jeg vanligvis nested (n�stede) framesets for � bedre leselighet og oversiktlighet. Mer om dette senere.

Du st�r fritt til enten � bruke ROWS eller COLS attributter hver for seg, eller sammen, for � bestemme oppsettett:

<FRAMESET ROWS="60,50%,*" COLS="1*,2*,3*">
  <FRAME SRC="frame1.html">
  <FRAME SRC="frame2.html">
  <FRAME SRC="frame3.html">
  <FRAME SRC="frame4.html">
  <FRAME SRC="frame5.html">
  <FRAME SRC="frame6.html">
  <FRAME SRC="frame7.html">
  <FRAME SRC="frame8.html">
  <FRAME SRC="frame9.html">
</FRAMESET>

 
Se det i virksomhet!   |   Se koden!

 

Dersom du trenger mer fleksibilitet i oppsettet ditt, kan du benytte en teknikk som kalles nested framesets. Som navnet tilsier, inneb�rer dette at du putter framesett inni framesett. Om du f.eks. �nsker er en 50 pixtel bred menyframe vertikalt p� den venstre siden av siden, samtidig som du vil ha en 30 pixtel h�y tittel frame p� tvers av toppen p� siden, kunne du gj�re slik:

<FRAMESET COLS="50,*">
  <FRAME SRC="menu.html">
  <FRAMESET ROWS="30,*">
    <FRAME SRC="title.html">
    <FRAME SRC="body.html">
  </FRAMESET>
</FRAMESET>

Legg merke til hvordan den 'indre' <FRAMESET> tag'en legges der en <FRAME> tag vanligvis skulle st�. Du oppretter s� mange frames du �nsker med 'nested framesets', og du kan til og med definere nye framesett inne i framesett som st�r inne i framesett, som st�r inne i framesett, etc.!


 
Se hvordan der virker!   |   Sjekk koden!

 

I tillegg til ROWS og COLS, s� er det flere andre attributter til <FRAMESET> tag'en som tillater deg � p�virke utseendet til et framesett:

  • FRAMEBORDER=n

    Avgj�r om det skal vises en 3D ramme rundt de ulike frames. Hvis n er 1, vil en 3D ramme vises p� samme m�te som om attributtet hadde v�rt utelatt. Hvis n settes til 0, s� vil rammen v�re usynlig. Du kan ogs� bruke YES i stedet for 1, og NO i stedet for 0. Dette attributtet fungerer med Netscape og Internet Explorer fom. versjon 3.

  • BORDER=n

    Bestemmer bredden p� 3Drammen mellom de ulike frames. n er antallet pixtler. Dette attributtet fungerer fom. Netscape versjon 3, og fom. IE4.

  • FRAMESPACING=n

    Bestemmer avstanden mellom frames. n er avstanden i antal pixtler. Fungerer kun med IE.

  • BORDERCOLOR=color

    Bestemmer fargen p� 3D rammen mellom de ulike frames. color er en standard HTML farge (f.eks. "RED", "#FFFFFF", etc.). Dette attributtet fungerer fom. Netscape 3 og IE4.

Eksperimenter med disse mulighetene selv, men pass p� at du velger l�sninger som er kj�rbare for flest mulig browsere slik at folk kan f� tilgang til den viktigste delen av site'n din –innholdet.


Mer om <FRAME>

Som du sikkert er klar over n�, s� er hovedfunksjonen til <FRAME> tag'en � bestemme oppstartinnholdet for hver frame i framesettet ditt. Liksom <FRAMESET> tag'en, godtar den ogs� flere andre attributter som tillater deg � endre m�ten de enkelte frame'ene fungerer p�. Dersom ikke annet er nevnt, virker disse attributtene fom. Netscape 2, og IE3

  • NAME=name

    Gir deg muligheten til � gi frame'n din et navn. name er kun ren tekst, vanligvis omsluttet av anf�rselstegn. N�r du gir frame'n et navn, kan du vise til den n�r du bruker linker, og manipulere med den i JavaScript. Eksempler p� disse teknikkene vises i de f�lgene delene av denne artikkelen.

  • FRAMEBORDER=n

    Bestemmer om du skal ha en 3D ramme omkring denne frame'n. Dersom n er 1, vil det vises en 3D ramme. Hvis n er 0, vil rammen v�re usynlig. Du kan ogs� bruke YES istedet for 1, og NO i stedet for 0. Dersom du bruker dette i en <FRAME> tag, s� vil du overstyre FRAMEBORDER attributtet til <FRAMESET>, om det er et slikt. Dette attributtet fungerer fom. Netscape og IE 3.

  • NORESIZE

    Hindrer brukeren i � endre st�rrelsen p� frame'n ved � dra i rammekantene med musa. Syntaksen er ganske enkelt NORESIZE; du trenger ikke � defeinere noen verdi.

  • SCROLLING=value

    Bestemmer om scroll bars skal vises i frame'n. value kan v�re YES, NO eller AUTO. Dersom du velger YES, s� vil horisontale og vertikale scroll bars alltid vises, selv om innholdet i frame'n er lite nok til � passe inn. Velger du NO, vil ikke scroll bars bli vist i det hele tatt, selv om innholdet i frame'n er for stort til � passe inn. AUTO betyr at frame'n skal oppf�re seg slik den b�r, nemlig vise scroll bars n�r det er n�dvendig, ellers ikke.

    NOTE: Dersom du ikke er forsiktig, kan en frame som bruker NORESIZE og SCROLLING=NO presentere et problem for brukere med mindre skjermst�rrelse enn du har selv. Ikke bruk denne kombinasjonen med mindre du m�. Dersom du velger � gj�re det, sjekk at siden din fortsatt er brukbar i lavoppl�sning (640x480).

  • MARGINWIDTH=n

    Bestemmer avstanden mellom de venstre og den h�yre rammene til frame'n og dens innhold. n st�r for antall pixtler. Internet Explorer browsere godtar verdier fra 0 eller h�yere, mens Netscape browsere kun godtar verdier fra 1 eller h�yere, og oppfatter 0 som 1.

  • MARGINHEIGHT=n

    Bestemmer avstanden mellom de �vre og den nedre rammene til frame'n og dens innhold. n st�r for antall pixtler. Internet Explorer browsere godtar verdier fra 0 eller h�yere, mens Netscape browsere kun godtar verdier fra 1 eller h�yere, og oppfatter 0 som 1.

    TIPS: Dersom du �nsker frameinnholdet klint inntil kantene, m� du kombinere flere teknikker for ulike browsere. Legg f�rst inn MARGINWIDTH og MARGINHEIGHT p� 0 med tanke p� Internet Explorer browsere. For � f� med Netscape 4, m� du ogs� legge inn MARGINWIDTH og MARGINHEIGHT med 0 i <BODY> tag'en til HTML filene som skal lastes inn i den aktuelle frame'n. Dette vil imidlertid ikke bli gjenkjent av Netscape 3 eller tidligere versjoner.

Effekten av disse attributtene ser du best om du eksperimenterer selv. Husk alltid p� � unng� og bruke kode som ikke fungerer med de mest brukte browserne. Det har ingen hensikt � lage fine sider dersom ikke folk kan lese dem!


Introduction   < >   Navigation