Project

General

Profile

1
// Name:            Animation
2
// Description:     Utilities for keyframe animations
3
//
4
// Component:       `uk-animation-*`
5
//
6
// Modifiers:       `uk-animation-reverse`
7
//                  `uk-animation-fast`
8
//                  `uk-animation-fade`
9
//                  `uk-animation-scale-up`
10
//                  `uk-animation-scale-down`
11
//                  `uk-animation-slide-top-*`
12
//                  `uk-animation-slide-bottom-*`
13
//                  `uk-animation-slide-left-*`
14
//                  `uk-animation-slide-right-*`
15
//                  `uk-animation-kenburns`
16
//                  `uk-animation-shake`
17
//
18
// Sub-objects:     `uk-animation-toggle`
19
//
20
// States:          `uk-hover`
21
//
22
// ========================================================================
23

    
24

    
25
// Variables
26
// ========================================================================
27

    
28
$animation-duration:                             0.5s !default;
29
$animation-fade-duration:                        0.8s !default;
30
$animation-kenburns-duration:                    15s !default;
31
$animation-fast-duration:                        0.1s !default;
32

    
33
$animation-slide-small-translate:                10px !default;
34
$animation-slide-medium-translate:               50px !default;
35

    
36

    
37
/* ========================================================================
38
   Component: Animation
39
 ========================================================================== */
40

    
41
[class*='uk-animation-'] {
42
    -webkit-animation-duration: $animation-duration;
43
    animation-duration: $animation-duration;
44
    -webkit-animation-timing-function: ease-out;
45
    animation-timing-function: ease-out;
46
    -webkit-animation-fill-mode: both;
47
    animation-fill-mode: both;
48
}
49

    
50

    
51
/* Direction modifier
52
 ========================================================================== */
53

    
54
.uk-animation-reverse {
55
    -webkit-animation-direction: reverse;
56
    animation-direction: reverse;
57
    -webkit-animation-timing-function: ease-in;
58
    animation-timing-function: ease-in;
59
}
60

    
61

    
62
/* Animations for scrollspy
63
 ========================================================================== */
64

    
65
/*
66
 * Fade
67
 */
68

    
69
.uk-animation-fade {
70
    -webkit-animation-name: uk-fade;
71
    animation-name: uk-fade;
72
    -webkit-animation-duration: $animation-fade-duration;
73
    animation-duration: $animation-fade-duration;
74
    -webkit-animation-timing-function: linear;
75
    animation-timing-function: linear;
76
}
77

    
78
/*
79
 * Scale
80
 */
81

    
82
.uk-animation-scale-up {
83
    -webkit-animation-name: uk-fade-scale-02;
84
    animation-name: uk-fade-scale-02;
85
}
86

    
87
.uk-animation-scale-down {
88
    -webkit-animation-name: uk-fade-scale-18;
89
    animation-name: uk-fade-scale-18;
90
}
91

    
92
/*
93
 * Slide
94
 */
95

    
96
.uk-animation-slide-top {
97
    -webkit-animation-name: uk-fade-top;
98
    animation-name: uk-fade-top;
99
}
100

    
101
.uk-animation-slide-bottom {
102
    -webkit-animation-name: uk-fade-bottom;
103
    animation-name: uk-fade-bottom;
104
}
105

    
106
.uk-animation-slide-left {
107
    -webkit-animation-name: uk-fade-left;
108
    animation-name: uk-fade-left;
109
}
110

    
111
.uk-animation-slide-right {
112
    -webkit-animation-name: uk-fade-right;
113
    animation-name: uk-fade-right;
114
}
115

    
116
/*
117
 * Slide Small
118
 */
119

    
120
.uk-animation-slide-top-small {
121
    -webkit-animation-name: uk-fade-top-small;
122
    animation-name: uk-fade-top-small;
123
}
124

    
125
.uk-animation-slide-bottom-small {
126
    -webkit-animation-name: uk-fade-bottom-small;
127
    animation-name: uk-fade-bottom-small;
128
}
129

    
130
.uk-animation-slide-left-small {
131
    -webkit-animation-name: uk-fade-left-small;
132
    animation-name: uk-fade-left-small;
133
}
134

    
135
.uk-animation-slide-right-small {
136
    -webkit-animation-name: uk-fade-right-small;
137
    animation-name: uk-fade-right-small;
138
}
139

    
140
/*
141
 * Slide Medium
142
 */
