2015-05-18 16 views
5

Sto provando a fare in modo che un contenitore riempia l'intera pagina (o il viewport, a seconda di quale è più grande), ma ha incontrato qualche problema. Sto usando i consigli da questo post: https://stackoverflow.com/a/17555766, per impostare il <html> e il <body> all'altezza del 100%.Perché l'altezza dei contenitori non è ereditata quando è ridimensionata con altezza minima?

Ma ho notato che le .Content div riempie solo la finestra quando l'altezza <body> è impostato con height: 100%, ma non con min-height: 100%. Perché? Perché lo .Content non assume l'altezza dello <body> quando è impostato con min-height? C'è una soluzione per questo (senza posizionamento assoluto o altezze fisse)?

html

<html> 
    <body> 
    <div class="Content">Content</div> 
    </body> 
</html> 

css

* { 
    margin: 0; 
    padding: 0; 
} 

html { 
    height: 100%; 
} 

body { 
    /* does not work for .Content: */ 
    min-height: 100%; 
    /* does work for .Content: */ 
    /* height: 100%; */ 
    background: blue; 
} 

.Content { 
    background: red; 
    min-height: 100%; 
} 

codepen: http://codepen.io/anon/pen/mJEMVX

P.S .: quando l'altezza <body> è impostato con height: 100%, sia il lavoro min-height: 100% e height: 100% come previsto per .Content.

+2

Immagino che il motivo sottostante sia la dipendenza circolare tra l'altezza del corpo e l'altezza del contenuto. Immagina che ci sia un altro elemento dopo il '.content'. Ora, se il contenuto si espande al 100%, anche il corpo deve espandersi, il che farebbe espandere ulteriormente il contenuto. Probabilmente il motivo per cui la specifica definisce una percentuale di altezza come quella che fa è rompere questa dipendenza circolare. –

+0

@Alexey Lebedev: È corretto. – BoltClock

risposta

6

Le altezze percentuali si riferiscono alla proprietà calcolata height dell'elemento padre. Vedi lo spec. Quando si imposta solo sull'elemento body come per la mia risposta alla domanda collegata, la proprietà height non viene toccata al valore predefinito di auto. La proprietà min-height non influisce sul valore calcolato della proprietà height.

Per questo motivo, min-height: 100% sul proprio elemento non ha un'altezza genitore a cui fare riferimento e quindi non funzionerà. Dopo aver impostato height: 100% sull'elemento body, il proprio elemento è in grado di fare riferimento a questa altezza per il proprio calcolo di altezza percentuale.

Come risolvere questo problema dipende dal tipo di layout che si sta tentando di raggiungere. L'unico scopo dell'impostazione di min-height: 100% nell'elemento body è di consentire l'espansione quando l'altezza del contenuto supera quella della finestra risultante in una barra di scorrimento. Se il tuo contenuto sarà sempre esattamente all'altezza della finestra o non vuoi che body generi barre di scorrimento, è semplice come sostituire min-height: 100% con height: 100% su body.

Problemi correlati