2022.3.18内容回顾

1.2d移动

transform:translate(x,y) 移动 不脱标 不影响兄弟盒子的布局 括号里可以写px 可以写百分比

transform:translateX() 水平方向移动

transform:translateY() 垂直方向移动

如果只写一个值,默认是x 水平方向

translate() 如果值是百分比的话,百分比的大小按照自身的宽度决定

要点:2d移动通常用作子盒子在父盒子中水平和垂直居中

以下为实现方式:

列举了两个方法作对比,可以发现,transform:translate()百分比 可以省去计算的麻烦

<!DOCTYPE html>
<html lang="zh-CN">
​
<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>
        .box {
            position: relative;
            width: 500px;
            height: 500px;
            background-color: pink;
        }
​
        .son {
            /* 要求:要实现盒子在父盒子中水平且垂直居中 */
            /* 方法一: */
            position: absolute;
            /* top: 50%;
            left: 50%;
            margin-left: -50px;
            margin-top: -50px; */
            /* 方法二 */
            top: 50%;
            left: 50%;
            transform: translate(-50%, -50%);
            width: 100px;
            height: 100px;
            background-color: blue;
        }
    </style>
</head>
​
<body>
    <div class="box">
        <div class="son"></div>
    </div>
</body>
​
</html>

2.2d旋转

transform:rotate() 括号里单位是deg

旋转默认中心点是盒子中央,可以自己设置中心点 transform-orgin:left center right top center bottom 也可以跟具体的px 也可以跟百分比

案例:利用旋转制作箭头 方法分析:给盒子下边框和有边框,让盒子顺时针旋转45deg 就做到了三角

代码:

<!DOCTYPE html>
<html lang="zh-CN">
​
<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 {
            position: relative;
            width: 269px;
            height: 30px;
            border: 2px solid #000;
        }
​
        div::after {
            content: "";
            position: absolute;
            top: 5px;
            right: 15px;
            width: 10px;
            height: 10px;
            border-right: 2px solid #000;
            border-bottom: 2px solid #000;
            transform: rotate(45deg);
            transition: all .3s;
        }
​
        div:hover::after {
            transform: rotate(-135deg);
            top: 10px;
        }
    </style>
</head>
​
<body>
    <div></div>
</body>
​
</html>

3.2d缩放

transform:scale()

括号里的值大于1是放大,小于1是缩小 也可以设置中心点

案例:实现图片的缩放。

小要点:要实现好看的动画效果,可以给盒子加overflow-hidden 这样会更加好看 还可以自己设定放大的中心点 与旋转一样。

<!DOCTYPE html>
<html lang="zh-CN">
​
<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>
        .box {
            overflow: hidden;
            width: 300px;
            height: 300px;
            border-radius: 50%;
​
        }
​
        img {
​
            width: 100%;
            height: 100%;
            transition: all .5s;
            transform-origin: 220px 230px;
        }
​
        .box:hover img {
            transform: scale(3);
​
        }
    </style>
</head>
​
<body>
    <div class="box">
        <img src="./images/temps_2.jpg" alt="">
    </div>
</body>
​
</html>

4.动画

第一步 :先定义动画

第二步:使用动画

定义动画:@keyfroms+动画名称{

}

括号里可以写百分比 也可以写form+to

调用动画:animation: name duration timing-function delay iteration-count direction fill-mode;

animation:名字 持续时间 速度曲线 延时 循环次数 是否反向移动 是否停止在最后状态

特别记忆:infinite 循环播放 forwards 保持最后状态 速度曲线中有一个 steps()步长,用几步完成动画

案例:大数据热点图案例

案例分析:要实现要求的波纹效果,首先应该考虑将盒子放在同一位置,可以给边框,但是不好看,所以考虑给盒子阴影,这样在定义动画时,改变盒子的宽高,就会是的阴影变大。

细节方面,注意阴影效果是在慢慢变浅,所以添加透明度效果。

波纹有先后之分,所以重点利用的是delay属性

<!DOCTYPE html>
<html lang="zh-CN">
​
<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>大数据热点图</title>
    <style>
        body {
            background-color: #333;
        }
​
        .map {
            position: relative;
            width: 747px;
            height: 617px;
            background: url(./images/map.png) no-repeat;
            margin: 0 auto;
        }
​
        div[class^="city"] {
            position: absolute;
            top: 228px;
            right: 196px;
        }
​
        .map .city-tb {
            top: 498px;
            right: 82px;
        }
​
        .map .city-gz {
            top: 542px;
            right: 196px;
        }
