結論

justify-content は、display: flex か display: grid を指定した親要素に書き、主軸(flex なら flex-direction の向き、grid なら横方向)に沿ってアイテムの並びと余白の配り方を決めるプロパティです。効かないときは「親が flex/grid でない」「配る余白が無い」「margin: auto が先に余白を取っている」のどれかであることがほとんどです。

この記事でわかること

  • 12個の値を同じ3つの箱で描画し、Chromium で座標を計測した表(flex・column・grid)
  • align-items・align-content・justify-items・justify-self との違いと使い分け
  • 効かない原因6つの再現結果と、それぞれの直し方

2026年10月29日更新|Chromium 153・Playwright 1.63 で座標を計測

justify-content は「主軸」の上でしか働きません。どのプロパティが何を動かすかを先に図にします。

flowchart LR
    A[動かしたいもの] --> J[主軸の並び全体<br>justify-content]
    A --> I[交差軸の各アイテム<br>align-items]
    A --> C[折り返した行のまとまり<br>align-content]
    A --> S[gridの枠の中の位置<br>justify-items]

よく調べられることの答えを先にまとめます。

知りたいこと 答え 詳しい節
justify-content とは 親要素に書き、主軸方向の並びと余白を決める justify-contentとは
center・space-between の違い 600px に 100px×3 で、先頭の位置は 150・0・50・75px 各値の位置を計測した表
justify-content align-items 違い justify-content は主軸、align-items は交差軸 align-itemsとの違い
flex-direction: column のとき justify-content が縦方向を決める。left・right は効かない columnで軸が入れ替わる
grid で効かない justify-content は枠(トラック)を動かす。中身は justify-items Gridでの意味
justify-content 効かない 親が flex でない・余白が無い・margin: auto・wrap・safe 効かない原因6つ
はみ出すと左が切れる justify-content: safe center で先頭揃えに戻る 効かない原因6つ
縦横の中央寄せを1行で place-content: center(align-content と justify-content の短縮) place-contentの短縮

確認環境:Ubuntu 24.04.5 LTS の上で、Python 3 の http.server を 127.0.0.1 のポートに起動して自分で書いたテストページを配信し、Playwright 1.63.0(Python)から Chromium 153.0.8010.12(ヘッドレス、表示幅 900px)で開きました。親要素は幅 600px、アイテムは幅 100px・高さ 40px の箱を3つ(column のときは親の高さ 400px・箱の高さ 60px)とし、各値を当てたあとの位置を getBoundingClientRect() で親の左上からの距離として読み取り、計算値は getComputedStyle() で確かめました。座標はすべてこの実測値です。値の定義と「フレックスボックスでは stretch は flex-start と同じ」「justify-items はフレックスボックスでは無視される」といった仕様の記述は MDN(CSS Box Alignment の各ページ)で確かめました。図は mermaid-cli 11.16.0 で描画を確かめています(確認日 2026年10月29日)。

本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。

(記載例)出典:株式会社RJC「justify-contentとは|align-itemsとの違いと効かない原因6つ」

justify-contentとは(意味と書く場所)

この節では、justify-content が何を決めるプロパティで、どの要素に書くのかが分かります。

justify-content は、フレックスコンテナーの主軸、グリッドコンテナーのインライン軸(横書きなら横方向)に沿って、アイテムの間や周囲の余白をどう配るかを決めるプロパティです。 MDN は次のように定義しています。

CSS の justify-content プロパティは、フレックスコンテナーの主軸、グリッドおよび段組みコンテナーのインライン軸に沿って、中身のアイテムの間や周囲に間隔を配置する方法を定義します。

書く場所は親要素です。子要素に書いても何も起きません。次の2行で、3つのアイテムが親の横幅の中央に集まります。

.row {
  display: flex;            /* これが無いと justify-content は働かない */
  justify-content: center;  /* 主軸(横)の並びを中央へ */
}
項目 内容
書く要素 display: flex / inline-flex / grid / inline-grid を持つ親要素
動かす方向 flex は主軸(flex-direction の向き)、grid はインライン軸(横)
初期値 normal(flex では flex-start と同じ見た目になる)
継承 しない(子の flex コンテナーには別に書く)
対応状況 MDN の Baseline は「広く利用可能」(2015年9月以降の全ブラウザー)

