Frames


Frames: eine Seite, viele Dateien

Mit Frames, kann in HTML der Bildschirm in mehrere eigenständige Segmente unterteilt werden. In jedes dieser Segmente wird eine separate Datei geladen. In einem Frameset-Steuerdatei werden die Framesets und innerhalb der Framesets die Größe und Position sowie die Dateien, die hinzugeladen werden müssen, festgelegt. Nehmen wir einmal an, die gerade geöffnete Seite sollte als HTML-Frameset programmiert werden. Es gibt einen Kopf mit Logo und Werbeeinblendungen, links eine Navigation, daneben einen Bereich für wechselnde Inhalte und daneben noch eine Spalte mit Sub-Navigation und nochmals Werbung. Abgeschlossen wird die Seite von einem Fuß der – wir geben es voller Scham zu – noch einmal Werbung enthält und einen Copyrighthinweis. Ein Frameset für diese Seite sähe wie folgt aus:

<html>
<head>
<title>Der Titel der Seite</title>
</head>
<frameset cols=“800,*“ frameborder=“1″ framespacing=“1″ border=“1″ bordercolor=“#FF0000″>
<frameset rows=“90,*,90″ frameborder=“1″ framespacing=“1″ border=“1″ bordercolor=“#0000FF“>
<frame src=“kopf.html“ name=“kopf“ scrolling=“no“ marginwidth=“2″ marginheight=“2″>
<frameset cols=“170,490,140″ frameborder=“1″ framespacing=“1″ border=“1″ bordercolor=“#00FFFF“>
<frame src=“navigation.html“ name=“navigation“ marginwidth=“2″ marginheight=“2″>
<frame src=“inhalt.html“ name=“inhalt“ scrolling=“yes“ marginwidth=“2″ marginheight=“2″>
<frame src=“subnavigation.html“ name=“subnavigation“ marginwidth=“2″ marginheight=“2″>
</frameset>
<frame src=“fuss.html“ name=“fuss“ scrolling=“no“ marginwidth=“2″ marginheight=“2″>
</frameset>
<frame src=“leer.html“ name=“leer“ scrolling=“no“ noresize>
<noframes>
Text, der in Browsern angezeigt wird, die keine Frames darstellen (Suchmaschinen-Spider etc.)
</noframes>
</frameset>
</html>

So sieht das Beispiel aus

Schlechte Rahmenbedingungen für Frames
Dieses extreme Beispiel verdeutlicht, warum Framesets immer weniger zur Webprogrammierung eingesetzt werden. Zunächst einmal sind sie sehr unhandlich. Im Beispiel werden inklusive der Frameset Steuerdatei ganze sechs Dateien benötigt, um die Seite aufzubauen. Dann kann es, je nach Bildschirmauflösung, zu einer Inflation von Scrollleisten kommen. Und schließlich gibt es neben normalen Desktop PCs immer mehr Geräte, mit denen man auf das Internet zugreifen kann und die nicht alle unbedingt Frames interpretieren können. Will man diese Benutzer auch erreichen, muss man neben der Frames-Variante unter Umständen doch noch eine No-Frames-Variante zur Verfügung stellen, was den Arbeitsaufwand noch einmal erhöht.

Frameklau
Ein Frameset birgt darüber hinaus die Gefahr, dass die eigenen Inhalte ungewollt auf fremden Webseiten angeboten werden. Für einen fremden Webseitenbetreiber wäre aus unserem Frameset die Datei „inhalte.html“ von Interesse. Er könnte sie ohne weiteres in sein eigenes Frameset laden und seine eigene Werbung drumherum platzieren – sofern wir unsere Inhalte nicht über ein entsprechendes Javascript vor Missbrauch schützen. Selbst Fremdverlinkungen, die ja meistens erwünscht sind, sind in einem Frameset nicht möglich. Im Beispiel würde sich nur die „inhalte.html“ Datei ändern, ganz gleich, welchen Link wir in der Navigation beziehungsweise Subnavigation klicken. Die URI im Browser, die auf die Frameset-Steuerdatei zielt, bleibt jedoch immer gleich, womit untergeordnete Dateien nicht gesondert mit komplettem Frameset angesteuert werden können.

Verschachtelte Framesets
Zunächst wird eine Frameset-Steuerdatei angelegt, die statt des „<body>“ Elements ein oder mehrere „<frameset>“ Elemente hat. Der „Online-Lotse“ nutzt lediglich 800 Pixel des Bildschirms, weswegen eine entsprechende Aufteilung in zwei Spalten im Frameset der obersten Hierarchie-Ebene erfolgt. Für den Wert „cols (engl. Spalten)“ finden wir 800 für die linke Spalte und, durch ein Komma getrennt, einen Stern (*) für die rechte Spalte. Das bedeutet, dass der linke Frame 800 Pixel breit ist und der rechte den Rest des Bildschirms beanspruchen soll. Die Größe kann neben Pixelangaben auch in Prozent erfolgen. Je nach Bildschirmgröße würde der Browser dann die Frames entsprechend skalieren. In diesem Fall würde der Zahl ein % nachgestellt (10%). Um die Strukur des Framesets zu veranschaulichen, haben wir die Rahmenstärke „frameborder“ auf 2 Pixel gesetzt. Die Grundeinstellung ist 1 Pixel, will man die Frame-Rahmen unterdrücken, muss man den Wert auf 0 setzen. Das Attribut „frameborder“ ist zwar HTML konform, wird jedoch von vielen Browsern nicht interpretiert, weswegen noch die Browser konformen Angaben „framespacing“ und „border“ hinzugefügt werden. Schließlich versehen wir die Rahmen der einzelnen Framesets noch mit unterschiedlichen Farben über das Attribut „bordercolor“. Für Farbangaben sind Hexadezimal-Werte am sichersten. Entsprechend folgen ein Frameset, das den 800 Pixel breiten Bereich in drei horizontale Bereiche für Kopf, Mitte und Fuß unterteilt und dann noch ein weiteres Frameset, das den mittleren, horizontalen Bereich nochmals in drei Sektionen für die Navigation, den Inhalt und die Subnavigation aufteilt.

Frame Eigenschaften
Innerhalb der einzelnen Framesets werden nun dessen Frames definiert. Zuerst folgt die Quelle (engl. source) der Datei, die geladen werden soll, über das Attribut „src“. Dann sollte jeder Frame einen eigenen Namen haben, über den er angesprochen werden kann und der mit dem Attribut „name“ vergeben wird (vgl. Target-Angaben). Standardmäßig fügt der Browser, falls erforderlich, Scrollbalken in einen Frame ein. Mit dem Attribut „scrolling“ kann man jedoch Scrollbalken erzwingen oder unterdrücken, je nachdem, ob es auf „yes“ oder „no“ gesetzt ist. Unterdrückt man sie, werden überlange Inhalte abgeschnitten. Mit „marginwidth“ bestimmt man den horizontalen Abstand des Inhalts vom Frame Rand (engl. margin) und mit „marginheight“ den vertikalen Abstand (engl. width = Weite, height = Höhe). Schließlich kann man noch mit dem Attribut „noresize“ erzwingen, dass ein Frame in seiner Größe unveränderlich (engl. no resize) ist.

Für die Frameverweigerer
Uralt-Browser, einige neuere Endgeräte und vor allem Suchmaschinen lesen keine Framesets. Will man diese Nutzer nicht vor den Kopf stoßen, verfasst man einen Alternativtext, der statt des Framesets ausgegeben wird und in dem Element „<noframes>“ notiert wird. Ab HTML 4.0 können Dateien auch über Inline Frames in eine Webseite eingebettet werden.