レイアウト
html / CSS

グリッドレイアウトと フレックスボックス を融合して配置する


First

content、items、selfとは

格子状(グリッド)に分割したレイアウトではないグリッドレイアウトで位置関係を定義する

このページで使うグリッドレイアウトの構文は、格子状レイアウトに依存しないように grid-template-columns や grid-template-rows は指定しない。そのため行や列(fr は除外)のサイズは定義しない、というもの。

justify-content、align-content などの content、align-items、place-items などの items、align-self、justify-self などの self は何であるか?フレックス?、グリッド?

  • content : ボックス内全体を対象とする
    コンテナに定義
  • items : ボックス内にある全てのアイテムを対象とする
    コンテナに定義
    ※( place-items :  アイテムの縦方向と横方向の揃えをまとめて指定する。 Flexbox では、place-self プロパティは適用されない。 )
  • self : 個別の設定されたアイテムを対象とする
    justify-self プロパティ は、flexbox では機能せず、グリッドレイアウトでは各アイテム要素に個別に定義

justify-content、align-content

justify-content、align-content は、グリッドレイアウト、フレックスボックスで使えるが、書字方向が右書き(direction: rtl など)の場合、start は右端になるが、flex-start は常に左端になる。

flexbox の align-content

フレックスにおける align-content は、flex-wrap: wrap が指定され、フレックスコンテナ内で要素が複数行に折り返された場合にのみ機能し、各行の配置を調整する。以下は各アイテム自体もフレックスコンテナとして機能させ(フレックスボックスのネストが可能)、内部のテキスト(例:「Item 1」のテキスト)をアイテムボックスの水平方向と垂直方向の中央に配置させた。

Item 1
Item 2
Item 3
Item 4
Item 5
Item 6
<div class="flex-container">
  <div class="flex-item">Item 1</div>
  <div class="flex-item">Item 2</div>
  <div class="flex-item">Item 3</div>
  <div class="flex-item">Item 4</div>
  <div class="flex-item">Item 5</div>
  <div class="flex-item">Item 6</div>
</div>
.flex-container {
  display: flex;
  flex-wrap: wrap; 
  align-content: center;
  justify-content: center;
  height: 200px; 
  width: 100%; 
  border: 1px solid black; 
  background-color: rgba(255, 192, 203,0.3);
}
.flex-item {
  width: 70px;
  height: 50px; 
  background-color: skyblue;
  margin: 5px; 
  display: flex; /* flexbox のネスト */
  flex-wrap: wrap; 
  align-content: center; 
  justify-content: center;
  font-size: 16px;
  color: #fff;
  display: flex;
}

justify-〇〇 、align-〇〇の値で、flex-start、flex-end は、フレックスのみで使われるキーワード値だ。グリッドレイアウトでは同様の定義は 「end」で、フレックスは 「flex-end」 の値を使うなど、実にややこしいのがこのプロパティである。

「flex-start」が使える条件は、親要素に display: flex; が指定されていることである。

以下の例では、コンテナに「display: flex; justify-content: center; align-items: center;」を定義している。

中央に揃えたい
テキスト
中央に揃えたい
テキスト
<div style="display: flex; justify-content: center; align-items: center; height: 200px; border: 2px solid #ccc; margin-bottom: 1em;">
  <div style="text-align: center; background-color: #f0f0f0; padding: 20px; margin: 10px;">中央に揃えたい
  <br>テキスト 
  </div>
  <div style="text-align: center; background-color: #f0f0f0; padding: 20px; margin: 10px;">中央に揃えたい
  <br>テキスト 
  </div>
</div>

align-items プロパティとは

align-items プロパティは、フレックスボックスとグリッドレイアウトの両方のコンテナ内で使用できる。

align-items と align-content とどこが違うのかというと、アイテムが複数行にわたって折り返される場合、各行の配置は align-content プロパティで制御する。align-items は、1行(または各行)内のアイテムの配置を制御するものである。以下にサンプルを用意した。ソースをみればより分かり易い。

align-items: center; を使ったサンプル

align-items: center;

コンテナの交差軸(通常、Flexbox では縦方向、Grid では行方向)に沿って、子要素をどのように揃えるかを指定する。次の例では、一行のグリッドアイテムを対象にしたもの。align-content は、flex-wrap: wrap が指定され、フレックスコンテナ内で要素が複数行に折り返された場合にのみ機能し、各行の配置を調整する。

item
<div class="grid-align-items-container">
  <div class="grid-align-items-item">item</div>
</div>
.grid-align-items-container {
  display: grid; /* グリッドコンテナとして設定 */
  align-items: center; /* 子要素を縦方向に中央揃え */
  height: 200px; /* 親要素に高さを持たせることで中央揃えの効果が分かりやすい */
  border: 1px solid #DCDCDC;
  margin-bottom: 1em;
}
.grid-align-items-item {
  background-color: lightblue;
  padding: 10px;
  text-align: center;
}
place-items: align-items の指定 , justify-items の指定

検証:CSSの justify-selfプロパティを flexbox に定義する

× flexbox と justify-self

CSS の justify-self プロパティは、フレックスレイアウト(Flexbox)では機能しない。以下に提示した通り、フレックスアイテムに justify-self: flex-start; と justify-self: flex-end; を各々設定してはみたが、機能しなかった。

left
center-1
center-2
right
<div class="flex__container">
  <div class="flex__item--left">left</div>
  <div class="flex__item">center-1</div>
  <div class="flex__item">center-2</div>
  <div class="flex__item--right">right</div>
</div>
.grid-align-items-container {
  display: grid; /* グリッドコンテナとして設定 */
  align-items: center; /* 子要素を縦方向に中央揃え */
  height: 200px; /* 親要素に高さを持たせることで中央揃えの効果が分かりやすい */
  border: 1px solid #DCDCDC;
  margin-bottom: 1em;
}
.grid-align-items-item {
  background-color: lightblue;
  padding: 10px;
  text-align: center;
}

検証:CSSの justify-selfプロパティを グリッドレイアウトに定義する

〇 Grid layout と justify-self

CSS の justify-self プロパティは、グリッドレイアウト(Grid layout)では機能する。以下に提示した通り、グリッドレイアウトのアイテムに justify-self: flex-start; と justify-self: flex-end; を各々設定して、機能した。

left
center-1
center-2
right
<div class="grid__container">
  <div class="grid__item--left">left</div>
  <div class="grid__item">center-1</div>
  <div class="grid__item">center-2</div>
  <div class="grid__item--right">right</div>
</div>
.grid__container {
  display: grid;
  justify-content: center;
  align-items: center;
  width: 100%;
  height: 40px;
  background-color: Gainsboro;
  margin-bottom: 1em;
}
.grid__item--left {
  justify-self: start;
}
.grid__item--right {
  justify-self: end;
}
Second

グリッドレイアウトの幅

display: grid; これを基本形とする

ここでのグリッドレイアウトの構成は「display: grid;」のみが記載されているものを使ってみよう。grid-template-columns や grid-template-rows が指定されていないため、行や列のサイズは定義されない。子要素は通常、横一列に並び、コンテナの幅いっぱいに広がろうとする。

この構成を原型として、幅、高さ、他を追加して挙動を確認してみる。

Just one
<div class="this-wrapper">
  <div class="just-one">Just one</div>
</div>
.this-wrapper {
  display: grid;
  margin-bottom: 1em;
  background-color: Gainsboro;
  height: 100px; /* コンテナの高さ */
  border-radius:8px;
}
.just-one {
  background-color: #fcba03;
  border-radius:8px;
}

これを追加:width: fit-content;

グリッドアイテムに幅を定義してみる。

<div class="this-wrapper">
  <div class="next">width: fit-content;</div>
</div>
.next {
  background-color: #fcba03;
  border-radius:8px;
  width: fit-content;
  padding-left: 8px;
  padding-right: 8px;
}

これを追加:width: stretch;

