Eu tenho uma imagem e quero definir uma largura e altura específicas (em pixels)
Mas se eu definir largura e altura usando css ( width:150px; height:100px
), a imagem será esticada e poderá ser feia.
Como preencher imagens para um tamanho específico usando CSS e não esticá- lo?
Exemplo de imagem de preenchimento e alongamento:
Imagem original:
Imagem esticada:
Imagem preenchida:
Observe que no exemplo de imagem preenchida acima: primeiro, a imagem é redimensionada para 150x255 (proporção mantida) e, em seguida, cortada para 150x100.
width
eheight
devem ajustar de acordoRespostas:
Se você deseja usar a imagem como plano de fundo CSS, existe uma solução elegante. Basta usar
cover
oucontain
nabackground-size
propriedade CSS3.Embora
cover
você tenha uma imagem em escala reduzida,contain
uma imagem em escala reduzida. Ambos preservarão a proporção de pixel.http://jsfiddle.net/uTHqs/ (usando capa)
http://jsfiddle.net/HZ2FT/ (usando contêm)
Essa abordagem tem a vantagem de ser amigável com os displays Retina, de acordo com o guia rápido de Thomas Fuchs.
Vale ressaltar que o suporte ao navegador para ambos os atributos exclui o IE6-8.
fonte
background-repeat: no-repeat;
? Se a imagem cobrir seu contêiner, ela não se repetirá de qualquer maneira.Você pode usar a propriedade css
object-fit
.Veja o exemplo aqui
Existe um polyfill para o IE: https://github.com/anselmh/object-fit
fonte
img
tags (não apenas obackground-image
método descrito na resposta acima). Obrigado :)object-fit
não há suporte para muitos navegadores .background-size
raramente é uma solução viável em meus projetos. É menos provável que você receba qualquer benefício de SEO e não pode fornecer uma tag ALT, legenda etc. para acompanhar a imagem, na qual você pode fornecer um contexto adicional para os leitores de tela.object-fit: cover;
faz. Muito obrigadoAprimoramento na resposta acima por @afonsoduarte ( NÃO o aceito) .
no caso de você estar usando o bootstrap
Existem três diferenças:
Fornecendo
width:100%
o estilo.Isso é útil se você estiver usando o bootstrap e desejar que a imagem estenda toda a largura disponível.
A especificação da
height
propriedade é opcional. Você pode removê-la / mantê-la conforme necessárioA propósito, NÃO há necessidade de fornecer os atributos
height
ewidth
noimage
elemento, pois eles serão substituídos pelo estilo.portanto, basta escrever algo assim.
fonte
A única maneira real é ter um contêiner em torno de sua imagem e usar
overflow:hidden
:HTML
CSS
É difícil para o CSS fazer o que você deseja e centralizar a imagem; há uma correção rápida no jquery, como:
http://jsfiddle.net/x86Q7/2/
fonte
margin-top
imagem por exemplo50px
(veja: jsfiddle.net/x86Q7/1 ), mas como cortá-la do centro real ? (Sem jQuery?)Solução CSS sem JS e sem imagem de plano de fundo:
Método 1 "margem automática" (IE8 + - NÃO FF!):
http://jsfiddle.net/5xjr05dt/
Método 2 "transformar" (IE9 +):
http://jsfiddle.net/5xjr05dt/1/
O método 2 pode ser usado para centralizar uma imagem em um contêiner de largura / altura fixo. Ambos podem transbordar - e se a imagem for menor que o contêiner, ela ainda será centralizada.
http://jsfiddle.net/5xjr05dt/3/
Método 3 "invólucro duplo" (IE8 + - NÃO FF!):
http://jsfiddle.net/5xjr05dt/5/
Método 4 "invólucro duplo E imagem dupla" (IE8 +):
http://jsfiddle.net/5xjr05dt/26/
Os métodos 1 e 3 parecem não funcionar com o Firefox
fonte
Outra solução é colocar a imagem em um recipiente com a largura e altura desejadas. Usando esse método, você não precisaria definir a imagem como imagem de plano de fundo de um elemento.
Em seguida, você pode fazer isso com uma
img
tag e apenas definir uma largura e uma altura máxima no elemento.CSS:
HTML:
Agora, quando você altera o tamanho do contêiner, a imagem aumenta automaticamente o máximo possível, sem sair dos limites ou distorcer.
Se você deseja centralizar a imagem na vertical e na horizontal, pode alterar o CSS do contêiner para:
Aqui está um JS Fiddle http://jsfiddle.net/9kUYC/2/
fonte
Partindo da resposta de @Dominic Green usando jQuery, aqui está uma solução que deve funcionar para imagens que são mais largas do que altas ou mais altas.
http://jsfiddle.net/grZLR/4/
Provavelmente existe uma maneira mais elegante de fazer o JavaScript, mas isso funciona.
fonte
Tenha cuidado se estiver usando um tema ou algo assim, eles geralmente declaram img max-width em 100%. Você tem que fazer nenhum. Testá-lo :)
https://jsfiddle.net/o63u8sh4/
fonte
Ajudei a criar um plug-in jQuery chamado Fillmore , que lida com os
background-size: cover
navegadores que o suportam e tem um calço para aqueles que não o fazem. Dê uma olhada!fonte
Eu acho que é muito tarde para esta resposta. De qualquer forma, espero que isso ajude alguém no futuro. Eu enfrentei o problema de posicionar os cartões em angular. Existem cartões exibidos para a matriz de eventos. Se a largura da imagem do evento for grande para o cartão, a imagem deverá ser mostrada cortando dos dois lados e com uma altura de 100%. Se a altura da imagem for longa, a parte inferior das imagens será cortada e a largura será de 100%. Aqui está a minha solução css pura para isso:
HTML:
CSS
fonte
Tente algo assim: http://jsfiddle.net/D7E3E/4/
Usando um contêiner com estouro: hidden
EDIT: @Dominic Green me venceu.
fonte
Isso preencherá as imagens em um tamanho específico, sem esticá-las ou cortá-las
fonte
Para ajustar a imagem em tela cheia, tente o seguinte:
repetição de fundo: redondo;
fonte
fonte