2012-05-14 19 views
13

Sto mostrando l'attributo title di un collegamento su :hover. L'attributo title viene aggiunto al link via :after ...Le transizioni CSS3 su pseudo-elementi (: dopo,: prima) non funzionano?

Ora sto chiedendo come posso animare l'opacità del pseudo-elemento :after quando si passa-in e librarsi-out.

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; 
} 

Partenza demo: http://jsfiddle.net/d2KrC/

Tutte le idee perché questo non sta funzionando?

+1

': before' e': after' sono pseudo-elementi, ': hover' è una pseudo-classe. Questi sono due concetti distinti, da non confondersi l'uno con l'altro. – BoltClock

+1

Questo è un bug documentato nel webkit. Controlla la mia risposta qui sotto per un trucco da risolvere, e anche il bug report per rimanere aggiornato sul suo stato – DMTintner

+0

Non c'è bisogno di -ms-transition. Quella proprietà non è mai esistita. – ReactingToAngularVues

risposta

10

WebKit (Chrome, Safari) non supporta le transizioni su pseudo elementi.

Dovrebbe funzionare in Firefox.

Modifica: Il problema in WebKit is now resolved. La patch è già arrivata in Chrome Carnery, quindi sarà supportata dalla versione 26 in poi. Non so Safari.

+1

Ok, grazie. Speriamo che risolvano il problema al più presto. – matt

+1

sono passati 2 anni. Non trattenerei il respiro. – chovy

+0

L'animazione non sembra funzionare per iphone/ipad IOS 8, qualche idea? – webkit

5

C'è una soluzione abbastanza facile a questo bug del webkit per far funzionare le transizioni su pseudo classi. Ecco un ottimo post sul blog: http://xiel.de/webkit-fix-css-transitions-on-pseudo-elements/

In pratica, il webkit non supporta direttamente le transizioni ma è possibile applicare la transizione e lo stile che si desidera modificare al relativo elemento padre. Quindi nella pseudo classe hai messo le stesse proprietà di stile che vuoi influenzare, ma dai loro il valore: inherit. Ciò farà in modo che ereditino tutti i valori degli elementi parent compresi la transizione.

Ecco un esempio che ho fatto per animare il: dopo elemento, su e giù

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; 
} 

* Aggiornamento Il bug è stato risolto in Chrome Canary (a febbraio), ma ancora sembra essere rotto in Safari. Può controllare lo stato e rimanere aggiornato su di esso qui: https://code.google.com/p/chromium/issues/detail?id=54699

Problemi correlati