justify-content が動かしているのはアイテムではなく、親の中で余った空間です。余った空間が 0 なら、どの値を指定しても見た目は変わりません。これが「効かない」原因の半分を説明します。

各値の位置をChromiumで計測した表(flex)

この節では、12個の値を同じ条件で描画したときに、3つの箱がどこに置かれるかが数値で分かります。

幅 600px の親に 100px の箱を3つ入れ、余白 300px がどう配られるかを計測しました。数値は親の左端から各箱の左端までの距離(px)です。

値 箱1 箱2 箱3 見た目
normal(初期値) 0 100 200 先頭に詰める
flex-start 0 100 200 先頭に詰める
start 0 100 200 先頭に詰める
left 0 100 200 左に詰める
center 150 250 350 中央に集める
flex-end 300 400 500 末尾に詰める
end 300 400 500 末尾に詰める
right 300 400 500 右に詰める
space-between 0 250 500 両端に付けて間を等間隔
space-around 50 250 450 各箱の両側に同じ余白
space-evenly 75 250 425 すべての隙間が同じ
stretch 0 100 200 flex では flex-start と同じ
150pxcenter の先頭位置余白 300px を左右に 150px ずつ
75pxspace-evenly の先頭位置余白 300px を4つの隙間で割る
0pxstretch の先頭位置flex では伸びない。伸ばすのは flex-grow

表から分かることを3つにまとめます。

1flex-start と start と left は同じ結果

横書き・左から右の文書では、3つとも 0・100・200 でした。違いが出るのは flex-direction: row-reverse や column、direction: rtl のときです(次の節)。

2stretch は flex では伸びない

計算値は stretch のまま残りますが、位置は flex-start と同じ 0・100・200 でした。MDN のとおり、主軸方向の伸縮は flex-grow の担当です。

3箱2 はいつも 250px

center・space-between・space-around・space-evenly の4つは、真ん中の箱がすべて 250px(親の中央)に来ます。違いは両端の余白だけです。

space-between・space-around・space-evenlyの違い

この節では、名前が似ている3つの値で、余白がどう割られるのかが計算で分かります。

3つとも「余白を等分する」値ですが、等分する単位が違います。余白 300px・箱3つの場合の計算は次のとおりです。

値 余白の割り方 両端の余白 箱と箱の間
space-between 隙間(箱の数−1=2)で割る 0px 150px
space-around 各箱の両側(3×2=6)で割る 50px 100px(50+50)
space-evenly 隙間と両端(3+1=4)で割る 75px 75px

space-around で「端の余白が内側の半分になる」のは、箱ごとに両側へ 50px ずつ付けた結果、隣り合う箱の間では 50+50=100px になるためです。見た目を均等にしたいときは space-evenly を選びます。

アイテムが1つだけのとき

箱を1つにして同じ値を当てると、次のようになりました。

値 箱の位置 動作
space-between 0px flex-start と同じ(隙間が無いため)
space-around 250px center と同じ
space-evenly 250px center と同じ

space-between は、アイテムが1つのときに先頭へ寄ることを覚えておくと、「2つ目を消したら左に寄ってしまった」という不具合をすぐ説明できます。

flex-direction: columnで軸が入れ替わる(実測)

この節では、縦並びにしたときに justify-content がどの方向を動かすのかが分かります。

flex-direction: column にすると主軸が縦になり、justify-content は縦方向の配置を決めます。親の高さ 400px に 60px の箱を3つ(余白 220px)で計測した、親の上端からの距離です。

値 箱1(上から) 箱2 箱3 動作
flex-start 0 60 120 上に詰める
center 110 170 230 上下の中央
flex-end 220 280 340 下に詰める
space-between 0 170 340 上下に付けて等間隔
space-evenly 55 170 285 すべての隙間が 55px
left 0 60 120 start と同じ扱い
right 0 60 120 start と同じ扱い

注目するのは left と right です。主軸が縦のとき、left・right は「左右」という方向が主軸に無いため start として扱われ、right を指定しても下には行きません。MDN にも「主軸がインライン軸と平行でない場合は start のように動作する」と書かれています。縦並びで下へ寄せたいときは flex-end か end を使います。

row-reverse では flex-start と start が分かれる

flex-direction: row-reverse にすると、flex-start は「主軸の先頭=右端」、start は「書字方向の先頭=左端」を指すようになり、結果が分かれました。

値(row-reverse) 箱1 箱2 箱3 寄る側
flex-start 500 400 300 右(主軸の先頭)
start / left 200 100 0 左(文書の先頭)
flex-end 200 100 0 左(主軸の末尾)
end / right 500 400 300 右(文書の末尾)

direction: rtl を親に付けた場合も、flex-start の箱1 は 500px、つまり右端から並びました。flex-start は「flex の主軸の先頭」、start は「文字を書き始める側」です。

justify-contentとalign-itemsの違い

この節では、いちばんよく混同される align-items との役割の違いが分かります。

justify-content は主軸の「並び全体」を、align-items は交差軸(主軸と直角の方向)で「各アイテム」をそろえます。row のときは justify-content が横、align-items が縦です。

justify-content(主軸)

親の余白をアイテムの間と外側にどう配るか

row なら横、column なら縦

値:center・space-between・space-evenly など

align-items(交差軸)

各アイテムを行の中でどの高さにそろえるか

row なら縦、column なら横

値:stretch(初期値)・center・flex-start・baseline

縦横の中央寄せは、両方を組み合わせて作ります。

.center-both {
  display: flex;
  justify-content: center;  /* 横(主軸)の中央 */
  align-items: center;      /* 縦(交差軸)の中央 */
  height: 300px;            /* 縦に余白が無いと align-items は見た目に出ない */
}

column にすると担当が入れ替わり、縦の中央が justify-content、横の中央が align-items になります。

flex-direction 横方向を決める 縦方向を決める
row(初期値) justify-content align-items
column align-items justify-content

flexbox 全体の使い方と早見表は、関連記事「CSS flexboxの使い方早見表|横並び・中央寄せのコピペ集と効かない原因」で扱っています。この記事は justify-content だけを深く掘ります。

align-content・justify-items・justify-selfとの違い

この節では、名前が似た4つのプロパティがそれぞれ何を動かすのかが一覧で分かります。

「content」が付くものは余白の配り方(並び全体)、「items」「self」が付くものは枠の中でのアイテムの位置、「justify」は主軸・インライン軸、「align」は交差軸・ブロック軸です。この2軸の組み合わせで6つに分かれます。

プロパティ 動かすもの flex grid
justify-content 主軸の余白(並び全体) 効く 効く(トラックを動かす)
align-content 交差軸の余白(折り返した行のまとまり) wrap のときだけ 効く(行トラックを動かす)
justify-items 枠の中のアイテムの横位置(既定値) 無視される 効く
align-items 枠(行)の中のアイテムの縦位置(既定値) 効く 効く
justify-self そのアイテムだけの横位置 無視される 効く
align-self そのアイテムだけの縦位置 効く 効く

「flex では無視される」は実測でも確かめました。幅 600px の flex 親で2番目の箱に justify-self: end を付けると、計算値は end になりましたが位置は 100px のまま(変化なし)でした。同じ指定を grid(150px のトラック3列)で行うと、2番目の箱は 150px から 200px へ動き、トラックの右端に寄りました。flex で特定の1つだけ右に寄せたいときは、justify-self ではなく margin-left: auto を使います。

wrap したときの align-content

flex-wrap: wrap で2行に折り返したとき、行のまとまりを縦に動かすのは align-items ではなく align-content です。高さ 200px の親に 250px の箱を4つ入れて(2行、各行の高さ 40px)計測しました。

指定 1行目の上端 2行目の上端 結果
(指定なし) 0 100 行が 100px ずつに引き伸ばされる(stretch)
align-items: center 30 130 各行の中で中央。2行のまとまりは動かない
align-content: center 60 100 2行のまとまりが親の中央(60〜140px)に来る
align-content: space-between 0 160 上端と下端に分かれる

「wrap したら縦中央にならない」というつまずきは、この表の2行目の状態です。align-items ではなく align-content: center に変えると直ります。

Gridでのjustify-contentの意味(トラックと中身)

この節では、grid で justify-content と justify-items が別のものを動かすことが数値で分かります。

grid の justify-content は「トラック(列の枠)」を親の中で動かし、justify-items は「枠の中のアイテム」を動かします。同じ「center」でも動く対象が違います。

justify-content:トラックごと動く

幅 600px の親に grid-template-columns: repeat(3, 100px)(合計 300px)を指定し、余白 300px を justify-content で配りました。結果は flex の表と1px の違いもなく一致しました。

justify-content(grid) 箱1 箱2 箱3
start / normal 0 100 200
center 150 250 350
end 300 400 500
space-between 0 250 500
space-around 50 250 450
space-evenly 75 250 425

ただし grid には効かない条件があります。列を 1fr や auto で作ると、トラックが親の幅いっぱいに伸びて余白が 0 になり、justify-content は見た目に出ません。justify-content を使うのは、px や max-content のように幅が決まった列のときです。

justify-items:枠の中で動く

列を repeat(3, 150px)(枠 150px、箱 100px)にして justify-items を当てた結果です。箱はそれぞれの枠の中で動き、枠自体は 0・150・300px から動きません。

justify-items 箱1 箱2 箱3 箱の幅
start 0 150 300 100px
center 25 175 325 100px
end 50 200 350 100px
stretch(幅 auto の箱) 0 150 300 150px に伸びる

幅を指定した箱(100px)は stretch でも伸びず、幅 auto の箱だけが 150px に伸びました。grid の初期値 normal は「伸ばせる箱は stretch、固有の幅を持つ箱は start」として働きます。

grid で「中央に寄らない」とき

やってはいけない1fr の列に justify-content: center を足して様子を見る(余白が無いので動かない)
→
代わりに枠ごと寄せたいなら列幅を px・max-content にして justify-content、中身だけ寄せたいなら justify-items: center

見分ける問い:「動かしたいのは枠か、枠の中身か」

grid の列の作り方(repeat・fr・minmax)は、関連記事「CSS Gridの使い方|repeat・fr・minmaxとコピペ用レイアウト集」で扱っています。flex と grid のどちらを選ぶかは、関連記事「FlexboxとGridの使い分け|同じUIを両方で作り3つの画面幅で実測比較」で扱っています。

gapとjustify-contentの併用(実測)

この節では、gap を指定したときに justify-content の余白がどう計算されるかが分かります。

gap は先に確保され、残った余白を justify-content が配ります。幅 600px・100px×3 に gap: 20px を足すと、配れる余白は 600−300−40=260px になります。

値(gap: 20px) 箱1 箱2 箱3 計算
flex-start 0 120 240 隙間は gap の 20px だけ
center 130 250 370 260÷2=130
space-between 0 250 500 隙間 150px(gap 20 を含む)
space-around 43.33 250 456.66 260÷6=43.33
space-evenly 65 250 435 260÷4=65

grid に column-gap: 20px を付けた場合も、start・center・space-between・space-evenly の結果は上の表と同じ値でした。

使い分けの目安は次のとおりです。

  • 隙間を固定したい(ボタンの間を必ず 16px にする)→ gap で指定し、justify-content は寄せる側(flex-start・center・flex-end)だけを決める。
  • 親の幅に合わせて隙間を伸び縮みさせたい(ナビの項目を両端にそろえる)→ space-between・space-evenly を使い、gap は「最低限の隙間」として小さめに入れる。

place-contentの短縮(align-contentとjustify-contentを1行で)

この節では、2つの content 系プロパティをまとめて書く place-content の書き方と、値の順番が分かります。

place-content は「align-content justify-content」の順で2つの値を取り、1つだけ書くと両方に同じ値が入ります。Chromium で計算値を読み取った結果です。

place-content の指定 align-content の計算値 justify-content の計算値
center center center
center space-between center space-between
space-between center space-between center
end start end start

grid で「中身を縦横とも中央に置く」最短の書き方は次の2行です。

.box {
  display: grid;
  place-content: center;  /* align-content: center; justify-content: center; と同じ */
}

flex の align-content は wrap した複数行にしか効かないため、1行の flex で縦中央にするには align-items: center が要ります。flex は justify-content + align-items、grid は place-content、と覚えておくと書き間違いが減ります。同じ短縮に place-items と place-self があります。

justify-contentが効かない原因6つ(再現と結果)

この節では、justify-content が効かない原因を6つに分けて、それぞれ Chromium で再現した結果が分かります。

6つとも「親が flex/grid でない」か「配る余白が無い」か「別の仕組みが先に余白を取っている」のどれかに当てはまります。再現はすべて幅 600px の親と 100px の箱で行い、箱1 の位置を読み取りました。

原因 再現した指定 箱1の位置 期待した位置
1. 親が flex/grid でない display: block + justify-content: center 0px(縦に積まれる) 150px
2. 親の幅が中身と同じ display: inline-flex + center 0px(親の幅が 300px) 150px
2'. アイテムが余白を使い切る 子に flex: 1 + center 0px(箱が 200px に伸びる) 150px
3. wrap で行のまとまりが動かない wrap + align-items: center 上端 30px(行の中だけ) 60px(align-content)
4. margin: auto が勝つ 箱1 に margin-left: auto + center 300px(右端へ) 150px
5. inline 要素に書いた span の親に justify-content: center 0px(display は inline のまま) 150px
6. はみ出して左が切れる 幅 300px に 100px×4 + center −50px(左 50px が見えない) 0px(safe center)

原因1:親が flex でも grid でもない

display: block の親に justify-content: center を書くと、計算値には center が入りますが、箱は 0px に縦積みのままでした。子に display: inline-block を付けて横に並べても、箱は 0・100・200px から動きません。justify-content はブロックレイアウトでは働かないためです。

対照として、同じ block の親に align-content: center を付けると、高さ 200px の中で箱が 40px から始まり、縦中央にそろいました。Chromium 153 ではブロックレイアウトでも align-content が効きますが、justify-content は効きません。横に寄せたいなら display: flex を付けます。

原因2:配る余白が無い

display: inline-flex や width: fit-content にすると、親の幅は中身と同じ 300px になり、余白が 0 なので center でも箱1 は 0px のままでした。子に flex: 1 を付けた場合も、3つの箱が 200px ずつに伸びて余白を使い切り、位置は 0・200・400px でした。アイテムが1つで width: 100% のときも同じです。

直し方は「余白を作る」ことです。親に幅を持たせる(display: flex か width を指定)、子の flex: 1 と width: 100% を外す、のどちらかです。

原因3:折り返した行のまとまりは align-content

flex-wrap: wrap で2行になると、縦中央にするのは align-items ではなく align-content です(前の節の表)。justify-content 自体は各行の中で効き続けており、各行の箱1 は 50px(親 600px に 250px×2 の余白 100px を半分ずつ)でした。

原因4:margin: auto が余白を先に取る

箱1 に margin-left: auto を付けて justify-content: center にすると、3つの箱は 300・400・500px、つまり右端に寄りました。auto マージンは justify-content より先に余白を吸い取る決まりで、auto マージンが余白を取りきると justify-content の取り分は 0 になります。

全部の箱に margin: 0 auto を付けて justify-content: flex-end にした場合は、50・250・450px と space-around のような並びになり、flex-end は無視されました。margin を 0 8px のような固定値に変えると 260・376・492px となり、右端に寄りました。

/* 効かない例:auto マージンが余白を先に取る */
.item { margin: 0 auto; }
.row  { display: flex; justify-content: flex-end; }  /* 無視される */

/* 直した例:固定値にする、または auto を外す */
.item { margin: 0 8px; }

逆に、この性質を使って「左にロゴ、右にメニュー」を作れます。メニューだけに margin-left: auto を付けると、justify-content を書かなくても右端に寄ります。margin の効き方全般は、関連記事「CSS marginとpaddingの違い|相殺と効かない原因一覧」で扱っています。

原因5:inline 要素に書いている

span の親に justify-content: center だけを書くと、親の display は inline のままで、幅は中身の文字分(26.67px)しかなく、子の span も inline のまま並びました。同じ span の親に display: flex を足すと、display は flex、幅は 600px になり、子の span は block 扱いになって 150・250・350px の中央に並びました。

要素の種類(div か span か)は関係なく、display: flex があるかどうかで決まります。display の値ごとの違いは、関連記事「CSS displayの種類一覧|block・inline・noneの違い」で扱っています。

原因6:はみ出すと center で左が切れる(safe)

幅 300px の親に縮まない 100px の箱を4つ(合計 400px)入れて center にすると、箱1 は −50px、つまり左 50px が親の外に出ました。overflow: auto にしても scrollLeft の最小値は 0 で、左にはみ出した部分はスクロールしても見えませんでした。

指定(幅 300px に 400px 分) 箱1の位置 scrollWidth 左の見えない部分
center −50px 350px 50px
flex-end −100px — 100px
safe center 0px 400px 無し
safe flex-end 0px — 無し
space-around / space-evenly 0px — 無し(はみ出すと start 扱い)

safe を前に付けると、はみ出すときだけ start に切り替わり、収まるときは center のままです。column(高さ 100px に 60px×3)でも、center は −40px、safe center は 0px でした。grid でも同じ結果です(幅 200px に 100px×3 で、center は −50px、safe center は 0px)。横スクロールするカルーセルやタブで「中央寄せにしたら最初の項目が消えた」ときは、この原因です。

.tabs {
  display: flex;
  overflow-x: auto;
  justify-content: safe center;  /* 収まるときは中央、はみ出すと先頭から */
}

Chromium 153 では CSS.supports('justify-content', 'safe center') が true でした。対応していないブラウザーのために、flex-start を先に書いて safe center で上書きする書き方にしておくと、少なくとも左が切れることはありません。

効かないときの確かめ方(手順)

この節では、効かない原因を DevTools で順番に切り分ける手順が分かります。

原因6つは、親の display → 親の幅と余白 → 子の margin と flex → wrap の有無、の順に見ると数分で特定できます。

1

親要素の display を見る

DevTools の Elements で親を選び、Computed の display が flex・inline-flex・grid・inline-grid のどれかになっているかを見る。block や inline なら原因1・5。Styles で打ち消し線が付いていれば、別のルールに負けている。

原因1・5

2

親の幅と中身の幅を比べる

親にカーソルを合わせたときの枠の幅と、子を全部足した幅が同じなら余白が無い(原因2)。子に flex: 1・flex-grow・width: 100% が無いかも見る。

原因2

3

子の margin を見る

子の Computed で margin に auto があれば原因4。ボックスモデルの図で margin の欄が大きな数値になっていれば、そこが余白を吸っている。

原因4

4

flex-direction と wrap を見る

column なら justify-content は縦を動かしている(横は align-items)。wrap で2行以上なら縦のまとまりは align-content。

原因3・column

5

はみ出していないか見る

子の合計が親より大きく、center・flex-end で先頭が消えているなら原因6。safe を付けるか、flex-wrap: wrap で折り返す。

原因6

Chrome の DevTools では、Elements の flex コンテナーに付く「flex」バッジを押すと、主軸・交差軸と各アイテムの余白が重ねて表示されます。Styles パネルの display: flex の横にあるアイコンから開く flexbox エディターでは、justify-content や align-items の値をボタンで切り替えられます。どの値が合うかを試すときに使えます(Chrome for Developers「Inspect CSS flexbox」)。

どの値を使うかの判断表

この節では、作りたい並びから justify-content の値と組み合わせるプロパティを選べます。

「寄せる」なら位置の値、「散らす」なら space-系、「1つだけ別の場所」なら margin: auto です。

  1. 1全部を左(先頭)に詰める → 何も書かない(normal)隙間は gap で。flex-start を明示してもよい
  2. 2全部を中央に集める → centerはみ出す可能性があれば safe center
  3. 3全部を右(末尾)に寄せる → flex-end(end)column で下に寄せるときも flex-end。right は column で効かない
  4. 4両端にそろえて間を等間隔 → space-between1つだけになると左に寄る。ヘッダーのロゴとメニュー向き
  5. 5両端にも同じ隙間 → space-evenlyspace-around は端が半分になる。均等に見せたいなら evenly
  6. 61つだけ反対側に置く → その子に margin-left: autojustify-content は書かない(auto マージンが先に効く)
  7. 7grid の枠の中で寄せる → justify-items / justify-self枠ごと動かすなら justify-content(列幅が px のとき)
1

ヘッダー

justify-content: space-between か、メニューに margin-left: auto。

要素が1つになる可能性があるなら margin 方式

2

ボタンの並び

justify-content: flex-end + gap: 8px。

隙間は gap に任せる

3

カード一覧

flex-wrap: wrap + gap。寄せは justify-content: center。

最終行だけ中央になるのが嫌なら grid

4

横スクロールのタブ

overflow-x: auto + justify-content: safe center。

先頭が消えない

要素を中央に置く方法を目的別にまとめた早見表は、関連記事「CSS 中央寄せ|divを縦・横・上下左右に置く早見表と効かない原因10」で扱っています。

よくあるつまずきと見え方

この節では、エラーにはならないのに見た目が意図と違う典型を、DevTools でどう見えるかとあわせて確かめられます。

CSS はプロパティが効かなくてもエラーを出しません。手がかりは Computed の値と、Styles の打ち消し線・警告アイコンだけです。

つまずき DevTools での見え方 直し方
子要素に justify-content を書いた 子の Computed に値は出るが、位置は変わらない(親の Computed には無い) display: flex を持つ親に移す
justify-content: middle と書いた 無効な値として打ち消し線と警告アイコン。計算値は normal center に直す(middle は存在しない)
justify-contents と複数形で書いた プロパティ名が不明として打ち消し線 justify-content(単数)に直す
column なのに横に寄らない Computed の flex-direction が column 横は align-items で寄せる
テキストが箱の中で左のまま 箱は中央(150px)にあるが文字は箱の左端 箱に text-align: center(箱の中は別の仕組み)
::before を付けたら中央がずれた Elements に ::before がアイテムとして並ぶ 擬似要素も1つのアイテムになる。子要素側に付けるか content: none
space-between で2つ目を消したら左に寄った アイテムが1つ、計算値は space-between 1つでも中央にしたいなら space-evenly か center

テキストの件は実測でも確かめました。幅 300px の箱を center で置くと箱は 150px に来ますが、中の文字は箱の左端 150px から始まりました。箱に text-align: center を足すと文字は 284px(箱の中央)に動きました。justify-content が動かすのは箱で、箱の中の文字は text-align の担当です。擬似要素の件も、親に ::before(幅 30px)を付けて space-between にすると、箱は 120・310・500px となり、::before が0番目のアイテムとして左端を取っていました。

  • 1親に display: flex か grid があるComputed の display で確かめる。子に書いても効かない
  • 2親の中に配る余白があるinline-flex・fit-content・flex: 1・width: 100%・1fr の列は余白を 0 にする
  • 3子に margin: auto が無いauto マージンは justify-content より先に余白を取る
  • 4動かしたい方向が主軸であるcolumn なら縦が主軸。横は align-items。wrap の縦は align-content
  • 5はみ出すなら safe を付けているcenter・flex-end は先頭側が切れる。safe center で start に戻る
  • 6擬似要素と文字の位置を分けて考える::before はアイテム、箱の中の文字は text-align

よくある質問

この節では、justify-content について検索されることの多い疑問に短く答えます。

Q. justify-content と align-items はどちらが横でどちらが縦ですか。

A. flex-direction: row(初期値)なら justify-content が横、align-items が縦です。column にすると入れ替わります。「justify は主軸、align は交差軸」と覚えると、方向が変わっても迷いません。

Q. flex-start と start はどう違いますか。

A. 通常の横並びでは同じ結果(0・100・200px)でした。row-reverse や direction: rtl では、flex-start は主軸の先頭(右)、start は文書の先頭(左)に分かれます。flex だけで使うなら flex-start、grid と共通にしたいなら start が無難です。

Q. space-around と space-evenly はどちらを使えばよいですか。

A. 両端の余白を内側と同じにしたいなら space-evenly(75・250・425px)、両端を内側の半分にしたいなら space-around(50・250・450px)です。見た目を均等にしたい場面では space-evenly のほうが意図どおりになります。

Q. justify-content: center が効きません。

A. 親に display: flex(または grid)があるか、親に余白があるか、子に margin: auto が無いか、の順に確かめます。この3つで大半が見つかります。残りは column による軸の入れ替わり、wrap の align-content、はみ出しの safe です。

Q. grid で justify-content: center にしても動きません。

A. 列を 1fr や auto で作っていると、トラックが親いっぱいに伸びて余白が 0 になります。枠ごと寄せたいなら列幅を px や max-content にする、枠の中で中身を寄せたいなら justify-items: center を使います。

Q. 特定の1つだけ右に寄せたいときは。

A. その子要素に margin-left: auto を付けます。flex では justify-self が無視されるため使えません。grid なら justify-self: end が使えます。

Q. 中央寄せにしたら左が切れて見えなくなりました。

A. 中身が親より大きいときの center の仕様です。justify-content: safe center にすると、はみ出すときだけ先頭揃えに切り替わります。Chromium 153 で −50px が 0px になることを確かめました。

Q. justify-content はブロック要素(display: block)には使えませんか。

A. Chromium 153 で試した範囲では、block の親に書いても位置は変わりませんでした。同じ親で align-content: center は縦中央に効きました。横に寄せたいなら display: flex を付けるか、text-align: center(インラインの中身)や margin: 0 auto(幅のあるブロック)を使います。

Q. place-content の値の順番は。

A. align-content、justify-content の順です。place-content: center space-between と書くと、縦(align-content)が center、横(justify-content)が space-between になることを計算値で確かめました。

