为什么我的CSS动画无法在Safari工作?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么我的CSS动画无法在Safari工作?相关的知识,希望对你有一定的参考价值。

我已经建立了使用关键帧在CSS毛刺效果。我已经加入到-webkit确保它可以在不同的浏览器。一切都完美的作品在Chrome中,但是当我在Safari上运行我的网站上的毛刺效应不起作用。我已经看过几个线程,包括this one和测试这些解决方案都无济于事。我不知道这是为什么不工作,但帮助将真正理解。

header 
  width: 100%;
  margin-bottom: 100px !important;
  padding: 0px;
  margin: 0px;


.glitch 
  position: relative;
  font-family: "Raleway", sans-serif;
  font-weight: 500;
  color: black;
  font-size: 16em;
  padding-top: 312px;
  text-align: center;


.glitch::before,
.glitch::after 
  content: attr(data-text);
  position: absolute;
  top: 312.5px;
  left: 0;
  width: 100%;
  height: 50%;


.glitch::before 
  left: 5px;
  text-shadow: -1.75px 0 red !important;
  background: white;
  -webkit-animation-name: glitch-anim-1;
  -webkit-animation-duration: 1.89s;
  -webkit-animation-iteration-count: infinite;
  -webkit-animation-timing-function: linear;
  -webkit-animation-fill-mode: alternate-reverse;
  animation-name: glitch-anim-1;
  animation-duration: 1.89s;
  animation-iteration-count: infinite;
  animation-timing-function: linear;
  animation-fill-mode: alternate-reverse;


.glitch::after 
  left: -10px;
  text-shadow: -1.75px 0 rgb(89, 0, 255);
  background: white;
  -webkit-animation-name: glitch-anim-2;
  -webkit-animation-duration: 1.89s;
  -webkit-animation-iteration-count: infinite;
  -webkit-animation-timing-function: linear;
  -webkit-animation-fill-mode: alternate-reverse;
  animation-name: glitch-anim-2;
  animation-duration: 1.89s;
  animation-iteration-count: infinite;
  animation-timing-function: linear;
  animation-fill-mode: alternate-reverse;


@-webkit-keyframes glitch-anim-1 
  0% 
    clip: rect(100px, 1500px, 150px, 0);
  
  10% 
    clip: rect(50px, 1500px, 25px, 0);
  
  20% 
    clip: rect(50px, 1500px, 25px, 0);
  
  30% 
    clip: rect(50px, 1500px, 400px, 0);
  
  40% 
    clip: rect(600px, 1500px, 50px, 0);
  
  50% 
    clip: rect(300px, 1500px, 65px, 0);
  
  60% 
    clip: rect(100px, 1500px, 150px, 0);
  
  70% 
    clip: rect(50px, 1500px, 25px, 0);
  
  80% 
    clip: rect(200px, 1500px, 30px, 0);
  
  90% 
    clip: rect(600px, 1500px, 50px, 0);
  
  100% 
    clip: rect(600px, 1500px, 50px, 0);
  


@keyframes glitch-anim-1 
  0% 
    clip: rect(100px, 1500px, 150px, 0);
  
  10% 
    clip: rect(50px, 1500px, 25px, 0);
  
  20% 
    clip: rect(50px, 1500px, 25px, 0);
  
  30% 
    clip: rect(50px, 1500px, 400px, 0);
  
  40% 
    clip: rect(600px, 1500px, 50px, 0);
  
  50% 
    clip: rect(300px, 1500px, 65px, 0);
  
  60% 
    clip: rect(100px, 1500px, 150px, 0);
  
  70% 
    clip: rect(50px, 1500px, 25px, 0);
  
  80% 
    clip: rect(200px, 1500px, 30px, 0);
  
  90% 
    clip: rect(600px, 1500px, 50px, 0);
  
  100% 
    clip: rect(600px, 1500px, 50px, 0);
  


@-webkit-keyframes glitch-anim-2 
  0% 
    clip: rect(100px, 1500px, 150px, 0);
  
  10% 
    clip: rect(50px, 1500px, 25px, 0);
  
  20% 
    clip: rect(50px, 1500px, 25px, 0);
  
  30% 
    clip: rect(50px, 1500px, 400px, 0);
  
  40% 
    clip: rect(600px, 1500px, 50px, 0);
  
  50% 
    clip: rect(300px, 1500px, 65px, 0);
  
  60% 
    clip: rect(100px, 1500px, 150px, 0);
  
  70% 
    clip: rect(50px, 1500px, 25px, 0);
  
  80% 
    clip: rect(200px, 1500px, 30px, 0);
  
  90% 
    clip: rect(600px, 1500px, 50px, 0);
  
  100% 
    clip: rect(600px, 1500px, 50px, 0);
  


