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

Videreg�ende

 • 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

N� som du vet hvordan du skal lage frames, er det p� tide � l�re hvordan du skal bruke dem. Denne seksjonen vil l�re hvordan frames innvirker p� m�ten linkene p� sida di fungerer. Deretter skal vi bruke det vi har l�rt til � lage en Web site som anvender en velkjent "menu bar" layout.


M�lrettede Linker

F�r 'frames' gjorde sin entr�, var det � finne dokumentet som skulle hentes inn det eneste en Web programmerer trengte � bekymre seg om. Med 'frames' har det dukket opp et nytt problem - Hvilken frame b�r dokumentet lastes inn i?

Enhver med urlite kjennskap til HTML vet at man oppretter en hypertekstlenke ved � anvende tag'en <A> sammen med HREF attributtet.

<A HREF="newdoc.html">...</A>

I utgangspunktet vil newdoc.html bli lastet inn i frame'n der du klikket p� linken. Noen ganger er dette akkurat det du �nsker. Men, hva om du har laget en side med to frames – en som inneholder en meny som kan laste dokumenter inn i den andre? I det tilfellet vil du �nske at linkene i meny frame'n er innstilt p� hovedframe'n.

Det f�rste du m� gj�re for � oppn� det er � gi dine frames names. Som forklart i det forrige kapittelet, gj�r du dette ved hjelp av NAME attributtet til <FRAME> tag'en. I v�rt eksempel er det greitt � navngi framene v�re menu og main (main=hoved) som vist her:

<FRAMESET COLS="75,*" FRAMEBORDER=0>
  <FRAME SRC="ourmenu.html" NAME="menu">
  <FRAME SRC="introduction.html" NAME="main">
</FRAMESET>

For s� � f� alle linkene i menu frame'n til � laste inn dokumentene i main frame'n, m� vi bruke TARGET attributtet til <BASE> tag'en i HEAD delen til ourmenu.html, som er fila som er lastet inn i v�r menu frame.

<HTML>
<HEAD>
<BASE TARGET="main">
</HEAD>
<BODY>
...

"Okey, dette er vel og bra," sier du. "Men hva om jeg �nsker at forskjellige linker i en enkelt fil skal laste dokumenter inn i ulike framer?" Det er ikke noe problem! <A> tag'en st�tter ogs� et TARGET attributt som overstyrer samtlige TARGET du m�tte ha spesifisert med <BASE> tag'en.

<A HREF="newdoc.html" TARGET="main">...</A>

Bruker du kodingen ovenfor, kan du bare glemme <BASE> tag'en og plassere TARGET p� alle linkene dine. Men, med mindre du ikke har et klart definert m�l for linkene dine, kan du jo spare litt plass ved � bruke <BASE> tag'en �verst i fila.


Spesiell bruk av TARGET

Siden du ikke alltid �nsker at en link skal laste dokument inn til dine egne frame'r, er det flere spesielle TARGETs du kan bruke. Disse kan brukes enten med <BASE> eller <A HREF> tag'er, og m� skrives inn n�yaktig slik de presenteres her, da de skiller mellom store og sm� bokstaver (case sensitive).

  • TARGET="_self"

    Laster inn m�ldokumentet i samme frame som linken selv. Dette fungerer p� samme m�te som om TARGET attributtet ikke var spesifisert i det hele tatt.

  • TARGET="_top"

    Denne pusser ut alle frame'er p� skjermen din, og laster s� det nye dokumentet p� hele den rensa skjermen. Dette er noe du ofte vil bruke n�r du har link til en annen site. Dersom du ikke gj�r det, vil den andre site'n lastes inn i f.eks. den frame'n der du har plassert linken, noe som lett gir stygge og u�nskede resultater. Bruk prim�rt denne muligheten n�r du linker deg opp til noe utenfor din egen site. Det kan ofte v�re sv�rt irriterende for en bruker � v�re fanget i en annens frame :-)

  • TARGET="_parent"
  • Laster linkm�let til den frame'n som ligger 'over' den aktive, dvs. 'the parent' til den aktive. Enkelt sagt slettes frameset'et som omgir den frame'n der du har linken, og laster inn m�ldokumentet der. Forskjellen p� _parent og _top er kun merkbar dersom du har nested framesets, der du �nsker � laste inn m�ldokumentet i neste oppadg�ende niv� i n�stingen uten � slette eventuelle andre "ytre" frameset. I et enkelt, ikke-nested (n�stet) frameset gj�r _parent og _top det samme.

  • TARGET="_blank"

    �pner et nytt browservindu og laster m�ldokumentet inn i det samtidig som det aktive framesettet forblir up�virket i det 'gamle' browservinduet. Enkelte ganger kan dette v�re � foretrekke fremfor _top n�r du setter opp en link til en annen site.


En Frame-basert Site

