Como redimensionar automaticamente uma imagem grande para que ela caiba em um contêiner div de largura menor, mantendo a proporção largura: altura?
Exemplo: stackoverflow.com - quando uma imagem é inserida no painel do editor e a imagem é muito grande para caber na página, a imagem é redimensionada automaticamente.
html
css
image
autoresize
001
fonte
fonte
Respostas:
Não aplique uma largura ou altura explícita à tag da imagem. Em vez disso, dê:
Além disso,
height: auto;
se você desejar especificar apenas uma largura.Exemplo: http://jsfiddle.net/xwrvxser/1/
fonte
<a>
etiqueta anexa , a imagem não foi redimensionada. A aplicação das regras à marca A resolveu esse problema.ajuste de objeto
Acontece que há outra maneira de fazer isso.
fará o trabalho. É coisa de CSS 3.
Fiddle: http://jsfiddle.net/mbHB4/7364/
fonte
object-fit: cover
Atualmente, não há como fazer isso corretamente de maneira determinística, com imagens de tamanho fixo, como arquivos JPEG ou PNG.
Para redimensionar uma imagem proporcionalmente, você tem que definir tanto a altura ou largura para "100%", mas não ambos. Se você definir "100%", sua imagem será ampliada.
A escolha da altura ou largura depende das dimensões da imagem e do contêiner:
height="100%"
-la.width="100%"
-la.Se sua imagem for um SVG, que é um formato de imagem vetorial de tamanho variável, você poderá fazer a expansão para ajustar-se ao contêiner automaticamente.
Você só precisa garantir que o arquivo SVG não tenha nenhuma dessas propriedades definidas na
<svg>
tag:A maioria dos programas de desenho vetorial lá fora definirá essas propriedades ao exportar um arquivo SVG; portanto, você deverá editar manualmente o arquivo toda vez que exportar ou escrever um script para fazê-lo.
fonte
background-size: contain
.Aqui está uma solução que alinhará vertical e horizontalmente o img dentro de uma div sem alongar, mesmo que a imagem fornecida seja muito pequena ou muito grande para caber na div.
O conteúdo HTML:
O conteúdo CSS:
A parte do jQuery:
fonte
Simplifique!
Dê ao contêiner um número fixo
height
e, em seguida, para aimg
tag dentro dele, definawidth
emax-height
.A diferença é que você define
width
100%, não omax-width
.fonte
Um belo truque.
Você tem duas maneiras de tornar a imagem responsiva.
Execute aqui
Mas deve-se usar
img
tag para colocar imagens, pois é melhor do quebackground-image
em termos de SEO que você pode escrever palavra-chave naalt
doimg
tag. Então, aqui está você pode tornar a imagem responsiva.Execute aqui
fonte
Você pode definir a imagem como plano de fundo para uma div e usar a propriedade CSS background-size :
Ele irá "Dimensionar a imagem de fundo para que seja a maior possível, para que a área de fundo fique completamente coberta pela imagem de fundo. Algumas partes da imagem de fundo podem não estar visíveis dentro da área de posicionamento de fundo" - W3Schools
fonte
alt
valores e outras coisas (embora também possa adicionar uma imagem fictícia invisível para tecnologias não assistidas) ou pode ser clicável.background-size: contain
e eu acho que eu iria pessoalmente ir a rota imagem manequim só porque não há realmente uma maneira fácil de fazer o que está descrito aqui sem JavaScriptConfira minha solução: http://codepen.io/petethepig/pen/dvFsA
Está escrito em CSS puro, sem nenhum código JavaScript. Ele pode lidar com imagens de qualquer tamanho e orientação.
Dado esse HTML:
o código CSS seria:
fonte
Acabei de publicar um plugin jQuery que faz exatamente o que você precisa com várias opções:
https://github.com/GestiXi/image-scale
Uso:
HTML
Javascript
fonte
Essa solução não estica a imagem e preenche todo o contêiner, mas corta parte da imagem.
HTML:
CSS:
fonte
Vejo que muitas pessoas sugeriram o ajuste de objetos, o que é uma boa opção. Mas se você deseja que ele funcione também em navegadores antigos , há outra maneira de fazê-lo facilmente.
É bem simples. 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
O seguinte funciona perfeitamente para mim:
fonte
Eu tenho uma solução muito melhor sem a necessidade de qualquer JavaScript. É totalmente responsivo, e eu o uso muito. Você geralmente precisa ajustar uma imagem de qualquer proporção a um elemento de contêiner com uma proporção especificada. E ter tudo isso totalmente responsivo é uma obrigação.
Você pode definir largura máxima e altura máxima de forma independente; a imagem respeitará a menor (dependendo dos valores e da proporção da imagem). Você também pode definir a imagem para alinhar como desejar (por exemplo, para uma imagem do produto em um fundo branco infinito, você pode posicioná-la no centro da parte inferior com facilidade).
fonte
Dê a altura e a largura necessárias para a sua imagem à div que contém a tag <img>. Não se esqueça de fornecer a altura / largura na etiqueta de estilo adequada.
Na tag <img>, dê
max-height
emax-width
como 100%.Você pode adicionar os detalhes nas classes apropriadas depois de acertar.
fonte
O código abaixo é adaptado das respostas anteriores e é testado por mim usando uma imagem chamada
storm.jpg
.Este é o código HTML completo para uma página simples que exibe a imagem. Isso funciona perfeitamente e foi testado por mim em www.resizemybrowser.com. Coloque o código CSS na parte superior do seu código HTML, abaixo da seção principal. Coloque o código da imagem onde quiser.
fonte
fonte
Você precisa informar ao navegador a altura de onde o está colocando:
fonte
Editar: O posicionamento anterior da imagem baseada em tabela teve problemas no Internet Explorer 11 (
max-height
não funciona emdisplay:table
elementos). Substituí-lo pelo posicionamento baseado em linha, que não só funciona bem no Internet Explorer 7 e no Internet Explorer 11, mas também requer menos código.Aqui está minha opinião sobre o assunto. Só funcionará se o contêiner tiver um tamanho especificado (
max-width
emax-height
não parecer se dar bem com contêineres que não tenham tamanho concreto), mas escrevi o conteúdo CSS de uma maneira que permita sua reutilização (adicionarpicture-frame
classe epx125
classe de tamanho para o contêiner existente).Em CSS:
E em HTML:
DEMO
Mostrar snippet de código
Editar: Possível melhoria adicional usando JavaScript (aumento da escala de imagens):
fonte
line-height
. Se o texto alt tem mais de uma linha, ele vai começar a olhar muito ruim ...Corrigi esse problema usando o seguinte código:
fonte
Conforme respondido aqui , você também pode usar
vh
unidades em vez demax-height: 100%
não funcionar no navegador (como o Chrome):fonte
vh
? e o que não funciona no Chrome?max-height: xx%
(unidade percentual) não funciona no Chrome com alguns elementosimg
, mas avh
unidade funciona. No entanto, os percentuais trabalhar comheight
,width
,max-width
, etc.Centralizei e dimensionei proporcionalmente uma imagem dentro de um hiperlink horizontal e verticalmente desta maneira:
Foi testado no Internet Explorer, Firefox e Safari.
Mais informações sobre centralização estão aqui .
fonte
A resposta aceita do Thorn007 não funciona quando a imagem é muito pequena .
Para resolver isso, adicionei um fator de escala . Dessa forma, aumenta a imagem e preenche o contêiner div.
Exemplo:
Notas:
-webkit-transform:scale(4); -webkit-transform-origin:left top;
o estilo.fonte
Se você estiver usando o Bootstrap, basta adicionar a
img-responsive
classe àimg
tag:Imagens de Bootstrap
fonte
Uma solução simples (correção em quatro etapas !!) que parece funcionar para mim está abaixo. O exemplo usa a largura para determinar o tamanho geral, mas você também pode inverter para usar a altura.
%
para tamanho relativo ou dimensionamento automático (com base no recipiente ou na imagem da imagem)px
(ou outro) para uma dimensão estática ou definidaPor exemplo,
fonte
Todas as respostas fornecidas, incluindo a aceita, funcionam apenas sob a suposição de que o
div
wrapper é de tamanho fixo. Portanto, é assim que se faz, seja qual for o tamanho dodiv
wrapper, e isso é muito útil se você desenvolver uma página responsiva:Escreva estas declarações dentro do seu
DIV
seletor:Em seguida, coloque estas declarações dentro do seu
IMG
seletor:MUITO IMPORTANTE:
O valor de
maxHeight
deve ser o mesmo para os seletoresDIV
eIMG
.fonte
Uma solução simples é usar o flexbox. Defina o CSS do contêiner para:
Ajuste a largura da imagem contida para 100% e você deverá obter uma boa imagem centralizada no contêiner com as dimensões preservadas.
fonte
A solução é fácil com um pouco de matemática ...
Basta colocar a imagem em uma div e, em seguida, no arquivo HTML onde você especifica a imagem. Defina os valores de largura e altura em porcentagens usando os valores de pixel da imagem para calcular a proporção exata de largura e altura.
Por exemplo, digamos que você tenha uma imagem com largura de 200 pixels e altura de 160 pixels. Você pode dizer com segurança que o valor da largura será 100%, porque é o valor maior. Para calcular o valor da altura, basta dividir a altura pela largura que fornece o valor percentual de 80%. No código, será algo parecido com isto ...
fonte
A maneira mais simples de fazer isso é usando
object-fit
:Se você estiver usando o Bootstrap, basta adicionar a
img-responsive
classe e mudar parafonte
Verifique minha resposta, Torne uma imagem responsiva - de maneira mais simples -
fonte
Ou você pode simplesmente usar:
Agora a imagem ocupará todo o espaço da div.
fonte