网站首页 > 技术文章 正文
发现了一个炫酷的3D卡片效果,这样的效果实现起来,你有没有思路呢?
接下来我们一起来看一下这个效果的实现过程。
首先看它的 HTML 代码:
<div class="card">
<!-- 封面 -->
<img src="./assets/cover1.jpeg" class="cover" />
<!-- 标题 -->
<img src="./assets/title1.png" class="title" />
<!-- 英雄 -->
<img src="./assets/hero1.webp" class="hero" />
</div>
<div class="card">
<img src="./assets/cover2.jpeg" class="cover" />
<img src="./assets/title2.png" class="title" />
<img src="./assets/hero2.webp" class="hero" />
</div>
HTML 的代码非常简单,就两个 div 分别代表两张卡片。
每个 div 里有三个图片,分别是封面、标题以及英雄,三张图片分别设置了不同的类样式。
然后再来看一下基本样式:
/* 清除默认样式 */
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
/* body 设置 flex 为了让图片居中 */
body {
width: 100vw;
height: 100vh;
margin: 0;
display: flex;
justify-content: center;
align-items: center;
/* 背景色先设置为白色看的清楚 */
/* background: #191c29; */
background: #fff;
}
/* 设置每张卡片的基本样式,然后向上移动一点 */
.card {
width: 200px;
height: 300px;
margin: 0 50px;
transform: translateY(-50%);
position: relative;
}
我们首先来做一下布局,由于卡片里边有三张图片,这三张图片有覆盖关系,所以三张图片应该是绝对定位,卡片我们已经设置了相对定位。
然后我们为图片设置一下公共样式:
/* etc... */
.card img {
position: absolute;
left: 0;
width: 100%;
/* 因为图片的效果是有过渡的,我们在这里也统一设置一下 */
transition: 0.5s;
}
设置完之后效果就是这个样子的:
那么接下来就是分别设置每一张图片了:
/* etc... */
.cover {
height: 100%;
z-index: 1;
}
.hero {
height: 100%;
z-index: 2;
/* 英雄在最初是不可见的 */
opacity: 0;
}
.title {
z-index: 3;
bottom: 0;
}
因为覆盖关系是标题在最上层,英雄在中层,封面在下层,所以我们使用 z-index 设置它们的覆盖关系。
然后接下来就是 hover 效果了,一个一个来。
首先是 cover 它要进行旋转:
/* etc... */
.card:hover .cover {
/* 设置旋转 */
transform: rotateX(25deg);
}
旋转有了但是没有 3D 的效果,我们加一下:
/* etc... */
.card:hover .cover {
/* 设置 3D 透视 */
transform: perspective(500px) rotateX(25deg);
}
然后我们再加一下阴影:
/* etc... */
.card:hover .cover {
transform: perspective(500px) rotateX(25deg);
/* 设置阴影 */
box-shadow: 0 35px 0px rgba(0, 0, 0, 0.75);
}
现在阴影太大,太实了,所有要内缩和虚化一下:
/* etc... */
.card:hover .cover {
transform: perspective(500px) rotateX(25deg);
/* 阴影虚化 35px 然后内缩 -8px */
box-shadow: 0 35px 35px -8px rgba(0, 0, 0, 0.75);
}
现在就有点那个味道了。
然后我们写下一个 hero 英雄:
/* etc... */
.card:hover .hero {
/* 透明度设置为不透明 */
opacity: 1;
/* 同样设置 3D 效果,然后横向不移动,纵向向上移动 50px,z 轴上靠近我们的眼睛一点设置 50px */
transform: perspective(500px) translate3d(0, -50px, 50px);
}
最后就是 title 标题了,标题和英雄基本一致,只不过向上移动少一点:
/* etc... */
.card:hover .title {
/* 设置 3D 效果,,然后横向不移动,纵向向上移动 25px,z 轴上靠近我们的眼睛一点设置 50px */
transform: perspective(500px) translate3d(0, -25px, 50px);
}
最后把背景色加上就完美实现了:
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
width: 100vw;
height: 100vh;
margin: 0;
display: flex;
justify-content: center;
align-items: center;
background: #191c29;
}
.card {
width: 200px;
height: 300px;
margin: 0 50px;
transform: translateY(-50%);
position: relative;
}
.card img {
position: absolute;
width: 100%;
left: 0;
transition: 0.5s;
}
.cover {
height: 100%;
z-index: 1;
}
.card:hover .cover {
transform: perspective(500px) rotateX(25deg);
box-shadow: 0 35px 35px -8px rgba(0, 0, 0, 0.75);
}
.hero {
height: 100%;
z-index: 2;
opacity: 0;
}
.card:hover .hero {
opacity: 1;
transform: perspective(500px) translate3d(0, -50px, 50px);
}
.title {
z-index: 3;
bottom: 0;
}
.card:hover .title {
transform: perspective(500px) translate3d(0, -25px, 50px);
}
总结
今天的东西比较简单,我们娱乐放松一下。
margin: 0 50px;
transform: translateY(-50%);
position: relative;
}
.card img {
position: absolute;
width: 100%;
left: 0;
transition: 0.5s;
}
.cover {
height: 100%;
z-index: 1;
}
.card:hover .cover {
transform: perspective(500px) rotateX(25deg);
box-shadow: 0 35px 35px -8px rgba(0, 0, 0, 0.75);
}
.hero {
height: 100%;
z-index: 2;
opacity: 0;
}
.card:hover .hero {
opacity: 1;
transform: perspective(500px) translate3d(0, -50px, 50px);
}
.title {
z-index: 3;
bottom: 0;
}
.card:hover .title {
transform: perspective(500px) translate3d(0, -25px, 50px);
}
总结
今天的东西比较简单,我们娱乐放松一下。
原文链接:https://juejin.cn/post/7275942983559299106
猜你喜欢
- 2025-01-01 组态图不搞点3d效果,真的拿不出手了。
- 2025-01-01 AI设计创意海报:对比色配叠色,两种效果,两种感觉
- 2025-01-01 3D版生产工艺流程图,在展现效果上绝对是碾压的。
- 2025-01-01 直播点赞实现,浮动消失效果
- 2025-01-01 CSS Loaders:开箱即用的 500+ CSS loading 效果
- 2025-01-01 2.5D拓扑图—3D的逼真效果,2D的制作成本
- 2025-01-01 「Vue项目」中的滚动组件&联动效果从0到1(建议收藏)
- 2025-01-01 污水处理工艺流程放入智慧水务大屏,效果立马上来了。
- 2025-01-01 加入Unity3D的可视化大屏,效果绝对的震撼!
- 2025-01-01 电商可视化大屏效果拉满,所有数据一目了然
你 发表评论:
欢迎- 560℃Oracle分析函数之Lag和Lead()使用
- 555℃几个Oracle空值处理函数 oracle处理null值的函数
- 544℃Oracle数据库的单、多行函数 oracle执行多个sql语句
- 542℃0497-如何将Kerberos的CDH6.1从Oracle JDK 1.8迁移至OpenJDK 1.8
- 538℃Oracle 12c PDB迁移(一) oracle迁移到oceanbase
- 530℃【数据统计分析】详解Oracle分组函数之CUBE
- 519℃最佳实践 | 提效 47 倍,制造业生产 Oracle 迁移替换
- 508℃Oracle有哪些常见的函数? oracle中常用的函数
- 最近发表
- 标签列表
-
- 前端设计模式 (75)
- 前端性能优化 (51)
- 前端模板 (66)
- 前端跨域 (52)
- 前端缓存 (63)
- 前端react (48)
- 前端aes加密 (58)
- 前端脚手架 (56)
- 前端md5加密 (54)
- 前端富文本编辑器 (47)
- 前端路由 (61)
- 前端数组 (73)
- 前端排序 (47)
- 前端密码加密 (47)
- Oracle RAC (73)
- oracle恢复 (76)
- oracle 删除表 (48)
- oracle 用户名 (74)
- oracle 工具 (55)
- oracle 内存 (50)
- oracle 导出表 (57)
- oracle 中文 (51)
- oracle的函数 (57)
- 前端调试 (52)
- 前端登录页面 (48)
本文暂时没有评论,来添加一个吧(●'◡'●)