CSS 实现无限波浪边框卡片

CSS 实现无限波浪边框卡片

效果展示

  • 鼠标悬停效果,底部色块的边框是无限滚动的波浪
    在这里插入图片描述

  • 鼠标没有悬停效果
    在这里插入图片描述

CSS 知识点

  • CSS 基础知识回顾
  • 使用 radial-gradient 实现波浪边框
  • 使用 anumate 属性实现波浪边框动画和控制动画运动

波浪实现原理

波浪边框的实现思路其实就是边框容器(此实例中的边框容器是class="box"的元素)中声明一个元素来作为波浪边框的实现容器(此实例中的波浪容器为span元素),有了波浪边框容器后我们可以使用伪元素形成不同层次并结合radial-gradient实现不同的波浪形状,最后修改对应伪元素的颜色,这样就可以形成波浪,具体的层次关系如下:

在这里插入图片描述

本案例的层次关系如下:

在这里插入图片描述

整体页面布局实现

<div class="container"><div class="box" style="--clr: #2196f3"><!-- 波浪边框(四个span表示四个边框) --><span style="--i:0"></span><span style="--i:1"></span><span style="--i:2"></span><span style="--i:3"></span><img src="./b1.png" /><div class="content"><h2>Design</h2><p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Nisi rempraesentium at consectetur nemo nihil.</p><a href="#">Read More</a></div></div>
</div>

编写卡片容器样式

.container .box {position: relative;top: 0;width: 360px;height: 360px;display: flex;justify-content: center;align-items: center;flex-direction: column;background: var(--clr);transition: 0.5s;padding: 60px;
}

实现上述代码后的效果如下:

在这里插入图片描述

编写卡片容器内部元素样式

.container .box::before {content: "";position: absolute;inset: 30px 30px 30px 30px;border: 5px solid #fff;border-radius: 20px;filter: drop-shadow(10px 10px 5px rgba(0, 0, 0, 0.5));pointer-events: none;transition: 0.5s;z-index: 1;
}.container .box img {position: absolute;z-index: 10;top: 120px;max-width: 120px;transition: 0.5s;/* 设置图片阴影 */filter: drop-shadow(10px 10px 5px rgba(0, 0, 0, 0.5));
}/* 内容部分只有鼠标悬停才会显示,默认是收起隐藏 */
.container .box .content {opacity: 0;transition: 0.5s;text-align: center;
}

编写卡片波浪边框样式

