Preciso fazer com que essa imagem se estenda ao tamanho máximo possível sem transbordar <div>
ou distorcer a imagem.
Como não posso prever a proporção da imagem, não há como saber se deve usar:
<img src="url" style="width: 100%;">
ou
<img src="url" style="height: 100%;">
Não posso usar os dois (ou seja, style = "width: 100%; height: 100%;") porque isso esticará a imagem para se ajustar ao <div>
.
O <div>
tamanho é definido pela porcentagem da tela, o que também é imprevisível.
Respostas:
Atualização 2016:
Navegador moderno se comporta muito melhor. Tudo o que você precisa fazer é definir a largura da imagem para 100% ( demo )
Como você não conhece a proporção, precisará usar alguns scripts. Aqui está como eu faria isso com o jQuery ( demo ):
CSS
HTML
Roteiro
fonte
width:auto
ouheight:auto
não afeta a exibição de suas imagens. Por uma questão de fato, de todas as propriedades que você está aplicando à imagem,max-width: 100%
tem algum efeito e afeta apenas a imagem da paisagem. Mas o mais importante é que sua resposta não ajuda a esticar uma imagem pequena para encher um recipiente maior.Existe uma maneira muito mais fácil de fazer isso usando apenas
CSS
eHTML
:HTML:
CSS:
Isso colocará sua imagem como plano de fundo e a estenderá para caber no
div
tamanho sem distorção.fonte
background-size: cover;
é a verdadeira magia aqui, e é CSS3, mas tem suporte ao navegador razoável na maioria das versões recentes (ver: w3schools.com/cssref/css3_pr_background-size.asp )<div style="background-image: url('path/to/image.jpg');" class="fill"></div>
background-size: cover
não mantém a proporção, partes da imagem que não são proporcionais ao elemento são cortadas. Consulte aquiNão é uma solução perfeita, mas esse CSS pode ajudar. O zoom é o que faz esse código funcionar e, teoricamente, o fator deve ser infinito para funcionar idealmente para imagens pequenas - mas 2, 4 ou 8 funcionam bem na maioria dos casos.
fonte
zoom
amor do Firefox !?zoom
implementado, mas aqui está o link do bug para referência futura: bugzilla.mozilla.org/show_bug.cgi?id=390936 #Se puder, use imagens de fundo e defina
background-size: cover
. Isso fará com que o plano de fundo cubra todo o elemento.CSS
Se você está preso ao uso de imagens embutidas, existem algumas opções. Primeiro, existe
ajuste de objeto
Esta propriedade atua em imagens, vídeos e outros objetos semelhantes a
background-size: cover
.CSS
Infelizmente, o suporte ao navegador não é tão bom com o IE até a versão 11, não suportando nada. A próxima opção usa jQuery
CSS + jQuery
HTML
CSS
Plug-in jQuery personalizado
Use o plugin como este
Ele pega uma imagem, define-a como uma imagem de plano de fundo no elemento wrapper da imagem e remove a
img
tag do documento. Por fim, você poderia usarCSS puro
Você pode usar isso como um substituto. A imagem será ampliada para cobrir seu contêiner, mas não será reduzida.
CSS
Espero que isso ajude alguém, codificação feliz!
fonte
min-
e mudei parawidth: 100%; height: 100%;
e trabalhei! solução incrível! +1 Obrigado!background-size: contain
também é útil se você deseja que nenhuma imagem seja cortada.zoom:0.001
à solução Pure CSS para reduzir.Graças ao CSS3
https://developer.mozilla.org/en-US/docs/Web/CSS/object-fit
IE e EDGE como sempre estranhos: http://caniuse.com/#feat=object-fit
fonte
Atualização 2019.
Agora você pode usar a
object-fit
propriedade css que aceita os seguintes valores:fill | contain | cover | none | scale-down
https://developer.mozilla.org/en-US/docs/Web/CSS/object-fit
Como exemplo, você pode ter um contêiner que contém uma imagem.
fonte
Isso é impossível com apenas HTML e CSS, ou pelo menos exótico e complicado. Se você deseja adicionar algum javascript, aqui está uma solução usando o jQuery:
Isso redimensionará a imagem para que ela caiba sempre dentro do elemento pai, independentemente do tamanho. E como está ligado ao
$(window).resize()
evento, quando o usuário redimensiona a janela, a imagem é ajustada.Isso não tenta centralizar a imagem no contêiner, isso seria possível, mas acho que não é isso que você procura.
fonte
Defina a largura e a altura da
container
div externa . Em seguida, use o estilo abaixo em img:Isso ajudará você a manter uma proporção do seu img
fonte
Se você deseja definir uma largura ou altura máxima (para que não seja muito grande) enquanto mantém a proporção das imagens, você pode fazer o seguinte:
fonte
Me deparei com essa pergunta procurando um problema semelhante. Estou criando uma página da Web com design responsivo e a largura dos elementos colocados na página é definida como uma porcentagem da largura da tela. A altura é definida com um valor vw.
Como estou adicionando postagens com PHP e um back-end de banco de dados, o CSS puro estava fora de questão. No entanto, eu achei a solução jQuery / javascript um pouco problemática, então eu vim com uma solução elegante (então eu me acho pelo menos).
HTML (ou php)
Usando style = "", é possível que o PHP atualize minha página dinamicamente e o estilo CSS, juntamente com style = "", acabe em uma imagem perfeitamente coberta, dimensionada para cobrir a div-tag dinâmica.
fonte
Você pode usar
object-fit: cover;
na div pai.https://css-tricks.com/almanac/properties/o/object-fit/
fonte
Para esticar a imagem até o tamanho máximo possível sem transbordar nem distorcer a imagem.
Aplique...
estilos para a imagem.
fonte
Usando esse método, você pode preencher sua div com a proporção variável da imagem de divs e imagens.
jQuery:
HTML:
CSS:
fonte
Isso fez o truque para mim
fonte
se você trabalha com tag IMG, é fácil.
Eu fiz isso:
mas não achei como fazê-lo funcionar com Enicone #pic {background: url (img / menu.png)}? obrigado
fonte
Eu tive um problema semelhante. Eu resolvi com apenas CSS .
Basicamente,
Object-fit: cover
ajuda você a realizar a tarefa de manter a proporção enquanto posiciona uma imagem dentro de uma div.Mas o problema era
Object-fit: cover
não estava funcionando no IE e estava usando 100% de largura e 100% de altura e proporção e distorção. Em outras palavras, o efeito de zoom da imagem não estava lá no que eu estava vendo no chrome.A abordagem adotada foi posicionar a imagem dentro do contêiner com absoluta e, em seguida, colocá-la no centro usando a combinação:
Uma vez no centro, dou a imagem,
Isso faz com que a imagem obtenha o efeito de Object-fit: cover.
Aqui está uma demonstração da lógica acima.
https://jsfiddle.net/furqan_694/s3xLe1gp/
Essa lógica funciona em todos os navegadores.
fonte
HTML:
JSFiddle
... E se você deseja definir ou alterar a imagem (usando #foo como exemplo):
jQuery:
JavaScript:
fonte
Muitas das soluções encontradas aqui têm algumas limitações: algumas não funcionam no IE (ajuste de objeto) ou em navegadores antigos, outras soluções não aumentam a escala das imagens (apenas diminuem), muitas soluções não suportam o redimensionamento da janela e muitas são não genérico, espere resolução ou layout de correção (retrato ou paisagem)
Se o uso de javascript e jquery não for um problema, tenho esta solução com base no código do @Tatu Ulmanen. Corrigi alguns problemas e adicionei algum código caso a imagem fosse carregada dinamicamente e não estivesse disponível no início. Basicamente, a idéia é ter duas regras css diferentes e aplicá-las quando necessário: uma quando a limitação é a altura; portanto, precisamos mostrar barras pretas nas laterais e a outra regra css quando a limitação é a largura; mostre barras pretas na parte superior / inferior.
Para um elemento HTML como:
fonte