Stellen Sie sicher, dass der Körper 100% der Browserhöhe hat

844

Ich möchte, dass der Körper 100% der Browserhöhe hat. Kann ich das mit CSS machen?

Ich habe versucht einzustellen height: 100%, aber es funktioniert nicht.

Ich möchte eine Hintergrundfarbe für eine Seite festlegen, die das gesamte Browserfenster ausfüllt. Wenn die Seite jedoch nur wenig Inhalt enthält, wird unten ein hässlicher weißer Balken angezeigt.

Körper der Wärme
quelle

Antworten:

1091

Versuchen Sie, die Höhe des HTML-Elements ebenfalls auf 100% einzustellen.

html, 
body {
    height: 100%;
}

Body sucht in seinem übergeordneten Element (HTML) nach Informationen zum Skalieren der dynamischen Eigenschaft. Daher muss für das HTML-Element auch die Höhe festgelegt werden.

Der Inhalt des Körpers muss sich jedoch wahrscheinlich dynamisch ändern. Wenn Sie die Mindesthöhe auf 100% einstellen, wird dieses Ziel erreicht.

html {
  height: 100%;
}
body {
  min-height: 100%;
}
BentOnCoding
quelle
6
danke, dies scheint den weißen Balken auf kurzen Seiten zu entfernen, aber jetzt auf Seiten, deren Höhe die Höhe des Browserfensters überschreitet, wird unten ein weißer 20-Pixel-Balken angezeigt: |
Bodyofheat
48
ok ich habe es herausgefunden! es funktioniert, wenn ich HTML hinzufüge, body {min-height: 100%;}: D
bodyofheat
12
Hinweis: Wenn Sie die body {min-height}Version verwenden, können Sie keinen .body-child{height: 100%}Trick verwenden.
Salman A
14
Die beste Antwort ist mit CSS3, mit vh-> body { height: 100vh }- Antwort hier überprüfen stackoverflow.com/a/25829844/2680216
Adriano Resende
2
@bFunc Ich habe dieses Chrome-Problem zu. html {height: 100%;} body {height: auto} erledigt den Job.
GBMan
217

Alternativ zum Festlegen der Höhe des Elements htmlund des bodyElements 100%können Sie auch die prozentuale Länge des Ansichtsfensters verwenden.

5.1.2. Prozentuale Länge des Ansichtsfensters: die Einheiten 'vw', 'vh', 'vmin', 'vmax'

Die prozentualen Längen des Ansichtsfensters beziehen sich auf die Größe des anfänglichen enthaltenden Blocks. Wenn die Höhe oder Breite des anfänglich enthaltenen Blocks geändert wird, werden sie entsprechend skaliert.

In diesem Fall können Sie den Wert verwenden, bei 100vhdem es sich um die Höhe des Ansichtsfensters handelt.

Beispiel hier

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

Dies wird in den meisten modernen Browsern unterstützt - Unterstützung finden Sie hier .

Josh Crozier
quelle
4
Neben der Tatsache, dass dies kinderleicht ist, ist es auch gut, dass wir neue Praktiken anwenden.
Pan Wangperawong
3
@niaster Ich stimme definitiv zu. Die Browser-Unterstützung hat sich bereits verbessert, seit ich diese Antwort ebenfalls gepostet habe :)
Josh Crozier
1
@incarnate Ja .. schade, dass es nicht so ist :) Es sieht so aus, als ob das OP das letzte Mal online war am 11.07.11 (das Datum, an dem die Frage gestellt wurde ..). Ich bezweifle, dass sich dies ändern wird.
Josh Crozier
18
Ich bin mir nicht sicher, warum wir anfangen müssen, "neue Praktiken anzuwenden", wenn die alte Praxis gut funktioniert. Dies hat keinen Vorteil: Der Code ist weder kleiner noch leistungsfähiger, und es gibt immer noch Browser, die vw / vh nicht unterstützen.
Cimmanon
3
Das Stylesheet für Chrome-Benutzeragenten fügt dem Text standardmäßig einen Rand von 8 Pixel hinzu (bei anderen Browsern nicht sicher). Daher musste ich auch hinzufügen margin: 0;, um eine dauerhafte vertikale Bildlaufleiste rechts zu vermeiden.
Andy Raddatz
121

Wenn Sie ein Hintergrundbild haben, möchten Sie dies stattdessen einstellen:

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

Dies stellt sicher, dass Ihr Body-Tag weiter wachsen kann, wenn der Inhalt größer als das Ansichtsfenster ist, und dass das Hintergrundbild weiterhin wiederholt / gescrollt / was auch immer wird, wenn Sie mit dem Scrollen nach unten beginnen.

