Ich kämpfe darum, dass sich die Dinge verhalten.
Ich habe eine dynamische Liste von Bildern auf einer reaktionsfähigen Site. Das Layout wird dort generiert, wo Bilder in Zeilen / Spalten oder Spaltenzeilen sein können.
Dieses Beispiel ist nah, aber die gepaarten Bilder werden unten nicht ausgerichtet, da der Browser die Größe ändert ...
<div style="width:100%;">
<div style="width:60%; display: flex; margin-left: auto; margin-right: auto;">
<div id="outterrow" style="width:100%; float:left; display: flex; padding-bottom: 1.15%; ">
<div id="column" style="float: left;overflow: hidden;background-color: inherit;width: 49.35%;">
<div id="row" style=" padding-right: 2.330294%; "><img title="2.jpeg" src="https://i.postimg.cc/Xv5YsYv7/2.jpg" sizes="100vw" width="100%">
</div>
</div>
<div id="column" style="float: left;overflow: hidden;background-color: inherit;width: 50.65%;">
<div id="row" style=" "><img title="1.jpg" src="https://i.postimg.cc/B6cQG7Dr/1.jpg" sizes="100vw" width="100%"> </div>
</div>
</div>
</div>
<div style="width:60%; display: flex; margin-left: auto; margin-right: auto;">
<div id="outterrow" style="width:100%; float:left; display: flex; padding-bottom: 1.15%; ">
<div id="column" style="float: left;overflow: hidden;background-color: inherit;width: 100%;">
<div id="row" style=" "><img title="3.jpg" src="https://i.postimg.cc/ZnbYYPxC/3.jpg" sizes="100vw" width="100%"> </div>
</div>
</div>
</div>
<div style="width:60%; display: flex; margin-left: auto; margin-right: auto;">
<div id="outterrow" style="width:100%; float:left; display: flex; padding-bottom: 1.15%; ">
<div id="column" style="float: left;overflow: hidden;background-color: inherit;width: 43.55%;">
<div id="row" style=" padding-right: 2.640643%; "><img title="5.jpg" src="https://i.postimg.cc/bwsJ2Tcn/5.jpg" sizes="100vw" width="100%"> </div>
</div>
<div id="column" style="float: left;overflow: hidden;background-color: inherit;width: 56.45%;">
<div id="row" style=" "><img title="4.jpg" src="https://i.postimg.cc/XJ07m6ZK/4.jpg" sizes="100vw" width="100%"> </div>
</div>
</div>
</div>
</div>
Ich habe mit Objektanpassung experimentiert, aber Safari scheint auseinanderzufallen.
EDIT: Als Referenz hier ist ein Beispiel für das Problem.
html
css
flexbox
object-fit
Dan
quelle
quelle
vertical-align: bottom
zu Ihrenimg
Elementen hinzu ( Demo | Erklärung )Antworten:
Sie können natürlich Hintergrundbilder anstelle des HTML-IMG-Tags verwenden. Wenn Sie auf die Bildhöhe zugreifen können, würde ich empfehlen, diese dynamisch über JavaScript oder PHP (oder ein beliebiges Setup) auszufüllen. Ich legte ein Spacer-Div in den Verpackungsbehälter, der für diesen Zweck verwendet werden konnte.
quelle
Dies wird als Pixelrundung oder Subpixel-Problem bezeichnet und ist ein grundlegendes mathematisches Problem:
Sie haben zwei Container mit einer relativen Breite von ~ 50% in einem ansprechenden Elternteil. Was soll passieren, wenn die Breite des übergeordneten Elements eine ungerade Zahl ist? Sagen wir 211 Pixel. 50% von 211px sind 105,5px. ABER es gibt keine .5px - Ihr Bildschirm kann einfach nicht nur die Hälfte dieser kleinen Glühbirne einschalten, die ein Pixel physisch definiert. Der Browser rundet es auf eine größere oder kleinere Zahl.
Wenn Sie genau hinschauen, besteht das Layout aus:
Es gibt einfach keine Lösung, um Bilder mit unterschiedlichen Abmessungen in Divs mit unterschiedlichen Abmessungen innerhalb eines% -orientierten Layouts einzufügen. Das ist einfach zu viel Pixelrundung, um das zu berücksichtigen. Wenn Sie genau hinschauen, ist dieses Layout 100% der Zeit " kaputt " ... es hinterlässt entweder leere Pixel oder verkleinert / verzerrt die Bilder im Inneren.
Welcher Hack auch immer vorhanden ist, erzeugt entweder dieses kleine leere Pixel, verzerrt die Bilder (wieder haben sie nicht die gleiche Höhe oder Breite) oder versteckt Pixel heimlich irgendwo vor dem Bild.
Nun ein kurzer Hack für das spezifische Snipet, das Sie vorgestellt haben:
Auch hier gibt es keine "Lösung" unter diesen Bedingungen, nur Hacks mit Nachteilen.
* Um fair mit Browsern umzugehen, arbeiten sie so gut mit Pixelrundungen, dass die meisten Entwickler nicht einmal erkennen, dass dies ein Problem ist.
quelle
Wenn CSS zu kurz kommt, gehe ich vanillaz:
Code-Snippet anzeigen
Anmerkungen:
resizeFlexFills()
gebunden werdenload
undresize
die Höhen aktualisiert werdenthrottle
um nur zuzulassen, dass es alle ausgeführt wird100ms
;px
. Es kann intelligenter gemacht werden, aber das Parsen von CSS-Einheiten in Pixel liegt weit außerhalb des Rahmens dieser Frage (IMHO).transition
ist total grabenfähigEs ist nicht "reaktionsschnell", könnte aber leicht gemacht werden. Dazu lasse ich das<img>
s in, zeige es als Blöcke unter der gewünschten Gerätebreite an und ändere dasflex-direction
incolumn
.Eigentlich habe ich es reaktionsschnell gemacht. Wenn Sie es nicht möchten, entfernen Sie den
@media
Abfragecode.quelle
Damit das Bild zum div passt, müssen Sie
height: 100%
den img-Stil hinzufügen und die div-Höhe auf dem übergeordneten div des img angeben.Bitte beachten Sie den folgenden Code:
quelle