这是一款使用纯CSS3制作的滑动开关按钮特效。该滑动按钮使用伪元素来制作外观,配合渐变和动画过渡效果,制作出4种安卓样式的滑动开关按钮。
使用方法
HTML结构
该滑动按钮的基本HTML结构使用一个<label>
元素来包裹一个<input>
元素和2个<span>
元素。span.text-switch
是按钮上的文字和背景,span.toggle-btn
是滑动的按钮。
<label class="switch-btn"> <input class="checked-switch" type="checkbox" /> <span class="text-switch" data-yes="yes" data-no="no"></span> <span class="toggle-btn"></span> </label>
CSS样式
整个滑动按钮设置固定的宽度和高度,并设置一定的圆角,采用相对定位方式:
.switch-btn { position: relative; display: block; vertical-align: top; width: 80px; height: 30px; border-radius: 18px; cursor: pointer; }
input
元素使用绝对定位,它位于父元素的左上角位置,并将它的透明度设置为0,使其不可见。
.checked-switch { position: absolute; top: 0; left: 0; opacity: 0; }
.text-switch
是按钮上的背景和文字。它和父元素具有相同的高度和圆角。带第一个DEMO中,开始时为它设置红色的背景和深红色的边框,以及白色的文字,并将文字转换为大写形式。
.text-switch { background-color: #ed5b49; border: 1px solid #d2402e; border-radius: inherit; color: #fff; display: block; font-size: 15px; height: inherit; position: relative; text-transform: uppercase; }
滑动按钮上的ON/OFF文本使用.text-switch
的:before
和:after
伪元素来制作。
.text-switch:before, .text-switch:after { position: absolute; top: 50%; margin-top: -.5em; line-height: 1; -webkit-transition: inherit; -moz-transition: inherit; -o-transition: inherit; transition: inherit; } .text-switch:before { content: attr(data-no); right: 11px; } .text-switch:after { content: attr(data-yes); left: 11px; color: #FFFFFF; opacity: 0; }
为了在用户点击滑动按钮时产生效果,这里使用了checkbox hack技术。在.checked-switch
被选中的时候,修改.text-switch
的背景色和边框颜色。并将.text-switch
元素的:before
伪元素的透明度修改为0,将其隐藏。同时将:after
伪元素的透明度设置为1,显示不同的文本。
.checked-switch:checked ~ .text-switch { background-color: #00af2c; border: 1px solid #068506; } .checked-switch:checked ~ .text-switch:before { opacity: 0; } .checked-switch:checked ~ .text-switch:after { opacity: 1; }
滑动的圆形按钮的制作方法基本相同:
.toggle-btn { background: linear-gradient(#eee, #fafafa); border-radius: 100%; height: 28px; left: 1px; position: absolute; top: 1px; width: 28px; } .toggle-btn::before { color: #aaaaaa; content: "|||"; display: inline-block; font-size: 12px; letter-spacing: -2px; padding: 4px 0; vertical-align: middle; } .checked-switch:checked ~ .toggle-btn { left: 51px; } .text-switch, .toggle-btn { transition: All 0.3s ease; -webkit-transition: All 0.3s ease; -moz-transition: All 0.3s ease; -o-transition: All 0.3s ease; }