Saltar al contenido

Hacer que div (altura) ocupe la altura restante de los padres

Te traemos la contestación a este atasco, o por lo menos eso deseamos. Si tienes interrogantes deja tu comentario, que para nosotros será un gusto responderte

Solución:

Expandiendo el #down niño para llenar el espacio restante de #container se puede lograr de varias maneras dependiendo de la compatibilidad del navegador que desee lograr y si o no #up tiene una altura definida.

Muestras

.container 
  width: 100px;
  height: 300px;
  border: 1px solid red;
  float: left;

.up 
  background: green;

.down 
  background: pink;

.grid.container 
  display: grid;
  grid-template-rows: 100px;

.flexbox.container 
  display: flex;
  flex-direction: column;

.flexbox.container .down 
  flex-grow: 1;

.calc .up 
  height: 100px;

.calc .down 
  height: calc(100% - 100px);

.overflow.container 
  overflow: hidden;

.overflow .down 
  height: 100%;
grid
grid
grid
grid
grid
grid
flexbox
flexbox
flexbox
flexbox
flexbox
flexbox
calc
calc
calc
calc
calc
calc
overflow
overflow
overflow
overflow
overflow
overflow

Red

CSS grid El diseño ofrece otra opción, aunque puede que no sea tan sencillo como el modelo Flexbox. Sin embargo, solo requiere diseñar el elemento contenedor:

.container  display: grid; grid-template-rows: 100px 

Él grid-template-rows define la primera fila como una altura fija de 100 px, y las filas restantes se estirarán automáticamente para llenar el espacio restante.

Estoy bastante seguro de que IE11 requiere -ms- prefijos, así que asegúrese de validar la funcionalidad en los navegadores que desea admitir.

caja flexible

Módulo de diseño de caja flexible de CSS3 (flexbox) ahora cuenta con un buen soporte y puede ser muy fácil de implementar. Debido a que es flexible, incluso funciona cuando #up no tiene una altura definida.

#container  display: flex; flex-direction: column; 
#down  flex-grow: 1; 

Es importante tener en cuenta que la compatibilidad con IE10 e IE11 para algunas propiedades de flexbox puede tener errores, y IE9 o inferior no tiene ninguna compatibilidad.

Altura calculada

Otra solución fácil es usar el CSS3 calc unidad funcional, como señala Álvaro en su respuesta, pero requiere que la altura del primer hijo sea un valor conocido:

#up  height: 100px; 
#down  height: calc( 100% - 100px ); 

Tiene un soporte bastante amplio, con las únicas excepciones notables que son <= IE8 o Safari 5 (sin soporte) e IE9 (soporte parcial). Algunos otros problemas incluyen el uso calcular junto con transformar o sombra de la cajaasí que asegúrese de probar en varios navegadores si eso le preocupa.

Otras alternativas

Si se necesita soporte anterior, puede agregar height:100%; para #down hará que el div rosa sea de altura completa, con una advertencia. Provocará el desbordamiento del contenedor, porque #up lo está empujando hacia abajo.

Por lo tanto, podría agregar overflow: hidden; al contenedor para arreglar eso.

Alternativamente, si la altura de #up está fijo, puede colocarlo absolutamente dentro del contenedor y agregar una parte superior acolchada para #down.

Y, otra opción más sería usar una pantalla de tabla:

#container  width: 300px; height: 300px; border: 1px solid red; display: table;
#up  background: green; display: table-row; height: 0; 
#down  background: pink; display: table-row;​

Han pasado casi dos años desde que hice esta pregunta. Se me acaba de ocurrir css calc() que resuelve este problema que tenía y pensé que sería bueno agregarlo en caso de que alguien tenga el mismo problema. (Por cierto terminé usando posición absoluta).

http://jsfiddle.net/S8g4E/955/

aqui esta el css

#up  height:80px;
#down 
    height: calc(100% - 80px);//The upper div needs to have a fixed height, 80px in this case.

Y más información al respecto aquí: http://css-tricks.com/a-couple-of-use-cases-for-calc/

Compatibilidad con navegador: http://caniuse.com/#feat=calc

Mi respuesta usa solo CSS, y no usa overflow:hidden o display:table-row. Requiere que el primer niño realmente tenga una altura determinada, pero en su pregunta afirma que solo el segundo niño debe tener su altura no especificada, por lo que creo que debería encontrar esto aceptable.

html

Text
Text
Text
Text
Text
Text

CSS

#container  width: 300px; height: 300px; border:1px solid red;
#up  background: green; height: 63px; float:left; width: 100% 
#down  background:pink; padding-top: 63px; height: 100%; box-sizing: border-box; 

http://jsfiddle.net/S8g4E/288/

Finalizando este artículo puedes encontrar las notas de otros creadores, tú además eres capaz dejar el tuyo si te gusta.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *