柔軟なボックスレイアウト
CSSフレキシブルボックスの登場により、Webデザイナーの多くの悪夢1が解決されました。最もハックなものの1つである垂直方向の配置。今では未知の高さでも可能です。
「20年のレイアウトハックが終わりに近づいています。おそらく明日ではなく、すぐに、そして私たちの残りの人生に。」
— CSS Legendary Eric Meyer at W3Conf 2013
フレキシブルボックス(または、Flexbox)は、レイアウト目的のために特別に設計された新しいレイアウトシステムです。仕様状態:
フレックスレイアウトは、表面的にはブロックレイアウトに似ています。フロートや列など、ブロックレイアウトで使用できるより複雑なテキストまたはドキュメント中心のプロパティの多くが欠けています。その代わりに、Webアプリケーションや複雑なWebページで必要になることが多い方法でスペースを分散し、コンテンツを調整するためのシンプルで強力なツールを利用できます。
この場合どのように役立ちますか?さて、見てみましょう。
垂直に配置された列
Twitter Bootstrapを使用する.row
と、いくつか.col-*
のsがあります。必要なのは、目的の.row
2をフレックスコンテナーボックスとして表示し、そのすべてのフレックスアイテム(列)をalign-items
プロパティによって垂直方向に配置することだけです。
ここに例 (注意してコメントを読んでください)
<div class="container">
<div class="row vertical-align"> <!--
^-- Additional class -->
<div class="col-xs-6"> ... </div>
<div class="col-xs-6"> ... </div>
</div>
</div>
.vertical-align {
display: flex;
align-items: center;
}
出力
色付きの領域は、列のパディングボックスを表示します。
明確にする align-items: center
8.3軸間整列:align-items
プロパティ
フレックスアイテムは、垂直方向に似ていますが、フレックスコンテナーの現在の行の交差軸に配置できますjustify-content
。align-items
匿名フレックスアイテムを含む、フレックスコンテナーのすべてのアイテムのデフォルトの配置を設定します。
align-items: center;
中心値によって、フレックスアイテムのマージンボックスは、ライン内の交差軸の中央に配置されます。
ビッグアラート
重要な注意#1: Twitter Bootstrapはwidth
、.col-xs-#
クラスにいずれかのクラスを指定しない限り、超小型デバイスの列の数を指定しません。
したがって、この特定のデモでは、列を明示的に.col-xs-*
指定するため、列をモバイルモードで適切に表示するためにクラスを使用しましたwidth
。
ただし、特定の画面サイズに変更するだけで、Flexboxレイアウトをオフにすることもできます。例えば:display: flex;
display: block;
/* Extra small devices (767px and down) */
@media (max-width: 767px) {
.row.vertical-align {
display: block; /* Turn off the flexible box layout */
}
}
または、次のように特定の画面サイズのみを指定する.vertical-align
こともできます。
/* Small devices (tablets, 768px and up) */
@media (min-width: 768px) {
.row.vertical-align {
display: flex;
align-items: center;
}
}
その場合、@ KevinNelsonのアプローチを使用しますます。
重要な注意#2:簡潔にするために、ベンダープレフィックスは省略されています。その間、フレックスボックスの構文が変更されました。新しい記述された構文は、古いバージョンのWebブラウザーでは機能しません(ただし、Internet Explorer 9ほど古いものではありません!FlexboxはInternet Explorer 10以降でサポートされています)。
これは、次のようなベンダー接頭辞付きのプロパティも使用する必要があることを意味します display: -webkit-box
、プロダクションモードでは、ます。
クリックすると 、「トグルコンパイルビュー」でデモ、あなたは(のおかげで接頭辞CSS宣言のバージョンがわかりますAutoprefixerを)。
コンテンツが垂直方向に整列したフルハイトの列
前のデモで見たように、列(フレックスアイテム)はコンテナー(フレックスコンテナーボックス、つまり.row
要素)ほど高くありません。
これはcenter
、align-items
プロパティに値を使用しているためです。デフォルト値はstretch
、アイテムが親要素の高さ全体を埋めることができるようにするためです。
それを修正するためにdisplay: flex;
、列に追加することもできます:
ここに例(ここでも、コメントを気にしてください)
.vertical-align {
display: flex;
flex-direction: row;
}
.vertical-align > [class^="col-"],
.vertical-align > [class*=" col-"] {
display: flex;
align-items: center; /* Align the flex-items vertically */
justify-content: center; /* Optional, to align inner flex-items
horizontally within the column */
}
出力
色付きの領域は、列のパディングボックスを表示します。
最後に、重要なことですが、ここでのデモとコードスニペットは、異なる目的を提供し、目標を達成するための最新のアプローチを提供することを目的としています。「ビッグアラートこのアプローチを実際のWebサイトまたはアプリケーションで使用する場合は」セクションに。
ブラウザのサポートを含めてさらに読むには、次のリソースが役立ちます。
1. div内の画像をレスポンシブな高さに垂直に配置します
。2. Twitter Bootstrapのデフォルトを変更しないようにするために、追加のクラスを使用することをお勧めします.row
。
div
、テキストはありません、このjsfiddle.net/corinem/Aj9H9のようなものですが、この例ではブートストラップを使用しません