HTML © Eva von Pepel
* [ HTML-referensbok ] * [ Referensböcker ] *
Frames-boken kan beställas från KnowWare Publications Art.nr. 070
Med FRAMES (ramar) kan du dela upp skärmen i mindre delar (rutor/fönster) och visa specifika dokument i var och en av dem. På så sätt kan viss information, t ex innehållsförteckning eller logo, vara synlig i en ram medan andra dokument visas i en annan. Du kan ha så många dokument öppna samtidigt som det finns ramar. Varje ram är försedd med en rullningslist så att du lätt kan bläddra igenom dokumenten.
Ramarna har alltid varit mycket kontroversiella och många retar sig på dem. Därför bör du tänka dig för innan du bestämmer dig att rama din sajt. Är verkligen ramar den bästa layoutsformen just för dig. Ha även i åtanke att ju fler ramar desto längre nedladdningstid eftersom fler dokument måste laddas. Ramarna orsakar även problem med att bokmärka de enskilda dokumenten.
Historik
FRAMES uppfanns av Netscape för ett bra tag sedan men inkluderades i HTML-standarden först i samband med publiceringen av HTML 4.0. Ovilja att acceptera dem berodde mest på att dess konstruktion stred mot HTML-regler. Dessa regler säger att HTML-dokument kan endast bestå av två element: en huvuddel (HEAD) och en efterföljande kroppsdel (BODY). En sådan struktur var inte möjlig i dokument med Netscapes FRAMES därför att de innehöll ett tredje element, nämligen FRAMESET som fordras för att kunna skapa ramar överhuvudtaget. Problemet löstes genom att en ny dokumenttyp introducerades i vilken BODY ersattes med FRAMESET.
När du skapar dokument med ramar ska du därför:
För att kunna strukturera ett dokument med ramar behöver du skapa minst två dokument; ett huvuddokument där du sätter upp ramarna och ett eller fler "vanliga" dokument beroende på hur många ramar det finns. 1 ram (hel skärm) - 2 dokument, 2 ramar - 3 dokument osv.
För att till exempel skapa ett dokument med två ramar; en ram för innehållsförteckning och en för välkomstsida (där även dokument listade i innehållsförteckningen kommer att laddas) behöver du tre dokument. För exemplets skull kommer jag att kalla dem
I huvuddokumentet, även kallat FRAMESET-dokumentet, därför att uppdelningen sker med hjälp av elementet FRAMESET, specificerar du hur skärmen ska delas upp. Vidare uppger du vilket dokument som ska laddas i vilken ram (elementet FRAME). Slutligen uppger du det innehåll som ska visas i de www-klienter som inte har något FRAMES-stöd. När en besökare kommer till din index.html-sida kommer de specificerade dokumenten att laddas i ramarna.
När besökaren besöker index.hml enligt exemplet kommer han/hon att se denna bild
För att skapa ramarna behövs tre element: FRAMESET, FRAME och NOFRAMES. Huvuddokumentet (index.html) strukturerar du enligt följande:
index.html
Dokumentet börjar med en DOKUMENTTYP-deklaration
Huvuddel som i "vanliga" dokument
Denna efterföljs av FRAMESET istället för BODY där du delar upp skärmen i kolumner med hjälp av attributet COLS och/eller rader med attributet ROWS.
Vidare listar du dokument som ska laddas i de respektive ramarna samt namnger ramarna för att kunna hänvisa till dem från andra dokument.
Innehåll för www-klienter utan FRAMES-stöd. Det du skriver här kommer att visas i dessa klienter
Sluttaggar
Det behövs minst ett FRAMESET element för att skapa ramarna. Början på varje set markerar du med starttaggen <FRAMESET> och du slutar med </FRAMESET>. Båda är obligatoriska. I starttaggen listar du antal kolumner (attributet COLS), rader (attributet ROWS) eller båda genom att uppge deras bredd eller höjd i förhållande till skärmen
Elmentet FRAMESET kan ta följande attribut: COLS, ROWS, onload, onunload och ID, CLASS, STYLE, TITLE. Attributen skrivs i starttaggen och åtskiljs med ett mellanslag.
COLS delar upp skärmen vertikalt. Det finns så många kolumner som det finns värden tilldelade detta attribut. Värdena listas ett efter ett och separeras med ett komma. <FRAMESET cols="20%, 30%, 50%"> till exempel delar upp skärmen i tre kolumner varav den första upptar 20%, den andra 30% och den tredje 50%. Observera att värdena citeras
ROWS delar upp skärmen horisontellt. F.ö. gäller samma regler som för COLS.
Ramarna skapas på basis av om och hur attributen COLS och ROWS förekommer. Följande regler gäller:
Värdena som specificerar ramarnas och kolumnernas storlek kan uppges i pixlar, procent eller genom relativa enheter. Standardvärdet är 100%.
Attributen ID, CLASS, STYLE, TITLE är flitigt återkommande i HTML 4.0 då nästan varje element kan ta dem.
ID - Unik identifiering av specifik förekomst (instans) av ett element som gäller hela dokumentet. Genom att identifiera ett element kan man skapa en länk till det, skriva över stilinformation, referera till det från ett skript eller namnge ett deklarerat objekt. Det unika värdet kan bara tilldelas en enda förekomst av ett element.
<FRAMESET COLS="1*, 250, 3*" ID=evp34>
CLASS - Tilldelar en specifik förekomst (instans) av ett element eller grupp av element en klass eller grupp av klasser. Valfritt element kan tillhöra en klass. Klassade element kan tilldelas ett specifikt värde, t ex en unik stil
<FRAMESET COLS="1*, 250, 3*" CLASS=eva>
STYLE - Inline stilinformation för ett specifikt element. Ett stilspråk, t ex Cascading Style Sheets, används för att specificera denna stil.
<FRAMESET COLS="1*, 250, 3*" STYLE="margin: 0">
TITLE - Elementets titel, det tilldelade värdet kan visas som ett meddelande när musen passerar över den som kan vara en bra informationskälla i icke visuella www-klienter.
<FRAMESET COLS="1*, 250, 3*" TITLE="Ett ramat dokument">
ID och CLASS oftast används tillsammans med stilmallar. Du kan bara tilldela ID ett element men CLASS kan få vilket element som helst. Dessa två attribut låter dig deklarera unik still till de berörda elementen. Till exempel:
<HEAD>
<STYLE TYPE="text/css">
<!--
#evp34 {magin: 0}
.eva {margin: 0}
-->
</STYLE>
</HEAD>
Denna stil anropar du när du tilldelar de berörda elementen attributen ID eller CLASS
<FRAMESET COLS="1*, 250, 3*" ID=evp34>
eller
<FRAMESET COLS="1*, 250, 3*" CLASS=eva>
Onload och onunload är s.k. inre händelser och används tillsammans med ett skript. Vad som händer beror på de parametrar som uppgivits i skriptet. Onload orsakar en händelse när alla ramar inuti ett FRAMESET har laddats och onunload när dokumentet är borttaget från ett fönster eller en ram.
Du ska ha så många FRAME-element som det finns ramar specificerade i det aktuella setet. Varje ram/dokument-par markerar du med taggen <FRAME>. Sluttaggen saknas.
Dokumenten tilldelas följande ramar: dokument enligt det FRAME-element (i exemplet inneh.html) visas i den ram som först specificeras i FRAMESET (i exemplet 25%), dokument enligt det FRAME-element (i exemplet hej.html) visas i den ram som näst specificras i FRAMESET (i exemplet 75%) osv.
Genom att namnge ramar (attributet NAME) kan du senare lätt target dem, dvs hänvisa underordnade dokument till specifika ramar genom att uppge deras namn (se dokument B).
Med attribut tilldelade elementet FRAME kan du specificera i detalj hur varje enskild ram ska se ut. Attributen skrivs i starttaggen och åtskiljs med ett mellanslag. Elementet tar följande attribut:
ID, CLASS, STYLE, TITLE (se <FRAMESET>)
SRC - hänvisar till den plats där dokumentet som ska laddas i den aktuella ramen finns
<FRAME SRC="css.html">
NAME - namnger den aktuella ramen
<FRAME SRC="css.html" NAME=display>
FRAMEBORDER - ritar en ram runt den aktuella ramen. Värdena kan vara 1 eller 0. Värdet 0 ritar inga ramar. På så sätt kan du skapa FRAMES med osynliga ramar.
<FRAME SRC="css.html" NAME=display FRAMEBORDER=0>
MARGINWIDTH - justerar avstånd mellan ramens innehåll och dess högra och vänstra marginal. Värdet uppges i pixlar som måste vara större än 1.
MARGINHEIGHT - justerar avstånd mellan ramens innehåll och dess topp- och bottenmarginal. Värdet uppges i pixlar som måste vara större än 1.
NORESIZE - talar om att ramens storlek ska inte ändras. Värdet är samma som attribut och behöver inte uppges. NORESIZE=noresize. Därför skriver du enbart:
<FRAME SRC="css.html" NAME=display FRAMEBORDER=0 NORESIZE>
SCROLLING - specificerar rullningslistinformation. Värdena är:
LONGDESC (long description) - för en längre beskrivning av ramens innehåll som kan användas av icke visuella www-klienter. Värdet hänvisar till en adress där sådan beskrivning finns
<FRAME SRC="css.html" NAME=display LONGDESC="rambeskrivning.html">
Detta element använder du för att förse www-klienter utan FRAMES-stöd med någon form av innehåll. Om elementet inte finns kommer besökaren få ett felmeddelande, t ex "För att komma åt detta dokument behöver du ha en www-klient med FRAMES-stöd". Om elementet finns kommer besökaren se det innehåll du har skrivit.
Elementet markerar du med starttaggen <NOFRAMES> och slutar med </NOFRAMES>. Båda är obligatoriska. Elementet får innehålla alla element som normalt finns i dokumentets kropp inklusive BODY.
<NOFRAMES>
innehåll
</NOFRAMES>
eller
<NOFRAMES>
<BODY>
innehåll
</BODY>
</NOFRAMES>
Innehåll i elementet NOFRAMES bestämmer du själv. Jag skulle dock inte rekommendera dig att skriva "Your browser doesn't support frames. Please download ....." då det retar väldig många användare.
Personligen skulle jag hellre se innehåll av inneh.html som innehåll i elementet NOFRAMES. Varför tala om för mig något som jag redan vet? Därför tar jag (och många andra) sådana meddelanden som en ohövlig fingervisning.
Då inneh.html kommer med största sannolikhet hänvisa till några specifika ramar skulle jag skapa ett nytt dokument, utan attributen target och name och använda detta som innehåll i elementet NOFRAMES.
Ha även i åtanke att i www-klienten Opera finns en möjlighet att stänga av frames och de flesta som använder denna klient utnyttjar detta alternativ. Därför blir de bara irriterade när FRAMES nämns överhuvudtaget.
Du bör även förse dokumentet med väl synliga länkar till "fria från frames"- dokument så att även användare utan "Stäng av frames"-möjligheten kan ha tillgång till dem. Bara därför att min www-klient stödjer frames behöver inte betyda att jag vill använda dem.
Elementet tar följande attribut:
ID, CLASS, STYLE, TITLE (se <FRAMESET>)
DIR (text riktning) med värden RTL eller LTR
RTL (right to left) höger till vänster eller
LTR (left to right) vänster till höger, t ex <noframes dir=rtl>. Om inget attribut uppges gäller standardvärdet LTR. Detta attribut är användbart om texten innehåller t ex arabiska ord som skrivs åt "fel håll".
Följande attribut använder du tillsammans med ett skript. De är s.k. inre händelser som sker först när besökaren har uppgivit något slags av kommando antingen med musen eller tangentbordet. Det som händer beror på de instruktioner som skriptet innehåller.
Detta är ett vanligt HTML 4.0 Transitional-dokument som ska visas i den ena ramen. Dokumentet innehåller en innehållsförteckning, dvs länkar till andra dokument. För att kunna bestämma i vilken ram ett dokument ska visas tilldelas länkarna attributet TARGET.
inneh.html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE>Innehållsförteckning</TITLE>
</HEAD>
<BODY>
<H1>Innehåll</H1>
<P><A href="html.html" target=display>HTML-guiden</A>
<P><A href="css.html" target=display>CSS-guiden</A>
</BODY>
</HTML>
OBS! Du skall använda Dokumenttyp Deklaration för HTML 4.0 Transitional. Genom att namnge de olika ramarna i huvuddokumentet, t ex <FRAME src=hej.html" NAME=display>, kan du bestämma i vilken ram ett specifikt dokument ska laddas.
Det gör du med hjälp av attributet TARGET. Om inget namn uppges kommer dokumenten att laddas i samma ram som det befintliga dokumentet finns i. Om till exempel HTML-guiden saknade attributet TARGET skulle dokumentet visas i ramen CONTENTS istället för DISPLAY därför att dokumentet inneh.html finns där.
Förutom egna namn kan attributet TARGET ta följande värden:
Om många dokument ska laddas i en och samma ram kan du specificera målramen en gång genom att tilldela attributet TARGET till elementet BASE istället för varje länk. Skriv följande i dokumentets huvud, dvs mellan <HEAD> och </HEAD>:
<BASE HREF="den_absoluta_adressen" TARGET="namn_på_målramen">
OBS! om du länkar till andra sajter bör du alltid ladda dem som TARGET="_top". Att rama in andras dokument anses som mycket dålig stil.
Ett helt vanligt HTML-dokument. En välkomstsida där du presenterar dig själv eller företaget. Till exempel:
hej.html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE>Referensböcker - Presentation</TITLE>
<LINK REL=STYLESHEET HREF="stilmall.css" TYPE="text/css">
<LINK REV="made" HREF="mailto:eva@algonet.se">
</HEAD>
<BODY>
<H1><IMG SRC="bilder/logo.gif" width=312 height=58 alt="Referens"></H1>
<H2 ALIGN=center>Presentation</H2>
<P>På dessa sidor hittar du olika referensböcker ... osv</P>
<P>Ett nytt stycke</P>
<ADDRESS>
<A HREF="mailto:eva@algonet.se">eva@algonet.se</A>
</ADDRESS>
</BODY>
</HTML>
Sidan kommer att se ut så här i verkligheten:
Den tredje ramen namnges logo. I denna ram ska dokumentet logo.html (D) visas.
OBS! Detta och efterföljande exempel visar bara fönsteruppdelningen.
<FRAMESET rows="*,*,*">
<FRAME src="inneh.html" name=contents>
<FRAME src="hej.html" name=display>
<FRAME src="logo.html" name=logo>
</FRAMESET>
<FRAMESET cols="75, *">
<FRAMESET rows="100, 200">
<FRAME src="logo.html" name=logo>
<FRAME src="inneh.html" name=contents>
</FRAMESET>
<FRAME src="hej.html" name=display>
</FRAMESET>
Rutnätet delar först upp skärmen i två rader och sedan varje rad i tre kolumner.
Första raden upptar 30% av skärmen. Andra raden upptar resterande 70%. Kolumnerna är proportionella, dvs ca 33,3%. OBS! Attributen ROWS och COLS skrivs tillsammans.
<FRAMESET rows="30%,70%" cols="*,*,*">
<FRAME src="A.html" name=ram1>
<FRAME src="B.html" name=ram2>
<FRAME src="C.html" name=ram3>
<FRAME src="D.html" name=ram4>
<FRAME src="E.html" name=ram5>
<FRAME src="F.html" name=ram6>
</FRAMESET>
Ramar, i likhet med tabeller, kan nestläggas i varandra. Följande exempel skapar tre proportionella ramar och sedan nestlägges två ramar i den första ramens andra kolumn.
| Ram nr 1 med tre proportionella kolumner .. innehåll i kolumn nr 1 i ram nr 1 |
<FRAMESET cols="*, *, *"> <FRAME src="A.html" name=ram1> |
| Ram nr 2 med två rader är nestlagd i den första ramens andra kolumn .. innehåll i rad nr 1 i ram nr 2 .. innehåll i rad nr 2 i ram nr 2 |
<FRAMESET rows="40%,50%"> <FRAME src="B.html" name=ram2> <FRAME src="C.html" name=ram3> |
| Stänger ram nr 2 (och kolumn 2 i ram 1) .. innehåll i kolumn 3 i ram 1 |
</FRAMESET> <FRAME src="hej.html" name=ram4> |
| Stänger ram nr 1 | </FRAMESET> |
Om någon länkar till ditt dokument och av en eller annan orsak "glömmer" lägga attributet TARGET="_top" till länken kommer dokumentet laddas i denna personens ram. Du kan lätt gardera dig mot det här genom ett av följande sätt:
<BASE HREF="adress.html" TARGET="_top"> som du skriver i huvuddelen, dvs någonstans mellan <HEAD> och </HEAD>
<META HTTP-EQUIV="Window-target" CONTENT="_top"> som också skrivs i huvuddelen
<BODY ONLOAD="if (self != top) top.location=self.location"> detta sätt fordrar dock att www-klienten stöder Java
Stäng av den ohövlige användaren från din sajt med en .htaccess fil. Filen placerar du i varje bibliotek. OBS! Filen laddas upp som ASCII. Så ser filen ut. Låt oss anta att du vill stänga av en användare från www.ohovlig.se
AuthUserFile /dev/null AuthGroupFile /dev/null AuthName NOFRAMES AuthType Basic <Limit Get POST> order deny,allow deny from www.ohovlig.se allow from all </limit>
Många ställer denna fråga. Det finns ett antal sätt att göra det på. Här kommer två:
Du kan använda <META> för att ladda ett annat dokument
<META HTTP-EQUIV="Refresh" CONTENT="antal sekunder" URL="sidan som ska uppdateras" TARGET="ramens namn">
Du kan använda JavaScript, t ex:
innehåll.html (ram A), banner.html (ram B), display.html (ram C)
Om du vill uppdatera ram C och B lägger du till följande i ram C
<SCRIPT>
parent.frames[1].location = 'banner.html'
</SCRIPT>
parent betyder _parent, frames[1] specificerar den andra ramen som specificerades i _parent. (Den första är frames[0])