0.0.9 • Published 9 years ago

react-pinboard v0.0.9

Weekly downloads
2
License
MIT
Repository
github
Last release
9 years ago

react-pinboard

<ReactPinboard> is a component for responsive Pinterest-style layouts. Pass in any number of children to see them rendered in equally-weighted, dynamic columns.

Props

  • cols: Can be a static number like 3 or an array of media objects, e.g.:

    [
      { media: '(max-width: 1000px)', cols: 4 },
      { media: '(max-width: 500px)', cols: 3 },
      { media: '', cols: 2 }
    ]

    The first-matching media query will be used, and the columns will be adjusted in real-time as the browser squishes and stretches.

  • spacing: The vertical and horizontal space between columns and children. Can be any CSS length value, e.g. 2em, 15px, 3vh.

Usage

Download on npm: npm install react-pinboard

Sample usage:

const ReactPinboard = require('react-pinboard');

const cols = [
  { media: '(max-width: 1000px)', cols: 4 },
  { media: '(max-width: 500px)', cols: 3 },
  { media: '', cols: 2 }
];

ReactDOM.render(
  <ReactPinboard cols={cols} spacing="2em">
    <img src="..." />
    <div>
      <h3>Heading</h3>
      <p>...</p>
    </div>
    <SomeOtherReactComponent />
    ...
  </ReactPinboard>,
  document.querySelector('pinboard-container');
);

Features

  • Accepts any child types. You can even mix and match images, text, and other rich components, to create a pinboard that's truly customized.

  • Child order is preserved. The children will appear in the pinboard in left-to-right, top-to-bottom order. This means that if your children have an obvious numeric order, you don't need to worry about adjacent children being spread way across from each other.

  • Auto-weighted columns. ReactPinboard is economical — it takes up as little vertical space as possible by ensuring that the columns are filled as close to equal-weigh as possible (while maintaining child order).

  • Safe for server-rendering. The server can't measure viewport size, so it assumes a "mobile-first" approach and determines column number from the last value of the cols array. The server-render also doesn't know the rendered child heights for column weighting, so it equally-weights the columns. This is naive, but hopefully close enough to the re-layout on mount that it still feels fast for your end users.

Examples

Here's a few places you can see react-pinboard in the wild:

0.0.9

9 years ago

0.0.8

10 years ago

0.0.7

10 years ago

0.0.6

10 years ago

0.0.5

10 years ago

0.0.4

10 years ago

0.0.3

10 years ago

0.0.2

10 years ago

0.0.1

10 years ago