Flexboxを使ったマルチカラムレイアウトを作る場合、カラム間に「justify-content: space-between;」で均等に余白を空ける方法がありますが、

今回は、あえて「justify-content: space-between;」を使わずにmarginを使ってpx固定の余白を入れた場合のコードを説明していきます。

 

こんな感じのマルチカラムレイアウトを作ります。

Flexboxで作るマルチカラムレイアウト、marginで余白を固定

Flexboxで作るマルチカラムレイアウト【marginで余白を固定】

index.html

<section id="card">
  <div class="card__contents">
    <article class="card__block">
      <div><img src="images/card-img-01.jpg" alt=""></div>
      <h3>タイトル1</h3>
      <div>
        Lorem ipsum dolor sit amet, consectetur adipiscing earticlet.
      </div>
    </article>
    <article class="card__block">
      <div><img src="images/card-img-02.jpg" alt=""></div>
      <h3>タイトル2</h3>
      <div>
        Lorem ipsum dolor sit amet, consectetur adipiscing earticlet.
      </div>
    </article>
    <article class="card__block">
      <div><img src="images/card-img-03.jpg" alt=""></div>
      <h3>タイトル3</h3>
      <div>
        Lorem ipsum dolor sit amet, consectetur adipiscing earticlet.
      </div>
    </article>
    <article class="card__block">
      <div><img src="images/card-img-04.jpg" alt=""></div>
      <h3>タイトル4</h3>
      <div>
        Lorem ipsum dolor sit amet, consectetur adipiscing earticlet.
      </div>
    </article>
    <article class="card__block">
      <div><img src="images/card-img-05.jpg" alt=""></div>
      <h3>タイトル5</h3>
      <div>
        Lorem ipsum dolor sit amet, consectetur adipiscing earticlet.
      </div>
    </article>
    <article class="card__block">
      <div><img src="images/card-img-06.jpg" alt=""></div>
      <h3>タイトル6</h3>
      <div>
        Lorem ipsum dolor sit amet, consectetur adipiscing earticlet.
      </div>
    </article>
  </div>
</section>

 

style.css

.card__contents{
	display: flex;
	flex-direction: row;
	flex-wrap: wrap;
}
.card__contents{
	width: 1146px;
	padding: 0 30px;
	margin: 30px auto;
}
.card__block{
	padding: 10px;
	margin: 0 30px 30px 0;
	background-color: #dfdfdf;
	border-radius: 4px;
	width: calc(33.3333333% - 30px * 2 / 3);
}
.card__block:nth-child(3n+3){
  margin-right: 0;
}
h3{
	margin: 20px 0;
	font-weight: bold;
}

 

ポイントは以下の3つ。

 

style.css16行目の、1カラムのwidth幅の計算です。

1カラムの幅を、全体の横幅(100%)から30pxの余白2個分を引いた幅を3等分した幅にしています。

 

このままでは左に全てのカラムが寄ってしまうので、

style.css13行目で、各カラムに「margin: 30px;」を右側と下側に入れています。

 

今回は3カラムレイアウトなので、一番右にあるカラム(3つ目と6つ目のカラム)には右側のmarginが不要です。

style.css18行目~20行目で、右端のカラムからmargin-rightを消しています。

 


スポンサーリンク

marginで余白をpx固定するメリット

今回の様に、親要素に「justify-content: space-between;」を入れずに、marginを使って余白を作る方法のメリットは。

マルチカラムのカラム数が足りない場合最終行のカラムが自動的に左に寄ってくれる事です。

 

以下の画像のように、

カラムが5個しか無い場合、最終行が左に寄って、右に1個分の余白を開けてくれます。

 

Flexboxで作るマルチカラムレイアウト、marginで余白を固定

 

 

「justify-content: space-between;」を使った場合、最終行は均等に間隔が空くので、カラムが左右に分かれて不格好になってしまいますが、

あえて「justify-content: space-between;」を使わない事で自動的に左寄せになります。

 

ブログの記事一覧のように、何記事分のカラムが表示されるか分からない場合に使えます。

jQueryを使わずに左寄せになるので非常に便利ですね。

marginで余白を空けるデメリット

Flexboxで横並びにしたカラム間にmarginを使うのは問題ないのですが、

余白を「%」で指定してしまうと、ブラウザによっては表示が崩れる場合があります。

 

あくまでも余白は「px」固定に限ります

そこさえ気を付ければ問題なしです。

 


スポンサーリンク