2017-07-31 6 views
1

justify-contentを使用してコンテナ内のdivを正しく正当化しようとしていますが、このオプションは期待通りの動作をしていません。ラップ後にフレックスアイテムを適切な列に保持する

1 2 3 
4 5 

なく好き:私はそうのように私の例の2行目の秩序を維持するためにコンテナ内に私のdivのを望ん

1 2 3 
4  5 

.container { 
 
    display: flex; 
 
    width: 1100px; 
 
    justify-content: space-between; 
 
    flex-wrap: wrap; 
 
} 
 
.container > div { 
 
    width: 330px; 
 
    height: 125px; 
 
    background-color: rgba(18, 28, 41, 0.50); 
 
    border: 1px solid #325E82; 
 
}
<div class="container"> 
 
    <div></div> 
 
    <div></div> 
 
    <div></div> 
 
    <div></div> 
 
    <div></div> 
 
</div>

Codepen:https://codepen.io/anon/pen/pryWYZ

+2

あなたはこのためにCSSのグリッドを使用する必要があります。Flexはアイテムを1次元で表示するためのもので、アイテムを2次元に並べ替える必要があります。 – Frilox

+1

@Friloxアドバイスをいただきありがとうございます!ちょうどCSSのグリッドがあり、それはタスクの種類のために素晴らしいと思われるチェックアウト。 D – Src

答えて

3

1つの解決策は、疑似セレクタ::afterを使用して、他の要素と同じ幅を占める偽の「目に見えない」要素を作成します。 justify-contentと組み合わせることで、これは既存の最後の要素が中央に移動されます:

.container { 
 
    display: flex; 
 
    width: 1100px; 
 
    justify-content: space-between; 
 
    flex-wrap: wrap; 
 
} 
 

 
.container > div { 
 
    width: 330px; 
 
    height: 125px; 
 
    background-color: rgba(18, 28, 41, 0.50); 
 
    border: 1px solid #325E82; 
 
} 
 

 
.container::after { 
 
    content: ''; 
 
    width: 332px; /* .container > div 'width' plus .container > div 'border' */ 
 
}
<div class="container"> 
 
    <div></div> 
 
    <div></div> 
 
    <div></div> 
 
    <div></div> 
 
    <div></div> 
 
</div>

私はこのhereのCodePenをも作成しました。

希望すると便利です。 :)その周り

+1

しかし、もし6つの要素+の後に - 新しい行を作るでしょう... – Src

+1

':: after'がゼロの高さを持っていることを考慮すると、それは問題ではありません'と' content'はありません。 [** This Example **](https://codepen.io/Obsidian-Age/pen/yoOPOZ)は、6番目の要素を追加すると目に見える違いがないことを示しています。これを説明するためにバックグラウンドを赤に設定しました:) –

+0

@ObsidianAge擬似要素の 'width'には' 330px'を使い、 '*、*:before、*:afterは{box-sizing:border-box ; } 'この厄介な計算を取り除く。 –

0

もう一つの方法は、.Containerjustify-content: flex-start;を持っていると列の所望の数に応じて、そしてお子様の上のサイズを制限する正しい子項目にマージンを指定することです。 3列のグリッドの

、このような何か:

.container { 
 
    display: flex; 
 
    flex-flow: row wrap; 
 
    justify-content: flex-start; 
 
} 
 

 
.item { 
 
    background-color: gray; 
 
    width: 100px; 
 
    height: 100px; 
 
    flex: 0 0 32%; 
 
    margin: 1% 0; 
 
    
 
    } 
 
    
 
    .item:nth-child(3n-1) { 
 
    margin-left: 2%; 
 
    margin-right: 2%; 
 
    } 
 
<div class="container"> 
 
    <div class=item></div> 
 
    <div class=item></div> 
 
    <div class=item></div> 
 
    <div class=item></div> 
 
    <div class=item></div> 
 
    
 
</div>

+0

フレックスアイテムにパーセンテージマージン(またはパディング)を使用することはお勧めできません。現在、それらは主要なブラウザ間で異なってレンダリングされています。たとえば、あなたのソリューションはChromeで動作しますが、Firefoxでは失敗します。 https://stackoverflow.com/q/36783190/3597276 –

1

フレキシボックスは完璧なグリッドを作成するために設計されていません。そのため、最終行のフレックスアイテムを整列させることは自然な解決策ではありません。あなたはそれを動作させるためにハッキングが必要です。

これは、これらの記事で詳しく説明されています

この問題を解決するための理想的な方法は、グリッドにフレックスレイアウトを切り替えることであろうレイアウト。 CSSグリッドレイアウトでは、コンテンツアイテムの配置とサイジングをより詳細に制御できます。上記のプロパティおよびブラウザのサポートデータの説明など、CSSグリッドの詳細については、

.container { 
 
    display: grid; 
 
    grid-auto-rows: 125px; 
 
    grid-template-columns: repeat(auto-fill, 330px); 
 
    grid-gap: 10px; 
 
    width: 1100px; 
 
} 
 

 
.container>div { 
 
    background-color: rgba(18, 28, 41, 0.50); 
 
    border: 1px solid #325E82; 
 
}
<div class="container"> 
 
    <div></div> 
 
    <div></div> 
 
    <div></div> 
 
    <div></div> 
 
    <div></div> 
 
</div>

は、この記事を参照してください。 CSS-only masonry layout but with elements ordered horizontally

関連する問題