利用css3完成对checkbox和radio的美化

在前端领域,checkbox和radio作为自有的功能标签,对前端的贡献巨大。

问题来了,不同浏览器,甚至不同系统,不同手机的样式各不相同,对于保持标签的同质化实为困难,其次一般这种标签都很难看,难以满足大部分人的需求

so,伴随问题而来的解决办法也来了:
  1. 用css格式化其相关样式
  2. 用其它标签(div,p,span……)写样式,js模拟相关功能
  3. css3新出特性解决

综上所述,我们来分析一下这三种方法:
  • 1的方法需要书写一大堆格式化的属性,例如-webkit-appearance,border,background,border-radius……,实属麻烦
  • 2的方法较1更麻烦,既要重写样式又要用js将其功能模拟出来
  • 3的方法最为简便,同时兼具了的1和2的优点

ok,如何用第3种方法来DIY自己的checkbox或radio呢?

核心
input~替代checkbox或radio的标签

同时将checkbox或radius包在label的父级中,将checkobox或radio隐藏掉(display:none);

上代码:
css部分
label{display:block;position:relative;width:58px;height:58px;}
input{display:none;}
span{border:4px solid #c6c7c7;display:inline-block;width:50px;height:50px;position:relative;transition:.3s;-webkit-transition:.3s;}
span:before{background:#0ca3db;width:0;height:4px;position:absolute;top:50%;left:8px;margin-top:-1px;content:'';transform:rotate(45deg);-webkit-transform:rotate(45deg);-webkit-transform-origin:left top;transform-origin:left top;}
span:after{background:#0ca3db;width:0;height:4px;position:absolute;top:80%;left:18px;margin-top:-2px;content:'';transform:rotate(-45deg);-webkit-transform:rotate(-45deg);-webkit-transform-origin:left top;transform-origin:left top;}
#love{transition:.3s;-webkit-transition:.3s;}
#love,#love i{border:4px solid #333;width:30px;height:30px;transform:rotate(45deg);-webkit-transform:rotate(45deg);margin:0 auto;border-top-color:rgba(255,255,255,1);border-left-color:rgba(255,255,255,1);position:relative;}
#love:before,#love:after,#love i:before,#love i:after{position:absolute;content:'';border:4px solid #333;width:30px;height:30px;border-radius:30px;transition:.3s;-webkit-transition:.3s;}
#love:before,#love i:before{left:-4px;top:-19px;transform:rotate(-45deg);-webkit-transform:rotate(-45deg);border-bottom-color:rgba(255,255,255,0);border-left-color:rgba(255,255,255,0);}
#love:after,#love i:after{left:-19px;top:-4px;transform:rotate(135deg);-webkit-transform:rotate(135deg);border-top-color:rgba(255,255,255,0);border-left-color:rgba(255,255,255,0);}
#love i{background:#f00;width:22px;height:22px;display:block;transform:rotate(0);-webkit-transform:rotate(0);border-color:#f00;transform:scale3d(0,0,0);-webkit-transform:scale3d(0,0,0);transition:.3s;-webkit-transition:.3s;}
#love i:before,#love i:after{border-color:#f00;width:22px;height:22px;background:#f00;}
#radio span{border-color:#13d390;}
#radio span:before,#radio span:after{background:#13d390;}
em{display:block;width:50px;height:50px;border:2px solid #ccc;background:#999;border-radius:50px;position:relative;transition:.3s;-webkit-transition:.3s;}
em:before{position:absolute;top:15px;left:15px;background:#333;width:6px;height:6px;border-radius:6px;content:'';}
em:after{position:absolute;top:15px;right:15px;background:#333;width:6px;height:6px;border-radius:6px;content:'';}
em strong{position:absolute;left:50%;bottom:8px;width:30px;height:30px;margin-left:-17px;border-radius:30px;border:2px solid rgba(0,0,0,0);border-bottom-color:#333;transform:rotate(180deg);-webkit-transform:rotate(180deg);-webkit-transform-origin:center 30px;transform-origin:center 30px;}
input:checked~span{border-color:#0ca3db;}
input:checked~span:before{animation:move1 .3s forwards;-webkit-animation:move1 .3s forwards;}
input:checked~span:after{animation:move2 .3s forwards;-webkit-animation:move2 .3s forwards;}
input:checked~#love{border-bottom-color:#f00;border-right-color:#f00;}
input:checked~#love:before{border-right-color:#f00;border-top-color:#f00;}
input:checked~#love:after{border-right-color:#f00;border-bottom-color:#f00;}
input:checked~#love i{transform:scale3d(1,1,1);-webkit-transform:scale3d(1,1,1);border-color:#f00;}
input:checked~#love i:before{border-color:#f00;}
input:checked~#love i:after{border-color:#f00;}
input:checked~em{background:#f5f500;border-color:#d39815;}
input:checked~em:before,input:checked~em:after{background:#d39815;}
input:checked~em strong{border-bottom-color:#d39815;transform:rotate(0);-webkit-transform:rotate(0);-webkit-transform-origin:0 0;transform-origin:0 0;}
@keyframes move1{
    0%{
        width:0;
    }
    100%{
        width:20px;
    }
}        
@-webkit-keyframes move1{
    0%{
        width:0;
    }
    100%{
        width:20px;
    }
}
@keyframes move2{
    0%{
        width:0;
    }
    60%{
        width:0;
    }
    100%{
        width:35px;
    }
}        
@-webkit-keyframes move2{
    0%{
        width:0;
    }
    60%{
        width:0;
    }
    100%{
        width:35px;
    }
}

html部分
<label for="demo1">
    <input type="checkbox" id="demo1" />
    <span></span>
</label><br><br>
<label for="demo2">
    <input type="checkbox" id="demo2">
    <div id="love">
        <i></i>
    </div>
</label><br><br>
<div style="overflow:hidden;" id="radio">
    <label for="demo3" style="float:left;margin-right:20px;">
        <input type="radio" name="name" id="demo3" checked />
        <span></span>
    </label>
    <label for="demo4" style="float:left;margin-right:20px;">
        <input type="radio" name="name" id="demo4" />
        <span></span>
    </label>
    <label for="demo5" style="float:left;margin-right:20px;">
        <input type="radio" name="name" id="demo5" />
        <span></span>
    </label>
</div><br><br>
<div id="cry" style="overflow:hidden;">
    <label for="demo6" style="float:left;margin-right:20px;">
        <input type="radio" name="n" id="demo6" checked />
        <em><strong></strong></em>
    </label>
    <label for="demo7" style="float:left;margin-right:20px;">
        <input type="radio" name="n" id="demo7" />
        <em><strong></strong></em>
    </label>
    <label for="demo8" style="float:left;margin-right:20px;">
        <input type="radio" name="n" id="demo8" />
        <em><strong></strong></em>
    </label>
</div>

js部分
不用js,效果也可以做的很炫很厉害

so,这就我们所说的css3的方便之处

效果图
效果图

综上所述,css3和html5的诞生解决了很多前端多年来难以解决甚至无法解决的问题,以上的例子就是其中很微小的部分,欢迎读者能够喜欢我的文章,并通过评论和我交流,其中出现的错误望提出指正,本文中出现的css部分会涉及其它知识(例如animation动画等)欢迎阅读

js实现图片懒加载
不用设计,css制作各种loading……

本文章有关demo在这

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,830评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,992评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,875评论 0 331
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,837评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,734评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,091评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,550评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,217评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,368评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,298评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,350评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,027评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,623评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,706评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,940评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,349评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,936评论 2 341

推荐阅读更多精彩内容

  • 一:在制作一个Web应用或Web站点的过程中,你是如何考虑他的UI、安全性、高性能、SEO、可维护性以及技术因素的...
    Arno_z阅读 1,132评论 0 1
  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 13,721评论 1 92
  • 转载请声明 原文链接地址 关注公众号获取更多资讯 第一部分 HTML 第一章 职业规划和前景 职业方向规划定位...
    程序员poetry阅读 16,507评论 32 459
  • 常有人一这样说:“我乐于助人。”心里可能在默默补上一句:只要不影响我吃喝玩乐潇洒自在。 虽然这种心理有点小黑暗,却...
    星尘下的猫咪阅读 667评论 0 0
  • 最近一直感觉自己的学习效率太低,不管是学习专业课还是看课外书都是这样。每天给自己定了计划一天看多少页,虽然也...
    一切都那么美好阅读 571评论 0 2