position:fixed, wenn Links/oben/rechts/unten nicht angegeben - gewünschte Ergebnisse in FF/IE, aber nicht in Safari
Haben leider bitten, noch ein weiteres position:fixed
Verwandte Frage, aber das Lesen durch verschiedene andere Fragen und forum-threads hat mir nicht geholfen mit diesem ein.
Code, der folgt, ist eine vereinfachte Veranschaulichung, wie ich mit position:fixed
in einem Projekt zu Datum. Meine ursprüngliche (fehl -) Verständnis von position:fixed
ist, dass es zunächst fixes relativ zu der ersten übergeordneten container positioniert, und danach bleibt in dieser position unabhängig von der viewport scroll-position. Ich erkenne jetzt, dass ist falsch: in der Tat position:fixed
Positionen relativ zu den äußersten container (d.h. die html
tag) und der position:absolute
Positionen relativ zu der ersten übergeordneten container, der eine andere position als static
.
Lesen durch die verschiedenen Fragen auf, SO Stelle ich fest, dass der Effekt, den ich versucht hatte, Sie zu erreichen mit position:fixed
ist eine, die viele andere Menschen haben es versucht, aber dann realisiert ist es nicht möglich nur mit CSS: Das ist, um die position eines Elements relativ zu einem container, aber dann haben Sie es bleiben, wo es ist, relativ zum viewport, wenn die Seite gescrollt wird.
Was mich verwirrt ist aber, dass das oben genannte ist genau das, was ich schien zu haben, erreicht - zumindest auf FF und IE8. Mit dem code-Beispiel unten die "festen rechten Bereich mit Inhalt" wird zunächst so positioniert, rechts den roten "Zentrum scrollable content" - box, und ist vertikal Ebene mit der Spitze des Zentrums Inhalt. Zentrum Inhalt kann gescrollt werden, aber die Rechte-hand-Inhalt bleibt, wo es ist, als ob es zunächst die Positionen statisch im normalen Belegfluss, aber danach bleibt fixiert auf den viewport.
Ich erkenne jetzt, dass dies erscheint, zur "Arbeit" im IE8 und FF, nur weil ich nicht angegeben top
/bottom
/left
/right
Attribute der fixed
element. Wenn ich das Tue, dann erkenne ich, dass die fixed
element wird sofort positioniert relativ zum viewport.
Hatte ich angenommen, vielleicht gefährlich - bis jetzt, dass, wenn die relative Positionen sind nicht angegeben, dann position:fixed
wird standardmäßig Ort, element, wo es normalerweise statisch platziert. Zumindest FF und IE8 zu sein scheinen, genau das zu tun.
Tests in Safari, zeigt jedoch, dass Safari zu legen scheint, dass fixed
element auf der linken Seite des Containers. In anderen Worten, ohne Positionierung, meine position:fixed
element ist, weder wo er wäre, wenn statisch platziert, noch ist es bei 0,0 positioniert relativ zum viewport.
Habe ich verlassen uns auf sehr schlecht definiertes Verhalten zu Datum, und bin ich am besten den Rückgriff auf eine JavaScript-Lösung, nachdem alle zu erreichen, diese Feste Positionierung? Oder, ist dieses Verhalten gut definiert für IE /FF; und kann mir jemand erklären, die Logik hinter Safari Platzierung bitte?
HTML:
<style type="text/css">
#content-centre {
margin: 0 auto;
width: 900px;
}
#header {
height: 55px;
position: fixed;
top: 0;
width: 990px;
}
#left-pane {
position: fixed;
top: 12px;
border: 1px green solid;
}
#main-pane {
left: 200px;
position: relative;
top: 66px;
width: 760px;
border: 1px yellow solid;
}
#container-1 {
border-top: 1px solid #FFFFFF;
float: right;
min-width: 130px;
padding-left: 20px;
border: 1px blue solid;
}
#container-0 {
margin-right: 20px;
min-height: 470px;
overflow: auto;
padding: 10px 0;
position: relative;
border: 1px red solid;
}
.side-info-list-fixer {
position: fixed;
}
</style>
<div id="content-centre">
<div id="header">
</div>
<div id="left-pane">
Fixed left pane content
</div>
<div id="main-pane">
<div id="page-module-containers">
<div id="container-1">
<div class="side-info-list-fixer"> Fixed right pane content </div>
</div>
<div id="container-0">
<p>Centre scrollable content</p>
<p>Centre scrollable content</p>
<p>Centre scrollable content</p>
<p>Centre scrollable content</p>
<p>Centre scrollable content</p>
<p>Centre scrollable content</p>
<p>Centre scrollable content</p>
<p>Centre scrollable content</p>
<p>Centre scrollable content</p>
<p>Centre scrollable content</p>
<p>Centre scrollable content</p>
<p>Centre scrollable content</p>
<p>Centre scrollable content</p>
<p>Centre scrollable content</p>
<p>Centre scrollable content</p>
<p>Centre scrollable content</p>
<p>Centre scrollable content</p>
<p>Centre scrollable content</p>
<p>Centre scrollable content</p>
<p>Centre scrollable content</p>
<p>Centre scrollable content</p>
<p>Centre scrollable content</p>
<p>Centre scrollable content</p>
<p>Centre scrollable content</p>
<p>Centre scrollable content</p>
<p>Centre scrollable content</p>
<p>Centre scrollable content</p>
<p>Centre scrollable content</p>
<p>Centre scrollable content</p>
<p>Centre scrollable content</p>
<p>Centre scrollable content</p>
<p>Centre scrollable content</p>
</div>
</div>
</div>
</div>
- Zusammenfassend zur Frage, warum
position:fixed
ohnetop
oderleft
angegeben, die nicht standardmäßig auf der oberen linken Seite des Fensters? Auch ich bin verwirrt von diesem.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich glaube, die Antwort, die Sie suchen, wie folgt...
Die position eines Elements nicht standardmäßig auf 0,0.
Die position ist standardmäßig gesetzt, relativ zu dem element enthalten sind, dafür in Ihrem Beispiel, "#container-1" hat ein padding-left: 20px während der rest der Polsterung wird auf 0 gesetzt macht die "default" - position des Elements 20px Links von der Wand des #container-1 und die top 0px von der Spitze des #container-1.
Die Standard-position dieses element standardmäßig und mein viewport nicht gescrollt werden würde 63px von der oberen und der linken ist offensichtlich abhängig von der Breite Ihres Browsers. Allerdings, wenn Sie nicht überschreiben die oben und Links, die Sie bereits definiert sind, indem die rendering-engine als die top:63px, Links:893px.
Dann auf Fenster, die Größe, die position wird angepasst, um den Standpunkt basierend auf den viewport, so wie Sie nach unten scrollen die position geändert wird, um zu halten es fest.
So, einfach durch das hinzufügen von "position:fixed;" Ihre Eigenschaften (soweit es den browser betrifft)
wie folgt:
Auch, IE6 und ähnliches, nicht unterstützt position:fixed überhaupt.
http://fiddle.jshell.net/uaE4g/4/show/
Ich hoffe, das hilft!
Sehe ich ähnliche Ergebnisse in safari 5, und nicht in safari 6.
Browsern, es scheint zu funktionieren wie dieser:
wenn man von der position die Eigenschaften definiert ist, nicht auf ein festes element, ist der Anfangswert der Eigenschaft ist wie das gleiche wie, wenn das Objekt statisch sei. es scheint.
nachdem die Seite geladen ist, bleibt es sich so verhält, als wenn es war statisch. also wenn ich fix ein element vertikal, aber nicht horizontal, kann ich nach oben und unten Blättern und das element fixiert bleibt, aber wenn ich scrollen seitwärts die Elemente scrollt mit der Seite.
aber in safari 5, wenn das element in einem container, Positionierung, scheint es sich zu Verhalten wie Sie es beschreiben: der erste Wert ist der gleiche, als ob es statisch ist, aber danach bleibt es fest auf dieser position.
Ihre "side-info-Liste-fixer" ist in den "main-Bereich", die auf position:relative. nehmen Sie, dass Sie und Sie können sehen, die das gleiche Verhalten wie in safari 6 und die meisten anderen Browser.
ich dont wissen, was das richtige ist und ob Sie sollten die von diesen features abhängen ...
$2c,
*-pike
Ich hatte die gleiche Anforderung, um die position eines Elements
fixed
am natürlichen (Standard -)static
position mit Bezug auf den viewport. Ich landete mit diesem einfachenjQuery
Funktion.Verwenden Sie es wie diese:
Mein Anwendungsfall war eine zweite Ebene der navigation im Menü, floss in das Dokument, dann wurde es um diese position.