一文搞懂css 2D动画效果

简介: 一文搞懂css 2D动画效果

前言


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


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


进度条


f0a2ce9f7a7d4ce6a38473788dd7a254.gif

盒子旋转


c5e86d961206419eb19e5f4806f68a03.gif


盒子放缩

2f6bbeff039e40ce916b364c9bfaa6cf.gif



一、过渡动画效果简述 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、效果展示


71089ed9293b42e3a7871bfb0dc6ff12.gif


二、定位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%


55ce65d348ef4767bf1a4f90f64c36aa.png


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


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


①.代码示例


代码如下:


<!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>


②.效果展示


4b3a42bc7d4c46fb87f8bcfc8f0d9dd8.gif


三、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、效果展示


6b0fa789e06e4fe396e60d729bac9214.gif


四、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>


②.图片展示


2e0835699da74d2da62325279fef9ae3.gif


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>


②.图片展示


dce46468c1de41d1af913647bd51b619.gif


总结


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


相关文章
|
1月前
|
机器学习/深度学习 前端开发 JavaScript
|
3月前
|
前端开发
2s 利用 HTML+css动画实现企业官网效果
2s 利用 HTML+css动画实现企业官网效果
|
26天前
|
前端开发 搜索推荐 UED
实现 CSS 动画效果的兼容性
【10月更文挑战第16天】实现 CSS 动画效果的兼容性需要对不同浏览器的特性有深入的了解,并采取适当的策略和方法。通过不断的实践和优化,你可以在各种浏览器上创造出流畅、美观且兼容的动画效果,为用户带来更好的体验。在实际开发中,要密切关注浏览器的发展动态,及时掌握最新的兼容性技巧和解决方案,以确保你的动画设计能够在广泛的用户群体中得到良好的呈现。
103 58
|
5天前
|
Web App开发 前端开发 JavaScript
如何在不牺牲动画效果的前提下,优化 CSS3 动画的性能?
如何在不牺牲动画效果的前提下,优化 CSS3 动画的性能?
18 1
|
1月前
|
前端开发 JavaScript API
探索 CSS Houdini:轻松构建酷炫的 3D 卡片翻转动画
本文通过构建一个 3D 翻卡动画深入探讨了 CSS Houdini 的强大功能,展示了如何通过 Worklets、自定义属性、Paint API 等扩展 CSS 的能力,实现高度灵活的动画效果。文章首先介绍了 Houdini 的核心概念与 API,并通过构建一个动态星空背景、圆形进度条以及交互式 3D 翻卡动画的实际示例,展示了如何利用 CSS Houdini 赋予网页设计更多创造力。最后,还演示了如何将这种 3D 翻卡效果集成到公司网站中,提升用户体验。CSS Houdini 的创新能力为网页设计带来了前所未有的灵活性,推动了前端开发迈向新的高度。
26 0
探索 CSS Houdini:轻松构建酷炫的 3D 卡片翻转动画
|
2月前
|
JavaScript 前端开发
JS配合CSS3实现动画和拖动小星星小Demo
本文通过代码示例展示了如何使用JavaScript和CSS3实现动画效果和拖动小星星的交互效果,包括文字掉落动画和鼠标拖动产生小星星动画的实现方法。
46 0
JS配合CSS3实现动画和拖动小星星小Demo
|
1月前
|
前端开发
CSS 动画介绍及语法
CSS 动画介绍及语法
27 0
|
3月前
|
前端开发 UED 开发者
有趣的CSS - 文字加载动画效果
这个文本加载动画简单而有趣,可以在网站标题、广告标语或者关键信息的展示上吸引用户的注意力。开发者可以根据需要调整动画的持续时间、步骤数,或者光标颜色等,来适应特定的设计需求。使用这种动态元素,增强网站的互动性和用户体验,同时也为网站增添了一抹活泼的风格。
80 5
|
3月前
|
前端开发 JavaScript
HTML+CSS如何打造撒花动画效果?3分钟学会,炫酷到爆!
HTML+CSS如何打造撒花动画效果?3分钟学会,炫酷到爆!
|
3月前
|
前端开发
CSS动画霓虹灯闪烁效果
CSS动画霓虹灯闪烁效果

热门文章

最新文章