Isso parece trivial, mas depois de toda a pesquisa e codificação, não consigo fazer funcionar. As condições são:
- O tamanho da janela do navegador é desconhecido. Portanto, não proponha uma solução envolvendo tamanhos absolutos de pixels.
- As dimensões originais da imagem são desconhecidas e podem ou não caber na janela do navegador.
- A imagem é centralizada verticalmente e horizontalmente.
- As proporções da imagem devem ser conservadas.
- A imagem deve ser exibida em sua totalidade na janela (sem cortes).
- Não desejo que as barras de rolagem apareçam (e não deveriam aparecer se a imagem couber).
- A imagem é redimensionada automaticamente quando as dimensões da janela mudam, para ocupar todo o espaço disponível sem ser maior que seu tamanho original.
Basicamente, o que eu quero é:
.fit {
max-width: 99%;
max-height: 99%;
}
<img class="fit" src="pic.png">
O problema com o código acima é que ele não funciona: a imagem ocupa todo o espaço vertical de que precisa, adicionando uma barra de rolagem vertical.
À minha disposição está PHP, Javascript, JQuery, mas mataria por uma solução somente CSS. Eu não me importo se não funcionar no IE.
Respostas:
Atualização 11/04/2018
Aqui está uma solução sem Javascript e apenas com CSS . A imagem será centralizada e redimensionada dinamicamente para caber na janela.
A solução [outra, antiga], usando JQuery, define a altura do contêiner da imagem (
body
no exemplo abaixo) para que amax-height
propriedade na imagem funcione conforme o esperado. A imagem também será redimensionada automaticamente quando a janela do cliente for redimensionada.Nota: O usuário gutierrezalex empacotou uma solução muito semelhante a um plugin JQuery nesta página.
fonte
Aqui está uma solução simples de CSS apenas ( JSFiddle ), funciona em qualquer lugar, móvel e IE incluído:
CSS 2.0:
HTML:
fonte
CSS3 introduz novas unidades que são medidas em relação à janela de visualização, que é a janela neste caso. São
vh
evw
, que medem a altura e a largura da janela de visualização, respectivamente. Aqui está uma solução simples de CSS apenas:A única ressalva para isso é que só funciona se não houver outros elementos contribuindo com a altura da página.
fonte
100vh
que a imagem não se encaixe, mas97vh
funcione bem?vh
literalmente significa a altura da visualização, então se qualquer outro elemento adicionar altura à sua página, a página inteira será> 100vh. Isso faz sentido?.svg
arquivo renderiza bem, mas renomeá-lo.html
causa imprecisão): o navegador adiciona automaticamente a<body>
tag com o padrão,margin:8
mesmo se o arquivo não tiver<body>
tag. Então a solução é adicionar<style>body{margin:0}</style>
Se você deseja colocar um elemento de contêiner em torno de sua imagem, uma solução CSS pura é simples. Veja, 99% de altura não tem significado quando o elemento pai se estende verticalmente para conter seus filhos. O pai precisa ter uma altura fixa, digamos ... a altura da janela de visualização.
HTML
CSS
Brinque com o violino .
fonte
<div>
vez de um<img>
?Redimensione a imagem para caber na tela pelo lado mais longo, mantendo sua proporção da imagem
width: 100vw
- a largura da imagem será 100% da porta de visualizaçãoheight: auto
- a altura da imagem será dimensionada proporcionalmentemax-height: 100vw
- se a altura da imagem for maior do que a porta de visualização, ela será reduzida para caber na tela, conseqüentemente a largura da imagem será reduzida devido à seguinte propriedadeobject-fit: contain
- o conteúdo substituído é dimensionado para manter sua proporção enquanto se ajusta à caixa de conteúdo do elementoNota:
object-fit
é totalmente compatível apenas a partir do IE 16.0fonte
object-fit
ou pode usar explicitamenteobject-fit: fill;
qual é o padrão .Minha regra geral de CSS preguiçoso:
Isso pode aumentar o zoom em sua imagem se ela for de baixa resolução para começar (isso tem a ver com a qualidade da imagem e o tamanho em dimensões. Para centralizar sua imagem, você também pode tentar (no CSS)
centrar sua imagem
em seu HTML:
fonte
Eu sei que já existem algumas respostas aqui, mas aqui está o que usei:
fonte
Eu tinha um requisito semelhante e precisava fazer isso em CSS e JavaScript básicos. Nenhum JQuery disponível.
Isso é o que estou trabalhando.
Observação: não usei 100% para a largura da imagem, pois sempre houve um pouco de preenchimento a ser considerado.
fonte
img
tags nobody
da página e definamax-height
como49vh
. Exibir mais de duas imagens na área visível é deixado como um exercício para o leitor.Simplifique. obrigado
fonte
Eu acredito que deve resolver o problema.
fonte
Ou talvez confira: http://css-tricks.com/how-to-resizeable-background-image/
fonte
Com base na resposta de @Rohit, isso corrige problemas sinalizados pelo Chrome, redimensiona as imagens de maneira confiável e também funciona para várias imagens empilhadas verticalmente, por exemplo,
<img src="foo.jpg"><br><img src="bar.jpg"><br><img src="baz.jpg">
provavelmente há uma maneira mais elegante de fazer isso.fonte
Use este código em sua tag de estilo
fonte