视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
关于CSS3美化表单的控件
2020-11-27 18:48:04 责编:小OO
文档
 这篇文章主要为大家详细介绍了CSS3美化表单控件的技巧,美化下拉控件、单选框、复选框,感兴趣的小伙伴们可以参考一下

表单的默认控件在不同的浏览器中的样式不同,用户体验很差。用CSS3可以实现表单控件的美化,可以提供更好的用户体验。不足之处就是浏览器的兼容性问题。

一.下拉控件

效果图:

下拉控件的布局结构:

<p class="container"> 
 <p class="select"> 
 <p>所有选项</p> 
 <ul> 
 <li class="selected" data-value="所有选项">所有选项</li> 
 <li data-value="Python">Python</li> 
 <li data-value="Javascript">Javascript</li> 
 <li data-value="Java">Java</li> 
 <li data-value="Ruby">Ruby</li> 
 </ul> 
 </p> 
 </p>

ul用来模拟下拉列表,在实际的使用过程中,可以根据后台返回过来的数据动态生成。p元素用来渲染选中的选项。

核心样式:

.container .select{ 
 width: 300px; 
 height: 40px; 
 font-size: 14px; 
 background-color:#fff; 
 margin-left: auto; 
 margin-right: auto; 
 position: relative; 
} 
/*下拉箭头的样式*/ 
.container .select:after{ 
 content: ""; 
 display: block; 
 width: 10px; 
 height: 10px; 
 position: absolute; 
 top: 11px; 
 rightright: 12px; 
 border-left: 1px solid #ccc; 
 border-bottom: 1px solid #ccc; 
 -webkit-transform: rotate(-45deg); 
 transform: rotate(-45deg); 
 -webkit-transition: transform .2s ease-in, top .2s ease-in; 
 transition: transform .2s ease-in, top .2s ease-in; 
} 
/* 
 被选中的列表项显示的区域 
*/ 
.container .select p{ 
 padding: 0 15px; 
 line-height: 40px; 
 cursor: pointer; 
} 
/* 
 下拉列表的样式 
 默认高度为0 
*/ 
.container .select ul{ 
 list-style: none; 
 background-color: #fff; 
 width: 100%; 
 overflow-y: auto; 
 position: absolute; 
 top: 40px; 
 left: 0; 
 max-height:0; 
 -webkit-transition: max-height .3s ease-in; 
 transition: max-height .3s ease-in; 
} 
.container .select ul li{ 
 padding: 0 15px; 
 line-height: 40px; 
 cursor: pointer; 
} 
 
.container .select ul li:hover{ 
 background-color: #e0e0e0; 
} 
.container .select ul li.selected{ 
 background-color: #39f; 
 color: #fff; 
 
} 
/*下拉控件动画*/ 
@-webkit-keyframes slide-down{ 
 0%{ 
 -webkit-transform: scale(1, 0); 
 transform: scale(1, 0); 
 } 
 25%{ 
 -webkit-transform: scale(1, 1.2); 
 transform: scale(1, 1.2); 
 } 
 50%{ 
 -webkit-transform: scale(1, .85); 
 transform: scale(1, .85); 
 } 
 75%{ 
 -webkit-transform: scale(1, 1.05); 
 transform: scale(1, 1.05); 
 } 
 100%{ 
 -webkit-transform: scale(1, 1); 
 transform: scale(1, 1); 
 } 
} 
@keyframes slide-down{ 
 0%{ 
 -webkit-transform: scale(1, 0); 
 transform: scale(1, 0); 
 } 
 25%{ 
 -webkit-transform: scale(1, 1.2); 
 transform: scale(1, 1.2); 
 } 
 50%{ 
 -webkit-transform: scale(1, .85); 
 transform: scale(1, .85); 
 } 
 75%{ 
 -webkit-transform: scale(1, 1.05); 
 transform: scale(1, 1.05); 
 } 
 100%{ 
 -webkit-transform: scale(1, 1); 
 transform: scale(1, 1); 
 } 
} 
.container .select.on ul{ 
 /* 
 默认情况下,ul的高度为0,当点击控控件的时候, 
 设置下拉列表的高度。 
 */ 
 max-height: 300px; 
 -webkit-transform-origin: 50% 0; 
 transform-origin: 50% 0; 
 -webkit-animation: slide-down .5s ease-in; 
 animation: slide-down .5s ease-in; 
} 
/*下拉选项被选中后控制箭头的方向*/ 
.container .select.on:after{ 
 -webkit-transform: rotate(-225deg); 
 transform: rotate(-225deg); 
 top: 18px; 
}

