hi,
ich beschäftige mich gerade mit einem IE-workaround für position:fixed.
die methode dürfte bekannt sein, einfach html und body auf 100% höhe und overflow:hidden setzen, und da hinein dann einen ebenfalls 100% hohen container mit overflow:auto, der den scrollbaren seiteninhalt aufnimmt.
die fix zu positionierenden elemente kommen dann einfach ausserhalb dieses containers, und werden absolute positioniert.
so weit, so gut.
doch wenn ich jetzt ein fixed-element haben will, das über die gesamte breite gehen soll, habe ich ein problem.
width:100%, an 0/0 positioniert - und damit überdeckt mir dieses element auf der rechten seite den scrollbalken :-/
ist ja auch logisch, body hat durch overflow:hidden keinen scrollbalken mehr, also gehen 100% wirklich über die gesamte fensterbreite - erst darunter liegt ja mein container-div, mit seinem eigenen scrollbalken.
(siehe beispiel http://wazgnuks.net/misc/positionfixedIE.htm, oberer, roter bereich.)
was tun? width:95% oder 90% nehmen? sieht auch blöd aus, weil das je nach fenstergröße rechts unterschiedlich viel platz lässt, und somit ein mehr oder weniger großer abstand zum scrollbalken da ist.
meine idee:
ich positioniere das fixed-element nicht bei 0px von links, sondern bei {ungefähre_scrollbalkenbreite}px von rechts.
dann ragt es zwar um genau so viele pixel links aus dem anzeigebereich, aber das lässt sich ja kompensieren, in dem man seinen inhalt dann wieder ein bisschen nach rechts verschiebt.
bin jetzt im beispiel mal von einer scrollbalkenbreite von ca. 17 oder 18px ausgegangen, damit sieht es in meinen test-IEs (5.01, 5.5, 6.0) in etwa so aus, wie gewünscht - siehe blauer bereich im beispiel.
mir ist klar, dass die scrollbalkenbreite variieren kann (tut sie nach meiner beobachtung sogar schon zwischen dem 6er-IE mit dem 3D-scrollbalken von XP, und den 5ern mit ihrem eher 2D-scrollbalken), und auch sonst bin ich ja kein verfechter von pixelgenauem layouten, weil mir bewusst ist, wie viele striche einem da durch die rechnung gemacht werden können -
allerdings ist dies der beste weg, den ich finden konnte, um das hier beschriebene problem lösen zu können - meine frage: fällt jemandem ein "besserer" ein ...?
gruß,
wahsaga
p.s.: für die "anderen" browser nutze ich position:fixed, so wie's gedacht ist. das einzige, was der IE also zusätzlich braucht, ist dieser container-div (der für die anderen browser einfach vollkommen unformatiert gelassen wird), und ein wenig per conditional comments eingebundenes CSS, das die position:fixed-angabe mit absolute überschreibt, sowie die koordinaten leicht verschiebt.
in den anderen browsern könnte man zwar natürlich auch mit der gleichen methode position:fixed simulieren - aber da gibt's einige unschöne nebeneffekte bei, z.b. dass gecko-browser die seite nicht mehr per mausrad scrollen wollen (das problem ist ja m.W. bekannt bei overflow-bereichen). oder dass opera die seite nur so lange mit dem mausrad scrollen lässt, bis man einen link im inhaltsbereich nur hovert - danach geht nichts mehr, man muss erst auf eine frei stelle im dokument klicken, bevor man mit dem mausrad wieder scrollen kann; der hat da wohl irgendwie ein problem beim umgang mit dem fokus.
--
I'll try being nicer if you'll try being smarter.