Voir aussi
Dans la même rubrique :
Comment intégrer Snap Shots à Rapidweaver ?
Javascript : n’oubliez pas Mac OS !
Quand JavaScript est désactivé... 2/2
Conseils pour débuter un site web
Menu dépliant pour les rubriques
Quand JavaScript est désactivé... 1/2
Contrôler l’accès d’une partie du site avec .htaccess
Proposer plusieurs styles pour votre site
Réaliser un formulaire de contact (5/4)
Réaliser un formulaire de contact (4/4)
Réaliser un formulaire de contact (3/4)
Réaliser un formulaire de contact (2/4)
Réaliser un formulaire de contact (1/4)
Belles icônes pas chères !
Comment faire migrer son site ?
La trousse du webmasterDu même auteur :
Suivi de vos articles
Exécuter un Javascript dans une page SPIP
Reprendre un document Word
Les Centres de santé
Quiz en PHP 1/3
Quiz en PHP 2/3
Quiz en PHP 3/3
Comité Départemental d’Education pour la Santé des Yvelines
Les sites des Médecins Maîtres-Toile
Joindre un document à un article
Placer une image dans un article
Les raccourcis typographiques
Ecrire ou modifier un article
Présentation de l’espace rédacteurs
Conseils aux rédacteurs
Lire nos fichiers de syndication
Page contact en PHP 3/3
Syndication, comment s’y retrouver
Afficher plusieurs flux RSS/Atom sur une page
Lecture des caractères spéciaux et d’éléments d’un fil RSS/Atom
Accueil du nouveau rédacteur
Installer un script PHP pour les nuls
Page contact en PHP 1/3
Page contact en PHP 2/3
Positionnement fixe... même avec Internet Explorer !
Des fils RSS 1.0, RSS 2.0 et Atom 1.0 pour votre site SPIP
Editez vos flux avec Fil_LE 1/2
Editez vos flux avec Fil_LE 2/2
Editer plusieurs fichiers de syndication 1/3
Editer plusieurs fichiers de syndication 2/3
Editer plusieurs fichiers de syndication 3/3
Documentation sur SPIP
Abandonnons RSS 0.91 !
La syndication de contenu RSS
Ecrire ce qu’on veut dans SPIP
Utiliser les smileys
Joindre un logo à un article
Référencer un site
Création à distance d’un fichier de syndication
Lecteur RSS/Atom pour votre site 1/2
Lecteur RSS/Atom pour votre site 2/2
Afficher un fil RSS/Atom sur votre site 1/3
Afficher un fil RSS/Atom sur votre site 2/3
Afficher un fil RSS/Atom sur votre site 3/3
Un Editeur RSS pour votre site 1/2
Un Editeur RSS pour votre site 2/2
Un lecteur RSS pour votre site 1/2
Un lecteur RSS pour votre site 2/2
Menu de navigation sans JavaScript
Astuce pour les images fréquemment utilisées
Gestion d’une rubrique... en attendant SPIP
Page Erreur 404 en PHP
Utilisation de la classe easyRSSMême indexation :
Technique Web
Utilisation de la classe easyRSS
Initiation au xhtml - 2
Un lecteur RSS pour votre site 2/2
Proposer plusieurs styles pour votre site
Comment intégrer Snap Shots à Rapidweaver ?
Belles icônes pas chères !
Réaliser un formulaire de contact (1/4)
Syndication, comment s’y retrouver
Quand JavaScript est désactivé... 1/2
xhtml - 4 : Les entités
Un Editeur RSS pour votre site 1/2
Créer un forum à l’aide de phpBB
Quiz en PHP 2/3
Etablir un questionnaire statistique en ligne
Page Erreur 404 en PHP
Gestion d’une rubrique... en attendant SPIP
Editer plusieurs fichiers de syndication 1/3
Réaliser un formulaire de contact (5/4)
Le web structuré et sa présentation
Analyser les réponses à une liste de questions
Initiation au xhtml - 1
Un lecteur RSS pour votre site 1/2
Réaliser un formulaire de contact (4/4)
Soigner en ligne, un art impossible ?
Installer un script PHP pour les nuls
Quand JavaScript est désactivé... 2/2
Page contact en PHP 1/3
Quiz en PHP 1/3
Créer une liste de QCM
MARST - Le Moteur Automatisé de Recherche en Santé au Travail
Menu dépliant pour les rubriques
Un Editeur RSS pour votre site 2/2
Contrôler l’accès d’une partie du site avec .htaccess
Quiz en PHP 3/3
Javascript : n’oubliez pas Mac OS !
Conseils pour débuter un site web
Editer plusieurs fichiers de syndication 3/3
Menu de navigation sans JavaScript
Initiation au xhtml - 3 : Rappel sur les pointeurs internet (URI/URL)
Réaliser un formulaire de contact (3/4)
Editer plusieurs fichiers de syndication 2/3
Tri et Histogramme
Publication Spip : forme et typographie
Comment faire migrer son site ?
Un serveur dédié pour les nuls
Page contact en PHP 3/3
Page contact en PHP 2/3
La Netiquette des forums
Qualité, centres d’intérêt et motivations des participants aux forums médicaux.
Mise en place d’un forum : une décision qui doit être mûrement réfléchie
Réaliser un formulaire de contact (2/4)
La syndication de contenu RSS
Lire nos fichiers de syndication
Ecrire ce qu’on veut dans SPIP
Astuce pour les images fréquemment utilisées
Afficher un fil RSS/Atom sur votre site 1/3
Afficher un fil RSS/Atom sur votre site 2/3
Afficher un fil RSS/Atom sur votre site 3/3
Lecteur RSS/Atom pour votre site 1/2
Lecteur RSS/Atom pour votre site 2/2
Lecture des caractères spéciaux et d’éléments d’un fil RSS/Atom
Syndication pour phpBB
Editez vos flux avec Fil_LE 1/2
Editez vos flux avec Fil_LE 2/2
Création à distance d’un fichier de syndication
Abandonnons RSS 0.91 !
Exécuter un Javascript dans une page SPIP
Des fils RSS 1.0, RSS 2.0 et Atom 1.0 pour votre site SPIPSyndiquer tout le texte
Quiz en PHP 1/3
Editer plusieurs fichiers de syndication 1/3
Installer un script PHP pour les nuls
Page contact en PHP 1/3
Menu dépliant pour les rubriques
Quand JavaScript est désactivé... 2/2
Page contact en PHP 3/3
Proposer plusieurs styles pour votre site
Page Erreur 404 en PHP
Syndication, comment s’y retrouver
Editer plusieurs fichiers de syndication 3/3
Javascript : n’oubliez pas Mac OS !
Editer plusieurs fichiers de syndication 2/3
Gestion d’une rubrique... en attendant SPIP
Quiz en PHP 3/3
Quand JavaScript est désactivé... 1/2
Page contact en PHP 2/3
Quiz en PHP 2/3
Menu de navigation sans JavaScript
Afficher plusieurs flux RSS/Atom sur une page
Conseils aux rédacteurs
La syndication de contenu RSS
Présentation de l’espace rédacteurs
Lire nos fichiers de syndication
Ecrire ce qu’on veut dans SPIP
Afficher un fil RSS/Atom sur votre site 1/3
Ecrire ou modifier un article
Astuce pour les images fréquemment utilisées
Afficher un fil RSS/Atom sur votre site 2/3
Les raccourcis typographiques
Reprendre un document Word
Afficher un fil RSS/Atom sur votre site 3/3
Lecteur RSS/Atom pour votre site 1/2
Lecteur RSS/Atom pour votre site 2/2
Lecture des caractères spéciaux et d’éléments d’un fil RSS/Atom
Placer une image dans un article
Joindre un document à un article
Editez vos flux avec Fil_LE 1/2
Joindre un logo à un article
Editez vos flux avec Fil_LE 2/2
Création à distance d’un fichier de syndication
Exécuter un Javascript dans une page SPIP
Abandonnons RSS 0.91 !
Des fils RSS 1.0, RSS 2.0 et Atom 1.0 pour votre site SPIP
Accueil
Boite à Outils
Positionnement fixe... même avec Internet Explorer !

