对复选框自定义样式,我们以前一直用的脚本来实现,不过现在可以使用新的伪类 :checkbox 来实现。

如果直接对复选框设置样式,那么这个伪类并不实用,因为没有多少样式能够对复选框起作用。不过,倒是可以基于复选框的勾选状态借助组合选择符来给其他元素设置样式。

很多时候,无论是为了表单元素统一,还是为了用户体验良好,我们都会选择 label 元素和 input[type="checkbox"] 一起使用。当<label>元素与复选框关联之后,也可以起到触发开关的作用

思路:

1. 可以为<label>元素添加生成性内容(伪元素),并基于复选框的状态来为其设置样式;

2. 然后把真正的复选框隐藏起来;

3. 最后把生成内容美化一下。

解决方法:

1. 一段简单的结构代码:

<input type="checkbox" id="awesome" />
<label for="awesome">Awesome!</label>

2. 生成一个伪元素,作为美化版的复选框,先给伪元素添加一些样式:

input[type="checkbox"] + label::before {
content: "\a0"; /*不换行空格*/
display: inline-block;
vertical-align: .2em;
width: .8em;
height: .8em;
margin-right: .2em;
border-radius: .2em;
background-color: silver;
text-indent: .15em;
line-height: .65; /*行高不加单位,子元素将继承数字乘以自身字体尺寸而非父元素行高*/
}

现在的样子:

原来的复选框仍然可见,但是我们先给复选框的勾选状态添加样式:

3. 给复选框的勾选状态添加不同的样式:

input[type="checkbox"]:checked + label::before {
content: "\2713";
background-color: yellowgreen;
}

现在的样子:

4. 现在把原来的复选框隐藏:

input {
position: absolute;
clip: rect(0, 0, 0, 0);
}

现在的样子:

隐藏原来的复选框时,如果使用 display: none; 的话,那样会把它从键盘 tab 键切换焦点的队列中完全删除。

于是可采用剪切的方式,让剪切后的尺寸为零,这样就隐藏了原来的多选框。

延伸

在聚焦和禁用时改变它的样式:

input[type="checkbox"]:focus + label::before {
box-shadow: 0 0 .1em .1em #58a;
}
input[type="checkbox"]:disabled + label::before {
background-color: gray;
box-shadow: none;
color: #555;
}

点击后,得到焦点,现在的样子:

多选框外多出一层阴影。

自定义input[type="checkbox"]的样式的更多相关文章

  1. 使用<label>标签修改input[type="checkbox"]的样式

    因为<label>的特性有两点 : ①不呈现任何效果, ②用户点击该标签, 浏览器能自动将焦点转移到相关的表单控件上. <form> <input type=" ...

  2. 关于input 的选中,自定义input[type="checkbox"]样式

    1.css 呈现   选中后 的input的样式可以用 /*背景图*/      background:url('../pc/images/archives/icon_choosed.png') no ...

  3. 自定义input[type="checkbox"]样式

    input[type=checkbox] { visibility: hidden; position: relative;} input[type=checkbox]:after { content ...

  4. 自定义input[type="radio"]的样式

    对于表单,input[type="radio"] 的样式总是不那么友好,在不同的浏览器中表现不一. 为了最大程度的显示出它们的差别,并且为了好看,首先定义了一些样式: <fo ...

  5. 自定义input[type="radio"]的样式(支持普通浏览器,IE8以上)

    对于表单,input[type="radio"] 的样式总是不那么友好,在不同的浏览器中表现不一. 对单选按钮自定义样式,我们以前一直用的脚本来实现,不过现在可以使用新的伪类 :c ...

  6. 原生javascript自定义input[type=checkbox]效果

    2018年6月27日  更新 能用css3,就不用js 用纯css3实现样式重写 <!DOCTYPE html> <html lang="en"> < ...

  7. 自定义input[type="file"]的样式

    input[type="file"]的样式在各个浏览器中的表现不尽相同: 1. chrome: 2. firefox: 3. opera: 4. ie: 5. edge: 另外,当 ...

  8. 定制 input[type="radio"] 和 input[type="checkbox"] 样式

    表单中,经常会使用到单选按钮和复选框,但是,input[type="radio"] 和 input[type="checkbox"] 的默认样式在不同的浏览器或 ...

  9. 修改 input[type="radio"] 和 input[type="checkbox"] 的默认样式

    表单中,经常会使用到单选按钮和复选框,但是,input[type="radio"] 和 input[type="checkbox"] 的默认样式在不同的浏览器或 ...

随机推荐

  1. Activiti - 设置会签

    前些天在群里聊工作流和Activiti,群里有人分享了自己的工作流引擎开源项目,大伙纷纷问这问那(比如为什么突然自己搞个process engine.有没有eclipse plugin.能不能绘制流程 ...

  2. [javaSE] 变量的传值与传址

    变量:就是将不确定的数据进行存储.也就是需要在内存中开辟一个空间 这个空间需要一个名称,这个名称就是变量名 基本数据类型:byte,short,int,long,double,float,char,b ...

  3. data whitening

    http://ufldl.stanford.edu/tutorial/unsupervised/PCAWhitening/

  4. webstorm修改文件,webpack-dev-server及roadhog不会自动编译刷新

    转自:http://www.cnblogs.com/ssrsblogs/p/6155747.html 重装了 webstorm ,从10升级到了2016 一升不要紧,打开老项目,开启webpakc-d ...

  5. Ubuntu双系统环境下隐藏掉其他开机启动项

    系统环境:ubuntu16.04需求:PC装的双系统(ubuntu+win10),为了应对某些需求,需要将win10系统给从电脑上消失,让你看不见也进不去它.做法:当然不可能真的删除掉win10系统, ...

  6. LOJ#6271. 「长乐集训 2017 Day10」生成树求和 加强版

    传送门 由于是边权三进制不进位的相加,那么可以考虑每一位的贡献 对于每一位,生成树的边权相当于是做模 \(3\) 意义下的加法 考虑最后每一种边权的生成树个数,这个可以直接用生成函数,在矩阵树求解的时 ...

  7. js返回一组日期中最近连续的天数

    用js获取一组日期(并把当天算入)中连续的天数 刚开始可能想到单纯的比较日期大小判断连续, 而又有大小月,平闰年这些因素,还是时间戳来的安全; 首先得有一组日期,比如: var arr = [ '20 ...

  8. opencv3.2.0实现连续图片合成avi视频

    ##名称:利用videowriter实现多张连续图片合成avi视频 ##平台:QT5.7.1+OpenCV3.2.0 ##日期:2017年12月10日 /**************新建QT控制台程序 ...

  9. opencv3.2.0实现读取多张图片的方法(利用sprintf()函数)

    简介: 将连续的图片转换成视频时,首先需要把图片全部读入,然后再做相应处理,该程序利用sprintf()函数,实现连续图片的读入 /*********新建QT控制台程序,实现多张连续图片的读取**** ...

  10. Getting Started with Erlang

    Getting Started with Erlang Erlang is a great language that lets you build highly concurrent applica ...