Ich habe die Seitenstruktur wie folgt:
<div class="parent">
<div class="child-left floatLeft">
</div>
<div class="child-right floatLeft">
</div>
</div>
Jetzt hat der child-left
DIV mehr Inhalt, sodass die parent
Größe des DIV gemäß dem untergeordneten DIV zunimmt.
Das Problem ist jedoch, dass die child-right
Höhe nicht zunimmt. Wie kann ich seine Höhe an die des Elternteils anpassen?
Antworten:
Fügen Sie für das
parent
Element die folgenden Eigenschaften hinzu:dann für
.child-right
diese:Detailliertere Ergebnisse mit CSS-Beispielen finden Sie hier und weitere Informationen zu Spalten gleicher Höhe finden Sie hier .
quelle
Eine übliche Lösung für dieses Problem verwendet die absolute Positionierung oder zugeschnittene Floats. Diese sind jedoch insofern schwierig, als sie eine umfassende Optimierung erfordern, wenn sich Ihre Spalten in Anzahl + Größe ändern, und dass Sie sicherstellen müssen, dass Ihre "Hauptsäule" immer die längste ist. Stattdessen würde ich vorschlagen, dass Sie eine von drei robusteren Lösungen verwenden:
display: flex
: bei weitem die einfachste und beste Lösung und sehr flexibel - aber von IE9 und älter nicht unterstützt.table
oderdisplay: table
: sehr einfach, sehr kompatibel (so ziemlich jeder Browser), ziemlich flexibel.display: inline-block; width:50%
mit einem negativen Rand-Hack: recht einfach, aber die Ränder am unteren Ende der Spalte sind etwas knifflig.1.
display:flex
Dies ist sehr einfach und lässt sich leicht an komplexere oder detailliertere Layouts anpassen. Flexbox wird jedoch nur von IE10 oder höher (zusätzlich zu anderen modernen Browsern) unterstützt.
Beispiel: http://output.jsbin.com/hetunujuma/1
Relevantes HTML:
Relevante CSS:
Flexbox unterstützt viel mehr Optionen, aber um einfach eine beliebige Anzahl von Spalten zu haben, reicht das oben Genannte aus!
2.
<table>
oderdisplay: table
Eine einfache und äußerst kompatible Möglichkeit, dies zu tun, ist die Verwendung von a
table
- ich würde empfehlen, dass Sie dies zuerst versuchen, wenn Sie Unterstützung für alte IE benötigen . Sie haben es mit Spalten zu tun; divs + floats sind einfach nicht der beste Weg, dies zu tun (ganz zu schweigen von der Tatsache, dass mehrere Ebenen verschachtelter divs, nur um CSS-Einschränkungen zu umgehen, kaum "semantischer" sind als nur die Verwendung einer einfachen Tabelle). Wenn Sie dastable
Element nicht verwenden möchten , ziehen Sie CSS in Betrachtdisplay: table
(von IE7 und älter nicht unterstützt).Beispiel: http://jsfiddle.net/emn13/7FFp3/
Relevantes HTML: (aber erwägen Sie
<table>
stattdessen dieVerwendung einer Ebene)Relevante CSS:
Dieser Ansatz ist weitaus robuster als die Verwendung
overflow:hidden
mit Floats. Sie können so ziemlich eine beliebige Anzahl von Spalten hinzufügen. Sie können sie automatisch skalieren lassen, wenn Sie möchten. und Sie behalten die Kompatibilität mit alten Browsern. Im Gegensatz zur Float-Lösung müssen Sie auch nicht vorher wissen, welche Spalte am längsten ist. Die Höhe skaliert ganz gut.KISS: Verwenden Sie keine Float-Hacks, es sei denn, Sie müssen dies ausdrücklich tun. Wenn IE7 ein Problem darstellt, würde ich jeden Tag eine einfache Tabelle mit semantischen Spalten über einer schwer zu wartenden, weniger flexiblen Trick-CSS-Lösung auswählen.
Übrigens, wenn Sie möchten, dass Ihr Layout reagiert (z. B. keine Spalten auf kleinen Mobiltelefonen), können Sie mithilfe einer
@media
Abfrage auf das einfache Blocklayout für kleine Bildschirmbreiten zurückgreifen - dies funktioniert unabhängig davon, ob Sie es verwenden<table>
oder nichtdisplay: table
Element verwenden.3.
display:inline block
mit einem negativen Margin Hack.Eine andere Alternative ist zu verwenden
display:inline block
.Beispiel: http://jsbin.com/ovuqes/2/edit
Relevantes HTML: (Das Fehlen von Leerzeichen zwischen den
div
Tags ist signifikant!)Relevante CSS:
Dies ist etwas schwierig und der negative Rand bedeutet, dass der "wahre" Boden der Spalten verdeckt ist. Dies bedeutet wiederum, dass Sie nichts relativ zum unteren Rand dieser Spalten positionieren können, da dies durch abgeschnitten wird
overflow: hidden
. Beachten Sie, dass Sie zusätzlich zu Inline-Blöcken mit Floats einen ähnlichen Effekt erzielen können.TL; DR : Verwenden Sie Flexbox, wenn Sie IE9 und älter ignorieren können. Andernfalls versuchen Sie es mit einer (CSS-) Tabelle. Wenn keine dieser Optionen für Sie funktioniert, gibt es Hacks mit negativen Margen, die jedoch zu seltsamen Anzeigeproblemen führen können, die während der Entwicklung leicht übersehen werden können, und es gibt Layoutbeschränkungen, die Sie beachten müssen.
quelle
border-spacing:10px;
Auf dem Tabellenelement wird ein randartiger Abstand eingeführt. Alternativ können Sie zusätzliche (leere) Spalten hinzufügen, in denen Sie zusätzlichen Speicherplatz benötigen. Sie können auch Auffüllungen in die Tabellenzellen einfügen. Diese Polsterung wird jedoch im Hintergrund angezeigt, sodass dies möglicherweise nicht das ist, was Sie möchten. Aber Sie haben Recht, dass es nicht ganz so flexibel ist wie ein normaler Spielraum. Und Sie können nichts relativ zu den Spalten positionieren, was ein Problem sein kann.Für die Eltern:
Für Kinder:
Sie sollten einige Präfixe hinzufügen, überprüfen Sie caniuse.
quelle
Ich habe viele Antworten gefunden, aber wahrscheinlich ist die beste Lösung für mich
Sie können andere Lösungen hier überprüfen http://css-tricks.com/fluid-width-equal-height-columns/
quelle
Bitte setzen Sie parent div auf,
overflow: hidden
dann können Sie in child divs einen großen Betrag für padding-bottom einstellen. Zum Beispiel werden
padding-bottom: 5000px
dann
margin-bottom: -5000px
und dann alle untergeordneten Divs die Größe des Elternteils sein.
Dies funktioniert natürlich nicht, wenn Sie versuchen, Inhalte in das übergeordnete Div einzufügen (dh außerhalb anderer Divs).
Beispiel: http://jsfiddle.net/Tareqdhk/DAFEC/
quelle
Hat der Elternteil eine Größe? Wenn Sie die Größe der Eltern so einstellen.
Dann können Sie das Kind so auf die volle Höhe strecken lassen.
BEARBEITEN
So würden Sie es mit JavaScript machen.
quelle
Die Anzeige von CSS-Tabellen ist dafür ideal:
Ursprüngliche Antwort (vorausgesetzt, jede Spalte könnte größer sein):
Sie versuchen, die Größe der Eltern von der Größe der Kinder und die Größe der Kinder von der Größe der Eltern abhängig zu machen. Wird nicht berechnet. CSS Faux-Spalten sind die beste Lösung. Es gibt mehr als einen Weg, dies zu tun. Ich würde lieber kein JavaScript verwenden.quelle
display: table
+display: table-cell
Layout erzeugt jedoch das gewünschte Ergebnis.float
: stackoverflow.com/questions/20110217/…Ich habe dies kürzlich auf meiner Website mit jQuery getan. Der Code berechnet die Höhe des höchsten Divs und setzt die anderen Divs auf die gleiche Höhe. Hier ist die Technik:
http://www.broken-links.com/2009/01/20/very-quick-equal-height-columns-in-jquery/
Ich glaube nicht, dass
height:100%
es funktionieren wird. Wenn Sie also die Div-Höhen nicht explizit kennen, gibt es meiner Meinung nach keine reine CSS-Lösung.quelle
Ich habe dies für einen Kommentarbereich verwendet:
Sie könnten das Kind rechts nach rechts schweben lassen, aber in diesem Fall habe ich die Breiten jedes Div genau berechnet.
quelle
Wenn Sie Bootstrap kennen, können Sie dies einfach mithilfe der Eigenschaft 'flex' tun. Sie müssen lediglich die folgenden CSS-Eigenschaften an das übergeordnete div übergeben
wo
.homepageSection
ist mein eltern div. Fügen Sie nun untergeordnetes div in Ihr HTML alsDabei ist abc mein Kind div. Sie können die Gleichheit der Körpergröße in beiden Kindern unabhängig von der Grenze überprüfen, indem Sie dem Kind div eine Grenze geben
quelle
Ich habe den Inline-Stil verwendet, um eine Idee zu geben.
quelle
Ich habe in einem Praktikumsinterview von diesem tollen Trick erfahren. Die ursprüngliche Frage lautet, wie Sie sicherstellen können, dass die Höhe jeder oberen Komponente in drei Spalten dieselbe Höhe hat, in der der gesamte verfügbare Inhalt angezeigt wird. Erstellen Sie grundsätzlich eine unsichtbare untergeordnete Komponente, die die maximal mögliche Höhe darstellt.
quelle