/*! * # Fomantic-UI - Loader * http://github.com/fomantic/Fomantic-UI/ * * * Released under the MIT license * http://opensource.org/licenses/MIT * */ /******************************* Theme *******************************/ @type : 'element'; @element : 'loader'; @import (multiple) '../../theme.config'; /******************************* Loader *******************************/ /* Standard Size */ .ui.loader { display: none; position: absolute; top: @loaderTopOffset; left: @loaderLeftOffset; margin: 0; text-align: center; z-index: 1000; transform: translateX(-50%) translateY(-50%); } /* Static Shape */ .ui.loader:before { position: absolute; content: ''; top: 0; left: 50%; width: 100%; height: 100%; border-radius: @circularRadius; border: @loaderLineWidth solid @loaderFillColor; } /* Active Shape */ .ui.loader:after { position: absolute; content: ''; top: 0; left: 50%; width: 100%; height: 100%; animation: loader @loaderSpeed infinite linear; border: @loaderLineWidth solid @shapeBorderColor; border-radius: @circularRadius; box-shadow: 0 0 0 1px transparent; } & when (@variationLoaderSpeeds) { /* Speeds */ .ui.fast.loading.loading:after, .ui.fast.loading.loading .input > i.icon:after, .ui.fast.loading.loading > i.icon:after, .ui.fast.loader:after { animation-duration: @loaderSpeedFast; } .ui.slow.loading.loading:after, .ui.slow.loading.loading .input > i.icon:after, .ui.slow.loading.loading > i.icon:after, .ui.slow.loader:after { animation-duration: @loaderSpeedSlow; } } /* Active Animation */ @keyframes loader { 100% { transform: rotate(360deg); } } /*------------------- Coupling --------------------*/ /* Show inside active dimmer */ .ui.dimmer > .loader { display: block; } /* Black Dimmer */ .ui.dimmer > .ui.loader { color: @invertedLoaderTextColor; } .ui.dimmer > .ui.loader:not(.elastic):before { border-color: @invertedLoaderFillColor; } /* White Dimmer (Inverted) */ .ui.inverted.dimmer > .ui.loader { color: @loaderTextColor; } .ui.inverted.dimmer > .ui.loader:not(.elastic):before { border-color: @loaderFillColor; } /******************************* Types *******************************/ & when (@variationLoaderText) { /*------------------- Text --------------------*/ .ui.ui.ui.ui.text.loader { width: auto; height: auto; text-align: center; font-style: normal; } } /******************************* States *******************************/ & when (@variationLoaderIndeterminate) { .ui.indeterminate.loader:after { animation-direction: @indeterminateDirection; animation-duration: @indeterminateSpeed; } } .ui.loader.active, .ui.loader.visible { display: block; } .ui.loader.disabled, .ui.loader.hidden { display: none; } /******************************* Variations *******************************/ /*------------------- Sizes --------------------*/ .ui.loader { width: @medium; height: @medium; font-size: @mediumFontSize; } .ui.loader:before, .ui.loader:after { width: @medium; height: @medium; margin: @mediumOffset; } & when (@variationLoaderText) { .ui.text.loader { min-width: @medium; padding-top: (@medium + @textDistance); } } & when not (@variationLoaderSizes = false) { each(@variationLoaderSizes, { @o: @{value}Offset; @f: @{value}FontSize; @s: @@value; .ui.@{value}.loader { width: @s; height: @s; font-size: @@f; } .ui.@{value}.loader:before, .ui.@{value}.loader:after { width: @s; height: @s; margin: @@o; } & when (@variationLoaderText) { .ui.@{value}.text.loader { min-width: @s; padding-top: (@s + @textDistance); } } }) } /*------------------- Colors --------------------*/ each(@colors, { @color: replace(@key, '@', ''); @c: @colors[@@color][color]; @l: @colors[@@color][light]; .ui.@{color}.elastic.loader.loader:before, .ui.@{color}.basic.elastic.loading.button:before, .ui.@{color}.basic.elastic.loading.button:after, .ui.@{color}.elastic.loading.loading.loading:not(.segment):before, .ui.@{color}.elastic.loading.loading.loading .input > i.icon:before, .ui.@{color}.elastic.loading.loading.loading.loading > i.icon:before, .ui.@{color}.loading.loading.loading.loading:not(.usual):not(.button):after, .ui.@{color}.loading.loading.loading.loading .input > i.icon:after, .ui.@{color}.loading.loading.loading.loading > i.icon:after, .ui.@{color}.loader.loader.loader:after { color: @c; } .ui.inverted.@{color}.elastic.loader:before, .ui.inverted.@{color}.elastic.loading.loading.loading:not(.segment):before, .ui.inverted.@{color}.elastic.loading.loading.loading .input > i.icon:before, .ui.inverted.@{color}.elastic.loading.loading.loading > i.icon:before, .ui.inverted.@{color}.loading.loading.loading.loading:not(.usual):after, .ui.inverted.@{color}.loading.loading.loading.loading .input > i.icon:after, .ui.inverted.@{color}.loading.loading.loading.loading > i.icon:after, .ui.inverted.@{color}.loader.loader.loader:after { color: @l; } }) .ui.elastic.loader.loader:before, .ui.elastic.loading.loading.loading:before, .ui.elastic.loading.loading.loading .input > i.icon:before, .ui.elastic.loading.loading.loading > i.icon:before, .ui.loading.loading.loading.loading:not(.usual):after, .ui.loading.loading.loading.loading .input > i.icon:after, .ui.loading.loading.loading.loading > i.icon:after, .ui.loader.loader.loader:after { border-color: currentColor; } .ui.elastic.loading.loading.loading.loading.button:not(.inverted):not(.basic):before { color: @invertedLoaderLineColor; } .ui.elastic.basic.loading.button:before, .ui.elastic.basic.loading.button:after { color: @loaderLineColor; } .ui.double.loading.loading.loading.loading.button:after { border-bottom-color: currentColor; } & when (@variationLoaderInline) { /*------------------- Inline --------------------*/ .ui.inline.loader { position: relative; vertical-align: @inlineVerticalAlign; margin: @inlineMargin; left: 0; top: 0; transform: none; } .ui.inline.loader.active, .ui.inline.loader.visible { display: inline-block; } /* Centered Inline */ .ui.centered.inline.loader.active, .ui.centered.inline.loader.visible { display: block; margin-left: auto; margin-right: auto; } } .ui.loading.loading.loading.loading.loading.loading:after, .ui.loading.loading.loading.loading.loading.loading .input > i.icon:after, .ui.loading.loading.loading.loading.loading.loading > i.icon:after, .ui.loader.loader.loader.loader.loader:after { border-left-color:transparent; border-right-color:transparent; } .ui.loading.loading.loading.loading.loading.loading.loading:not(.double):after, .ui.loading.loading.loading.loading.loading.loading.loading:not(.double) .input > i.icon:after, .ui.loading.loading.loading.loading.loading.loading.loading:not(.double) > i.icon:after, .ui.loader.loader.loader.loader.loader.loader:not(.double):after { border-bottom-color: transparent; } .ui.loading.loading.loading.loading.loading.loading.segment:after, .ui.loading.loading.loading.loading.loading.loading.form:after { border-left-color:@loaderFillColor; border-right-color:@loaderFillColor; } .ui.loading.loading.loading.loading.loading.loading.segment:not(.double):after, .ui.loading.loading.loading.loading.loading.loading.form:not(.double):after { border-bottom-color: @loaderFillColor; } & when (@variationLoaderElastic) { /*------------------- Elastic --------------------*/ .ui.dimmer > .ui.elastic.loader { color: @invertedLoaderLineColor; } .ui.inverted.dimmer > .ui.elastic.loader { color: @loaderLineColor; } .ui.elastic.loading.loading:not(.form):not(.segment):after, .ui.elastic.loading.loading .input > i.icon:after, .ui.elastic.loading.loading > i.icon:after, .ui.elastic.loader.loader:after { animation: loader 1s infinite cubic-bezier(.27, 1.05, .92, .61); animation-delay: 0.3s; } .ui.elastic.loading.loading.loading:not(.form):not(.segment):before, .ui.elastic.loading.loading.loading .input > i.icon:before, .ui.elastic.loading.loading.loading > i.icon:before, .ui.elastic.loader.loader:before { animation: elastic-loader 1s infinite cubic-bezier(.27, 1.05, .92, .61); -moz-animation: currentcolor-elastic-loader 1s infinite cubic-bezier(.27, 1.05, .92, .61); border-right-color: transparent; } & when (@variationLoaderInline) { .ui.elastic.inline.loader:empty { animation: loader 8s infinite linear; } } & when (@variationLoaderSpeeds) { .ui.slow.elastic.loading.loading:not(.form):not(.segment):after, .ui.slow.elastic.loading.loading .input > i.icon:after, .ui.slow.elastic.loading.loading > i.icon:after, .ui.slow.elastic.loader.loader:after { animation-duration: 1.5s; animation-delay: 0.45s; } .ui.slow.elastic.loading.loading.loading:not(.form):not(.segment):before, .ui.slow.elastic.loading.loading.loading .input > i.icon:before, .ui.slow.elastic.loading.loading.loading > i.icon:before, .ui.slow.elastic.loader.loader:before { animation-duration: 1.5s; } .ui.fast.elastic.loading.loading:not(.form):not(.segment):after, .ui.fast.elastic.loading.loading .input > i.icon:after, .ui.fast.elastic.loading.loading > i.icon:after, .ui.fast.elastic.loader.loader:after { animation-duration: 0.66s; animation-delay: 0.20s; } .ui.fast.elastic.loading.loading.loading:not(.form):not(.segment):before, .ui.fast.elastic.loading.loading.loading .input > i.icon:before, .ui.fast.elastic.loading.loading.loading > i.icon:before, .ui.fast.elastic.loader.loader:before { animation-duration: 0.66s; } } @keyframes elastic-loader { 0%, 1% { border-left-color: transparent; border-bottom-color: transparent } 1.1%, 50% { border-left-color: inherit; } 10%, 35.1%{ border-bottom-color: transparent; } 10.1%, 35%{ border-bottom-color: inherit; } 50.1%{ border-left-color: transparent; } 100% { border-left-color: transparent; border-bottom-color: transparent; transform: rotate(360deg); } } @keyframes currentcolor-elastic-loader { 0%, 1% { border-left-color: transparent; border-bottom-color: transparent } 1.1%, 50% { border-left-color: currentColor; } 10%, 35.1%{ border-bottom-color: transparent; } 10.1%, 35%{ border-bottom-color: currentColor; } 50.1%{ border-left-color: transparent; } 100% { border-left-color: transparent; border-bottom-color: transparent; transform: rotate(360deg); } } } .loadUIOverrides();