Skip to content

Commit 2478de0

Browse files
committed
refactor: 一次的な変更
Refactor About page layout and extract AvatarAndSkin component. Simplified About page structure by introducing a grid layout and reducing duplicated code. Added a reusable AvatarAndSkin component to streamline avatar and skin image rendering. Improved maintainability and readability of the codebase.
1 parent 6701c4a commit 2478de0

File tree

3 files changed

+80
-35
lines changed

3 files changed

+80
-35
lines changed

src/app/about/page.tsx

Lines changed: 37 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,61 +1,64 @@
11
import {Avatar, AvatarFallback, AvatarImage} from "@/components/ui/avatar";
22
import Image from "next/image";
3+
import AvatarAndSkin from "@/components/ui/custom/AvatarAndSkin";
4+
5+
const header1 = "所属"
6+
const content1 = `
7+
慶應義塾大学 環境情報学部 B1
8+
アジ鯖 統括開発者
9+
`
10+
11+
const header2 = "趣味"
12+
const content2 = `
13+
ゲーム / マインクラフト / プログラミング
14+
`
315

416

517
export default function Page() {
618
return (
7-
<div className="w-full h-[70vh] flex flex-col items-center py-4 px-4 gap-16">
19+
<div className="w-full h-[80vh] grid grid-rows-[auto,1fr] items-center py-8 px-8">
820
<div className="flex w-full max-w-6xl">
921
<h1 className="text-6xl font-black italic text-gray-700 text-6rem tracking-[1rem]">
1022
About
1123
</h1>
1224
</div>
1325

14-
<div className="relative w-full h-full flex justify-center items-center gap-16 py-8 sm:py-16">
15-
<div className="relative w-[60vw] h-[50vw] max-w-[38rem] max-h-[32rem]">
16-
<div className="
17-
absolute
18-
right-0
19-
h-full
20-
z-0
21-
flex items-center justify-center
22-
">
23-
<Avatar className="w-full h-full">
24-
<AvatarImage
25-
src="https://github.com/Y-RyuZU.png"
26-
alt="@shadcn"
27-
className="object-contain"
28-
loading="eager"
29-
/>
30-
<AvatarFallback>RZ</AvatarFallback>
31-
</Avatar>
32-
</div>
3326

34-
<div className="absolute bottom-0 h-[80%] aspect-[173/359] z-10">
35-
<Image
36-
src="/images/ryuzu.png"
37-
alt="Self Image"
38-
className="object-contain w-full h-full"
39-
fill
40-
sizes="(max-width: 640px) 60vw, (max-width: 1024px) 60vw, 48rem"
41-
priority
42-
/>
43-
</div>
27+
<div className="w-full h-full grid grid-cols-1 sm:grid-cols-2 items-center justify-items-center gap-4 mx-auto">
28+
<div className="w-full max-w-xs mx-auto justify-self-end col-span-1">
29+
<AvatarAndSkin
30+
avatarUrl="https://github.com/Y-RyuZU.png"
31+
skinUrl="/images/ryuzu.png"
32+
/>
4433
</div>
4534

46-
<div className="flex flex-col gap-4 h-full w-[40vw] justify-start">
47-
<div className="h-[2rem] w-full">
35+
<div className="grid grid-rows-[auto_1fr] gap-4 content-start w-full h-full col-span-1">
36+
<div className="h-8 w-full">
4837

4938
</div>
50-
<div className="relative w-full h-[70%]">
39+
<div className="relative w-full max-w-xl">
5140
<Image
5241
src="/images/nameplate.svg"
5342
alt="Name Plate"
5443
fill
55-
className="object-contain w-full h-[70%]"
44+
className="object-contain"
5645
priority
5746
/>
5847
</div>
48+
<div>
49+
<h3>
50+
{header1}
51+
</h3>
52+
<div>
53+
{content1}
54+
</div>
55+
<h3>
56+
{header2}
57+
</h3>
58+
<div>
59+
{content2}
60+
</div>
61+
</div>
5962
</div>
6063
</div>
6164
</div>

src/app/layout.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ export default function RootLayout({children,}: Readonly<{
2727
className={`${geistSans.variable} ${geistMono.variable} antialiased`}
2828
>
2929
<Header />
30-
<main>
30+
<main className="w-full">
3131
{children}
3232
</main>
3333
</body>
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
import {Avatar, AvatarFallback, AvatarImage} from "@/components/ui/avatar";
2+
import Image from "next/image";
3+
import {clsx} from "clsx";
4+
5+
interface AvatarAndSkinProps {
6+
avatarUrl: string
7+
skinUrl: string
8+
className?: string
9+
}
10+
11+
export default function AvatarAndSkin({ avatarUrl, skinUrl, className }: AvatarAndSkinProps) {
12+
return (
13+
<div className={clsx("relative h-full w-auto aspect-[5/4]", className)}>
14+
<div className="
15+
absolute
16+
right-0
17+
h-full
18+
z-0
19+
grid place-items-center
20+
">
21+
<Avatar className="h-full w-auto">
22+
<AvatarImage
23+
src={avatarUrl}
24+
alt="Avatar Image"
25+
loading="eager"
26+
/>
27+
<AvatarFallback>RZ</AvatarFallback>
28+
</Avatar>
29+
</div>
30+
31+
<div className="absolute bottom-0 h-[80%] aspect-[173/359] z-10">
32+
<Image
33+
src={skinUrl}
34+
alt="Skin Image"
35+
className="object-contain w-full h-full"
36+
fill
37+
priority
38+
/>
39+
</div>
40+
</div>
41+
)
42+
}

0 commit comments

Comments
 (0)