Estire la altura div del niño para llenar el padre que tiene una altura dinámica


94

Como se puede ver en el siguiente violín, tengo dos divs, contenidos en un padre divque se han estirado para contener el div grande, mi objetivo es hacer que esos hijos divtengan la misma altura.

http://fiddle.jshell.net/y9bM4/



@MikeHometchko hay muchos en CSS pero no en CSS3. Creo que sí.
Mr_Green

1
@Mr_Green las diferencias a un nivel fundamental entre "CSS" y CSS3 son triviales, así que no veo el problema. Este es un problema muy común que se ha preguntado y respondido hasta la muerte.
Mike H.

1
@MikeHometchko revisa mi solución. Estoy seguro de que nadie ha respondido lo mismo antes.
Mr_Green

Respuestas:


47

La solución es usar display: table-cellpara traer esos elementos en línea en lugar de usar display: inline-blocko float: left.

div#container {
  padding: 20px;
  background: #F1F1F1
}
.content {
  width: 150px;
  background: #ddd;
  padding: 10px;
  display: table-cell;
  vertical-align: top;
}
.text {
  font-family: 12px Tahoma, Geneva, sans-serif;
  color: #555;
}
<div id="container">
  <div class="content">
    <h1>Title 1</h1>

    <div class="text">Sample Text. Sample Text. Sample Text. Sample Text. Sample Text. Sample Text. Sample Text. Sample Text. Sample Text.
      <br>Sample Text. Sample Text. Sample Text.
      <br>Sample Text.
      <br>
    </div>
  </div>
  <div class="content">
    <h1>Title 2</h1>

    <div class="text">Sample Text. Sample Text. Sample Text. Sample Text. Sample Text. Sample Text. Sample Text. Sample Text. Sample Text.</div>
  </div>
</div>

Violín de trabajo


Sin embargo, esto no funciona si el elemento principal es una celda de tabla.
Tomáš Zato - Reincorporación a Monica

55

Úselo display: flexpara estirar su divs:

div#container {
    padding:20px;
    background:#F1F1F1;
    display: flex;
}

.content {
    width:150px;
    background:#ddd;
    padding:10px;
    margin-left: 10px;
}

JSFIDDLE


18

Agregue el siguiente CSS:

Para el div padre:

style="display: flex;"

Para div niño:

style="align-items: stretch;"

Necesitaba agregar stretcha los niños para que la flexión funcionara para mí.
BadHorsie

4

https://www.youtube.com/watch?v=jV8B24rSN5o

Creo que puedes usar la pantalla como cuadrícula:

.parent { display: grid };

¿Probaste tu respuesta usando el mismo código del póster original?
Mark Stewart

Funciona y no requiere CSS en el niño. Eso es porque una celda de CSS Grid tendrá autofila y celda de forma predeterminada. En realidad, funciona bastante bien con IE si lo usa display: -ms-gridpara evitar algunos errores flexibles, siempre que solo tenga un hijo.
ShortFuse

-6

Puedes hacerlo fácilmente con un poco de jQuery

$(document).ready(function(){
  var parentHeight = $("#parentDiv").parent().height();
  $("#childDiv").height(parentHeight);
});

3
Aunque una vez que se cambia el tamaño de la ventana del navegador, esto se romperá, mientras que las CSS seguirán funcionando.
SharpC
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.