Skip to content

Commit 8264d3c

Browse files
committed
Close #20
1 parent d409217 commit 8264d3c

File tree

1 file changed

+32
-83
lines changed

1 file changed

+32
-83
lines changed

css/components/button.css

Lines changed: 32 additions & 83 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
justify-content: center;
77
gap: var(--space-2);
88
padding: clamp(0.5rem, 1vw, 0.75rem) clamp(1rem, 2vw, 1.5rem);
9+
margin: var(--space-4) auto;
910
font-size: clamp(0.875rem, 1vw, 1rem);
1011
font-weight: 500;
1112
line-height: 1.25;
@@ -16,20 +17,20 @@
1617
transition: color var(--transition-colors), background-color var(--transition-colors), transform 0.2s;
1718
background: var(--btn-bg, var(--primary));
1819
color: var(--btn-color, #fff);
19-
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
20+
box-shadow: var(--shadow-md);
2021
overflow: hidden;
2122
}
2223

2324
/* Hover and Active States */
2425
.btn:hover {
2526
background: var(--btn-bg-hover, var(--primary-hover));
26-
box-shadow: 0 6px 8px rgba(0, 0, 0, 0.15);
27+
box-shadow: var(--shadow-lg);
2728
transform: translateY(-2px);
2829
}
2930

3031
.btn:active {
3132
transform: translateY(1px);
32-
box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.2);
33+
box-shadow: inset var(--shadow-sm);
3334
}
3435

3536
.btn:disabled {
@@ -40,22 +41,16 @@
4041
}
4142

4243
/* Animation Variants */
43-
.btn-animate-pulse:hover, .btn-animate-pulse:active {
44+
.btn[data-animate="pulse"]:hover, .btn[data-animate="pulse"]:active {
4445
animation: btn-pulse 0.6s infinite;
4546
}
4647

4748
@keyframes btn-pulse {
48-
0%, 100% {
49-
transform: scale(1);
50-
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
51-
}
52-
50% {
53-
transform: scale(1.05);
54-
box-shadow: 0 6px 12px rgba(0, 0, 0, 0.2);
55-
}
49+
0%, 100% { transform: scale(1); }
50+
50% { transform: scale(1.05); }
5651
}
5752

58-
.btn-animate-fill::before {
53+
.btn[data-animate="fill"]::before {
5954
content: '';
6055
position: absolute;
6156
top: 0;
@@ -71,74 +66,61 @@
7166
opacity: 0.1;
7267
}
7368

74-
.btn-animate-fill:hover::before, .btn-animate-fill:active::before {
69+
.btn[data-animate="fill"]:hover::before, .btn[data-animate="fill"]:active::before {
7570
transform: scaleX(1);
7671
}
7772

78-
.btn-animate-fill {
79-
z-index: 1;
80-
color: inherit;
81-
}
82-
83-
.btn-animate-bounce:hover, .btn-animate-bounce:active {
73+
.btn[data-animate="bounce"]:hover, .btn[data-animate="bounce"]:active {
8474
animation: btn-bounce 0.4s;
8575
}
8676

8777
@keyframes btn-bounce {
88-
0%, 100% {
89-
transform: translateY(0);
90-
}
91-
50% {
92-
transform: translateY(-5px);
93-
}
78+
0%, 100% { transform: translateY(0); }
79+
50% { transform: translateY(-5px); }
9480
}
9581

96-
.btn-animate-rotate:hover {
82+
.btn[data-animate="rotate"]:hover {
9783
animation: btn-rotate 0.5s ease-in-out;
9884
}
9985

10086
@keyframes btn-rotate {
101-
0% {
102-
transform: rotate(0deg);
103-
}
104-
100% {
105-
transform: rotate(360deg);
106-
}
87+
0% { transform: rotate(0deg); }
88+
100% { transform: rotate(360deg); }
10789
}
10890

10991
/* Button Variants */
110-
.btn-primary {
92+
.btn[data-variant="primary"] {
11193
--btn-bg: var(--primary);
11294
--btn-bg-hover: var(--primary-hover);
11395
}
11496

115-
.btn-secondary {
97+
.btn[data-variant="secondary"] {
11698
--btn-bg: var(--secondary);
11799
--btn-bg-hover: var(--secondary-hover);
118100
}
119101

120-
.btn-success {
102+
.btn[data-variant="success"] {
121103
--btn-bg: var(--success);
122104
--btn-bg-hover: var(--success-hover);
123105
}
124106

125-
.btn-danger {
107+
.btn[data-variant="danger"] {
126108
--btn-bg: var(--danger);
127109
--btn-bg-hover: var(--danger-hover);
128110
}
129111

130-
.btn-warning {
112+
.btn[data-variant="warning"] {
131113
--btn-bg: var(--warning);
132114
--btn-bg-hover: var(--warning-hover);
133115
}
134116

135-
.btn-info {
117+
.btn[data-variant="info"] {
136118
--btn-bg: var(--info);
137119
--btn-bg-hover: var(--info-hover);
138120
}
139121

140122
/* Outline Button */
141-
.btn-outline {
123+
.btn[data-variant="outline"] {
142124
--btn-bg: transparent;
143125
--btn-bg-hover: var(--primary);
144126
--btn-color: var(--primary);
@@ -147,12 +129,10 @@
147129
transition: box-shadow var(--transition-all), background var(--transition-colors);
148130
}
149131

150-
.btn-outline:hover {
151-
color: #fff;
152-
}
132+
.btn[data-variant="outline"]:hover { color: #fff; }
153133

154134
/* Ghost Button */
155-
.btn-ghost {
135+
.btn[data-variant="ghost"] {
156136
--btn-bg: transparent;
157137
--btn-bg-hover: var(--neutral-100);
158138
--btn-color: var(--neutral-700);
@@ -161,24 +141,19 @@
161141
}
162142

163143
/* Button Sizes */
164-
.btn-sm {
144+
.btn[data-size="sm"] {
165145
padding: clamp(0.25rem, 0.5vw, 0.5rem) clamp(0.5rem, 1vw, 1rem);
166146
font-size: clamp(0.75rem, 0.8vw, 0.875rem);
167147
}
168148

169-
.btn-lg {
149+
.btn[data-size="lg"] {
170150
padding: clamp(0.75rem, 1.5vw, 1rem) clamp(1.5rem, 3vw, 2rem);
171151
font-size: clamp(1rem, 1.2vw, 1.25rem);
172152
}
173153

174154
/* Button Shapes */
175-
.btn-rounded {
176-
border-radius: var(--radius-full);
177-
}
178-
179-
.btn-square {
180-
border-radius: 0;
181-
}
155+
.btn[data-shape="rounded"] { border-radius: var(--radius-full); }
156+
.btn[data-shape="square"] { border-radius: 0; }
182157

183158
/* Icon-only Buttons */
184159
.btn-icon-only {
@@ -187,25 +162,13 @@
187162
height: clamp(2rem, 4vw, 2.5rem);
188163
}
189164

190-
.btn-icon-only.btn-sm {
191-
padding: clamp(0.375rem, 0.5vw, 0.5rem);
192-
width: clamp(1.75rem, 3vw, 2rem);
193-
height: clamp(1.75rem, 3vw, 2rem);
194-
}
195-
196-
.btn-icon-only.btn-lg {
197-
padding: clamp(0.75rem, 1.5vw, 1rem);
198-
width: clamp(2.75rem, 5vw, 3rem);
199-
height: clamp(2.75rem, 5vw, 3rem);
200-
}
201-
202165
/* Loading State */
203-
.btn-loading {
166+
.btn[data-loading="true"] {
204167
position: relative;
205168
color: transparent !important;
206169
}
207170

208-
.btn-loading::after {
171+
.btn[data-loading="true"]::after {
209172
content: "";
210173
position: absolute;
211174
width: 1rem;
@@ -218,27 +181,19 @@
218181
animation: btn-spin 0.6s linear infinite;
219182
}
220183

221-
@keyframes btn-spin {
222-
to {
223-
transform: rotate(360deg);
224-
}
225-
}
184+
@keyframes btn-spin { to { transform: rotate(360deg); } }
226185

227186
/* Button Group */
228187
.btn-group {
229188
display: inline-flex;
230189
align-items: center;
231190
}
232191

233-
.btn-group .btn {
234-
border-radius: 0;
235-
}
236-
192+
.btn-group .btn { border-radius: 0; }
237193
.btn-group .btn:first-child {
238194
border-top-left-radius: var(--radius-lg);
239195
border-bottom-left-radius: var(--radius-lg);
240196
}
241-
242197
.btn-group .btn:last-child {
243198
border-top-right-radius: var(--radius-lg);
244199
border-bottom-right-radius: var(--radius-lg);
@@ -250,10 +205,4 @@
250205
padding: clamp(0.5rem, 2vw, 0.75rem) clamp(0.75rem, 4vw, 1.25rem);
251206
font-size: clamp(0.75rem, 1.5vw, 0.875rem);
252207
}
253-
254-
.btn-icon-only {
255-
padding: clamp(0.375rem, 1vw, 0.5rem);
256-
width: clamp(1.75rem, 4vw, 2rem);
257-
height: clamp(1.75rem, 4vw, 2rem);
258-
}
259208
}

0 commit comments

Comments
 (0)