npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@chrishow/masonry-component

v1.0.0

Published

A simple but performant Web Component for 'masonry' style layouts.

Downloads

4

Readme

masonry-component

masonry-component is a lightweight, zero-dependencies Web Component which allows you to display a bunch of images of different sizes in a 'masonry' style grid.

Benefits

  • 👼 Super simple: just one javascript file
  • 🤏 Really small: 6.5k unzipped, 1.5k stripped and zipped
  • 🏃 Super fast: No recalculation on resize (unless you change the number of columns, when it will happen automatically)
  • 🔧 Configurable with CSS: Uses CSS vars to configure, so is easy to use in responsive pages

How to use

Include the javascript:

<script src="path/to/masonry-component.js"></script>

Add the HTML:

<masonry-component>
  <img src="https://picsum.photos/600/300" width="600" height="300" />
  <img src="https://picsum.photos/600/500" width="600" height="500" />
  <img src="https://picsum.photos/600/200" width="600" height="200" />
  <img src="https://picsum.photos/600/300" width="600" height="300" />
  ...
</masonry-component>

.. and that's it.

Configuration

There are two options, the number of columns, and the gap between the items. These are both controlled using CSS custom properties, so can be specified in your CSS, HTML (or both).

masonry-component {
  --masonry-gap: 10px;
  --masonry-column-count: 3;
}

masonry-gap can be specified in pretty much any unit (px, rem, em, vw). Technically, it can be any unit that works as a margin-bottom, so percentage units are not supported.

This makes it super easy to change the number of columns at smaller widths, eg:

masonry-component {
  --masonry-gap: 10px;
  --masonry-column-count: 3;

  @media (max-width: 800px) {
    --masonry-column-count: 3;
  }
}

Recalculation will happen automatically when the window width changes to match the media query.

Advanced usage

If you don't know the dimensions of your images so can't add width and height attributes to the image tags, you will want to trigger a re-layout as the images load. You can do this at any time by calling the layout method on the component:

document.querySelector("masonry-component").layout();

To automatically trigger as each of the images load, you can do this:

document.querySelectorAll("masonry-layout img").forEach((img) => {
  img.onLoad = () => img.closest("masonry-layout").layout();
});

Licence

Licen[c|s]e is MIT, you can do what pretty much you want with it.

Credits

masonry-component was written by Chris How, based on andreasbm/masonry-layout