フレックスボックス:水平方向と垂直方向の中央配置
フレックスボックスを使用して、コンテナ内でdivを水平方向および垂直方向にセンタリングする方法。以下の例では、それぞれの数字を下に(列に)並べ、それを水平方向に中央に配置しています。
.flex-container {
padding: 0;
margin: 0;
list-style: none;
display: flex;
align-items: center;
justify-content: center;
}
row {
width: 100%;
}
.flex-item {
background: tomato;
padding: 5px;
width: 200px;
height: 150px;
margin: 10px;
line-height: 150px;
color: white;
font-weight: bold;
font-size: 3em;
text-align: center;
}
<div class="flex-container">
<div class="row">
<span class="flex-item">1</span>
</div>
<div class="row">
<span class="flex-item">2</span>
</div>
<div class="row">
<span class="flex-item">3</span>
</div>
<div class="row">
<span class="flex-item">4</span>
</div>
</div>
579
3
以下のようなものがいいのではないでしょうか。
デモはこちら: http://jsfiddle.net/audetwebdesign/tFscL/
高さや上下のパディングを正しく動作させたい場合は、
.flex-item
要素をブロックレベル(span
ではなくdiv
)にする必要があります。また、
.row
の幅を100%
ではなくauto
に設定してください。.flex-container` のプロパティは問題ありません。
.row
をビューポートの中央に配置したい場合は、
htmlと
bodyに 100% の高さを割り当て、
body` の余白をゼロにします。そうしないと、コンテナはコンテンツを囲むために必要な最小の高さを計算し、この例ではビューポートの高さよりも低くなります。
脚注:。 flex-flow
,
flex-direction,
flex-wrapプロパティがあれば、このデザインを簡単に実装できたかもしれません。.row
コンテナは、要素の周りに何らかのスタイル(背景画像やボーダーなど)を追加したい場合を除き、必要ないと思います。役に立つ情報源は、http://demo.agektmr.com/flexbox/ です。
Flexboxで要素を垂直・水平にセンタリングする方法
一般的なセンタリング方法を2つ紹介します。
1 つは垂直方向に整列したフレックスアイテム(
flex-direction: column
)用で、もう 1 つは水平方向に整列したフレックスアイテム(flex-direction: row
)用です。どちらの場合も、中心となるdivの高さは可変、未定義、不明など、何でも構いません。中心となるdivの高さは重要ではありません。
以下は両方のHTMLです。
CSS(装飾スタイルを除く
*フレックスアイテムを垂直方向に重ねた場合
のようになります。
[DEMO](http://jsfiddle.net/8o29y7pd/)
フレックスアイテムを横方向に重ねた場合:。
上記のコードから、
flex-direction
ルールを調整します。を参照してください。
[DEMO](http://jsfiddle.net/8o29y7pd/3/)
フレックスアイテムのコンテンツを中央に配置する
flex formatting contextの範囲は、親子関係に限定されます。子より先のフレックスコンテナの子孫は、フレックスレイアウトに参加せず、フレックスプロパティも無視されます。基本的に、フレックスのプロパティは子より先には継承されません。
したがって、子要素にフレックスプロパティを適用するには、常に親要素に
display: flex
またはdisplay: inline-flex
を適用する必要があります。フレックスアイテムに含まれるテキストやその他のコンテンツを垂直方向や水平方向にセンタリングするには、アイテムを(ネストした)フレックスコンテナにして、センタリングのルールを繰り返します。
詳細はこちら: https://stackoverflow.com/q/25311541/3597276
また、フレックスアイテムのコンテンツ要素に
margin: auto
を適用することもできます。フレックスの
auto
マージンについてはこちらをご覧ください。Methods for Aligning Flex Items (see box#56)をご覧ください。複数行のフレックスアイテムのセンタリング
フレックスコンテナに複数の行がある場合(折り返しがあるため)、交差軸の配置には
align-content
プロパティが必要になります。仕様書より:
詳細はこちら: https://stackoverflow.com/q/42613359/3597276
対応ブラウザ
フレックスボックスは、[IE < 10を除く]すべての主要ブラウザでサポートされています(http://caniuse.com/#search=flex)。Safari 8やIE10のような最近のブラウザのバージョンでは、[ベンダープレフィックス]を必要とするものがあります(https://developer.mozilla.org/en-US/docs/Glossary/Vendor_Prefix)。手っ取り早くプレフィックスを追加するには、[Autoprefixer](https://autoprefixer.github.io/)をご利用ください。詳しくは[この回答]( https://stackoverflow.com/a/35137869/3597276 )をご覧ください。
古いブラウザでのセンタリング対策
CSSのtableとpositionのプロパティを使った別のセンタリング方法については、こちらの回答をご覧ください: https://stackoverflow.com/a/31977476/3597276
重要なブラウザ固有の属性を使用することを忘れてはいけません。
align-items: center; -->
justify-content: center; -->
この2つのリンクを読めば、フレックスへの理解が深まるでしょう。 http://css-tricks.com/almanac/properties/j/justify-content/ と http://ptb2.me/flexbox/
がんばってください。