私は、xy 枚のカードと 1 つのウィジェットを Flex コンテナー内にレンダリングする React アプリを作成しています。すべてのカードの幅と高さは同じですが、ウィジェットの高さは カードの高さ * 2 行ギャップ
に等しくなります。コンテナの幅はビューポートの幅に基づいて変化し、視覚的にはそれぞれカードが 2 列または 3 列に見えるようになります。さらにわかりやすくするために、ウィジェットを青で表した、必要なレイアウトのモックアップ画像を提供しました。
何を試しても、行の高さをそのサイズに変更せずにウィジェットを正しい位置に表示することはできず、さらに 1 つまたは 2 つのカードをレンダリングする必要がある「空白の行」を残すことになります。以下の図に示されています。
私の現在のソリューションには Javascript が含まれており、ビューポートの幅に応じて、2 枚または 4 枚のカードを別の小さな Flex コンテナにロードし、メイン Flex コンテナの最初の子としてレンダリングされます。この回避策は視覚的にはうまく機能しますが、適切に動作させるにはさまざまな状況をカバーする必要があるため、コードがより複雑になります。 CSS/フレックスボックスを使用して同じ目標を達成したいと考えていますが、私はまだ初心者であり、これまでにこのようなレイアウトを作成したことがなく、明らかにその方法がわかりません。ウィジェット を 絶対に配置することはできません。これは、その子要素のスクロール機能が壊れてしまうためです。
###。容器 { マージン: 50ピクセル 300ピクセル; ディスプレイ: フレックス; フレックスラップ: ラップ; 行ギャップ: 20px; 列ギャップ: 20px; min-width: 320px; /* 2 列の幅 */ max-width: 490px; /* 3 列の幅 */ ボーダー: 3px ソリッド rgb(0, 22, 117); } .card { 幅: 150ピクセル; 高さ: 100ピクセル; 背景色: 素焼き; } .ウィジェット { height: 220px; /* カードの高さ * 2 行のギャップ */ 幅: 150ピクセル; 背景色: rgb(134, 204, 245); }
<div class="コンテナ"> <div class="ウィジェット"></div> <div class="カード"></div> <div class="カード"></div> <div class="カード"></div> <div class="カード"></div> <div class="カード"></div> <div class="カード"></div> <div class="カード"></div> <div class="カード"></div> <div class="カード"></div> <div class="カード"></div> <div class="カード"></div> <div class="カード"></div> <div class="カード"></div> <div class="カード"></div> <div class="カード"></div> <div class="カード"></div> <div class="カード"></div> <div class="カード"></div> </div> <!-- オリジナルの jsx <div className='コンテナ'> <div className='ウィジェット'></div> <div className='card'></div> <div className='card'></div> <div className='card'></div> <div className='card'></div> <div className='card'></div> <div className='card'></div> <div className='card'></div> <div className='card'></div> <div className='card'></div> <div className='card'></div> <div className='card'></div> <div className='card'></div> <div className='card'></div> <div className='card'></div> <div className='card'></div> <div className='card'></div> <div className='card'></div> <div className='card'></div> </div> -->
現在のプロジェクトのためだけでなく、知識と理解をさらに広げるために、Flexbox でこのようなレイアウトを作成する方法を学びたいと思っています。この問題を解決する方法について何かアイデアがあれば、助けてください。よろしくお願いします :)###
これは、JavaScript を必要とせずに、ネットワーク配布局を使用して実行できます。以下は例です:
grid-column-end: -1;
として最右側に設定することで開始できます。の列上に配置 .widget,在最右侧的列上设置を
.widget>
フレックスボックス レイアウトではこれを実行できません。2D グリッドは作成されないため、グリッドボックス レイアウトを使用する必要があります。 , そのため、要素は隙間を残さずに行と列にまたがることができます。
これは例です: