Passa al contenuto principale

City Skyline

Il Progetto

Skyline cittadino creato interamente con CSS Variables, gradienti avanzati e tecniche di responsive design. Un paesaggio urbano che cambia dall’alba alla notte in base alle dimensioni dello schermo.

Codice Sorgente

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>City Skyline</title>
<link rel="stylesheet" href="styles.css">
</head>

<body>
<div class="background-buildings sky">
<div></div>
<div></div>
<div class="bb1 building-wrap">
<div class="bb1a bb1-window"></div>
<div class="bb1b bb1-window"></div>
<div class="bb1c bb1-window"></div>
<div class="bb1d"></div>
</div>
<div class="bb2">
<div class="bb2a"></div>
<div class="bb2b"></div>
</div>
<div class="bb3"></div>
<div></div>
<div class="bb4 building-wrap">
<div class="bb4a"></div>
<div class="bb4b"></div>
<div class="bb4c window-wrap">
<div class="bb4-window"></div>
<div class="bb4-window"></div>
<div class="bb4-window"></div>
<div class="bb4-window"></div>
</div>
</div>
<div></div>
<div></div>
</div>

<div class="foreground-buildings">
<div></div>
<div></div>
<div class="fb1 building-wrap">
<div class="fb1a"></div>
<div class="fb1b"></div>
<div class="fb1c"></div>
</div>
<div class="fb2">
<div class="fb2a"></div>
<div class="fb2b window-wrap">
<div class="fb2-window"></div>
<div class="fb2-window"></div>
<div class="fb2-window"></div>
</div>
</div>
<div></div>
<div class="fb3 building-wrap">
<div class="fb3a window-wrap">
<div class="fb3-window"></div>
<div class="fb3-window"></div>
<div class="fb3-window"></div>
</div>
<div class="fb3b"></div>
<div class="fb3a"></div>
<div class="fb3b"></div>
</div>
<div class="fb4">
<div class="fb4a"></div>
<div class="fb4b">
<div class="fb4-window"></div>
<div class="fb4-window"></div>
<div class="fb4-window"></div>
<div class="fb4-window"></div>
<div class="fb4-window"></div>
<div class="fb4-window"></div>
</div>
</div>
<div class="fb5"></div>
<div class="fb6"></div>
<div></div>
<div></div>
</div>
</body>
</html>

La genialità di freeCodeCamp

Trovo incredibile la capacità di freeCodeCamp (e quindi di chi ha progettato le lezioni) di farti ripassare costantemente ciò che hai imparato nelle lezioni precedenti. È un sistema di rinforzo dell’apprendimento davvero efficace.

Il nuovo metodo: screenshot strategico

Ultimamente, prima di iniziare il progetto, faccio uno screenshot del risultato finale. Vado all’ultima lezione, mi copro gli occhi davanti al codice e catturo l’immagine. Poi la metto sul desktop, così ho massima concentrazione sul progetto corrente.

Perché funziona

Mi aiuta moltissimo a capire in anticipo cosa stiamo facendo e perché. Magari ci sono linee messe qui, linee messe là, ma senza capire davvero cosa si sta creando.

C’è del valore nel procedere “alla cieca” per avere l’effetto finale “wow”, ma lì guadagni solo in termini di entusiasmo. Io preferisco sapere esattamente cosa sto creando, così posso mettermi nella condizione mentale corretta: ogni passo che faccio è orientato a quello specifico obiettivo. Inoltre, questo approccio consapevole mantiene comunque intatto tutto l’entusiasmo del processo.

Cosa ho imparato

  • CSS Variables (Custom Properties) con :root per gestire le palette di colori

  • Gradienti avanzati:

    • radial-gradient per cielo e sole
    • linear-gradient per effetti di profondità
    • repeating-linear-gradient per i pattern delle finestre
  • Media query responsive che cambiano completamente l’atmosfera (giorno → notte)

  • Layering complesso con background-buildings e foreground-buildings

  • Posizionamento avanzato per creare forme architettoniche

  • Flexbox per allineamenti precisi

  • Trucchi con i bordi per creare forme triangolari e geometriche

Il geniale effetto responsive

@media (max-width: 1000px) {
:root {
--building-color1: #000;
/* Tutti gli edifici diventano neri */
}
.sky {
/* Il cielo diventa notturno */
}
}

Non è solo “ridimensionamento”, è una trasformazione completa dell’atmosfera: da città colorata di giorno a skyline notturno!

Riflessione

Le CSS Variables sono state una scoperta enorme! Voglio usarle sempre perché le trovo incredibilmente comode e, in più, hanno quell’eleganza tecnica moderna che ti fa sentire un vero sviluppatore professionista. Ma non è solo una questione estetica: migliorano anche il modo in cui scrivo tutto il resto del codice, rendendolo più ordinato e logico.

Questo progetto ha consolidato l’importanza delle CSS Variables per la manutenibilità e per gli effetti dinamici. È stato molto soddisfacente vedere come piccoli cambiamenti nelle variabili possano trasformare completamente l’aspetto visivo.


Prossimo Progetto: Imparare CSS Grid costruendo una Rivista (Ho intravisto già il risultato finale e, per quanto mi sia divertito a creare questi skyline, quello mi piacerà molto di più!)