Rework loaders

This commit is contained in:
Cory LaViska
2017-08-16 21:17:55 -04:00
parent 2d7d8cb2f0
commit efc4be7048
5 changed files with 321 additions and 145 deletions

2
dist/shoelace.css vendored

File diff suppressed because one or more lines are too long

View File

@@ -48,27 +48,19 @@
<div id="content">
<h2 id="loaders">Loaders</h2>
<p>Create a pure CSS loader by applying the <code>loader</code> class to an empty <code>&lt;span&gt;</code> element. You can use the <code>loader-small</code> and <code>loader-big</code> modifiers to change the size.</p>
<pre><code class="lang-html">&lt;span class=&quot;loader loader-small&quot;&gt;&lt;/span&gt;
<p>Create a pure CSS loader by applying the <code>loader</code> class to an empty <code>&lt;span&gt;</code> element. You can use the <code>loader-xs|sm|lg|xl</code> modifiers to change the size.</p>
<pre><code class="lang-html">&lt;span class=&quot;loader loader-xs&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;loader loader-sm&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;loader&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;loader loader-big&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;loader loader-lg&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;loader loader-xl&quot;&gt;&lt;/span&gt;
</code></pre>
<div class="input-single">
<span class="loader loader-small"></span>
<span class="loader loader-xs"></span>
<span class="loader loader-sm"></span>
<span class="loader"></span>
<span class="loader loader-big"></span>
</div>
<h3 id="background-loaders">Background Loaders</h3>
<p>You can simulate a background loader using <code>loader-bg</code>. This is achieved using <code>position: relative</code> on the container and the <code>::after</code> pseudo-element. You can use the <code>loader-bg-small</code> and <code>loader-bg-big</code> modifiers to change the size.</p>
<pre><code class="lang-html">&lt;div class=&quot;loader-bg loader-bg-small&quot;&gt;&lt;/div&gt;
&lt;div class=&quot;loader-bg&quot;&gt;&lt;/div&gt;
&lt;div class=&quot;loader-bg loader-bg-big&quot;&gt;&lt;/div&gt;
</code></pre>
<div class="loader-example clearfix">
<div class="loader-bg loader-bg-small"></div>
<div class="loader-bg"></div>
<div class="loader-bg loader-bg-big"></div>
<span class="loader loader-lg"></span>
<span class="loader loader-xl"></span>
</div>
<h3 id="variations">Variations</h3>
@@ -88,6 +80,41 @@
<span class="loader loader-danger"></span>
<span class="loader loader-light"></span>
<span class="loader loader-dark"></span></p>
<h3 id="background-loaders">Background Loaders</h3>
<p>You can simulate a background loader using <code>loader-bg</code>. This is achieved using <code>position: relative</code> on the container and the <code>::after</code> pseudo-element. You can use the <code>loader-bg-xs|sm|lg|xl</code> modifiers to change the size.</p>
<pre><code class="lang-html">&lt;div class=&quot;loader-bg loader-bg-xs&quot;&gt;&lt;/div&gt;
&lt;div class=&quot;loader-bg loader-bg-sm&quot;&gt;&lt;/div&gt;
&lt;div class=&quot;loader-bg&quot;&gt;&lt;/div&gt;
&lt;div class=&quot;loader-bg loader-bg-lg&quot;&gt;&lt;/div&gt;
&lt;div class=&quot;loader-bg loader-bg-xl&quot;&gt;&lt;/div&gt;
</code></pre>
<div class="loader-example clearfix">
<div class="loader-bg loader-bg-xs"></div>
<div class="loader-bg loader-bg-sm"></div>
<div class="loader-bg"></div>
<div class="loader-bg loader-bg-lg"></div>
<div class="loader-bg loader-bg-xl"></div>
</div>
<h3 id="background-variations">Background Variations</h3>
<p>Use the <code>loader-bg-*</code> modifier to create variations.</p>
<pre><code class="lang-html">&lt;div class=&quot;loader-bg loader-bg-secondary&quot;&gt;&lt;/div&gt;
&lt;div class=&quot;loader-bg loader-bg-success&quot;&gt;&lt;/div&gt;
&lt;div class=&quot;loader-bg loader-bg-info&quot;&gt;&lt;/div&gt;
&lt;div class=&quot;loader-bg loader-bg-warning&quot;&gt;&lt;/div&gt;
&lt;div class=&quot;loader-bg loader-bg-danger&quot;&gt;&lt;/div&gt;
&lt;div class=&quot;loader-bg loader-bg-light&quot;&gt;&lt;/div&gt;
&lt;div class=&quot;loader-bg loader-bg-dark&quot;&gt;&lt;/div&gt;
</code></pre>
<div class="loader-example clearfix">
<div class="loader-bg loader-bg-secondary"></div>
<div class="loader-bg loader-bg-success"></div>
<div class="loader-bg loader-bg-info"></div>
<div class="loader-bg loader-bg-warning"></div>
<div class="loader-bg loader-bg-danger"></div>
<div class="loader-bg loader-bg-light"></div>
<div class="loader-bg loader-bg-dark"></div>
</div>
</div>
</main>

View File

@@ -178,12 +178,17 @@ a code {
}
/* Loader example */
.loader-example {
margin-left: -.5rem;
margin-right: -.5rem;
}
.loader-example div {
float: left;
width: 6rem;
height: 6rem;
border: dashed 1px #ddd;
margin-right: .5rem;
margin: 0 .5rem 1rem .5rem;
}
/* Tabs example */

View File

@@ -1,116 +1,228 @@
/*! Loaders */
:root {
--loader-bg-color: var(--component-bg-color);
--loader-border-color: var(--state-primary);
--loader-border-width: .2rem;
--loader-border-width-small: calc(var(--loader-border-width) / 2);
--loader-border-width-big: calc(var(--loader-border-width) * 2);
--loader-size: 2rem;
--loader-size-small: calc(var(--loader-size) / 2);
--loader-size-big: calc(var(--loader-size) * 2);
--loader-thickness: .25rem;
--loader-thickness-xs: calc(var(--loader-thickness) / 2);
--loader-thickness-sm: calc(var(--loader-thickness) / 1.5);
--loader-thickness-lg: calc(var(--loader-thickness) * 1.5);
--loader-thickness-xl: calc(var(--loader-thickness) * 2);
--loader-size-xs: 1rem;
--loader-size-sm: 2rem;
--loader-size: 3rem;
--loader-size-lg: 4rem;
--loader-size-xl: 5rem;
--loader-speed: 750ms;
--loader-margin-x: .5em;
--loader-margin-y: 0;
/* Default */
--loader-color: var(--state-primary);
--loader-bg-color: color(var(--state-primary) lightness(90%));
/* Secondary */
--loader-color-secondary: var(--state-secondary);
--loader-bg-color-secondary: color(var(--state-secondary) lightness(90%));
/* Success */
--loader-color-success: var(--state-success);
--loader-bg-color-success: color(var(--state-success) lightness(90%));
/* Info */
--loader-color-info: var(--state-info);
--loader-bg-color-info: color(var(--state-info) lightness(90%));
/* Warning */
--loader-color-warning: var(--state-warning);
--loader-bg-color-warning: color(var(--state-warning) lightness(90%));
/* Danger */
--loader-color-danger: var(--state-danger);
--loader-bg-color-danger: color(var(--state-danger) lightness(90%));
/* Light */
--loader-color-light: var(--state-light);
--loader-bg-color-light: color(var(--state-light) lightness(90%));
/* Dark */
--loader-color-dark: var(--state-dark);
--loader-bg-color-dark: color(var(--state-dark) lightness(90%));
}
.loader {
width: var(--loader-size);
height: var(--loader-size);
border-radius: 50%;
border-style: solid;
border-width: var(--loader-thickness);
border-color: var(--loader-bg-color);
border-top-color: var(--loader-color);
border-left-color: var(--loader-color);
display: inline-block;
animation: loader var(--loader-speed) linear infinite;
margin: var(--loader-margin-y) var(--loader-margin-x);
vertical-align: middle;
&.loader-xs {
width: var(--loader-size-xs);
height: var(--loader-size-xs);
border-width: var(--loader-thickness-xs);
}
&.loader-sm {
width: var(--loader-size-sm);
height: var(--loader-size-sm);
border-width: var(--loader-thickness-sm);
}
&.loader-lg {
width: var(--loader-size-lg);
height: var(--loader-size-lg);
border-width: var(--loader-thickness-lg);
}
&.loader-xl {
width: var(--loader-size-xl);
height: var(--loader-size-xl);
border-width: var(--loader-thickness-xl);
}
&.loader-secondary {
border-color: var(--loader-bg-color-secondary);
border-top-color: var(--loader-color-secondary);
border-left-color: var(--loader-color-secondary);
}
&.loader-success {
border-color: var(--loader-bg-color-success);
border-top-color: var(--loader-color-success);
border-left-color: var(--loader-color-success);
}
&.loader-info {
border-color: var(--loader-bg-color-info);
border-top-color: var(--loader-color-info);
border-left-color: var(--loader-color-info);
}
&.loader-warning {
border-color: var(--loader-bg-color-warning);
border-top-color: var(--loader-color-warning);
border-left-color: var(--loader-color-warning);
}
&.loader-danger {
border-color: var(--loader-bg-color-danger);
border-top-color: var(--loader-color-danger);
border-left-color: var(--loader-color-danger);
}
&.loader-light {
border-color: var(--loader-bg-color-light);
border-top-color: var(--loader-color-light);
border-left-color: var(--loader-color-light);
}
&.loader-dark {
border-color: var(--loader-bg-color-dark);
border-top-color: var(--loader-color-dark);
border-left-color: var(--loader-color-dark);
}
}
.loader-bg {
position: relative;
&::after {
content: '';
position: absolute;
top: calc(50% - var(--loader-size) / 2);
left: calc(50% - var(--loader-size) / 2);
width: var(--loader-size);
height: var(--loader-size);
border-radius: 50%;
border-style: solid;
border-width: var(--loader-thickness);
border-color: var(--loader-bg-color);
border-top-color: var(--loader-color);
border-left-color: var(--loader-color);
animation: loader var(--loader-speed) linear infinite;
}
&.loader-bg-xs::after {
top: calc(50% - var(--loader-size-xs) / 2);
left: calc(50% - var(--loader-size-xs) / 2);
width: var(--loader-size-xs);
height: var(--loader-size-xs);
border-width: var(--loader-thickness-xs);
}
&.loader-bg-sm::after {
top: calc(50% - var(--loader-size-sm) / 2);
left: calc(50% - var(--loader-size-sm) / 2);
width: var(--loader-size-sm);
height: var(--loader-size-sm);
border-width: var(--loader-thickness-sm);
}
&.loader-bg-lg::after {
top: calc(50% - var(--loader-size-lg) / 2);
left: calc(50% - var(--loader-size-lg) / 2);
width: var(--loader-size-lg);
height: var(--loader-size-lg);
border-width: var(--loader-thickness-lg);
}
&.loader-bg-xl::after {
top: calc(50% - var(--loader-size-xl) / 2);
left: calc(50% - var(--loader-size-xl) / 2);
width: var(--loader-size-xl);
height: var(--loader-size-xl);
border-width: var(--loader-thickness-xl);
}
&.loader-bg-secondary::after {
border-color: var(--loader-bg-color-secondary);
border-top-color: var(--loader-color-secondary);
border-left-color: var(--loader-color-secondary);
}
&.loader-bg-success::after {
border-color: var(--loader-bg-color-success);
border-top-color: var(--loader-color-success);
border-left-color: var(--loader-color-success);
}
&.loader-bg-info::after {
border-color: var(--loader-bg-color-info);
border-top-color: var(--loader-color-info);
border-left-color: var(--loader-color-info);
}
&.loader-bg-warning::after {
border-color: var(--loader-bg-color-warning);
border-top-color: var(--loader-color-warning);
border-left-color: var(--loader-color-warning);
}
&.loader-bg-danger::after {
border-color: var(--loader-bg-color-danger);
border-top-color: var(--loader-color-danger);
border-left-color: var(--loader-color-danger);
}
&.loader-bg-light::after {
border-color: var(--loader-bg-color-light);
border-top-color: var(--loader-color-light);
border-left-color: var(--loader-color-light);
}
&.loader-bg-dark::after {
border-color: var(--loader-bg-color-dark);
border-top-color: var(--loader-color-dark);
border-left-color: var(--loader-color-dark);
}
}
@keyframes loader {
0% { transform: rotate(0deg); }
100% { transform: rotate(360deg); }
}
.loader,
.loader-bg::after {
width: var(--loader-size);
height: var(--loader-size);
border-radius: 50%;
border: solid var(--loader-border-width) var(--loader-bg-color);
border-top-color: var(--loader-border-color);
border-left-color: var(--loader-border-color);
display: inline-block;
animation: loader var(--loader-speed) linear infinite;
vertical-align: middle;
margin: var(--loader-margin-y) var(--loader-margin-x);
}
.loader-bg {
position: relative !important;
}
.loader-bg::after {
content: '';
position: absolute;
top: calc(50% - var(--loader-size) / 2);
left: calc(50% - var(--loader-size) / 2);
margin: 0;
}
.loader-small,
.loader-bg-small::after {
width: var(--loader-size-small);
height: var(--loader-size-small);
border-width: var(--loader-border-width-small);
}
.loader-big,
.loader-bg-big::after {
width: var(--loader-size-big);
height: var(--loader-size-big);
border-width: var(--loader-border-width-big);
}
.loader-bg-small::after {
top: calc(50% - var(--loader-size-small) / 2);
left: calc(50% - var(--loader-size-small) / 2);
}
.loader-bg-big::after {
top: calc(50% - var(--loader-size-big) / 2);
left: calc(50% - var(--loader-size-big) / 2);
}
/* Variations */
.loader-secondary,
.loader-secondary.loader-bg::after {
border-top-color: var(--state-secondary);
border-left-color: var(--state-secondary);
}
.loader-success,
.loader-success.loader-bg::after {
border-top-color: var(--state-success);
border-left-color: var(--state-success);
}
.loader-info,
.loader-info.loader-bg::after {
border-top-color: var(--state-info);
border-left-color: var(--state-info);
}
.loader-warning,
.loader-warning.loader-bg::after {
border-top-color: var(--state-warning);
border-left-color: var(--state-warning);
}
.loader-danger,
.loader-danger.loader-bg::after {
border-top-color: var(--state-danger);
border-left-color: var(--state-danger);
}
.loader-light,
.loader-light.loader-bg::after {
border-top-color: var(--state-light);
border-left-color: var(--state-light);
border-bottom-color: var(--state-dark);
border-right-color: var(--state-dark);
}
.loader-dark,
.loader-dark.loader-bg::after {
border-top-color: var(--state-dark);
border-left-color: var(--state-dark);
border-bottom-color: var(--state-light);
border-right-color: var(--state-light);
}

