先上效果图
布局解析:
背景和文字就没啥好说的了,直接说关键部分
1.图标绘制 class 命名为 icon_local
看起来很复杂其实很简单 首先咱们画个正方形然后旋转45度
width: 60rpx; height: 60rpx; background: #89849b; transform: rotate(-45deg); display: flex; align-items: center; justify-content: center;
接下来让它变成小气球的样子 只要设置border-radius即可
transform: rotate(-45deg);
然后给它中心加个小圆圈 这里用css的伪元素 after
由于我们上边设置了 flex布局 并且让内容全居中了就不用管小圆圈位置问题了
.icon_local:after
content: ''; width: 26rpx; height: 26rpx; background: #2f2f2f; border-radius: 50%;
小小的图标就完成了,接下来是下边的波纹动画
这个动画其实也是用了旋转 只不过是3D的
首先画一个小圆圈作为定位图标的阴影
命名类名为 .shadow
border-radius: 50%; height: 28rpx; width: 28rpx; z-index: -2; /*放到icon底下*/
接下来是波纹动画
先画一个圆 白色边框 这里用的是 box-shadow来完成 依然用伪元素 after
.shadow:after
content: ""; border-radius: 50%; height: 80rpx; width: 80rpx; position: absolute; margin: -26rpx 0 0 -26rpx; opacity: 1; box-shadow: 0 0 2rpx 4rpx #89849b;
动画 逻辑是先缩小、透明度为0 然后到50%的时候透明度设置为1 到100%时 放大1.2倍透明度为0
@keyframes pulsate { 0% { transform: scale(0.1, 0.1); opacity: 0; } 50% { opacity: 1; filter: none; } 100% { transform: scale(1.2, 1.2); opacity: 0; } }
加上动画 看效果
.shadow:after
content: ""; border-radius: 50%; height: 80rpx; width: 80rpx; position: absolute; margin: -26rpx 0 0 -26rpx; opacity: 0; box-shadow: 0 0 2rpx 4rpx #89849b; /*加上动画*/ animation-delay: 1.1s; animation: pulsate 1s ease-out; animation-iteration-count: infinite;
最后我们通过旋转来完成最终效果
.shadow
background: rgba(0, 0, 0, 0.2); border-radius: 50%; height: 28rpx; width: 28rpx; z-index: -2; /*旋转*/ transform: rotateX(55deg);
完--