• 运用css3新属性transform写的盒子嵌套展开动画效果


      刚刚进园,第一篇博客,记录一下CSS3 绘制盒子效果的方法。

      css3允许使用 3D 转换来对元素进行格式化,转换是使元素改变形状、尺寸和位置的一种效果,3D转换可以通过设置transform的属性值来实现动画效果,其属性值有translate3d()移动,rotate3d()旋转,scale3d缩放,perspective(n)透视等,各属性值又可以细细划分,这里就不一一赘述,其中rotate又分为rotateX(),rotateY(),rotateZ()定义沿 X-Y-Z 轴的 3D 旋转; transition属性起到过渡效果,配合translateX(x),translateY(y),translateZ(z)等沿X-Y-Z轴移动效果就能创造出意想不到的效果。

      下面再介绍几个css3的3D属性:

      perspective 属性定义 3D 元素距视角点的距离,这个属性允许你改变3D元素是怎样查看透视图,只影响3D转换元素,当为元素添加 perspective 属性时,元素本身不会获得透视效果,而其子元素会获得;

      perspective-origin 属性设置 3D 元素的视角点位置,定义 3D 元素所基于的 X 轴和 Y 轴,该属性允许改变 3D 元素的底部位置,当为元素添加该属性时,其子元素会获得透视效果。参数:x--默认值:center(50%), y--默认值:center(50%)【top | bottom | left | right | center | length | %】 

      transform-style:规定如何在3D空间中呈现被嵌套的元素,添加在父级元素上,若值为preserve-3d,则其子元素将保留其 3D 位置;默认值为flat,即所有元素默认呈现在2D平面上;该属性存在浏览器兼容问题,可使用-webkit-,-o-,-moz-等前缀兼容;

      @keyframes关键帧规则创建动画效果 至少规定动画名称和动画时长。

      下面是盒子的效果和代码:

      效果图:

      html结构:

        <div class="wrap">
    
            <ul class="bigger">
                <ul  class="small">
                    <div></div>
                    <div></div>
                    <div></div>
                    <div></div>
                    <div></div>
                    <div></div>
                </ul>
                <li></li>
                <li></li>
                <li></li>
                <li></li>
                <li></li>
                <li></li>
            </ul>
            
        </div>

    css代码:

    <style>
            body{
                background: #000 url('img/bg.jpg') no-repeat center top;
            }
            .wrap{
                position: relative;
                width: 300px;
                height: 300px;
                margin: 200px auto;
                perspective: 2000px;
            }
            .wrap .bigger,.wrap .small{
                transform-style: preserve-3d;
                transform: rotateY(60deg);
                transform-origin: top;
                transition: all 2s;
            }
            .small{
                 animation: move 5s linear infinite;
            }
            .bigger{
                animation: move 5s linear infinite;
            }
            .small div{
                position: absolute;
                top: 80px;
                left: 80px;
                width: 150px;
                height: 150px;
                transition: all 2s;
                opacity: 0.7;
            }
            .bigger li{
                position: absolute;
                top: 0;
                left: 0;
                width: 298px;
                height: 298px;
                border: 1px solid #fff;
                transition: all 2s;
            }
            .small div:nth-child(1){
                background: url('img/1.jpg');
                transform: translateZ(75px);
            }
            .small div:nth-child(2){
                background: url('img/2.jpg');
                transform: translateZ(-75px);
            }
            .small div:nth-child(3){
                background: url('img/3.jpg');
                transform: rotateY(90deg) translateZ(75px);
            }
            .small div:nth-child(4){
                background: url('img/4.jpg');
                transform: rotateY(-90deg) translateZ(75px);
            }
            .small div:nth-child(5){
                background: url('img/5.jpg');
                transform: rotateX(90deg) translateZ(75px);
            }
            .small div:nth-child(6){
                background: url('img/6.jpg');
                transform: rotateX(-90deg) translateZ(75px);
            }
            .bigger li:nth-child(2){
                background: hsla(0,50%,50%,.4);
                transform: translateZ(150px);
            }
            .bigger li:nth-child(3){
                background: hsla(60,50%,50%,.4);
                transform: translateZ(-150px);
            }
            .bigger li:nth-child(4){
                background: hsla(120,50%,50%,.4);
                transform: rotateY(90deg) translateZ(150px);
            }
            .bigger li:nth-child(5){
                background: hsla(180,50%,50%,.4);
                transform: rotateY(-90deg) translateZ(150px);
            }
            .bigger li:nth-child(6){
                background: hsla(240,50%,50%,.4);
                transform: rotateX(90deg) translateZ(150px);
            }
            .bigger li:nth-child(7){
                background: hsla(320,50%,50%,.4);
                transform: rotateX(-90deg) translateZ(150px);
            }
            
            .wrap:hover .bigger{
                 transform: rotateY(360deg);
            }
    
            .wrap:hover .bigger li:nth-child(2){
               
                transform: translateZ(300px);
            }
            .wrap:hover .bigger li:nth-child(3){
               
                transform: translateZ(-300px);
            }
            .wrap:hover .bigger li:nth-child(4){
               
                transform: rotateY(90deg) translateZ(300px);
            }
            .wrap:hover .bigger li:nth-child(5){
               
                transform: rotateY(-90deg) translateZ(300px);
            }
            .wrap:hover .bigger li:nth-child(6){
                
                transform: rotateX(90deg) translateZ(300px);
            }
            .wrap:hover .bigger li:nth-child(7){
               
                transform: rotateX(-90deg) translateZ(300px);
            }
            @keyframes move{
                0%{ transform: rotateY(0deg); }
                50%{ transform: rotateY(180deg); }
                100%{ transform: rotateY(360deg); }
            }
        </style>

      刚刚学css3,代码结构比较乱,代码里的图片可替换成大家喜欢的图片,在写上面代码时有一些注意事项:

      外层容器的高度会影响旋转的角度和位置,如果代码出现整体向外旋转的现象,可以尝试减小外层容器的宽高;perspective要放在较外层(body也可以),否则部分效果会受影响,另外在写3d效果时,transform-style: preserve-3d;最好每次都加上,没毛病,linear是匀速运动,infinite是无限次运动。 

  • 相关阅读:
    jmetal随机数
    [转]IDEA断点调试基础
    [转]java指数表示最大数和最小数
    反向学习相对基学习opposition-based learning简介
    IGD反转世代距离-多目标优化评价指标概念及实现
    matlab sum函数
    多目标优化拥挤距离计算
    [转]matlab 中的波浪号
    多目标优化按支配关系分层实现
    Matlab矩阵加入新元素
  • 原文地址:https://www.cnblogs.com/Z-xinmiao/p/5982671.html
Copyright © 2020-2023  润新知