使用css3 实现3d正反翻转特效

首先,上传一下最终效果:
3d翻转图片
接下来,我们按照结构来实现当前的demo效果:

第一步,创建一个触发hover效果的容器,并设置3d距离:

<!--item 可以触发翻转的区域-->
<div class="item">
...
</div>

设置.item的perspective属性距离,就是3d效果的z轴距离,浏览器默认就xy两个轴向,css3增加了z轴,就是当前2d平面的3d距离,单位是像素。我们在这里设置了3d距离是perspective:500px;

第二步,创建了翻转的容器,里面放置了显示正面内容和背面内容的div

<!--box 可以翻转的容器-->
    <div class="box">
        <!--font 默认显示的正面-->
        <div class="font">正面</div>
        <!--back 背面-->
        <div class="back">背面</div>
    </div>

.box作为翻转的容器,我们需要通过css将其转换为3d翻转样式,并设置了变换时间为1秒:

transition:all 1s;
transform-style: preserve-3d;

并在鼠标悬停在.item上面的时候,让.box沿y轴翻转180度:

        .item:hover .box{
            transform: rotateY(180deg);
        }

实现到这里以后,我们基本就实现了可以翻转,接下来还要实现盒子里面正反面都有内容。

第三部,实现正反面的div,重点是设置背面不可见

<!--font 默认显示的正面-->
<div class="font">正面</div>
<!--back 背面-->
<div class="back">背面</div>

做第二步的时候,我们也可以发现,在翻转的div .box内创建了两个div 正面一个背面一个,首先我们把这两个盒子都设置绝对定位,两个盒子都设置翻转盒子的宽高

            position: absolute;
            top:0;
            left:0;
            width:100%;
            height:100%;
            text-align: center;
            line-height: 200px;

接下来重点来了,我们如何设置翻转以后,让盒子在背面不可见(默认盒子翻转以后还是可见的),需要用到css属性backface-visibility,我们将其设置一下:

backface-visibility: hidden;

还有最后一步,就是让.back的div默认反向显示,只需要让其沿y轴旋转180度即可:

        .back{
            transform: rotateY(180deg);
        }

这样,就完成了一个翻转的案例,下面放上全部代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>css3d翻转</title>
    <style>
        *{
            padding: 0;
            margin: 0;
        }

        body{
            display: flex;
            justify-content: center;
            align-items: center;
            height: 100vh;
        }

        .item{
            width:200px;
            height:200px;
            perspective:500px;
        }

        .box{
            background: #abb9c5;
            width:100%;
            height:100%;
            transition:all 1s;
            transform-style: preserve-3d;
            position: relative;
        }

        .item:hover .box{
            transform: rotateY(180deg);
        }

        .font, .back{
            position: absolute;
            top:0;
            left:0;
            width:100%;
            height:100%;
            text-align: center;
            line-height: 200px;

            backface-visibility: hidden;
        }

        .back{
            transform: rotateY(180deg);
        }

    </style>
</head>
<body>
<!--item 可以触发翻转的区域-->
<div class="item">
    <!--box 可以翻转的容器-->
    <div class="box">
        <!--font 默认显示的正面-->
        <div class="font">正面</div>
        <!--back 背面-->
        <div class="back">背面</div>
    </div>
</div>
</body>
</html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值