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 ?
Webmasters : Comment mieux se référencer ?
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
La Netiquette des forums
Un Editeur RSS pour votre site 2/2
Installer un script PHP pour les nuls
Tri et Histogramme
Etablir un questionnaire statistique en ligne
Quand JavaScript est désactivé... 2/2
Quand JavaScript est désactivé... 1/2
Soigner en ligne, un art impossible ?
Mise en place d’un forum : une décision qui doit être mûrement réfléchie
Javascript : n’oubliez pas Mac OS !
Page contact en PHP 1/3
Initiation au xhtml - 1
Publication Spip : forme et typographie
Comment faire migrer son site ?
Initiation au xhtml - 2
Qualité, centres d’intérêt et motivations des participants aux forums médicaux.
Menu de navigation sans JavaScript
Quiz en PHP 3/3
Analyser les réponses à une liste de questions
Menu dépliant pour les rubriques
Réaliser un formulaire de contact (3/4)
Un Editeur RSS pour votre site 1/2
Réaliser un formulaire de contact (2/4)
Comment intégrer Snap Shots à Rapidweaver ?
Contrôler l’accès d’une partie du site avec .htaccess
Proposer plusieurs styles pour votre site
Page contact en PHP 2/3
MARST - Le Moteur Automatisé de Recherche en Santé au Travail
Créer un forum à l’aide de phpBB
Un lecteur RSS pour votre site 1/2
Créer une liste de QCM
Belles icônes pas chères !
Un lecteur RSS pour votre site 2/2
Webmasters : Comment mieux se référencer ?
Gestion d’une rubrique... en attendant SPIP
Quiz en PHP 1/3
Initiation au xhtml - 3 : Rappel sur les pointeurs internet (URI/URL)
Réaliser un formulaire de contact (4/4)
Page Erreur 404 en PHP
Syndication, comment s’y retrouver
Conseils pour débuter un site web
Le web structuré et sa présentation
Réaliser un formulaire de contact (1/4)
Quiz en PHP 2/3
Utilisation de la classe easyRSS
xhtml - 4 : Les entités
Page contact en PHP 3/3
Editer plusieurs fichiers de syndication 2/3
Editer plusieurs fichiers de syndication 3/3
Réaliser un formulaire de contact (5/4)
Un serveur dédié pour les nuls
Editer plusieurs fichiers de syndication 1/3
La syndication de contenu RSS
Lire nos fichiers de syndication
Ecrire ce qu’on veut dans SPIP
Afficher un fil RSS/Atom sur votre site 1/3
Astuce pour les images fréquemment utilisées
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
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 SPIPSyndiquer tout le texte
Editer plusieurs fichiers de syndication 3/3
Page contact en PHP 1/3
Page contact en PHP 3/3
Quand JavaScript est désactivé... 2/2
Syndication, comment s’y retrouver
Gestion d’une rubrique... en attendant SPIP
Quiz en PHP 3/3
Page Erreur 404 en PHP
Editer plusieurs fichiers de syndication 2/3
Quiz en PHP 1/3
Installer un script PHP pour les nuls
Menu de navigation sans JavaScript
Page contact en PHP 2/3
Quand JavaScript est désactivé... 1/2
Quiz en PHP 2/3
Menu dépliant pour les rubriques
Javascript : n’oubliez pas Mac OS !
Proposer plusieurs styles pour votre site
Editer plusieurs fichiers de syndication 1/3
Afficher plusieurs flux RSS/Atom sur une page
Conseils aux rédacteurs
La syndication de contenu RSS
Ecrire ce qu’on veut dans SPIP
Lire nos fichiers de syndication
Présentation de l’espace rédacteurs
Astuce pour les images fréquemment utilisées
Ecrire ou modifier un article
Afficher un fil RSS/Atom sur votre site 1/3
Les raccourcis typographiques
Afficher un fil RSS/Atom sur votre site 2/3
Afficher un fil RSS/Atom sur votre site 3/3
Reprendre un document Word
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() ;