当前位置: 首页 > news >正文

HTML+CSS:飞翔按钮

效果演示

17-飞翔按钮.gif

实现了一个按钮的动画效果,当鼠标悬停在按钮上时,按钮的背景颜色和图标会发生变化,并且图标会旋转45度并向右移动1.2em,同时按钮中的文字也会向右移动5em。当鼠标点击按钮时,按钮会变小并向下移动0.1em。整个效果看起来像是按钮在飞翔或跳跃。

Code

<button><div class="svg-wrapper-1"><div class="svg-wrapper"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24" height="24"><path fill="none" d="M0 0h24v24H0z"></path><path fill="currentColor"d="M1.946 9.315c-.522-.174-.527-.455.01-.634l19.087-6.362c.529-.176.832.12.684.638l-5.454 19.086c-.15.529-.455.547-.679.045L12 14l6-8-8 6-8.054-2.685z"></path></svg></div></div><span>Send</span>
</button>
body {height: 100vh;display: flex;justify-content: center;align-items: center;background-color: #212121;
}button {font-family: inherit;font-size: 20px;background: royalblue;color: white;padding: 0.7em 1em;padding-left: 0.9em;display: flex;align-items: center;border: none;border-radius: 16px;overflow: hidden;transition: all 0.2s;cursor: pointer;
}button span {display: block;margin-left: 0.3em;transition: all 0.3s ease-in-out;
}button svg {display: block;transform-origin: center center;transition: transform 0.3s ease-in-out;
}button:hover .svg-wrapper {animation: fly-1 0.6s ease-in-out infinite alternate;
}button:hover svg {transform: translateX(1.2em) rotate(45deg) scale(1.1);
}button:hover span {transform: translateX(5em);
}button:active {transform: scale(0.95);
}@keyframes fly-1 {from {transform: translateY(0.1em);}to {transform: translateY(-0.1em);}
}

实现思路拆分

body {height: 100vh; /* 设置body高度为视口高度 */display: flex; /* 设置body元素为flex布局 */justify-content: center; /* 设置flex容器中内容的水平对齐方式为居中 */align-items: center; /* 设置flex容器中内容的垂直对齐方式为居中 */background-color: #212121; /* 设置body元素的背景颜色为深灰色 */
}

这段代码设置了页面的基本样式,包括高度、居中对齐方式和背景颜色。

button {font-family: inherit; /* 设置字体为继承父元素的字体 */font-size: 20px; /* 设置字体大小为20像素 */background: royalblue; /* 设置背景颜色为蓝色 */color: white; /* 设置字体颜色为白色 */padding: 0.7em 1em; /* 设置内边距为上下各0.7em,左右各1em */padding-left: 0.9em; /* 设置左内边距为0.9em */display: flex; /* 设置元素为flex布局 */align-items: center; /* 设置flex容器中内容的垂直对齐方式为居中 */border: none; /* 设置边框为无边框 */border-radius: 16px; /* 设置边框圆角为16像素 */overflow: hidden; /* 设置内容溢出隐藏 */transition: all 0.2s; /* 设置过渡效果持续时间为0.2秒 */cursor: pointer; /* 设置鼠标指针为手型 */
}

这段代码设置了按钮的基本样式,包括字体、字体大小、背景颜色、字体颜色、内边距、边框、边框圆角、溢出隐藏、过渡效果和鼠标指针。

button span {display: block; /* 设置元素为块级元素 */margin-left: 0.3em; /* 设置左侧外边距为0.3em */transition: all 0.3s ease-in-out; /* 设置过渡效果持续时间为0.3秒,缓动函数为ease-in-out */
}

这段代码设置了按钮中的文字样式,包括块级元素、左侧外边距和过渡效果。

button svg {display: block; /* 设置元素为块级元素 */transform-origin: center center; /* 设置变换原点为中心点 */transition: transform 0.3s ease-in-out; /* 设置过渡效果持续时间为0.3秒,缓动函数为ease-in-out */
}

这段代码设置了按钮中的图标样式,包括块级元素、变换原点和过渡效果。

button:hover.svg-wrapper {animation: fly-1 0.6s ease-in-out infinite alternate; /* 设置鼠标悬停时,动画名称为fly-1,持续时间为0.6秒,缓动函数为ease-in-out,无限循环,交替执行 */
}

