@import 'mediawiki.skin.variables.less'; .mw-spinner { position: relative; > .mw-spinner-container { transform-origin: 0 0; } @mw-spinner-small-size: 20px; @mw-spinner-large-size: 32px; &-small { width: @mw-spinner-small-size; height: @mw-spinner-small-size; > .mw-spinner-container { transform: scale( unit( ( @mw-spinner-small-size / 64 ) ) ); } } &-large { width: @mw-spinner-large-size; height: @mw-spinner-large-size; > .mw-spinner-container { transform: scale( unit( ( @mw-spinner-large-size / 64 ) ) ); } } &-block { display: block; width: 100%; text-align: center; > .mw-spinner-container { display: inline-block; vertical-align: top; } &.mw-spinner-small > .mw-spinner-container { min-width: @mw-spinner-small-size; } &.mw-spinner-large > .mw-spinner-container { min-width: @mw-spinner-large-size; } } &-inline { display: inline-block; vertical-align: middle; } /** * CSS loading spinner adapted from loadingio, CC0 * https://github.com/loadingio/css-spinner/ */ &-container > div { transform-origin: 32px 32px; animation: mw-spinner 1.2s linear infinite; &::after { content: ' '; display: block; position: absolute; top: 3px; // If this was allowed to flip, then transform-origin would also need to be flipped, // but that's not supported. Partial flipping causes visual issues (T292673). /* @noflip */ left: 29px; width: 5px; height: 14px; border-radius: 20%; background: @color-base; } &:nth-child( 1 ) { transform: rotate( 0deg ); animation-delay: -1.1s; } &:nth-child( 2 ) { transform: rotate( 30deg ); animation-delay: -1s; } &:nth-child( 3 ) { transform: rotate( 60deg ); animation-delay: -0.9s; } &:nth-child( 4 ) { transform: rotate( 90deg ); animation-delay: -0.8s; } &:nth-child( 5 ) { transform: rotate( 120deg ); animation-delay: -0.7s; } &:nth-child( 6 ) { transform: rotate( 150deg ); animation-delay: -0.6s; } &:nth-child( 7 ) { transform: rotate( 180deg ); animation-delay: -0.5s; } &:nth-child( 8 ) { transform: rotate( 210deg ); animation-delay: -0.4s; } &:nth-child( 9 ) { transform: rotate( 240deg ); animation-delay: -0.3s; } &:nth-child( 10 ) { transform: rotate( 270deg ); animation-delay: -0.2s; } &:nth-child( 11 ) { transform: rotate( 300deg ); animation-delay: -0.1s; } &:nth-child( 12 ) { transform: rotate( 330deg ); animation-delay: 0s; } } } @keyframes mw-spinner { 0% { opacity: 1; } 100% { opacity: 0; } }