​
        .dotted {
            width: 8px;
            height: 8px;
            border-radius: 50%;
            background-color: #27ba9b;
        }
​
        div[class^="city"] div[class^="bw"] {
            position: absolute;
            top: 50%;
            left: 50%;
            transform: translate(-50%, -50%);
            width: 8px;
            height: 8px;
            box-shadow: 0px 0px 15px #27ba9b;
            border-radius: 50%;
        }
​
        .bw1 {
            animation: bowen 1.4s linear 0s infinite;
        }
​
        .bw2 {
            /* animation: name duration timing-function delay iteration-count direction fill-mode; */
            animation: bowen 1.4s linear .4s infinite;
​
        }
​
        .bw3 {
            animation: bowen 1.4s linear .8s infinite;
        }
​
        /* 定义动画 */
        @keyframes bowen {
            0% {
                width: 8px;
                height: 8px;
                opacity: 1;
            }
​
            50% {
                width: 30px;
                height: 30px;
                /* transform: scale(5); */
                opacity: 1;
            }
​
            100% {
                width: 60px;
                height: 60px;
​
                opacity: 0;
            }
        }
    </style>
</head>
​
<body>
    <div class="map">
        <div class="city-bj">
            <div class="dotted"></div>
            <div class="bw1"></div>
            <div class="bw2"></div>
            <div class="bw3"></div>
        </div>
        <div class="city-tb">
            <div class="dotted"></div>
            <div class="bw1"></div>
            <div class="bw2"></div>
            <div class="bw3"></div>
        </div>
        <div class="city-gz">
            <div class="dotted"></div>
            <div class="bw1"></div>
            <div class="bw2"></div>
            <div class="bw3"></div>
        </div>
    </div>
</body>
​
</html>

steps动画:奔跑的北极熊

案例分析:图片长度为1600px 每一个图案宽高都为200px,所以只需要设置step步长为8步完成即可

案例补充:添加了背景动画的移动,北极熊的奔跑,以及北极熊从屏幕左边移动到屏幕中央的动画。

本案例,一共制作了三个动画,练习此案例, 帮助掌握速度曲线,是否循环,以及保留最后状态。

<!DOCTYPE html>
<html lang="zh-CN">
​
<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>
        body {
            /* background: url(./images/bj.webp) repeat; */
            /* background: -webkit-linear-gradient(linear, left top, left bottom, color-stop(0%, #000000), color-stop(100%, #ffffff)); */
            background: -webkit-linear-gradient(left, rgb(218, 102, 7), rgb(187, 65, 9), rgb(208, 107, 0))
        }
​
        .box {
            z-index: 5;
            position: absolute;
            bottom: 0;
            left: 0;
            width: 200px;
            height: 100px;
            /* margin: 0 auto; */
            background: url(./images/bear.png) no-repeat;
            /* animation: name duration timing-function delay iteration-count direction fill-mode; */
            /* 元素添加多个动画,要用逗号隔开 */
            /* forwards 是保持最后状态,停留在最后的位置 */
            animation: move 1s steps(8) infinite, run 2s linear forwards;
        }
​
        @keyframes move {
            0% {
                background-position: 0 0;
            }
​
            100% {
                background-position: -1600px 0;
            }
        }
​
        @keyframes run {
            0% {}
​
            100% {
                left: 50%;
                transform: translateX(-50%);
            }
        }
​
        .bg-hei {
            z-index: 2;
            position: absolute;
            bottom: 0;
            width: 100%;
            height: 569px;
            background: url(./images/bg2.png) repeat-x;
            /* animation: name duration timing-function delay iteration-count direction fill-mode; */
            animation: dong 10s linear infinite;
        }
​
        .bg-bai {
            z-index: 4;
            position: absolute;
            bottom: 0;
            width: 100%;
            height: 336px;
            background: url(./images/bg1.png) repeat-x;
            animation: dong 10s linear infinite;
        }
​
        @keyframes dong {
            100% {
                background-position: -3840px 0;
            }
        }
​
        .son {
            position: absolute;
            top: 20px;
            right: 100px;
            width: 150px;
            height: 150px;
            /* background: -webkit-linear-gradient(left, yellow, green); */
            background: url(./images/bj.webp) no-repeat center;
            border-radius: 50%;
        }
    </style>
​
</head>
​
<body>
    <div class="bg-hei"></div>
    <div class="bg-bai"></div>
    <div class="box"></div>
    <div class="son"></div>
</body>
​
</html>
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值