| この記事の要点 |
|
margin とは
margin は要素の外側に余白を作る CSS プロパティです。要素同士の距離を取ったり、ブロック要素を中央寄せしたりするのに使います。CSS ボックスモデルでは content → padding → border → margin の順に外側にあります。
4 辺の指定方法
| プロパティ | 意味 |
|---|---|
margin-top | 上の余白 |
margin-right | 右の余白 |
margin-bottom | 下の余白 |
margin-left | 左の余白 |
margin | 4 辺をまとめて指定するショートハンド |
ショートハンドの書き方
/* 4 辺すべて 10px */
.box { margin: 10px; }
/* 縦 10px / 横 20px */
.box { margin: 10px 20px; }
/* 上 / 横 / 下 */
.box { margin: 10px 20px 30px; }
/* 上 / 右 / 下 / 左(時計回り) */
.box { margin: 10px 20px 30px 40px; }
使える単位
| 単位 | 説明 |
|---|---|
px | 絶対的なピクセル |
em / rem | フォントサイズ基準(タイポグラフィに合わせやすい) |
% | 親要素の幅に対する比率(上下の % も幅基準) |
auto | ブラウザが自動計算。中央寄せに使う |
vh / vw | ビューポート基準 |
負の値(例 -10px) | 要素を引き寄せたり重ねたりする |
中央寄せの定番: margin: 0 auto
幅が決まったブロック要素を水平方向中央に置く最も基本的なやり方です。
.container {
width: 1000px;
margin: 0 auto; /* 上下 0、左右 auto */
}
/* レスポンシブ対応版 */
.container {
max-width: 1000px;
margin-inline: auto; /* 論理プロパティで左右 auto */
padding: 0 16px; /* 画面端の余白 */
}
注意点として auto はブロック要素にしか効きません。インライン要素やテーブルは別の方法(text-align: center や Flex / Grid)が必要です。
マージン相殺(margin collapsing)
上下に並んだブロック要素の margin-bottom と margin-top は、大きい方の値だけが残って合算されません。これを「マージンの相殺」と呼びます。
<style>
.a { margin-bottom: 30px; }
.b { margin-top: 20px; }
</style>
<div class="a">A</div>
<div class="b">B</div>
<!-- A と B の間隔は 50px ではなく 30px -->
相殺は上下方向にしか起きず、左右では発生しません。Flex / Grid コンテナの子要素や、overflow / display: flow-root を指定したコンテナの中でも発生しません。
負の margin で要素を重ねる
/* カードを上に少し被せる */
.next-card {
margin-top: -20px;
}
/* 親の padding を打ち消して画面端まで広げる */
.bleed {
margin-inline: -16px;
}
負の margin は柔軟ですが、レイアウトの可読性が下がるため使いどころは絞ったほうが安全です。
論理プロパティ(margin-inline / margin-block)
多言語サイトや縦書きで方向に依存しないレイアウトを書くために、論理プロパティが用意されています。
| 論理プロパティ | 横書き LTR での意味 |
|---|---|
margin-inline-start | margin-left に相当 |
margin-inline-end | margin-right に相当 |
margin-block-start | margin-top に相当 |
margin-block-end | margin-bottom に相当 |
margin-inline | 左右まとめて |
margin-block | 上下まとめて |
margin と padding の違い
| 項目 | margin | padding |
|---|---|---|
| 位置 | border の外側 | border の内側 |
| 背景色 / 背景画像 | 反映されない | 反映される |
| 負の値 | 使える | 使えない |
| 相殺 | 上下で発生する | 発生しない |
| 幅・高さへの算入 | 影響しない | box-sizing による |
よくあるトラブル
| 症状 | 対処 |
|---|---|
| margin-top が親要素の外側に突き抜ける | マージン相殺が親まで波及している。親に padding-top: 0.1px / border / overflow: hidden / display: flow-root のいずれかを当てる |
| margin: auto で中央に寄らない | 要素が block ではない / 幅が指定されていない / Flex/Grid 子で別ルールが効いている |
| % 指定の上下マージンが想定と違う | 上下も親要素の幅基準で計算される仕様 |
| Flex で margin-bottom が効きにくい | Flex では相殺が起きないので、本当に効いていないのは gap や flex-grow の影響を疑う |
関連
- ボックス関連プロパティ — 親カテゴリ
- CSS — 上位カテゴリ
子ページ
子ページはありません
同階層のページ
- margin関連プロパティ
- padding 関連プロパティ
- border関連プロパティ
人気ページ
- 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・Metasequoiaと用途別の選び方
- 7 Spring Frameworkのアノテーション一覧
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- Visual Studio「デザイナーを表示できません」エラーの原因と対処 2026-10-28 12:06:00
- SSH 認証に失敗しました。再試行してください の対処 2026-10-28 12:06:00
- SSH2 秘密鍵の読み込みに失敗しました の原因と対処 2026-10-28 12:06:00
- TeraTerm のよくあるエラーと対処法完全ガイド — Connection refused / 2026-10-28 12:06:00
- Visual Studio エラー一覧|コンパイルエラー・警告の確認方法と対処 2026-10-28 11:39:57
- Whitelabel Error Page の原因と消し方|Spring Boot のエラーページ 2026-10-28 11:39:57
- Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法 2026-10-28 11:39:57
- SQL WHERE 句完全ガイド 2026-10-28 11:39:57
- SQL JOIN 完全ガイド (INNER/LEFT/RIGHT/FULL OUTER) 2026-10-28 11:39:57
- tomcat の起動 / 停止ログと catalina.log・catalina.out の違い 2026-10-28 10:24:23
- Tomcat の起動確認方法 5 つ|localhost:8080・ポート・プロセス・ログ 2026-10-28 10:24:23
- Oracle 19c COMMITの使い方: 暗黙コミット・自動確定・応答不明時の確認 2026-10-28 09:59:09
- Oracle 19c DELETE文|削除対象の確認・COMMIT前の判断・ROLLBACKの条件 2026-10-28 09:59:09
- Oracle 19c INSERT文|INSERT ALL・SELECT・RETURNINGとMERGEの使い分け 2026-10-28 09:59:09
- Oracle 19cのトランザクション制御|COMMIT・ROLLBACK・分離レベルと接続設定 2026-10-28 09:59:09