André Leopold (Homepage) : HTML - Indexseite : Frames
HTML

Frames

0. Inhaltsverzeichnis

  1. Geschichte
  2. Syntax
  3. Probleme mit Frames
  4. Alternativen und Fazit

1. Geschichte

Frames sind, genau wie das FONT Element, eine Erfindung von Netscape, die eingeführt wurde, ohne auf Standardisierungen zu warten, oder daß über die Sinnhaftigkeit dessen oder gar Verbesserungsvorschläge diskutiert werden könnte. Es existiert noch kein HTML Standard für die Benutzung von Frames, lediglich die HTML 4.0 Recommendation enthält ein Framekonzept, zu dem Netscape fast kompatibel ist. Bei dieser Recommendation gehören Frames aber ebenfalls nicht zur strict-Version, sondern zu einer eigenen DTD names HTML 4.0 Frameset, deren Untermenge sogar noch HTML 4.0 Transitional, die Übergangslösung zwischen HTML 3.2 und HTML 4.0, ist.

Die Umsetzung von Frames in den Browsern sorgte schon für viel Probleme und Kritiken, speziell Netscape 2 hatte einiges zu kämpfen. Es gab auch sonst sehr viel Kritiken, diese werden im Kapitel Probleme mit Frames näher betrachtet.

Frames ermöglichen es dem Leser (ja, hier ist es wirklich nur noch der Leser), verschiedene HTML Dokumente gleichzeitig in einer Browserinstanz geöffnet zu haben, z.B. einen Navigationsbalken, der nicht mitgescrollt wird, wenn in einem anderen Dokument geblättert wird.

2. Syntax

Einleitung

Im folgenden wird nicht auf irgendwelche Netscape- oder Microsoft Spezifikationen eingegangen, stattdessen wird sich an den Frames Beschreibungen in der W3C Framesdefinition der HTML 4.0 Recommendation orientiert.

Ein Dokument, das Frames aufbaut, unterscheidet sich von einem normalen HTML Dokument dadurch, das anstatt des BODY Elements ein FRAMESET Element verwendet wird. In diesem FRAMESET Element befinden sich FRAME Elemente, die die einzelnen Frames näher bezeichnen.

Außerhalb des FRAMESET Elements gibt es dann noch das NOFRAMES Element, das Nutzern, deren Browser keine Darstellung von Frames erlauben, oder Nutzern, die auf die Darstellung von Frames verzichten, immer noch Inhalt vermitteln kann.

Neben obigem Frameslayout gibt es noch die sogenannten Inline Frames, die von Microsoft mit der Einführung des Internet Explorer 3.0 vorgestellt worden. Auch diese befinden sich in der HTML 4.0 Recommendation.

FRAMESET

Erlaubte Attribute, neben den "%coreattrs", für FRAMESET sind:

ROWS
Definition der Zeilen
COLS
Definition der Spalten
ONLOAD
Skripting event.
ONUNLOAD
Skripting event.

Die letzten zwei sollen hier nicht betrachtet werden, sie dienen zum Aufruf von Skripten. Die Attribute ROWS und COLS erhalten eine Komma-separierte Liste, die das Layout der Frames bestimmt. In dieser Liste können Zahlen (Pixel), Prozentzahlen sowie ein "*" Zeichen stehen. Übergibt man zum Beispiel ein

ROWS="100,*,25%"

werden drei Zeilen aufgebaut. Die erste ist 100 Pixel hoch, der dritte und unterste nimmt 25% des Browserfensters (inklusive der 100 Pixel der ersten Zeile), und die mittlere bekommt den ganzen Rest. Analog ist es beim COLS Attribut. Man kann vor die "*" noch eine Zahl setzen, so erzeugt zum Beispiel

COLS="2*,150,3*"

drei Spalten. Die mittlere ist 150 Pixel breit, den restlichen, übriggebliebenen Platz teilen sich die linke und rechte Spalte, indem die linke 40% und die rechte 60% des übriggebliebenen Text (exklusive der 150 Pixel) erhalten. Beispiel: Beträgt die Breite des Fensters 1000 Pixel, bleiben für die linke und rechte noch 850 Pixel übrig. Davon erhält die linke 340, die rechte 510 Pixel. Ein "*" ohne eine Zahl davor zählt als "1*".

FRAMESET Elemente können verschachtelt sein. Auf diese Weise kann man zum Beispiel erst drei Zeilen erschaffen, und die mittlere Zeile dann noch einmal in drei Spalten unterteilen:

<FRAMESET ROWS="100,*,100">
	... Inhalt des obersten Frames
	<FRAMESET COLS="25%,*">
		... Inhalt der linken Spalte
		... Inhalt der rechten Spalte
	</FRAMESET>
    ... Inhalt des untersten Frames
</FRAMESET>

FRAME

Zur näheren Spezifikation der einzelnen Inhalte von Frames gibt es das FRAME Element.

Als Attribute können hier angegeben werden:

LONGDESC
Lange Beschreibung des Frames.
NAME
Name des Frames, um das Zielframe für Links angeben zu können.
SRC
URL des Zielfensters, das in diesem Frame dargestellt werden soll.
FRAMEBORDER
Angabe 0 oder 1. Bei der Angabe einer 1 (Standard) wird ein Separator um das Frame herum gezogen.
MARGINWIDTH
Pixel, die am linken und rechten Rand freigelassen werden.
MARGINHEIGHT
Pixel, die am oberen und unteren Rand freigelassen werden.
NORESIZE
Beeinflußt, ob es dem Nutzer erlaubt ist, die Größe der Frames zu verändern. Wenn NORESIZE dort steht, kann die Größe nicht verändert werden, läßt man es weg, dann kann sie verändert werden.
SCROLLING
Angabe: yes|no|auto beeinflußt das Erscheinen eines Scrollbalkens. Bei der Angabe Auto erscheint ein Scrollbalken nur, wenn er nötig ist. Bei Yes ist er immer da, bei No nie.

Nun soll ein Beispiel kommen, das vier Frames aufbaut, basierend auf obigem FRAMESET Beispiel.

<FRAMESET ROWS="100,*,100">
	<FRAME SRC="open.html" NAME="oben" FRAMEBORDER="0">
	<FRAMESET COLS="25%,*">
		<FRAME SRC="links.html" NAME="links"
		    FRAMEBORDER="0" MARGINWIDTH="10" MARGINHEIGHT="10">
		<FRAME SRC="rechts.html" NAME="hauptseite"
		    FRAMEBORDER="0" MARGINWIDTH="20" MARGINHEIGHT="15">
	</FRAMESET>
	<FRAME SRC="unten.html" NAME="unten" FRAMEBORDER="1">
</FRAMESET>

Man erhält ein Set von vier Frames. Zwischen dem oberen und den beiden mittleren Frames besteht keine sichtbare Grenze, aber zwischen dem unteren und den beiden mittleren. So zumindest laut HTML Spezifikation. Um den gleichen Effekt bei Netscape zu erhalten, muß man noch im FRAMESET Element BORDER="0" hinzufügen.

NOFRAMES

Was sieht ein Nutzer, dessen Browser keine Frames darstellt, wenn er auf eine Seite mit obigem Beispiel trifft? Er sieht nichts, ganz einfach, weil im obigen Dokument nichts vorhanden ist, was auf seinem Browser dargestellt werden würde. Um das zu beheben, gibt es das NOFRAMES Element.

Das NOFRAMES Element ist dafür vorgesehen, Nutzern, deren Browser keine Frames darstellen können, oder Nutzern, die nicht wollen, daß ihre Browser Frames darstellen, und diese deshalb, falls der Browser nicht schon von Haus aus einen entsprechenden Menüpunkt zur Verfügung stellt (wie zum Beispiel Opera), ihrem Browser abgewöhnt haben, immer noch eine Zugriff auf die Webseiten zu ermöglichen.

Solch ein NOFRAMES Element sollte mehr beeinhalten als nur ein "Sie brauchen xxxx Version x.xx, um diese Seiten zu sehen". Es bietet sich an, sollten die Frames aus der häufigen Kombinationsbalken + Hauptfenster - Kombination bestehen, einen Link auf das Linkfenster beizufügen, oder es gasp sogar in den NOFRAMES Inhalt einzufügen.

Da framesfähige Browser, die auch zur Darstellung derselben konfiguriert sind, laut HTML Spezifikation den Inhalt jedes NOFRAMES Elements ignorieren sollen, kann man sie sogar in die eigentlichen Seiten mit einfügen, um somit zum Beispiel für Nutzer eines nichtframefähigen Browsers trotzdem eine Navigationsleiste zur Verfügung zu stellen, während Nutzer, die Frames benutzen, die Navigationsleiste zum Beispiel im linken Frame haben. Die Betonung oben liegt aber auf laut HTML Spezifikation. Beim Internet Explorer funktioniert das auch schön. Bei Netscape aber nicht, sowohl in den Versionen 2, 3 und 4. Damit fällt diese, eigentlich sehr gute Möglichkeit, leider weg, sofern man den Nutzern von Netscape nicht zusätzliche Navigationsbalken zeigen will.

Also bleibt als Möglichkeit für die Plazierung des NOFRAMES Element nur das Dokument, in dem die Frames definiert würden. Das könnte dann so aussehen:

<FRAMESET ROWS="100,*,100">
	<FRAME SRC="open.html" NAME="oben" FRAMEBORDER="0">
	<FRAMESET COLS="25%,*">
		<FRAME SRC="links.html" NAME="links"
		    FRAMEBORDER="0" MARGINWIDTH="10" MARGINHEIGHT="10">
		<FRAME SRC="rechts.html" NAME="hauptseite"
		    FRAMEBORDER="0" MARGINWIDTH="20" MARGINHEIGHT="15">
	</FRAMESET>
	<FRAME SRC="unten.html" NAME="unten" FRAMEBORDER="1">
	<NOFRAMES>
	Hier geht es zur <A HREF="links.html">non-frames Version</A>.
	</NOFRAMES>
</FRAMESET>

IFRAME

Das IFRAME Element ist ebenfalls Bestandteil des HTML 4.0 Working Drafts. Erlaubte Attribute sind:

LONGDESC
Ausführlichere Beschreibung des Inline Frames
NAME
Name für Linkverweisung
SRC
URL des Frameinhaltes
FRAMEBORDER
0 oder 1, Darstellung eines Randes.
MARGINWIDTH, MARGINHEIGHT, SCROLLING
Analog zu FRAME
ALIGN
Erlaubte Werte: top, middle, bottom, left, right. Stellt die Anordung des Inline Frames im Dokument dar
HEIGHT
Angabe der Höhe des Inline Frames
WIDTH
Angabe der Breite des Inline Frames

Das IFRAME Element erlaubt es, andere HTML Dokumente in das momentane Dokument einzufügen. Ähnlich dem OBJECT Element, ebenfalls Bestandteil der HTML 4.0 Recommendation, kann dabei der umgebende Text um das Inline Frame herumfließen, etc.

Inhalte zwischen dem öffnenden und dem schließenden IFRAME Tag werden von IFRAME-fähigen Browsern nicht dargestellt, sehr wohl aber von allen anderen Browsern.

Ein Beispiel kann so aussehen:

<IFRAME SRC="was_ist_neu.html" WIDTH="300" HEIGHT="200"
       SCROLLING="AUTO" FRAMEBORDER="0" NAME="neu">
	   Um die letzten Änderungen einzusehen, können Sie
	   <A HREF="was_ist_neu.html">dieses Dokument
	   besichtigen</A>.
</IFRAME>

Das IFRAME Element wird momentan noch nicht von allzuvielen Browsern unterstützt (zum Beispiel nicht von Netscape), diese Situation sollte sich aber ändern, sobald die nächsten Browsergenerationen erscheinen, was natürlich nicht allzuviel heißt, vor allem sollte man sich immer bemühen, alternativen Text anbieten zu können.

Zuweisen von Zielfenstern an Links

Es wurden schon die NAME Attribute für die FRAME und IFRAME Elemente erwähnt. Mit diesen Attributen ist es dem Autoren möglich, Links auf einem anderen Frame erscheinen zu lassen. Dazu fügt im A Element das TARGET Attribut ein. Im Beispiel mit den vier Frames sei links der Navigationsbalken, und rechts das Hauptfenster. Der Name des Hauptfensters war "rechts", um nun also dafür zu sorgen, daß ein Link, der im Navigationsbalken benutzt wird, auf dem rechten Fenster angezeigt wird, genügt folgender Anker:

<A HREF="test.html" TARGET="rechts">Ein Testdokument</A>

Obiger Link steht im linken Navigationsbalken, und die Angabe des TARGET Attributs sorgt dafür, daß das Dokument "test.html" dann im rechten Frame dargestellt wird.

Es gibt für TARGET einige schon definierte Namen. Vom Autor vergebene Namen für Targets müssen mit mit einem Buchstaben beginnen. Schon definierte Namen sind:

_blank
Der Browser öffnet den Link in einem neuen Fenster. (Anm.: Dies wird von Nutzern meist als hochgradig nervig empfunden und wird oftmals als Gelegenheit genutzt, gleich den BACK-Button solange zu benutzen, bis alle Seiten dieses Autors verschwunden sind.)
_self
Der Link wird in dem Fenster geöffnet, in dem sich auch der Link befindet.
_parent
Der Link wird im übergeordneten FRAMESET geladen (in unserem Beispiel würde der Link also in der mittleren Zeile, aber durchgängig über die beiden Spalten, die aufgelöst werden, geladen). Dieser Name ist äquivalent zu _self, falls der Link sich in keinem Frame befindet.
_top
Der Link wird im vollen Browserfenster geöffnet, damit werden alle Frames vernichtet. Dieser Name ist äquivalent zu _self, falls der Link sich in keinem Frame befindet.

3. Probleme mit Frames

Einleitung

Es gibt sehr viele Probleme mit oben beschriebener Konzeption von Frames, da sie aber dank der Dominanz von Netscape (und dem später erstarkenden Internet Explorer, der Frames auch nicht viel anders handhabt) schon eine sehr große Verbreitung gefunden hatten, mußte sich letztendlich das W3C unterordnen. Die folgende Liste zeigt wichtige, aber bei weitem nicht alle Probleme. Es wird jeweils versucht, Tips zu geben, wie man diese Probleme wenigstens teilweise vermeiden kann.

Generelle Probleme

Das Hauptproblem von Frames ist eigentlich, daß sie dem Zweck von HTML als Hypertext Markup Language entgegenwirken, da Frames sich auf Layout, anstatt die Struktur, beziehen. Eigentlich sollte HTML auf jedem HTML Wiedergabegerät, sei es nun ein graphischer Browser, ein Textbrowser, ein Sprachausgabegerät, Brailleschrift, ein Drucker oder was auch immer sein. Frames jedoch sprechen speziell graphische Browser an, und mehr noch, graphischer Browser, die auf relativ hohen Bildschirmauflösungen laufen.

Durch die vollständige Inkompatibilität mit anderen Browsern ist der Autor gezwungen, eine Menge Extrarbeit auf sich zu nehmen, will er allen die Möglichkeit geben, die Seiten betrachten zu können. Viele Autoren machen sich diese Arbeit jedoch nicht.

Das Konzept von Frames ist generell nicht sehr ausgereift, ein Resultat dessen, daß es keine richtigen Diskussionen darüber gab. Es sind aber schon auf den ersten Blick wesentlich praktischere Lösungen für viele Framesanwendungen denkbar. Die oft benutzten Navigationsbalken könnten zum Beispiel durch einfache Deklarationen im HEAD Element oder ähnliches als frei plazierbare Leiste dargestellt werden, oder ähnliches.

Spezielle Probleme werden im folgenen betrachtet.

Bookmarking

Das Problem

Eine Standardanwendung von Frames besteht in der Regel darin, irgendwo einen Navigationsbalken, und an anderer Stelle ein Hauptfenster zu haben. Das Problem bei der Benutzung des Navigationsbalkens ist nun, daß sich der URL des dargestellten Fensters nicht ändert, da sich ja das Hauptdokument mit der Framedefinition nicht ändert. Wenn der Nutzer nun, nach einigen Klicks, die Seite bookmarken will, wird aber nur das definierende Dokument gespeichert. Das heißt, wenn der Nutzer zurückkommt, findet er wieder die Hauptseite vor, und muß sich durch den Rest durchklicken.

Mögliche Lösungen

Die Browserhersteller haben es natürlich versäumt, schlauere Bookmarkfunktionen anzulegen, die sich auch noch die URLs einzelner Frames merken können. Für Autoren bietet sich die Möglichkeit, das Problem wenigstens teilweise zu umgehen, indem jeder Link grundsätzlich ein von Grund auf neues Frameset aufbaut. Das hat auf der anderen Seite wieder den Nachteil, daß eventuelle Größeneinstellungen, die sich der Nutzer durch verschieden von Framerändern etc. selbst gemacht hatte, wieder verlorengehen.

Suchmaschinen

Das Problem

Viele Suchmaschinen, zum Beispiel AltaVista, OpenText, etc., speichern die Inhalte von Seiten, auf die beim Suchen zugegriffen wird. Es hängt von der Suchmaschine ab, ob diese überhaupt Verweise auf Frames folgen, denn das Problem ist, das in der Regel ein einzelnes Fenster nicht die nötigen Links aufweist, um vollwertig auf die Site zuzugreifen. Theoretisch müssen im "Hauptfenster" ja überhaupt keine Links vorhanden sein, da man diese im Navigationsbalken hat. Wenn ein Nutzer nun auf solche eine, vom Framesverband losgelöste Seite, trifft, dann kann er sich zwar die dortige Information durchlesen, hat aber keine weiteren Links mehr zur Verfügung.

