css制作开关
使用纯CSS制作开关
通过CSS的checkbox hack技术实现开关效果,无需JavaScript。以下是完整代码示例:
<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);
}
添加动画效果
为开关增加更流畅的动画效果,修改过渡属性:

.slider {
transition: all 0.3s cubic-bezier(0.68, -0.55, 0.265, 1.55);
}
.slider:before {
transition: all 0.3s ease-in-out;
}
不同样式变体
创建圆形开关样式:
.slider.round {
border-radius: 34px;
}
.slider.round:before {
border-radius: 50%;
}
方形开关样式:

.slider.square {
border-radius: 0;
}
.slider.square:before {
border-radius: 0;
}
禁用状态样式
添加禁用状态的视觉效果:
input:disabled + .slider {
opacity: 0.5;
cursor: not-allowed;
}
尺寸调整
通过CSS变量控制开关大小:
.switch {
--size: 34px;
width: calc(var(--size) * 1.75);
height: var(--size);
}
.slider:before {
height: calc(var(--size) - 8px);
width: calc(var(--size) - 8px);
}
input:checked + .slider:before {
transform: translateX(calc(var(--size) - 8px));
}






