ITコース CSS基礎 031_グリッドレイアウト Grid
グリッドレイアウト Grid
グリッドは、一連の水平線と垂直線で構成されるレイアウトモードです。グリッドを使用することで、デザイン要素を配置し、固定された位置と幅を持つ要素のページを設計し、ウェブサイトのページをより統一されたものにすることができます。
グリッドには通常、多くの列(column)と行(row)、および行と行、列と列の間のギャップがあり、このギャップは一般的に**ガター(gutter)**と呼ばれます。

基本概念
グリッドレイアウトは以下の基本概念で構成されています:
- グリッドコンテナ (grid container):グリッドレイアウトはグリッドコンテナとグリッドアイテムで構成されます。グリッドコンテナは、グリッドアイテムをグリッドに配置するコンテナです。グリッドコンテナは任意の要素にできますが、通常は
div要素が使用されます。 - グリッドアイテム (grid item):グリッドアイテムはグリッドコンテナに配置される要素です。グリッドアイテムは任意の要素にできますが、通常は
div要素が使用されます。 - グリッドライン (grid line):グリッドラインはグリッドコンテナを行と列に分割する線です。グリッドラインは水平線または垂直線にできます。
- グリッド列 (grid column):グリッド列はグリッドコンテナ内の垂直方向の線です。
- グリッド行 (grid row):グリッド行はグリッドコンテナ内の水平方向の線です。
よく使用されるプロパティ
グリッドコンテナプロパティ
グリッドコンテナには、グリッドレイアウトを制御するための以下のプロパティがあります:
display:グリッドコンテナの表示モードを設定します。グリッドコンテナはdisplay: gridまたはdisplay: inline-gridに設定する必要があります。grid-template-columns:グリッドコンテナの列数と列幅を設定します(fr、px、emなどの単位を使用)。grid-template-rows:グリッドコンテナの行数と行高を設定します(fr、px、emなどの単位を使用)。grid-template:grid-template-columnsとgrid-template-rowsを同時に設定します。grid-auto-columns:グリッドコンテナの列幅を設定します。grid-auto-rows:グリッドコンテナの行高を設定します。
グリッドアイテムプロパティ
グリッドアイテムには、グリッド内でのレイアウトを制御するための以下のプロパティがあります:
grid-column:グリッドアイテムがある列を設定します。grid-row:グリッドアイテムがある行を設定します。grid-column-start:グリッドアイテムの列での開始位置を設定します。grid-column-end:グリッドアイテムの列での終了位置を設定します。grid-row-start:グリッドアイテムの行での開始位置を設定します。grid-row-end:グリッドアイテムの行での終了位置を設定します。grid-area:グリッドアイテムがある領域を設定します。grid-gap:グリッドライン間の間隔を設定します。
グリッドレイアウト
固定および自適応の列幅、行高を定義する
例:
.grid-example{ display: grid; grid-template-columns: 100px 200px auto; /* 第1列100px、第2列200px、残りのスペースは自適応列に割り当て */ grid-template-rows: 100px 200px auto; /* 第1行100px、第2行200px、残りのスペースは自適応行に割り当て */}.item{ margin: 10px; background-color: rgb(100, 150, 200);} <div class="grid-example"> <div class="item">Gridデモ</div> <div class="item">Gridデモ</div> <div class="item">Gridデモ</div> <div class="item">Gridデモ</div> <div class="item">Gridデモ</div> <div class="item">Gridデモ</div> <div class="item">Gridデモ</div> <div class="item">Gridデモ</div> <div class="item">Gridデモ</div> </div>効果:
パーセンテージを使用して列幅、行高を定義する
例:
.grid-example{ display: grid; grid-template-columns: 30% 2fr 1fr; /* 第1列は30%、第2列は残りスペースの2份、第3列は残りスペースの1份 */ grid-template-rows: 30% 2fr 1fr; /* 第1行は30%、第2行は残りスペースの2份、第3行は残りスペースの1份 */}.item{ margin: 10px; background-color: rgb(100, 150, 200);} <div class="grid-example"> <div class="item">Gridデモ</div> <div class="item">Gridデモ</div> <div class="item">Gridデモ</div> <div class="item">Gridデモ</div> <div class="item">Gridデモ</div> <div class="item">Gridデモ</div> <div class="item">Gridデモ</div> <div class="item">Gridデモ</div> <div class="item">Gridデモ</div> </div>効果:
等分(均等配分)列幅、行高
例:
.grid-example{ display: grid; grid-template-columns: repeat(3, 1fr); /* 3等分列、各列は残りスペースの1份を占める */ grid-template-rows: repeat(3, 1fr); /* 3等分行、各行は残りスペースの1份を占める */}.item{ margin: 10px; background-color: rgb(100, 150, 200);} <div class="grid-example"> <div class="item">Gridデモ</div> <div class="item">Gridデモ</div> <div class="item">Gridデモ</div> <div class="item">Gridデモ</div> <div class="item">Gridデモ</div> <div class="item">Gridデモ</div> <div class="item">Gridデモ</div> <div class="item">Gridデモ</div> <div class="item">Gridデモ</div> </div>効果:
minmaxを使用して列、行の最小および最大幅、高さを定義する
例:
.grid-example{ display: grid; grid-template-columns: minmax(100px, 1fr) minmax(200px, 2fr); /* 第1列最小幅100px、残りスペースの1份を占める;第2列最小幅200px、残りスペースの2份を占める */ grid-template-rows: minmax(100px, 1fr) minmax(200px, 2fr); /* 第1行最小高100px、残りスペースの1份を占める;第2行最小高200px、残りスペースの2份を占める */}.item{ margin: 10px; background-color: rgb(100, 150, 200);} <div class="grid-example"> <div class="item">Gridデモ</div> <div class="item">Gridデモ</div> <div class="item">Gridデモ</div> <div class="item">Gridデモ</div> </div>効果:

