edition W3C.de

HTML 4.01-Spezifikation

Deutsche Übersetzung

Diese Version:
http://www.edition-w3.de/TR/1999/REC-html401-19991224
Aktuelle Version:
http://www.edition-w3c.de/TR/html4
Übersetzer:
Christine Kühnel (Übersetzung, fachliche Kommentierung) <kuehnel@screenexa.net>
Stefan Mintert (Fachlektorat und fachliche Kommentierung) <www.mintert.com/stefan/mail/>
Stefan Schumacher (Übersetzung, fachliche Kommentierung) <sts@schumacher-netz.de>

Bei diesem Dokument handelt es sich um eine Übersetzung eines W3C-Textes. Dieser Text ist urheberrechtlich geschützt; bitte beachten Sie die nachfolgenden Hinweise des Originaldokuments. Die Rechte an der Übersetzung liegen bei den Übersetzern und dem Verlag Addison-Wesley. Die Übersetzung hat keine durch das W3C legitimierte, normative Wirkung. Das einzige maßgebliche Dokument ist das englische Original.

Bitte senden Sie Fehler und Korrekturen zur deutschen Fassung an die Übersetzer.

Kommentare der Übersetzer, die als solche gekennzeichnet sind, unterliegen dem Urheberrecht der Übersetzer. Sie sind nicht Bestandteil des Ursprungsdokuments.

Diese Veröffentlichung ist eine Vorveröffentlichung. Kein Teil dieses Textes darf kopiert werden. Alle Rechte vorbehalten. Nach Abschluss der Arbeit wird das endgültige Dokument unter der oben angegebenen Adresse veröffentlicht. Die jetzige Veröffentlichung während der laufenden Arbeit dient zur Information von Interessierten und zur Prüfung durch die Fachöffentlichkeit. Sollten Sie Fehler finden oder Verbesserungsvorschläge haben, schicken Sie diese bitte per Mail an die Übersetzer.
Folgende Teile liegen noch in Englisch vor und müssen noch in deutscher Fassung generiert werden: (a) Gesamtinhaltsverzeichnis (b) Index


16 Frames

Inhaltsverzeichnis

16.1 Einführung in Frames

HTML-Frames gestatten Autoren die Darstellung von Dokumenten in mehreren Ansichten, die aus unterschiedlichen Fenstern oder Unterfenstern bestehen können. Mehrere Ansichten bieten dem Designer die Möglichkeit, bestimmte Informationen im Sichtfeld zu belassen, während andere Ansichten gescrollt oder ersetzt werden können. Zum Beispiel kann in einem Fenster ein Frame ein dauerhaft eingeblendetes Banner zeigen, ein zweiter kann ein Navigationsmenü enthalten und ein dritter das Hauptdokument, durch welches gescrollt werden kann, oder das durch die Navigation im zweiten Frame ersetzt werden kann.

Hier ist ein einfaches Frame-Dokument:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN"
   "http://www.w3.org/TR/html4/frameset.dtd">
<HTML>
<HEAD>
<TITLE>Ein einfaches Frameset-Dokument</TITLE>
</HEAD>
<FRAMESET cols="20%, 80%">
  <FRAMESET rows="100, 200">
      <FRAME src="inhalt_von_frame1.html">
      <FRAME src="inhalt_von_frame2.gif">
  </FRAMESET>
  <FRAME src="inhalt_von_frame3.html">
  <NOFRAMES>
      <P>Dieses Frameset enthält:
      <UL>
         <LI><A href="inhalt_von_frame1.html">Prägnanter Inhalt</A>
         <LI><IMG src="inhalt_von_frame2.gif" alt="Ein prägnantes Foto">
         <LI><A href="inhalt_von_frame3.html">Anderer prägnanter Inhalt</A>
      </UL>
  </NOFRAMES>
</FRAMESET>
</HTML>

Es könnte ein Frame-Layout wie dieses erzeugen:

Frame-Layout

Kann das Benutzerprogramm keine Frames anzeigen oder ist es entsprechend konfiguriert, dass es keine Frames anzeigen soll, wird es den Inhalt des Elements NOFRAMES darstellen.

16.2 Frame-Layout

