match-height-vanilla

jQuery不要の高さ揃えライブラリ
既存の jquery.matchHeight.js の思想を引き継ぎつつ、バニラJS(UMD)で再実装しました。
行単位(byRow)での高さ揃え、data-mh によるグルーピング、update/destroy などのAPIを提供します。


インストール

CDN / 直読み

<script src="./matchHeight.vanilla.js"></script>
<script>
  // グローバルに matchHeight が追加されます。
  matchHeight('[data-mh="group"]', { byRow: true });
</script>

npm // 準備中

npm i match-height-vanilla

CommonJS (Node/Bundler):

const matchHeight = require('match-height-vanilla');
matchHeight('[data-mh="group"]');

ESM import(UMDをdefaultとして解決される環境で):

import matchHeight from 'match-height-vanilla';
matchHeight('[data-mh="group"]');

注: 本ライブラリは UMD 配布です。多くのバンドラ(Vite/Webpack/Rollup)では default import として読み込めます。もしうまく解決されない場合は require(...) をご利用ください。


使い方(最短サンプル)

<div class="grid">
  <div class="card" data-mh="group1">短い</div>
  <div class="card" data-mh="group1">長い長い長いテキスト</div>
  <div class="card" data-mh="group1">中くらい</div>
</div>

<script src="./matchHeight.vanilla.js"></script>
<script>
  // data-mh="group1" の要素を行ごとに最大値で揃える
  matchHeight('[data-mh="group1"]', { byRow: true });

  // 画面サイズ変化等に追従させたい場合
  matchHeight.enableAutoUpdate();
</script>

API

matchHeight(elements, options?)

指定要素の高さを揃えます。

matchHeight('.card', { byRow: true });              // 行ごと
matchHeight('.plan', { byRow: false });             // 全体で最大値
matchHeight('.col',  { target: document.querySelector('.primary') }); // 指定要素に合わせる

matchHeight.scan(root?, options?)

[data-mh] を持つ要素をスキャンし、グループ名ごとに高さ揃えします。

matchHeight.scan();                 // document 全体をスキャン
matchHeight.scan(rootEl, { byRow: true, property: 'minHeight' });

matchHeight.update(elements?)

再計測して再適用します。elements 省略時は内部レジストリ全体を更新します。 非表示(display:none)→表示に切り替えた直後などに有効。

matchHeight.update();           // すべて再計測
matchHeight.update('.card');    // 指定セレクタのみ再計測

matchHeight.destroy(elements)

指定要素の高さ揃えを解除(inline styleをクリア)します。

matchHeight.destroy('.card');

matchHeight.destroyAll()

すべての要素に対して解除します。

matchHeight.destroyAll();

matchHeight.enableAutoUpdate() / disableAutoUpdate()

ResizeObserver が使える環境ではそれを、無い環境では window.resizeスロットルして再計測を自動化します。

matchHeight.enableAutoUpdate();
// matchHeight.disableAutoUpdate();

data-mh グルーピング

HTML上でグループ名を付けると、scan() でまとめて高さ揃えできます。

<div data-mh="group">A</div>
<div data-mh="group">B</div>
<div data-mh="group">C</div>

<script>
  matchHeight.scan(); // "group" ごとに行単位で揃える
</script>

互換性と注意点


jQuery版からの移行


ライセンス

MIT このライブラリは、jquery.matchHeight.js のコンセプトに基づき、jQuery非依存のUMDライブラリとして再実装したものです。オリジナルへの敬意を表します。


変更履歴(抜粋)