这里只是静态的样式,如果要实现“选择”这个过程,需要用到JavaScript来实现。

$(function(){ 
 var selected = $('.select > p'); 
 //控制列表显隐 
 selected.on('click', function(event){ 
 $(this).parent('.select').toggleClass('on'); 
 event.stopPropagation(); 
 }); 
 //点击列表项,将列表项的值添加到p标签中 
 $('.select li').on('click', function(event){ 
 var self = $(this); 
 selected.text(self.data('value')); 
 }); 
 //点击文档其他区域隐藏列表 
 $(document).on('click', function(){ 
 $('.select').removeClass('on'); 
 }); 
});

二.美化单选框

lable标签可以通过for属性与单选框实现联动。我们利用这一特性来实现美化单选框,这也是原理所在。还有就是别忘了将真正的单选框(type="radio")隐藏掉。

/*用过label标签来模拟radio 的样式*/ 
.radio-block label{ 
 display: inline-block; 
 position: relative; 
 width: 28px; 
 height: 28px; 
 border: 1px solid #cccccc; 
 background-color: #fff; 
 border-radius: 28px; 
 cursor: pointer; 
 margin-right:10px; 
} 
 
input[type="radio"]{ 
 display: none; 
} 
.radio-block label:after{ 
 content: ''; 
 display: block; 
 position: absolute; 
 width: 20px; 
 height: 20px; 
 left: 4px; 
 top: 4px; 
 background-color: #28bd12; 
 border-radius: 20px; 
 /*通过scale属性来控制中心点*/ 
 -webkit-transform: scale(0); 
 transform: scale(0); 
} 
/*选中样式*/ 
input[type="radio"]:checked + label{ 
 background-color :#eee; 
 -webkit-transition: background-color .3s ease-in; 
 transition: background-color .3s ease-in; 
} 
/*选中之后的样式*/ 
input[type="radio"]:checked + label:after{ 
 -webkit-transform: scale(1); 
 transform: scale(1); 
 -webkit-transition: transform .2s ease-in; 
 transition: transform .2s ease-in; 
}

最后效果:

三.美化复选框

原理和单选框的制作方式类似。在checked的时候该表圆形的left值和label的背景。

.switch-block{ 
 width: 980px; 
 padding: 3% 0; 
 margin: 0 auto; 
 text-align: center; 
 background-color: #fc9; 
} 
.switch-block label{ 
 display: inline-block; 
 width: 62px; 
 height: 30px; 
 background-color:#fafafa; 
 border:1px solid #eee; 
 border-radius: 16px; 
 position: relative; 
 margin-right: 10px; 
 cursor: pointer; 
 -webkit-transition: background .2s ease-in; 
 transition :background .2s ease-in; 
} 
input[type="checkbox"]{ 
 display: none; 
} 
.switch-block label:after{ 
 content: ''; 
 position: absolute; 
 width: 28px; 
 height: 28px; 
 border: 1px solid #eee; 
 border-radius: 14px; 
 left: 1px; 
 background-color:#fff; 
 -webkit-transition: left .2s ease-in; 
 transition: left .2s ease-in; 
} 
.switch-block input[type="checkbox"]:checked + label{ 
 background-color:#3c6; 
 -webkit-transition: background .2s ease-in; 
 transition :background .2s ease-in; 
} 
.switch-block input[type="checkbox"]:checked + label:after{ 
 left: 32px; 
 -webkit-transition: left .2s ease-in; 
 transition: left .2s ease-in; 
}

下载本文
显示全文
专题