Vinnaren i pepparkakshustävlingen!
  • 1
  • 2
2006-02-08, 14:07
  #1
Moderator
Ruskigbusss avatar
Tanken är ju att som alla vet - Frames är en styggelse - och dessa skall ersättas med en lösning baserad på CSS och Javascript.

Nå, hur gör man det då?

Jo, så här:

Man har en meny-DIV med länkar som i stället för vanliga hrefs använder sej av javascripts.

Dessa javascripts byter sonika ut källan på en iframe ( t ex - andra lösningar fungerar ju också).

Både meny-diven och iframen placeras ut medelst CSS.

För att nedanstående skall fungera så måste alla filerna ligga i samma katalog. Trivialt är ju att lägga de i olika kataloger.

Fil #1: Huvudfilen.
HTML-kod:
<HTML>
<HEAD>

<STYLE>
.Cbox { position: absolute; background-color:#ffffff; top: 10px; height: 400px;
	padding:2px;
	border-top: 1px solid #000000; 	border-right: 1px solid #000000;
	border-left: 2px solid #000000; border-bottom: 2px solid #000000; 
}
Body  { background-color:#aaaaaa; } 
#Menu { left: 10px; width: 100px; }
#Main { left: 120px; width: 500px;  margin:0px;}

.linknormal  { font-family: arial; sans-serif; font-weight: normal; }

</STYLE>

<SCRIPT LANGUAGE="JavaScript">
function KlickMeny(nr) {
	document.all.Main.src=nr;
}
</SCRIPT>

</HEAD>

<BODY>
<DIV ID=Menu CLASS="Cbox" >
<a href="#" onclick=KlickMeny("0.html") class="linknormal">Start</a>

<a href="#" onclick=KlickMeny("1.html") class="linknormal">Ett</a>

<a href="#" onclick=KlickMeny("2.html") class="linknormal">Två</a>

</DIV>

<IFRAME ID=Main frameborder=0 CLASS=Cbox SRC="0.html">
</IFRAME>

</BODY>
</HTML>

Fil #2: 0.html
HTML-kod:
<HTML>
<BODY>
NOLL
</BODY>
</HTML>

Fil #3: 1.html
HTML-kod:
<HTML>
<BODY>
ETT
</BODY>
</HTML>

Fil #4: 2.html
HTML-kod:
<HTML>
<BODY>
TVÅ
</BODY>
</HTML>

(De senare filerna skall givetvis innehålla vettigare saker än så här. Bara ett exempel helge.)

Kvar att fixa är väl den där irriterande IE-buggen som göra att ramarna blir olika stora, samt att menyalternativet som är valt också markeras - något som bör göras med javascript.

Men, som en liten stomme att bygga på, kanske det duger?

Synpunkter, kommentarer, förbättringar?
Citera
2006-02-08, 14:31
  #2
Medlem
Stiligt rb
Citera
2006-02-08, 15:00
  #3
Medlem
nokys avatar
Jag hade gjort det i PHP. Ska man inte försöka undvika Javascript och Iframes?

Menyalternativet som är valt kan oxå göras i CSS.
Citera
2006-02-08, 15:29
  #4
Moderator
Ruskigbusss avatar
Citat:
Ursprungligen postat av noky
Jag hade gjort det i PHP. Ska man inte försöka undvika Javascript och Iframes?

Menyalternativet som är valt kan oxå göras i CSS.

Eh? Menyn och huvudfönstret måste väl placeras ut i alla fall?

En fördel med att låta klienten jobba är ju att avlasta servern. Du har iofs rätt i att en del har stängt av javascripten - och då fungerar mitt förslag inte.
Iframes ser jag inget behov av att undvika numera när alla moderna browsers stöder det.

Men, kom gärna med egna varianter. Eller alternativ. Helst då med kod. Så blir det lättare för de som vill inspireras.
Citera
2006-02-08, 16:32
  #5
Medlem
onemans avatar
Vad är fördelen med iframes framför vanliga frames?
Citera
2006-02-08, 16:34
  #6
Moderator
Ruskigbusss avatar
Citat:
Ursprungligen postat av oneman
Vad är fördelen med iframes framför vanliga frames?

Ptja - att man kan placera ut de lite var man vill.

Men, egentligen - i princip kan man ju använda javascriptet till att ersätta innerHTML i vilket objekt som helst. Så lösningen KRÄVER inte Iframes, men jag tycker det är enklast så.
Citera
2006-02-08, 23:37
  #7
Medlem
PhakE**s avatar
Why oh why krångla till det med javascript? Går ju att köra target precis som vanliga ramar?

Kod:
<HTML>
<HEAD>

<STYLE>
.Cbox { position: absolute; background-color:#ffffff; top: 10px; height: 400px;
padding:2px;
border-top: 1px solid #000000; border-right: 1px solid #000000;
border-left: 2px solid #000000; border-bottom: 2px solid #000000; 
}
Body  { background-color:#aaaaaa; } 
#Menu { left: 10px; width: 100px; }
#Main { left: 120px; width: 500px;  margin:0px;}

.linknormal  { font-family: arial; sans-serif; font-weight: normal; }

</STYLE>

</HEAD>

<BODY>
<DIV ID=Menu CLASS="Cbox" >
<a href="0.html" target="iframe" class="linknormal">Start</a>

<a href="1.html" target="iframe" class="linknormal">Ett</a>

<a href="2.html" target="iframe" class="linknormal">Två</a>

</DIV>

<IFRAME name="iframe" ID=Main frameborder=0 CLASS=Cbox SRC="0.html">
</IFRAME>

</BODY>
</HTML>
Citera
2006-02-10, 00:20
  #8
Medlem
Frames bör undvikas, för att de ställer till en del problem. XHTML har inte stöd för frames i de vanliga lägena (transitional, strict) utan i ett specialläge (frameset) om man nödvändigtvis behöver använda frames. I vissa fall kan det ju vara bra, t ex någon större dokumentation där det är bra med den typen av navigation, men inte på vanliga webbplatser. Ett problem med en webbplats som använder frames är att det inte går att länka till en specifik sida på en webbplats på ett smidigt sätt. Länkar man till en specifik sida så får man ju inte med sig framesetet som hör till. Detta kommer man ju inte ifrån med iframes, så det är ju lika illa. En annan sak är ju det som tidigare sagts att vissa webbläsare inte har stöd för Javascript.

Jag tycker nog att det "bästa" sättet är att strunta helt och hållet i frames. Man får helt enkelt se till att ha sin meny eller vad det kan vara inkluderad på alla sina sidor.
Citera
2006-02-13, 11:07
  #9
Medlem
CHRULLiZs avatar
Citat:
Ursprungligen postat av Aksel
Ett problem med en webbplats som använder frames är att det inte går att länka till en specifik sida på en webbplats på ett smidigt sätt. Länkar man till en specifik sida så får man ju inte med sig framesetet som hör till.
Kan du ge något exempel, jag förstår inte hur du menar
Citera
2006-02-13, 13:13
  #10
Moderator
Ruskigbusss avatar
Citat:
Ursprungligen postat av PhakE**
Why oh why krångla till det med javascript? Går ju att köra target precis som vanliga ramar?

Jodå. Det är sant. OM det bara är en iframe som man skall uppdatera.

Är det flera så MÅSTE man använda javascript.
Eller om man vill t ex byta ut utseendet på det valda menyalternativet.
Citera
2006-02-13, 13:19
  #11
Moderator
Ruskigbusss avatar
Citat:
Ursprungligen postat av Aksel
Frames bör undvikas, för att de ställer till en del problem. XHTML har inte stöd för frames i de vanliga lägena (transitional, strict) utan i ett specialläge (frameset) om man nödvändigtvis behöver använda frames. I vissa fall kan det ju vara bra, t ex någon större dokumentation där det är bra med den typen av navigation, men inte på vanliga webbplatser. Ett problem med en webbplats som använder frames är att det inte går att länka till en specifik sida på en webbplats på ett smidigt sätt. Länkar man till en specifik sida så får man ju inte med sig framesetet som hör till. Detta kommer man ju inte ifrån med iframes, så det är ju lika illa. En annan sak är ju det som tidigare sagts att vissa webbläsare inte har stöd för Javascript.

Jag tycker nog att det "bästa" sättet är att strunta helt och hållet i frames. Man får helt enkelt se till att ha sin meny eller vad det kan vara inkluderad på alla sina sidor.

Du har iofs rätt. Att inte frames ingår i vissa standarder ser jag egentligen som något större problem, som den pragmatiker jag är. ALLA moderna browsers (IE, FF, Opera) stöder frames.

Problemet med att inkludera sin meny och andra fasta element på sidorna (som man inte kan använda includes för ) är att det finns ett visst problem med att underhålla en större site. Är det fem sidor - så bör det inte vara något problem. Är det 5000 sidor, då är det lätt hänt att man glömmer.

Har man dynamiska sidor (php, asp eller så) - så kan man givetvis använda subrutiner för detta.

En annan aspekt är nedladdningstider. Visst, numera har många bredband och bilder cachas. Dock, med frames så uppdateras bara en del av det som visas, och kan då göra att användarens upplevelse av sidan är bättre än om allt skulle laddas om.

Så, kort sagt, det är en smaksak. Ovanstående exempel var då tänkt att demonstrera ETT sätt att lösa menyproblemet med. Givetvis inte det enda sättet, och självklart inte det bästa i alla lägen.
Citera
2006-02-14, 14:23
  #12
Medlem
Pestbarns avatar
Du kan ju - som tidigare nämnt - använda ett serverbaserat skriptspråk (ASP, PHP etc.) Jag själv använder PHP, med en kod som liknar denna:

Kod:
<?PHP

if(isset($_GET['view'])){
//om 'view' är satt (?view=x), kör följande

if(!(file_exists($_GET['view'].".php"))){
//om filen 'view' inte existerar, inkludera felmeddelande
include("error.php");
}
}

if(isset(
$_GET['view'])){
//om 'view' är satt (?view=x), kör följande

if(file_exists($_GET['view'] . ".php")){
//om filen 'view' existerar, hämta och inkludera 'view'.php
include($_GET['view'] . ".php");
}
}

elseif(!(
$_GET['view'])){
//annars om 'view' inte är satt, inkludera news.php

include('news.php');
}
?>

Denna kod läggs alltså i en egen div (förslagsvis kallar vi den för "content"). När sedan en användare klickar på en länk som går till exempelvis "index.php?view=bilder" så uppdateras innehållet i "content", och det som hämtas är "bilder.php".

Ungefär som en iframe alltså. För att detta ska fungera måste man

1. Ha PHP-stöd på servern
2. Ha filändelsen ".php"
3. Ha länkar som "skrivs om" till "?view=bilder", som alltså betyder "visafil bilder.php"
Citera
  • 1
  • 2

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback