2013-06-09 9 views
11

Ich benutze das Snap.js-Plugin - (es können Sie Scroll Side Side Schubladen/Panels erstellen).Benötigen Sie ein fest positioniertes div innerhalb einer absolut positionierten div

Es funktioniert, indem Sie 3 absolut positionierte divs erstellen, von denen einer den Hauptinhalt enthält.

Gibt es eine Möglichkeit, ein div am oberen Rand des Fensters zu positionieren, wenn es sich innerhalb des absolut positionierten div befindet.

Im Moment bekomme ich nur das feste div an die Spitze des absolut positionierten div, anstatt an der Spitze des Browsers. Wenn ich scrolle, bleibt das Div am oberen Rand des Hauptinhalts, nicht aber am Fenster.

Zum Beispiel:

<div style="position:absolute;"> 

    <div style="position:fixed;top:0"> 
     <!-- some content which needs to be pinned to top of window --> 
    </div> 

</div> 

Im Moment ist Javascript bin mit der Scroll-Offset zu verfolgen und manuell die Spitzenposition des Kind div einstellen, die für die Leistung nicht ideal ist.

Jede Hilfe wird geschätzt!

+1

die absolut positioniert div hat die folgende CSS angewendet: translate3d (0px, 0px, 0px), wenn ich es ein festes Element entfernen, so verhält, als es sollte, und ist mit dem oberen Rand des Fensters gepinnten . Irgendwelche Ideen, warum das so ist? –

+0

Das ist, was Ihr Beispielcode tut. (Ist es das, was Sie beabsichtigten?) Wenn Sie die Position fest auf ein Element setzen, wird es aus dem Fluss des Dokuments entfernt und relativ zum Ansichtsfenster dargestellt. Sagst du, dass snap.js das kaputt macht? – BjornJohnson

+0

Interessant. Hilft das? http://code.google.com/p/chromium/issues/detail?id=20574 – BjornJohnson

Antwort

2

ich eine Geige gemacht habe meine Javascript Abhilfe zeigt - es Bammel, wenn im Internet Explorer, alle Ideen zu scrollen.

<div id="displayed-content" class="snap-content scrollable"> 
    <div><!-- regular content --></div> 
     <div><!-- fixed content --></div> 
    <div><!-- footer content --></div> 
</div> 

http://jsfiddle.net/bxRVT/

+0

Sie haben hier ziemlich viel gearbeitet. Schwer zu sagen, wie man die IE-Leistung am besten verbessert. Sie sind wirklich auf dem neuesten Stand der CSS3-Technologien. Meine erste Vermutung ist, dass die Transformationen nicht gut mit jQuery .scrollTop funktionieren, aber es wäre ein ganzes Projekt für sich, um zu versuchen, das, was Sie getan haben, zu verbessern. Ich werde dir eine Stimme geben für Anstrengung! –

+0

Danke, ich benutze die obige Implementierung für jetzt, bis ich etwas besseres herausfinde. –

0

Ich vermute, ein wenig über das, was Sie zu tun versuchen, aber Sie könnten für so etwas suchen:

<div class="local-wrap"> 
    <div class="fixed"> 
     Some content which needs to be pinned to top of window 
    </div> 
    <div class="port"> 
     Regular content... 
    </div> 
</div> 

und wenden Sie das folgende CSS:

.local-wrap { 
    position: relative; 
} 
.local-wrap .fixed { 
    position: absolute; 
    top: 0; 
    left: 0; 
    background-color: lightgray; 
    width: 100%; 
    height: 5.00em; 
} 
.local-wrap .port { 
    position: relative; 
    top: 5.00em; 
    min-height: 10em; 
    height: 15em; 
    overflow: auto; 
    border: 1px solid gray; 
    border-width: 0 1px 1px 1px; 
} 

Demo Geige: http://jsfiddle.net/audetwebdesign/pTJbW/

Um einen festen Block in Bezug auf ein Blockelement zu erhalten, müssen Sie die absolute Positionierung verwenden. Die feste Positionierung erfolgt immer in Bezug auf das Root-Element oder den View-Port, so dass position: fixed Ihnen nicht helfen wird.

Was ich getan habe, ist ein .local-wrap Container zu definieren, mit zwei Kind-Blöcke, eine, die absolut an der Spitze .local-wrap positioniert ist und die andere in regelmäßigen Fluss. Ich habe position: relative verwendet, um es unter .fixed zu positionieren, aber ein oberer Rand hätte auch funktioniert.

Ich habe einige Höhen korrigiert, um Scroll-Inhalte im lokalen Fenster/Port zu demonstrieren, aber das kann je nach Design und Anwendung geändert werden.

Haftungsausschluss

Ich bin nicht vertraut mit snap.js so kann es andere Überlegungen zu berücksichtigen.

Kommentar zu CSS3 Transform und festen Elemente

Nach den CSS3-Spezifikationen, wenn Sie ein auf ein Element transformieren anwenden, nennen es div.transformed, dann schafft div.transformed einen neuen Stapelkontext und dient als enthaltend Block für alle untergeordneten Elemente mit fester Position, die es enthält, weshalb der Kontext für feste Positionen in Ihrem Szenario nicht oben im Fenster bleibt.

Als Referenz siehe Mozilla Developer Network -> CSS Reference -> Transform

+0

Leider funktioniert das nicht, da das div an den oberen Rand des Fensters angeheftet werden muss, aber mit dem Fenster wie das .local-wrap in Ihrem Beispiel scrollt. Die normale Methode, ein div mit fester Position zu verwenden, funktioniert nur dann, wenn die css-Transformation vom übergeordneten absolut positionierten div entfernt wird. Gibt es einen Workaround dafür? Im Moment benutze ich Javascript, um die Top-CSS-Eigenschaft für das Floating-Div jedes Mal anzupassen, wenn das Fenster gescrollt wird - das funktioniert in einigen Browsern gut, ist aber bei anderen unbeständig. –

+1

Ich habe eine jsfiddle erstellt, um dies besser zu veranschaulichen http://jsfiddle.net/pTJbW/10/. Verkleinern Sie Ihr Browserfenster, bis in der Ausgabe Bildlaufleisten angezeigt werden. Wenn Sie durch die feste Kopfzeile blättern, wird mit dem Inhalt geblättert. Wenn Sie jedoch die CSS-Transformation in der CSS auf den Inhalt entfernen und aktualisieren, werden Sie feststellen, wenn Sie den Bildlauf der Überschrift bleibt behoben. –

+0

Gute Geige, das Bild ist jetzt viel klarer. Wenn ich die Dinge verstehe, wenn Sie die CSS-Transformationseigenschaft entfernen, funktioniert snap.js nicht, und das ist das Problem, um das Sie herumkommen. –

Verwandte Themen