143

    
144
.uk-animation-slide-top-medium {
145
    -webkit-animation-name: uk-fade-top-medium;
146
    animation-name: uk-fade-top-medium;
147
}
148

    
149
.uk-animation-slide-bottom-medium {
150
    -webkit-animation-name: uk-fade-bottom-medium;
151
    animation-name: uk-fade-bottom-medium;
152
}
153

    
154
.uk-animation-slide-left-medium {
155
    -webkit-animation-name: uk-fade-left-medium;
156
    animation-name: uk-fade-left-medium;
157
}
158

    
159
.uk-animation-slide-right-medium {
160
    -webkit-animation-name: uk-fade-right-medium;
161
    animation-name: uk-fade-right-medium;
162
}
163

    
164
/*
165
 * Kenburns
166
 */
167

    
168
.uk-animation-kenburns {
169
    -webkit-animation-name: uk-scale-kenburns;
170
    animation-name: uk-scale-kenburns;
171
    -webkit-animation-duration: $animation-kenburns-duration;
172
    animation-duration: $animation-kenburns-duration;
173
}
174

    
175
/*
176
 * Shake
177
 */
178

    
179
.uk-animation-shake {
180
    -webkit-animation-name: uk-shake;
181
    animation-name: uk-shake;
182
}
183

    
184

    
185
/* Duration modifier
186
 ========================================================================== */
187

    
188
.uk-animation-fast {
189
    -webkit-animation-duration: $animation-fast-duration;
190
    animation-duration: $animation-fast-duration;
191
}
192

    
193

    
194
/* Enable animation only on hover
195
========================================================================== */
196

    
197
/*
198
 * Note: Firefox and IE needs this because animations are not triggered when switching between display `none` and `block`
199
 */
200

    
201
.uk-animation-toggle:not(:hover):not(.uk-hover) [class*='uk-animation-'] {
202
    -webkit-animation-name: none;
203
    animation-name: none;
204
}
205

    
206

    
207
/* Keyframes used by animation classes
208
 ========================================================================== */
209

    
210
/*
211
 * Fade
212
 */
213

    
214
@-webkit-keyframes uk-fade {
215
    0% { opacity: 0; }
216
    100% { opacity: 1; }
217
}
218

    
219
@keyframes uk-fade {
220
    0% { opacity: 0; }
221
    100% { opacity: 1; }
222
}
223

    
224
/*
225
 * Slide Top
226
 */
227

    
228
@-webkit-keyframes uk-fade-top {
229
    0% {
230
        opacity: 0;
231
        -webkit-transform: translateY(-100%);
232
    }
233
    100% {
234
        opacity: 1;
235
        -webkit-transform: translateY(0);
236
    }
237
}
238

    
239
@keyframes uk-fade-top {
240
    0% {
241
        opacity: 0;
242
        transform: translateY(-100%);
243
    }
244
    100% {
245
        opacity: 1;
246
        transform: translateY(0);
247
    }
248
}
249

    
250
/*
251
 * Slide Bottom
252
 */
253

    
254
@-webkit-keyframes uk-fade-bottom {
255
    0% {
256
        opacity: 0;
257
        -webkit-transform: translateY(100%);
258
    }
259
    100% {
260
        opacity: 1;
261
        -webkit-transform: translateY(0);
262
    }
263
}
264

    
265
@keyframes uk-fade-bottom {
266
    0% {
267
        opacity: 0;
268
        transform: translateY(100%);
269
    }
270
    100% {
271
        opacity: 1;
272
        transform: translateY(0);
273
    }
274
}
275

    
276
/*
277
 * Slide Left
278
 */
279

    
280
@-webkit-keyframes uk-fade-left {
281
    0% {
282
        opacity: 0;
283
        -webkit-transform: translateX(-100%);
284
    }
285
    100% {
286
        opacity: 1;
287
        -webkit-transform: translateX(0);
288
    }
289
}
290

    
291
@keyframes uk-fade-left {
292
    0% {
293
        opacity: 0;
294
        transform: translateX(-100%);
295
    }
296
    100% {
297
        opacity: 1;
298
        transform: translateX(0);
299
    }
300
}
301

    
302
/*
303
 * Slide Right
304
 */
