效果如下:
-
外层容器 (
shop_wrap
):- 设置外边距 (
padding
) 提供一些间距和边距
- 设置外边距 (
-
圆形容器 (
TheCircle
):- 使用相对定位 (
position: relative
),宽度和高度均为180px
,形成一个圆形按钮 - 圆角半径 (
border-radius
) 设置为50%
,使其呈现圆形 - 边框 (
border
) 和阴影 (box-shadow
) 提供边框和轻微的立体感 - 设置溢出隐藏 (
overflow: hidden
),确保水波纹效果在容器内显示 - 鼠标悬停时显示手型光标 (
cursor: pointer
)
- 使用相对定位 (
-
水波纹容器 (
Water
):- 绝对定位 (
position: absolute
),覆盖在圆形容器上 - 设置宽度和高度为
100%
,形成一个完整的圆形水波纹效果 - 设置背景颜色 (
background-color
) 为水波纹的颜色 - 圆角半径 (
border-radius
) 同样设置为50%
- 溢出隐藏 (
overflow: hidden
),确保水波纹效果不超出容器
- 绝对定位 (
-
文字居中显示 (
CenteredText
):- 绝对定位 (
position: absolute
),位于水波纹容器中心 - 使用
transform
属性将文字居中显示
- 绝对定位 (
-
水波纹效果 (
Water::after
和Water::before
):- 使用
::after
和::before
伪元素创建水波纹效果 - 设置宽度和高度为
150%
,略大于容器,以确保水波纹效果覆盖整个容器 - 设置圆角半径,形成圆形效果
- 设置动画 (
animation
),通过关键帧 (@keyframes
) 实现水波纹的旋转和缩放效果
- 使用
源码如下:
<template><div class="shop_wrap"><div class="TheCircle"><div class="Water"><span class="CenteredText">上传图片</span></div></div></div>
</template><script setup>
</script><style lang="scss" scoped>
.shop_wrap {padding: 50px; /* 设置外层容器的内边距 */.TheCircle {position: relative;width: 180px; /* 设置圆形容器的宽度 */height: 180px; /* 设置圆形容器的高度 */border-radius: 50%; /* 圆形容器的圆角半径 */border: 1px solid #38b973; /* 圆形容器的边框样式 */box-shadow: 0 0 0 1px #38b973; /* 圆形容器的阴影样式 */overflow: hidden; /* 确保容器裁剪水波纹效果 */cursor: pointer; /* 鼠标悬停时显示手型光标 */}.Water {position: absolute;top: 0;left: 0;width: 100%;height: 100%;background-color: #38b973; /* 水波纹的颜色 */border-radius: 50%;overflow: hidden;z-index: 1; /* 确保水波纹在文字之上 */}.CenteredText {position: absolute;top: 50%;left: 50%;transform: translate(-50%, -50%); /* 居中显示文字 */color: #333; /* 文字颜色 */z-index: 2; /* 确保文字在水波纹之上 */}.Water::after {content: '';position: absolute;top: 0;left: 50%;width: 150%;height: 150%;border-radius: 40%;background-color: rgb(240, 228, 228); /* 水波纹内部颜色 */animation: real 5s linear infinite; /* 实际水波纹的动画效果 */}@keyframes real {0% {/* 初始状态:向上平移50%、左平移65%并旋转0度 */transform: translate(-50%, -65%) rotate(0deg); }100% {/* 终止状态:向上平移50%、左平移65%并旋转360度,形成旋转一周的效果 */transform: translate(-50%, -65%) rotate(360deg); }}.Water::before {content: '';position: absolute;top: 0;left: 50%;width: 150%;height: 150%;border-radius: 42%;background-color: rgb(240, 228, 228, 0.2); /* 水波纹外部颜色及透明度 */animation: virtual 7s linear infinite; /* 虚拟水波纹的动画效果 */}@keyframes virtual {0% {/* 初始状态:向上平移50%、左平移60%,不进行缩放,旋转0度 */transform: translate(-50%, -60%) scale(1) rotate(0deg); }100% {/* 终止状态:向上平移50%、左平移60%,进行1.1倍的缩放,旋转360度,形成旋转一周的效果并放大水波纹 */transform: translate(-50%, -60%) scale(1.1) rotate(360deg); }}
}
</style>