CSS Gridでレスポンシブ対応の代表的な5つのレイアウトを実装するテクニック

Webページやスマホアプリでよく使用される代表的な5つのレイアウトをCSS Gridで実装するテクニックを紹介します。

ヘッダ・コンテンツ・フッタを積み重ねたもの、12カラムのグリッド、メディアクエリなしのレスポンシブなど、実際によく使用されるレイアウトばかりです。
CSS Gridを使用すると、今まで少し複雑だったレイアウトもシンプルなコードで簡単に実装できます。

CSS Gridの実装テクニックのまとめ、代表的な5つのレイアウト

Master CSS Grid by Building 5 Layouts in 17 Minutes
by Thu Nghiem

下記は各ポイントを意訳したものです。
※当ブログでの翻訳記事は、元サイト様にライセンスを得て翻訳しています。

はじめに

良いニュースと悪いニュースがあります。
悪いニュースは、CSS Gridは複雑で、学ぶべきことたくさんあるということです。
しかし、良いニュースは、最初にすべてを知る必要はないということです!

この記事では、CSS Gridを使用して5つのレイアウト(つまり5つのタスク)を実装します。記事を読み終えた後には、さっそく次のプロジェクトでCSS Gridを使用したくなるかもしれません。

チュートリアル用のファイルは、下記からダウンロードできます。

レイアウトのデザインは、下記にアップしました。

また、動画でも解説しています。

それでは、始めましょう!

1. 基本的なレイアウト「パンケーキ スタック」

基本的なレイアウト「パンケーキ スタック」

パンケーキ スタック

1つ目のレイアウトは、パンケーキ スタックと呼ばれるものです。各カラムがパンケーキのように垂直方向に積み重なります。

このレイアウトを実装するには、grid-template-rows: auto 1fr auto;を使用して、3つのカラムを作成します。値が1frの2番目のカラムは使用可能なスペースいっぱいに拡張され、1と3番目のカラムはコンテンツを表示する最小限のスペースしかありません。

このレイアウトを実装するには、親コンテナに下記のCSSを記述するだけです。

このレイアウトはよく見かけると思います。3つのカラムには、ヘッダ・コンテンツ・フッタを配置します。
例えば、数週間前の私のチュートリアルの1つにもあります。

ヘッダ・コンテンツ・フッタで構成された「パンケーキ スタック」

ヘッダ・コンテンツ・フッタで構成された「パンケーキ スタック」

2. 基本的なレイアウト「12カラムのグリッドレイアウト」

12カラムのグリッドは長く使用されてきましたが、CSS Gridを使用することでさらに使いやすくなりました。
12カラムのグリッドの中から、.item-1で4カラム分、.item-2で6カラム分を使用してみます。

基本的なレイアウト「12カラムのグリッドレイアウト」

12カラムのグリッドレイアウト

最初に、12カラムのグリッドを作成します。
グリッドは、grid-template-columns: repeat(12, 1fr);で簡単に実装できます。

カラム間の溝を12pxにしています。また、Flexboxと同様にalign-items: center;をCSS Gridで使用することもできます。
参考: flexコンテナ: align-items(アイテムの配置方法)

続いて必要なのは、アイテムがどのカラムに入るかを定義することです。.item-1の場合は4カラム分なので、2番目のカラムから始まり、6番目で終わるようにします。

アイテムは定義した6を取るのではなく、2,3,4,5のみを.item-1に割り当てることに注意してください。

下記のように定義しても、同様の結果が得られます。
こちらの方が分かりやすいかもしれません。

さらに、シンプルに記述することもできます。

これと同じ記述で、.item-2にも6カラム分を割り当てます。

12カラムのレイアウトは至るところにあります。
このテクニックを使用したチュートリアルもご覧ください。

12カラムのレイアウト

12カラムのレイアウトを使ったテクニック

3. grid-template-areasがある場合とない場合のレスポンシブレイアウト

ここでは、2つのオプションを解説します。
1つ目は、上記で解説した12カラムのグリッドを使用します。

2つ目は、grid-template-areasというプロパティを使用します。

grid-template-areasがある場合とない場合のレスポンシブレイアウト

grid-template-areasがある場合とない場合のレスポンシブレイアウト

3.1. 12カラムのグリッドを使用

スマホ用
スマホ用は簡単です、1. 基本的なレイアウト「パンケーキ スタック」で解説したことを利用して、メインセクションを拡張します。また、デスクトップと同様にグリッドにはgap: 24px;の溝を与え、行だけでなく列も定義します。

タブレット用
スクリーンの幅が720pxより大きいタブレットでは、12カラムが4行必要で、3行目は可能な限り拡張されます。

上記で12カラムが実装できたので、各アイテムに必要なカラム数を定義します。

.task-3-1 .sidebargrid-row: 3;を与えていることに注目してください。サイドバーはDOMにおいてmainセクションの後にあるためです。

デスクトップ用
これはやってみてください。分からない場合は、YouTubeの解説をご覧ください。

実例
このレイアウトは、https://dev.to/にも採用されています。

3.2. grid-template-areasプロパティを使用

grid-template-areasを使用するには、アイテムのエリアを定義する必要があります。

エリアを定義したら、grid-template-areasでコンテナの位置を指定します。

スマホ用
スマホでは1カラムを6行作成します。mainである3行目は1frで可能な限り拡張するようにします。

エリアを定義したので、後からアイテムの順番や位置を変更したい場合に、とても簡単になります。

タブレット用
スクリーンが720pxより大きい場合は、3カラムを4行作成します。ヘッダとナビゲーション、どちらも3カラムです。

3行目と4行目では、sidebaradsが1カラム分になり、mainfooterは2カラム分にしています。

デスクトップ用
タブレットと同じロジックで、デスクトップの場合は4カラムを4行作成します。

まとめ

どちらのオプションにも長所と短所がありますが、自分にとって楽な方を選び、シナリオに意味があるものを選びましょう。

4. メディアクエリなしのレスポンシブレイアウト

メディアクエリなしのレスポンシブレイアウト

メディアクエリなしのレスポンシブレイアウト

スマホ・タブレット・デスクトップで、メディアクエリなしのレスポンシブレイアウトを簡単に実装することができます。

このCSSで行ったことは、カラムを150px以下にはしない、スペースを均等に分配する、という柔軟なレイアウトです。

5. 12x12のマス目状のグリッド

最後のタスクでは、カラムの数だけでなく、列の数も定義できます。

12x12のマス目状のグリッド

12x12のマス目状のグリッド

マス目状のグリッドは、アイテムを特定の場所に配置する必要がある場合に役立ちます。

これでチュートリアルは終了です。
完全なチュートリアルについては、YouTubeの解説をチェックしてください。

sponsors

top of page

©2021 coliss