表单美化

前面的话
由于一些系统原生的表单控件在各个浏览器中显示效果不一致,且无法设置某些关键CSS样式,为了保证表单在各浏览器中的兼容性,表单美化就是不得不做的一件事了
单选按钮
【实现效果】
【实现过程】
body{ margin: 0; font: 16px/20px "宋体"; } .box{ width: 500px; height: 100px; line-height: 100px; margin: 0 auto; border: 1px solid black; text-align: center; } .box label{ position:relative; padding-left: 20px; } .box input{ visibility: hidden; } .box i{ position: absolute; top: -2px; left: -2px; height: 19px; width: 19px; background: url('http://sandbox.runjs.cn/uploads/rs/26/ddzmgynp/radiobutton.gif') no-repeat -14px -18px; } .box label:hover{ color: red; } .box label:hover i{ background-position: -14px -118px; } .box label.selected i{ background-position: -14px -218px; }
<div class="box" id="box"> 选择一项游戏方式: <label for="xiu"><i></i>咻一咻</label> <input id="xiu" type="radio" value="咻一咻"> <label for="yao"><i></i>摇一摇</label> <input id="yao" type="radio" value="摇一摇"> <label for="niu"><i></i>扭一扭</label> <input id="niu" type="radio" value="扭一扭"> </div> <script> var oBox = document.getElementById('box'); var aLabel = oBox.getElementsByTagName('label'); for(var i = 0, leni = aLabel.length; i < leni; i++){ aLabel[i].onclick = function(){ for(var j = 0,lenj = aLabel.length; j < lenj; j++){ aLabel[j].removeAttribute('class'); } this.className = 'selected'; } } </script>
多选按钮
【实现效果】
【实现过程】
body{ margin: 0; font: 16px/20px "宋体"; } .box{ width: 600px; height: 100px; line-height: 100px; margin: 0 auto; border: 1px solid black; text-align: center; } .box label{ position:relative; padding-left: 20px; } .box input{ visibility: hidden; } .box i{ position: absolute; top: -2px; left: -2px; height: 19px; width: 19px; background: url('http://sandbox.runjs.cn/uploads/rs/26/ddzmgynp/checkbox.gif') no-repeat -14px -18px; } .box label:hover{ color: red; } .box label:hover i{ background-position: -14px -118px; } .box label.selected i{ background-position: -14px -218px; }
<div class="box" id="box"> 选择日常手机交易方式(可多选): <label for="a"><i></i>支付宝</label> <input id="a" type="radio" value="支付宝"> <label for="t"><i></i>微信</label> <input id="t" type="radio" value="微信"> <label for="b"><i></i>百度钱包</label> <input id="b" type="radio" value="百度钱包"> </div> <script> var oBox = document.getElementById('box'); var aLabel = oBox.getElementsByTagName('label'); for(var i = 0, leni = aLabel.length; i < leni; i++){ aLabel[i].onclick = function(){ if(!this.className){ this.className = 'selected'; }else{ this.removeAttribute('class'); } } } </script>
下拉列表
【实现效果】
【实现过程】
body{ margin: 0; font: 16px/20px "宋体"; } ul{ margin: 0; padding: 0; list-style: none; } .box{ width: 300px; height: 40px; margin: 0 auto; border: 1px solid black; } .box .show{ background-color: red; line-height: 30px; padding: 5px; } .box .show-area{ color: white; vertical-align: middle; } .box .show-select{ position: relative; display: inline-block; vertical-align: middle; width: 200px; height: 28px; border: 1px solid #999; background-color: white; text-indent: 20px; cursor: pointer; } .box .show-selectAdd{ color: #999; } .box .show-select i{ position: absolute; height: 0; width: 0; top: 0; right: 0; margin-top: 12px; margin-right: 5px; border: 5px solid transparent; border-top-color: black; } .box .show-selectAdd i{ border: 5px solid transparent; border-bottom-color: black; margin-top: 8px; } .box .list{ border: 1px solid #dfdfdf; border-top: none; display: none; } .box .list-in{ height: 30px; line-height: 30px; text-indent: 74px; border-bottom: 1px solid #dfdfdf; cursor: pointer; } .box .list-in:hover{ color: red; }
<div class="box" id="box"> <div class="show"> <strong class="show-area">地址:</strong> <span class="show-select">朝阳区<i></i></span> </div> <ul class="list"> <li class="list-in">朝阳区</li> <li class="list-in">海淀区</li> <li class="list-in">东城区</li> <li class="list-in">西城区</li> <li class="list-in">丰台区</li> <li class="list-in">石景山区</li> </ul> </div> <script> var oBox = document.getElementById('box'); var oDiv = oBox.getElementsByTagName('div')[0]; var oShow = oDiv.getElementsByTagName('span')[0]; var oUl = oBox.getElementsByTagName('ul')[0]; var aLi = oUl.getElementsByTagName('li'); //简单思路 //[1]点击oDiv时,默认文字为黑色,三角向上,变成文字为#999,三角向下;简化为增加一个show-selectAdd类名;oUl从隐藏变成显示 oDiv.onclick = function(e){ //阻止冒泡 e = e || event; if(e.stopPropagation){ e.stopPropagation(); }else{ e.cancelBubble = true; } oShow.className = 'show-select show-selectAdd'; oUl.style.display = 'block'; } //[2]点击oUl的li时,oUl从隐藏变成显示,文字和三角恢复到黑色和向上的默认样式;并且文字内容变成当前点击的li的内容 for(var i = 0,len=aLi.length; i < len;i++){ aLi[i].onclick = function(){ oShow.innerHTML = this.innerHTML + '<i></i>'; } } //[3]点击box以外的其他部分时,oUl从隐藏变成显示,文字和三角恢复到黑色和向上的默认样式 document.onclick = function(){ this.getElementsByTagName('span')[0].className = 'show-select'; oUl.style.display = 'none'; } </script>
好的代码像粥一样,都是用时间熬出来的

【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?