Skip to content

Commit 6c891f3

Browse files
committed
feat: slide border button
1 parent d1500f5 commit 6c891f3

3 files changed

Lines changed: 105 additions & 0 deletions

File tree

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
import React from 'react'
2+
import clsx from 'clsx'
3+
4+
const SlideButton = ({
5+
children,
6+
className,
7+
textColor = '#1670f0',
8+
borderStartColor = '#0c002b',
9+
borderEndColor = '#1779ff',
10+
backgroundColor = 'transparent',
11+
style,
12+
...props
13+
}) => {
14+
const buttonStyle = {
15+
'--border-start': borderStartColor,
16+
'--border-end': borderEndColor,
17+
'--text-color': textColor,
18+
'--bg-color': backgroundColor,
19+
...style,
20+
}
21+
22+
return (
23+
<span
24+
className={clsx(
25+
'relative cursor-pointer overflow-hidden px-[10px] py-[10px] text-[14px] tracking-[5px] uppercase no-underline shadow-[0_20px_50px_rgba(0,0,0,0.5)]',
26+
'bg-[var(--bg-color)] text-[var(--text-color)]',
27+
className
28+
)}
29+
style={buttonStyle}
30+
{...props}
31+
>
32+
<span className="animate-wui-slide-right absolute top-0 left-0 h-[2px] w-full bg-linear-to-r from-[var(--border-start)] to-[var(--border-end)]" />
33+
<span className="animate-wui-slide-down absolute top-0 right-0 h-full w-[2px] bg-linear-to-b from-[var(--border-start)] to-[var(--border-end)]" />
34+
<span className="animate-wui-slide-left absolute bottom-0 left-0 h-[2px] w-full bg-linear-to-l from-[var(--border-start)] to-[var(--border-end)]" />
35+
<span className="animate-wui-slide-up absolute top-0 left-0 h-full w-[2px] bg-linear-to-t from-[var(--border-start)] to-[var(--border-end)]" />
36+
{children}
37+
</span>
38+
)
39+
}
40+
41+
export default SlideButton

src/pages/home/index.jsx

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@ import FlipWords from '@stateless/FlipWords'
6666
import BorderBeam from '@stateless/BorderBeam'
6767
import AutoSlider from '@stateless/AutoSlider'
6868
import AnimText from '@stateless/AnimText'
69+
import SlideButton from '@stateless/SlideButton'
6970
import firstImage from '@assets/images/88-300x160.jpg'
7071
import secondImage from '@assets/images/2-300x160.jpg'
7172

@@ -664,6 +665,24 @@ const Home = () => {
664665
<section style={{ margin: 20 }} className={styles.eHElAY}>
665666
Hi, React!
666667
</section>
668+
<section style={{ margin: 20 }} className="z-30 flex w-full items-center justify-start gap-8">
669+
<SlideButton
670+
backgroundColor="#0c002b"
671+
textColor="#1670f0"
672+
borderStartColor="rgba(22, 112, 240, 0.1)"
673+
borderEndColor="rgba(22, 112, 240, 0.7)"
674+
>
675+
Button
676+
</SlideButton>
677+
<SlideButton
678+
backgroundColor="#1a0b2e"
679+
textColor="#ff00ff"
680+
borderStartColor="rgba(255, 0, 255, 0.1)"
681+
borderEndColor="rgba(0, 255, 255, 0.7)"
682+
>
683+
Button
684+
</SlideButton>
685+
</section>
667686

668687
<section>
669688
<div className={styles.stages}>

src/styles/reset.css

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,51 @@
5050
transform: translate3d(0, 0, 0);
5151
}
5252
}
53+
54+
--animate-wui-slide-right: wui-slide-right 2s linear infinite;
55+
--animate-wui-slide-down: wui-slide-down 2s linear infinite;
56+
--animate-wui-slide-left: wui-slide-left 2s linear infinite;
57+
--animate-wui-slide-up: wui-slide-up 2s linear infinite;
58+
59+
@keyframes wui-slide-right {
60+
0% {
61+
transform: translateX(-100%);
62+
}
63+
64+
100% {
65+
transform: translateX(100%);
66+
}
67+
}
68+
69+
@keyframes wui-slide-down {
70+
0% {
71+
transform: translateY(-100%);
72+
}
73+
74+
100% {
75+
transform: translateY(100%);
76+
}
77+
}
78+
79+
@keyframes wui-slide-left {
80+
0% {
81+
transform: translateX(100%);
82+
}
83+
84+
100% {
85+
transform: translateX(-100%);
86+
}
87+
}
88+
89+
@keyframes wui-slide-up {
90+
0% {
91+
transform: translateY(100%);
92+
}
93+
94+
100% {
95+
transform: translateY(-100%);
96+
}
97+
}
5398
}
5499

55100
.hue-clip {

0 commit comments

Comments
 (0)