CSS技巧专栏:一日一例 7 - 纯CSS实现炫光边框按钮特效

CSS技巧专栏:一日一例 7 - 纯CSS实现炫光边框按钮特效

本例效果图

案例分析

相信你可能已经在网络见过类似这样的流光的按钮,在羡慕别人做的按钮这么酷的时候,你有没有扒一下它的源代码的冲动?或者你当时有点冲动,却转眼忘却了。今天,刚巧,你又看到它了,今天跟我一起扒一扒它的源代码。

左边按钮分析:

1. 圆角按钮的光线效果,这个稍微费劲些。难点:动画层的路径移动

2. 倒影

特此说明

本专题专注于讲解如何使用CSS制作按钮特效。前置的准备工作和按钮的基本样式,都在本专栏第一篇文章中又详细说明。自本专栏第四篇文章起,本专栏都将直接跳过前面的内容,不再重复复制,需要了解按钮基础样式的同学,请移步:《CSS技巧 - 一日一例 (1):会讨好的热情按钮》。

按钮布局

<div class="container"><button class="base ">蓬门今始为君开</button>
</div>   

基本样式

.base{position: relative;   padding: 1rem 3rem; /* 用 padding 撑起按钮的宽度和高度 ,并确保了按钮文字水平方向居中 */font-family: "微软雅黑", sans-serif;font-size: 1.5rem;  line-height: 1.5rem; /* 行高和字号大小相等,可以实现按钮文字在按钮内垂直居中 */ font-weight:700;color: var(--color);  /* 文字颜色为预定义的前景色 */cursor: pointer;   /* 鼠标移动到按钮上时候的形状:手型 */user-select: none;  /* 让用户不能选择按钮上的文字 */white-space: nowrap; /* 避免英文单词间的空格导致文字换行 */border-radius: 2rem; text-decoration: none; text-transform:uppercase; /* 字母自动修正为大写 */transition: all .5s; /* 按钮响应动画效果的持续时间 */margin: 1.5rem 2rem;
}

对的,完成上面两步,咱们的按钮基本样式就这样了。接下来就是实现按钮的美化了。

按钮样式

如果是做直角的流光效果,相对比较容易。做四条颜色渐变的线,分别四个动画依次动起来就可以实现了。但要实现圆角的光效,做直线是不行的。那么这个就需要其他方法了。

怎么解决这个问题呢?我用一张图来表达一下这个动画的基本解决思路:

按钮光效解决方案 

解决思路

1. 按钮层在最下面,设定overflow:hidden。

2. 最上层放一个蒙版层,用来遮挡动画层。

3. 在两个层中间放一层动画层,做个圆形在这个层沿着按钮层的轮廓轮廓滚动。这样,露出的部分就是我们看到的流光的效果。

有了思路,我们就开始:

写样式表

先修改一下基本布局:

<button class="base button">花径不曾缘客扫</button>

接下来,我们的按钮样式就着落在这个 button 类上。

.button {   background:none;  position: relative;color: #fff;z-index: 0;overflow: hidden;transition: 300ms;-webkit-box-reflect: below 1px linear-gradient(transparent, rgba(0, 0, 0, .2));   
}
.button:before {content: '';position: absolute;top:1px;left: 1px;border:1px solid #666;border-radius: 2rem;background: var(--main-bg-color);width: calc(100% - 4px);height: calc(100% - 4px); z-index: -1;transition: 300ms;  
}

写到这里,我们就有了两个层:按钮层(button)和 蒙版层(button:before),按钮样子也变成了这样:

接下来,我们要给它增加中间滚动的层:

