Back to rankings

egoist/vue-content-loader

JavaScriptcreate-content-loader.now.sh

SVG component to create placeholder loading, like Facebook cards loading.

svgloadingvuecomponentplaceholder
Star Growth
Stars
3k
Forks
136
Weekly Growth
Issues
2
1k2k3k
Jan 2023Mar 2024May 2025Jul 2026
Artifactsnpmnpm install vue-content-loader
README

vue-content-loader

NPM version NPM downloads CircleCI

SVG component to create placeholder loading, like Facebook cards loading.

preview

Features

This is a Vue port for react-content-loader.

  • Completely customizable: you can change the colors, speed and sizes.
  • Create your own loading: use the online tool to create your custom loader easily.
  • You can use it right now: there are a lot of presets already.
  • Performance:
    • Tree-shakable and highly optimized bundle.
    • Pure SVG, so it's works without any javascript, canvas, etc.
    • Pure functional components.

Install

⚠️ The latest version is compatible with Vue 3 only. For Vue 2 & Nuxt 2, use vue-content-loader@^0.2 instead.

With npm:

npm i vue-content-loader

Or with yarn:

yarn add vue-content-loader

CDN: UNPKG | jsDelivr (available as window.contentLoaders)

Usage

👀👉 Demo: CodeSandbox

<template>
  <content-loader></content-loader>
</template>

<script>
import { ContentLoader } from 'vue-content-loader'

export default {
  components: {
    ContentLoader,
  },
}
</script>

Built-in loaders

import {
  ContentLoader,
  FacebookLoader,
  CodeLoader,
  BulletListLoader,
  InstagramLoader,
  ListLoader,
} from 'vue-content-loader'

ContentLoader is a meta loader while other loaders are just higher-order components of it. By default ContentLoader only displays a simple rectangle, here's how you can use it to create custom loaders:

<ContentLoader viewBox="0 0 250 110">
  <rect x="0" y="0" rx="3" ry="3" width="250" height="10" />
  <rect x="20" y="20" rx="3" ry="3" width="220" height="10" />
  <rect x="20" y="40" rx="3" ry="3" width="170" height="10" />
  <rect x="0" y="60" rx="3" ry="3" width="250" height="10" />
  <rect x="20" y="80" rx="3" ry="3" width="200" height="10" />
  <rect x="20" y="100" rx="3" ry="3" width="80" height="10" />
</ContentLoader>

This is also how ListLoader is created.

You can also use the online tool to create shapes for your custom loader.

API

Props

Prop Type Default Description
width number, string SVG width in pixels without unit
height number, string SVG height in pixels without unit
viewBox string '0 0 ${width ?? 400} ${height ?? 130}' See SVG viewBox attribute
preserveAspectRatio string 'xMidYMid meet' See SVG preserveAspectRatio attribute
speed number 2 Animation speed
primaryColor string '#f9f9f9' Background color
secondaryColor string '#ecebeb' Highlight color
uniqueKey string randomId() Unique ID, you need to make it consistent for SSR
animate boolean true
baseUrl string empty string Required if you're using <base url="/" /> in your <head />. Defaults to an empty string. This prop is common used as: <content-loader :base-url="$route.fullPath" /> which will fill the SVG attribute with the relative path. Related #14.
primaryOpacity number 1 Background opacity (0 = transparent, 1 = opaque) used to solve an issue in Safari
secondaryOpacity number 1 Background opacity (0 = transparent, 1 = opaque) used to solve an issue in Safari

Examples

Responsiveness

To create a responsive loader that will follow its parent container width, use only the viewBox attribute to set the ratio:

<ContentLoader viewBox="0 0 300 200">
  <!-- ... -->
</ContentLoader>

To create a loader with fixed dimensions, use width and height attributes:

<ContentLoader width="300" height="200">
  <!-- ... -->
</ContentLoader>

Note: the exact behavior might be different depending on the CSS you apply to SVG elements.

Credits

This is basically a Vue port for react-content-loader.

Thanks to @alidcastano for transferring the package name to me. 😘

License

MIT © EGOIST

Related repositories
mrdoob/three.js

JavaScript 3D Library.

JavaScriptnpmMIT Licensejavascript3d
threejs.org
113.9k36.4k
d3/d3

Bring data to life with SVG, Canvas and HTML. :bar_chart::chart_with_upwards_trend::tada:

ShellISC Licensevisualizationdata-visualization
d3js.org
113.3k22.7k
juliangarnier/anime

JavaScript animation engine

JavaScriptnpmMIT Licenseanimationanime
animejs.com
71.3k4.8k
apache/echarts

Apache ECharts is a powerful, interactive charting and data visualization library for browser

TypeScriptnpmApache License 2.0echartsdata-visualization
echarts.apache.org
66.9k19.8k
drawdb-io/drawdb

Free, simple, and intuitive online database diagram editor and SQL generator.

JavaScriptnpmGNU Affero General Public License v3.0database-schemaeditor
drawdb.app
38.2k3.1k
lovell/sharp

High performance Node.js image processing, the fastest module to resize JPEG, PNG, WebP, AVIF and TIFF images. Uses the libvips library.

JavaScriptnpmApache License 2.0javascriptwebp
sharp.pixelplumbing.com
32.5k1.4k
badges/shields

Concise, consistent, and legible badges in SVG and raster format

JavaScriptnpmApache License 2.0badgegithub
shields.io
27k5.6k
feathericons/feather

Simply beautiful open-source icons

JavaScriptnpmMIT Licenseiconssvg
feathericons.com
26k1.3k
simple-icons/simple-icons

SVG icons for popular brands

JavaScriptnpmCreative Commons Zero v1.0 Universalbrandbranding
simpleicons.org
25.5k3.1k
lucide-icons/lucide

Beautiful & consistent icon toolkit made by the community. Open-source project and a fork of Feather Icons.

TypeScriptnpmOthersvgsicons
lucide.dev
23.6k1.5k
svg/svgo

⚙️ Node.js tool for optimizing SVG files

JavaScriptnpmMIT Licensesvgminification
svgo.dev
22.6k1.4k
tabler/tabler-icons

A set of over 6000 free MIT-licensed high-quality SVG icons for you to use in your web projects.

JavaScriptnpmMIT Licenseiconsiconset
tabler.io/icons
21.2k1.2k