📚 Template e Esercitazioni Pratiche

Tutto il materiale per esercitarsi – Versione Completa

📄 Template Base HTML Completo

Struttura HTML Corretta con CSS per Immagini

Usa questo template come base per tutti i tuoi esercizi. Include CSS per gestire immagini e layout:

<!DOCTYPE html>
<html lang="it">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Titolo della Pagina</title>
    <link rel="stylesheet" href="style.css">
</head>
<body>
    <header>
        <div class="logo-container">
            <img src="immagini/logo.png" alt="Logo del sito" class="logo">
        </div>
        <h1>Il Mio Sito</h1>
        <nav>
            <ul>
                <li><a href="index.html">Home</a></li>
                <li><a href="pagine/chi-sono.html">Chi Sono</a></li>
                <li><a href="pagine/contatti.html">Contatti</a></li>
            </ul>
        </nav>
    </header>
    
    <main>
        <section class="hero">
            <h2>Benvenuto nel mio sito!</h2>
            <p>Questo è il contenuto principale.</p>
        </section>
        
        <section class="content-section">
            <img src="immagini/foto-profilo.jpg" alt="La mia foto" class="profile-img">
            <div class="text-content">
                <h3>Chi sono</h3>
                <p>Presentazione personale...</p>
            </div>
        </section>
    </main>
    
    <footer>
        <p>© 2024 - Il Mio Sito</p>
    </footer>
</body>
</html>

🎨 Template CSS Base Completo

CSS Completo con Gestione Immagini e Layout

Usa questo CSS come base per i tuoi stili, include tutto per gestire immagini, layout e responsive:

/* ===== RESET E IMPOSTAZIONI BASE ===== */
* {
    margin: 0;
    padding: 0;
    box-sizing: border-box;
}

body {
    font-family: Arial, sans-serif;
    line-height: 1.6;
    background-color: #f4f4f4;
    color: #333;
}

/* ===== GESTIONE IMMAGINI ===== */

/* Logo del sito */
.logo {
    max-width: 150px;          /* Dimensione massima */
    height: auto;              /* Mantiene proporzioni */
    display: block;            /* Elimina spazio sotto */
}

.logo-container {
    text-align: center;        /* Centra il logo */
    padding: 1rem 0;
}

/* Immagini profilo e contenuto */
.profile-img {
    max-width: 200px;          /* Dimensione massima */
    height: auto;              /* Mantiene proporzioni */
    border-radius: 50%;        /* Immagine circolare */
    border: 3px solid #2c3e50; /* Bordo */
    display: block;
    margin: 0 auto 1rem;       /* Centra e aggiunge spazio sotto */
}

/* Immagini generiche nel contenuto */
.content-section img {
    max-width: 100%;           /* Non supera il contenitore */
    height: auto;              /* Mantiene proporzioni */
    border-radius: 8px;        /* Angoli arrotondati */
    box-shadow: 0 2px 5px rgba(0,0,0,0.1); /* Ombra leggera */
}

/* Layout per immagini con testo */
.content-section {
    display: flex;             /* Layout flessibile */
    align-items: center;       /* Allinea verticalmente */
    gap: 2rem;                 /* Spazio tra immagine e testo */
    margin: 2rem 0;
    padding: 1rem;
    background: white;
    border-radius: 8px;
}

.text-content {
    flex: 1;                   /* Occupa spazio rimanente */
}

/* ===== HEADER E NAVIGATION ===== */
header {
    background: #2c3e50;
    color: white;
    padding: 1rem 0;
    text-align: center;
}

nav ul {
    list-style: none;
    display: flex;
    justify-content: center;
    gap: 2rem;
    margin-top: 1rem;
}

nav a {
    color: white;
    text-decoration: none;
    padding: 0.5rem 1rem;
    border-radius: 4px;
    transition: background 0.3s;
}

nav a:hover {
    background: #34495e;
}

/* ===== CONTENUTO PRINCIPALE ===== */
main {
    max-width: 1200px;
    margin: 2rem auto;
    padding: 0 2rem;
}

.hero {
    background: white;
    padding: 3rem 2rem;
    text-align: center;
    border-radius: 8px;
    margin-bottom: 2rem;
}

