Fai in modo che il corpo abbia il 100% dell'altezza del browser


845

Voglio fare in modo che il corpo abbia il 100% dell'altezza del browser. Posso farlo usando i CSS?

Ho provato a impostare height: 100%, ma non funziona.

Voglio impostare un colore di sfondo per una pagina in modo da riempire l'intera finestra del browser, ma se la pagina ha poco contenuto ottengo una brutta barra bianca in fondo.


Risposte:


1092

Prova a impostare l'altezza dell'elemento html anche al 100%.

html, 
body {
    height: 100%;
}

Body cerca il suo genitore (HTML) per come ridimensionare la proprietà dinamica, quindi anche l'elemento HTML deve avere la sua altezza impostata.

Tuttavia, il contenuto del corpo dovrà probabilmente cambiare in modo dinamico. L'impostazione dell'altezza minima al 100% raggiungerà questo obiettivo.

html {
  height: 100%;
}
body {
  min-height: 100%;
}

6
grazie, questo sembra rimuovere la barra bianca su pagine brevi, ma ora su pagine la cui altezza supera l'altezza della finestra del browser ottengo una barra bianca 20px in basso: |
bodyofheat

48
ok l'ho scoperto! funziona se aggiungo html, body {altezza minima: 100%;}: D
bodyofheat

12
Nota: se usi la body {min-height}versione non puoi usare il .body-child{height: 100%}trucco.
Salman A

14
la migliore risposta è con CSS3, usando vh-> body { height: 100vh }- controlla la risposta qui stackoverflow.com/a/25829844/2680216
Adriano Resende

2
@bFunc Ho questo problema con Chrome. html {height: 100%;} body {height: auto} fa il lavoro.
GBMan,

217

In alternativa a impostare sia le htmle bodyelemento di altezze 100%, si potrebbe anche usare lunghezze finestra-percentuali.

5.1.2. Lunghezze percentuali viewport: le unità 'vw', 'vh', 'vmin', 'vmax'

Le lunghezze in percentuale della finestra sono relative alla dimensione del blocco contenente iniziale. Quando l'altezza o la larghezza del blocco contenitore iniziale viene modificata, vengono ridimensionate di conseguenza.

In questo caso, è possibile utilizzare il valore 100vh, ovvero l'altezza della finestra.

Esempio qui

body {
  height: 100vh;
  padding: 0;
}
body {
  min-height: 100vh;
  padding: 0;
}

Questo è supportato nella maggior parte dei browser moderni: il supporto è disponibile qui .


4
Oltre al fatto che questo è semplicissimo, è anche bene che adottiamo nuove pratiche.
Pan Wangperawong,

3
@niaster Sono assolutamente d'accordo. Il supporto del browser è già migliorato da quando ho pubblicato anche questa risposta :)
Josh Crozier,

1
@incarnate Sì .. peccato che non sia :) Sembra che l'ultima volta che l'OP fosse online sia stato il 7/11/11 (la data in cui è stata posta la domanda ..) Quindi dubito che cambierà.
Josh Crozier,

18
Non so perché dobbiamo iniziare a "adottare nuove pratiche" quando la vecchia pratica funziona bene. Non c'è alcun vantaggio nel fare questo: il codice non è più piccolo, né funziona meglio, e ci sono ancora browser là fuori che non supportano vw / vh.
cimmanon,

3
Il foglio di stile dell'agente utente di Chrome aggiunge un margine di 8 px al corpo per impostazione predefinita (non sono sicuro di altri browser), quindi ho dovuto aggiungere anche margin: 0;per evitare una barra di scorrimento verticale persistente a destra.
Andy Raddatz,

121

Se hai un'immagine di sfondo, ti consigliamo di impostarla invece:

html{
  height: 100%;
}
body {
  min-height: 100%;
}

Questo assicura che il tuo body tag possa continuare a crescere quando il contenuto è più alto del viewport e che l'immagine di sfondo continui a ripetere / scorrere / qualunque cosa quando inizi a scorrere verso il basso.

Ricorda se si deve supportare IE6 è necessario trovare un modo per cuneo in height:100%per il corpo, IE6 tratta heightpiace min-heightcomunque.


Funziona anche quando c'è un flexbox globale proprio sotto il corpo (body> # flexbox-wrapper)
justnorris

