纯css实现炫光流彩Button

news2024/11/25 7:37:21

正文

先看效果

实现思路

  • 不仔细看的话还以为只需要通过animationtext-shadowbox-shadowbackground-image就可以实现

  • 仔细看的话会发现,其实按钮的颜色不是简单的渐变,而是从一侧颜色开始变化,渐渐的颜色蔓延到另一侧,之后再有新的颜色延伸过来

    • 当然,这个也可以通过animation与多段的background-image来实现
  • 另外,不只是背景,连button的边缘颜色也是从一侧到另一侧渐变的,那这个怎么实现的?

    • 难道也要通过animation与非常多段的box-shadow来实现吗?
  • 其实不妨换一个思路,假设button是一个窗口,而button的背景可以是一个长画布,从窗口从左到右慢慢移入进来然后通过animation来循环

  • 那怎样实现button的背景长画布呢?

    • 可以通过background-image来实现多彩背景颜色,与background-size来实现画布

      • 比如background-size:400%;
  • 这样背景长画布就实现了

  • 怎样实现button边缘的颜色从一边开始渐变呢?

  • 同理,也可以用上面长画布的思想,但是通过什么属性来实现呢?

  • text-shadow吗?

  • 不呀,再实现一个大的背景button不就ok了?

  • 在常规状态下opacity掉,在:hover的时候将大背景button显示出来

  • 大背景有了,怎样实现button的边缘虚化?

  • 这个思路就多了,可以通过blurfilter来实现

    • 其中blur的使用比较简单,就是一般的虚化,filter就比较牛了,还可以实现一堆滤镜的效果,具体效果我打算后续再出一篇讲解下,感兴趣的小伙伴也可以先了解下

具体实现

基础html结构

<body>
  <a href="#" class="guang">button</a>
</body>

很简单,实现一个button的容器即可

button样式

.guang {
  position: relative;
  display: inline-block;
  width: 220px;
  height: 80px;
  color: rgb(255, 255, 255);
  line-height: 80px;
  font-size: 35px;
  font-family: sans-serif;
  text-decoration: none;
  text-transform: uppercase;
  text-align: center;
  border-radius: 30px;
  background: linear-gradient(90deg, rgb(39, 122, 218), rgb(74, 230, 121), rgb(201, 214, 13), rgb(226, 20, 233), rgb(16, 172, 219));
  background-size: 400%;
  z-index: 1;
  text-shadow: 0 0 5px white,
    0 0 5px white;
}

这里其他都一般,关键是text-shadow: 0 0 5px white, 0 0 5px white;让字体看着有霓虹灯的发散炫彩效果,之所以用白色,是因为白色看着对比更明显

实现长画布背景

  .guang {
    position: relative;
    display: inline-block;
    width: 220px;
    height: 80px;
    color: rgb(255, 255, 255);
    line-height: 80px;
    font-size: 35px;
    font-family: sans-serif;
    text-decoration: none;
    text-transform: uppercase;
    text-align: center;
    border-radius: 30px;
    background: linear-gradient(90deg, rgb(39, 122, 218), rgb(74, 230, 121), rgb(201, 214, 13), rgb(226, 20, 233), rgb(16, 172, 219));
    background-size: 400%;
    z-index: 1;
    text-shadow: 0 0 5px white,
      0 0 5px white;
  }

关键是background的线性渐变linear-gradientbackground-size:400%

实现button边缘长画布

.guang::before {
  content: '';
  position: absolute;
  top: -10px;
  left: -10px;
  width: 240px;
  height: 100px;
  background: linear-gradient(90deg, rgb(39, 122, 218), rgb(74, 230, 121), rgb(243, 169, 10), rgb(226, 20, 233), rgb(16, 172, 219));
  background-size: 400%;
  opacity: 0;
  z-index: -1;
  border-radius: 45px;
  transition: 0.6s;
}

这里的z-index:-1主要是为了让button的文案漏出来,要不然会被伪元素给挡住

transition: 0.6s是为了:hover的时候有个过渡

添加hover动画

.guang:hover {
  animation: move 5s linear alternate infinite;
}
​
@keyframes move {
  0% {
    background-position: 0%;
  }
​
  100% {
    background-position: 100%;
  }
}
.guang:hover::before {
  filter: blur(15px);
  opacity: 1;
  animation: move 8s linear alternate infinite;
}

完整代码

HTML

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>
  <a href="#" class="guang">button</a>
</body>

</html>

css

* {
    margin: 0;
  padding: 0;
  box-sizing: border-box;
}

body {
  height: 100vh;
  display: flex;
  justify-content: center;
  align-items: center;
  background-color: black;
}

