Til
AstroとGridで作る、動的サイズのタグクラウド
#Astro#TailwindCSS#UI設計
タグ一覧ページといえば、文字サイズだけを変える「クラウド」表示が一般的ですが、今回はGridレイアウトを使って、よりモダンな「弁当箱(Bento Grid)」スタイルで作ってみました。
実装のポイント
ただのGridではなく、記事数(人気度)に応じてセルのサイズを変えています。
- Top 20%: 特大サイズ (
col-span-2 row-span-2) - Next 30%: 横長サイズ (
col-span-2) - Default: 通常サイズ (
col-span-1)
これをTailwind CSSのクラスで動的に割り当てます。
// ランキングロジック(イメージ)
const tagsWithStyle = sortedTags.map(([tag, count], index) => {
const isTop = index < sortedTags.length * 0.2;
// ...
return {
className: isTop ? "md:col-span-2 md:row-span-2" : "..."
};
});
CSS Gridの魔法: grid-auto-flow: dense
可変サイズのグリッドで重要なのが grid-flow-dense です。
これを指定すると、大きなアイテムによってできた「隙間」に、小さなアイテムが自動的に入り込んでくれます。
<div class="grid grid-flow-dense ...">
{tags.map(tag => (
<div class={tag.className}>...</div>
))}
</div>
これにより、パズルのように綺麗に埋まったレイアウトが自動的に完成します。 CSS Grid、便利すぎますね。