Wie kann man erzwingen, dass die Höhe eines Flex-Elements im gleichen Verhältnis wie seine Breite schrumpft?

  • Ich habe eine Reihe von Bildern in einem Ratespiel, wobei die Anzahl der Bilder zwischen 2 und 5 liegen kann. Bei mehr als 4 Bildern müssen die Bilder verkleinert werden, damit sie in den gleichen Raum passen, daher Flexbox.


    Darüber hinaus sind diese Bilder fast alle 88 x 64 Pixel groß, einige ältere Bilder haben jedoch eine etwas geringere Breite. Diese Bilder stammen von einer API, ich kann sie nicht ändern.


    Das Problem dabei ist, dass sich die Elemente verschieben, wenn ich das Vorlagenbild „Leerer Steckplatz“ durch ein älteres Bild ersetze, weil eines jetzt etwas kleiner ist.


    Meine Lösung hier besteht darin, jedes Bild in einen Container zu legen, um eine Größe von 88 x 64 Pixel zu erzwingen, und Flexbox damit umgehen zu lassen.


    Das ist fast perfekt, AUSSER wenn die Behälter in der Flexbox schrumpfen, ändert sich die Breite, aber die Höhe ändert sich nicht. Die Höhe bleibt bei 64 Pixel, wenn ich möchte, dass sie proportional zur Breite verkleinert wird. Wie kann ich das erreichen?

  • Ohne den Quelltext (HTML und CSS) sowie die Bilder können wir dir nur ganz allgemein helfen und auch nicht ausprobieren, ob unsere Lösungen funktionieren.


    Ich würde zwei Möglichkeiten ausprobieren:


    a) Die Bilder zu Blockelementen machen und ihnen ein max-width mit auf den Weg geben


    oder


    b) eine geeignete Einheit wie vw verwenden.


    Eventuell ist auch CSS-Grid geeigneter als Flexbox.

  • Versuche ob das CSS in dieser Demo dein Problem löst (wobei ich hoffe, dass ich dein Absicht richtig verstanden habe):

  • PS: Nachdem ich deine Frage genauer gelesen habe, habe ich bemerkt, dass ich deine Absicht doch nicht richtig verstanden habe: Du möchtest auch für die schmaleren Bilder eine Breite von 88px erzwingen, d. h. die selbe wie die der breiteren, nicht wahr?

  • Neuer Versuch, ich habe aspect-ratio und object-fit verwendet:

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!