Frames en HTML 4.0

Les Frames ne sont rien d'autre que des fenêtres dans des fenêtres. Dans une fenêtre de frames, le tag double <frameset> et </frameset> remplace le tag habituel <body> et </body>. C'est <frameset> qui définit le nombre de frames de la fenêtre et si le découpage est horizontal ou vertical. L'intérieur du tag <frameset> doit ensuite contenir autant de tags simples <frame> que nécessaire. Un petit exemple valant mieux qu'un long discours ...

Frames horizontaux

Trois frames horizontaux : de largeur respectives 20% pour le premier, 40% pour le dernier et "ce qui reste" pour celui du milieu.

<frameset cols="20%,*,40%">

<frame>
<frame>
<frame>

</frameset>

Frames verticaux

Trois frames verticaux : de hauteur respectives 100 points pour le premier, 150 points pour le dernier et "ce qui reste" pour celui du milieu.

<frameset rows="100,*,150">

<frame>
<frame>
<frame>

</frameset>

Combinaison de frames horizontaux et verticaux

<frameset> ne peut contenir que l'un des mots clefs "cols" ou "rows" et en aucun cas les deux. Pour obtenir un découpage vertical ET horizontal, il faut découper dans un sens puis redécouper l'un des frames obtenus dans l'autre sens.
Notons dans cet exemple l'utilisation de deux nouveaux attributs de <frame> <frameset cols="20%,80%">

<frame noresize scrolling="no">
<frameset rows="30%,70%">
<frame scrolling="yes">
<frame>
</frameset>
</frameset>

Du texte dans les frames

Découper les fenêtres dans tous les sens est bien beau encore faut-il y mettre quelque chose. Utilisons les pages des leçons précédentes pour remplir nos frames. Notons dans cet exemple l'utilisation de deux nouveaux attributs de <frame> <frameset cols="20%,80%">

<frame noresize scrolling="no">
<frameset rows="30%,70%">
<frame scrolling="yes" src="hyperliens.htm" marginheight=70>
<frame src="tableaux.htm" marginwidth=50>
</frameset>
</frameset>

Nommage et hyperliens entre frames

L'une des utilisations les plus courantes des frames consiste en l'obtention de sommaires. Pour se faire, il est indispensable de nommer les frames afin d'être capable d'indiquer à un lien dans quelle frame il doit afficher sa page. On utilise alors le mot clef "name" dans le tag <frame> et le mot clef "target" dans le tag d'hyperlien.
Le tag double <noframe> et </noframe> permet de penser aux gens (de moins en moins nombreux) disposant de navigateurs incapables d'afficher les frames. Ce tag peut avantageusement être remplacé par le simple tag <body>

<frameset cols="20%,80%">

<frame noresize scrolling="no" src="som_frame.html">

<frameset rows="30%,70%">
<frame scrolling="yes" src="hyperliens.html" marginheight=70 name=haut_droite>
<frame src="tableaux.html" marginwidth=50 name=bas_droite>
</frameset>
</frameset>
<noframe>
Cette page comporte des frames mais votre navigateur ne peut les afficher ... désolé
</noframe>

Notre fichier de sommaire comporte alors des liens avec indication de cible ("target").

<a href="hyperliens.html" target="haut_droite">hyperliens en haut</a>
<a href="hyperliens.html" target="bas_droite">hyperliens en bas</a>
<a href="tableaux.html" target="haut_droite">tableaux en haut</a>
<a href="tableaux.html" target="bas_droite">tableaux en bas</a>
<a href="tableaux.html" target="_top">tableaux en pleine page</a>

Bordures invisibles

Enfin, l'attribut "border=..." dans le tag </frameset> permet d'obtenir des bordures invisibles (ou trés grosses).

<frameset rows="30%,70%" border=0>