2
Questa è la risposta corretta, poiché la risposta accettata non crescerà man mano che il contenuto diventa più lungo di una singola schermata.
Semplicemente il

Grazie mille, Angry Dan, quel brutto spazio bianco in fondo al mio sito è sparito!
Boris Burkov,

Naturalmente, poiché questa domanda è stata posta, visualizzare le dimensioni basate sulla porta è diventata una Cosa. Quindi ora puoi semplicemente farebody{min-height: 100vh}
Angry Dan

È inoltre necessario body { height: auto; }che le barre di scorrimento non vengano visualizzate in FireFox. a parte questo, funziona perfettamente.
Torxato il

82

Se vuoi mantenere i margini sul corpo e non vuoi le barre di scorrimento, usa i seguenti css:

html { height:100%; }
body { position:absolute; top:0; bottom:0; right:0; left:0; }

L'impostazione body {min-height:100%} ti darà barre di scorrimento.

Guarda la demo su http://jsbin.com/aCaDahEK/2/edit?html , output .


7
Grazie per l'unica risposta funzionante :) Suppongo che "assoluto" l'abbia fatto funzionare
Dmitry Matveev l'

Funziona bene per me in Firefox senza barre di scorrimento, grazie. La risposta accettata no.
Andrew,

@Andrew Stranamente, questo dà barre di scorrimento in FireFox. Ciò che è necessario tuttavia per la risposta accettata è anche height: auto;nella bodyclausola per far apparire le barre di scorrimento.
Torxato il

@Torxed Ottengo ancora barre di scorrimento in FireFox anche con questo. Aggiungere l'impostazione automatica in altezza non sembra funzionare per me :(
Travis Crum

Questo non ha funzionato per me in Chrome 56.0.2924.87 (64 bit).
Ryan


24

Dopo aver testato vari scenari, credo che questa sia la soluzione migliore:

html {
    width: 100%;
    height: 100%;
    display: table;
}

body {
    width: 100%;
    display: table-cell;
}

html, body {
    margin: 0px;
    padding: 0px;
}

È dinamico in quanto il htmle ilbody elementi si espanderanno automaticamente se il loro contenuto di overflow. Ho provato questo nell'ultima versione di Firefox, Chrome e IE 11.

Vedi il violino completo qui (per i tuoi odiatori di tavolo là fuori, puoi sempre cambiarlo per usare un div):

https://jsfiddle.net/71yp4rh1/9/


Detto questo, ci sono diversi problemi con le risposte pubblicate qui .

html, body {
    height: 100%;
}

L'uso del CSS sopra farà sì che l'html e l'elemento body NON si espandano automaticamente se il loro contenuto trabocca come mostrato qui:

https://jsfiddle.net/9vyy620m/4/

Mentre scorri, noti lo sfondo ripetuto? Ciò accade perché l'altezza dell'elemento body NON è aumentata a causa del trabocco della tabella figlio. Perché non si espande come nessun altro elemento a blocchi? Non ne sono sicuro. Penso che i browser lo gestiscano in modo errato.

html {
    height: 100%;
}

body {
    min-height: 100%;
}

L'impostazione di un'altezza minima del 100% sul corpo, come mostrato sopra, causa altri problemi. Se lo fai, non puoi specificare che un div o una tabella figlio occupi un'altezza percentuale come mostrato qui:

https://jsfiddle.net/aq74v2v7/4/

Spero che questo aiuti qualcuno. Penso che i browser lo gestiscano in modo errato. Mi aspetto che l'altezza del corpo si adegui automaticamente diventando più grande se i suoi figli traboccano. Tuttavia, ciò non sembra accadere quando si utilizza il 100% di altezza e 100% di larghezza.


3
Ho provato tutte le risposte più votate su questa pagina, ma nessuna ha funzionato. Questo ha fatto!
Ryan

Questa risposta dovrebbe essere quella accettata. Non height: 100vhè nemmeno una soluzione. L'impostazione del contenitore superiore su 100vhelevata e 100vwpotrebbe causare problemi se il contenitore ha barre di scorrimento, quindi sarà più grande di quanto dovrebbe essere (e potrebbe rendere le barre di scorrimento inutilmente visibili). Ciò height: 100vhha causato anche problemi per noi sui nuovi dispositivi Android (ad esempio Xiaomi Mi 9 con Android 9), in cui il contenitore sarebbe più grande dello schermo stesso e renderebbe inutile la barra di scorrimento verticale al corpo del documento.
jtompl,

