home
twitter
ページトップへ
目次
  • フレックスボックスとは?
  • フレックスボックスにおける基本的な知識 主軸と交差軸
  • どんな順番で要素が並ぶか?
  • フレックスコンテナ(親要素)に設定できるプロパティ。
  • flex-direction:
  • flex-wrap:
  • flex-flow:
  • justify-content:
  • align-items:
  • align-content:
  • フレックスアイテム(子要素)に設定できるプロパティ。
  • align-self:
  • order:
  • flex-basis:
  • flex-grow:
  • flex-shrink:
  • flex:
  • まとめ
about
categories
page
archive
皇帝ペンギンブログ

2022/05/12 (更新日:2024/07/11)

【CSS】display: flexの使い方。【総まとめ】

Categories > CSSのフレックスボックス編
現在CSSの勉強中なんだけどフレックスボックスについての知識が分かりやすくどこかにまとまってないかな?

この記事はこの様な方を想定読者として書いています。

HTMLとCSSの基礎的な知識が備わっている方向けなので、もし自信がない方はまず、下記の記事をお読み下さい。HTML,CSSについてまとめてあります。

HTMLの書き方とよく使うタグの使い方【基礎文法】

関連記事

CSSの基本的な書き方とは?【初心者でもOK】

関連記事

この記事で得られる知識。

  • フレックスボックスに関する基礎知識。
  • その使い方。

僕は三年前にプログラミングの独学を開始して、今では個人でお仕事を取ってきて、実務をこなせるまでに成長しました。そんな僕が、CSSのフレックスボックスについて丁寧に解説しますので、ぜひ最後までお読み下さい。

また、下の動画でも「フレックスボックス」について詳しく解説しているので、一緒に実際にコードを書きながら学びたい方はこちらをどうぞ!
目次
非表示
  • フレックスボックスとは?
  • フレックスボックスにおける基本的な知識 主軸と交差軸
  • どんな順番で要素が並ぶか?
  • フレックスコンテナ(親要素)に設定できるプロパティ。
  • flex-direction:
  • flex-wrap:
  • flex-flow:
  • justify-content:
  • align-items:
  • align-content:
  • フレックスアイテム(子要素)に設定できるプロパティ。
  • align-self:
  • order:
  • flex-basis:
  • flex-grow:
  • flex-shrink:
  • flex:
  • まとめ

フレックスボックスとは?

フレックスボックスとは、CSSでdisplayプロパティの値をflexと指定することによって行うレイアウト方式のことを指します。

まずは簡単に図を使ってどんなレイアウト方式なのかをお伝えします。

フレックスボックスの概要

上の図の様に、フレックスコンテナに当たる要素にdisplya:flexと指定します。そして、その中に配置された要素がフレックスアイテムと呼ばれ、横並びにレイアウトすることができます。

※フレックスコンテナ直下の要素が横並びになりますが、孫要素までは影響しません。

フレックスボックスというレイアウト方式は、とても柔軟性が高く使いやすいので、レスポンシブデザインの際も大活躍します。

僕もよくフレックスボックスを使いますので、皆さんも使ってみて下さい。

また、CSSフレックスボックスレイアウト (CSS Flexible Box Layout)と呼ばれることもあります。

では詳しい使い方について書いています。

フレックスボックスにおける基本的な知識 主軸と交差軸

主軸と交差軸の解説。

まず基本的な知識からお伝えします。

フレックスボックスを使ってレイアウトを組む場合は、主軸方向と交差軸方向をしっかり認識しておく必要があります。なぜなら、この後で紹介する細かい指定は、「主軸方向に対して~」というように、二つの軸を使って指定するからです。

display:flexと指定することでフレックスボックスが利用可能で、それと同時に「主軸方向」と「交差軸方向」が決定します。

その方向は、「初期値」は図のように、左からの右への方向が「主軸方向」となり、上から下の方向が「交差軸方向」となります。この方向はプロパティを設定することでCSSから変更することができます。

どんな順番で要素が並ぶか?

フレックスアイテムが並べられる順番。

フレックスアイテム(子要素)は、上の図のように「主軸方向に沿って」並んでいきます。

フレックスコンテナ(親要素)に設定できるプロパティ。

フレックスコンテナ(親要素)に設定できるプロパティを紹介します。

まず、箇条書きで紹介します。

フレックスコンテナ(親要素)に設定できるプロパティ

  • flex-direction
  • flex-wrap
  • flex-flow
  • justify-content
  • align-items
  • align-content

では、図を使って、それらのプロパティの使い方について、詳しく丁寧に解説しますね。

flex-direction:

flex-directionの総括。

主軸方向は、「flex-direction」というプロパティによって設定できます。
初期値は「row」で、左から右への方向です。

フレックスボックスを使ってレイアウトを組む時は、「どこにいま主軸方向が向いているのか?」を常に意識するといいでしょう。

flex-directionのコード。

div {
    flex-direction: row;
}

※「flex-direction」はフレックスアイテムの親要素であるフレックスコンテナに設定することに注意して下さい。

row-reverse

flex-rowreverse

div {
    flex-direction: row-reverse;
}

このように、「flex-direction」の値を「row-reverse」とすると、主軸方向が「右からの左への方向」に設定できます。

column

flex-directionをcolumnに指定。

div {
    flex-direction: column;
}

このように、「flex-direction」の値を「column」とすることで、主軸方向が上から下、となります。

column-reverse

flex-directionをcolumn-reverseに設定。

div {
    flex-direction: column-reverse;
}

このように、「flex-direction」の値を「column-reverse」とすることで、主軸方向が下から上、となります。

flex-wrap:

div {
    flex-wrap: nowrap;
}

「flex-wrap」というプロパティに「wrap」とCSSで指定すると、要素が交差軸方向に折り返すようになります。

初期値は、「nowrap」であるため、交差軸方向に折り返してくれません。

初期値の「nowrap」のままだと親要素にスペースがない場合は、それぞれの要素が縮んで、一列に収まります。縮小率も設定できるので、それについては後述します。

wrap-reverse

flex-wrapの比較

div {
    flex-wrap: wrap-reverse;
}

「flex-wrap」に「wrap-reverse」を指定すると、折り返しかつ交差軸方向を反対に設定できます。

今まで、出てきた4つの主軸方向に対して、全て交差軸方向を反対にすると、合計8つのパターンができるということですね。

flex-flow:

flex-flowの書き方

先に紹介した「flex-direction」と「flex-wrap」を一括指定することができるプロパティがあります。

「flex-flow」を使うと、主軸方向の向きと折り返しの動作を同時に指定できます。

div {
    flex-flow: row wrap;
}

このように、指定することで、「flex-direction」には「row」を指定し、「flex-wrap」には「wrap」を指定することが可能です。

justify-content:

justify-contentの設定一覧

「justify-content」はCSSのプロパティの一つです。フレックスコンテナ内のフレックスアイテムをどう配置するか指定できます。

もっと詳しく書くと、「justify-content」は、主軸方向にスペースがある場合、「フレックスアイテムと主軸方向の余白をどう配置するのか」を指定することが可能です。

では、「justify-content」に設定できる値を、全てのブラウザで対応されいるかつ、よく使う値に絞って紹介します。これだけ知っていれば問題なくどんなレイアウトも組むことができるかと思います。

flex-start

justify-contentの値にflex-stratを指定。

div {
    display: flex;
    justify-content: flex-start;
}

「justify-content」の値に「flex-start」を指定することで、フレックスコンテナの中で主軸方向のスタート側にフレックスアイテムを詰めて配置することが可能です。

flex-end
div {
    display: flex;
    justify-content: flex-end;
}

「justify-content」の値に「flex-end」を指定することで、フレックスコンテナの中で主軸方向のエンド側にフレックスアイテムを寄せて配置することが可能です。

center
div {
    display: flex;
    justify-content: center;
}

「justify-content」の値に「center」を指定することで、フレックスコンテナの中で中心にフレックスアイテムを詰めて配置することが可能です。

space-between

space-betweenを設定。

div {
    display: flex;
    justify-content: space-between;
}

「justify-content」の値に「space-between」を指定することで、フレックスコンテナの中で、フレックスアイテム間に余白を均等にとって配置することが可能です。

space-around

space-arundを設定。

div {
    display: flex;
    justify-content: space-around;
}

「justify-content」の値に「space-around」を指定することで、フレックスコンテナの中で、フレックスアイテムの両サイドに均等に余白をとって配置することが可能です。

図にも書きましたが、要素の左右に均等に余白がそれぞれつくので、要素が隣り合わせの箇所が、端の余白に比べて、実質2倍の余白になる、ということですね。

align-items:

「align-items」はCSSのプロパティの一つで、直接の子要素である全てのフレックスアイテムの「align-self」の値を設定します。後から個別に、フレックスアイテムの方で、「align-self」を設定することで上書き可能です。

そして「align-items」では、「同じ行」に並ぶフレックスアイテムの交差軸方向の配置の指定ができます。

align-itemsに設定できる値。

  • flex-start
  • flex-end
  • center
  • stretch

全てではありませんが、上記の値が設定できます。全てのブラウザで対応しているものかつ、よく使うものを紹介しました。

それでは、個別に詳しく解説していきますね。

flex-start

align-itemsにflex-startを指定

div {
    display: flex;
    align-items: flex-start;
}

「align-items」を「flex-start」に設定すると、フレックスコンテナ内で、図のようにフレックスアイテムを交差軸方向のスタート側に詰めて配置することができます。

flex-end

align-itemsにflex-endを設定。

div {
    display: flex;
    align-items: flex-end;
}

「align-items」を「flex-end」に設定すると、フレックスコンテナ内で、図のようにフレックスアイテムを交差軸方向のエンド側に詰めて配置することができます。

center

align-itemsにcenterを設定。

フレックスコンテナ内で交差軸方向の中の行の中央に寄せてフレックスアイテムをが配置される。

stretch

align-itemsにstretchを設定。

div {
    display: flex;
    align-items: stretch;
}

「align-items」を「stretch」に設定すると、フレックスコンテナ内で、図のようにフレックスアイテムの高さを行の高さまで引き伸ばして配置することができます。

align-content:

「align-content」に値を設定することで、「フレックスアイテムの行」と余白をどう配置するかを指定することができます。

行の中の要素の配置は「align-items」でしたが、「align-content」を使うことで、行をどう配置するかを指定できるということですね。

align-contentに設定できる値。

  • flex-start
  • flex-end
  • center
  • space-between
  • space-around

これが全てではありませんが、上記の値が設定できます。全てのブラウザで対応しているものかつ、よく使うものを紹介しました。これだけ使いこなせれば、正直問題ありません。

それでは、個別に詳しく解説していきますね。

flex-start

align-contentにflex-startを設定。

div {
    display: flex;
    align-content: flex-start;
}

行を交差軸方向のスタート側に詰めて配置できます。

flex-end

align_content_flex_end

div {
    display: flex;
    align-content: flex-end;
}

図のように、フレックスアイテムの行自体を交差軸方向のエンド側(終点)に詰めて配置します。

center

align-contentの値をcenterに設定。

div {
    display: flex;
    align-content: center;
}

「align-content」の値を「space-between」に指定することで、フレックスコンテナの中央に、フレックスコンテナの行を寄せて配置できます。

上の図を見ると分かりやすいかと思います。

space-between

align-contentの値をspace-betweenに設定。

div {
    display: flex;
    align-content: space-between;
}

「align-content」の値を「center」に指定することで、フレックスコンテナを交差軸方向に余白がある場合、その余白が均等になるようにフレックスアイテムを配置できます。

図のような感じですね。

space-around

align-contentの値をspace-aroundに設定。

div {
    display: flex;
    align-content: space-around;
}

「align-content」の値を「space-around」に指定することで、フレックスコンテナを交差軸方向に余白がある場合、要素の両側に均等な余白が追加されるようにフレックスアイテムを配置できます。

つまり、要素と要素の間の余白は、フレックスコンテナの中のもっとも外側の余白の2倍となります。

フレックスアイテム(子要素)に設定できるプロパティ。

フレックスアイテムに設定できるプロパティも紹介します。

これだけ知っていれば、問題なくどんなレイアウトも組めるようになるかと思います。

まず箇条書きすると下記の通りです。

フレックスアイテムに設定できるプロパティ。

  • align-self:
  • order:
  • flex-basis:
  • flex-grow:
  • flex-shrink:
  • flex:

それでは詳しく解説していきます。

align-self:

「align-self」フレックスアイテムに設定することができるCSSのプロパティです。

個別の要素を交差軸方向にどう配置するか指定できます。

align-selfに設定する値。

  • flex-start
  • flex-end
  • center
  • stretch

などがあります。

それでは、それぞれについて図を使って丁寧に詳しく解説します。

flex-start

align-selfにflex-startを設定。

div {
    align-self: flex-start; 
}

「align-self」に「flex-start」と設定すると、「その行の中」で交差軸方向のスタート側に要素を詰めて配置することができます。

flex-end

align-selfにflex-endを設定。

div {
    align-self: flex-end; 
}

「align-self」に「flex-end」と設定すると、「その行の中」で交差軸方向のエンド側に要素を詰めて配置することができます。

center

align-selfにcenterを設定。

div {
    align-self: center; 
}

「align-self」に「center」と設定すると、「その行の中」で交差軸方向の中央に要素を寄せて配置することができます。

stretch

align-selfにstretchを設定。

div {
    align-self: stretch; 
}

「align-self」に「stretch」と設定すると、「その行の中」で交差軸方向の高さに要素を伸ばして配置することができます。

※ですが、フレックスアイテムにheightが設定されている時は要素が伸びないので注意が必要です。

order:

orderを設定

「order」プロパティを設定することで、順番を自由に入れ替えることができます。

「order」の初期値は「0」です。

なので、「-1」と設定することで1番先頭にもってくることができますね。

flex-basis:

flex-basisの初期値はauto

「flex-basis」を設定することで、その要素の幅を指定できます。

初期値は「auto」です。

autoの時は、widthが設定されていればその値で、されていなければコンテンツの幅となります。

widthが設定してあっても、フレックスボックス内では「flex-basis」で設定した値が優先で使われます。

※「max-width」や「min-width」が設定されている時は、それらが優先される。

flex-grow:

flex-grow

div {
    flex-grow: 0;
}

「flex-grow」を設定することで、コンテナの幅(主軸方向)が余っている時は、要素を引き伸ばすことが可能です。

初期値は「0」です。なので要素は伸びません。

図のように、本来なら80pxの余白が出る場合に下記の通りの指定をしました。

  • 要素1に「flex-grow」を0
  • 要素2に「flex-grow」を1
  • 要素3に「flex-grow」を1
  • 要素4に「flex-grow」を2

すると、余った余白を0:1:1:2で配分するので、

  • 要素1が+0px
  • 要素2が+20px
  • 要素3が+20px
  • 要素4が+40px

となります。

初期値が0なので、一つの要素にだけ「flex-grow」を「1」と指定して、その要素だけ可変幅にする手法がよく使われますね。

flex-shrink:

flex-shrink

div {
    flex-shrink: 1;
}

要素の幅がフレックスコンテナの幅(主軸方向)よりも大きくなる場合の、要素の縮小比率が指定できます。

初期値は「1」です。

負の値は無効です。

図の例では、100px四方の四角形が4つがフレックスアイテムで、320pxのフレックスコンテナに入っていますが、スペースが80p足りないという状況ですね。

フレックスアイテムが80px縮めば全て収まります。そこで縮小比率を0:0:1:1に指定しました。
すると、ボックス3とボックス4が40pxずつ縮んで、フレックスコンテナに収まるという結果になります。

初期値が「1」なので、縮ませたくない要素にだけ「0」を設定するといいかもしれませんね。

flex:

一括指定プロパティのflex

「flex」というCSSのプロパティで、3つのプロパティを一括で指定できます。

「flex」で一括指定できるプロパティ。

  • flex-grow
  • flex-shrink
  • flex-basis
div {
    flex: 0 1 auto;
}

初期値は「0 1 auto」です。flex-grow、flex-shrink、flex-basisの順番で指定します。

none
div {
    flex: none;
}

「flex」の値を「none」とすると、「0 0 auto」を指定したことになります。

省略が便利です。
div {
    flex: 1;
}

このように指定すると、flex-growの値が「1」で、flex-shrinkの値が「1」で(必ず)、flex-basisの値が「0」(必ず)となります。

注目してほしいのが、flex-basisの値が「0」になるということです。

初期値の「auto」だと要素の大きさはそれぞれあって、余ったフレックスコンテナの余白を分配する形になるので、要素の大きさ自体は何対何になるか分かりません。

ですが、flex-basisの値が「0」であることで、全てのフレックスアイテムに「flex」を設定した場合、その比率が自体が要素の幅となるので、使い勝手が良いためです。

まとめ

この記事では、CSSの「display」プロパティに「flex」を指定する方法を解説しました。

フレックスボックスは柔軟性が高く、とても使いやすいので、ぜひこの記事の内容を実際に試してみて下さい。

僕もよくフレックスボックスを使います。
また、下の動画でも「フレックスボックス」について詳しく解説しているので、一緒に実際にコードを書きながら学びたい方はこちらをどうぞ!

僕のTwitterでもプログラミング関連の呟きをしているので、ぜひ興味があれば。

自分のロゴ!

皇帝ペンギン

全力で、書きます。
少しでもお役に立てたら幸いです。
楽しんで読んで下さい 。-_- 。
よろしくお願いします!

x(旧twitter) youtube
Categories
  • トップへ
  • ITパスポート (1)
  • programming (168)
    • CSSのアニメーション編 (26)
    • CSSのグリッドレイアウト編 (1)
    • CSSのセレクター編 (58)
    • CSSのフレックスボックス編 (1)
    • CSSのメディアクエリー編 (7)
    • CSSの基本編 (34)
    • HTMLのformタグ編 (1)
    • HTMLの基本編 (3)
    • JavaScriptの入門編 (30)
    • JavaScriptの基本編 (5)
    • Web制作をする環境を整えよう! (1)
  • Uncategorized (23)
  • VScode (1)
  • おすすめ商品! (1)
  • クラロワ (2)
  • マーケティング (17)
  • 大学生活 (7)
  • 心理学 (9)
  • 映画 (1)
  • 法学 (4)
  • 経済学 (4)
  • 読書 (7)
Pages
  • プライバシーポリシー
  • 免責事項
  • プロフィール
Archive
  • 2025年3月 (1)
  • 2025年1月 (9)
  • 2024年12月 (13)
  • 2024年11月 (5)
  • 2024年10月 (10)
  • 2024年9月 (15)
  • 2024年8月 (5)
  • 2024年7月 (6)
  • 2024年6月 (5)
  • 2024年5月 (10)
  • 2024年4月 (24)
  • 2024年3月 (11)
  • 2024年2月 (6)
  • 2024年1月 (10)
  • 2023年12月 (4)
  • 2023年11月 (3)
  • 2023年10月 (2)
  • 2023年9月 (3)
  • 2023年8月 (6)
  • 2023年7月 (3)
  • 2023年6月 (8)
  • 2023年5月 (2)
  • 2023年3月 (1)
  • 2023年2月 (1)
  • 2022年10月 (2)
  • 2022年9月 (2)
  • 2022年8月 (8)
  • 2022年7月 (2)
  • 2022年6月 (6)
  • 2022年5月 (9)
  • 2022年4月 (2)
  • 2022年2月 (4)
  • 2021年12月 (1)
  • 2021年11月 (4)
  • 2021年10月 (8)
  • 2021年9月 (14)
  • 2021年8月 (6)
  • 2021年6月 (1)
  • 2021年5月 (2)
  • 2021年4月 (1)
  • 2021年3月 (1)
  • 2021年2月 (2)
  • 2020年10月 (1)
  • 2020年7月 (1)
  • 2020年4月 (1)
  • 2020年1月 (1)
  • 2019年12月 (2)
© Copyright Syuta Chiba, 2019 All Rights Reserved.