个被无限拉长的春节假期里,有一个群体绝对不能忽视。
他们天性活泼,有旺盛的精力,处在快速成长阶段……
你坐得住,他们可不让你坐得住。
全国家长都懂:娃不疯,我先疯。
虽然,看电视伤眼睛的道理谁都懂,但已经到了第二个14天,再不拿出动画片来封印深兽,恐怕真的要疯!
▲今年奥斯卡获奖的最佳动画短片《发之恋》
既然总归要看的,不如看点真正的好片子!
时长合理,对眼睛有一定保护;没有恐怖画面,不会增加晚上哄睡的负担;绿色环保,杜绝少儿不宜。
于是我们从历届20多部奥斯卡提名和获奖的动画短片中,选出了含金量最高的9部,推荐给大家!
这是一辆开往幼儿园的车,孩子们,上车!
*这些影片的在线观看链接,我也都整理好了,都是网上能够找到的相对高清的版本,复制链接用浏览器打开就行了。
关键词 :亲情 坚持
片长:7分钟
获奖:第92届奥斯卡金像奖 最佳动画短片
观看地址:复制链接用浏览器打开
https://www.iqiyi.com/v_19rvqwgjds.html
这部短片算是在上周奥斯卡中爆冷夺得最佳动画短片,故事很简单,讲的是一位爸爸第一次给女儿扎辫子的故事。
这是重要的一天,小女孩Zuri准备打扮美美的,可是一头蓬松爆炸的头发,却难倒了她。
自己尝试失败后,决定向爸爸求助,这段与魔法怪兽拼死搏斗的画面特别有趣,像极了爸爸们给女儿梳头的样子,相信很多爸爸会有共鸣感。
一番搏斗后,爸爸还是败了,打算用帽子压住头发了事。最后,被妈妈的话鼓舞的爸爸,决定再次尝试。
这一次,他们成功了!
画面一转到病房,妈妈因为生病治疗,剃光了头发。不过收到女儿送她的画,决定勇敢面对。
短片没有过多的隐喻和猎奇画风,特别贴近生活,却演绎出一个打动人心的故事。同时也传达给我们一个信念:前路或许艰辛,但你终会到达,只要一点努力,加上满满的爱。
关键词:成长 独立 勇敢
片长:6分03秒
获奖:第89届奥斯卡金像奖 最佳动画短片
观看地址:复制链接用浏览器打开
https://v.qq.com/x/cover/mzc00200k549l9q/l3044jlpfzr.html
这部动画,我一度以为是纪录片,特效真的太逼真,每一幅画面都美的可以截图当桌面。
短短6分钟,无对白,无字幕,一个简单的故事,却描绘出一个关于成长的真谛。
一只小鹬张大嘴巴等妈妈喂食,妈妈却一直呼唤它来海边自己觅食。
不曾想还没吃到东西,就被浪潮打湿,回到家里瑟瑟发抖,拒绝再去。妈妈却没有因此心软,而是一再的鼓励它。
再次出海的小鹬遇上了小寄居蟹,学着它们躲进沙子躲避浪潮,却发现了完全不一样的景观,也打开了新世界大门。
最后看到小鹬不再害怕,肆意在海滩上觅食的样子,真的会忍俊不禁。
小鹬的成长就像我们每个人的的缩影,父母适时的放手,才能让孩子更好地成长。亲人的鼓励、好友的扶持,终会让你战胜恐惧,成为更好的自己。
必须说一下,小鹬真的萌翻了!老母亲和小宝贝双双被击中!
关键词:母爱 家庭 放手
片长:8分钟
获奖:第91届奥斯卡金像奖 最佳动画短片
观看地址:复制链接用浏览器打开
https://www.iqiyi.com/v_19rqtkymnw.html
这是一部中国风的动画,短短8分钟就能让人了解到中国人的脾气、习惯以及中国式家庭的亲情关系。
故事很简单,一个包子有了生命,这位妈妈把它当成孩子一样抚养长大,包宝宝渐渐长大,渴望独立,有自己的生活,但她却无法接受。
最终矛盾爆发,妈妈一口把它吞下了。看到这里时,我吓了一大跳,还好,故事并没有结束,原来这一切都是妈妈的噩梦。
其实想想,这是我们很多人经历过的故事。父母对孩子过分保护、不愿放手的心态,这种以爱之名养育子女,却也可能将子女吞噬。
这部动画孩子看会觉得很可爱软萌,但我更想推荐给爸爸妈妈们看,在养育孩子的同时,给与孩子足够的空间和自由,不正是我们新一代爸妈该学习的吗?
关键词:勇气 责任 守护
片长:8分钟
获奖:第91届奥斯卡最佳动画短片(提名)
观看地址:复制链接用浏览器打开
https://www.iqiyi.com/v_19rqtkymnw.html
这是一部治愈系动画短片,画风可爱,历险的故事很精彩,出镜了非常多小动物,很适合宝贝看。
短片开始就是惊心动魄,Bilby为了食物一路奔跑逃窜,一下就感觉到它生存环境的恶劣。
找食物的途中,Bilby遇到了一直呆萌的幼鸟,本想一走了之,却心生怜悯,带着它开始逃亡之路。随之是接踵而来的各种危险,眼镜蛇、蝎子、食人鱼、鳄鱼......
最终逃到了一处悬崖之上,结果又被老鹰抓走,Bilby再起鼓起勇气去解救它。最后,幼鸟长大了,两只动物成了好朋友,相互陪伴。
正因为一开始就看到Bilby生存的恶劣,它之后的善良举动才更显得珍贵。我们人也一样,虽然平凡弱小,可当我们有了想要守护的东西,就会变得勇敢无惧。父母与孩子,何尝不是如此呢?
关键词:友情 治愈 成长
片长:9分钟
获奖:第92届奥斯卡金像奖 最佳动画短片(提名)
观看地址:复制链接用浏览器打开
https://v.qq.com/x/cover/mzc00200k549l9q/l3044jlpfzr.html
特别暖心的一部动画短片,讲述一只流浪猫Kit与斗牛犬Bull从生疏防备到亲密无间的故事。
虽然是二维动画,却体现了皮克斯一贯的高水准。细节的刻画特别棒,尤其是小猫的动作、神态,捕捉的特别好。
一点声响就被吓到,将Kit是一只流浪猫,生性胆小,极其没有安全感的状态展示出来。
而bull呢,看起来有人照顾,其实一直在遭受主人的虐待。
两只小动物,从充斥着敌意,相互试探,到后来发现彼此内心的善意。这段故事,特别适合孩子从中领会什么是友谊?
▲虽然很恐惧,仍会帮Bull舔伤口给它安慰。
更让我感动的是,它们在遭受了那么多伤害后,仍选择对世界抱以善良的心。最终,它们也“被温柔以待”,找到了好主人。
我想这也是我们想让孩子明白的:只要心怀善念,虽然历经苦难,世界终将还你爱与温暖。
关键词:人际关系 幽默
片长:3分钟
获奖:第74届奥斯卡金像奖 最佳动画短片
观看地址:复制链接用浏览器打开
https://www.iqiyi.com/w_19s0kqcg75.html
皮克斯出品,延续了一贯轻松搞笑的风格。
一群小鸟聚在电线上叽叽喳喳吵个不停,不速之客大鸟的到来,打破了原来的平衡。
小鸟们突然团结起来一致对外,打算把大鸟排挤出去,可成功在即之时,意外发生了。
小鸟们因为惯性被弹到天空中,羽毛全部脱落得光秃秃,只好躲到大鸟身后了。
短片只有3分钟,却像是一出幽默的小品。一群小鸟和一只大鸟斗智斗勇,动作和表情都非常夸张,非常适合小龄宝贝看。
大人可以感受影片背后映射的某些社会现象,孩子比较难理解,但可以问孩子一些简单的问题,比如小鸟们的行为是对是错呢?怎样对待大鸟更好呢?
关键词:阅读 想象力
片长:15分钟
获奖:2012年奥斯卡金像奖最佳动画短片奖
观看地址:复制链接用浏览器打开
https://www.iqiyi.com/v_19rrh6izps.html#curid=226621500_0d52db7c805aee21d30fc41fc2ebf428
如果要提到在绘本界最有名的一部动画短片,那一定非《神奇飞书》莫属,因为这是一部关于“书”的动画,也是一部献给爱书者的短片。
在一个平静的小镇,一个男子正坐在阳台上阅读,他的身边堆满了书。突然狂风大作,所有的东西就连书上的文字都被吹走。
当男子四处游荡时,他跟着一本书来到了一栋满是书的房子,从此留在这里,与书相伴。
短片里藏着很多细节,可以和孩子多看几遍,一起发现。
富有想象力,无论是被风吹起的字幕,还是躺在巨大的书籍睡觉,最让孩子惊喜,还是里面各种飞翔的书,每一本书都有生命。
有段“救活”一本书的情节,用各种方法抢救,但唯一的方法,是打开它,阅读它。
所以,告诉孩子们,去阅读吧!只有书本传递的力量与快乐,才是永恒的,才能让原本黑白的世界变成彩色。
关键词:陪伴 信任 包容
片长:5分49秒
获奖:第82届奥斯卡入围最佳动画提名的附赠短片
观看地址:复制链接用浏览器打开
https://v.qq.com/x/page/o0642zh1spq.html
这是皮克斯2009《飞屋环游记》的加映短片,画面呆萌可爱,动画人物的表情非常生动,是宝贝们会爱的款!
讲述了一个很奇幻的故事,“孩子”是由天空中有生命的云朵们创造的,由送子鹳将他们送到不同的家。
有一朵乌云Gus,和其他云不同,它制造的孩子都是那些攻击性很强的孩子,比如,牙齿锋利的鳄鱼宝宝、有着硬角的山羊宝宝、浑身是刺的刺猬宝宝...看的时候,还真有点心疼送子鹳Peck。
就在我们以为遍体鳞伤的Peck受不了,选择了离开,却没想到它只是去穿了一套防护套装,继续回到Gus身边,这一幕真的超暖心。
Gus和Peck之间的关系,很让人感动。每个人或许都会有与世界格格不入的棱角,就像这些制造出来的“危险”。可是留在你身边的人,不管是朋友家人,还是爱人,总会给你信任和包容。
总之,这真的是一部可爱有趣又令人动容的动画。
关键词:付出 陪伴 克制
片长:6分钟
获奖:第87届奥斯卡金像奖 最佳动画短片
观看地址:复制链接用浏览器打开
https://v.qq.com/x/cover/76wjn5jwry03mhu/w0015u0o190.html?ptag=360kan.cartoon.free
通过小狗温斯顿的视角,来讲述了男主人的爱情故事。
整片的主线可是温斯顿的食物,从最初狗粮,到后来的牛排、炸肉饼、煎蛋...温斯顿的可谓是登上了狗生巅峰啊!和男主人一块儿度过了一段天堂般的美食岁月。
▲看它吃东西我都要馋了
直到男主人邂逅了生命中的另一半,温斯顿的伙食每况愈下,直到男主人失恋了...
令人意想不到的是,竟然是温斯顿拯救了男主人的爱情,而它最后又是怎样再次享受上各种美食的,看完你肯定会笑出来。
且不说一只狗的“美食盛宴”里吃出了爱情和人生,光是整部短片展现的欢乐,就值得和孩子一起看一次,相信最后你也会喜欢上这只贪吃的小狗!
愿你们度过一段特别的亲子时光~
当然啦,给宝贝看动画也要注意控制时间。
美国儿科学会建议:18个月以下的婴幼儿最好不要看电视;18个月至2岁的孩子每天的屏幕时间也不能超过1小时,爸爸妈妈们一定要严格执行哦。
最后,也想和大家聊一下动画这种艺术创作。
李安曾说过:一部好的电影,改变一个人看待世界的方式。
好的动画,同样如此。它超越想象的边界,在潜移默化中,不仅能让人看到丰富多彩的世界,更有着催人向上的作用。
那好的动画又是怎样的呢?我想除了蕴含童趣、诙谐幽默又不乏写实,更重要的是,它一定是由爱和真诚善良所组成。
在这些动画中,始终不会离开“爱”的主题,这是我们所需要的,也是想我们想教给孩子的:不管在任何时刻,都要保持爱的力量!
<canvas> 是HTML中的一个元素,它可被用来通过 JavaScript(Canvas API 或 WebGL API)绘制图形及图形动画。
Canvas API 提供了一个通过 JavaScript 和 HTML 的 <canvas> 元素来绘制图形的方式。它可以用于动画、游戏画面、数据可视化、图片编辑以及实时视频处理等方面。
<canvas>标签本身没有绘图能力,它仅仅是图形的容器。在HTML,一般通过Javascript语言来完成实际的操作。
本文通过Javascript操作Canvas制作一个简单的显示当前时间的动画时钟,了解和学习简单的canvas用法,仅以抛砖引玉。
首先创建一个HTML文件,为了方便管理,使用一个div标签包裹两个canvas标签,并加上一些简单的css样式。
<!doctype html>
<html lang="zh-cn">
<head><title>Canvas绘制动画时钟</title>
<style>
html,body{margin:0;padding:0}
#clockWrap {
position: relative;
}
canvas {
position: absolute;
}
#clock-ui {
z-index: 2;
}
#clock-plate {
z-index: 1;
}
</style>
</head>
<body>
<div id="clockWrap">
<canvas id="clock-plate"></canvas>
<canvas id="clock-ui"></canvas>
</div>
<script></script>
</body></html>
本示例中使用了两个canvas标签(为什么使用两个,一个不是更简单吗?),一个用于绘制钟面,一个根据当前时间实时显示和更新时针、分针和秒针的动态指向。好了,话不多说,开干。
一个简单的时钟,可以分为钟面上的刻度和指针。其中刻度和12个数字是固定的,我们可以将它们绘制在当作背景的canvas上(示例中id为clock-plate的canvas)。
(1)要使用canvas,首先必须通过容器获取渲染上下文:
var $=function(id){return document.querySelector(id);}//这个函数只是为了方便获取dom元素
const canvasbg=$("#clock-plate"),
canvas=$("#clock-ui"),
ctx=canvasbg.getContext("2d"),//背景容器上下文
ctxUI=canvas.getContext("2d");//指针容器上下文,后面代码要用
//定义画布宽度和高度,时钟圆直径,并设置画布大小
const oW=1000,oH=800,cW=400,r=cW/2,oX=oW/2,oY=oH/2;
canvas.width=oW;
canvas.height=oH;
canvasbg.width=oW;
canvasbg.height=oH;
(2)画钟的边框,为了好看,这里画两个圈:
//画出时钟外圆框
ctx.lineWidth=12;
ctx.beginPath();
ctx.arc(oX, oY, r+14, 0, 2 * Math.PI);
ctx.stroke();
ctx.closePath();
ctx.lineWidth=8;
//画出时钟内圆框(刻度圈)
ctx.beginPath();
ctx.arc(oX, oY, r, 0, 2 * Math.PI);
ctx.stroke();
ctx.closePath();
ctx.beginPath();
边框效果图
(3)绘制刻度线和数字,可以利用三角函数计算出每个刻度的坐标:
利用三角函数计算刻度线的坐标位置
钟面上有12个大格,从正上方12开始,它们的度数分别是270,300,330,0,30,60,90,120,150,180,210,240。然后利用JS的Math.sin和Math.cos分别计算出各大格的坐标。注意:js中Math.sin()和Math.cos()的参数不是角度数是弧度。可以使用Math.PI/180*角度来转化,比如将30度转换成弧度=Math.PI/180*30
//绘制钟表中心点
ctx.beginPath();
ctx.arc(oX, oY, 8, 0, 2 * Math.PI);//圆心
ctx.fill();
ctx.closePath();
//设置刻度线粗细度
ctx.lineWidth=3;
//设置钟面12个数字的字体、大小和对齐方式
ctx.font="30px serif";
ctx.textAlign="center";
ctx.textBaseline="middle";
var kdx,kdy;
//绘制12个大刻度和12个数字
//为方便计算,先定义了0-11这12个刻度对应的度数,也可以直接定义对应的弧度。
const hd=Math.PI/180,degr=[270,300,330,0,30,60,90,120,150,180,210,240];
for(var i=0;i<12;i++){
kdx=oX+Math.cos(hd*degr[i])*(r-3);
kdy=oY+Math.sin(hd*degr[i])*(r-3);
ctx.beginPath();
ctx.arc(kdx, kdy, 6, 0, 2 * Math.PI);//画圆形大刻度
ctx.fill();
//绘制刻度对应的数字
ctx.strokeText(i==0? 12 : i,oX+Math.cos(hd*degr[i])*(r-24),oY+Math.sin(hd*degr[i])*(r-24));
ctx.closePath();
}
//绘制小刻度
ctx.lineWidth=2;
for(var i=0;i<60;i++){
if(i % 5==0) continue;//跳过与刻度重叠的刻度
x0=Math.cos(hd*i*6);
y0=Math.sin(hd*i*6);
ctx.beginPath();
ctx.moveTo(oX+x0*(r-10), oY+y0*(r-10));
ctx.lineTo(oX+x0*r, oY+y0*r); //画短刻度线
ctx.stroke();
ctx.closePath();
}
效果如图:
钟面效果图
(4)根据当前时间绘制指针
习惯上,时针粗短,分针略粗而长,秒针细长。为加大区别,示例中秒针细长并且绘制成红色。
function drawHp(i){//绘制时针
const x0=Math.cos(hd*i*30),y0=Math.sin(hd*i*30);
drawPointer(oX,oY,oX+x0*(r-90),oY+y0*(r-90),10,"#000000");
}
function drawMp(i){//绘制分针
const x0=Math.cos(hd*i*6),y0=Math.sin(hd*i*6);
drawPointer(oX,oY,oX+x0*(r-60),oY+y0*(r-60),5,"#000000");
}
function drawSp(i){//绘制秒针
const x0=Math.cos(hd*i*6),y0=Math.sin(hd*i*6);
drawPointer(oX,oY,oX+x0*(r-20),oY+y0*(r-20),2,"#FF0000");
}
//抽取出绘制三种指针时共同的部分,注意指针绘制在渲染上下文ctxUI中
function drawPointer(ox,oy,tx,ty,width,color){
ctxUI.strokeStyle=color;
ctxUI.lineCap="round";
ctxUI.lineWidth=width;
ctxUI.beginPath();
ctxUI.moveTo(ox, oy);
ctxUI.lineTo(tx,ty);
ctxUI.stroke();
ctxUI.closePath();
}
现在已经有了绘制三种指针的方法,参数是当前时间的时、分和秒,将根据它们的值确定指针的坐标。不过,因为使用的是默认的convas坐标体系,0值实际指向3的位置,需要小小的修正一下。
window.requestAnimationFrame(function fn(){
var d=new Date();
ctxUI.clearRect(0,0,oW,oH);
//度数从0开始,而0在3刻度(15分/秒位置),修正为全值减15,如果小于0则修正回来
var hour=d.getHours(),minute=d.getMinutes()-15,second=d.getSeconds()-15;
hour=hour>11? hour-15 : hour-3;
drawHp(hour>=0? hour : 12+hour);
drawMp(minute>=0? minute : 60+minute);
drawSp(second>=0? second : 60+second);
window.requestAnimationFrame(fn);
});
接下来,调用window.requestAnimationFrame,在其中绘制并更新指标的位置。看看效果如何:
指针绘制情况与实际时间相符
貌似效果有了,截图时电脑上的时间是10时17分,指针绘制上,时针指向10时,分针指向17。嗯,感觉有点别扭?对了,时针和分针怎么是端端正正地指向它们的整时整分刻度上呢?实际钟表上时针和分针是展示动态进度的,此时时针应该越过10时的位置才对。没关系,我们在绘制时针和分针时别点东西,让它的角度值加上分针和秒针的值试试。
//修改后的绘制三种指针的方法
function drawHp(i,f,m){//绘制时针,参数:时,分,秒
const x0=Math.cos(hd*(i+(f/60)+(m/600))*30),y0=Math.sin(hd*(i+(f/60)+(m/600))*30);
drawPointer(oX,oY,oX+x0*(r-90),oY+y0*(r-90),10,"#000000");
}
function drawMp(i,f){//绘制分针,参数,分,秒
const x0=Math.cos(hd*(i+(f/60))*6),y0=Math.sin(hd*(i+(f/60))*6);
drawPointer(oX,oY,oX+x0*(r-60),oY+y0*(r-60),5,"#000000");
}
function drawSp(i){//绘制秒针
const x0=Math.cos(hd*i*6),y0=Math.sin(hd*i*6);
drawPointer(oX,oY,oX+x0*(r-20),oY+y0*(r-20),2,"#FF0000");
}
再来看看效果,嗯,立竿见影呀:
指针指向更合理了
到此为止,canvas绘制一个简易时钟就完成了。下面继续优化一下。刚才使用requestAnimationFrame方法即时更新绘制情况。这个方法与刷新率有关,看看mdn上面怎么说的:
window.requestAnimationFrame() 方法会告诉浏览器你希望执行一个动画。它要求浏览器在下一次重绘之前,调用用户提供的回调函数。
对回调函数的调用频率通常与显示器的刷新率相匹配。虽然 75hz、120hz 和 144hz 也被广泛使用,但是最常见的刷新率还是 60hz(每秒 60 个周期/帧)。为了提高性能和电池寿命,大多数浏览器都会暂停在后台选项卡或者隐藏的 <iframe> 中运行的 requestAnimationFrame()。
本示例中,更新指针的位置并不需要很高的刷新频率,可以通过节流进行一下优化:
var fps=5, fpsInterval=1000 / fps,lastTime=new Date().getTime(); //记录上次执行的时间
function runStep() {
requestAnimationFrame(runStep);
var d=new Date(),now=d.getTime()
var elapsed=now - lastTime;
if (elapsed > fpsInterval) {
ctxUI.clearRect(0,0,oW,oH);
lastTime=now - (elapsed % fpsInterval);
//度数从0开始,而0在3刻度(15分/秒位置),修正为全值-15,如果小于0则用60减回
var hour=d.getHours(),minute=d.getMinutes()-15,second=d.getSeconds()-15;//console.log(d.getSeconds(),second);
hour=hour>11? hour-15 : hour-3;
drawHp(hour>=0? hour : 12+hour,minute+15,second+15);
drawMp(minute>=0? minute : 60+minute,second+15);
drawSp(second>=0? second : 60+second);
}
}
runStep();
当然,实现时钟的方法是很多,比如可以使用画布的旋转(rotate方法)来实现指针的动态转动等等。
完整HTML+JS源码:
现代网页设计中,动画和过渡是提升用户体验的重要手段。通过使用 CSS,我们可以在不影响页面性能的前提下,实现平滑和吸引人的视觉效果。本文将介绍 CSS 动画和过渡的基础知识,并通过几个例子展示如何在你的网站中应用它们。
CSS 过渡允许你在 CSS 属性值之间创建平滑的动画效果。当一个元素的属性值改变时,过渡效果会在一定时间内平滑地过渡到新的属性值。
transition: property duration timing-function delay;
img:hover {
transform: scale(1.2);
transition: transform 0.3s ease-in-out;
}
这个例子中,当鼠标悬停在图片上时,图片会在0.3秒内放大到原来的1.2倍大小,过渡效果为ease-in-out。
CSS 动画提供了更强大的控制,允许你创建复杂的动画序列,通过定义关键帧(keyframes)来控制动画的中间状态。
@keyframes animation-name {
from {
/* 初始状态 */
}
to {
/* 结束状态 */
}
}
或者使用百分比来定义多个关键帧:
@keyframes animation-name {
0% { /* 初始状态 */ }
50% { /* 中间状态 */ }
100% { /* 结束状态 */ }
}
@keyframes spin {
from { transform: rotate(0deg); }
to { transform: rotate(360deg); }
}
.icon-spin {
animation: spin 2s linear infinite;
}
这个例子创建了一个名为spin的动画,使得图标无限期地旋转。
接下来,我们将通过几个实战例子来展示 CSS 动画和过渡的具体应用。
.button {
position: relative;
overflow: hidden;
transition: background-color 0.3s;
}
.button:after {
content: '';
position: absolute;
top: 50%;
left: 50%;
width: 5px;
height: 5px;
background: rgba(255, 255, 255, 0.7);
opacity: 0;
border-radius: 100%;
transform: scale(1, 1) translate(-50%);
transform-origin: 50% 50%;
}
.button:active:after {
width: 300px;
height: 300px;
opacity: 1;
transition: width 0.5s, height 0.5s, opacity 0s 0.5s;
}
在这个例子中,当按钮被点击时,会产生一个波纹效果,模拟水波纹扩散。
.fade-in {
animation: fadeIn 1s ease-in-out;
}
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
.fade-out {
animation: fadeOut 1s ease-in-out;
}
@keyframes fadeOut {
from { opacity: 1; }
to { opacity: 0; }
}
这个例子中定义了两个动画,一个用于元素的淡入,另一个用于元素的淡出。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>CSS Animation and Transition Example</title>
<style>
body {
font-family: 'Arial', sans-serif;
margin: 0;
padding: 0;
background: linear-gradient(-45deg, #ee7752, #e73c7e, #23a6d5, #23d5ab);
background-size: 400% 400%;
animation: gradientBG 15s ease infinite;
display: flex;
justify-content: center;
align-items: center;
flex-direction: column;
min-height: 100vh;
}
@keyframes gradientBG {
0% { background-position: 0% 50%; }
50% { background-position: 100% 50%; }
100% { background-position: 0% 50%; }
}
.logo {
font-size: 2em;
color: #007bff;
margin-bottom: 20px;
animation: spin 3s linear infinite;
}
.scrolling-text {
margin: 20px 0;
background-color: #333;
color: #fff;
padding: 10px;
white-space: nowrap;
overflow: hidden;
position: relative;
}
.scrolling-text p {
position: absolute;
width: 100%;
height: 100%;
margin: 0;
line-height: 50px;
text-align: center;
/* Starting position */
transform: translateX(100%);
/* Apply animation to this element */
animation: scroll-text 10s linear infinite;
}
@keyframes scroll-text {
0% { transform: translateX(100%); }
100% { transform: translateX(-100%); }
}
.interactive-card {
background-color: #fff;
box-shadow: 0 2px 5px rgba(0, 0, 0, 0.2);
padding: 20px;
margin: 20px;
border-radius: 10px;
transition: transform 0.3s ease, box-shadow 0.3s ease;
}
.interactive-card:hover {
transform: translateY(-10px);
box-shadow: 0 4px 10px rgba(0, 0, 0, 0.3);
}
.color-block {
width: 100px;
height: 100px;
background-color: #17a2b8;
margin: 20px;
border-radius: 50%;
transition: background-color 0.5s ease, transform 0.5s ease;
}
.color-block:hover {
background-color: #28a745;
transform: rotate(180deg);
}
</style>
</head>
<body>
<div class="logo">
<i class="fas fa-sync-alt"></i> Animated Logo
</div>
<div class="scrolling-text">
<p>This text scrolls infinitely. Pay attention to how it moves smoothly from right to left.</p>
</div>
<div class="interactive-card">
<h3>Interactive Card</h3>
<p>Hover over this card to see it move. It's a simple yet effective way to add interactivity to your design.</p>
</div>
<div class="color-block"></div>
</body>
</html>
CSS 动画和过渡是前端开发者的强大工具,它们可以在不牺牲性能的情况下为用户提供流畅、引人注目的界面交互。通过掌握这些技术,你可以创造出更加动态和生动的网页体验。记住,动画应该用来增强用户体验,而不是分散用户的注意力,适量而恰当地使用动画效果是关键。
*请认真填写需求信息,我们会在24小时内与您取得联系。