纯CSS+HTML实现checkbox的思路与实例

纯CSS+HTML实现checkbox的思路与实例,第1张

概述checkbox应该是一个比较常用的html功能了,不过浏览器自带的checkbox往往样式不怎么好看,而且不同浏览器效果也不一样。出于美化和统一视觉效果的需求,checkbox的自定义就被提出来了。

checkBox应该是一个比较常用的HTML功能了,不过浏览器自带的checkBox往往样式不怎么好看,而且不同浏览器效果也不一样。出于美化和统一视觉效果的需求,checkBox的自定义就被提出来了。这里对实现方法做个总结。

实现思路

纯CSS实现的主要手段是利用label标签的模拟功能。labelfor属性可以关联一个具体的input元素,即使这个input本身不可被用户可见,有个与它对应的label后,用户可以直接通过和label标签交互来替代原生的input——而这给我们的样式模拟留下了空间。简而言之就是

隐藏原生input,样式定义的过程留给label (那为什么不直接改变checkBox的样式?因为checkBox作为浏览器默认组件,样式更改上并没有label那么方便,很多属性对checkBox都是不起作用的,比如background,而label在样式上基本和div一样'任人宰割')

而在选择事件上,由于CSS的“相邻选择符(E+F)”的存在,让我们可以直接利用HTML的默认checkBox,免去了Js模拟选择的麻烦。

demo详解

DEMO的部分CSS3属性只写了webkit前缀,所以建议用webkit内核的浏览器查看本页
HTML代码:

<div class="wrap">    <!-- `input`的ID必须有,这个是label进行元素匹配所必需的 -->     可以看到每个input的ID和label的“for”属性对应同一字符串 -->input type="checkBox" ID="checkBox01" />label for="checkBox01"></label>="checkBox02" ="checkBox02"="checkBox03" ="checkBox03"="checkBox04" ="checkBox04">

HTML构建完成,接下来是对应的CSS。

.wrap {  wIDth: 500px;  background-color: #EEE;  border: 2px solID #DEF;}/* 隐藏所有checkBox */input[type='checkBox'] {  display: none;} 对label进行模拟.背景图片随便拼凑的,不要吐槽品味*/   Transition效果是做个背景切换效果,这里单纯演示而已,实际上这个过渡不加更自然label { inline-block; 60px;  height:  position: relative;  background: url(//www.chitanda.me/images/blank.png);  background-position: 0 0px;  -webkit-Transition: background 0.5s linear;}  利用相邻选择符和checkBox`:checked`的状态伪类来模拟默认选中效果(就是点击后那个勾号的效果)  如果这段代码注释,点击后将没有任何反馈给用户因为label本身是没有点击后被选中的状态的,checkBox被隐藏后,这个状态只能手动模拟input[type='checkBox']:checked+label { 0 -60px;}

上面代码的效果如下所示,看起来好像也可以了。

不过仔细想想,貌似缺了点什么:选项对应的提示文字
对CSS不了解的新人可能这时候第一反应就是在label后面用p标签或者span标签来添加文字。不过这种方式都不怎么优雅。个人建议用CSS的::before::after伪元素(::before:before是一个东西。不过为了把“伪元素”和“伪类”区分出来,W3C建议的写法是伪元素用::而伪类用:
伪元素的具体内容这里不多说,(其实是我也对它们的掌握就仅限于用用而已,对这个谈不上理解,就不误人子弟了)

 伪元素的生效很简单,定义`content`就好,其余的属性和普通div一样 label::after {   content: attr(data-name);   利用attr可以减少CSS代码量,data-name写在HTML部分的label属性里*/ 120px;  left: 100%;  vertical-align: mIDdle;  margin: 10px;}

当然既然可以用::after模拟label的文字,那也就可以用::before模拟label的checkBox样式,这里就不做解析了。

这里提一下伪类和伪元素的区分:

1)伪类:存在的意义是为了通过选择器找到那些不存在于DOM树中的信息以及不能被常规css选择器获取到的信息。 伪类由一个冒号:开头,冒号后面是伪类的名称和包含在圆括号中的可选参数。

常用的伪类:

:active 向被激活的元素添加样式。 :focus 向拥有键盘输入焦点的元素添加样式。 :hover 当鼠标悬浮在元素上方时,向元素添加样式。 :link 向未被访问的链接添加样式。 :visited 向已被访问的链接添加样式。 :first-child 向元素的第一个子元素添加样式。 :checked 向选中的控件元素添加样式

2)伪元素:伪元素在DOM树中创建了一些抽象元素,这些抽象元素是不存在于文档语言里的(可以理解为HTML源码);

注意: CSS3为了区分伪类和伪元素,规定伪类前面有一个冒号,伪元素前面有两个冒号

常用伪元素:

::before 为作用元素的第一个子节点插入dom中::after 为作用元素的最后一个子节点插入dom中

同:都是通过选择器为元素添加样式

异:伪元素会创建一个元素,但不是真正的HTML元素,伪类相当于为一个元素创建一个class样式

实例:自定义radio

HTML代码:

="radio"="radio">="radio">

CSS代码:

input{    display:none;}    wIDth: 30px;    height:    border: 1px solID #333;    border-radius: 50%;    position: relative;}    -webkit-Transition: all .5s ease;    -moz-Transition:    -o-Transition:    -ms-Transition:    Transition:    cursor: pointer; absolute; 16px;    top:    left:    margin-top:-8px;    margin-left:    z-index: 1;    content: '';1px solID #333;}input:checked+label::after{    background:red;}

实现效果:

点击前:

点击后:

实例:自定义checkBox

HTML代码:

="checkBox" opacity .5s ease;    opacity: 0;} 2px solID #d73d32;     border-top: none;     border-right:     -webkit-transform: rotate(-45deg);     -ms-transform:     transform:     wIDth:20px;     height:10px;     top:50%;     margin-top:     left:     margin-left:-10px;     opacity: 1.0;}

实现效果:

点击前:

点击后:

样式中用到了CSS3选择器,想详情了解,可查看《CSS3属性选择器与(:not)选择器

参考地址:https://segmentfault.com/a/1190000003711140

总结

以上是内存溢出为你收集整理的纯CSS+HTML实现checkbox的思路与实例全部内容,希望文章能够帮你解决纯CSS+HTML实现checkbox的思路与实例所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1015264.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)

保存