/* ===== FOOTER ===== */
footer {
    background: #34495e;
    color: white;
    text-align: center;
    padding: 1rem 0;
    margin-top: 2rem;
}

/* ===== TABELLE ===== */
table {
    width: 100%;
    border-collapse: collapse;
    margin: 1rem 0;
}

th, td {
    border: 1px solid #ddd;
    padding: 0.75rem;
    text-align: left;
}

th {
    background-color: #f2f2f2;
}

/* ===== LISTE ===== */
ul, ol {
    margin: 1rem 0;
    padding-left: 2rem;
}

li {
    margin: 0.5rem 0;
}

/* ===== RESPONSIVE DESIGN ===== */
@media (max-width: 768px) {
    .content-section {
        flex-direction: column; /* Stack verticale su mobile */
        text-align: center;
    }
    
    nav ul {
        flex-direction: column;
        gap: 0.5rem;
    }
    
    .logo {
        max-width: 120px;      /* Logo più piccolo su mobile */
    }
}

📁 Esercitazione 1: Struttura File e Cartelle Completa

Template da Completare con CSS per Immagini

Crea questa struttura e completa i file. Attenzione ai percorsi!

sito_personale/
├── index.html
├── style/
│   └── main.css
├── immagini/
│   ├── logo.png
│   └── foto-profilo.jpg
└── pagine/
    ├── hobby.html
    ├── scuola.html
    └── contatti.html

index.html – DA COMPLETARE:

<!DOCTYPE html>
<html lang="it">
<head>
    <!-- INSERISCI I META TAG MANCANTI -->
    <title>Il Mio Sito Personale</title>
    <!-- COLLEGA IL CSS CORRETTAMENTE -->
</head>
<body>
    <header>
        <div class="logo-container">
            <!-- INSERISCI L'IMMAGINE LOGO -->
        </div>
        <h1>Benvenuto nel mio sito</h1>
        <nav>
            <ul>
                <li><a href="index.html">Home</a></li>
                <li><a href="pagine/hobby.html">I Miei Hobby</a></li>
                <li><a href="pagine/scuola.html">La Mia Scuola</a></li>
                <li><a href="pagine/contatti.html">Contatti</a></li>
            </ul>
        </nav>
    </header>
    
    <main>
        <section class="content-section">
            <!-- INSERISCI L'IMMAGINE FOTO-PROFILO -->
            <div class="text-content">
                <h2>Chi Sono</h2>
                <p>Ciao! Mi chiamo [Nome] e questo è il mio sito personale.</p>
                <p>Ho [età] anni e frequento la scuola [nome scuola].</p>
            </div>
        </section>
    </main>
    
    <footer>
        <p>© 2024 - Il Mio Sito Personale</p>
    </footer>
</body>
</html>

style/main.css – DA COMPLETARE:

/* RESET BASE */
* {
    margin: 0;
    padding: 0;
    box-sizing: border-box;
}

body {
    font-family: Arial, sans-serif;
    line-height: 1.6;
    background-color: #f4f4f4;
    color: #333;
}

/* STILE PER IL LOGO */
.logo {
    /* AGGIUNGI: max-width, height, display */
}

.logo-container {
    /* AGGIUNGI: text-align, padding */
}

/* STILE PER IMMAGINE PROFILO */
.profile-img {
    /* AGGIUNGI: max-width, height, border-radius, border */
    /* AGGIUNGI: display, margin */
}

/* LAYOUT SEZIONE CONTENUTO */
.content-section {
    /* AGGIUNGI: display, align-items, gap, margin, padding */
    /* AGGIUNGI: background, border-radius */
}

.text-content {
    /* AGGIUNGI: flex */
}

/* HEADER */
header {
    /* AGGIUNGI: background, color, padding, text-align */
}

nav ul {
    /* AGGIUNGI: list-style, display, justify-content, gap, margin-top */
}

nav a {
    /* AGGIUNGI: color, text-decoration, padding, border-radius, transition */
}

nav a:hover {
    /* AGGIUNGI: background */
}

/* MAIN CONTENT */
main {
    /* AGGIUNGI: max-width, margin, padding */
}

/* FOOTER */
footer {
    /* AGGIUNGI: background, color, text-align, padding, margin-top */
}

