Valid HTML 4.01!

Frames

(eine Dokumentation - 31.3.1997)

Stefan Morgenroth


WWW-Browser zeigen normalerweise pro Fenster ein einziges Dokument an. Anders mit Netscape-Frames: entsprechende Anweisungen im HTML-Dokument unterteilen das Fenster in mehrere unterschiedliche Bereiche, eben jene Frames. Jeder dieser Bereiche kann ein separates Dokument mit eigenständigem URI (Uniform Resource Identifier) enthalten und unabhängig von den übrigen Frames dargestellt werden. Es besteht übrigens keine Notwendigkeit, diese Dokumente sämtlich von ein und demselben Server zu laden. Sie können vielmehr von irgendwo aus dem Internet stammen und sich friedlich auf einer gemeinsamen Frame-Seite versammeln.

Doch alles der Reihe nach. Wie wird eine normale HTML-Seite framefähig? Geben sie ein einfaches HTML-Dokument ein:

Im ersten Schritt wird das BODY-Element durch das FRAMESET-Element mit einem hineingeschachtelten NOFRAMES ersetzt:

Wer sich diese Seite mit einem anderen Browser als Netscape ansieht, bemerkt ersteinmal nichts aufregendes. Vielmehr verhält sich das erste Dokument genauso wie das erste. Das ist sehr beruhigend, zeigt es doch, daß Frames grundsätzlich mit sonstigen Browsern verträglich sind. Allerdings muß der Autor darauf achten, diese Möglichkeit auch zu nutzen.

Ein Nicht-Netscape-Browser oder Netscape vor Version 2.0 ignoriert den FRAMESET-Tag, da er ihn nicht kennt. Gleiches geschiehr mit dem NOFRAMES-Tag. Der P-Tag wird wie gewohnt angezeigt. Genauso wie die Starttags werden auch die Endtags ignoriert. Also erscheint die Seite genau wie im ersten Beispiel. Anders ist es bei einem Netscape-Browser ab Version 2.0: Die Seite ist leer. Das liegt daran, daß der Navigator die FRAMESSET- und NOFRAMES-Tag sehr wohl kennt. Und da noch keine Frameinformationen im Dokument enthalten sind, ist eben noch nichts sichtbar.

FRAMESET

FRAMESET bedeutet für den Navigator: dieses Element enthält eine Menge (set) von Rahmen (Frames). In diesem speziellen Fall (s.o.) folgt allerdings kein einziger Rahmen, sondern lediglich das NOFRAMESSET-Element. Der Navigator kennt dieses Element und ignoriert den Inhalt, weil er nur für frameunfähige Browser gedacht ist.

Die bisher leere Seite soll aber Frames enthalten. Das sieht dann etwa so aus:

Beispiel 1

Original

Jeder der beiden gezeigten Teilbereiche enthält ein separates HTML-Dokument. Hier der Quellcode:

Spalten und Zeilen: Den Raum aufteilen

Über das Attribut ROWS des FRAMESET-Elements unterteilt der Autor das Fenster in mehrere Rahmenreihen. Im Beispiel besteht der Attributwert von ROWS aus zwei durch Komma getrennte Komponenten, die jeweils die Hälfte des Fensters für einen Frame reservieren. Benötigt man mehr Zeilen, wird ROWS entsprechend erweitert, z.B. zu ROWS="10%,70%,10%,10%" für vier Zeilen. Vergrößert oder verkleinert der Anwender das Hauptfenster, verändern sich die Frames mit, jeweils ihrer prozentualen Größe entsprechend. Die in ROWS angegebenen Prozentpunkte müssen zusammen nicht unbedingt 100 prozent ergeben. Ist die Summen größer oder kleiner werden die Werte auf 100 Prozent angeglichen.

Das Attribut COLS bewirkt eine spaltenweise Aufteilung. Die Werte und Wirkungen des COLS-Attributs entsprechen denen von ROWS. Werden Zeilen und Spalten kombiniert, ergibt sich eine Tabellenstruktur der Seite bzw. des FRAMESETS. Der entsprechende Teil des Quellcodes sieht so aus:

Beispiel 2

Original

FRAME beschreibt den Rahmeninhalt

Innerhalb eines FRAMESET stehen neben bzw. unter NOFRAMES die FRAME-Elemente, die jeweils den Inhalt eines Rahmens festlegen. Dieser Inhalt ist nicht in der aktuellen Seite selbst enthalten. Vielmehr verweist das Attribut SRC auf das Dokument, das der Browser in den Rahmen laden soll. Wie in der oberen Abbildung zu sehen ist, fügt der Navigator die Seiten von links nach rechts zeilenweise in die Tabellenstruktur ein. Anders ausgedrückt: der erste FRAME-Inhalt wird in die am weitesten links stehende Zelle der ersten Zeile geladen, das zweite Dokument erscheint eine Zelle weiter rechts und so weiter. Ist die Zeile voll, geht es in der nächsten Zeile weiter.

