フッター/

マルチカラムフッター

Preview

4カラム構成のナビゲーションリンクとブランドエリアを備えた、整理されたフッターセクション

Source Code
tsx
176 lines
1// マルチカラムフッターナビゲーション
2function CornerDots({ className = "" }: { className?: string }) {
3 return (
4 <div className={`absolute h-3 w-3 ${className}`}>
5 <div className="absolute left-0 top-0 h-1.5 w-1.5 rounded-full bg-foreground/20" />
6 <div className="absolute right-0 top-0 h-1.5 w-1.5 rounded-full bg-foreground/20" />
7 <div className="absolute bottom-0 left-0 h-1.5 w-1.5 rounded-full bg-foreground/20" />
8 <div className="absolute bottom-0 right-0 h-1.5 w-1.5 rounded-full bg-foreground/20" />
9 </div>
10 );
11}
12
13export function FooterColumns001() {
14 const columns = [
15 {
16 title: "プロダクト",
17 links: [
18 { label: "機能一覧", href: "#" },
19 { label: "料金プラン", href: "#" },
20 { label: "導入事例", href: "#" },
21 { label: "アップデート", href: "#" },
22 ],
23 },
24 {
25 title: "リソース",
26 links: [
27 { label: "ドキュメント", href: "#" },
28 { label: "ガイド", href: "#" },
29 { label: "API リファレンス", href: "#" },
30 { label: "ステータス", href: "#" },
31 ],
32 },
33 {
34 title: "会社情報",
35 links: [
36 { label: "私たちについて", href: "#" },
37 { label: "ブログ", href: "#" },
38 { label: "採用情報", href: "#" },
39 { label: "お問い合わせ", href: "#" },
40 ],
41 },
42 {
43 title: "法的情報",
44 links: [
45 { label: "プライバシー", href: "#" },
46 { label: "利用規約", href: "#" },
47 { label: "セキュリティ", href: "#" },
48 ],
49 },
50 ];
51
52 return (
53 <footer className="relative border-t border-border bg-background">
54 <CornerDots className="left-6 top-6" />
55 <CornerDots className="right-6 top-6" />
56
57 <div className="mx-auto max-w-6xl px-4 py-24 sm:px-6 lg:px-8">
58 {/* 上部: ロゴ + リンクカラム */}
59 <div className="grid grid-cols-1 gap-16 md:grid-cols-5">
60 {/* ブランドエリア */}
61 <div className="md:col-span-1">
62 <div className="flex items-center gap-3">
63 <div className="flex h-8 w-8 items-center justify-center rounded border border-border">
64 <svg
65 className="h-4 w-4 text-foreground"
66 viewBox="0 0 24 24"
67 fill="none"
68 stroke="currentColor"
69 strokeWidth="1.5"
70 >
71 <path d="M4 6h16M4 12h16M4 18h8" />
72 </svg>
73 </div>
74 <span className="text-sm font-medium tracking-wide text-foreground">
75 Studio
76 </span>
77 </div>
78
79 <p className="mt-6 text-xs font-light leading-relaxed tracking-wide text-muted-foreground">
80 クリエイティブとテクノロジーの
81 <br />
82 交差点から、新しい価値を。
83 </p>
84 </div>
85
86 {/* ナビゲーションカラム */}
87 <div className="grid grid-cols-2 gap-8 sm:grid-cols-4 md:col-span-4">
88 {columns.map((column) => (
89 <div key={column.title}>
90 <p className="text-[10px] font-medium uppercase tracking-[0.25em] text-muted-foreground">
91 {column.title}
92 </p>
93 <ul className="mt-5 space-y-3">
94 {column.links.map((link) => (
95 <li key={link.label}>
96 <a
97 href={link.href}
98 className="text-sm font-light tracking-wide text-foreground/60 transition-colors duration-200 hover:text-foreground"
99 >
100 {link.label}
101 </a>
102 </li>
103 ))}
104 </ul>
105 </div>
106 ))}
107 </div>
108 </div>
109
110 {/* 区切り線 */}
111 <div className="mt-20 h-px bg-border/40" />
112
113 {/* 下部: コピーライト + ソーシャル */}
114 <div className="mt-8 flex flex-col items-center justify-between gap-6 sm:flex-row">
115 <p className="text-[11px] font-light tracking-widest text-muted-foreground/60">
116 &copy; 2024 Studio Inc. All rights reserved.
117 </p>
118
119 <div className="flex items-center gap-5">
120 {/* Twitter / X */}
121 <a
122 href="#"
123 className="text-muted-foreground/40 transition-colors duration-200 hover:text-foreground"
124 aria-label="Twitter"
125 >
126 <svg
127 className="h-4 w-4"
128 fill="currentColor"
129 viewBox="0 0 24 24"
130 >
131 <path d="M18.244 2.25h3.308l-7.227 8.26 8.502 11.24H16.17l-5.214-6.817L4.99 21.75H1.68l7.73-8.835L1.254 2.25H8.08l4.713 6.231zm-1.161 17.52h1.833L7.084 4.126H5.117z" />
132 </svg>
133 </a>
134
135 {/* GitHub */}
136 <a
137 href="#"
138 className="text-muted-foreground/40 transition-colors duration-200 hover:text-foreground"
139 aria-label="GitHub"
140 >
141 <svg
142 className="h-4 w-4"
143 fill="currentColor"
144 viewBox="0 0 24 24"
145 >
146 <path
147 fillRule="evenodd"
148 d="M12 2C6.477 2 2 6.484 2 12.017c0 4.425 2.865 8.18 6.839 9.504.5.092.682-.217.682-.483 0-.237-.008-.868-.013-1.703-2.782.605-3.369-1.343-3.369-1.343-.454-1.158-1.11-1.466-1.11-1.466-.908-.62.069-.608.069-.608 1.003.07 1.531 1.032 1.531 1.032.892 1.53 2.341 1.088 2.91.832.092-.647.35-1.088.636-1.338-2.22-.253-4.555-1.113-4.555-4.951 0-1.093.39-1.988 1.029-2.688-.103-.253-.446-1.272.098-2.65 0 0 .84-.27 2.75 1.026A9.564 9.564 0 0112 6.844c.85.004 1.705.115 2.504.337 1.909-1.296 2.747-1.027 2.747-1.027.546 1.379.202 2.398.1 2.651.64.7 1.028 1.595 1.028 2.688 0 3.848-2.339 4.695-4.566 4.943.359.309.678.92.678 1.855 0 1.338-.012 2.419-.012 2.747 0 .268.18.58.688.482A10.019 10.019 0 0022 12.017C22 6.484 17.522 2 12 2z"
149 clipRule="evenodd"
150 />
151 </svg>
152 </a>
153
154 {/* LinkedIn */}
155 <a
156 href="#"
157 className="text-muted-foreground/40 transition-colors duration-200 hover:text-foreground"
158 aria-label="LinkedIn"
159 >
160 <svg
161 className="h-4 w-4"
162 fill="currentColor"
163 viewBox="0 0 24 24"
164 >
165 <path d="M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433a2.062 2.062 0 01-2.063-2.065 2.064 2.064 0 112.063 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z" />
166 </svg>
167 </a>
168 </div>
169 </div>
170 </div>
171
172 <CornerDots className="bottom-6 left-6" />
173 <CornerDots className="bottom-6 right-6" />
174 </footer>
175 );
176}