Ein HTML-Dokument, das ein Frame-Layout beschreibt (Frameset-Dokument genannt), hat ein anderes Aussehen als ein HTML-Dokument ohne Frames. Ein normales Dokument hat einen Abschnitt HEAD und einen BODY. Ein Frameset-Dokument hat einen HEAD-Abschnitt und ein FRAMESET statt des BODY.

Der FRAMESET-Abschnitt eines Dokuments gibt das Layout der Ansichten im Hauptfenster des Benutzerprogramms an. Zusätzlich kann der FRAMESET-Abschnitt ein NOFRAMES-Element enthalten, das alternativen Inhalt für Benutzerprogramme anbietet, die Frames nicht unterstützen oder so konfiguriert sind, dass sie keine Frames darstellen.

Elemente, die normalerweise im BODY-Element erscheinen würden, dürfen nicht vor dem ersten FRAMESET-Element stehen, sonst wird das FRAMESET ignoriert.

16.2.1 Das Element FRAMESET

<![ %HTML.Frameset; [
<!ELEMENT FRAMESET - - ((FRAMESET|FRAME)+ & NOFRAMES?) -- window subdivision-->
<!ATTLIST FRAMESET
  %coreattrs;                          -- id, class, style, title --
  rows        %MultiLengths; #IMPLIED  -- list of lengths,
                                          default: 100% (1 row) --
  cols        %MultiLengths; #IMPLIED  -- list of lengths,
                                          default: 100% (1 col) --
  onload      %Script;       #IMPLIED  -- all the frames have been loaded  -- 
  onunload    %Script;       #IMPLIED  -- all the frames have been removed -- 
  >
]]>

Attributdefinitionen

rows = multi-length-list [CN]
Dieses Attribut gibt das Layout der horizontalen Frames an. Es ist eine durch Kommata getrennte Liste von Pixelangaben, prozentualen und relativen Längen (lengths). Der Standardwert ist 100%, gleichbedeutend mit einer Zeile.
cols = multi-length-list [CN]
Dieses Attribut gibt das Layout der vertikalen Frames an. Es ist eine durch Kommata getrennte Liste mit Pixelangaben, prozentualen und relativen Längen. Der Standardwert ist 100%, gleichbedeutend mit einer Spalte.

An anderer Stelle definierte Attribute

Das Element FRAMESET legt das Layout des Hauptfensters mit rechteckigen Unterfenstern fest.

Zeilen und Spalten 

Die Angabe des Attributs rows definiert die Anzahl der horizontalen Unterfenster in einem Frameset. Die Angabe des Attributs cols definiert die Anzahl der vertikalen Unterfenster. Zur Erzeugung eines Gitters können beide Attribute gleichzeitig angegeben werden.

Ist das Attribut rows nicht angegeben, erstreckt sich jede Spalte über die volle Länge der Seite. Ist das Attribut cols nicht angegeben, erstreckt sich jede Zeile über die gesamte Seitenbreite. Ist keines der Attribute angegeben, nimmt der Frame genau die Fläche der Seite ein.

Frames werden werden von links nach rechts für Spalten und von oben nach unten für Zeilen erzeugt. Sind beide Attribute angegeben, werden die Ansichten von links nach rechts in der ersten Reihe, von links nach rechts in der zweiten Reihe und so weiter erzeugt.

Das erste Beispiel teilt den Bildschirm vertikal in zwei Hälften (d.h., es wird eine obere und eine untere Hälfte erzeugt).

<FRAMESET rows="50%, 50%">
...der Rest der Definition...
</FRAMESET>

Anmerkung der Übersetzer:

Frame-Darstellung

Das nächste Beispiel erzeugt drei Spalten: die zweite hat eine festgelegte Breite von 250 Pixeln (nützlich um z.B. ein Bild mit bekannter Größe zu beherbergen). Die erste Spalte erhält 25% des übrig gebliebenen Platzes und die dritte erhält 75% davon:

<FRAMESET cols="1*,250,3*">
...der Rest der Definition...
</FRAMESET>

Anmerkung der Übersetzer:

Frame-Darstellung

Das nächste Beispiel erzeugt ein 2x3-Gitter mit Unterräumen:

<FRAMESET rows="30%,70%" cols="33%,34%,33%">
...der Rest der Definition...
</FRAMESET>

