Estou tentando entender o que parece ser um comportamento inesperado para mim:
Eu tenho um elemento com uma altura máxima de 100% dentro de um contêiner que também usa uma altura máxima, mas, inesperadamente, o filho excede o pai:
Caso de teste: http://jsfiddle.net/bq4Wu/16/
.container {
background: blue;
padding: 10px;
max-height: 200px;
max-width: 200px;
}
img {
display: block;
max-height: 100%;
max-width: 100%;
}
Isso é corrigido, no entanto, se o pai receber uma altura explícita:
Caso de teste: http://jsfiddle.net/bq4Wu/17/
.container {
height: 200px;
}
Alguém sabe por que a criança não honraria a altura máxima de seus pais no primeiro exemplo? Por que é necessária uma altura explícita?
display: flex; flex-direction: column
resolvi o problema e adicionei a barra de rolagem que eu queria.Mostrar snippet de código
Eu brinquei um pouco. Em uma imagem maior no firefox, obtive um bom resultado ao usar o valor da propriedade herdar. Isso vai ajudá-lo?
fonte
max:height: 100%
em vez de uma altura fixa: jsfiddle.net/umbreak/n6czk9xt/1dispaly: flex;
. Abri um novo thread: Abri um novo thread: stackoverflow.com/questions/29732391/… No entanto, no pior caso, eu poderia usar o Jquery para buscar a largura e a altura reais da img e defini-las na div da imagem pai.Encontrei uma solução aqui: http://www.sitepoint.com/maintain-image-aspect-ratios-responsive-web-design/
O truque é possível porque existe uma relação entre WIDTH e PADDING-BOTTOM de um elemento. Assim:
pai:
filho ( remova todos os css relacionados à largura , ou seja, largura: 100%):
fonte
Você pode usar a propriedade ajuste de objeto
Como sugerido aqui
Uma explicação completa desta propriedade por Chris Mills no Dev.Opera
E ainda melhor em truques CSS
É suportado em
Acabei de verificar se o vivaldi e o cromo também são compatíveis (sem surpresa aqui)
Atualmente, não é suportado no IE, mas ... quem se importa ? Além disso, o iOS suporta ajuste de objeto, mas não posição de objeto, mas será em breve.
fonte
Aqui está uma solução para uma pergunta aberta recentemente marcada como uma duplicata dessa pergunta. A
<img>
tag estava excedendo a altura máxima do pai<div>
.Broken: Fiddle
Trabalho: Violino
Nesse caso, adicionar
display:flex
as duas<div>
tags pai foi a respostafonte
Em vez de usar max-height: 100% / 100%, uma abordagem alternativa de preencher todo o espaço seria usar
position: absolute
com superior / inferior / esquerda / direita definida como 0.Em outras palavras, o HTML teria a seguinte aparência:
Você pode ver um exemplo ao vivo em Codesandbox - Estouro no CSS Flex / Grid
fonte
Talvez alguém possa explicar as razões por trás do seu problema, mas você pode resolvê-lo especificando a altura do contêiner e depois definindo a altura da imagem como 100%. É importante que
width
a imagem apareça antes daheight
.fonte
O mais próximo que posso chegar disso é este exemplo:
http://jsfiddle.net/YRFJQ/1/
ou
O principal problema é que a altura assume a porcentagem da altura dos contêineres; portanto, procura uma altura definida explicitamente no contêiner pai, não a altura máxima.
A única maneira de contornar isso, até certo ponto, é o violino acima, onde você pode ocultar o excesso, mas o preenchimento ainda atua como espaço visível para a imagem fluir e, portanto, substituir por uma borda sólida funciona (e então adicionando uma caixa de borda para 200px, se essa for a largura que você precisa)
Não tenho certeza se isso se encaixa com o que você precisa, mas o melhor que consigo entender.
fonte
Uma boa solução é não usar a altura no pai e usá-lo apenas no filho com o View Port :
Exemplo de violino: https://jsfiddle.net/voan3v13/1/
fonte
Geralmente, os contêineres geralmente envolvem bem seu conteúdo. Geralmente não funciona tão bem ao contrário: as crianças não preenchem bem seus antepassados. Portanto, defina seus valores de largura / altura no elemento mais interno em vez do mais externo e deixe que os elementos externos envolvam seu conteúdo.
fonte
Seu contêiner não tem altura.
Adicionar altura: 200px;
para os recipientes css e o gatinho ficará dentro.
fonte