Cómo justificar un único elemento flexbox (override justify-content)


Puede reemplazar align-items con align-self para un elemento flexible. Estoy buscando una manera de anular justify-content para un elemento flex.

Si tuviera un contenedor flexbox con justify-content:flex-end, pero desea que el primer elemento sea justify-content: flex-start, ¿cómo podría hacerse?

Esto fue mejor contestado por este post: https://stackoverflow.com/a/33856609/269396

 161
Author: Community, 2014-05-13

6 answers

No parece haber justify-self, pero puede lograr una configuración de resultado similar apropiada margin a auto 1. Por ejemplo, para flex-direction: row (predeterminado) debe establecer margin-right: auto para alinear el hijo a la izquierda.

.container {
  height: 100px;
  border: solid 10px skyblue;
  
  display: flex;
  justify-content: flex-end;
}
.block {
  width: 50px;
  background: tomato;
}
.justify-start {
  margin-right: auto;
}
<div class="container">
  <div class="block justify-start"></div>
  <div class="block"></div>
</div>

1 Este comportamiento es definido por la especificación Flexbox.

 311
Author: Pavlo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-04-20 09:40:17

AFAIK no hay ninguna propiedad para eso en las especificaciones, pero aquí hay un truco que he estado usando: establezca el elemento contenedor ( el que tiene display:flex ) en justify-content:space-around Luego agregue un elemento adicional entre el primer y el segundo elemento y establézcalo en flex-grow:10 (o algún otro valor que funcione con su configuración)

Editar: si los elementos están estrechamente alineados, es una buena idea agregar flex-shrink: 10; al elemento adicional también, para que el diseño responda correctamente en dispositivos más pequeños.

 16
Author: EEGL,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-09-24 10:51:43

Si en realidad no está restringido a mantener todos estos elementos como nodos hermanos, puede envolver los que van juntos en otro cuadro flexible predeterminado, y hacer que el contenedor de ambos use espacio entre.

.space-between {
  border: 1px solid red;
  display: flex;
  justify-content: space-between;
}
.default-flex {
  border: 1px solid blue;
  display: flex;
}
.child {
  width: 100px;
  height: 100px;
  border: 1px solid;
}
<div class="space-between">
  <div class="child">1</div>
  <div class="default-flex">
    <div class="child">2</div>
    <div class="child">3</div>
    <div class="child">4</div>
    <div class="child">5</div>
  </div>
</div>

O si estuviera haciendo lo mismo con flex-start y flex-end invertida, simplemente cambie el orden del contenedor default-flex y lone child.

 10
Author: borkxs,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-02-05 02:03:21

Parece que justify-self llegará pronto a los navegadores. Ya hay un artículo sobre ello en MDN . En el momento de escribir este artículo, el soporte del navegador es pobre.

Con respecto a margin-solution: Tengo una cuadrícula Flexbox con huecos. No hay ninguna propiedad flex-gap (¿todavía?) con Flexbox. Así que para las canaletas, estoy usando rellenos y márgenes, por lo que margin: auto necesita sobrescribir los otros márgenes...

 1
Author: Frank Lämmer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-06-25 19:25:32

Para aquellas situaciones en las que se conoce el ancho de los elementos que desea flex-end, puede establecer su flex en "0 0 # # px" y establecer el elemento que desea flex-start con flex:1

Esto hará que el elemento pseudo flex-start llene el contenedor, simplemente formatéelo en text-align:left o lo que sea.

 0
Author: Mahks,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-03-29 21:48:04

Resolví un caso similar estableciendo el estilo del elemento interno a margin: 0 auto.
Situación: Mi menú generalmente contiene tres botones, en cuyo caso deben ser justify-content: space-between. Pero cuando solo hay un botón, ahora estará alineado al centro en lugar de a la izquierda.

 0
Author: Micros,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-11-01 10:00:20