Cet article décrit un moyen d’afficher un calque en positionnement fixe en bas de page pour tout navigateur moderne [1], ce qui n’est pas trop difficile pour un navigateur respectant les normes du Web, mais théoriquement impossible pour Internet Explorer pour PC [2] qui ne reconnaît pas le positionnement fixe.
Mise au point du 14/04/06 : J’étais content d’avoir mis au point la solution décrite dans cet article, mais je dois reconnaître maintenant qu’elle est dépassée par une technique bien plus élégante (tout CSS, pas de Javascript) qui est décrite ici : Fixed positioning, mais qui ne fonctionne pas avec Internet Explorer pour Mac pour lequel la technique décrite dans cet article reste pertinente.
Tout a commencé par une recherche pour améliorer la présentation du site du CYES, en remplaçant des éléments de mise en page utilisant des tableaux par une mise en page par feuille de style.
De nombreuses images réparties sur la hauteur des pages, avec un rollover [3] en Javascript permettaient le retour en haut de la page [4]. Plutôt que cette mise en page un peu lourde, j’ai donc cherché à avoir une seule image, toujours présente en bas à droite des pages.
Je commence par décrire le rollover qui n’utilise pas JavaScript, mais les feuilles de style.
Voici la partie "HTML" du code [5] :
<div id="haut"><a href="#top"><img src="/images/vide.gif" alt="Haut de la page" width="16" height="16" border="0" title="Retour en haut de la page, Accès clavier touche a" /></a></div> |
Evidemment pour que cela marche, il faut avoir placé une ancre <a name="top"></a> en haut de chaque page. L’image vide.gif est transparente, elle va être remplacée par l’image du bouton simple ou survolé grâce aux indications de la feuille de style [6] :
#haut a { |
Vous aurez sûrement remarqué que c’est la même image qui est utilisée avec ou sans "survol", simplement ce n’est pas la même partie de l’image qui est visible (ainsi, pas de perte de temps au chargement d’une nouvelle image). Je ne détaille pas plus ce rollover en CSS, car pour ceux qui veulent plus d’explications, tout est parfaitement décrit dans Sprites CSS : Meurs, découpe d’images, meurs ! [7].
Voyons maintenant comment positionner le calque <div id="haut"> en bas à droite des pages. On place le code suivant dans la feuille de style :
#haut { |
Seule la première partie du style est comprise par Internet Explorer, le calque a alors un positionnement absolu. Par contre les navigateurs intelligents et respectueux des normes comprennent jusqu’au bout et le calque a un positionnement fixe, c’est-à-dire que même si on fait défiler le contenu de la page, l’image est toujours visible, à 500 pixels du haut de la fenêtre.
Oui, mais toutes les fenêtres ne seront pas hautes de 550 ou 600 pixels, alors comment faire pour que l’image soit toujours bien placée ? C’est là qu’intervient JavaScript [8] :
function getWindowHeight() { |
Ce script est une adaptation de celui décrit dans l’article Les pieds (de page) dans le plat auquel je vous renvoie si vous voulez les explications complètes. Pour les navigateurs recents, la hauteur de la fenêtre est donnée par getWindowHeight(); [9] on a donc avec ce script un positionnement à 25 pixels du bas de la page,
à l’ouverture de la page grâce à window.onload = function() { setFooter() }
à chaque fois que la fenêtre est redimentionnée grâce à window.onresize = function() { setFooter() }
Le script ci-dessus fonctionne avec Internet Explorer pour Mac, mais évidemment pas avec Internet Explorer 5 ou 6 pour PC. Que peut-on faire pour nos visiteurs qui utilisent encore ce navigateur ?
Internet Explorer connait le positionnement absolu. Il suffit de recalculer la hauteur du calque par rapport au haut de la page au fur et à mesure que la page défile. Le script à utiliser devient alors :
function setFooter() { |
C’est presque le même script qu’avant, mais si le navigateur est Internet Explorer pour PC, on le reconnaît par ((document.all) && (navigator.appVersion.indexOf("Mac",0)<0)) et alors :
on met le calque en positionnement absolu,
on ajoute à la hauteur de la fenêtre la hauteur de la page qui a déjà défilée qui est donnée par document.body.scrollTop
on refait ce calcul chaque fois que la page défile, grâce à window.onscroll = function() { setFooter() }
Vous pouvez tester ce script en service en allant voir les pages du CYES.
J’ai passé beaucoup de temps pour mettre au point une solution qui prenne en compte tous les navigateurs modernes.
J’espère que ce script pourra être utile à d’autres, et j’espère aussi qu’à l’avenir Microsoft sera plus respectueux des normes (mais là, je rêve...).
[1] Pour utiliser le moyen décrit dans cet article un navigateur doit comprendre la norme CSS2, ce qui n’est pas le cas de Netscape 4 et d’Internet Explorer 4.
[2] Curieusement, Internet Explorer pour Mac, qui respecte mal les normes du W3C, se comporte mieux sur ce point là.
[3] Désolé pour les puristes du français, mais c’est plus rapide que de dire "Avec le remplacement par une autre image au survol de la souris".
[4] Je sais, certains vont dire que c’est idiot et qu’il n’y a qu’à utiliser la touche "Haut de page" présente sur la plupart des claviers. Je crois que beaucoup d’internautes ne connaissent pas cette touche, et on peut de toute façon utiliser l’astuce décrite ici pour d’autres choses bien plus utiles que le retour en haut de page.
[5] Pour simplifier les mises à jour, ce code est ajouté au menu de "Pied de page" qui est inclus dans chaque page du site.
[6] Ces indications peuvent être placés dans le <head> de chaque page, entre les balises <style type="text/css"><!-- et //--></style>, ou plus judicieusement dans une feuille de style externe appellée par le code <link title="test" type="text/css" rel="stylesheet" href="monstyle.css">
[7] Autre article sur le rollover en CSS : Zoom d’images avec les CSS.
[8] Comme pour les éléments de style, ce script peut être placé dans le <head> de chaque page, entre les balises <script language="JavaScript" type="text/javascript"><!-- et //--></script>, ou plus judicieusement dans une feuille externe appellée par le code <script language="JavaScript" type="text/javascript" src="monscript.js"></script>
[9] Pour retrouver la valeur d’un élément selon le navigateur, voyez la page Référence DHTML multi navigateurs.
Bonjour,
Où places-tu tes différentes lignes de codes ? Head ? Body ? Dans quel ordre ? Mon problème à moi c’est que je cherche à positionner un calque sur un fond (image) et faire en sorte que ce calque soit centré quelque soit le navigateur (explorer 6, netscape 6 ou firefox).
Merci Didier Bonaventure Montréal
<head>. Personnellement je préfère utiliser une feuille externe pour les CSS et pour le Javascript ce qui me permet de les utiliser pour toutes les pages du site.<div> doit évidemment être dans le <body>, il ne faut pas non plus oublier pour lancer le Javascript à l’ouverture de la page de faire
<body onload="setFooter();">
Bonjour tout merci beaucoup pour ce script.
Un bug apparait sur ie 7, il me semble que c’est pareil sur ie 6. Lorsque je scroll tout en bas de ma fenetre la page s’allonge au fur et a mesure... Cela un crée un scroll infini. J’ai modifier le css pour avoir le div fixed en full screen (height : 100%) ca doit venir de la.
La modification de la taille du div doit certainement se faire sur le script mais la je calle un peu...
J’ai finalement trouvé pour ie7. Il me reste a regler un petit probleme sur ie6 la taille du div ne se met en pleine ecran.
Le JS pérsonalisé :
function getWindowHeight() var windowHeight = 0 ; if (typeof(window.innerHeight) == ’number’) windowHeight = window.innerHeight ; else if (document.body && document.body.clientHeight) windowHeight = document.body.clientHeight ; else if (document.documentElement && document.documentElement.clientHeight) windowHeight = document.documentElement.clientHeight ; return windowHeight ; function setFooter() if (document.getElementById) var windowHeight = getWindowHeight() ; if (windowHeight > 0) var footerElement = document.getElementById(’blackle’) ; footerElement.style.height =(windowHeight) + ’px’ ; footerElement.style.position = ’fixed’ ; footerElement.style.top = ’0 px’ ;
window.onload = function() setFooter() ; window.onresize = function() setFooter() ;
function setFooter() if (document.getElementById) var windowHeight = getWindowHeight() ; if (windowHeight > 0) var footerElement = document.getElementById(’blackle’) ; footerElement.style.height =(windowHeight) + ’px’ ;
if ((document.all) && (navigator.appVersion.indexOf("Mac",0)<0)) footerElement.style.position = ’absolute’ ; footerElement.style.top = (document.body.scrollTop) + ’px’ ; else footerElement.style.position = ’fixed’ ; footerElement.style.top = ’0px’ ; window.onload = function() setFooter() ; window.onresize = function() setFooter() ; window.onscroll = function() setFooter() ;