.sample { display:flex; justify-content:center; align-items:center; }
こんにちは、「ふ」です。
CSSを使った要素の左右中央揃えは簡単ですよね。
「「3/*インライン要素の左右中央*/」」 text-align:center;
「「3/*ブロック要素の左右中央*/」」 margin: 0 auto;
このへんを使えばすぐにできます。
一方、垂直方向のセンタリングはどうですか?
「ふ」もそうでしたが、marginなどの余白やpositionプロパティを駆使して調整していました。これまでは。
でも、
flexboxを使えば、上下左右に手軽に中央揃えにできることを知ったので紹介します。早く言ってよ、ですね。
まずは外側の要素を配置してみます。CSSでテキトーに高さと枠線をつけておきました。
■ HTML
<div class = "area"> </div>
■ CSS
.area { width:80%; height:20em; margin:0 auto; border:solid 1px; }
■ ブラウザ
ここに以下のCSSを追加。
CSS
.area { 「「3width:80%; height:20em; margin:0 auto; border:solid 1px; 」」 「「3/* 追加 */」」 「「1display:flex; justify-content:center; align-items:center;」」 }
あれこれと苦悩の末に活路を見い出し目的を達成するタイプの方は、すいません、こんだけです。
「area」の中に何か書いてみます。
■ HTML
<div class = "area"> <p style = "font-size:2em;"> 「「1何か」」 </p> </div>
■ ブラウザ
何か
はい、上下左右にセンタリングできました。
検証を深めるべく、次は画像を置いてみますか。
■ HTML
<div class = "area"> <p> 「「1」」 </p> </div>
■ ブラウザ
はい。
〜こんな感じで、親要素のCSSに3行のコードを追加するだけで、その内部に記述されたものが上下左右に中央揃えさせることができるんですね ♪
とは言え、折角このページを訪問していただいた(ありがとうございます!)方には理解を深めていただきたいので、次のセクションでプロパティの解説をさせてもらいます。
.area2 { display:flex; }
親要素に「display : flex」を指定すると、子要素の並び方向が定められます。
デフォルトでは「水平方向に左から右へ」です。この並び方向は主軸とよばれています。
justify-content:flex-start;「「3 /*初期値*/」」
このまま子要素を追加していくと、主軸に対して左寄せで順次並べられていきます。
これは「主軸に対して子要素をどのように配置するか」を定める justifiy-contentが初期値の「flex-start(主軸の最初から順番に)」に指定されているからです。
justify-content:「「1center」」;
justify-contentには主軸に対して真ん中寄せにする、「center」という値を定めることができます。
これが先程使った「左右中央寄せ」の方法です。
今度は「並び方向に垂直な成分」、現在の状態でいうと縦方向、こちらは「交差軸」と呼ばれています。
この交差軸への配置をコントロールするのが、align-itemsプロパティです。
align-items:stretch「「3 /*初期値*/」」
align-itemsの初期値は「stretch」です。
これは「子要素を交差軸に合わせて伸縮させる」という指定です。
ただし子要素のheightが明確に指定されていた場合、伸縮せずに「交差軸」の始点に揃えて配置されます。
align-items:「「1center」」
このalign-itemsにおいても「center(中央揃え)」が指定できます。
交差軸に対しても中央に揃えることができました。
主軸に対する「justify-content」、交差軸に対する「align-items」。両方を「center」にすることで、領域内の上下左右中央揃えを実現しています。
flexボックスを使った要素の上下左右中央寄せ。とても簡単にできてしまいました。
この方法を知る前は子要素の外側(margin,paddingなど)を調整することばかり考えていましたが、「軸」に合わせるという逆の発想。感銘。
今後どんどん使っていきたいと思います。ではまた〜 ♫
swift、web、ガジェットなど。役立つ情報や観ていてたのしいページを書いていきたいと思います。