要約
Flexbox に慣れていれば、Grid も見覚えがあるはずです。 Rachel Andrew さんは、 CSS グリッド専用のウェブサイトで、 開始しました。Google Chrome でグリッドをご利用いただけるようになりました。
Flexbox か?グリッド?
CSS Flexbox はここ数年で広く普及し ブラウザ サポートは非常に良い (ただし、IE9 以下をサポートしなければならない場合は除きます)。 Flexbox では、等間隔のスペース配置など、多くの複雑なレイアウト作業が簡単になりました。 要素間、トップ ツー ボトム レイアウト、CSS ウィザードなど、 縦方向の中央に配置されます。
残念ながら、画面には一般的に 2 つ目の次元について考慮する必要があります。 要素のサイズ調整を自分で行うのではなく、 垂直方向と水平方向のリズムを表現できます。これは、 そこで役立つのが CSS グリッドです
CSS グリッドは開発中で、ほとんどのブラウザで 5 年と、相互運用性の問題を回避するための追加の時間を バグの多いリリースでしたそのため、グリッドを使用してレイアウトを Firefox と Safari でも同じ結果が表示される可能性があります。Google Microsoft Edge の Grid 実装は最新ではありません IE11 ですでに存在していたものと同じです)。更新は 「検討中」。
コンセプトと構文は類似しているが、Flexbox と Grid は 競合するレイアウト手法です。グリッドは 2 次元に配置され、Flexbox では 説明しますこの 2 つを併用することで相乗効果が生まれます。
グリッドの定義
Grid の個々のプロパティに慣れるため、 Rachel Andrew による Grid By Example または CSS Tricks' クイック リファレンス。もし Flexbox に慣れているとしたら、多くのプロパティとその意味を 見慣れたものです
標準的な 12 列のグリッド レイアウトを見てみましょう。従来の 12 列 12 という数字は 2、3、4、6 で割り切れるため、 多くの設計に有用ですこのレイアウトを実装してみましょう。
では、マークアップ コードを見てみましょう。
<!DOCTYPE html>
<body>
<header></header>
<nav></nav>
<main></main>
<footer></footer>
</body>
スタイルシートでは、まず body
を拡張して、
これをグリッド コンテナに変換するには:
html, body {
width: 100vw;
min-height: 100vh;
margin: 0;
padding: 0;
}
body {
display: grid;
}
ここでは、CSS グリッドを使用しています。送信しました
次のステップでは、グリッドの行と列を実装します。私たちは 12 列すべてをモックアップに実装しますが、すべての列を使用するわけではないため、 CSS が不必要に乱雑になりますわかりやすくするため、ここでは レイアウトは次のように実装します���
ヘッダーとフッターの幅が可変であり、コンテンツも可変である 表しま���������ー���ョンはどちらのディメンションでも可変ですが、 最小幅 200 ピクセルを設定します(理由:Google Cloud の機能を もち��ん CSS グリッドを使うこともできます)。
CSS グリッドでは、列と行のセットはトラックと呼ばれます。まず、 最初のトラックセット、次の行を定義します。
body {
display: grid;
grid-template-rows: 150px auto 100px;
}
grid-template-rows
は、個々の行を定義する一連のサイズを受け取ります。
この例では、最初の行の高さを 150px、最後の行の高さを 100px に設定しています。
中央の行は auto
に設定されています。これは、必要な値に合わせて調整されることを意味します。
グリッド アイテム(グリッド コンテナの子)に対応する高さを
表示されます。ボディはビューポート全体に引き伸ばされるため、トラックは
コンテンツ(上の画像の黄色)を含むすべてのレイヤが、
スクロール可能なスペースが増えます。
できます。
列には、より動的なアプローチを取ります。ナビゲーションと コンテンツを拡大(縮小)するが、ナビゲーションを 200 ピクセル以下には縮小しない コンテンツをナビゲーションより大きくしますFlexbox では Flex-grow と flex-shrink ですが、Grid では若干異なります。
body {
display: grid;
grid-template-rows: 150px auto 100px;
grid-template-columns: minmax(200px, 3fr) 9fr;
}
2 つの列を定義します。最初の列は、minmax()
を使用して定義します。
関数で指定し、トラックの最小値と最大値の 2 つの値を取ります。
(min-width
と max-width
をひとつにしたようなものです)。最小の幅は、
200 ピクセルです。最大幅は 3fr
です。fr
はグリッド固有です。
グリッド要素に使用可能なスペースを配分できます。
fr はおそらく「fraction unit」の略ですが、「free unit 近日」という意味の場合もあります。
ここでの値は、両方の列が画面いっぱいに拡大することを意味しますが、
コンテンツ列の幅は常にナビゲーション列の 3 倍になります(
nav 列の幅を 200 ピクセル以上にするなど)。
グリッド アイテムの配置はまだ正しくありませんが、グリッド アイテムのサイズは 行と列��正しく動作し、期待していた動作が得られているかどうか。
アイテムの配置
グリッドの最も強力な機能の一つは、ファイルなしでアイテムを配置できることです。
関連しています(ただし、スクリーン リーダーは DOM 内を移動するため、
適切にアクセスできるようにするには
要素を並べ替えることができます)。手動で配置しない場合は、要素が
DOM 順でグリッド上に、左から右、上から下に配置されます。各要素
1 つのセルを占有します。グリッドを塗りつぶす順序は、
grid-auto-flow
。
では、要素をどのように配置すればよいのでしょうか。グリッド アイテムを配置する最も簡単な方法は、 対象となる列と行を定義しますGrid では、これを行うための 2 つの構文が用意されています。 最初の構文では、開始点と終了点を定義します。2 つ目のルールでは、 2 つの部分で構成されています。
header {
grid-column: 1 / 3;
}
nav {
grid-row: 2 / span 2;
}
ヘッダーを 1 列目に開始し、3 列目の前で終わるようにします。 ナビゲーションは 2 行目から始まり、合計 2 行にまたがります。
技術的にはレイアウトの実装は終わりましたが、いくつかご紹介したいと思います。 グリッドに用意されている便利な機能により、配置が簡単になります。「 1 つ目の機能として、トラックの境界に名前を付けて、その名前を プレースメント:
body {
display: grid;
grid-template-rows: 150px [nav-start] auto 100px [nav-end];
grid-template-columns: [header-start] minmax(200px, 3fr) 9fr [header-end];
}
header {
grid-column: header-start / header-end;
}
nav {
grid-row: nav-start / nav-end;
}
上記のコードでは、前のコードと同じレイアウトが生成されます。
さらに強力な機能として、グリッド内で地域全体に名前を付けることができます。
body {
display: grid;
grid-template-rows: 150px auto 100px;
grid-template-columns: minmax(200px, 3fr) 9fr;
grid-template-areas: "header header"
"nav content"
"nav footer";
}
header {
grid-area: header;
}
nav {
grid-area: nav;
}
grid-template-areas
はスペースで区切られた名前の文字列を受け取り、
各セルに名前を付けることができます。隣接する 2 つのセルの名前が同じ場合、
同��領域に結合されますこのように
レイアウト コードに追加して、メディアクエリを直感的に行えるようにします。繰り返しますが、
以前と同じレイアウトが生成されます。
他にもあります。
はい、1 つのブログ投稿では説明しきれないほど多くの情報があります。 Rachel Andrew: GDE は、 CSS ワーキング グループのエキスパートで、初期段階から協力している ウェブデザインをシンプルにします彼女は、 予約します。彼女 ウェブサイト Grid By Example は、 主なリソースをご紹介します。多くの人が、グリッドは 革命的 ウェブデザインに関する新しい手順が Chrome でデフォルトで有効になりました。 すぐに使い始められます。