css制作开关
使用纯CSS制作开关
通过CSS的伪元素和input[type="checkbox"]可以创建自定义开关样式。关键点在于隐藏原生复选框,用CSS重新设计外观。
<label class="switch">
<input type="checkbox">
<span class="slider"></span>
</label>
.switch {
position: relative;
display: inline-block;
width: 60px;
height: 34px;
}
.switch input {
opacity: 0;
width: 0;
height: 0;
}
.slider {
position: absolute;
cursor: pointer;
top: 0;
left: 0;
right: 0;
bottom: 0;
background-color: #ccc;
transition: .4s;
border-radius: 34px;
}
.slider:before {
position: absolute;
content: "";
height: 26px;
width: 26px;
left: 4px;
bottom: 4px;
background-color: white;
transition: .4s;
border-radius: 50%;
}
input:checked + .slider {
background-color: #2196F3;
}
input:checked + .slider:before {
transform: translateX(26px);
}
添加动画效果
通过CSS过渡属性可以让开关切换更平滑。修改.slider和.slider:before的transition属性:

.slider {
transition: background-color 0.3s ease-in-out;
}
.slider:before {
transition: transform 0.3s ease-in-out;
}
不同尺寸的开关
调整CSS变量可快速改变开关大小:

:root {
--switch-width: 60px;
--switch-height: 34px;
--slider-size: calc(var(--switch-height) - 8px);
}
.switch {
width: var(--switch-width);
height: var(--switch-height);
}
.slider:before {
height: var(--slider-size);
width: var(--slider-size);
}
input:checked + .slider:before {
transform: translateX(calc(var(--switch-width) - var(--slider-size) - 8px));
}
禁用状态样式
为开关添加禁用状态的可视化反馈:
input:disabled + .slider {
opacity: 0.5;
cursor: not-allowed;
}
自定义颜色方案
通过CSS变量实现主题色快速更换:
:root {
--switch-off: #ccc;
--switch-on: #2196F3;
--slider-color: white;
}
.slider {
background-color: var(--switch-off);
}
input:checked + .slider {
background-color: var(--switch-on);
}
.slider:before {
background-color: var(--slider-color);
}






