En este apartado vamos a ver y analizar una de las funcionalidades más importantes
de CSS 3, que permite el aliniamiento horizontal y vertical de los elementos con la facilidad
que versiones anteriores de CSS no tenian, desde el punto de vista de la biblioteca se
dispondrán de clases que permitirán utilizar estas funcionalidades sin necesidad de archivos
de estilos y aplicándolas directamente en el DOM de html.
Flexbox en CSS3
En CSS3 se utiliza la propiedad display: flex
que por defecto acomoda a los elementos de forma horizontal uno pegado al otro.
.flex-box {
display: flex;
}
El resultado de aplicar esta clase a elementos del DOM es el siguiente.
Cont 1
Cont 2
Cont 1
Cont 2
Como se puede observar se mantienen un contenedor pegado al otro
sin ningún tipo de distancia entre ambos y alineados a la izquierda.
Para centrar los contenedores es necesario valerse de otra propiedad que
acompaña a la anterior justify-content: center.
En este caso están centrados, pero si queremos que los contenedores se distribuyan
a través de todo el ancho del contenedor padre utilizaremos la misma propiedad anteriormente
mencionada pero con el valor justify-content: space-around
En todos los ejemplos anteriores pudimos alinear los elementos de forma horizontal
pero que pasa cuando el aliniamiento lo queremos realizar de forma vertical.
Para esta tarea utilizaremos la propiedad align-item: [valor]
1
2
Como se puede ver números identificadores de contenedores quedan en la parte superior del contenedor padre y la altura
de los dos contenedores ocupa el 100% del alto.
si queremos centrarlos utilizamos align-items: center
Ahora vamos a ver como aplicar las propiedades antes vistas con las clases provistas
por la biblioteca no solo de manera estática sino dinámica (cambiando las propiedades en función
del tamaño de pantalla donde se estén mostrando los elementos).
d-flex
La clase que permite implementar flexbox en los contenedores es
.d-flex que por defecto generará
un alineamiento horizontal.
1
2
1
2
just-center
Ahora tomaremos el ejemplo anterior y centraremos los elementos agregando la justificación requerida.
1
2
1
2
just-around
Para cubrir todo el ancho con elementos es necesario utilizar esta clase que permitirá replicar el
ejemplo de la sección anterior.
1
2
1
2
just-between
1
2
1
2
ali-center
Ahora vamos a ver como alinear el contenido de flexbox pero verticalmente, la propiedad
utilizada es la descripta en la sección anterior align-items
y a través de sus variantes vamos a disponer de un conjuntos de valores que van a permitir
acomodar el contenido como requiera el diseño.
1
2
Notese que los contenedores están centrados verticalmente dentro del contenedor padre que es
el que dispone de las propiedades de flexbox.
1
2
ali-end
El mismo concepto anterior pero envez de centrar el contenido verticalmente ahora se
los alinea al final del mismo.
1
2
1
2
ali-baseline
Alinea verticamente los contenedores pero en función al contenido de los mismos
pero no a los límites establecidos por los contenedores, es decir para generar
el aliniamiento se basa en el contenido en este caso texto.
Esto es el contenedor 1
alineado con flexbox
Esto es el contenedor 2
Propiedad ali-baseline
Esto es el contenedor 1
alineado con flexbox
Esto es el contenedor 2
Propiedad ali-baseline
ali-stretch
Lo que hace esta clase es brindale a los contenedores hijos
el mismo alto que el contenedor padre expandiendo el alto de los
contenedores.
1
2
1
2
Flexbox Responsive
En este apartado vamos a ver las funcionalidades antes vistas, pero en este caso vamos
a elegir en que pantalla se van a aplicar, en ciertas oportunidades es necesario aplicar flexbox
en tamaños de pantalla grandes pero en dispositivos de pantalla mas pequeños estas propiedades
no encajan con el diseño.
Wrap
Es importante poder romper el flexbox en un momento determinado, en la práctica
en muchas oportunidades contenedores alineados horizontamente se adaptan muy bien
a tamaños de pantalla de más 1030px pero no es de esta manera para tamaños más pequeños.
La propiedad wrap no da la oportunidad de romper el flexbox establecido de manera automática o manual
para que el diseño no se salga de la pantalla generando el scroll inferior y obligando al usuario
a moverlo para ver el contenido completo.
Título de la tarjetaNew
Pequeña descripción
Lorem ipsum dolor sit amet consectetur, adipisicing elit. Hic ex et optio.
Título de la tarjetaNew
Pequeña descripción
Lorem ipsum dolor sit amet consectetur, adipisicing elit. Hic ex et optio.
Notese en este ejemplo que si achicamos la pantalla del navegador el diseño tiene conflitos
con el espacio y las tarjetas se saldrán del ancho de la pantalla. Esto se debe a que flexbox por default
es no-wrap (no se rompe el diseño y lo mantiene aún cuando no es adecuado).
Solución:
Título de la tarjetaNew
Pequeña descripción
Lorem ipsum dolor sit amet consectetur, adipisicing elit. Hic ex et optio.
Título de la tarjetaNew
Pequeña descripción
Lorem ipsum dolor sit amet consectetur, adipisicing elit. Hic ex et optio.
Ahora si achican la pantalla la segunda tarjeta se irá debajo de la primera
manteniendo el diseño. Esto se logra añadiendo la clase flex-wrap
(Automático).
Título de la tarjetaNew
Pequeña descripción
Lorem ipsum dolor sit amet consectetur, adipisicing elit. Hic ex et optio.
Título de la tarjetaNew
Pequeña descripción
Lorem ipsum dolor sit amet consectetur, adipisicing elit. Hic ex et optio.
Wrap Manual
El concepto es idéntico al ejemplo anterior con la diferencia que somos nosotros los que
vamos a decidir el momento exacto para que flexbox se rompa y los contenedores se ubiquen
uno abajo del otro.
Queremos para este ejemplo que en dispositivos de menos de 1030px (Medianos) flexbox se rompa.
Título de la tarjetaNew
Pequeña descripción
Lorem ipsum dolor sit amet consectetur, adipisicing elit. Hic ex et optio.
Título de la tarjetaNew
Pequeña descripción
Lorem ipsum dolor sit amet consectetur, adipisicing elit. Hic ex et optio.
La clase utilizada es flex-wrap-m (Medium).
Título de la tarjetaNew
Pequeña descripción
Lorem ipsum dolor sit amet consectetur, adipisicing elit. Hic ex et optio.
Título de la tarjetaNew
Pequeña descripción
Lorem ipsum dolor sit amet consectetur, adipisicing elit. Hic ex et optio.
Clase
Medida
.flex-wrap
Todos los dispositivos
.flex-wrap-m
770px < X <= 1030px
.flex-wrap-s
400px < X <= 770px
.flex-wrap-xs
X <= 400px
Justificación Variable
En muchas oportunidades no queremos romper el flexbox para alinear los elementos
sino que con solo ajjustar la justificación es suficiente y podemos a partir de esto
mostrar un diseño consistente.
1
2
Notese que si se achica el tamaño de pantalla y esta sea menor a 1030px los contenedores 1 y 2
se alinearán a la izquierda, esto se logra con la clase just-start-m.
1
2
Clase
Medida
Descripción
just-start
Todos los dispositivos
Alinea horizontalmente los elementos al inicio.
just-end
Todos los dispositivos
Alinea horizontalmente los elementos al final.
just-center
Todos los dispositivos
Alinea horizontalmente los elementos al centro.
just-around
Todos los dispositivos
Alinea horizontalmente los elementos distribuidos por todo el contenedor padre.
just-between
Todos los dispositivos
Alinea horizontalmente los elementos en extremos opuestos.
just-start-m
770px < X < 1030px
Alinea el contenido al inicio pero a partir de pantallas medianas.
just-start-s
400px < X < 770px
Alinea el contenido al inicio pero a partir de pantallas chicos.
just-start-xs
X < 400px
Alinea el contenido al inicio pero a partir de pantallas extra chicos.
just-center-m
770px < X < 1030px
Alinea el contenido al centro pero a partir de pantallas medianas.
just-center-s
400px < X <= 770px
Alinea el contenido al centro pero a partir de pantallas chicas.
just-center-xs
X < 400px
Alinea el contenido al centro pero a partir de pantallas extra chicas.
just-end-m
770px < X < 1030px
Alinea el contenido al final pero a partir de pantallas medianas.
just-end-s
400px < X <= 770px
Alinea el contenido al final pero a partir de pantallas chicas.
just-end-xs
X < 400px
Alinea el contenido al final pero a partir de pantallas extra chicas.
Alineación Variable
Similar a lo que sucede con la justificación podemos realizarlo con la Alineación
vertical, la biblioteca dispone de clases para ajustar estos valores a todo tipo de
pantalla.
1
2
En este ejemplo utiliza un alineamiento centrado para equipos de mas de 1030px, pero para
menos que ese valor la alineación se posiciona al final.
1
2
Otro ejemplo un poco mas completo es utilizar una alineación centrada en equipos
grandes, una alineación al inicio en equipos medianos y la ruptura del flexbox en
equipos chicos, todo esto en los mismos contenedores.
Título de la tarjetaNew
Pequeña descripción
Lorem ipsum dolor sit amet consectetur, adipisicing elit. Hic ex et optio.
Título de la tarjetaNew
Pequeña descripción
Lorem ipsum dolor sit amet consectetur, adipisicing elit. Hic ex et optio.
Clase
Tamaños
Descripción
ali-start
Todos los tamaños
Alinea los elementos al inicio del contenedor padre
ali-center
Todos los tamaños
Alinea los elementos al centro del contenedor padre
ali-end
Todos los tamaños
Alinea los elementos al final del contenedor padre
ali-stretch
Todos los tamaños
Alinea los elementos distruyendolos proporcionalmente por todo el contenedor padre
ali-start-m
770px < X < 1030px
Alinea los elementos al inicio del contenedor padre en equipos medianos
ali-start-s
400px < X < 770px
Alinea los elementos al inicio del contenedor padre en equipos chicos
ali-start-xs
400px > X
Alinea los elementos al inicio del contenedor padre en equipos extra chicos
ali-center-m
770px < X < 1030px
Alinea los elementos al centro del contenedor padre en equipos medianos
ali-center-s
400px < X < 770px
Alinea los elementos al centro del contenedor padre en equipos chicos
ali-center-xs
400px > X
Alinea los elementos al centro del contenedor padre en equipos extra chicos
ali-end-m
770px < X < 1030px
Alinea los elementos al final del contenedor padre en equipos medianos
ali-end-s
400px < X < 770px
Alinea los elementos al final del contenedor padre en equipos chicos
ali-end-xs
400px > X
Alinea los elementos al final del contenedor padre en equipos extra chicos
ali-stretch-m
770px < X < 1030px
Alinea los elementos distruyendolos proporcionalmente por todo el contenedor padre
ali-stretch-s
400px < X < 770px
Alinea los elementos distruyendolos proporcionalmente por todo el contenedor padre
ali-stretch-xs
400px > X
Alinea los elementos distruyendolos proporcionalmente por todo el contenedor padre
Flex Culumn-Row
Por defecto la clase d-flex establece el
alineamiento de forma horizontal, pero existen ocasiones en las cuales debemos
disponer de un alineamiento horizontal en determinadas circunstancias y en otras optar
por un alineamiento vertical. Por esta razón existen dos clases que permiten definir esta situación.
Título de la tarjetaNew
Pequeña descripción
Lorem ipsum dolor sit amet consectetur, adipisicing elit. Hic ex et optio.
Título de la tarjetaNew
Pequeña descripción
Lorem ipsum dolor sit amet consectetur, adipisicing elit. Hic ex et optio.
Título de la tarjetaNew
Pequeña descripción
Lorem ipsum dolor sit amet consectetur, adipisicing elit. Hic ex et optio.
Título de la tarjetaNew
Pequeña descripción
Lorem ipsum dolor sit amet consectetur, adipisicing elit. Hic ex et optio.
Si achican el tamaño de la pantalla a menos de 1030px las dos tarjetas utilizadas para el ejemplo
se acomodarán encolumnadas y no en forma de horizontal.
Como se muestra en el ejemplo las clases utilizadas son:
.flex-row
.flex-column-m
La clase .flex-row no posee parámetro referente a el tamaño de pantalla, por lo tanto
se aplicará a todos los dispositivos, mientras que la clase .flex-column-m si lo tiene
y se aplicará a partir de equipos medianos.
Flex Reverse
Flexbox tiene propiedades para mostrar el contenido de forma inversa a como está dispuesto
dentro del archivo html, la biblioteca hace uso de estas propiedades a través de dos clases que permiten llevar
a cabo estas tareas.
1
2
Como se puede ver en el ejemplo los contenedores por defecto quedan alineados
de manera horizontal y a la derecha. El primero contenedor es el que posee el número dos.