一文搞懂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动画效果主要的三大方面要好好掌握,华丽的动画会带给人不一样的体验,但是由于动画效率较为低下不推荐使用过多的动画效果。


相关文章
|
5月前
|
自然语言处理 前端开发 JavaScript
用 通义灵码 一键生成“水波纹按钮”,连 CSS 动画都不用自己写了!
通义灵码是一款智能编程辅助工具,它可以根据自然语言指令自动生成高质量的代码。例如,只需输入“生成一个按钮,点击时带水波纹动画,模拟 Material Ripple 效果”,它就能生成具备完整交互逻辑、CSS 动画和良好性能的按钮组件。不仅如此,它还支持拓展功能,如长按触发提示、添加图标等,并能自动优化样式适配不同场景。通过通义灵码,开发者可以大幅提升效率,专注于创意实现,而不必纠结于繁琐的代码细节。
|
10月前
|
前端开发 JavaScript
CSS 过渡和动画
CSS过渡和动画是用于为网页元素添加动态效果的两种重要技术
501 143
|
2月前
|
前端开发 算法 Java
【CSS】前端三大件之一,如何学好?从基本用法开始吧!(九):强势分析Animation动画各类参数;从播放时间、播放方式、播放次数、播放方向、播放状态等多个方面,完全了解CSS3 Animation
Animation属性 css3为Animation动画提供的几个属性如下: 属性名 属性值 animation-name 指定动画名称,该属性指定一个已有的关键帧定义。 animation-duration 指定动画持续时间。 animation-timing-funtion 指定动画变化速度。 animation-delay 指定动画延迟多长时间才开始执行。 animation-iteration-count 指定动画的循环执行次数。 animation:这是一个复合属性。
203 1
|
机器学习/深度学习 前端开发 JavaScript
CSS动画知识点
CSS动画知识点
|
11月前
css3 svg制作404页面动画效果HTML源码
css3 svg制作404页面动画效果HTML源码
219 34
|
移动开发 前端开发 JavaScript
除了 CSS3,还有哪些技术可以实现动画效果?
除了 CSS3,还有哪些技术可以实现动画效果?
377 63
|
JavaScript 前端开发
CSS3 动画和 JavaScript 动画的性能比较
具体的性能表现还会受到许多因素的影响,如动画的复杂程度、浏览器的性能、设备的硬件条件等。在实际应用中,需要根据具体情况选择合适的动画技术。
|
Web App开发 前端开发 JavaScript
如何在不牺牲动画效果的前提下,优化 CSS3 动画的性能?
如何在不牺牲动画效果的前提下,优化 CSS3 动画的性能?
710 58
|
11月前
jQuery+CSS3实现404背景游戏动画源码
jQuery+CSS3实现404背景游戏动画源码
176 22
|
前端开发 搜索推荐 UED
实现 CSS 动画效果的兼容性
【10月更文挑战第16天】实现 CSS 动画效果的兼容性需要对不同浏览器的特性有深入的了解,并采取适当的策略和方法。通过不断的实践和优化,你可以在各种浏览器上创造出流畅、美观且兼容的动画效果,为用户带来更好的体验。在实际开发中,要密切关注浏览器的发展动态,及时掌握最新的兼容性技巧和解决方案,以确保你的动画设计能够在广泛的用户群体中得到良好的呈现。
346 58

热门文章

最新文章

  • 1
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(九):强势分析Animation动画各类参数;从播放时间、播放方式、播放次数、播放方向、播放状态等多个方面,完全了解CSS3 Animation
    203
  • 2
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(八):学习transition过渡属性;本文学习property模拟、duration过渡时间指定、delay时间延迟 等多个参数
    206
  • 3
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(七):学习ransform属性;本文学习 rotate旋转、scale缩放、skew扭曲、tanslate移动、matrix矩阵 多个参数
    148
  • 4
    (CSS)使用Flex布局,帮助你快速了解各种基本的Flex布局属性以及帮你让元素快速达到布局中的指定位置!
    124
  • 5
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(六):全方面分析css的Flex布局,从纵、横两个坐标开始进行居中、两端等元素分布模式;刨析元素间隔、排序模式等
    255
  • 6
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(五):背景属性;float浮动和position定位;详细分析相对、绝对、固定三种定位方式;使用浮动并清除浮动副作用
    372
  • 7
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(四):元素盒子模型;详细分析边框属性、盒子外边距
    163
  • 8
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(三):元素继承关系、层叠样式规则、字体属性、文本属性;针对字体和文本作样式修改
    101
  • 9
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(二):CSS伪类:UI伪类、结构化伪类;通过伪类获得子元素的第n个元素;创建一个伪元素展示在页面中;获得最后一个元素;处理聚焦元素的样式
    173
  • 10
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(一):CSS发展史;CSS样式表的引入;CSS选择器使用,附带案例介绍
    236