Machen Sie ein div-füllen Sie die Höhe des verbleibenden Platz auf dem Bildschirm
Arbeite ich an einer web-Anwendung, wo ich will, die Inhalte zu füllen, die Höhe des gesamten Bildschirms.
Die Seite hat einen header, der ein logo und Konto-Informationen. Dies könnte ein beliebiger Höhe. Ich will den content div zu füllen den rest der Seite nach unten.
Ich habe einen header div
einem Inhalt div
. Im moment bin ich mit Hilfe einer Tabelle für das layout etwa so:
CSS-und HTML -
CSS:
#page {
height: 100%; width: 100%
}
#tdcontent {
height: 100%;
}
#content {
overflow: auto; /* or overflow: hidden; */
}
HTML:
<table id="page">
<tr>
<td id="tdheader">
<div id="header">...</div>
</td>
</tr>
<tr>
<td id="tdcontent">
<div id="content">...</div>
</td>
</tr>
</table>
Die gesamte Höhe der Seite gefüllt ist, und kein scrollen erforderlich ist.
Für alles, was in die content-div-Einstellung top: 0;
wird es direkt unter dem header. Manchmal wird der Inhalt einer realen Tabelle, mit seiner Höhe auf 100% gesetzt. Setzen header
innen content
wird nicht zulassen, dass dies funktioniert.
Gibt es eine Möglichkeit, den gleichen Effekt erzielen, ohne die table
?
Update:
Elemente innerhalb des content - div
haben Höhen eingestellt Prozentsätze als gut. So etwas zu 100% innerhalb des div
füllen Sie es auf den Boden. So werden zwei Elemente bei 50%.
Update 2:
Beispielsweise, wenn der header nimmt 20% des Bildschirms in der Höhe, einer Tabelle angegeben, bei 50% innerhalb #content
dauern würde, bis 40% der Platz auf dem Bildschirm. So weit, wickelt das ganze in einer Tabelle ist das einzige, was funktioniert.
- Für alle, stolpern hier in der Zukunft, können Sie die gewünschte Tabelle in den meisten Browsern, ohne die Tabelle markieren, indem Sie mit
display:table
und die dazugehörigen Eigenschaften finden Sie unter die Antwort, eine sehr ähnliche Frage. - Ich habe versucht, recereate Ihre setup - jsfiddle.net/ceELs -, sondern seine nicht funktioniert, was bin ich vermisste?
- Alien-die Antwort ist einfach und nützlich, check it out http://stackoverflow.com/a/23323175/188784
- Eigentlich ist das, was Sie beschreiben, funktioniert nicht, auch mit Tabellen: wenn der Inhalt nimmt mehr vertikalen Platz als die Bildschirmhöhe, die Zelle in der Tabelle und die gesamte Tabelle zu erweitern, über den Schirm unten. Ihr Inhalt ist overflow:auto wird keine scrollbar angezeigt.
- es wird funktionieren, nachdem Sie die Höhe des übergeordneten Elements, Blick auf jsfiddle.net/ceELs/5
.screenful: {height: 100vh}
im entstehen ist, fügen Siebox-sizing: border-box;
enthalten Polsterung.- Also Leute verpasst nicht das offensichtliche: Wenn passiert zu sein, nur einige css-Eigenschaften (wie background-color), die Sie brauchen, um füllen Sie die restlichen Seite, dann könnten Sie festlegen, dass css auf das body-element.
Du musst angemeldet sein, um einen Kommentar abzugeben.
2015 update: das flexbox-Ansatz
Gibt es zwei andere Antworten kurz erwähnen flexbox; das war allerdings vor mehr als zwei Jahren, und Sie bieten keine Beispiele. Die Spezifikation für flexbox hat endgültig geklärt jetzt.
Allen gängigen Browsern und IE11+ Unterstützung Flexbox. Für den IE 10 oder älter verwenden, können Sie die FlexieJS shim.
Überprüfen aktuelle Unterstützung können Sie auch hier sehen:
http://caniuse.com/#feat=flexbox
Beispiel arbeiten
Mit flexbox können Sie problemlos wechseln zwischen jede Ihrer Zeilen oder Spalten, die entweder mit festen Abmessungen, Inhalt-große Abmessungen oder der verbleibenden Raum-Dimensionen. In meinem Beispiel habe ich den header zu schnappen, um seinen Inhalt (gemäß den OPs-Frage), ich habe eine Fußzeile, um zu zeigen, wie Sie ein fester Höhe-region und legen Sie dann den content-Bereich zu füllen den übrigen Raum.
CSS:
HTML:
In der CSS oben, die flex Eigenschaft Kürzel der flex-grow, flex-shrink, und flex-basis Eigenschaften zu etablieren, die Flexibilität des flex-Elemente. Mozilla hat eine gute Einführung in die flexiblen Boxen-Modell.
flex: 0 1 30px;
Attribut inbox .row
wie es ist, überschreiben Sie in jedem div?overflow-y: auto
zu.row.content
zu erreichen, was Sie jedoch brauchen.html
undbody
?flex:1 0 auto;
oderflex:1 1 auto;
wenn wir einfachflex-grow: 1
oder flex-grow: 0`?.row.footer
Höhe zu seinflex-shrink
auf 0 anstatt 1.<p>
- tags, die standardmäßig zusätzliche Ränder, die sind auf jeden Fall drängen sich mehr als10px
. Wenn Sie entfernen die Ränder, oder entfernen Sie die<p>
tags, die Sie finden, können Sie reduzieren die Höhe der Fußzeile. Um es zu10px
haben, müssen Sie möglicherweise zu reduzieren, font-size oder line-height; oder die universal fix zuschneiden Elementeoverflow: hidden
auf die.footer
elm.Es ist nicht wirklich ein sound, cross-browser Weg, dies zu tun in CSS. Vorausgesetzt, Ihr layout hat Komplexitäten, müssen Sie JavaScript verwenden, um die element-Höhe. Die Essenz dessen, was Sie tun müssen, ist:
Sobald man diesen Wert und legen Sie das element in der Höhe, müssen Sie event-Handler, um das Fenster onload und onresize, so dass Sie feuern Sie Ihre resize-Funktion.
Auch, vorausgesetzt, Ihr Inhalt könnte größer sein, als der viewport, müssen Sie eine Reihe overflow-y zu Blättern.
onresize
ist, dass es nicht funktioniert. Es wird nicht fangen die Größe des inneren Inhalt der DOM-Struktur, finden Sie unter stackoverflow.com/q/5532453.Der ursprüngliche Beitrag ist mehr als 3 Jahren. Ich denke, viele Menschen, die zu dieser post, wie ich suchen nach einer app-ähnlichen Layouts Lösung, sagen einem irgendwie festen header, footer, und voller Höhe für die Inhalte unter den restlichen Bildschirm. Wenn ja, dieser Beitrag kann helfen, es funktioniert auf IE7+, etc.
http://blog.stevensanderson.com/2011/10/05/full-height-app-layouts-a-css-trick-to-make-it-easier/
Und hier sind einige Auszüge aus diesem Beitrag:
CSS:
HTML:
display: table
im Körper, es scheint überlauf der Körper. Dabeiheight: 100%
produziert nicht die richtige Höhe..col
wird nicht verwendet, ist es?Anstelle der Verwendung von Tabellen im markup-Code, den Sie verwenden konnten, CSS-Tabellen.
Markup
(Relevante) CSS
FIDDLE1 und FIDDLE2
Einige Vorteile dieser Methode sind:
1) Weniger markup
2) Markup ist mehr semantischer als Tabellen, da dies keine tabellarischen Daten.
3) Browser-Unterstützung ist sehr gute: IE8+, Allen modernen Browsern und mobilen Geräten (caniuse)
Nur der Vollständigkeit halber, hier die entsprechenden Html-Elemente, css-Eigenschaften für die Das CSS-Tabellenmodell
html, body { height: 100%, width: 100% }
schien kritisch in meinen tests.relative
Positionierung auftable-row
element, so nimmt die Höhe der first-Position-Aszendent, das ist nicht ein table-element.Nur CSS Ansatz (Wenn die Höhe bekannt ist/fest)
Wenn Sie möchten, dass der mittlere element erstreckt sich über die gesamte Seite vertikal verwenden, können Sie
calc()
die eingeführt wird in CSS3.Angenommen, wir haben eine Feste Höhe
header
undfooter
Elemente, und wir wollen, dass diesection
tag zu nehmen gesamte vertikale Höhe...Demo
Angenommen markup
Also dein CSS sollte
Also hier, was Tue, ist, addieren Sie die Höhe der Elemente und als Abzug von
100%
mitcalc()
Funktion.Nur stellen Sie sicher, dass Sie verwenden
height: 100%;
für die übergeordneten Elemente.Verwendet:
height: calc(100vh - 110px);
code:
CSS:
HTML:
Wie zu verwenden Sie einfach
vh
steht fürview height
im CSS...Blick auf die code-snippet ich erstellt für Sie unten und führen Sie es:
CSS:
HTML:
Auch, das Bild unten sehen, die ich für Sie erstellt:
CSS3 Einfache Weise
allen gängigen Browsern in diesen Tagen unterstützen, so gehen Sie vor, wenn Sie nicht Voraussetzung für die Unterstützung der vintage-Browser.
Einfache Lösung mit flexbox:
CSS:
HTML:
Codepen-Beispiel
Eine Alternative Lösung mit einer div zentriert innerhalb des content-div
Es getan werden könnte, rein von
CSS
mitvh
:und die
HTML
Habe ich überprüft, es funktioniert in allen gängigen Browsern:
Chrome
,IE
, undFireFox
vh
undvw
Einheiten vor. Mehr info: snook.ca/archives/html_and_css/vm-vh-Einheitenheight: 100%
auf#content
verursacht seine Höhe zu entsprechen, die von#page
ignorieren#tdcontent
's Höhe insgesamt. Mit einer Menge von Inhalten, die scroll-bar erstreckt sich über den unteren Rand der Seite.Keine der Lösungen gepostet arbeiten, wenn Sie Sie brauchen, die unteren div zu scrollen, wenn der Inhalt zu groß ist. Hier ist eine Lösung, die funktioniert in diesem Fall:
HTML:
CSS:
Original-Quelle: Füllen Sie die Verbleibende Höhe eines Behälters Während der Handhabung Overflow im CSS
JSFiddle live-Vorschau
body-content-wrapper
, und die Dinge scheinen zu funktionieren, ohne die Doppel-wrapper - (ohnetable-cell
s). Ist es ein problem mit es zu tun auf diese Weise?.body
Höhe endet als der gleichen Höhe wie das set auf.container
. Die vertikale Bildlaufleiste wird immer noch an der richtigen Stelle, aber die.container
endet immer gestreckt, größer als wir es wollen. Wenn es im Vollbildmodus ist, der unten.body
ist an der Unterseite des Bildschirms.Ich habe die Suche nach einer Antwort für diese als gut. Wenn Sie Glück genug, um in der Lage sein, um den Gegner IE8 und höher, Sie können
display:table
und die zugehörigen Werte, um die rendering-Regeln von Tabellen mit block-level-Elemente wie div.Wenn man noch mehr Glück hat und die Benutzer mit top-tier-Browser (zum Beispiel, wenn Sie das intranet-Anwendung auf Computern, die Sie Steuern, wie mein neuestes Projekt ist), können Sie mit der neuen Flexible Box Layout in CSS3!
Was für mich gearbeitet (mit einem div in einem anderen div-und ich nehme an, in allen anderen Fällen) ist die Einstellung der unteren Polsterung zu 100%. Das ist, fügen Sie diese zu Ihrem css /stylesheet:
HTML 5
CSS
Lösung oben verwendet viewport-Einheiten und flexbox, und ist daher IE10+, sofern man die alte syntax für IE10.
Codepen, um mit zu spielen: link zu codepen
Oder diesem, für diejenigen, die Haupt-container Scrollbar im Falle der überquellenden Inhalt: link zu codepen
In allen vernünftigen Browsern kann man die "header" - div vor dem content, als Geschwister, und die gleichen CSS-arbeiten. Jedoch IE7 - nicht interpretieren, die Höhe ist richtig, wenn der Schwimmer ist 100% in diesem Fall also der header muss IN der Inhalte, wie oben beschrieben. Das overflow: auto wird dazu führen, doppelte scroll Balken im IE (die hat immer den viewport scrollbar sichtbar, aber deaktiviert), aber ohne Sie, wird der Inhalt clip wenn es überläuft.
div
... alsotop: 0;
wird etwas rechts unterhalb der Kopfzeile. Ich werde ändern Sie meine Frage immer wieder, weil Sie antwortete, es perfekt, und immer noch nicht das, was ich will!!! Ich werde nur aus dem überlauf als der Inhalt muss passen.Es gibt eine Tonne von Antworten jetzt, aber ich fand mit
height: 100vh;
zu arbeiten, die auf das div-element, die Bedürfnisse zu füllen, bis der gesamte vertikale Platz zur Verfügung.In dieser Weise, ich brauche nicht zu spielen, um mit der Darstellung oder Positionierung. Dies kam in sehr praktisch, wenn mit Bootstrap zu machen ein dashboard, worin ich hatte eine sidebar und main. Ich wollte die wichtigsten zu dehnen und füllen den gesamten vertikalen Platz, so dass ich anwenden könnte eine hintergrund-Farbe.
Unterstützt IE9 und höher: klicken Sie auf den link sehen
Wenn Sie sich mit der nicht Unterstützung von alten Browsern (das heißt, " MSIE 9 oder ältere), können Sie dies mit Flexible Box Layout Module die bereits W3C CR. Das Modul ermöglicht auch andere nette tricks, die auch, wie umordnen der Inhalte.
Leider MSIE 9 oder weniger nicht unterstützen und Sie zu verwenden vendor-Präfix für die CSS-Eigenschaft für jeden anderen browser als Firefox. Hoffentlich anderen Anbietern fallen den Präfix auch bald.
Einer anderen Wahl wäre CSS Grid Layout aber das hat auch weniger Unterstützung von stabilen Versionen der Browser. In der Praxis, nur MSIE 10 unterstützt.
Ich wresteled mit dieser für eine Weile und endete mit der folgenden:
Da ist es einfach, um die content-DIV die gleiche Höhe wie die Eltern, aber offenbar schwer zu machen, die Eltern-Höhe, abzüglich der header-Höhe habe ich beschlossen, Inhalt div voller Höhe, sondern positionieren es absolut in der oberen linken Ecke, und definieren Sie dann eine Polsterung für die Oberseite, die hat die Höhe der Kopfzeile. Auf diese Weise werden die Inhalte angezeigt, die ordentlich unter den Kopf und füllt das ganze übrige Raum:
Warum nicht einfach so?
Geben Sie html und body (in dieser Reihenfolge) eine Höhe und nur dann geben Ihre Elemente in einer Höhe?
Funktioniert bei mir
das problem bei mir gelöst. In meinem Fall habe ich diese auf den gewünschten div
"CSS-Grid-Lösung
Nur die Definition der
body
mitdisplay:grid
und diegrid-template-rows
mitauto
und diefr
value-Eigenschaft.CSS:
HTML:
A Complete Guide zu-Raster - @ CSS-Tricks.com
Können Sie tatsächlich nutzen
display: table
für split in zwei Elemente (header und Inhalt), wo der Kopf kann variieren in der Höhe und der Inhalt füllt den übrigen Raum. Dies funktioniert mit der ganzen Seite, als auch, wenn der Bereich wird einfach der Inhalt eines anderen Elements positioniert mitposition
eingestelltrelative
,absolute
oderfixed
. Es wird funktionieren, solange das übergeordnete element hat einen nicht-null-Höhe.Sehen Sie diese Geige und auch den folgenden code:
CSS:
HTML:
Vincent, ich Antworte wieder mit Ihr neue Anforderungen. Da kümmert man sich nicht über den Inhalt wird ausgeblendet, wenn es zu lang ist, brauchen Sie nicht zu schweben, den Kopf. Setzen Sie einfach überlaufen, die versteckt auf dem html-und body-tags, und legen Sie
#content
Höhe bis zu 100%. Der Inhalt wird immer länger sein als der viewport, indem Sie die Höhe des header, aber es wird versteckt und nicht Scrollleisten.table
weil es funktioniert. Vielen Dank für das update, obwohl.Versuchen, diese
Fand ich eine ganz einfache Lösung, weil es für mich nur ein design-Problem.
Ich wollte den rest der Seite nicht zu weiß unter der roten Fußzeile.
So habe ich den Seiten hintergrund-Farbe auf rot. Und der Inhalt Hintergrundfarbe auf weiß.
Mit dem Inhalt Höhe eingestellt zB. 20em oder 50% eine fast leere Seite nicht verlassen, die ganze Seite rot.
Für mobile-app nutze ich nur VH und VW
Demo - https://jsfiddle.net/u763ck92/
Ich hatte das gleiche problem aber konnte ich nicht machen, funktioniert die Lösung mit flexboxes oben. So habe ich meine eigene Vorlage, die beinhaltet:
Ich verwendet flexboxes aber in einer einfachen Art und Weise, verwenden Sie nur die Eigenschaften display: flex und flex-direction: row|Spalte:
Ich tun, verwenden Sie eckige, und ich will meine Komponente Größen werden zu 100% von Ihrem übergeordneten element.
Der Schlüssel ist, um die Größe (in Prozent) für alle Eltern durchzuführen, um eine Beschränkung Ihrer Größe. Im folgenden Beispiel myapp Höhe 100% des Viewports.
Hauptbestandteil 90% des Viewports, da Kopf-und Fußzeile haben 5%.
Ich habe meine Vorlage hier: https://jsfiddle.net/abreneliere/mrjh6y2e/3
Html:
Spinnen aus der Idee von Mr. Alien...
Dies scheint eine sauberere Lösung als die beliebten flex-box one für CSS3-fähige Browser.
Verwenden Sie einfach min-height(statt Höhe) mit calc (), um den Inhalt zu blockieren.
Die calc (), startet mit 100% und subtrahiert Höhen von Kopf-und Fußzeilen (Sie benötigen, um die padding-Werte)
Mit "min-height" statt "Höhe" ist besonders nützlich, so kann es die Arbeit mit javascript gerendert Inhalt und JS-frameworks wie Angular2. Andernfalls wird die Berechnung nicht drücken Sie die Fußzeile unten auf der Seite, sobald die javascript gerendert Inhalt sichtbar ist.
Hier ist ein einfaches Beispiel für eine header-und footer mit 50px Höhe und 20px padding für beide.
Html:
Css:
Natürlich die Mathematik kann vereinfacht werden, aber Sie bekommen die Idee...
Dynamisch calc die remining Platz auf dem Bildschirm, besser mit Javascript.
Können Sie mithilfe von CSS-IN-JS-Technologie, wie unten lib:
https://github.com/cssobj/cssobj
DEMO: https://cssobj.github.io/cssobj-demo/
es nie für mich gearbeitet in anderer Weise dann mit der JavaScript - als NICCAI vorgeschlagen, in der ersten Antwort. Ich bin mit diesem Ansatz zu skalieren die
<div>
mit den Google Maps.Hier ist das vollständige Beispiel, wie das geht (funktioniert in Safari/FireFox/IE/iPhone/Android (funktioniert mit rotation)):
CSS
JS
HTML
Wenn das einzige Problem ist die Höhe, nur mit divs scheint zu funktionieren:
In einem einfachen test, die Breite der Kopfzeile/Inhalt ist anders als in deinem Beispiel und mir, aber ich bin mir nicht sicher, aus Ihren posten, wenn Sie sind besorgt über die Breite?
div
zu füllen Sie den Rest des screeen, nicht um tatsächlich die gleiche Höhe wie der Bildschirm.