21

Quello che uso all'inizio di ogni file CSS che uso è il seguente:

html, body{
    margin: 0;

    padding: 0;

    min-width: 100%;
    width: 100%;
    max-width: 100%;

    min-height: 100%;
    height: 100%;
    max-height: 100%;
}

Il margine di 0 garantisce che gli elementi HTML e BODY non vengano posizionati automaticamente dal browser per avere spazio a sinistra o a destra di essi.

Il riempimento di 0 assicura che gli elementi HTML e BODY non spingano automaticamente tutto al loro interno verso il basso o verso destra a causa delle impostazioni predefinite del browser.

Le varianti di larghezza e altezza sono impostate al 100% per garantire che il browser non le ridimensioni in previsione di avere effettivamente un margine o un'imbottitura impostati automaticamente, con il minimo e il massimo impostati nel caso in cui accadano cose strane e inspiegabili, anche se tu probabilmente non ne hanno bisogno.

Questa soluzione significa anche che, come ho fatto quando ho iniziato per la prima volta su HTML e CSS diversi anni fa, non dovrai dare il tuo primo <div>a margin:-8px;per adattarlo all'angolo della finestra del browser.


Prima di pubblicare, ho guardato l'altro mio progetto CSS a schermo intero e ho scoperto che tutto quello che ho usato lì era solo body{margin:0;}e nient'altro, che ha funzionato bene nei 2 anni in cui ci ho lavorato.

Spero che questa risposta dettagliata aiuti, e sento il tuo dolore. Ai miei occhi, è stupido che i browser stabiliscano un limite invisibile a sinistra e talvolta sul lato superiore del corpo / elementi html.


Potresti spiegare per favore, qual è il possibile scopo di width: 100%body e html elements? Sì, capisco, dal punto di vista pratico, body { margin: 0; }dovrebbe essere sufficiente nella maggior parte dei casi. Voglio solo capire più a fondo.
john cj,

21

Un rapido aggiornamento

html, body{
    min-height:100%;
    overflow:auto;
}

Una soluzione migliore con i CSS di oggi

html, body{ 
  min-height: 100vh;
  overflow: auto;
}

2
In che modo offre qualcosa di diverso rispetto alle risposte esistenti?
cimmanon,

3
Ho provato anche altri, ma non ha funzionato per me. Questo ha funzionato, quindi può essere una soluzione per qualcuno bisognoso. @cimmanon
Jayant Varshney il

Devo dire che questo funziona per me a parte altre risposte ad alto voto. overflow: autoqui fai la magia. A proposito io uso Chrome.
SkuraZZ,

L'unica opzione (ho trovato) che consente al contenuto di overflow di ridimensionare l'altezza.
Daniel Sharp,

6

Qui:

html,body{
    height:100%;
}

body{
  margin:0;
  padding:0
  background:blue;
}

4

Puoi anche usare JS se necessario

var winHeight = window.innerHeight    || 
document.documentElement.clientHeight || 
document.body.clientHeight;

var pageHeight = $('body').height();
if (pageHeight < winHeight) {
    $('.main-content,').css('min-height',winHeight)
}

Ma per questo è necessario aggiungere più cose del necessario come la libreria jQuery e scrivere in JavaScript mentre questo può essere fatto in CSS.
Sviluppatore front-end

3

Provare

<html style="width:100%; height:100%; margin: 0; padding: 0;">
<body style="overflow:hidden; width:100%; height:100%; margin:0; padding:0;">

2
Potresti spiegare per favore, qual è il possibile scopo di width: 100%body e html elements? Sì, capisco, dal punto di vista pratico, body { margin: 0; }nella maggior parte dei casi dovrebbe essere sufficiente. Voglio solo capire più a fondo.
john cj,

3

Per favore controlla questo:

* {margin: 0; padding: 0;}    
html, body { width: 100%; height: 100%;}

Oppure prova il nuovo metodo Altezza della finestra:

html, body { width: 100vw; height: 100vh;}

Viewport: se si utilizza viewport significa che il contenuto dello schermo di qualsiasi dimensione arriva a tutta altezza per lo schermo.


Includi una spiegazione della tua soluzione in modo che gli altri che trovano questa risposta possano capire. Grazie!
Shawn,

Potresti spiegare per favore, qual è il possibile scopo di width: 100%body e html elements?
john cj,

