The Web Design Group

FAQ de la création HTML : Les Cadres


Cette liste des questions les plus fréquemment posées est tenue à jour par WDG et a été mise à jour pour la dernière fois le 15 Juillet 2000. (La présente traduction date de Janvier 2001). Elle peut être trouvée aux adresses suivantes :

La traduction en hollandais de ce document est disponible également :

La présente traduction française se trouve sur :

Si vous souhaitez contribuer à cette FAQ, merci d'envoyer un message à <darin@htmlhelp.com>. Toutes les personnes qui ont participé à cette FAQ sont listés à la fin.

N'hésitez pas à contacter le traducteur pour me signaler une imprécision, une erreur de traduction, une faute de français que vous pourrez trouver dans ce document : <cedrik.rousseau@insa-rouen.fr>

Index

9. Les Cadres HTML

  1. Qu'est ce qu'un cadre? Et un plan de découpage?
  2. Comment faire pour qu'un lien dans un cadre mette à jour un autre cadre?
  3. Pourquoi mes liens ouvrent-ils une nouvelle fenêtre plutôt que de s'afficher dans un cadre existant?
  4. Comment mettre à jour deux cadres à la fois?
  5. Comment sortir des cadres?
  6. Comment s'assurer que les documents découpés en cadre sont bien affichés dans leurs cadres?
  7. Comment éviter "de se faire encadrer"?
  8. Comment spécifier une combinaison précise de cadre plutôt que les documents par défaut?
  9. Comment enlever la bordure autour des cadres?
  10. Comment faire un cadre avec une barre de défilement vertical mais sans défilement horizontal?
  11. Comment changer le titre d'un document découpé en cadre?
  12. Pourquoi mes cadres ne font pas exactement la taille que j'ai demandé?
  13. Y'a t'il des problèmes à utiliser des cadres?
  14. Les moteurs de rechecherche aiment-ils les cadres?

Section 9: Les Cadres HTML (Frames)

9.1. Qu'est ce qu'un cadre? Et un plan de découpage?

Les cadres permettent de diviser la fenêtre du navigateur en de multiples zones rectangulaires. Ainsi, plusieurs documents HTML peuvent être affichés dans une unique fenêtre, chacun à l'intérieur de son propre cadre. Les navigateurs graphiques permettent de faire dérouler chacune de ces zones indépendemment et des liens peuvent mettre à jour le contenu d'un des cadres sans affecter les autres.

Pour utiliser des cadres, le document de base qui définit l'organisation des cadres est appelé le plan de découpage ou "frameset". C'est ce document que vous mettrez en lien, c'est lui qui contient le titre de la page et qui pourra contenir un contenu sans frame (dans un marqueur <NOFRAMES>) à destination des navigateurs qui ne les supportent pas.

Le modèle de cadre définit par HTML 4 est affecté par des défauts de conception qui causent des problèmes d'utilisation aux utilisateurs. Les cadres doivent être utilisés avec beaucoup de précautions. Le guide de WDG pour les cadres <http://www.htmlhelp.com/design/frames/> inclus des recommendations sur l'usage approprié des cadres en plus d'une description de la syntaxe HTML.

9.2. Comment faire pour qu'un lien dans un cadre mette à jour un autre cadre?

Dans le document de base (le document contenant les éléments <FRAMESET> et <FRAME>), assurez-vous que le nom des cadres utilisent l'attribut NAME. L'exemple suivant crée un cadre supérieur nommé "navigation" et un cadre inférieur nommé "contenu" :

<FRAMESET ROWS="*,3*">

    <FRAME NAME="navigation" SRC="navigation.html">

    <FRAME NAME="contenu" SRC="contenu.html">

    <NOFRAMES><BODY>

        <!-- C'est ici que vous devez proposer une version sans cadre -->

    </BODY></NOFRAMES>

</FRAMESET>

