<2KB Minified + gzipped
0 Dependencies
Auto ResizeObserver
ESM + UMD Module formats

How It Works

Three steps, zero effort

Height Harmony automatically syncs element heights using the most efficient browser APIs available.

Step 01

Reset & Measure

Inline heights are cleared and natural scrollHeights are measured in a single synchronous layout pass to avoid reflows.

Step 02

Find the Max

The tallest element in the group is identified. All measurements happen in one batch read to minimize layout thrashing.

Step 03

Watch & React

ResizeObserver and MutationObserver keep heights in sync automatically — no window resize listeners needed.

Interactive Demo

See it in action

All cards in this grid share equal heights automatically. Try adding cards, toggling the utility on/off, or resizing the window.

Active
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris vitae ullamcorper mauris, at feugiat libero.
Phasellus quis nibh sed ante mollis facilisis.
Nulla nunc nulla, tempus et venenatis iaculis, sollicitudin id magna. Interdum et malesuada fames ac ante ipsum primis in faucibus. Maecenas sed eleifend ante.
Aenean interdum ipsum massa, ac ultrices eros cursus rutrum. Quisque fermentum ac leo ac eleifend. In felis risus, accumsan vitae porttitor a, ultrices et sapien. Suspendisse potenti.
Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.
Per inceptos himenaeos. Vivamus feugiat nisi nec urna cursus, in fermentum augue vestibulum.
Proin eget nunc nec nisi mattis molestie in ultrices urna. Cras tempus ipsum non justo fringilla, in suscipit ex fermentum.
Cras metus neque, porttitor id accumsan ac, tincidunt eu est. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.
Ut dapibus molestie lacus, nec sollicitudin eros molestie eget. Pellentesque in cursus ligula, vel volutpat diam.
Mauris porta lacus id purus accumsan, et vulputate erat pretium. Donec eu vulputate velit.
Aliquam auctor magna a sem pulvinar, non finibus enim vestibulum. Nam a justo volutpat.
Porttitor nisi at pulvinar orci. Nulla aliquet porta odio, non vulputate mi cursus vel. Proin vel dolor vel sem sodales semper accumsan vitae porttitor.

Why Height Harmony

Built for real-world layouts

Everything you need — nothing you don't.

ResizeObserver

Automatically re-syncs when any element changes size. No window resize listeners needed.

MutationObserver

Watches the DOM for new elements. Works seamlessly with AJAX, infinite scroll, and dynamic content.

Breakpoint Support

Disable equalizing below a viewport width — let mobile layouts stack naturally.

Clean API

refresh() to re-trigger manually, destroy() to tear down observers and restore natural heights.

Zero Thrash

All height reads happen in a single synchronous batch. Writes follow immediately. No interleaved read/write cycles.

ESM + UMD

Works as an ES import, CommonJS require, or plain script tag. No bundler required.

Usage

Get started in seconds

Drop it in however you prefer.

import heightHarmony from 'height-harmony';

// Equalize heights of all matching elements
heightHarmony('.card');

// Returns an instance with refresh() and destroy()
const hh = heightHarmony('.feature-box');
hh.refresh();   // manually re-trigger
hh.destroy();   // remove observers & restore heights