N� som vi har dekket det grunnleggende mht. bruk av frames, skal vi kombinere alt vi har l�rt i forbindelse med at vi gjennomg�r et konkret eksempel. Som de fleste har sett p� Webben, er det sv�rt vanlig � ha en layout der en bruker et menyfelt nedover p� venstresiden av skjermen. I mange slike tilfelle er dette menyfeltet plassert inni en frame slik at man kan scrolle seg gjennom hovedinnholdet p� siden uten � miste menyen av syne.

Som vanlig begynner vi med � definere frameset'et v�rt. Vi kaller fila som inneholder frameset'et for index.html, og viser med det at dette er den f�rste fila som blir lastet n�r noen kommer til sida v�r. Akkurat som enhver frameset fil inneholder heller ikke denne noen <BODY> tag, men bruker i stedet <FRAMESET>, <FRAME>, og <NOFRAMES> tag'er til � definere layouten.

<HTML>
<HEAD>
<TITLE> Velkommen til min Web site! </TITLE>
</HEAD>

<FRAMESET FRAMEBORDER=0 COLS="150,*">
  <FRAME NAME="menu" NORESIZE SRC="mainmenu.html">
  <FRAME NAME="main" SRC="welcome.html">
</FRAMESET>

<NOFRAMES>
<H1>Welcome / velkommen!</H1> <P>This site was designed to use frames to provide a menu bar to ease navigation; however, your browser does not support frames. Click <A HREF="welcome.html">here</A> to go to the main page of our site, where you can use the alternative links we have provided to get around the site. / Denne site'n er skrevet for browsere som kan lese frames. Klikk <A HREF="welcome.html">here</A> for � komme til hovedsiden, der du kan bruke alternative linker.
</NOFRAMES>

</HTML>

Her er det flere ting � kommentere. Vi har brukt FRAMEBORDER=0 i <FRAMESET> tag'en for � skjule de 3D rammene som opprinnelig skiller frames'ene. I mange tilfelle vil dette f� en framesbasert side til � virke mer elegant.

Vi har brukt NAME attributtet til <FRAME> tag'en til � gi hver av frames'ene et passende navn. Dette er nyttig n�r vi senere skal definere linker med dertil h�rende m�ldokument.

Legg ogs� merke til NORESIZE attributtet i v�r f�rste <FRAME> tag.Dette forhindrer brukeren fra � endre bredden p� menyfeltet (-frame'n), og opprettholder den layouten vi har bestemt. Vi trenger ikke � spesifisere NORESIZE for main frame'n fordi dette g�r automatisk n�r vi bruker NORESIZE for meny frane'n. Vi har alts� to frames. Det er ganske logisk at dersom vi hindrer brukeren i � endre bredden p� den ene, vil han/hun heller ikke kunne endre bredden p� den andre.

Til slutt har vi brukt <NOFRAMES> tag'en til � s�rge for en velkomstmelding til brukere med browsere som ikke st�tter frames. Siden vi ikke �nsker � lage en ekstra versjon av v�r site for slike brukere, legger vi ganske enkelt inn en link til den samme fila som vi �nsker � laste inn i v�r main frame ved start. I den fila kan vi ha et lite linke-sett, f.eks. nederst p� sida.

Deretter �nsker vi � lage menyen v�r. Som det fremkommer av frameset'et v�rt, vil menyen ligge i mainmenu.html fila. Dette er da en helt normal HTML fil. Vi trenger der en <TITLE> tag. Dette er fordi frames ikke har tittelfelt.

<HTML>
<HEAD>
<BASE TARGET="main">
</HEAD>
<BODY BGCOLOR="DarkSlateBlue" BACKGROUND="menuback.gif" TEXT="white" LINK="LightSkyBlue" ALINK="Orange" VLINK="#FF9900">
<BASEFONT SIZE=2 FACE="Arial, Helvetica, sans-serif" SIZE=-1>

<H3>Main Menu</H3>
<HR NOSHADE>
<A HREF="welcome.html">Velkommen</A>
<P><A HREF="products.html">Varer</A>
<P><A HREF="order.html">Bestill</A>
<P><A HREF="support.html">Service</A>
<P><A HREF="info.html">Info</A>
<HR NOSHADE>

</BODY>
</HTML>

Det som det er viktig � merke seg her, er <BASE> tag'en som vi har brukt for � spesifisere det generelle m�let for linkene i denne fila. Enkelt og greitt f�r den alle linkene i fila til � laste sine m�lfiler inn i main frame'n.

Alt som gjenst�r er � sette opp hovedsidene til site'n. Disse skriver vi n�yatig som om det ikke eksisterte noen frames i det hele tatt. Det er ingen grunn til � bruke <BASE> tag'en, fordi vi �nsker at linkene i alle sidene som lastes inn i main-framen, skal lastes inn i den samme main-framen. Pass p� at du husker p� brukere som ikke takler frames, og f�lgelig har et sett navigasjonsmuligheter p� samtlige sider.

Jeg har n� s�rget for det du trenger til � lage en ok site. Bruk linkene under til � sjekke resultatet, og bruk gjerne koden til � lage din egen site.


 
See it in Action!   |   View the Code

 


Basic Frames   < >   Advanced Issues