

View Details
ブログ
スポットライトブログ
#スプリット#ミニマル+1
番号付きのコンパクトなリスト形式で記事を表示するブログセクション。メタ情報を横一列に配置し、情報密度が高く一覧性に優れたデザイン。
1export function BlogCompact001() {2 const posts = [3 {4 number: "01",5 title: "デザインシステムの構築と運用ガイド",6 excerpt:7 "チーム全体で一貫した設計言語を共有し、プロダクトの成長に伴うデザインの断片化を防ぐための実践的なアプローチ。",8 date: "2024.03.15",9 category: "デザイン",10 readTime: "8 min",11 },12 {13 number: "02",14 title: "Core Web Vitals改善の具体的な施策",15 excerpt:16 "LCP・FID・CLSの各指標を最適化するための技術的なアプローチとモニタリング戦略を解説。",17 date: "2024.03.08",18 category: "エンジニアリング",19 readTime: "6 min",20 },21 {22 number: "03",23 title: "アクセシビリティを前提としたUI設計",24 excerpt:25 "WCAG 2.1に準拠したインターフェース設計の基本原則と、実装時に考慮すべきポイント。",26 date: "2024.02.28",27 category: "デザイン",28 readTime: "7 min",29 },30 {31 number: "04",32 title: "マイクロインタラクションの設計原則",33 excerpt:34 "ユーザー体験を向上させる繊細なアニメーションとフィードバックの設計手法。",35 date: "2024.02.20",36 category: "デザイン",37 readTime: "5 min",38 },39 {40 number: "05",41 title: "TypeScriptの型設計パターン",42 excerpt:43 "大規模プロジェクトで堅牢な型システムを構築するためのパターンとベストプラクティス。",44 date: "2024.02.12",45 category: "エンジニアリング",46 readTime: "9 min",47 },48 {49 number: "06",50 title: "レスポンシブデザインの再考",51 excerpt:52 "コンテナクエリとモダンCSSレイアウトを活用した、次世代のレスポンシブデザイン手法。",53 date: "2024.02.05",54 category: "エンジニアリング",55 readTime: "6 min",56 },57 ];5859 return (60 <section className="bg-background py-28 border-t border-border">61 <div className="mx-auto max-w-4xl px-4 sm:px-6 lg:px-8">62 {/* ヘッダー */}63 <div className="flex flex-col gap-4 sm:flex-row sm:items-end sm:justify-between">64 <div>65 <p className="text-[10px] uppercase tracking-[0.3em] text-muted-foreground">66 Articles67 </p>68 <h2 className="mt-3 text-2xl font-medium tracking-wide text-foreground sm:text-3xl">69 ジャーナル70 </h2>71 </div>72 <a73 href="#"74 className="inline-flex items-center gap-2 text-xs uppercase tracking-[0.2em] text-muted-foreground transition-colors duration-200 hover:text-foreground"75 >76 すべての記事77 <svg78 className="h-3.5 w-3.5"79 fill="none"80 stroke="currentColor"81 viewBox="0 0 24 24"82 >83 <path84 strokeLinecap="round"85 strokeLinejoin="round"86 strokeWidth={1.5}87 d="M17 8l4 4m0 0l-4 4m4-4H3"88 />89 </svg>90 </a>91 </div>9293 <div className="mt-4 h-px bg-border/40" />9495 {/* 記事リスト */}96 <div className="mt-8">97 {posts.map((post) => (98 <a99 key={post.number}100 href="#"101 className="group flex items-start gap-4 border-b border-border/40 py-5 transition-colors duration-200 sm:items-center"102 >103 {/* 番号 */}104 <span className="shrink-0 text-[10px] tracking-[0.2em] text-muted-foreground/30">105 {post.number}106 </span>107108 {/* メインコンテンツ */}109 <div className="flex flex-1 flex-col gap-2 sm:flex-row sm:items-center sm:gap-6">110 {/* タイトル&抜粋 */}111 <div className="flex-1">112 <h3 className="text-sm font-medium tracking-wide text-foreground transition-colors duration-200 group-hover:text-muted-foreground">113 {post.title}114 </h3>115 <p className="mt-1 text-xs font-light leading-relaxed text-muted-foreground/60 line-clamp-1">116 {post.excerpt}117 </p>118 </div>119120 {/* メタ情報 */}121 <div className="flex shrink-0 items-center gap-3">122 <span className="rounded-full border border-border/60 px-2.5 py-0.5 text-[10px] tracking-[0.15em] text-muted-foreground/60">123 {post.category}124 </span>125 <span className="hidden text-[10px] tracking-[0.15em] text-muted-foreground/40 sm:block">126 {post.readTime}127 </span>128 <span className="text-[10px] tracking-[0.15em] text-muted-foreground/40">129 {post.date}130 </span>131 </div>132 </div>133134 {/* 矢印 */}135 <svg136 className="mt-1 h-3 w-3 shrink-0 text-muted-foreground/20 transition-colors duration-200 group-hover:text-muted-foreground sm:mt-0"137 fill="none"138 stroke="currentColor"139 viewBox="0 0 24 24"140 >141 <path142 strokeLinecap="round"143 strokeLinejoin="round"144 strokeWidth={1.5}145 d="M9 5l7 7-7 7"146 />147 </svg>148 </a>149 ))}150 </div>151 </div>152 </section>153 );154}