Home > Web Front-end > CSS Tutorial > How to use pure CSS to achieve stripe illusion animation effect (source code attached)

How to use pure CSS to achieve stripe illusion animation effect (source code attached)

不言
Release: 2018-09-10 14:27:34
Original
2669 people have browsed it

The content of this article is about how to use pure CSS to achieve the stripe illusion animation effect (source code attached). 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 pure CSS to achieve stripe illusion animation effect (source code attached)

Source code download

https://github.com/comehope/front-end-daily -challenges

Code Interpretation

Define dom, the container contains 2 elements, representing 2 tracks respectively:

<div>
    <span></span>
    <span></span>
</div>
Copy after login

Centered display:

body {
    margin: 0;
    height: 100vh;
    display: flex;
    align-items: center;
    justify-content: center;
    background-color: #999;
}
Copy after login

Definition Container size and layout of child elements:

.container {
    font-size: 30px;
    width: calc(13em + 0.5em);
    height: 8em;
    display: flex;
    flex-direction: column;
    justify-content: space-between;
}
Copy after login

Define 2 color values, one light and one dark:

.container {
    --dark: #222;
    --light: #ddd;
}
Copy after login

Draw the outline of 2 tracks:

.track {
    width: inherit;
    height: 2em;
    border: 1px solid var(--dark);
}
Copy after login

is the background pattern of the two tracks. The pattern is alternating light and dark stripes, but the second track is offset by half a grid:

.track {
    background: linear-gradient(
        90deg,
        var(--dark) 50%,
        var(--light) 50%
    );
    background-size: 1em;
}

.track:nth-child(2) {
    background-position: 0.5em;
}
Copy after login

Use pseudo elements to draw two rectangles:

.track {
    position: relative;
    display: flex;
    align-items: center;
}

.track::before {
    content: '';
    position: absolute;
    width: 2em;
    height: 0.8em;
    background-color: var(--light);
}
Copy after login

Let these two rectangles move back and forth on the track:

.track::before {
    animation: move 5s linear infinite alternate;
}

@keyframes move {
    from {
        left: 0;
    }
    
    to {
        left: calc(100% - 2em);
    }
}
Copy after login

At this time, the two rectangles appear to be moving forward one after the other, but in fact they start at the same moment and move at the same speed. move. Next let’s reveal the truth.

Add a child element to the dom as a button;

<p>
    <span></span>
    <span></span>
    <span>Show me the truth</span>
</p>
Copy after login

Set the style of the button:

.toggle {
    order: -1;
    width: 10em;
    height: 2em;
    border: 2px solid var(--dark);
    border-radius: 0.2em;
    font-size: 0.5em;
    font-family: sans-serif;
    font-weight: bold;
    color: black;
    text-align: center;
    line-height: 2em;
    cursor: pointer;
    user-select: none;
}
Copy after login

Set a background similar to the track style for the button, as well as mouse hover Effect:

.toggle {
    background-image: linear-gradient(to right, #ddd 50%, #999 50%);
    background-size: 1em;
    transition: 0.5s;
}

.toggle:hover {
    background-position: 5em;
}
Copy after login

Add a script that is triggered when the button is clicked to switch the style of the track element:

let $toggle = document.getElementsByClassName('toggle')[0]
let $tracks = Array.from(document.getElementsByClassName('track'))

$toggle.addEventListener('click', function() {
    $tracks.forEach(track => track.classList.toggle('highlights'))
})
Copy after login

Finally, the answer was revealed after switching the style:

.track::before {
    box-sizing: border-box;
    border: solid var(--dark);
    border-width: 0;
}

.track.highlights::before {
    background-color: white;
    border-width: 0.1em;
}
Copy after login

You're done!

Related recommendations:

How to use pure CSS to implement block jumping animation (source code attached)

How to use pure CSS to implement a circle Animation effect of ring rotation illusion (source code attached)

The above is the detailed content of How to use pure CSS to achieve stripe illusion animation effect (source code attached). For more information, please follow other related articles on the PHP Chinese website!

Related labels:
css
source:php.cn
Statement of this Website
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
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template