View File

@@ -6,33 +6,21 @@ description: These pure CSS loaders are easy to use and look great.
## Loaders
Create a pure CSS loader by applying the `loader` class to an empty `<span>` element. You can use the `loader-small` and `loader-big` modifiers to change the size.
Create a pure CSS loader by applying the `loader` class to an empty `<span>` element. You can use the `loader-xs|sm|lg|xl` modifiers to change the size.
```html
<span class="loader loader-small"></span>
<span class="loader loader-xs"></span>
<span class="loader loader-sm"></span>
<span class="loader"></span>
<span class="loader loader-big"></span>
<span class="loader loader-lg"></span>
<span class="loader loader-xl"></span>
```
<div class="input-single">
<span class="loader loader-small"></span>
<span class="loader loader-xs"></span>
<span class="loader loader-sm"></span>
<span class="loader"></span>
<span class="loader loader-big"></span>
</div>
### Background Loaders
You can simulate a background loader using `loader-bg`. This is achieved using `position: relative` on the container and the `::after` pseudo-element. You can use the `loader-bg-small` and `loader-bg-big` modifiers to change the size.
```html
<div class="loader-bg loader-bg-small"></div>
<div class="loader-bg"></div>
<div class="loader-bg loader-bg-big"></div>
```
<div class="loader-example clearfix">
<div class="loader-bg loader-bg-small"></div>
<div class="loader-bg"></div>
<div class="loader-bg loader-bg-big"></div>
<span class="loader loader-lg"></span>
<span class="loader loader-xl"></span>
</div>
### Variations
@@ -56,3 +44,47 @@ Use the `loader-*` modifier to create variations.
<span class="loader loader-danger"></span>
<span class="loader loader-light"></span>
<span class="loader loader-dark"></span>
### Background Loaders
You can simulate a background loader using `loader-bg`. This is achieved using `position: relative` on the container and the `::after` pseudo-element. You can use the `loader-bg-xs|sm|lg|xl` modifiers to change the size.
```html
<div class="loader-bg loader-bg-xs"></div>
<div class="loader-bg loader-bg-sm"></div>
<div class="loader-bg"></div>
<div class="loader-bg loader-bg-lg"></div>
<div class="loader-bg loader-bg-xl"></div>
```
<div class="loader-example clearfix">
<div class="loader-bg loader-bg-xs"></div>
<div class="loader-bg loader-bg-sm"></div>
<div class="loader-bg"></div>
<div class="loader-bg loader-bg-lg"></div>
<div class="loader-bg loader-bg-xl"></div>
</div>
### Background Variations
Use the `loader-bg-*` modifier to create variations.
```html
<div class="loader-bg loader-bg-secondary"></div>
<div class="loader-bg loader-bg-success"></div>
<div class="loader-bg loader-bg-info"></div>
<div class="loader-bg loader-bg-warning"></div>
<div class="loader-bg loader-bg-danger"></div>
<div class="loader-bg loader-bg-light"></div>
<div class="loader-bg loader-bg-dark"></div>
```
<div class="loader-example clearfix">
<div class="loader-bg loader-bg-secondary"></div>
<div class="loader-bg loader-bg-success"></div>
<div class="loader-bg loader-bg-info"></div>
<div class="loader-bg loader-bg-warning"></div>
<div class="loader-bg loader-bg-danger"></div>
<div class="loader-bg loader-bg-light"></div>
<div class="loader-bg loader-bg-dark"></div>
</div>