typescriptintermediate
Masonry Grid Component
CSS-based masonry layout component with configurable columns and responsive breakpoints.
typescriptPress ⌘/Ctrl + Shift + C to copy
import { ReactNode, useMemo } from 'react';
interface MasonryProps {
children: ReactNode[];
columns?: number;
gap?: number;
}
export function MasonryGrid({ children, columns = 3, gap = 16 }: MasonryProps) {
const columnItems = useMemo(() => {
const cols: ReactNode[][] = Array.from({ length: columns }, () => []);
children.forEach((child, i) => {
cols[i % columns].push(child);
});
return cols;
}, [children, columns]);
return (
<div className="flex" style={{ gap }}>
{columnItems.map((col, i) => (
<div key={i} className="flex-1 flex flex-col" style={{ gap }}>
{col}
</div>
))}
</div>
);
}
// Usage:
// <MasonryGrid columns={3}>
// {items.map(item => <Card key={item.id} {...item} />)}
// </MasonryGrid>Use Cases
- Image galleries
- Pinterest-style layouts
Tags
Related Snippets
Similar patterns you can reuse in the same workflow.
typescriptbeginner
useBreakpoints Hook
Returns the current Tailwind-style breakpoint based on window width for responsive logic.
Best for: Responsive component logic
#hooks#responsive
typescriptbeginner
useMediaQuery — Responsive Breakpoint Hook
Subscribe to CSS media query changes and get a boolean flag for responsive rendering logic in React.
Best for: Responsive layouts
#hooks#responsive
typescriptbeginner
useWindowSize Hook
Track browser window dimensions with debounced resize handling for responsive component logic.
Best for: Responsive layouts
#hooks#responsive
typescriptbeginner
React Responsive Breakpoint Hook
A useMediaQuery hook for responsive rendering with SSR-safe breakpoint detection.
Best for: Conditional rendering based on screen size
#react#responsive