开发者社区> 哈你真皮> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

如何用 CSS 创作一个立体滑动 toggle 交互控件

简介: 效果预览 在线演示 按下右侧的“点击预览”按钮在当前页面预览,点击链接全屏预览。 https://codepen.io/zhang-ou/pen/zjoOgX 可交互视频教程 此视频是可以交互的,你可以随时暂停视频,编辑视频中的代码。
+关注继续查看

效果预览

在线演示

按下右侧的“点击预览”按钮在当前页面预览,点击链接全屏预览。

https://codepen.io/zhang-ou/pen/zjoOgX

可交互视频教程

此视频是可以交互的,你可以随时暂停视频,编辑视频中的代码。

请用 chrome, safari, edge 打开观看。

https://scrimba.com/c/cPvMzTg

源代码下载

本地下载

请从 github 下载。

https://github.com/comehope/front-end-daily-challenges/tree/master/005-sleek-sliding-toggle-checkbox

代码解读

定义 dom,是嵌套了3层的容器:

<div class="checkbox">
    <div class="inner">
        <div class="toggle"></div>
    </div>
</div>

居中显示:

html, 
body,
.checkbox,
.checkbox .inner,
.checkbox .inner .toggle {
    height: 100%;
    display: flex;
    align-items: center;
    justify-content: center;
}

画出外侧椭圆:

.checkbox {
    width: 10em;
    height: 5em;
    background: linear-gradient(silver, whitesmoke);
    border-radius: 2.5em;
    font-size: 40px;
}

画出内侧椭圆:

.checkbox .inner {
    width: 8em;
    height: 3.5em;
    background: linear-gradient(dimgray, silver);
    border-radius: 2em;
    box-shadow: inset 0 0 1.5em rgba(0, 0, 0, 0.5);
}

画出圆形按钮:

.checkbox .inner .toggle {
    width: 3.5em;
    height: 3.5em;
    background: linear-gradient(to top, silver, whitesmoke);
    border-radius: 50%;
    box-shadow: 0 0.4em 0.6em rgba(0, 0, 0, 0.2);
    position: relative;
    left: -30%;
}

为圆形按钮增加立体效果:

.checkbox .inner .toggle::before {
    content: '';
    position: absolute;
    height: 80%;
    width: 80%;
    background: linear-gradient(whitesmoke, silver);
    border-radius: 50%;
}

在按钮上写上 OFF,行高是根据父元素的高度计算出的:

.checkbox .inner .toggle::before {
    content: 'OFF';
    text-align: center;
    line-height: calc(3.5em * 0.8);
    font-family: sans-serif;
    color: gray;
}

引入jquery:

<script src="http://code.jquery.com/jquery-3.3.1.min.js"></script>

编写脚本,在点击按钮时切换样式类:

$(document).ready(function() {
    $('.toggle').click(function() {
        $('.inner').toggleClass('active');
    });
});

设置 active 时控件的样式:

.checkbox .inner.active {
    background: linear-gradient(green, limegreen);
}

.checkbox .inner.active .toggle {
    left: 30%;
}

.checkbox .inner.active .toggle::before {
    content: 'ON';
    color: limegreen;
}

最后,为按钮设置缓动时间,实现动画效果

.checkbox .inner .toggle {
    transition: 0.5s;
}

大功告成!

知识点

原文地址:https://segmentfault.com/a/1190000014638655

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
SAP Fiori Elements List Report 里的表格类型(tableType)是如何决定出来的
从 SAP Fiori Elements 实现源代码中的 SmartTable.xml 能看出,ListReport 类型的 SAP Fiori Elements 应用,其表格类型包含 4 种: AnalyticalTable TreeTable GridTable ResponsiveTable
26 0
SAP Fiori Elements List Report 里的表格类型(tableType)是如何决定出来的
从 SAP Fiori Elements 实现源代码中的 SmartTable.xml 能看出,ListReport 类型的 SAP Fiori Elements 应用,其表格类型包含 4 种: AnalyticalTable TreeTable GridTable ResponsiveTable
11 0
如何在 Kubernetes 环境中搭建 MySQL(四):使用 StorageClass 挂接 RBD
MySQL + Kubernetes 1. 简介 在系列文章的第三篇中,讲到了如何使用 PV 和 PVC 挂载 RBD 上建立好的块存储镜像,但这还是不足以满足 cloud native 环境下的需求,试想如果部署一个应用,需要申请十个 R...
1609 0
CSS IE6/7/8, Firefox, Safari, Chrome, Opera Hack使用简要归纳(转)
网上有很多关于IE6/7/8, Firefox, Safari, Chrome, Opera CSS Hack的文章,但我觉得太过繁杂,要不给出一张看也看不懂的CSS Hack归纳表,要不就是给出一大堆代码说明问题,不便于学习与使用。
1051 0
C# 加密解密(DES,3DES,MD5,Base64) 类
原文:C# 加密解密(DES,3DES,MD5,Base64) 类 保存! public sealed class EncryptUtils { #region Base64加密解密 /// /// Base64加密 ...
1080 0
DelphiXE环境认知(第三章 Editor Options)
DelphiXE环境认知 作者:帅宏军 时间:2011年4月 说明:根据DelphiXE的自带帮助翻译而来,为作者个人看法,如有翻译不当,仅供参考。
1592 0
一起谈.NET技术,.NET的资源并不限于.resx文件,你可以采用任意存储形式 [上篇]
  为了构建一个轻量级的资源管理框架以满足简单的本地化(Localization)的需求,我试图直接对现有的Resource编程模型进行扩展。虽然最终没能满足我们的需求,但是这两天也算对.NET如何进行资源的存取进行了深入的学习,所以将我对此的认识通过博文的方式与诸位分享。
630 0
+关注
354
文章
1
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载