Estoy usando Twitter Bootstrap 3, y tengo problemas cuando quiero alinear verticalmente dos div
, por ejemplo: enlace JSFiddle :
<!-- Latest compiled and minified CSS -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css">
<!-- Optional theme -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap-theme.min.css">
<!-- Latest compiled and minified JavaScript -->
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/js/bootstrap.min.js"></script>
<div class="row">
<div class="col-xs-5">
<div style="height:5em;border:1px solid #000">Big</div>
</div>
<div class="col-xs-5">
<div style="height:3em;border:1px solid #F00">Small</div>
</div>
</div>
El sistema de cuadrícula en Bootstrap usa float: left
, no display:inline-block
, por lo que la propiedad vertical-align
no funciona. Intenté usarlo margin-top
para solucionarlo, pero creo que esta no es una buena solución para el diseño receptivo.
div
, no el texto dentro, algo como esto jsfiddle.net/corinem/Aj9H9 pero en este ejemplo no uso bootstrapRespuestas:
Todavía puede usar una clase personalizada cuando la necesite:
Bootply
El uso
inline-block
agrega espacio adicional entre bloques si deja un espacio real en su código (como...</div> </div>...
). Este espacio adicional rompe nuestra cuadrícula si los tamaños de columna suman 12:Aquí, tenemos espacios adicionales entre
<div class="[...] col-lg-2">
y<div class="[...] col-lg-10">
(un retorno de carro y 2 pestañas / 8 espacios). Y entonces...¡Pateemos este espacio extra!
Observe los comentarios aparentemente inútiles
<!-- ... -->
? Son importantes : sin ellos, el espacio en blanco entre los<div>
elementos ocupará espacio en el diseño, rompiendo el sistema de cuadrícula.Nota: Bootply ha sido actualizado
fuente
col-lg-2
ycol-lg-10
). Curiosamente, si agrega el siguiente código JS (suponiendo jQuery), se las arreglará solo:$('.row').html($('.vcenter'));
inline-block
espacio adicional (bien conocido) . Doy una solución en mi edición.Diseño de caja flexible
Con el advenimiento de CSS Flexible Box , muchas de las pesadillas de los diseñadores web 1 se han resuelto. Uno de los más hacky, la alineación vertical. Ahora es posible incluso en alturas desconocidas .
Flexible Box (o en resumen, Flexbox), es un nuevo sistema de diseño que está específicamente diseñado para fines de diseño. La especificación establece :
¿Cómo puede ayudar en este caso? Bien, veamos.
Columnas alineadas verticales
Usando Twitter Bootstrap tenemos
.row
s teniendo algunos.col-*
s. Todo lo que necesitamos hacer es mostrar el.row
2 deseado como una caja de contenedor flexible y luego alinear todo su elemento flexible verticalmente (las columnas)align-items
propiedad.EJEMPLO AQUÍ (Lea los comentarios con cuidado)
La salida
El área coloreada muestra el cuadro de relleno de las columnas.
Aclarando sobre
align-items: center
Gran alerta
Nota importante n. ° 1: Twitter Bootstrap no especifica el número
width
de columnas en dispositivos extra pequeños, a menos que asigne una de las.col-xs-#
clases a las columnas.Por lo tanto, en esta demostración en particular, he usado
.col-xs-*
clases para que las columnas se muestren correctamente en modo móvil, porque especificawidth
explícitamente la columna.Pero, alternativamente, puede desactivar el diseño de Flexbox simplemente cambiando
display: flex;
adisplay: block;
tamaños de pantalla específicos. Por ejemplo:O puede especificar
.vertical-align
solo en tamaños de pantalla específicos de esta manera:En ese caso, seguiría el enfoque de @KevinNelson .
Nota importante # 2: omiten los prefijos de proveedor debido a la brevedad. La sintaxis de Flexbox ha cambiado durante el tiempo. La nueva sintaxis escrita no funcionará en versiones anteriores de navegadores web (¡pero no tan antigua como Internet Explorer 9! Flexbox es compatible con Internet Explorer 10 y versiones posteriores).
Esto significa que también debe usar propiedades con prefijo de proveedor como
display: -webkit-box
etc., en modo de producción.Si hace clic en "Alternar vista compilada" en la demostración , verá la versión prefijada de las declaraciones CSS (gracias a Autoprefixer ).
Columnas de altura completa con contenido alineado verticalmente
Como puede ver en la demostración anterior , las columnas (los elementos flexibles) ya no son tan altas como su contenedor (la caja del contenedor flexible).
.row
elemento).Esto se debe al uso de
center
valor para laalign-items
propiedad. El valor predeterminado esstretch
para que los elementos puedan llenar toda la altura del elemento primario.Para arreglar eso, también puede agregar
display: flex;
a las columnas:EJEMPLO AQUÍ (Nuevamente, tenga en cuenta los comentarios)
La salida
El área coloreada muestra el cuadro de relleno de las columnas.
Por último, pero no menos importante , tenga en cuenta que las demostraciones y los fragmentos de código aquí están destinados a darle una idea diferente, para proporcionar un enfoque moderno para lograr el objetivo. Tenga en cuenta la sección " Big Alert " si va a utilizar este enfoque en sitios web o aplicaciones del mundo real.
Para leer más, incluido el soporte del navegador, estos recursos serían útiles:
1. Alinee verticalmente una imagen dentro de un div con altura receptiva 2. Es mejor usar una clase adicional para no alterar el valor predeterminado de Twitter Bootstrap
.row
.fuente
col-*
, sus violines / codepens no utilizan bootstrap, por lo que son engañosos. Tus ejemplos no funcionan con bootstrap; su sistema de cuadrícula no se basaflex
, por lo tanto, son incompatibles. Simplemente pruebe cualquiera de sus ejemplos en una página de arranque y se dará cuenta de que no funcionan.El siguiente código funcionó para mí:
fuente
Actualización 2020
Sé que la pregunta original era para Bootstrap 3, pero ahora que se ha lanzado Bootstrap 4, aquí hay una guía actualizada sobre el centro vertical.
¡Importante! El centro vertical es relativo a la altura del padre
Bootstrap 4
Ahora que Bootstrap 4 es flexbox por defecto, hay muchos enfoques diferentes para la alineación vertical usando: márgenes automáticos , utilidades de flexbox o las utilidades de visualización junto con las utilidades de alineación vertical . Al principio, "utilidades de alineación vertical" parece obvio, pero estas solo funcionan con elementos de visualización en línea y de tabla. Aquí hay algunas opciones de centrado vertical Bootstrap 4.
1 - Centro vertical usando márgenes automáticos:
Otra forma de centrar verticalmente es usar
my-auto
. Esto centrará el elemento dentro de su contenedor. Por ejemplo,h-100
hace que la fila tenga toda la altura ymy-auto
centrará verticalmente lacol-sm-12
columna.Bootstrap 4: centro vertical con márgenes automáticos Demo
my-auto
representa los márgenes en el eje vertical y y es equivalente a:2 - Centro vertical con Flexbox:
Dado que Bootstrap 4
.row
es ahoradisplay:flex
, simplemente puede usarloalign-self-center
en cualquier columna para centrarlo verticalmente ...o, use
align-items-center
en su totalidad.row
para alinear verticalmente en el centro todocol-*
en la fila ...Bootstrap 4 - centro vertical de altura diferentes columnas de demostración
3 - Centro vertical usando las utilidades de pantalla:
Bootstrap 4 tiene utils de visualización que se pueden utilizar para
display:table
,display:table-cell
,display:inline
, etc .. Estos pueden ser usados con los utils de alineación vertical a inline align, elementos de celda de tabla inline-block o.Bootstrap 4 - Centro vertical usando utilidades de pantalla Demo
Ver también: Centro de alineación vertical en Bootstrap 4
Bootstrap 3
Método Flexbox en el contenedor de los artículos a centrar:
Transformar método de traducción:
Mostrar método en línea:
Demostración de los métodos de centrado de Bootstrap 3
fuente
mx-auto
(centrado horizontal), por lo que tiene sentido que se centremy-auto
verticalmente (eje y).Prueba esto en el CSS del div:
fuente
Pensé en compartir mi "solución" en caso de que ayude a cualquier otra persona que no esté familiarizada con las consultas @media.
Gracias a la respuesta de @ HashemQolami, construí algunas consultas de medios que funcionarían en dispositivos móviles como las clases col- * para poder apilar los col- * para dispositivos móviles pero mostrarlos alineados verticalmente en el centro para pantallas más grandes, por ejemplo
.
Los diseños más complicados que requieren un número diferente de columnas por resolución de pantalla (p. Ej., 2 filas para -xs, 3 para -sm y 4 para -md, etc.) necesitarían una determinación más avanzada, pero para una página simple con -xs apilados y -sm y más grandes en filas, esto funciona bien.
fuente
clear: both;
a las clases dentro de las consultas de medios para que esto funcione..row
modificador ... así debería verseclass="row row-sm-flex-center"
. La.row
definición BS3 maneja elclear:both;
clear: both;
nuevo.Después de la respuesta aceptada, si no desea personalizar el marcado, por separación de preocupaciones o simplemente porque usa un CMS, la siguiente solución funciona bien:
La limitación aquí es que no puede heredar el tamaño de fuente del elemento padre porque la fila establece el tamaño de fuente en 0 para eliminar el espacio en blanco.
fuente
Prefiero este método según David Walsh Centro vertical CSS :
El
transform
no es esencial; solo encuentra el centro con un poco más de precisión. Internet Explorer 8 puede estar un poco menos centrado como resultado, pero todavía no está mal. ¿Puedo usar? Transforma 2d .fuente
Esta es mi solución Simplemente agregue esta clase a su contenido CSS.
Entonces su HTML se vería así:
fuente
Acabo de hacer esto y hace lo que quiero que haga.
Y ahora mi página se ve así
fuente
Realmente encuentro que el siguiente código funciona usando Chrome y no otros navegadores que la respuesta actualmente seleccionada:
Enlace de arranque
Es posible que deba modificar las alturas (específicamente en
.v-center
) y eliminar / cambiar la división segúndiv[class*='col-']
sus necesidades.fuente
Me encontré con este mismo problema. En mi caso no sabía la altura del contenedor externo, pero así es como lo arreglé:
Primero ajuste la altura de sus
html
ybody
elementos para que sean 100%. ¡Esto es importante! Sin esto, lashtml
ybody
los elementos simplemente heredar la altura de sus hijos.Luego tuve una clase de contenedor externo con:
Y, por último, el contenedor interno con clase:
HTML es tan simple como:
Esto es todo lo que necesita para alinear verticalmente los contenidos. Compruébalo en violín:
Jsfiddle
fuente
No hay necesidad de tablas y celdas de tabla. Se puede lograr fácilmente usando transform.
Ejemplo: http://codepen.io/arvind/pen/QNbwyM
Código:
fuente
Si está utilizando el Less versión de Bootstrap y está compilando en CSS usted mismo, puede usar algunas clases de utilidad para usar con las clases de Bootstrap.
He descubierto que estos funcionan fantásticamente bien donde quiero preservar la capacidad de respuesta y la capacidad de configuración del sistema de cuadrícula Bootstrap (como usar
-md
o-sm
), pero quiero que todas las columnas de una fila dada tengan la misma altura vertical (para que pueda luego alinee verticalmente su contenido y haga que todas las columnas de la fila compartan un medio común).CSS / Menos:
HTML:
fuente
Expliqué un poco la respuesta de zessx , para facilitar su uso al mezclar diferentes tamaños de columna en diferentes tamaños de pantalla.
Si usa Sass , puede agregar esto a su archivo scss:
Lo que genera el siguiente CSS (que puede usar directamente en sus hojas de estilo, si no está usando Sass):
Ahora puede usarlo en sus columnas receptivas como esta:
fuente
Los comportamientos de Flex se admiten de forma nativa desde Bootstrap 4. Agregue
d-flex align-items-center
elrow
div. Ya no necesita modificar su contenido CSS.Ejemplo simple: http://jsfiddle.net/vgks6L74/
Con su ejemplo: http://jsfiddle.net/7zwtL702/
Fuente: Flex · Bootstrap
fuente
OK, accidentalmente mezclé algunas soluciones, y finalmente funciona ahora para mi diseño, donde intenté hacer una tabla 3x3 con columnas Bootstrap en la resolución más pequeña.
fuente
fuente
Prueba esto,
fuente
Hay varias formas de hacerlo:
Utilizar
y el CSS del contenedor para
Utilice el relleno junto con la pantalla multimedia para cambiar el relleno en relación con el tamaño de la pantalla. Google @media pantalla para saber más.
Usar relleno relativo
Es decir, especifique el relleno en términos de%
fuente
Con Bootstrap 4 (que actualmente está en alfa) puede usar la
.align-items-center
clase. Para que pueda mantener el carácter receptivo de Bootstrap. Funciona de inmediato bien para mí. Consulte la documentación de Bootstrap 4 .fuente
HTML
CSS
fuente
Me encontré con la misma situación en la que quería alinear algunos elementos div verticalmente en una fila y descubrí que las clases Bootstrap col-xx-xx aplican el estilo al div como flotante: izquierda.
Tuve que aplicar el estilo en los elementos div como style = "Float: none" y todos mis elementos div comenzaron a alinearse verticalmente. Aquí está el ejemplo de trabajo:
JsFiddle Link
En caso de que alguien quiera leer más sobre la propiedad flotante:
W3Schools - Flotador
fuente