Anmerkung der Übersetzer:

Frame-Darstellung

Nehmen Sie für das folgende Beispiel an, ein Browser-Fenster sei aktuell 1000 Pixel hoch. Der ersten Ansicht werden 30% der gesamten Höhe zugeteilt (300 Pixel). Der zweiten Ansicht sind genau 400 Pixel Höhe zugewiesen. Das lässt 300 Pixel übrig, die unter den beiden verbliebenen Frames aufgeteilt werden müssen. Die Höhe des vierten Frames ist mit »2*« angegeben. Damit ist er zweimal so hoch wie der dritte Frame, dessen Höhe nur »*« (äquivalent zu »1*«) ist. Deshalb wird der dritte Frame 100 Pixel hoch sein und der vierte 200 Pixel.

<FRAMESET rows="30%,400,*,2*">
...der Rest der Definition...
</FRAMESET>

Absolute Längen, die in der Summe nicht 100% des tatsächlich zur Verfügung stehenden Raums ergeben, sollten vom Benutzerprogramm angeglichen werden. Sofern zu wenig angegeben ist, sollte der verbleibende Platz jeder Ansicht proportional hinzugefügt werden. Ist zuviel angegeben, sollte jede Ansicht in dem Verhältnis verkleinert werden, das ihrem angegebenen Anteil am gesamten Platz entspricht.

Verschachtelte Framesets 

Framesets können beliebig tief verschachtelt werden.

Im folgenden Beispiel teilt der äußere FRAMESET den verfügbaren Raum in drei gleiche Spalten auf. Der innere FRAMESET teilt dann den zweiten Bereich in zwei Zeilen unterschiedlicher Höhe ein.

<FRAMESET cols="33%, 33%, 34%">
     ...Inhalt des ersten Frames...
     <FRAMESET rows="40%, 50%">
        ...Inhalt des zweiten Frames, erste Zeile...
        ...Inhalt des zweiten Frames, zweite Zeile...
     </FRAMESET>
     ...Inhalt des dritten Frames...
</FRAMESET>

Anmerkung der Übersetzer:

Frame-Darstellung

Daten teilen mit anderen Frames 

Autoren können Daten für mehrere Frames verwenden, wenn sie diese Daten über ein OBJECT-Element einfügen. Autoren sollten das Element OBJECT im HEAD-Element des Frameset-Dokuments angeben und es mit dem Attribut id benennen. Jedes Dokument, das Inhalt eines Frames im Frameset ist, kann sich auf diesen Bezeichner beziehen.

Das folgende Beispiel zeigt, wie sich ein Skript auf ein OBJECT-Element beziehen kann, das für einen ganzen Frameset definiert ist:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN"
   "http://www.w3.org/TR/html4/frameset.dtd">
<HTML>
<HEAD>
<TITLE>Dies ist ein Frameset mit OBJECT im HEAD</TITLE>
<!-- Dieses OBJECT wird nicht dargestellt! -->
<OBJECT id="myobject" data="data.bar"></OBJECT>
</HEAD>
<FRAMESET>
    <FRAME src="bianca.html" name="bianca">
</FRAMESET>
</HTML>

<!-- In bianca.html -->
<HTML>
<HEAD>
<TITLE>Bianca's Seite</TITLE>
</HEAD>
<BODY>
...der Anfang des Dokuments...
<P>
<SCRIPT type="text/javascript">
parent.myobject.myproperty
</SCRIPT>
...der Rest des Dokuments...
</BODY>
</HTML>

Anmerkung der Übersetzer:

Mehr dazu, wie man in Skripten – hier konkret in JavaScript – Objekte, Funktionen u.ä. frame-übergreifend erreicht und benutzt, finden Sie in der FAQ auf der Homepage der deutschsprachigen Javascript-Newsgroup unter http://dcljs.de/faq/ in der Fragenliste unter »mehr Fenster und Frames - Kommunikation zwischen...«

16.2.2 Das Element FRAME