.guang {
  position: relative;
  display: inline-block;
  width: 220px;
  height: 80px;
  color: rgb(255, 255, 255);
  line-height: 80px;
  font-size: 35px;
  font-family: sans-serif;
  text-decoration: none;
  text-transform: uppercase;
  text-align: center;
  border-radius: 30px;
  background: linear-gradient(90deg, rgb(39, 122, 218), rgb(74, 230, 121), rgb(201, 214, 13), rgb(226, 20, 233), rgb(16, 172, 219));
  background-size: 400%;
  z-index: 1;
  text-shadow: 0 0 5px white,
    0 0 5px white;
}

.guang:hover {
  animation: move 5s linear alternate infinite;
}

@keyframes move {
  0% {
    background-position: 0%;
  }

  100% {
    background-position: 100%;
  }
}

.guang::before {
  content: '';
  position: absolute;
  top: -10px;
  left: -10px;
  width: 240px;
  height: 100px;
  background: linear-gradient(90deg, rgb(39, 122, 218), rgb(74, 230, 121), rgb(243, 169, 10), rgb(226, 20, 233), rgb(16, 172, 219));
  background-size: 400%;
  opacity: 0;
  z-index: -1;
  border-radius: 45px;
  transition: 0.6s;
}

.guang:hover::before {
  filter: blur(15px);
  opacity: 1;
  animation: move 8s linear alternate infinite;
}

总结

  • 关键是选择animation渐变还是选择长画布问题

    • 理论上animation+渐变也是可以的实现类似的效果,只不过涉及到button边缘效果就比较复杂了。
    • 相比而言长画布就很简单了
  • 第二个关键点是长画布的实现

    • 一个是button背景长画布
    • 一个是button边缘长画布

附送250套精选项目源码

源码截图

 源码获取:关注公众号「码农园区」,回复 【源码】,即可获取全套源码下载链接

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1834049.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【机器学习】第10章 聚类算法

一、概念 1.聚类 &#xff08;1&#xff09;是无监督学习&#xff0c;其实无监督学习就是无中生有&#xff0c;不给你标准答案&#xff08;标签啊啥的&#xff09;&#xff0c;然后让你自己来。 &#xff08;2&#xff09;聚类就是这样&#xff0c;让机器自己根据相似特征把相…

WACV2024 分割相关论文摘要小结速览67篇

WACV2024 分割相关论文摘要小结速览 Paper1 Robust Source-Free Domain Adaptation for Fundus Image Segmentation 摘要小结: 无监督域自适应&#xff08;UDA&#xff09;是一种学习技术&#xff0c;它将源域中从标记训练数据学习到的知识转移到只有未标记数据的目标域。这对…

星际航行概论分享

作者最近看到了一篇钱学森的著作《星际航行概论》 PDF格式下载&#xff1a; 星际航行概论.pdf: https://url83.ctfile.com/f/45573183-1272939884-48f07e?p7526 (访问密码: 7526)

【GlobalMapper精品教程】085:coverage格式转shp案例教程

文章目录 一、Coverage格式介绍二、globalmapper转换shp1. 加载coverage2. coverage转shp一、Coverage格式介绍 Coverage 是一种用于存储矢量数据的地理相关数据模型,它包含地理要素的空间(位置)数据和属性(描述性)数据。Coverage 使用一组要素类来表示地理要素。每个要素…

【包管理】Node.JS与Ptyhon安装

文章目录 Node.JSPtyhon Node.JS Node.js的安装通常包括以下几个步骤&#xff1a; 访问Node.js官网&#xff1a; 打开Node.js的官方网站&#xff08;如&#xff1a;https://nodejs.org/zh-cn/download/&#xff09;。 下载安装包&#xff1a; 根据你的操作系统选择对应的Node…

在Windows环境下设置定时任务(任务计划程序)(Python)

文章目录 前言一、准备执行的test.py文件二、准备test.bat批处理文件&#xff08;系统环境变量&#xff09;三、设置定时任务&#xff08;任务计划程序&#xff09; 前言 计划任务是系统的常见功能&#xff0c;利用任务计划功能&#xff0c;可以将任何脚本、程序或文档安排在某…

《Windows API每日一练》4.5 GDI映射模式

上一节讲述设置绘图模式时&#xff0c;包括设置背景模式、混合模式&#xff0c;还有一个就是映射模式。本节我们将详细讲述映射模式。 本节必须掌握的知识点&#xff1a; 设备坐标和逻辑坐标 视口和窗口 MM_TEXT映射模式 度量映射模式 自定义映射模式 第27练&#xff1a;GDI映…

Aigtek高压放大器在柔性爬行机器人驱动性能研究中的应用

实验名称&#xff1a;柔性爬行机器人的材料测试 研究方向&#xff1a;介电弹性体的最小能量结构是一种利用DE材料的电致变形与柔性框架形变相结合设计的新型柔性驱动器&#xff0c;所谓最小能量是指驱动器在平衡状态时整个系统的能量最小&#xff0c;当系统在外界的电压刺激下就…

