ウェブブラウザの最新版のヴァージョンや獲得シェアのパーセンテージがわかる「Outdated Browser」というサイトがあります。
「Google Chrome」、「Firefox」、「Internet Explorer」、「Safari」、「Opera」のそれぞれのデータをアコーディオン風の斬新なレイアウトで見やすく表示させています。
5つあるそれぞれの要素にマウスを重ねると、対象となったブラウザのボックスの横幅が広がります。
今日は、最新のCSS3のテクニックの1つ「flexbox」を使って、この「Outdated Browser」と同じレイアウトを再現する方法を紹介します。
ちなみに「flexbox」は「フレックスボックス」または「フレキシブルボックス」と表記されます。
HTMLの記述
まずはHTML部分の記述です。
<ul> <li>Google Chrome</li> <li>Mozilla Firefox</li> <li>InternetExplorer</li> <li>Apple Safari</li> <li>Opera</li> </ul>
ご覧のように何の変哲も無いリスト構造です。
デザイン部分はすべてCSS側で処理するのでシンプルなコードで済みますね。
CSS3の記述
続いてキモとなるCSSの記述です。
こちらも比較的シンプルな構造になっています。
* { margin:0; padding:0; } ul, li { list-style: none; } ul { display:-webkit-flex; display:-moz-flex; display:-ms-flex; display:-o-flex; display:flex; height:100vh; } li { -webkit-flex:1; -moz-flex:1; -ms-flex:1; -o-flex:1; flex:1; transition: -webkit-flex 500ms ease-out; transition: -moz-flex 500ms ease-out; transition: -ms-flex 500ms ease-out; transition: -o-flex 500ms ease-out; transition: flex 500ms ease-out; } li:hover { -webkit-flex:3; -moz-flex:3; -ms-flex:3; -o-flex:3; flex:3; }
「flex」を適応させるには、親要素に「display:flex;」を割り当て、子要素では「flex:x;」を指定して分割処理を行います。
なお、この「flexbox」は過去に大規模な仕様の変更が2度ほどあり、バージョンによって記述方法が異なります。
「display:-webkit-box;」や「display:-ms-flexbox;」などと記述するのは旧いバージョンの記述方法になり、最新版では上記のように「display:flex;」を使うようになっています。
参考サイト:CSS Flexible Box Layout Module Level 1
そして、実際に上記のコードを使って実装したサンプルが以下になります。
CSS3 Flexbox Accordion:ウェブデザイン・サンプル
フレックスボックス(flexbox)は未だ対応しているブラウザが限定されるようですが、ご確認いただいた通り、使いこなすと表現の幅が広がる大変に便利なCSSのテクニックになります。
「display:table;」や「display:inline;」などと共にまとめて一緒にして覚えてしまいましょう。