5.用 CSS 创作一个立体滑动 toggle 交互控件

时间:2023-03-09 22:26:39
5.用 CSS 创作一个立体滑动 toggle 交互控件

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

HTML代码:

<html>
<head>
<link rel="stylesheet" href="index.css">
<script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
</head>
<body>
<div class="checkbox">
<div class="inner">
<div class="toggle"></div>
</div>
</div>
<script src="index.pack.js"></script>
</body>
</html>

CSS代码:

/* */
/* 居中显示: */
html,
body,
.checkbox,
.checkbox .inner,
.checkbox .inner .toggle {
margin:;
padding:;
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: 30px;
}
/* 画出内侧椭圆 */
.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: 'OFF';
position: absolute;
width: 80%;
height: 80%;
background: linear-gradient(silver, whitesmoke);
border-radius: 50%;
text-align: center;
line-height: calc(3.5em * 0.8);
font-family: sans-serif;
color: gray;
} /* 设置 active 时控件的样式: */
.checkbox .inner.active {
background: linear-gradient(green, limegreen);
}
.checkbox .inner.active .toggle {
left: 30%;
}
.checkbox .inner.active .toggle::before {
content: 'ON';
color: limegreen;
}

JS代码:

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