Macy.js でメイソンリーレイアウト

jQuery 不要でメイソンリーレイアウトを実現できる『Macy.js』を使って、クールなWebサイトを構築しましょう。IE11にも対応しています。

Macy.js
デモページ

メイソンリーは普段あまり聞きなれない言葉ですが、日本語で「組積式構造」という意味です。日本語でも聞きなれない言葉ですが、Webデザインでメイソンリーというと以下のようにレンガが積み重なったようなレイアウトのことを指します。

自分で作るとなると少しやっかいなこのレイアウト。しかし『Macy.js』を使えば簡単に、しかもレスポンシブに実現することができます。

というわけで早速使ってみましょう。まずは GitHub から macy.js を取得します。
クローンするのも面倒なので僕の場合は新規ファイルを作ってコピペするという原始時代の頃のやり方で取得します。というか他にいい方法あるんですかね??

macy.js と同じ階層に script.js を作り、Macy 関数を呼び出します。

Macy({
  container: '.masonry-block01'
});

引数でオプションを与えますが、必須のオプションは container だけです。
container にメイソンリーレイアウトを適用したい要素をセレクタで指定します。
container に指定した要素の子要素がレンガ状に配置されます。

一つ注意なのはここでクラスを指定しても一番最初の要素にしか適用されないということです。.masonry-block01 を持つ要素が複数あったとしても一番最初の要素しかメイソンリーレイアウトになりません。

最後にHTMLファイルを作ります。

スクリプトの呼び出しは以下のような感じで

<script src="./macy.js" defer></script>
<script src="./script.js" defer></script>

メイソンリー要素は以下のような感じで

<div class="masonry-block01">
  <div>あああああ</div>
  <div>いいいいい</div>
  <div>ううううう</div>
  <div>えええええ</div>
  <div>おおおおお</div>
  <div>かかかかか</div>
  <div>けけけけけ</div>
  <div>こここここ</div>
</div>

実際のサンプルはデモページをご覧ください。

以下からは各オプションについて解説していきます。

カラム数

カラム数は columns で指定できます。デフォルトは 4 です。

Macy({
  container: '.masonry-block',
  columns: 3
});

子要素の順番の保持

デフォルトでは子要素は他の子要素の高さに合わせて並べられるため順番がバラバラになりますが、trueOrder を true に設定することでHTMLに記述した順番と同じ順番で配置できます。

Macy({
  container: '.masonry-block',
  trueOrder: true
});

子要素間のスペース

margin で子要素同士の間の間隔を設定できます。

Macy({
  container: '.masonry-block',
  margin: {
    x: 10,
    y: 10
  }
});

画像がロードされるまで待機

waitForImages を true にすることでメイソンリー内の画像が全てロードされるまで待機します。

Macy({
  container: '.masonry-block',
  waitForImages: true
});

ブレークポイントを設定

breakAt でブレークポイントごとの設定を記述できます。

Macy({
  container: '.masonry-block',
  breakAt: {
    767: {
      columns: 2
    }
  }
});

767 に指定したオプションは 767px 以下 (<= 767)の時に有効になります。columns 以外にも margin など他のオプションも指定できます。

ブレークポイントは複数指定することも可能です。

Macy({
  container: '.masonry-block',
  breakAt: {
    992: {
      columns: 3
    },
    767: {
      columns: 2
    }
  }
});

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です