Переходы 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/
Любые идеи, почему это не работает?
Ответы
Ответ 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