Bootstrap

一文搞懂css 2D动画效果


前言

今天要介绍的是2D动画效果,主要包括2D动画的定位、旋转、缩放。


先来一波动画效果展示,后面会具体到每一个案例。

进度条

在这里插入图片描述

盒子旋转

在这里插入图片描述

盒子放缩

在这里插入图片描述

一、过渡动画效果简述 transition:

1、代码示例

        transition: all .5s 1s;
        过渡属性,过渡时间,过渡曲线,停止间隔(上述没有书写过渡函数,过渡函数不常使用)

代码如下:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        /* 
         进度条效果
          */
        .nav {
            margin: 20px;
            width: 200px;
            height: 15px;
            border-radius: 7px;
            border: red 1px solid;
            padding: 1px;
        }

        /* 
        哪个模块发生变化将transition加在哪个盒子内
         */
        .nav1 {
            width: 100px;
            height: 15px;
            border-radius: 7px;
            background-color: red;
            transition: all .5s 1s;
        }

        /* 
        经过.nav则.nav1发生变化,颜色变蓝
         */
        .nav:hover .nav1 {
            width: 150px;
            background-color: blue;

        }
    </style>
</head>

<body>
    <div class="nav">
        <div class="nav1"></div>
    </div>
    <div class="nav">
        <div class="nav1"></div>
    </div>
    <div class="nav">
        <div class="nav1"></div>
    </div>
    <div class="nav">
        <div class="nav1"></div>
    </div>
    <div class="nav">
        <div class="nav1"></div>
    </div>
    <div class="nav">
        <div class="nav1"></div>
    </div>
    <div class="nav">
        <div class="nav1"></div>
    </div>

</body>

</html>

2、效果展示

在这里插入图片描述

二、定位translate

1、2D定位 transform: translate(50%, 50%);

百分比是相对于盒子左上角为原点,向右向下移动了多少。
可以将transform加在子代元素中,也可以加在hover内。

①.代码示例

代码如下:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <!-- 
        固定盒子的方式有定位,浮动,外边距等
        以上方式盒子定位容易影响到其他盒子的位置
        2D盒子定位的盒子不会影响到其他盒子的位置,只会覆盖其他盒子
     -->
    <style>
        p {
            display: inline-block;
            width: 300px;
            height: 300px;
            background-color: turquoise;

        }

        p::before {
            content: '';
            display: block;
            width: 50%;
            height: 50%;
            background-color: brown;
            /* 使用百分比的时候用的是该盒子长宽的百分比 */
            transform: translate(50%, 50%);
        }
    </style>
</head>

<body>
    <p></p>
</body>

</html>

②.效果展示

背景盒子为浅蓝色,中间盒子为棕色,中间盒子大小为原来盒子的50%
而棕色盒子向右下偏移的长度又为棕色盒子的50%

在这里插入图片描述

2、2D定位 transform: translateY(-20px);【抬高】

在x轴或y轴移动一定的像素,有个兄弟是translateY
在这里就是进行了竖直方向的移动

①.代码示例

代码如下:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        div {
            float: left;
            margin: 100px auto;
            width: 200px;
            height: 400px;
            background-color: cadetblue;
            color: #fff;
            font-size: 30px;
            font-family: '幼圆';
            text-align: center;
            line-height: 200px;
            font-weight: 700;
            border: cyan 5px solid;
            transition: all .4s;


        }

        div:hover {
            box-shadow: 0px 20px 10px cyan;
            transform: translateY(-20px);
        }

        div::before {
            content: '';
            display: block;
            width: 200px;
            height: 200px;
            background-size: 200px 200px;
            background-image: url(../1.jpg);
        }
    </style>
</head>

<body>
    <div>Hello</div>
    <div>Hello</div>
    <div>Hello</div>
    <div>Hello</div>
    <div>Hello</div>
</body>

</html>

②.效果展示

在这里插入图片描述

三、2D旋转 transform: rotate(180deg);

旋转180deg意思就是旋转180度(顺时针)
transform-origin: left bottom;
这句话的意思是,以左下角为中心点(因为旋转默认是以中心为旋转点的)

1、代码示例

代码如下:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        div {
            overflow: hidden;
            position: relative;
            width: 300px;
            height: 300px;
            border: springgreen 5px solid;
            margin: 200px auto;

        }

        /* 
        这里不能旋转360度,旋转360度会使页面回到原始位置,给人一个没有旋转的假象
         */
        div::before {
            position: absolute;
            display: block;
            content: '';
            width: 100%;
            height: 100%;
            background-color: steelblue;
            transform-origin: left bottom;
            transform: rotate(180deg);
            transition: all .6s;
        }

        div:hover::before {
            transform: rotate(0);
        }
    </style>
</head>

<body>
    <div>

    </div>
</body>

</html>

2、效果展示

在这里插入图片描述

四、2D放缩

1、2D放缩 transform: scale(50%, 50%);

transform-origin: left bottom;
意思是按照左下角为固定中心,进行缩放
transform: scale(50%, 50%);
意思是缩放的宽、高为原来50%

①.代码示例

代码如下:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <!-- 
        h盒子放缩是页面布局中不可缺少的一部分
        可以根据transform-origin定位,使盒子依赖于某一位置进行缩放
     -->
    <style>
        div {
            width: 300px;
            height: 300px;
            background-color: steelblue;
            transition: all .7s;
            border: red 3px solid;
        }

        div:hover {
            transform-origin: left bottom;
            transform: scale(50%, 50%);
        }
    </style>
</head>

<body>
    <div></div>
</body>

</html>

②.图片展示

在这里插入图片描述

2、2D放缩 transform: scale(1.25);

transform: scale(50%, 50%);
意思是缩放的宽、高为原来50%
transform: scale(1.25);
意思是将图像放大为原来的1.25倍
是网页布局中常用到的一个动画效果。

①.代码示例

代码如下:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <!-- 
        当鼠标放在盒子上之后过渡效果会带给用户更好的体验
     -->
    <style>
        /* 
        一、
        盒子的自动放大,由于盒子有边框所以盒子内的图片放大后不会撑开盒子,而是仅仅显示盒子内的图片
         */
        div {
            overflow: hidden;
            margin: 200px auto;
            width: 200px;
            height: 200px;

            /* background-image: url(../two.png); */
        }

        div img {
            transition: all .6s;
            width: 100%;
            height: 100%;
        }

        div:hover img {
            transform: scale(1.25);
        }
    </style>
</head>

<body>
    <div><img src="../two.png" alt=""></div>
</body>

</html>

②.图片展示

在这里插入图片描述


总结

过渡是动画效果中常用的技术,2D动画效果主要的三大方面要好好掌握,华丽的动画会带给人不一样的体验,但是由于动画效率较为低下不推荐使用过多的动画效果。

;