Saltar al contenido

alineación vertical con Bootstrap 3

Contamos con la contestación a esta obstáculo, o por lo menos eso creemos. Si sigues con alguna inquietud dínoslo, que sin dudarlo te ayudaremos

Solución:

Esta respuesta presenta un truco, pero le recomiendo encarecidamente que use flexbox (como se indica en la respuesta de @Haschem), ya que ahora es compatible en todas partes.

Enlace de demostraciones:

– Bootstrap 3
– Bootstrap 4 alpha 6

Aún puede usar una clase personalizada cuando la necesite:

.vcenter 
    display: inline-block;
    vertical-align: middle;
    float: none;
Big
Small

Bootply

Utilizando inline-block agrega espacio adicional entre bloques si deja un espacio real en su código (como ...

...). Este espacio adicional rompe nuestra cuadrícula si los tamaños de columna suman 12:

Big
Small

Aquí, tenemos espacios adicionales entre

y

(un retorno de carro y 2 pestañas / 8 espacios). Y entonces…

Ingrese la descripción de la imagen aquí

¡¡Vamos a patear este espacio extra !!

Big
Small

Ingrese la descripción de la imagen aquí

Observe la aparentemente comentarios inútiles ? Son importante – sin ellos, el espacio en blanco entre el

los elementos ocuparán espacio en el diseño, rompiendo el sistema de cuadrícula.

Nota: Bootply se ha actualizado

Diseño de caja flexible

Con la llegada de CSS Flexible Box, muchas de las pesadillas de los diseñadores web1 han sido resueltos. Uno de los más hacky, la alineación vertical. Ahora es posible incluso en alturas desconocidas.

“Dos décadas de hacks de diseño están llegando a su fin. Quizás no mañana, pero pronto, y por el resto de nuestras vidas”.

– CSS legendario Eric Meyer en W3Conf 2013

Flexible Box (o en resumen, Flexbox), es un nuevo sistema de diseño que está diseñado específicamente para propósitos de diseño. La especificación dice:

El diseño flexible es superficialmente similar al diseño de bloques. Carece de muchas de las propiedades más complejas centradas en texto o documento que se pueden usar en el diseño de bloques, como flotantes y columnas. A cambio, obtiene herramientas simples y poderosas para distribuir espacio y alinear contenido de la manera que las aplicaciones web y las páginas web complejas a menudo necesitan.

¿Cómo puede ayudar en este caso? Bien, veamos.


Columnas alineadas verticalmente

Usando Twitter Bootstrap tenemos .rowestoy teniendo algo .col-*s. Todo lo que tenemos que hacer es mostrar el .row2 como una caja de contenedor flexible y luego alinee todos sus elementos flexibles (las columnas) verticalmente por align-items propiedad.

EJEMPLO AQUÍ(Lea los comentarios con atención)

...
...
.vertical-align 
    display: flex;
    align-items: center;

La salida

Columnas alineadas verticalmente en Twitter Bootstrap

El área coloreada muestra el cuadro de relleno de columnas.

Aclarando sobre align-items: center

8.3 Alineación del eje transversal: el align-items propiedad

Los elementos flexibles se pueden alinear en el eje transversal de la línea actual del contenedor flexible, similar a justify-content pero en la dirección perpendicular. align-items establece la alineación predeterminada para todos los elementos del contenedor flexible, incluidos los elementos flexibles anónimos.

align-items: center;

Por valor central, el cuadro de margen del elemento flexible se centra en el eje transversal dentro de la línea.


Alerta grande

Nota importante n. ° 1: Twitter Bootstrap no especifica el width de columnas en dispositivos extrapequeños a menos que proporcione uno de .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 especifica el width de la columna explícitamente.

Pero alternativamente podrías apagar el diseño de Flexbox simplemente cambiando display: flex; para display: block; en tamaños de pantalla específicos. Por ejemplo:

/* Extra small devices (767px and down) */
@media (max-width: 767px) 
    .row.vertical-align 
        display: block; /* Turn off the flexible box layout */
    

O podrías especificar .vertical-alignsolamente en tamaños de pantalla específicos como este:

/* Small devices (tablets, 768px and up) */
@media (min-width: 768px) 
    .row.vertical-align 
        display: flex;
        align-items: center;
    

En ese caso, iría con el enfoque de @ KevinNelson.

Nota importante n. ° 2: Los prefijos de proveedores se omiten por 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 antiguas como Internet Explorer 9! Flexbox es compatible con Internet Explorer 10 y posteriores).

Esto significa que también debe usar propiedades con prefijo de proveedor como display: -webkit-box y así sucesivamente 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 center valor por align-items propiedad. El valor predeterminado es stretch para que los elementos puedan ocupar toda la altura del elemento principal.

Para solucionarlo, puede agregar display: flex; a las columnas también:

EJEMPLO AQUÍ(Nuevamente, cuidado con los comentarios)

.vertical-align 
  display: flex;
  flex-direction: row;


.vertical-align > [class^="col-"],
.vertical-align > [class*=" col-"] 
  display: flex;
  align-items: center;     /* Align the flex-items vertically */
  justify-content: center; /* Optional, to align inner flex-items
                              horizontally within the column  */

La salida

Columnas de altura completa con contenido alineado verticalmente en Twitter Bootstrap

El área coloreada muestra el cuadro de relleno de columnas.

Por último, si bien 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. Por favor, tenga en cuenta el “Alerta grande“si va a utilizar este enfoque en sitios web o aplicaciones del mundo real.


Para obtener más información, incluida la compatibilidad con el navegador, estos recursos serían útiles:

  • Red de desarrolladores de Mozilla: cajas flexibles
  • Guía de Flexbox – Trucos CSS
  • HTML5Rocks – Flexbox rápido
  • SmashingMagazine – Elementos de centrado con Flexbox
  • Philip Walton – Resuelto por Flexbox
  • Puedo usar: Módulo de diseño de caja flexible

1. Alinear verticalmente una imagen dentro de un div con una altura sensible2. Es mejor usar una clase adicional para no alterar la configuración predeterminada de Twitter Bootstrap. .row.

El siguiente código funcionó para mí:

.vertical-align 
    display: flex;
    align-items: center;

Tienes la opción de añadir valor a nuestra información tributando tu experiencia en las crónicas.

¡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 *