Eu tenho um site com muitas páginas e diferentes imagens de plano de fundo, e as exibo em CSS como:
body.page-8 {
background: url("../img/pic.jpg") no-repeat scroll center top #000;
background-size: cover;
}
No entanto, quero mostrar imagens diferentes (em tela cheia) em uma página usando <img>
elementos e quero que elas tenham as mesmas propriedades da background-image: cover;
propriedade acima (as imagens não podem ser exibidas em CSS, devem ser exibidas no documento HTML).
Normalmente eu uso:
div.mydiv img {
width: 100%;
}
Ou:
div.mydiv img {
width: auto;
}
para tornar a imagem completa e responsiva. No entanto, a imagem encolhe muito ( width: 100%
) quando a tela fica muito estreita e mostra a cor de fundo do corpo na tela inferior. O outro método, width: auto;
apenas aumenta a imagem em tamanho real e não responde ao tamanho da tela.
Existe uma maneira de exibir a imagem da mesma maneira que background-size: cover
faz?
Respostas:
Solução 1 - A propriedade de ajuste do objeto ( Falta suporte ao IE )
Basta definir
object-fit: cover;
no img.Consulte MDN - sobre
object-fit: cover
:Além disso, consulte esta demonstração do Codepen, que compara
object-fit: cover
aplicado a uma imagem ebackground-size: cover
aplicado a uma imagem de plano de fundoSolução 2 - Substitua o img por uma imagem de fundo por css
fonte
Na verdade, existe uma solução css bastante simples que até funciona no IE8:
fonte
Supondo que você possa ter um elemento de contêiner que deseja preencher, isso parece funcionar, mas parece um pouco imprudente. Em essência, eu apenas uso
min/max-width/height
em uma área maior e, em seguida, redimensiono essa área para as dimensões originais.fonte
Encontrei uma solução simples para emular a cobertura e a contenção, que é CSS puro, e funciona para contêineres com dimensões dinâmicas e também não faz nenhuma restrição na proporção da imagem.
Observe que, se você não precisar oferecer suporte ao IE ou Edge antes dos 16 anos, é melhor usar o ajuste de objeto.
tamanho de fundo: capa
Os 1000% são usados aqui, caso o tamanho natural da imagem seja maior que o tamanho que está sendo exibido. Por exemplo, se a imagem for 500x500, mas o contêiner for apenas 200x200. Com esta solução, a imagem será redimensionada para 2000x2000 (devido à largura mínima / altura mínima) e, em seguida, reduzida a 200x200 (devido a
transform: scale(0.1)
).O fator x10 pode ser substituído por x100 ou x1000, mas geralmente não é ideal ter uma imagem de 2000x2000 sendo renderizada em uma div de 20x20. :)
tamanho do plano de fundo: contém
Seguindo o mesmo princípio, você também pode usá-lo para emular
background-size: contain
:fonte
transform
em muitas das respostasNão , você não consegue entender como
background-size:cover
...Essa abordagem é bem próxima: ela usa JavaScript para determinar se a imagem é paisagem ou retrato e aplica estilos de acordo.
JS
CSS
http://jsfiddle.net/b3PbT/
fonte
Eu precisava emular
background-size: contain
, mas não consegui usarobject-fit
devido à falta de suporte. Minhas imagens tinham contêineres com dimensões definidas e isso acabou funcionando para mim:fonte
min-height: 100%; max-height:100%;
e obter o equivalente ao tamanho do plano de fundo: capa;min-height: 100%; max-height:100%;
não preservaria a proporção, portanto não exatamente equivalente.Tente definir ambos
min-height
emin-width
, comdisplay:block
:( violino )
Desde que o elemento que contém sua imagem seja
position:relative
ouposition:absolute
, a imagem cobrirá o contêiner. No entanto, não será centralizado.Você pode centralizar facilmente a imagem se souber se ela transbordará horizontalmente (definido
margin-left:-50%
) ou verticalmente (definidomargin-top:-50%
). Pode ser possível usar consultas de mídia CSS (e algumas matemáticas) para descobrir isso.fonte
Com CSS você pode simular
object-fit: [cover|contain];
. É usotransform
e[max|min]-[width|height]
. Não é perfeito. Isso não funciona em um caso: se a imagem for mais larga e mais curta que o contêiner.fonte
O que você pode fazer é usar o atributo 'style' para adicionar a imagem de plano de fundo ao elemento; dessa forma, você ainda estará chamando a imagem no HTML, mas ainda poderá usar o comportamento background-size: cover css:
HTML:
CSS:
É assim que adiciono o comportamento background-size: cover aos elementos que eu preciso carregar dinamicamente no HTML. Você pode usar classes css impressionantes, como background-position: center. estrondo
fonte
Para o IE, você também precisa incluir a segunda linha - largura: 100%;
fonte
Eu não tenho permissão para 'adicionar um comentário', fazendo isso, mas sim, o que Eru Penkman fez é praticamente perfeito, para que fique como uma capa de fundo, tudo o que você precisa fazer é mudar
PARA
fonte
Sei que isso é antigo, no entanto, muitas soluções que vejo acima têm um problema com a imagem / vídeo muito grande para o contêiner, portanto, na verdade, não age como uma capa do tamanho de plano de fundo. No entanto, decidi fazer "classes de utilidade" para que funcionasse para imagens e vídeos. Você simplesmente atribui ao contêiner a classe .media-cover-wrapper e o próprio item de mídia a classe .media-cover
Então você tem o seguinte jQuery:
Ao ligar, certifique-se de redimensionar a página:
Em seguida, o seguinte CSS:
Sim, pode exigir jQuery, mas responde muito bem e age exatamente como o tamanho do plano de fundo: capa e você pode usá-lo em imagens e / ou vídeos para obter esse valor extra de SEO.
fonte
Podemos adotar a abordagem ZOOM. Podemos supor que no máximo 30% (ou mais de 100%) pode ser o efeito de zoom se a altura ou a largura da imagem for menor que a altura ou largura desejada. Podemos ocultar a área restante não necessária com estouro: oculto.
Isso ajustará imagens com largura ou altura diferentes.
fonte
encontrou os mesmos sintomas exatos. acima funcionou para mim.
fonte