首页 > Python资料 博客日记
探索CSS动画下的按钮交互美学
2024-10-25 06:00:08Python资料围观28次
这篇文章介绍了探索CSS动画下的按钮交互美学,分享给大家做个参考,收藏Python资料网收获更多编程知识
效果演示
这段代码通过SVG和CSS动画创建了一个具有视觉吸引力的按钮,当用户与按钮交互时(如悬停、聚焦或按下),按钮会显示不同的动画效果。
HTML
<button class="button">
<div class="dots_border"></div>
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" class="sparkle">
<path class="path" stroke-linejoin="round" stroke-linecap="round" stroke="black" fill="black"
d="M14.187 8.096L15 5.25L15.813 8.096C16.0231 8.83114 16.4171 9.50062 16.9577 10.0413C17.4984 10.5819 18.1679 10.9759 18.903 11.186L21.75 12L18.904 12.813C18.1689 13.0231 17.4994 13.4171 16.9587 13.9577C16.4181 14.4984 16.0241 15.1679 15.814 15.903L15 18.75L14.187 15.904C13.9769 15.1689 13.5829 14.4994 13.0423 13.9587C12.5016 13.4181 11.8321 13.0241 11.097 12.814L8.25 12L11.096 11.187C11.8311 10.9769 12.5006 10.5829 13.0413 10.0423C13.5819 9.50162 13.9759 8.83214 14.186 8.097L14.187 8.096Z">
</path>
<path class="path" stroke-linejoin="round" stroke-linecap="round" stroke="black" fill="black"
d="M6 14.25L5.741 15.285C5.59267 15.8785 5.28579 16.4206 4.85319 16.8532C4.42059 17.2858 3.87853 17.5927 3.285 17.741L2.25 18L3.285 18.259C3.87853 18.4073 4.42059 18.7142 4.85319 19.1468C5.28579 19.5794 5.59267 20.1215 5.741 20.715L6 21.75L6.259 20.715C6.40725 20.1216 6.71398 19.5796 7.14639 19.147C7.5788 18.7144 8.12065 18.4075 8.714 18.259L9.75 18L8.714 17.741C8.12065 17.5925 7.5788 17.2856 7.14639 16.853C6.71398 16.4204 6.40725 15.8784 6.259 15.285L6 14.25Z">
</path>
<path class="path" stroke-linejoin="round" stroke-linecap="round" stroke="black" fill="black"
d="M6.5 4L6.303 4.5915C6.24777 4.75718 6.15472 4.90774 6.03123 5.03123C5.90774 5.15472 5.75718 5.24777 5.5915 5.303L5 5.5L5.5915 5.697C5.75718 5.75223 5.90774 5.84528 6.03123 5.96877C6.15472 6.09226 6.24777 6.24282 6.303 6.4085L6.5 7L6.697 6.4085C6.75223 6.24282 6.84528 6.09226 6.96877 5.96877C7.09226 5.84528 7.24282 5.75223 7.4085 5.697L8 5.5L7.4085 5.303C7.24282 5.24777 7.09226 5.15472 6.96877 5.03123C6.84528 4.90774 6.75223 4.75718 6.697 4.5915L6.5 4Z">
</path>
</svg>
<span class="text_button">点赞关注会变聪明~</span>
</button>
- button:定义了一个按钮元素,它将应用下面的CSS样式。
- dots_border:一个用于创建背景动画效果的DIV元素。
- sparkle:一个SVG元素,包含三条路径(path),用于创建一个闪光效果。
- text_button:按钮上显示的文本。
CSS
.button {
--black-700: hsla(0 0% 12% / 1);
--border_radius: 9999px;
--transtion: 0.3s ease-in-out;
--offset: 2px;
cursor: pointer;
position: relative;
display: flex;
align-items: center;
gap: 0.5rem;
transform-origin: center;
padding: 1rem 2rem;
background-color: transparent;
border: none;
border-radius: var(--border_radius);
transform: scale(calc(1 + (var(--active, 0) * 0.1)));
transition: transform var(--transtion);
}
.button::before {
content: "";
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
width: 100%;
height: 100%;
background-color: var(--black-700);
border-radius: var(--border_radius);
box-shadow: inset 0 0.5px hsl(0, 0%, 100%), inset 0 -1px 2px 0 hsl(0, 0%, 0%),
0px 4px 10px -4px hsla(0 0% 0% / calc(1 - var(--active, 0))),
0 0 0 calc(var(--active, 0) * 0.375rem) hsl(260 97% 50% / 0.75);
transition: all var(--transtion);
z-index: 0;
}
.button::after {
content: "";
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
width: 100%;
height: 100%;
background-color: hsla(260 97% 61% / 0.75);
background-image: radial-gradient(at 51% 89%,
hsla(266, 45%, 74%, 1) 0px,
transparent 50%),
radial-gradient(at 100% 100%, hsla(266, 36%, 60%, 1) 0px, transparent 50%),
radial-gradient(at 22% 91%, hsla(266, 36%, 60%, 1) 0px, transparent 50%);
background-position: top;
opacity: var(--active, 0);
border-radius: var(--border_radius);
transition: opacity var(--transtion);
z-index: 2;
}
.button:is(:hover, :focus-visible) {
--active: 1;
}
.button:active {
transform: scale(1);
}
.button .dots_border {
--size_border: calc(100% + 2px);
overflow: hidden;
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
width: var(--size_border);
height: var(--size_border);
background-color: transparent;
border-radius: var(--border_radius);
z-index: -10;
}
.button .dots_border::before {
content: "";
position: absolute;
top: 30%;
left: 50%;
transform: translate(-50%, -50%);
transform-origin: left;
transform: rotate(0deg);
width: 100%;
height: 2rem;
background-color: white;
mask: linear-gradient(transparent 0%, white 120%);
animation: rotate 2s linear infinite;
}
@keyframes rotate {
to {
transform: rotate(360deg);
}
}
.button .sparkle {
position: relative;
z-index: 10;
width: 1.75rem;
}
.button .sparkle .path {
fill: currentColor;
stroke: currentColor;
transform-origin: center;
color: hsl(0, 0%, 100%);
}
.button:is(:hover, :focus) .sparkle .path {
animation: path 1.5s linear 0.5s infinite;
}
.button .sparkle .path:nth-child(1) {
--scale_path_1: 1.2;
}
.button .sparkle .path:nth-child(2) {
--scale_path_2: 1.2;
}
.button .sparkle .path:nth-child(3) {
--scale_path_3: 1.2;
}
@keyframes path {
0%,
34%,
71%,
100% {
transform: scale(1);
}
17% {
transform: scale(var(--scale_path_1, 1));
}
49% {
transform: scale(var(--scale_path_2, 1));
}
83% {
transform: scale(var(--scale_path_3, 1));
}
}
.button .text_button {
position: relative;
z-index: 10;
background-image: linear-gradient(90deg,
rgb(238, 101, 10) 0%,
hsla(0 0% 100% / var(--active, 0)) 120%);
background-clip: text;
font-size: 1.1rem;
font-weight: 600;
color: transparent;
}
- .button:定义按钮的基本样式,包括光标样式、定位、显示方式、间距、填充、背景颜色、边框、圆角和变换。
- .button::before和.button::after:使用伪元素创建按钮的背景和发光效果,包括阴影和渐变效果。
- .button:is(:hover, :focus-visible):定义当鼠标悬停在按钮上或按钮获得焦点时的样式,包括激活状态的变量。
- .button:active:定义按钮被按下时的样式,包括缩放效果。
- .button .dots_border:定义背景动画效果的样式,包括位置、大小、圆角和层级。
- .button .dots_border::before:定义背景动画的样式,包括位置、旋转动画和渐变效果。
- @keyframes rotate:定义旋转动画的关键帧。
- .button .sparkle:定义SVG元素的位置和层级。
- .button .sparkle .path:定义SVG路径的样式,包括填充颜色和变换。
- .button:is(:hover, :focus) .sparkle .path:定义当鼠标悬停或按钮获得焦点时SVG路径的动画效果。
- @keyframes path:定义SVG路径的缩放动画的关键帧。
- .button .text_button:定义按钮文本的样式,包括背景渐变和文本剪辑。
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:jacktools123@163.com进行投诉反馈,一经查实,立即删除!
标签:
相关文章
最新发布
- 【Python】selenium安装+Microsoft Edge驱动器下载配置流程
- Python 中自动打开网页并点击[自动化脚本],Selenium
- Anaconda基础使用
- 【Python】成功解决 TypeError: ‘<‘ not supported between instances of ‘str’ and ‘int’
- manim边学边做--三维的点和线
- CPython是最常用的Python解释器之一,也是Python官方实现。它是用C语言编写的,旨在提供一个高效且易于使用的Python解释器。
- Anaconda安装配置Jupyter(2024最新版)
- Python中读取Excel最快的几种方法!
- Python某城市美食商家爬虫数据可视化分析和推荐查询系统毕业设计论文开题报告
- 如何使用 Python 批量检测和转换 JSONL 文件编码为 UTF-8
点击排行
- 版本匹配指南:Numpy版本和Python版本的对应关系
- 版本匹配指南:PyTorch版本、torchvision 版本和Python版本的对应关系
- Python 可视化 web 神器:streamlit、Gradio、dash、nicegui;低代码 Python Web 框架:PyWebIO
- 相关性分析——Pearson相关系数+热力图(附data和Python完整代码)
- Python与PyTorch的版本对应
- Anaconda版本和Python版本对应关系(持续更新...)
- Python pyinstaller打包exe最完整教程
- Could not build wheels for llama-cpp-python, which is required to install pyproject.toml-based proj