Home  >  Article  >  Web Front-end  >  How to use CSS to realize the animation effect of roller coaster loader

How to use CSS to realize the animation effect of roller coaster loader

不言
不言Original
2018-08-08 14:52:121983browse

The content of this article is about how to use CSS to realize the animation effect of the roller coaster loader. It has certain reference value. Friends in need can refer to it. I hope it will be helpful to you.

Effect preview

How to use CSS to realize the animation effect of roller coaster loader

Code interpretation

Definition of dom, container Contains 3 elements, representing 3 dots:

<p>
    <span></span>
    <span></span>
    <span></span>
</p>

Centered display:

body {
    margin: 0;
    height: 100vh;
    display: flex;
    align-items: center;
    justify-content: center;
    background: linear-gradient(to right, silver, teal);
}

Defines the diameter of the Ferris wheel, and other lengths use this value as the basic scale:

.loader {
    --diameter: 10em;
}

Define the container size, the width is 2 times the height:

.loader {
    --width: calc(var(--diameter) * 2);
    width: var(--width);
    height: var(--diameter);
}

Define the shared attributes of the pseudo-element:

.loader {
    position: relative;
}

.loader::before,
.loader::after {
    content: '';
    position: absolute;
    bottom: 0;
}

Draw the bottom track and define a variable representing the line thickness:

.loader {
    --stroke-width: calc(var(--diameter) / 40);
    color: white;
}

.loader::before {
    width: inherit;
    height: var(--stroke-width);
    background-color: currentColor;
}

Draw the circular orbit in the middle:

.loader::after {
    box-sizing: border-box;
    width: var(--diameter);
    height: var(--diameter);
    border: var(--stroke-width) solid;
    border-radius: 50%;
    left: 25%;
}

Draw a dot and define a variable representing the diameter of the dot:

.loader {
    --dot-diameter: calc(var(--diameter) / 10);
}

.loader span {
    position: absolute;
    width: var(--dot-diameter);
    height: var(--dot-diameter);
    background-color: currentColor;
    border-radius: 50%;
    bottom: var(--stroke-width);
    left: calc((var(--width) - var(--dot-diameter)) / 2);
}

Add for the dot Animation effect of rotating along a circular orbit:

.loader span {
    animation:
        rotating 2s linear infinite;
    --vertical-center: calc((var(--diameter) / 2 - var(--stroke-width) - var(--dot-diameter)) * -1);
    transform-origin: 50% var(--vertical-center);
}

@keyframes rotating {
    0%, 10% {
        transform: rotate(0deg);
    }

    60%, 100% {
        transform: rotate(-1turn);
    }
}

Add moving animation effect to the dots:

.loader span {
    animation:
        run 2s linear infinite,
        rotating 2s linear infinite;
}

@keyframes run {
    0% {
        left: calc(var(--dot-diameter) * -1);
    }

    10%, 60% {
        left: calc((var(--width) - var(--dot-diameter)) / 2);
    }

    70%, 100% {
        left: calc(var(--width));
    }
}

Set animation delay for the other 2 dots to make the 3 dots look like Like 3 carriages next to each other:

.loader span:nth-child(1) {
    animation-delay: 0.075s;
}

.loader span:nth-child(2) {
    animation-delay: 0.15s;
}

Finally, hide the content outside the container:

.loader {
    overflow: hidden;
}

Recommended related articles:

css to implement navigation switching Code example

How to use pure CSS to achieve the effect of a green pig

css3 to achieve the effect of a moving menu button

The above is the detailed content of How to use CSS to realize the animation effect of roller coaster loader. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn