HTML+CSS:飞翔按钮

效果演示

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

Code

html 复制代码
<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>
css 复制代码
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);
    }
}

实现思路拆分

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

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

css 复制代码
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; /* 设置鼠标指针为手型 */
}

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

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

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

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

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

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

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

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

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

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

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

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

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

css 复制代码
@keyframes fly-1 {
  from {
    transform: translateY(0.1em); /* 设置动画的起始状态,将图标向下移动0.1em */
  }

  to {
    transform: translateY(-0.1em); /* 设置动画的结束状态,将图标向上移动0.1em */
  }
}

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

相关推荐
桂月二二24 分钟前
探索前端开发中的 Web Vitals —— 提升用户体验的关键技术
前端·ux
hunter2062062 小时前
ubuntu向一个pc主机通过web发送数据,pc端通过工具直接查看收到的数据
linux·前端·ubuntu
qzhqbb2 小时前
web服务器 网站部署的架构
服务器·前端·架构
刻刻帝的海角2 小时前
CSS 颜色
前端·css
浪浪山小白兔3 小时前
HTML5 新表单属性详解
前端·html·html5
lee5763 小时前
npm run dev 时直接打开Chrome浏览器
前端·chrome·npm
2401_897579653 小时前
AI赋能Flutter开发:ScriptEcho助你高效构建跨端应用
前端·人工智能·flutter
limit for me4 小时前
react上增加错误边界 当存在错误时 不会显示白屏
前端·react.js·前端框架
浏览器爱好者4 小时前
如何构建一个简单的React应用?
前端·react.js·前端框架
qq_392794484 小时前
前端缓存策略:强缓存与协商缓存深度剖析
前端·缓存