Ich habe einen Weg gefunden, einen Div-Container so zu gestalten, dass er mindestens die volle Höhe einer Seite einnimmt, indem ich ihn einstelle min-height: 100%;
. Wenn ich jedoch ein verschachteltes div hinzufüge und setze height: 100%;
, wird es nicht auf die Höhe des Containers gedehnt. Gibt es eine Möglichkeit, das Problem zu beheben?
html, body {
height: 100%;
margin: 0;
}
#containment {
min-height: 100%;
background: pink;
}
#containment-shadow-left {
height: 100%;
background: aqua;
}
<div id="containment">
<div id="containment-shadow-left">
Hello World!
</div>
</div>
display:flex
undflex-direction:column
und geben Sie dem Kindflex:1
.Antworten:
Dies ist ein gemeldeter Webkit-Fehler (Chrome / Safari). Kinder von Eltern mit Mindestgröße können die Eigenschaft height nicht erben: https://bugs.webkit.org/show_bug.cgi?id=26559
Anscheinend ist auch Firefox betroffen (kann derzeit nicht im IE getestet werden)
Mögliche Problemumgehung:
Der Fehler wird nicht angezeigt, wenn das innere Element absolut positioniert ist.
Siehe http://jsfiddle.net/xrebB/
Bearbeiten am 10. April 2014
Da ich derzeit an einem Projekt arbeite, für das ich wirklich übergeordnete Container
min-height
und untergeordnete Elemente benötige , die die Höhe des Containers erben, habe ich weitere Nachforschungen angestellt.Erstens: Ich bin mir nicht mehr so sicher, ob das aktuelle Browserverhalten wirklich ein Fehler ist. CSS2.1-Spezifikationen sagen:
Wenn ich meinem Container eine Mindesthöhe hinzufüge, gebe ich seine Höhe nicht explizit an - daher sollte mein Element eine
auto
Höhe erhalten. Und genau das tun Webkit und alle anderen Browser.Zweitens die Problemumgehung, die ich gefunden habe:
Wenn ich mein Containerelement
display:table
mitheight:inherit
ihm genau die gleiche Art und Weise wirkt , als ob ich es geben würde ,min-height
von 100%. Und - was noch wichtiger ist - wenn ich das untergeordnete Element darauf setze,display:table-cell
erbt es die Höhe des Containerelements perfekt - ob es 100% oder mehr ist.Vollständiges CSS:
Das Markup:
Siehe http://jsfiddle.net/xrebB/54/ .
quelle
height
Attribut setzen.In
height: 1px
zu übergeordneten Container. Funktioniert in Chrome, FF, Safari.quelle
height: 1px;
wird die Mindesthöhe nicht überschrieben. Ganz im Gegenteil. Dies ist die beste Lösung hier ... Demo: jsbin.com/mosaboyo/1/editheight: 1px;
funktioniert stackoverflow.com/questions/2341821/height100-vs-min-height100min-height
. Wenn beispielsweise genügend Text vorhanden ist, läuft dieser über. Siehe jsbin.com/vuyapitizo/1Ich dachte, ich würde dies teilen, da ich dies nirgendwo gesehen habe, und habe es verwendet, um meine Lösung zu reparieren.
LÖSUNG :
min-height: inherit;
Ich hatte einen Elternteil mit einer bestimmten Mindestgröße, und ich brauchte ein Kind, das ebenfalls so groß war.
Auf diese Weise fungiert das Kind nun als Größe 100% der Mindestgröße.
Ich hoffe einige Leute finden das nützlich :)
quelle
min-height
. Wenn die Größe der Eltern größer ist, wird sich das Kind nicht ausdehnen.Dies wurde in einem Kommentar von @jackocnr hinzugefügt, aber ich habe es verpasst. Für moderne Browser halte ich dies für den besten Ansatz.
Das innere Element füllt den gesamten Behälter, wenn es zu klein ist, vergrößert jedoch die Höhe des Behälters, wenn es zu groß ist.
quelle
Die Lösung von Kushagra Gour funktioniert (zumindest in Chrome und IE) und löst das ursprüngliche Problem, ohne
display: table;
und verwenden zu müssendisplay: table-cell;
. Siehe Plunker: http://plnkr.co/edit/ULEgY1FDCsk8yiRTfOWUWenn Sie
min-height: 100%; height: 1px;
das äußere Teil einstellen, beträgt die tatsächliche Höhe je nach Bedarf mindestens 100%. Es ermöglicht dem inneren Div auch, die Höhe korrekt zu erben.quelle
Zusätzlich zu den vorhandenen Antworten können auch Ansichtsfenstereinheiten
vh
verwendet werden. Einfacher Ausschnitt unten. Natürlich kann es auch zusammen mit verwendetcalc()
werden, z. B.min-height: calc(100vh - 200px);
wenn Seitenkopf und Fußzeile zusammen eine200px
Höhe haben.quelle
Ich glaube nicht, dass dies ein Fehler bei Browsern ist. Alle verhalten sich gleich - das heißt, sobald Sie keine expliziten Höhen mehr angeben, ist die Mindesthöhe im Grunde ein "letzter Schritt".
Es scheint genau so zu sein, wie es die CSS 2.1-Spezifikation vorschlägt: http://www.w3.org/TR/CSS2/visudet.html#the-height-property
Da für das
min-height
übergeordnete Element kein expliziterheight
Eigenschaftssatz festgelegt ist, wird standardmäßig auto verwendet.Es gibt einige Möglichkeiten, dies zu
display: table-cell
umgehen, möglicherweise mithilfe neuerer Stile wie Flexbox, wenn dies für die Browser Ihrer Zielgruppe möglich ist. Sie können dies in bestimmten Situationen auch untergraben, indem Sie die Eigenschaftentop
undbottom
für ein absolut positioniertes inneres Element verwenden, wodurch Sie 100% Höhe erhalten, ohne dies anzugeben.quelle
Obwohl
display: flex;
hier vorgeschlagen wurde, sollten Siedisplay: grid;
jetzt verwenden, da es weitgehend unterstützt wird . Standardmäßig füllt das einzige untergeordnete Element eines Rasters das übergeordnete Element vollständig aus.quelle
Für Googler:
Diese jquery-Problemumgehung bewirkt, dass #containment automatisch eine Höhe erhält (by, height: auto) und dann die tatsächliche Höhe als Pixelwert zugewiesen wird.
quelle
Der beste Weg, dies heutzutage zu erreichen, ist die Verwendung
display: flex;
. Beim Versuch, IE11 zu unterstützen, kann jedoch ein Problem auftreten. Laut https://caniuse.com mit Flexbox:Internet Explorer-kompatible Lösung
Die Lösung besteht darin, sowohl
display: table;
beim Elternteil als auchdisplay: table-row;
beim Kindheight: 100%;
als Ersatz für zu verwendenmin-height: 100%;
.Die meisten der hier aufgeführten Lösungen verwenden
display:
table
,table-row
und / odertable-cell
, aber sie haben nicht das gleiche Verhalten wie replizierenmin-height: 100%;
, die lautet:height
Eigenschaft).min-height
;Bei Verwendung dieser Lösung ist das Verhalten dasselbe und die Eigenschaft
min-height
wird nicht benötigt, wodurch der Fehler umgangen werden kann.Erläuterung
Der Grund, warum es funktioniert, ist, dass im Gegensatz zu den meisten Elementen Elemente, die verwendet werden
display:
table
undtable-row
immer so groß sind wie ihr Inhalt. Dadurchheight
verhält sich ihr Eigentum ähnlich wiemin-height
.Lösung in Aktion
quelle
Eine andere JS-Lösung, die einfach ist und verwendet werden kann, um eine nicht einfache reine CSS- oder zusätzliche Markup- / Hacky-Lösung zu vermeiden.
W / jQuery:
Winkelrichtlinie:
So zu verwenden:
quelle
Das funktioniert normalerweise bei mir: