Tengo un contenedor flex (el cuadrado azul) con las siguientes propiedades:
display: flex;
justify-content: center;
align-items: center;
flex-wrap: nowrap;
Por lo tanto, sus hijos (la luz azul cuadrados), se organizan como se ve a continuación. Sin embargo, me gustaría añadir otro hijo (el cuadrado verde) fuera del flujo normal y la posición es en relación con su progenitor. A la posición como se ve a continuación, me gustaría idealmente escribir algo como bottom: 20px;
y margin: auto;
.
Traté de jugar con z-index
fue en vano. ¿Cómo debo acerca de esto? Debo recurrir a la creación de otro elemento padre?
A continuación se presentan cinco opciones para lograr este diseño:
flex: 1
Método #1: Posicionamiento CSS Propiedades
Aplicar
position: relative
para el contenedor flex.Aplicar
position: absolute
a la verde flex elemento.Ahora el cuadrado verde es absolutamente posicionado dentro del contenedor flex.
Más específicamente, el cuadrado verde se quita del flujo de documentos, sino que permanece dentro de los límites de la más cercano posicionado antepasado.
Utilizar el CSS desplazamiento propiedades
top
,bottom
,left
yright
para mover el cuadrado verde alrededor.CSS:
HTML:
Una advertencia: Algunos navegadores no puede eliminar completamente una posición absoluta flex elemento en el flujo normal. Esto cambia la alineación en un no-estándar, de forma inesperada. Más detalles: Posición absoluta flex elemento no se elimina del flujo normal en Firefox & IE11
Método #2: Flex Automático de Márgenes & Invisible Flex Elemento (elemento DOM)
Con una combinación de
auto
de los márgenes de y una nueva, invisible flex punto, el diseño se puede lograr.El nuevo flex elemento es idéntica a la del elemento inferior y se coloca en el extremo opuesto (la parte superior).
Más específicamente, porque flex alineación se basa en la distribución del espacio, el nuevo elemento es un necesario contrapeso para mantener las tres cajas azules centrada verticalmente. El nuevo elemento debe ser de la misma altura que los verdes ya existentes elemento, o los cuadros de color azul no será precisamente centrada.
El nuevo elemento se elimina de la vista con
visibility: hidden
.En resumen:
auto
márgenes para mantener las cajas azules centrada, con ambos cuadros verdes creación de igualdad de equilibrio de ambos extremos.visibility: hidden
para el duplicado de la caja verde.CSS:
HTML:
Método #3: Flex Automático de Márgenes & Invisible Flex Elemento (pseudo-elemento)
Este método es similar al #2, excepto que es un limpiador de la semántica y la altura de la caja verde que debe ser conocido.
::before
.auto
márgenes para mantener las cajas azules centrado, con el verde de la pseudo y elementos DOM creación de igualdad de equilibrio de ambos extremos.CSS:
HTML:
Método #4: Agregar
flex: 1
a la parte superior e inferior de los elementosEmpezando con el Método #2 o #3 arriba, en lugar de preocuparse acerca de ser igual a la altura de la parte superior e inferior de los elementos de mantener la igualdad de equilibrio, acaba de dar a cada uno
flex: 1
. Esto obligará a ambos a consumir el espacio disponible, así centrado el medio punto.A continuación, puede agregar
display: flex
a la parte inferior del elemento, a fin de alinear el contenido.Método #5: CSS Diseño de Cuadrícula
Esta puede ser la más limpia y más eficiente. No es necesario para el posicionamiento absoluto, falso elementos u otros trucos.
Simplemente crear una cuadrícula con tres filas. Entonces centro de alinear los elementos de la segunda y tercera filas. La primera fila puede permanecer vacío.
CSS:
HTML:
dejar el recipiente con
position: relative
y el cuadrado verde conposition:absolute;
CSS:
HTML:
puede utilizar un pseudo mover hacia abajo una fila de la primera de tres contenedores, a continuación, applie un
margin:auto
a últimaCSS:
HTML: