DevToolBox無料
ブログ

CSS Flexbox チートシート:全プロパティを例で解説

10分by DevToolBox

CSS Flexboxは、モダンWeb開発で最も広く使用されているレイアウトシステムです。要素の整列、配置、並べ替えを強力かつ効率的に行えます。この完全なCSS Flexboxチートシートは、すべてのプロパティを実践的なコード例で解説します。

Flexboxジェネレーターでレイアウトをビジュアルに構築 →

コンテナプロパティ

Flexboxはフレックスコンテナから始まります。親要素にdisplay: flexを設定します。

display: flex | inline-flex

フレックスコンテナを定義します。

.flex-container {
  display: flex;        /* block-level flex container */
}

.inline-flex-container {
  display: inline-flex;  /* inline-level flex container */
}

flex-direction

主軸の方向を設定します。

.container {
  /* Main axis: left to right (default) */
  flex-direction: row;

  /* Main axis: right to left */
  flex-direction: row-reverse;

  /* Main axis: top to bottom */
  flex-direction: column;

  /* Main axis: bottom to top */
  flex-direction: column-reverse;
}
ValueMain AxisVisual Layout
rowHorizontal (left to right)[1] [2] [3]
row-reverseHorizontal (right to left)[3] [2] [1]
columnVertical (top to bottom)[1] / [2] / [3]
column-reverseVertical (bottom to top)[3] / [2] / [1]

justify-content

主軸に沿った要素の配置を制御します。

.container {
  display: flex;

  /* Pack items to the start (default) */
  justify-content: flex-start;
  /* Result: [1][2][3]              */

  /* Center items */
  justify-content: center;
  /* Result:       [1][2][3]        */

  /* Pack items to the end */
  justify-content: flex-end;
  /* Result:              [1][2][3] */

  /* Equal space between items */
  justify-content: space-between;
  /* Result: [1]     [2]     [3]   */

  /* Equal space around items */
  justify-content: space-around;
  /* Result:  [1]   [2]   [3]     */

  /* Equal space between and around items */
  justify-content: space-evenly;
  /* Result:   [1]   [2]   [3]    */
}

align-items

交差軸に沿った要素の整列を制御します。

.container {
  display: flex;
  height: 200px;

  /* Stretch to fill container (default) */
  align-items: stretch;

  /* Align to the top */
  align-items: flex-start;

  /* Align to the center */
  align-items: center;

  /* Align to the bottom */
  align-items: flex-end;

  /* Align by text baseline */
  align-items: baseline;
}
ValueBehavior
stretchItems stretch to fill the container height (default)
flex-startItems align to the top of the container
centerItems are vertically centered
flex-endItems align to the bottom of the container
baselineItems align by their text baseline

flex-wrap

要素の折り返しを制御します。

.container {
  display: flex;

  /* All items on one line (default) — may overflow */
  flex-wrap: nowrap;

  /* Items wrap to next line when needed */
  flex-wrap: wrap;

  /* Items wrap in reverse order */
  flex-wrap: wrap-reverse;
}

/* Shorthand: flex-flow combines direction + wrap */
.container {
  flex-flow: row wrap;         /* same as flex-direction: row + flex-wrap: wrap */
  flex-flow: column nowrap;    /* column direction, no wrapping */
}

align-content

複数行の場合の行間スペースを制御します。

.container {
  display: flex;
  flex-wrap: wrap;
  height: 400px;

  /* Pack lines to the start */
  align-content: flex-start;

  /* Center lines */
  align-content: center;

  /* Pack lines to the end */
  align-content: flex-end;

  /* Equal space between lines */
  align-content: space-between;

  /* Equal space around lines */
  align-content: space-around;

  /* Lines stretch to fill container (default) */
  align-content: stretch;
}

gap, row-gap, column-gap

フレックス要素間のスペースを制御します。

.container {
  display: flex;
  flex-wrap: wrap;

  /* Equal gap in both directions */
  gap: 16px;

  /* Different row and column gaps */
  gap: 20px 12px;         /* row-gap: 20px, column-gap: 12px */

  /* Individual properties */
  row-gap: 20px;
  column-gap: 12px;
}

/* Example: card grid with gap */
.card-grid {
  display: flex;
  flex-wrap: wrap;
  gap: 24px;
}
.card-grid > .card {
  flex: 1 1 300px;  /* grow, shrink, min 300px */
}

アイテムプロパティ

これらのプロパティは個々のフレックスアイテムに設定します。

order

視覚的な順序を制御します。デフォルトは0。

.item-a { order: 2; }  /* appears third */
.item-b { order: -1; } /* appears first */
.item-c { order: 0; }  /* appears second (default) */

/* Visual result: [B] [C] [A]
   DOM order:     A    B    C
   Sorted order: -1    0    2  */

flex-grow

要素の拡大比率を定義します。デフォルトは0。

/* All items same size — share space equally */
.item { flex-grow: 1; }

/* Item B takes twice the extra space */
.item-a { flex-grow: 1; }
.item-b { flex-grow: 2; }
.item-c { flex-grow: 1; }
/* If 200px extra: A gets 50px, B gets 100px, C gets 50px */

/* Only item B grows to fill remaining space */
.item-a { flex-grow: 0; width: 100px; }
.item-b { flex-grow: 1; }
.item-c { flex-grow: 0; width: 100px; }
/* Result: [100px][    fill    ][100px] */

flex-shrink

要素の縮小比率を定義します。デフォルトは1。

/* Default: all items shrink equally */
.item { flex-shrink: 1; }

/* Prevent an item from shrinking */
.sidebar {
  flex-shrink: 0;
  width: 250px;  /* stays at 250px even when container is small */
}

/* Item A shrinks twice as fast */
.item-a { flex-shrink: 2; width: 300px; }
.item-b { flex-shrink: 1; width: 300px; }
/* If 100px must be removed: A loses ~67px, B loses ~33px */

flex-basis

スペース配分前の初期サイズを設定します。

.item {
  /* Use item's content size (default) */
  flex-basis: auto;

  /* Fixed starting size */
  flex-basis: 200px;

  /* Percentage of container */
  flex-basis: 25%;

  /* Use content's intrinsic size */
  flex-basis: content;

  /* Zero basis — ignore content size for space distribution */
  flex-basis: 0;
}

/* flex-basis vs width:
   - flex-basis sets the initial size BEFORE grow/shrink
   - width sets a fixed size
   - flex-basis is relative to the main axis
   - If both are set, flex-basis wins */

flex(ショートハンド)

flex-growflex-shrinkflex-basisのショートハンド。

/* flex: <grow> <shrink> <basis> */

.item { flex: 0 1 auto; }    /* default: don't grow, can shrink, auto basis */
.item { flex: 1; }           /* same as flex: 1 1 0%  — grow equally */
.item { flex: auto; }        /* same as flex: 1 1 auto — grow based on content */
.item { flex: none; }        /* same as flex: 0 0 auto — fully inflexible */
.item { flex: 2; }           /* same as flex: 2 1 0%  — grows 2x */
.item { flex: 1 0 300px; }   /* grow, don't shrink, start at 300px */
ShorthandEquivalentUse Case
flex: 1flex: 1 1 0%Equal-width items
flex: autoflex: 1 1 autoItems size by content then share space
flex: noneflex: 0 0 autoFixed-size item (no grow or shrink)
flex: 0 1 autodefaultDefault behavior
flex: 1 0 300pxgrow from 300px, never shrinkResponsive card with min-width

align-self

コンテナのalign-itemsを個別に上書きします。

.container {
  display: flex;
  align-items: flex-start;  /* all items at top */
  height: 200px;
}

.special-item {
  align-self: center;       /* this item centered vertically */
}

/* Values: auto | flex-start | flex-end | center | baseline | stretch */
.item-a { align-self: flex-start; }  /* top */
.item-b { align-self: center; }      /* middle */
.item-c { align-self: flex-end; }    /* bottom */
.item-d { align-self: stretch; }     /* full height */

一般的なレイアウトパターン

実際のプロジェクトで最もよく使われるFlexboxレイアウトパターン。

要素のセンタリング

Flexboxでセンタリングが簡単に。

/* Horizontal centering */
.center-horizontal {
  display: flex;
  justify-content: center;
}

/* Vertical centering */
.center-vertical {
  display: flex;
  align-items: center;
  height: 100vh;
}

/* Perfect centering (both axes) */
.center-both {
  display: flex;
  justify-content: center;
  align-items: center;
  height: 100vh;
}

/* Alternative: center with margin auto */
.center-auto {
  display: flex;
  height: 100vh;
}
.center-auto > .child {
  margin: auto;  /* centers in both axes */
}

ナビゲーションバー

クラシックなレスポンシブナビバー。

/* Basic navbar: logo left, links right */
.navbar {
  display: flex;
  justify-content: space-between;
  align-items: center;
  padding: 0 24px;
  height: 64px;
}

.navbar .logo {
  flex-shrink: 0;
}

.navbar .nav-links {
  display: flex;
  gap: 24px;
  list-style: none;
}

/* Navbar with center section */
.navbar-3 {
  display: flex;
  align-items: center;
  padding: 0 24px;
}
.navbar-3 .left   { flex: 1; }
.navbar-3 .center { flex: 0; white-space: nowrap; }
.navbar-3 .right  { flex: 1; display: flex; justify-content: flex-end; }

カードグリッド

折り返し付きのレスポンシブカードレイアウト。

/* Responsive card grid */
.card-grid {
  display: flex;
  flex-wrap: wrap;
  gap: 24px;
}

.card {
  flex: 1 1 300px;   /* grow, shrink, min 300px */
  max-width: 400px;
}

/* Cards with equal height */
.card-grid-equal {
  display: flex;
  flex-wrap: wrap;
  gap: 24px;
}

.card-equal {
  flex: 1 1 300px;
  display: flex;
  flex-direction: column;
}

.card-equal .card-body {
  flex: 1;           /* body fills remaining height */
}

.card-equal .card-footer {
  margin-top: auto;  /* footer pushed to bottom */
}

スティッキーフッター

コンテンツが少なくてもフッターが画面下部に。

/* Sticky footer layout */
body {
  display: flex;
  flex-direction: column;
  min-height: 100vh;
  margin: 0;
}

header {
  flex-shrink: 0;  /* fixed height header */
}

main {
  flex: 1;         /* takes all remaining space */
}

footer {
  flex-shrink: 0;  /* fixed height footer */
}

/* HTML structure:
   <body>
     <header>...</header>
     <main>...</main>
     <footer>...</footer>
   </body>
*/

ホーリーグレイルレイアウト

クラシックな3カラムレイアウト。

/* Holy grail layout */
.page {
  display: flex;
  flex-direction: column;
  min-height: 100vh;
}

.page > header,
.page > footer {
  flex-shrink: 0;
}

.page > .content {
  flex: 1;
  display: flex;
}

.page .sidebar-left {
  flex: 0 0 200px;   /* fixed 200px left sidebar */
  order: -1;         /* appears first visually */
}

.page .main {
  flex: 1;           /* main content fills remaining space */
  min-width: 0;      /* prevent overflow */
}

.page .sidebar-right {
  flex: 0 0 200px;   /* fixed 200px right sidebar */
}

/* HTML structure:
   <div class="page">
     <header>Header</header>
     <div class="content">
       <main class="main">Main Content</main>
       <aside class="sidebar-left">Left</aside>
       <aside class="sidebar-right">Right</aside>
     </div>
     <footer>Footer</footer>
   </div>
*/

Flexbox vs Grid:使い分け

両方とも強力ですが、異なる問題を解決します。

Flexboxが最適:

  • One-dimensional layouts (a single row or column)
  • Content-driven sizing (items determine their own width)
  • Dynamic, unknown number of items
  • Navigation bars and toolbars
  • Centering elements
  • Components where items should wrap naturally

CSS Gridが最適:

  • Two-dimensional layouts (rows and columns together)
  • Layout-driven sizing (the layout dictates item sizes)
  • Complex page layouts with header, sidebar, content, footer
  • Overlapping elements in a grid
  • When you need precise control over both axes simultaneously
  • Dashboard-style layouts with varying card sizes
/* Combining Flexbox and Grid */
.page {
  display: grid;
  grid-template-areas:
    "header header"
    "sidebar main"
    "footer footer";
  grid-template-columns: 250px 1fr;
  grid-template-rows: auto 1fr auto;
  min-height: 100vh;
}

/* Use Flexbox inside grid areas */
.page header {
  grid-area: header;
  display: flex;
  justify-content: space-between;
  align-items: center;
}

.page main {
  grid-area: main;
  display: flex;
  flex-wrap: wrap;
  gap: 16px;
  align-content: flex-start;
}

ブラウザサポート

Flexboxはすべてのモダンブラウザで優れたサポート。

FeatureChromeFirefoxSafariEdge
Basic Flexbox29+28+9+12+
flex-wrap29+28+9+12+
gap (in Flexbox)84+63+14.1+84+
row-gap / column-gap84+63+14.1+84+

Flexbox has over 99% global browser support. The only consideration is the gap property in flex contexts, which requires slightly newer browsers. For older browser support, use margins as a fallback:

/* Fallback for gap */
.container {
  display: flex;
  flex-wrap: wrap;
  margin: -8px;       /* negative margin to offset item margins */
}
.container > .item {
  margin: 8px;        /* acts like gap: 16px */
}

/* Modern approach with @supports */
@supports (gap: 16px) {
  .container {
    gap: 16px;
    margin: 0;
  }
  .container > .item {
    margin: 0;
  }
}

よくある質問

justify-contentとalign-itemsの違いは?

justify-contentは主軸、align-itemsは交差軸を制御します。flex-directionがcolumnの場合、軸が入れ替わります。

FlexboxとGridの使い分けは?

Flexboxは1Dレイアウト、Gridは2Dレイアウト向け。組み合わせも効果的です。

フレックス要素を等幅にするには?

全要素にflex: 1を設定。必要に応じてmin-width: 0も追加。

フレックス要素が縮小しないのはなぜ?

デフォルトのmin-width: autoが縮小を防ぎます。min-width: 0を設定してください。

Flexboxでgapは使えますか?

はい、すべてのモダンブラウザでFlexboxのgapがサポートされています。

CSS Flexboxはモダンレイアウトに不可欠です。インタラクティブツールで練習しましょう。

インタラクティブFlexboxジェネレーターを試す →

𝕏 Twitterin LinkedIn
この記事は役に立ちましたか?

最新情報を受け取る

毎週の開発ヒントと新ツール情報。

スパムなし。いつでも解除可能。

Try These Related Tools

📐Flexbox Generator{ }CSS Minifier / BeautifierpxCSS Unit Converter

Related Articles

JWTの仕組み:JSON Web Token完全ガイド

JWT認証の仕組み、header・payload・signature構造を理解する。

CSS Grid レイアウト チートシート

CSS Gridをビジュアルチートシートでマスター。grid-template、gap、auto-fit、minmax()、名前付きエリア、レスポンシブグリッドパターンを解説。