<![ %HTML.Frameset; [
<!-- reserved frame names start with "_" otherwise starts with letter -->
<!ELEMENT FRAME - O EMPTY              -- subwindow -->
<!ATTLIST FRAME
  %coreattrs;                          -- id, class, style, title --
  longdesc    %URI;          #IMPLIED  -- link to long description
                                          (complements title) --
  name        CDATA          #IMPLIED  -- name of frame for targetting --
  src         %URI;          #IMPLIED  -- source of frame content --
  frameborder (1|0)          1         -- request frame borders? --
  marginwidth %Pixels;       #IMPLIED  -- margin widths in pixels --
  marginheight %Pixels;      #IMPLIED  -- margin height in pixels --
  noresize    (noresize)     #IMPLIED  -- allow users to resize frames? --
  scrolling   (yes|no|auto)  auto      -- scrollbar or none --
  >
]]>

Attributdefinitionen

name = cdata [CI]
Dieses Attribut weist dem aktuellen Frame einen Namen (name) zu. Dieser Name kann als Ziel späterer Links dienen.
longdesc = uri [CT]
Dieses Attribut spezifiziert einen Link auf eine lange Beschreibung des Frames. Diese Beschreibung sollte die durch das title-Attribut angebotene kurze Beschreibung ergänzen, und kann besonders für nichtvisuelle Benutzerprogramme nützlich sein.
src = uri [CT]
Dieses Attribut beschreibt den Ort des Ausgangsinhalts (initial contents), der im Frame enthalten sein soll.
noresize [CI]
Sofern angegeben, teilt dieses Boolesche Attribut dem Benutzerprogramm mit, dass dieser Frame nicht größenveränderbar ist.
scrolling = auto|yes|no [CI]
Dieses Attribut gibt Scroll-Informationen für diesen Frame an. Mögliche Werte sind:
  • auto: Dieser Wert teilt dem Benutzerprogramm mit, dass es dem Frame-Fenster, wenn erforderlich, Scroll-Balken geben soll. Dies ist der Standardwert.
  • yes:Dieser Wert teilt dem Benutzerprogramm mit, dass es dem Frame-Fenster immer Scroll-Balken geben soll.
  • no:Dieser Wert teilt dem Benutzerprogramm mit, dass es dem Frame-Fenster keine Scroll-Balken geben soll.
frameborder = 1|0 [CN]
Dieses Attribut versorgt das Benutzerprogramm mit Informationen über Frame-Rahmen. Mögliche Werte sind:
  • 1: Dieser Wert teilt dem Benutzerprogramm mit, dass es eine Trennlinie zwischen diesen und jeden angrenzenden Frame zeichnen soll. Dies ist der Standardwert.
  • 0: Dieser Wert teilt dem Benutzerprogramm mit, dass es zwischen diesen und jeden angrenzenden Frame keine Trennlinie zeichnen soll. Beachten Sie, dass trotzdem Trennlinien an den Rändern dieses Frames dargestellt werden können, sofern sie von anderen Frames vorgegeben sind.
marginwidth = pixels [CN]
Dieses Attribut gibt den Abstand an, der zwischen dem Inhalt des Frames und dessen linken und rechten Rand verbleiben soll. Der Wert muss größer als Null (Pixel) sein. Der Standardwert ist vom Benutzerprogramm abhängig.
marginheight = pixels [CN]
Dieses Attribut gibt den Abstand an, der zwischen dem Inhalt des Frames und dessen oberen und unteren Rand verbleiben soll. Der Wert muss größer als Null (Pixel) sein. Der Standardwert ist vom Benutzerprogramm abhängig.

An anderer Stelle definierte Attribute

Das Element FRAME definiert den Inhalt und die Darstellung eines einzelnen Frames.

Einem Frame den Ausgangsinhalt zuweisen 

Das Attribut src gibt das Anfangsdokument an, das der Frame enthalten wird.

Das folgende HTML-Beispieldokument:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN"
   "http://www.w3.org/TR/html4/frameset.dtd">
<HTML>
<HEAD>
<TITLE>Ein Frameset-Dokument</TITLE>
</HEAD>
<FRAMESET cols="33%,33%,33%">
  <FRAMESET rows="*,200">
      <FRAME src="inhalt_von_frame1.html">
      <FRAME src="inhalt_von_frame2.gif">
  </FRAMESET>
  <FRAME src="inhalt_von_frame3.html">
  <FRAME src="inhalt_von_frame4.html">
</FRAMESET>
</HTML>

sollte ein Frame-Layout wie dieses erzeugen:

Frame-Layout mit vier Frames

und das Benutzerprogramm veranlassen, jede Datei in eine eigene Ansicht zu laden.

Der Inhalt eines Frames darf nicht im gleichen Dokument sein wie die Definition des Frames.

UNGÜLTIGES BEISPIEL:
Die folgende Definition eines Framesets ist kein gültiges HTML, weil der Inhalt des zweiten Frames im gleichen Dokument ist wie das Frameset.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN"
   "http://www.w3.org/TR/html4/frameset.dtd">
<HTML>
<HEAD>
<TITLE>Ein Frameset-Dokument</TITLE>
</HEAD>
<FRAMESET cols="50%,50%">
  <FRAME src="inhalt_von_frame1.html">
  <FRAME src="#anker_im_gleichen_dokument">
  <NOFRAMES>
  ...etwas Text...
  <H2><A name="anker_im_gleichen_dokument">Wichtiger Abschnitt</A></H2>
  ...etwas Text...
  </NOFRAMES>
</FRAMESET>
</HTML>

Visuelle Darstellung eines Frames 

Das folgende Beispiel veranschaulicht die Verwendung von dekorativen FRAME-Attributen. Wir geben an, dass Frame 1 keine Scroll-Balken erlauben wird. Frame 2 wird Abstand um seinen Inhalt herum lassen (anfangs eine Bild-Datei), die Frame-Größe wird nicht veränderbar sein. Es wird kein Rahmen zwischen den Frames 3 und 4 gezeichnet werden. Rahmen werden (durch Standardwerte) zwischen den Frames 1, 2 und 3 gezeichnet werden.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN"
   "http://www.w3.org/TR/html4/frameset.dtd">
<HTML>
<HEAD>
<TITLE>Ein Frameset-Dokument</TITLE>
</HEAD>
<FRAMESET cols="33%,33%,33%">
  <FRAMESET rows="*,200">
      <FRAME src="inhalt_von_frame1.html" scrolling="no">
      <FRAME src="inhalt_von_frame2.gif" 
                marginwidth="10" marginheight="15"
                noresize>
  </FRAMESET>
  <FRAME src="inhalt_von_frame3.html" frameborder="0">
  <FRAME src="inhalt_von_frame4.html" frameborder="0">
</FRAMESET>
</HTML>

Anmerkung der Übersetzer:

Frame-Layout

Da für Frame 2 festgelegt ist, dass der Frame nicht in der Größe verändert werden darf, gilt das in diesem Fall auch für Frame 1: Frame 1 hat zwei Grenzen, eine nach unten zu Frame 2 und eine nach rechts zu Frame 3. Die Grenze zwischen Frame 1 und 2 darf nicht verändert werden (explizites »noresize« für diese Grenze von Frame 2). Die Grenze zwischen 1 und 3 ist aber die Verlängerung der Grenze zwischen 2 und 3. Die unterliegt ebenfalls dem Verbot.

Die nebenstehende Abbildung zeigt nur das Layout, nicht die Einstellungen für Rahmen und Ränder.

16.3 Informationen für Ziel-Frames angeben

Anmerkung: Informationen über die aktuelle Vorgehensweise, das Ziel eines Frames zu bestimmen, finden Sie in Anhang B unter »Anmerkungen zu Frames«.

Attributdefinitionen

target = frame-target [CI]
Das Attribut gibt den Namen eines Frames an, in dem ein Dokument geöffnet werden soll.

Wird mit Hilfe des Attributs name ein Name für einen Frame angegeben, können Autoren diesen Frame als Ziel (»target«) für Links verwenden, die von anderen Elementen definiert werden. Das target-Attribut kann in Elementen angegeben werden, die Links erzeugen (A, LINK), in Imagemaps (AREA) und Formularen (FORM).

Informationen über reservierte Frame-Namen finden Sie in Abschnitt 6.16, »Namen von Ziel-Frames«.

Dieses Beispiel verdeutlicht, wie Ziele die dynamische Veränderung des Frame-Inhalts gestatten. Zuerst definieren wir ein Frameset im Dokument frameset.html, wie hier gezeigt:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN"
   "http://www.w3.org/TR/html4/frameset.dtd">
