Passa al contenuto principale

Penguin

Il Progetto

Pinguino animato e interattivo sviluppato con CSS Transforms, creando un personaggio completo con animazioni, interazioni e un paesaggio antartico. L’ultimo progetto guidato prima del portfolio finale.

Codice Sorgente

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Penguin</title>
<link rel="stylesheet" href="styles.css">
</head>
<body>
<div class="left-mountain"></div>
<div class="back-mountain"></div>
<div class="sun"></div>
<div class="penguin">
<div class="penguin-head">
<div class="face left"></div>
<div class="face right"></div>
<div class="chin"></div>
<div class="eye left">
<div class="eye-lid"></div>
</div>
<div class="eye right">
<div class="eye-lid"></div>
</div>
<div class="blush left"></div>
<div class="blush right"></div>
<div class="beak top"></div>
<div class="beak bottom"></div>
</div>
<div class="shirt">
<div>💜</div>
<p>I CSS</p>
</div>
<div class="penguin-body">
<div class="arm left"></div>
<div class="arm right"></div>
<div class="foot left"></div>
<div class="foot right"></div>
</div>
</div>
<div class="ground"></div>
</body>
</html>

La sensazione di “ripasso totale”

In diversi momenti di questo progetto ho pensato che fosse orientato a un ripasso totale. freeCodeCamp è stato concepito con questa logica, ma in quest’ultimo progetto, forse perché è l’ultimo guidato prima di concludere il corso, ho percepito questa sensazione in modo ancora più forte.

È come una “greatest hits” di tutto ciò che ho imparato finora: CSS Variables, transforms, animations, positioning, gradienti, pseudo-elementi, selettori avanzati… tutto concentrato in un progetto adorabile!

La scoperta dei cursori CSS

Mi è piaciuta moltissimo la parte in cui ho imparato cursor: not-allowed, e ho voluto approfondire per scoprire gli altri. Questo è ciò che ho trovato:

cursor: pointer;        /* 👆 Mano (cliccabile) */
cursor: grab; /* ✋ Mano aperta (trascinabile) */
cursor: grabbing; /* ✊ Mano chiusa (drag in corso) */
cursor: not-allowed; /* 🚫 Accesso negato */
cursor: wait; /* ⏳ Clessidra (attendi) */
cursor: help; /* ❓ Punto interrogativo */
cursor: text; /* 📝 Cursore di testo */

L’impatto UX dei cursori: ogni cursore comunica immediatamente un’affordance all’utente. pointer dice “puoi cliccare”, grab suggerisce “puoi trascinare”, wait informa che “il sistema sta elaborando”, not-allowed previene la frustrazione mostrando chiaramente i limiti. Sono micro-interazioni che rendono l’interfaccia più intuitiva.

Cosa Ho Imparato

CSS Transforms avanzati:

  • transform-origin per punti di rotazione personalizzati
  • scaleX(-1) per ribaltare elementi orizzontalmente
  • Combinazioni complesse di rotate + scale
  • transform sugli stati interattivi (:active)

Animazioni sofisticate:

  • @keyframes con timing preciso
  • animation con linear, infinite e durate personalizzate
  • Animazioni di saluto che si ripetono all’infinito

CSS Variables in azione:

  • Design system per i colori del pinguino
  • Coerenza cromatica in tutto il progetto
  • Modifica globale semplificata

Pseudo-elementi creativi:

  • ::before per creare forme aggiuntive
  • Layering con z-index per dare profondità
  • Opacity per effetti di overlay

Layout creativo:

  • Positioning assoluto per precisione millimetrica
  • Border-radius complessi per forme organiche
  • Gradienti lineari per sfumature realistiche

L’energia per il progetto finale

Sono super carico per il progetto finale, ovvero il Personal Portfolio Webpage Certification Project!

Ora è il momento di mettere tutto insieme in un portfolio che racconti questo incredibile percorso.


Prossimo progetto: Personal Portfolio Webpage (CERTIFICATION PROJECT!)