Kros的博客 Kros的博客
首页
  • CSS
  • 工具
  • Vue
  • js
  • Vue3
  • 算法
  • 折腾笔记
一言
  • 分类
  • 标签
  • 归档
码云

Kros

凡心所向,素履以往,生如逆旅,一苇以航
首页
  • CSS
  • 工具
  • Vue
  • js
  • Vue3
  • 算法
  • 折腾笔记
一言
  • 分类
  • 标签
  • 归档
码云
  • CSS

    • CSS绘制三角形
    • CSS排版上下文
    • CSS伪类
    • CSS伪元素
    • CSS实现列表元素分割线
    • CSS使用skew
    • CSS让物体居中
    • CSS绘制太极图
    • CSS使用实体替代预留符号
    • 动态修改after或before的content
    • CSS旋转border
    • CSS绘制空心五角星
    • CSS时钟
    • CSS图片手风琴伸缩效果
    • CSS的选择器
    • CSS波浪border
    • CSS内切圆角
    • CSS文字环绕
    • CSS outline使用详解
    • CSS使用transform缩放scale不生效
    • CSS使用linear-gradient或生成虚线
    • CSS 图片srcset属性
    • CSS object-fit属性详解
    • CSS 使用filter对颜色就行处理
    • CSS选择器的优先级
    • css与scss文件引入问题
    • CSS实现圆角梯形
    • 使用filter实现聚光灯效果
    • 利用backface-visibility hidden实现3d翻转双面card
    • 正方体3d旋转
    • 修改浏览器自动填充的背景颜色
    • CSS修改选中文字颜色
    • CSS实现打字机效果
    • marquee文字弹跳
    • logo文字图片倒影
    • 纯CSS实现popup弹窗
    • ie兼容inline-block
    • 浏览器默认样式
    • CSS效果-文字
    • CSS效果-按钮
    • css3 transition属性对linear-gradient渐变色无效
    • 不同预处理器下的样式穿透
    • 属性顺序
    • CSS重绘与回流
    • img标签与before和after
    • CSS实现文本两端对齐
    • CSS filter的contrast属性和blur属性奇特的结合
    • CSS不常用属性记录
    • CSS sprite雪碧图制作与使用
  • JavaScript

  • 工具

  • Vue

  • antdv踩坑记录

  • Vue3

  • 前端
  • CSS
kros
2024-05-13

利用backface-visibility hidden实现3d翻转双面card

最近遇到一个需求需要再一个卡片的正反面都显示内容,通过鼠标hover触发旋转切换正反面显示。先看最终demo效果:

hover1

初步想法是先将两张图片重叠,一张默认不旋转一张旋转180deg,鼠标进入后让两者同时选择180deg。说干就干,照前面逻辑编写了简单的代码如下:

<div class="bg-trans">
  <img class="img1" src="https://img95.699pic.com/photo/50136/1351.jpg_wh300.jpg" />
  <img  class="img2" src="https://img95.699pic.com/photo/60082/6460.jpg_wh860.jpg" />
</div>
1
2
3
4
.bg-trans {
  position: relative;
  margin: 20px;
  width: 300px;
  height: 180px;
  .img1,
  .img2 {
    position: absolute;
    top: 0;
    left: 0;
    width: 300px;
    height: 180px;
    transition: all 0.5s;
    transform: perspective(200px) rotateY(0deg);
  }
  .img2 {
    transform: perspective(200px) rotateY(-180deg);
  }
  &:hover {
    .img1 {
      transform: perspective(200px) rotateY(-180deg);
    }
    .img2 {
      transform: rotateY(0deg);
    }
  }
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28

那上面的思路我们得到一个完全不同的结果,简直无语┐(‘~`;)┌

hover2

果断将上面的步骤分解,我们先只用一张图片做实验。果然当物体翻转后还能被看见(镜像)

hover3

这里就要借助css的backface-visibility属性,设置成hidden时可以将物体背靠观察着时不做显示,这里的旋转180deg即为背靠视线。所以只需要在图片上加上该属性就可以完美实现最终效果。

.bg-trans {
  position: relative;
  margin: 20px;
  width: 300px;
  height: 180px;
   perspective:500px;
    -moz-perspective:500px;
    -webkit-perspective:500px;
  .img1,
  .img2 {
    position: absolute;
    top: 0;
    left: 0;
    width: 300px;
    height: 180px;
    transition: all .5s;
    transform: rotateY(0deg);
    backface-visibility: hidden;
  }
  .img2 {
    transform: rotateY(-180deg);
  }
  &:hover {
    .img1 {
      transform: rotateY(-180deg);
    }
    .img2 {
      transform: rotateY(-360deg);
    }
  }
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32

提示

使用perspective:500px属性可以替换transform: perspective() 为保证旋转方向一致保证旋转角度同为整数或负数 使用transform: perspective(200px) rotateY(0deg)写法时,hover效果的transform也必须有完整的perspective(200px) rotateY(0deg)属性。因为css的动画机制只能对属性进行变化,而属性的函数值没发分别控制,所以transform值是相当于覆盖式的,如果少写一个perspective(200px)就相当于没有定义该属性这里可以transform的单独赋值,css提供了独立的属性,如:scale、rotate、translate等来替换transform: scale() rotate() translate,详见解放生产力!transform 支持单独赋值改变

上次更新: 2025/09/05, 8:09:00
使用filter实现聚光灯效果
正方体3d旋转

← 使用filter实现聚光灯效果 正方体3d旋转→

最近更新
01
Find the next perfect square
09-05
02
Regex validate PIN code
09-05
03
Find the odd int
09-05
更多文章>
Theme by Vdoing | Copyright © 2020-2025 kros king
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
icon-heart-o icon-heart icon-infinity icon-pause icon-play link next prev