ライブデモ Live Demo

不均等な高さのカードを配置するマーソンリーレイアウト。CSS Gridを使用して実装し、カラム数とギャップをカスタマイズできます。

A masonry layout for cards with varying heights. Implemented using CSS Grid with customizable column count and gap.

Item 1
Item 2
Item 3
Item 4
Item 5
Item 6
3
16px

AI向け説明 AI Description

マーソンリーレイアウトは`display: grid`と`grid-template-columns: repeat(var(--masonry-columns), 1fr)`で実装します。各カードは`grid-row: span X`で高さを調整し、`gap`でカード間の間隔を設定します。レスポンシブ対応は`@media`クエリでカラム数を調整します。

Masonry layout is implemented with `display: grid` and `grid-template-columns: repeat(var(--masonry-columns), 1fr)`. Each card adjusts height with `grid-row: span X`, and `gap` sets spacing between cards. Responsive support adjusts column count with `@media` queries.

調整可能パラメータ Adjustable Parameters

実装 Implementation

HTML + CSS + JS

<div class="masonry" data-masonry style="--masonry-columns: 3">
  <div class="masonry__item" style="grid-row: span 2">Item 1</div>
  <div class="masonry__item">Item 2</div>
  <div class="masonry__item" style="grid-row: span 3">Item 3</div>
  <div class="masonry__item">Item 4</div>
</div>

<style>
.masonry {
  display: grid;
  grid-template-columns: repeat(var(--masonry-columns, 3), 1fr);
  gap: 16px;
}

.masonry__item {
  background: #fff;
  padding: 16px;
  border-radius: 8px;
  border: 1px solid #dfe3f6;
}
</style>

<script>
const masonry = document.querySelector("[data-masonry]");
masonry.style.setProperty("--masonry-columns", 4);
</script>

React (JSX + CSS)

// react/L-004.jsx
import { useState } from "react";
import "./L-004.css";

const items = [
  { id: 1, content: "Item 1", span: 2 },
  { id: 2, content: "Item 2", span: 1 },
  { id: 3, content: "Item 3", span: 3 },
  { id: 4, content: "Item 4", span: 1 }
];

export default function MasonryLayout({ columns = 3 }) {
  return (
    <div
      className="masonry"
      style={{ "--masonry-columns": columns }}
    >
      {items.map((item) => (
        <div
          key={item.id}
          className="masonry__item"
          style={{ gridRow: `span ${item.span}` }}
        >
          {item.content}
        </div>
      ))}
    </div>
  );
}
/* react/L-004.css */
.masonry {
  display: grid;
  grid-template-columns: repeat(var(--masonry-columns, 3), 1fr);
  gap: 16px;
}

.masonry__item {
  background: #fff;
  padding: 16px;
  border-radius: 8px;
  border: 1px solid #dfe3f6;
}

AIへの指示テンプレート AI Prompt Template

以下のテンプレートをコピーしてAIアシスタントに貼り付けると、このパターンの実装を依頼できます。 Copy the template below and paste it into your AI assistant to request an implementation of this pattern.