transmisión transmisiones transmision resueltos potencia por poleas mecanico mecanica flexibles elementos ejes ejercicios diseño definicion catarinas catarina cadenas html css css3 flexbox css-grid

html - transmisiones - poleas diseño mecanico



Centro y elementos flexibles de alineación inferior (3)

A continuación hay cinco opciones para lograr este diseño:

  1. Posicionamiento CSS
  2. Flexbox con elemento DOM invisible
  3. Flexbox con pseudo-elemento invisible
  4. Flexbox con flex: 1
  5. Diseño de cuadrícula CSS

Método # 1: Propiedades de posicionamiento CSS

Aplicar position: relative al contenedor flexible.

Aplicar position: absolute al elemento verde flex.

Ahora el cuadrado verde está absolutamente posicionado dentro del contenedor flexible.

Más específicamente, el cuadrado verde se elimina del flujo de documentos pero permanece dentro de los límites del antepasado posicionado más cercano .

Use las propiedades de desplazamiento CSS top , bottom , left y right para mover el cuadrado verde.

flex-container { display: flex; justify-content: center; align-items: center; flex-wrap: nowrap; position: relative; border: 4px solid blue; height: 300px; width: 300px; } flex-container > flex-item:first-child { display: flex; } flex-container > flex-item:first-child > flex-item { border: 4px solid aqua; height: 50px; width: 50px; margin: 0 5px; } flex-container > flex-item:last-child { position: absolute; bottom: 40px; left: 50%; transform: translateX(-50%); /* fine tune horizontal centering */ border: 4px solid chartreuse; height: 50px; width: 50px; }

<flex-container> <flex-item><!-- also flex container --> <flex-item></flex-item> <flex-item></flex-item> <flex-item></flex-item> </flex-item> <flex-item></flex-item> </flex-container>

Una advertencia: es posible que algunos navegadores no eliminen por completo un elemento flexible en una posición absoluta del flujo normal. Esto cambia la alineación de una manera inesperada y no estándar. Más detalles: el elemento flexible colocado de forma absoluta no se elimina del flujo normal en Firefox e IE11

Método n. ° 2: márgenes automáticos flexibles y elemento flexible invisible (elemento DOM)

Con una combinación de márgenes auto y un nuevo elemento flexible invisible, se puede lograr el diseño.

El nuevo elemento flexible es idéntico al elemento inferior y se coloca en el extremo opuesto (el superior).

Más específicamente, debido a que la alineación flexible se basa en la distribución del espacio libre, el nuevo elemento es un contrapeso necesario para mantener los tres cuadros azules centrados verticalmente. El nuevo elemento debe tener la misma altura que el elemento verde existente, o los cuadros azules no estarán centrados con precisión.

El nuevo elemento se elimina de la vista con visibility: hidden .

En breve:

  • Crea un duplicado del cuadro verde.
  • Colóquelo al principio de la lista.
  • Use márgenes auto flexibles para mantener centrados los cuadros azules, con ambos cuadros verdes creando el mismo equilibrio desde ambos extremos.
  • Aplicar visibility: hidden al cuadro verde duplicado.

flex-container { display: flex; flex-direction: column; align-items: center; border: 4px solid blue; height: 300px; width: 300px; } flex-container > flex-item:first-child { margin-top: auto; visibility: hidden; } flex-container > flex-item:nth-child(2) { margin-top: auto; display: flex; } flex-container > flex-item:last-child { margin-top: auto; margin-bottom: auto; } flex-container > flex-item:first-child, flex-container > flex-item:last-child { border: 4px solid chartreuse; height: 50px; width: 50px; } flex-container > flex-item:nth-child(2) > flex-item { border: 4px solid aqua; height: 50px; width: 50px; margin: 0 5px; }

<flex-container> <flex-item></flex-item> <flex-item><!-- also flex container --> <flex-item></flex-item> <flex-item></flex-item> <flex-item></flex-item> </flex-item> <flex-item></flex-item> </flex-container>

Método n. ° 3: márgenes automáticos flexibles y elemento flexible invisible (pseudo-elemento)

Este método es similar al # 2, excepto que es más limpio semánticamente y se debe conocer la altura del cuadro verde.

  • Cree un pseudo-elemento con la misma altura que el cuadro verde existente.
  • Colóquelo al comienzo del contenedor con ::before .
  • Use márgenes auto flexibles para mantener centrados los cuadros azules, con los pseudo elementos verdes y los elementos DOM creando el mismo equilibrio desde ambos extremos.

