CSS 100% Höhe mit Polsterung / Rand
Diese wurde driving me crazy für ein paar Tage jetzt, aber in Wirklichkeit ist es ein problem, dass ich getroffen habe-und ausschalten für die letzten paar Jahre: Mit HTML/CSS wie kann ich ein element mit einer Breite und/oder Höhe, die 100% des übergeordneten Elements, und hat immer noch die richtige Polsterung oder Margen?
Durch "richtige" meine ich, dass, wenn mein übergeordnetes element ist 200px
hoch und ich geben height = 100%
mit padding = 5px
ich würde erwarten, dass ich bekommen sollte ein 190px
hohe Elemente mit border = 5px
auf allen Seiten schön zentriert im übergeordneten element.
Nun, ich weiß, dass das nicht, wie das standard-box-Modell gibt, sollte es funktionieren (obwohl ich würde gerne wissen, warum genau...), so dass die offensichtliche Antwort nicht funktioniert:
#myDiv {
width: 100%
height: 100%;
padding: 5px;
}
Aber es scheint mir, dass es muss ein Weg gefunden werden, der zuverlässig die Herstellung dieser Effekt für einen Elternteil von beliebiger Größe. Kennt jemand einen Weg, dies zu erreichen (scheinbar einfache) Aufgabe?
Oh, und für den Datensatz ich bin nicht besonders daran interessiert IE-Kompatibilitätsmodus, damit sollte (hoffentlich) die Dinge etwas einfacher.
EDIT: Da ein Beispiel war gefragt, hier ist das einfachste, das ich denken kann:
<html style="height: 100%">
<body style="height: 100%">
<div style="background-color: black; height: 100%; padding: 25px"></div>
</body>
</html>
Die Herausforderung ist dann, um die black box zu zeigen, bis mit einem 25 pixel-Abstand auf alle Kanten, ohne die Seite wächst groß genug, um erfordern scrollbars.
InformationsquelleAutor der Frage Toji | 2009-01-27
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es ist ein neue Eigenschaft in CSS3die Sie verwenden können, um zu ändern, wie das box-Modell berechnet, Breite/Höhe, nennt man box-sizing.
Durch das einstellen dieser Eigenschaft mit dem Wert "border-box" macht es welches element Sie es nicht Strecken, wenn Sie hinzufügen ein padding oder border. Wenn Sie definieren, was mit 100px Breite, und 10px padding, es wird immer noch 100px breit.
Sehen Sie hier für die browser-Unterstützung. Es funktioniert nicht bei IE7 und niedriger, ich glaube jedoch, dass Dean Edward ' s IE7.js fügt Unterstützung für Sie. Genießen Sie 🙂
InformationsquelleAutor der Antwort Marco Jardim
Der bessere Weg ist, mit der calc () - Eigenschaft. So Ihr Fall würde das so Aussehen:
Einfach, sauber, keine workarounds. So stellen Sie sicher, vergessen Sie nicht die Leerzeichen zwischen den Werten und der Betreiber (zB (100%-5px), dass eine Unterbrechung der syntax. Genießen Sie!
InformationsquelleAutor der Antwort Brian Aderer
Gemäß der w3c-spec-Höhe bezieht sich auf die Höhe des sichtbaren Bereichs, z.B. auf 1280x1024 pixel monitor mit einer Auflösung von 100% height = 1024 Pixel.
min-height bezieht sich auf die gesamte Höhe der Seite inklusive der Inhalte so auf einer Seite, wo der Inhalt ist größer als 1024px min-height:100% wird gestreckt, um alle den Inhalt.
Das andere problem ist, dass padding und border werden Hinzugefügt, um die Höhe und Breite in den meisten modernen Browsern außer dem ie6(der ie6 ist eigentlich ganz logisch, aber entspricht nicht der spec). Dies nennt man das box-Modell. Also, wenn Sie angeben,
Es wird tatsächlich geben Ihnen 100% + 5px + 5px für die Höhe. Um dies zu umgehen benötigen Sie ein wrapper-container.
InformationsquelleAutor der Antwort Alex
Dies ist eines der geradezu idiocies der CSS - ich habe noch nicht verstanden, die Argumentation (wenn jemand weiß, pls. explain").
100% bedeutet, dass 100% der container in der Höhe, in die alle Ränder, Rahmen und Polsterung Hinzugefügt werden. So dass es praktisch unmöglich ist, um einen Behälter, füllt es die Eltern-und die hat eine margin, border oder padding.
Beachten Sie auch die Einstellung der Höhe ist notorisch inkonsistent zwischen den Browsern auch.
Andere Sache, die ich gelernt habe, seit ich dies geschrieben, ist, dass der Anteil relativ den container Längedas heißt, es Breite, was einem Prozentsatz noch wertlos für die Höhe.
Heute, die vh und vw-viewport-Einheiten sind nützlich, aber noch nicht besonders nützlich für alles andere als die top-level-Container.
InformationsquelleAutor der Antwort Lawrence Dol
Andere Lösung ist die Verwendung von display:table, die hat ein anderes box-Modell Verhalten.
Können Sie eine Höhe und Breite die Eltern, und fügen Sie die Polsterung ohne ausbau. Das Kind hat 100% Höhe und Breite abzüglich der Polster.
JSBIN
Andere Möglichkeit wäre die Verwendung von box-sizing propperty. Nur das problem mit den beiden wäre Sie funktionieren nicht im IE7.
InformationsquelleAutor der Antwort user1721135
Andere Lösung: Sie können die prozentuale Einheiten für Margen sowie Größen. Zum Beispiel:
Das Hauptproblem hier ist, dass die Margen erhöhen/verringern etwas mit der Größe des parent-Elements. Vermutlich ist die Funktionalität, die Sie bevorzugen würden, ist für die Margen bleiben konstant und das child-element, das wachsen/schrumpfen zu füllen, Veränderungen in der Abstand. Also, je nachdem, wie eng Sie brauchen Ihre Anzeige zu sein, das könnte problematisch sein. (Ich würde auch gehen für einen kleineren Rand, wie um 0,3%).
InformationsquelleAutor der Antwort ktbiz
Frank ' s Beispiel verwirrt mich ein wenig - es hat nicht funktioniert, in meinem Fall, weil ich nicht verstehen Positionierung gut genug. Es ist wichtig zu beachten, dass das übergeordnete container-element haben muss, um eine nicht-statische position (er erwähnt dies, aber ich habe es übersehen, und es war nicht in seinem Beispiel).
Hier ist ein Beispiel, wo das Kind - angesichts Polsterung und eine Grenze - verwendet die absolute Positionierung zum füllen der Eltern 100%. Das Elternteil, dass die relative Position, um einen Bezugspunkt für das Kind position, während die restlichen in den normalen Fluss - das nächste element "mehr Inhalt" ist nicht betroffen:
Nützliche link für schnell lernen, CSS-Positionierung
InformationsquelleAutor der Antwort Peter Tseng
Es ist 2018 jetzt ist der neue hot shit sollte hier erwähnt werden, wie die Frage taucht immer wieder auf Google.
Einer Lösung mit flexbox (arbeiten auf IE11): (oder Blick auf jsfiddle)
(Die CSS-reset ist nicht unbedingt wichtig für das eigentliche problem.)
Ist der wichtige Teil
flex: 1
(In Kombination mitdisplay: flex
bei den Eltern). Witzigerweise, ist die plausibelste Erklärung, die ich wissen, wie die Flex-Eigenschaft funktioniert stammt aus einem reagieren-native-Dokumentation, also ich finden es trotzdem.InformationsquelleAutor der Antwort Putzi San
Rahmen um div, nicht als Seite Körper-Marge
Andere Lösung - ich wollte nur einen einfachen Rahmen um den Rand meiner Seite, und ich wollte 100% Höhe, wenn der Inhalt kleiner war als das.
Border-box hat nicht funktioniert, und die Feste Positionierung schien falsch, für so eine einfache Notwendigkeit.
Ich landete hinzufügen eines Rahmens zu meinem container, anstatt sich auf den Rand des Körpers von der Seite sieht es wie folgt aus :
InformationsquelleAutor der Antwort Kris Randall
InformationsquelleAutor der Antwort Mujassir Nasir