CSS查缺补漏之《过渡效果与动画效果》

news2024/12/26 0:40:41

过渡

过渡效果使用transition属性表示,设置在需要过渡效果的元素上,它可以在让元素从一种样式平滑过渡为另一种样式。下面会依次介绍其属性值~

示例代码如下:

<div class="box">
    世界你好
</div>
.box {
    width: 200px;
    height: 200px;
    background-color: yellow;
    margin: 0 auto;
    margin-top: 100px;
}

 

transition-property:表示哪个属性需要过渡效果,

可选值有:

        all,即元素中所有用长度值表示的属性都能过渡、

        具体属性名,如height/width等可以用长度值表示的属性、

        none,不过渡任何属性

常见的用长度表示的属性有:width、height、z-index、opacity、颜色、2d/3d变换属性、阴影

.box {
    width: 200px;
    height: 200px;
    background-color: yellow;
    margin: 0 auto;
    margin-top: 100px;
    /* 设置过渡属性为width与text-shadow */
    transition-property: width,text-shadow;
}
.box:hover {
    width: 300px;
    text-shadow: 20px 20px 2px green;
}

上述代码可以实现在鼠标hover到box时,box的宽度变大(变为300px),并且文字有了阴影 

transition-duration:表示过渡持续时间,即一个状态过渡到另一个状态的耗时,单位为ms或s,设置该属性可使过渡效果更平滑

可选值有:

        0 表示无过渡时间(默认值)

        s或ms,表示所有过渡属性都按同一个过渡时间

        列表,分别对应每个属性的过渡时间

.box {
    width: 200px;
    height: 200px;
    background-color: yellow;
    margin: 0 auto;
    margin-top: 100px;
    /* 设置过渡属性为width与text-shadow */
    transition-property: width,text-shadow;
    /* 为width设置过渡时间1.5s 为text-shadow设置过渡时间为2s */
    transition-duration: 1.5s,2s;
}
.box:hover {
    width: 300px;
    text-shadow: 20px 20px 2px green;
}

过渡效果会更加柔和~  

transition-delay:用于设置动画延迟开始的时间,单位m或ms

.box {
  width: 200px;
  height: 200px;
  background-color: yellow;
  margin: 0 auto;
  margin-top: 100px;
  /* 设置过渡属性为width与text-shadow */
  transition-property: width,text-shadow;
  /* 为width设置过渡时间1.5s 为text-shadow设置过渡时间为2s */
  transition-duration: 1.5s,2s;
  /* 在触发动作后间隔一秒开始过渡 */
  transition-delay: 1s;
}

.box:hover {
  width: 300px;
  text-shadow: 20px 20px 2px green;
}

 transition-timing-function:用于设置过渡的类型,即动画在每个周期的持续时间内如何进行;

可选值可用关键字或贝塞尔函数或steps函数表示:

        ① cubic-bezier(p1, p2, p3, p4)即贝塞尔函数,可以自定义各参数,且 p1 和 p3 的值必须在 0 到 1 的范围内,可通过cubic-bezier.com网站自行定义贝塞尔函数~

        ② 关键字如下

        ease即cubic-bezier(0.25, 0.1, 0.25, 1.0),表示过渡在中间加速,在结尾减速(默认值);

        linear即cubic-bezier(0.0, 0.0, 1.0, 1.0),表示过渡以匀速(线性)运动;

        ease-in即cubic-bezier(0.42, 0, 1.0, 1.0),表示过渡一开始较慢,逐渐加速直至完成

        ease-out即cubic-bezier(0, 0, 0.58, 1.0),表示过渡一开始较快,逐渐减速直至完成

        ease-in-out即cubic-bezier(0.42, 0, 0.58, 1.0),表示过渡一开始较慢,随后加速,最后再次减速直至完成;

        ③ steps(n, <jumpterm>)函数

        其中n表示过渡步数,即按照 n 个定格在过渡中显示效果,每个定格过渡时间相同;

如果 n 为 5,则有 5 个步骤。动画是否在 0%、20%、40%、60% 和 80% 处或 20%、40%、60%、80% 和 100% 处暂停,或者在动画的 0% 和 100% 之间设置 5 个定格,又或是在包括 0% 和 100% 的情况下设置 5 个定格(在 0%、25%、50%、75% 和 100% 处)取决于使用以下jumpterm(跳跃项)之一

        jumpterm定义过渡开始的位置,有:

                jump-start/start表示第一个跳跃发生在过渡开始时、

                jump-end/end表示最后一个跳跃在过渡结束时、

                jump-none表示跳跃在过渡开始或结束时均不发生、

                jump-both表示跳跃在过渡开始或结束时都发生;

 transition-timing-function: step-start 相当于steps(1, jump-start),即无过渡时间,直接显示效果;

 transition-timing-function: step-end 相当于steps(1, jump-end),即考虑过渡时间,但无过渡效果,过渡时间一到瞬间到达终点~

.box {
  width: 200px;
  height: 200px;
  background-color: yellow;
  margin: 0 auto;
  margin-top: 100px;
  /* 设置过渡属性为width与text-shadow */
  transition-property: width,text-shadow;
  /* 为width设置过渡时间1.5s 为text-shadow设置过渡时间为2s */
  transition-duration: 1s,1s;
  /* 过渡效果分五步,且在过渡开始和结束时都跳跃 */
  transition-timing-function: steps(5, jump-both)
}
.box:hover {
  width: 300px;
  text-shadow: 20px 20px 2px green;
}

 过渡复合属性:通常情况下,会利用复合属性来定义过渡效果,使用关键词transition将上述属性包含在内;

复合属性仅对过渡时间与延迟时间有顺序要求,若有一个时间,则表示为过渡时间,若为两个时间,第一个为duration,第二个为dalay;其它属性无顺序要求

.box {
  width: 200px;
  height: 200px;
  background-color: yellow;
  margin: 0 auto;
  margin-top: 100px;
 /* 第一个时间表示过渡时间为1s 第二个时间表示延迟时间为0.5s */
 /* 表示box类中的所有可以过渡属性在0.5s延迟后使用ease方式在1s内完成过渡 */
  transition: all 1s 0.5s ease;
}
.box:hover {
  width: 300px;
  text-shadow: 20px 20px 2px green;
}

动画

一幅画面一幅画面(帧)的播放连起来就成了视频,CSS3中可以通过定义一些关键帧实现动画效果;

@keyframe用于定义关键帧,可以在关键帧内定义代码片段实现动画效果(CSS会自动根据关键帧将整个动画连贯起来)

每个@keyframe 规则包含多个关键帧,可以通过from/to关键帧实现,也可以通过百分比实现

语法如下:

@keyframes slidein {
  from {
    transform: translateX(0%);
  }

  to {
    transform: translateX(100%);
  }
}

其中slidein表示关键帧名称,from关键字定义动画开始时(第一帧画面)的效果,to关键字表示动画结束时(最后一帧画面)的效果~

或者使用百分比表示关键帧位置:

@keyframes identifier {
  /* 第一帧画面的效果 */
  0% { top: 0; left: 0; } 
  /* 在动画的30%处画面的效果 */
  30% { top: 50px; }
  /* 在动画的68%与72%处画面的效果 */
  68%, 72% { left: 50px; }
  /* 最后一帧画面的效果 */
  100% { top: 100px; left: 100%; }
}

from即为0%处,to即为100%处的效果,当然也可以将百分比与from、to关键字混合使用~

定义完关键帧后,需要在使用动画的元素上定义动画名、动画持续时间、动画延迟时间等,

annimation-name 用于定义对应动画名,与关键帧@keyframes后面的属性名一一对应;

annimation-duration 用于定义动画持续时间,单位s或ms;

annimation-delay 用于定义动画延迟时间,单位s或ms

annimation-timing-function 用于定义动画类型,可选项与上述过渡一样,不再赘述

<div class="box">
  世界你好
</div>
@keyframes identifier {
  /* 第一帧画面的效果 */
  0% { 
    border-radius: 20px;
    background-color: blue;
  } 
  /* 在动画的50%处画面的效果 */
  50% { 
    border-radius: 40px;
    background-color: orange;
   }
  /* 最后一帧画面的效果 */
  100% { 
    border-radius: 50%;
    background-color: rgb(0, 208, 255);
  }
}
.box {
  width: 200px;
  height: 200px;
  background-color: yellow;
  margin: 0 auto;
  margin-top: 100px;
  animation-name: identifier;
  animation-duration: 1s;
  animation-delay: 0.5s;
  animation-timing-function: ease-in;
}

一般动画默认播放一遍,可以通过设置animation-iteration-count改变播放次数,参数为正整数或infinite(无限播放)

animation-iteration-count: infinite    /* 无限播放 */

