Repository: tobiasahlin/SpinKit
Branch: master
Commit: 742a71277c49
Files: 8
Total size: 26.8 KB
Directory structure:
gitextract_dx25p364/
├── .gitignore
├── CHANGELOG.md
├── LICENSE
├── README.md
├── bower.json
├── examples.html
├── package.json
└── spinkit.css
================================================
FILE CONTENTS
================================================
================================================
FILE: .gitignore
================================================
node_modules/
.DS_Store
*.sublime-project
*.sublime-workspace
================================================
FILE: CHANGELOG.md
================================================
# 2.0.1
* Fixed: Chase spinner's HTML snippet now has the correct number of children
# 2.0.0
* New: Added examples.html, with an overview of all spinners
* New: Added a brand new chase spinner
* New: Added spinkit.min.css
* Fixed: `inline-block` is no longed used to position any spinners (decoupling spacing from any potential font effects)
* Changed: Most spinners now have more distinct and shorter names
* Changed: No positioning is now applied by default on any of the spinners (center the spinner with the utility class `sk-center`)
* Changed: All elements now only have one single class
* Changed: No more dependencies. gulp, npm, node, etc. is not required to build this project. There's nothing to build
* Changed: No more SCSS. All configuration is now done through CSS vars
* Fixed: All keyframe animations are now named after the elements/classes that are using them
# 1.2.5
* Fixed: Add folding cube spinner (11) to combined CSS file
# 1.2.4
* Fixed: Borked gulp script (#106)
* Fixed: Moved changes made in CSS, to SCSS
# 1.2.3
* Fixed: More exact (33% -> 33.33%) cube dimensions for cube grid spinner
* Fixed: Comment format for HTML inside CSS, for easier copy and pasting (removed * at the beginning of each row)
# 1.2.2
* Fixed: Use variable for spinner size (defaults to 40px)
# 1.2.1
* Fixed: Two spinners were slightly broken on Android
* Changed: Bumped default top and bottom margin to 40px
# 1.2.0
* Added: Folding cube spinner
* Fixed: Lowercase in package name
# 1.1.0
* Removed one spinner (circle with rotating circle, not polished enough)
* Cleaned up the CSS
* Added more SCSS variables to more easily customize spinners
* Introduced SCSS `@for` loops to more easily change timing of spinners
* Removed moot `version` property from bower.json
# 1.0.1
* Fix: Missed sass variables for background-color
================================================
FILE: LICENSE
================================================
The MIT License (MIT)
Copyright (c) 2020 Tobias Ahlin
Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
================================================
FILE: README.md
================================================
# [SpinKit](http://tobiasahlin.com/spinkit/)
Simple loading spinners animated with CSS. See [demo](http://tobiasahlin.com/spinkit/). SpinKit only uses (`transform` and `opacity`) CSS animations to create smooth and easily customizable animations.
## Usage
- Add `spinkit.css` or `spinkit.min.css` to your project (or copy-paste the CSS that you need for your spinner—there are no dependencies between spinners, no shared classes, and no shared animations, etc, so it should be fairly straight-forward to extract only the code that you need)
- Add a spinner to your project by copy-pasting HTML from `spinkit.css` or `examples.html`
- Add the `sk-center` utility class to the spinner to center it (it sets `margin` to `auto`)
- By default, the `width` and `height` of all spinners are set to `40px`. `background-color` is set to `#333`.
- Configure the spinner by overwriting the CSS variables, primarily `--sk-size` (spinner width & height) and `--sk-color` (spinner color). If you need broader browser support, remove the CSS variables.
You can include SpinKit to your project with `bower`:
```bash
$ bower install spinkit
```
or npm:
```bash
$ npm install spinkit
```
## Spinners
Given that you have included `spinkit.min.css` in your project, these snippets will produce the different spinners:
### Plane
```html
<div class="sk-plane"></div>
```
### Chase
```html
<div class="sk-chase">
<div class="sk-chase-dot"></div>
<div class="sk-chase-dot"></div>
<div class="sk-chase-dot"></div>
<div class="sk-chase-dot"></div>
<div class="sk-chase-dot"></div>
<div class="sk-chase-dot"></div>
</div>
```
### Bounce
```html
<div class="sk-bounce">
<div class="sk-bounce-dot"></div>
<div class="sk-bounce-dot"></div>
</div>
```
### Wave
```html
<div class="sk-wave">
<div class="sk-wave-rect"></div>
<div class="sk-wave-rect"></div>
<div class="sk-wave-rect"></div>
<div class="sk-wave-rect"></div>
<div class="sk-wave-rect"></div>
</div>
```
### Pulse
```html
<div class="sk-pulse"></div>
```
### Flow
```html
<div class="sk-flow">
<div class="sk-flow-dot"></div>
<div class="sk-flow-dot"></div>
<div class="sk-flow-dot"></div>
</div>
```
### Swing
```html
<div class="sk-swing">
<div class="sk-swing-dot"></div>
<div class="sk-swing-dot"></div>
</div>
```
### Circle
```html
<div class="sk-circle">
<div class="sk-circle-dot"></div>
<div class="sk-circle-dot"></div>
<div class="sk-circle-dot"></div>
<div class="sk-circle-dot"></div>
<div class="sk-circle-dot"></div>
<div class="sk-circle-dot"></div>
<div class="sk-circle-dot"></div>
<div class="sk-circle-dot"></div>
<div class="sk-circle-dot"></div>
<div class="sk-circle-dot"></div>
<div class="sk-circle-dot"></div>
<div class="sk-circle-dot"></div>
</div>
```
### Circle Fade
```html
<div class="sk-circle-fade">
<div class="sk-circle-fade-dot"></div>
<div class="sk-circle-fade-dot"></div>
<div class="sk-circle-fade-dot"></div>
<div class="sk-circle-fade-dot"></div>
<div class="sk-circle-fade-dot"></div>
<div class="sk-circle-fade-dot"></div>
<div class="sk-circle-fade-dot"></div>
<div class="sk-circle-fade-dot"></div>
<div class="sk-circle-fade-dot"></div>
<div class="sk-circle-fade-dot"></div>
<div class="sk-circle-fade-dot"></div>
<div class="sk-circle-fade-dot"></div>
</div>
```
### Grid
```html
<div class="sk-grid">
<div class="sk-grid-cube"></div>
<div class="sk-grid-cube"></div>
<div class="sk-grid-cube"></div>
<div class="sk-grid-cube"></div>
<div class="sk-grid-cube"></div>
<div class="sk-grid-cube"></div>
<div class="sk-grid-cube"></div>
<div class="sk-grid-cube"></div>
<div class="sk-grid-cube"></div>
</div>
```
### Fold
```html
<div class="sk-fold">
<div class="sk-fold-cube"></div>
<div class="sk-fold-cube"></div>
<div class="sk-fold-cube"></div>
<div class="sk-fold-cube"></div>
</div>
```
### Wander
```html
<div class="sk-wander">
<div class="sk-wander-cube"></div>
<div class="sk-wander-cube"></div>
<div class="sk-wander-cube"></div>
</div>
```
## Web browser compatibility
SpinKit uses CSS animations and variables:
- CSS keyframes animations [are at +96.5% global support](http://caniuse.com/#feat=css-animation)
- CSS variables [are at +91.8% global support](https://caniuse.com/#feat=css-variables)
### Implementing a fallback spinner
How do you know if you need to provide a fallback? You can check for animation support with [Modernizr](http://modernizr.com), or manually check for the `animation` property, and replace the spinner with a GIF if it's not supported:
```javascript
function browserSupportsCSSProperty(propertyName) {
var elm = document.createElement('div');
propertyName = propertyName.toLowerCase();
if (elm.style[propertyName] != undefined)
return true;
var propertyNameCapital = propertyName.charAt(0).toUpperCase() + propertyName.substr(1),
domPrefixes = 'Webkit Moz ms O'.split(' ');
for (var i = 0; i < domPrefixes.length; i++) {
if (elm.style[domPrefixes[i] + propertyNameCapital] != undefined)
return true;
}
return false;
}
```
Use it to check for `animation` support:
```javascript
if (!browserSupportsCSSProperty('animation')) {
// fallback…
}
```
================================================
FILE: bower.json
================================================
{
"name": "SpinKit",
"homepage": "https://github.com/tobiasahlin/SpinKit",
"authors": [
"Tobias Ahlin"
],
"description": "A collection of loading indicators animated with CSS",
"main": "css/spinkit.css",
"keywords": [
"css",
"scss",
"web"
],
"license": "MIT",
"ignore": [
"**/.*",
"node_modules"
]
}
================================================
FILE: examples.html
================================================
<!DOCTYPE html>
<html>
<head>
<title>SpinKit Examples</title>
<link rel="stylesheet" type="text/css" href="spinkit.css">
<style>
.example {
margin: 50px 100px;
padding: 100px;
border-bottom: 1px solid #eee;
}
</style>
</head>
<body>
<div class="example">
<div class="sk-plane"></div>
</div>
<div class="example">
<div class="sk-chase">
<div class="sk-chase-dot"></div>
<div class="sk-chase-dot"></div>
<div class="sk-chase-dot"></div>
<div class="sk-chase-dot"></div>
<div class="sk-chase-dot"></div>
<div class="sk-chase-dot"></div>
</div>
</div>
<div class="example">
<div class="sk-bounce">
<div class="sk-bounce-dot"></div>
<div class="sk-bounce-dot"></div>
</div>
</div>
<div class="example">
<div class="sk-wave">
<div class="sk-wave-rect"></div>
<div class="sk-wave-rect"></div>
<div class="sk-wave-rect"></div>
<div class="sk-wave-rect"></div>
<div class="sk-wave-rect"></div>
</div>
</div>
<div class="example">
<div class="sk-pulse"></div>
</div>
<div class="example">
<div class="sk-flow">
<div class="sk-flow-dot"></div>
<div class="sk-flow-dot"></div>
<div class="sk-flow-dot"></div>
</div>
</div>
<div class="example">
<div class="sk-swing">
<div class="sk-swing-dot"></div>
<div class="sk-swing-dot"></div>
</div>
</div>
<div class="example">
<div class="sk-circle">
<div class="sk-circle-dot"></div>
<div class="sk-circle-dot"></div>
<div class="sk-circle-dot"></div>
<div class="sk-circle-dot"></div>
<div class="sk-circle-dot"></div>
<div class="sk-circle-dot"></div>
<div class="sk-circle-dot"></div>
<div class="sk-circle-dot"></div>
<div class="sk-circle-dot"></div>
<div class="sk-circle-dot"></div>
<div class="sk-circle-dot"></div>
<div class="sk-circle-dot"></div>
</div>
</div>
<div class="example">
<div class="sk-circle-fade">
<div class="sk-circle-fade-dot"></div>
<div class="sk-circle-fade-dot"></div>
<div class="sk-circle-fade-dot"></div>
<div class="sk-circle-fade-dot"></div>
<div class="sk-circle-fade-dot"></div>
<div class="sk-circle-fade-dot"></div>
<div class="sk-circle-fade-dot"></div>
<div class="sk-circle-fade-dot"></div>
<div class="sk-circle-fade-dot"></div>
<div class="sk-circle-fade-dot"></div>
<div class="sk-circle-fade-dot"></div>
<div class="sk-circle-fade-dot"></div>
</div>
</div>
<div class="example">
<div class="sk-grid">
<div class="sk-grid-cube"></div>
<div class="sk-grid-cube"></div>
<div class="sk-grid-cube"></div>
<div class="sk-grid-cube"></div>
<div class="sk-grid-cube"></div>
<div class="sk-grid-cube"></div>
<div class="sk-grid-cube"></div>
<div class="sk-grid-cube"></div>
<div class="sk-grid-cube"></div>
</div>
</div>
<div class="example">
<div class="sk-fold">
<div class="sk-fold-cube"></div>
<div class="sk-fold-cube"></div>
<div class="sk-fold-cube"></div>
<div class="sk-fold-cube"></div>
</div>
</div>
<div class="example">
<div class="sk-wander">
<div class="sk-wander-cube"></div>
<div class="sk-wander-cube"></div>
<div class="sk-wander-cube"></div>
</div>
</div>
</body>
</html>
================================================
FILE: package.json
================================================
{
"name": "spinkit",
"version": "2.0.1",
"description": "A collection of loading indicators animated with CSS",
"keywords": [
"css",
"spinkit",
"spinner",
"loading",
"ui"
],
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"repository": {
"type": "git",
"url": "https://github.com/tobiasahlin/SpinKit.git"
},
"author": "Tobias Ahlin Bjerrome",
"license": "MIT",
"bugs": {
"url": "https://github.com/tobiasahlin/SpinKit/issues"
},
"homepage": "https://github.com/tobiasahlin/SpinKit"
}
================================================
FILE: spinkit.css
================================================
/* Config */
:root {
--sk-size: 40px;
--sk-color: #333;
}
/* Utility class for centering */
.sk-center { margin: auto; }
/* Plane
<div class="sk-plane"></div>
*/
.sk-plane {
width: var(--sk-size);
height: var(--sk-size);
background-color: var(--sk-color);
animation: sk-plane 1.2s infinite ease-in-out;
}
@keyframes sk-plane {
0% {
transform: perspective(120px) rotateX(0deg) rotateY(0deg);
} 50% {
transform: perspective(120px) rotateX(-180.1deg) rotateY(0deg);
} 100% {
transform: perspective(120px) rotateX(-180deg) rotateY(-179.9deg);
}
}
/* Chase
<div class="sk-chase">
<div class="sk-chase-dot"></div>
<div class="sk-chase-dot"></div>
<div class="sk-chase-dot"></div>
<div class="sk-chase-dot"></div>
<div class="sk-chase-dot"></div>
<div class="sk-chase-dot"></div>
</div>
*/
.sk-chase {
width: var(--sk-size);
height: var(--sk-size);
position: relative;
animation: sk-chase 2.5s infinite linear both;
}
.sk-chase-dot {
width: 100%;
height: 100%;
position: absolute;
left: 0;
top: 0;
animation: sk-chase-dot 2.0s infinite ease-in-out both;
}
.sk-chase-dot:before {
content: '';
display: block;
width: 25%;
height: 25%;
background-color: var(--sk-color);
border-radius: 100%;
animation: sk-chase-dot-before 2.0s infinite ease-in-out both;
}
.sk-chase-dot:nth-child(1) { animation-delay: -1.1s; }
.sk-chase-dot:nth-child(2) { animation-delay: -1.0s; }
.sk-chase-dot:nth-child(3) { animation-delay: -0.9s; }
.sk-chase-dot:nth-child(4) { animation-delay: -0.8s; }
.sk-chase-dot:nth-child(5) { animation-delay: -0.7s; }
.sk-chase-dot:nth-child(6) { animation-delay: -0.6s; }
.sk-chase-dot:nth-child(1):before { animation-delay: -1.1s; }
.sk-chase-dot:nth-child(2):before { animation-delay: -1.0s; }
.sk-chase-dot:nth-child(3):before { animation-delay: -0.9s; }
.sk-chase-dot:nth-child(4):before { animation-delay: -0.8s; }
.sk-chase-dot:nth-child(5):before { animation-delay: -0.7s; }
.sk-chase-dot:nth-child(6):before { animation-delay: -0.6s; }
@keyframes sk-chase {
100% { transform: rotate(360deg); }
}
@keyframes sk-chase-dot {
80%, 100% { transform: rotate(360deg); }
}
@keyframes sk-chase-dot-before {
50% {
transform: scale(0.4);
} 100%, 0% {
transform: scale(1.0);
}
}
/* Bounce
<div class="sk-bounce">
<div class="sk-bounce-dot"></div>
<div class="sk-bounce-dot"></div>
</div>
*/
.sk-bounce {
width: var(--sk-size);
height: var(--sk-size);
position: relative;
}
.sk-bounce-dot {
width: 100%;
height: 100%;
border-radius: 50%;
background-color: var(--sk-color);
opacity: 0.6;
position: absolute;
top: 0;
left: 0;
animation: sk-bounce 2s infinite cubic-bezier(0.455, 0.03, 0.515, 0.955);
}
.sk-bounce-dot:nth-child(2) { animation-delay: -1.0s; }
@keyframes sk-bounce {
0%, 100% {
transform: scale(0);
} 45%, 55% {
transform: scale(1);
}
}
/* Wave
<div class="sk-wave">
<div class="sk-wave-rect"></div>
<div class="sk-wave-rect"></div>
<div class="sk-wave-rect"></div>
<div class="sk-wave-rect"></div>
<div class="sk-wave-rect"></div>
</div>
*/
.sk-wave {
width: var(--sk-size);
height: var(--sk-size);
display: flex;
justify-content: space-between;
}
.sk-wave-rect {
background-color: var(--sk-color);
height: 100%;
width: 15%;
animation: sk-wave 1.2s infinite ease-in-out;
}
.sk-wave-rect:nth-child(1) { animation-delay: -1.2s; }
.sk-wave-rect:nth-child(2) { animation-delay: -1.1s; }
.sk-wave-rect:nth-child(3) { animation-delay: -1.0s; }
.sk-wave-rect:nth-child(4) { animation-delay: -0.9s; }
.sk-wave-rect:nth-child(5) { animation-delay: -0.8s; }
@keyframes sk-wave {
0%, 40%, 100% {
transform: scaleY(0.4);
} 20% {
transform: scaleY(1);
}
}
/* Pulse
<div class="sk-pulse"></div>
*/
.sk-pulse {
width: var(--sk-size);
height: var(--sk-size);
background-color: var(--sk-color);
border-radius: 100%;
animation: sk-pulse 1.2s infinite cubic-bezier(0.455, 0.03, 0.515, 0.955);
}
@keyframes sk-pulse {
0% {
transform: scale(0);
} 100% {
transform: scale(1);
opacity: 0;
}
}
/* Flow
<div class="sk-flow">
<div class="sk-flow-dot"></div>
<div class="sk-flow-dot"></div>
<div class="sk-flow-dot"></div>
</div>
*/
.sk-flow {
width: calc(var(--sk-size) * 1.3);
height: calc(var(--sk-size) * 1.3);
display: flex;
justify-content: space-between;
}
.sk-flow-dot {
width: 25%;
height: 25%;
background-color: var(--sk-color);
border-radius: 50%;
animation: sk-flow 1.4s cubic-bezier(0.455, 0.03, 0.515, 0.955) 0s infinite both;
}
.sk-flow-dot:nth-child(1) { animation-delay: -0.30s; }
.sk-flow-dot:nth-child(2) { animation-delay: -0.15s; }
@keyframes sk-flow {
0%, 80%, 100% {
transform: scale(0.3); }
40% {
transform: scale(1);
}
}
/* Swing
<div class="sk-swing">
<div class="sk-swing-dot"></div>
<div class="sk-swing-dot"></div>
</div>
*/
.sk-swing {
width: var(--sk-size);
height: var(--sk-size);
position: relative;
animation: sk-swing 1.8s infinite linear;
}
.sk-swing-dot {
width: 45%;
height: 45%;
position: absolute;
top: 0;
left: 0;
right: 0;
margin: auto;
background-color: var(--sk-color);
border-radius: 100%;
animation: sk-swing-dot 2s infinite ease-in-out;
}
.sk-swing-dot:nth-child(2) {
top: auto;
bottom: 0;
animation-delay: -1s;
}
@keyframes sk-swing {
100% {
transform: rotate(360deg);
}
}
@keyframes sk-swing-dot {
0%, 100% {
transform: scale(0.2); }
50% {
transform: scale(1);
}
}
/* Circle
<div class="sk-circle">
<div class="sk-circle-dot"></div>
<div class="sk-circle-dot"></div>
<div class="sk-circle-dot"></div>
<div class="sk-circle-dot"></div>
<div class="sk-circle-dot"></div>
<div class="sk-circle-dot"></div>
<div class="sk-circle-dot"></div>
<div class="sk-circle-dot"></div>
<div class="sk-circle-dot"></div>
<div class="sk-circle-dot"></div>
<div class="sk-circle-dot"></div>
<div class="sk-circle-dot"></div>
</div>
*/
.sk-circle {
width: var(--sk-size);
height: var(--sk-size);
position: relative;
}
.sk-circle-dot {
width: 100%;
height: 100%;
position: absolute;
left: 0;
top: 0;
}
.sk-circle-dot:before {
content: '';
display: block;
width: 15%;
height: 15%;
background-color: var(--sk-color);
border-radius: 100%;
animation: sk-circle 1.2s infinite ease-in-out both;
}
.sk-circle-dot:nth-child(1) { transform: rotate(30deg); }
.sk-circle-dot:nth-child(2) { transform: rotate(60deg); }
.sk-circle-dot:nth-child(3) { transform: rotate(90deg); }
.sk-circle-dot:nth-child(4) { transform: rotate(120deg); }
.sk-circle-dot:nth-child(5) { transform: rotate(150deg); }
.sk-circle-dot:nth-child(6) { transform: rotate(180deg); }
.sk-circle-dot:nth-child(7) { transform: rotate(210deg); }
.sk-circle-dot:nth-child(8) { transform: rotate(240deg); }
.sk-circle-dot:nth-child(9) { transform: rotate(270deg); }
.sk-circle-dot:nth-child(10) { transform: rotate(300deg); }
.sk-circle-dot:nth-child(11) { transform: rotate(330deg); }
.sk-circle-dot:nth-child(1):before { animation-delay: -1.1s; }
.sk-circle-dot:nth-child(2):before { animation-delay: -1s; }
.sk-circle-dot:nth-child(3):before { animation-delay: -0.9s; }
.sk-circle-dot:nth-child(4):before { animation-delay: -0.8s; }
.sk-circle-dot:nth-child(5):before { animation-delay: -0.7s; }
.sk-circle-dot:nth-child(6):before { animation-delay: -0.6s; }
.sk-circle-dot:nth-child(7):before { animation-delay: -0.5s; }
.sk-circle-dot:nth-child(8):before { animation-delay: -0.4s; }
.sk-circle-dot:nth-child(9):before { animation-delay: -0.3s; }
.sk-circle-dot:nth-child(10):before { animation-delay: -0.2s; }
.sk-circle-dot:nth-child(11):before { animation-delay: -0.1s; }
@keyframes sk-circle {
0%, 80%, 100% {
transform: scale(0); }
40% {
transform: scale(1);
}
}
/* Circle Fade
<div class="sk-circle-fade">
<div class="sk-circle-fade-dot"></div>
<div class="sk-circle-fade-dot"></div>
<div class="sk-circle-fade-dot"></div>
<div class="sk-circle-fade-dot"></div>
<div class="sk-circle-fade-dot"></div>
<div class="sk-circle-fade-dot"></div>
<div class="sk-circle-fade-dot"></div>
<div class="sk-circle-fade-dot"></div>
<div class="sk-circle-fade-dot"></div>
<div class="sk-circle-fade-dot"></div>
<div class="sk-circle-fade-dot"></div>
<div class="sk-circle-fade-dot"></div>
</div>
*/
.sk-circle-fade {
width: var(--sk-size);
height: var(--sk-size);
position: relative;
}
.sk-circle-fade-dot {
width: 100%;
height: 100%;
position: absolute;
left: 0;
top: 0;
}
.sk-circle-fade-dot:before {
content: '';
display: block;
width: 15%;
height: 15%;
background-color: var(--sk-color);
border-radius: 100%;
animation: sk-circle-fade 1.2s infinite ease-in-out both;
}
.sk-circle-fade-dot:nth-child(1) { transform: rotate(30deg); }
.sk-circle-fade-dot:nth-child(2) { transform: rotate(60deg); }
.sk-circle-fade-dot:nth-child(3) { transform: rotate(90deg); }
.sk-circle-fade-dot:nth-child(4) { transform: rotate(120deg); }
.sk-circle-fade-dot:nth-child(5) { transform: rotate(150deg); }
.sk-circle-fade-dot:nth-child(6) { transform: rotate(180deg); }
.sk-circle-fade-dot:nth-child(7) { transform: rotate(210deg); }
.sk-circle-fade-dot:nth-child(8) { transform: rotate(240deg); }
.sk-circle-fade-dot:nth-child(9) { transform: rotate(270deg); }
.sk-circle-fade-dot:nth-child(10) { transform: rotate(300deg); }
.sk-circle-fade-dot:nth-child(11) { transform: rotate(330deg); }
.sk-circle-fade-dot:nth-child(1):before { animation-delay: -1.1s; }
.sk-circle-fade-dot:nth-child(2):before { animation-delay: -1.0s; }
.sk-circle-fade-dot:nth-child(3):before { animation-delay: -0.9s; }
.sk-circle-fade-dot:nth-child(4):before { animation-delay: -0.8s; }
.sk-circle-fade-dot:nth-child(5):before { animation-delay: -0.7s; }
.sk-circle-fade-dot:nth-child(6):before { animation-delay: -0.6s; }
.sk-circle-fade-dot:nth-child(7):before { animation-delay: -0.5s; }
.sk-circle-fade-dot:nth-child(8):before { animation-delay: -0.4s; }
.sk-circle-fade-dot:nth-child(9):before { animation-delay: -0.3s; }
.sk-circle-fade-dot:nth-child(10):before { animation-delay: -0.2s; }
.sk-circle-fade-dot:nth-child(11):before { animation-delay: -0.1s; }
@keyframes sk-circle-fade {
0%, 39%, 100% {
opacity: 0;
transform: scale(0.6);
} 40% {
opacity: 1;
transform: scale(1);
}
}
/* Grid
<div class="sk-grid">
<div class="sk-grid-cube"></div>
<div class="sk-grid-cube"></div>
<div class="sk-grid-cube"></div>
<div class="sk-grid-cube"></div>
<div class="sk-grid-cube"></div>
<div class="sk-grid-cube"></div>
<div class="sk-grid-cube"></div>
<div class="sk-grid-cube"></div>
<div class="sk-grid-cube"></div>
</div>
*/
.sk-grid {
width: var(--sk-size);
height: var(--sk-size);
/* Cube positions
* 1 2 3
* 4 5 6
* 7 8 9
*/
}
.sk-grid-cube {
width: 33.33%;
height: 33.33%;
background-color: var(--sk-color);
float: left;
animation: sk-grid 1.3s infinite ease-in-out;
}
.sk-grid-cube:nth-child(1) { animation-delay: 0.2s; }
.sk-grid-cube:nth-child(2) { animation-delay: 0.3s; }
.sk-grid-cube:nth-child(3) { animation-delay: 0.4s; }
.sk-grid-cube:nth-child(4) { animation-delay: 0.1s; }
.sk-grid-cube:nth-child(5) { animation-delay: 0.2s; }
.sk-grid-cube:nth-child(6) { animation-delay: 0.3s; }
.sk-grid-cube:nth-child(7) { animation-delay: 0.0s; }
.sk-grid-cube:nth-child(8) { animation-delay: 0.1s; }
.sk-grid-cube:nth-child(9) { animation-delay: 0.2s; }
@keyframes sk-grid {
0%, 70%, 100% {
transform: scale3D(1, 1, 1);
} 35% {
transform: scale3D(0, 0, 1);
}
}
/* Fold
<div class="sk-fold">
<div class="sk-fold-cube"></div>
<div class="sk-fold-cube"></div>
<div class="sk-fold-cube"></div>
<div class="sk-fold-cube"></div>
</div>
*/
.sk-fold {
width: var(--sk-size);
height: var(--sk-size);
position: relative;
transform: rotateZ(45deg);
}
.sk-fold-cube {
float: left;
width: 50%;
height: 50%;
position: relative;
transform: scale(1.1);
}
.sk-fold-cube:before {
content: '';
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: var(--sk-color);
animation: sk-fold 2.4s infinite linear both;
transform-origin: 100% 100%;
}
.sk-fold-cube:nth-child(2) { transform: scale(1.1) rotateZ(90deg); }
.sk-fold-cube:nth-child(4) { transform: scale(1.1) rotateZ(180deg); }
.sk-fold-cube:nth-child(3) { transform: scale(1.1) rotateZ(270deg); }
.sk-fold-cube:nth-child(2):before { animation-delay: 0.3s; }
.sk-fold-cube:nth-child(4):before { animation-delay: 0.6s; }
.sk-fold-cube:nth-child(3):before { animation-delay: 0.9s; }
@keyframes sk-fold {
0%, 10% {
transform: perspective(140px) rotateX(-180deg);
opacity: 0;
} 25%, 75% {
transform: perspective(140px) rotateX(0deg);
opacity: 1;
} 90%, 100% {
transform: perspective(140px) rotateY(180deg);
opacity: 0;
}
}
/* Wander
<div class="sk-wander">
<div class="sk-wander-cube"></div>
<div class="sk-wander-cube"></div>
<div class="sk-wander-cube"></div>
<div class="sk-wander-cube"></div>
</div>
*/
.sk-wander {
width: var(--sk-size);
height: var(--sk-size);
position: relative;
}
.sk-wander-cube {
background-color: var(--sk-color);
width: 20%;
height: 20%;
position: absolute;
top: 0;
left: 0;
--sk-wander-distance: calc(var(--sk-size) * 0.75);
animation: sk-wander 2.0s ease-in-out -2.0s infinite both;
}
.sk-wander-cube:nth-child(2) { animation-delay: -0.5s; }
.sk-wander-cube:nth-child(3) { animation-delay: -1.0s; }
@keyframes sk-wander {
0% {
transform: rotate(0deg);
} 25% {
transform: translateX(var(--sk-wander-distance)) rotate(-90deg) scale(0.6);
} 50% { /* Make FF rotate in the right direction */
transform: translateX(var(--sk-wander-distance)) translateY(var(--sk-wander-distance)) rotate(-179deg);
} 50.1% {
transform: translateX(var(--sk-wander-distance)) translateY(var(--sk-wander-distance)) rotate(-180deg);
} 75% {
transform: translateX(0) translateY(var(--sk-wander-distance)) rotate(-270deg) scale(0.6);
} 100% {
transform: rotate(-360deg);
}
}
gitextract_dx25p364/ ├── .gitignore ├── CHANGELOG.md ├── LICENSE ├── README.md ├── bower.json ├── examples.html ├── package.json └── spinkit.css
Condensed preview — 8 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (29K chars).
[
{
"path": ".gitignore",
"chars": 62,
"preview": "node_modules/\n.DS_Store\n*.sublime-project\n*.sublime-workspace\n"
},
{
"path": "CHANGELOG.md",
"chars": 1851,
"preview": "# 2.0.1\n\n* Fixed: Chase spinner's HTML snippet now has the correct number of children\n\n# 2.0.0\n\n* New: Added examples.ht"
},
{
"path": "LICENSE",
"chars": 1079,
"preview": "The MIT License (MIT)\n\nCopyright (c) 2020 Tobias Ahlin\n\nPermission is hereby granted, free of charge, to any person obta"
},
{
"path": "README.md",
"chars": 5264,
"preview": "# [SpinKit](http://tobiasahlin.com/spinkit/)\n\nSimple loading spinners animated with CSS. See [demo](http://tobiasahlin.c"
},
{
"path": "bower.json",
"chars": 346,
"preview": "{\n \"name\": \"SpinKit\",\n \"homepage\": \"https://github.com/tobiasahlin/SpinKit\",\n \"authors\": [\n \"Tobias Ahlin\"\n ],\n "
},
{
"path": "examples.html",
"chars": 3503,
"preview": "<!DOCTYPE html>\n<html>\n<head>\n <title>SpinKit Examples</title>\n <link rel=\"stylesheet\" type=\"text/css\" href=\"spinkit.c"
},
{
"path": "package.json",
"chars": 570,
"preview": "{\n \"name\": \"spinkit\",\n \"version\": \"2.0.1\",\n \"description\": \"A collection of loading indicators animated with CSS\",\n "
},
{
"path": "spinkit.css",
"chars": 14782,
"preview": "/* Config */\n:root {\n --sk-size: 40px;\n --sk-color: #333;\n}\n\n\n/* Utility class for centering */\n.sk-center { margin: a"
}
]
About this extraction
This page contains the full source code of the tobiasahlin/SpinKit GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 8 files (26.8 KB), approximately 8.6k tokens. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.