グリッドギャップ
グリッドギャップはgrid-row-gapとgrid-column-gapの2つのプロパティで制御されます。また、CSS Grid Level 2ではgapプロパティが導入され、grid-row-gapとgrid-column-gapを同時に制御できます。
例:
.grid-example{ display: grid; grid-template-columns: 30% 30% 30%; grid-template-rows: 200px 200px; grid-row-gap: 50px; /* 行ギャップは50px */ grid-column-gap: 30px; /* 列ギャップは30px */ /* gap: 50px 30px; 行ギャップは50px、列ギャップは30px */}.item{ margin: 10px; background-color: rgb(100, 150, 200);} <div class="grid-example"> <div class="item">Gridデモ</div> <div class="item">Gridデモ</div> <div class="item">Gridデモ</div> <div class="item">Gridデモ</div> <div class="item">Gridデモ</div> <div class="item">Gridデモ</div> </div>効果:

グリッドポジショニング
グリッドポジショニングは通常、grid-column、grid-row、およびgrid-areaプロパティを使用してグリッドレイアウト内のアイテムを配置することを指します。これらのプロパティは、アイテムがグリッド内で占める列と行を指定するか、アイテムがある領域を直接指定するために使用されます。
grid-columnはグリッドアイテムがまたがる列を設定するためのプロパティです。grid-column-startとgrid-column-endの省略形です。grid-columnを使用すると、グリッドアイテムの水平方向の位置とまたがる列数をより便利に定義できます。grid-rowはグリッドアイテムがまたがる行を設定するためのプロパティです。grid-row-startとgrid-row-endの省略形です。grid-rowを使用すると、グリッドアイテムの垂直方向の位置とまたがる行数をより便利に定義できます。grid-areaプロパティは、grid-row-start、grid-column-start、grid-row-end、およびgrid-column-endを同時に設定するための省略形プロパティです。grid-areaを使用すると、グリッドレイアウト内のグリッドアイテムの位置とサイズをより直感的に定義できます。
例:
.example { display: grid; grid-template-columns: repeat(3, 1fr); /* 3列を定義、各列は1份のスペースを占める */ grid-template-rows: repeat(2, 150px); /* 2行を定義、各行の高さは150px */ gap: 10px; padding: 20px;}.item { background-color: #f2f2f2; padding: 20px; border: 1px solid #ddd; text-align: center;}/* grid-columnとgrid-rowを使用して配置 */.item1 { grid-column: 1 / 3; /* 第1列から第3列まで(1+2列) */ grid-row: 1 / 2; /* 第1行から第2行まで(1行) */}/* grid-areaを使用して配置 */.item2 { grid-area: 2 / 2 / 3 / 4; /* 第2行第2列から第3行第4列まで(2行)(2+3列) */}<div class="example"> <div class="item item1">Item 1</div> <div class="item item2">Item 2</div> <div class="item">Item 3</div> <div class="item">Item 4</div> <div class="item">Item 5</div> <div class="item">Item 6</div></div>効果:

例:
body { margin: 0; padding: 0;}
.container { display: grid; grid-template-columns: 1fr 2fr; /* 2列を定義、第1列は1份、第2列は2份を占める */ grid-template-rows: auto; /* 行の高さを定義、第1行と第3行の高さはコンテンツによって決定、第2行は残りスペースを占める */ grid-template-areas: "header header" "sidebar main" "footer footer"; /* 領域レイアウトを定義、各領域は文字列で表され、スペースはセルを区切り、改行は新しい行を示す */ min-height: 100vh; /* 最小高さを設定し、コンテンツの高さがビューポートより小さい場合でもfooterが見えるようにする */}
.header { grid-area: header; /* .headerを"header"という名前の領域に配置 */ background-color: #333; color: #fff; padding: 10px;}
.sidebar { grid-area: sidebar; /* .sidebarを"sidebar"という名前の領域に配置 */ background-color: #f2f2f2; padding: 10px;}
.main { grid-area: main; /* .mainを"main"という名前の領域に配置 */ padding: 10px;}
.footer { grid-area: footer; /* .footerを"footer"という名前の領域に配置 */ background-color: #333; color: #fff; padding: 10px;} <div class="container"> <div class="header">Header</div> <div class="sidebar">Sidebar</div> <div class="main"> <h1>Main Content</h1> <p>This is the main content area.</p> </div> <div class="footer">Footer</div> </div>効果:
