整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

前端开发,CSS实现一个粒子动效的按钮




钮(button)可能是网页中最常见的组件之一了,大部分都平淡无奇,如果你碰到的是一个这样的按钮,会不会忍不住多点几次呢?

通常这类效果第一反应可能就是借助canvas了,比如下面这个案例点击预览(建议去codepen原链接点击预览访问,segmentfault内置的预览js会加载失败)

效果就更加震撼了,当然canvas实现也有一定的门槛,而且实际使用起来也略微麻烦(所有js实现的通病),这里尝试一下CSS的实现方式。

生成粒子

抛开js方案,还有HTML和CSS实现方式。HTML就不用说了,直接写上大量的标签

<button>
    button
    <i></i>
    <i></i>
    <i></i>
    <i></i>
    <i></i>
    ...
</button>

一般情况下我不是很喜欢这种方式,标签太多,结构不美观,而且有可能对现有的页面造成其他影响(很多情况下并不方便修改原始HTML结构)

那么来看看CSS实现方式,主要也是两种方式,其实就是想一下有哪些属性可以无限叠加,一个是box-shadow,还有一个是background-image(CSS3支持无限叠加)。

1.box-shadow

我们先看看box-shadow方式,为了避免使用额外标签,这里采用伪元素生成。

.button::before{
  position: absolute;
  content: '';
  width: 5px;
  height: 5px;
  border-radius: 50%;
  background-color: #ff0081;
  box-shadow: 10px 10px #ff0081,15px 0px 0 2px #ff0081,20px 15px 0 3px #ff0081,...;/*无限叠加*/
}

效果还是有的,主要就是多花点时间来调试,这里主要根据偏移量和扩展来决定粒子的位置和大小。

不过这里的偏移量只能是px单位,无法很好的自适应按钮的大小,所以这里采用第二种方式来实现

2.background-image

CSS3中background-image是可以无限叠加的,类似于

.myclass {
  background: background1, background2, /*...*/ backgroundN;
}

这里我们可以采用径向渐变radial-gradient来实现多个小圆点。

.button::before{
  position: absolute;
  content: '';
  left: -2em;
  right: -2em;
  top: -2em;
  bottom: -2em;
  pointer-events: none;
  background-repeat: no-repeat;
  background-image: radial-gradient(circle, #ff0081 20%, transparent 0),
  radial-gradient(circle, #ff0081 20%, transparent 0),
  radial-gradient(circle, #ff0081 20%, transparent 0),
  radial-gradient(circle, #ff0081 20%, transparent 0),
  ...;
  background-size: 10% 10%, 20% 20%, 15% 15%,...;
  background-position: 18% 40%, 20% 31%, 30% 30%,...;
}

这里主要通过background-size和background-position来控制原点的尺寸与位置,看着好像挺复杂,其实只要background-size和background-position与background-image位置一一对应就行了。实际开发中可能有点难调试,可以直接在控制台中通过键盘上下左右键微调实时预览效果(可以考虑做一个可视化工具)。

这样就做出了一个简单的粒子效果。

动起来

虽然background-image不支持CSS动画,但是另外两个background-size和background-position支持呀,所以,CSS transition和CSS animation都可以用起来。

动画效果很简单,就是粒子从中心往外扩散,并且逐渐消失的过程。

transition

我们先看看:hover交互

.button::before{
  transition:.75s background-position ease-in-out,75s background-size ease-in-out;
}
.button:hover::before{
  background-position: 5% 44%, -5% 20%, 7% 5%...;
  background-size: 0% 0%;
}

当然直接这样设置肯定是不理想,鼠标离开时会收缩回去,效果如下

我们需要是鼠标离开时不收缩回去,如何实现呢?

很简单,把transition设置在:hover下就可以了,表示只有当鼠标经过时才有过渡,离开时没有

.button:hover::before{
  background-position: 5% 44%, -5% 20%, 7% 5%...;
  background-size: 0% 0%;
  transition:.75s background-position ease-in-out,75s background-size ease-in-out;
}

这样是不是感觉稍微好些了呢?点击这里点击预览查看。

如果我们想做成点击的时候出现粒子动画该怎么做呢?这里就需要借助:active伪类了。

如果我们按照:hover逻辑,那么

.button:active::before{
  background-position: 5% 44%, -5% 20%, 7% 5%...;
  background-size: 0% 0%;
  transition:.75s background-position ease-in-out,75s background-size ease-in-out;
}

很遗憾,只有当只有按住不动的时候才能触发,一旦鼠标抬起就没有了,这个时候我们就需要换个角度了。可以这么想象一下,默认就是发散的,然后点击的时候聚拢,抬起的时候就会有还原成之前的发散状态,同时,在点击的时候需要取消掉过渡效果,如下

.button::before {
    /*...*/
    background-position: 5% 44%...;/*扩散的状态*/
    background-size: 0% 0%;
    transition: background-position .5s ease-in-out, background-size .75s ease-in-out;
}

.button:active::before {
  transition:0s;/**注意取消掉过渡**/
  background-size: 10% 10%, 20% 20%...;
  background-position: 18% 40%, 20% 31%,...;
}

你可以查看这个demo点击预览

为什么在:active需要transition:0s呢,你可以试下不添加的效果就明白了,如下

animation

animation和transition实现原理比较类似,优点是可以做出更加精细的动画,这里就拿:active方式来说吧。

.button::before{
  /*...*/
  animation: bubbles ease-in-out .75s forwards;
}
.button:active::before {
  animation: none; /*这里注意取消动画*/
  background-size: 0;
}
@keyframes bubbles {
  0% {
    background-position: 18% 40%, ...;
  }
  50% {
    background-position: 10% 44%, ...;
  }
  100% {
    background-position: 5% 44%, ...;
    background-size: 0% 0%;
  }
}

可以在这里点击预览查看源码。

唯一的不足可能是初始化动画会自执行一次。

小结

上面介绍了纯CSS实现一个粒子动效的按钮,优点很明显,复制一下CSS直接扔到项目里就能用,管他什么原生项目还是react项目,也无需绑定什么事件,也无需额外的逻辑处理,增强现有体验。试想一下,如果这是一个‘购买’按钮,会不会触发你多购买几次呢,反正我肯定是会被吸引住了,哈~缺点也还是有的,比如上面的定位,密密麻麻都是工作量啊,建议这些功能在项目整体完成之后再细细打磨,也可以试着做一些可视化工具来减轻工作量,完。


源自:https://github.com/XboxYan/notes/issues/16

声明:文章著作权归作者所有,如有侵权,请联系小编删除。

篇文章主要的向大家介绍了关于html input标签的单选按钮的使用方法,还有关于HTML input标签的单选默认按钮的做法。接下来我们一起来看看这篇文章吧

首先我们介绍的是在html input标签中的单选按钮的做法:

<input> 标签用于搜集用户信息。根据不同的type属性值,输入字段拥有很多种形式。输入字段可以是文本字段、复选框、掩码后的文本控件、单选按钮、按钮等等。

话不多说,上代码实例:

> <form action="form_action.asp" method="get">
> 
> <input type="radio" name="radio" value="1">单选1
> 
> <input type="radio" name="radio" value="2">单选2
> 
> <input type="radio" name="radio" value="3">单选3
> 
> <input type="radio" name="radio" value="4">单选4
> 
> </form>

这个的效果很容易看到,我们还是先看看浏览器中的显示效果吧:



这个效果一眼就能看到,很简单的一个代码

还有种是很多网站上都是经常见到的,比如:单选性别,这个基本上都是用这种单选框去制作的。代码如下:

HTML中的单选按钮实现男女性别选择,不让男女同是都能都能选择,实现方法:在按钮的属性里写一个name属性,并且把name的值设置成相同的

> <input id="man" type="radio" checked="checked" name="1" />男
> 
> <input id="woman" type="radio" name="1"/>女

这个就不给图了,比上面那个还简单,就两个单选框,我们经常遇到的这个。

现在来说说HTML单选框按钮怎么默认选中:

首先我们先把第一个实例拿出来继续说,我们只需要在其中加一个属性,如下:

> <form action="form_action.asp" method="get">
> 
> <input type="radio" name="radio" value="1">单选1
> 
> <input type="radio" name="radio" value="2" checked>单选2
> 
> <input type="radio" name="radio" value="3">单选3
> 
> <input type="radio" name="radio" value="4">单选4
> 
> </form>

效果依旧很明显,看效果图:



这上面我没做任何的点击,自己出现在那上面的,刷新过后还能看到在单选2上面。

我们就可以看到,这样就把单选框给默认选中了,大家可以自己试试,多敲敲代码。

好了,以上就是这篇关于html input标签做单选按钮的文章了,有问题的可以在下方提问。

以上就是html单选按钮默认选中怎么做?input标签的单选按钮用法实例的详细内容,更多请关注我!!!

我自己是一名从事了多年开发的web前端老程序员,目前辞职在做自己的web前端私人定制课程,今年我花了一个月整理了一份最适合2020年学习的web前端学习干货,各种框架都有整理,送给每一位前端小伙伴,想要获取的可以关注我的头条号并在后台私信我:前端,即可免费获取。

SS伪元素主要是指HTML中没有定义、存在的元素,伪元素本身不是真正的页面元素,但是伪元素在使用过程中,其用法与效果与其他真正页面元素是一样的。伪元素只能在定义基础上动态显示其运行效果,在HTML源文件中并没有该元素的真正代码。CSS3中所定义的所有伪元素与伪类描述如下图所示:

CSS伪元素与伪类


按钮波纹ripple效果展示

ripple波纹

按钮的波纹效果主要是指按钮在点击时展示出的动态效果。在实现效果过程中可行的方法方式较多,例如可以使用JavaScript、CSS动画、JQuery等。网上目前按钮波纹实现效果较多,部分样式效果展示如下:

波纹效果展示


CSS 伪类波纹效果实现

CSS伪类波纹效果主要借助于before、after伪类与hover悬停选择器等实现类似波纹效果,本文主要借助after及hover等实现按钮的波纹效果,本例设计两种类似波纹效果,最终实现效果展示如下图所示:

设计样式1

设计样式2

本文设计实现的两类波纹效果样式描述如上图gif所示,其实现过程描述如下:

1、按钮基本样式设计

本例按钮基本样式主要包括宽度、高度、背景颜色等。使用元素选择器与类选择器定义了按钮元素的基本样式,其样式实现代码描述如下:

button,.button2,.button{width: 200px; height: 50px; background-color: green;border: 0; cursor: pointer;color: #FFF; font-size: 16px; position: relative;}

.button类主要用以实现设计样式1,.button2类主要用于实现设计效果2,两类按钮定义描述如下:

<button type="button" class="button">Ripple1</button>
<button type="button" class="button2">Ripple2</button>

2、after伪元素使用

after伪元素主要用于实现在指定元素的后面添加新的内容。本例提供的两种设计方式都是在button元素的后面添加新的类似div的新元素,其中样式1,新添加的元素与button本身重合,尺寸也一致。设计样式2中after元素位于button的底部位置,宽度与button相同,高度为指定尺寸5px。两个设计中after元素样式为实现动态展开效果都涉及宽度width为0。after元素的样式定义如下:

.button::after{content: " "; width: 0; height: 50px; position: absolute; left:50%;top: 0%;background-color: red;opacity: 0; transition: all .4s; }
.button2::after{content: " "; width: 0; height: 5px; position: absolute; left:50%;top: 100%;background-color: red;transition: all .4s; }

after元素CSS样式定义中使用了transition属性实现动画效果,即在0.4s内实现宽度从0改变为100%。

3、hover选择器的使用

hover选择器为悬停选择器,主要对鼠标在HTML元素悬停时样式进行设置。本例两个涉及效果都是借助hover悬停选择器对after样式进行设置,在初始化设置宽度为0的基础上宽度改变为100%,最终实现两端伸展的效果。hover选择器定义after元素样式描述如下所示:

.button:hover::after{left:0%; width: 100%; opacity: 0.6;}
.button2:hover::after{left:0%; width: 100%;}

以上给出了CSS伪元素实现波纹效果,主要借助了after、before伪元素与hover悬停选择器等。设计实现效果完整源文件截图如下:

案例完整代码


以上给出了JavaScript中的事件基本概念及案例分析,如有问题可在评论区讨论。本头条号长期关注编程资讯分享;编程课程、素材、代码分享及编程培训。如果您对以上方面有兴趣或代码错误、建议与意见,可以联系作者,共同探讨。期待大家关注!相关文章链接如下:

前端开发-JavaScript中的事件(Event)及事件处理总结

前端开发-CSS3动画实现焦点(图文轮播)图效果

前端开发-JavaScript DOM动态生成文本框

前端设计-教你如何快速绘制HTML5动画

前端设计-响应式页面开发基础

前端设计-Ajax技术及实例展示