305

    
306
@-webkit-keyframes uk-fade-right {
307
    0% {
308
        opacity: 0;
309
        -webkit-transform: translateX(100%);
310
    }
311
    100% {
312
        opacity: 1;
313
        -webkit-transform: translateX(0);
314
    }
315
}
316

    
317
@keyframes uk-fade-right {
318
    0% {
319
        opacity: 0;
320
        transform: translateX(100%);
321
    }
322
    100% {
323
        opacity: 1;
324
        transform: translateX(0);
325
    }
326
}
327

    
328
/*
329
 * Slide Top Small
330
 */
331

    
332
@-webkit-keyframes uk-fade-top-small {
333
    0% {
334
        opacity: 0;
335
        -webkit-transform: translateY(-$animation-slide-small-translate);
336
    }
337
    100% {
338
        opacity: 1;
339
        -webkit-transform: translateY(0);
340
    }
341
}
342

    
343
@keyframes uk-fade-top-small {
344
    0% {
345
        opacity: 0;
346
        transform: translateY(-$animation-slide-small-translate);
347
    }
348
    100% {
349
        opacity: 1;
350
        transform: translateY(0);
351
    }
352
}
353

    
354
/*
355
 * Slide Bottom Small
356
 */
357

    
358
@-webkit-keyframes uk-fade-bottom-small {
359
    0% {
360
        opacity: 0;
361
        -webkit-transform: translateY($animation-slide-small-translate);
362
    }
363
    100% {
364
        opacity: 1;
365
        -webkit-transform: translateY(0);
366
    }
367
}
368

    
369
@keyframes uk-fade-bottom-small {
370
    0% {
371
        opacity: 0;
372
        transform: translateY($animation-slide-small-translate);
373
    }
374
    100% {
375
        opacity: 1;
376
        transform: translateY(0);
377
    }
378
}
379

    
380
/*
381
 * Slide Left Small
382
 */
383

    
384
@-webkit-keyframes uk-fade-left-small {
385
    0% {
386
        opacity: 0;
387
        -webkit-transform: translateX(-$animation-slide-small-translate);
388
    }
389
    100% {
390
        opacity: 1;
391
        -webkit-transform: translateX(0);
392
    }
393
}
394

    
395
@keyframes uk-fade-left-small {
396
    0% {
397
        opacity: 0;
398
        transform: translateX(-$animation-slide-small-translate);
399
    }
400
    100% {
401
        opacity: 1;
402
        transform: translateX(0);
403
    }
404
}
405

    
406
/*
407
 * Slide Right Small
408
 */
409

    
410
@-webkit-keyframes uk-fade-right-small {
411
    0% {
412
        opacity: 0;
413
        -webkit-transform: translateX($animation-slide-small-translate);
414
    }
415
    100% {
416
        opacity: 1;
417
        -webkit-transform: translateX(0);
418
    }
419
}
420

    
421
@keyframes uk-fade-right-small {
422
    0% {
423
        opacity: 0;
424
        transform: translateX($animation-slide-small-translate);
425
    }
426
    100% {
427
        opacity: 1;
428
        transform: translateX(0);
429
    }
430
}
431

    
432
/*
433
 * Slide Top Medium
434
 */
435

    
436
@-webkit-keyframes uk-fade-top-medium {
437
    0% {
438
        opacity: 0;
439
        -webkit-transform: translateY(-$animation-slide-medium-translate);
440
    }
441
    100% {
442
        opacity: 1;
443
        -webkit-transform: translateY(0);
444
    }
445
}
446

    
447
@keyframes uk-fade-top-medium {
448
    0% {
449
        opacity: 0;
450
        transform: translateY(-$animation-slide-medium-translate);
451
    }
452
    100% {
453
        opacity: 1;
454
        transform: translateY(0);
455
    }
456
}
457

    
458
/*
459
 * Slide Bottom Medium
460
 */
461

    
462
@-webkit-keyframes uk-fade-bottom-medium {
463
    0% {
464
        opacity: 0;
465
        -webkit-transform: translateY($animation-slide-medium-translate);
466
    }
467
    100% {
468
        opacity: 1;
469
        -webkit-transform: translateY(0);
470
    }
471
}
472

    
473
@keyframes uk-fade-bottom-medium {
474
    0% {
475
        opacity: 0;
476
        transform: translateY($animation-slide-medium-translate);
477
    }
478
    100% {
479
        opacity: 1;
480
        transform: translateY(0);
481
    }
482
}
483

    
484
/*
485
 * Slide Left Medium
486
 */
