UNPKG

11.4 kBtext/lessView Raw
1/*!
2 * # Fomantic-UI - Loader
3 * http://github.com/fomantic/Fomantic-UI/
4 *
5 *
6 * Released under the MIT license
7 * http://opensource.org/licenses/MIT
8 *
9 */
10/*******************************
11 Theme
12*******************************/
13
14@type : 'element';
15@element : 'loader';
16
17@import (multiple) '../../theme.config';
18
19/*******************************
20 Loader
21*******************************/
22
23
24/* Standard Size */
25.ui.loader {
26 display: none;
27 position: absolute;
28 top: @loaderTopOffset;
29 left: @loaderLeftOffset;
30 margin: 0;
31 text-align: center;
32 z-index: 1000;
33 transform: translateX(-50%) translateY(-50%);
34}
35
36/* Static Shape */
37.ui.loader:before {
38 position: absolute;
39 content: '';
40 top: 0;
41 left: 50%;
42 width: 100%;
43 height: 100%;
44
45 border-radius: @circularRadius;
46 border: @loaderLineWidth solid @loaderFillColor;
47}
48
49/* Active Shape */
50.ui.loader:after {
51 position: absolute;
52 content: '';
53 top: 0;
54 left: 50%;
55 width: 100%;
56 height: 100%;
57
58 animation: loader @loaderSpeed infinite linear;
59 border: @loaderLineWidth solid @shapeBorderColor;
60 border-radius: @circularRadius;
61
62 box-shadow: 0 0 0 1px transparent;
63}
64
65& when (@variationLoaderSpeeds) {
66 /* Speeds */
67
68 .ui.fast.loading.loading:after,
69 .ui.fast.loading.loading .input > i.icon:after,
70 .ui.fast.loading.loading > i.icon:after,
71 .ui.fast.loader:after {
72 animation-duration: @loaderSpeedFast;
73 }
74
75 .ui.slow.loading.loading:after,
76 .ui.slow.loading.loading .input > i.icon:after,
77 .ui.slow.loading.loading > i.icon:after,
78 .ui.slow.loader:after {
79 animation-duration: @loaderSpeedSlow;
80 }
81}
82
83/* Active Animation */
84@keyframes loader {
85 100% {
86 transform: rotate(360deg);
87 }
88}
89
90/*-------------------
91 Coupling
92--------------------*/
93
94/* Show inside active dimmer */
95.ui.dimmer > .loader {
96 display: block;
97}
98
99/* Black Dimmer */
100.ui.dimmer > .ui.loader {
101 color: @invertedLoaderTextColor;
102}
103.ui.dimmer > .ui.loader:not(.elastic):before {
104 border-color: @invertedLoaderFillColor;
105}
106
107/* White Dimmer (Inverted) */
108.ui.inverted.dimmer > .ui.loader {
109 color: @loaderTextColor;
110}
111.ui.inverted.dimmer > .ui.loader:not(.elastic):before {
112 border-color: @loaderFillColor;
113}
114
115/*******************************
116 Types
117*******************************/
118
119& when (@variationLoaderText) {
120 /*-------------------
121 Text
122 --------------------*/
123
124 .ui.ui.ui.ui.text.loader {
125 width: auto;
126 height: auto;
127 text-align: center;
128 font-style: normal;
129 }
130}
131
132
133/*******************************
134 States
135*******************************/
136& when (@variationLoaderIndeterminate) {
137 .ui.indeterminate.loader:after {
138 animation-direction: @indeterminateDirection;
139 animation-duration: @indeterminateSpeed;
140 }
141}
142
143.ui.loader.active,
144.ui.loader.visible {
145 display: block;
146}
147.ui.loader.disabled,
148.ui.loader.hidden {
149 display: none;
150}
151
152/*******************************
153 Variations
154*******************************/
155
156
157/*-------------------
158 Sizes
159--------------------*/
160
161.ui.loader {
162 width: @medium;
163 height: @medium;
164 font-size: @mediumFontSize;
165}
166.ui.loader:before,
167.ui.loader:after {
168 width: @medium;
169 height: @medium;
170 margin: @mediumOffset;
171}
172& when (@variationLoaderText) {
173 .ui.text.loader {
174 min-width: @medium;
175 padding-top: (@medium + @textDistance);
176 }
177}
178& when not (@variationLoaderSizes = false) {
179 each(@variationLoaderSizes, {
180 @o: @{value}Offset;
181 @f: @{value}FontSize;
182 @s: @@value;
183 .ui.@{value}.loader {
184 width: @s;
185 height: @s;
186 font-size: @@f;
187 }
188 .ui.@{value}.loader:before,
189 .ui.@{value}.loader:after {
190 width: @s;
191 height: @s;
192 margin: @@o;
193 }
194 & when (@variationLoaderText) {
195 .ui.@{value}.text.loader {
196 min-width: @s;
197 padding-top: (@s + @textDistance);
198 }
199 }
200 })
201}
202
203/*-------------------
204 Colors
205--------------------*/
206
207each(@colors, {
208 @color: replace(@key, '@', '');
209 @c: @colors[@@color][color];
210 @l: @colors[@@color][light];
211
212 .ui.@{color}.elastic.loader.loader:before,
213 .ui.@{color}.basic.elastic.loading.button:before,
214 .ui.@{color}.basic.elastic.loading.button:after,
215 .ui.@{color}.elastic.loading.loading.loading:not(.segment):before,
216 .ui.@{color}.elastic.loading.loading.loading .input > i.icon:before,
217 .ui.@{color}.elastic.loading.loading.loading.loading > i.icon:before,
218 .ui.@{color}.loading.loading.loading.loading:not(.usual):not(.button):after,
219 .ui.@{color}.loading.loading.loading.loading .input > i.icon:after,
220 .ui.@{color}.loading.loading.loading.loading > i.icon:after,
221 .ui.@{color}.loader.loader.loader:after {
222 color: @c;
223 }
224 .ui.inverted.@{color}.elastic.loader:before,
225 .ui.inverted.@{color}.elastic.loading.loading.loading:not(.segment):before,
226 .ui.inverted.@{color}.elastic.loading.loading.loading .input > i.icon:before,
227 .ui.inverted.@{color}.elastic.loading.loading.loading > i.icon:before,
228 .ui.inverted.@{color}.loading.loading.loading.loading:not(.usual):after,
229 .ui.inverted.@{color}.loading.loading.loading.loading .input > i.icon:after,
230 .ui.inverted.@{color}.loading.loading.loading.loading > i.icon:after,
231 .ui.inverted.@{color}.loader.loader.loader:after {
232 color: @l;
233 }
234})
235
236.ui.elastic.loader.loader:before,
237.ui.elastic.loading.loading.loading:before,
238.ui.elastic.loading.loading.loading .input > i.icon:before,
239.ui.elastic.loading.loading.loading > i.icon:before,
240.ui.loading.loading.loading.loading:not(.usual):after,
241.ui.loading.loading.loading.loading .input > i.icon:after,
242.ui.loading.loading.loading.loading > i.icon:after,
243.ui.loader.loader.loader:after {
244 border-color: currentColor;
245}
246.ui.elastic.loading.loading.loading.loading.button:not(.inverted):not(.basic):before {
247 color: @invertedLoaderLineColor;
248}
249.ui.elastic.basic.loading.button:before,
250.ui.elastic.basic.loading.button:after {
251 color: @loaderLineColor;
252}
253.ui.double.loading.loading.loading.loading.button:after {
254 border-bottom-color: currentColor;
255}
256
257& when (@variationLoaderInline) {
258 /*-------------------
259 Inline
260 --------------------*/
261
262 .ui.inline.loader {
263 position: relative;
264 vertical-align: @inlineVerticalAlign;
265 margin: @inlineMargin;
266 left: 0;
267 top: 0;
268 transform: none;
269 }
270
271 .ui.inline.loader.active,
272 .ui.inline.loader.visible {
273 display: inline-block;
274 }
275
276 /* Centered Inline */
277 .ui.centered.inline.loader.active,
278 .ui.centered.inline.loader.visible {
279 display: block;
280 margin-left: auto;
281 margin-right: auto;
282 }
283}
284
285.ui.loading.loading.loading.loading.loading.loading:after,
286.ui.loading.loading.loading.loading.loading.loading .input > i.icon:after,
287.ui.loading.loading.loading.loading.loading.loading > i.icon:after,
288.ui.loader.loader.loader.loader.loader:after {
289 border-left-color:transparent;
290 border-right-color:transparent;
291}
292.ui.loading.loading.loading.loading.loading.loading.loading:not(.double):after,
293.ui.loading.loading.loading.loading.loading.loading.loading:not(.double) .input > i.icon:after,
294.ui.loading.loading.loading.loading.loading.loading.loading:not(.double) > i.icon:after,
295.ui.loader.loader.loader.loader.loader.loader:not(.double):after {
296 border-bottom-color: transparent;
297}
298.ui.loading.loading.loading.loading.loading.loading.segment:after,
299.ui.loading.loading.loading.loading.loading.loading.form:after {
300 border-left-color:@loaderFillColor;
301 border-right-color:@loaderFillColor;
302}
303.ui.loading.loading.loading.loading.loading.loading.segment:not(.double):after,
304.ui.loading.loading.loading.loading.loading.loading.form:not(.double):after {
305 border-bottom-color: @loaderFillColor;
306}
307
308& when (@variationLoaderElastic) {
309 /*-------------------
310 Elastic
311 --------------------*/
312
313 .ui.dimmer > .ui.elastic.loader {
314 color: @invertedLoaderLineColor;
315 }
316 .ui.inverted.dimmer > .ui.elastic.loader {
317 color: @loaderLineColor;
318 }
319 .ui.elastic.loading.loading:not(.form):not(.segment):after,
320 .ui.elastic.loading.loading .input > i.icon:after,
321 .ui.elastic.loading.loading > i.icon:after,
322 .ui.elastic.loader.loader:after {
323 animation: loader 1s infinite cubic-bezier(.27, 1.05, .92, .61);
324 animation-delay: 0.3s;
325 }
326 .ui.elastic.loading.loading.loading:not(.form):not(.segment):before,
327 .ui.elastic.loading.loading.loading .input > i.icon:before,
328 .ui.elastic.loading.loading.loading > i.icon:before,
329 .ui.elastic.loader.loader:before {
330 animation: elastic-loader 1s infinite cubic-bezier(.27, 1.05, .92, .61);
331 -moz-animation: currentcolor-elastic-loader 1s infinite cubic-bezier(.27, 1.05, .92, .61);
332 border-right-color: transparent;
333 }
334 & when (@variationLoaderInline) {
335 .ui.elastic.inline.loader:empty {
336 animation: loader 8s infinite linear;
337 }
338 }
339 & when (@variationLoaderSpeeds) {
340 .ui.slow.elastic.loading.loading:not(.form):not(.segment):after,
341 .ui.slow.elastic.loading.loading .input > i.icon:after,
342 .ui.slow.elastic.loading.loading > i.icon:after,
343 .ui.slow.elastic.loader.loader:after {
344 animation-duration: 1.5s;
345 animation-delay: 0.45s;
346 }
347 .ui.slow.elastic.loading.loading.loading:not(.form):not(.segment):before,
348 .ui.slow.elastic.loading.loading.loading .input > i.icon:before,
349 .ui.slow.elastic.loading.loading.loading > i.icon:before,
350 .ui.slow.elastic.loader.loader:before {
351 animation-duration: 1.5s;
352 }
353 .ui.fast.elastic.loading.loading:not(.form):not(.segment):after,
354 .ui.fast.elastic.loading.loading .input > i.icon:after,
355 .ui.fast.elastic.loading.loading > i.icon:after,
356 .ui.fast.elastic.loader.loader:after {
357 animation-duration: 0.66s;
358 animation-delay: 0.20s;
359 }
360 .ui.fast.elastic.loading.loading.loading:not(.form):not(.segment):before,
361 .ui.fast.elastic.loading.loading.loading .input > i.icon:before,
362 .ui.fast.elastic.loading.loading.loading > i.icon:before,
363 .ui.fast.elastic.loader.loader:before {
364 animation-duration: 0.66s;
365 }
366 }
367 @keyframes elastic-loader {
368 0%, 1% {
369 border-left-color: transparent;
370 border-bottom-color: transparent
371 }
372 1.1%, 50% {
373 border-left-color: inherit;
374 }
375 10%, 35.1%{
376 border-bottom-color: transparent;
377 }
378 10.1%, 35%{
379 border-bottom-color: inherit;
380 }
381 50.1%{
382 border-left-color: transparent;
383 }
384 100% {
385 border-left-color: transparent;
386 border-bottom-color: transparent;
387 transform: rotate(360deg);
388 }
389 }
390
391 @keyframes currentcolor-elastic-loader {
392 0%, 1% {
393 border-left-color: transparent;
394 border-bottom-color: transparent
395 }
396 1.1%, 50% {
397 border-left-color: currentColor;
398 }
399 10%, 35.1%{
400 border-bottom-color: transparent;
401 }
402 10.1%, 35%{
403 border-bottom-color: currentColor;
404 }
405 50.1%{
406 border-left-color: transparent;
407 }
408 100% {
409 border-left-color: transparent;
410 border-bottom-color: transparent;
411 transform: rotate(360deg);
412 }
413 }
414}
415
416.loadUIOverrides();