Подтвердить что ты не робот

Переходы CSS3 на псевдоэлементы (: after,: before) не работают?

Я показываю атрибут 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/

Любые идеи, почему это не работает?   

4b9b3361

Ответ 1

WebKit (Chrome, Safari) не поддерживает переходы на псевдоэлементы.

Он должен работать в Firefox.

Изменить: Теперь проблема в WebKit устранена. Патч allready приземлился в Chrome Carnery, поэтому он будет поддерживаться с версии 26 на. Я не знаю о Safari.

Ответ 2

Это довольно простой способ обхода этой ошибки webkit, чтобы переходы работали на псевдоклассах. Вот отличный блог о нем: http://xiel.de/webkit-fix-css-transitions-on-pseudo-elements/

В основном webkit не поддерживает переходы напрямую, но вы можете применить переход и стиль, который хотите изменить, к его родительскому элементу. Затем в псевдоклассе вы помещаете те же свойства стиля, которые хотите повлиять, но дайте им значение: inherit. Это заставит их наследовать все значения родительских элементов, включая переход.

Здесь образец, который я сделал для анимации: после элемента, вверх и вниз

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 (по состоянию на февраль), но все еще кажется, что она сломана в Safari. Можете проверить статус и остаться здесь на нем: https://code.google.com/p/chromium/issues/detail?id=54699