Alpine.js plugin to match heights of grouped elements.
This plugin ensures elements in the same group have matching heights, useful for creating visually consistent layouts. It leverages Alpine.js and works seamlessly with dynamic content and responsive designs.
Based on the vanilla JavaScript solution from @joshdonnell.
Install the package:
npm install @paintface_danny/alpine-match-heights
Then, import and register the plugin in your JavaScript:
import matchHeights from '@paintface_danny/alpine-match-heights';
document.addEventListener('alpine:init', () => {
Alpine.plugin(matchHeights);
});
- Add the
x-match-height
directive to the elements you want to group by height. - Optionally, provide a group name as the directive's argument for grouping.
- You can also use the modifier
x-match-height.row
to match heights within a row, ensuring heights are matched only for elements in the same row.
<div x-data>
<div x-match-height style="background: #f0f0f0; padding: 10px;">Short content</div>
<div x-match-height style="background: #d0d0d0; padding: 10px;">Longer content with more text</div>
<div x-match-height style="background: #b0b0b0; padding: 10px;">Medium content</div>
</div>
<div x-data>
<div x-match-height="'group1'" style="background: #f0f0f0; padding: 10px;">Group 1 - Short</div>
<div x-match-height="'group1'" style="background: #d0d0d0; padding: 10px;">Group 1 - Long</div>
<div x-match-height="'group2'" style="background: #b0b0b0; padding: 10px;">Group 2 - Short</div>
<div x-match-height="'group2'" style="background: #a0a0a0; padding: 10px;">Group 2 - Medium</div>
</div>
- Automatic Height Adjustment: Dynamically adjusts heights whenever the content changes.
- Responsive: Adapts to screen size changes using a debounced resize listener.
- Group Support: Easily organise elements into groups for independent height matching.
- Efficient Observers: Uses
MutationObserver
andIntersectionObserver
for performance.
The main directive. It accepts an optional string argument to group elements.
x-match-height="'groupName'"
groupName
(string): Optional. A name to group related elements. If omitted, defaults to"default"
.
Clone the repository and install dependencies:
git clone https://github.com/paintface/alpine-match-heights.git
cd alpine-match-heights
npm install
Build the plugin:
npm run build
Contributions are welcome! Please follow these steps:
- Fork the repository.
- Create a feature branch:
git checkout -b feature-name
. - Commit your changes:
git commit -m "Add new feature"
. - Push to the branch:
git push origin feature-name
. - Open a pull request.
If you encounter any issues, please report them here.
This project is licensed under the MIT License.
Developed by Danny Painter. GitHub | LinkedIn
- Built using Alpine.js.