• 技术文章 >web前端 >css教程

    如何使用纯CSS实现条纹错觉的动画效果(附源码)

    不言不言2018-09-10 14:27:34原创1689
    本篇文章给大家带来的内容是关于如何使用纯CSS实现条纹错觉的动画效果(附源码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

    效果预览

    1327101021-5b91cb488b51b_articlex.gif

    源代码下载

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

    代码解读

    定义 dom,容器中包含 2 个元素,分别代表 2 条轨道:

    <div class="container">
        <span class='track'></span>
        <span class='track'></span>
    </div>

    居中显示:

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

    定义容器尺寸和子元素的布局方式:

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

    定义 2 个色值,一个亮的和一个暗的:

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

    画出 2 条轨道的轮廓:

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

    为 2 条轨道的背景图案,图案是明暗相间的条纹,但第 2 条轨道要错半个格:

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

    用伪元素画出 2 个矩形:

    .track {
        position: relative;
        display: flex;
        align-items: center;
    }
    
    .track::before {
        content: '';
        position: absolute;
        width: 2em;
        height: 0.8em;
        background-color: var(--light);
    }

    让这 2 个矩形在轨道上往复移动:

    .track::before {
        animation: move 5s linear infinite alternate;
    }
    
    @keyframes move {
        from {
            left: 0;
        }
        
        to {
            left: calc(100% - 2em);
        }
    }

    此时,两个矩形看起来是一先一后地前进的,但实际上它们是在同一时刻开始并且以相同的速度在移动。接下来我们来揭秘真相。

    在 dom 中增加一个子元素,作为按钮;

    <p class="container">
        <span class='track'></span>
        <span class='track'></span>
        <span class="toggle">Show me the truth</span>
    </p>

    设置按钮的样式:

    .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;
    }

    为按钮设置与轨道风格类似的背景,以及鼠标悬停效果:

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

    增加一段点击按钮时触发的脚本,为轨道元素切换样式:

    let $toggle = document.getElementsByClassName('toggle')[0]
    let $tracks = Array.from(document.getElementsByClassName('track'))
    
    $toggle.addEventListener('click', function() {
        $tracks.forEach(track => track.classList.toggle('highlights'))
    })

    终于,谜底就在切换样式之后被揭晓了:

    .track::before {
        box-sizing: border-box;
        border: solid var(--dark);
        border-width: 0;
    }
    
    .track.highlights::before {
        background-color: white;
        border-width: 0.1em;
    }

    大功告成!

    相关推荐:

    如何使用纯CSS实现方块跳跃的动画(附源码)

    如何使用纯CSS实现一个圆环旋转错觉的动画效果(附源码)

    以上就是如何使用纯CSS实现条纹错觉的动画效果(附源码)的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:CSS
    上一篇:css如何设置边框样式?边框的不同样式介绍(代码实例) 下一篇:解决浏览器兼容性的小技巧
    VIP课程(WEB全栈开发)

    相关文章推荐

    • 【活动】充值PHP中文网VIP即送云服务器• 如何使用纯CSS实现一个微笑打坐的小和尚• 如何使用纯CSS实现一只移动的小白兔动画效果• 如何使用纯CSS实现太阳和地球和月亮的运转模型动画• 如何使用纯CSS实现一个圆环旋转错觉的动画效果(附源码)• 如何使用纯CSS实现方块跳跃的动画(附源码)
    1/1

    PHP中文网