CSS3-实现翻书效果

CSS3简单特效–transform实现翻书效果
上一篇介绍了animation如何实现流光按钮效果,现给大家介绍一下如何利用css3的transform属性实现鼠标停留实现翻书的效果,下图是鼠标停在div上,“书页”翻动后的效果。
在这里插入图片描述
可以看出这有一种3D的效果,css3中让元素变成3D空间元素,通常来说分为以下三步:
1、父级中加入视距:perspective:800px;
2、在需要显示3D效果的元素加上一个3D层:transform-style:preserve-3d;
3、设置观看视角:perspective-origin:center center;(这个值不设置的话默认为center)。
3D场景设置好后,每一个书页为一个矩形,黄色的虚线边框利用ul标签套五个li。要实现li沿左边距旋转,需使用css3中transform属性,下面给大家介绍一下在使用transform属性时常用值~
设置旋转中心属性:transform-origin:x轴点 y轴点;(可以设置像素值也可以设置center、left等)。
设置旋转方式:transform:rotate();(围绕X轴旋转为rotateX(),Y、Z轴同理,括号中填旋转的角度deg)。
给父级设置3d层主要代码如下

body{
            background-color: black;
            perspective: 800px;
        }
        ul{
            position: relative;
            width: 200px;
            height: 300px;
            box-shadow: 0px 0px 5px 1px gold;
            margin: 200px auto;
            transform-style: preserve-3d;
            
        }
        ul li{
            position: absolute;
            border: 1px dashed gold;
            width: 200px;
            height: 300px;
            transform-origin:0px center;
        }

一般3D层给实现3D效果的父盒子,视距给最大的盒子body。
在给子元素设置旋转角度过程中,使用伪类选择器可以减少内存的占用,这里使用到:nth-child()伪类。
主要css代码如下:

 ul:hover li:nth-child(1){
            transform:rotateY(-180deg);
        }
        ul:hover li:nth-child(2){
            transform:rotateY(-160deg);
        }
        ul:hover li:nth-child(3){
            transform:rotateY(-150deg);
        }
        ul:hover li:nth-child(4){
            transform:rotateY(-140deg);
        }
        ul:hover li:nth-child(5){
            transform:rotateY(-130deg);
        }

最后为了实现书页每页翻动时有延时间隔,使用过度属性transition实现过度动画效果。(transition:transition-property(过度属性) transition-duration(过度时间) transition-timing-function(动画类型) transition-delay(延时时间),例如transition:all 2s linear .5s;的意思是所有元素动画延时0.5秒以线性效果2秒完成)
完整代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        *{
            margin: 0px;
            padding: 0px;
            list-style: none;
        }
        body{
            background-color: black;
            perspective: 800px;
        }
        ul{
            position: relative;
            width: 200px;
            height: 300px;
            box-shadow: 0px 0px 5px 1px gold;
            margin: 200px auto;
            transform-style: preserve-3d;
            
        }
        ul li{
            position: absolute;
            border: 1px dashed gold;
            width: 200px;
            height: 300px;
            transform-origin:0px center;
            /* background-color: white; */
        }
        ul:hover{
            transform:rotateX(30deg);
            transition:all 2s;
        }
        ul:hover li:nth-child(1){
            transform:rotateY(-180deg);
            transition:all 2s  .5s;
        }
        ul:hover li:nth-child(2){
            transform:rotateY(-160deg);
            transition:all 2s  .8s;
        }
        ul:hover li:nth-child(3){
            transform:rotateY(-150deg);
            transition:all 2s 1s;
        }
        ul:hover li:nth-child(4){
            transform:rotateY(-140deg);
            transition:all 2s 1.2s;
        }
        ul:hover li:nth-child(5){
            transform:rotateY(-130deg);
            transition:all 2s  1.4s;
        }
    </style>
</head>
<body>
    <ul>
        <li></li>
        <li></li>
        <li></li>
        <li></li>
        <li></li>
    </ul>
</body>
</html>
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值