Estoy usando Bootstrap. ¿Cómo puedo hacer que tres columnas tengan la misma altura?
Aquí hay una captura de pantalla del problema. Me gustaría que las columnas azul y roja tengan la misma altura que la columna amarilla.
Aquí está el código:
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet"/>
<div class="container-fluid">
<div class="row">
<div class="col-xs-4 panel" style="background-color: red">
some content
</div>
<div class="col-xs-4 panel" style="background-color: yellow">
catz
<img width="100" height="100" src="https://lorempixel.com/100/100/cats/">
</div>
<div class="col-xs-4 panel" style="background-color: blue">
some more content
</div>
</div>
</div>
css
twitter-bootstrap
Ricardo
fuente
fuente
.row
Falta el flexflex-wrap: wrap;
. Aquí hay un ejemplo de cómoRespuestas:
Solución 4 usando Bootstrap 4
Bootstrap 4 usa Flexbox, por lo que no hay necesidad de CSS adicional.
Manifestación
Solución 1 usando márgenes negativos (no rompe la capacidad de respuesta)
Manifestación
Solución 2 usando la tabla
Manifestación
Solución 3 usando flex agregó en agosto de 2015. Los comentarios publicados antes de esto no se aplican a esta solución.
Manifestación
fuente
flex-wrap: wrap;
al tercer ejemplo para habilitar la capacidad de respuesta. También querrá agregar display: flex; dirección flexible: columna; a la clase de columna. Si va a utilizar .row y no una clase personalizada, deberá proporcionar un respaldo para los navegadores más antiguos que cambien la flexión de la pantalla. Aquí hay un ejemploActualización 2020
El mejor enfoque para Bootstap 3.x : usar CSS flexbox (y requiere CSS mínimo).
Ejemplo de Bootstrap misma altura flexbox
Para aplicar solo la misma altura de flexbox en puntos de interrupción específicos (receptivos), use una consulta de medios. Por ejemplo, aquí está
sm
(768px) y arriba:Esta solución también funciona bien para varias filas (ajuste de columna):
https://www.bootply.com/gCEXzPMehZ
Otras soluciones
Estas opciones serán recomendadas por otros, pero no son una buena idea. para un diseño receptivo. Estos solo funcionan para diseños simples de una sola fila sin envoltura de columna.
1) Usando enormes márgenes negativos y relleno
2) Uso de display: table-cell (esta solución también afecta la cuadrícula receptiva, por lo que una consulta @media se puede usar para aplicar solo la
table
visualización en pantallas más anchas antes de que las columnas se apilen verticalmente)Bootstrap 4
Flexbox ahora se usa de manera predeterminada en Bootstrap 4, por lo que no es necesario que el CSS adicional haga columnas de igual altura: http://www.codeply.com/go/IJYRI4LPwU
Ejemplo:
fuente
No se necesita JavaScript. Simplemente agregue la clase
.row-eq-height
a su existente.row
así:Consejo: si tiene más de 12 columnas en su fila, la cuadrícula de bootstrap no lo envolverá. Entonces agregue un nuevo
div.row.row-eq-height
cada 12 columnas.Consejo: es posible que deba agregar
a tu html
fuente
Para responder a su pregunta, esto es todo lo que necesita; vea una demostración receptiva completa con css prefijado :
Para agregar soporte para contenido en miniatura flexible dentro de columnas flexibles como la captura de pantalla anterior también agregue esto ... Tenga en cuenta que también puede hacer esto con paneles:
Si bien flexbox no funciona en IE9 y a continuación, puede usar la demostración con una alternativa utilizando etiquetas condicionales con algo como las cuadrículas de JavaScript como un polyfill:
En cuanto a los otros dos ejemplos en la respuesta aceptada ... La demostración de la tabla es una idea decente pero se está implementando incorrectamente. La aplicación de ese CSS en las clases de columna de arranque específicamente romperá sin duda el marco de la cuadrícula por completo. Debe usar un selector personalizado para uno y dos estilos de tablas que no se deben aplicar a los
[class*='col-']
que tienen anchos definidos. Este método SOLO debe usarse si desea columnas de igual altura y ancho igual. No está destinado a ningún otro diseño y NO responde. Sin embargo, podemos hacerlo retroceder en pantallas móviles ...Por último, la primera demostración en la respuesta aceptada que implementa una versión del único diseño verdadero es una buena opción para algunas situaciones, pero no es adecuada para columnas de arranque. La razón de esto es que todas las columnas se expanden a la altura del contenedor. Por lo tanto, esto también interrumpirá la capacidad de respuesta, ya que las columnas no se expanden a los elementos a su lado, sino a todo el contenedor. Este método tampoco le permitirá aplicar márgenes inferiores a las filas por más tiempo y también causará otros problemas en el camino, como desplazarse para anclar etiquetas.
Para ver el código completo, vea Codepen, que automáticamente antepone el código flexbox.
fuente
row:after, row:before
tener display: conjunto de tablas que aparentemente a Safari no le gusta.Solo muestra una fila, por lo que su caso de uso puede limitarse solo a eso. En caso de que tengas varias filas, este plugin - github Javascript-grids - ¡funciona perfectamente! Hace que cada panel se expanda al panel más alto, dando a cada fila una altura potencialmente diferente según el panel más alto de esa fila. Es una solución jquery vs. css, pero quería recomendarla como un enfoque alternativo.
fuente
Si desea que esto funcione en cualquier navegador, use javascript:
fuente
.ready()
no es el momento adecuado para llamarla, debería llamarse a.load()
window.onload = function() {...function content above...}
lugar. Esto funciona mejorIntenté muchas de las sugerencias hechas en este hilo y en otras páginas, pero ninguna solución funcionó al 100% en todos los navegadores.
Así que experimenté bastante tiempo y se me ocurrió esto. Una solución completa para columnas Bootstrap de igual altura con la ayuda de flexbox con solo 1 clase. Esto funciona en todos los principales navegadores IE10 +.
CSS:
HTML:
Para admitir incluso más versiones de IE, puede, por ejemplo, usar https://github.com/liabru/jquery-match-height y apuntar a todas las columnas secundarias de
.equal-cols
. Me gusta esto:Sin este polyfill, las columnas se comportarán como las columnas Bootstrap habituales, por lo que es una muy buena alternativa.
fuente
También puede usar inline-flex, que funciona bastante bien y puede ser un poco más limpio que modificar cada elemento de fila con CSS.
Para mi proyecto, quería que cada fila cuyos elementos secundarios tuvieran bordes tuviera la misma altura para que los bordes se vieran irregulares. Para esto creé una clase css simple.
fuente
Desde:
http://getbootstrap.com.vn/examples/equal-height-columns/equal-height-columns.css
fuente
descarada solución jquery si alguien está interesado. Solo asegúrese de que todos sus cols (el) tengan un nombre de clase común ... también funciona de manera receptiva si lo vincula a $ (ventana) .resize
Uso
Nota: Esta publicación se ha editado según el comentario de @Chris de que el código solo estableció la última altura más alta en la
$.each()
funciónfuente
Algunas de las respuestas anteriores explican cómo hacer que los divs tengan la misma altura, pero el problema es que cuando el ancho es demasiado estrecho, los divs no se apilarán, por lo tanto, puede implementar sus respuestas con una parte adicional. Para cada uno, puede usar el nombre CSS que se proporciona aquí además de la clase de fila que usa, por lo que el div debería tener este aspecto si siempre desea que los divs estén uno al lado del otro:
Para todas las pantallas:
Para cuando quieres usar sm:
Para cuando quieres md:
Para cuando quieres usar lg:
EDITAR Basado en un comentario, de hecho existe una solución más simple, pero debe asegurarse de proporcionar información de la columna desde el ancho deseado más grande para todos los tamaños hasta xs (por ejemplo
<div class="col-md-3 col-sm-4 col-xs-12">
:fuente
flex-wrap: wrap;
entonces no necesitas todos los separados ... a menos que los desees específicamente.Me sorprende no poder encontrar una solución que valga la pena aquí a fines de 2018. Seguí adelante y descubrí una solución Bootstrap 3 usando Flexbox.
Ejemplo limpio y simple:
HTML
CSS
Ver demostración de trabajo: http://jsfiddle.net/5kmtfrny/
fuente
Sé que llego muy tarde, pero ahora puedes usar el atributo de estilo "altura mínima" para lograr tu propósito.
fuente
Si alguien usa bootstrap 4 y busca columnas de igual altura, solo use el
row-eq-height
div padreRef: http://getbootstrap.com.vn/examples/equal-height-columns/
fuente
Aquí está mi solución (CSS compilado):
Entonces su código se vería así:
Básicamente este es el mismo sistema que usa con las
.col-*
clases con esa diferencia que necesita aplicar.row-*
clases a la fila misma.Con
.row-sm-eq
columnas se apilarán en pantallas XS. Si no necesita que se apilen en cualquier pantalla, puede usarlas.row-xs-eq
.La versión de SASS que realmente utilizamos:
Demo en vivo
Nota: mezclar
.col-xs-12
y.col-xs-6
dentro de una sola fila no funcionaría correctamente.fuente
border-spacing
y márgenes negativos.Hay un problema con el uso de la Solución 1 mientras se aplica solo en la columna de las filas. Me gustaría mejorar la Solución 1.
(Lo siento, no puedo comentar la respuesta de Popnoodles. No tengo suficientes reputaciones)
fuente
Lo mejor que hay:
Reflejo de Github - Docs
Funciona con bootstrap
Actualizar:
fuente
Aquí está mi método, he usado flex con algunos cambios en la consulta de medios.
luego agregó las clases a los padres que fueron requeridas
Estoy usando puntos de interrupción de respuesta porque el flujo generalmente obstaculiza la naturaleza de respuesta estándar de arranque.
fuente
Yo uso esta solución súper fácil con
clearfix
, que no tiene ningún efecto secundario.Aquí hay un ejemplo en AngularJS:
Y un ejemplo más en PHP:
fuente
Para aquellos que buscan una solución rápida y fácil: si tiene un conjunto relativamente consistente de contenido de bloque, establecer una altura mínima en el div que sea un poco más grande que el bloque más grande puede ser más fácil de implementar.
fuente
donde .container-height es la clase de estilo que debe agregarse a un elemento con estilo .row al que todos sus hijos .col * tienen la misma altura.
La aplicación de estos estilos solo a algunos .row específicos (con .container-height, como en el ejemplo) también evita aplicar el margen y el desbordamiento del relleno a todos los .col *.
fuente
¡Busqué una solución para el mismo problema y encontré una que simplemente funcionó! - casi sin código extra ...
vea https://medium.com/wdstack/bootstrap-equal-height-columns-d07bc934eb27 para una buena disuccuion, y con la respuesta que desea en la parte inferior, con un enlace.
https://www.codeply.com/go/EskIjvun4B
esta fue la forma correcta de respuesta para mí ... una cita: ... 3 - Use flexbox (¡lo mejor!)
A partir de 2017, la mejor (y más fácil) forma de hacer columnas de igual altura en un diseño receptivo es usar CSS3 flexbox.
y simplemente use:
fuente
Ejemplo:
https://jsfiddle.net/b9chris/njcnex83/embedded/result/
Adaptado de varias respuestas aquí. Las respuestas basadas en flexbox son las correctas una vez que IE8 y 9 están muertos, y una vez que Android 2.x está muerto, pero eso no es cierto en 2015, y probablemente no lo será en 2016. IE8 y 9 siguen siendo 4- 6% de uso dependiendo de cómo mida, y para muchos usuarios corporativos es mucho peor. http://caniuse.com/#feat=flexbox
El
display: table
,display: table-cell
truco es compatible con versiones más - y una gran cosa es el problema sólo seria un problema de compatibilidad es Safari, donde la fuerzasbox-sizing: border-box
, algo que ya se aplica a las etiquetas de Bootstrap. http://caniuse.com/#feat=css-tableObviamente, puede agregar más clases que hacen cosas similares, como
.equal-height-md
. Los relacioné con divs para el pequeño beneficio de rendimiento en mi uso restringido, pero podría eliminar la etiqueta para hacerla más generalizada como el resto de Bootstrap.Tenga en cuenta que el jsfiddle aquí usa CSS y, por lo tanto, las cosas que Less proporcionaría de otra manera están codificadas en el ejemplo vinculado. Por ejemplo, @ screen-sm-min ha sido reemplazado por lo que Less insertaría: 768px.
fuente
Si tiene sentido en su contexto, simplemente puede agregar un div de 12 columnas vacío después de cada salto, que actúa como un divisor que abraza la parte inferior de la celda más alta de su fila.
¡Espero que esto ayude!
fuente
Pensé que solo agregaría que la respuesta dada por Dr.Flink también se puede aplicar a un
form-horizontal
bloque Bootstrap 3 , lo que puede ser muy útil si desea usar colores de fondo para cada celda. Para que esto funcione para los formularios de arranque, necesitará ajustar el contenido del formulario que solo sirve para replicar una estructura similar a una tabla.El siguiente ejemplo también proporciona el CSS que demuestra que una consulta de medios adicional permite que Bootstrap 3 simplemente tome el control y haga lo normal en las pantallas más pequeñas. Esto también funciona en IE8 +.
Ejemplo:
fuente
Prueba esto a través de flex-box
Live JSFiddle - https://jsfiddle.net/grinmax_/spsn4fnq/
fuente
Entonces, sí, Bootstrap 4 hace que todos los cols en una fila tengan la misma altura, sin embargo, si está creando un borde alrededor del contenido dentro de la fila, puede encontrar que parece que los cols no tienen la misma altura.
Cuando apliqué
height: 100%
al elemento dentro de la columna, descubrí que había perdido mi margen.Mi solución es usar relleno en el div de la columna (en lugar de un margen en el elemento interno). Al igual que:
El ejemplo de código anterior usa Bootstrap 4.1 para crear un conjunto de nueve cuadros con un borde
fuente
HTML
CSS
JS
fuente
19/03/2019
** Solución Bootstrap 4 de igual altura **
Bootstrap Utilities / flex para igual altura
Ejemplo en vivo en Codepen
Altura igual por clase bootstrap con div padre fijo
height
omin-height
Mostrar fragmento de código
fuente
Puedes envolver las columnas dentro de un div
fuente