テック技報最新号へ →
CSS

safe center で「溢れたら左端から」の中央寄せにする

justify-content: safe center は、収まる時は中央寄せ、収まらない時は先頭(左端)寄せに自動で切り替わり、溢れた中身が左側に切れて見えなくなるのを防ぐ。

@sanyampunia · 2026-10-17
#Flexbox#Grid#中央寄せ#横スクロール#タブ#レスポンシブ

どんな時に使う?

タブ、チップ、パンくず、ボタン群などを display: flex; justify-content: center で中央に並べ、狭い画面では overflow-x: auto で横スクロールさせたい時。普通の center だと、中身が箱より広くなった瞬間に左右均等にはみ出し、左側にはみ出した部分はスクロールしても戻れない(スクロール位置 0 より左に行けない)ため、先頭のタブが切れたまま触れなくなる。

コード

css
.tabs {
  display: flex;
  justify-content: safe center; /* 溢れたら start と同じ扱いになる */
  overflow-x: auto;
}
  • safe は配置キーワードの前に付ける修飾子で、「中身が溢れる時はデータ損失を避けて start 側に寄せる」という意味。align-items: safe center(縦方向)や Grid の justify-content / align-content、place-content でも使える。
  • 逆の unsafe center は溢れても中央寄せを貫く(はみ出しを許容する)。

注意点・対応状況

  • 現行の主要ブラウザで使える。古い Safari は safe を理解せず宣言ごと無視するので、気になるなら手前に justify-content: center; を書いてから safe center で上書きしておく。
  • 似た効果は子側に margin-inline: auto(先頭と末尾の子に)を付けても得られるが、safe center なら1行で済む。
  • 縦方向の中央寄せ(モーダル内のコンテンツなど)でも、高さが足りない時に上が切れる同じ問題が起きる。align-items: safe center で防げる。

出典

X の元の投稿を開く