<HTML>
<HEAD>
<TITLE>Ein Frameset-Dokument</TITLE>
</HEAD>
<FRAMESET cols="50%,50%">
   <FRAME name="fixed" src="init_fixed.html">
   <FRAME name="dynamic" src="init_dynamic.html">
</FRAMESET>
</HTML>

Dann verweisen wir in init_dynamic.html auf den Frame »dynamic«:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">
<HTML>
<HEAD>
<TITLE>Ein Dokument mit Ankern auf bestimmte Ziele</TITLE>
</HEAD>
<BODY>
...Anfang des Dokuments...
<P>Nun kannst Du weitergehen zu 
    <A href="dia2.html" target="dynamic">Dia 2.</A>
...mehr Dokumentinhalt...
<P>Das machst Du hervorragend. Nun weiter zu
    <A href="dia3.html" target="dynamic">Dia 3.</A>
</BODY>
</HTML>

Die Aktivierung beider Links öffnet ein neues Dokument im Frame »dynamic«, während der andere Frame, »fixed«, seinen Ausgangsinhalt beibehält.

Anmerkung der Übersetzer:

Zielframe

Anmerkung: Die Definition eines Framesets verändert sich nie, aber der Inhalt eines seiner Frames kann es. Verändert sich der Ausgangsinhalt eines Frames einmal, spiegelt die Definition des Framesets nicht länger den aktuellen Status seiner Frames wieder.

Es gibt zur Zeit keine Möglichkeit, den gesamten Zustand eines Framesets in einem URI zu verschlüsseln. Deshalb erlauben viele Benutzerprogramme es nicht, ein Lesezeichen für ein Frameset zu setzen.

Framesets können die Navigation vorwärts und rückwärts durch den Seitenverlauf (history) eines Benutzerprogramms für den Benutzer erschweren.

16.3.1 Das Standardziel (default target) für Links festlegen

Geben viele Links im selben Dokument dasselbe Ziel an, ist es möglich, das Ziel einmal anzugeben und auf das target-Attribut in jedem einzelnen Element zu verzichten. Dies geschieht durch Angabe des target-Attributs im Element BASE.

Kehren wir zum vorherigen Beispiel zurück: Diesmal geben wir die Zielinformationen durch die Definition im Element BASE an und entfernen sie aus den A-Elementen.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">
<HTML>
<HEAD>
<TITLE>Ein Dokument mit BASE mit einem bestimmten Ziel</TITLE>
<BASE href="http://www.mycom.com/Slides" target="dynamic">
</HEAD>
<BODY>
...Anfang des Dokuments...
<P>Nun kannst Du weitergehen zu  <A href="dia2.html">Dia 2.</A>
...mehr Dokumentinhalt...
<P>Das machst Du hervorragend. Nun weiter zu
       <A href="dia3.html">Dia 3.</A>
</BODY>
</HTML>

16.3.2 Vorgehensweise zur Zielbestimmung

Benutzerprogramme sollten den Ziel-Frame, in den die referenzierte Quelle geladen werden soll, der folgenden Vorgehensweisen entsprechend bestimmen (von höchster Priorität zu niedrigster):

  1. Ist das target-Attribut eines Elements auf einen bekannten Frame gesetzt, wenn das Element aktiviert wird (d.h., ein Link wird aktiviert oder ein Formular verarbeitet), sollte die vom Element bezeichnete Quelle in den Ziel-Frame geladen werden.
  2. Ist das target-Attribut für ein Element nicht gesetzt, jedoch für das Element BASE, dann bestimmt das target-Attribut des Elements BASE den Frame.
  3. Weist weder das Element noch das BASE-Element auf ein Ziel, dann sollte die vom Element bezeichnete Quelle in den Frame geladen werden, welcher das Element enthält.
  4. Verweist irgendein target-Attribut auf einen unbekannten Frame F, dann sollte das Benutzerprogramm ein neues Fenster und einen neuen Frame erzeugen, dem Frame den Namen F zuweisen und die vom Element bezeichnete Quelle in den neuen Frame laden.

Benutzerprogramme können dem Benutzer einen Mechanismus zur Verfügung stellen, um das target-Attribut zu überschreiben.

16.4 Alternativer Inhalt

