Eu tenho uma div de 48x48 e dentro dela existe um elemento img, eu quero encaixá-la na div sem perder nenhuma parte; nesse meio tempo a taxa é mantida, é possível usar html e css?
136
Você precisará de algum JavaScript para impedir o corte, se não souber a dimensão da imagem no momento em que está escrevendo o css.
<div id="container">
<img src="something.jpg" alt="" />
</div>
<script type="text/javascript">
(function() {
var img = document.getElementById('container').firstChild;
img.onload = function() {
if(img.height > img.width) {
img.height = '100%';
img.width = 'auto';
}
};
}());
</script>
#container {
width: 48px;
height: 48px;
}
#container img {
width: 100%;
}
Se você usa uma biblioteca JavaScript, pode tirar proveito dela.
Use
max-height:100%; max-width:100%;
para a imagem dentro da div.fonte
overflow:scroll
div com uma imagem grande. Curioso. Ainda mais estranho: a solução de Max realmente a corrige. Estou farto de CSS, na verdade. Costumava ser poderoso e legal. Agora, as implementações apenas produzem inconsistência de buggy após inconsistência de buggy.Infelizmente max-width + max-height não cobrem totalmente minha tarefa ... Por isso, encontrei outra solução:
Para salvar a proporção da imagem durante o dimensionamento, você também pode usar a propriedade
object-fit
CSS3.Artigo útil: Controle as proporções da imagem com CSS3
Más notícias: IE não suportado ( Posso usar )
fonte
object-fit: cover;
trabalhou para mim. Aqui: stackoverflow.com/questions/9071830/…Usando apenas CSS:
fonte
HTML
CSS
Isso fará com que a imagem se expanda para preencher seu pai, cujo tamanho é definido no
div
CSS.fonte
height: 100%
, isso distorcerá a proporção da imagem - o OP deseja manter a proporção.Eu estava tendo muitos problemas para fazer isso funcionar, todas as soluções que encontrei não pareciam funcionar.
Percebi que eu tinha que definir a exibição div para flex, então basicamente este é o meu CSS:
fonte
Experimente o CSS:
fonte
Para mim, o seguinte CSS funcionou (testado no Chrome, Firefox e Safari).
Existem várias coisas trabalhando juntas:
max-height: 100%;
,max-width: 100%;
Eheight: auto;
,width: auto;
tornar a escala img para qualquer dimensão primeiros atinge 100%, mantendo a relação de aspectoposition: relative;
no recipiente eposition: absolute;
na criança, junto comtop: 50%;
eleft: 50%;
centralize o canto superior esquerdo do img no recipientetransform: translate(-50%, -50%);
move o img de volta para a esquerda e o topo pela metade do seu tamanho, centralizando o img no contêinerCSS:
fonte
Definir a foto como imagem de fundo nos dará mais controle sobre tamanho e posicionamento, deixando a tag img para servir a uma finalidade diferente ...
Abaixo, se quisermos que a div tenha a mesma proporção que a foto, placeholder.png é uma pequena imagem transparente com a mesma proporção que photo.jpg. Se a foto é quadrada, é um espaço reservado 1px x 1px, se a foto é uma miniatura de vídeo, é um espaço reservado 16x9 etc.
Específico à pergunta, use um espaço reservado 1x1 para manter a proporção quadrada da div, com uma imagem de plano de fundo usando
background-size
para manter a proporção da foto.Eu usei
background-position: center center;
para que a foto seja centralizada na div. (O alinhamento da foto no centro vertical ou na parte inferior ficaria feio com a foto na tag img.)Para evitar uma solicitação http extra, converta a imagem do espaço reservado em um dado: URL .
fonte
você pode usar a classe "img-fluid" para uma versão mais recente, ou seja, o Bootstrap v4 .
e pode usar a classe "img-responsive" para versões mais antigas como o Bootstrap v3 .
Uso : -
img tag com: -
class = "img-fluid"
src = "..."
fonte
Aqui está uma abordagem totalmente JavaScript. Escala uma imagem gradualmente para baixo até que ela se encaixe corretamente. Você escolhe quanto diminuir cada vez que falha. Este exemplo reduz 10% cada vez que falha:
Sinta-se livre para copiar e colar diretamente.
fonte
O que funcionou para mim foi:
O inline-flex foi necessário para impedir que as imagens saíssem da div.
fonte