Consiglio: Ricorda che i percorsi sono relativi alla posizione del file HTML.
Se il CSS è nella cartella “style”, il percorso sarà href="style/main.css".

🔍 Esercitazione 2: Correzione Errori Dettagliata

File con Errori da Correggere

Questo file HTML contiene diversi errori nei percorsi. Correggili tutti!

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Il mio sito</title>
    <!-- ERRORE 1: Percorso CSS sbagliato -->
    <link rel="stylesheet" href="css/stile.css">
</head>
<body>
    <header>
        <h1>Il Mio Sito con Errori</h1>
        <!-- ERRORE 2: Manca il logo -->
    </header>
    
    <main>
        <!-- ERRORE 3: Percorso immagine sbagliato -->
        <img src="immagini/mia-foto.png" alt="La mia foto">
        
        <!-- ERRORE 4: Percorso link sbagliato -->
        <a href="pagina/contatti.html">Contatti</a>
        
        <!-- ERRORE 5: Manca la classe per lo stile -->
        <div>
            <h2>Chi sono</h2>
            <p>Questa pagina ha diversi errori da correggere!</p>
        </div>
        
        <!-- ERRORE 6: Immagine senza stile responsive -->
        <img src="assets/foto-gruppo.jpg" alt="Foto di gruppo">
    </main>
</body>
</html>

Struttura Cartelle Corretta:

sito/
├── assets/
│   └── stile.css
├── img/
│   ├── mia-foto.png
│   └── foto-gruppo.jpg
├── immagini/
│   └── logo.png
└── contatti.html

CSS da Aggiungere per Gestire le Immagini:

/* AGGIUNGI QUESTE REGOLE AL TUO CSS */

/* Logo del sito */
.logo {
    max-width: 150px;
    height: auto;
}

/* Immagini responsive */
img {
    max-width: 100%;
    height: auto;
    border-radius: 8px;
}

/* Container per immagini */
.image-container {
    text-align: center;
    margin: 1rem 0;
}

/* Immagini profilo */
.profile-image {
    max-width: 200px;
    border-radius: 50%;
    border: 3px solid #2c3e50;
}

Compito: Correggi tutti gli errori nei percorsi e aggiungi le classi CSS necessarie per gestire le immagini correttamente.

🎨 Esercitazione 3: Sistema di Bottoni Avanzato

HTML da Usare con Icone:

<div class="button-group">
    <button class="btn">
        <img src="icons/normal.svg" alt="" class="btn-icon">
        Normale
    </button>
    <button class="btn btn-primary">
        <img src="icons/primary.svg" alt="" class="btn-icon">
        Primario
    </button>
    <button class="btn btn-secondary">
        <img src="icons/secondary.svg" alt="" class="btn-icon">
        Secondario
    </button>
    <button class="btn btn-danger">
        <img src="icons/danger.svg" alt="" class="btn-icon">
        Pericolo
    </button>
    <button class="btn btn-large">
        <img src="icons/large.svg" alt="" class="btn-icon">
        Grande
    </button>
</div>

CSS da Completare (Gestione Icone incluse):

/* GRUPPO DI BOTTONI */
.button-group {
    display: flex;
    gap: 1rem;
    flex-wrap: wrap;
    margin: 2rem 0;
}

/* CLASSE BASE: Stile comune a tutti i bottoni */
.btn {
    /* AGGIUNGI: padding, border, border-radius, cursor */
    /* AGGIUNGI: font-size, background-color, color */
    /* AGGIUNGI: transition, display, align-items, gap */
    /* AGGIUNGI: text-decoration, font-weight */
}

/* ICONE NEI BOTTONI */
.btn-icon {
    /* AGGIUNGI: width, height, vertical-align */
}

/* MODIFICATORE: Bottone primario (blu) */
.btn-primary {
    /* AGGIUNGI: background-color, border-color, color */
}

/* MODIFICATORE: Bottone secondario (grigio) */
.btn-secondary {
    /* AGGIUNGI: background-color grigio, border-color */
}

/* MODIFICATORE: Bottone pericolo (rosso) */
.btn-danger {
    /* AGGIUNGI: background-color rosso, border-color */
}

/* MODIFICATORE: Bottone grande */
.btn-large {
    /* AGGIUNGI: padding più ampio, font-size più grande */
}