.container .box span {position: absolute;inset: 0;rotate: calc(var(--i) * 90deg);
}.container .box span::before {content: "";position: absolute;bottom: 0;width: 100%;background-repeat: repeat;height: 15px;background-image: radial-gradient(circle at 10px 15px,#333 12px,transparent 13px);background-size: 40px 20px;animation: anumate 0.5s linear infinite;/* 让波浪边框不会执行动画 */animation-play-state: paused;
}.container .box span::after {content: "";position: absolute;bottom: 0;width: 100%;background-repeat: repeat;height: 10px;background-image: radial-gradient(circle at 10px -5px,transparent 12px,#333 13px);background-size: 20px 20px;animation: anumate 0.5s linear infinite;/* 让波浪边框不会执行动画 */animation-play-state: paused;
}

实现上述的样式后,效果如下:

在这里插入图片描述

编写鼠标悬停卡片后的样式

.container .box:hover {top: 100px;
}.container .box:hover::before {inset: -200px 30px 30px 30px;
}.container .box:hover img {top: -150px;
}

实现上的样式后,效果如下:

在这里插入图片描述

编写鼠标悬停卡片后内容展示的样式

.container .box .content {opacity: 0;transition: 0.5s;text-align: center;
}.container .box:hover .content {opacity: 1;
}
.container .box .content h2 {font-size: 2em;color: #fff;text-align: center;
}.container .box .content p {color: #fff;text-align: center;
}.container .box .content a {position: relative;top: 20px;padding: 10px 20px;background: #fff;display: inline-block;color: #333;font-weight: 600;font-size: 1.1em;text-transform: uppercase;text-decoration: none;
}

实现波浪边框动画

.container .box:hover span::before,
.container .box:hover span::after {animation-play-state: running;
}@keyframes anumate {0% {background-position: 0 0;}100% {background-position: 40px 0;}
}

完成上述的代码后,波浪边框就会开始执行动画。

完整代码下载

完整代码下载

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/804463.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

dayjs 判断是否今天、本周内、本年内、本年外显示周几、月份等

效果: 判断是否今天需从 dayjs 中引入 isToday 插件&#xff1b; 判断是否两个日期之间需从 dayjs 中引入 isBetween 插件 import dayjs from dayjs import isToday from dayjs/plugin/isToday import isBetween from dayjs/plugin/isBetween// 注册插件 dayjs.extend(isBet…

DP:子数组模型

一、最大子数组和 . - 力扣&#xff08;LeetCode&#xff09; 二、环形子数组的最大和 . - 力扣&#xff08;LeetCode&#xff09; class Solution { public:int maxSubarraySumCircular(vector<int>& nums) {//动态规划思想解决 //环形数组问题&#xff0c;尝试转…

01-Git 快速入门

https://learngitbranching.js.org/?localezh_CN在线练习git 1. Git 安装好Git以后, 先检查是否已经绑定了用户名和邮箱 git config --list再检查C:\Users\xxx.ssh 下是否存在 id_rsa.pub , 存在的话复制其内容到 GitHub 的 SSH KEY 中 没有这一步, PUSH操作的时候会报错:…

土壤墒情监测系统:洞察土壤水分奥秘

TH-TS400土壤墒情监测系统&#xff0c;作为现代农业科技的重要组成部分&#xff0c;已经成为农业生产过程中不可或缺的一环。该系统通过先进的传感器技术和数据处理能力&#xff0c;能够实时监测土壤的水分状况&#xff0c;为农业生产提供精准、可靠的数据支持。本文将从系统构…

算法打卡day29

今日任务&#xff1a; 1&#xff09;1005.K次取反后最大化的数组和 2&#xff09;134.加油站 3&#xff09;135.分发糖果 1005.K次取反后最大化的数组和 题目链接&#xff1a;1005. K 次取反后最大化的数组和 - 力扣&#xff08;LeetCode&#xff09; 给定一个整数数组 A&…

Java Web-分层解耦

三层架构 当我们所有代码都写在一起时&#xff0c;代码的复用性差&#xff0c;并且难以维护。就像我们要修改一下服务端获取数据的方式&#xff0c;从文本文档获取改为到数据库中获取&#xff0c;就难以修改&#xff0c;而使用三层架构能很好的解决这个问题。 controller: 控…

HJ61 放苹果(递归,苹果多的情况+盘子多的情况)

当苹果数 < 盘子数&#xff0c;有空盘&#xff0c;则忽略一个盘子&#xff0c;在n-1个放苹果&#xff0c;一直递推到n1&#xff0c;有一种摆法苹果数 > 盘子数&#xff0c;可以看作没有空盘。则可以选择忽略一个盘子&#xff0c;如上边做法。还可以选择每个盘子放一个苹果…

GlusterFS分布式存储

目录 前言 一、GlusterFS分布式存储概述 1、GFS概念 2、GFS特点 3、GFS术语 4、GFS构成 5、GFS工作流程 6、后端存储如何定位文件 7、GlusterFs的卷类型 7.1 Distributed Volume&#xff08;分布式卷&#xff09; 7.2 Striped Volume&#xff08;条带卷&#xff09…

线性变换在人工智能领域的深度实践与应用探索

线性变换&#xff0c;作为数学中的一种基本工具&#xff0c;在人工智能领域中发挥着举足轻重的作用。其强大的表示能力和灵活的运算特性使得线性变换成为机器学习、深度学习等多个子领域的核心组成部分。本文将详细探讨线性变换在人工智能领域中的实践应用&#xff0c;旨在揭示…

自动化测试selenium

目录 什么是自动化测试 什么是selenium selenium工作原理 selenium环境搭建 1.查看chrome浏览器版本 2.下载chrome浏览器驱动 3.配置系统环境变量PATH 4.验证环境是否搭建成功 selenium相关API 1.定位元素 CSS选择器定位 xpath定位元素 标签定位元素 2.操作测试对…

浏览器工作原理与实践--渐进式网页应用(PWA):它究竟解决了Web应用的哪些问题

在专栏开篇词中&#xff0c;我们提到过浏览器的三大进化路线&#xff1a; 第一个是应用程序Web化&#xff1b; 第二个是Web应用移动化&#xff1b; 第三个是Web操作系统化&#xff1b; 其中&#xff0c;第二个Web应用移动化是Google梦寐以求而又一直在发力的一件事&#xf…

【免费SSL】免费一年的SSL证书

一、SSL证书行业政策 目前市面上绝大多数的免费SSL证书有效期都在3个月左右&#xff0c;而不是一年。例如&#xff0c;腾讯云在2024年4月后不再提供有效期为一年的免费证书&#xff0c;改为提供有效期为3个月的免费证书。同样&#xff0c;阿里云在2023年11月后也不再提供有效期…

javaScript常见对象方法总结

1&#xff0c;object.assign() 用于合并对象的属性。它可以将一个或多个源对象的属性复制到目标对象中&#xff0c;实现属性的合并。 语法 Object.assign(target, ...sources); 1,target&#xff1a;目标对象&#xff0c;将属性复制到该对象中。 2,sources&#xff1a;一个…

51单片机学习笔记16 小型直流电机和五线四相电机控制

51单片机学习笔记16 小型直流电机和五线四相电机控制 一、电机分类二、小型直流电机控制1. 简介2. 驱动芯片ULN2003D3. 代码实现dc_motor_utils.cmain.c 三、五线四相步进电机控制1. 步进电机工作原理2. 构造3. 极性区分4. 驱动方式5. 28BYJ-48步进电机&#xff08;1&#xff0…

3D可视化技术亮相高铁站,引领智慧出行新潮流

在科技飞速发展的今天&#xff0c;我们的生活正经历着前所未有的变革。高铁站作为现代交通的重要枢纽&#xff0c;也在不断地创新和进步。 3D可视化技术通过三维立体的方式&#xff0c;将高铁站内部和外部的结构、设施、流线等以更加直观、生动的形式呈现出来。乘客们只需通过手…

Docker容器嵌入式开发:MySQL表的外键约束及其解决方法

本文内容涵盖了使用MySQL创建数据库和表、添加数据、处理字符集错误、解决外键约束问题以及使用SQL查询数据的过程。通过创建表、插入数据和调整字符集等操作&#xff0c;成功解决了数据库表中的字符集问题&#xff0c;并使用INSERT语句向各个表中添加了示例数据。同时&#xf…

MySQL - MySQL的RR隔离级别是如何基于ReadView机制实现的?

RR级别下,这个事务读取一条数据,无论读多少次,都是一个值,别的事务修改数据之后,哪怕提交了,你也是看不到人家修改的值的,这就避免了不可重复读的问题。 同时如果别的事务插入了一些新的数据,你也是读不到的,这样就可以避免幻读问题。这到底是如何实现的呢? 首先我…

《深入Linux内核架构》第1章 简洁和概述

目录 1.1 内核的任务 1.2 实现策略 1.3 内核的组成部分 ​1.3.1 进程、进程切换、调度 1.3.2 UNIX 进程 1.3.3 地址空间和特权级别 1.3.4 页表 1.3.5 物理内存的分配 1.3.6 计时 1.3.7 系统调用 1.3.8 设备驱动程序 1.3.9 网络 1.3.10 文件系统 1.3.11 模块和热插…

AIGC实战——StyleGAN(Style-Based Generative Adversarial Network)

AIGC实战——StyleGAN 0. 前言1. StyleGAN1.1 映射网络1.2 合成网络1.3 自适应实例归一化层1.4 风格混合1.5 随机变化 2. StyleGAN 生成样本3. StyleGAN23.1 权重调制与解调3.2 路径长度正则化3.3 非渐进式增长 4. StyleGAN2 生成样本小结系列链接 0. 前言 StyleGAN (Style-Ba…

安卓的认证测试

1 CTS CTS 是 Android 兼容性测试套件&#xff0c;用于验证设备是否符合 Android 平台的兼容性标准。它包含一系列测试用例&#xff0c;涵盖了设备的各个方面&#xff0c;如硬件功能、软件功能、API 的正确实现等。通过 CTS 测试&#xff0c;设备厂商可以确保其设备符合 Andro…