3 Copyright (c) 2014 The Polymer Project Authors. All rights reserved.
4 This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
5 The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
6 The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
7 Code distributed by Google as part of the polymer project is also
8 subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
11 /**************************/
12 /* STYLES FOR THE SPINNER */
13 /**************************/
18 * ARCSIZE = 270 degrees (amount of circle the arc takes up)
19 * ARCTIME = 1333ms (time it takes to expand and contract arc)
20 * ARCSTARTROT = 216 degrees (how much the start location of the arc
21 * should rotate each time, 216 gives us a
22 * 5 pointed star shape (it's 360/5 * 3).
23 * For a 7 pointed star, we might do
24 * 360/7 * 3 = 154.286)
25 * CONTAINERWIDTH = 28px
30 display: inline-block
;
32 width: 28px; /* CONTAINERWIDTH */
33 height: 28px; /* CONTAINERWIDTH */
41 #spinnerContainer.active
{
42 /* duration: 360 * ARCTIME / (ARCSTARTROT + (360-ARCSIZE)) */
43 -webkit-animation: container-rotate
1568ms linear infinite
;
44 animation: container-rotate
1568ms linear infinite
;
47 @-webkit-keyframes container-rotate
{
48 to
{ -webkit-transform: rotate
(360deg) }
51 @keyframes container-rotate
{
52 to
{ transform: rotate
(360deg) }
63 border-color: #4285f4;
67 border-color: #db4437;
71 border-color: #f4b400;
75 border-color: #0f9d58;
79 * IMPORTANT NOTE ABOUT CSS ANIMATION PROPERTIES (keanulee):
81 * iOS Safari (tested on iOS 8.1) does not handle animation-delay very well - it doesn't
82 * guarantee that the animation will start _exactly_ after that value. So we avoid using
83 * animation-delay and instead set custom keyframes for each color (as redundant as it
86 * We write out each animation in full (instead of separating animation-name,
87 * animation-duration, etc.) because under the polyfill, Safari does not recognize those
88 * specific properties properly, treats them as -webkit-animation, and overrides the
89 * other animation rules. See https://github.com/Polymer/platform/issues/53.
91 .active .spinner-layer.blue {
92 /* durations: 4 * ARCTIME */
93 -webkit-animation: fill-unfill-rotate
5332ms cubic-bezier
(0.4, 0.0, 0.2, 1) infinite both
, blue-fade-in-out
5332ms cubic-bezier
(0.4, 0.0, 0.2, 1) infinite both
;
94 animation: fill-unfill-rotate
5332ms cubic-bezier
(0.4, 0.0, 0.2, 1) infinite both
, blue-fade-in-out
5332ms cubic-bezier
(0.4, 0.0, 0.2, 1) infinite both
;
97 .active .spinner-layer.red {
98 /* durations: 4 * ARCTIME */
99 -webkit-animation: fill-unfill-rotate
5332ms cubic-bezier
(0.4, 0.0, 0.2, 1) infinite both
, red-fade-in-out
5332ms cubic-bezier
(0.4, 0.0, 0.2, 1) infinite both
;
100 animation: fill-unfill-rotate
5332ms cubic-bezier
(0.4, 0.0, 0.2, 1) infinite both
, red-fade-in-out
5332ms cubic-bezier
(0.4, 0.0, 0.2, 1) infinite both
;
103 .active .spinner-layer.yellow {
104 /* durations: 4 * ARCTIME */
105 -webkit-animation: fill-unfill-rotate
5332ms cubic-bezier
(0.4, 0.0, 0.2, 1) infinite both
, yellow-fade-in-out
5332ms cubic-bezier
(0.4, 0.0, 0.2, 1) infinite both
;
106 animation: fill-unfill-rotate
5332ms cubic-bezier
(0.4, 0.0, 0.2, 1) infinite both
, yellow-fade-in-out
5332ms cubic-bezier
(0.4, 0.0, 0.2, 1) infinite both
;
109 .active .spinner-layer.green {
110 /* durations: 4 * ARCTIME */
111 -webkit-animation: fill-unfill-rotate
5332ms cubic-bezier
(0.4, 0.0, 0.2, 1) infinite both
, green-fade-in-out
5332ms cubic-bezier
(0.4, 0.0, 0.2, 1) infinite both
;
112 animation: fill-unfill-rotate
5332ms cubic-bezier
(0.4, 0.0, 0.2, 1) infinite both
, green-fade-in-out
5332ms cubic-bezier
(0.4, 0.0, 0.2, 1) infinite both
;
115 @-webkit-keyframes fill-unfill-rotate
{
116 12.5% { -webkit-transform: rotate
(135deg); } /* 0.5 * ARCSIZE */
117 25% { -webkit-transform: rotate
(270deg); } /* 1 * ARCSIZE */
118 37.5% { -webkit-transform: rotate
(405deg); } /* 1.5 * ARCSIZE */
119 50% { -webkit-transform: rotate
(540deg); } /* 2 * ARCSIZE */
120 62.5% { -webkit-transform: rotate
(675deg); } /* 2.5 * ARCSIZE */
121 75% { -webkit-transform: rotate
(810deg); } /* 3 * ARCSIZE */
122 87.5% { -webkit-transform: rotate
(945deg); } /* 3.5 * ARCSIZE */
123 to
{ -webkit-transform: rotate
(1080deg); } /* 4 * ARCSIZE */
126 @keyframes fill-unfill-rotate
{
127 12.5% { transform: rotate
(135deg); } /* 0.5 * ARCSIZE */
128 25% { transform: rotate
(270deg); } /* 1 * ARCSIZE */
129 37.5% { transform: rotate
(405deg); } /* 1.5 * ARCSIZE */
130 50% { transform: rotate
(540deg); } /* 2 * ARCSIZE */
131 62.5% { transform: rotate
(675deg); } /* 2.5 * ARCSIZE */
132 75% { transform: rotate
(810deg); } /* 3 * ARCSIZE */
133 87.5% { transform: rotate
(945deg); } /* 3.5 * ARCSIZE */
134 to
{ transform: rotate
(1080deg); } /* 4 * ARCSIZE */
137 @-webkit-keyframes blue-fade-in-out
{
146 @keyframes blue-fade-in-out
{
155 @-webkit-keyframes red-fade-in-out
{
163 @keyframes red-fade-in-out
{
171 @-webkit-keyframes yellow-fade-in-out
{
179 @keyframes yellow-fade-in-out
{
187 @-webkit-keyframes green-fade-in-out
{
195 @keyframes green-fade-in-out
{
204 * Patch the gap that appear between the two adjacent div.circle-clipper while the
205 * spinner is rotating (appears on Chrome 38, Safari 7.1, and IE 11).
209 box-sizing: border-box
;
215 border-color: inherit
;
224 display: inline-block
;
229 border-color: inherit
;
232 .circle-clipper .circle {
237 box-sizing: border-box
;
239 border-width: 3px; /* STROKEWIDTH */
241 border-color: inherit
;
242 border-bottom-color: transparent
!important
;
244 -webkit-animation: none
;
248 .circle-clipper.left .circle {
249 border-right-color: transparent
!important
;
250 -webkit-transform: rotate
(129deg);
251 transform: rotate
(129deg);
254 .circle-clipper.right .circle {
256 border-left-color: transparent
!important
;
257 -webkit-transform: rotate
(-129deg);
258 transform: rotate
(-129deg);
261 .active .circle-clipper.left .circle {
262 /* duration: ARCTIME */
263 -webkit-animation: left-spin
1333ms cubic-bezier
(0.4, 0.0, 0.2, 1) infinite both
;
264 animation: left-spin
1333ms cubic-bezier
(0.4, 0.0, 0.2, 1) infinite both
;
267 .active .circle-clipper.right .circle {
268 /* duration: ARCTIME */
269 -webkit-animation: right-spin
1333ms cubic-bezier
(0.4, 0.0, 0.2, 1) infinite both
;
270 animation: right-spin
1333ms cubic-bezier
(0.4, 0.0, 0.2, 1) infinite both
;
273 @-webkit-keyframes left-spin
{
274 from
{ -webkit-transform: rotate
(130deg); }
275 50% { -webkit-transform: rotate
(-5deg); }
276 to
{ -webkit-transform: rotate
(130deg); }
279 @keyframes left-spin
{
280 from
{ transform: rotate
(130deg); }
281 50% { transform: rotate
(-5deg); }
282 to
{ transform: rotate
(130deg); }
285 @-webkit-keyframes right-spin
{
286 from
{ -webkit-transform: rotate
(-130deg); }
287 50% { -webkit-transform: rotate
(5deg); }
288 to
{ -webkit-transform: rotate
(-130deg); }
291 @keyframes right-spin
{
292 from
{ transform: rotate
(-130deg); }
293 50% { transform: rotate
(5deg); }
294 to
{ transform: rotate
(-130deg); }
297 #spinnerContainer.cooldown
{
298 /* duration: SHRINK_TIME */
299 -webkit-animation: container-rotate
1568ms linear infinite
, fade-out
400ms cubic-bezier
(0.4, 0.0, 0.2, 1);
300 animation: container-rotate
1568ms linear infinite
, fade-out
400ms cubic-bezier
(0.4, 0.0, 0.2, 1);
303 @-webkit-keyframes fade-out
{
308 @keyframes fade-out
{