Puis, dans le lien, il faut utiliser l'attribut TARGET pour spécifier quel cadre doit être utilisé pour afficher le lien. (La valeur de TARGET doit correspondre à la valeur de l'attribut NAME du cadre de destination.) Vous pouvez spécifier un cadre cible pour un lien (par exemple, A TARGET="contenu" HREF=...>) ou pour un formulaire (<FORM TARGET="contenu" ACTION=...>). De même, vous pouvez utiliser <BASE TARGET=...> pour changer la cible par défaut du document tout entier. (normalement, la cible par défaut est "_self", c'est à dire le cadre en cours.)

9.3. Pourquoi mes liens ouvrent-ils une nouvelle fenêtre plutôt que de s'afficher dans un cadre existant?

S'il n'y a aucun cadre du nom que vous avez utilisé comme attribut TARGET, alors une nouvelle fenêtre sera ouverte, et cette fenêtre se vera assignée le nom que vous avez utilisé. Notez que, TARGET="_blank" ouvre systématiquement une nouvelle fenêtre sans nom.

En HTML 4, l'attribut TARGET n'est pas sensible à la casse, ainsi "abc" et "ABC" font référence au même cadre. Cependant, la plupart des navigateurs seront sensibles à la casse, ainsi "abc" ne pourra pas être associé à "ABC".

Notez aussi que certains navigateurs ont une fonction de sécurité qui empêche que des documents soient "piratés" par un document externe utilsant des cadres. Dans ces navigateurs, si un lien pointe sur un cadre défini par un plan de découpage situé sur un serveur différent, alors le document ouvrira une nouvelle fenêtre.

9.4. Comment mettre à jour deux cadres à la fois?

Il y a deux façons de changer plusieurs cadres avec un unique lien : la solution HTML est de faire un lien qui pointe sur un nouveau plan de découpage qui spécifie une nouvelle combinaison de cadre. La solution JavaScript utilise l'attribut onClick du lien pour mettre à jour le cadre supplémentaire.

La technique HTML peut pointer sur un nouveau plan de découpage avec TARGET="_top" (ce qui remplacera la fenêtre en cours), mais il y a une autre solution si les cadres à mettre à jour font partie d'un plan de découpage imbriqué. Dans le plan initial, utilisez un plan secondaire pour définir la partie imbriquée. Par exemple :

<FRAMESET COLS="*,3*">

    <FRAME SRC="contenus.html" NAME="Contenus">

    <FRAME SRC="plan2.html" NAME="Affichage">

</FRAMESET>

Un lien peut maintenant utiliser TARGET="Affichage" pour remplacer simultanément tous les cadres définis par plan2.html.

La solution JavaScript utilise l'attribut onClick du lien pour faire une mise à jour secondaire. Par exemple :

<A HREF="URL1" TARGET=Cadre1

   onClick="top.Cadre2.location='URL2';">Mettre à jour les deux cadres </A>

Le lien va mettre à jour Frame1 avecURL1 normalement. Si l'utilisateur a installé JavaScript, alors Frame2 sera également mise à jour.

9.5. Comment sortir des cadres?

Si vous êtes l'auteur de la page, c'est facile. Vous avez juste à ajouter l'attribut TARGET="_top" au lien qui souhaite se dégager du découpage en cadre.

Dans la plupart des navigateurs, il n'est pas possible d'afficher un cadre dans une pleine page, du moins pas facilement. L'utilisateur doit copier l'adresse du cadre désiré et doit alors se rendre sur cette adresse manuellement.

Il serait bien que les auteurs de page qui souhaitent offrir la possibilité de sortir du plan de découpage ajoutent un lien vers le document lui-même avec l'attribut TARGET="_top".

9.6. Comment s'assurer que les documents découpés en cadre sont bien affichés dans leurs cadres?

Quand l'un des sous-documents d'un découpage est affiché directement, il apparait nu, dépourvu de ses cadres frères. Ainsi, la page perd son intégrité, son sens.

Si JavaScript est activé, le script suivant restaura le découpage :

<SCRIPT TYPE="text/javascript">

<!--

if (parent.location.href == self.location.href) {

    if (window.location.replace)

        window.location.replace('decoupage.html');

    else

        // ceci provoque des problemes avec le bouton retour, mais fonctionne

        window.location.href = 'decoupage.html';

}

//  -->

</SCRIPT>

Une approche plus universelle est un lien "restaurer le découpage" :

<A HREF="decoupage.html" TARGET="_top">Restaurer le découpage en cadres.</A>

Notez que dans tous les cas, vous devez avoir un plan de découpage séparé pour chacun de vos sous-documents. Si vous pointez vers le plan de découpage par défaut, alors l'utilisateur aura le sous-document par défaut, plutôt que la partie qu'il essayait d'obtenir. Ces plans de découpages doivent être générés automatiquement pour éviter les erreurs et le travail fastidieux qu'est de les créer à la main.

Vous pouvez ainsi contourner le problème de mémorisation de l'état du plan de découpage en liant ces plans de découpage individuels et en utilsant TARGET="_top", plutôt que de pointer vers le contenu seul.

9.7. Comment éviter "de se faire encadrer"?

"Se faire encadrer" arrive quand vos documents sont affichés à l'intérieur d'un découpage en cadre de quelqu'un d'autre, sans votre permission. Cela peut arriver accidentellement (quand l'auteur du découpage oublie d'utiliser TARGET="_top" en liant votre document) ou intentionnellement (l'auteur du découpage veut afficher votre contenu avec ses cadres de navigation ou de publicité).

Pour éviter d'encadrer les pages des autres, vous devez utiliser TARGET="_top" pour tous les liens qui mènent aux documents externes à votre système de cadre.

Malheureusement, il n'y a pas de moyen fiable de spécifier qu'un document précis doit être absolument affiché en plein écran, hors d'un découpage. Si vous pouvez configurer votre serveur Web pour envoyer l'entête propriétaire Window-Target: _top 0 dans la réponse HTTP, alors Netscape affichera votre document en plein écran. Cependant, les autres navigateurs ignorent cet entête, et ça ne marche pas d'utiliser <META HTTP-EQUIV="Window-target" CONTENT="_top"> dans le document même pour mimer la réponse HTTP.

Une autre astuce est d'utiliser <BASE TARGET="_top"> (ceci déclare que tous les liens de votre document s'ouvre en plein écran) dans votre document mais cela protégera seulement les autres pages lieés dans ce document et non pas le document lui-même.

Il existe cependant un moyen d'enlever automatiquement le découpage en cadre avec un JavaScript :

<SCRIPT TYPE="text/javascript">

<!--

if (top.frames.length!=0)

    top.location=self.document.location;

// -->

</SCRIPT>

Une autre solution :

<SCRIPT TYPE="text/javascript">

<!--

function breakOut() {

    if (self != top) 

        window.open("mon adresse","_top","");

}

// -->

</SCRIPT>

</HEAD>

<BODY onLoad="breakOut()">

9.8. Comment spécifier une combinaison précise de cadre plutôt que les documents par défaut?

Ceci n'est malheuresement pas possible. Quand vous naviguer à travers un site qui utilise des cadre, l'addresse ne changera pas quand le contenu individuel des cadres change. Cela veut dire qu'il n'y a aucun moyen d'indiquer la combinaison de documents qui produit l'état actuel du découpage.

L'auteur peut fournir de multiples plans de découpage, un pour chaque combinaison de contenu de cadre. Ces plans de découpages peuvent être générés automatiquement, par exemple en étant créés à la volée par un script CGI. Plutôt que de pointer vers les documents individuels, l'auteur peut pointer vers le plan de découpage approprié (une fois tout les plans créés) en utilisant TARGET="_top". Ainsi, l'adresse du découpage courant reflétera toujours la combinaison de cadre adéquate, ce qui permet aux liens, à la mémorisation dans le carnet d'adresse, etc. de fonctionner normalement.

9.9. Comment enlever la bordure autour des cadres?

Pour enlever les bordures, il faut non seulement ne pas dessiner les bordures mais aussi éliminer l'espace entre les cadres. Les deux navigateurs majeurs utilisent des attributs propriétaires pour effectuer ces opérations.

Netscape reconnait l'attribut BORDER sur FRAMESET. Il peut être mis à 0, auquel cas la bordure ne sera pas dessinée et l'espacement sera réduit à zéro.

Microsoft Internet Explorer reconnait quant à lui les attributs FRAMEBORDER et FRAMESPACING sur FRAMESET, et sur FRAME dans certaines versions. Les deux attributs doivent être mis à 0.

Ainsi, la façon la plus largement supportée d'afficher des cadres sans bordure est <FRAMESET ... BORDER=0 FRAMEBORDER=0 FRAMESPACING=0>.

Notez que ces attributs sont propriétaires et ne font pas partie des spécifications de HTML 4. De plus, le fait d'enlever les bordures autour d'un cadre rend impossible son redimensionnement car la majorité des interfaces graphiques (dont Windows) utilise la bordure pour changer la taille d'une fenêtre.

9.10. Comment faire un cadre avec une barre de défilement vertical mais sans défilement horizontal?

La seule façon d'avoir un cadre muni d'une barre de défilement vertical mais pas horizontal est de définir le cadre avec SCROLLING="auto" (vrai par défaut), et de s'assurer que le contenu ne nécessite pas de défilement horizontal. Il n'y a pas moyen de spécifier qu'un cadre doit avoir une barre de défilement mais pas l'autre. Utiliser SCROLLING="yes" forcera l'affichage des deux barres de défilement (même s'il n'y en a pas besoin), et utiliser SCROLLING="no" empêchera l'affichage de toute barre de défilement (même si le défilement est indispensable pour lire tout le document). Il n'y a pas d'autre valeur pour l'attribut SCROLLING.

9.11. Comment changer le titre d'un document découpé en cadre?

Le titre affiché est le titre du plan de découpage et non celui d'un des cadres intérieurs. Pour changer le titre affiché, il vous faut afficher un nouveau plan de découpage en le pointant avec TARGET="_top" de façon à ce qu'il remplace l'ancien plan.

9.12. Pourquoi mes cadres ne font pas exactement la taille que j'ai demandé?

Netscape Navigator semble convertir en pourcentages entiers les dimensions de cadre exprimées en pixels, et utiliser ces pourcentages pour disposer les cadres. Ainsi, les cadres avec des dimensions exprimées en pixels apparaitront avec une taille légérement différente que celle spécifiée dans le plan de découpage. L'erreur d'arrondie dépendra de la taille exacte de la fenêtre du navigateur.

De surcroît, en interne, Netscape semble stocker la conversion des dimensions en pourcentage, plutôt que les tailles en pixels. Donc, quand une fenêtre est redimensionnée, les cadres sont redessinés en se basant sur les anciens pourcentages. Ceci peut aggraver davantage l'erreur d'arrondi.

Il n'y aucune façon d'empêcher ce comportement. Pour s'en accomoder, vous devez construire un site qui s'adapte aux variations de la taille des cadres. Il s'agit d'une situation supplémenantaire où il est bien d'être capable de s'adapter aux variations.

9.13. Y'a t'il des problèmes à utiliser des cadres?

Le problème fondamental avec la conception des cadres, c'est que le plan de découpage (le frameset) crée un état dans le navigateur qui n'est pas adressable. Une fois que n'importe quel cadre à l'intérieur d'un découpage a changé par rapport à son contenu par défaut, il n'y a plus de possiblités de trouver une adresse qui décrive l'état courant du découpage. C'est difficile de mémoriser - et impossible d'indexer ou de faire un lien sur - un tel état du découpage. Il est impossible de référencer l'état du découpage dans d'autres média. Quand les sous-documents du découpage sont affichés directement, ils apparaissent sans la cohérence de l'ensemble des cadres. Les fonctions de base des navigateurs (comme imprimer, revenir en arrière dans l'historique) se comporte différemment avec les cadres. De plus, le navigateur ne peut identifier quel cadre est en avant-plan (a le focus) se qui affecte le défilement, la fonction rechercher et l'utilisation des raccourcis claviers en général.

Enfin, les cadres se concentrent sur la mise en forme plutôt que sur la structuration de l'information, et ne nombreux auteurs de site utilisant des cadres négligent de fournir un contenu alternatif dans l'élément <NOFRAMES>. Ces deux facteurs provoquent des problèmes d'accessibilités pour les navigateurs se comportant différement que prévu et pour les moteurs de recherche.

Pour une discussion plus détaillée, veuillez vous rendre sur <URL:http://www.htmlhelp.com/design/frames/whatswrong.html>

9.14. Les moteurs de rechecherche aiment-ils les cadres?

Les moteurs de recheche peuvent indexer directement des documents faisant parti d'un découpage, mais ils ne peuvent pas indexer la combinaison de cadres pour laquelle ces documents étaient conçus. C'est la cause d'un problème fondamental dans la conception des cadres.

Les moteurs de recherche essaient de fournir à leurs utilisateurs des liens vers des documents utiles. De nombreux documents prévus pour des cadres sont difficiles à utiliser quand on y accède directement (hors du plan de découpage prévu), donc il n'est pas très profitable que les moteurs de recherche les indexent. C'est pourquoi de nombreux moteurs de recherche ignorent les cadres complétement et vont indexer des document plus utiles, c'est à dire sans cadre.

Les moteurs de recherche indexeront le contenu de votre marqueur <NOFRAMES>, et aussi tout ce qui est est accessible depuis. Un tel contenu devrait être utile quand on y accède directement depuis un lien de moteur de recherche.

 


Pour des rajouts ou des oublis dans cette FAQ, merci de contacter <darin@htmlhelp.com> (en anglais) ou <cedrik.rousseau@insa-rouen.fr> (en français)

Toutes les informations ici présentes ont été compilées à l'origine par les membres du Web Design Group, principalement Arnoud "Galactus" Engelfriet, John Pozadzides, et Darin McGrew. La traduction hollandaise de cette FAQ a été réalisée par Rijk van Geijtenbeek, tandis que la traduction française à été faite par Cédrik Rousseau dans le cadre de l'UV traduction de FAQ du département ASI de l'INSA Rouen.

Des compléments ont été apportés par Boris Ammerlaan, Martin Atkins, Lori Atwater, Alex Bell, Stan Brown, Roger Carbol, Alex Chapman, Jan Roland Eriksson, Jon Erlandson, Mark Evans, Peter Evans, Alan Flavell, Rijk van Geijtenbeek, Lucie Gelinas, Bjoern Hoehrmann, Tina Marie Holmboe, Cliff Howard, Thomas Jespersen, Peter Jones, Nick Kew, Jukka Korpela, Simon Lee, Nick Lilavois, Neal McBurnett, Glen McDonald, Dan McGarry, Ken O'Brien, Timothy Prodin, Steve Pugh, Liam Quinn, Colin Reynolds, Kai Schätzl, Doug Sheppard, Sue Sims, Toby Speight, Warren Steel, Ian Storms, Peter Thomson, Daniel Tobias, and Diane Wilson.

Merci tout le monde

 


Home, Reference, FAQs, Tools, Design, Feature Article, BBS, Links

Copyright © 1996-1999. Web Design Group All rights reserved.