Encontré una manera de hacer un contenedor div para ocupar al menos la altura completa de una página, mediante la configuración min-height: 100%;
. Sin embargo, cuando agrego un div y un conjunto anidados height: 100%;
, no se estira hasta la altura del contenedor. ¿Hay alguna forma de arreglarlo?
html, body {
height: 100%;
margin: 0;
}
#containment {
min-height: 100%;
background: pink;
}
#containment-shadow-left {
height: 100%;
background: aqua;
}
<div id="containment">
<div id="containment-shadow-left">
Hello World!
</div>
</div>
display:flex
yflex-direction:column
y dar al niñoflex:1
.Respuestas:
Este es un error del kit web (chrome / safari), los hijos de padres con altura mínima no pueden heredar la propiedad de altura: https://bugs.webkit.org/show_bug.cgi?id=26559
Aparentemente, Firefox también se ve afectado (no se puede probar en IE en este momento)
Posible solución:
El error no se muestra cuando el elemento interno tiene un posicionamiento absoluto.
Ver http://jsfiddle.net/xrebB/
Editar el 10 de abril de 2014
Como actualmente estoy trabajando en un proyecto para el que realmente necesito contenedores principales
min-height
y elementos secundarios que hereden la altura del contenedor, investigué un poco más.Primero: ya no estoy tan seguro de si el comportamiento actual del navegador es realmente un error. Las especificaciones CSS2.1 dicen:
Si pongo una altura mínima en mi contenedor, no estoy especificando explícitamente su altura, por lo que mi elemento debería tener una
auto
altura. Y eso es exactamente lo que hace Webkit, y todos los demás navegadores.En segundo lugar, la solución que encontré:
Si configuro mi elemento contenedor
display:table
conheight:inherit
él, actúa exactamente de la misma manera que si le diera unmin-height
100%. Y, lo que es más importante, si configuro el elemento hijodisplay:table-cell
heredará perfectamente la altura del elemento contenedor, ya sea 100% o más.CSS completo:
El marcado:
Ver http://jsfiddle.net/xrebB/54/ .
fuente
Añadir
height: 1px
al contenedor principal. Funciona en Chrome, FF, Safari.fuente
height: 1px;
no anulará la altura mínima. Todo lo contrario. Esta es la mejor solución aquí ... demo: jsbin.com/mosaboyo/1/editheight: 1px;
funciona stackoverflow.com/questions/2341821/height100-vs-min-height100min-height
. Por ejemplo, si hay suficiente texto, se desbordará. Ver jsbin.com/vuyapitizo/1pensé en compartir esto, ya que no lo vi en ningún lado, y es lo que solía solucionar mi solución.
SOLUCION :
min-height: inherit;
Tenía un padre con una altura mínima especificada, y necesitaba que un niño también tuviera esa altura.
De esta manera, el niño ahora actúa como altura al 100% de la altura mínima.
Espero que algunas personas encuentren esto útil :)
fuente
min-height
. Cuando la altura de los padres es mayor, el niño no se expandirá.Esto fue agregado en un comentario por @jackocnr pero lo extrañé. Para los navegadores modernos, creo que este es el mejor enfoque.
Hace que el elemento interno llene todo el contenedor si es demasiado pequeño, pero expande la altura del contenedor si es demasiado grande.
fuente
La solución de Kushagra Gour funciona (al menos en Chrome e IE) y resuelve el problema original sin tener que usar
display: table;
ydisplay: table-cell;
. Ver plunker: http://plnkr.co/edit/ULEgY1FDCsk8yiRTfOWULa configuración
min-height: 100%; height: 1px;
en el div externo hace que su altura real sea al menos del 100%, según sea necesario. También permite que el div interno herede correctamente la altura.fuente
Además de las respuestas existentes, también hay unidades de ventana gráfica
vh
para usar. Fragmento simple a continuación. Por supuesto, también se puede usar junto concalc()
, por ejemplo,min-height: calc(100vh - 200px);
cuando el encabezado y el pie de página tienen200px
altura juntos.fuente
No creo que esto sea un error con los navegadores. Todos se comportan de la misma manera, es decir, una vez que deja de especificar alturas explícitas, la altura mínima es básicamente un "último paso".
Parece ser exactamente como sugiere la especificación CSS 2.1: http://www.w3.org/TR/CSS2/visudet.html#the-height-property
Por lo tanto, como el
min-height
padre no tiene un explícitoheight
conjunto de propiedades , el valor predeterminado es auto.Hay algunas formas de evitar esto, posiblemente, mediante el uso de
display: table-cell
estilos más nuevos, como flexbox, si eso es posible para los navegadores de su público objetivo. También puede subvertir esto en ciertas situaciones mediante el uso de las propiedadestop
ybottom
en un elemento interno absolutamente posicionado, lo que le da una altura del 100% sin especificarlo.fuente
Aunque
display: flex;
se ha sugerido aquí, considere usardisplay: grid;
ahora que es ampliamente compatible . Por defecto, el único hijo de una cuadrícula llenará por completo su padre.fuente
Para googlers:
Esta solución alternativa de jquery hace que #containment obtenga una altura automáticamente (por, height: auto), luego obtiene la altura real asignada como un valor de píxel.
fuente
La mejor manera de lograr esto hoy en día es usarlo
display: flex;
. Sin embargo, es posible que tenga un problema cuando intente admitir IE11. De acuerdo con https://caniuse.com usando flexbox:Solución compatible con Internet Explorer
La solución es usar tanto
display: table;
en el padre comodisplay: table-row;
en el niñoheight: 100%;
como sustituto demin-height: 100%;
.La mayoría de las soluciones enumeradas aquí usan
display:
table
,table-row
y / otable-cell
, pero no replican el mismo comportamiento quemin-height: 100%;
, que es:height
propiedad);min-height
;Al usar esta solución, el comportamiento es el mismo y la propiedad
min-height
no es necesaria, lo que permite evitar el error.Explicación
La razón por la que funciona es porque, a diferencia de la mayoría de los elementos, los elementos que usan
display:
table
ytable-row
siempre serán tan altos como su contenido. Esto hace que suheight
propiedad se comporte de manera similar amin-height
.Solución en acción
fuente
Otra solución de JS, que es fácil y puede usarse para evitar una solución de marcado / hacky extra fácil de CSS o no fácil.
W / jQuery:
Directiva angular:
Para ser utilizado así:
fuente
Usualmente esto funciona para mi: