表单元素——checkbox样式美化

一、背景

设计狮童鞋总是会设计各种高大上的效果图,比如下面这个土豪金的效果。

该图中“已阅读并同意相关服务条款”前面的复选框有一个金色的边框,打钩时是一个金色的对勾。接下来说说怎样实现该效果。

二、解决方法

1、纯css解决方法

css3 选择器(三)一文中介绍过一个选择器【:checked】选择器。

单选按钮和复选按钮都有选中和未选中状态。要设置这两个按钮默认样式稍微复杂点。该文通过:checked选择器配合其他表情实现自定义样式。

举例:使用:checked选择器模拟实现复选框样式。

<meta charset="utf-8">
<style type="text/css">
form {
  border: 1px solid #ccc;
  padding: 20px;
  width: 300px;
  margin: 30px auto;
}

.wrapper {
  margin-bottom: 10px;
}

.box {
  display: inline-block;
  width: 20px;
  height: 20px;
  margin-right: 10px;
  position: relative;
  border: 2px solid orange;
  vertical-align: middle;
}

.box input {
  opacity: 0;
}

.box span {
  position: absolute;
  top: -10px;
  right: 3px;
  font-size: 30px;
  font-weight: bold;
  font-family: Arial;
  -webkit-transform: rotate(30deg);
  transform: rotate(30deg);
  color: orange;
}

input[type="checkbox"] + span {
  opacity: 0;
}

input[type="checkbox"]:checked + span {
  opacity: 1;
}
</style>

<form action="#">
  <div class="wrapper">
    <div class="box">
      <input type="checkbox" checked="checked" id="username" /><span>√</span>
    </div>
    <label for="username">我是选中状态</label>
  </div>

  <div class="wrapper">
    <div class="box">
      <input type="checkbox"  id="userpwd" /><span>√</span>
    </div>
    <label for="userpwd">我是未选中状态</label>
  </div>
</form>

模拟实现一个选中和未选中的样式。

没有样式时的效果图如下,

最终添加样式后效果如下。

实际开发中,我尝试使用这种方法。

这种方法有个问题:点选框时无法选中,必须点文字才能选中 。

这在实际应用中肯定是无法忍受的,实际应用中推荐第二种方法。

2、配合js解决方法

用到图片:

  

原理:label和input外面套一层.custom-checkbox作为父元素相对定位。

input绝对定位于左上角,label也绝对定位于左上角,覆盖input的方块。通过给label设置padding-left和背景图来模拟未选中状态。选中时加一个.right类更改背景图片为选中状态的背景图。

通过js点击事件,label被点击时在选中与未选中状态切换。

<meta charset="utf-8"/>
<style type="text/css">
.custom-checkbox{
border:1px solid red;
position:relative;
height:30px;
}
.custom-checkbox input{
position:absolute;

}
.custom-checkbox label{
padding-left:20px;
position:absolute;
top:-1px;
left:0;
background:url(images/bg-unchecked.png) no-repeat top 4px left 3px;
}
.custom-checkbox label.right{
background:url(images/bg-checked.png) no-repeat top 2px left 3px;
}

</style>
<body>
<div class="custom-checkbox">
<input type="checkbox" id="test"/><label for="test">已阅读并同意相关服务条款</label>
</div>

<script src="http://code.jquery.com/jquery-latest.js"></script>
<script type="text/javascript">

 $(‘.custom-checkbox label‘).click(function(){
 if($(this).hasClass(‘right‘)){
 $(‘.custom-checkbox label‘).removeClass("right");
 }else{
 $(‘.custom-checkbox label‘).addClass("right");
 }
 });
</script>
</body>

问题:点击频率过快,会双击选中文字,影响用户体验。

解决办法:

<label for="test" onselectstart="return false;" style="-moz-user-select:none;">已阅读并同意相关服务条款</label>

效果:

三、总结

单选框样式和复选框原理是类似的。上面办法都是一种模拟实现。

正如我在::before和::after伪元素的用法 一文中说过,早在10年我们会使用::before和::after来实现多背景图片,现在css3多背景已成为标准;我们对复选框样式的模拟实现也许会推动它成为标准,这也就是我们为后人做的贡献了,让他们工作更轻松。

