2012-03-11 10 views
7

Sto provando a creare un sito Web con l'area del contenuto principale e una barra laterale, qualcosa come qui su Stack Overflow. L'obiettivo è che quando scorri verso il basso, la barra laterale rimane visibile.Come creare una barra laterale fissa/adesiva in CSS/JS?

ho visto due approcci a questo:

  1. position:fixed;
  2. manipolazione JavaScript con l'approccio DOM

no. 1, per quanto ne so, avrà un problema quando il viewport è più piccolo del contenuto della barra laterale quindi suppongo che non possa essere usato in modo affidabile e gli script JavaScript che ho visto sono solitamente animati o generalmente "lenti" (puoi vedere che c'è un ridisegno in atto dopo ogni scroll).

Qualcuno può indicare una libreria JavScript/approccio CSS che non risentirebbe dei suddetti problemi?

Edit: un esempio potrebbe essere this pagema con la barra laterale attaccarsi alla cima senza un'animazione e la corretta situazione quando la barra laterale è superiore content/finestra.

+2

Hai provato a recuperare l'altezza della finestra con javascript, quindi dando questa altezza alla barra laterale su 'position: fixed', con il' overflow' che si adatta alle tue necessità? – rayfranco

+0

Potrebbe funzionare, buona idea. – Borek

+0

Scusa Probabilmente non avrò tempo per sperimentare questo al momento, ma cercherò di tornare su questo più tardi. Se avessi un esempio funzionante, accelererebbe le cose. – Borek

risposta

1

Si potrebbe prendere l'altezza della finestra del client e dando alla sidebar in questo modo:

var sidebarHeight = $(window).innerHeight(); 

$('#sidebar')​​​​​​​​​​​.css('height',sidebarHeight);​​​​​​​​​​​​​ 

Con la corretta CSS per la barra laterale:

#sidebar { 
    position: fixed; 
    right: 0; 
    top: 0; 
    width: 200px; 
    overflow: hidden; 
} 

Here is a working JSFiddle.

Si potrebbe anche guardare per il ridimensionamento delle finestre per evitare problemi di ridimensionamento :) Here is the way to go with jQuery

Buona fortuna

+1

Raccomando anche di leggere qualcosa sulla query media css3, per ogni evenienza. Ecco un eccellente articolo a riguardo: http://webdesignerwall.com/tutorials/responsive-design-in-3-steps – Chango

8

non mi piace soluzioni JS pesanti, cosa così importante da porsi è - compatibilità preferito. In IE8 + è possibile, invece di

var $window = $(window), 
    $sidebar = $(sidebar); 

$window.on('resize', function(){ 
    $sidebar.height($window.innerHeight()); 
}); 

$window.resize(); 

fare qualcosa di simile (soluzione CSS puro):

#sidebar { 
    position: fixed; 
    left: 0; /* or right */ 
    top: 0; 
    bottom: 0; 
    overflow: auto; 
} 

Quando si dispone superiore & in basso/sinistra & giusto valore al tempo stesso, la scatola sarà allungato. (JSFiddle demo)

+1

Grazie, questo è sicuramente meglio che non essere in grado di accedere ai contenuti della barra laterale, ma esiste una soluzione che userebbe la barra di scorrimento principale e non aggiungere uno specializzato solo per la sidebar? Ad esempio, se in questa pagina http://jsfiddle.net/h9XEc/1/ la barra di scorrimento si trovasse alla destra del riquadro dei risultati, non nella barra laterale. – Borek

3

Capito. È basato su Javascript, ma sono sicuro che non è niente di pesante e anche IE8 dovrebbe risolverlo abbastanza bene.

var top = $('#sidebar').offset().top; 
var height = $('#sidebar').height(); 
var winHeight = $(window).height(); 
var gap = 10; 
$(window).scroll(function(event) { 
    var scrollTop = $(this).scrollTop(); 

    // sidebar reached the (end - viewport height) 
    if (scrollTop + winHeight >= top + height + gap) { 
     // if so, fix the sidebar and make sure that offset().top will not give us results which would cancel the fixation 
     $('#sidebar').addClass('fixed').css('top', winHeight - height - gap + 'px'); 
    } else { 
     // otherwise remove it 
     $('#sidebar').removeClass('fixed').css('top', '0px'); 
    } 
});​ 

demo

1

Non sono sicuro se si dispone di questo capito, ma ho creato una barra laterale contenuta appiccicoso jQuery plugin. È davvero semplice e ti permette di invocare con una sola riga di jQuery.Date un'occhiata qui: http://mojotech.github.com/stickymojo/

Inizia dalla posizione: fisso; quindi usa javascript per gestire qualsiasi ridimensionamento, pergamene e persino per specificare un elemento di piè di pagina che non dovrebbe intersecare. Combinando questi approcci otterrete un elemento fisso dall'aspetto lineare. Inoltre, l'abbiamo reso facile per te.

+1

Prova a fare in modo che il tuo browser sia alto 50px. Come accedi al pulsante di download nella barra laterale? – Borek

Problemi correlati