Lutando para que as coisas se comportem.
Eu tenho uma lista dinâmica de imagens em um site responsivo. O layout é gerado onde as imagens podem estar em linhas / colunas ou linhas de colunas.
Este exemplo está próximo, mas as imagens emparelhadas não se alinham na parte inferior à medida que o navegador é redimensionado ...
<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>
Eu experimentei o ajuste de objetos, mas o Safari parece desmoronar.
EDIT: para referência, aqui está um exemplo do problema.
html
css
flexbox
object-fit
Dan
fonte
fonte
vertical-align: bottom
a seusimg
elementos ( demonstração | explicação )Respostas:
Obviamente, você pode usar imagens de fundo em vez da tag img HTML. Se você puder acessar a altura da imagem, eu recomendaria preenchê-la dinamicamente via JavaScript ou PHP (ou qualquer configuração que você tenha). Coloquei um div espaçador dentro do recipiente de embalagem, que poderia ser usado para esse fim.
fonte
Isso é chamado de arredondamento de pixels, ou o problema de subpixels, e é um problema matemático básico:
Você tem dois contêineres com uma largura relativa de ~ 50% dentro de um pai responsivo. O que deve acontecer quando a largura desse elemento pai é um número ímpar? Diga 211 pixels. 50% de 211px é 105,5px. MAS, não existe .5px - sua tela não consegue acender apenas metade da pequena lâmpada que define fisicamente um pixel. O navegador o arredonda para um número maior ou menor.
Se você olhar de perto, o layout é composto por:
Não há solução para inserir imagens de dimensões variadas dentro de divs de dimensões variadas dentro de um layout orientado a%. Isso é muito arredondamento de pixels para explicar. Se você olhar de perto, esse layout estará " quebrado " 100% do tempo ... deixando pixels em branco ou diminuindo / distorcendo as imagens.
Qualquer que seja o hack que alguém presente gerará esse pequeno pixel em branco, distorcerá as imagens (novamente, elas não têm a mesma altura ou largura) ou ocultará secretamente os pixels da imagem em algum lugar.
Agora, um truque rápido para o snipet específico que você apresentou:
Novamente, nenhuma "solução" existe nessas condições, apenas hacks com desvantagens.
* Para ser justo com os navegadores, eles estão fazendo um trabalho tão bom ao lidar com o arredondamento de pixels que a maioria dos desenvolvedores nem percebe que isso é um problema.
fonte
Quando o CSS falha, eu vou vanillaz:
Mostrar snippet de código
Notas:
resizeFlexFills()
precisa estar vinculadoload
eresize
atualizar as alturasthrottle
para permitir apenas executá-lo a cada100ms
;px
. Isso pode ser feito de maneira mais inteligente, mas a análise de unidades CSS em pixels está muito fora do escopo desta questão (IMHO).transition
é totalmente valanão é "responsivo", mas pode ser feito facilmente. para que isso aconteça, deixaria os<img>
s dentro, exibi-los como blocos na largura desejada do dispositivo, enquanto alterava oflex-direction
paracolumn
.na verdade, eu respondi bem. Se você não quiser, remova o
@media
código da consulta.fonte
Para que a imagem caiba na div, você precisa adicionar
height: 100%
o estilo img e também especificar a altura da div na div pai da img.Por favor, veja o código abaixo:
fonte