Estou trabalhando com imagens e me deparei com um problema com proporções.
<img src="big_image.jpg" width="900" height="600" alt="" />
Como você pode ver, height
e width
já está especificado. Adicionei regra CSS para imagens:
img {
max-width:500px;
}
Mas para big_image.jpg
, eu recebo width=500
e height=600
. Como posso definir as imagens para serem redimensionadas, mantendo suas proporções.
css
image
aspect-ratio
moonvader
fonte
fonte
<img>
que inclui largura e altura e acho que isso significa que você precisa usar!important
para contornar as informações de largura / altura da tag.!important
Não é necessário.Eu lutei bastante com esse problema e, finalmente, cheguei a esta solução simples:
Você pode ajustar a largura e a altura para atender às suas necessidades, e a propriedade de ajuste do objeto fará o corte para você.
Felicidades.
fonte
object-fit
é fantástico, ótima dica! Existem algumas bibliotecas finas de polyfill se alguém estiver se perguntando sobre a compatibilidade com o IE.object-fit: contain
e especificar uma largura ou altura!As soluções abaixo permitirão o aumento e redução da imagem , dependendo da largura da caixa pai.
Todas as imagens têm um contêiner pai com uma largura fixa apenas para fins de demonstração . Na produção, essa será a largura da caixa pai.
Melhores práticas (2018):
Esta solução informa ao navegador para renderizar a imagem com a largura máxima disponível e ajustar a altura como uma porcentagem dessa largura.
Solução mais sofisticada:
Com a solução mais sofisticada, você poderá cortar a imagem independentemente do tamanho e adicionar uma cor de fundo para compensar o corte.
Para a linha que especifica o preenchimento, é necessário calcular a proporção da imagem, por exemplo:
Portanto, preenchimento superior = 34,37%.
fonte
!important
é necessário aqui.A propriedade de tamanho do plano de fundo é, por exemplo,> = 9 apenas, mas se estiver tudo bem com você, você pode usar uma div com
background-image
e definirbackground-size: contain
:Agora você pode simplesmente definir o tamanho do seu div para o que quiser e não apenas a imagem manterá sua proporção, como também será centralizada vertical e horizontalmente dentro do div. Apenas não esqueça de definir os tamanhos no css, já que divs não tem o atributo width / height na própria tag.
Essa abordagem é diferente da resposta setecs, usando isso, a área da imagem será constante e definida por você (deixando espaços vazios horizontal ou verticalmente, dependendo do tamanho da div e da proporção da imagem), enquanto a resposta setecs fornecerá uma caixa exatamente tamanho da imagem dimensionada (sem espaços vazios).
Edit: De acordo com a documentação de tamanho de plano de fundo MDN, você pode simular a propriedade de tamanho de plano de fundo no IE8 usando uma declaração de filtro proprietária:
fonte
Muito parecido com algumas respostas aqui, mas no meu caso eu tinha imagens que às vezes eram mais altas, às vezes maiores.
Esse estilo funcionou como um encanto para garantir que todas as imagens usem todo o espaço disponível, mantenha a proporção e não corte:
fonte
object-fit
funciona para mim funciona em todos os navegadores?.img
uma classe nos pais ou na imagem? Você poderia criar um jsfiddle com exemplo para imagens retrato e paisagem?Remova a propriedade "height".
Ao especificar ambos, você está alterando a proporção da imagem. Apenas definir um redimensionará, mas preservará a proporção.
Opcionalmente, para restringir as sobredimensionamentos:
fonte
height
atributo naimg
tag é que o navegador não pode calcular quanto espaço a imagem ocupará antes de fazer o download da imagem. Isso torna a página mais lenta para renderizar e pode levar a mais "pulos".Basta adicionar isso ao seu css, ele diminuirá e expandirá automaticamente mantendo a proporção original.
fonte
100%
vez de um valor específico de pixel.display: block;
é desnecessário.Não existe uma maneira padrão de preservar a proporção para imagens com
width
,height
emax-width
especificadas juntas.Portanto, somos forçados a especificar
width
eheight
evitar "pulos" na página durante o carregamento de imagens, ou a usarmax-width
e não especificar dimensões para as imagens.Especificar apenas
width
(semheight
) normalmente não faz muito sentido, mas você pode tentar substituir oheight
atributo HTML adicionando uma regra comoIMG {height: auto; }
na sua folha de estilo.Veja também o bug relacionado do Firefox 392261 .
fonte
!important
em CSS. É um hack que acabará voltando para assombrá-lo.!important
aqui.Aqui está uma solução:
Isso garantirá que a imagem sempre cubra todo o pai (diminuindo e diminuindo a escala) e mantendo a mesma proporção.
fonte
Defina a classe CSS da sua tag de contêiner de imagem para
image-class
:e adicione isso a sua folha de estilo CSS.
fonte
Para manter uma imagem responsiva e ainda impor a imagem a uma determinada proporção, você pode fazer o seguinte:
HTML:
E SCSS:
Isso pode ser usado para impor uma certa proporção, independentemente do tamanho da imagem que os autores carregam.
Obrigado a @Kseso em http://codepen.io/Kseso/pen/bfdhg . Verifique este URL para obter mais proporções e um exemplo de trabalho.
fonte
border-radius
. Mas, infelizmente, ele corta a imagem e não se sai tão bem ao fazer uma borda para a imagem na div, tanto quanto eu tentei.Para forçar a imagem que caiba no tamanho exato, você não precisa escrever muitos códigos. É tão simples
fonte
https://jsfiddle.net/sot2qgj6/3/
Aqui está a resposta se você deseja colocar uma imagem com porcentagem fixa de largura , mas não pixel fixo de largura .
E isso será útil ao lidar com diferentes tamanhos de tela .
Os truques são
padding-top
para definir a altura da largura.position: absolute
para colocar a imagem no espaço de preenchimento.max-height and max-width
para garantir que a imagem não ultrapasse o elemento pai.display:block and margin: auto
para centralizar a imagem.Também comentei a maioria dos truques dentro do violino.
Também encontro outras maneiras de fazer isso acontecer. Não haverá imagem real em html, então eu pessoalmente prefiro a resposta principal quando preciso do elemento "img" em html.
css simples usando o plano de fundo http://jsfiddle.net/4660s79h/2/
imagem de fundo com a palavra no topo http://jsfiddle.net/4660s79h/1/
o conceito de usar posição absoluta é daqui http://www.w3schools.com/howto/howto_css_aspect_ratio.asp
fonte
Você pode usar isto:
fonte
Você pode criar uma div como esta:
E use este css para estilizá-lo:
fonte
Sugiro que, para uma abordagem responsiva, a melhor prática seja usar as unidades Viewport e os atributos min / max da seguinte maneira:
fonte
Isso reduzirá a imagem se ela for muito grande para a área especificada (como desvantagem, ela não aumentará a imagem).
A solução da setec é adequada para "Reduzir para caber" no modo automático. Mas, para otimizar a EXPANDIR para caber no modo 'automático', você precisa primeiro colocar a imagem recebida em um ID de temperatura. Verifique se ela pode ser expandida em altura ou largura (dependendo da razão de aspecto em relação à proporção de seu bloco de exibição),
Essa abordagem é útil quando as imagens recebidas são menores que a caixa de exibição. Você deve salvá-los em seu servidor no tamanho Original Pequeno, em vez da versão expandida, para preencher a Caixa de exibição Maior e economizar em tamanho e largura de banda.
fonte
fonte
Que tal usar um pseudo-elemento para alinhamento vertical? Este código a menos é para um carrossel, mas acho que funciona em todos os contêineres de tamanho fixo. Ele mantém a proporção e insere @ barras cinza-escuras na parte superior / inferior ou esquerda / gravação para a dimensão mais curta. Enquanto isso, a imagem é centralizada horizontalmente pelo alinhamento do texto e verticalmente pelo pseudo-elemento.
fonte
Apresentação em tela cheia:
Lembre-se de que, se a altura da porta de visualização for maior que a imagem, a imagem degradará naturalmente em relação à diferença.
fonte
Penso, finalmente, que esta é a melhor solução, fácil e simples :
fonte