Ferris Wheel
Il Progetto
Ruota panoramica animata sviluppata con CSS Animations, @keyframes e transform avanzate. Un progetto che ha segnato un punto di svolta nel collegare Figma e codice.
Codice Sorgente
- index.html
- styles.css
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Ferris Wheel</title>
<link rel="stylesheet" href="styles.css">
</head>
<body>
<div class="wheel">
<span class="line"></span>
<span class="line"></span>
<span class="line"></span>
<span class="line"></span>
<span class="line"></span>
<span class="line"></span>
<div class="cabin"></div>
<div class="cabin"></div>
<div class="cabin"></div>
<div class="cabin"></div>
<div class="cabin"></div>
<div class="cabin"></div>
</div>
</body>
</html>
.wheel {
border: 2px solid black;
border-radius: 50%;
margin-left: 50px;
position: absolute;
height: 55vw;
width: 55vw;
max-width: 500px;
max-height: 500px;
animation-name: wheel;
animation-duration: 10s;
animation-iteration-count: infinite;
animation-timing-function: linear;
}
.line {
background-color: black;
width: 50%;
height: 2px;
position: absolute;
top: 50%;
left: 50%;
transform-origin: 0% 0%;
}
.line:nth-of-type(2) {
transform: rotate(60deg);
}
.line:nth-of-type(3) {
transform: rotate(120deg);
}
.line:nth-of-type(4) {
transform: rotate(180deg);
}
.line:nth-of-type(5) {
transform: rotate(240deg);
}
.line:nth-of-type(6) {
transform: rotate(300deg);
}
.cabin {
background-color: red;
width: 20%;
height: 20%;
position: absolute;
border: 2px solid;
transform-origin: 50% 0%;
animation: cabins 10s ease-in-out infinite;
}
.cabin:nth-of-type(1) {
right: -8.5%;
top: 50%;
}
.cabin:nth-of-type(2) {
right: 17%;
top: 93.5%;
}
.cabin:nth-of-type(3) {
right: 67%;
top: 93.5%;
}
.cabin:nth-of-type(4) {
left: -8.5%;
top: 50%;
}
.cabin:nth-of-type(5) {
left: 17%;
top: 7%;
}
.cabin:nth-of-type(6) {
right: 17%;
top: 7%;
}
@keyframes wheel {
0% {
transform: rotate(0deg);
}
100% {
transform: rotate(360deg);
}
}
@keyframes cabins {
0% {
transform: rotate(0deg);
}
25% {
background-color: yellow;
}
50% {
background-color: purple;
}
75% {
background-color: yellow;
}
100% {
transform: rotate(-360deg);
}
}
La Connessione Rivoluzionaria
Questo progetto è stato incredibile! Qui ho collegato Figma e codice come mai prima.
Come al solito non mi sono fermato a imparare solo ciò che insegnava freeCodeCamp, ma ho approfondito molte parti. Una in particolare su cui voglio soffermarmi è quella delle animazioni.
Approfondimento sulle Animazioni
Con questo progetto avrei dovuto imparare solo linear ed ease-in-out, ma ricordando i nomi ho deciso di approfondire le animazioni per conoscere tutte quelle studiate nel corso UI/UX di Breccia, creando una selezione completa da aggiungere all’handbook.
Tabella di Traduzione Figma → CSS
| IN FIGMA LEGGO | IN CSS SCRIVO | QUANDO |
|---|---|---|
| Linear | linear | 🤖 Meccanico |
| Ease | ease | 😌 Naturale |
| Ease In | ease-in | 🚀 Accelera |
| Ease Out | ease-out | 🛑 Rallenta |
| Ease In and Out | ease-in-out | 🎢 Fluido |
| Custom Bezier | cubic-bezier(0.87,0,0.24,0.99) | 🎭 Il tuo stile |
| Smart Animate | animation: name 300ms ease; | 🎬 Animare |
Applicazione Pratica Immediata
È stato un passaggio importante che sarà sicuramente utile nella fase di prototipazione. Proprio ieri ho finito i wireframe per completare il corso Google UX 3, dove ho usato uno Smart Animate Custom Bezier con valori 0.87, 0, 0.24, 0.99 a 800ms che dava animazioni come un razzo che frena dolcemente.
Oggi ho imparato che posso tradurlo in CSS con:
animation: animationname 800ms cubic-bezier(0.87, 0, 0.24, 0.99);
Cosa Ho Imparato
CSS Animations:
@keyframesper definire le sequenze di animazione- animation-name, animation-duration, animation-iteration-count
- animation-timing-function con tutte le varianti
- transform-origin per punti di rotazione personalizzati
CSS Transforms:
- rotate() per rotazioni precise
- transform-origin per il controllo del punto di pivot
- nth-of-type() per selezionare elementi specifici
Integrazione Figma–CSS:
- Traduzione diretta da Smart Animate ad animazioni CSS
- Bezier personalizzati per animazioni su misura
- Timing perfetto tra prototipo e implementazione
Riflessione
Questo progetto ha dimostrato quanto sia potente non fermarsi ai requisiti minimi. Approfondire le animazioni mi permetterà di prototipare in Figma sapendo esattamente come implementare tutto in CSS. È l’unione perfetta tra design e sviluppo.
Prossimo progetto: Imparare i CSS Transforms costruendo un Pinguino