これからはFlexboxの時代!? 思わずテンションが上がるCSS3のレイアウトモジュール「Flexbox」(前編) | デザインってオモシロイ -MdN Design Interactive-

これからはFlexboxの時代!? 思わずテンションが上がるCSS3のレイアウトモジュール「Flexbox」(前編)

2024.4.26 FRI

【サイトリニューアル!】新サイトはこちらMdNについて

【連載】CPIエバンジェリストのお悩み相談室②
 これからはFlexboxの時代!?
 思わずテンションが上がってしまうCSS3のレイアウトモジュール「Flexbox」(前編)

2017年3月17日
TEXT:阿部 正幸(KDDIウェブコミュニケーションズ)
→ 後編はこちら

Webサイトのレイアウトは、これまで「float」を使いコーディングしていました。もともと「float」は、名前の通り指定した要素を浮遊(float)させて右や左へ配置させるためのプロパティのため、親要素の高さを回避して後続の要素が回り込んでしまうので、レイアウトをコーディングするには問題がありました。それを「clearfix」という裏技のようなテクニックで問題を回避してきたという経緯があります。

そんなレイアウトコーディングに苦労していた頃と比べ、昨今は、CSS3のレイアウトモジュールFlexbox(CSS Flexible Box Layout Module)が、レイアウトコーディングの主流になりつつあります。 それはなぜか? Flexboxが注目を浴びる具体的な例を見てみましょう。

補足:
Flexboxは、2016年5月26日にW3Cによる勧告候補となり仕様が確定し、各ブラウザへの対応が進んでいます。 リファレンス:https://www.w3.org/TR/2016/CR-css-flexbox-1-20160526/(英語)

利用できるブラウザは、主要ブラウザの最新版か、 IE10+、Android 4.4+より対応しています。これまでHTMLとCSSだけで表現できなかった複雑なレイアウトも、Flexboxを使うことで、簡単に表現できるようになります。

[これまでのfloatsとclearfixの例]

これまで利用していたfloatsとclearfixを使った例として、弊社が提供するレンタルサーバー「CPI」のサイトの「目的別からプランを選ぶ」のコードをご覧ください。1行目のブロック要素<div class=”container”>に 横幅(900px)を指定し、各アイテムである、リスト<li></li>に横幅 (300px) と、回り込みを指定する float: left;を指定しています。
<div class=”container”>
<ul>
<li>アイテム1</li>
<li>アイテム2</li>
<li>アイテム3</li>
</ul>
</div>
一見すると、このコードでも良さそうですが、画面幅に合わせてボックスの幅は変わりませんし、文字列の長さを一つだけ長くすると、レイアウトが崩れてしまいます。

[Flexboxで書き直す]

このコードをFlexboxで書き直すと下記のようになります。

<div class="container">
  <div class="item"><img> <a>Item</a> <img></div>
  <div class="item"><img> <a>Item</a> <img></div>
  <div class="item"><img> <a>Item</a> <img></div>
  <div class="item"><img> <a>Item</a> <img></div>
  <div class="item"><img> <a>Item</a> <img></div>
  <div class="item"><img> <a>Item</a> <img></div>
</div>

.container{

  display:flex;

  flex-wrap:wrap;

}

 

.item{

  flex:1 1 300px;

  /* アイテムの配置 */

  display:flex;

  align-items:center;

  justify-content:space-between;

}

この例では、文字列の長さや画面幅に応じてボックスサイズが可変します。Codepenで動作やソースコードが確認できます。

CodePen: https://codepen.io/abechiyo/pen/bqwJWK

作例でもわかるとおり、Flexboxを使うメリットは、レスポンシブ対応のレイアウトが少ないコードで表現できることです。Webサイトはさまざまなデバイスからアクセスされることが想定されるので、ボックスサイズの横幅固定はできるだけ避け、可変で制作したいところです。Flexboxを使うことで、レスポンシブに対応したレイアウトが簡単にコーディングできるようになったため、Flexboxが多く使われるようになりました。

またFlexboxを活用すると下記のようなレイアウトも簡単に実装できます。
●レスポンシブ対応のページネーション
 http://codepen.io/abechiyo/pen/YZwRvx

画面幅に合わせてページネーションが伸び縮みします。さらに画面幅を縮めると特定のページ番号が消えます。
ソースコード一部引用:  http://codepen.io/iamjustaman/pen/YPLPNR

ソースコード一部引用:
http://codepen.io/iamjustaman/pen/YPLPNR

◯利用シーン:
一覧ページなどで、ページ遷移するためのページング機能

◯Flexboxを使うメリット:
少ないコードで表現できる。画面幅に合わせて伸び縮みする。
●機能表などのボックスの下揃え
 http://codepen.io/abechiyo/pen/WprYaP

各価格のボックスを3つならべ、下揃えしています。
◯利用シーン:
価格リストなどの機能表

◯Flexboxを使うメリット:
各ボックスの高さを揃えたり、画面に合わせて左右幅が伸び縮みしたりします。ボックスの下揃えは、これまでJavaScriptを利用してボックスを下に揃えるか、親要素の背景画像を工夫して下揃えしているように見せるなどのテクニックが必要でした。Flexboxを使えば、JavaScriptや背景テクニックを使わなくても簡単に実現できます。
●ドラック&ドロップで入れ替わるボックス
 http://codepen.io/abechiyo/pen/aJdQXm

FlexboxのOrderを使い、各ボックスをドラックアンドドロップで入れ替えることができます。
◯利用シーン:
ニュースサイトなどで、好きなジャンルのニュースを画面上方に配置し、さらに並べ換えた情報をcookieに保存することで、次回以降もユーザーの好きなジャンルのニュースが画面上方に表示されるなど、さまざまなシーンでの利用が可能です。

◯Flexboxを使うメリット:
各BOXの並べ替えをorder プロパティを使うことで簡単に実装することができます。

補足:
今回の内容は2016年11月25日に開催された「神戸ITフェスティバル」で、「Good bye ~~ floats and “clearfix” hacks これからはFlexboxの時代」というタイトルで講演したものです。当日使用したスライドも公開していますので、合わせてご覧ください。
URL: http://shared-blog.kddi-web.com/sandbox/flexbox-s/

それでは次からFlexboxの使い方の基礎と、Flexboxの各プロパティを紹介いたします。


>>> 次ページへ   



[筆者プロフィール]
阿部 正幸(あべ まさゆき) | KDDIウェブコミュニケーションズ/エバンジェリスト
システム開発会社で大規模なシステム開発を経験後、Web制作会社でプログラマー兼ディレクターとして従事。その後、KDDIウェブコミュニケーションズに入社、レンタルサーバーCPIのプロダクトマネージャーに就任。ACE01、SmartReleaseをリリース後、現職の「エバンジェリスト」としてWeb制作に関する様々なイベントに登壇。Drupal(g.d.o Japan)日本コミュニティー、HTML5 funなどに所属し、OSSを世に広げる活動やWeb制作に関する情報を発信している。

twitter facebook このエントリーをはてなブックマークに追加 RSS
【サイトリニューアル!】新サイトはこちらMdNについて

この連載のすべての記事

アクセスランキング

8.30-9.5

MdN BOOKS|デザインの本

Pick upコンテンツ

現在