08. Regole CSS speciali

Regole at-rule

Le regole at-rule, riconoscibili perché iniziano con @, sono regole speciali che possono essere utilizzate per modificare il comportamento del CSS o per definire funzionalità aggiuntive.

Esistono alcune regole at-rule predefinite, che sono supportate da tutti i principali browser. Queste regole includono:

Ogni regola "at-rule" ha la sua sintassi e scopo specifici.

Esempio:

<!DOCTYPE html>

<html lang="en">

     <head>

          <meta charset="UTF-8">

          <title>Esempio semplice con keyframe</title>

          <style>

               .box {

                    width: 100px;

                    height: 100px;

                    background-color: red;

                    position: absolute;

                    animation: mymove 5s ease-in-out infinite alternate;

                }

                @keyframes mymove {

                     from {left: 0px;}

                     to {left: 500px;}

                }

          </style>

     </head>

     <body>

          <h1>Animazione in HTML</h1>

          <div class="box"></div>

     </body>

</html>

In questo esempio la regola CSS associata al selettore di classe .box, richiama la regola at-rule di tipo @keyframe denominata mymove creando l'animazione.

La classe .box tramite l'attributo animation specifica alcune proprietà dell'animazione. Le principali proprietà gestite da questo attributo sono:

Non è necessario inserire i valori per tutte le proprietà ma è preferibile rispettare l'ordine per evitare ambiguità.

Movimento diagonale

Per ottenere un'animazione nella quale un riquadro di dimensione 100x100 px si muove dal vertice basso sinistro a quello in alto a destro occorre utilizzare contemporaneamente i riferimenti relativi al margine superiore (top) e al lato sinistro (left).

Inoltre occorre calcolare la dimensione della finestra in termini di larghezza e altezza.

Per l'altezza il calcolo richiede di utilizzare una particolare unità di misura, detta vh. In tale unità di misura si ha che:

Per la larghezza il calcolo richiede di utilizzare una particolare unità di misura, detta vw. In tale unità di misura si ha che:

Per la larghezza è anche possibile operare in termini percentuali rispetto al contenitore padre.

La conversione in pixel si ottiene con la funzione calc() che può operare contemporaneamente su vh, vw, percentuale e pixel.

Esempio:

<!DOCTYPE html>

<html lang="en">

     <head>

          <meta charset="UTF-8">

          <title>Esempio semplice con keyframe</title>

          <style>

               .box {

                    width: 100px;

                    height: 100px;

                    background-color: red;

                    position: absolute;

                    animation: mymove 5s ease-in-out infinite;

               }

               @keyframes mymove {

                    from {

                         top: calc(100vh - 100px);

                         left: 0px;

                    }

                    to {

                         top: calc(0vh);

                         left: calc(100vw - 100px);

                    }

               }

          </style>

     </head>

     <body>

          <h1>Animazione diagonale in HTML</h1>

          <div class="box"></div>

     </body>

</html>

In questo esempio il calcolo dei vertici tiene conto della dimensione del quadrato che viene animato. Il punto posizionato corrisponde al vertice alto/sinistro del quadrato.

Uso delle percentuali in @keyframe

L'at-rule @keyframe prevede anche la possibilità di specificare gli stili dell'animazione in varie fasi, indicate tramite una percentuale.

Esempio:

<!DOCTYPE html>

<html lang="en">

     <head>

          <meta charset="UTF-8">

          <title>Esempio semplice con keyframe</title>

          <style>

               .box {

                    width: 100px;

                    height: 100px;

                    background-color: red;

                    position: absolute;

                    animation: mymove 12s ease-in-out infinite;

               }

               @keyframes mymove {

                    0% {

                         top: calc(100vh - 100px);

                         left: 0px;

                    }

                    25% {

                         top: calc(0vh);

                         left: calc(100% - 100px);

                    }

                    50% {

                         top: calc(0vh);

                         left: calc(0%);

                    }

                    75% {

                         top: calc(100vh - 100px);

                         left: calc(100% - 100px);

                    }

                    100% {

                         top: calc(100vh - 100px);

                         left: 0px;

                    }

               }

          </style>

     </head>

     <body>

          <h1>Animazione con incrocio in HTML</h1>

          <div class="box"></div>

     </body>

</html>

Pseudo-classi

Le pseudo-classi possono essere utilizzate in congiunzione con le regole CSS per ottenere effetti particolari.

Esempi di pseudo-classi sono le seguenti:

Esempio:

<!DOCTYPE html>

<html lang="it">

     <head>

          <meta charset="UTF-8">

          <title>Cambio forma al passaggio del mouse</title>

          <style>

               /* Stile iniziale del div */

               .mio-div {

                    width: 100px;

                    height: 100px;

                    background-color: blue;

                    transition: width 0.3s, height 0.3s;

               }


               /* Stile del div al passaggio del mouse */

               .mio-div:hover {

                    width: 150px;

                    height: 150px;

                    background-color: red;

               }

          </style>

     </head>

     <body>

         <div class="mio-div"></div>

     </body>

</html>

In questo esempio viene rilevato il passaggio del mouse grazie alla pseudo-classe hover applicata alla classe .mio-div.