一般动画交替播放时默认再从起始位置处播放,可通过设置animation-derection改变交替播放方向,可选值为 :        

        normal:动画交替播放时,将重置为起始状态并重新开始

        reverse:动画交替播放时,动画将重置为此次动画的结束状态并重新开始,并且animation-timing-function也会反转,如ease-in会变成ease-out

        alternate:动画在每个循环中正反交替播放,第一次迭代是正向播放。确定循环是奇数还是偶数的计数从 1 开始。

        alternate-reverse:动画在每个循环中正反交替播放,第一次迭代是反向播放。确定循环是奇数还是偶数的计数从 1 开始。 

animation-direction: alternate-reverse;

一般动画结束时,默认停在动画开始的状态,可以通过设置animation-fill-mode改变动画之外的状态,可选值为:

        forwards: 设置对象状态为动画结束时的状态;

        backwards:设置对象状态为动画开始时的状态;

 animation-fill-mode: backwards;

可以通过设置animation-play-state设置动画的播放状态(停止、播放),可选值为:

        running: 表示运行动画;

        paused:表示暂停动画

恢复暂停的动画将从暂停时停止的位置开始播放,而不是从动画序列的开头重新开始播放

.box:hover {
  /* 鼠标划过box类时动画停止 */
  animation-play-state: paused;
}

animation:表示画的复合属性,和过渡transition一样,上述所有参数(除animation-play-state外)都可以任意搭配使用,若只设置一个时间,则为动画的过渡时间,设置两个时间则分别为过渡时间与延迟时间;

animation-play-state一般与js配合使用,控制动画的暂停与运行状态

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/662119.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

多态下,为什么使用virtual修饰析构函数

多态下,为什么使用virtual修饰析构函数 问题&#xff1a; 用virtual修饰的析构函数和非虚函数的析构函数有什么区别&#xff1f; 当时以为&#xff1a;只有经过virtual修饰的析构函数&#xff0c;派生类生命周期结束时&#xff0c;才会自动的先调用派生类的析构函数&#xff0…

mybatisplus连接sqlserver配置

目录 前言&#xff1a; 一&#xff1a;所需依赖&#xff1a; 二&#xff1a;application.yml 三:分页插件 前言&#xff1a; 本文主要讲解连接sqlserver的配置 一&#xff1a;所需依赖&#xff1a; <?xml version"1.0" encoding"UTF-8"?> &l…

hutool工具包的实用方法简单介绍

说明&#xff1a;Hutool是一个小而全的Java工具类库&#xff08;详细参考&#xff1a;https://hutool.cn/docs/#/&#xff09;&#xff0c;使用前需要先添加依赖 &#xff08;添加依赖&#xff09; <dependency><groupId>cn.hutool</groupId><artifactId…

Redis从入门到精通进阶篇之持久化RDB

文章目录 RDB持久化工作原理 Redis 6的持久化机制主要有两种&#xff1a;RDB&#xff08;Redis DataBase&#xff09;和AOF&#xff08;Append Only File&#xff09;。本文将详细介绍这两种持久化方式的工作原理和配置要点。 RDB持久化 RDB持久化是将当前进程的数据生成快照…

项目经理,35岁以后就很难再有竞争力了吗?

早上好&#xff0c;我是老原。 知乎热榜上有一个问题吸引了我的注意&#xff1a; 说句公道话&#xff0c;35岁确实是个坎&#xff0c;这个坎在吃青春饭的行业来说&#xff0c;格外明显。 体力和精力都大不如年轻人&#xff0c;从性价比的角度来说&#xff0c;公司还是不会用…

2.2ORBSLAM3之几种特征点提取方法

0.简介 本节对ORB特征、SIFT特征、SURF特征、Harris角点、Shi-Tomas角点的提取与描述子计算原理进行总结&#xff0c;其中Harris角点、Shi-Tomas角点是关键点&#xff0c;没有对应的描述子&#xff0c;一般用于光流跟踪(Vins系列算法)。 综合所有的特征检测算法来看&#xff…

win设置静态IP

win设置静态IP地址 前言 局域网&#xff0c;IP地址的管理方式主要有静态分配方式和动态分配方式。 静态分配IP地址是指给每一台计算机都分配一个固定的IP地址&#xff0c;优点是便于管理&#xff0c;特别是在根据IP地址限制网络流量的局域网中&#xff0c;以固定的IP地址或IP地…

Django高级扩展之tinymce富文本实现

目录 安装 在站点中使用 注册富文本应用 添加配置文件 创建模型类 生成迁移文件 执行表迁移 配置站点 富文本不显示解决 修改主题 修改语言设置 自定义视图使用 设置路由 视图 创建模板 总结 安装 pip install django-tinymce 安装过程如下&#xff1a; 在站点…

宾军志:数据管理能力成熟度模型建设历程

