几个开关效果的CSS实现

在一个web项目上有开关按钮的需求,基于此特做少许功课;

几个简单demo,重点在于使用觉少代码完成此效果,网上可搜到更多酷炫效果,但代码实现较为复杂,大家可以空闲时间研习;

效果图:


代码付下:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<head>
<title>几个开关效果的CSS实现</title>
<meta http-equiv="content-type" content="text/html;charset=gb2312">
<style type="text/css">
html, body {
  height: 100%;
}
body {
  background: linear-gradient(#f7f7f7, #e0e0e0);
  margin: 0;
}
.wrap {
  position: relative;
  width: 33.33%;
  margin: -72px 0;
  top: 50%;
  float: left;
}
label {
  margin: 1.5em auto;
}
input {
  position: absolute;
  left: -9999px;
}
.slider-v1 {
  position: relative;
  display: block;
  width: 5.5em;
  height: 3em;
  cursor: pointer;
  border-radius: 1.5em;
  transition: 350ms;
  background: linear-gradient(rgba(0, 0, 0, 0.07), rgba(255, 255, 255, 0)), #dddddd;
  box-shadow: 0 0.07em 0.1em -0.1em rgba(0, 0, 0, 0.4) inset, 0 0.05em 0.08em -0.01em rgba(255, 255, 255, 0.7);
}
.slider-v1::before {
  position: absolute;
  content: '';
  width: 2em;
  height: 2em;
  top: 0.5em;
  left: 0.5em;
  border-radius: 50%;
  transition: 250ms ease-in-out;
  background: linear-gradient(#f5f5f5 10%, #eeeeee);
  box-shadow: 0 0.1em 0.15em -0.05em rgba(255, 255, 255, 0.9) inset, 0 0.5em 0.3em -0.1em rgba(0, 0, 0, 0.25);
}
.slider-v1::after {
  position: absolute;
  content: '';
  width: 1em;
  height: 1em;
  top: 1em;
  left: 6em;
  border-radius: 50%;
  transition: 250ms ease-in;
  background: linear-gradient(rgba(0, 0, 0, 0.07), rgba(255, 255, 255, 0.1)), #dddddd;
  box-shadow: 0 0.08em 0.15em -0.1em rgba(0, 0, 0, 0.5) inset, 0 0.05em 0.08em -0.01em rgba(255, 255, 255, 0.7), -7.25em 0 0 -0.25em rgba(0, 0, 0, 0.3);
}
input:checked + .slider-v1::after {
  background: linear-gradient(rgba(0, 0, 0, 0.07), rgba(255, 255, 255, 0.1)), #44cc66;
  box-shadow: 0 0.08em 0.15em -0.1em rgba(0, 0, 0, 0.5) inset, 0 0.05em 0.08em -0.01em rgba(255, 255, 255, 0.7), -7.25em 0 0 -0.25em rgba(0, 0, 0, 0.12);
}
input:checked + .slider-v1::before {
  left: 3em;
}
.slider-v2 {
  position: relative;
  display: block;
  width: 5.5em;
  height: 3em;
  cursor: pointer;
  border-radius: 1.5em;
  transition: 350ms;
  background: linear-gradient(rgba(0, 0, 0, 0.07), rgba(255, 255, 255, 0)), #dddddd;
  box-shadow: 0 0.07em 0.1em -0.1em rgba(0, 0, 0, 0.4) inset, 0 0.05em 0.08em -0.01em rgba(255, 255, 255, 0.7);
}
.slider-v2::after {
  position: absolute;
  content: '';
  width: 2em;
  height: 2em;
  top: 0.5em;
  left: 0.5em;
  border-radius: 50%;
  transition: 250ms ease-in-out;
  background: linear-gradient(#f5f5f5 10%, #eeeeee);
  box-shadow: 0 0.1em 0.15em -0.05em rgba(255, 255, 255, 0.9) inset, 0 0.2em 0.2em -0.12em rgba(0, 0, 0, 0.5);
}
.slider-v2::before {
  position: absolute;
  content: '';
  width: 4em;
  height: 1.5em;
  top: 0.75em;
  left: 0.75em;
  border-radius: 0.75em;
  transition: 250ms ease-in-out;
  background: linear-gradient(rgba(0, 0, 0, 0.07), rgba(255, 255, 255, 0.1)), #d0d0d0;
  box-shadow: 0 0.08em 0.15em -0.1em rgba(0, 0, 0, 0.5) inset, 0 0.05em 0.08em -0.01em rgba(255, 255, 255, 0.7), 0 0 0 0 rgba(68, 204, 102, 0.7) inset;
}
input:checked + .slider-v2::before {
  box-shadow: 0 0.08em 0.15em -0.1em rgba(0, 0, 0, 0.5) inset, 0 0.05em 0.08em -0.01em rgba(255, 255, 255, 0.7), 3em 0 0 0 rgba(68, 204, 102, 0.7) inset;
}
input:checked + .slider-v2::after {
  left: 3em;
}
.slider-v3 {
  position: relative;
  display: block;
  width: 7em;
  height: 3em;
  cursor: pointer;
  border-radius: 1.5em;
  transition: 350ms;
  background: #ddd;
}
.slider-v3::after {
  position: absolute;
  content: '';
  width: 2em;
  height: 2em;
  top: 0.5em;
  left: 0.5em;
  border-radius: 1.5em;
  transition: width 200ms ease-out, height 300ms 50ms ease-in, top 300ms 50ms ease-in, left 250ms 50ms ease-in, box-shadow 300ms ease-in;
  background: #4c6;
  box-shadow: 0 0 0 1.5em #f2f2f2 inset;
}
input:checked + .slider-v3::after {
  width: 4em;
  height: 3em;
  top: 0;
  left: 3em;
  box-shadow: 0 0 0 0 #f2f2f2 inset;
}
</style>
</head>
<body>
<div class="wrap">
  <input type="checkbox" id="s1">
  <label class="slider-v1" for="s1"></label>
  <input type="checkbox" id="s2" checked="">
  <label class="slider-v1" for="s2"></label>
</div>
<div class="wrap">
  <input type="checkbox" id="s3">
  <label class="slider-v2" for="s3"></label>
  <input type="checkbox" id="s4" checked="">
  <label class="slider-v2" for="s4"></label>
</div>
<div class="wrap">
  <input type="checkbox" id="s5">
  <label class="slider-v3" for="s5"></label>
  <input type="checkbox" id="s6" checked="">
  <label class="slider-v3" for="s6"></label>
</div>
</body>
</html>



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值