css3实现翻牌效果

前阵子做了一个项目的前端网站,客户需求是要实现鼠标悬停的翻牌效果,经过沟通后确定了使用css3来实现此效果,接下来分享一下具体的实现方式。 效果演示

代码如下 HTML

        <div class="slide-items">
            <div class="slide-item">
                <div class="front1 front">我要看</div>
                <ul class="back">
                    <li class="short-link"><a href="#">办件查询</a></li>
                    <li class="short-link"><a href="#">地图引导</a></li>
                    <li class="long-link"><a href="#">国税涉税事项网上办理</a></li>
                    <li class="long-link"><a href="#">地税涉税事项网上办理</a></li>
                </ul>
            </div>
            <div class="slide-item">
                <div class="front2 front">我要查</div>
                <ul class="back back-item2">
                    <li class="short-link"><a href="#">办件查询</a></li>
                    <li class="short-link"><a href="#">办件查询</a></li>
                    <li class="short-link"><a href="#">办件查询</a></li>
                    <li class="short-link"><a href="#">办件查询</a></li>
                </ul>
            </div>
            <div class="slide-item">
                <div class="front3 front">我要办</div>
                <ul class="back back-item3">
                    <li class="short-link"><a href="#">办件查询</a></li>
                    <li class="short-link"><a href="#">办件查询</a></li>
                    <li class="short-link"><a href="#">办件查询</a></li>
                </ul>
            </div>
            <div class="slide-item">
                <div class="front4 front">我要问</div>
                <ul class="back back-item4">
                    <li class="short-link"><a href="#">咨询</a></li>
                    <li class="short-link"><a href="#">投诉</a></li>
                </ul>
            </div>
        </div>
复制代码

css

.slide-area {
        height: 158px;
        border-top: 5px solid #0066c3;
        margin-top: 94px;
    }
    
    .slide-item {
        position: relative;
        width: 200px;
        height: 81px;
        float: left;
        margin-top: 36px;
        margin-left: 39px;
    }
    
    .front,
    .back {
        position: absolute;
        display: block;
        -webkit-transition: all 1s ease-in-out;
        /*淡入淡出效果*/
        -o-transition: all 1s ease-in-out;
        transition: all 1s ease-in-out;
        -webkit-backface-visibility: hidden;
        /*元素背面不可见*/
        -moz-backface-visibility: hidden;
        -o-backface-visibility: hidden;
        backface-visibility: hidden;
    }
    
    .front {
        color: #fff;
        font-size: 18px;
        font-weight: bold;
        height: 100%;
        width: 116px;
        padding-left: 84px;
        text-align: center;
        line-height: 81px;
        background-color: #f67300;
    }
    
    .front2 {
        background-color: #f67;
    }
    
    .front3 {
        background-color: #d28;
    }
    
    .front4 {
        background-color: #c50;
    }
    
    .back {
        width: 198px;
        height: 76px;
        border: 1px solid #0a6caa;
        border-radius: 5px;
        padding-top: 3px;
        background-color: #fff;
        -webkit-transform: rotateY(180deg);
        -ms-transform: rotateY(180deg);
        -o-transform: rotateY(180deg);
        transform: rotateY(180deg);
    }
    
    .slide-item:hover .front {
        -webkit-transform: rotateY(180deg);
        -ms-transform: rotateY(180deg);
        -o-transform: rotateY(180deg);
        transform: rotateY(180deg);
    }
    
    .slide-item:hover .back {
        -webkit-transform: rotateY(0deg);
        -ms-transform: rotateY(0deg);
        -o-transform: rotateY(0deg);
        transform: rotateY(0deg);
    }
复制代码

从上面的示例中我们可以看出,主要使用的css3属性包括transition、backface-visibility、transform。 接下来我们逐个分析: ##transition: transition用来规定元素在产生动画效果时的设置,主要包括四个属性

  1. transition-property 规定设置过渡效果的 CSS 属性的名称。
  2. transition-duration 规定完成过渡效果需要多少秒或毫秒。
  3. transition-timing-function 规定速度效果的速度曲线。
  4. transition-delay 定义过渡效果何时开始。 示例中我们使用了简写的方式,设置的效果为,back和front元素的所有属性产生的动画效果时的时长为1s,效果为淡入淡出。

##backface-visibility: backface-visibility 属性定义当元素不面向屏幕时是否可见。从页面结构不难看出,每个翻转元素都包含了正面和反面两个div块,其中一块正面 对着屏幕,另一块背面对着屏幕,而backface-visibility 属性就是用来定义让背对着屏幕的元素设为不可见。

##transform: transform 属性向元素应用 2D 或 3D 转换。该属性允许我们对元素进行旋转、缩放、移动或倾斜。 示例中,我们将back元素的初始位置以y轴翻转180度,也就是背对着屏幕,并被backface-visibility元素设为不可见,已达到隐藏效果,当鼠标悬停时,正面的元素翻转180度,背面元素由翻转180度变为翻转0度,因为设置了transition属性,所以会产生翻转卡片的效果,且翻转后,到达北面的元素又被backface-visibility设为不可见,至此,一个简单的卡片翻转效果就完成了。 当然,这样的写法也有缺点,兼容性比较差,只能兼容到(ie10),如果在工作中遇到此类需求,在做之前务必要先确定兼容需求再决定使用哪种方案。

同志们如果对css3属性有不清楚的,可在w3c或菜鸟教程上查询,翻牌效果就介绍到这里,欢迎指正。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
CSS实现翻牌效果动画可以使用CSS 3D转换和CSS动画来实现。以下是实现的步骤: 1. 创建一个容器,用于包含翻转的两个面。 2. 给容器添加一个透视效果,使其能够呈现出三维效果。 ``` .container { perspective: 1000px; } ``` 3. 创建两个面,分别用于显示正面和背面的内容,并将它们放置在容器中。 ``` <div class="container"> <div class="card"> <div class="front">正面</div> <div class="back">背面</div> </div> </div> ``` 4. 使用CSS 3D转换将背面旋转180度,并设置初始状态为不可见。 ``` .card { transform-style: preserve-3d; transition: all 0.5s ease; } .back { transform: rotateY(180deg); display: none; } ``` 5. 使用CSS动画在容器的鼠标悬停事件时触发翻转效果,并切换正反面的可见状态。 ``` .container:hover .card { transform: rotateY(180deg); } .container:hover .card .front { display: none; } .container:hover .card .back { display: block; } ``` 完整的代码如下: ``` <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>翻牌效果动画</title> <style> .container { perspective: 1000px; width: 200px; height: 200px; } .card { position: relative; width: 100%; height: 100%; transform-style: preserve-3d; transition: all 0.5s ease; } .front, .back { position: absolute; top: 0; left: 0; width: 100%; height: 100%; backface-visibility: hidden; } .front { background-color: #e74c3c; color: #fff; } .back { background-color: #2ecc71; color: #fff; transform: rotateY(180deg); display: none; } .container:hover .card { transform: rotateY(180deg); } .container:hover .card .front { display: none; } .container:hover .card .back { display: block; } </style> </head> <body> <div class="container"> <div class="card"> <div class="front">正面</div> <div class="back">背面</div> </div> </div> </body> </html> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值