.moving-element{position: absolute;top: 0px;left: 0px;width: 110px;height: 110px;    border-radius: 2rem;  /* 圆形按钮 */background-image: radial-gradient(#fff 40%,transparent 80%);  /* 径向渐变填充,白色到透明 */z-index: -2;  
}

这个层要加载按钮标签中:

<button class="base button">花径不曾缘客扫<span class="moving-element"></span>
</button>

接下来,我们看看这个层是不是出现了:

没错,虽然稍显僵硬,但它还是出现了。我们先看看它现在的位置:

接下来,就是让它动起来。为了方便看到它,我们先把 before层的背景色注释掉。

按钮常态动画

有了按钮的基本样式,接下来就是加动画效果在上面。这个按钮的动画,要用到CSS3关键帧动画。

我在上图中,用红色标注了六个点,这就是我们要改变位置的六个关键帧。首先,我先把这个滚动的层,调整到左上角的红点位置,作为起点。

.moving-element{position: absolute;top: 0px;left: 0px;width: 110px;height: 110px;    border-radius: 2rem;  /* 圆形按钮 */background-image: radial-gradient(#fff 40%,transparent 80%);  /* 径向渐变填充,白色到透明 */z-index: -2;  transform: translate(-45px, -55px);  /* 定位动画第一帧的起点 */filter:blur(10px); /* 让渐变填充的圆形光球更顺滑一些 */
}

我们先绑定动画到这个圆形球上,再进行动画的编写和调整。

animation: moveAround 2s linear infinite;

接下来,就开始动手写动画:定义六个关键帧,为了让关键帧过渡平滑,我们需要调整六个点的时间间隔。第一个阶段,是从起点直接向右,水平运动到右侧的圆角的第一个弧形拐点。这个阶段,我们暂时把它定义为40%。然后圆弧间的两段动画各占5%。这样,我们的关键帧时间安排大概如下:

@keyframes moveAround {0%{}40%{}45%{}50%{}90%{}95%{}100%{}
}

然后,我们给每个关键帧定义光球的位置。

我们知道光球的运动定位是以它自己的圆心为中心的。所以,我们只要在第一帧把圆心定位在标记的红点上。然后按照时间设计运动路线就行。

这里还有一个问题,为了提高按钮的通用性,我们不能把它的点位写成固定的px,所以,我们要用:left:30%,top:20% 这样的形式,这样即使未来按钮有一定的大小变化,我们的动画可以不做修改(或者仅做少量修改)就可以适用。

接下来,我们来调整圆球的位置:

@keyframes moveAround {0%{left:0%;top:0%}40%{ left:90%; top:0% }45%{}50%{}90%{}95%{}100%{}
}

这是第一段动画,把小球从左侧移动到右侧,按钮宽度90%的位置。

看来没有问题,接下来,我们完成剩下各个阶段的动画。

@keyframes moveAround {0%{ left:0%;top:0% }40%{ left:90%; top:0% }45%{ left:110%;top:30% }50%{ left:90%;top:100% }90%{ left:0%;top:100% }95%{ left:-30%;top:30% }100%{ left:-0%;top:0% }
}

看起来还有些生硬,我们现在把 蒙版层的背景颜色加上,看看效果如何:

好吧,比预想的效果在圆角那里还是稍显生硬,这个就需要在增加关键帧并且调整时间间隔来实现了。在这里,我就不做更细致的调整了。各位看官可以自己动手尝试一下。

接下来,我们要做:

按钮响应动画

.button:hover{transition: 300ms;color: #ffbf00;  
}
.button:hover:before{border:1px solid #664d00;transition: 300ms;  
}
.button:hover .moving-element{transition: 300ms;background-image: radial-gradient(#ffd966 40%,transparent 80%);
}

好了,这样的话,这个 纯CSS实现炫光边框按钮特效 就完成了。

按钮完成

Q:第二个按钮呢?你怎么不写?

A:哈哈哈,那个按钮,当作业吧!感兴趣的小伙伴,可以去试试写第二个按钮!

CSS学习的过程,也是不断思考的过程。在学习的路上,我们共勉!

好了,写到这里,今天的 CSS技巧分享 - 一日一例 就算写完了。愿大家学习进步,薪水增加,职位高升!收到我的祝福的小伙伴,收藏+点赞+评论啊~ 我在评论区等你们聊天~

本专栏其他文章:

CSS技巧专栏:一日一例1.会讨好的热情按钮

CSS技巧专栏:一日一例 2.纯CSS实现 多彩边框按钮特效

CSS技巧专栏:一日一例 3.纯CSS实现炫酷多彩按钮特效

CSS技巧专栏:一日一例 4.纯CSS实现两款流光溢彩的酷炫按钮特效

CSS技巧专栏:一日一例 5-纯CSS实现背景色从四周向中心填充的按钮特效

CSS技巧专栏:一日一例 6 - 纯CSS实现粉红色跳出来的立体按钮特效

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

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

相关文章

【PostgreSQL】PostgreSQL简史

博主介绍&#xff1a;✌全网粉丝20W&#xff0c;CSDN博客专家、Java领域优质创作者&#xff0c;掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围&#xff1a;SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物…

基于python的百度资讯爬虫的设计与实现

研究背景 随着互联网和信息技术的飞速发展&#xff0c;网络已经成为人们获取信息的主要来源之一。特别是搜索引擎&#xff0c;作为信息检索的核心工具&#xff0c;极大地改变了人们获取信息的方式。其中&#xff0c;百度作为中国最受欢迎的搜索引擎之一&#xff0c;其新闻搜索…

开发扫地机器人系统时无法兼容手机解决方案

在开发扫地机器人系统时&#xff0c;遇到无法兼容手机的问题&#xff0c;可以从以下几个方面寻求解决方案&#xff1a; 一、了解兼容性问题根源 ① 操作系统差异&#xff1a;不同手机可能运行不同的操作系统&#xff08;如iOS、Android&#xff09;&#xff0c;且即使是同一操…

leetcode简单题27 N.119 杨辉三角II rust描述

// 直接生成杨辉三角当前行 pub fn get_row(row_index: i32) -> Vec<i32> {let mut row vec![1; (row_index 1) as usize];for i in 1..row_index as usize {for j in (1..i).rev() {row[j] row[j] row[j - 1];}}row } // 空间优化的方法 pub fn get_row2(row_ind…

Java中的final关键字详解

Java中的final关键字详解 大家好&#xff0c;我是微赚淘客系统3.0的小编&#xff0c;是个冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; 1. final关键字的基本用法 在Java中&#xff0c;final关键字可以用来修饰类、方法和变量&#xff0c;具有不同的含义和作用…

【QT】label适应图片(QImage)大小;图片适应label大小

目录 0.简介 1.详细代码 1&#xff09;label适应img大小 2&#xff09;img适应label大小 0.简介 一个小demo &#xff0c;想在QLabel中放一张QImage的图片&#xff0c;我有一张图片叫【bird.jpg】&#xff0c;是提前放在资源文件中的&#xff0c;直接显示在label上后&#…

【机器学习入门】拥抱人工智能,从机器学习开始

拥抱人工智能&#xff0c;从机器学习开始 目录&#xff1a; 1. 机器学习&#xff1a;一种实现人工智能的方法 2. 机器学习算法&#xff1a;是使计算机具有智能的关键 3. Anaconda&#xff1a;初学Python、入门机器学习的首选 4. 总结 转载链接&#xff1a; 文章-阿里云开发者社…

【LeetCode:试题 16.06. 最小差 + 双指针 + 防止整型溢出】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

ELK企业级日志分析

目 录 一、ELK简介 1.1 elasticsearch简介 1.2 logstash简介 1.3 kibana简介 1.4 ELK的好处 1.5 ELK的工作原理 二、部署ELK 2.1 部署elasticsearch(集群) 2.1.1 修改配置文件 2.1.2 修改系统参数 2.1.2.1 修改systemmd服务管理器 2.1.2.2 性能调优参数 2.1.2.3 …

Python编程工具PyCharm和Jupyter Notebook的使用差异

在编写Python程序时需要用到相应的编程工具&#xff0c;PyCharm和Jupyter Notebook是最常用2款软件。 PyCharm是很强大的综合编程软件&#xff0c;代码提示、代码自动补全、语法检验、文本彩色显示等对于新手来说实在太方便了&#xff0c;但在做数据分析时发现不太方便&#xf…

phpinfo

phpinfo() 是 PHP 中的一个内置函数&#xff0c;用于显示关于 PHP 配置的大量信息&#xff0c;包括已安装的扩展、PHP 版本、服务器信息、环境变量、注册的流封装器和包装器、路径、内存使用情况、上传文件大小限制、脚本运行时间限制等等。这对于调试和优化 PHP 应用程序非常有…

手写实现简单Redis命令客户端功能

RESP协议 Redis 的客户端和服务端之间采取了一种名为 Redis序列化的协议&#xff08;REdis Serialization Protocol&#xff0c;简称RESP&#xff09;&#xff0c;是基于 TCP 的应用层协议 &#xff0c;RESP 底层采用的是 TCP 的连接方式&#xff0c;通过 TCP 进行数据传输&am…

layui前端开发-记录一次弹窗嵌套表格功能的开发

1.碎碎念&#xff1a; 前端是真的难写哇&#xff0c;写的巨烂&#xff0c;毕竟平时很少写前端&#xff0c;很容易忘记。每次写都要抱着官方文档看&#xff0c;特此记录一下layui的使用。 大概就是打开一个弹窗实现一些button然后再渲染一个表格上去。 2.code&#xff1a; <…

基于嵌入式Linux的高性能车载娱乐系统设计与实现 —— 融合Qt、FFmpeg和CAN总线技术

随着汽车智能化的发展&#xff0c;车载娱乐系统已成为现代汽车的标配。本文介绍了一个基于Linux的车载娱乐系统的设计与实现过程。该系统集成了音视频娱乐、导航、车辆信息显示等功能&#xff0c;旨在提供安全、便捷、丰富的驾驶体验。 1. 项目概述 随着汽车智能化的发展&…

240717.学习日志——51单片机C语言版学习总结

课程资料 视频&#xff1a;51单片机入门教程&#xff1a;2020版 书籍&#xff1a;手把手教你学51单片机 开发板&#xff1a;普中51实验版 课程目录 1-1 课程简介 1-2 开发工具介绍及软件安装 1-3 单片机及开发板介绍 2-1 点亮一个LED 2-2 LED闪烁 2-3 LED流水灯 3-1…

postgresql删除用户

背景 **角色与用户**&#xff1a;在 PostgreSQL 中&#xff0c;用户和组的概念是通过“角色”来统一实现的。角色可以有登录权限&#xff08;在这种情况下&#xff0c;它们通常被称为“用户”&#xff09;&#xff0c;也可以没有&#xff08;在这种情况下&#xff0c;它们通常用…

Flutter笔记--WebSocket

Flutter中WebSocket这一块主要用的是插件web_socket_channel&#xff0c;它主要基于 WebSocket 协议&#xff0c;通过该协议实现与服务器之间的双向通信&#xff1b; web_socket_channel 插件的几个主要步骤&#xff1a; 1 连接到WebSocket服务器: 使用 WebSocketChannel.conn…

解决VSCode自动识别文件编码

在VScode 的 设置界面 输入 autoGuess 关键字 &#xff0c;勾选启用即可自动识别&#xff01;&#xff01;&#xff01;

高通Android 12 设置Global属性为null问题

1、最近在做app调用framework.jar需求&#xff0c;尝试在frameworks/base/packages/SettingsProvider/res/values/defaults.xml增加属性 <integer name"def_xxxxx">1</integer> 2、在frameworks\base\packages\SettingsProvider\src\com\android\provide…

LabVIEW电路产品功能自动检测系统

开发基于LabVIEW的电路产品功能自动检测系统。该系统通过整合先进的硬件和软件技术&#xff0c;实现了电路产品的自动化测试&#xff0c;显著提高了测试效率和准确性&#xff0c;对于提升电子产品的可靠性和工作效率具有重要意义。 项目背景 在电子制造业中&#xff0c;电路产…