Tengo la estructura de la página como:
<div class="parent">
<div class="child-left floatLeft">
</div>
<div class="child-right floatLeft">
</div>
</div>
Ahora, el child-left
DIV tendrá más contenido, por lo que parent
la altura del DIV aumenta según el DIV secundario.
Pero el problema es que la child-right
altura no aumenta. ¿Cómo puedo hacer que su altura sea igual a su padre?
Respuestas:
Para el
parent
elemento, agregue las siguientes propiedades:entonces para
.child-right
estos:Encuentre resultados más detallados con ejemplos CSS aquí y más información sobre columnas de igual altura aquí .
fuente
Una solución común a este problema utiliza posicionamiento absoluto o flotadores recortados, pero estos son difíciles ya que requieren un ajuste exhaustivo si las columnas cambian en número + tamaño, y que debe asegurarse de que su columna "principal" sea siempre la más larga. En cambio, le sugiero que use una de las tres soluciones más robustas:
display: flex
: con mucho, la solución más simple y mejor y muy flexible, pero no es compatible con IE9 y versiones anteriores.table
odisplay: table
: muy simple, muy compatible (casi todos los navegadores), bastante flexible.display: inline-block; width:50%
con un corte de margen negativo: bastante simple, pero los bordes inferiores de la columna son un poco complicados.1)
display:flex
Esto es realmente simple y es fácil adaptarse a diseños más complejos o más detallados, pero flexbox solo es compatible con IE10 o posterior (además de otros navegadores modernos).
Ejemplo: http://output.jsbin.com/hetunujuma/1
HTML relevante:
CSS relevante:
Flexbox tiene soporte para muchas más opciones, pero para tener simplemente cualquier número de columnas, ¡lo anterior es suficiente!
2.
<table>
odisplay: table
Una manera simple y extremadamente compatible de hacer esto es usar un
table
: te recomiendo que lo pruebes primero si necesitas soporte para IE antiguo . Estás lidiando con columnas; divs + flotantes simplemente no son la mejor manera de hacerlo (sin mencionar el hecho de que múltiples niveles de divs anidados solo para hackear las limitaciones de css es apenas más "semántico" que simplemente usar una tabla simple). Si no desea utilizar eltable
elemento, considere cssdisplay: table
(no compatible con IE7 y versiones anteriores).Ejemplo: http://jsfiddle.net/emn13/7FFp3/
HTML relevante: (pero considere usar un plano en su
<table>
lugar)CSS relevante:
Este enfoque es mucho más robusto que el uso
overflow:hidden
con flotadores. Puede agregar prácticamente cualquier número de columnas; puede hacer que escalen automáticamente si lo desea; y conserva la compatibilidad con los navegadores antiguos. A diferencia de lo que requiere la solución flotante, tampoco es necesario saber de antemano qué columna es la más larga; la altura escala muy bien.BESO: no uses hacks de flotación a menos que lo necesites específicamente. Si IE7 es un problema, aún elegiría una tabla simple con columnas semánticas sobre una solución de truco-CSS difícil de mantener y menos flexible cualquier día.
Por cierto, si necesita que su diseño sea receptivo (por ejemplo, sin columnas en teléfonos móviles pequeños), puede usar una
@media
consulta para recurrir al diseño de bloque simple para anchos de pantalla pequeños; esto funciona si usa<table>
o cualquier otrodisplay: table
elemento.3.
display:inline block
con un truco de margen negativo.Otra alternativa es usar
display:inline block
.Ejemplo: http://jsbin.com/ovuqes/2/edit
HTML relevante: (¡la ausencia de espacios entre las
div
etiquetas es significativa!)CSS relevante:
Esto es un poco complicado, y el margen negativo significa que el fondo "verdadero" de las columnas está oscurecido. Esto a su vez significa que no puede colocar nada en relación con la parte inferior de esas columnas porque eso está cortado por
overflow: hidden
. Tenga en cuenta que, además de los bloques en línea, puede lograr un efecto similar con flotantes.TL; DR : use flexbox si puede ignorar IE9 y versiones anteriores; de lo contrario, intente con una tabla (css). Si ninguna de esas opciones funciona para usted, hay hacks de margen negativo, pero estos pueden causar problemas de visualización extraños que son fáciles de omitir durante el desarrollo, y hay limitaciones de diseño que debe tener en cuenta.
fuente
border-spacing:10px;
en la tabla, el elemento introducirá un espaciado de margen. Alternativamente, puede agregar columnas adicionales (vacías) donde desee espacio adicional. Y también puede agregar relleno dentro de las celdas de la tabla; Sin embargo, ese relleno se incluirá en el fondo, por lo que puede que no sea lo que desea. Pero tienes razón en que no es tan flexible como un margen normal. Y no puede colocar nada en relación con las columnas, lo que puede ser un problema.Para los padres:
Para niños:
Debe agregar algunos prefijos, verifique caniuse.
fuente
Encontré muchas respuestas, pero probablemente la mejor solución para mí es
Puede consultar otras soluciones aquí http://css-tricks.com/fluid-width-equal-height-columns/
fuente
Establezca el elemento primario principal para que
overflow: hidden
luego en elementos secundarios puede establecer una gran cantidad para el relleno inferior. por ejemplo,
padding-bottom: 5000px
entonces
margin-bottom: -5000px
y luego todos los div secundarios serán la altura del padre.
Por supuesto, esto no funcionará si está tratando de poner contenido en el div padre (fuera de otros divs)
Ejemplo: http://jsfiddle.net/Tareqdhk/DAFEC/
fuente
¿El padre tiene una altura? Si establece la altura de los padres de esta manera.
Luego puede hacer que el niño se estire hasta la altura completa de esta manera.
EDITAR
Así es como lo haría usando JavaScript.
fuente
La visualización de la tabla CSS es ideal para esto:
Respuesta original (se supone que cualquier columna podría ser más alta):
Está tratando de hacer que la altura de los padres dependa de la altura de los niños y la altura de los niños dependa de la altura de los padres. No se computará. CSS Faux columnas es la mejor solución. Hay más de una forma de hacerlo. Prefiero no usar JavaScript.fuente
display: table
+display: table-cell
producirá el resultado deseado.float
: stackoverflow.com/questions/20110217/…Recientemente hice esto en mi sitio web usando jQuery. El código calcula la altura del div más alto y establece los otros divs a la misma altura. Aquí está la técnica:
http://www.broken-links.com/2009/01/20/very-quick-equal-height-columns-in-jquery/
No creo
height:100%
que funcione, así que si no conoces explícitamente las alturas div, no creo que haya una solución CSS pura.fuente
Usé esto para una sección de comentarios:
Podrías flotar el niño de derecha a derecha, pero en este caso he calculado los anchos de cada div con precisión.
fuente
Si está al tanto de bootstrap, puede hacerlo fácilmente utilizando la propiedad 'flex'. Todo lo que necesita hacer es pasar las propiedades de css a la división principal.
¿Dónde
.homepageSection
está mi padre div. Ahora agregue child div en su html comodonde abc es mi división infantil. Puede verificar la igualdad de altura en ambas divisiones secundarias independientemente del borde simplemente dando borde a la división secundaria
fuente
Utilicé el estilo en línea solo para dar una idea.
fuente
Me enteré de este buen truco en una entrevista de pasantía. La pregunta original es cómo garantizar que la altura de cada componente superior en tres columnas tenga la misma altura que muestre todo el contenido disponible. Básicamente, cree un componente hijo que sea invisible que represente la altura máxima posible.
fuente