Cómo centrar div horizontalmente y verticalmente dentro del contenedor usando flexbox. En el ejemplo a continuación, quiero que cada número esté uno debajo del otro (en filas), que están centrados horizontalmente.
.flex-container {
padding: 0;
margin: 0;
list-style: none;
display: flex;
align-items: center;
justify-content: center;
}
row {
width: 100%;
}
.flex-item {
background: tomato;
padding: 5px;
width: 200px;
height: 150px;
margin: 10px;
line-height: 150px;
color: white;
font-weight: bold;
font-size: 3em;
text-align: center;
}
<div class="flex-container">
<div class="row">
<span class="flex-item">1</span>
</div>
<div class="row">
<span class="flex-item">2</span>
</div>
<div class="row">
<span class="flex-item">3</span>
</div>
<div class="row">
<span class="flex-item">4</span>
</div>
</div>
row{
que no tiene efecto en las filas. Si lo cambia al.row{
resultado sería totalmente diferente.Respuestas:
Creo que quieres algo como lo siguiente.
Ver demostración en: http://jsfiddle.net/audetwebdesign/tFscL/
Sus
.flex-item
elementos deben estar a nivel de bloque (endiv
lugar despan
) si desea que la altura y el relleno superior / inferior funcionen correctamente.Además, en
.row
, establezca el ancho enauto
lugar de100%
.Tus
.flex-container
propiedades están bien.Si desea
.row
que se centre verticalmente en el puerto de vista, asigne un 100% de altura ahtml
ybody
, y también ponga a cero losbody
márgenes.Tenga en cuenta que
.flex-container
necesita una altura para ver el efecto de alineación vertical; de lo contrario, el contenedor calcula la altura mínima necesaria para encerrar el contenido, que es menor que la altura del puerto de vista en este ejemplo.Nota:
El
flex-flow
,flex-direction
,flex-wrap
propiedades podría haber hecho este diseño más fácil de implementar. Creo que el.row
contenedor no es necesario a menos que desee agregar un poco de estilo alrededor de los elementos (imagen de fondo, bordes, etc.).Un recurso útil es: http://demo.agektmr.com/flexbox/
fuente
Cómo centrar elementos vertical y horizontalmente en Flexbox
A continuación se presentan dos soluciones generales de centrado.
Uno para elementos flexibles alineados verticalmente (
flex-direction: column
) y el otro para elementos flexibles alineados horizontalmente (flex-direction: row
).En ambos casos, la altura de los divs centrados puede ser variable, indefinida, desconocida, lo que sea. La altura de los divs centrados no importa.
Aquí está el HTML para ambos:
CSS (excluyendo estilos decorativos)
Cuando los elementos flexibles se apilan verticalmente:
MANIFESTACIÓN
Cuando los elementos flexibles se apilan horizontalmente:
Ajuste la
flex-direction
regla del código anterior.MANIFESTACIÓN
Centrar el contenido de los elementos flexibles
El alcance de un contexto de formato flexible se limita a una relación padre-hijo. Los descendientes de un contenedor flexible más allá de los hijos no participan en el diseño flexible e ignorarán las propiedades flexibles. Esencialmente, las propiedades flexibles no son heredables más allá de los niños.
Por lo tanto, siempre tendrá que aplicar
display: flex
odisplay: inline-flex
un elemento primario para aplicar propiedades flexibles al elemento secundario.Para centrar verticalmente y / u horizontalmente el texto u otro contenido contenido en un elemento flexible, haga que el elemento sea un contenedor flexible (anidado) y repita las reglas de centrado.
Más detalles aquí: ¿Cómo alinear verticalmente el texto dentro de un flexbox?
Alternativamente, puede aplicar
margin: auto
al elemento de contenido del elemento flexible.Obtenga información sobre los
auto
márgenes flexibles aquí: Métodos para alinear elementos flexibles (consulte el cuadro 56).Centrar múltiples líneas de artículos flexibles
Cuando un contenedor flexible tiene varias líneas (debido al ajuste), la
align-content
propiedad será necesaria para la alineación del eje transversal.De la especificación:
Más detalles aquí: ¿Cómo funciona flex-wrap con align-self, align-items y align-content?
Soporte del navegador
Flexbox es compatible con todos los principales navegadores, excepto IE <10 . Algunas versiones recientes del navegador, como Safari 8 e IE10, requieren prefijos de proveedor . Para una forma rápida de agregar prefijos, use Autoprefixer . Más detalles en esta respuesta .
Solución de centrado para navegadores antiguos
Para obtener una solución de centrado alternativa que utiliza la tabla CSS y las propiedades de posicionamiento, consulte esta respuesta: https://stackoverflow.com/a/31977476/3597276
fuente
Añadir
al elemento contenedor de lo que quieras centrar. Documentación: justificar contenido y alinear elementos .
fuente
display: inline-flex
en mi caso, pero esa fue una edición fácil)No olvide usar atributos específicos de los navegadores importantes:
alinear elementos: centro; ->
justify-content: centro; ->
Puede leer estos dos enlaces para comprender mejor flex: http://css-tricks.com/almanac/properties/j/justify-content/ y http://ptb2.me/flexbox/
Buena suerte.
fuente
1 - Establecer CSS en el elemento primario div a
display: flex;
2 - Establezca CSS en el div padre para
flex-direction: column;
que tenga en cuenta que esto hará que todo el contenido dentro de ese div se alinee de arriba a abajo. Esto funcionará mejor si el elemento primario solo contiene el elemento secundario y nada más.
3 - Establecer CSS en el padre div a
justify-content: center;
Aquí hay un ejemplo de cómo se verá el CSS:
fuente
Puedes hacer uso de
display: flex; align-items: center; justify-content: center;
en su componente principal
https://repl.it/repls/TomatoImaginaryInitialization
fuente
diplay: flex;
por su contenedor ymargin:auto;
por su artículo funciona perfecto.NOTA: Debe configurar
width
yheight
para ver el efecto.fuente
Si necesita centrar un texto en un enlace, esto funcionará:
fuente
margin: auto
funciona perfecto con flexbox. Se centraliza vertical y horizontalmente.fuente
RESULTADO:
CÓDIGO
HTML:
CSS:
donde
flex-container
div se usa para centrar vertical y horizontalmente surows
div, yrows
div se usa para agrupar sus "elementos" y ordenarlos en una columna basada en uno.fuente
fuente
Usando CSS +
echa un vistazo AQUÍ
fuente