表单的默认控件在不同的浏览器中的样式不同,用户体验很差。用CSS3可以实现表单控件的美化,可以提供更好的用户体验。不足之处就是浏览器的兼容性问题。
一.下拉控件
效果图:
下拉控件的布局结构:
- <divclass="container">
- <divclass="select">
- <p>所有选项</p>
- <ul>
- <liclass="selected"data-value="所有选项">所有选项</li>
- <lidata-value="Python">Python</li>
- <lidata-value="Javascript">Javascript</li>
- <lidata-value="Java">Java</li>
- <lidata-value="Ruby">Ruby</li>
- </ul>
- </div>
- </div>
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:1pxsolid#ccc;
- border-bottom:1pxsolid#ccc;
- -webkit-transform:rotate(-45deg);
- transform:rotate(-45deg);
- -webkit-transition:transform.2sease-in,top.2sease-in;
- transition:transform.2sease-in,top.2sease-in;
- }
- /*
- 被选中的列表项显示的区域
- */
- .container.selectp{
- padding:015px;
- line-height:40px;
- cursor:pointer;
- }
- /*
- 下拉列表的样式
- 默认高度为0
- */
- .container.selectul{
- list-style:none;
- background-color:#fff;
- width:100%;
- overflow-y:auto;
- position:absolute;
- top:40px;
- left:0;
- max-height:0;
- -webkit-transition:max-height.3sease-in;
- transition:max-height.3sease-in;
- }
- .container.selectulli{
- padding:015px;
- line-height:40px;
- cursor:pointer;
- }
- .container.selectulli:hover{
- background-color:#e0e0e0;
- }
- .container.selectulli.selected{
- background-color:#39f;
- color:#fff;
- }
- /*下拉控件动画*/
- @-webkit-keyframesslide-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);
- }
- }
- @keyframesslide-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.onul{
- /*
- 默认情况下,ul的高度为0,当点击控控件的时候,
- 设置下拉列表的高度。
- */
- max-height:300px;
- -webkit-transform-origin:50%0;
- transform-origin:50%0;
- -webkit-animation:slide-down.5sease-in;
- animation:slide-down.5sease-in;
- }
- /*下拉选项被选中后控制箭头的方向*/
- .container.select.on:after{
- -webkit-transform:rotate(-225deg);
- transform:rotate(-225deg);
- top:18px;
- }
这里只是静态的样式,如果要实现“选择”这个过程,需要用到JavaScript来实现。
- $(function(){
- varselected=$('.select>p');
- //控制列表显隐
- selected.on('click',function(event){
- $(this).parent('.select').toggleClass('on');
- event.stopPropagation();
- });
- //点击列表项,将列表项的值添加到p标签中
- $('.selectli').on('click',function(event){
- varself=$(this);
- selected.text(self.data('value'));
- });
- //点击文档其他区域隐藏列表
- $(document).on('click',function(){
- $('.select').removeClass('on');
- });
- });
二.美化单选框
lable标签可以通过for属性与单选框实现联动。我们利用这一特性来实现美化单选框,这也是原理所在。还有就是别忘了将真正的单选框(type="radio")隐藏掉。
- /*用过label标签来模拟radio的样式*/
- .radio-blocklabel{
- display:inline-block;
- position:relative;
- width:28px;
- height:28px;
- border:1pxsolid#cccccc;
- background-color:#fff;
- border-radius:28px;
- cursor:pointer;
- margin-right:10px;
- }
- input[type="radio"]{
- display:none;
- }
- .radio-blocklabel: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.3sease-in;
- transition:background-color.3sease-in;
- }
- /*选中之后的样式*/
- input[type="radio"]:checked+label:after{
- -webkit-transform:scale(1);
- transform:scale(1);
- -webkit-transition:transform.2sease-in;
- transition:transform.2sease-in;
- }
最后效果:
三.美化复选框
原理和单选框的制作方式类似。在checked的时候该表圆形的left值和label的背景。
- .switch-block{
- width:980px;
- padding:3%0;
- margin:0auto;
- text-align:center;
- background-color:#fc9;
- }
- .switch-blocklabel{
- display:inline-block;
- width:62px;
- height:30px;
- background-color:#fafafa;
- border:1pxsolid#eee;
- border-radius:16px;
- position:relative;
- margin-right:10px;
- cursor:pointer;
- -webkit-transition:background.2sease-in;
- transition:background.2sease-in;
- }
- input[type="checkbox"]{
- display:none;
- }
- .switch-blocklabel:after{
- content:'';
- position:absolute;
- width:28px;
- height:28px;
- border:1pxsolid#eee;
- border-radius:14px;
- left:1px;
- background-color:#fff;
- -webkit-transition:left.2sease-in;
- transition:left.2sease-in;
- }
- .switch-blockinput[type="checkbox"]:checked+label{
- background-color:#3c6;
- -webkit-transition:background.2sease-in;
- transition:background.2sease-in;
- }
- .switch-blockinput[type="checkbox"]:checked+label:after{
- left:32px;
- -webkit-transition:left.2sease-in;
- transition:left.2sease-in;
- }
本文链接:http://www.cnblogs.com/maple0x/p/5624401.html
以上就是CSS3美化表单控件全集。自私的人会为自己的行为做任何辩护,其中最常见的一种借口就是“我是为你好”。更多关于CSS3美化表单控件全集请关注haodaima.com其它相关文章!