グリッドアイテムに幅を定義してみる。

width: stretch;
<div class="this-wrapper">
  <div class="stretch">width: stretch;</div>
</div>

.stretch {
  background-color: #fcba03;
  border-radius:8px;
  width: stretch;
  padding-left: 8px;
  padding-right: 8px;
}

これを追加:width: 70%;

グリッドアイテムに幅(%)を定義してみる。

width: 70%;
<div class="this-wrapper">
  <div class="percentage">width: 70%;</div>
</div>

.percentage {
  background-color: #fcba03;
  border-radius:8px;
  width: 70%;
  padding-left: 8px;
  padding-right: 8px;
}
Third

グリッドレイアウトの高さ

これを追加:height: 25px;

グリッドアイテムに高さ(px)を定義してみる。

height: 25px;
<div class="this-wrapper">
  <div class="height">height: 25px;</div>
</div>
.this-wrapper {
  display: grid;
  margin-bottom: 1em;
  background-color: Gainsboro;
  height: 100px; /* コンテナの高さ */
  border-radius:8px;
}
.height {
  height: 25px;
  background-color: #fcba03;
  border-radius:8px;
  padding-left: 8px;
  padding-right: 8px;
}

これを追加:height: 75px; align-content: end;

グリッドアイテムに高さと縦方向の配置を定義してみる。align-content: end; は次のセクションで説明。

height: 75px; align-content: end;
<div class="this-wrapper-end">
  <div class="height-3">height: 75px; align-content: end;</div>
</div>

.this-wrapper-cl-2 {
  display: grid;
  background-color: Gainsboro;
  height: 100px; /* コンテナの高さ */
  margin-bottom: 1em;
  align-content: end; /* 終端(下、または右 */
  border-radius:8px;
}
.height-3 {
  height: 75px;
  width: 50%;
  background-color: #fcba03;
  border-radius:8px;
  padding-left: 8px;
  padding-right: 8px;
}
Fourth

グリッドレイアウトを使って棒グラフを作り、各棒グラフの中の縦方向は下部、横方向は左右の中央に文字を入れる。

グリッドコンテナ内の 横方向 のアイテム位置を指定→ justify-content:

CSS Gridでアイテムを横方向に配置するには、justify-content を、グリッドコンテナに記述することで、グリッドアイテムの横方向配置を定義する。justify-content: start; は、アイテムを主軸の開始点(左端)から並べる。

justify-content: の主な値

/* グリッドコンテナに記述 */
justify-content: start;
justify-content: center;
justify-content: end;
justify-content: space-between;
justify-content: space-around;
justify-content: space-evenly;
justify-content: start;
<div class="this-wrapper-start">
  <div class="flex-item-base">justify-content: start;</div>
</div>
.this-wrapper-start {
  display: grid; 
  background-color: Gainsboro; 
  height: 100px; 
  margin-bottom: 1em; 
  justify-content: start;
  border-radius:8px;
}
.flex-item-base {
  background-color: #fcba03;
  border-radius:8px;
  line-height: 1;
  height: 50px;
  padding-left: 8px;
  padding-right: 8px;
}

グリッドコンテナ内の 縦方向 のアイテム位置を指定→ align-content:

CSS Gridでアイテムを縦方向に配置するには、align-content を、グリッドコンテナに記述することで、グリッドアイテムの縦方向の配置を定義できる。

align-content: の値

/* グリッドコンテナに記述 */
align-content: start; (初期値)
align-content: center;
align-content: end;
align-content: space-between;
align-content: space-around;
align-content: space-evenly;

「align-content: end;」をコンテナに定義して下部へ配置するサンプルを作ってみる。

グリッドアイテム内の左右上下中央寄せdisplay: flex と justify-content: center、align-items: center

アイテムの文字配置を左右上下中央寄せにしたいので、グリッドアイテムの「.grid-item」を親要素にして以下ブルーの文字部分を指定する。

