Project

General

Profile

1
// Name:            Spinner
2
// Description:     Component to create a loading spinner
3
//
4
// Component:       `uk-spinner`
5
//
6
// ========================================================================
7

    
8

    
9
// Variables
10
// ========================================================================
11

    
12
@spinner-size:                                  30px;
13
@spinner-stroke-width:                          1;
14
@spinner-radius:                                floor((@spinner-size - @spinner-stroke-width) / 2); // Minus stroke width to prevent overflow clipping
15
@spinner-circumference:                         round(2 * 3.141 * @spinner-radius);
16
@spinner-duration:                              1.4s;
17

    
18

    
19
/* ========================================================================
20
   Component: Spinner
21
 ========================================================================== */
22

    
23
/*
24
 * Adopts `uk-icon`
25
 */
26

    
27
.uk-spinner {
28
    .hook-spinner;
29
}
30

    
31

    
32
/* SVG
33
 ========================================================================== */
34

    
35
.uk-spinner > * {
36
    -webkit-animation: uk-spinner-rotate @spinner-duration linear infinite;
37
    animation: uk-spinner-rotate @spinner-duration linear infinite;
38
}
39

    
40
@-webkit-keyframes uk-spinner-rotate {
41
    0% { -webkit-transform: rotate(0deg); }
42
    100% { -webkit-transform: rotate(270deg); }
43
}
44

    
45
@keyframes uk-spinner-rotate {
46
    0% { transform: rotate(0deg); }
47
    100% { transform: rotate(270deg); }
48
}
49

    
50
/*
51
 * Circle
52
 */
53

    
54
.uk-spinner > * > * {
55
    stroke-dasharray: @spinner-circumference;
56
    stroke-dashoffset: 0;
57
    transform-origin: center;
58
    -webkit-animation: uk-spinner-dash @spinner-duration ease-in-out infinite;
59
    animation: uk-spinner-dash @spinner-duration ease-in-out infinite;
60
    stroke-width: @spinner-stroke-width;
61
    stroke-linecap: round;
62
}
63

    
64
@-webkit-keyframes uk-spinner-dash {
65
    0% { stroke-dashoffset: @spinner-circumference; }
66
    50% {
67
        stroke-dashoffset: @spinner-circumference/4;
68
        -webkit-transform:rotate(135deg);
69
    }
70
    100% {
71
        stroke-dashoffset: @spinner-circumference;
72
        -webkit-transform:rotate(450deg);
73
    }
74
}
75

    
76
@keyframes uk-spinner-dash {
77
    0% { stroke-dashoffset: @spinner-circumference; }
78
    50% {
79
        stroke-dashoffset: @spinner-circumference/4;
80
        transform:rotate(135deg);
81
    }
82
    100% {
83
        stroke-dashoffset: @spinner-circumference;
84
        transform:rotate(450deg);
85
    }
86
}
87

    
88

    
89
// Hooks
90
// ========================================================================
91

    
92
.hook-spinner-misc;
93

    
94
.hook-spinner() {}
95
.hook-spinner-misc() {}
(52-52/66)