这段代码设置了鼠标悬停时,按钮中的图标的动画效果,包括动画名称、持续时间、缓动函数、无限循环和交替执行。

button:hover svg {transform: translateX(1.2em) rotate(45deg) scale(1.1); /* 设置鼠标悬停时,图标向右移动1.2em,旋转45度,放大1.1倍 */
}

这段代码设置了鼠标悬停时,按钮中的图标的变换效果,包括向右移动1.2em,旋转45度,放大1.1倍。

button:hover span {transform: translateX(5em); /* 设置鼠标悬停时,文字向右移动5em */
}

这段代码设置了鼠标悬停时,按钮中的文字的变换效果,包括向右移动5em。

button:active {transform: scale(0.95); /* 设置鼠标点击时,按钮放大0.95倍 */
}

这段代码设置了鼠标点击时,按钮的变换效果,包括放大0.95倍。

@keyframes fly-1 {from {transform: translateY(0.1em); /* 设置动画的起始状态,将图标向下移动0.1em */}to {transform: translateY(-0.1em); /* 设置动画的结束状态,将图标向上移动0.1em */}
}

这段代码定义了一个名为fly-1的动画,包括起始状态和结束状态。在起始状态时,图标向下移动0.1em,在结束状态时,图标向上移动0.1em。这个动画会在鼠标悬停时无限循环执行,交替向下和向上移动图标。

相关文章:

  • 04 单链表
  • Go 爬虫之 colly 从入门到不放弃指南
  • HTTP 第二章 发展历史
  • 电工技术实验指导书-万用表的使用
  • Django随笔
  • linux 抓包
  • 【Docker】未来已来 | Docker技术在云计算、边缘计算领域的应用前景
  • Java面试汇总——jvm篇
  • SQL慢语句执行的很慢,如何分析优化呢,(如何优化的呢?)
  • 【Golang】Perl 正则表达式语法的支持示例
  • 浅谈情绪的分类合集
  • redis总结--常见问题与解决办法,推荐等级
  • 单片机I/O口驱动MOS管
  • Linux设备管理模型-01:基础数据结构
  • 【Docker】在Windows操作系统安装Docker前配置环境
  • Git的一些常用操作
  • Java 实战开发之spring、logback配置及chrome开发神器(六)
  • Objective-C 中关联引用的概念
  • PHP变量
  • Promise面试题2实现异步串行执行
  • 后端_ThinkPHP5
  • 简单数学运算程序(不定期更新)
  • 漫谈开发设计中的一些“原则”及“设计哲学”
  • 面试总结JavaScript篇
  • 数据结构java版之冒泡排序及优化
  • ​​快速排序(四)——挖坑法,前后指针法与非递归
  • ​flutter 代码混淆
  • ​Kaggle X光肺炎检测比赛第二名方案解析 | CVPR 2020 Workshop
  • #我与Java虚拟机的故事#连载06:收获颇多的经典之作
  • (c语言)strcpy函数用法
  • (C语言)输入自定义个数的整数,打印出最大值和最小值
  • (M)unity2D敌人的创建、人物属性设置,遇敌掉血
  • (zt)基于Facebook和Flash平台的应用架构解析
  • (十八)三元表达式和列表解析
  • (推荐)叮当——中文语音对话机器人
  • (最简单,详细,直接上手)uniapp/vue中英文多语言切换
  • ******之网络***——物理***
  • .NET 发展历程
  • .NET文档生成工具ADB使用图文教程
  • .pub是什么文件_Rust 模块和文件 - 「译」
  • @EnableConfigurationProperties注解使用
  • [] 与 [[]], -gt 与 > 的比较
  • [2017][note]基于空间交叉相位调制的两个连续波在few layer铋Bi中的全光switch——
  • [2023年]-hadoop面试真题(一)
  • [Angular 基础] - 表单:响应式表单
  • [ASP.NET 控件实作 Day7] 设定工具箱的控件图标
  • [BZOJ 2142]礼物(扩展Lucas定理)
  • [C#]C#学习笔记-CIL和动态程序集
  • [HNOI2018]排列
  • [java]删除数组中的某一个元素
  • [java进阶]——方法引用改写Lambda表达式
  • [JMS 3] ActiveMQ实现简单的helloworld
  • [mmucache]-ARMV8-aarch64的虚拟内存(mmutlbcache)介绍-概念扫盲
  • [one_demo_1]php中的文件锁
  • [pytorch入门] 2. tensorboard