All Projects → dvtng → React Loading Skeleton

dvtng / React Loading Skeleton

Licence: mit
Create skeleton screens that automatically adapt to your app!

Programming Languages

javascript
184084 projects - #8 most used programming language
typescript
32286 projects

Projects that are alternatives of or similar to React Loading Skeleton

Ocskeleton
[OCSkeleton] - Make your loading view a little difference.
Stars: ✭ 184 (-92.74%)
Mutual labels:  placeholder, loading-animations
Vue Content Loading
Vue component to easily build (or use presets) SVG loading cards Facebook like.
Stars: ✭ 729 (-71.22%)
Mutual labels:  placeholder, loading-animations
Rhplaceholder
Show pleasant loading view for your users 😍
Stars: ✭ 238 (-90.6%)
Mutual labels:  placeholder, loading-animations
Skeletonview
☠️ An elegant way to show users that something is happening and also prepare them to which contents they are awaiting
Stars: ✭ 10,804 (+326.53%)
Mutual labels:  placeholder, loading-animations
Tabanimated
A skeleton screen framework based on native for iOS. (一个由iOS原生组件映射出骨架屏的框架,包含快速植入,低耦合,兼容复杂视图等特点,提供国内主流骨架屏动画的加载方案,同时支持上拉加载更多、自定制动画。)
Stars: ✭ 2,909 (+14.84%)
Mutual labels:  placeholder, loading-animations
Shimmerlayout
Memory efficient, simple yet highly customizable shimmer effect for Android.
Stars: ✭ 81 (-96.8%)
Mutual labels:  placeholder, loading-animations
Eleventy Plugin Lazyimages
Eleventy plugin that adds blurry placeholders & lazy loading to your images
Stars: ✭ 108 (-95.74%)
Mutual labels:  placeholder
Waveloadingview
An Android library providing to realize wave loading effect.
Stars: ✭ 1,658 (-34.54%)
Mutual labels:  loading-animations
Vue Spinkit
🌀 A collection of loading indicators animated with CSS for VueJS
Stars: ✭ 105 (-95.85%)
Mutual labels:  loading-animations
Kaloader
Beautiful animated placeholders for showing loading of data
Stars: ✭ 99 (-96.09%)
Mutual labels:  placeholder
Hgplaceholders
Nice library to show placeholders and Empty States for any UITableView/UICollectionView in your project
Stars: ✭ 2,048 (-19.15%)
Mutual labels:  placeholder
Loading Animations
A Flutter package with a selection of simple yet very customizable set of loading animations.
Stars: ✭ 147 (-94.2%)
Mutual labels:  loading-animations
Ng Image Appear
AngularJS Module to make images appear with transition as they load.
Stars: ✭ 120 (-95.26%)
Mutual labels:  placeholder
Acfloatingtextfield
It is a subclass of UITextfield to Provide the floating label and customisations.
Stars: ✭ 110 (-95.66%)
Mutual labels:  placeholder
React Content Loader
⚪ SVG-Powered component to easily create skeleton loadings.
Stars: ✭ 11,830 (+367.04%)
Mutual labels:  placeholder
Nvactivityindicatorview
A collection of awesome loading animations
Stars: ✭ 10,031 (+296.01%)
Mutual labels:  loading-animations
Cminputview
💪之前代码是基于UITextView进行的封装,侵入性较强,不方便使用,现使用Category重构代码,支持Cocoapods
Stars: ✭ 149 (-94.12%)
Mutual labels:  placeholder
Broccoli
📟An Android library that shows the placeholder of the view.
Stars: ✭ 1,390 (-45.12%)
Mutual labels:  placeholder
Blurhash Rust Wasm
A Rust and WASM implementation of the blurhash algorithm
Stars: ✭ 119 (-95.3%)
Mutual labels:  placeholder
Rn Placeholder
🏖️ Display some placeholder stuff before rendering your text or media content in React Native
Stars: ✭ 1,934 (-23.65%)
Mutual labels:  placeholder
Logo

React Loading Skeleton

Make beautiful, animated loading skeletons that automatically adapt to your app.

Open on CodeSandbox

Gif of the skeleton in action

Learn about the changes in version 3, or view the v2 documentation.

Basic Usage

Install via one of:

