Wie man flexbox auf die padding in den Berechnungen?
Unten sind zwei Zeilen.
-
Ersten Zeile ist, die zwei Elemente auf
flex 1
und einer anflex 2
. -
Zweiten Reihe ist, die zwei Elemente auf
flex 1
.
Laut spec 1A + 1B = 2A
Aber wenn Polsterung in die Berechnung einbezogen, die Summe ist falsch, da sehen Sie im Beispiel unten.
FRAGE
Wie man flex-box für padding in seiner Berechnung, so dass die Boxen in der Beispiel-Zeile korrekt?
CSS:
.Row{
display:flex;
}
.Item{
display:flex;
flex:1;
flex-direction:column;
padding:0 10px 10px 0;
}
.Item > div{
background:#7ae;
}
.Flx2{
flex:2;
}
HTML:
<div class="Row">
<div class="Item">
<div>1A</div>
</div>
<div class="Item">
<div>1B</div>
</div>
<div class="Item Flx2">
<div>1C</div>
</div>
</div>
<div class="Row">
<div class="Item">
<div>2A</div>
</div>
<div class="Item">
<div>2B</div>
</div>
</div>
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die Lösung:
Set
margin
auf das Kind-element stattpadding
auf Ihreflex
Element.CSS:
HTML:
Das problem:
Die Berechnung erfolgt ohne
padding
. So, das hinzufügenpadding
zu denflex
element ist nicht geben Sie Ihre voraussichtliche Breite derspec.
Der bestimmte Artikel
Warum ist die Polsterung nicht berechnet? Das ist es, was die Skillung will.
Wenn Sie subtrahieren die
padding
undmargin
aus dem element der Größe, die Sie erhalten:1A + 1B = 2A
Jedoch, nachdem Sie das getan, die Polsterung wurde Hinzugefügt, um das element. Je mehr Elemente, desto mehr Polsterung. Das ist nicht berechnet, in die Breite, wodurch Ihre Aussage falsch ist.
box-sizing: border box;
würde helfen, aber kein solches Glück...In Ihrem code, Polsterung ist in die Berechnungen einbezogen.
Glaube ich nicht, das ist richtig. Vielleicht geben Sie einen link-Verweis auf eine Erklärung.
Die
flex-grow
EigenschaftWenn Sie
flex: 1
zu einem element, Sie sind mit derflex
Kurzschrift-Eigenschaft, um zu sagen:flex-grow: 1
flex-shrink: 1
flex-basis: 0
flex-grow
sagt ein flex-Element zu konsumieren, den freien Platz im container.Hier ist dein code:
In der ersten Zeile
padding-right: 10px
angewendet wird drei flex-Elemente.In der zweiten Zeile
padding-right: 10px
angewendet wird zwei flex-Elemente.Daher, in der ersten Reihe gibt es 10px weniger freien Speicherplatz zu verteilen. Das bricht die raster-Ausrichtung.
Für die Verteilung von Raum (z.B., Sie wollen, dass ein element zu nehmen, die Verbleibende Höhe oder Breite eines Containers), verwenden Sie
flex-grow
.Für die präzise Dimensionierung der flex-Element verwenden
flex-basis
,width
oderheight
.Hier einige weitere Infos:
Die Sie verwenden können, schwebte pseudo-block-Elemente anstelle der Polsterung, wie diese:
(In diesem Fall 30px rechts-Polsterung)
CSS: