• 最終更新日
  • CSS

CSSのflexを使ったサンプルをご紹介!Flexboxで実現できるレイアウトを確認

CSSのFlexbox(フレックスボックス)をそろそろ取り入れていこうかな~という方も多くなってきたんじゃないでしょうか?

主な目的としては要素の横並びに使われることが多いです。今まで横並びには「float」や「display:inline-block」がメインでしたがこれからは「display:flex」でしょうね。

Flexboxを使う際には便利な付属プロパティがいくつもありますので、今回はどんな効果が得られるのかをサンプルと合わせて一緒に確認していきましょう。

Flexboxの特徴

「flex」を使用する際は横並びにしたい要素の親要素に「display:flex」の指定をおこないますので注意してください。

「float」などは横並びにしたい要素に直接指定するので、それに慣れてる方はココが間違えやすいです。僕も横並びは「display;inline-block」ばっかりなので良くやらかします(笑)。

「flex」は現段階でもうほぼほぼどのブラウザにも対応しています。「Can I use…」のサイトで確認できるので「対応ブラウザ」から対応状況をご確認ください。

index.html

            
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Flexboxを使ってみよう</title>
  6. <style>
  7. * {
  8.   margin: 0;
  9.   padding: 0;
  10.   box-sizing: border-box
  11. }
  12.  
  13. html {
  14.   font-family: "Yu Gothic", "YuGothic", "Hiragino Kaku Gothic Pro", "Meiryo UI", "Meiryo", "MS PGothic", sans-serif;
  15.   font-size: 62.5%;
  16.   letter-spacing: 0.09em;
  17.   font-feature-settings: "palt"
  18. }
  19.  
  20. ul {
  21.   padding: 10px;
  22.   display: flex
  23. }
  24.  
  25. li {
  26.   width: 80px;
  27.   height: 80px;
  28.   color: #fff;
  29.   line-height: 80px;
  30.   text-align: center
  31. }
  32.  
  33. li:nth-child(1) {
  34.   background: #c72222
  35. }
  36.  
  37. li:nth-child(2) {
  38.   background: #74c722
  39. }
  40.  
  41. li:nth-child(3) {
  42.   background: #22c7c7
  43. }
  44.  
  45. li:nth-child(4) {
  46.   background: #7422c7
  47. }
  48. </style>
  49. </head>
  50. <body>
  51.   <ul>
  52.     <li>要素A</li>
  53.     <li>要素B</li>
  54.     <li>要素C</li>
  55.     <li>要素D</li>
  56.   </ul>
  57. </body>
  58. </html>

まずはベースとなるHTMLとCSSの設定を見ていきます。「display:flex」を使って4つの要素を横並びにしてみました。

  • 要素A
  • 要素B
  • 要素C
  • 要素D

わかりやすくするために灰色の背景色を追加しています。次項からはこのベースを使って「flex」に追加できる付属プロパティの効果を確認していきます。

flex-directionプロパティの使い方

「flex-direction」は要素の並び順を指定します。左右はもちろん上下の設定も可能です。

row
左から右へ並び順を指定します。デフォルトが「row」の状態です。
  • 要素A
  • 要素B
  • 要素C
  • 要素D
            
  1. ul {
  2.   flex-direction: row
  3. }
row-reverse
右から左へ並び順を指定します。
  • 要素A
  • 要素B
  • 要素C
  • 要素D
            
  1. ul {
  2.   flex-direction: row-reverse
  3. }
column
上から下へ並び順を指定します。
  • 要素A
  • 要素B
  • 要素C
  • 要素D
            
  1. ul {
  2.   flex-direction: column
  3. }
colmn-reverse
下から上へ並び順を指定します。
  • 要素A
  • 要素B
  • 要素C
  • 要素D
            
  1. ul {
  2.   flex-direction: column-reverse
  3. }

flex-wrapプロパティの使い方

「flex-wrap」は要素の折り返しを指定します。折り返しの設定は上から下に折り返す方法の他に、下から上へ折り返して表示する方法もあります。

折り返しが確認できるように値が「wrap」と「wrap-reverse」のサンプルには「li」の横幅を「80px」から「50%」に変更しています。

nowrap
折り返し無しを指定します。デフォルトが「nowrap」の状態です。
  • 要素A
  • 要素B
  • 要素C
  • 要素D
            
  1. ul {
  2.   flex-wrap: nowrap
  3. }
wrap
上から下への折り返しを指定します。要素は左上から表示されます。
  • 要素A
  • 要素B
  • 要素C
  • 要素D
            
  1. ul {
  2.   flex-wrap: wrap
  3. }
  4.  
  5. li {
  6.   width: 50%
  7. }
wrap-reverse
下から上への折り返しを指定します。要素は左下から表示されます。
  • 要素A
  • 要素B
  • 要素C
  • 要素D
            
  1. ul {
  2.   flex-wrap: wrap-reverse
  3. }
  4.  
  5. li {
  6.   width: 50%
  7. }

flex-flowプロパティの使い方

「flex-flow」は要素の並び順と折り返しを指定します。「flex-direction」と「flex-wrap」を合わせて記述する事ができます。

「flex-wrap:wrap」では左上から要素は右へ並び、折り返すと左下から右へ並びますが、「flex-direction:row-reverse」と合わせると逆に右上から左へ並べて折り返す形を作る事ができます。

  • 要素A
  • 要素B
  • 要素C
  • 要素D
            
  1. ul {
  2.   flex-flow: row-reverse wrap
  3. }
  4.  
  5. li {
  6.   width: 50%
  7. }

せっかくなんで「flex-direction:row-reverse」と「flex-wrap:wrap-reverse」を合わせた形も確認しておきましょう。

  • 要素A
  • 要素B
  • 要素C
  • 要素D
            
  1. ul {
  2.   flex-flow: row-reverse wrap-reverse
  3. }
  4.  
  5. li {
  6.   width: 50%
  7. }

「flex-flow」には「flex-directionの値」と「flex-wrapの値」の間に半角スペースを空けて記述します。記述順は「flex-directionの値」が先でも「flex-wrapの値」が先にきても構いません。

justify-contentプロパティの使い方

「justify-content」は要素の水平方向の位置を指定します。左揃え・中央揃え・右揃えの指定と水平方向の等間隔配置などが設定できます。

flex-start
左揃えを指定します。デフォルトが「flex-start」の状態です。
  • 要素A
  • 要素B
  • 要素C
  • 要素D
            
  1. ul {
  2.   justify-content: flex-start
  3. }
flex-end
右揃えを指定します。
  • 要素A
  • 要素B
  • 要素C
  • 要素D
            
  1. ul {
  2.   justify-content: flex-end
  3. }
center
中央揃えを指定します。
  • 要素A
  • 要素B
  • 要素C
  • 要素D
            
  1. ul {
  2.   justify-content: center
  3. }
space-between
両端の要素は余白を入れずにその他の要素は均等間隔で配置します。
  • 要素A
  • 要素B
  • 要素C
  • 要素D
            
  1. ul {
  2.   justify-content: space-between
  3. }
space-around
すべての要素を均等間隔で配置します。
  • 要素A
  • 要素B
  • 要素C
  • 要素D
            
  1. ul {
  2.   justify-content: space-around
  3. }

align-itemsプロパティの使い方

「align-items」は要素の垂直方向の位置を指定します。わかりやすくするために各要素の高さを変更しています。

要素A(赤)は高さ160px、要素B(黄緑)は高さ60px、要素C(水色)は高さ100px、要素D(紫)は高さ80pxです。「stretch」のサンプルだけ「li」の高さ指定は無しにしてflexの指定をしている「ul」の高さを160pxにしました。

stretch
flexboxの高さに合わせて要素の高さも拡張します。デフォルトが「stretch」の状態です。
  • 要素A
  • 要素B
  • 要素C
  • 要素D
            
  1. ul {
  2.   align-items: stretch
  3. }
flex-start
上揃えを指定します。
  • 要素A
  • 要素B
  • 要素C
  • 要素D
            
  1. ul {
  2.   align-items: flex-start
  3. }
sflex-end
下揃えを指定します。
  • 要素A
  • 要素B
  • 要素C
  • 要素D
            
  1. ul {
  2.   align-items: flex-end
  3. }
center
中央揃えを指定します。
  • 要素A
  • 要素B
  • 要素C
  • 要素D
            
  1. ul {
  2.   align-items: center
  3. }
baseline
ベースライン揃えを指定します。
  • 要素A
  • 要素B
  • 要素C
  • 要素D
            
  1. ul {
  2.   align-items: baseline
  3. }

「center」と「baseline」の区別が付きやすいように「baseline」の要素A(赤)を「line-height:200px」にしてみました。中央よりも少し下にテキストが配置されているんですが、このベースラインに合わせて他の要素も整列されるようになります。

align-contentプロパティの使い方

「align-content」は要素のクロス軸方向の位置を指定を指定します。折り返した要素との位置を調整しますので「flex-wrap: wrap」の設定も追加します。

こちらもわかりやすくするために「li」の横幅は「50%」にしてflexの指定をしている「ul」の高さを「260px」に変更しました。

stretch
flexboxの高さに合わせて要素の高さも拡張します。デフォルトが「stretch」の状態です。
  • 要素A
  • 要素B
  • 要素C
  • 要素D
            
  1. ul {
  2.   flex-wrap: wrap;
  3.   align-content: stretch
  4. }
  5.  
  6. li {
  7.   width: 50%
  8. }
flex-start
上揃えを指定します。
  • 要素A
  • 要素B
  • 要素C
  • 要素D
            
  1. ul {
  2.   flex-wrap: wrap;
  3.   align-content: flex-start
  4. }
  5.  
  6. li {
  7.   width: 50%
  8. }
flex-end
下揃えを指定します。
  • 要素A
  • 要素B
  • 要素C
  • 要素D
            
  1. ul {
  2.   flex-wrap: wrap;
  3.   align-content: flex-end
  4. }
  5.  
  6. li {
  7.   width: 50%
  8. }
center
中央揃えを指定します。
  • 要素A
  • 要素B
  • 要素C
  • 要素D
            
  1. ul {
  2.   flex-wrap: wrap;
  3.   align-content: center
  4. }
  5.  
  6. li {
  7.   width: 50%
  8. }
space-between
上端・下端の要素は余白を入れずにその他の要素は均等間隔で配置します。
  • 要素A
  • 要素B
  • 要素C
  • 要素D
            
  1. ul {
  2.   flex-wrap: wrap;
  3.   align-content: space-between
  4. }
  5.  
  6. li {
  7.   width: 50%
  8. }
space-around
すべての要素を均等間隔で配置します。
  • 要素A
  • 要素B
  • 要素C
  • 要素D
            
  1. ul {
  2.   flex-wrap: wrap;
  3.   align-content: space-around
  4. }
  5.  
  6. li {
  7.   width: 50%
  8. }

ホームページの簡単な作り方以外にも
お得な情報や日常を紹介するブログも是非どうぞ!
Webに関連するレンタルサーバーなどの特徴・料金比較や、
個人的に挑戦している資格取得についての勉強法やグルメなどを紹介しています。