flex-container { display: flex; flex-direction: column; align-items: center; border: 4px solid blue; height: 300px; width: 300px; } flex-container::before { content: ""; margin-top: auto; height: calc(50px + 8px); /* height + borders */ visibility: hidden; } flex-container > flex-item:first-child { margin-top: auto; display: flex; } flex-container > flex-item:last-child { margin-top: auto; margin-bottom: auto; border: 4px solid chartreuse; height: 50px; width: 50px; } flex-container > flex-item:first-child > flex-item { border: 4px solid aqua; height: 50px; width: 50px; margin: 0 5px; }

<flex-container> <flex-item><!-- also flex container --> <flex-item></flex-item> <flex-item></flex-item> <flex-item></flex-item> </flex-item> <flex-item></flex-item> </flex-container>

Método 4: agregue flex: 1 a los elementos superior e inferior

Comenzando con el Método n. ° 2 o n. ° 3 anterior, en lugar de preocuparse por la misma altura para que los elementos superiores e inferiores mantengan el mismo equilibrio, solo dé a cada uno flex: 1 . Esto los obligará a ambos a consumir el espacio disponible, centrando así el elemento central.

Luego puede agregar display: flex al elemento inferior para alinear el contenido.

Método 5: diseño de cuadrícula CSS

Este puede ser el método más limpio y eficiente. No hay necesidad de posicionamiento absoluto, elementos falsos u otros hackers.

Simplemente cree una cuadrícula con tres filas. Luego, alinee los elementos en la segunda y tercera fila. La primera fila puede permanecer vacía.

grid-container { display: grid; grid-template-rows: repeat(3, 1fr); align-items: center; justify-items: center; border: 4px solid blue; height: 300px; width: 300px; } grid-item:nth-child(2) { display: flex; } grid-item:nth-child(2)>flex-item { width: 50px; height: 50px; margin: 0 5px; border: 4px solid aqua; } grid-item:nth-child(3) { border: 4px solid chartreuse; height: 50px; width: 50px; }

<grid-container> <grid-item></grid-item> <grid-item><!-- also flex container --> <flex-item></flex-item> <flex-item></flex-item> <flex-item></flex-item> </grid-item> <grid-item></grid-item> </grid-container>

Tengo un contenedor flexible (el cuadrado azul) con las siguientes propiedades:

display: flex; justify-content: center; align-items: center; flex-wrap: nowrap;

Por lo tanto, sus elementos secundarios (los cuadrados azules claros) se organizan como se ve a continuación. Sin embargo, me gustaría agregar otro hijo (el cuadrado verde) fuera del flujo normal y colocarlo en relación con su padre. Para colocarlo como se ve a continuación, lo ideal sería escribir algo como bottom: 20px; y margin: auto; .

Traté de jugar con z-index en vano. ¿Cómo debería abordar esto? ¿Debo recurrir a crear otro elemento padre?


deje que el contenedor con position: relative y el cuadrado verde con position:absolute;

body { margin: 0; } #container { display: flex; justify-content: center; align-items: center; flex-wrap: nowrap; width: 192px; height: 192px; border: 4px solid indigo; position: relative; background: lavender; } .blue { margin: 10px; width: 30px; height: 30px; outline: 4px solid skyblue; background: honeydew; } #green { position: absolute; width: 30px; height: 30px; left: 0; right: 0; margin: auto; bottom: 20px; outline: 4px solid yellowgreen; background: greenyellow; }

<div id=container> <div class=blue></div><div class=blue></div><div class=blue></div> <div id=green></div> </div>


puede usar un pseudo para moverse hacia abajo una fila de los primeros tres contenedores y luego aplicar un margin:auto al último

div { display:flex; flex-wrap:wrap; border:#0066FD solid;; width:200px; height:200px; justify-content:space-around; /* show me box center */ background:linear-gradient(to top,rgba(0,0,0,0.2) 50%, transparent 50%),linear-gradient(to left,rgba(0,0,0,0.2) 50%, transparent 50%) } span, div:before { width:50px; height:50px; border:solid #01CDFF; margin:0 auto 0; } span:last-of-type , div:before{ margin: 12px auto; border:solid #01FE43; } div:before { content:''''; width:100%; border:none; } span { /* show me box center */ background:linear-gradient(45deg,rgba(0,0,0,0.1) 50%, transparent 50%),linear-gradient(-45deg,rgba(0,0,0,0.1) 50%, transparent 50%) }

<div> <span></span> <span></span> <span></span> <span></span> </div>