UNPKG

7.7 kBtext/lessView Raw
1@select-prefix: ~'rc-select';
2
3* {
4 box-sizing: border-box;
5}
6
7.search-input-without-border() {
8 .@{select-prefix}-selection-search-input {
9 border: none;
10 outline: none;
11 background: rgba(255, 0, 0, 0.2);
12 width: 100%;
13 }
14}
15
16.@{select-prefix} {
17 display: inline-block;
18 font-size: 12px;
19 width: 100px;
20 position: relative;
21
22 &-disabled {
23 &,
24 & input {
25 cursor: not-allowed;
26 }
27
28 .@{select-prefix}-selector {
29 opacity: 0.3;
30 }
31 }
32
33 &-show-arrow&-loading {
34 .@{select-prefix}-arrow {
35 &-icon::after {
36 box-sizing: border-box;
37 width: 12px;
38 height: 12px;
39 border-radius: 100%;
40 border: 2px solid #999;
41 border-top-color: transparent;
42 border-bottom-color: transparent;
43 transform: none;
44 margin-top: 4px;
45
46 animation: rcSelectLoadingIcon 0.5s infinite;
47 }
48 }
49 }
50
51 // ============== Selector ===============
52 .@{select-prefix}-selection-placeholder {
53 opacity: 0.4;
54 pointer-events: none;
55 }
56
57 // ============== Search ===============
58 .@{select-prefix}-selection-search-input {
59 appearance: none;
60
61 &::-webkit-search-cancel-button {
62 display: none;
63 appearance: none;
64 }
65 }
66
67 // --------------- Single ----------------
68 &-single {
69 .@{select-prefix}-selector {
70 display: flex;
71 position: relative;
72
73 .@{select-prefix}-selection-search {
74 width: 100%;
75
76 &-input {
77 width: 100%;
78 }
79 }
80
81 .@{select-prefix}-selection-item,
82 .@{select-prefix}-selection-placeholder {
83 position: absolute;
84 top: 1px;
85 left: 3px;
86 pointer-events: none;
87 }
88 }
89
90 // Not customize
91 &:not(.@{select-prefix}-customize-input) {
92 .@{select-prefix}-selector {
93 padding: 1px;
94 border: 1px solid #000;
95
96 .search-input-without-border();
97 }
98 }
99 }
100
101 // -------------- Multiple ---------------
102 &-multiple .@{select-prefix}-selector {
103 display: flex;
104 flex-wrap: wrap;
105 padding: 1px;
106 border: 1px solid #000;
107
108 .@{select-prefix}-selection-item {
109 flex: none;
110 background: #bbb;
111 border-radius: 4px;
112 margin-right: 2px;
113 padding: 0 8px;
114
115 &-disabled {
116 cursor: not-allowed;
117 opacity: 0.5;
118 }
119 }
120
121 .@{select-prefix}-selection-overflow {
122 display: flex;
123 flex-wrap: wrap;
124 width: 100%;
125
126 &-item {
127 flex: none;
128 max-width: 100%;
129 }
130 }
131
132 .@{select-prefix}-selection-search {
133 position: relative;
134 max-width: 100%;
135
136 &-input,
137 &-mirror {
138 padding: 1px;
139 font-family: system-ui;
140 }
141
142 &-mirror {
143 position: absolute;
144 z-index: 999;
145 white-space: nowrap;
146 position: none;
147 left: 0;
148 top: 0;
149 visibility: hidden;
150 }
151 }
152
153 .search-input-without-border();
154 }
155
156 // ================ Icons ================
157 &-allow-clear {
158 &.@{select-prefix}-multiple .@{select-prefix}-selector {
159 padding-right: 20px;
160 }
161
162 .@{select-prefix}-clear {
163 position: absolute;
164 right: 20px;
165 top: 0;
166 }
167 }
168
169 &-show-arrow {
170 &.@{select-prefix}-multiple .@{select-prefix}-selector {
171 padding-right: 20px;
172 }
173
174 .@{select-prefix}-arrow {
175 pointer-events: none;
176 position: absolute;
177 right: 5px;
178 top: 0;
179
180 &-icon::after {
181 content: '';
182 border: 5px solid transparent;
183 width: 0;
184 height: 0;
185 display: inline-block;
186 border-top-color: #999;
187 transform: translateY(5px);
188 }
189 }
190 }
191
192 // =============== Focused ===============
193 &-focused {
194 .@{select-prefix}-selector {
195 border-color: blue !important;
196 }
197 }
198
199 // ============== Dropdown ===============
200 &-dropdown {
201 border: 1px solid green;
202 min-height: 100px;
203 position: absolute;
204 background: #fff;
205
206 &-hidden {
207 display: none;
208 }
209 }
210
211 // =============== Option ================
212 &-item {
213 font-size: 16px;
214 line-height: 1.5;
215 padding: 4px 16px;
216
217 // >>> Group
218 &-group {
219 color: #999;
220 font-weight: bold;
221 font-size: 80%;
222 }
223
224 // >>> Option
225 &-option {
226 position: relative;
227
228 &-grouped {
229 padding-left: 24px;
230 }
231
232 .@{select-prefix}-item-option-state {
233 position: absolute;
234 right: 0;
235 top: 4px;
236 pointer-events: none;
237 }
238
239 // ------- Active -------
240 &-active {
241 background: #ddd;
242 }
243
244 // ------ Disabled ------
245 &-disabled {
246 color: #999;
247 }
248 }
249
250 // >>> Empty
251 &-empty {
252 text-align: center;
253 color: #999;
254 }
255 }
256}
257
258.@{select-prefix}-selection__choice-zoom {
259 transition: all 0.3s;
260}
261
262.@{select-prefix}-selection__choice-zoom-appear {
263 opacity: 0;
264 transform: scale(0.5);
265
266 &&-active {
267 opacity: 1;
268 transform: scale(1);
269 }
270}
271.@{select-prefix}-selection__choice-zoom-leave {
272 opacity: 1;
273 transform: scale(1);
274
275 &&-active {
276 opacity: 0;
277 transform: scale(0.5);
278 }
279}
280
281.effect() {
282 animation-duration: 0.3s;
283 animation-fill-mode: both;
284 transform-origin: 0 0;
285}
286
287.@{select-prefix}-dropdown {
288 &-slide-up-enter,
289 &-slide-up-appear {
290 .effect();
291 opacity: 0;
292 animation-timing-function: cubic-bezier(0.08, 0.82, 0.17, 1);
293 animation-play-state: paused;
294 }
295
296 &-slide-up-leave {
297 .effect();
298 opacity: 1;
299 animation-timing-function: cubic-bezier(0.6, 0.04, 0.98, 0.34);
300 animation-play-state: paused;
301 }
302
303 &-slide-up-enter&-slide-up-enter-active&-placement-bottomLeft,
304 &-slide-up-appear&-slide-up-appear-active&-placement-bottomLeft,
305 &-slide-up-enter&-slide-up-enter-active&-placement-bottomRight,
306 &-slide-up-appear&-slide-up-appear-active&-placement-bottomRight {
307 animation-name: rcSelectDropdownSlideUpIn;
308 animation-play-state: running;
309 }
310
311 &-slide-up-leave&-slide-up-leave-active&-placement-bottomLeft,
312 &-slide-up-leave&-slide-up-leave-active&-placement-bottomRight {
313 animation-name: rcSelectDropdownSlideUpOut;
314 animation-play-state: running;
315 }
316
317 &-slide-up-enter&-slide-up-enter-active&-placement-topLeft,
318 &-slide-up-appear&-slide-up-appear-active&-placement-topLeft,
319 &-slide-up-enter&-slide-up-enter-active&-placement-topRight,
320 &-slide-up-appear&-slide-up-appear-active&-placement-topRight {
321 animation-name: rcSelectDropdownSlideDownIn;
322 animation-play-state: running;
323 }
324
325 &-slide-up-leave&-slide-up-leave-active&-placement-topLeft,
326 &-slide-up-leave&-slide-up-leave-active&-placement-topRight {
327 animation-name: rcSelectDropdownSlideDownOut;
328 animation-play-state: running;
329 }
330}
331
332@keyframes rcSelectDropdownSlideUpIn {
333 0% {
334 opacity: 0;
335 transform-origin: 0% 0%;
336 transform: scaleY(0);
337 }
338 100% {
339 opacity: 1;
340 transform-origin: 0% 0%;
341 transform: scaleY(1);
342 }
343}
344@keyframes rcSelectDropdownSlideUpOut {
345 0% {
346 opacity: 1;
347 transform-origin: 0% 0%;
348 transform: scaleY(1);
349 }
350 100% {
351 opacity: 0;
352 transform-origin: 0% 0%;
353 transform: scaleY(0);
354 }
355}
356
357@keyframes rcSelectDropdownSlideDownIn {
358 0% {
359 transform: scaleY(0);
360 transform-origin: 100% 100%;
361 opacity: 0;
362 }
363
364 100% {
365 transform: scaleY(1);
366 transform-origin: 100% 100%;
367 opacity: 1;
368 }
369}
370
371@keyframes rcSelectDropdownSlideDownOut {
372 0% {
373 transform: scaleY(1);
374 transform-origin: 100% 100%;
375 opacity: 1;
376 }
377
378 100% {
379 transform: scaleY(0);
380 transform-origin: 100% 100%;
381 opacity: 0;
382 }
383}
384
385@keyframes rcSelectLoadingIcon {
386 0% {
387 transform: rotate(0);
388 }
389 100% {
390 transform: rotate(360deg);
391 }
392}