归并排序个人见解

归并排序个人见解 思路实现代码实现题目 思路实现 归并排序属于分治算法&#xff0c;分治算法有三个步骤&#xff1a; 分&#xff1a;将问题划分为多个规模较小的子问题&#xff0c;这些子问题与原始问题相似。治&#xff1a;递归地解决这些子问题。如果子问题足够小&#xf…

【WEB前端2024】3D智体编程:乔布斯3D纪念馆-第42课-多人联机-实时互动

【WEB前端2024】3D智体编程&#xff1a;乔布斯3D纪念馆-第42课-多人联机-实时互动 使用dtns.network德塔世界&#xff08;开源的智体世界引擎&#xff09;&#xff0c;策划和设计《乔布斯超大型的开源3D纪念馆》的系列教程。dtns.network是一款主要由JavaScript编写的智体世界…

【JVM结构、JVM参数、JVM垃圾回收】

JVM&#xff1a;Java Virtual Machine java虚拟机 虚拟机&#xff1a;使用软件技术模拟出与具有完整硬件系统功能、运行在一个隔离环境中的计算机系统。 JVM官方文档&#xff1a;https://docs.oracle.com/javase/specs/jvms/se8/html/index.html java 一些命令 javac 将文件编…

【Netty】nio处理acceptreadwrite事件

&#x1f4dd;个人主页&#xff1a;五敷有你 &#x1f525;系列专栏&#xff1a;Netty ⛺️稳中求进&#xff0c;晒太阳 1.处理accept 1.1客户端代码 public class Client {public static void main(String[] args) {try (Socket socket new Socket("localhost…

秋招突击——6/16——复习{整理昨天的面试资料}——新作{删除链表倒数第n个节点}

文章目录 引言复习新作删除链表倒数第N个节点题目描述个人实现参考实现 总结 引言 主管面&#xff0c;面的很凄惨&#xff0c;不过无所谓了&#xff0c;我已经尽力了。上午都在整理的面经&#xff0c;没有复习算法&#xff0c;而且这两天要弄一下论文&#xff0c;二十号就要提…

Aspice介绍——测试流程

文章目录 ASPICE简介一、V字模型的示意二、测试领域2.1 SWE.6&#xff1a;软件合格性测试过程目的过程成果基本实践&#xff08;BP&#xff09; 2.2 SYS.4:系统集成和集成测试过程目的过程成果基本实践&#xff08;BP&#xff09; 2.3 SYS.5&#xff1a;系统合格性测试过程目的…

AI早班2024.6.18

先一步知道AI未来&#xff01; 全球AI新闻速递 1.绿米 AI 智能存在传感器 FP1E开售。 2.摩尔线程 师者AI&#xff1a;完成70亿参数教育AI大模型训练测试。 3.Google 在 AI 功能推出新功能&#xff0c;需要明确说明可能出错的地方。 4.北大、快手攻克复杂视频生成难题&#…

【unity笔记】三、冰山碰撞变成碎块效果

一、模型准备 共需准备两个模型&#xff0c;一个原始模型&#xff0c;一个破碎后的模型。 破碎后的模型制作教程&#xff1a; 下载Blender 导入原始模型在添加偏好设置中添加Cell Fracture插件&#xff0c;调整模型碎裂效果。导出&#xff0c;保存到项目预制体文件夹。 二、…

性能测试项目实战

项目介绍和部署 项目背景 轻商城项目是一个现在流行的电商项目。我们需要综合评估该项目中各个关键接口的性能&#xff0c;并给出优化建议&#xff0c;以满足项目上线后的性能需要。 项目功能架构 前台商城&#xff1a;购物车、订单、支付、优惠券等 后台管理系统&#xf…

基于springboot实现药店管理系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现药店管理系统演示 摘要 传统信息的管理大部分依赖于管理人员的手工登记与管理&#xff0c;然而&#xff0c;随着近些年信息技术的迅猛发展&#xff0c;让许多比较老套的信息管理模式进行了更新迭代&#xff0c;药品信息因为其管理内容繁杂&#xff0c;管理数…

wireshark使用情况与网口调试记录

wireshark使用情况与网口调试记录 前言wireshark无法获取本地数据方法一——Npcap方法二——WinPcap效果 UDP组播&#xff0c;却一直捕获到127.0.0.1总结 前言 在网口调试中&#xff0c;wireshark使用较多&#xff0c;常出现一些无法捕获或者ip获取数据不正确的情况&#xff0…

webpack工作流程

webpack工作流程 初始化参数&#xff1a;从配置文件和 Shell 语句中读取并合并参数,得出最终的配置对象用上一步得到的参数初始化 Compiler 对象加载所有配置的插件执行对象的 run 方法开始执行编译根据配置中的entry找出入口文件从入口文件出发,调用所有配置的Loader对模块进…