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

    如何使用纯CSS实现电源开关控件(附源码)

    不言不言2018-09-27 16:07:51原创1816
    本篇文章给大家带来的内容是关于如何使用纯CSS实现电源开关控件(附源码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

    效果预览

    1639477839-5babfd4507a41_articlex.gif


    源代码下载

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

    代码解读

    定义 dom,包含 3 个元素,分别代表 input 控件、开关和灯光:

    <input type="checkbox" class="toggle">
    <div class="switch"></div>
    <div class="light"></div>

    居中显示:

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

    定义控件的样式,把控件的设置为透明,使其不可见,但仍可与用户交互。其中字号大小是变量,因为 input 控件的字号与正文字号不同,所以需要单独设置:

    body {
        font-size: var(--font-size);
    }
    
    :root {
        --font-size: 16px;
    }
    
    .toggle {
        position: absolute;
        font-size: var(--font-size); 
        width: 5em;
        height: 8em;
        margin: 0;
        filter: opacity(0);
        cursor: pointer;
        z-index: 2;
    }

    设置开关的轮廓:

    .switch {
        position: absolute;
        width: 5em;
        height: 8em;
        border-radius: 1.2em;
        background: linear-gradient(#d2d4d6, white);
    }

    用阴影使开关变得立体:

    .switch {
        box-shadow: 
            inset 0 -0.2em 0.4em rgba(212, 212, 212, 0.75), 
            inset 0 -0.8em 0 0.1em rgba(156, 156, 156, 0.85), 
            0 0 0 0.1em rgba(116, 116, 116, 0.8), 
            0 0.6em 0.6em rgba(41, 41, 41, 0.3), 
            0 0 0 0.4em #d4d7d8;
    }

    用伪元素设置 onoff 文本,目前是处于 off 状态:

    .toggle ~ .switch::before,
    .toggle ~ .switch::after {
        position: absolute;
        width: 100%;
        text-align: center;
        font-size: 1.4em;
        font-family: sans-serif;
        text-transform: uppercase;
    }
    
    .toggle ~ .switch::before {
        content: '|';
        bottom: 1em;
        color: rgba(0, 0, 0, 0.5);
        text-shadow: 0 0.1em 0 rgba(255, 255, 255, 0.8);
    }
    
    .toggle ~ .switch::after {
        content: 'O';
        top: 0.6em;
        color: rgba(0, 0, 0, 0.45);
        text-shadow: 0 0.1em 0 rgba(255, 255, 255, 0.4);
    }

    input 控件设置为 checked状态,以便设置处于 on 状态的样式:

    <input type="checkbox" checked="checked" class="toggle">

    设置处于 on 状态的开关样式:

    .toggle:checked ~ .switch {
        background: linear-gradient(#a1a2a3, #f0f0f0);
        box-shadow: 
            inset 0 0.2em 0.4em rgba(212, 205, 199, 0.75), 
            inset 0 0.8em 0 0.1em rgba(255, 255, 255, 0.77), 
            0 0 0 0.1em rgba(116, 116, 118, 0.8), 
            0 -0.2em 0.2em rgba(41, 41, 41, 0.18), 
            0 0 0 0.4em #d4d7d8;
    }

    设置处于 on 状态的文本样式:

    .toggle:checked ~ .switch::before {
        bottom: 0.3em;
        text-shadow: 0 0.1em 0 rgba(255, 255, 255, 0.5);
    }
    
    .toggle:checked ~ .switch::after {
        top: 1.2em;
        text-shadow: 0 0.1em 0 rgba(255, 255, 255, 0.15);
    }

    接下来设置灯光效果。
    先设置处于 off 状态的黑暗效果:

    .toggle ~ .light {
        width: 100vw;
        height: 100vh;
        background-color: #0a0a16;
        z-index: 1;
        filter: opacity(0.7);
    }

    再设置处于 on 状态的明亮效果:

    .toggle:checked ~ .light {
        filter: opacity(0);
    }

    大功告成!

    以上就是如何使用纯CSS实现电源开关控件(附源码)的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:css3 css html html5 前端
    上一篇:css盒模型是什么?css盒模型的简单介绍 下一篇:css选择器优先级顺序是什么?css基本选择器优先级的介绍
    千万级数据并发解决方案

    相关文章推荐

    • 如何使用纯CSS实现抽象的水波荡漾的动画(附源码)• 如何使用纯CSS实现在容器中反弹的小球(附源码)• 如何使用纯CSS实现菱形loader效果(附源码)• 如何使用纯CSS实现蚊香燃烧的效果(附源码)• 如何使用纯CSS实现iPhone 价格信息图(附源码)• 如何使用纯CSS实现文本的淡入动画效果(附源码)
    1/1

    PHP中文网