Estoy tratando de entender lo que parece ser un comportamiento inesperado para mí:
Tengo un elemento con una altura máxima del 100% dentro de un contenedor que también usa una altura máxima pero, inesperadamente, el niño desborda al padre:
Caso de prueba: 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%;
}
Sin embargo, esto se soluciona si el padre tiene una altura explícita:
Caso de prueba: http://jsfiddle.net/bq4Wu/17/
.container {
height: 200px;
}
¿Alguien sabe por qué el niño no honraría la altura máxima de su padre en el primer ejemplo? ¿Por qué se requiere una altura explícita?
display: flex; flex-direction: column
resolví el problema y agregué la barra de desplazamiento que quería.Mostrar fragmento de código
Jugué un poco. En una imagen más grande en Firefox, obtuve un buen resultado con el uso del valor de propiedad de herencia. ¿Te ayudará esto?
fuente
max:height: 100%
lugar de una altura fija: jsfiddle.net/umbreak/n6czk9xt/1dispaly: flex;
. Abrí un nuevo hilo: abrí un nuevo hilo: stackoverflow.com/questions/29732391/... Sin embargo, en el peor de los casos, podría usar Jquery para obtener el ancho y la altura reales de img y establecerlos en el div de la imagen principal.Encontré una solución aquí: http://www.sitepoint.com/maintain-image-aspect-ratios-responsive-web-design/
El truco es posible porque existe una relación entre WIDTH y PADDING-BOTTOM de un elemento. Entonces:
padre:
hijo ( eliminar todos los css relacionados con el ancho , es decir, ancho: 100%):
fuente
Puedes usar la propiedad object-fit
Como sugerido aquí
Una explicación completa de esta propiedad por Chris Mills en Dev.Opera
Y aún mejor en CSS-Tricks
Es compatible con
Acabo de comprobar que vivaldi y el cromo también lo soportan (no es sorprendente aquí)
Actualmente no es compatible con IE, pero ... ¿a quién le importa ? Además, iOS admite el ajuste de objetos, pero no la posición de los objetos, pero pronto lo hará.
fuente
Aquí hay una solución para una pregunta abierta recientemente marcada como un duplicado de esta pregunta. La
<img>
etiqueta excedía la altura máxima del padre<div>
.Roto: violín
Trabajando: violín
En este caso, agregar
display:flex
a las 2<div>
etiquetas principales fue la respuestafuente
En lugar de ir con la altura máxima: 100% / 100%, se utilizaría un enfoque alternativo para llenar todo el espacio
position: absolute
con la parte superior / inferior / izquierda / derecha establecida en 0.En otras palabras, el HTML se vería así:
Puede ver un ejemplo en vivo en Codesandbox - Desbordamiento dentro de CSS Flex / Grid
fuente
Tal vez alguien más pueda explicar las razones detrás de su problema, pero puede resolverlo especificando la altura del contenedor y luego configurando la altura de la imagen en 100%. Es importante que
width
la imagen aparezca antes queheight
.fuente
Lo más cerca que puedo llegar a esto es este ejemplo:
http://jsfiddle.net/YRFJQ/1/
o
El problema principal es que la altura toma el porcentaje de la altura de los contenedores, por lo que busca una altura establecida explícitamente en el contenedor principal, no su altura máxima.
La única forma de evitar esto, hasta cierto punto, puedo ver es el violín de arriba donde puede ocultar el desbordamiento, pero luego el relleno sigue actuando como espacio visible para que la imagen fluya, por lo que reemplazarlo con un borde sólido funciona en su lugar (y luego agregando un cuadro de borde para que sea 200px si ese es el ancho que necesita)
No estoy seguro de si esto encajaría con lo que necesita, pero es lo mejor que puedo lograr.
fuente
Una buena solución es no usar la altura en el padre y usarla solo en el niño con View Port :
Ejemplo de violín: https://jsfiddle.net/voan3v13/1/
fuente
Por lo general, los contenedores ya envolverán bien su contenido. A menudo no funciona tan bien al revés: los niños no llenan bien a sus antepasados. Por lo tanto, establezca sus valores de ancho / alto en el elemento más interno en lugar del elemento más externo, y deje que los elementos externos envuelvan su contenido.
fuente
Su contenedor no tiene altura.
Añadir altura: 200 px;
a los contenedores css y el gatito se quedará adentro.
fuente