投稿 搜索

热搜词

热门文章

当前位置: 站长天下 / Html5 CSS3 / CSS3实现逼真的拉杆开关动画特效
CSS3实现逼真的拉杆开关动画特效
标签:

插件介绍

    这是一款CSS3实现绘制3D逼真的拉杆开关按钮动画特效。直接把代码引入页面就可以了。

    浏览器兼容性

    浏览器兼容性
    时间:2018-05-24
    阅读:

CSS3实现逼真的拉杆开关动画特效

简要教程

这是一款CSS3实现绘制3D逼真的拉杆开关按钮动画特效。直接把代码引入页面就可以了。

使用方法

在页面引入以下CSS样式

<style>
*, *:before, *:after {
    box-sizing: border-box;
    margin: 0;
    padding: 0;
}
:root {
    --dur: 0.3s;
    --dur2: 0.15s;
    font-size: 16px;
}
body {
    background-color: #dbdfdb;
}
form {
    display: flex;
    justify-content: space-between;
    align-items: center;
    margin: 3em auto 0 auto;
    width: 23em;
}
form label {
    background-color: #f00;
    background-image:
        radial-gradient(0.3em 0.25em at 50% 25%, rgb(255,255,255) 25%, rgba(255,255,255,0)),
        radial-gradient(0.25em 0.25em at 30% 75%, rgba(255,255,255,0.5), rgba(255,255,255,0)),
        radial-gradient(0.3em 0.3em at 60% 80%, rgba(255,255,255,0.5), rgba(255,255,255,0)),
        radial-gradient(100% 100%, rgba(255,255,255,0) 30%, rgba(255,255,255,0.3) 40%, rgba(0,0,0,0.5) 50%);
    border-radius: 50%;
    box-shadow: 0 0 0.75em #f00, 0 0.5em 0.75em rgba(0,0,0,0.3);
    display: inline-block;
    transition: all var(--dur2) var(--dur2) linear;
    width: 1.5em;
    height: 1.5em;
}
form label:first-of-type {
    background-color: #050;
    box-shadow: 0 0.5em 0.75em rgba(0,0,0,0.3);
    order: -1;
}
label span {
    display: inline-block;
    overflow: hidden;
    width: 0;
}
/* Lever */
.lever {
    background-image:
        radial-gradient(1em 1.5em at 50% 50%, rgb(204,204,204) 25%, rgb(170,170,170) 49%, rgba(170,170,170,0) 50%),
        radial-gradient(0.65em 1em at 50% 53%, rgb(68,68,68), rgba(68,68,68,0)),
        radial-gradient(0.75em 0.75em at 55% 45%, rgb(255,255,255), rgba(255,255,255,0)),
        radial-gradient(0.5em 0.4em at 43% 56%, rgba(255,255,255,0.5), rgba(255,255,255,0)),
        radial-gradient(0.5em 0.4em at 55% 57%, rgba(255,255,255,0.6), rgba(255,255,255,0)),
        radial-gradient(0.5em 0.4em at 50% 60%, rgba(255,255,255,0.6), rgba(255,255,255,0)),
        radial-gradient(100% 100% at 50% 50%, rgb(238,238,238), rgb(170,170,170) 10%, rgb(0,0,0) 18%, rgb(0,0,0) 21%, rgb(153,153,153) 21.5%, rgb(153,153,153) 24%, rgba(153,153,153,0) 24.5%, rgba(221,221,221,0) 30%, rgb(221,221,221) 30.5%, rgb(221,221,221) 33%, rgb(68,68,68) 33.5%, rgb(68,68,68) 35%, rgba(68,68,68,0) 35.5%, rgba(221,221,221,0) 41%, rgb(221,221,221) 41.5%, rgb(238,238,238) 45%, rgb(68,68,85) 45.5%, rgb(68,68,85) 49%, rgba(68,68,85,0) 50%),
        radial-gradient(2em 2em at 35% 20%, rgb(255,255,255), rgba(255,255,255,0) 2em),
        radial-gradient(2em 2em at 65% 80%, rgb(255,255,255), rgba(255,255,255,0) 2em),
        radial-gradient(2em 2em at 80% 35%, rgb(255,255,255), rgba(255,255,255,0) 2em),
        radial-gradient(2em 2em at 20% 65%, rgb(255,255,255), rgba(255,255,255,0) 2em),
        radial-gradient(100% 100% at center, rgb(170,170,170) 49%, rgba(170,170,170,0) 50%);
    background-position: 0.5em 0, 0.5em 0, 0 0, 0 0, 0 0, 0 0, 0 0, 0 0, 0 0, 0 0, 0 0, 0 0;
    border-radius: 50%;
    box-shadow: 0 2em 2em rgba(0,0,0,0.3);
    cursor: pointer;
    font-size: 1em;
    display: block;
    outline: 0;
    position: relative;
    width: 12em;
    height: 12em;
    -webkit-appearance: none;
    -moz-appearance: none;
    appearance: none;
    transition: background-position var(--dur) linear;
}
.lever:before, .lever:after {
    content: "";
    display: block;
    position: absolute;
    top: 50%;
    left: 50%;
}
.lever:before {
    animation: leverAOff var(--dur) linear forwards;
    background:
        radial-gradient(35% 25% at 50% 25%, rgb(136,136,153) 20%, rgba(136,136,153,0)),
        radial-gradient(1em 0.75em at 32% 75%, rgb(102,102,102), rgba(102,102,102,0)),
        radial-gradient(1em 0.75em at 65% 78%, rgb(102,102,102), rgba(102,102,102,0)),
        radial-gradient(100% 100% at center, rgb(68,68,68) 49.5%, rgba(68,68,68,0) 50%);
    box-shadow:
        -2em 4em 2em rgba(0,0,0,0.3),
        -2em 5em 4em rgba(0,0,0,0.2),
        -2em 7em 4em rgba(0,0,0,0.2),
        -2em 9em 4em rgba(0,0,0,0.2),
        -2em 11em 4em rgba(0,0,0,0.2);
    border-radius: 50%;
    width: 4em;
    height: 4em;
    transform: translate(100%,-50%);
    z-index: 1;
}
.lever:checked {
    background-position: -0.5em 0, -0.5em 0, 0 0, 0 0, 0 0, 0 0, 0 0, 0 0, 0 0, 0 0, 0 0, 0 0;
}
.lever:checked:before {
    animation: leverAOn var(--dur) linear forwards;
}
.lever:after {
    animation: leverBOff var(--dur) linear forwards;
    background-color: #333;
    border-radius: 15em;
    box-shadow: 0 0 1em #667 inset;
    width: 7.5em;
    height: 4em;
    transform: translate(0.5em,-50%);
}
.lever:checked:after {
    animation: leverBOn var(--dur) linear forwards;
}
.lever:checked + label {
    background-color: #0d0;
    box-shadow: 0 0 0.75em #0f0, 0 0.5em 0.75em rgba(0,0,0,0.3);
}
.lever:checked + label + label {
    background-color: #500;
    box-shadow: 0 0.5em 0.75em rgba(0,0,0,0.3);
}
/* To stop animations from running on load */
.pristine:before, .pristine:after {
    animation: none;
}
     
