2018.02.21

2018.02.22

コーディング

コピペでできるflexboxを用いたレイアウト

コピペでできるflexboxを用いたレイアウトのアイキャッチ画像

対応するブラウザも普及し、flexboxは非常に扱いやすくなってきました。
今回はコーディングする際に、よくあるレイアウトをflexboxを利用してコーディングする際のサンプルをご紹介します。

コピペでできるコーディング例

1.グローバルナビゲーションなどに利用する横1列のレイアウト

テキスト
テキストテキスト
テキスト
テキスト
テキスト

これは一番基本的な利用方法です。左右の余白をなくし、均等に配置するにはjustify-content: space-between;と設定します。
各要素の余白が均等になるように配置されます。

html

<div class="flexwrap flex01">
<div>テキスト</div>
<div>テキストテキスト</div>
<div>テキスト</div>
<div>テキスト</div>
<div>テキスト</div>
</div>

css

.flex01 {
  justify-content: space-between;
}

2.ヘッダーのように左にロゴを配置し他を右寄せに配置するレイアウト

ロゴ
テキスト
テキスト

これは1のマイナーチェンジですが、ヘッダーなどで左にロゴ右に電話番号や問い合わせボタンといったレイアウトでよくあるパターンです。
一つ目の要素にmargin-right:auto;を設定することで、残りの要素を右に配置します。

html

<div class="flexwrap flex02">
<div>ロゴ</div>
<div>テキスト</div>
<div>テキスト</div>
</div>

css

.flex02 {
  justify-content: space-between;
}
.flex02 > div:first-child {
  margin-right: auto;
}

3.一定の幅の横幅で要素を横にならべ、右端で折り返すレイアウト

テキスト
テキスト
テキスト
テキスト
テキスト

これも1のマイナーチェンジですが、ワードプレスなどの更新コンテンツの一覧表示などでよく用いられるレイアウトです。
親要素にflex-wrap: wrap;を設定しつつ、子要素にwidthの設定が必要となります。

html

<div class="flexwrap flex03">
<div>テキスト</div>
<div>テキスト</div>
<div>テキスト</div>
<div>テキスト</div>
<div>テキスト</div>
</div>

CSS

.flex03 {
  flex-wrap: wrap;
}
.flex03 > div {
  width: 30%;
  margin: 0 0 15px 5%;
}
.flex03 > div:nth-child(3n+1) {
  margin-left: 0;
}

4.要素を右端で折り返しつつ中央揃えで配置するレイアウト

テキスト
テキスト
テキスト
テキスト
テキスト

これは3のマイナーチェンジです。これはほとんどの場合5つの要素を2列で表示する時にしか使用しません。

html

<div class="flexwrap flex04">
<div>テキスト</div>
<div>テキスト</div>
<div>テキスト</div>
<div>テキスト</div>
<div>テキスト</div>
</div>

css

.flex04 {
  justify-content: center;
  flex-wrap: wrap;
}
.flex04 > div {
  width: 30%;
  margin: 0 0 15px 5%;
}
.flex04 > div:nth-child(3n+1) {
  margin-left: 0;
}

5.右にナビゲーションを配置した2カラムレイアウト

コンテンツ
  • ナビゲーション
  • ナビゲーション
  • ナビゲーション
  • ナビゲーション
  • ナビゲーション

2カラムレイアウトでよくあるものです。各要素に横幅を設定することで、任意の横幅のボックスをレイアウトできます。

html

<div class="flexwrap flex05">
<div>コンテンツ</div>
<div>
<ul>
<li>ナビゲーション</li>
<li>ナビゲーション</li>
<li>ナビゲーション</li>
<li>ナビゲーション</li>
<li>ナビゲーション</li>
</ul>
</div>
</div>

css

.flex05 {
  justify-content: space-between;
}
.flex05 > div:first-child {
  width: 70%;
}
.flex05 > div:nth-child(2) {
  width: 25%;
}

6.右にナビゲーションを配置した2カラムレイアウト

コンテンツ
  • ナビゲーション
  • ナビゲーション
  • ナビゲーション
  • ナビゲーション
  • ナビゲーション

これは5と一見同じに見えますが5と6はhtmlは同一でcssのみが異なります。htmlのソースコードの順として、コンテンツの情報をナビゲーションの情報よりも早く記述をしたいので、CSSで表示順を制御しています。

html

<div class="flexwrap flex06">
<div>コンテンツ</div>
<div>
<ul>
<li>ナビゲーション</li>
<li>ナビゲーション</li>
<li>ナビゲーション</li>
<li>ナビゲーション</li>
<li>ナビゲーション</li>
</ul>
</div>
</div>

css

  .flex06 {
    justify-content: space-between;
  }
  .flex06 > div:first-child {
    width: 70%;
    order: 2;
  }
  .flex06 > div:nth-child(2) {
    width: 25%;
    order: 1;
  }

7.左右にナビゲーションを配置した3カラムレイアウト

コンテンツ
  • ナビゲーション
  • ナビゲーション
  • ナビゲーション
  • ナビゲーション
  • ナビゲーション
  • ナビゲーション
  • ナビゲーション
  • ナビゲーション
  • ナビゲーション
  • ナビゲーション

これも6と同じくhtmlではコンテンツを上部に記述し、ナビゲーションをそのあとに記述し、cssで表示順を制御しています。

html

