最简单的纯CSS3滑动开关按钮特效
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.3 s ease; -webkit- transition : All 0.3 s ease; -moz- transition : All 0.3 s ease; -o- transition : All 0.3 s ease; } |