# 快速导航

# 单个开关

点击即可查看代码

html 结构

<div class="switch-wrap">
      <input type="checkbox" id="checkbox" name="" />
      <label for="checkbox">
        <span></span>
      </label>
    </div>
  </div>
1
2
3
4
5
6
7

css 代码

.switch-wrap {
  width: 42px;
  height: 20px;
  margin: 10px auto;
}

input {
  display: none;
}

label {
  display: block;
  border: 1px solid #888;
  height: 20px;
  border-radius: 15px;
  transition: all 0.5s ease;
}

label span {
  display: block;
  width: 20px;
  height: 20px;
  box-shadow: 1px 1px 1px #ccc;
  border-radius: 50%;
  background: #fff; // 默认背景色是白色
  transition: all 0.5s ease;
  cursor: pointer;
}

input:checked + label {
  // 这里是核心代码,当选中input中checkbox时,让同级元素背景色变化
  background: #42b983;
}

input:checked + label span {
  // 这里是核心代码
  transform: translateX(20px); // transform变换,水平方向向右平移20像素
  box-shadow: none; // 去掉盒阴影
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39

# 携带文字的开关

点击即可查看代码

html 内容结构

<div class="switch-wrap">
  <input id="checkboxword" type="checkbox" />
  <label for="checkboxword">
    <span class="move">
      <span>
        <em></em>
        <em></em>
      </span>
    </span>
  </label>
</div>
1
2
3
4
5
6
7
8
9
10
11

css 代码

.switch-wrap {
  width: 42px;
  height: 20px;
  margin: 10px auto;
}

input {
  display: none;
}

label {
  display: block;
  border: 1px solid #888;
  height: 20px;
  border-radius: 15px;
  transition: all 0.5s ease;
}

label .move {
  display: block;
  width: 20px;
  height: 20px;
  line-height: 20px;
  box-shadow: 1px 1px 1px #ccc;
  border-radius: 50%;
  background: #fff;
  transition: 0.3s;
  overflow: hidden;
}

input:checked + label {
  // 同上,当选中 checkbox 时,背景色改变
  background: #42b983;
}

input:checked + label .move {
  // 向右平移 20 像素
  transform: translateX(20px);
  box-shadow: none;
}

.move span {
  width: 40px;
  display: block;
  height: 20px;
  line-height: 20px;
  transition: 0.3s;
}

input:checked + label .move span {
  transform: translateX(-20px);
}

em {
  text-align: center;
  width: 50%;
  font-size: 12px;
  font-style: normal;
  float: left;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60

# 分析

实现这个效果,主要利用了inputcheckbox,labelforid两者结合起来一起使用的特性

同时利用了 css3 中的transform变换中的translateX平移,如果说自己在vue或者React中,自己去实现一个类似这样的小组件 大小,及按钮的背景色,以及它应有的两个状态true,false

样式可以通过 css 去控制,这些动态可改变的都是该组件的接口属性

关注公众号

一个走心,有温度的号,同千万同行一起交流学习

加作者微信

扫二维码 备注 【加群】

扫码易购

福利推荐