この記事の概要
タイトルで完結している気もしますが、ブラウザによってjustify-selfの挙動が違うので備忘録がてらまとめた記事です。
なお、この情報は2025年3月23日時点のものです。
前提の確認
justify-self
はGridの中で配置を制御するプロパティです。
CSS Gridを使う場合、多くは親要素から子要素の配置方法を指定するのですが、子要素が自分自身の配置を制御することもできます。
その、自分自身を制御するときに使うプロパティの1つがjustify-self
です。
グリッドのセルの、インライン方向中心1に配置します。
起きる事象
以下の条件で、各ブラウザで表示の違いを確認します。
-
display: block
とdisplay: grid
のコンテナを作成する - それぞれのコンテナの中に3つずつ要素を配置する
- 1つ目の要素に
justify-self: center
を指定する
実際のコード
<div class="container block">
<p class="item center">Block item</p>
<p class="item">Block item</p>
<p class="item">Block item</p>
</div>
<div class="container grid">
<p class="item center">Grid item</p>
<p class="item">Grid item</p>
<p class="item">Grid item</p>
</div>
* {
box-sizing: border-box;
margin: 0;
padding: 0;
}
body {
font-family: sans-serif;
padding: 2rem;
}
.container {
background-color: #ddd;
padding: 1rem;
& + .container {
margin-top: 1rem;
}
}
.block {
display: block;
}
.grid {
display: grid;
}
.item {
background-color: #eee;
padding: 0.5rem;
& + .item {
margin-top: 0.5rem;
}
}
.center {
justify-self: center;
}
結果はこのように、Google Chromeだけはdisplay: block
の中でもインライン方向中央に配置されています。
ブラウザ | スクリーンショット |
---|---|
Google Chrome | ![]() |
Firefox | ![]() |
Safari | ![]() |
block
が特別なわけでもなく、大抵のもの(たとえばlist-item
などでも)でjustify-self: center
が有効になってしまっていました。
気をつけた方が良いかもしれないこと
マークアップ・スタイリングをしている中で、このような流れはあり得るかと思います。
- 最初に
display: grid
を指定してスタイリングをする - 途中で
flex
やblock
など違うものに変える
あるいは次のようなパターンも。
-
grid
直下の要素にjustify-self
を指定する - 間の階層に
grid
でないdiv
などが挟まる
このような場合、最初は正しくjustify-self
が効いているものの、後から意図せぬ表示になってしまいます。
Google Chromeをメインに開発をしていると、こういった場合に気づきづらいです。
もちろんすべてのブラウザで表示確認をしたりVRTを通すようにしていれば良いのですが、軽微な変更で気が緩むこともなくはないのではと思いました。
(というか、上記は私が個人的に開発している小さなプロジェクトで実際に起こした問題です。「気をつけとけアホが」という指摘はごもっともです。)
まとめ
- Google Chromeでは
display: grid
以外の要素の中でもjustify-self
が有効になってしまう - 一見すると正しくレイアウトできていても、他のブラウザで崩れている可能性がある
- マークアップを変更した際など、一応気をつけておいた方が良い
-
ざっくり言えば水平方向の中心です。しかし厳密に言えば違うので、ここでは正しさを優先した記載にしています。 ↩