yarn add react-loading-skeleton
npm install react-loading-skeleton
import Skeleton from 'react-loading-skeleton'
import 'react-loading-skeleton/dist/skeleton.css'

<Skeleton /> // Simple, single-line loading skeleton
<Skeleton count={5} /> // Five-line loading skeleton

Principles

Adapts to the styles you have defined

The Skeleton component should be used directly in your components in place of content that is loading. While other libraries require you to meticulously craft a skeleton screen that matches the font size, line height, and margins of your content, the Skeleton component is automatically sized to the correct dimensions.

For example:

function BlogPost(props) {
    return (
        <div>
            <h1>{props.title || <Skeleton />}</h1>
            {props.body || <Skeleton count={10} />}
        </div>
    )
}

...will produce correctly-sized skeletons for the heading and body without any further configuration.

This ensures the loading state remains up-to-date with any changes to your layout or typography.

Don't make dedicated skeleton screens

Instead, make components with built-in skeleton states.

This approach is beneficial because:

  1. It keeps styles in sync.
  2. Components should represent all possible states — loading included.
  3. It allows for more flexible loading patterns. In the blog post example above, it's possible to have the title load before the body, while having both pieces of content show loading skeletons at the right time.

Theming

Customize individual skeletons with props, or render a SkeletonTheme to style all skeletons below it in the React hierarchy:

import Skeleton, { SkeletonTheme } from 'react-loading-skeleton'

return (
    <SkeletonTheme baseColor="#202020" highlightColor="#444">
        <p>
            <Skeleton count={3} />
        </p>
    </SkeletonTheme>
)

Props Reference

Skeleton only

Prop Description Default
count?: number The number of lines of skeletons to render. 1
wrapper?: React.FunctionComponent A custom wrapper component that goes around the individual skeleton elements.
circle?: boolean Makes the skeleton circular by setting border-radius to 50%. false
className?: string A custom class name for the individual skeleton elements which is used alongside the default class, react-loading-skeleton.
containerClassName?: string A custom class name for the <span> that wraps the individual skeleton elements.
containerTestId?: string A string that is added to the container element as a data-testid attribute. Use it with screen.getByTestId('...') from React Testing Library.
style?: React.CSSProperties This is an escape hatch for advanced use cases and is not the preferred way to style the skeleton. Props (e.g. width, borderRadius) take priority over this style object.

Skeleton and SkeletonTheme

Prop Description Default
baseColor?: string The background color of the skeleton. #ebebeb
highlightColor?: string The highlight color in the skeleton animation. #f5f5f5
width?: string | number The width of the skeleton. 100%
height?: string | number The height of each skeleton line. The font size
borderRadius?: string | number The border radius of the skeleton. 0.25rem
inline?: boolean By default, a <br /> is inserted after each skeleton so that each skeleton gets its own line. When inline is true, no line breaks are inserted. false
duration?: number The length of the animation in seconds. 1.5
direction?: 'ltr' | 'rtl' The direction of the animation, either left-to-right or right-to-left. 'ltr'
enableAnimation?: boolean Whether the animation should play. The skeleton will be a solid color when this is false. You could use this prop to stop the animation if an error occurs. true

Examples

Custom Wrapper

There are two ways to wrap a skeleton in a container:

function Box({ children }: PropsWithChildren<unknown>) {
    return (
        <div
            style={{
                border: '1px solid #ccc',
                display: 'block',
                lineHeight: 2,
                padding: '1rem',
                marginBottom: '0.5rem',
                width: 100,
            }}
        >
            {children}
        </div>
    )
}

// Method 1: Use the wrapper prop
const wrapped1 = <Skeleton wrapper={Box} count={5} />

// Method 2: Do it "the normal way"
const wrapped2 = (
    <Box>
        <Skeleton />
    </Box>
)

The height of my container is off by a few pixels!

In the example below, the height of the <div> will be slightly larger than 30 even though the react-loading-skeleton element is exactly 30px.

<div>
    <Skeleton height={30} />
</div>

This is a consequence of how line-height works in CSS. If you need the <div> to be exactly 30px tall, set its line-height to 1. See here for more details.

Contributing

Contributions are welcome! See CONTRIBUTING.md to get started.

Acknowledgements

Our logo is based off an image from Font Awesome. Thanks!

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].