Wie zu sehen ist, enthält das FRAME-Element keineswegs selbst den Rahmeninhalt, sondern es spezifiziert lediglich, wo der Inhalt zu finden ist.

Der Inhalt eines Rahmens, auf den das FRAME-Element verweist, ist immer ein komplettes HTML-Dokument. Für das fungiert der Rahmen, der es enthält, wie ein normales Browser-Fenster. Da ein Rahmen allerdings im Unterschied zu den Fenstergrößen, die ein Benutzer typischerweise einstellt, ungewöhnlich schmal oder niedrig sein kann, können sich beim Layout überraschende Effekte ergeben. Hier ist Vorsicht geboten.

Mit einem Dokument in einem Rahmen kann der Benutzer genauso arbeiten, wie mit einem Dokument im Hauptfenster, von der ungewöhnlichen Dimension einmal abgesehen. Das anklicken eines Links wirkt sich nur im aktuellen Teilbereich aus, das heißt, die Web-Seite wird innerhalb des jeweiligen Frames geladen. Der Inhalt der übrigen Rahmen bleibt unverändert. Ausnahme: Mit dem Attribut TARGET kann ein Dokument in einen anderen Frame geladen werden.

Schachtelung (Rekursion verboten)

Ein in einem Rahmen integriertes Dokument darf selbst wieder eine FRAMESET-Spezifikation enthalten. In diesem Fall wird der umgebende Rahmen so aufgeteilt, als wenn es sich um das Hauptfenster handeln würde. Diese Rahmen könne wiederum Rahmen enthalten, usw.. In einem speziellen Fall funktioniert das nicht: Ruft sich eine Frame-Seite rekursiv selbst auf wird das Laden unterbrochen. Der betreffende Rahmen bleibt leer.

Wer komplexere Layouts in Frames gestalten möchte, hat die Möglichkeit Frames ineinander zu verschachteln. Dazu muß man nicht, wie vorher erwähnt, mehrere Dateien mit FRAMESET verwenden, sondern kann die FRAMESET-Elemente auch direkt ineinander verschachtel. Das folgende Beispiel zeigt eine Möglichkeit:

Beispiel 3

Original

Die drei Zeilen der äußeren FRAMESET enthalten (in dieser Reihenfolge) einen FRAME, ein FRAMESET und einen weiteren FRAME. Das hineingeschachtelte FRAMESET in der mittleren Zeile beansprucht den gleichen Platz, wie es ein FRAME-Element an seiner Stelle täte. Es richtet sich nach der Größenangabe im ROWS-Attribut. Diesen Platz stellt das FRAMESET den in ihm enthaltenen FRAME (und einem oder mehreren FRAMESET, wenn es welche gäbe) zur Verfügung, hier sind es die Frames "Gelb" und "Blau" (Übrigens zeigt dieses Beispiel, daß sich die prozentualen Größenangaben im ROWS- oder COLS-Attribut nicht unbedingt zu 100 Prozent summieren müssen. Im äußeren FRAMESET ist die Summe nur 99 Prozent; Netscape normiert diesen Wert auf 100. Mit ROWS="4%,4%,4%" verführe das Programm genauso).

Größenangaben in Pixel und relativ

Bislang hatten Frames immer die gleiche Größe, gleichgültig, welche Fensterbreite oder -höhe der Benutzer einstellt. Dafür sorgte die Angabe "%" in den Attributen ROWS und COLS. Es gibt jedoch zwei weitere Möglichkeiten zur Größenspezifizierung: in Pixel und relativ zur Gesamtgröße.

Beispiel 4

Original

Beispiel 5

Original

Alle Größenangaben, gleich ob absolut oder relativ, sind zunächst nur Vorgaben für die Standardeinstellung eines Fensters. Der Benutzer kann die Fenster- und Rahmenaufteilung leicht ändern, indem er den oder die Rahmen mit der Maus verschiebt.

Rahmendetails

FRAME als Element eines FRAMESET besitzt keinen Inhalt und daher auch keinen Endtag. Das Aussehen und der Inhalt des Rahmens legen allein die Attribute von FRAME fest:

SRC="URI"

NAME="rahmen_name"

MARGINWIDTH="pixel"

MARGINHEIGHT="value"

SCROLLING="yes | no | auto"

NORESIZE

Folgende Attribute sind erst ab Netscape Navigator 3.0 gültig:

Beispiel 2b

Original

BORDER="Pixel"

FRAMEBORDER="yes | no"

BORDERCOLOR="value"


The End

Valid HTML 4.01!