Safari中颤抖的css运行文本动画(边距+翻译)

Posted

技术标签:

【中文标题】Safari中颤抖的css运行文本动画(边距+翻译)【英文标题】:Trembling css running text animation(margin + translate) in Safari 【发布时间】:2021-05-21 10:14:50 【问题描述】:

我用 CSS 相同的方式制作了一些正在运行的文本动画动画,就像在回答 here 中一样。我试图这样实现它以避免任何 JS 操作。在 Chrome 中一切正常,但在 Safari 中文本会颤抖。

.marquee 
  position: relative;
  overflow: hidden;
  background: rgb(161, 61, 175);
  color: #fff;


.marquee span 
  display: inline-block;
  min-width: 100%; /* this is to prevent shorter text animate to right */
  white-space: nowrap;
  font-size: 2.5em;
  animation: marquee 4s ease-in-out infinite;


@keyframes marquee 
  0% 
    transform: translateX(0);
    margin-left: 0;
  

  10% 
    transform: translateX(0);
    margin-left: 0;
  

  90% 
    transform: translateX(-100%);
    margin-left: 100%;
  

  100% 
    transform: translateX(-100%);
    margin-left: 100%;
  
<h1 class="marquee">
  <span>The only thing that matters now is everything You think of me</span>
</h1>

<p class="marquee">
  <span>Beware of short texts!</span>
</p>

我试图通过仅使用 CSS 来解决这个问题,但我仍然找不到解决方案。是的,我可以使用 JS 并避免将动画赋予较小的元素。但也许有一种方法可以仅使用 CSS 为 Safari 修复这些问题。

【问题讨论】:

【参考方案1】:

我的同事用这种方式重写了动画,它可以由 Safari 处理。对我们来说很明显,这种颤抖是由使用 translate + margin 引起的,这就是为什么我什至在标题中提到它的原因。您可能知道,最好避免使用边距动画。因此,我们添加了具有相反方向动画的包装器。是的,现在我们有 2 个动画,但它们被浏览器处理得更好,而不是一个同时具有平移和边距的动画

.marquee 
  position: relative;
  overflow: hidden;
  background: rgb(161, 61, 175);
  color: #fff;


.marquee-wrapper 
  width: 100%;
  animation: marquee-wrapper 4s ease-in-out infinite;  


.marquee span 
  display: inline-block;
  min-width: 100%; /* this is to prevent shorter text animate to right */
  white-space: nowrap;
  font-size: 2.5em;
  animation: marquee 4s ease-in-out infinite;


@keyframes marquee 
  0% 
    transform: translateX(0);
  

  10% 
    transform: translateX(0);
  

  90% 
    transform: translateX(-100%);
  

  100% 
    transform: translateX(-100%);
  


@keyframes marquee-wrapper 
  0% 
    transform: translateX(0);
  

  10% 
    transform: translateX(0);
  

  90% 
    transform: translateX(100%);
  

  100% 
    transform: translateX(100%);
  
<div class="marquee">
  <div class="marquee-wrapper">
    <span>
      The only thing that matters now is everything You think of me
      The only thing that matters now is everything You think of me
    </span>  
  </div>
</div>
<br/>
<div class="marquee">
  <div class="marquee-wrapper">
    <span>Beware of short texts!</span> 
  </div>
</div>

【讨论】:

以上是关于Safari中颤抖的css运行文本动画(边距+翻译)的主要内容,如果未能解决你的问题,请参考以下文章

Safari 12 css 动画效果不佳

CSS关键帧动画在Safari中不起作用

Safari 上涉及不透明度、缩放和 translateY 问题的 CSS 动画

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

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

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