Andere Suchmaschinen folgen erst gar nicht, aus oben genannten Gründen, Verweisen zu Frames. Sie müssen sich stattdessen mit dem begnügen, was sie auf der Hauptseite finden. Und das ist oftmals nicht mehr als der Titel im TITLE Element, sowie der Inhalt des NOFRAMES Elements.

Mögliche Lösungen

Der Autor kann auf jeder Seite, die zu einem Frameset gehört, oder darin dargestellt werden kann, einen Fuß anbringen, der einen Link zur Hauptseite beinhaltet. Damit kann ein Nutzer wenigstens nach weitergehenden Information suchen.

Die Hauptseite mit der Framedefinition sollte, natürlich neben dem sinnvollen Titel, auch vernünftige Inhalte im NOFRAMES Element haben. Das ist ein weiterer Grund, warum eine Meldung, man hat einen "falschen" Browser, nicht nur frech, sondern letztendlich auch Blödsinn ist. Man muß sich nur einmal den Spaß machen, in AltaVista nach "You need Netscape" zu suchen, ein oft (aber bei weitem nicht der einzige) benutze Disclaimer im NOFRAMES Element. Eine eben durchgeführte Suche brachte 2627 passende Dokumente. Eine Suche nach "frames-compatible" bringt 6505 Dokumente... Hätten die Autoren stattdessen etwas vernünftiges im NOFRAMES Element plaziert, würde man vielleicht sogar auf ihre Seiten stoßen, wenn man etwas sucht, und ihre Seiten ein Ergebnis dieser Suche darstellen würden.

Auf jeden Fall sollte eine Webseite, wenn sie denn von Suchmaschinen gefunden werden möchte, noch Informationen im META Tag bereithalten. Das gilt zwar nicht nur für FRAME Dokumente, aber für diese ganz besonders. Diese META Tags werden in das HEAD Element einer Seite eingefügt. Eine entsprechende Syntax für AltaVista ist:

<HEAD>
<TITLE> Ein Titel </TITLE>
<META NAME="desciption" CONTENT="Beschreibung der Seite">
<META NAME="keywords" CONTENT="Star Trek, Deep Space Nine,
                                  Episode Guide">
</HEAD>

4. Alternativen und Fazit

Ein Autor, der auf die Universalität und Plattformunabhängigkeit seiner Seiten Wert legt und mit dem Gedanken spielt, Frames zu benutzen, sollte sich gewissenhaft die Frage stellen, ob er diese wirklich braucht. Ein Navigationsbalken kann zum Beispiel durchaus als Kopf- und Fußzeile einer Seite dargestellt werden, die meisten Browser können diese Stellen mit einer simplen Tastenkombination oder Mausklick erreichen. Es sieht natürlich anders aus, wenn der Navigationsbalken oft aktualisiert wird (zum Beispiel mit Daten der letzten Modifikationen der entsprechen Links, etc.), denn eine solche Aktualisierung über hunderte von Seiten durchzuführen, ist bestenfalls zeitaufwendig.

Man sollte auch wirklich nur solche Frames einfügen, die auch sinnvoll sind und keine Platzverschwendung. Ein extra Frame mit einem Firmenlogo zum Beispiel wäre letzteres, es nimmt nur unnötig Platz weg, den man vielleicht, gerade bei kleineren Bildschirmauflösungen, lieber für den Text hätte, auch wenn es beim Autoren mit 1280x1024 Pixeln Auflösung wahnsinnig toll aussah. Vermeiden sollte man ebenfalls die Verwendung von NORESIZE und SCROLLING="NO". Man kennt nie die Erfordernisse der Leute, die die Seiten besuchen. Jemand mit Augenproblemen, und einer daraus resultierenden Standardeinstellung von 20 Punkten für die Schrift, kann durchaus plötzlich feststellen, daß er gar nicht den ganzen Navigationsbalken erreicht, da er weder scrollen noch dessen Größe verändern kann.

Ich möchte auf keinen Fall die Verwendung von Frames verteufeln, meine Star Trek Seiten benutzten bis vor kurzem selbst welche (aus o.g. Grund der Aktualiserung des Navigationsbalkens), man sollte sich dann aber große Mühe geben, damit man durch unachtsame Erstellung der Seiten keine anderen Benutzer vor die Tür stellt.


Referenzen:
HTML Themen
HTML 4.0 Working Draft des W3C
Frames Spezifikation der HTML 4.0 Recommendation