2012-04-18 51 views
11

自从我添加了一个css过渡(第一个是悬停,第二个是动画),它似乎弄乱了我的字体,他们看起来'不同'。CSS3过渡搞乱webkit中的字体?

这是完全离奇,我已经看了几个小时,无法找到任何东西,也不是我能弄清楚到底为什么发生。

这似乎是在Firefox不错,但Safari和Chrome上有问题。

http://www.simplerweb.co.uk

一切都在底部左边的挡下面的动画似乎看起来像一个打火机字体粗细和导航菜单似乎看起来是一样的。

我完全失去了在这一个。

这里是动画的CSS。

.gearone {height:100px; 
width:100px; 
top:-10px; 
left:-10px; 
position:absolute; 
background-position:center; 
background-repeat:no-repeat; 
background-image:url(../images/gearone.png); 
-webkit-animation-name:    backrotate; 
    -webkit-animation-duration:  13s; 
    -webkit-animation-iteration-count: infinite; 
    -webkit-transition-timing-function:linear; 


-moz-animation-name: backrotate; 
    -moz-animation-duration: 13s; 
     -moz-animation-timing-function: linear; 
    -moz-animation-iteration-count: infinite; 
} 

.geartwo {height:100px; 
width:100px; 
position:absolute; 
background-position:center; 
background-repeat:no-repeat; 
background-image:url(../images/gearone.png); 
top:20px; 
left:10px; 

-webkit-animation-name:    rotate; 
    -webkit-animation-duration:   13s; 
    -webkit-animation-iteration-count: infinite; 
    -webkit-transition-timing-function:linear; 


    -moz-animation-name: rotate; 
    -moz-animation-duration: 13s; 
     -moz-animation-timing-function:linear; 
    -moz-animation-iteration-count: infinite; 

} 


@-webkit-keyframes rotate { 
    from { 
    -webkit-transform: rotate(0deg); 

    } 
    to { 
    -webkit-transform: rotate(360deg); 

    } 
} 

@-moz-keyframes rotate { 
from { 

    -moz-transform: rotate(0deg); 
    } 
    to { 

    -moz-transform: rotate(360deg); 
    } 
} 



@-webkit-keyframes backrotate { 
    0% { 

     -webkit-transform: rotate(360deg); 
    } 
    100% { 

     -webkit-transform: rotate(0deg); 
    } 
} 
@-moz-keyframes backrotate { 
    0% { 
     -moz-transform: rotate(360deg); 

    } 
    100% { 
     -moz-transform: rotate(0deg); 

    } 
} 
+0

没有人有任何想法? – andy 2012-04-18 23:53:10

回答

1

,你看到的是WebKit的抗混叠的文字,因为它是把它当作而不是一个矢量纹理。除了不使用转换,或者使用文本替换来提供图片而不是使用类型外,没有什么可以做的了。

关于webkit别名有一个few related threads,但我没有亲自将类型保存为类型,仍然使用转换。

+0

旁注:兼容,不兼容:) – djlumley 2012-04-19 02:08:46

+2

我通过添加-webkit-font-smoothing:subpixel-antialiased;给有问题的任何人的父母。 – andy 2012-04-19 11:35:05

1

我不能完全肯定的原因为什么它的发生,但它看起来像当你.geartwo元(100像素X 100像素)重叠的文字,似乎减轻了。当它脱落时,它恢复正常。我也只是在webkit浏览器中注意到这一点。

要解决它,你可以设置齿轮widthheight40px(这是图像的大小呢 - 我不认为有必要为它是100像素X 100像素),然后重新定位它因此。

编辑:我不知道,你需要我的建议后,要做到这一点,但我有点搜索后发现this related discussion

+0

+1注意齿轮。在这种情况下,重叠可能是导致字体反锯齿的原因。 – djlumley 2012-04-19 02:10:50

5

我有同样的问题。如果执行webkit过渡,某些锚文本会变得反锯齿。 经过多次尝试后,我发现这只发生在定位的元素中,并且z-index与其他元素一起定位并与z-index一起定位。

#footer { 
    bottom: 0; 
    left: 330px; 
    right: 100px; 
    height: 75px; 
    background-color: #231f20; 
    min-width: 540px; 
    min-height: 75px; 
    position: fixed; 
    z-index: 10; 
} 

页脚里面我有

#cityNav > ul > li a { 
      font-size: 24px; 
      text-transform: uppercase; 
      position: relative; 
      z-index: 110; 
      line-height: 24px; 
      height: 24px; 
      display: block; 
     } 

,这是我的过渡

.circle { 
     position: absolute; 
     top: 0; 
     left: 0; 
     display: block; 
     background-color: #ff0000; 
     width: 20px; 
     height: 20px; 
     cursor: pointer; 
     text-indent: -999em; 
     -webkit-border-radius: 50%; 
     -moz-border-radius: 50%; 
     -o-border-radius: 50%; 
     border-radius: 50%; 
     -webkit-transition: all .2s ease-out; 
     -moz-transition: all .2s ease-out; 
     -o-transition: all .2s ease-out; 
     transition: all .2s ease-out; 
    } 
    .circle:hover { 
     -webkit-transform: scale(2); 
     -moz-transform: scale(2); 
     -o-transform: scale(2); 
     transform: scale(2); 
    } 
20

我想我也有类似的问题,什么固定对我来说是增加

-webkit-font-smoothing: antialiased; 

我的身体css。当发生任何类型的动画时,webkit会尝试对文本进行抗锯齿以帮助动画,因此,将它添加到开始时会防止它改变或看起来不同。

2

我面对这个问题无数次,并已经成功添加以下的CSS动画元素:

z-index: 60000; 
position: relative; 

看来它需要两个z指数位置是有效的。在我的情况下,我用它与字体真棒动画纺纱。

2

如上所述,-webkit-font-smoothing: antialiased;适用于桌面Safari。 但在iOS上,您需要使用-webkit-backface-visibility: hidden;才能解决此问题。

+0

这确实解决了我们在Chrome 40中字体的怪异问题。还有另一个有缺陷的修复:'transform:translateZ(0)',但它一直在打破'位置:固定的',所以这是一个不行。谢谢你'背后知名度:隐藏'做了这份工作! – Rygu 2014-11-21 10:51:45

4

我在Chrome OSX中遇到了这个问题。使用-webkit-backface-visibility: hidden;修复了这个问题。

-1

对于iOS8上,我成功地消除了改造闪烁的唯一办法就是通过增加

body * { -webkit-transform: translate3d(0, 0, 0); }

我的样式表。

+0

强烈建议不要这样做。它为页面上的每个元素制作一个GPU图层。我想,巨大的记忆沉没。 – aleclarson 2017-11-20 01:49:43

-2

所有你需要做的就是添加这个CSS规则,你看到的闪烁的任何元素:

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

就是这样。

0

虽然-webkit-backface-visibility: hidden;是一个部分解决方案;它确实会毁掉文本的显示,尤其是在启用了平滑/ AA的情况下。这个bug也是令人讨厌的,因为它只发生在你使用transform属性的时候。

经过大约2年零星隔月访问这个话题,我发现了一个修复。您需要将position:relative添加到正在动画的CSS元素。有一个问题,你需要给它一个z-index的值,该值大于或者小于你在上看到失真的元素。这解决了它100%。

由于主题没有“明确的”答案,所以我希望这个答案能帮助那些与我在一起的船长达数年。