Autoren sollten alternativen Inhalt für Benutzerprogramme vorhalten, die Frames nicht unterstützen oder so konfiguriert sind, dass sie Frames nicht anzeigen.

16.4.1 Das Element NOFRAMES

<![ %HTML.Frameset; [
<!ENTITY % noframes.content "(BODY) -(NOFRAMES)">
]]>

<!ENTITY % noframes.content "(%flow;)*">

<!ELEMENT NOFRAMES - - %noframes.content;
 -- alternate content container for non frame-based rendering -->
<!ATTLIST NOFRAMES
  %attrs;                              -- %coreattrs, %i18n, %events --
  >

Das Element NOFRAMES gibt Inhalt an, der nur von Benutzerprogrammen angezeigt werden sollte, die keine Frames unterstützen oder so konfiguriert sind, dass sie Frames nicht anzeigen. Benutzerprogramme, die Frames unterstützen, müssen den Inhalt einer NOFRAMES-Deklaration nur dann anzeigen, wenn sie so konfiguriert sind, dass sie Frames nicht anzeigen. Benutzerprogramme, die Frames nicht unterstützen, müssen den Inhalt von NOFRAMES in jedem Fall anzeigen.

Das Element NOFRAMES ist sowohl Teil der Transitional DTD als auch der Frameset DTD. In einem Dokument, das die Frameset DTD verwendet, kann NOFRAMES am Ende des FRAMESET-Abschnitts des Dokuments verwendet werden.

Zum Beispiel:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN"
     "http://www.w3.org/TR/html4/frameset.dtd">
  <HTML>
  <HEAD>
  <TITLE>Ein Frameset-Dokument mit NOFRAMES</TITLE>
  </HEAD>
  <FRAMESET cols="50%, 50%">
     <FRAME src="main.html">
     <FRAME src="inhaltsverzeichnis.html">
     <NOFRAMES>
     <P>Hier ist die <A href="main-noframes.html">
              Version des Dokuments ohne Frames.</A> 
     </NOFRAMES>
  </FRAMESET>
  </HTML>

NOFRAMES könnte zum Beispiel in einem Dokument verwendet werden, das die Quelle eines Frames ist und die Transitional DTD verwendet. Dies erlaubt es Autoren, den Zweck eines Dokuments zu erklären, falls es außerhalb eines Framesets betrachtet wird oder mit einem Benutzerprogramm, das keine Frames unterstützt.

16.4.2 Lange Beschreibung von Frames

Das Attribut longdesc gestattet es Autoren, Frame-Dokumente für Menschen zugänglicher zu machen, die keine visuellen Benutzerprogramme verwenden. Dieses Attribut bezeichnet eine Quelle, die eine lange Beschreibung für einen Frame liefert. Autoren sollten beachten, dass der Inhalt der langen Frame-Beschreibung an den Frame gebunden ist, nicht an den Inhalt des Frames. Weil der Inhalt mit der Zeit variieren kann, ist es möglich, dass die anfängliche lange Beschreibung für den späteren Inhalt keine Gültigkeit mehr besitzt. Insbesondere sollten Autoren eine Bilddatei nicht als einzigen Inhalt eines Frames verwenden.

Das folgende Frameset-Dokument beschreibt zwei Frames. Der linke Frame enthält ein Inhaltsverzeichnis und der rechte anfänglich das Bild eines Straußes:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN"
   "http://www.w3.org/TR/html4/frameset.dtd">
<HTML>
<HEAD>
<TITLE>Ein ärmlich gestaltetes Frameset-Dokument</TITLE>
</HEAD>
<FRAMESET cols="20%, 80%">
   <FRAME src="inhaltsverzeichnis.html">
   <FRAME src="strauss.gif" longdesc="strauss-desc.html">
</FRAMESET>
</HTML>

Beachten Sie, dass dieses Bild unabhängig von irgendeinem HTML-Element in den Frame eingefügt wurde, so dass der Autor keine Möglichkeit hat, alternativen Text anzugeben als über das longdesc-Attribut. Verändert sich der Inhalt des rechten Frames (z.B. wenn der Benutzer eine Klapperschlange aus dem Inhaltsverzeichnis wählt), werden die Benutzer keinen textbasierten Zugang zum neuen Inhalt des Frames haben.

Deshalb sollten Autoren eine Bilddatei nicht direkt in einen Frame einfügen. Statt dessen sollte das Bild in einem separaten HTML-Dokument angegeben und dort mit entsprechendem alternativen Text kommentiert werden:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN"
   "http://www.w3.org/TR/html4/frameset.dtd">
<HTML>
<HEAD>
<TITLE>Ein wohlgestaltetes Frameset-Dokument</TITLE>
</HEAD>
<FRAMESET cols="20%, 80%">
   <FRAME src="inhaltsverzeichnis.html">
   <FRAME src="strauss-container.html">
</FRAMESET>
</HTML>
<!-- In strauss-container.html: -->
<HTML>
<HEAD>
<TITLE>Der schnelle und kraftvolle Strauß</TITLE>
</HEAD>
<P>
<OBJECT data="ostrich.gif" type="image/gif">
Diese Strauße schmecken sicherlich gut!
</OBJECT>
</HTML>

16.5 Eingebettete Frames: das Element IFRAME

<!ELEMENT IFRAME - - (%flow;)*         -- inline subwindow -->
<!ATTLIST IFRAME
  %coreattrs;                          -- id, class, style, title --
  longdesc    %URI;          #IMPLIED  -- link to long description
                                          (complements title) --
  name        CDATA          #IMPLIED  -- name of frame for targetting --
  src         %URI;          #IMPLIED  -- source of frame content --
  frameborder (1|0)          1         -- request frame borders? --
  marginwidth %Pixels;       #IMPLIED  -- margin widths in pixels --
  marginheight %Pixels;      #IMPLIED  -- margin height in pixels --
  scrolling   (yes|no|auto)  auto      -- scrollbar or none --
  align       %IAlign;       #IMPLIED  -- vertical or horizontal alignment --
  height      %Length;       #IMPLIED  -- frame height --
  width       %Length;       #IMPLIED  -- frame width --
  >

Attributdefinitionen

longdesc = uri [CT]
Dieses Attribut spezifiziert einen Link auf eine lange Beschreibung des Frames. Diese Beschreibung sollte die durch das title-Attribut angebotene kurze Beschreibung ergänzen, und kann besonders für nichtvisuelle Benutzerprogramme nützlich sein.
name = cdata [CI]
Dieses Attribut gibt dem aktuellen Frame einen Namen. Dieser Name kann als Ziel späterer Links dienen.
width = length [CN]
Die Breite des eingebetteten Frames.
height = length [CN]
Die Höhe des eingebetteten Frames.

An anderer Stelle definierte Attribute

Das Element IFRAME gestattet dem Autor, einen Frame innerhalb eines Textblocks einzufügen. Das Einfügen eines eingebetteten Frames innerhalb eines Textblocks gleicht weitgehend dem Einfügen eines Objekts über das Element OBJECT: Sie erlauben beide, ein HTML-Dokument inmitten eines anderen einzufügen, sie können beide mit umgebendem Text ausgerichtet werden usw.

Die Information, die eingebettet werden soll, wird durch das Attribut src dieses Elements angegeben. Der Inhalt des IFRAME-Elements auf der anderen Seite, sollte nur von Benutzerprogrammen angezeigt werden, die keine Frames unterstützen oder die so konfiguriert sind, dass sie Frames nicht anzeigen.

In Benutzerprogrammen, die Frames unterstützen, wird das folgende Beispiel einen eingebetteten Frame, umgeben von einem Rahmen, inmitten des Texts einfügen:

  <IFRAME src="foo.html" width="400" height="500"
             scrolling="auto" frameborder="1">
  [Ihr Benutzerprogramm unterstützt keine Frames oder ist derzeit nicht 
  konfiguriert, Frames anzuzeigen. Besuchen Sie jedoch
  <A href="foo.html">das anzuzeigende Dokument</A>.]
  </IFRAME>

Die Größe eingebetteter Frames kann nicht verändert werden (und deshalb akzeptieren sie das noresize-Attribut nicht).

Anmerkung: HTML-Dokumente können ebenso mit dem Element OBJECT in andere HTML-Dokumente eingebettet werden. Einzelheiten dazu finden Sie in Abschnitt 13.5, »Anmerkungen zu eingebetteten Dokumenten«.