¿Hay alguna forma más flexible de alinear a la derecha el "Contacto" que usarlo position: absolute
?
.main { display: flex; }
.a, .b, .c { background: #efefef; border: 1px solid #999; }
.b { flex: 1; text-align: center; }
.c { position: absolute; right: 0; }
<h2>With title</h2>
<div class="main">
<div class="a"><a href="#">Home</a></div>
<div class="b"><a href="#">Some title centered</a></div>
<div class="c"><a href="#">Contact</a></div>
</div>
<h2>Without title</h2>
<div class="main">
<div class="a"><a href="#">Home</a></div>
<!--<div class="b"><a href="#">Some title centered</a></div>-->
<div class="c"><a href="#">Contact</a></div>
</div>
Respuestas:
Aqui tienes. Establecer
justify-content: space-between
en el contenedor flexible.fuente
justify-content: flex-end
.c::after
pseudo-elemento. En mi experiencia,margin-left: auto;
es el camino a seguir.flex-flow: row-reverse;
Un enfoque más flexible sería utilizar un
auto
margen izquierdo (los elementos flexibles tratan los márgenes automáticos de forma un poco diferente a cuando se usan en un contexto de formato de bloque).Violín actualizado:
fuente
flex
,order
, etc.).margin-left: auto;
estilo.margin-left: auto;
.Si desea utilizar flexbox para esto, debe poder hacerlo (
display: flex
en el contenedor,flex: 1
en los elementos ytext-align: right
en.c
):... o alternativamente (aún más simple), si los artículos no necesitan reunirse, puede usarlos
justify-content: space-between
en el contenedor y eliminar lastext-align
reglas por completo:Aquí está un demostración en Codepen que le permite probar rápidamente lo anterior.
fuente
space-between
fue exactamente lo que estaba buscando, gracias!También puede usar un relleno para llenar el espacio restante.
He actualizado la solución con 3 versiones diferentes. Esto debido a la discusión de la validez de usar un elemento de relleno adicional. Si ejecuta el código cortado, verá que todas las soluciones hacen cosas diferentes. Por ejemplo, establecer la clase de relleno en el elemento b hará que este elemento llene el espacio restante. Esto tiene la ventaja de que no hay espacio 'muerto' en el que no se pueda hacer clic.
fuente
justify-content: space-between
es "mucho" CSS, ¿en serio? No necesita más comentarios (pero si lo desea, bienvenido a chatear). Esta respuesta tiene derecho a estar aquí, porque es una solución. Pero definitivamente no es el óptimo. Idk, tal vez no te diste cuenta, pero la mayoría de los css de otras respuestas son OP y las respuestas realmente reducen (un poco) la cantidad de css del autor. Esta respuesta no tiene menos CSS que otros (no funcionará sin el CSS de OP: jsfiddle.net/63ma3b56 ). Pero tiene un elemento html más.O simplemente podrías usar
justify-content: flex-end
fuente
justify-content
atributo es un atributo del contenedor flexible, consulte la hoja flexible de Chris Coyer: css-tricks.com/snippets/css/a-guide-to-flexboxTan fácil como
fuente
Agregue la siguiente clase CSS a su hoja de estilo:
Coloque un elemento vacío entre el elemento de la izquierda y el elemento que desea alinear a la derecha:
<span class="my-spacer"></span>
fuente
Si necesita que un elemento quede alineado a la izquierda (como un encabezado) pero luego varios elementos alineados a la derecha (como 3 imágenes), entonces haría algo como esto:
Así se verá (solo se incluyó CSS relevante en el fragmento anterior)
fuente
'justify-content: flex-end' funcionó dentro del contenedor de la caja de precios.
fuente
Me parece que agregar 'justify-content: flex-end' al contenedor flex resuelve el problema mientras que 'justify-content: space-between' no hace nada.
fuente
Para aquellos que usan Angular y Flex-Layout, use lo siguiente en el contenedor de elementos flexibles:
<div fxLayout="row" fxLayoutAlign="flex-end">
Vea los documentos de fxLayoutAlign aquí y los documentos completos de fxLayout aquí .
fuente
Código de ejemplo basado en la respuesta de TetraDev
Imágenes a la derecha:
Imágenes a la izquierda:
fuente