Q. アイテムを縦にも横にも中央にしたいときの最短の書き方は。

A. flex なら display: flex; justify-content: center; align-items: center; の3行、grid なら display: grid; place-content: center; の2行です。親に高さが無いと縦の余白が無く、縦中央は見た目に出ません。

まとめ

この節では、記事全体の要点を5つにまとめます。

  • justify-content は親要素に書き、主軸(flex は flex-direction の向き、grid は横)の余白を配るプロパティです。動かしているのは余白で、余白が 0 なら何も起きません。
  • 幅 600px に 100px×3 のとき、先頭の位置は center 150px・space-between 0px・space-around 50px・space-evenly 75px でした。真ん中の箱はどれも 250px です。
  • align-items は交差軸の各アイテム、align-content は折り返した行のまとまり、justify-items・justify-self は grid の枠の中の位置を決めます。flex では justify-items・justify-self は無視されます。
  • 効かない原因6つは、親が flex/grid でない・余白が無い・wrap で align-content・margin: auto が先に取る・inline 要素のまま・はみ出して先頭が切れる、です。順に DevTools の Computed で確かめます。
  • はみ出す可能性があるときは safe center、1つだけ反対側に置くなら margin-left: auto、grid の縦横中央は place-content: center と覚えておくと、書き直しが減ります。

参考・出典

確認日はいずれも 2026年10月29日です。

  • MDN「justify-content」:https://developer.mozilla.org/ja/docs/Web/CSS/Reference/Properties/justify-content
  • MDN「justify-items」:https://developer.mozilla.org/ja/docs/Web/CSS/Reference/Properties/justify-items
  • MDN「align-items」:https://developer.mozilla.org/ja/docs/Web/CSS/Reference/Properties/align-items
  • MDN「align-content」:https://developer.mozilla.org/ja/docs/Web/CSS/Reference/Properties/align-content
  • MDN「place-content」:https://developer.mozilla.org/ja/docs/Web/CSS/Reference/Properties/place-content
  • MDN「フレックスボックスでのボックス配置」:https://developer.mozilla.org/ja/docs/Web/CSS/Guides/Box_alignment/In_flexbox
  • MDN「グリッドレイアウトでのボックス配置」:https://developer.mozilla.org/ja/docs/Web/CSS/Guides/Box_alignment/In_grid_layout
  • W3C「CSS Box Alignment Module Level 3」:https://www.w3.org/TR/css-align-3/
  • W3C「CSS Flexible Box Layout Module Level 1」8.2 Axis Alignment: the justify-content property:https://www.w3.org/TR/css-flexbox-1/#justify-content-property
  • Chrome for Developers「Inspect CSS flexbox」(DevTools の flex バッジと Layout パネル):https://developer.chrome.com/docs/devtools/css/flexbox
  • Playwright「Browsers」:https://playwright.dev/python/docs/browsers

本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。

(記載例)出典:株式会社RJC「justify-contentとは|align-itemsとの違いと効かない原因6つ」

株式会社RJC ― SI事業・SES事業・AI駆動開発。RJCは一緒に成長を楽しめる会社です。

WE ARE HIRING

RJCで一緒に開発しながら、
成長を楽しみませんか?

RJCは、Web・モバイル・AIを活用した開発プロジェクトで、テックリードやPM・PMOも活躍するシステム開発会社です。会社を知る、待遇を確かめる、話を聞いてみる。気になるところ見てみてください!

  • 127日年間休日
  • 12時間平均残業時間
  • 毎日ガチャ遊びココロも大切にする福利厚生。アマギフなどの賞品ラインナップ!

ほかにも、チケットレストラン、書籍読み放題、2年ごとの慰労報奨(休暇 or 金一封)、11期連続の黒字決算。

ABOUT RJC RJCがどんな会社か知る 考え方、研修、働き方、福利厚生、社員の前職まで。RJCのことが丸わかり! RJC丸わかりページへ JOB DESCRIPTION 仕事内容・待遇を見てみる 仕事内容、給与・待遇、選考の流れ。経験者も未経験も!応募前に知りたいこと、まとめました! 募集要項を見る ENTRY エントリーする エントリーは1〜2分・履歴書不要です。まずは話を聞いてみたい、という方でも歓迎です! エントリーフォームへ
参加受付中

AI駆動開発、 無料セミナー