quindi diciamo che ho una tabella con 50 colonne e 1000 righe con numeri compresi tra 1000 e 9999, cosa accadrà a loro, scorreranno oltre la finestra come facciamo normalmente o avranno una barra di scorrimento del tipo di overflow
PirateApp

3

Se non vuoi lavorare per modificare il tuo file CSS e definire autonomamente le regole di altezza, i framework CSS più tipici risolvono anche questo problema con l'elemento body che riempie l'intera pagina, tra l'altro, a proprio agio con più dimensioni delle finestre.

Ad esempio, Tacit CSS framework risolve questo problema immediatamente, in cui non è necessario definire regole e classi CSS e si deve semplicemente includere il file CSS nel proprio HTML.


2
html {
    background: url(images/bg.jpg) no-repeat center center fixed; 
    -webkit-background-size: cover;
    -moz-background-size: cover;
    -o-background-size: cover;
    background-size: cover;
    min-height: 100%;
}
html body {
    min-height: 100%
}

Funziona con tutti i principali browser: FF, Chrome, Opera, IE9 +. Funziona con immagini di sfondo e sfumature. Le barre di scorrimento sono disponibili in base alle esigenze di contenuto.


2

Vorrei usare questo

html, body{
      background: #E73;
      min-height: 100%;
      min-height: 100vh;
      overflow: auto; // <- this is needed when you resize the screen
    }
<html>
    <body>
    </body>
</html>

Il browser utilizzerà min-height: 100vhe se in qualche modo il browser è un po 'più vecchio min-height: 100%sarà il fallback.

Il overflow: autoè necessario se si desidera che il corpo e HTML di espandere la loro altezza quando si ridimensiona lo schermo (a una dimensione cellulare per esempio)



1

tutte le risposte sono corrette al 100% e ben spiegate, ma ho fatto qualcosa di buono e molto semplice per renderlo reattivo.

qui l'elemento prenderà il 100% dell'altezza della porta di visualizzazione ma quando si tratta di visualizzazione mobile non ha un bell'aspetto specialmente sulla vista verticale (mobile), quindi quando la porta di visualizzazione sta diventando più piccola l'elemento collasserà e si sovrapporrà l'uno sull'altro. quindi per renderlo poco reattivo ecco il codice. spero che qualcuno possa ricevere aiuto da questo.

<style>
.img_wrap{
      width:100%;
      background: #777;
}
.img_wrap img{
      display: block;  
      width: 100px;
      height: 100px;
      padding: 50px 0px;
      margin: 0 auto;
}
.img_wrap img:nth-child(2){
      padding-top: 0;
}
</style>

<div class="img_wrap">
  <img src="https://i.pinimg.com/originals/71/84/fc/7184fc63db0516a00e7d86900d957925.jpg" alt="">
  <img src="https://i.pinimg.com/originals/71/84/fc/7184fc63db0516a00e7d86900d957925.jpg" alt="">
</div>

<script>
   var windowHeight = $(window).height();
   var elementHeight = $('.img_wrap').height();

   if( elementHeight > windowHeight ){
       $('.img_wrap').css({height:elementHeight});
   }else{
       $('.img_wrap').css({height:windowHeight});
   }
</script>

ecco la demo di JSfiddle.


0

Qui aggiornamento

html
  {
    height:100%;
  }

body{
     min-height: 100%;
     position:absolute;
     margin:0;
     padding:0; 
}

-1

A proposito dello spazio extra in basso: la tua pagina è un'applicazione ASP.NET? Se è così, probabilmente c'è un involucro quasi tutto nel tuo markup. Non dimenticare di modellare anche il modulo. L'aggiunta overflow:hidden;al modulo potrebbe rimuovere lo spazio aggiuntivo in basso.


6
Non consiglio di usare l'overflow: nascosto a meno che tu non abbia una buona ragione. Scopri perché le cose traboccano e si adattano in modo da non traboccare invece
jontro

-1
@media all {
* {
    margin: 0;
    padding: 0;
}

html, body {
    width: 100%;
    height: 100%;
} }

Potresti spiegare per favore, qual è il possibile scopo di width: 100%body e html elements? Sì, capisco, dal punto di vista pratico, body { margin: 0; }nella maggior parte dei casi dovrebbe essere sufficiente. Voglio solo capire più a fondo.
john cj,

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.