动画2详细解析

定位

1.位移:

css 复制代码
/* 设置景深 */
        perspective: 1000px;
css 复制代码
 /* 设置3d效果 */
        transform-style: preserve-3d;
css 复制代码
 /* 设置旋转 */
        transform: rotateY(75deg);
css 复制代码
  /* 设置过渡 */
        transition: all 2s;
html 复制代码
 <style>
      body {
        /* 设置景深 */
        perspective: 1000px;
        /* 设置3d效果 */
        transform-style: preserve-3d;
      }
      .outer {
        width: 400px;
        height: 400px;
        background: blanchedalmond;
        margin: 50px auto;
        /* 设置景深 */
        perspective: 1000px;
        /* 设置3d效果 */
        transform-style: preserve-3d;
        /* 设置旋转 */
        transform: rotateY(75deg);
      }
      .box {
        width: 100px;
        height: 100px;
        margin: 5px;
        background-color: #bfa;
        /* 设置过渡 */
        transition: all 2s;
      }

      .box1 {
      }
      .outer:hover > .box1 {
        transform: translateZ(100px);
      }

      .box2 {
        background: red;
      }

      .box3 {
        background: green;
      }
    </style>
  </head>
  <body>
    <div class="outer">
      <div class="box box1"></div>
      <div class="box box2"></div>
      <div class="box box3"></div>
    </div>
  </body>

2.旋转

css 复制代码
 /* 设置父元素3d效果 */
        perspective: 1000px;
        transform-style: preserve-3d;
html 复制代码
<style>
      body {
        /* 设置父元素3d效果 */
        perspective: 1000px;
        transform-style: preserve-3d;
      }
      .outer {
        width: 400px;
        height: 400px;
        border: 10px solid rgb(221, 166, 15);
        /* 设置父元素3d效果 */
        perspective: 1000px;
        transform-style: preserve-3d;
        transform: rotateX(75deg);
      }
      .box {
        width: 100px;
        height: 100px;
        margin: 5px;
        background-color: #bfa;
        transition: 1s linear;
      }
      .box2 {
        background: red;
      }

      .box3 {
        background: green;
      }
      .outer:hover > .box1 {
        /* transform: rotateZ(45deg); */
      }
      .outer:hover > .box2 {
        /* transform: rotateX(-45deg); */
      }
      .outer:hover > .box3 {
        transform: rotateY(45deg);
      }
    </style>
  </head>
  <body>
    <div class="outer">
      <div class="box box1">box1</div>
      <div class="box box2">box2</div>
      <div class="box box3">box3</div>
    </div>
  </body>

3.背面是否可见

css 复制代码
 /* 容器:开启3D空间 */
      .card-container {
        width: 200px;
        height: 300px;
        margin: 50px;
        perspective: 1000px; /* 营造3D透视感 */
        display: inline-block;
      }
html 复制代码
<style>
      /* 容器:开启3D空间 */
      .card-container {
        width: 200px;
        height: 300px;
        margin: 50px;
        perspective: 1000px; /* 营造3D透视感 */
        display: inline-block;
      }

      /* 卡片:核心翻转元素 */
      .card {
        width: 100%;
        height: 100%;
        position: relative;
        transition: transform 1s;
        transform-style: preserve-3d; /* 保留3D效果 */
      }

      /* 鼠标悬停时翻转卡片 */
      .card-container:hover .card {
        transform: rotateY(180deg);
      }

      /* 卡片正面和背面 */
      .card-front,
      .card-back {
        width: 100%;
        height: 100%;
        position: absolute;
        top: 0;
        left: 0;
        display: flex;
        align-items: center;
        justify-content: center;
        font-size: 20px;
        border-radius: 10px;
      }

      .card-front {
        background: #42b983;
        color: white;
      }

      .card-back {
        background: #3498db;
        color: white;
        transform: rotateY(180deg); /* 背面先翻转180°,方便翻转后显示 */
      }

      /* 案例1:背面可见(默认) */
      .demo1 .card-front,
      .demo1 .card-back {
        backface-visibility: visible;
      }

      /* 案例2:背面隐藏(实用场景) */
      .demo2 .card-front,
      .demo2 .card-back {
        backface-visibility: hidden;
      }
    </style>
  </head>
  <body>
    <!-- 案例1:backface-visibility: visible(背面可见) -->
    <div class="card-container demo1">
      <div class="card">
        <div class="card-front">正面</div>
        <div class="card-back">背面</div>
      </div>
    </div>

    <!-- 案例2:backface-visibility: hidden(背面隐藏) -->
    <div class="card-container demo2">
      <div class="card">
        <div class="card-front">正面</div>
        <div class="card-back">背面</div>
      </div>
    </div>
  </body>
相关推荐
kyriewen2 小时前
我手写了一个 EventEmitter,面试官追问了 6 个问题——第 4 个我没答上来
前端·javascript·面试
IT_陈寒2 小时前
Java的Date类又坑了我一次,改用时间戳真香
前端·人工智能·后端
小林攻城狮2 小时前
使用 Transport 节流解决 Vercel AI SDK 流式渲染卡死问题
前端·react.js
前端缘梦3 小时前
告别 TS 运行时类型漏洞!Zod 完整入门实战教程(前端 / 全栈必备)
前端·react.js·全栈
the_answer3 小时前
Webpack vs Vite 深度对比分析
前端·webpack
转转技术团队3 小时前
验证码识别实战:前端不写页面,改训模型了?
前端
MomentYY3 小时前
Temperature:AI 的“脑洞旋钮”
前端·llm·ai编程
远航_3 小时前
OpenSpec 完整详细介绍
前端·后端
召钱熏4 小时前
状态枚举正确≠渲染正确:一个语音按钮的状态机边界修复实录
android·前端
SkyWalking中文站4 小时前
认识 Horizon UI · 1/17:SkyWalking 新一代可观测性控制台
运维·前端·监控