Jak uzasadnić pojedynczy element Flexbox (zastąp treść justify-content)


283

Możesz zastąpić align-items z align-selfdo elastycznego elementu. Szukam sposobu na zastąpienie justify-contentelementu flex.

Jeśli miałeś pojemnik Flexbox justify-content:flex-end, ale chcesz, aby był to pierwszy elementjustify-content: flex-start , jak można to zrobić?

Najlepiej na to odpowiedział ten post: https://stackoverflow.com/a/33856609/269396


2
Użyj automarginesów. Zobacz ramkę nr 26 tutaj: stackoverflow.com/a/33856609/3597276
Michael Benjamin

Dziękujemy za link do najbardziej pomocnej odpowiedzi!
Brady Dowling

Odpowiedzi:


549

Wydaje się justify-self, że tak nie jest , ale można osiągnąć podobne ustawienie wyników odpowiednie margindla auto¹. Np. dla flex-direction: row(domyślnie) powinieneś ustawić margin-right: autowyrównanie dziecka do lewej.

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

¹ To zachowanie jest zdefiniowane w specyfikacji Flexbox .


51
Ta technika jest doskonała i działa również w kierunku pionowym. Na przykład chcesz, aby ostatni element w pojemniku o stałej wysokości przykleił się do dna. Możesz użyć `` .container {flex-direction: column; justify-content: flex-start} .last-item {margin-top: auto} ``
Christian Schlensker

6
@krulik To zachowanie jest zdefiniowane przez specyfikację Flexbox, patrz w3.org/TR/2012/CR-css3-flexbox-20120918/#auto-margins
Pavlo

7
Po kilku dalszych badaniach justify-selfmoże nie mieć z tym nic wspólnego, flexboxale raczej jest używany, css gridsale nie jestem pewien. Wydaje mi się, że nie mogę go uruchomić w Chrome z Flexboksem.
Jake Wilson

8
Co jeśli chcę, aby jeden przedmiot znajdował się po lewej, a drugi pośrodku?
Fahmi

3
„W układach Flexbox ta właściwość jest ignorowana” - wzięto z dokumentacji Mozilli na justify-self
Finlay Percy

19

AFAIK nie ma takiej właściwości w specyfikacjach, ale oto sztuczka, której używałem: ustaw element kontenera (ten z display:flex), aby justify-content:space-around następnie dodać dodatkowy element między pierwszym a drugim elementem i ustaw go na flex-grow:10(lub niektóre inna wartość, która działa z twoją konfiguracją)

Edycja: jeśli elementy są ściśle wyrównane, dobrym pomysłem jest również dodanie flex-shrink: 10;do dodatkowego elementu, aby układ odpowiednio reagował na mniejszych urządzeniach.


1
Działa bez określania szerokości (przynajmniej w mojej sytuacji)
eeglbalazs

Spróbujmin-width: 0
The Dembinski

13

Jeśli tak naprawdę nie jesteś ograniczony do zachowania tych wszystkich elementów jako węzłów rodzeństwa, możesz owinąć te, które pasują do siebie, w innym domyślnym polu elastycznym, a kontener obu będzie używał spacji między nimi.

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

Lub jeśli robisz to samo z Flex-Start i Flex-End Reverse, po prostu zamienisz kolejność domyślnego kontenera Flex i samotnego dziecka.


5

Wygląda na justify-selfto, że wkrótce będzie dostępny w przeglądarkach . Jest już artykuł na ten temat na MDN . W chwili pisania tego tekstu obsługa przeglądarki jest słaba.

Jeśli chodzi o rozwiązanie marży: mam siatkę Flexbox z przerwami. Brak flex-gapFlex (jeszcze?) W Flexbox. Więc dla rynien używam obić i marginesów, więc muszę margin: autozastąpić inne marginesy ...


7
Niestety,In flexbox layouts, this property is ignored
Sphinxxx

1
@Sphinxxx Tak, ale justify-self nie pracę w display: gridpojemniku. To ostatnie jak schematu flexbox, więc umożliwia pozycjonowanie jak bogaty align-items, align-selfjak również pewne dodatkowe funkcje, takie jak ten, musimy tutaj justify-self. Zalecam korzystanie z Flexboksa wszędzie tam, gdzie jest to wystarczające, ale jeśli czegoś brakuje, grid najprawdopodobniej ma to, czego szukasz. (np. łatwe wyrównanie jednego dziecka do środka-x i środka-y, a drugiego do prawego-x środka-y - Flexbox ma margin-left: autodla łatwego lewego + prawego, ale nie środkowego + prawego) Przykład: stackoverflow.com/a/57128453 / 2441655
Venryx

1

W sytuacjach, gdy flex-endznana jest szerokość elementów, które chcesz , możesz ustawić ich flex na „0 0 ## px” i ustawić żądany element za flex-startpomocąflex:1

Spowoduje to, że pseudo flex-startelement wypełni pojemnik, po prostu sformatuj go text-align:leftlub cokolwiek innego.


0

Rozwiązałem podobny przypadek, ustawiając styl wewnętrznego przedmiotu na margin: 0 auto.
Sytuacja: Moje menu zwykle zawiera trzy przyciski, w takim przypadku muszą być justify-content: space-between. Ale gdy jest tylko jeden przycisk, będzie on teraz wyśrodkowany w środku zamiast w lewo.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.