css动画后文本“轻推”自身

Posted

技术标签:

【中文标题】css动画后文本“轻推”自身【英文标题】:Text "nudging" itself after css animation 【发布时间】:2013-10-16 05:23:00 【问题描述】:

我无法让动画顺利旋转。元素完成旋转后,您可以看到文本“pop”略微向左。根据字体大小,这可能会发生也可能不会发生,但我希望找到一种方法来解决这个问题而不必设置确切的字体大小(因为后备字体的大小不同并且会有同样的问题)。这也取决于浏览器,在 Chrome 中看起来不错,但在 FireFox 中您可以清楚地看到这一点。

在 FireFox 中试试这个:http://jsfiddle.net/SGVNr/ 你能看到文本向左轻推(在底部框上)吗?

div 
    height: 100px;
    width: 100px;
    margin: 30px;
    background: blue;
    font: 29px/100px Arial, sans-serif;
    color: #fff;
    text-align: center;


#good 
    font-size: 30px;


div:hover 
    -webkit-animation: move 0.7s ease-out forwards;
    -moz-animation: move 0.7s ease-out forwards;
    animation: move 0.7s ease-out forwards;


@-webkit-keyframes move 
    0%  -webkit-transform: rotate(0deg); 
    100%  -webkit-transform: rotate(90deg); 


@-moz-keyframes move 
    0%  -moz-transform: rotate(0deg); 
    100%  -moz-transform: rotate(90deg); 


@keyframes move 
    0%  transform: rotate(0deg); 
    100%  transform: rotate(90deg); 

【问题讨论】:

【参考方案1】:

如果您从顶部删除 ID 并将其放在底部,则可以解决问题。因此,给这两个元素font-size:30px 使用一个可以解决您问题的类

Demo Here

编辑

经过一番调查和测试,我发现 21、22、25、27、30、33、34、36、39、41、43 和 45px 字体大小(我只测试了 20-45px)一切都按照您的意愿工作,旋转后没有任何跳跃。无论我在样式中添加/删除了哪些其他属性,这种行为都是正确的。这向我暗示这是由于 Firefox 出现了一些奇怪的渲染问题您可以在the Firefox forums

上报告它

【讨论】:

我在更改字体大小和行高后仍然遇到问题,即使字体大小大于原始 div 的大小。 试试这个例如:jsfiddle.net/SGVNr/2 对于某些字体大小,它适用于某些它不。 有趣,我仍然看到文本轻推。我在 FireFox 24 上。 我还没有彻底测试过这个,但我相信我通过将filter: url("data:image/svg+xml;utf8,<svg xmlns=\'http://www.w3.org/2000/svg\'><filter id=\'grayscale\'><feColorMatrix type=\'matrix\' values=\'1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0\'/></filter></svg>#grayscale"); 添加到旋转元素中找到了解决方案。 jsfiddle.net/SGVNr/3。注意:如果元素没有旋转,过滤器会模糊文本,但这应该很容易解决,只需在旋转时应用过滤器。这是过滤器之前的另一个示例:jsfiddle.net/42y89 之后:jsfiddle.net/42y89/2 不知何故 filter: blur(0); 也可以,在 this answer 找到它

以上是关于css动画后文本“轻推”自身的主要内容,如果未能解决你的问题,请参考以下文章

在背景图像动画之后创建背景颜色 CSS3 动画

CSS3 链式动画

CSS动画 - 在中间剪切文本

css动画完成后运行js脚本

css CSS动画阴影文本 - 动画背景

css CSS动画阴影文本 - 剪辑到文本