Luchando para que las cosas se comporten.
Tengo una lista dinámica de imágenes en un sitio receptivo. El diseño se genera donde las imágenes pueden estar en filas / columnas o filas de columnas.
Este ejemplo está cerca, pero las imágenes emparejadas no se alinean en la parte inferior a medida que el navegador cambia de tamaño ...
<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>
He experimentado con el ajuste de objetos, pero Safari parece desmoronarse.
EDITAR: para referencia aquí es un ejemplo del problema.
html
css
flexbox
object-fit
Dan
fuente
fuente
vertical-align: bottom
a susimg
elementos ( demo | explicación )Respuestas:
Por supuesto, puede usar imágenes de fondo en lugar de la etiqueta img HTML. Si puede acceder a la altura de la imagen, recomendaría completarla dinámicamente a través de JavaScript o PHP (o cualquier configuración que tenga). Coloqué un separador dentro del contenedor de envoltura, que podría usarse para ese propósito.
fuente
Esto se llama redondeo de píxeles, o el problema de subpíxel, y es un problema matemático básico:
Tiene dos contenedores con un ancho relativo de ~ 50% dentro de un padre receptivo. ¿Qué debería suceder cuando el ancho de ese elemento padre es un número impar? Digamos 211 píxeles. 50% de 211px es 105.5px. PERO, no hay nada como .5px : su pantalla simplemente no puede encender solo la mitad de esa pequeña bombilla que define físicamente un píxel. El navegador lo redondea a un número mayor o menor.
Si mira de cerca, el diseño está compuesto por:
Simplemente no hay solución para insertar imágenes de diferentes dimensiones dentro de divs de diferentes dimensiones dentro de un diseño orientado en%. Eso es demasiado redondeo de píxeles para tener en cuenta. Si mira de cerca, este diseño está " roto " el 100% del tiempo ... o deja píxeles en blanco o encoge / distorsiona las imágenes en su interior.
Cualquiera que sea el truco que alguien presente generará ese pequeño píxel en blanco, distorsionará las imágenes (nuevamente, no tienen la misma altura o ancho) u ocultará en secreto los píxeles de la imagen en algún lugar.
Ahora, un truco rápido para el fragmento específico que has presentado:
Una vez más, no existe una "solución" en estas condiciones, solo hacks con inconvenientes.
* Para ser justos con los navegadores, están haciendo un trabajo tan bueno manejando el redondeo de píxeles que la mayoría de los desarrolladores ni siquiera se dan cuenta de que esto es un problema.
fuente
Cuando CSS falla, me voy vanillaz:
Mostrar fragmento de código
Notas:
resizeFlexFills()
debe estar vinculadoload
yresize
actualizar las alturasthrottle
para permitir solo ejecutarlo todos100ms
;px
. Se puede hacer de manera más inteligente, pero analizar las unidades CSS en píxeles está fuera del alcance de esta pregunta (en mi humilde opinión).transition
es totalmente zanjano es "sensible", pero podría hacerse fácilmente. para que eso suceda, dejaría los<img>
s dentro, los mostraría como bloques bajo el ancho deseado del dispositivo, mientras cambiabaflex-direction
acolumn
.En realidad, lo hice receptivo. Si no lo desea, elimine el
@media
código de consulta.fuente
Para que la imagen se ajuste al div, debe agregar
height: 100%
el estilo img y también especificar la altura del div en el div padre del img.Por favor vea el siguiente código:
fuente