input 不显示边框_不需要使用JavaScript

点击右上方红色按钮关注“小郑搞码事”,每天都能学到知识,搞懂一个问题!

ab9591a0cf8355e4a07008558bc28844.png

谢谢你点开来阅读,小郑希望您阅读完有所获。

先解释一下标题的歧义,之所以叫不需要使用JavaScript的意思不是让你放弃它,更不是说有个横空出世的脚本可以替换它。说的是前端在处理交互的时候,好多场景是可以不用JavaScript干预的。而直接借助标签特性,CSS属性特点,选择器灵活应用就能很好的完成一个你所需要的交互效果。这里会用实例的方式,详细的给大家讲一些交互是如何弃JavaScript而实现的。希望大家从中有所获。

先来复习一下几个长的相似的选择器。这些选择器不是每天都会用,可能一个星期甚至几个月才会用一次,如此,容易忽略或者易混淆它们的作用。所以借此机会来一起复习一下,因为本文讲解的实例中也会用到。

cd056d7bd85ae5b71620824bbccda82b.png

如上图所示:

1. 逗号指的是相同的CSS样式,class值为a的对象和class值为b的对象所使用的样式值是完全一样的。

2. 空格指的是后代元素,定义class值为a的对象的所有后代元素中class值为b的对象的样式值。

3. 大于号叫子选择器,作用于第一代子元素而不是所有,与空格选择器区分开来。

4. 加号是相邻兄弟选择器,只作用于后出现的相邻元素,如上,紧接着class值为a的对象出现的class值为b的对象。

4. 破浪号定义class值为a的元素同级下所有符合class值为b的元素的样式。

选择器复习完了,下面我们来讲解一些实例。

一、传送带效果实现

这种效果经常出现在焦点图区域,点击左右按钮或者点击圆点区域来切换图片。如下图所示:

5b1071b3cb06da6705bdd01dc3565591.gif

如果你认为这种效果只能借助脚本语言JS来实现的话,那今天你也就能学会不用JS实现的方法。还记得HTML元素中,label标签中的for属性吗?对,没错,传送带效果就是利用label标签的for属性来实现的。

【非JavaScript实现技术】for属性规定label与哪个表单元素绑定。

举个例子:

Male

注意label里的for属性值,和input里的id属性值是对应的,当点击label时,单选项input就被选中状态。进一步我们就可以利用样式选择器来设置选中input的同级元素状态,从而实现我们想要的效果。

来对照传送带效果的源代码,看看具体怎么实现:

3ff5b3c4a347af7f53ab147c452fbb56.png

这是传送带效果实现的代码,如上图所示,实现原理就是利用设置选中input元素同级元素样式来搞的。需要用的样式选择器有相邻元素选择器+,有同级元素选择器~。对着上面代码图,下面我在具体说一下实现过程。

1. 当用户点击左右箭头(labler标签)时,对应与其for属性相同的id属性的input元素被选中,利用相邻元素选择器,设置其相邻元素class=carousel-item的显示。

2. 利用同级元素选择器~。设置所有同级元素label的class=control-1的UI状态,这样就能实现点击左右箭头时,切换到对应的图片。

二、计算复合选择效果

从标题上不好理解,我们就直接上一张动效图来看看(搞个GIF图)。

5e804ce13b8d4b1cb5108c9b4e7df910.gif

就是这样的效果,每当我们点击选择一个选项时,会在下面结果栏中计数加1,一个都不选择时,就不显示结果。

如果你认为这个效果只能借助脚本JavaScript来实现时,那么今天你又学到了一种非脚本实现方式。

还记得我之前写过一篇文章:《使用CSS计数器动态生成且自动递增数字》。里面我讲过三个重要属性,其中就有应用计数器属性(counter-increment)和显示计数(counter)。对此还不是很熟悉的同学可以翻到之前的过一下,非常好理解。

好了,回到计算复合选择效果的实现上,其实现原理就是利用计数器功能。

【非JavaScript实现技术】计数器两个属性counter-increment和counter 。

