SVG 图像在使用 css 变换移动时变得模糊和闪烁

Posted

技术标签:

【中文标题】SVG 图像在使用 css 变换移动时变得模糊和闪烁【英文标题】:SVG Image gets blurry and flickers when using css transform to move 【发布时间】:2017-06-03 12:10:04 【问题描述】:

如何避免使用 CSS 变换时出现图像模糊/闪烁问题?我尝试了来自CSS transition effect makes image blurry / moves image 1px, in Chrome? 的一系列建议,但似乎无法弄清楚。

我在下面附上了 plunker 代码。

https://plnkr.co/edit/kXbrxjnD0llt3u8dBujv?p=preview

index.html

  <head>
    <link rel="stylesheet" href="style.css">
    <script src="script.js"></script>
  </head>

  <body>
                    <img src="usequities_green.svg" class="sample_fixed_income">

<section class="sectors">
    <div class="container index-container-responsive">
        <div class="row">
                <div class="sectors-icon">
                    <img src="usequities_green.svg" class="sectors-icon-container fixed_income">
                </div>
        </div>
    </div>
</section>  </body>

</html>

style.css

/* Styles go here */


.sectors 
    background-color: #30B784;
    color: white;
    display: flex;
    height: 680px;
    align-items: center;
    justify-content: center;
    position: relative;



.sectors__section__title 
    font-size: 32px;
    line-height: 48px;


.sectors-icon .sectors-icon-container
    animation-direction: alternate;
    animation-iteration-count: infinite;
    animation-play-state: running;
    animation-timing-function: ease-in-out;
    background-color: white;
    background-position: center;
    background-repeat: no-repeat;
    border-radius: 50%;
    box-shadow: 0 10px 40px 0 rgba(23, 28, 33, 0.13), 0 31px 13px 0 rgba(23, 28, 33, 0.05);
    opacity: 1;
    transition: margin 0s cubic-bezier(0.2,0.6,0.3,1), opacity 0s ease;


@keyframes floating_fixed_income 
    0% 
        transform: translate(0%,0%);
    
    12.5% 
        transform: translate(-2%,1%);
    
    25% 
        transform: translate(-4%,2%);
    
    50% 
        transform: translate(-2%,3%);
    
    62.5% 
        transform: translate(0%,2%);
    
    75% 
        transform: translate(1%,1%);
    
    100% 
        transform: translate(2%,0%);
    


.sectors-icon-container.fixed_income 
    animation-name: floating_fixed_income;
    animation-duration: 5s;
    height: 112px;
    background-size: 112%;
    width: 112px;
    margin-left: 73%;
    margin-top: -11%;

【问题讨论】:

我也有同样的问题 【参考方案1】:

我认为这是一个错误。不那么整洁,但我的建议是现在只为绝对定位的元素设置动画。您可以将您的sectors-icon 定位在您想要的位置,给它relative 定位,然后使用absolute 定位将悬停动画添加到它的子img

@keyframes floating_fixed_income 
    0% 
        top: 0;
    
    12.5% 
        top: 20px;
    
    25% 
        top: 10px;
    
    50% 
        top: 100px;
    
    62.5% 
        top: 50px;
    
    75% 
        top: 20px;
    
    100% 
        top: 0;
    

https://plnkr.co/edit/YHIeL9vO2nQpTaoBpup3?p=preview

【讨论】:

以上是关于SVG 图像在使用 css 变换移动时变得模糊和闪烁的主要内容,如果未能解决你的问题,请参考以下文章

Chrome 文本在不透明度过渡时变得模糊

为啥在 webkit 浏览器下缩放 SVG 会变得模糊?

CSS旋转变换使图像模糊

适用于 Android 的 chrome 中的模糊 SVG 图像

Firefox 上 CSS 动画前后的 SVG 模糊

Adobe Animate CC Canvas (CreateJS) 矢量图形在放大时变得模糊