CSS剪辑导致闪烁的微调器?

Posted

技术标签:

【中文标题】CSS剪辑导致闪烁的微调器?【英文标题】:Flickering spinner caused by CSS clip? 【发布时间】:2016-02-28 05:07:18 【问题描述】:

Here's 的样子

.spinner 
       position: absolute;
       top: 35%;
       left: 50%;
       height: 80px;
       width: 80px;
       margin: -40px 0 0 -40px;
       clip: rect(0, 80px, 80px, 40px);
       -webkit-animation: loading 1.5s linear infinite;
       animation: loading 1.5s linear infinite;
       transform-origin: center;

        &:after 
        content:'';
        position: absolute;
        height: 80px;
        width: 80px;
        clip: rect(0, 80px, 80px, 40px);
        border-radius: 50%;
        -webkit-animation: loading2 1.5s ease-in-out infinite;
       animation: loading2 1.5s ease-in-out infinite;
        
     

@-webkit-keyframes loading 
  0% 
    -webkit-transform: rotate(0deg);
    transform: rotate(0deg);
  
  100% 
    -webkit-transform: rotate(220deg);
    transform: rotate(220deg);
  

@keyframes loading 
  0% 
    transform: rotate(0deg);
  
  100% 
    transform: rotate(220deg);
  


@-webkit-keyframes loading2 
  0% 
    box-shadow: inset #5FA3F3 0 0 0 8px;
    -webkit-transform: rotate(-140deg);
    transform: rotate(-140deg);
  
  50% 
    box-shadow: inset #2771C9 0 0 0 2px;
  
  100% 
    box-shadow: inset #5FA3F3 0 0 0 8px;
    -webkit-transform: rotate(140deg);
    transform: rotate(140deg);
  

@keyframes loading2 
  0% 
    box-shadow: inset #5FA3F3 0 0 0 8px;
    -webkit-transform: rotate(-140deg);
    transform: rotate(-140deg);
  
  50% 
    box-shadow: inset #2771C9 0 0 0 2px;
  
  100% 
    box-shadow: inset #5FA3F3 0 0 0 8px;
    -webkit-transform: rotate(140deg);
    transform: rotate(140deg);
  

在 Firefox(42.0 版)上,微调器有时会卡住,我相信这可能是因为剪切矩形在其过渡结束时动画和旋转的方式。我不确定如何解决这个问题,或者是否有更好的方法来实现这个微调器。

有什么想法吗?

【问题讨论】:

难道你不应该也为 mozilla 使用 vendor-prefix 吗?例如-moz-animation , -moz-transform 对我来说,它在 FF 和 Chrome 中都卡顿了。我想这与不断变化的 box-shadow 大小有关,它似乎没有被平滑/抗锯齿。 @Chris 您不需要为 mozilla 添加供应商前缀。我已经尝试为此添加它们,但没有任何区别。 @CedricReichenbach 不只适用于字体吗? 否;我的意思是,大小似乎在整数之间跳跃,即 2px -> 3px -> 4px...,而不是在其间插入值,例如 2.5px。也许this image(这是它应该做的,但不是)可以帮助您更好地理解。 【参考方案1】:

试试这个!将其应用于您看到闪烁的元素。

-webkit-transform-style: preserve-3d;

关于preserve-3d 的一点点: https://css-tricks.com/almanac/properties/t/transform-style/

更新

您提供的示例链接是ease infinite。 如果您要像您提供的代码一样使用linear infinite,我看不出有任何问题。

-webkit-animation: loading 1.5s linear infinite;

我尝试将其从线性修改为轻松,http://codepen.io/pksunkara/pen/gbejPv,这也导致结尾闪烁很少。最好的方法是固定为单色。

【讨论】:

以前试过这个,没有效果/:我也试过 -webkit-backface-visibility: hidden; -webkit 转换:比例(1);但它什么也没改变。 :( 让我重写答案【参考方案2】:

尝试为微调器添加z-index: 1。使用 bootstrap 4 微调器时,它对我有用。

【讨论】:

以上是关于CSS剪辑导致闪烁的微调器?的主要内容,如果未能解决你的问题,请参考以下文章

CSS3 转换导致屏幕闪烁或字体别名

CSS3 转换导致文本在 Safari 和 Firefox Mac Yosemite 中闪烁

jquery/css 闪烁按需启动和停止

在显示加载微调器之前等待?

修改 CSS 或 jQuery 以防止屏幕闪烁

css overflow:scroll改为overflow:hidden时IOS闪烁bug