554ca25e065cddddf2a5c5d1f318e5eb.png

如果对计数器足够了解的话,这段代码也是非常好理解的。利用counter来统计选中的input元素的个数。对照上面代码具体来分析一下:

1. 首先在选择input元素上应用计数器(counter-increment),在class=result元素上显示计数数值。

2. 默认class=result元素不显示,利用同级选择器~来控制,当有选中的input元素时显示class=result元素。

三、移入和点击翻动效果

类似于翻牌的效果,在动作上有所不同,这里主要强调的是鼠标移入和点击触发时的动效,如下面这张gif图所示:

8a5ce97ca6a0a700f3661f74fd13b944.gif

来看一下,这个效果不用JS是如何实现的。

【非JavaScript实现技术】利用input(checkbox)选中时设置相邻元素的样式。

DOM结果很简单:

  
Front
Back

如这个结构所示,实现的关键代码就是在checkbox选中之后设置相邻元素class=card的样式值(rotate属性)。细心的同学可能发现了,在鼠标移入时有一个小的转动角度和边框阴影,这个是利用label标签hover时给class=card元素加rotateX(20deg)和box-shadow值。鼠标移入label后,点击input选中后,使用+号选择器设置class=card元素的rotateX值即可实现上面的效果。这个比较简单,不深入说了,总之在不使用JS的情况下也能轻松搞定上面这个交互效果。

四、补充说明效果

这个效果大家一定非常熟悉,鼠标移入的时候展示对应文字说明的浮层,其意义大部分就是进一步说明。同样先来看一下效果演示。

945f77a39d672e0aca6897658d325d7f.gif

对CSS熟悉的同学应该都知道,CSS有一些函数Function,也都是比较通用的,比如:

attr()函数

calc()函数

linear-gradient()函数

radial-gradient()函数

等等。

补充说明这个效果也无需JS来实现,纯CSS就能搞定。

【非JavaScript实现技术】鼠标hover时,使用attr函数获取属性内容到before的content中。

关键代码:

ed6bc1f1bc685648e3558295d4916dc0.png

data-info是放在标签dfn上的一个自定义属性,dfn标签可标记那些特殊术语或短语的定义,关于该标签需要注意的是能不用的时候尽量不要用。总之,关于补充说明的效果,大家清楚了纯CSS是怎么实现的就行了。

五、页卡切换效果

最后要说的是Tab切换效果,其非JS处理原理就是和上面说的传送带效果是一样的,使用label标签的for属性来搞。

b830ef620cbf301df9992d105def4e62.gif

对照源代码来讲一下它的基本实现思路。

78ffd1781aa34f63a28e6cd967991f70

【非JavaScript实现技术】设置选中的input元素同级内容的样式。

这里在详细说明一下实现原理:当点击label时,其对应的input元素被选中,然后利用同级选择器~让其对应的内容(class=tab_content)显示,同时利用相邻元素选择器+设置其相邻label的显示状态,简单吧。

本文最后总结一下

本文开头部分,我给大家复习了一些选择器的用法,这里在强调三个重要的组件选择器的用法。

>:子选择器(ul > li)。

~:相邻兄弟选择器(ul + p)。

+:通用兄弟选择器(ul ~ p)。

对照这张图,在理解一下就一目了然了。

紧接着讲了五个实例,这里在归纳一下实例中使用到的技术实现思路。

1. label的for属性规定与哪个表单元素(id属性)对应,点击label时,就相当于是选择了其对应的input元素,然后在使用CSS选择器设置其它元素的样式。

2. CSS中计数器的用法,主要学会三个属性的配合使用,counter-reset(建立计数器),counter-increment(应用计数器),counter(显示计数),搞懂可能解决很多交互问题,更多可以参考我之前的文章。

3. 注意CSS里函数的用法。如attr(), calc()等都是比较常用的。

4. 最后可以要说的一个点是伪元素的用法,尤其是after/before。

这些效果你不需要使用JavaScript。以上实例如果需要源代码可以给我发私信哈。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值