<div class="flexwrap flex07">
<div>コンテンツ</div>
<div>
<ul>
<li>ナビゲーション</li>
<li>ナビゲーション</li>
<li>ナビゲーション</li>
<li>ナビゲーション</li>
<li>ナビゲーション</li>
</ul>
</div>
<div>
<ul>
<li>ナビゲーション</li>
<li>ナビゲーション</li>
<li>ナビゲーション</li>
<li>ナビゲーション</li>
<li>ナビゲーション</li>
</ul>
</div>
</div>

css

  .flex07 {
    justify-content: space-between;
  }
  .flex07 > div:first-child {
    width: 50%;
    order: 2;
  }
  .flex07 > div:nth-child(2) {
    width: 20%;
    order: 3;
  }
  .flex07 > div:nth-child(3) {
    width: 20%;
    order: 1;
  }

8.画像とテキストを組み合わせたボタン風のレイアウト

見出し見出し見出し

テキストテキストテキストテキストテキストテキスト

見出し見出し見出し

テキストテキストテキストテキストテキストテキスト

見出し見出し見出し

テキストテキストテキストテキストテキストテキスト

見出し見出し見出し

テキストテキストテキストテキストテキストテキスト

Webサイトではよくあるあしらいですね。ボタンなどによく用いられる画像とテキストを左右に配置したレイアウトです。
子要素にdisplay: flex;を設定することで、flexboxを使用したレイアウトの中でさらにflexboxを用いたレイアウトを設定することが可能です。

html

<div class="flexwrap flex08">
<div class="item">
<div>
</div>
<div>
<p class="tit">見出し見出し見出し</p>
<p>テキストテキストテキストテキストテキストテキスト</p>					
</div>
</div>
<div class="item">
<div>
</div>
<div>
<p class="tit">見出し見出し見出し</p>
<p>テキストテキストテキストテキストテキストテキスト</p>					
</div>
</div>
<div class="item">
<div>
</div>
<div>
<p class="tit">見出し見出し見出し</p>
<p>テキストテキストテキストテキストテキストテキスト</p>					
</div>
</div>
<div class="item">
<div>
</div>
<div>
<p class="tit">見出し見出し見出し</p>
<p>テキストテキストテキストテキストテキストテキスト</p>					
</div>
</div>
</div>

css

 .flex08 {
    justify-content: space-between;
    flex-wrap: wrap;
  }
  .flex08 .item {
    display: flex;
    width: 49%;
  }
  .flex08 .item:nth-child(n+3) {
    margin-top: 15px;
  }
  .flex08 .item > div:first-child {
    width: 100px;
    height: 100px;
    background: #ddd;
  }
  .flex08 .item > div:nth-child(2) {
    width: calc(100% - 115px);
    margin-left: 15px;
    text-align: left;
  }

9.天地中央に揃えたボタン風のレイアウト

見出し見出し見出し

テキストテキストテキストテキストテキストテキストテキストテキストテキストテキスト

見出し見出し見出し

テキストテキストテキストテキストテキストテキスト

見出し見出し見出し

テキストテキストテキストテキストテキストテキスト

見出し見出し見出し

テキストテキストテキストテキストテキストテキストテキストテキスト

8をベースに要素を天地中央に揃えたものです。親要素にalign-items: center;と設定することで、天地中央に子要素を揃えることができます。

html

<div class="flexwrap flex09">
<div class="item">
<div>
</div>
<div>
<p class="tit">見出し見出し見出し</p>
<p>テキストテキストテキストテキストテキストテキストテキストテキストテキストテキスト</p>	
</div>
</div>
<div class="item">
<div>
</div>
<div>
<p class="tit">見出し見出し見出し</p>
<p>テキストテキストテキストテキストテキストテキスト</p>					
</div>
</div>
<div class="item">
<div>
</div>
<div>
<p class="tit">見出し見出し見出し</p>
<p>テキストテキストテキストテキストテキストテキスト</p>					
</div>
</div>
<div class="item">
<div>
</div>
<div>
<p class="tit">見出し見出し見出し</p>
<p>テキストテキストテキストテキストテキストテキストテキストテキスト</p>					
</div>
</div>
</div>

css

.flex09 {
  justify-content: space-between;
  flex-wrap: wrap;
}
.flex09 .item {
  display: flex;
  width: 49%;
  align-items: center;
}
.flex09 .item:nth-child(n+3) {
  margin-top: 15px;
}
.flex09 .item > div:first-child {
  width: 100px;
  height: 100px;
  background: #ddd;
}
.flex09 .item > div:nth-child(2) {
  width: calc(100% - 115px);
  margin-left: 15px;
  text-align: left;
}

なお今回紹介したレイアウトはスマートフォンでの閲覧を100%考慮したスタイルではありません。スマートフォンでも快適に閲覧するためには、別途レスポンシブコーディングを行い、それぞれのデバイスに最適な設定をする必要があります。
いずれも実際のコーディングでよく使用するcssの設定です。使いこなして、効率よくコーディングを行ってください。

SHARE

この記事の筆者

Webクリエイター 古川 徹朗

Webクリエイター 古川 徹朗

Webに関する様々な知識を身に付け、理論的な問題解決を常に目指す頭脳派クリエイター。

WEBSITE DESIGN REQUEST

ホームページ制作・リニューアルの
ご相談はお気軽に

TEL 06-6537-9941 平日 9:00〜19:00

〒550-0012 大阪府大阪市西区立売堀2-5−41

ホームページ制作を相談する