Zdaje mi się że nawet padła propozycja uzupełnienia CSS o taką możliwość, ale póki co trzeba się wspomagać JavaScript.
1. Odpowiednia struktura HTML dla celów demonstracji, tj: content, aside i wewnątrz jego div jako sticky box
2. Żeby skrypt poprawnie działał div musi mieć względną pozycjęTreść 
div
    {
    background-color : #ccc;
    height           : 100px;
    position         : relative;
    width            : 100px;
    
    }
3. Pozostałe style są tylko po to, żeby uwidocznić efekt
body
    {
    
    display : table;
    
    }
section
    {
    
    background-color : #eee;
    display          : table-cell;
    height           : 1000px;
    width            : 640px;
    
    }
    
aside
    {
    
    background-color : #ddd;
    display          : table-cell;
    padding-top      : 200px;
    width            : 320px;
    
    }
4. Tworzymy referencję do elementu i pobieramy jego odległość od góry strony
var
    div    = document.getElementsByTagName( 'div' )[ 0 ],
    offset = div.offsetTop;
5. Po przesunięciu paska pobierana jest odległość między górną krawędzią widoku, a początkiem strony
window.onscroll = function()
    {
    var scroll = window.scrollY;
6. Jeśli odległość okna jest równa większa niż elementu to jest ustawiany inline style dla top
if( scroll > offset )
    {
    div.style.top = ( scroll - offset ) + 'px';
    }
7. W przeciwnym razie porównywana jest aktualna i startowa odległość elementu, jeśli nie są równe to resetowany jest top. Pozwala to uniknąć niedokładności wynikających z skoków podczas przesuwania
else if( div.offsetTop !== offset )
    {
    div.style.top = 0;
    }
};
Solucja działa we wszystkich popularnych przeglądarkach.Zobacz efekt na jsFiddle.

 
Brak komentarzy:
Prześlij komentarz