487

    
488
@-webkit-keyframes uk-fade-left-medium {
489
    0% {
490
        opacity: 0;
491
        -webkit-transform: translateX(-$animation-slide-medium-translate);
492
    }
493
    100% {
494
        opacity: 1;
495
        -webkit-transform: translateX(0);
496
    }
497
}
498

    
499
@keyframes uk-fade-left-medium {
500
    0% {
501
        opacity: 0;
502
        transform: translateX(-$animation-slide-medium-translate);
503
    }
504
    100% {
505
        opacity: 1;
506
        transform: translateX(0);
507
    }
508
}
509

    
510
/*
511
 * Slide Right Medium
512
 */
513

    
514
@-webkit-keyframes uk-fade-right-medium {
515
    0% {
516
        opacity: 0;
517
        -webkit-transform: translateX($animation-slide-medium-translate);
518
    }
519
    100% {
520
        opacity: 1;
521
        -webkit-transform: translateX(0);
522
    }
523
}
524

    
525
@keyframes uk-fade-right-medium {
526
    0% {
527
        opacity: 0;
528
        transform: translateX($animation-slide-medium-translate);
529
    }
530
    100% {
531
        opacity: 1;
532
        transform: translateX(0);
533
    }
534
}
535

    
536
/*
537
 * Scale Up
538
 */
539

    
540
@-webkit-keyframes uk-fade-scale-02 {
541
    0% {
542
        opacity: 0;
543
        -webkit-transform: scale(0.2);
544
    }
545
    100% {
546
        opacity: 1;
547
        -webkit-transform: scale(1);
548
    }
549
}
550

    
551
@keyframes uk-fade-scale-02 {
552
    0% {
553
        opacity: 0;
554
        transform: scale(0.2);
555
    }
556
    100% {
557
        opacity: 1;
558
        transform: scale(1);
559
    }
560
}
561

    
562
/*
563
 * Scale Down
564
 */
565

    
566
@-webkit-keyframes uk-fade-scale-18 {
567
    0% {
568
        opacity: 0;
569
        -webkit-transform: scale(1.8);
570
    }
571
    100% {
572
        opacity: 1;
573
        -webkit-transform: scale(1);
574
    }
575
}
576

    
577
@keyframes uk-fade-scale-18 {
578
    0% {
579
        opacity: 0;
580
        transform: scale(1.8);
581
    }
582
    100% {
583
        opacity: 1;
584
        transform: scale(1);
585
    }
586
}
587

    
588
/*
589
 * Kenburns
590
 */
591

    
592
@-webkit-keyframes uk-scale-kenburns {
593
    0% { -webkit-transform: scale(1); }
594
    100% { -webkit-transform: scale(1.2); }
595
}
596

    
597
@keyframes uk-scale-kenburns {
598
    0% { transform: scale(1); }
599
    100% { transform: scale(1.2); }
600
}
601

    
602
/*
603
 * Shake
604
 */
605

    
606
@-webkit-keyframes uk-shake {
607
    0%, 100% { -webkit-transform: translateX(0); }
608
    10% { -webkit-transform: translateX(-9px); }
609
    20% { -webkit-transform: translateX(8px); }
610
    30% { -webkit-transform: translateX(-7px); }
611
    40% { -webkit-transform: translateX(6px); }
612
    50% { -webkit-transform: translateX(-5px); }
613
    60% { -webkit-transform: translateX(4px); }
614
    70% { -webkit-transform: translateX(-3px); }
615
    80% { -webkit-transform: translateX(2px); }
616
    90% { -webkit-transform: translateX(-1px); }
617
}
618

    
619
@keyframes uk-shake {
620
    0%, 100% { transform: translateX(0); }
621
    10% { transform: translateX(-9px); }
622
    20% { transform: translateX(8px); }
623
    30% { transform: translateX(-7px); }
624
    40% { transform: translateX(6px); }
625
    50% { transform: translateX(-5px); }
626
    60% { transform: translateX(4px); }
627
    70% { transform: translateX(-3px); }
628
    80% { transform: translateX(2px); }
629
    90% { transform: translateX(-1px); }
630
}
631

    
632

    
633
// Hooks
634
// ========================================================================
635

    
636
@if(mixin-exists(hook-animation-misc)) {@include hook-animation-misc();}
637

    
638
// @mixin hook-animation-misc(){}
(6-6/66)