如何修复由 CSS 动画引起的奇怪色带?

Posted

技术标签:

【中文标题】如何修复由 CSS 动画引起的奇怪色带?【英文标题】:How to fix odd color banding caused by CSS animation? 【发布时间】:2021-08-16 23:55:04 【问题描述】:

大家好。

我已经开始在Electron中制作一个小应用程序,并且想制作一个加载屏幕。

但每次我将动画添加到容器 div 时,它都会赋予其背景颜色奇怪的色带

Here's an image of it.

基本上顶部是我什至在任何地方都不会使用的颜色,而底部是我想要的实际颜色。

Here's an image with the animation disabled.

我尝试了什么:

    Edge 中运行网站,确实产生了色带。 在sn-p 中运行网站,没有产生色带。 尝试在动画本身中设置背景颜色,没有解决问题。

这是我的代码:

@import url('https://fonts.googleapis.com/css2?family=Nunito:wght@400;600&family=Roboto&display=swap');
:root 
  --main1: #282b30;
  --main2: #1e2124;
  --main3: #16181a;
  --titleFont: 'Nunito', sans-serif;
  --textFont: 'Roboto', sans-serif;
  --textColor: #ffffff;


* 
  font-family: var(--textFont);
  color: white;


html 
  height: 100%;


body 
  overflow: hidden;


.transitionContainer 
  position: absolute;
  left: 0;
  top: 0;
  width: 100%;
  height: 100%;
  background-color: var(--main2);
  color: var(--textColor);
  font-size: 500%;
  animation-name: hideTransition;
  animation-duration: 0.6s;
  animation-timing-function: cubic-bezier(0.65, 0, 0.35, 1);
  animation-delay: 1.25s;
  animation-fill-mode: both;
  opacity: 1;


@keyframes hideTransition 
  from 
    transform: scale(1);
    opacity: 1;
  
  to 
    transform: scale(1.5);
    opacity: 0;
    z-index: -1;
  


@keyframes showTransition 
  from 
    transform: scale(1.5);
    opacity: 0;
    z-index: -1;
  
  to 
    transform: scale(1);
    opacity: 1;
    z-index: 0;
  


.logoText 
  position: absolute;
  top: 50%;
  left: 50%;
  margin-left: -49.258px;
  margin-top: -96px;


.loadingBarBack 
  position: absolute;
  bottom: 0;
  left: 0;
  width: 100%;
  height: 25px;
  background-color: var(--main3);


.loadingBarFront 
  width: 0%;
  height: 100%;
  background-color: limegreen;
  animation: loading 1s;
  animation-fill-mode: forwards;


@keyframes loading 
  from 
    width: 0%;
  
  to 
    width: 100%;
  
<!DOCTYPE html>
<html>

<head>
  <meta charset="UTF-8">

  <link rel="stylesheet" href="index.css">

  <script src="./index.js" defer></script>
</head>

<body>
  <div class="transitionContainer">
    <h1 class="logoText">R</h1>
    <div class="loadingBarBack">
      <div class="loadingBarFront"></div>
    </div>
  </div>
</body>

</html>

提前感谢您的帮助!

【问题讨论】:

如果您在不同的显示器或系统上查看该站点,该条带是否仍然存在? @DavidsaysreinstateMonica 在我的手机上尝试了该页面,有条带。 【参考方案1】:

想通了!

显然animation-fill-mode: both; 导致一些 div 在动画播放之前就变得透明了。

将其设置为 animation-fill-mode: forwards; 已修复。

【讨论】:

以上是关于如何修复由 CSS 动画引起的奇怪色带?的主要内容,如果未能解决你的问题,请参考以下文章

如何修复由 lambda 事件处理程序引起的 GC 周期?

如何修复 iOS 上由 CSS 过渡和变换引起的闪烁?

如何修复由 SpringSecurity 引起的 Forbidden 403 错误?

如何修复由 Pycharm 中的 Tensorflow 引起的 cudart64_110.dll 错误?

如何修复 CSS 下拉列表动画?

如何修复由数据类型关系引起的“变量“$_v0_data”得到无效值' - Mutation Resolver