LoginSignup
9
10

More than 5 years have passed since last update.

CSS Flexboxを使おう

Last updated at Posted at 2016-12-12

はじめに

この記事は、 OIT Advent Calendar 2016の12日目の記事です。

Flexbox とは?

FlexboxはFlexible Box Layout Moduleの略です。

CSS3から導入されたレイアウトモジュール
floatにサヨナラを告げる機能です。

解説されつくされている感があります。
未だにfloatしてる人は考え直したほうがいいです。

基本的な使い方

親要素にflex指定するだけ。

.flexbox {
  display: flex;
}

やってみる

<ul>
  <li><p>List1</p></li>
    <li><p>List2</p></li>
    <li><p>List3</p></li>
    <li><p>List4</p></li>
    <li><p>List5</p></li>
</ul>

これだけだと

2016-12-12 (1).png

こうなりますが。

これに適当にflexboxすると。

ul {
  display: -webkit-flex;
  display: flex;
  list-style: none;
}

li {
  margin: 10px;
  padding: 20px;
  border-radius: 5px;
  line-hight: 1;
  color: #fff;
  background: #aaffaa;
}

li:first-child {
  background: #aabbcc;
}

li p {
  margin: 0;
  padding: 0;
}

2016-12-12 (2).png

こうなります。

横並びになります。

自動折り返し

上のままだと、ブラウザのスクリーンを小さくすると、

2016-12-12 (3).png

こうなります。

はみ出します。

flex-wrap

ここで紹介したいのが、flex-wrapです。

flex-wrap: wrap;
の1行を追加します。

ul {
  display: -webkit-flex;
  display: flex;
  list-style: none;
  flex-wrap: wrap; /* 折り返し */
}

li {
  margin: 10px;
  padding: 20px;
  border-radius: 5px;
  line-hight: 1;
  color: #fff;
  background: #aaffaa;
  flex-wrap: wrap;
}

li:first-child {
  background: #aabbcc;
}

li p {
  margin: 0;
  padding: 0;
}

2016-12-12 (5).png
2016-12-12 (6).png

なんかいい感じに折り返すようになりました。

Vertical Align(Flexboxの美味しいところ)

floatやJavaScriptで頑張っていたのがウソのように簡単。

以下の3つで設定できます。

  • align-items

flexコンテナ(親要素)に指定し、すべての子要素の垂直方向の配置を設定する。

  • align-self

flexアイテム(子要素)に指定し、個別に垂直方向の配置を設定する。

  • justify-content

flexコンテナ(親要素)に指定し、水平方向の配置を設定する。

ということで、次のように書けば。

.contents {
  display: -webkit-flex;
  display: flex;
  width: 800px;
  height: 400px;
  margin: 20px auto;
  background: #f3f3f2;
  border-radius: 5px;
  -webkit-justify-content: center;
  justify-content: center;
  -webkit-align-items: center;
  align-items: center;
}

.align {
  background: rgba(0, 0, 255, 0.3);
  -webkit-flex: none;
  flex: none;
}
<div class="contents">
    <div class="align">
        <p>floatを使っていた時代からは考えられないくらいに垂直中央揃えが楽だ。</p>
    </div>
</div>

2016-12-12 (7).png

こうなります。

Flexbox、最高では?

9
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
10