1
2
3
4
<div class="grid-container-4">
  <div class="grid-item">1</div>
  <div class="grid-item">2</div>
  <div class="grid-item">3</div>
  <div class="grid-item">4</div>
</div>
.grid-container-4 {
  display: grid; /* グリッドコンテナにする */
  grid-template-columns: repeat(4, 1fr); 
  grid-auto-rows: 50px; 
  height: 100px; 
  background-color: Gainsboro;
  align-content: end;/* コンテンツ全体をグリッドコンテナの下端に配置 */
  margin-bottom: 1em;
  border-radius:8px;
}
.grid-item {
    background-color: orange;
    display: flex;
    justify-content: center;
    align-items: center;
    /* align-content: center; は複数行に折り返されたアイテム全体を配置する際に使うプロパティであり、単一行の場合は機能しないため、align-items で個々のアイテムの配置を制御するのが正しい方法である */
    font-size: 1em;
    color: white;
    border-radius: 8px;
    border: 1px solid Darkorange; 
}

グリッドコンテナ内の 縦方向 の個別のアイテムを縦方向に配置する→ align-self:

CSS Gridで個別のアイテムを縦方向に配置するには、該当するアイテムに align-self を使用する。

align-self: end;
<div class="this-wrapper">
  <div class="end-1" style="height: 75px;">align-self: end;</div>
</div>

.this-wrapper {
  display: grid;
  margin-bottom: 1em;
  background-color: Gainsboro;
  height: 100px; /* コンテナの高さ */
  border-radius:8px;
}
.end-1 {
  background-color: #fcba03;
  border-radius:8px;
  align-self: end;
  line-height: 1;
  padding-left: 8px;
  padding-right: 8px;
}

グリッドコンテナ内の 縦方向 のアイテム位置を指定→align-content:

CSS Gridでアイテムを横方向に配置する align-contentは、複数行に分かれたアイテム全体の配置に関わる。アイテム自体の位置を揃えたい場合: align-items、アイテムのグループ全体を揃えたい場合: align-content を使う。

/* グリッドコンテナに記述 */
align-content: start; (初期値)
align-content: center;
align-content: end;
align-content: space-between;
align-content: space-around;
align-content: space-evenly;
align-content: end;
<div class="this-wrapper-cl-2">
  <div class="grid-item-base">align-content: end;</div>
</div>
.this-wrapper-cl-2 {
  display: grid;
  background-color: Gainsboro;
  height: 100px; /* コンテナの高さ */
  margin-bottom: 1em;
  align-content: end;
  border-radius:8px;
}
.grid-item-base {
  background-color: #fcba03; 
  border-radius:8px; 
  line-height: 1;
  padding-left: 8px; 
  padding-right: 8px; 
  height: 75px; 
  width: 260px;
}

CSS Gridで個々のアイテムを縦方向に配置するには、該当するアイテムに align-self を使用する。

align-self: end;
<div class="this-wrapper">
  <div class="self-end" style="height: 75px;">align-self: end;</div>
</div>

.self-end {
  background-color: #fcba03;
  border-radius:8px;
  align-self: end;
  line-height: 1;
  padding-left: 8px;
  padding-right: 8px;
  height: 75px;
  width: 260px;
}

グリッドレイアウトのケーススタディ

70
A
80
B
120
C
55
D
110
E
55
F
<div class="graph-bar-container">
  <div class="graph-bar bar-A">
    <div class="bar-value">70</div>
    <div class="bar-label">A</div>
  </div>
  <div class="graph-bar bar-B">
    <div class="bar-value">80</div>
    <div class="bar-label">B</div>
  </div>
  <div class="graph-bar bar-C">
    <div class="bar-value">120</div>
    <div class="bar-label">C</div>
  </div>
  <div class="graph-bar bar-D">
    <div class="bar-value">55</div>
    <div class="bar-label">D</div>
  </div>
  <div class="graph-bar bar-E">
    <div class="bar-value">110</div>
    <div class="bar-label">E</div>
  </div>
  <div class="graph-bar bar-F">
    <div class="bar-value">55</div>
    <div class="bar-label">F</div>
  </div>
</div>
.graph-bar-container {
  display: grid; /* グリッドレイアウトを適用 */
  grid-template-columns: repeat(6, 1fr); /* 6つのカラムを作成 */
  align-items: end; /* グリッドアイテムを各カラムの下部に揃える */
  height: 200px; /* コンテナの高さを指定 */
  border: 1px solid #ccc; /* コンテナの境界線 */
  position: relative; /* ラベルの絶対位置指定のために必要 */
  gap: 12px;
  background-color: rgba(255, 192, 203,0.3);
  margin-bottom: 1em;
}
/* 各棒の具体的な高さを指定 */
.graph-bar:nth-child(1) { height: 70%; }
.graph-bar:nth-child(2) { height: 80%; }
.graph-bar:nth-child(3) { height: 85%; }
.graph-bar:nth-child(4) { height: 55%; }
.graph-bar:nth-child(5) { height: 60%; }
.graph-bar:nth-child(6) { height: 55%; }
.bar-value {
  color: white; /* 棒の高さを示す数値の色 */
  font-size: 12px; /* 棒の数値のフォントサイズ */
}
.bar-label {
  color: gold; /* 棒のラベルの色 */
  font-size: 14px; /* 棒のラベルのフォントサイズ */
  margin-bottom: 5px; /* 棒の下部からの余白 */
  align-self: center; /* ラベルを横中央に配置 */
  position: absolute; /* 棒の底辺に配置 */
  bottom: 20px; /* 棒の底辺に固定 */
  width: 100%; /* 親要素の幅いっぱいに広げる */
  text-align: center; /* テキストを横中央揃えに */
}
.bar-A {background-color: indianred;}
.bar-B {background-color: darkorange;}
.bar-C {background-color: salmon;}
.bar-D {background-color: seagreen;}
.bar-E {background-color: darkkhaki;}
.bar-F {background-color: tomato;}
Fifth

入れ子の勧め

フレックスボックス、CSS grid を入れ子にする。ここまでに習得したフレックスボックス、CSS grid の
空間配備の方法を定義すれば
その対象がより明確にシンプルになる。

これはフレックスボックス、CSS grid を手なずけるひとつの解決策であるかもしれない。

flexbox の入れ子を試す。

flexbox の align-content

フレックスにおける align-content は、flex-wrap: wrap が指定され、フレックスコンテナ内で要素が複数行に折り返された場合にのみ機能し、各行の配置を調整する。各アイテム自体もフレックスコンテナとして機能させ(フレックスボックスのネストが可能)、内部のテキスト(例:「Item 1」のテキスト)をアイテムボックスの水平方向と垂直方向の中央に配置させた。

Item 1
Item 2
Item 3
Item 4
Item 5
Item 6
<div class="flex-container">
  <div class="flex-item">Item 1</div>
  <div class="flex-item">Item 2</div>
  <div class="flex-item">Item 3</div>
  <div class="flex-item">Item 4</div>
  <div class="flex-item">Item 5</div>
  <div class="flex-item">Item 6</div>
</div>
.flex-container {
  display: flex;
  flex-wrap: wrap; 
  align-content: center; 
  justify-content: center;
  height: 120px; 
  width: 100%; 
  border: 1px solid black; 
  background-color: rgba(255, 192, 203,0.3);
}
.flex-item {
  width: 70px;
  height: 30px; 
  background-color: skyblue;
  margin: 5px; 
  display: flex; /* flexbox のネスト */
  flex-wrap: wrap; 
  align-content: center; 
  justify-content: center;
  font-size: 16px;
  color: #fff;
  }
   

Grid layout の入れ子を試す。

Grid layout の入れ子

グリッドレイアウトにおける入れ子構造はレイアウトを更に面白く変化させる。また、アイテムに flexbox を定義も可能である。
参考: グリッドレイアウトの中でフレックスボックスを使う

1
2
3

A

B

