この記事は人間が書きました
はじめに
こんにちは、赤神です!
この記事は、「1000本ノック」という取り組みの中のフロントエンドのための課題の1つです。
「1000本ノックとは」
https://qiita.com/sora_akagami/items/c8da4296dea3823376ca
Masonryレイアウト
Pinterest のようなレイアウトは「Masonry(石積み)レイアウト」と呼ばれます。高さが異なるカードがレンガのように隙間なく詰められて配置されるのが特徴です。
これを CSS だけで完璧に実装するのは少し難しくなります。しかし、Grid の機能を使うことで、非常に近いレイアウトを再現することができます。
鍵となるのは、非常に細かい行をたくさん作り、各アイテムが自身の高さに応じて、必要な数の行をまたぐという考え方です。
作成したコード
index.html
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>フロントエンド1000本ノック 0061</title>
<style>
.card-1 { grid-row-end: span 8; border: 2px solid #e74c3c; padding: 10px; background-color: #f8f9fa; }
.card-2 { grid-row-end: span 12; border: 2px solid #3498db; padding: 10px; background-color: #f8f9fa; }
.card-3 { grid-row-end: span 3; border: 2px solid #2ecc71; padding: 10px; background-color: #f8f9fa; }
.card-4 { grid-row-end: span 7; border: 2px solid #f39c12; padding: 10px; background-color: #f8f9fa; }
.card-5 { grid-row-end: span 15; border: 2px solid #9b59b6; padding: 10px; background-color: #f8f9fa; }
.card-6 { grid-row-end: span 4; border: 2px solid #e67e22; padding: 10px; background-color: #f8f9fa; }
.card-7 { grid-row-end: span 9; border: 2px solid #1abc9c; padding: 10px; background-color: #f8f9fa; }
.card-8 { grid-row-end: span 6; border: 2px solid #34495e; padding: 10px; background-color: #f8f9fa; }
.card-9 { grid-row-end: span 11; border: 2px solid #e91e63; padding: 10px; background-color: #f8f9fa; }
.card-10 { grid-row-end: span 2; border: 2px solid #607d8b; padding: 10px; background-color: #f8f9fa; }
.card-11 { grid-row-end: span 13; border: 2px solid #795548; padding: 10px; background-color: #f8f9fa; }
.card-12 { grid-row-end: span 5; border: 2px solid #ff5722; padding: 10px; background-color: #f8f9fa; }
</style>
</head>
<body style="display: flex; flex-direction: column; min-height: 100vh;">
<header style="display: flex; justify-content: space-between; align-items: center;">
<div>
<a href="/">
<img src="img/logo.png" alt="フロントエンド1000本ノック">
</a>
</div>
</header>
<div style="display: grid; gap: 16px; grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); grid-auto-rows: 10px;">
<div class="card-1">1</div>
<div class="card-2">2</div>
<div class="card-3">3</div>
<div class="card-4">4</div>
<div class="card-5">5</div>
<div class="card-6">6</div>
<div class="card-7">7</div>
<div class="card-8">8</div>
<div class="card-9">9</div>
<div class="card-10">10</div>
<div class="card-11">11</div>
<div class="card-12">12</div>
</div>
<footer>
<p>Copyright 2025</p>
<p>フロントエンド1000本ノック</p>
</footer>
</body>
</html>