CSS——过渡与动画

article/2025/3/13 6:09:09

1. 缓动效果

给过渡和动画加上缓动效果(比如具有回弹效果的过渡过程)

回弹效果是指当一个过渡达到最终值时,往回倒一点,然后再次回到最终值,如此往复一次或多次,并逐渐收敛,最终稳定在最终值。

假设要用一个元素来模拟一个下落的小球,我们会把 transform 属性从 none 过渡到 translateY(350px) 来模拟这个下落过程。

1.1 弹跳动画

CSS 提供了一个 cubic-bezier()函数,允许我们指定自定义的调速函数。

  • 它接受四个参数,分别代表两个控制锚点的坐标值,我们通过这两个控制锚点来指定想要的贝塞尔曲线
  • 语法形式是这样的:cubic-bezier(x1, y1, x2, y2),其中 (x1, y1) 表示第一个控制锚点的坐标,而 (x2, y2) 是第二个。
  • 曲线片断的两个端点分别固定在(0,0) 和 (1,1),前者是整个过渡的起点(时间进度为零,动画进度为零),后者是终点(时间进度为 100%,动画进度为 100%)
<!DOCTYPE html>
<html><head><style> @keyframes bounce {60%, 80%, to {transform: translateY(400px);animation-timing-function: ease;}70% {transform: translateY(300px);}90% {transform: translateY(360px);}}.ball {width: 0;height: 0;padding: 1.5em;border-radius: 50%;margin: auto;background: red radial-gradient(at 30% 30%, #fdd, red);animation: bounce 2s cubic-bezier(0.1, 0.25, 1, 0.25) forwards;}body {background: linear-gradient(skyblue, white 450px, yellowgreen 0);min-height: 100vh;} </style></head><body><div class="ball"></div></body>
</html> 

1.2 弹性过渡

假设有一个文本输入框,每当它被聚焦时,都需要展示一个提示框。这个提示框用来向用户提供帮助信息,比如字段值的正确格式等

CSS 属性 transform-origin 更改一个元素变形的原点。

<!DOCTYPE html>
<html><head><style> input:not(:focus) + .callout:not(:hover) {/*隐藏.callout*/transform: scale(0);transition: 0.25s transform;}.callout {transition: 0.5s cubic-bezier(0.25, 0.1, 0.3, 1.5) transform;transform-origin: 1.4em -0.4em;}/* Styling */body {padding: 1.5em;font: 200%/1.6 Baskerville;}input {display: block;padding: 0 0.4em;font: inherit;}/*提示框样式*/.callout {position: absolute;max-width: 14em;padding: 0.6em 0.8em;border-radius: 0.3em;margin: 0.3em 0 0 -0.2em;background: #fed;border: 1px solid rgba(0, 0, 0, 0.3);box-shadow: 0.05em 0.2em 0.6em rgba(0, 0, 0, 0.2);font-size: 75%;}/*三角形的箭头*/.callout:before {content: "";position: absolute;top: -0.4em;left: 1em;padding: 0.35em;background: inherit;border: inherit;border-right: 0;border-bottom: 0;transform: rotate(45deg);} </style></head><body><label>Your username:<input value="leaverou"></input><span class="callout">Only letters, numbers, underscores (_) and hyphens (-) allowed!</span></label></body>
</html> 

2. 逐帧动画

以最常见的 “加载中” 的效果为例:

使用step()函数,它可以传入一个参数,表示此次动画是分几步完成的,例如,step(8) 表示此次动画是分8部完成,也就是总共8帧,且逐帧匀速去执行的。

<!DOCTYPE html>
<html><head><style> @keyframes loader {to {background-position: -800px 0;}}.loader {width: 100px;height: 100px;text-indent: 999px;overflow: hidden; /* Hide text */background: url(http://dabblet.com/img/loader.png) 0 0;animation: loader 1s infinite steps(8);} </style></head><body><div class="loader">Loading…</div></body>
</html> 

3. 闪烁效果

通过数次闪烁(不超过三次)来提示用户界面中有某处发生了变化。

  • 比如对整个元素进行闪烁(通过 opacity 属性),
  • 对文字的颜色进行闪烁(通过 color 属性),
  • 对边框进行闪烁(通过 border-color 属性),等等

animation-direction 的 唯 一 作 用 就 是 反 转 每 一 个 循 环 周 期(reverse),或第偶数个循环周期(alternate),或第奇数个循环周期(alternate-reverse)。它的伟大之处在于,它会同时反转调整函数,从而产生更加逼真的动画效果

<!DOCTYPE html>
<html><head><style> @keyframes blink-1 {/*让状态切换发生在每个循环周期的中间*/50% {color: transparent;}}@keyframes blink-2 {to {color: transparent;}}p {padding: 1em;background: gold;}.blink-smooth-1 {animation: 1s blink-1 3;}.blink-smooth-2 {animation: 0.5s blink-2 6;animation-direction: alternate;}.blink {animation: 1s blink-1 3 steps(1);} </style></head><body><p class="blink-smooth-1">Peek-a-boo!</p><p class="blink-smooth-2">Peek-a-boo!</p><p class="blink">Peek-a-boo!</p></body>
</html> 

4. 打字动画

一段文本中的字符逐个显现,模拟出一种打字的效果。

核心思路就是让容器的宽度成为动画的主体:把所有文本包裹在这个容器中,然后让它的宽度从 0 开始以步进动画的方式、一个字一个字地扩张到它应有的宽度。并不适用于多行文本

  • 用 white-space:nowrap; 来阻止文本折行
  • overflflow: hidden;,超出宽度的文本裁切掉
  • 逐帧动画steps()所需要的步进数量是由字符的数量来决定的
  • ch 单位,表示“0”字形的宽度。在等宽字体中,“0”字形的宽度和其他所有字形的宽度是一样的。
  • 用右边框来模拟光标效果,infinite 关键字循环闪烁光标
<!DOCTYPE html>
<html><head><style> @keyframes typing {from {width: 0;}}@keyframes caret {50% {border-right-color: transparent;}}h1 {font: bold 200% Consolas, Monaco, monospace;/*width: 8.25em;*/width: 15ch;white-space: nowrap;overflow: hidden;border-right: 0.05em solid;animation: typing 8s steps(15), caret 1s steps(1) infinite;} </style></head><body><h1>CSS is awesome!</h1></body>
</html> 

5. 状态平滑的动画——暂停动画

不是所有动画都是在页面一加载好就立即播放的。

通过动画来响应用户的动作。用户的动作会随时中断动画,而此时在默认情况下,动画只会立即停止播放,并生硬地跳回开始状态

有一个属性正好是为暂停动画的需求专门设计的:animation-play-state

<!DOCTYPE html>
<html><head><style> @keyframes panoramic {to {background-position: 100% 0;}}.panoramic {width: 150px;height: 150px;background: url("http://c3.staticflickr.com/3/2671/3904743709_74bc76d5ac_b.jpg");background-size: auto 100%;animation: panoramic 10s linear infinite alternate;animation-play-state: paused;}.panoramic:hover,.panoramic:focus {animation-play-state: running;} </style></head><body><div class="panoramic"></div></body>
</html> 

把动画加在 .panoramic 这条样式中,但是让它一开始就处于暂停状态,直到 :hover 时再启动动画。这再也不是添加和取消动画的问题了,而只是暂停和继续一个一直存在的动画,因此再也不会有生硬的 跳回现象了

6. 沿环形路径平移的动画

用CSS 动画来让一个元素沿着环形路径动起来

我们希望它只是沿着环形进行移动,同时保持自己本来的朝向

6.1 需要两个元素的解决方案

用内层的变形来抵消外层的变形效果

  • 对头像元素设置另一个旋转动画,让它以相反的方向自转一周,这两层旋转的作用会在头像上相互抵消,我们只会看到父元素旋转所产生的环绕动作
  • 让内层动画从父元素那里继承所有的动画属性,然后把动画名覆盖掉
<!DOCTYPE html>
<html><head><style> @keyframes spin {to {transform: rotate(1turn);}}.avatar {animation: spin 3s infinite linear;transform-origin: 50% 150px;}.avatar > img {animation: inherit;animation-direction: reverse;/*reverse 值,可以得到原始动画的反向版本*/}/* Anything below this is just styling */.avatar {width: 50px;margin: 0 auto;border-radius: 50%;overflow: hidden;}.avatar > img {display: block;width: inherit;}.path {width: 300px;height: 300px;padding: 20px;border-radius: 50%;background: #fb3;} </style></head><body><div class="path"><div class="avatar"><img src="http://lea.verou.me/book/adamcatlace.jpg" /></div></div></body>
</html> 

6.2 单个元素的解决方案

用两次位移变形(translate)来代替变形原点(transform-origin)的作用

每个transform-origin 都是可以被两个translate() 模拟出来的

transform: rotate(30deg);
transform-origin: 200px 300px;
/*等价*/
transform: translate(200px, 300px) rotate(30deg) translate(-200px, -300px);
transform-origin: 0 0; 

每个变形函数并不是只对这个元素进行变形,而且会把整个元素的坐标系统进行变形,从而影响所有后续的变形操作。

可以把两套动画合并为一套,并只用在 .avatar这一个元素上

把头像放在圆心并以此作为起点,我们就可以消除最开始的那两个位移操作了

<!DOCTYPE html>
<html><head><style> @keyframes spin {from {transform: rotate(0turn) translateY(-150px) translateY(50%)rotate(1turn);}to {transform: rotate(1turn) translateY(-150px) translateY(50%)rotate(0turn);}}.avatar {animation: spin 3s infinite linear;}/* Anything below this is just styling */.avatar {display: block;width: 50px;margin: calc(50% - 25px) auto 0;border-radius: 50%;overflow: hidden;}.path {width: 300px;height: 300px;padding: 20px;margin: 100px auto;border-radius: 50%;background: #fb3;} </style></head><body><div class="path"><img src="http://lea.verou.me/book/adamcatlace.jpg" class="avatar" /></div></body>
</html> 

最后

整理了一套《前端大厂面试宝典》,包含了HTML、CSS、JavaScript、HTTP、TCP协议、浏览器、VUE、React、数据结构和算法,一共201道面试题,并对每个问题作出了回答和解析。

有需要的小伙伴,可以点击文末卡片领取这份文档,无偿分享

部分文档展示:



文章篇幅有限,后面的内容就不一一展示了

有需要的小伙伴,可以点下方卡片免费领取


http://chatgpt.dhexx.cn/article/ftppup67.shtml

相关文章

CSS过渡效果、变形效果以及动画

一、CSS的过渡&#xff1a;&#xff1a;从一个样式变化到另一个样式 1、transition-property&#xff1a;指定过渡的属性 属性值作用none没有任何属性会获得过渡效果all所有属性都将获得过渡效果property定义应用过渡效果的CSS属性名称&#xff0c;多个名称之间以逗号分隔 2…

CSS过渡,转换与动画

目录 过渡(transition) 转换(transform) 什么是转换 二维坐标系 移动&#xff08;translate&#xff09; 用translate实现居中 旋转&#xff08;rotate&#xff09; 设置旋转中心点 缩放&#xff08;scale&#xff09; 使用 设置缩放中心点 动画 用keyframes定义动…

CSS过渡-Transitions

目录 过渡三要素 过渡触发 属性&#xff1a; 实例运用&#xff1a; 1.过渡时间曲线动画 2.文字放大效果 3.手风琴 4. 米兔过渡 CSS transitions 可以决定哪些属性发生动画效果 (明确地列出这些属性)&#xff0c;何时开始 (设置 delay&#xff09;&#xff0c;持续多久 …

CSS过渡动画

css中实现动画有两种方式&#xff1a;transition过渡动画、 animation自定义动画。 transition 是 css3 新增的⼀个功能&#xff0c;可以实现元素不同状态间的平滑过渡&#xff08;当元素从⼀个状态进⼊到另⼀个状态时&#xff09;&#xff0c;经常⽤来制作⼀些动画效果。 之…

CSS中过渡效果(transition)

CSS中过渡效果&#xff08;transition&#xff09; 过渡&#xff08;无继承性&#xff09;1、transition-property属性2、transition-duration属性3、transition-timing-function属性4、transition-delay属性5、transition属性 兼容性练习总结 过渡&#xff08;无继承性&#x…

CSS过渡

CSS过渡 1. 什么是过渡2. 可以参与过渡的属性有哪些3. 缓动效果 1. 什么是过渡 在 CSS 中&#xff0c;过渡属性&#xff1a;transition 过渡可以为一个元素在不同样式之间变化自动添加 ”补间动画“ 相比于用 JavaScript 实现过渡&#xff0c;用 CSS 优点&#xff1a;  …

CSS系列之过渡 transition(CSS3)

文章の目录 1、transition1.1、概述1.2、值的组成 2、transition-property2.1、属性值 3、transition-duration3.1、属性值 4、transition-timing-function4.1、属性值 5、transition-delay5.1、属性值 写在最后 过渡&#xff08;transition)是CSS3中具有颠覆性的特征之一&…

CSS transition(过渡效果)详解

CSS transition&#xff08;过渡效果&#xff09;详解 通常当 CSS 的属性值更改后&#xff0c;浏览器会立即更新相应的样式&#xff0c;例如当鼠标悬停在元素上时&#xff0c;通过 :hover 选择器定义的样式会立即应用在元素上。在 CSS3 中加入了一项过渡功能&#xff0c;通过该…

#HTML5-CSS-transition-过渡特效

CSS过渡特效 概述   在CSS中用于设置过渡特效的属性是 transition&#xff0c;该属性允许CSS的属性值在一定的时间区间内平滑地过渡&#xff0c;这就拜托了我们在CSS3版本标准之前对“JavaScript”和“Flash”的依赖&#xff0c;使页面的性能得以提升。这种效果可以在鼠标悬…

Windows系统_ARM处理器无法打开客户端问题解决

问题现象&#xff1a;客户端无法打开 用户环境&#xff1a;Windows系统 ARM处理器 问题定位&#xff1a;兼容性问题 解决方法&#xff1a; 右键客户端&#xff0c;点击“属性”选择“兼容性”&#xff0c;点击“更改所有用户的设置” 选择“更改仿真设置” 勾选设置如下&a…

每日三问之rem与em区别、Vue Set基本用法与使用场景、手写call、apply、bind方法

rem与em区别 在css中单位长度用的最多的是px、em、rem&#xff0c;这三个的区别是&#xff1a; px是固定的像素&#xff0c;一旦设置了就无法因为适应页面大小而改变。em和rem相对于px更具有灵活性&#xff0c;他们是相对长度单位&#xff0c;意思是长度不是定死了的&#xf…

IntelliJ 代码规范检查设置

IntelliJ → Preferences → Code Style → Inspections 在这里可以设置各种文件格式的规范检查 安装了阿里代码规约插件以后就会多出一项 Ali-Check &#xff08;请先安装阿里的代码规约插件 IntelliJ 代码规范检查插件&#xff09; 为了让大家统一规范规则&#xff0c;我们…

macOS借助vmware隔离运行aTrust,实现宿主机“干净”连入局域网

aTrust是深信服原easyconnect的升级产品&#xff0c;重点打造了一个“零信任”的概念&#xff0c;就是这个概念让我头皮发麻&#xff0c;其在官网直接挂着 终端检测深入&#xff1a;支持进程级检测&#xff0c;可发现和阻止终端上非可信应用进程&#xff1b;在登录时、每一次访…

基于云开发的答题活动小程序v2.0-用云开发的聚合能力实现从题库中随机出题功能

项目技术栈 微信原生小程序云开发。为什么选择微信原生小程序进行开发呢&#xff1f;因为能够直接应用它的云开发能力吖。 我这里主要使用了云开发能力中的小程序端SDK&#xff0c;说白了就是在javascript中就能直接操作数据库。 本篇前言 基于云开发的答题活动小程序v2.0的…

国内唯一!腾讯零信任iOA入选全球UEM厂商全景图

近日&#xff0c;国际权威机构Forrester发布《The Unified Endpoint Management Landscape, Q3 2023》&#xff08;以下简称“报告”&#xff09;&#xff0c;对全球24家统一终端管理厂商进行了综合性评估&#xff0c;腾讯安全凭借零信任iOA在DEX&#xff08;数字化员工体验&am…

VMware:速修复这三个严重的 Workspace ONE Assist 软件漏洞

聚焦源代码安全&#xff0c;网罗国内外最新资讯&#xff01; 编译&#xff1a;代码卫士 VMware 修复了影响 Workspace ONE Assist 解决方案中的五个漏洞&#xff0c;其中一些可悲用于绕过认证并获取提升后的权限。 其中三个漏洞CVE-2022-31685、CVE-2022-31686和CVE-2022-31687…

Linux 服务器 OOM 分析

1 服务器告警短信 【监控告警】告警名称:商业业务数字科技中心机器发生oom, 状态:CRITICAL, 环境:xxx-阿里云-生产集群(生产)-生产, 告警内容: log.sys.oom(max,120s) > 0,当前值&#xff1a;1.00, 资源类型:服务器(n9e), 告警对象:10.231.82.xxx, 触发时间:2021-11-02 18:2…

Linux easy_install scrapy 报错 Not a recognized archive type: /tmp/easy_install-uem5ldyz/Twisted-18.9.

(本人用的服务器是CentOS7.3, python版本是3.7.0&#xff0c;自己的服务器用的是root用户&#xff0c;哈哈&#xff01;) 按照正常步骤安装scrapy 1.首先升级yum源 sudo yum update 2.安装依赖包 sudo yum -y install libxslt-devel pyOpenSSL python-lxml python-devel g…

启用Desktop Central Cloud:以SaaS方式拥抱UEM !

Desktop Central是一个全面的统一终端管理(UEM)解决方案&#xff0c;可以动态地保护和管理用户设备&#xff0c;包括台式机、笔记本电脑、智能手机和平板电脑。 KuppingerCole在其2020年领导者指南中将ManageEngine Desktop Central评为统一终端管理(UEM)领导者。 作为UEM领域…

重大福利!优云UEM重磅上线!

“千呼万唤始出来”&#xff0c;万众期待的优云UEM正式与宝宝们见面啦~~~ 今天很多人来问小编&#xff0c;优云Web咋不见了&#xff0c;表急&#xff0c;优云Web并没有消失&#xff0c;而是重磅升级为优云UEM啦&#xff01;&#xff01;&#xff01; 什么是UEM呢&#xff1f;UE…