4月27日在2023数据治理新实践峰会上&#xff0c;中国电子信息行业联合会数据资产管理专委会秘书长宾军志先生为大家分享了《数据管理能力成熟度模型建设历程》主题演讲。 以下为宾军志先生的演讲实录&#xff0c;为了方便阅读&#xff0c;小编做了一些字句修改和文本优化。大家…

JDK安装2023最完整教程与配置(零基础)

一、JDK简介 学习Java&#xff0c;需要下载并安装JDK&#xff0c;即Java Development Kit、Java开发工具包&#xff0c;为了能够打开java程序&#xff0c;就需要按照操作系统的要求进行环境变量的配置。 二、JDK下载 要想运行java开发的程序&#xff0c;必须先下载jdk&#…

io.netty学习 (一)Netty入门

目录 前言 Java原生API之痛 Netty的优势 非阻塞 I/O 丰富的协议 异步和事件驱动 精心设计的API 丰富的缓冲实现 高效的网络传输 Netty 核心概念 核心组件 传输服务 协议支持 Netty简单应用 总结 前言 关于Netty的学习&#xff0c;最近看了不少有关视频和书籍&am…

【git】VSCode 上的文件夹如何上传到 github 上?

一、重要意义 VSCode 上的文件夹上传到github有什么意义&#xff1f; 版本控制&#xff1a;通过将文件夹上传到GitHub&#xff0c;您可以使用Git进行版本控制。这意味着您可以记录每个文件的修改历史&#xff0c;并轻松地切换到以前的版本。如果您犯了错误或需要回滚更改&…

数据结构与算法·第10章【内部排序】

概念 排序问题可以分为内部排序和外部排序。若整个排序过程不需要访问外存便能完成&#xff0c;则称此类排序问题为内部排序&#xff1b;反之&#xff0c;若参加排序的记录数量很大&#xff0c;整个序列的排序过程不可能在内存中完成&#xff0c;则称此类排序问题为外部排序。…

成为一名成功的项目经理,你需要了解这些

作为一名有抱负的项目经理&#xff0c;你需要了解自己的职责和任务。你的职责不仅仅是确保项目的成功&#xff0c;更要负责带领团队制定可靠的执行计划&#xff0c;并确保所有工作按计划有序进行。因此&#xff0c;你必须具备身兼多职的能力&#xff0c;以确保项目能够顺利完成…

机器视觉初步5-2:图像增强专题

图像增强是一种提高图像质量和信息量的技术&#xff0c;常用于图像处理、计算机视觉和机器学习中。常见的图像增强方法包括直方图均衡化、高斯滤波、锐化、对比度拉伸、图像平滑、图像锐化、图像滤波、图像金字塔等。 以下是一些常见的图像增强方法的示例代码&#xff0c;使用H…

数据结构——顺序表(文字+代码+带图详细讲解)

在 C 语言中&#xff0c;顺序表可以使用数组来实现。顺序表是一种线性表&#xff0c;其中的元素在物理上连续存储&#xff0c;可以通过下标访问任意元素。 顺序表的基本操作包括插入、删除、查找、遍历和初始化等。 这段代码定义了一个顺序表的结构体&#xff0c;其中包括三个…

《C++多态》

文章目录 思维导图一、多态的概念二、多态的定义及其实现1.多态的构成条件2.虚函数3.虚函数的重写不构成多态的情况展示4.虚函数重写的两个例外4.1 协变4.2析构函数的重写 5.C11 override和final5.1. final5.2.override 三、抽象类1.概念2、对比纯虚函数与override3.接口继承和…

suse linux安装介质下载

在suse官网注册一个账号&#xff0c;就可以免费在上面下载软件的安装介质。 SUSE HAE介质下载和安装说明&#xff1a;

工作十年还不知道数字化转型工具?别等老板问你时才去查资料!

在职场中&#xff0c;到底有什么比较好上手又能轻易提升数字化的工具&#xff1f; 应粉丝邀请&#xff0c;我来给出一个回答。 对于企业来说&#xff0c;你可以选择大屏。对于个人来说&#xff0c;你可以选择仪表板。 工作汇报已经越来越卷&#xff0c;对于个人来说&#xff0c…

Windows远程桌面(mstsc)不能复制粘贴的解决办法

最近突然发现Windows远程桌面(mstsc)不能在远程端和本地端之间自由的复制和粘贴了&#xff0c;这还是非常影响使用体验的&#xff1b;因此记录一下解决方法&#xff0c;以便后续再遇到此类问题时查看如何解决&#xff1b; 文章目录 一、背景二、解决办法2.1 方法1 重启rdpclip.…