グリッド

ページの上部にヘッダー、左側にサイドバー、メインコンテンツエリア、下部にフッターがあるレイアウトを考えてください。コンテナをネストして各要素を位置に調整することもできますが、レイアウトを変更する必要が出た時点で問題が生じます。CSSグリッドはこのような問題のために設計されました。行と列を同時にページをレイアウトしることです。レイアウトをトラックのセットとして記述できれば、ラッパーやfloatでの調整の大部分は不要になります。
グリッドコンテナ
任意の要素に display: grid を指定するとグリッドになります。その要素は**グリッドコンテナ**になり、直接の子要素が定義するグリッド内のアイテムになります。単独では display: grid はあまり機能しないため、列と行の数とそれぞれのサイズを指定する必要があります。
列は grid-template-columns で行は grid-template-rows で記述します。リスト内の各値は1つのトラック、つまり単一の列または行です。
.layout {
display: grid;
grid-template-columns: 200px 1fr; /* 2つの列:固定幅と残り全て */
grid-template-rows: 80px 400px; /* 2つの行:短い行と高い行 */
}display: grid を追加するとグリッドコンテナになり、直接の子要素がアイテムとしてその中に座ります。次に grid-template-columns と grid-template-rows で必要な列と行の数を指定します。トラックを定義されるまで何も配置されないため、これが常に最初のステップです。 柔軟なトラック
固定ピクセル列は問題ありませんが、ほとんどのレイアウトは空間を均等に共有して画面に合わせて拡大する列を望みます。それが**fr単位**の用途です。1つの fr は余った空間の1シェアを意味するため、それぞれ 1fr の3列はコンテナの3分の1を占めます。
.gallery {
display: grid;
grid-template-columns: 1fr 1fr 1fr; /* 3つの同じサイズの列 */
}3回 1fr と入力することは面倒なため、repeat() がそれを書きます。gap はトラック間の空間を設定するため、すべてのアイテムでマージンを使う必要がありません。
.gallery {
display: grid;
grid-template-columns: repeat(3, 1fr); /* 同じ3つの同じサイズの列 */
gap: 16px; /* 行と列の間の空間 */
}fr は余った空間の1シェアなため、1fr 1fr 1fr は3つの同じサイズの列を与えます。同じ値を何度も入力しないように repeat(3, 1fr) を使用し、トラック間の空間には gap を使用してください。fr がクリックしたら、決してうまく加算されなかったパーセンテージへの手を伸ばすことをやめました。 アイテムの配置
デフォルトでは各アイテムは次の空いているセルに落ちます。1セルに1つ、順番に。アイテムが複数のセルを占める場合は、grid-column と grid-row で指定します。トラック間の線は 1 から始まる番号が付けられるため、grid-column: 1 / 3 は「列線1から列線3まで開始」を意味し、2列をカバーします。
.featured {
grid-column: 1 / 3; /* 列線1から列線3まで、2列幅 */
}線を数えたくない場合は、span でアイテムが落ちた位置からカバーするセル数を指定します。
.featured {
grid-column: span 2; /* 2つの列をカバー、このアイテムが座る位置から始まる */
}grid-column または grid-row でセルをまたがせます。線番号は 1 から始まるため、grid-column: 1 / 3 は2列をカバーするか、数えたくない場合は span 2 を使用してください。これはほとんどのレイアウトを構築する前に、単一の領域に名前を付けることなく十分です。 メディアクエリなしでレスポンシブグリッド
カード行は広いスクリーンで3つ表示され、タブレットで2つ、携帯電話で1つ表示されるべきです。ブレークポイントを書くことなく、グリッドだけでそれを実行できます。トリックは1行です。
.cards {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
gap: 16px;
}内側から外側へ読みます。minmax(200px, 1fr) は各列が少なくとも 200px で最大で空間の1シェアであることを意味します。auto-fit はコンテナが収容するスペースがあるだけ多くのそれらの列に収めます。広いスクリーン、より多くの列が収まります。狭いスクリーン、より少なくなり、カードは自動的に再フローします。
repeat(auto-fit, minmax(200px, 1fr)) はカードを自動的に再フローさせるため、ブレークポイントは不要です。各列は少なくとも 200px で最大で空間の1シェアであり、auto-fit は収まるだけ多くを詰めます。200px を変更し、カード側に座っている多くを変更します。 
