问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

css中多重声明组合怎么用

发布网友 发布时间:2022-05-13 18:20

我来回答

2个回答

懂视网 时间:2022-05-13 22:41

CSS中的animations 以及 transitions都擅长实现从点A到点B的直线动画。无论你如何调整贝塞尔曲线,你都无法通过animation和transitions让元素沿着曲线运动。自定义线性方法可以产生弹性效果,但是X轴,Y轴上的相对运动还是相同的。

当然可以使用JavaScript来模拟动画,但其实有更简单的方式来绕过这个限制。

先看效果:

单纯对一个元素使用animation或者transition的话,那么计算机会自动选择从A点到B点之间最短的距离。那么如何实现我们想要的曲线效果呢?

拆分之后再组合

物理角度上分析,位移是矢量,我们把它分解成X方向和Y方向的运动。假设我们写了这样的动画:

@keyframes straightLine { 50% { transform: translate3D(100px, -100px, 0); }}.dot { animation: straightLine 2.5s infinite linear;}

从(0,0)移动到(-100, -100)的位置,拆分出来就是从(0,0)到(0, -100)与(0,0)到(-100, 0)的组合。

可能你的第一反应会跟我一样,这样写:

.dot { animation: xAxis 2.5s infinite linear, yAxis 2.5s infinite linear;}@keyframes xAxis { 50% { transform: translateX(100px); }}@keyframes yAxis { 50% { transform: translateY(-100px); } }

拆分成x,y轴方向上的运动,然后在animation中组合,然而效果是最后声明的动画有效,因为transform属性不能重复定义。

如何组合?

你可以试试这种方式:同一元素上没办法做到,那就拆分成父元素和子元素的动画。

父元素执行从左到右,子元素执行从下到上的动画。

为了让代码看上去更简洁,我们使用伪元素。

 

接着就是解决两个方向上的同步问题,为了让动画更明显,Demo使用自定义贝塞尔曲线,你也可以使用ease-in, ease-out这类内置的时间性方法。

.demo-dot { animation: xAxis 2.5s infinite cubic-bezier(0.02, 0.01, 0.21, 1);}.demo-dot::after { content: '; display: block; width: 20px; height: 20px; border-radius: 20px; background-color: #fff; animation: yAxis 2.5s infinite cubic-bezier(0.3, 0.27, 0.07, 1.64);}@-webkit-keyframes yAxis { 50% { animation-timing-function: cubic-bezier(0.02, 0.01, 0.21, 1); transform: translateY(-100px); }}@keyframes yAxis { 50% { animation-timing-function: cubic-bezier(0.02, 0.01, 0.21, 1); transform: translateY(-100px); }}@-webkit-keyframes xAxis { 50% { animation-timing-function: cubic-bezier(0.3, 0.27, 0.07, 1.64); transform: translateX(100px); }}@keyframes xAxis { 50% { animation-timing-function: cubic-bezier(0.3, 0.27, 0.07, 1.64); transform: translateX(100px); }}

一波操作之后,你就能实现让设计师赞不绝口的动画。

这里使用都是keyframe的动画,你也可以使用transitions,通过left,bottom等属性来实现,但是注意这种方式会每次都触发redraw,你可以看这篇文章。 前端性能优化之更平滑的动画

ps:伪元素动画在低端android机子上可能会失效。

结尾

这篇文章 涂鸦码龙 已经翻译过,翻译得非常不错。重新整理一遍,一来是效果确实很不错,二则是为了加深理解,做了些自己的笔记,作为学习查阅之用。

热心网友 时间:2022-05-13 19:49

  如果要定义不止一个声明,则需要用分号将每个声明分开。下面的例子展示出如何定义一个红色文字的居中段落。最后一条规则是不需要加分号的,因为分号在英语中是一个分隔符号,不是结束符号。然而,大多数有经验的设计师会在每条声明的末尾都加上分号,这么做的好处是,当你从现有的规则中增减声明时,会尽可能地减少出错的可能性。就像这样:
  p {text-align:center; color:red;}

  选择器的分组
  如果您想把很多元素显示为灰色,可以使用类似如下的规则:
  body, h2, p, table, th, td, pre, strong, em {color:gray;} 提示:通过分组,创作者可以将某些类型的样式“压缩”在一起,这样就可以得到更简洁的样式表。
  h1,h2,h3,h4,h5,h6 {
  color: green;
  }
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
手机导航用电脑软件哪个好导航软件哪个最准确 我要地图网使用我要地图网轻松查询地图信息 装配行业MES系统四大车间管理活动介绍 王者荣耀S14狂铁怎么玩_王者荣耀S14狂铁出装铭文推荐 沅陵县有姓文的分布在那个地方, 汨罗一中在省排名 汨罗高中有哪些? 湖南省岳阳市汨罗有哪些高中 新生儿脊膜膨出后遗症 在深圳硬脊膜膨出手术后大小便失禁怎么办? 三年级关于我是怎样爱我父母的作文 为什么我的头旋这里头发少 发旋头发变少,是不是要秃顶了(有图) 我的头上螺旋处头发是正常还是稀少?是秃顶的前兆吗? 我头顶有两个旋,旋的地方头发不多,人家也不说我头发少,但是在阳光下我就能看见头皮 这是秃顶吗? 在网上购买电子产品好吗? 最近饭后胃总是隐隐作疼。 电脑出现英文数字怎么办? 饭前饭后胃都不舒服请问是什么原因 自动挡不能挂空挡滑行,会缩短使用寿命,这种说法正确吗? 吃了饭之后感觉胃不舒服,这是怎么回事 自动挡车在下坡的时空挡滑行对车子有伤害么? 网上买电子产品需要注意那些? 吃饭后胃难受是怎么回事? 有时候吃饭后会胃不舒服,这是什么原因? 在网上买电子产品,质量可靠吗? 自动挡车下坡的时候可以用空挡吗? 教育研究方法观察法的主要特点有哪些?教师如何正确运用观察法 我为什么饭后觉得胃不舒服 电脑每次开机黑屏或者蓝屏,强制关机重启后就不会了。 想考编制,我想考老师,但是不知道考编笔试考什么内容,比如笔试考小学数学学科,考试涉及的内容有哪些? 现在的老师都不负责批改学生作业了吗?为什么会出现这种情况呢? 如何看待老师要求家长给孩子批改作业的做法?为什么老师不负责批改作业了? 全国至少十省叫停家长批改作业,老师为什么不批改作业? 老师为什么几天都不批改一个同学试卷,其它同学全部批改,是什么原因? 有多家长是真的不会批改作业,这种情况该怎么办? 7岁的小朋友声音嘶哑,没有咽喉痛,这要怎么办,要吃什么药? 为什么有些老师不愿意亲自批改学生的作业? 为啥现在小学老师都不批改作业了,全交给家长改? 你好,我孩子今年三岁这几天声音嘶哑早晨起来伴有几声咳嗽改吃什么药物治疗 五岁小孩没流鼻子就是有一点咳嗽声音有一点点嘶哑吃什么药呢 儿童声音嘶哑应吃什么药 城市人活跃度是什么意思 我这手机语音谈话是英文,怎么把它换成中文 CSS选择器一般应用于标签组合吗? 社会保障卡可以当城市一卡通用么 社会保障卡可以交医保吗 微信好友把我删了怎么知道 吉祥航空机务工资待遇 福利待遇怎么样? 飞机场指挥飞机降落起飞人员一月工资大概多少钱?