@keyframes glitch-anim-2 
  0% 
    clip: rect(100px, 1500px, 150px, 0);
  
  10% 
    clip: rect(50px, 1500px, 25px, 0);
  
  20% 
    clip: rect(50px, 1500px, 25px, 0);
  
  30% 
    clip: rect(50px, 1500px, 400px, 0);
  
  40% 
    clip: rect(600px, 1500px, 50px, 0);
  
  50% 
    clip: rect(300px, 1500px, 65px, 0);
  
  60% 
    clip: rect(100px, 1500px, 150px, 0);
  
  70% 
    clip: rect(50px, 1500px, 25px, 0);
  
  80% 
    clip: rect(200px, 1500px, 30px, 0);
  
  90% 
    clip: rect(600px, 1500px, 50px, 0);
  
  100% 
    clip: rect(600px, 1500px, 50px, 0);
  
<div id="msg"></div>
<header>
  <div class="glitch" data-text="WELCOME">WELCOME</div>
  <i class="arrow fas fa-angle-double-down"></i>
</header>
答案

看来,Safari浏览器,从而让它接受它作为动画的价值有一个初步的qazxsw POI规则...

clip
header 
  width: 100%;
  margin-bottom: 100px !important;
  padding: 0px;
  margin: 0px;


.glitch 
  position: relative;
  font-family: "Raleway", sans-serif;
  font-weight: 500;
  color: black;
  font-size: 16em;
  padding-top: 312px;
  text-align: center;


.glitch::before,
.glitch::after 
  content: attr(data-text);
  position: absolute;
  top: 312.5px;
  left: 0;
  width: 100%;
  height: 50%;


.glitch::before 
  /* set an initial value for Safari */
  clip: rect(100px, 1500px, 150px, 0);
  left: 5px;
  text-shadow: -1.75px 0 red !important;
  background: white;
  animation-name: glitch-anim-1;
  animation-duration: 1.89s;
  animation-iteration-count: infinite;
  animation-timing-function: linear;
  /* note: animation-direction can have alternate-reverse, not fill-mode */
  animation-direction: alternate-reverse;
  animation-fill-mode: both;


.glitch::after 
  /* set an initial value for Safari */
  clip: rect(100px, 1500px, 150px, 0);
  left: -10px;
  text-shadow: -1.75px 0 rgb(89, 0, 255);
  background: white;
  animation-name: glitch-anim-2;
  animation-duration: 1.89s;
  animation-iteration-count: infinite;
  animation-timing-function: linear;
  /* note: animation-direction can have alternate-reverse, not fill-mode */
  animation-direction: alternate-reverse;
  animation-fill-mode: both;

/* note: unprefixed keyframes is supported since years */
@keyframes glitch-anim-1 
  0% 
    clip: rect(100px, 1500px, 150px, 0);
  
  10% 
    clip: rect(50px, 1500px, 25px, 0);
  
  20% 
    clip: rect(50px, 1500px, 25px, 0);
  
  30% 
    clip: rect(50px, 1500px, 400px, 0);
  
  40% 
    clip: rect(600px, 1500px, 50px, 0);
  
  50% 
    clip: rect(300px, 1500px, 65px, 0);
  
  60% 
    clip: rect(100px, 1500px, 150px, 0);
  
  70% 
    clip: rect(50px, 1500px, 25px, 0);
  
  80% 
    clip: rect(200px, 1500px, 30px, 0);
  
  90% 
    clip: rect(600px, 1500px, 50px, 0);
  
  100% 
    clip: rect(600px, 1500px, 50px, 0);
  


@keyframes glitch-anim-2 
  0% 
    clip: rect(100px, 1500px, 150px, 0);
  
  10% 
    clip: rect(50px, 1500px, 25px, 0);
  
  20% 
    clip: rect(50px, 1500px, 25px, 0);
  
  30% 
    clip: rect(50px, 1500px, 400px, 0);
  
  40% 
    clip: rect(600px, 1500px, 50px, 0);
  
  50% 
    clip: rect(300px, 1500px, 65px, 0);
  
  60% 
    clip: rect(100px, 1500px, 150px, 0);
  
  70% 
    clip: rect(50px, 1500px, 25px, 0);
  
  80% 
    clip: rect(200px, 1500px, 30px, 0);
  
  90% 
    clip: rect(600px, 1500px, 50px, 0);
  
  100% 
    clip: rect(600px, 1500px, 50px, 0);
  

以上是关于为什么我的CSS动画无法在Safari工作?的主要内容,如果未能解决你的问题,请参考以下文章

Safari 中的 CSS 动画错误

如何使 CSS 属性动画在 Safari 中像在 Google Chrome 中一样工作?

为啥这个 CSS3 动画在 Safari 和 Chrome 中不起作用?

CSS 动画在 wow js 中无法正常工作

运行不相关的动画时,Safari 会更改字体粗细

CSS 动画在 Chrome 上工作,但在 Safari 上不工作