Ich habe eine Flexbox mit einer undefinierten Anzahl von Karten darin.Berechne Flexelementbreite vor dem Rendern mit JS
.box {
display: flex;
flex-wrap: wrap;
}
.card {
flex: 1 210px
}
Ich muss entscheiden, wie viele Karten in meiner Box setzen, zeigte die Anzahl der Karten wird die richtige Menge genau zwei Reihen zu füllen.
===== is a card
---------------------
| ===== ===== ===== |
| ===== ===== ===== |
---------------------
Das bedeutet, dass bei einem .box
von 630px
, werde ich 6 Karten anzuzeigen. (630/210) * 2 = 6
Um die Karten-Nummer pro Zeile zu berechnen ich diesen Code bin mit:
getCardsPerRow() {
let listWidth = box.clientWidth
// use flex-basis width to compute the initial number of cards per row
let cardsNumber = Math.floor(listWidth/210)
// add to the cards width the left amount of available space (distributing it evenly)
let cardWidth = Math.floor(listWidth/cardsNumber + listWidth % cardsNumber)
// divide listWidth by the width of a single card to get the total
return Math.floor(listWidth/cardWidth)
}
Es funktioniert gut auf den meisten Situationen. Aber mit einigen Breiten bekomme ich eine falsche Nummer.
Zum Beispiel mit einem box
breiten 1132px
, erhalte ich 4
, auch wenn Flexbox 5
Karten auf einer einzigen Zeile setzen.
Probieren Sie einen anderen Ansatz, wenn ich die Kartennummer tun Math.floor(listWidth/210)
, werde ich ein falsches Ergebnis mit (zum Beispiel) box
Wide 1075px
.
Es sollte 4 zurückgeben (gemäß dem flexbox CSS-Ergebnis), aber stattdessen gibt es 5 zurück.
Was mache ich falsch?
Warum fügen Sie 'listWidth% cardsNumber' hinzu? Ich denke 'listWidth/cardsNumber' sollte ausreichen. –
Ich habe es schon versucht (es ist der zweite Versuch in meinem Beitrag) –
Umm, 'floor (1075/210)' ist 5. Habe ich etwas falsch verstanden? –