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>
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.
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.)
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.
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.
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".
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.
"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()">
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.
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.
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
.
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.
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.
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>
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. All rights reserved.