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.