@keyframes leverAOn {
    from {
        box-shadow:
            -2em 4em 2em rgba(0,0,0,0.3),
            -2em 5em 4em rgba(0,0,0,0.2),
            -2em 7em 4em rgba(0,0,0,0.2),
            -2em 9em 4em rgba(0,0,0,0.2),
            -2em 11em 4em rgba(0,0,0,0.2);
        transform: translate(100%,-50%);
    }
    50% {
        box-shadow:
            0 6em 2em rgba(0,0,0,0.3),
            0 5em 4em rgba(0,0,0,0.2),
            0 7em 4em rgba(0,0,0,0.2),
            0 9em 4em rgba(0,0,0,0.2),
            0 11em 4em rgba(0,0,0,0.2);
    }
    to {
        box-shadow:
            2em 4em 2em rgba(0,0,0,0.3),
            2em 5em 4em rgba(0,0,0,0.2),
            2em 7em 4em rgba(0,0,0,0.2),
            2em 9em 4em rgba(0,0,0,0.2),
            2em 11em 4em rgba(0,0,0,0.2);
        transform: translate(-200%,-50%);
    }
}
@keyframes leverAOff {
    from {
        box-shadow:
            2em 4em 2em rgba(0,0,0,0.3),
            2em 5em 4em rgba(0,0,0,0.2),
            2em 7em 4em rgba(0,0,0,0.2),
            2em 9em 4em rgba(0,0,0,0.2),
            2em 11em 4em rgba(0,0,0,0.2);
        transform: translate(-200%,-50%);
    }
    50% {
        box-shadow:
            0 6em 2em rgba(0,0,0,0.3),
            0 5em 4em rgba(0,0,0,0.2),
            0 7em 4em rgba(0,0,0,0.2),
            0 9em 4em rgba(0,0,0,0.2),
            0 11em 4em rgba(0,0,0,0.2);
    }
    to {
        box-shadow:
            -2em 4em 2em rgba(0,0,0,0.3),
            -2em 5em 4em rgba(0,0,0,0.2),
            -2em 7em 4em rgba(0,0,0,0.2),
            -2em 9em 4em rgba(0,0,0,0.2),
            -2em 11em 4em rgba(0,0,0,0.2);
        transform: translate(100%,-50%);
    }
}
@keyframes leverBOn {
    from { width: 7.5em; transform: translate(0.5em,-50%); }
    50% { width: 4em; transform: translate(-50%,-50%); }
    to { width: 7.5em; transform: translate(-8em,-50%); }
}
@keyframes leverBOff {
    from { width: 7.5em; transform: translate(-8em,-50%); }
    50% { width: 4em; transform: translate(-50%,-50%); }
    to { width: 7.5em; transform: translate(0.5em,-50%); }
}
</style>