Cette astuce est partie d'un constat simple :
fixed n'est pas pris en compte par ie, pourtant, si je positionne un élément en absolue à l'intérieur d'un élément ayant un overflow générant des barres de scroll (overflow:auto ou overflow:scroll), l'élément placé en absolue se comporte comme s'il était fixe par rapport à son conteneur.
Il suffit maintenant d'adapter cela à une page entière.
On veut que le body soit un bloc conteneur classique avec un overflow déclaré, il faut également que celui-ci prenne la hauteur totale de la fenêtre, pour ceci, on utilise le code suivant :
body, html {Il n'y a plus qu'à positionner l'élément que l'on veut en fixe dans la page avec un position: absolue
height: 100%;
margin: 0;
padding: 0;
}
html {
overflow: visible;
}
body {
overflow: auto;
}
Le problème qui se pose alors est que mozilla par exemple, même s'il interprète correctement la page et affiche le même résultat, ne permettra plus d'utiliser la molette de la souris pour scroller, ce qui n'est pas agréable voir dérangeant pour la navigation des visiteurs.
Pour contrer le problème, on utilisera les sélecteurs CSS non reconnus par ie pour rétablir le comportement normal de mozilla et appliquer le positionnement fixe :
div[id=fixe] {L'utilisation de !important permet d'écraser les valeurs données précédemment pour le navigateur qui les lira.
position: fixed !important;
}
html > body {
overflow: visible !important;
}
Restrictions :
Cette méthode a tout de même un inconvénient :
- en modifiant ainsi le comportement des positions absolue, on ne peut plus positionner en absolue de façon classique, tous les éléments de la page en absolue deviennent fixes
- sous ie 5.0 la barre de scroll disparait totalement
voir la page d'exemple
page testée et fonctionnant avec un comportement fixe du bloc sous internet explorer 6, firefox, netscape 7.02, opéra 7.54, safari
sous internet 5.5 pc et internet explorer 5.2 mac, le bloc se place en position absolue classique
Très bon article encore une fois !
Bouda
Clair, net et précis !
Aurais-tu un exemple avec un contenu de page plus conséquent ?
En effet, l'exploit est intéressant. Mais sa mise en pratique avec un contenu réel semble **à première vue** plutôt hasardeuse:
- disparition du pied de page de l'exemple dans FireFox
- disparition du scroll vertical dans IE5.0
- pied de page au beau milieu du contenu dans Opera 7.54
pour ie5.0 je t'avouerais que je n'avais meme pas testé, effectivement j'ai le même problème que toi, je modifie mon texte pour signaler l'incompatibilité, merci de l'avoir signalé
j'ai modifié la page d'exemple pour lui ajouter du contenu, chez moi il n'y a aucun problème sous firefox 0.9.3 et opéra 7.54 ....
les problèmes que tu as rencontrés c'est sur l'exemple que j'avais mis ou sur une page que tu as faite pour tester ?
Malheureusement, position:absolute se réfère au conteneur et non à body !
Où nanoum à écrit que position:absolute se référais au body ?
citation de nanoum :
l'élément placé en absolue se comporte comme s'il était fixe par rapport à son conteneur
Nulle part, c'est juste mon problème ...
Ok
j'avais pas compris dsl
Dommage qu'on ne puisse pas faire de trackback... je renvoi à un article similaire que j'ai écrit il y a quelques mois... mon site met en pratique ce système pour un exemple concret avec du "vrai" contenue
http://www.ibilab.net/webdev/articles/CSS/position-fixed-pou...
salut, si ca peut vous aider, nanoum, sur ie mac ton astuce ne marche pas, et le navigateur affiche les scrollbar horizontale et verticale
@jep : ton site est carrement invisible sous ie mac...
sur ie mac...
et felicitation pour ce blog!
sinon sur safari ... ca roule pas mal
La grosse difficulté de base, donc par rapport à IE, c'est l'impossibilité de combiner dans la même page des éléments en position absolute fixée et des éléments en position absolute non fixée.
Merci beaucoup naoum de partager
Merci beaucoup pour cette astuce, j'ai cherché un peu avant de trouver celle-ci qui est super simple comparé à ce que j'avais déjà pu trouver qui ne marchait pas forcément.
Un grand merci donc. =D
Bonjour,
Je suis très étonné par la simplicité de cette solution pour palier au manque fiwed sous IE. En plus, il parrait qu'elle marche ! Alors là, chapeau...
Moi je fonctionnais avec ce patch :
arcok.ujevangelizacio.hu/bubu/examples/ie-fixed.html
Je vous laisse juger, c'est pas mal non plus.
A+
Merci beaucoup pour votre aide, j'ai pu arriver au résultat pour ma pub sky adsense sur le coté : http://www.carolinedaily.com
Par contre, mon lien "ajouter aux favoris" reste fixe aussi et si j'ai bien compris, il n'y a aucune solution pour cela ?
Cordialement,
Caroline
tout ce qui est en absolu dans la page sera affecté
pour que le lien ne soit pas en fixed il faut le positionner autrement qu'avec position:absolute
merci pour les conseils... j'arrivais pas a afficher les scrollbars automatiquement lors de l'ouverture en javascript d'une page en pleine ecran, seulement si le contenu est trop grand. Grace a ce topic j'ai trouve: un div #site contenant comme css:
width:100%;
height:100%;
overflow:auto;
simple, mais overflow:auto tout seul ne fonctionnais pas
Commentaires momentanément fermés. Merci de votre compréhension.