/* STATO DISABILITATO */
.btn:disabled {
    /* AGGIUNGI: opacity, cursor, background-color */
}

/* Effetto hover per tutti i bottoni */
.btn:hover:not(:disabled) {
    /* AGGIUNGI: cambio colore di background */
    /* AGGIUNGI: transform per effetto sollevamento */
    /* AGGIUNGI: box-shadow */
}

/* Effetto focus per accessibilità */
.btn:focus {
    /* AGGIUNGI: outline, box-shadow */
}

/* RESPONSIVE */
@media (max-width: 768px) {
    .button-group {
        /* AGGIUNGI: flex-direction, align-items */
    }
    
    .btn {
        /* AGGIUNGI: width per occupare tutto lo spazio */
    }
}

📄 Esercitazione 4: Sistema di Card Avanzato con Immagini

HTML da Usare con Immagini:

<div class="cards-container">
    <div class="card">
        <div class="card-image">
            <img src="images/card1.jpg" alt="Descrizione immagine 1">
        </div>
        <div class="card-header">
            <h3>Card Normale</h3>
        </div>
        <div class="card-body">
            <p>Contenuto della card con informazioni utili.</p>
            <ul>
                <li>Elemento lista 1</li>
                <li>Elemento lista 2</li>
            </ul>
        </div>
        <div class="card-footer">
            <button class="btn">Azione</button>
        </div>
    </div>

    <div class="card card-featured">
        <div class="card-image">
            <img src="images/card2.jpg" alt="Descrizione immagine 2">
        </div>
        <div class="card-header">
            <h3>⭐ Card Speciale</h3>
        </div>
        <div class="card-body">
            <p>Questa card è in evidenza!</p>
        </div>
        <div class="card-footer">
            <button class="btn">Azione</button>
        </div>
    </div>
</div>

CSS da Completare (Gestione Immagini incluse):

/* CONTAINER CARDS */
.cards-container {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
    gap: 2rem;
    margin: 2rem 0;
}

/* CARD BASE */
.card {
    /* AGGIUNGI: background, border, border-radius, padding */
    /* AGGIUNGI: margin, box-shadow, transition, overflow */
}

/* IMMAGINE CARD */
.card-image {
    /* AGGIUNGI: width, height, overflow */
}

.card-image img {
    /* AGGIUNGI: width, height, object-fit, display */
}

/* HEADER della card */
.card-header {
    /* AGGIUNGI: padding, background, border-bottom */
    /* AGGIUNGI: margin-bottom */
}

/* BODY della card */
.card-body {
    /* AGGIUNGI: padding, line-height, color, flex-grow */
}

.card-body ul {
    /* AGGIUNGI: margin, padding-left */
}

.card-body li {
    /* AGGIUNGI: margin-bottom */
}

/* FOOTER della card */
.card-footer {
    /* AGGIUNGI: padding, background, border-top, text-align */
    /* AGGIUNGI: margin-top */
}

/* CARD in evidenza */
.card-featured {
    /* AGGIUNGI: bordo più spesso, background speciale */
    /* AGGIUNGI: ombra più marcata, transform scale */
}

/* Effetto hover */
.card:hover {
    /* AGGIUNGI: transform per sollevamento */
    /* AGGIUNGI: box-shadow più marcata */
}

/* RESPONSIVE */
@media (max-width: 768px) {
    .cards-container {
        /* AGGIUNGI: grid-template-columns */
    }
    
    .card {
        /* AGGIUNGI: margin, max-width */
    }
}

🏗️ Esercitazione 5: Layout Completo con Gestione Immagini

Template HTML da Completare con Immagini:

<!DOCTYPE html>
<html lang="it">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>La Mia Azienda</title>
    <link rel="stylesheet" href="css/stile.css">
