フレックスボックス&グリッドレイアウト:justify-selfプロパティを使いこなす


justify-self プロパティは、フレックスボックスやグリッドレイアウトにおけるアイテムの配置を制御するために使用されます。具体的には、アイテムをインライン軸方向にどのように整列するかを定義します。

インライン軸とは?

  • 垂直方向に記述される言語の場合:アイテムの縦方向の並び方
  • 水平方向に記述される言語の場合:アイテムの横方向の並び方

適用コンテキスト

  • インライン要素には適用されません。
  • justify-self プロパティは、以下の要素に適用されます。
    • フレックスアイテム
    • グリッドアイテム

justify-self プロパティには、以下の値を指定できます。

  • stretch: アイテムをコンテナーの幅いっぱいに引き伸ばします。
  • space-around: アイテムを互いに等間隔に配置します。
  • space-between: アイテムを互いに可能な限り離して配置します。
  • flex-end: フレックスコンテナーの場合は、アイテムをフレックスコンテナーの終了端に配置します。グリッドコンテナーの場合は、end と同じ動作になります。
  • flex-start: フレックスコンテナーの場合は、アイテムをフレックスコンテナーの開始端に配置します。グリッドコンテナーの場合は、start と同じ動作になります。
  • center: アイテムをコンテナーの中央に配置します。
  • end: アイテムをコンテナーの終了端に配置します。
  • start: アイテムをコンテナーの開始端に配置します。

.container {
  display: flex; /* フレックスコンテナーを作成 */
  justify-content: space-around; /* アイテムを等間隔に配置 */
}

.item1 {
  justify-self: start; /* アイテム1をコンテナーの開始端に配置 */
}

.item2 {
  justify-self: center; /* アイテム2をコンテナーの中央に配置 */
}

.item3 {
  justify-self: flex-end; /* アイテム3をコンテナーの終了端に配置 */
}

この例では、.container はフレックスコンテナーとして定義され、justify-content: space-around プロパティによってアイテムが等間隔に配置されます。

  • .item3 には justify-self: flex-end プロパティが設定されているため、コンテナーの終了端に配置されます。
  • .item2 には justify-self: center プロパティが設定されているため、コンテナーの中央に配置されます。
  • .item1 には justify-self: start プロパティが設定されているため、コンテナーの開始端に配置されます。
  • justify-self プロパティは、他の配置プロパティ (justify-contentalign-itemsalign-self) と組み合わせて使用できます。

上記以外にも、justify-self プロパティに関する情報は、以下のリソースで確認できます。



例 1:フレックスボックス

この例では、3つのアイテムを含むフレックスコンテナーを作成し、それぞれ異なる justify-self 値を設定しています。

<div class="container">
  <div class="item1">アイテム 1</div>
  <div class="item2">アイテム 2</div>
  <div class="item3">アイテム 3</div>
</div>
.container {
  display: flex;
  flex-direction: row; /* アイテムを横方向に並べる */
  width: 300px; /* コンテナーの幅 */
  height: 100px; /* コンテナーの高さ */
  background-color: #ccc; /* 背景色 */
}

.item1 {
  flex: 1; /* アイテムを可能な限り伸縮させる */
  background-color: #f00; /* 背景色 */
  justify-self: start; /* アイテムをコンテナーの開始端に配置 */
  margin: 10px; /* アイテムのマージン */
}

.item2 {
  flex: 1; /* アイテムを可能な限り伸縮させる */
  background-color: #0f0; /* 背景色 */
  justify-self: center; /* アイテムをコンテナーの中央に配置 */
  margin: 10px; /* アイテムのマージン */
}

.item3 {
  flex: 1; /* アイテムを可能な限り伸縮させる */
  background-color: #00f; /* 背景色 */
  justify-self: end; /* アイテムをコンテナーの終了端に配置 */
  margin: 10px; /* アイテムのマージン */
}

このコードを実行すると、以下のようになります。

  • アイテム 1 はコンテナーの左側、アイテム 2 は中央、アイテム 3 は右側に配置されます。

例 2:グリッドレイアウト

この例では、3つのアイテムを含むグリッドレイアウトを作成し、それぞれ異なる justify-self 値を設定しています。

<div class="container">
  <div class="item1">アイテム 1</div>
  <div class="item2">アイテム 2</div>
  <div class="item3">アイテム 3</div>
</div>
.container {
  display: grid;
  grid-template-columns: repeat(3, 1fr); /* 3つの列を作成し、それぞれ等幅にする */
  width: 300px; /* コンテナーの幅 */
  height: 100px; /* コンテナーの高さ */
  background-color: #ccc; /* 背景色 */
}

.item1 {
  background-color: #f00; /* 背景色 */
  justify-self: start; /* アイテムを列の開始端に配置 */
  margin: 10px; /* アイテムのマージン */
}

.item2 {
  background-color: #0f0; /* 背景色 */
  justify-self: center; /* アイテムを列の中央に配置 */
  margin: 10px; /* アイテムのマージン */
}

.item3 {
  background-color: #00f; /* 背景色 */
  justify-self: end; /* アイテムを列の終了端に配置 */
  margin: 10px; /* アイテムのマージン */
}
  • アイテム 1 は各列の左側、アイテム 2 は中央、アイテム 3 は右側に配置されます。

例 3:スペース調整

この例では、justify-self プロパティを使用してアイテムを等間隔に配置したり、互いに可能な限り離して配置する方法を示します。

<div class="container">
  <div class="item1">アイテム 1</div>
  <div class="item2">アイテム 2</div>
  <div class="item3">アイテム 3</div>
</div>
.container {
  display: flex;
  flex-direction: row; /* アイテムを横方向に並べる */
  width: 300px; /* コンテナーの幅


代替方法

以下に、justify-self の代替となる一般的な方法をいくつか紹介します。

マージンを使用する

アイテムの周りにマージンを設定することで、配置を調整することができます。

.item {
  margin-left: auto;
  margin-right: auto;
}

このコードは、.item クラスが設定されたすべてのアイテムを左右に自動的にマージンし、コンテナーの中央に配置します。

パディングを使用する

コンテナーにパディングを設定することで、アイテムを内側から配置することができます。

.container {
  padding: 20px;
}

.item {
  width: 100px;
}

このコードは、.container 要素内に 20px のパディングを設定し、.item クラスが設定されたアイテムをその内側に配置します。

ネガティブマージンを使用する

アイテムに負のマージンを設定することで、配置を調整することができます。

.item {
  margin-left: -20px;
}

このコードは、.item クラスが設定されたすべてのアイテムを 20px 左に移動します。

位置指定を使用する

アイテムに position プロパティと left または right プロパティを設定することで、正確な位置を指定することができます。

.item {
  position: absolute;
  left: 50%;
  transform: translateX(-50%);
}

このコードは、.item クラスが設定されたすべてのアイテムをコンテナーの水平方向の中央に配置します。

フロートを使用する

インライン要素の場合は、float プロパティを使用して配置を調整することができます。

.item {
  float: left;
}

このコードは、.item クラスが設定されたすべてのアイテムを左側に配置します。

上記以外にも、CSS Grid や Flexbox などのレイアウトテクニックを使用して、アイテムを詳細に制御することができます。

最適な方法の選択

justify-self の代替方法を選択する際には、以下の要素を考慮する必要があります。

  • ブラウザのサポート状況
  • コードの簡潔性
  • 配置の正確性
  • 使用しているレイアウトモデル(フレックスボックス、グリッドレイアウト、インラインレイアウトなど)