Vue3 Skeleton Loader
Creating a loading animation with an attractive appearance and in line with the app design, for a pleasant user experience.
Basic Usage
Using npm
npm install vue3-skeleton-loader
Using yarn
yarn add vue3-skeleton-loader
Using loader in your .vue
file
import VueSkeletonLoader from 'vue3-skeleton-loader';
import 'vue3-skeleton-loader/dist/style.css';
<VueSkeletonLoader type="image@2"></VueSkeletonLoader>
Introduction
Skeleton loader provides a simple solution to provide loading variables in your application.
It prepares the user for content while data is fetched from the server or loaded asynchronously.
Props
Skeleton
Prop | Values | Default | Type |
---|
loading
|
true
false
|
true
|
Boolean
|
If it is true, the skeleton loader will be displayed.
|
type
|
text
avatar
image
button
chip
divider
|
text
|
String
|
It is a string that specifies the type and number of your skeleton, such as text@4 ,
the value before @ specifies the type of skeleton and the value after that specifies the number,
and if only the type is written, the value is one.
|
animation
|
wave
|
wave
|
String
|
The animation parameter is a string; if left empty string, no animation will be displayed.
To showcase a specific animation, provide its name and globally define the corresponding keyframes.
|
duration
|
-
|
1.5s
|
String
|
The duration of the animation.
|
timingFunction
|
Common values for the timing-function property include:
ease
linear
ease-in
ease-out
ease-in-out
...
|
linear
|
String
|
The timing-function property in CSS is used to specify the speed curve of an animation.
|
base-color
|
-
|
#0000001E
|
String
|
The background color of the skeleton.
|
highlight-color
|
-
|
#FFFFFF66
|
String
|
The highlight color in the skeleton animation.
|
border-radius
|
-
|
different for any types
|
String
Number
|
The border radius of the skeleton and it's different for any type.
|
height
|
-
|
different for any type
|
String
Number
|
The height of skeleton.
|
width
|
-
|
different for any types
|
String
Number
|
The width of skeleton.
|
direction
|
ltr
|
ltr
rtl
|
String
|
The direction of the animation.
|
skeleton-style
|
-
|
{}
|
Object
|
A custom style for individual skeleton elements.
|
skeleton-class-name
|
-
|
""
|
String
|
A custom class name for individual skeleton elements is used alongside default class names
v-skeleton-loader-${type} and vue-skeleton-loader-bone .
|
Examples
Custom animation
To set a custom animation for the VueSkeletonLoader
, first, register the animation globally, then pass its
name to the component using the animation
prop.
Troubleshooting
Skeleton gets width 0 when parent display is flex
In the example below, the issue is demonstrated. To resolve it, you can either set the style flex:1
for
VueSkeletonLoader
or enclose the skeleton within a div element, as shown below:
<script setup lang="ts">
import VueSkeletonLoader from 'vue3-skeleton-loader';
import 'vue3-skeleton-loader/dist/style.css';
</script>
<template>
<div class="container">
<div class="avatar-container">
<VueSkeletonLoader type="avatar"/>
<div>
<VueSkeletonLoader type="text" width="100px" height="10px"/>
<VueSkeletonLoader type="text" width="70px" height="6px"/>
</div>
</div>
</div>
</template>
<style lang="scss">
.container {
max-width: 400px;
margin: 30px auto;
padding: 12px;
border: 2px solid #0000001E;
border-radius: 0.25rem;
.avatar-container {
display: flex;
gap: 12px;
align-items: center;
}
}
</style>
License
MIT