Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2013
    Messaggi
    84

    CSS Trasform, piccolo problemino...

    Vorrei realizzare un'animazione css in cui il mio logo ogni tot secondi sfuma su 4 immagini leggermente differenti ed ho trovato una ottima soluzione col comando css trasform che è la seguente:

    codice HTML:
    <style>
    @-webkit-keyframes cf4FadeInOut { 
    0% {   opacity:1; } 
    17% {   opacity:1; } 
    25% {   opacity:0; } 
    92% {   opacity:0; } 
    100% {   opacity:1; }
    }
    
    @-moz-keyframes cf4FadeInOut { 
    0% {   opacity:1; } 
    17% {   opacity:1; } 
    25% {   opacity:0; } 
    92% {   opacity:0; } 
    100% {   opacity:1; }
    }
    
    @-o-keyframes cf4FadeInOut { 
    0% {   opacity:1; } 
    17% {   opacity:1; } 
    25% {   opacity:0; } 
    92% {   opacity:0; } 
    100% {   opacity:1; }
    }
    
    @keyframes cf4FadeInOut { 
    0% {   opacity:1; } 
    17% {   opacity:1; } 
    25% {   opacity:0; } 
    92% {   opacity:0; } 
    100% {   opacity:1; }
    }
    
    
    .logo {  
    position:relative;  
    height:281px;  
    width:450px;  
    margin:0 auto;
    }
    
    .logo img {  
    position:absolute;  
    left:0;
    }
    
    .logo img {  
    -webkit-animation-name: cf4FadeInOut;  
    -webkit-animation-timing-function: ease-in-out;  
    -webkit-animation-iteration-count: infinite;  
    -webkit-animation-duration: 16s;
    
    -moz-animation-name: cf4FadeInOut;  
    -moz-animation-timing-function: ease-in-out;  
    -moz-animation-iteration-count: infinite;  
    -moz-animation-duration: 16s;
    
    -o-animation-name: cf4FadeInOut;  
    -o-animation-timing-function: ease-in-out;  
    -o-animation-iteration-count: infinite;  
    -o-animation-duration: 16s;
    
    animation-name: cf4FadeInOut;  
    animation-timing-function: ease-in-out;  
    animation-iteration-count: infinite;  
    animation-duration: 16s;
    }
    
    .logo img:nth-of-type(1) {  
    -webkit-animation-delay: 12s;  
    -moz-animation-delay: 12s;  
    -o-animation-delay: 12s;  
    animation-delay: 12s;
    }
    
    .logo img:nth-of-type(2) {  
    -webkit-animation-delay: 8s;  
    -moz-animation-delay: 8s;  
    -o-animation-delay: 8s;  
    animation-delay: 8s;
    }
    
    .logo img:nth-of-type(3) {  
    -webkit-animation-delay: 4s;  
    -moz-animation-delay: 4s;  
    -o-animation-delay: 4s;  
    animation-delay: 4s;
    }
    
    .logo img:nth-of-type(4) {  
    -webkit-animation-delay: 0;  
    -moz-animation-delay: 0;  
    -o-animation-delay: 0;  
    animation-delay: 0;
    }
    </style>
    
    
    
    <div class="logo" >  
    <img src="http://css3.bradshawenterprises.com/images/Windows%20Logo.jpg" />  
    <img src="http://css3.bradshawenterprises.com/images/Turtle.jpg" />  
    <img src="http://css3.bradshawenterprises.com/images/Rainbow%20Worm.jpg" />  
    <img src="http://css3.bradshawenterprises.com/images/Birdman.jpg" />
    </div>

    Unico problema:
    le mie 4 immagini di logo hanno parti in trasparenza e con il codice sopra all'inizio sono tutte una sopra l'altra per i primi 6 secondi creando un brutto effetto di sovrapposizione immagini. Come posso quindi far si che all'inizio sia visualizzata solo una delle 4 immagini ma non le altre?????
    Ultima modifica di pollat; 29-10-2015 a 14:15

  2. #2
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,771
    Ciao.
    una ottima soluzione col comando css trasform
    Giusto per chiarire: il comando trasform non esiste.
    Forse volevi scrivere transform. Ma anche in quel caso la proprietà transform non ha niente a che fare con animation.

    Forse intendevi transition?
    In questo caso le due cose potrebbero avere delle analogie ma è comunque meglio parlare più propriamente di animation.

    Venendo alla tua richiesta, in linea di massima puoi risolvere impostando inizialmente opacity:0 alle immagini e rivedendo la sequenza di keyframes in modo che anche qui opacity sia inizialmente 0.

    Inoltre il tutto può essere meglio ottimizzato eliminando un po' di codice ridondante.
    Ti posto un esempio concreto. Non mi dilungo su ulteriori spiegazioni ma, se dovessero servire, chiedi pure.
    codice:
    <!DOCTYPE HTML>
    <html>
      <head>
        <title>Esempio</title>
        <meta charset="utf-8">
        <style>
          @-webkit-keyframes cf4FadeInOut {
             0% {opacity:0}
             8% {opacity:1}
            25% {opacity:1}
            33% {opacity:0}
          }
          @-moz-keyframes cf4FadeInOut {
             0% {opacity:0}
             8% {opacity:1}
            25% {opacity:1}
            33% {opacity:0}
          }
          @-o-keyframes cf4FadeInOut {
             0% {opacity:0}
             8% {opacity:1}
            25% {opacity:1}
            33% {opacity:0}
          }
          @keyframes cf4FadeInOut {
             0% {opacity:0}
             8% {opacity:1}
            25% {opacity:1}
            33% {opacity:0}
          }
          .logo {
            position:relative;
            height:281px;
            width:450px;
            margin:0 auto;
          }
          .logo img {
            position:absolute;
            left:0;
            opacity:0;
            -webkit-animation: cf4FadeInOut  16s ease-in-out infinite;
               -moz-animation: cf4FadeInOut  16s ease-in-out infinite;
                 -o-animation: cf4FadeInOut  16s ease-in-out infinite;
                    animation: cf4FadeInOut  16s ease-in-out infinite;
          }
          .logo img:nth-of-type(1) {
            -webkit-animation-delay: -1.3s;
               -moz-animation-delay: -1.3s;
                 -o-animation-delay: -1.3s;
                    animation-delay: -1.3s;
          }
          .logo img:nth-of-type(2) {
            -webkit-animation-delay: 2.7s;
               -moz-animation-delay: 2.7s;
                 -o-animation-delay: 2.7s;
                    animation-delay: 2.7s;
          }
          .logo img:nth-of-type(3) {
            -webkit-animation-delay: 6.7s;
               -moz-animation-delay: 6.7s;
                 -o-animation-delay: 6.7s;
                    animation-delay: 6.7s;
          }
          .logo img:nth-of-type(4) {
            -webkit-animation-delay: 10.7s;
               -moz-animation-delay: 10.7s;
                 -o-animation-delay: 10.7s;
                    animation-delay: 10.7s;
          }
        </style>
      </head>
      <body>
        <div class="logo" >
          <img src="immagine1.png" alt="" >
          <img src="immagine2.png" alt="" >
          <img src="immagine3.png" alt="" >
          <img src="immagine4.png" alt="" >
        </div>
      </body>
    </html>
    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2013
    Messaggi
    84
    Quote Originariamente inviata da KillerWorm Visualizza il messaggio
    Ciao.

    Giusto per chiarire: il comando trasform non esiste.
    Forse volevi scrivere transform. Ma anche in quel caso la proprietà transform non ha niente a che fare con animation.

    Forse intendevi transition?
    In questo caso le due cose potrebbero avere delle analogie ma è comunque meglio parlare più propriamente di animation.

    Venendo alla tua richiesta, in linea di massima puoi risolvere impostando inizialmente opacity:0 alle immagini e rivedendo la sequenza di keyframes in modo che anche qui opacity sia inizialmente 0.

    Inoltre il tutto può essere meglio ottimizzato eliminando un po' di codice ridondante.
    Ti posto un esempio concreto. Non mi dilungo su ulteriori spiegazioni ma, se dovessero servire, chiedi pure.
    codice:
    <!DOCTYPE HTML>
    <html>
      <head>
        <title>Esempio</title>
        <meta charset="utf-8">
        <style>
          @-webkit-keyframes cf4FadeInOut {
             0% {opacity:0}
             8% {opacity:1}
            25% {opacity:1}
            33% {opacity:0}
          }
          @-moz-keyframes cf4FadeInOut {
             0% {opacity:0}
             8% {opacity:1}
            25% {opacity:1}
            33% {opacity:0}
          }
          @-o-keyframes cf4FadeInOut {
             0% {opacity:0}
             8% {opacity:1}
            25% {opacity:1}
            33% {opacity:0}
          }
          @keyframes cf4FadeInOut {
             0% {opacity:0}
             8% {opacity:1}
            25% {opacity:1}
            33% {opacity:0}
          }
          .logo {
            position:relative;
            height:281px;
            width:450px;
            margin:0 auto;
          }
          .logo img {
            position:absolute;
            left:0;
            opacity:0;
            -webkit-animation: cf4FadeInOut  16s ease-in-out infinite;
               -moz-animation: cf4FadeInOut  16s ease-in-out infinite;
                 -o-animation: cf4FadeInOut  16s ease-in-out infinite;
                    animation: cf4FadeInOut  16s ease-in-out infinite;
          }
          .logo img:nth-of-type(1) {
            -webkit-animation-delay: -1.3s;
               -moz-animation-delay: -1.3s;
                 -o-animation-delay: -1.3s;
                    animation-delay: -1.3s;
          }
          .logo img:nth-of-type(2) {
            -webkit-animation-delay: 2.7s;
               -moz-animation-delay: 2.7s;
                 -o-animation-delay: 2.7s;
                    animation-delay: 2.7s;
          }
          .logo img:nth-of-type(3) {
            -webkit-animation-delay: 6.7s;
               -moz-animation-delay: 6.7s;
                 -o-animation-delay: 6.7s;
                    animation-delay: 6.7s;
          }
          .logo img:nth-of-type(4) {
            -webkit-animation-delay: 10.7s;
               -moz-animation-delay: 10.7s;
                 -o-animation-delay: 10.7s;
                    animation-delay: 10.7s;
          }
        </style>
      </head>
      <body>
        <div class="logo" >
          <img src="immagine1.png" alt="" >
          <img src="immagine2.png" alt="" >
          <img src="immagine3.png" alt="" >
          <img src="immagine4.png" alt="" >
        </div>
      </body>
    </html>
    sì hai ragione parlavo di animation....

    Cmq. il codice che hai postato funziona e il risulato è questo:

    http://www.macroweb.it/prova-logo/provalogo2.html

    però non ho capito come hai settato i valori di ".logo img:nth-of-type(1)" soprattutto quelli negativi...
    Ultima modifica di pollat; 30-10-2015 a 12:37

  4. #4
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,771
    però non ho capito come hai settato i valori di ".logo img:nth-of-type(1)" soprattutto quelli negativi...
    Concettualmente il procedimento può sembrare poco intuitivo ma il punto essenziale sta nel capire come funziona la proprietà delay.
    In sintesi:
    Il termine delay sta per "ritardo".
    Il valore 0 (che è di default) sta ad indicare che non deve essere applicato alcun ritardo sull'inizio dell'animazione, per cui inizia all'istante.
    Valori positivi, invece, stanno ad indicare che l'animazione deve iniziare con uno specifico ritardo.
    Al contrario, valori negativi, implicano un anticipo sull'avvio dell'animazione, cioè l'avvio dell'animazione è spostato in avanti rispetto a quello che è il punto iniziale nella timeline (linea temporale) ipotetica dell'intera animazione.

    Facendo un'analogia, è come se tre treni dovessero percorrere uno stesso tragitto la cui tabella di marcia è: partenza 10:00, arrivo 11:00
    Il tempo che si impiega a percorrere il tragitto è quindi un'ora esatta. La timeline (linea temporale) sarà quindi fissata dall'ora X iniziale fino all'ora Y finale (che equivale all'ora X+1h).

    Il treno A parte alle 10:00 (che è l'ora zero) per cui il delay è 0 e l'ora di arrivo sarà 11:00
    Il treno B ha un ritardo di mezz'ora per cui il delay sarà 0.5h (mezz'ora). Il calcolo è presto fatto, arriverà a destinazione alle 11:30 (cioè l'ora di arrivo ipotetica della tabella di marcia più mezz'ora)
    Il treno C, invece, gioca d'anticipo e parte mezz'ora prima, cioè il delay sarà -0.5h.

    Questo cosa significa? Se prendiamo in esame la finestra temporale fissata dalla tabella di marcia (cioè la nostra timeline), nell'istante zero vedremmo che A sta esattamente al punto 0, B non è ancora apparso sulla scena (apparirà dopo mezz'ora), mentre C (che aveva giocato d'anticipo) lo vedremmo già posizionato a metà del percorso, cioè come se avesse già camminato per mezz'ora (anche se noi non lo abbiamo visto).

    Ora torniamo al tuo caso. Sperando di averti chiarito il discorso del delay negativo (e di non averti confuso di più), probabilmente ti starai comunque chiedendo: "sì, ok per il valore negativo, ma perché -1.3 o 2.7 o gli altri valori che sembrano presi a caso?"

    Qui dobbiamo fare un passo indietro. Il calcolo va effettuato tenendo conto della proporzione tra il tempo totale espresso in secondi e i valori percentuali specificati per i keyframes, nonché il numero di elementi in gioco.

    Perché -1.3?
    Tale valore identifica il punto (riferito alla timeline) in cui il valore di opacity è già uguale a 1, cioè il punto appena dopo la prima transizione da 0 a 1 che dura l'8% dell'intera animazione

    In altre parole, data la durata totale di 16s ne ho ricavato l'8%.
    Matematicamente: 16/100*8 = 1.28 (approssimato a 1.3)

    Ho quindi considerato questo valore come punto di avvio dell'animazione sulla prima immagine.
    Le altre 3 immagini saranno chiaramente distanziate l'una dall'altra da un intervallo di 4 secondi, cioè il tempo totale (16s) diviso il numero di immagini (4).

    Da questo ne ho semplicemente dedotto che la seconda immagine dovesse partire con un ritardo di -1.3+4 secondi, cioè 2.7.
    Cosi per la terza immagine, 2.7+4 = 6.7 e analogamente per l'ultima immagine.

    Sembra complicato ma è più facile a farsi che a dirsi.



    PS: un consiglio, quando rispondi sul forum sarebbe meglio evitare di citare l'intero post se non è strettamente necessario. Grazie.
    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

  5. #5
    Utente di HTML.it
    Registrato dal
    Oct 2013
    Messaggi
    84
    Quote Originariamente inviata da KillerWorm Visualizza il messaggio
    Concettualmente il procedimento può sembrare poco intuitivo ma il punto essenziale sta nel capire come funziona la proprietà delay.
    In sintesi:
    Il termine delay sta per "ritardo".
    Il valore 0 (che è di default) sta ad indicare che non deve essere applicato alcun ritardo sull'inizio dell'animazione, per cui inizia all'istante.
    Valori positivi, invece, stanno ad indicare che l'animazione deve iniziare con uno specifico ritardo.
    Al contrario, valori negativi, implicano un anticipo sull'avvio dell'animazione, cioè l'avvio dell'animazione è spostato in avanti rispetto a quello che è il punto iniziale nella timeline (linea temporale) ipotetica dell'intera animazione.

    Facendo un'analogia, è come se tre treni dovessero percorrere uno stesso tragitto la cui tabella di marcia è: partenza 10:00, arrivo 11:00
    Il tempo che si impiega a percorrere il tragitto è quindi un'ora esatta. La timeline (linea temporale) sarà quindi fissata dall'ora X iniziale fino all'ora Y finale (che equivale all'ora X+1h).

    Il treno A parte alle 10:00 (che è l'ora zero) per cui il delay è 0 e l'ora di arrivo sarà 11:00
    Il treno B ha un ritardo di mezz'ora per cui il delay sarà 0.5h (mezz'ora). Il calcolo è presto fatto, arriverà a destinazione alle 11:30 (cioè l'ora di arrivo ipotetica della tabella di marcia più mezz'ora)
    Il treno C, invece, gioca d'anticipo e parte mezz'ora prima, cioè il delay sarà -0.5h.

    Questo cosa significa? Se prendiamo in esame la finestra temporale fissata dalla tabella di marcia (cioè la nostra timeline), nell'istante zero vedremmo che A sta esattamente al punto 0, B non è ancora apparso sulla scena (apparirà dopo mezz'ora), mentre C (che aveva giocato d'anticipo) lo vedremmo già posizionato a metà del percorso, cioè come se avesse già camminato per mezz'ora (anche se noi non lo abbiamo visto).

    Ora torniamo al tuo caso. Sperando di averti chiarito il discorso del delay negativo (e di non averti confuso di più), probabilmente ti starai comunque chiedendo: "sì, ok per il valore negativo, ma perché -1.3 o 2.7 o gli altri valori che sembrano presi a caso?"

    Qui dobbiamo fare un passo indietro. Il calcolo va effettuato tenendo conto della proporzione tra il tempo totale espresso in secondi e i valori percentuali specificati per i keyframes, nonché il numero di elementi in gioco.

    Perché -1.3?
    Tale valore identifica il punto (riferito alla timeline) in cui il valore di opacity è già uguale a 1, cioè il punto appena dopo la prima transizione da 0 a 1 che dura l'8% dell'intera animazione

    In altre parole, data la durata totale di 16s ne ho ricavato l'8%.
    Matematicamente: 16/100*8 = 1.28 (approssimato a 1.3)

    Ho quindi considerato questo valore come punto di avvio dell'animazione sulla prima immagine.
    Le altre 3 immagini saranno chiaramente distanziate l'una dall'altra da un intervallo di 4 secondi, cioè il tempo totale (16s) diviso il numero di immagini (4).

    Da questo ne ho semplicemente dedotto che la seconda immagine dovesse partire con un ritardo di -1.3+4 secondi, cioè 2.7.
    Cosi per la terza immagine, 2.7+4 = 6.7 e analogamente per l'ultima immagine.

    Sembra complicato ma è più facile a farsi che a dirsi.

    Grande KillerWorm sei stato chiarissimo e ora risco a modificare il codice come voglio e t'ho citato tutto perchè merita di essere citato tutto!!!

    Grazie ancora!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.