html - 为什么我的 CSS 动画在 Safari 12 中不起作用?
问题描述
标题基本上给出了它。我的动画在 Chrome (80) 和 Firefox (57) 中运行良好,但在 Safari (12) 中根本无法运行。
我期望发生的是从左上到右下对角线在屏幕上绘制一条直线。
我已经尝试了十几种代码变体,以下是一个:(我尝试的所有变体在 Chrome 和 Firefox 中都可以正常工作)
#move {
top:0;
left:0;
width: 0;
height: 5px;
background: rgb(255, 255, 255);
position: absolute;
-webkit-animation-name: mymove;
-webkit-animation-duration: 3s;
-webkit-animation-timing-function: linear;
-webkit-animation-fill-mode: forwards;
-webkit-transform: rotate(var(--a));
-webkit-transform-origin: top left;
-webkit-animation-delay: 1s;
-moz-animation-name: mymove;
-moz-animation-duration: 3s;
-moz-animation-timing-function: linear;
-moz-animation-fill-mode: forwards;
-moz-transform: rotate(var(--a));
-moz-transform-origin: top left;
-moz-animation-delay: 1s;
-ms-animation-name: mymove;
-ms-animation-duration: 3s;
-ms-animation-timing-function: linear;
-ms-animation-fill-mode: forwards;
-ms-transform: rotate(var(--a));
-ms-transform-origin: top left;
-ms-animation-delay: 1s;
-o-animation-name: mymove;
-o-animation-duration: 3s;
-o-animation-timing-function: linear;
-o-animation-fill-mode: forwards;
-o-transform: rotate(var(--a));
-o-transform-origin: top left;
-o-animation-delay: 1s;
animation-name: mymove;
animation-duration: 3s;
animation-timing-function: linear;
animation-fill-mode: forwards;
transform: rotate(var(--a));
transform-origin: top left;
animation-delay: 1s;
}
@-webkit-keyframes mymove {
to {
width: var(--w);
/*background-color: rgb(67, 67, 92);*/
}
}
@-moz-keyframes mymove {
to {
width: var(--w);
/*background-color: rgb(67, 67, 92);*/
}
}
@-ms-keyframes mymove {
to {
width: var(--w);
/*background-color: rgb(67, 67, 92);*/
}
}
@-o-keyframes mymove {
to {
width: var(--w);
/*background-color: rgb(67, 67, 92);*/
}
}
@keyframes mymove {
to {
width: var(--w);
/*background-color: rgb(67, 67, 92);*/
}
}
一个较短的:
#move {
top:0;
left:0;
width: 0;
height: 5px;
background: rgb(255, 255, 255);
position: absolute;
animation: mymove 3s;
animation-fill-mode: forwards;
transform-origin: top left;
transform: rotate(var(--a));
}
@keyframes mymove {
to {
width: var(--w);
}
}
的HTML:
<div id="move"></div>
我试图考虑:
webkit: 为什么我的 CSS3 动画在 Chrome 或 Safari 中不起作用?
拆分速记符号: CSS3 动画在 safari 中不起作用
延迟动画: CSS3 动画在 Safari 中不起作用
我尝试过的所有方法似乎都不适用于 Safari。我在这里想念什么?任何帮助将不胜感激!
解决方案
我有一个非常相似的问题。像 OP 一样,我正在使用 'to' 属性设置关键帧:
@keyframes dash {
to {
dash-offset: 0;
}
}
这对于 Chrome 和 Firefox 来说似乎很好。我发现 Safari 和 iOS Safari 也需要设置“from”属性。这与MDN 声称“如果关键帧规则没有指定动画的开始或结束状态(即 0%/from 和 100%/to),浏览器将使用元素的现有样式作为开始/结束状态。
我正在为一个动态元素制作动画,所以我最终使用 Web Animations API 来描述所有浏览器都可以理解的动画:
const lineAnimationTiming: EffectTiming = {
duration: 1000,
easing: 'ease-in-out'
};
const length = line.getTotalLength();
line.style.strokeDasharray = `${length} ${length}`;
line.animate(
[
{ strokeDashoffset: length },
{ strokeDashoffset: 0 }
],
lineAnimationTiming
);
编辑 2021 年 9 月 3 日:使用普通 HTML/Javascript/CSS 测试 Safari,此问题不会重现。看到这个 Stackblitz。当我第一次遇到这个问题时,我碰巧正在使用 Angular。这个问题确实在那里重现。看到这个 Stackblitz。作为这个 bug报告给 Angular 。
推荐阅读
- react-native - 访问redux store时出现无限循环
- python - Pandas Dataframe 通过重复删除行
- firebase - Firebase:Cloud Firestore:listDocuments:doc读取成本1还是N?分布式计数器的可能替代方案?
- c++ - 存储函数指针的正确语法
- c++ - 国际象棋引擎三重重复检测导致错误下法
- c# - 错误 - 存储过程没有参数,并且在 c# 中提供了参数
- r - 闪亮的 downloadHandler 等待数据准备好
- python - 对我的计划的建议 - 学生和成绩的大型数据集,希望对底部 2% 进行分类
- ruby-on-rails - 在 Ruby on Rails 中保存到数据库而不打印?
- ios - 如何使用 SwiftUI 在 tvOS 中垂直滚动?