UNPKG

fomantic-ui

Version:

Fomantic empowers designers and developers by creating a shared vocabulary for UI.

427 lines (391 loc) • 12.8 kB
/*! * # Fomantic-UI - Loader * https://github.com/fomantic/Fomantic-UI/ * * * Released under the MIT license * https://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 -------------------- */ & when not (@variationLoaderColors = false) { each(@variationLoaderColors, { @color: @value; @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):not(.segments):not(.card)::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):not(.segments):not(.card)::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.card::after, .ui.loading.loading.loading.loading.loading.loading.segments::after, .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.card:not(.double)::after, .ui.loading.loading.loading.loading.loading.loading.segments:not(.double)::after, .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):not(.segments):not(.card)::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(0.27, 1.05, 0.92, 0.61); animation-delay: 0.3s; } .ui.elastic.loading.loading.loading:not(.form):not(.segment):not(.segments):not(.card)::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(0.27, 1.05, 0.92, 0.61); // https://github.com/fomantic/Fomantic-UI/pull/363 // stylelint-disable-next-line property-no-vendor-prefix -moz-animation: currentcolor-elastic-loader 1s infinite cubic-bezier(0.27, 1.05, 0.92, 0.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):not(.segments):not(.card)::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):not(.segments):not(.card)::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):not(.segments):not(.card)::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.2s; } .ui.fast.elastic.loading.loading.loading:not(.form):not(.segment):not(.segments):not(.card)::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();