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
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.
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.
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.
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...
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.
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.
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