zoukankan      html  css  js  c++  java
  • CSS动画篇

    写在前面 —— 过渡(transition)

    一般配合事件使用,例如 hover事件,让盒子变化柔和一些,看起来更舒服。
    语法

    transition:属性 花费时间 延迟时间
    
    属性 描述
    属性 宽度高度,背景颜色,内外边距都可以,想要所有都过渡就写all,多个属性用逗号隔开
    花费的时间 单位是s,
    运动曲线 可选,默认为ease
    开始时间 可选,设置延迟时间触发时间,单位s,默认为0

    demo

    <!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>
          /* transition:要过度的属性 花费时间 运动曲线何时开始 */
          div {
               200px;
              height: 100px;
              background-color: skyblue;
             transition: all 1s; 
          }
          div:hover {
               400px;
             height: 400px;
             background-color: pink;  
          }
        </style>
    </head>
    <body>
        <div></div>
    </body>
    </html>
    

    加了过度效果 —— 要慢一点

    没加过度效果 —— 要快一点

    一.CSS32D转换

    2D转换是改变标签在二维二维平面上的的位置和形状。

    1.移动(translate)

    语法

    /*一起写*/
    transform: translate(x,y);
    /*分开写*/
    transform: translateX(N);
    transform: translateY(M);
    

    注释

    可以是具体的单位,也可以是百分比(参照盒子自身的大小)

    translate最大的优点是不会影响其他元素的位置(保留位置)

    对行内标签没有效果

    demo

    <!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>
          /* transition:要过度的属性 花费时间 运动曲线何时开始 */
          div {
               200px;
              height: 100px;
              background-color: skyblue;
             transition: all 1s; 
          }
          div:hover {
            transform: translate(100px,100px);
          }
        </style>
    </head>
    <body>
        <div></div>
    </body>
    </html>
    

    2.旋转(rotate)

    语法

    transform: rotate(度数)
    

    注释

    rotate.单位为deg

    角度为正时,顺时针转,为负时为逆时针

    默认的旋转中心是元素的中心点

    demo —— 旋转的小人

    <!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>
          img {
               100px;
              height: 100px;
              border: 10px solid pink;
              border-radius: 50%;
              transition: all 1s;  
          }
          img:hover {
            transform: rotate(180deg);
          }
        </style>
    </head>
    <body>
       <img src="../image.jpg" alt="">
    </body>
    </html>
    

    demo —— 翻转的三角

    <!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>
            .box {
                padding: 5px 5px;
                position: relative;
                height: 20px;
                 200px;
                border: solid 1px skyblue
            }
            .box::after {
                content: "";
                position: absolute;
                top: 8px;
                right: 15px;
                height: 10px;
                 10px;
                border-right: 1px solid #000;
                border-bottom: 1px solid #000;
                transform: rotate(45deg);
            }
    /* 鼠标经过box.里面的伪元素进行旋转 */
            .box:hover::after {
                transform: rotate(225deg);
            }
        </style>
    </head>
    <body>
      <div class="box"></div>
    </body>
    </html>
    

    更改旋转的中心点

    默认是以盒子中心为旋转点

    语法

    transform-origin: x y;
    

    注释:

    x和y的单位可以是像素或者方位名词(top bottom left right center)

    demo

    <!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>
            .box {
                margin: 200px auto;
                height: 200px;
                 200px;
                border: solid 2px skyblue;
                overflow: hidden;
               
    
            }
            .box::after {
                content: "";
                display: block;
                height: 200px;
                 200px;
                background-color:skyblue;
                transition: all 1s;
                transform-origin: left bottom;
                transform: rotate(180deg); 
               
            }
            .box:hover::after {
            transform: rotate(0deg); 
            }
    
        </style>
    </head>
    
    <body>
        <div class="box"></div>
    </body>
    
    </html>
    

    3.缩放(scale)

    语法

    /*分别设置盒子宽度和高度的放大或者缩小倍速,中间用逗号隔开,不带单位*/
    transform: scale(x,y)
    /*等比例缩放*/
    transform: scale(n)
    /*
    缩小: 数值为0.1 - 1
    放大: 数值大于1
    */
    

    注释:

    缩放也可以设置中心点,默认为盒子中心。

    demo

    <!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>
                .box {
                    margin: 200px auto;
                    height: 200px;
                     200px;
                 background-color: skyblue;
                 transition: all 1s;
                }
          .box:hover {
              transform: scale(0.1);
          }
            </style>
        </head>
        <body>
            <div class="box"></div>
        </body>
    </html>
    

    二.CSS3动画

    动画是使元素从一种样式逐渐变化为另一种样式的效果。可以改变样式任意多的次数。动画分为创建和调用两部分。

    语法

          /* 定义动画 */
            @keyframes 动画名称 {
                /* 开始状态 */
                0% {
                     100px;
                }
                /* 结束状态 */
                100% {
                     200px;
                }
            }
    

    注释

    用时间比来规定发生变化的时间,或者用关键子“from"和”to“,等同于0%和100%。

    也可以设置多个时间点

    demo

    <!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>
            /* 定义动画 */
            @keyframes move {
                0% {
                    transform: translate(0,0);
                }
    
                25% {
                   transform: translate(200px,0);
                }
                50% {
                   transform: translate(200px,200px);
                }
                75% {
                   transform: translate(0,200px);
                }
                100% {
                   transform: translate(0,0);
                }
            }
            div {
                /* 调用动画的名称 */
                animation-name: move ;
                /* 动画的执行时间 */
                animation-duration: 10s;
                height: 100px;
                 100px;
                background-color:skyblue;
            }       
        </style>
    </head>
    <body>
        <div></div>
    </body>
    </html>
    

    其他属性

    描述
    animation-name 要调用的动画名称(必须参数)
    animation-duration 完成动画所花费的时间,以秒或毫秒计。(必须参数)
    animation-timing-function 动画的速度曲线。
    animation-delay 动画开始之前的延迟。
    animation-iteration-count 动画应该播放的次数。
    animation-direction 是否应该轮流反向播放动画。

    三.CSS3 3D转换

    1.三维坐标系

    三维坐标系是指立体空间,立体空间由三个轴共同组成。

    X轴 :向右为正,向左为负

    Y轴 :向下为正,向上为负

    Z轴 :往外为正,往里面为负

    2.3D移动(translate3d)

    3D移动在2D移动的基础上多加了一个可以移动的方向(轴)。

    语法

    /* 分开写 */
    transform:translateX(n);
    transform:translateY(n);
    transform:translateZ(n);
    /* 综合写法 */
    transform: translate3d(x,y,z);
    

    注释:

    一般以px为单位

    写在要实现效果的元素上

    3.视距(perspective)

    想要在网页实现3D效果需要视距(透视)

    视距也成为透视,指的的是人的眼睛到屏幕的距离。

    视距越小(距离越小),感觉成像越大,视距大(距离越远),成像越小。

    注释:

    d : 就是视距

    Z:就是z轴,物体距离屏幕的距离,Z轴越大(正值)看到的物体就越大。

    语法

    perspective: 大小;
    /*视距要写在要实现效果的父元素上*/
    

    demo

    <!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>
            body {
                 perspective:200px;
            }
            div {
                margin: 100px auto;
                 100px;
                height: 100px;
                background-color: skyblue;
                transform: translate3d(0, 0, 100px);
            }
        </style>
    </head>
    <body>
        <div></div>
    </body>
    </html>
    

    效果1 —— 通过更改视距来实现

    效果2 —— 通过更改Z轴来实现

    4.3D旋转(rotate3d)

    (1)围绕X轴旋转

    往上转动为正值
    
    往下转动为负值
    

    demo1

    <!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>
            body {
                perspective: 300px;
            }
       div {
           margin: 100px auto;  
           /* 分开写来 */
           height: 100px;
            100px;
           background-color: skyblue;
           transition: all 2s;}
          div:hover {
          /*负值往下转动*/
            transform: rotateX(-45deg);     
          }
        </style>
    </head>
    <body>
        <div></div>
    </body>
    </html>
    

    (2)围绕Y轴旋转

    往右为正
    
    往左为负
    

    demo2

    /*在demo1的基础改动*/
    /*rotateX改为rotateY*/
    transform: rotateY(90deg);
    

    (3)围绕Z轴旋转

    往右为正
    
    往左为负
    

    dem3

    /*在demo1的基础改动*/
    /*rotateX改为rotateZ*/
    transform: rotateZ(90deg);
    

    5.3D呈现(transfrom-style)

    transfrom-style控制子元素是否爱妻三维立体环境。

    参数

    参数 描述
    flat 默认,不开启子元素3D空间
    preserve-3d 开启子盒子立体空间

    demo

    <!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>
            body {
                perspective: 300px;
            }
     .box {
         position: relative;
          200px;
         height: 200px;
         margin: 100px auto;
        transition: all 2s;
        /* 3D呈现写在父盒子上,作用在子盒子上 */
        transform-style: preserve-3d;
     }
     .box:hover {
     transform: rotateY(360deg)
     }
     .box div {
         position: absolute;
         top: 0;
         left: 0;
          100%;
         height: 100%;
         background-color:skyblue;
     }
     .box div:last-child {
         background-color:pink;
         transform: rotateX(60deg);
     }
        </style>
    </head>
    <body>
        <div class="box">
            <div></div>
            <div></div>
        </div>
    </body>
    
    </html>
    

    demo——两面翻转的盒子

    <!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>
                body {
                    perspective: 300px;
                }
                .box {
                    position: relative;
                     200px;
                    height: 200px;
                    margin: 100px auto;
                    transition: all 2s;
                    /* 3D呈现写在父盒子上,作用在子盒子上 */
                    transform-style: preserve-3d;
                }
                .box:hover {
                    transform: rotateY(180deg);
                }
                .front,
                .back {
                    position: absolute;
                    top: 0;
                    left: 0;
                     100%;
                    height: 100%;
                    border-radius: 50%;
                    color: black;
                    font-size: 30px;
                    text-align: center; 
                    line-height: 200px;
                }
                .front {
                    background-color: skyblue;
                }
                .back {
                    transform: rotateY(180deg);
                    background-color: pink
                }     
            </style>
        </head>
        <body>
            <div class="box">
                <div class="front">键盘敲烂</div>
                <div class="back">工资过万</div>
            </div>
        </body>
    </html>
    

    参考和部分截图来自哔哩哔哩视频

  • 相关阅读:
    MTD NANDFLASH驱动相关知识介绍
    Java 根据当前时间获取明天、当前周的周五、当前月的最后一天
    使用 Spring 进行单元测试
    Centos下MySQL主从同步配置
    ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock'
    CentOS 7 配置静态IP
    mysql 配置 utf8 依然乱码
    rabbitMQ Connection timed out
    CentOS 7.0,启用iptables防火墙
    linux注销、关机、重启
  • 原文地址:https://www.cnblogs.com/lc-snail/p/13123962.html
Copyright © 2011-2022 走看看