<div id="grid-nested-content">
  <div>1</div>
  <div>2</div>
  <div>3</div>
  <div class="nested">
    <p>A</p>
    <p>B</p>
  </div>
</div>
#grid-nested-content{
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  grid-gap: 10px;
  max-width:100%;
  margin: 0 auto;
}
#grid-nested-content div{
  background-color: rgba(255, 192, 203,0.3);
  padding: 10px;
  text-align: center;
}
/* Nested Grids */
.nested { 
  display: grid; /* Grid layout のネスト */
  grid-template-columns: 1fr 1fr;
  grid-gap: 10px;
  grid-column: 1 / 4;
}
.nested p{
  border: 1px solid #fff;
  padding:20px;
  margin: 0;
  background: tomato;
  color: #fff;
  text-align: center;
}
Sixth

place-items プロパティ

place-items は Gridレイアウトまたは Flexbox レイアウトを適用したコンテナ(親要素)に定義して使用する。

縦横中央揃え

「place-items: center;」と指定するだけで、「align-items: center;」と「justify-items: center;」を同時に設定したのと同じ動作になり、アイテムがグリッドコンテナ内で縦横中央に配置される。

place-items: center; 
  
align-items: center;(縦方向の配置) 
  
justify-items: center; (横方向の配置)

単一の align-items 値で、ブロック方向とインライン方向の両方の配置を設定するために使用する。 ブロック方向の配置を設定する align-items 値に、インライン方向の配置を設定する justify-items 値が続く。

align-items の値

  • normal
  • center
  • start
  • end
  • self-start, baseline, first baseline, last baseline
  • stretch
  • anchor-center, safe, unsafe, flex-start, flex-end

justify-items の値

  • normal
  • start, self-start, flex-start
  • end, self-end, flex-end
  • center, anchor-center
  • left, right,
  • baseline, first baseline, last baseline
  • stretch
  • safe, unsfe, legacy
  • Flexbox では使用不可
アイテム1
アイテム2
アイテム3
<div class="place-items-container">
  <div class="place-items-item">アイテム1</div>
  <div class="place-items-item">アイテム2</div>
  <div class="place-items-item">アイテム3</div>
</div>

<style>
.place-items-container {
  display: grid;
  height: 200px;
  /* コンテナの高さ(中央揃えの例で必要) */
  place-content: center;
  border: 1px solid #ccc;
  /* わかりやすくするために境界線を追加 */
  background-color: rgba(255,192,203,0.3);
  margin-bottom: 1em;
  place-items: center; 
}
.place-items-item {
  background-color: #f0f0f0;
  padding: 20px;
  height: 40px;
  border: 1px solid #999;
  text-align: center;
  display: grid;
  place-content: center;
}
</style>

各グリッドセル内のアイテムを中央にしたい場合に、place-items: center;を使う。グリッド全体を親コンテナの真ん中にしたい場合:place-content: center;を使う。

Seventh

place-self プロパティ

align-self および justify-self プロパティ) を一度に指定する

Flexbox では、place-self プロパティは適用されない。 (Flexboxは一次元レイアウト(行または列のいずれか)であり、グリッドレイアウトのように二次元的な配置には対応していない。) place-self はグリッドレイアウト (Grid Layout) におけるプロパティで指定するアイテムで定義して使う。place-self は CSS の一括指定プロパティで、align-self および justify-self プロパティを一度に指定することができる。このプロパティは、2 番目の値が設定されていない場合、最初の値がそちらにも使用される。これは align-self と justify-self プロパティの組み合わせであり、それぞれがアイテムの垂直(align-self)と水平(justify-self)の配置を指定する。

あるアイテムだけの配置を変更する

親要素に指定するalign-itemsプロパティの値を上書きし、アイテムごとの揃え方を変更できるため、例えば他のアイテムが中央揃えでも、ひとつのアイテムだけを下揃えにしたい場合などに使用する。

Item 1
Item 2
Item 3
<div class="grid-container-sample">
  <div class="items">Item 1</div>
  <div class="items item-end-end">Item 2</div>
  <div class="items">Item 3</div>
