2010-04-30 20 views
12

Ho risolto il mio piè di pagina DIV alla parte inferiore della finestra come segue:Prevenire piè di pagina fissa dalla sovrapposizione di contenuti

#Footer 
{ 
    position: fixed; 
    bottom: 0; 
} 

Questo metodo funziona bene se non c'è molto contenuto della pagina. Tuttavia, se il contenuto riempie l'intera altezza della pagina (ovvero la barra di scorrimento verticale è visibile) il piè di pagina si sovrappone al contenuto, cosa che non lo farò.

Come posso far sì che il piè di pagina si attacchi alla parte inferiore della finestra, ma non si sovrapponga mai al contenuto?

risposta

1

provare a impostare l'attributo grado di statica

position: static; 
2

Il problema è che fixed posizione tira fuori di flusso di documenti. È possibile aggiungere margin-bottom al contenuto del corpo pari all'altezza di #Footer. Ciò assicurerà che ci sia sempre uno spazio vuoto dietro il piè di pagina uguale alla sua altezza, impedendogli di sovrapporre il contenuto.

5

Una soluzione moderna "sticky footer" utilizza flexbox.

tl; dr:: impostare contenitore (corpo) per display:flex e il bambino (piè di pagina) che si desidera spostare verso il basso per margin-top:auto.

Per prima cosa, impostiamo il corpo a "flettere" verticalmente i suoi elementi, assicurandoci che sia al 100% di altezza.

Quindi si imposta flex: 0 0 50px sull'elemento footer, che significa: "non crescere, non ridurlo e avere un'altezza di 50 px". Potremmo infatti omettere interamente l'attributo flex e andare semplicemente con height:50px.

Possiamo impostare display:flex su cose come il <body> in sé un po 'incautamente, perché figli di un contenitore flessibile hanno un valore implicito di flex: 0 1 auto se omesso, che è (quasi) equivalente a flex:none (che è una scorciatoia per flex:0 0 auto)

È lo margin:auto che ci dà quello che vogliamo. Applicati all'interno di un contenitore flessibile, i margini automatici assumono un nuovo significato, invece del solito "ottieni uguale quantità di spazio libero", significano "assorbire TUTTO lo spazio disponibile disponibile".

Dal spec (8.1. Aligning with auto margins):

Prima di allineamento tramite giustificare il contenuto e allineare-sé, qualsiasi spazio libero positiva è distribuito per i margini di auto in quella dimensione.

Detto più simply:

Se si applica margini auto a un elemento flessibile, tale elemento verrà automaticamente estendere il suo margine specificato per occupare lo spazio extra in flessione contenitore

A parte: il "normale" approccio al layout di una flexbox sarebbe probabilmente quello di flettere al 100% verticalmente l'ala della sezione centrale <div id="main>...</div>, quale anche farebbe un piè di pagina "bastone" alla parte inferiore. Questo approccio ci mostra che il modello di box flessibile è, infatti, abbastanza flessibile da consentirci di ridimensionare/spostare elementi isolati.

body { 
 
    display: flex; 
 
    flex-direction: column; 
 
    min-height: 100vh; 
 
} 
 

 
#footer { 
 
    background-color: #efefef; 
 
    flex: 0 0 50px;/*or just height:50px;*/ 
 
    margin-top: auto; 
 
}
<p>we've assumed only that there's random space-taking content above the footer...</p> 
 

 
<p>lorem ipsum dolor flex...</p> 
 
<div> 
 
    <p>random content.</p><p>random content.</p><p>random content.</p><p>random content.</p> 
 
</div> 
 
<div id="footer">FOOTER</div>

0

Questa è un'altra soluzione che uso utilizzando jQuery. Per ottenerlo, non è necessario programmare molto e hai solo bisogno di HTML.

<!doctype html> 
 
<html> 
 

 
<head> 
 
    <meta charset="utf-8"> 
 
    <title>Your title</title> 
 
    <link rel="stylesheet" href="https://code.jquery.com/mobile/1.4.5/jquery.mobile-1.4.5.min.css"> 
 
    <script src="https://code.jquery.com/jquery-1.11.3.min.js"></script> 
 
    <script src="https://code.jquery.com/mobile/1.4.5/jquery.mobile-1.4.5.min.js"></script> 
 
</head> 
 

 
<body> 
 
    <div data-role="page"> 
 
    <div data-role="header" data-position="fixed"> 
 
     <h1>Your Header</h1> 
 
    </div> 
 
    <div data-role="main" class="ui-content"> 
 
     <p style="font-size: 300%;"> 
 
     Some text to enable scrolling... 
 
     Some text to enable scrolling... 
 
     Some text to enable scrolling... 
 
     Some text to enable scrolling... 
 
     Some text to enable scrolling... 
 
     Some text to enable scrolling... 
 
     Some text to enable scrolling... 
 
     Some text to enable scrolling... 
 
     Some text to enable scrolling... 
 
     Some text to enable scrolling... 
 
     Some text to enable scrolling... 
 
     Some text to enable scrolling... 
 
     Some text to enable scrolling... 
 
     Some text to enable scrolling... 
 
     Some text to enable scrolling... 
 
     Some text to enable scrolling... 
 
     Some text to enable scrolling... 
 
     Some text to enable scrolling... 
 
     Some text to enable scrolling... 
 
     Some text to enable scrolling... 
 
     Some text to enable scrolling... 
 
     Some text to enable scrolling... 
 
     Some text to enable scrolling... 
 
     Some text to enable scrolling... 
 
     Some text to enable scrolling... 
 
     Some text to enable scrolling... 
 
     Some text to enable scrolling... 
 
     Some text to enable scrolling... 
 
     Some text to enable scrolling... 
 
     Some text to enable scrolling... 
 
     Some text to enable scrolling... 
 
     Some text to enable scrolling... 
 
     Some text to enable scrolling... 
 
     Some text to enable scrolling... 
 
     Some text to enable scrolling... 
 
     Some text to enable scrolling... 
 
     Some text to enable scrolling... 
 
     Some text to enable scrolling... 
 
     Some text to enable scrolling... 
 
     Some text to enable scrolling... 
 
     Some text to enable scrolling... 
 
     Some text to enable scrolling... 
 
     Some text to enable scrolling... 
 
     Some text to enable scrolling... 
 
     Some text to enable scrolling... 
 
     Some text to enable scrolling... 
 
     Some text to enable scrolling... 
 
     Some text to enable scrolling... 
 
     Some text to enable scrolling... 
 
     </p> 
 
    </div> 
 
    <div data-role="footer" data-position="fixed"> 
 
     <h1>Your Footer</h1> 
 
    </div> 
 
    </div> 
 
</body> 
 

 
</html>

Questo è da w3schools - fixed toolbars, ma ho pensato che potrebbe essere più utile di alcune altre risposte.

Problemi correlati