単一のフレックスボックスアイテムを正当化する方法(justify-contentをオーバーライドする)


283

あなたは無効にすることができalign-itemsalign-self、フレックス項目について。justify-contentフレックスアイテムをオーバーライドする方法を探しています。

を使用したflexboxコンテナがありjustify-content:flex-end、最初のアイテムをにしたい場合justify-content: flex-start、どうすればそれができますか?

これはこの投稿で最もよく答えられました:https//stackoverflow.com/a/33856609/269396


2
autoマージンを使用します。こちらのボックス#26をご覧ください。stackoverflow.com
Michael Benjamin

最も役立つ回答へのリンクをありがとう!
ブレイディダウリング

回答:


549

そこではないようですjustify-selfが、あなたは適切な設定と同様の結果を得ることができますmarginauto¹を。例:以下のためにflex-direction: row(デフォルト)あなたが設定する必要がありmargin-right: auto、左に子を整列させます。

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

¹この動作はFlexbox仕様で定義されています。


51
この手法は優れており、垂直方向にも機能します。たとえば、高さが固定されたコンテナ内の最後の要素を下に固定したいとします。`` `.container {flex-direction:column;を使用できます。justify-content:flex-start} .last-item {margin-top:auto} `` `
Christian Schlensker

6
@krulikこの動作はFlexbox仕様で定義されています。w3.org/ TR / 2012 / CR
Pavlo

7
さらに調査した結果、justify-self何の関係もない可能性がありますflexboxが、css grids実際に使用されていますが、よくわかりません。フレックスボックス付きのChromeで動作しないようです。
ジェイクウィルソン

8
1つのアイテムを左側に配置し、もう1つのアイテムを中央に配置するにはどうすればよいですか?
ファーミ

3
「フレックスボックスレイアウトでは、このプロパティは無視されます」-justify-selfのMozillaドキュメントから取得
Finlay Percy

19

申し訳ありませんが、仕様にはそのためのプロパティはありませんが、ここで私が使用してきたトリックがあります。コンテナ要素(を含むものdisplay:flex)をにjustify-content:space-around 設定し、1番目と2番目のアイテムの間に要素を追加してflex-grow:10(またはセットアップで機能する他の値)

編集:アイテムがきちんと配置されている場合はflex-shrink: 10;、追加の要素にも追加することをお勧めします。そうすることで、レイアウトが小さいデバイスで適切に反応するようになります。


1
幅を指定せずに機能します(少なくとも私の状況では機能しました)
eeglbalazs 2015年

試してみるmin-width: 0
デンビンスキー、

13

これらの要素すべてを兄弟ノードとして保持することに実際に制限されていない場合は、一緒に移動する要素を別のデフォルトのフレックスボックスにラップし、両方のコンテナーにスペースを使用させることができます。

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

または、flex-startとflex-endを逆にして同じことを行っている場合は、default-flexコンテナと1つの子の順序を入れ替えるだけです。


5

justify-selfもうすぐブラウザに来るようですMDNにはすでにその記事があります。この記事の執筆時点では、ブラウザーのサポートは不十分です。

マージンソリューションについて:ギャップのあるFlexboxグリッドがあります。flex-gapFlexboxには(まだ?)プロパティはありません。ガターについては、パディングとマージンを使用しているためmargin: auto、他のマージンを上書きする必要があります...


7
悲しいことにIn flexbox layouts, this property is ignored
Sphinxxx

1
@Sphinxxxはい。ただし、コンテナでjustify-self 機能しdisplay: gridます。これは最近のflexboxに似ているため、、のような豊富な位置付けとalign-itemsalign-selfここで必要な機能のようないくつかの追加機能を有効にしjustify-selfます。私がお勧めするのは、十分な場所ではflexboxを使用することですが、何かが欠けている場合は、グリッドがあなたが探しているものである可能性が高いです。(たとえば、1つの子を中心xと中心yに、別の子を右x中心y margin-left: autoに簡単に揃える-フレックスボックスには、左+右は簡単ですが、中央+右はありません)例:stackoverflow.com/a/57128453 / 2441655
Venryx

1

あなたがしたいんアイテムの幅これらの状況についてはflex-end知られている、あなたは「0 0 ##ピクセル」に自分のフレックスを設定し、にしたい項目を設定することができますflex-startflex:1

これにより、疑似flex-startアイテムがコンテナーを埋めるtext-align:leftようになります。それをフォーマットするか、何でもします。


0

内部アイテムのスタイルをに設定することで、同様のケースを解決しましたmargin: 0 auto
状況:私のメニューには通常3つのボタンが含まれていますjustify-content: space-between。ただし、ボタンが1つしかない場合は、左ではなく中央に配置されます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.