CSS3在伪元素上转换(:after,:before)不起作用?

时间:2012-05-14 06:33:28

标签: css css3 css-transitions pseudo-element

我在title上显示了链接的:hover属性。 title属性通过:after ...

附加到链接

现在我想知道如何在悬停和悬停时为:after伪元素设置不透明度的动画。

HTML

<a class="link" href="#" title="something"></a>​

CSS

.link {
    display:block;
    width:50px;
    height:50px;
    background:red;
}

.link:after {
    position:relative; 
    content: attr(title); 
    top:55px; 
    color:$blue; 
    zoom: 1; 
    filter: alpha(opacity=00); 
    opacity: 0;
    -webkit-transition: opacity .15s ease-in-out;
    -moz-transition: opacity .15s ease-in-out;
    -ms-transition: opacity .15s ease-in-out;
    -o-transition: opacity .15s ease-in-out;
    transition: opacity .15s ease-in-out;
}

.link:hover:after { 
    zoom: 1; 
    filter: alpha(opacity=100); 
    opacity: 1;
}

查看演示:http://jsfiddle.net/d2KrC/

为什么这不起作用的任何想法?     

2 个答案:

答案 0 :(得分:10)

WebKit(Chrome,Safari)不支持伪元素的转换。

它应该适用于Firefox。

修改:WebKit is now resolved中的问题。该补丁已经登陆Chrome Carnery,因此它将从26版本开始支持。我不了解Safari。

答案 1 :(得分:5)

对于这个webkit bug来说,这是一个相当简单的解决方法,可以使转换在伪类上运行。这是一篇很棒的博客文章:http://xiel.de/webkit-fix-css-transitions-on-pseudo-elements/

基本上webkit不直接支持转换,但您可以将要更改的转换和样式应用于其父元素。然后在伪类中放置您想要影响的相同样式属性,但为它们赋值:inherit。这将导致它们继承所有父元素值,包括转换。

以下是我为动画制作的示例:after元素,上下

a { 
    position: static; /* explicitly defined so not to forget that it can't be relative or :after transition hack will not work */
    top: 1px; /*doesnt move it because it is position static */
    -webkit-transition: top 200ms ease 0;
}
a:after {
    content: '';
    position: absolute;
    top: inherit;
}
a:hover {
    top: 3px;
}

*更新 该错误已在Chrome Canary中修复(截至2月),但在Safari中似乎仍然存在问题。可以查看状态并在此处保持更新: https://code.google.com/p/chromium/issues/detail?id=54699