CSS Gridで実装する際にはこの点に注意、IE11以下・Edge15以下をサポートするフォールバックのテクニック
Post on:2018年5月9日
CSS Gridは非常に便利ですが、唯一の欠点はIE11以下・Edge15以下のユーザーをサポートする必要がある場合に期待通りに機能しないことです。
CSS Gridでページのレイアウト・グリッド・コンポーネントを実装する際に、IE11以下・Edge15以下をサポートするフォールバックのテクニックを紹介します。
Grid to Flex
Grid to Flex -GitHub
CSS Gridがレイアウトで優れている点は、水平方向と垂直方向の両方を制御して、レイアウトができるという点です。
Flexboxでは両方を制御することはできないため、その点に注意します。
CSS Grid, Flexboxについて学びたい時は、下記の記事がオススメです。
CSS Gridを使ったページのレイアウト
まずは、よく見かけるページのレイアウト。
ヘッダ・コンテンツ・フッタ・サイドバーがあり、サイドバーの高さがコンテンツ・ページ全体の2種類です。
ページのレイアウト(サイドバーの高さがコンテンツと同じ)
See the Pen Grid To Flex -- Example 1 by Una Kravets (@una) on CodePen.
1 2 3 4 5 6 |
<div class="container"> <div class="red">Header</div> <div class="orange">Sidebar</div> <div class="yellow">Content</div> <div class="green">Footer</div> </div> |
CSS Gridを使った実装
絵文字は名前を定義しているだけなので、自由に変更できます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
@supports (display: grid) { .container { display: grid; grid-template: "😁 😁" 60px "🐒 📝" var(--middleHeight) "👠 👠" var(--footerHeight)/1fr 3fr; } .red { grid-area: 😁; } .orange { grid-area: 🐒; } .yellow { grid-area: 📝; } .green { grid-area: 👠; } } |
フォールバック
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
.ex1 .container { display: flex; flex-wrap: wrap; } .ex1 .red { flex-basis: 100%; height: 60px; } .ex1 .orange { flex: 1; } .ex1 .yellow { flex: 3; height: 300px; } .ex1 .green { flex-basis: 100%; height: 100px; } |
ページのレイアウト(サイドバーの高さがページ全体と同じ)
See the Pen Grid To Flex -- Example 2 by Una Kravets (@una) on CodePen.
1 2 3 4 5 6 7 8 9 10 |
<div class="container"> <div class="sidebar-container"> <div class="orange">Sidebar</div> </div> <div class="main-container"> <div class="red">Header</div> <div class="yellow">Content</div> <div class="green">Footer</div> </div> </div> |
CSS Gridを使った実装
絵文字は名前を定義しているだけなので、自由に変更できます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
.ex2 .container { display: grid; grid-template: '🐒 📝' 60px '🐒 📝' 300px '🐒 📝' 100px / 1fr 3fr ; } .ex2 .sidebar-container { grid-area: 🐒; } .ex2 .orange { height: 100%; } .ex2 .main-container { grid-area: 📝; display: grid; grid-template: '😁' 60px '💛' 300px '👠' 100px / 100% ; } .ex2 .red { grid-area: 😁; } .ex2 .yellow { grid-area: 💛; } .ex2 .green { grid-area: 👠; } |
フォールバック
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
.ex2 .container { display: flex; } .ex2 .sidebar-container { flex: 1; } .ex2 .orange { height: 100%; width: 100%; } .ex2 .main-container { display: flex; flex-wrap: wrap; flex: 3; } .ex2 .red { flex-basis: 100%; height: 60px; } .ex2 .yellow { flex-basis: 100%; height: 300px; } .ex2 .green { flex-basis: 100%; height: 100px; } |
CSS Gridを使ったブロックのグリッド
カードなどのブロックを配置するグリッドです。
CSS Gridを使ったブロックのグリッド
See the Pen Grid To Flex -- Example 3 by Una Kravets (@una) on CodePen.
1 2 3 4 5 6 7 8 |
<div class="container"> <div class="red">1</div> <div class="orange">2</div> <div class="yellow">3</div> <div class="green">4</div> <div class="blue">5</div> <div class="purple">6</div> </div> |
CSS Gridを使った実装
1 2 3 4 |
.ex3 .container { display: grid; grid-template-columns: repeat(4, 1fr); } |
フォールバック
1 2 3 4 5 6 7 8 |
.ex3 .container { display: flex; flex-wrap: wrap; } .ex3 .container > div { flex-basis: calc(100% / 4); } |
CSS Gridを使ったコンポーネントのレイアウト
よく見かけるナビゲーションバーで、ナビゲーションは左寄せ、ログアウトは右寄せに配置されています。
See the Pen Grid To Flex -- Example 4 by Una Kravets (@una) on CodePen.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<div class="container"> <div class="yellow"> <ul class="green"> <li class="blue">Nav1</li> <li class="blue">Nav2</li> <li class="blue">Nav3</li> <li class="blue">Nav4</li> </ul> <div class="orange"> <p class="purple"><u>Log Out</u></p> <div class="red">💁🏻♀️</div> </div> </div> </div> |
CSS Gridを使った実装
絵文字は名前を定義しているだけなので、自由に変更できます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
.ex4 .yellow { display: grid; grid-template: '📝 👾 💁🏻' / auto 1fr auto; height: 60px; width: 100%; } .ex4 .green { grid-area: 📝; } .ex4 .blue + .blue{ margin-left: 1em; } .ex4 .orange { grid-area: 💁🏻; } |
フォールバック
1 2 3 4 5 6 7 8 9 10 |
.ex4 .yellow { display: flex; width: 100%; justify-content: space-between; height: 60px; } .ex4 .blue + .blue { margin-left: 1em; } |
sponsors