| この記事の要点 |
|
vertical-align とは
vertical-align はインラインレベル要素(<span>, <img>, インラインブロック等)とテーブルセル(<td>, <th> または display: table-cell)の縦方向の揃え位置を指定する CSS プロパティです。
「縦方向の揃え」というと幅広く効きそうですが、適用範囲はインラインまたは table-cell に限定される点が最大の注意ポイントです。
構文
selector {
vertical-align: <keyword> | <length> | <percentage>;
}
キーワード値の意味
| 値 | 意味 | 適用 |
|---|---|---|
baseline(既定) | 親のベースラインに揃える | インライン |
top | 行ボックスの上端 / セルの上端 | インライン / table-cell |
middle | 親の中央(x-height の中央) | インライン / table-cell |
bottom | 行ボックスの下端 / セルの下端 | インライン / table-cell |
text-top | 親のフォントの上端 | インライン |
text-bottom | 親のフォントの下端 | インライン |
sub | 下付き文字位置 | インライン |
super | 上付き文字位置 | インライン |
<length>(例: 4px, -2px) | ベースラインから上下にずらす | インライン |
<percentage>(line-height 基準) | line-height の %でベースラインからずらす | インライン |
インライン要素での使用例
テキストと画像を中央で揃える
<p>
これは
<img src="icon.png" alt="" style="vertical-align: middle; height: 20px">
アイコンです
</p>
img は既定で baseline 配置のため、テキストよりやや沈んで見えます。middle を指定すると x-height の中央に揃い、自然な見た目になります。
下付き / 上付き文字
<p>水の化学式は H<span style="vertical-align: sub; font-size: .8em">2</span>O</p>
<p>E = mc<span style="vertical-align: super; font-size: .8em">2</span></p>
テーブルセルでの使用例
セル内の上下方向揃えはまさに vertical-align の独壇場です。
th, td {
vertical-align: top; /* セル上端揃え */
}
.center td {
vertical-align: middle; /* セル中央 */
}
.bottom td {
vertical-align: bottom; /* セル下端 */
}
典型的なトラブル:img の下にできる隙間
HTML で img をブロックで使うと、画像の下に 3〜5px ほどの隙間ができることがあります。これは img がインライン扱いで、フォントのディセンダー領域を確保しているために起こる「あるある」です。
対処法
/* 方法 1: middle に揃える */
img { vertical-align: middle; }
/* 方法 2: bottom に揃える */
img { vertical-align: bottom; }
/* 方法 3: ブロック化(一番確実) */
img { display: block; }
注意:ブロック要素や Flex アイテムには効かない
vertical-align はインラインまたは table-cell 限定です。以下は効きません。
| 状況 | 代わりに使うもの |
|---|---|
ブロック要素(<div>)の中身を縦中央に | Flex(display: flex; align-items: center) |
| Flex アイテムを縦中央に | align-items / align-self |
| Grid セル内を縦中央に | align-items / align-self / place-items |
| 絶対配置で中央 | top: 50%; transform: translateY(-50%) |
Flex に置き換える例
/* これは「効かない」 */
.box {
height: 200px;
vertical-align: middle; /* ブロックなので無効 */
}
/* これが正解 */
.box {
height: 200px;
display: flex;
align-items: center; /* 縦方向中央 */
justify-content: center; /* 横方向中央 */
}
baseline の振る舞いを理解する
初期値 baseline は「親のベースライン」に対する揃えです。インライン要素同士でサイズが違うフォントを並べた時の挙動は、ベースラインで揃うことで保たれています。
<p>
<span style="font-size: 16px">小さい</span>
<span style="font-size: 36px">大きい</span>
<span style="font-size: 16px">小さい</span>
</p>
上記は全てのテキストが下端ではなくベースラインで揃います。揃えたい位置を変えたいときに vertical-align を使います。
長さ・% 指定
キーワードでは表現しきれない微調整に使います。正値で上、負値で下に動かします。
.icon {
vertical-align: -3px; /* 3px 下にずらす */
}
.note {
vertical-align: 30%; /* line-height の 30% 上にずらす */
}
ブラウザ互換
vertical-align は CSS 1 から存在し、すべての主要ブラウザで完全サポートされています。挙動の差は基本的にありません。
FAQ
Q: div の中身を縦中央にしたい
A: vertical-align は使えません。Flex(display: flex; align-items: center)または Grid(place-items: center)を使ってください。
Q: テーブル風の中央揃えを div でも使いたい
A: display: table-cell を使えば vertical-align が効きます。ただし Flex のほうが一般的で柔軟です。
Q: 親のフォントを変えたら揃えが崩れた
A: middle は x-height 基準なので、フォントによって中央位置がズレます。完全な縦中央が要るなら Flex を使ってください。
関連
- white-spaceプロパティ
- テキスト — 親カテゴリ
- CSS — 上位カテゴリ
- line-height / display / align-items
子ページはありません
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript で base URL を取得する方法|window.location.origin
- 4 YouTube Data API v3 エラー一覧|403・400・404 の原因と対処
- 5 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 6 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 7 Spring Frameworkのアノテーション一覧
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- プロジェクトをTomcatプロジェクトとして認識させる方法 2026-10-07 22:32:50
- MySQLの1366 Incorrect string value|Laravelの文字コード・絵文字エラー 2026-10-07 21:54:03
- curlの証明書ホスト名不一致|旧エラー51・現行60の確認と対処 2026-10-07 21:54:03
- LaravelのMassAssignmentException|fillableの原因と安全な対処 2026-10-07 21:54:03
- Eclipse で Tomcat の起動ログがコンソールに出ない時の確認手順 2026-10-07 21:54:02
- MySQLにおける中央値(Median)の導き方(バージョン8未満) 2026-10-07 13:49:45
- getInputForward 2026-10-07 13:41:15
- JSONから配列に変換 2026-10-07 13:41:15
- ビューから値をモデルに格納しコントローラーで受け取る方法 2026-10-07 13:23:41
- Laravelのテーブル作成と定義変更|マイグレーション・up/down・注意点 2026-10-07 13:23:41
- NumPy 配列に要素を追加する方法 (append / concatenate) 2026-10-07 13:23:41
- MariaDB・MySQLで現在日時を取得する方法|NOW・タイムゾーン・保存型 2026-10-07 13:13:36
- 【django】テンプレートで定数を使用する方法 2026-10-07 13:10:15
- Spring BootにおけるApplication.propertiesの環境依存設定の分割方法 2026-10-07 12:09:35
- Not supported for DML operations【Springエラー】 2026-10-07 11:09:38