実装が過去に変更されたため、flexboxの2つの主要な実装が知られています。このページでは、新旧の実装に関する背景情報を提供します。
Flexboxの実装の現在の状況についての良いチュートリアルをここで見つけました。
ページのHTML構造のサンプルコード(Codepenのデモはこちら):
<div class="page-wrap">
<section class="main-content" role="main">
Main content: first in source order
</section>
<nav class="main-nav" role="navigation">
Links
</nav>
<aside class="main-sidebar" role="complementary">
Sidebar
</aside>
</div>
page-wrap
サイドバーの2倍の大きさで3つに分割するにmain-nav
は、フレックスボックスを使用できます。もう1つの利点はmain-content
、DOM内の要素の位置が前にあることmain-nav
ですが、flexboxを使用すると、コンテンツの前に要素をレンダリングできます。これはスクリーンリーダーに役立ち、コンテンツが最初に読み取られます。
page-wrap
フレックスボックスコンテキストを作成する必要があります。このようにして、すべての子がフレックスボックスアイテムになります。
.page-wrap {
display: -webkit-box; /* OLD - iOS 6-, Safari 3.1-6 */
display: -moz-box; /* OLD - Firefox 19- (buggy but mostly works) */
display: -ms-flexbox; /* TWEENER - IE 10 */
display: -webkit-flex; /* NEW - Chrome */
display: flex; /* NEW, Spec - Opera 12.1, Firefox 20+ */
}
プロパティの順序は重要です。一部のブラウザは両方の実装をサポートしているため、古いプロパティの下に最新のプロパティを指定する必要があります。これは、display
-propertyのプレフィックスが付いていないためです。
アイテムの幅を追加するには:
.main-content {
width: 60%;
}
.main-nav,
.main-sidebar {
-webkit-box-flex: 1; /* OLD - iOS 6-, Safari 3.1-6 */
-moz-box-flex: 1; /* OLD - Firefox 19- */
width: 20%; /* For old syntax, otherwise collapses. */
-webkit-flex: 1; /* Chrome */
-ms-flex: 1; /* IE 10 */
flex: 1; /* NEW, Spec - Opera 12.1, Firefox 20+ */
}
最後に行う必要があるのは、アイテムの順序を変更することです。これはmain-nav
、main-content
.main-content {
-webkit-box-ordinal-group: 2; /* OLD - iOS 6-, Safari 3.1-6 */
-moz-box-ordinal-group: 2; /* OLD - Firefox 19- */
-ms-flex-order: 2; /* TWEENER - IE 10 */
-webkit-order: 2; /* NEW - Chrome */
order: 2; /* NEW, Spec - Opera 12.1, Firefox 20+ */
}
.main-nav {
-webkit-box-ordinal-group: 1;
-moz-box-ordinal-group: 1;
-ms-flex-order: 1;
-webkit-order: 1;
order: 1;
}
.main-sidebar {
-webkit-box-ordinal-group: 3;
-moz-box-ordinal-group: 3;
-ms-flex-order: 3;
-webkit-order: 3;
order: 3;
}