Denken Sie daran , wenn Sie IE6 unterstützen müssen Sie müssen einen Weg finden , in verkeilen height:100%für Körper, IE6 Leckereien heightmag min-heightsowieso.

Wütender Dan
quelle
Funktioniert auch, wenn es eine globale Flexbox direkt unter body gibt (body> # flexbox-wrapper)
justnorris
2
Dies ist die richtige Antwort, da die akzeptierte Antwort nicht wächst, wenn der Inhalt länger als ein einzelner Bildschirm wird.
SimplGy
Vielen Dank, Angry Dan, dass der hässliche weiße Bereich am Ende meiner Website verschwunden ist!
Boris Burkov
Da diese Frage gestellt wurde, wurden die auf Ansichtsports basierenden Dimensionen natürlich zu einer Sache. Jetzt können Sie es einfach tunbody{min-height: 100vh}
Angry Dan
Außerdem müssen body { height: auto; }Bildlaufleisten in FireFox nicht angezeigt werden. anders als das funktioniert perfekt.
Torxed
82

Wenn Sie die Ränder am Körper behalten möchten und keine Bildlaufleisten möchten, verwenden Sie das folgende CSS:

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

Durch die Einstellung erhalten body {min-height:100%} Sie Bildlaufleisten.

Siehe Demo unter http://jsbin.com/aCaDahEK/2/edit?html,output .

Daniel Patru
quelle
7
Vielen Dank für die einzige funktionierende Antwort :) Ich gehe davon aus, dass 'absolut' es funktioniert hat
Dmitry Matveev
Funktioniert gut für mich in Firefox ohne Bildlaufleisten, danke. Die akzeptierte Antwort nicht.
Andrew
@ Andrew Seltsamerweise gibt dies Bildlaufleisten in FireFox. Was Sie jedoch für die akzeptierte Antwort benötigen, finden Sie auch height: auto;in der bodyKlausel, damit jetzt Bildlaufleisten angezeigt werden.
Torxed
@Torxed Damit bekomme ich auch in FireFox noch Bildlaufleisten. Das Hinzufügen der automatischen Einstellung zur Höhe schien für mich nicht zu funktionieren :(
Travis Crum
Dies funktionierte bei mir in Chrome 56.0.2924.87 (64-Bit) nicht.
Ryan
30
html, body
{
  height: 100%;
  margin: 0;
  padding: 0;
}
Wels
quelle
24

Nach dem Testen verschiedener Szenarien halte ich dies für die beste Lösung:

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

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

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

Es ist insofern dynamisch, als die htmlund die bodyElemente automatisch erweitert werden, wenn ihr Inhalt überläuft. Ich habe dies in der neuesten Version von Firefox, Chrome und IE 11 getestet.

Sehen Sie sich hier die vollständige Geige an (für Ihre Tischhasser da draußen können Sie sie jederzeit ändern, um ein Div zu verwenden):

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


Nachdem dies gesagt wurde, gibt es mehrere Probleme mit den hier veröffentlichten Antworten .

html, body {
    height: 100%;
}

Wenn Sie das obige CSS verwenden, werden HTML und Body-Element NICHT automatisch erweitert, wenn ihr Inhalt wie hier gezeigt überläuft:

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

Beachten Sie beim Scrollen den sich wiederholenden Hintergrund? Dies geschieht, weil die Höhe des Körperelements aufgrund des Überlaufens der untergeordneten Tabelle NICHT zugenommen hat. Warum wird es nicht wie jedes andere Blockelement erweitert? Ich bin mir nicht sicher. Ich denke, Browser behandeln dies falsch.

html {
    height: 100%;
}

body {
    min-height: 100%;
}

Das Einstellen einer Mindesthöhe von 100% am Körper wie oben gezeigt verursacht andere Probleme. Wenn Sie dies tun, können Sie nicht angeben, dass ein untergeordnetes Div oder eine untergeordnete Tabelle eine prozentuale Höhe einnimmt, wie hier gezeigt:

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

Hoffe das hilft jemandem. Ich denke, Browser behandeln dies falsch. Ich würde erwarten, dass sich die Körpergröße automatisch anpasst, wenn die Kinder überlaufen. Dies scheint jedoch nicht zu passieren, wenn Sie 100% Höhe und 100% Breite verwenden.

Besitzen
quelle
3
Ich habe alle hochstimmigen Antworten auf dieser Seite ausprobiert, aber keine hat funktioniert. Dieser hat es getan!
Ryan
Diese Antwort sollte akzeptiert werden. Das height: 100vhist auch keine Lösung. Wenn Sie Ihren oberen Container auf 100vhhoch 100vweinstellen und Probleme verursachen, wenn der Container über Bildlaufleisten verfügt, ist dieser größer als er sein sollte (und die Bildlaufleisten können unnötig sichtbar sein). Die height: 100vhauch verursacht Probleme für uns auf neueren Android - Geräte (zB Xiaomi Mi 9 mit Android 9), wobei der Behälter größer als der Bildschirm würde selbst und würde unnötige vertikale Bildlaufleiste auf das Dokument Körper machen.
Jtompl
21

Was ich zu Beginn buchstäblich jeder von mir verwendeten CSS-Datei verwende, ist Folgendes:

html, body{
    margin: 0;

    padding: 0;

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

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

Der Rand von 0 stellt sicher, dass die HTML- und BODY-Elemente vom Browser nicht automatisch positioniert werden, um links oder rechts davon Platz zu haben.

Das Auffüllen von 0 stellt sicher, dass die HTML- und BODY-Elemente aufgrund von Browser-Standardeinstellungen nicht automatisch alles in ihnen nach unten oder rechts drücken.

Die Breiten- und Höhenvarianten sind auf 100% eingestellt, um sicherzustellen, dass der Browser die Größe nicht ändert, um tatsächlich einen automatisch eingestellten Rand oder Abstand zu erhalten, wobei Min und Max festgelegt werden, nur für den Fall, dass seltsame, unerklärliche Dinge passieren, obwohl Sie wahrscheinlich brauche ich sie nicht.

Diese Lösung bedeutet auch, dass Sie, wie ich es vor einigen Jahren mit HTML und CSS angefangen habe, nicht Ihr erstes <div>a geben müssen margin:-8px;, damit es in die Ecke des Browserfensters passt.


Bevor ich gepostet habe, habe ich mir mein anderes Vollbild-CSS-Projekt angesehen und festgestellt, dass alles, was ich dort verwendet habe, nur body{margin:0;}und nichts anderes war, was in den 2 Jahren, in denen ich daran gearbeitet habe, gut funktioniert hat.

Hoffe, diese detaillierte Antwort hilft, und ich fühle Ihren Schmerz. In meinen Augen ist es dumm, dass Browser eine unsichtbare Grenze auf der linken und manchmal oberen Seite der body / html-Elemente setzen.

MineAndCraft12
quelle
Könnten Sie bitte erklären, was der mögliche Zweck width: 100%für Body- und HTML-Elemente ist? Ja, ich verstehe, dass aus praktischer Sicht body { margin: 0; }in den meisten Fällen ausreichen sollte. Ich möchte nur gründlicher verstehen.
John CJ
21

Ein schnelles Update

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

Eine bessere Lösung mit dem heutigen CSS

html, body{ 
  min-height: 100vh;
  overflow: auto;
}
Jayant Varshney
quelle
2
Wie unterscheidet sich dies von den vorhandenen Antworten?
Cimmanon
3
Ich habe auch andere ausprobiert, aber bei mir nicht funktioniert. Dieser hat funktioniert, also kann er eine Lösung für jemanden sein, der es braucht. @ Cimmanon
Jayant Varshney
Ich muss sagen, dass dies für mich anders funktioniert als andere Antworten mit hohen Stimmen. overflow: autoHier mache die Magie. Übrigens benutze ich Chrome.
SkuraZZ
Einzige Option (die ich gefunden habe), mit der überlaufende Inhalte die Größe ändern können.
Daniel Sharp
6

Hier:

html,body{
    height:100%;
}

body{
  margin:0;
  padding:0
  background:blue;
}
Eddie
quelle
4

Bei Bedarf können Sie auch JS verwenden

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

var pageHeight = $('body').height();
if (pageHeight < winHeight) {
    $('.main-content,').css('min-height',winHeight)
}
Kräuter
quelle
Dazu müssen Sie jedoch mehr Dinge als erforderlich hinzufügen, z. B. die jQuery-Bibliothek und das Schreiben in JavaScript, während dies in CSS erfolgen kann.
Front-End-Entwickler
3

Versuchen

<html style="width:100%; height:100%; margin: 0; padding: 0;">
<body style="overflow:hidden; width:100%; height:100%; margin:0; padding:0;">
ak-SE
quelle
2
Könnten Sie bitte erklären, was der mögliche Zweck width: 100%für Body- und HTML-Elemente ist? Ja, ich verstehe, dass aus praktischer Sicht body { margin: 0; }in den meisten Fällen ausreichen sollte. Ich möchte nur gründlicher verstehen.
John CJ
3

Bitte prüfen Sie das:

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

Oder probieren Sie die neue Methode Ansichtsfensterhöhe:

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

Ansichtsfenster: Wenn Sie das Ansichtsfenster verwenden, bedeutet dies, dass der Bildschirminhalt unabhängig von der Größe des Bildschirms in voller Höhe angezeigt wird.

Ayyappan K.
quelle
Bitte fügen Sie eine Erklärung Ihrer Lösung bei, damit andere, die diese Antwort finden, sie verstehen können. Vielen Dank!
Shawn
Könnten Sie bitte erklären, was der mögliche Zweck width: 100%für Body- und HTML-Elemente ist?
John CJ
Nehmen wir also an, ich habe eine Tabelle mit 50 Spalten und 1000 Zeilen mit Zahlen zwischen 1000 und 9999, was passiert mit ihnen, werden sie wie
gewohnt
3

Wenn Sie nicht Ihre eigene CSS-Datei bearbeiten und die Höhenregeln selbst definieren möchten, lösen die typischsten CSS-Frameworks dieses Problem auch, indem das body-Element die gesamte Seite ausfüllt und unter anderem mehrere Probleme verursacht Größen von Ansichtsfenstern.

Das Tacit CSS-Framework löst dieses Problem beispielsweise sofort , wenn Sie keine CSS-Regeln und -Klassen definieren müssen und nur die CSS-Datei in Ihren HTML-Code aufnehmen.

Filipe Freire
quelle
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%
}

Funktioniert für alle gängigen Browser: FF, Chrome, Opera, IE9 +. Funktioniert mit Hintergrundbildern und Verläufen. Bildlaufleisten sind je nach Bedarf verfügbar.

Corni
quelle
2

Ich würde das benutzen

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

Der Browser wird verwenden min-height: 100vhund wenn der Browser irgendwie etwas älter ist, min-height: 100%wird dies der Fallback sein.

Dies overflow: autoist erforderlich, wenn Sie möchten, dass der Körper und HTML ihre Höhe erhöhen, wenn Sie die Größe des Bildschirms ändern (z. B. auf eine mobile Größe).

medBouzid
quelle
1

Alle Antworten sind 100% richtig und gut erklärt, aber ich habe etwas Gutes und sehr Einfaches getan, um es ansprechbar zu machen.

Hier nimmt das Element eine 100% ige Höhe des Ansichtsfensters ein, aber wenn es um die mobile Ansicht geht, sieht es in der Porträtansicht (mobil) nicht besonders gut aus. Wenn der Ansichtsfenster kleiner wird, wird das Element kollabieren und sich überlappen. Um es hier wenig ansprechbar zu machen, ist Code. Ich hoffe, jemand wird dabei Hilfe bekommen.

<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>

Hier ist JSfiddle Demo.

wasimv09
quelle
0

Hier Update

html
  {
    height:100%;
  }

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

Über den zusätzlichen Platz unten: Ist Ihre Seite eine ASP.NET-Anwendung? Wenn ja, ist wahrscheinlich fast alles in Ihrem Markup verpackt. Vergessen Sie nicht, das Formular ebenfalls zu stylen. Durch Hinzufügen overflow:hidden;zum Formular wird möglicherweise der zusätzliche Platz unten entfernt.

Cockypup
quelle
6
Ich empfehle nicht, Überlauf zu verwenden: versteckt, es sei denn, Sie haben einen wirklich guten Grund. Finden Sie heraus, warum die Dinge überlaufen, und passen Sie sie an, damit sie nicht überlaufen
jontro
-1
@media all {
* {
    margin: 0;
    padding: 0;
}

html, body {
    width: 100%;
    height: 100%;
} }
Stellen Sie sich Breaker vor
quelle
Könnten Sie bitte erklären, was der mögliche Zweck width: 100%für Body- und HTML-Elemente ist? Ja, ich verstehe, dass aus praktischer Sicht body { margin: 0; }in den meisten Fällen ausreichen sollte. Ich möchte nur gründlicher verstehen.
John CJ
-5

CSS3 hat eine neue Methode.

 height:100vh

Dadurch entspricht ViewPort zu 100% der Höhe.

So sollte Ihr Code sein

 body{
 height:100vh; 
 }
Silvachathura
quelle
5
Wie unterscheidet sich das von der Antwort, die ich vor einem Jahr im September gepostet habe?
Josh Crozier
1
warum antwortest du doppelt?
Adriano Resende