- CSS はついにデフォルトレイアウトに
align-content を追加し、たった 1 行の CSS プロパティで垂直中央揃えが可能になった
- 対応バージョン: Chrome 123、Firefox 125、Safari 17.4
- 現在までは基本レイアウト(flow)で
align-content が動作しないため、flexbox や grid に切り替える必要があった
- 2024 年、ついにブラウザが Flow レイアウトに
align-content を実装した
- これで flexbox や grid なしでも、CSS プロパティ 1 つだけで配置できる
- そのため、コンテンツを div で包む必要がない
垂直中央揃えの歴史
- ブラウザにおける垂直中央揃えには、長い間シンプルな方法がなかった
方法 1: table-cell
- Sanity(正気か?): ★★★☆☆
- flow(デフォルト)、table、flexbox、grid という 4 つの主要レイアウトがあり、コンテンツの配置はレイアウトによって異なる
- flexbox と grid が後から追加されたため、当初は table が使われていた
<div style="display: table;">
<div style="display: table-cell; vertical-align: middle;">
Content.
</div>
</div>
方法 2: absolute 位置指定
- Sanity: ☆☆☆☆☆
- flow レイアウトでは解決できないため、absolute 位置指定で回避する
<div style="position: relative;">
<div style="position: absolute; top: 50%; transform: translateY(-50%);">
Content.
</div>
</div>
方法 3: インラインコンテンツ
- Sanity: ☆☆☆☆☆
- flow レイアウトはコンテンツの配置には役立たないが、1 行内での垂直配置は許可する
- では、コンテナの高さぶんの行を作ればどうだろう?
<div class="container">
::before
<div class="content">Content.</div>
</div>
.container::before {
content: '';
height: 100%;
display: inline-block;
vertical-align: middle;
}
.content {
display: inline-block;
vertical-align: middle;
}
方法 4: 1 行 flexbox
- Sanity: ★★★☆☆
- Flexbox が広く使われるようになったのは、Web が始まってから 20 年以上たってからだった
- 1 行モード(デフォルト)では行が縦方向の空間を埋め、
align-items で行内の項目を揃える
<div style="display: flex; align-items: center;">
<div>Content.</div>
</div>
- または、行を縦方向にして
justify-content で項目を配置する
<div style="display: flex; flex-flow: column; justify-content: center;">
<div>Content.</div>
</div>
方法 5: 複数行 flexbox
- Sanity: ★★★☆☆
- 複数行の flexbox では
align-content で行を配置できる
<div style="display: flex; flex-flow: row wrap; align-content: center;">
<div>Content.</div>
</div>
方法 6: grid コンテンツ
- Sanity: ★★★★☆
- grid はさらに後から登場したため、配置は少し簡単になった
<div style="display: grid; align-content: center;">
<div>Content.</div>
</div>
方法 7: grid セル
- Sanity: ★★★★☆
align-content はセルをコンテナ内に配置し、align-items はコンテンツをセル内に配置する
<div style="display: grid; align-items: center;">
<div>Content.</div>
</div>
方法 8: auto マージン
- Sanity: ★★★☆☆
- flow レイアウトでは
margin:auto は水平方向には中央揃えになるが、垂直方向にはならない
- flexbox と grid にはこの不合理さがない
<div style="display: grid;">
<div style="margin-block: auto;">
Content.
</div>
</div>
方法 9: 2024 年のこの記事
- Sanity: ★★★★★
- そもそもブラウザが最初から追加しておくべきだった
<div style="align-content: center;">
<code>align-content</code> just works!
</div>
29件のコメント
おお〜こんな機能が〜〜
コンピュータサイエンスで最も難しいこと ― 中央揃え
https://tonsky.me/blog/centering/
ついに!
CSS、簡単すぎるようになったんじゃない?wwww
🙏🏻🙏🏻🙏🏻🙏🏻
なんてこった、チーズクラスト
ついに!
遅いってば! 遅いってば! 遅いってば!
ついに
うれしい
笑
a-men
この変更によって、既存のウェブサイトのレイアウト構造が崩れてしまう危険はありますか?
私もこの部分が気になりますね
ついに!
ついに Web 3.0 の時代が来たんですね
コメント欄が楽しさであふれてますね、ははは……
ついに本当に……
お…? やるべきなのかな 笑..
ついに
わー!!!
わー!!!
最高です!
私は主にアプリ開発をしているので、Web開発を手伝うときも何も考えずに検索で出てきたflexboxを使って、これが中央揃えなんだろうと思っていたのですが……今まで存在しなかったものだったんですね。衝撃です……
やったー!
ついに!
楽しい!
ついに!