Skip to content

Commit 3aa2e9a

Browse files
committed
Add styled button to ProfilePage for external link navigation
1 parent a1016cf commit 3aa2e9a

1 file changed

Lines changed: 107 additions & 1 deletion

File tree

src/components/Profile/ProfilePage.jsx

Lines changed: 107 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import React, { useEffect, useState } from 'react';
2+
import styled from 'styled-components';
23
import { useParams } from 'react-router-dom';
34
import Profile from './Profile';
45
import profilesList from '../../ProfilesList.json';
@@ -42,9 +43,114 @@ const ProfilePage = () => {
4243

4344
return (
4445
<div className="min-h-screen bg-[#0e1a34] pt-12 text-white">
45-
<Profile data={profileData} />
46+
<div className="mx-2 md:mx-16">
47+
<Profile data={profileData} />
48+
</div>
49+
<div className="mt-8 flex justify-center">
50+
<a href="https://www.devdisplay.org" target="_blank" rel="noopener noreferrer">
51+
<StyledButton>
52+
<div className="blob1" />
53+
<div className="inner">Visit DevDisplay</div>
54+
</StyledButton>
55+
</a>
56+
</div>
4657
</div>
4758
);
4859
};
4960

61+
const StyledButton = styled.button`
62+
cursor: pointer;
63+
font-size: 1rem;
64+
border-radius: 12px;
65+
border: none;
66+
padding: 1px;
67+
background: radial-gradient(circle 80px at 80% -10%, #ffffff, #181b1b);
68+
position: relative;
69+
transition:
70+
background 0.3s,
71+
transform 0.3s;
72+
animation: zoom 3s ease-in-out infinite;
73+
margin-top: 16px;
74+
75+
&:hover {
76+
transform: scale(0.98);
77+
animation-play-state: paused;
78+
}
79+
80+
&::after {
81+
content: '';
82+
position: absolute;
83+
width: 65%;
84+
height: 60%;
85+
border-radius: 120px;
86+
top: 0;
87+
right: 0;
88+
box-shadow: 0 0 20px #ffffff38;
89+
z-index: -1;
90+
transition: box-shadow 0.3s;
91+
}
92+
93+
&:hover::after {
94+
box-shadow: 0 0 10px #ffffff18;
95+
}
96+
97+
.blob1 {
98+
position: absolute;
99+
width: 50px;
100+
height: 100%;
101+
border-radius: 16px;
102+
bottom: 0;
103+
left: 0;
104+
background: radial-gradient(circle 60px at 0% 100%, #3fe9ff, #0000ff80, transparent);
105+
box-shadow: -10px 10px 30px #0051ff2d;
106+
transition:
107+
background 0.3s,
108+
box-shadow 0.3s;
109+
}
110+
111+
&:hover .blob1 {
112+
box-shadow: -5px 5px 20px #000;
113+
}
114+
115+
.inner {
116+
padding: 10px 20px;
117+
border-radius: 12px;
118+
color: #fff;
119+
z-index: 3;
120+
position: relative;
121+
background: radial-gradient(circle 80px at 80% -50%, #777777, #0f1111);
122+
transition: background 0.3s;
123+
}
124+
125+
&:hover .inner {
126+
background: radial-gradient(circle 80px at 80% -50%, #333333, #0f0f0f);
127+
}
128+
129+
.inner::before {
130+
content: '';
131+
width: 100%;
132+
height: 100%;
133+
left: 0;
134+
top: 0;
135+
border-radius: 12px;
136+
background: radial-gradient(circle 60px at 0% 100%, #00e1ff1a, #0000ff11, transparent);
137+
position: absolute;
138+
transition: opacity 0.3s;
139+
}
140+
141+
&:hover .inner::before {
142+
opacity: 0;
143+
}
144+
145+
@keyframes zoom {
146+
0%,
147+
100% {
148+
transform: scale(1);
149+
}
150+
50% {
151+
transform: scale(1.05);
152+
}
153+
}
154+
`;
155+
50156
export default ProfilePage;

0 commit comments

Comments
 (0)