还有一点我想说的是推动前端技术发展的,不仅有前端同行们,还有我们可爱的设计师们。如果只有前端,我们会停留在已有技术的可行性上做一些保守的效果,但是有了设计师的“完美主义”,让我们脑洞大开,挑战自我,促进技术更上一层楼。

本文作者starof,因知识本身在变化,作者也在不断学习成长,文章内容也不定时更新,为避免误导读者,方便追根溯源,请诸位转载注明出处:http://www.cnblogs.com/starof/p/4904929.html有问题欢迎与我讨论,共同进步。

时间: 2024-08-01 22:40:42

表单元素——checkbox样式美化的相关文章

css - 表单元素默认样式美化 - 单选框

单选框 HTML代码 样式 .radio input{ visibility: hidden;}.radio label{ position: relative;}.radio label:after{ content: "";/*必须设置*/ display: inline-block; width: 20px; height: 20px; border: 1px solid #5dbd5d; position: absolute; top: 0px; left: -32px; bo

html表单输入框css样式美化特效源代码下载

html表单输入框css样式美化源代码,响应鼠标动作 原文:html表单输入框css样式美化特效源代码下载 源代码下载地址:http://www.zuidaima.com/share/1550463335926784.htm 源代码截图:

关于表单元素input的美化

<div class="cell"><input type="text" name="Username" id="js-mobile_ipt" value="请输入用户名" class="text" maxlength="20"onfocus="if (value =='请输入用户名'){value ='';this.className='

去除表单元素的默认样式

一.使用 appearance 改变 webkit 浏览器的默认外观 webkit 内核浏览器具备私有属性" -webkit-appearance "可以改变元素的外观,该属性非常强大,适合大部分标签,这对于 webkit 的页面优化带来极大的帮助. 禁用表单input.select元素的默认外观 input,select{ -webkit-appearance:none; appearance:none; } 二.使用伪元素改变 IE10 表单元素默认外观 禁用 select 默认下

文字和表单(checkbox/radio)元素垂直对齐方法,兼容Firefox和IE。

这几天在做表单时总会碰到复选框(checkbox)和单选框(radio)与文字不对齐的问题,要不是checkbox上浮了,要不是文字上浮.在前端开发过程中,单(复)选框和它们后面的提示文字在不进行任何设置的情况下,是无法对齐的,而且在Firefox和IE中相差甚大.即使设置了vertical-align:middle,也依然不能完美对齐. 解决办法: 1.文字大小必须是偶数,比如12PX. 2.将文字加上label标签并且也添加vertical-align:middle样式. 3.然后去除表单元

利用jQuery来简化radio,checkbox,select,radio表单元素的操作

获取一组radio被选中项的值 var item = $('input[@name=items][@checked]').val(); 获取select被选中项的文本 var item = $("select[@name=items] option[@selected]").text(); select下拉框的第二个元素为当前选中值 $('#select_id')[0].selectedIndex = 1; radio单选组的第二个元素为当前选中值.前端框架分享 $('input[@n

jquery attr处理checkbox / select 等表单元素时的坑

先上html结构 <body> <form action=""> <input type="checkbox" id="checkedAll">全选/全不选<br> <input type="checkbox" name="items" value="足球">足球 <input type="checkbox&qu

表单元素默认不继承样式

难题 可能有人已经注意到了,有时button或者input是不会默认继承样式的,尤其是font,直观就能看出来了. 原因 根据SO的回答,因为浏览器会采用系统默认的样式来渲染大部分的表单元素,而且这个默认的样式文件还能找到.想深入了解的可以戳下方参考文档链接. 方案 主动加上inherit,并不是什么好方案,但是也没找到更好的. .form-element { font:inherit; } 参考文档: Why textarea and textfield not taking font-fam

web前端与移动开发---html列表、表单元素等标签的学习

经过前两天的学习,今天我们来学习列表及表单元素. 首先是列表,列表分为无需列表.有序列表.自定义列表. 1.无序列表 <ul> <li></li> <li></li> ...... </ul> 总结: (1)所有放在ul中的数据必须是无序的: (2)ul标签是用来管理li标签的: (3)ul中必须至少有一个li标签: (4)li标签不能单独使用: (5)在ul标签中只能写li标签: (6)在li标签中才能嵌套其他的标签. 2.有序列表