</div>
.grid-container-sample {
  display: grid;
  grid-template-columns: 1fr 1fr 1fr; /* 例:3つの列 */
  grid-auto-rows: 100px; /* 例:行の高さ */
  gap: 10px; /* アイテム間の隙間 */
  border: 1px solid black;
  padding: 10px;
}
.items {
  background-color: seagreen;
  padding: 20px;
  text-align: center;
  align-self: center;
  border: 1px solid #333;
}
/* 特定のアイテムにplace-selfプロパティを適用 */
.item-end-end {
  place-self: end end; /* グリッドアイテムの開始位置(上・左)を右下隅に配置します */
}

キーワード値

  • auto:親のプロパティ(align-items や justify-items)の値を使用する。
  • start:要素をコンテナの開始位置(縦軸なら上、横軸なら左)に配置する。
  • end:要素をコンテナの終了位置(縦軸なら下、横軸なら右)に配置する。
  • center:要素をコンテナの中央に配置する。
  • stretch:要素をコンテナのサイズいっぱいに引き伸ばして配置する。
  • baseline:ベースラインで揃えて配置する。

値の組み合わせ

  • center center:要素をコンテナの縦横方向の中央に配置する。
  • start end:縦軸をコンテナの開始位置、横軸を終了位置に配置する。
  • end start:縦軸をコンテナの終了位置、横軸を開始位置に配置する。
  • stretch stretch:要素をコンテナの縦横方向いっぱいに引き伸ばす。

place-self は Flexbox と CSS Grid で動作が異なる

Grid レイアウトでは、place-self はグリッドアイテムのアイテムの配置を水平・垂直方向でまとめて指定するプロパティだが、Flexbox ではplace-self は適用されない。justify-items や justify-self は Flexbox では 直接使用できない。(justify-content や子要素に margin: auto を使うなどの代替手段が必要)

Eighth

その他

中央寄せと幅の方式にパラダイムシフト

一般的に要素を左右中央揃えにしたいとき、使われるのが margin-left: auto と margin-right: auto である。最新のCSSを使うと、より簡単に要素を中央揃えにできる。それが 「 margin-inline: auto; 」 だ。

くわえて、width: stretch; を確認しよう。width: 100%; に代わるもので、例えば以下のように使う。

Centered elements
<div class="container-center">
  <div class="box-center">
  Centered elements
  </div>
</div>
.container-center {
  width: stretch; /* width: 100%; */
  border: 1px solid #ccc;
  padding: 20px; 
}
.box-center {
  width: stretch;
  /* 中央寄せのための margin-inline プロパティ */
  margin-inline: auto;
  background-color: lightblue;
  padding: 20px;
  text-align: center; /* テキストも中央寄せする例 */
}

gap

現在では row-gap, column-gap が正しいプロパティ

FontAwesome のアイコン付きのリンク・ボタン

FontAwesome を使う前の準備を整える。

<head>
  <!-- Font AwesomeのKit Code -->
  <script src="[発行されたキットコードをここに貼り付ける]" crossorigin="anonymous"></script>
</head>
<div style="width: 140px; background-color: Royalblue; border-radius: 12px;margin-bottom: 1rem;">
  <a class="Link-2" href="">button</a>
</div>
.Link-2 {
  display: grid;
  grid-template-columns: 1fr auto 1fr;
  column-gap: 8px;
  align-items: center;
  color: #fff;
}
.Link-2::before {
  content: '';
}
.Link-2::after {
  font-family: "Font Awesome 5 Free"; /* FontAwesomeを使うことを明示 */
  content: "f061 ";
  -webkit-font-smoothing: antialiased;
  display: inline-block;
  font-style: normal;
  font-weight: 900; /* Solidタイプのアイコンを表示するときにはfont-weight: 900;を、Regularタイプのアイコンを表示するときにはfont-weight: 400; */
  font-variant: normal;
  text-rendering: auto;
  line-height: 1;
  padding: 4px;
}