2015-05-01 7 views
6

Sto cercando di ricreare l'effetto ripple del material design in puro CSS e ho preparato l'animazione. Il problema è che non riesco a far funzionare l'animazione fino in fondo quando si fa clic sull'elemento. Ho provato con le transizioni (attempt 1 demo, attempt 2 demo), ma nessuna di queste verrà eseguita fino in fondo.Metodo CSS puro per l'esecuzione di un'animazione tramite clic

L'altro metodo più probabile è con animazioni CSS3 (non sono preoccupato per il supporto del browser in questo momento). Ho i fotogrammi chiave di animazione pronti, ma non ho mai lavorato con le animazioni molto prima e non vedo il modo di eseguire l'animazione dopo aver fatto clic.

@-webkit-keyframes ripple { 
 
    0% { 
 
    background-size: 1% 1%; 
 
    opacity: 0.5; 
 
    } 
 
    70% { 
 
    background-size: 1000% 1000%; 
 
    opacity: 0.2; 
 
    } 
 
    100% { 
 
    opacity: 0; 
 
    background-size: 1000% 1000%; 
 
    } 
 
} 
 

 
@keyframes ripple { 
 
    0% { 
 
    background-size: 1% 1%; 
 
    opacity: 0.5; 
 
    } 
 
    70% { 
 
    background-size: 1000% 1000%; 
 
    opacity: 0.2; 
 
    } 
 
    100% { 
 
    opacity: 0; 
 
    background-size: 1000% 1000%; 
 
    } 
 
} 
 

 
.button { 
 
    background-color: blue; 
 
    padding: 12px; 
 
    display: inline-block; 
 
    border-radius: 5px; 
 
    color: white; 
 
    font-family: sans-serif; 
 
    text-transform: uppercase; 
 
    position: relative; 
 
    overflow: hidden; 
 
} 
 

 
.button::after { 
 
    position: absolute; 
 
    content: " "; 
 
    height: 100%; 
 
    width: 100%; 
 
    top: 0; 
 
    left: 0; 
 
    pointer-events: none; 
 
    background-image: radial-gradient(circle at center, #FFF 0%, #FFF 10%, transparent 10.1%, transparent 100%); 
 
    background-position: center center; 
 
    background-repeat: no-repeat; 
 
    background-color: transparent; 
 
    -webkit-animation: ripple 0.6s 0s normal forwards infinite running ease-in; 
 
    animation: ripple 0.6s 0s normal forwards infinite running ease-in; 
 
} 
 

 
.button:active::after { 
 
    /*Somehow the animation needs to run on click only, and then run all the way through*/ 
 
}
<div class="ripple button"><a>Click this</a></div>

Somethings ho pensato ma non potuto far funzionare includono cambiare il ritardo di animazione, rendendo il ::after trasparente mediante opacity, e utilizzando la funzione di temporizzazione animazione.

+1

Utilizzare javascript per commutare una classe con l'animazione. – js1568

+0

duplicato di http://stackoverflow.com/questions/21919044/css3-transition-on-click-using-pure-css –

+0

o possibilmente utilizzare lo pseudo-selettore: active. Ma personalmente, js sarebbe il migliore qui, dal momento che altre alternative usano gli hack (ad esempio, usando una casella di controllo invisibile) – jbutler483

risposta

0

Provalo ma è necessario utilizzare jquery per mantenere attivo il pulsante, non ho utilizzato jquery quindi tenere premuto il clic;

@-webkit-keyframes ripple { 
 
    0% { 
 
    background-size: 1% 1%; 
 
    opacity: 0.5; 
 
    } 
 
    70% { 
 
    background-size: 1000% 1000%; 
 
    opacity: 0.2; 
 
    } 
 
    100% { 
 
    opacity: 0; 
 
    background-size: 1000% 1000%; 
 
    } 
 
} 
 

 
@keyframes ripple { 
 
    0% { 
 
    background-size: 1% 1%; 
 
    opacity: 0.5; 
 
    } 
 
    70% { 
 
    background-size: 1000% 1000%; 
 
    opacity: 0.2; 
 
    } 
 
    100% { 
 
    opacity: 0; 
 
    background-size: 1000% 1000%; 
 
    } 
 
} 
 

 
.button { 
 
    background-color: blue; 
 
    padding: 12px; 
 
    display: inline-block; 
 
    border-radius: 5px; 
 
    color: white; 
 
    font-family: sans-serif; 
 
    text-transform: uppercase; 
 
    position: relative; 
 
    overflow: hidden; 
 
} 
 

 

 

 
.button:active:after{ 
 
    position: absolute; 
 
    content: " "; 
 
    height: 100%; 
 
    width: 100%; 
 
    top: 0; 
 
    left: 0; 
 
    pointer-events: none; 
 
    background-image: radial-gradient(circle at center, #FFF 0%, #FFF 10%, transparent 10.1%, transparent 100%); 
 
    background-position: center center; 
 
    background-repeat: no-repeat; 
 
    background-color: transparent; 
 
    -webkit-animation: ripple 0.6s 0s normal forwards infinite running ease-in; 
 
    animation: ripple 0.6s 0s normal forwards infinite running ease-in;}
<div class='ripple button'><a href=''>hell</a></div>

1

ho potuto fare in un altro modo: Con :focus gli stili rimane attiva. È possibile visualizzarlo qui: http://codepen.io/jonnitto/pen/OVmvPB?editors=110

+0

@KrzysztofTrzos: Ovviamente questa non è una risposta solo per collegamento. Si prega di non abusare dei privilegi di flagging. –