</head>
<body>
    <!-- HEADER -->
    <header id="main-header">
        <div class="container">
            <div class="logo-container">
                <!-- INSERISCI LOGO -->
                <h1 class="logo-text">MiaAzienda</h1>
            </div>
            <nav class="main-nav">
                <!-- CREA menu con 4 link -->
            </nav>
        </div>
    </header>

    <!-- HERO SECTION -->
    <section id="hero">
        <div class="container">
            <div class="hero-content">
                <div class="hero-text">
                    <!-- CREA titolo e sottotitolo -->
                    <!-- AGGIUNGI bottone call-to-action -->
                </div>
                <div class="hero-image">
                    <!-- INSERISCI IMMAGINE HERO -->
                </div>
            </div>
        </div>
    </section>

    <!-- SERVIZI -->
    <section id="servizi">
        <div class="container">
            <h2 class="section-title">I Nostri Servizi</h2>
            <div class="card-grid">
                <!-- CREA 3 card per i servizi con immagini -->
            </div>
        </div>
    </section>

    <!-- FOOTER -->
    <footer id="main-footer">
        <div class="container">
            <div class="footer-content">
                <div class="footer-logo">
                    <!-- INSERISCI LOGO FOOTER -->
                </div>
                <!-- CREA contenuto footer -->
            </div>
        </div>
    </footer>
</body>
</html>

CSS da Completare (Layout Completo):

/* ===== STRUTTURA PRINCIPALE (ID) ===== */

/* Header principale */
#main-header {
    /* AGGIUNGI: background, position, padding, box-shadow */
}

/* Sezione hero */
#hero {
    /* AGGIUNGI: background, min-height, padding */
}

.hero-content {
    /* AGGIUNGI: display, align-items, gap, min-height */
}

.hero-text {
    /* AGGIUNGI: flex, flex-direction, justify-content */
}

.hero-image {
    /* AGGIUNGI: flex, justify-content, align-items */
}

.hero-image img {
    /* AGGIUNGI: max-width, height, border-radius */
}

/* Sezione servizi */
#servizi {
    /* AGGIUNGI: padding, background */
}

/* Footer */
#main-footer {
    /* AGGIUNGI: background, color, padding, margin-top */
}

/* ===== COMPONENTI RIUTILIZZABILI (CLASSI) ===== */

/* Container */
.container {
    /* AGGIUNGI: max-width, margin, padding */
}

/* Logo */
.logo-container {
    /* AGGIUNGI: display, align-items, gap */
}

.logo {
    /* AGGIUNGI: max-width, height */
}

.logo-text {
    /* AGGIUNGI: font-size, font-weight, color */
}

/* Menu principale */
.main-nav {
    /* AGGIUNGI: display, gap, list-style */
}

/* Grid per card */
.card-grid {
    /* AGGIUNGI: display: grid, grid-template-columns, gap */
}

/* Titoli sezione */
.section-title {
    /* AGGIUNGI: text-align, font-size, margin */
}

/* Footer */
.footer-content {
    /* AGGIUNGI: display, justify-content, align-items, gap */
}

.footer-logo img {
    /* AGGIUNGI: max-width, filter (per logo bianco) */
}

/* ===== RESPONSIVE ===== */

/* Tablet */
@media (max-width: 768px) {
    .hero-content {
        /* AGGIUNGI: flex-direction */
    }
    
    .card-grid {
        /* AGGIUNGI: grid-template-columns per 2 colonne */
    }
    
    .main-nav {
        /* AGGIUNGI: flex-direction, text-align */
    }
}

/* Mobile */
@media (max-width: 480px) {
    .card-grid {
        /* AGGIUNGI: grid-template-columns per 1 colonna */
    }
    
    .hero-content {
        /* AGGIUNGI: text-align, padding */
    }
    
    .logo-container {
        /* AGGIUNGI: flex-direction, text-align */
    }
}

🗺️ Guida ai Percorsi delle Immagini

Come Referenziare Correttamente le Immagini

Posizione File HTML Posizione Immagine Percorso Corretto Esempio
index.html (root) immagini/logo.png immagini/logo.png <img src="immagini/logo.png">
pagine/hobby.html immagini/logo.png ../immagini/logo.png <img src="../immagini/logo.png">
index.html (root) style/icons/icon.png style/icons/icon.png <img src="style/icons/icon.png">
pagine/profilo.html assets/foto.jpg ../assets/foto.jpg <img src="../assets/foto.jpg">

Regole Importanti:

  • ./ – Cartella corrente
  • ../ – Cartella superiore
  • / – Root del sito (da evitare in sviluppo locale)
  • Sempre usare alt per accessibilità
  • Usare formati moderni (WebP) quando possibile

Torna in alto