domenica 23 febbraio 2025

Corso di CSS & Web Design: 10 – Codice completo di un sito internet

10 – Codice completo di un sito internet 

Ecco un file unico HTML + CSS + (poco) JavaScript pronto da copiare nell’editor e pubblicare. È un sito single-page per un artista di arti figurative: responsive, accessibile, con galleria a griglia, filtro per categorie, lightbox per visualizzare le opere, menu mobile e form contatti (mailto fallback). Le immagini sono segnaposto — sostituisci i percorsi in <img src="img/..." con i tuoi file.

<!doctype html>
<html lang="it">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width,initial-scale=1" />
<title>Nome Artista — Arti Figurative</title>
<meta name="description" content="Sito ufficiale dell'artista Nome Artista. Biografia, galleria opere, mostre ed eventi, contatti." />

<!-- Font (sistema) e reset minimale -->
<style>
  :root{
    --bg:#faf9f7;
    --card:#ffffff;
    --muted:#6b6b6b;
    --accent:#b85b3b; /* cambiare secondo tavolozza artista */
    --accent-2:#2b2b2b;
    --maxw:1100px;
    --radius:12px;
    --gap:1.2rem;
    --shadow: 0 6px 20px rgba(10,10,10,0.08);
  }
  *{box-sizing:border-box}
  html,body{height:100%}
  body{
    margin:0;
    font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial;
    background:linear-gradient(180deg,var(--bg),#f6f5f3);
    color:var(--accent-2);
    line-height:1.45;
    -webkit-font-smoothing:antialiased;
    -moz-osx-font-smoothing:grayscale;
  }
  a{color:var(--accent); text-decoration:none}
  .container{max-width:var(--maxw); margin:0 auto; padding:2rem;}
  header.site-header{
    background:transparent;
    position:sticky;
    top:0;
    z-index:50;
    backdrop-filter: blur(6px);
    padding:1rem 0;
  }
  .nav-inner{display:flex;align-items:center;gap:1rem;justify-content:space-between;}
  .brand{display:flex;align-items:center;gap:.75rem}
  .brand .logo{
    width:56px;height:56px;border-radius:12px;display:inline-grid;place-items:center;
    background:linear-gradient(135deg,var(--accent),#f3b08a);color:white;font-weight:700;font-size:1.05rem;
    box-shadow:var(--shadow);
  }
  .brand .title{font-weight:700;font-size:1rem}
  nav.main-nav{display:flex;gap:1rem;align-items:center}
  nav.main-nav a{padding:.5rem .6rem;border-radius:8px;color:var(--accent-2);font-weight:600}
  nav.main-nav a:hover{background:rgba(0,0,0,0.04)}
  .btn-primary{
    background:var(--accent); color:white; padding:.5rem .8rem;border-radius:10px;font-weight:700;
    box-shadow:0 6px 18px rgba(184,91,59,0.18);
  }

  /* Hero */
  .hero{
    margin-top:1rem;
    display:grid;
    grid-template-columns: 1fr 420px;
    gap:var(--gap);
    align-items:center;
  }
  .hero .lead{
    background:linear-gradient(180deg, rgba(255,255,255,0.9), rgba(255,255,255,0.8));
    padding:2rem;border-radius:var(--radius);box-shadow:var(--shadow);
  }
  .hero h1{margin:0 0 .5rem;font-size:2rem}
  .hero p{margin:0 0 1rem;color:var(--muted)}

  .hero-visual{
    border-radius:var(--radius); overflow:hidden; box-shadow:var(--shadow);
    background:#111; min-height:320px; display:grid; place-items:center;
  }
  .hero-visual img{width:100%;height:100%;object-fit:cover;display:block}

  /* Sections */
  section{margin:2.2rem 0}
  h2.section-title{font-size:1.25rem;margin:0 0 .6rem}
  .lead-small{color:var(--muted);margin-bottom:1rem}

  /* Gallery grid */
  .filters{display:flex;gap:.5rem;flex-wrap:wrap;margin-bottom:1rem}
  .filters button{
    background:transparent;border:1px solid rgba(0,0,0,0.06);padding:.45rem .7rem;border-radius:999px;font-weight:600;
  }
  .filters button.active{background:var(--accent);color:white;border-color:transparent}

  .gallery-grid{
    display:grid;
    grid-template-columns: repeat(3, 1fr);
    gap: .9rem;
  }
  .card{
    background:var(--card);border-radius:10px;overflow:hidden;position:relative;box-shadow:var(--shadow);
  }
  .card img{width:100%;height:260px;object-fit:cover;display:block;transition:transform .32s ease}
  .card:hover img{transform:scale(1.03)}
  .card .meta{padding:.7rem .9rem}
  .meta h3{margin:0;font-size:1rem}
  .meta p{margin:.35rem 0 0;color:var(--muted);font-size:.9rem}

  /* Lightbox modal */
  .modal{
    position:fixed;inset:0;display:none;align-items:center;justify-content:center;background:rgba(0,0,0,0.65);
    z-index:1000;padding:2rem;
  }
  .modal.open{display:flex}
  .modal .sheet{background:linear-gradient(180deg,#fff,#fafafa);max-width:1100px;border-radius:12px;overflow:hidden;display:grid;grid-template-columns:1fr 350px;gap:1rem}
  .modal img{width:100%;height:100%;object-fit:contain;display:block;background:#111}
  .modal .info{padding:1.2rem}
  .modal .info h3{margin:0 0 .4rem}
  .modal .close{position:absolute;top:1rem;right:1rem;background:transparent;border:0;color:white;font-size:1.6rem}

  /* Events list */
  .events-list{display:grid;gap:.8rem}
  .event{display:flex;gap:1rem;align-items:flex-start;background:var(--card);padding:.8rem;border-radius:10px;box-shadow:var(--shadow)}
  .event .date{min-width:96px;color:var(--accent);font-weight:700}

  /* Contact */
  form.contact-form{display:grid;gap:.6rem;max-width:700px}
  label{font-size:.9rem;color:var(--muted)}
  input[type="text"], input[type="email"], textarea{
    padding:.6rem .7rem;border-radius:8px;border:1px solid rgba(0,0,0,0.08);
    font-size:1rem;background:white;
  }
  textarea{min-height:140px;resize:vertical}
  .form-actions{display:flex;gap:.6rem;align-items:center}

  footer.site-footer{margin-top:2rem;padding:2rem 0;background:transparent;border-top:1px solid rgba(0,0,0,0.04)}
  footer .foot-inner{display:flex;justify-content:space-between;align-items:center;gap:1rem;flex-wrap:wrap;color:var(--muted)}

  /* Responsive */
  @media (max-width:980px){
    .hero{grid-template-columns:1fr; }
    .gallery-grid{grid-template-columns:repeat(2,1fr)}
    .modal .sheet{grid-template-columns:1fr}
  }
  @media (max-width:620px){
    nav.main-nav{display:none}
    .menu-toggle{display:inline-block}
    .gallery-grid{grid-template-columns:1fr}
    header .nav-inner{gap:.5rem}
  }

  /* Mobile menu overlay */
  .mobile-nav{
    position:fixed;inset:0;display:none;z-index:80;background:rgba(0,0,0,0.4);
    align-items:flex-start;padding-top:6rem;
  }
  .mobile-nav.open{display:flex}
  .mobile-nav .panel{background:var(--card);width:100%;padding:1.2rem;border-radius:12px 12px 0 0}
  .mobile-nav a{display:block;padding:.8rem 0;border-bottom:1px solid rgba(0,0,0,0.04)}
</style>
</head>
<body>

<header class="site-header">
  <div class="container nav-inner">
    <div class="brand">
      <div class="logo" aria-hidden="true">NA</div>
      <div>
        <div class="title">Nome Artista</div>
        <div style="font-size:.85rem;color:var(--muted)">Arti figurative — pittura & scultura</div>
      </div>
    </div>

    <nav class="main-nav" role="navigation" aria-label="Menu principale">
      <a href="#home">Home</a>
      <a href="#bio">Biografia</a>
      <a href="#gallery">Opere</a>
      <a href="#events">Mostre</a>
      <a href="#contact">Contatti</a>
      <a class="btn-primary" href="#gallery">Visita la galleria</a>
    </nav>

    <button class="menu-toggle" aria-label="Apri menu" style="display:none" onclick="toggleMobile()">
      ☰
    </button>
  </div>
</header>

<!-- Mobile nav -->
<div id="mobileNav" class="mobile-nav" role="dialog" aria-modal="true" aria-hidden="true">
  <div class="panel container" role="navigation">
    <a href="#home" onclick="toggleMobile()">Home</a>
    <a href="#bio" onclick="toggleMobile()">Biografia</a>
    <a href="#gallery" onclick="toggleMobile()">Opere</a>
    <a href="#events" onclick="toggleMobile()">Mostre</a>
    <a href="#contact" onclick="toggleMobile()">Contatti</a>
  </div>
</div>

<main id="home" class="container">
  <!-- HERO -->
  <div class="hero" aria-labelledby="heroTitle">
    <div class="lead">
      <h1 id="heroTitle">Nome Artista</h1>
      <p class="lead-small">Opere recenti — sperimentazione tra colore, matericità e spazio. Studio a [Città]. Disponibile per esposizioni e commissioni.</p>
      <p style="margin-top:1rem"><a class="btn-primary" href="#gallery">Visita la Galleria</a> <a style="margin-left:1rem" href="#contact">Contattami</a></p>
      <hr style="margin:1.2rem 0; border:none; border-top:1px solid rgba(0,0,0,0.04)" />
      <h2 style="font-size:1rem;margin:0 0 .6rem">Ultima mostra</h2>
      <p style="color:var(--muted)">"Materia sospesa" — Galleria XYZ, 2025. Una serie di dipinti che interrogano la superficie come luogo di memoria e traccia.</p>
    </div>

    <div class="hero-visual" aria-hidden="true">
      <!-- sostituire con immagine reale -->
      <img src="img/hero-placeholder.jpg" alt="Opera in evidenza di Nome Artista" />
    </div>
  </div>

  <!-- BIOGRAFIA -->
  <section id="bio" aria-labelledby="bioTitle">
    <h2 class="section-title" id="bioTitle">Biografia & Statement</h2>
    <div style="display:grid;grid-template-columns:220px 1fr;gap:1rem;align-items:start">
      <img src="img/ritratto.jpg" alt="Ritratto dell'artista" style="width:220px;border-radius:10px;object-fit:cover" />
      <div>
        <p class="lead-small">Nome Artista (Città, 19XX) vive e lavora tra [Città]. La pratica artistica esplora la relazione tra materia e memoria attraverso pittura e installazione.</p>
        <p>Il lavoro nasce dall'attenzione al gesto e alla stratificazione. L'artista utilizza pigmenti naturali, materiali riciclati e tecniche miste per creare superfici che ricordano paesaggi interiori. Tra le mostre personali e collettive: Galleria A (2023), Festival B (2022), Museo C (2021).</p>

        <h3 style="margin-top:.8rem">Statement</h3>
        <p style="color:var(--muted)">"Cerco un equilibrio tra controllo e accidente: le superfici raccolgono tracce di processi, segni di tempo e presenza umana." — Nome Artista</p>
      </div>
    </div>
  </section>

  <!-- GALLERY -->
  <section id="gallery" aria-labelledby="galleryTitle">
    <h2 class="section-title" id="galleryTitle">Galleria Opere</h2>
    <p class="lead-small">Clicca su un'immagine per ingrandirla e leggere i dettagli. Usa i filtri per navigare per categorie.</p>

    <div class="filters" role="tablist" aria-label="Filtri galleria">
      <button class="filter-btn active" data-filter="all" aria-pressed="true">Tutte</button>
      <button class="filter-btn" data-filter="pittura">Pittura</button>
      <button class="filter-btn" data-filter="scultura">Scultura</button>
      <button class="filter-btn" data-filter="installazione">Installazione</button>
    </div>

    <div class="gallery-grid" id="grid">
      <!-- card (duplicare / sostituire immagini e dati reali) -->
      <article class="card" data-category="pittura">
        <a href="#!" class="open" data-src="img/opera1.jpg" data-title="Senza Titolo (2024)" data-desc="Olio su tela — 80x100 cm">
          <img src="img/opera1-thumb.jpg" alt="Senza Titolo, olio su tela" />
        </a>
        <div class="meta">
          <h3>Senza Titolo</h3>
          <p>Olio su tela — 2024</p>
        </div>
      </article>

      <article class="card" data-category="pittura">
        <a href="#!" class="open" data-src="img/opera2.jpg" data-title="Linea e Polvere (2023)" data-desc="Tecnica mista — 60x80 cm">
          <img src="img/opera2-thumb.jpg" alt="Linea e Polvere, tecnica mista" />
        </a>
        <div class="meta"><h3>Linea e Polvere</h3><p>Tecnica mista — 2023</p></div>
      </article>

      <article class="card" data-category="scultura">
        <a href="#!" class="open" data-src="img/scultura1.jpg" data-title="Corpo di Guardia (2022)" data-desc="Ferro e cera — 120x40x40 cm">
          <img src="img/scultura1-thumb.jpg" alt="Corpo di Guardia, scultura" />
        </a>
        <div class="meta"><h3>Corpo di Guardia</h3><p>Ferro e cera — 2022</p></div>
      </article>

      <article class="card" data-category="installazione">
        <a href="#!" class="open" data-src="img/install1.jpg" data-title="Campo (2019)" data-desc="Installazione site-specific">
          <img src="img/install1-thumb.jpg" alt="Installazione Campo" />
        </a>
        <div class="meta"><h3>Campo</h3><p>Installazione — 2019</p></div>
      </article>

      <article class="card" data-category="pittura">
        <a href="#!" class="open" data-src="img/opera3.jpg" data-title="Segno sopito (2020)" data-desc="Acrilico su tela — 70x90 cm">
          <img src="img/opera3-thumb.jpg" alt="Segno sopito, acrilico" />
        </a>
        <div class="meta"><h3>Segno sopito</h3><p>Acrilico — 2020</p></div>
      </article>

      <article class="card" data-category="scultura">
        <a href="#!" class="open" data-src="img/scultura2.jpg" data-title="Bastione (2021)" data-desc="Legno, pigmento">
          <img src="img/scultura2-thumb.jpg" alt="Bastione, scultura legno" />
        </a>
        <div class="meta"><h3>Bastione</h3><p>Legno & pigmento — 2021</p></div>
      </article>
    </div>
  </section>

  <!-- Lightbox modal -->
  <div id="modal" class="modal" role="dialog" aria-hidden="true" aria-labelledby="modalTitle">
    <div class="sheet" role="document">
      <img id="modalImg" src="" alt="" />
      <div class="info">
        <h3 id="modalTitle">Titolo opera</h3>
        <p id="modalDesc" style="color:var(--muted);margin-top:.4rem"></p>
        <p style="margin-top:1rem"><strong>Tecnica:</strong> <span id="modalTech"></span></p>
        <p style="margin-top:1rem"><em>Contattami per disponibilità e dimensioni originali.</em></p>
        <p style="margin-top:1rem"><a id="downloadBtn" href="#" target="_blank">Scarica immagine</a></p>
      </div>
      <button class="close" aria-label="Chiudi" onclick="closeModal()">✕</button>
    </div>
  </div>

  <!-- EVENTS -->
  <section id="events" aria-labelledby="eventsTitle">
    <h2 class="section-title" id="eventsTitle">Mostre ed Eventi</h2>
    <div class="events-list">
      <article class="event">
        <div class="date">Set 2025</div>
        <div>
          <strong>"Materia sospesa"</strong> — Galleria XYZ, Città. Catalogo e apertura al pubblico dal 12 settembre.
        </div>
      </article>

      <article class="event">
        <div class="date">Mar 2024</div>
        <div>
          <strong>Residenza artistica</strong> — Centro Arte Locale. Progetto di sperimentazione con materiali naturali.
        </div>
      </article>
    </div>
  </section>

  <!-- CONTACT -->
  <section id="contact" aria-labelledby="contactTitle">
    <h2 class="section-title" id="contactTitle">Contatti</h2>
    <p class="lead-small">Per richieste di esposizione, vendita o commissioni puoi compilare il form oppure scrivere a <a href="mailto:artista@esempio.com">artista@esempio.com</a></p>

    <form class="contact-form" id="contactForm" onsubmit="submitForm(event)" novalidate>
      <label for="name">Nome</label>
      <input id="name" name="name" type="text" required />

      <label for="email">Email</label>
      <input id="email" name="email" type="email" required />

      <label for="message">Messaggio</label>
      <textarea id="message" name="message" required></textarea>

      <div class="form-actions">
        <button type="submit" class="btn-primary">Invia messaggio</button>
        <small style="color:var(--muted)">Oppure scrivi a <a href="mailto:artista@esempio.com">artista@esempio.com</a></small>
      </div>
    </form>
  </section>

  <footer class="site-footer">
    <div class="foot-inner">
      <div>© <strong>Nome Artista</strong> — Tutti i diritti riservati</div>
      <div style="display:flex;gap:.6rem;align-items:center">
        <a href="#" aria-label="Instagram">IG</a>
        <a href="#" aria-label="Facebook">FB</a>
        <a href="#" aria-label="LinkedIn">LN</a>
      </div>
    </div>
  </footer>
</main>

<!-- JavaScript minimo: menu mobile, filtri, lightbox, form -->
<script>
  // Mobile menu toggling
  const mobileNav = document.getElementById('mobileNav');
  function toggleMobile(){
    const isOpen = mobileNav.classList.toggle('open');
    mobileNav.setAttribute('aria-hidden', !isOpen);
    document.body.style.overflow = isOpen ? 'hidden' : '';
  }

  // Gallery filtering
  const filterBtns = Array.from(document.querySelectorAll('.filter-btn'));
  const cards = Array.from(document.querySelectorAll('.gallery-grid .card'));
  filterBtns.forEach(btn=>{
    btn.addEventListener('click', ()=> {
      filterBtns.forEach(b=> { b.classList.remove('active'); b.setAttribute('aria-pressed','false')});
      btn.classList.add('active'); btn.setAttribute('aria-pressed','true');
      const f = btn.dataset.filter;
      cards.forEach(c=>{
        if(f==='all'){ c.style.display='block'; }
        else { c.style.display = (c.dataset.category===f) ? 'block' : 'none'; }
      });
    });
  });

  // Lightbox (modal)
  const modal = document.getElementById('modal');
  const modalImg = document.getElementById('modalImg');
  const modalTitle = document.getElementById('modalTitle');
  const modalDesc = document.getElementById('modalDesc');
  const downloadBtn = document.getElementById('downloadBtn');
  const openLinks = Array.from(document.querySelectorAll('.card .open'));
  openLinks.forEach(link=>{
    link.addEventListener('click', (e)=>{
      e.preventDefault();
      const src = link.dataset.src || link.querySelector('img').src;
      const title = link.dataset.title || link.querySelector('.meta h3')?.innerText || 'Opera';
      const desc = link.dataset.desc || link.querySelector('.meta p')?.innerText || '';
      openModal(src,title,desc);
    });
  });
  function openModal(src,title,desc){
    modalImg.src = src;
    modalImg.alt = title;
    modalTitle.textContent = title;
    modalDesc.textContent = desc;
    downloadBtn.href = src;
    modal.classList.add('open');
    modal.setAttribute('aria-hidden','false');
    document.body.style.overflow='hidden';
  }
  function closeModal(){
    modal.classList.remove('open');
    modal.setAttribute('aria-hidden','true');
    modalImg.src = '';
    document.body.style.overflow='';
  }
  modal.addEventListener('click', (e)=>{ if(e.target===modal) closeModal(); });

  // Basic contact form handler (mailto fallback) - demo only
  function submitForm(e){
    e.preventDefault();
    const name = document.getElementById('name').value.trim();
    const email = document.getElementById('email').value.trim();
    const message = document.getElementById('message').value.trim();
    if(!name || !email || !message){
      alert('Compila tutti i campi prima di inviare.');
      return;
    }
    // mailto fallback
    const subject = encodeURIComponent('Richiesta da sito — ' + name);
    const body = encodeURIComponent('Da: ' + name + ' ('+email+')\n\n' + message);
    window.location.href = 'mailto:artista@esempio.com?subject='+subject+'&body='+body;
  }

  // Accessibility helper: focus first link in modal when opened (optional)
  modal.addEventListener('transitionend', ()=> {
    if(modal.classList.contains('open')) modal.querySelector('.sheet').focus();
  });
</script>

</body>
</html>

Note d’uso e personalizzazione

  • Immagini: sostituisci tutti i file img/... con le tue immagini reali (miniature e versioni grandi per il lightbox). Mantieni dimensioni ottimali per web (es. 1200px lato lungo per immagini principali).

  • Colori & tipografia: varia le variabili CSS --accent, --bg, ecc. per adattarle all’identità artistica.

  • Accessibilità: il markup include alt, ruoli ARIA e focus basics; puoi estenderlo aggiungendo keyboard trapping nella modal per migliori standard.

  • Form: il form usa mailto: come fallback; per ricevere i messaggi davvero, integra un endpoint server (es. formspree, Netlify forms o tuo backend).

  • SEO / performance: aggiungi meta tags social (Open Graph), minifica CSS/JS in produzione e usa immagini ottimizzate (WebP).


sabato 22 febbraio 2025

Corso di CSS & Web Design: 9 – Progetto completo di un sito internet

Struttura dettagliata del sito di un artista di arti figurative

🎯 Obiettivi del sito

  1. Presentare in maniera professionale l’artista (biografia, statement, contatti).

  2. Offrire una galleria di opere ordinata e facilmente navigabile.

  3. Creare uno spazio per eventi, mostre e news.

  4. Consentire il contatto diretto (form email o social).

  5. Esprimere coerenza estetica con lo stile dell’artista tramite un uso mirato di CSS (colori, tipografia, layout responsivo).


🗂 Architettura delle pagine

1. Homepage

  • Obiettivo: dare un impatto immediato, con immagine o slider di un’opera significativa.

  • Elementi:

    • Logo o firma dell’artista.

    • Menu di navigazione chiaro (Home, Biografia, Opere, Mostre, Contatti).

    • Testo breve introduttivo (es. "Arte che unisce forma e materia...").

    • Richiamo immediato a una sezione in evidenza (es. ultima mostra o opera del mese).


2. Biografia / Statement

  • Obiettivo: raccontare il percorso dell’artista e la sua filosofia.

  • Elementi:

    • Ritratto fotografico dell’artista.

    • Testo lungo con biografia narrativa.

    • Citazioni o statement sull’arte personale.

    • Eventuale timeline interattiva con tappe principali.


3. Galleria delle Opere

  • Obiettivo: mostrare le opere in modo ordinato e immersivo.

  • Struttura CSS da evidenziare:

    • Layout a griglia grid/flexbox.

    • Filtri (categorie: pittura, scultura, installazioni).

    • Hover effects: effetto zoom o overlay con titolo/opera.

  • Elementi:

    • Miniature cliccabili → lightbox con immagine grande + dettagli (titolo, tecnica, anno, dimensioni).


4. Mostre ed Eventi

  • Obiettivo: informare il pubblico su mostre passate, presenti e future.

  • Elementi:

    • Lista cronologica di eventi.

    • Schede con immagine locandina, data, luogo, breve descrizione.

    • Sezione "Eventi passati" con archivio consultabile.


5. Contatti

  • Obiettivo: facilitare la comunicazione con pubblico e gallerie.

  • Elementi:

    • Form contatti (nome, email, messaggio).

    • Link ai social network.

    • Eventuale indirizzo email diretto.

    • Mappa interattiva (se l’artista ha uno studio aperto al pubblico).


6. Footer (comune a tutte le pagine)

  • Elementi:

    • Copyright e nome artista.

    • Link rapidi al menu.

    • Icone social stilizzate.

    • Eventuale newsletter.


🎨 Scelte stilistiche CSS

  1. Palette colori

    • Ispirata alle opere dell’artista: colori neutri (sfondo bianco o nero) con accenti cromatici derivati dalle tele/sculture.

  2. Tipografia

    • Font serif elegante per i testi (narrazione biografia).

    • Font sans-serif moderno per i titoli e menu.

    • Uso del contrasto per leggibilità.

  3. Layout

    • Responsive design con media queries (mobile-first).

    • Griglie flessibili con CSS Grid per gallerie.

    • Spaziature ampie per valorizzare le opere.

  4. Animazioni ed effetti

    • Transizioni morbide al passaggio del mouse.

    • Fade-in per immagini della galleria.

    • Header con effetto sticky al scroll.


📑 Struttura file del sito

  • index.html → Homepage

  • biografia.html → Pagina biografia

  • galleria.html → Opere

  • mostre.html → Mostre ed eventi

  • contatti.html → Contatti

  • style.css → Foglio di stile principale

  • script.js → Eventuali interazioni dinamiche (lightbox, menu mobile)

  • Cartelle:

    • /img → immagini delle opere e foto artista

    • /css → fogli di stile aggiuntivi

    • /js → script


venerdì 21 febbraio 2025

Corso di CSS & Web Design: 8 – Effetti dinamici e animazioni

 8 – Effetti dinamici e animazioni

1. Pseudo-classi CSS

Le pseudo-classi permettono di applicare stili a elementi in stati particolari o in base alla loro posizione nel DOM.

1.1 :hover

  • Applica stili quando il mouse passa sopra l’elemento.

button:hover {
  background-color: #4fa3f2;
  color: white;
}

1.2 :focus

  • Applicato quando un elemento riceve il focus, ad esempio un input.

input:focus {
  border-color: #4fa3f2;
  outline: none;
}

1.3 :nth-child()

  • Seleziona elementi in base alla loro posizione.

li:nth-child(odd) {
  background-color: #f2f2f2; /* elementi dispari */
}

li:nth-child(3) {
  color: red; /* terzo elemento */
}

2. Transizioni e trasformazioni

2.1 Transform

  • Permette di modificare la posizione, dimensione o inclinazione di un elemento.

.box:hover {
  transform: scale(1.1);       /* ingrandisce */
  transform: rotate(10deg);    /* ruota */
  transform: translateX(20px); /* sposta orizzontalmente */
}

2.2 Transition

  • Definisce l’animazione fluida tra due stati.

.box {
  transition: transform 0.3s ease, background-color 0.3s ease;
}
  • Significato:

    • 0.3s → durata della transizione

    • ease → tipo di accelerazione

    • Possibile: linear, ease-in, ease-out, ease-in-out


3. Animazioni con @keyframes

Permettono di creare movimenti complessi e ripetitivi.

3.1 Sintassi di base

@keyframes esempioAnimazione {
  0%   { transform: translateX(0); background-color: red; }
  50%  { transform: translateX(50px); background-color: yellow; }
  100% { transform: translateX(0); background-color: red; }
}

.elemento {
  animation: esempioAnimazione 2s infinite ease-in-out;
}
  • Proprietà principali:

    • animation-name

    • animation-duration

    • animation-iteration-count (numero di ripetizioni o infinite)

    • animation-timing-function (ease, linear, etc.)

    • animation-delay


4. Creazione di pulsanti interattivi

Esempio Pulsante Hover

button {
  padding: 12px 25px;
  font-size: 16px;
  background-color: #4fa3f2;
  color: white;
  border: none;
  border-radius: 8px;
  cursor: pointer;
  transition: all 0.3s ease;
}

button:hover {
  transform: scale(1.1);
  background-color: #357abd;
}
  • Risultato: pulsante che cresce e cambia colore al passaggio del mouse.


5. Esercizio svolto: animare un menu a comparsa

Obiettivo

Creare un menu laterale che compare e scompare con animazione fluida.

HTML

<!DOCTYPE html>
<html lang="it">
<head>
  <meta charset="UTF-8">
  <title>Menu Animato</title>
  <link rel="stylesheet" href="stile.css">
</head>
<body>
  <button id="menu-btn">☰ Menu</button>
  <nav class="side-menu">
    <a href="#">Home</a>
    <a href="#">Servizi</a>
    <a href="#">Contatti</a>
  </nav>

  <script>
    const btn = document.getElementById('menu-btn');
    const menu = document.querySelector('.side-menu');
    btn.addEventListener('click', () => {
      menu.classList.toggle('active');
    });
  </script>
</body>
</html>

CSS (stile.css)

body {
  font-family: Arial, sans-serif;
  margin: 0;
}

/* Bottone menu */
#menu-btn {
  padding: 10px 15px;
  font-size: 18px;
  cursor: pointer;
}

/* Menu laterale */
.side-menu {
  position: fixed;
  top: 0;
  left: -250px; /* nascosto fuori schermo */
  width: 250px;
  height: 100%;
  background-color: #333;
  display: flex;
  flex-direction: column;
  padding-top: 50px;
  transition: left 0.3s ease;
}

.side-menu a {
  color: white;
  text-decoration: none;
  padding: 15px 20px;
  transition: background-color 0.3s;
}

.side-menu a:hover {
  background-color: #4fa3f2;
}

/* Menu attivo */
.side-menu.active {
  left: 0; /* compare */
}

Risultato

  • Bottone ☰ che attiva il menu laterale.

  • Menu scorre dentro e fuori con animazione fluida.

  • Link interattivi con effetto hover.



giovedì 20 febbraio 2025

Corso di CSS & Web Design: 7 – Responsive Design

7 – Responsive Design

1. Concetto di mobile-first

Responsive Design significa che il layout e i contenuti di una pagina web si adattano automaticamente alle dimensioni dello schermo del dispositivo (desktop, tablet, smartphone).

Principio mobile-first

  • Si sviluppa il layout base per dispositivi mobili.

  • Successivamente si aggiungono regole CSS per schermi più grandi tramite media queries.

  • Vantaggi:

    • Migliore performance su mobile.

    • Approccio progressivo e modulare.

/* Stile base (mobile) */
body {
  font-size: 16px;
  padding: 10px;
}

2. Media Queries e breakpoints

2.1 Sintassi di base

@media (min-width: 768px) {
  /* regole per tablet e superiori */
}

@media (min-width: 1024px) {
  /* regole per desktop */
}
  • min-width → mobile-first

  • max-width → desktop-first

  • È possibile combinare condizioni multiple:

@media (min-width: 768px) and (max-width: 1023px) {
  /* tablet */
}

2.2 Breakpoints comuni

Dispositivo Breakpoint suggerito
Mobile 0 – 767px
Tablet 768 – 1023px
Desktop 1024 – 1440px
Large Desktop >1440px

3. Tecniche per adattare contenuti

3.1 Immagini responsive

  • max-width: 100%; height: auto;

img {
  max-width: 100%;
  height: auto;
}

3.2 Menu responsive

  • Nascondere il menu principale su mobile e sostituirlo con hamburger menu:

.navbar {
  display: flex;
  flex-direction: column; /* mobile */
}
@media (min-width: 768px) {
  .navbar {
    flex-direction: row; /* desktop */
  }
}

3.3 Griglie responsive

  • Usando Flexbox:

.grid-item {
  flex: 1 1 100%; /* mobile: una colonna */
}

@media (min-width: 768px) {
  .grid-item {
    flex: 1 1 48%; /* tablet: due colonne */
  }
}

@media (min-width: 1024px) {
  .grid-item {
    flex: 1 1 30%; /* desktop: tre colonne */
  }
}
  • Usando CSS Grid:

.container {
  display: grid;
  grid-template-columns: 1fr; /* mobile */
  gap: 15px;
}

@media (min-width: 768px) {
  .container {
    grid-template-columns: 1fr 1fr; /* tablet */
  }
}

@media (min-width: 1024px) {
  .container {
    grid-template-columns: 1fr 1fr 1fr; /* desktop */
  }
}

4. Introduzione a framework CSS

4.1 Bootstrap

  • Sistema a 12 colonne.

  • Classi predefinite: .container, .row, .col-md-6, .d-flex, .text-center.

  • Permette di creare layout responsive con poche righe di codice.

<div class="container">
  <div class="row">
    <div class="col-md-6">Colonna 1</div>
    <div class="col-md-6">Colonna 2</div>
  </div>
</div>

4.2 Tailwind

  • Framework utility-first: classi rapide per padding, margin, colori, flex, grid.

<div class="flex flex-col md:flex-row gap-4">
  <div class="bg-blue-500 p-4">Colonna 1</div>
  <div class="bg-green-500 p-4">Colonna 2</div>
</div>

5. Esercizio svolto: rendere responsive una pagina portfolio

Obiettivo

Creare una pagina portfolio con griglia di progetti che si adatta a mobile, tablet e desktop.

HTML

<!DOCTYPE html>
<html lang="it">
<head>
  <meta charset="UTF-8">
  <title>Portfolio Responsive</title>
  <link rel="stylesheet" href="stile.css">
</head>
<body>
  <header class="header">Portfolio</header>
  <nav class="navbar">
    <a href="#">Home</a>
    <a href="#">Progetti</a>
    <a href="#">Contatti</a>
  </nav>
  <main class="container">
    <div class="project">Progetto 1</div>
    <div class="project">Progetto 2</div>
    <div class="project">Progetto 3</div>
    <div class="project">Progetto 4</div>
    <div class="project">Progetto 5</div>
  </main>
  <footer class="footer">© 2025 Portfolio</footer>
</body>
</html>

CSS (stile.css)

body {
  margin: 0;
  font-family: Arial, sans-serif;
}

.header, .footer {
  background-color: #333;
  color: white;
  text-align: center;
  padding: 20px;
}

.navbar {
  display: flex;
  flex-direction: column;
  background-color: #555;
}

.navbar a {
  color: white;
  padding: 10px;
  text-decoration: none;
  text-align: center;
}

@media (min-width: 768px) {
  .navbar {
    flex-direction: row;
    justify-content: center;
  }
  .navbar a {
    margin: 0 15px;
  }
}

.container {
  display: grid;
  grid-template-columns: 1fr; /* mobile */
  gap: 15px;
  padding: 15px;
}

.project {
  background-color: #4fa3f2;
  color: white;
  padding: 20px;
  border-radius: 10px;
  text-align: center;
}

/* Tablet */
@media (min-width: 768px) {
  .container {
    grid-template-columns: 1fr 1fr;
  }
}

/* Desktop */
@media (min-width: 1024px) {
  .container {
    grid-template-columns: 1fr 1fr 1fr;
  }
}

Risultato

  • Navbar verticale su mobile, orizzontale su tablet e desktop.

  • Portfolio con 1 colonna su mobile, 2 colonne su tablet, 3 colonne su desktop.

  • Design responsivo e pulito, adattabile a qualsiasi dispositivo.


mercoledì 19 febbraio 2025

Corso di CSS & Web Design: 6 – Immagini, sfondi e media

6 – Immagini, sfondi e media

1. Proprietà background

CSS consente di gestire lo sfondo di un elemento tramite varie proprietà.

1.1 Colore di sfondo

div {
  background-color: #f2f2f2; /* colore chiaro */
}

1.2 Immagine di sfondo

div {
  background-image: url('immagine.jpg');
  background-repeat: no-repeat; /* evita ripetizioni */
  background-position: center;   /* centro della cella */
  background-size: cover;       /* copre tutta l’area del box */
}

1.3 Gradiente

  • Lineare:

div {
  background: linear-gradient(to right, #ff7e5f, #feb47b);
}
  • Radiale:

div {
  background: radial-gradient(circle, #6a11cb, #2575fc);
}

2. Controllo sulle immagini

2.1 Object-fit

Determina come un’immagine si adatta all’elemento contenitore:

Valore Funzione
fill Riempie tutto lo spazio, distorcendo se necessario
contain Si adatta senza ritagliare
cover Riempie senza distorsione, ritagliando se necessario
none Mantiene dimensioni originali
scale-down Scala verso il basso se necessario

Esempio

img {
  width: 300px;
  height: 200px;
  object-fit: cover;
  border-radius: 8px;
}

2.2 Background-size

  • Controlla la dimensione dell’immagine di sfondo:

div {
  background-size: cover;   /* copre tutta l’area */
  background-size: contain; /* tutta l’immagine visibile */
}

3. Icone e SVG

3.1 Icone

  • Possono essere inserite come immagini (<img>) o tramite librerie tipo Font Awesome.

<i class="fas fa-home"></i>

3.2 SVG

  • Immagini vettoriali scalabili:

<svg width="100" height="100">
  <circle cx="50" cy="50" r="40" stroke="black" stroke-width="3" fill="red" />
</svg>
  • Vantaggi: scalabilità senza perdita di qualità e controllo tramite CSS.


4. Esercizio svolto: galleria fotografica con hover effect

Obiettivo

Creare una galleria di immagini che cambia stile al passaggio del mouse (hover).

HTML

<!DOCTYPE html>
<html lang="it">
<head>
  <meta charset="UTF-8">
  <title>Galleria CSS</title>
  <link rel="stylesheet" href="stile.css">
</head>
<body>
  <div class="gallery">
    <div class="photo"><img src="https://via.placeholder.com/300x200" alt="Foto 1"></div>
    <div class="photo"><img src="https://via.placeholder.com/300x200" alt="Foto 2"></div>
    <div class="photo"><img src="https://via.placeholder.com/300x200" alt="Foto 3"></div>
  </div>
</body>
</html>

CSS (stile.css)

body {
  font-family: Arial, sans-serif;
  background-color: #f2f2f2;
  display: flex;
  justify-content: center;
  padding: 50px;
}

.gallery {
  display: flex;
  gap: 20px;
  flex-wrap: wrap;
}

.photo {
  overflow: hidden;
  border-radius: 10px;
}

.photo img {
  width: 300px;
  height: 200px;
  object-fit: cover;
  transition: transform 0.3s, filter 0.3s; /* animazione hover */
}

.photo img:hover {
  transform: scale(1.1);      /* ingrandimento */
  filter: brightness(80%);    /* scurisce leggermente */
}

Risultato

  • Tre immagini affiancate, con spaziatura uniforme.

  • Effetto zoom e darken al passaggio del mouse.

  • Immagini adattate al contenitore grazie a object-fit: cover.

  • Design responsive e moderno.


martedì 18 febbraio 2025

Corso di CSS & Web Design: 5 – Layout con CSS Grid

5 – Layout con CSS Grid

1. Introduzione al Grid System

CSS Grid è un sistema di layout bidimensionale, che consente di posizionare elementi sia in righe (rows) che in colonne (columns), rendendo più semplice creare layout complessi e responsive rispetto a Flexbox (che è più indicato per un asse principale).

Vantaggi principali

  • Controllo preciso su righe e colonne.

  • Possibilità di ridimensionare automaticamente gli elementi.

  • Facilita la creazione di homepage, magazine, dashboard.


2. Container Grid e Items

2.1 Container Grid

Per definire un container grid:

.container {
  display: grid;
  grid-template-columns: 1fr 2fr 1fr; /* definizione colonne */
  grid-template-rows: 100px auto 50px; /* definizione righe */
  gap: 15px; /* spazio tra righe e colonne */
}
  • fr = frazioni dello spazio disponibile.

  • gap = distanza tra righe e colonne.

  • grid-template-columns e grid-template-rows definiscono la struttura del layout.

2.2 Items

Gli elementi figli del container grid diventano automaticamente grid items.

Possono essere posizionati usando:

  • grid-column: colonna di inizio/fine.

  • grid-row: riga di inizio/fine.

.item1 {
  grid-column: 1 / 3; /* occupa colonne 1 e 2 */
  grid-row: 1 / 2;    /* prima riga */
}

3. Proprietà principali del container

Proprietà Funzione
display: grid Trasforma l’elemento in container Grid
grid-template-columns/rows Definisce numero e dimensione di colonne/righe
gap Spaziatura tra righe e colonne
grid-auto-rows/columns Dimensione automatica di righe o colonne non definite
justify-items / align-items Allineamento degli items all’interno delle celle
justify-content / align-content Allineamento dell’intera griglia all’interno del container

4. Posizionamento avanzato degli elementi

  • grid-column / grid-row

.item {
  grid-column: 2 / 4; /* dalla colonna 2 alla 3 inclusa */
  grid-row: 1 / 3;    /* dalla riga 1 alla 2 inclusa */
}
  • grid-area

    • Consente di definire area nomi:

.container {
  grid-template-areas:
    "header header header"
    "sidebar content content"
    "footer footer footer";
}

.header { grid-area: header; }
.sidebar { grid-area: sidebar; }
.content { grid-area: content; }
.footer { grid-area: footer; }
  • Allineamento interno alle celle

.item {
  justify-self: center; /* or start, end, stretch */
  align-self: center;   /* or start, end, stretch */
}

5. Esercizio svolto: homepage di un magazine

Obiettivo

Creare una homepage con:

  • Header

  • Sidebar

  • Contenuto principale

  • Footer

HTML

<!DOCTYPE html>
<html lang="it">
<head>
  <meta charset="UTF-8">
  <title>Magazine Grid</title>
  <link rel="stylesheet" href="stile.css">
</head>
<body>
  <div class="container">
    <header class="header">Header</header>
    <aside class="sidebar">Sidebar</aside>
    <main class="content">Contenuto principale</main>
    <footer class="footer">Footer</footer>
  </div>
</body>
</html>

CSS (stile.css)

body {
  margin: 0;
  font-family: Arial, sans-serif;
}

/* Container Grid */
.container {
  display: grid;
  grid-template-columns: 1fr 3fr;
  grid-template-rows: 100px auto 50px;
  grid-template-areas:
    "header header"
    "sidebar content"
    "footer footer";
  gap: 15px;
  padding: 15px;
  background-color: #f2f2f2;
}

/* Header */
.header {
  grid-area: header;
  background-color: #333;
  color: white;
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 24px;
}

/* Sidebar */
.sidebar {
  grid-area: sidebar;
  background-color: #4fa3f2;
  color: white;
  padding: 15px;
}

/* Content */
.content {
  grid-area: content;
  background-color: #ffffff;
  padding: 15px;
  border-radius: 8px;
}

/* Footer */
.footer {
  grid-area: footer;
  background-color: #333;
  color: white;
  display: flex;
  align-items: center;
  justify-content: center;
}

Risultato

  • Layout a due colonne con header e footer su tutta la larghezza.

  • Sidebar e contenuto principali affiancati.

  • Layout responsive-friendly perché la griglia può essere facilmente modificata con media queries.


lunedì 17 febbraio 2025

Corso di CSS & Web Design: 4 – Layout con Flexbox

4 – Layout con Flexbox

1. Concetti chiave: container e items

Flexbox è un modello di layout CSS pensato per disporre elementi in modo flessibile e responsivo, sia in orizzontale che in verticale.

1.1 Container

  • L’elemento genitore diventa contenitore flessibile con:

display: flex;
  • Proprietà principali del container:

    • flex-direction: direzione principale degli elementi (row, row-reverse, column, column-reverse).

    • justify-content: allineamento lungo l’asse principale (flex-start, center, space-between, space-around).

    • align-items: allineamento lungo l’asse trasversale (flex-start, center, stretch, baseline).

    • flex-wrap: gestione del ritorno a capo (nowrap, wrap, wrap-reverse).

1.2 Items

  • Elementi figli (items) del container:

    • flex-grow: capacità di espandersi rispetto agli altri elementi.

    • flex-shrink: capacità di ridursi.

    • flex-basis: dimensione iniziale preferita.

    • align-self: sovrascrive l’allineamento lungo l’asse trasversale per un singolo item.


2. Proprietà principali del container Flexbox

Proprietà Valori comuni Funzione
flex-direction row, row-reverse, column, column-reverse Direzione principale degli elementi
justify-content flex-start, flex-end, center, space-between, space-around Allineamento lungo l’asse principale
align-items flex-start, flex-end, center, stretch Allineamento lungo l’asse trasversale
flex-wrap nowrap, wrap, wrap-reverse Consente il ritorno a capo degli elementi

Esempio Container

.container {
  display: flex;
  flex-direction: row;
  justify-content: space-around;
  align-items: center;
  flex-wrap: wrap;
}

3. Proprietà principali degli items

Proprietà Funzione
flex-grow Espansione proporzionale
flex-shrink Riduzione proporzionale
flex-basis Dimensione base dell’item
flex shorthand per flex-grow flex-shrink flex-basis
align-self Allineamento individuale lungo l’asse trasversale

Esempio Item

.item {
  flex: 1 1 200px; /* grow=1, shrink=1, base=200px */
  margin: 10px;
  padding: 20px;
  background-color: lightblue;
  text-align: center;
}

4. Creare Navbar e griglie flessibili

4.1 Navbar orizzontale

<nav class="navbar">
  <a href="#">Home</a>
  <a href="#">Servizi</a>
  <a href="#">Contatti</a>
</nav>
.navbar {
  display: flex;
  justify-content: space-around;
  background-color: #333;
  padding: 10px;
}
.navbar a {
  color: white;
  text-decoration: none;
  padding: 8px 15px;
}
.navbar a:hover {
  background-color: #555;
  border-radius: 5px;
}

4.2 Griglia flessibile

  • Container flessibile con items che si adattano allo spazio:

.grid {
  display: flex;
  flex-wrap: wrap;
  gap: 15px; /* distanza tra items */
}
.grid-item {
  flex: 1 1 200px; /* dimensione minima 200px, cresce se possibile */
  padding: 20px;
  background-color: #a2d5f2;
  text-align: center;
  border-radius: 8px;
}

5. Esercizio svolto: layout a 3 colonne responsive

Obiettivo

Creare un layout con 3 colonne che si ridimensionano in base alla larghezza dello schermo.

HTML

<!DOCTYPE html>
<html lang="it">
<head>
  <meta charset="UTF-8">
  <title>Layout Flexbox 3 colonne</title>
  <link rel="stylesheet" href="stile.css">
</head>
<body>
  <div class="container">
    <div class="item">Colonna 1</div>
    <div class="item">Colonna 2</div>
    <div class="item">Colonna 3</div>
  </div>
</body>
</html>

CSS (stile.css)

body {
  font-family: Arial, sans-serif;
  margin: 0;
  padding: 20px;
  background-color: #f2f2f2;
}

.container {
  display: flex;
  flex-wrap: wrap; /* ritorno a capo su schermi piccoli */
  justify-content: space-between;
  gap: 20px; /* distanza tra colonne */
}

.item {
  flex: 1 1 30%; /* cresce, si riduce, base 30% del container */
  padding: 20px;
  background-color: #4fa3f2;
  color: white;
  text-align: center;
  border-radius: 10px;
}

/* Responsive: su schermi piccoli le colonne diventano a tutta larghezza */
@media (max-width: 768px) {
  .item {
    flex: 1 1 100%;
  }
}

Risultato

  • Tre colonne affiancate su desktop.

  • Si ridimensionano automaticamente su tablet o mobile.

  • Spaziatura uniforme tra le colonne grazie a gap.

  • Bordi arrotondati e sfondo colorato per estetica.


domenica 16 febbraio 2025

Corso di CSS & Web Design: 3 – Box Model e spaziature

3 – Box Model e spaziature

1. Concetto di Box Model

In CSS ogni elemento HTML viene rappresentato come un rettangolo chiamato “box”, costituito da 4 aree principali:

  1. Content (contenuto) – dove si trova testo, immagine o contenuto dell’elemento.

  2. Padding (riempimento interno) – spazio tra contenuto e bordo.

  3. Border (bordo) – contorno dell’elemento.

  4. Margin (margine esterno) – spazio tra l’elemento e gli altri elementi.

Schema Box Model

+-------------------------+
|        Margin           |
|  +-------------------+  |
|  |      Border       |  |
|  |  +-------------+  |  |
|  |  |  Padding    |  |  |
|  |  | +---------+ |  |  |
|  |  | | Content | |  |  |
|  |  | +---------+ |  |  |
|  |  +-------------+  |  |
|  +-------------------+  |
+-------------------------+

Proprietà principali

  • margin: distanza dall’esterno del box

    margin: 20px; /* tutte le direzioni */
    margin-top: 10px;
    margin-left: auto; margin-right: auto; /* centratura orizzontale */
    
  • padding: distanza tra contenuto e bordo

    padding: 15px;
    padding-left: 10px;
    
  • border: spessore, stile e colore del bordo

    border: 2px solid black;
    border-radius: 8px; /* bordi arrotondati */
    
  • width e height: dimensioni del contenuto (il padding e il bordo si aggiungono fuori)

    width: 300px;
    height: 200px;
    max-width: 100%; /* responsive */
    

2. Differenza tra display: inline, block, inline-block

Tipo Comportamento principale
block Occupa tutta la larghezza disponibile, va a capo. Esempi: <div>, <p>
inline Occupa solo lo spazio del contenuto, non va a capo. Esempi: <span>, <a>
inline-block Combinazione: come inline ma permette width, height, padding e margin.

Esempio pratico

span {
  display: inline-block;
  width: 100px;
  height: 50px;
  background-color: lightblue;
}

3. Gestione dimensioni

3.1 width e height

  • Definiscono dimensione del contenuto del box.

div {
  width: 300px;
  height: 150px;
}

3.2 max-width e min-width

  • Rendono i box responsive evitando che diventino troppo grandi o piccoli.

div {
  max-width: 90%;  /* non supera il 90% della larghezza del contenitore */
  min-width: 200px; /* non scende sotto i 200px */
}

3.3 box-sizing

  • Determina se il padding e il bordo rientrano nelle dimensioni dichiarate:

/* default: width e height misurano solo il contenuto */
box-sizing: content-box;

/* include padding e border nella larghezza totale */
box-sizing: border-box;

4. Esercizio svolto: costruire una card con titolo, testo e immagine

Obiettivo

Creare una card visivamente elegante con titolo, testo descrittivo e immagine, usando box model e spaziature.

HTML

<!DOCTYPE html>
<html lang="it">
<head>
  <meta charset="UTF-8">
  <title>Card CSS</title>
  <link rel="stylesheet" href="stile.css">
</head>
<body>
  <div class="card">
    <img src="https://via.placeholder.com/300x150" alt="Immagine" class="card-img">
    <h2 class="card-title">Titolo della Card</h2>
    <p class="card-text">Questa è una descrizione della card. Mostra come usare margini, padding e bordi.</p>
  </div>
</body>
</html>

CSS (stile.css)

/* Stile generale */
body {
  font-family: Arial, sans-serif;
  display: flex;
  justify-content: center;
  padding: 50px;
  background-color: #f2f2f2;
}

/* Box Card */
.card {
  width: 320px;
  padding: 20px;
  margin: 20px;
  background-color: #ffffff;
  border: 2px solid #ccc;
  border-radius: 10px;
  box-shadow: 2px 2px 10px rgba(0,0,0,0.1);
  box-sizing: border-box; /* include padding e border nella width */
}

/* Immagine */
.card-img {
  width: 100%;
  height: auto;
  border-radius: 8px;
  margin-bottom: 15px;
}

/* Titolo */
.card-title {
  font-size: 24px;
  margin: 0 0 10px 0;
  color: #333;
}

/* Testo */
.card-text {
  font-size: 16px;
  line-height: 1.5;
  color: #666;
}

Risultato

  • Card centrata, con padding interno.

  • Immagine con bordi arrotondati.

  • Titolo e testo con spaziature corrette grazie a margin e line-height.

  • Uso del box-shadow per effetto elegante.


sabato 15 febbraio 2025

Corso di CSS & Web Design: 2 – Colori, font e testo

2 – Colori, font e testo

1. Gestione dei colori in CSS

In CSS possiamo definire i colori in diversi formati:

1.1 RGB

Rappresenta il colore tramite rosso, verde e blu (Red, Green, Blue) con valori da 0 a 255:

p {
  color: rgb(255, 0, 0); /* rosso */
}

1.2 HEX

Codice esadecimale, formato #RRGGBB:

p {
  color: #00ff00; /* verde */
}

1.3 HSL

Hue-Saturation-Lightness (tonalità, saturazione, luminosità):

p {
  color: hsl(240, 100%, 50%); /* blu puro */
}

1.4 Trasparenze (RGBA / HSLA)

Aggiunge un canale alpha (0 = trasparente, 1 = opaco):

p {
  color: rgba(255, 0, 0, 0.5); /* rosso semi-trasparente */
}

2. Proprietà tipografiche

2.1 font-family

Definisce il tipo di carattere:

p {
  font-family: Arial, sans-serif;
}
  • Consiglio: sempre prevedere un “fallback” (sans-serif, serif, monospace).

2.2 font-size

Dimensione del testo. Valori comuni:

p {
  font-size: 16px;   /* pixel */
  font-size: 1.2em;  /* em relativi al font del genitore */
  font-size: 120%;   /* percentuale relativa al genitore */
}

2.3 line-height

Altezza della riga, utile per leggibilità:

p {
  line-height: 1.5; /* 1.5 volte l'altezza del font */
}

2.4 font-weight

Spessore del carattere:

p {
  font-weight: bold; /* normal, bold, 100-900 */
}

2.5 font-style

Stile del testo:

p {
  font-style: italic; /* normal, italic, oblique */
}

3. Allineamento e decorazioni del testo

3.1 text-align

Allinea il testo orizzontalmente:

p {
  text-align: left;   /* left, right, center, justify */
}

3.2 text-decoration

Decorazioni del testo:

p {
  text-decoration: underline; /* none, underline, line-through, overline */
}

3.3 text-transform

Trasformazioni di maiuscole/minuscole:

p {
  text-transform: uppercase; /* lowercase, capitalize */
}

4. Uso di Google Fonts

Per importare font personalizzati:

  1. Andare su Google Fonts, scegliere un font.

  2. Copiare il link nel <head> dell’HTML:

<link href="https://fonts.googleapis.com/css2?family=Roboto:wght@400;700&display=swap" rel="stylesheet">
  1. Usare il font nel CSS:

body {
  font-family: 'Roboto', sans-serif;
}

5. Esercizio svolto: creare una landing page con tipografia personalizzata

Obiettivo

Creare una pagina con titolo e paragrafi usando colori, font e allineamenti personalizzati.

HTML

<!DOCTYPE html>
<html lang="it">
<head>
  <meta charset="UTF-8">
  <title>Landing Page CSS</title>
  <link href="https://fonts.googleapis.com/css2?family=Roboto:wght@400;700&display=swap" rel="stylesheet">
  <link rel="stylesheet" href="stile.css">
</head>
<body>
  <h1 id="titolo">Benvenuti nella Landing Page!</h1>
  <p class="sottotitolo">Scopri i nostri servizi e soluzioni innovative.</p>
  <p class="contenuto">Questa sezione contiene testo descrittivo della landing page, personalizzato con font e colori.</p>
</body>
</html>

CSS (stile.css)

/* Titolo principale */
#titolo {
  font-family: 'Roboto', sans-serif;
  font-weight: 700;
  font-size: 36px;
  color: hsl(210, 100%, 40%);
  text-align: center;
  margin-bottom: 20px;
}

/* Sottotitolo */
.sottotitolo {
  font-family: 'Roboto', sans-serif;
  font-weight: 400;
  font-size: 20px;
  color: rgb(50, 50, 50);
  text-align: center;
  text-transform: uppercase;
}

/* Contenuto */
.contenuto {
  font-family: 'Roboto', sans-serif;
  font-size: 16px;
  line-height: 1.6;
  color: #333333;
  text-align: justify;
  background-color: rgba(173, 216, 230, 0.2); /* azzurro leggermente trasparente */
  padding: 15px;
  border-radius: 8px;
}

Risultato

  • Titolo grande, blu scuro, centrato.

  • Sottotitolo maiuscolo, centrato e leggero.

  • Paragrafo giustificato, colore neutro, sfondo azzurro trasparente con padding.

  • Tutti i testi utilizzano il font Roboto importato da Google Fonts.


venerdì 14 febbraio 2025

Corso di CSS & Web Design: 1 – Introduzione a CSS

1 – Introduzione a CSS


1. Cos’è il CSS e come si collega all’HTML

CSS (Cascading Style Sheets) è il linguaggio utilizzato per definire lo stile e la presentazione di una pagina web. Grazie al CSS possiamo separare contenuto (HTML) e stile (CSS), rendendo il codice più leggibile e modulare.

Funzioni principali del CSS

  • Definire colori, font, dimensioni, margini, padding e layout.

  • Gestire il posizionamento degli elementi sulla pagina.

  • Creare effetti visivi e interattivi (hover, animazioni, transizioni).

Collegamento tra CSS e HTML

Il CSS può essere applicato in tre modi:

  1. Inline CSS – direttamente nell’elemento HTML:

<p style="color: blue; font-size: 16px;">Testo blu</p>
  • Pro: semplice e veloce.

  • Contro: difficile da mantenere su siti complessi.

  1. Internal CSS – all’interno della pagina HTML, nel tag <style>:

<head>
  <style>
    p {
      color: green;
      font-size: 18px;
    }
  </style>
</head>
<body>
  <p>Testo verde</p>
</body>
  • Buono per pagine singole o esperimenti.

  1. External CSS – file separato .css collegato tramite <link>:

<head>
  <link rel="stylesheet" href="stile.css">
</head>
/* stile.css */
p {
  color: red;
  font-size: 20px;
}
  • Pro: stile centralizzato per più pagine.

  • Consigliato in produzione.


2. Sintassi di base: selettori, proprietà, valori

Il CSS ha una sintassi molto semplice:

Selettore{proprietaˋ:valore;}\text{Selettore} \{ \text{proprietà}: \text{valore}; \}

Componenti principali

  1. Selettore – indica l’elemento HTML da stilizzare:

    • Elemento: p { } → tutti i paragrafi.

    • Classe: .classe { } → tutti gli elementi con class="classe".

    • ID: #id { } → elemento con id="id".

    • Universale: * { } → tutti gli elementi.

  2. Proprietà – ciò che vogliamo modificare:

    • color → colore del testo

    • background-color → colore di sfondo

    • font-size → dimensione del testo

    • margin → margini esterni

    • padding → spaziatura interna

  3. Valore – specifica della proprietà:

    • Colori: red, #ff0000, rgb(255,0,0)

    • Dimensioni: 16px, 1.2em, 100%

    • Allineamento: center, left, right

Esempio di blocco CSS

h1 {
  color: darkblue;
  font-size: 32px;
  text-align: center;
}

3. Esempi pratici di selettori

Selettore di elemento

p {
  color: green;
  font-family: Arial, sans-serif;
}

Selettore di classe

.highlight {
  background-color: yellow;
  font-weight: bold;
}

HTML:

<p class="highlight">Questo testo è evidenziato</p>

Selettore ID

#titolo-principale {
  font-size: 40px;
  color: darkred;
}

HTML:

<h1 id="titolo-principale">Benvenuti!</h1>

4. Esercizio svolto: applicare i primi stili a una pagina

Obiettivo

Creare una pagina HTML semplice con paragrafi e un titolo, applicando colori, font e allineamento.

HTML

<!DOCTYPE html>
<html lang="it">
<head>
  <meta charset="UTF-8">
  <title>Prima pagina CSS</title>
  <link rel="stylesheet" href="stile.css">
</head>
<body>
  <h1 id="titolo-principale">Benvenuti nella mia pagina!</h1>
  <p class="intro">Questo è il primo paragrafo con stile CSS.</p>
  <p class="intro">E questo è il secondo paragrafo, colorato e centrato.</p>
</body>
</html>

CSS (stile.css)

/* Stile per il titolo */
#titolo-principale {
  color: darkblue;
  text-align: center;
  font-family: 'Verdana', sans-serif;
}

/* Stile per i paragrafi introduttivi */
.intro {
  color: darkgreen;
  font-size: 18px;
  text-align: center;
  background-color: #f0f0f0;
  padding: 10px;
  border-radius: 5px;
}

Risultato

  • Titolo centrato e blu.

  • Paragrafi centrati, verdi su sfondo grigio chiaro con padding.

  • Stile applicato tramite CSS esterno.


5. Suggerimenti pratici

  • Usare external CSS per progetti più grandi.

  • Dare nomi chiari a classi e ID (.menu, #footer).

  • Ricordare la cascata: se un elemento ha più regole, prevale quella più specifica.


martedì 11 febbraio 2025

Corso di HTML: 11 l sito sviluppato interamente

Home Page di Marco Rossi – Scrittore

Benvenuto nel corso pratico per creare il sito di uno scrittore. In questa pagina imparerai come strutturare la Home Page, quali sezioni includere e come fornire agli studenti il codice pronto da copiare.


Struttura della Home Page

La Home Page deve contenere:

  1. Header con titolo e menu di navigazione

    • Il titolo del sito deve essere ben visibile.

    • Il menu deve contenere link a tutte le sezioni principali: Home, Contatti, Galleria, Blog.

  2. Sezione introduttiva

    • Breve presentazione dello scrittore.

    • Invito a esplorare le opere o altre sezioni.

  3. Sezione Blog / Notizie

    • Mostrare gli ultimi articoli o aggiornamenti.

    • Include un titolo, un breve testo introduttivo e un link “Leggi di più”.

  4. Footer

    • Informazioni di contatto.

    • Copyright.


Scelte progettuali

  • CSS interno semplice: permette di stilizzare il sito senza dover creare file esterni.

  • Colori sobri e leggibili: sfondo chiaro, testo scuro, header e footer contrastanti.

  • Bottoni chiari per le call-to-action: inviti a visitare galleria o leggere articoli.

  • Sezioni distinte: maggiore chiarezza visiva e facilità di lettura.


Codice da copiare sull’editor

Gli studenti possono copiare questo codice direttamente nella modalità HTML di Blogger oppure sul proprio editor. È già pronto per essere visualizzato come pagina web funzionante.

<!-- Header -->
<header>
  <h1>Marco Rossi - Scrittore</h1>
  <nav>
    <a href="/p/home.html">Home</a>
    <a href="/p/contatti.html">Contatti</a>
    <a href="/p/galleria.html">Galleria</a>
    <a href="/p/blog.html">Blog</a>
  </nav>
</header>

<!-- Sezione introduttiva -->
<section>
  <h2>Benvenuti nel sito ufficiale</h2>
  <p>Mi chiamo <strong>Marco Rossi</strong> e qui puoi scoprire le mie opere, leggere articoli e contattarmi.</p>
  <a href="/p/galleria.html" class="btn">Scopri i miei libri</a>
</section>

<!-- Sezione Blog / Notizie -->
<section>
  <h2>Ultimi Articoli</h2>
  <article>
    <h3>Titolo articolo 1</h3>
    <p>Breve introduzione all'articolo. Puoi aggiungere contenuti, immagini e link.</p>
    <a href="/p/blog.html" class="btn">Leggi di più</a>
  </article>
  <article>
    <h3>Titolo articolo 2</h3>
    <p>Breve introduzione all'articolo. Testo di esempio per mostrare la struttura.</p>
    <a href="/p/blog.html" class="btn">Leggi di più</a>
  </article>
</section>

<!-- Footer -->
<footer>
  <p>Contatti: marco.rossi@email.com | Tel: 123-4567890</p>
  <p>&copy; 2025 Marco Rossi. Tutti i diritti riservati.</p>
</footer>

Note per lo studente

  • Il codice HTML va incollato come testo HTML nella pagina di Blogger.

  • Gli stili CSS possono essere inseriti internamente all’interno di <style> oppure aggiunti tramite CSS esterno.

  • I link devono essere aggiornati se si cambiano i nomi delle pagine.

  • Questo approccio permette di vedere subito il risultato, capire la struttura e modificare i testi senza problemi.


Pagina Contatti di Marco Rossi – Scrittore

La pagina Contatti consente ai visitatori di mettersi in comunicazione con lo scrittore. È fondamentale per un sito professionale e deve essere chiara e semplice da usare.


Struttura della Pagina Contatti

  1. Header e navigazione coerenti con la Home Page

    • Manteniamo il logo/titolo e il menu per garantire continuità.

  2. Modulo di contatto

    • Include campi per: Nome, Email, Oggetto e Messaggio.

    • Pulsante di invio con chiara call-to-action.

  3. Sezione informazioni aggiuntive

    • Email diretta e numero di telefono.

    • Eventuali link ai social o altre modalità di contatto.

  4. Footer

    • Stesso stile della Home Page per uniformità.


Scelte progettuali

  • Modulo semplice HTML: compatibile con Blogger e facilmente personalizzabile.

  • Label visibili e campi chiari: per garantire accessibilità.

  • Pulsante di invio chiaro: invita l’utente a completare il modulo.

  • Sezione di informazioni alternative: utile per chi non usa il modulo o vuole contatti immediati.


Codice da copiare sull’editor di Blogger

<!-- Header -->
<header>
  <h1>Marco Rossi - Scrittore</h1>
  <nav>
    <a href="/p/home.html">Home</a>
    <a href="/p/contatti.html">Contatti</a>
    <a href="/p/galleria.html">Galleria</a>
    <a href="/p/blog.html">Blog</a>
  </nav>
</header>

<!-- Sezione Contatti -->
<section>
  <h2>Contattami</h2>
  <p>Compila il modulo sottostante per inviare un messaggio direttamente a me:</p>
  
  <form action="mailto:marco.rossi@email.com" method="post" enctype="text/plain">
    <label for="nome">Nome:</label><br>
    <input type="text" id="nome" name="nome" placeholder="Inserisci il tuo nome" required><br><br>
    
    <label for="email">Email:</label><br>
    <input type="email" id="email" name="email" placeholder="Inserisci la tua email" required><br><br>
    
    <label for="oggetto">Oggetto:</label><br>
    <input type="text" id="oggetto" name="oggetto" placeholder="Oggetto del messaggio"><br><br>
    
    <label for="messaggio">Messaggio:</label><br>
    <textarea id="messaggio" name="messaggio" rows="6" placeholder="Scrivi qui il tuo messaggio" required></textarea><br><br>
    
    <input type="submit" value="Invia messaggio">
    <input type="reset" value="Cancella">
  </form>
  
  <h3>Oppure contattami direttamente:</h3>
  <p>Email: marco.rossi@email.com</p>
  <p>Telefono: 123-4567890</p>
</section>

<!-- Footer -->
<footer>
  <p>&copy; 2025 Marco Rossi. Tutti i diritti riservati.</p>
</footer>

Note per lo studente

  • Il form usa mailto: per inviare il messaggio via email direttamente.

  • Se si desidera un modulo più avanzato (con invio automatico senza client di posta), si può integrare un servizio esterno come Formspree o Google Forms.

  • Tutti gli stili (colori, font, margini) possono essere personalizzati aggiungendo <style> nella pagina o un CSS esterno.

  • I link del menu devono essere aggiornati se si cambiano i nomi delle pagine.


Pagina Galleria Immagini di Marco Rossi – Scrittore

La Galleria serve a mostrare fotografie, copertine dei libri, eventi o momenti significativi legati alla carriera dello scrittore. Deve essere chiara, ben organizzata e facilmente navigabile.


Struttura della Pagina Galleria

  1. Header e navigazione coerenti con la Home e la Pagina Contatti

    • Logo/titolo e menu per continuità.

  2. Sezione Galleria

    • Griglia di immagini con titoli o descrizioni brevi.

    • Possibilità di ingrandire le immagini cliccandoci sopra (funzionalità opzionale con lightbox).

  3. Footer

    • Stesso stile delle altre pagine per uniformità.


Scelte progettuali

  • Griglia semplice con <div> o <figure>: compatibile con Blogger.

  • Didascalie chiare sotto le immagini: per contestualizzare ogni foto.

  • Layout flessibile: permette di aggiungere altre immagini senza modificare la struttura principale.

  • Accessibilità: testo alternativo (alt) per ogni immagine.


Codice da copiare sull’editor

<!-- Header -->
<header>
  <h1>Marco Rossi - Scrittore</h1>
  <nav>
    <a href="/p/home.html">Home</a>
    <a href="/p/contatti.html">Contatti</a>
    <a href="/p/galleria.html">Galleria</a>
    <a href="/p/blog.html">Blog</a>
  </nav>
</header>

<!-- Sezione Galleria -->
<section>
  <h2>Galleria Immagini</h2>
  <p>Scopri momenti e opere della mia carriera:</p>
  
  <div class="galleria">
    <figure>
      <img src="https://via.placeholder.com/200x200.png?text=Copertina+Libro+1" alt="Copertina del libro 1">
      <figcaption>Copertina del libro: Il primo romanzo</figcaption>
    </figure>
    
    <figure>
      <img src="https://via.placeholder.com/200x200.png?text=Evento+Letterario" alt="Evento letterario">
      <figcaption>Evento letterario 2024</figcaption>
    </figure>
    
    <figure>
      <img src="https://via.placeholder.com/200x200.png?text=Copertina+Libro+2" alt="Copertina del libro 2">
      <figcaption>Copertina del libro: Il secondo romanzo</figcaption>
    </figure>
    
    <figure>
      <img src="https://via.placeholder.com/200x200.png?text=Foto+Autore" alt="Foto autore">
      <figcaption>Io durante la presentazione del libro</figcaption>
    </figure>
  </div>
</section>

<!-- Footer -->
<footer>
  <p>&copy; 2025 Marco Rossi. Tutti i diritti riservati.</p>
</footer>

Note per lo studente

  • Le immagini sono inserite con link placeholder (via.placeholder.com) che vanno sostituiti con le immagini reali dello scrittore.

  • Ogni <figure> contiene <img> e <figcaption> per didascalia; ciò migliora accessibilità e SEO.

  • La classe galleria può essere stilizzata con CSS esterno o interno per creare layout a griglia o responsive.

  • Il menu e il footer devono rimanere coerenti con le altre pagine.


Pagina Blog/Portfolio di Marco Rossi – Scrittore

La sezione Blog o Portfolio serve a condividere articoli, riflessioni, recensioni e aggiornamenti sulle attività dell’autore. Deve essere chiara, leggibile e facilmente navigabile.


Struttura della Pagina Blog/Portfolio

  1. Header e navigazione coerenti con le altre pagine

    • Logo/titolo e menu per continuità.

  2. Sezione articoli/portfolio

    • Ogni articolo o progetto è presentato in un blocco (<article>) con titolo, data, immagine e testo introduttivo.

    • Possibilità di link “Leggi tutto” per articoli completi (può aprire una nuova pagina o una sezione interna).

  3. Sidebar opzionale

    • Per link rapidi, categorie o social media.

  4. Footer

    • Stesso stile delle altre pagine per uniformità.


Scelte progettuali

  • Uso di <article> per ogni post: migliora semantica e SEO.

  • Immagini e didascalie: rendono la pagina più visiva e attrattiva.

  • Testo introduttivo: permette al lettore di capire rapidamente il contenuto.

  • Layout flessibile: permette di aggiungere nuovi articoli senza modificare la struttura principale.


Codice da copiare sull’editor

<!-- Header -->
<header>
  <h1>Marco Rossi - Scrittore</h1>
  <nav>
    <a href="/p/home.html">Home</a>
    <a href="/p/contatti.html">Contatti</a>
    <a href="/p/galleria.html">Galleria</a>
    <a href="/p/blog.html">Blog</a>
  </nav>
</header>

<!-- Sezione Blog/Portfolio -->
<section>
  <h2>Blog e Portfolio</h2>
  <p>Scopri gli articoli, le riflessioni e i progetti più recenti:</p>

  <!-- Primo articolo -->
  <article>
    <h3>Il mio primo romanzo</h3>
    <p><em>Data: 10 gennaio 2025</em></p>
    <img src="https://via.placeholder.com/300x150.png?text=Copertina+Romanzo" alt="Copertina del primo romanzo">
    <p>In questo articolo racconto la genesi del mio primo romanzo, le sfide affrontate e le emozioni vissute durante la scrittura...</p>
    <a href="/p/articolo1.html">Leggi tutto</a>
  </article>

  <!-- Secondo articolo -->
  <article>
    <h3>Recensione del Festival Letterario</h3>
    <p><em>Data: 5 febbraio 2025</em></p>
    <img src="https://via.placeholder.com/300x150.png?text=Festival+Letterario" alt="Foto del festival letterario">
    <p>Racconto la mia esperienza al Festival Letterario 2025, tra incontri con lettori, autori e momenti indimenticabili...</p>
    <a href="/p/articolo2.html">Leggi tutto</a>
  </article>

  <!-- Terzo articolo -->
  <article>
    <h3>Nuovo progetto in corso</h3>
    <p><em>Data: 20 marzo 2025</em></p>
    <img src="https://via.placeholder.com/300x150.png?text=Progetto+Scrittura" alt="Immagine progetto in corso">
    <p>Presento il mio nuovo progetto letterario, i temi che affronterò e le modalità di coinvolgimento dei lettori...</p>
    <a href="/p/articolo3.html">Leggi tutto</a>
  </article>
</section>

<!-- Footer -->
<footer>
  <p>&copy; 2025 Marco Rossi. Tutti i diritti riservati.</p>
</footer>

Note per lo studente

  • Le immagini sono placeholder (via.placeholder.com) da sostituire con immagini reali del portfolio o degli articoli.

  • Ogni <article> contiene titolo, data, immagine, testo introduttivo e link per leggere tutto: struttura ottimale per un blog semplice e funzionale.

  • È possibile aggiungere altri <article> senza modificare il layout generale.

  • Coerenza con header e footer garantisce una navigazione uniforme su tutte le pagine.


Footer del Sito dello Scrittore

Il footer è la parte inferiore di ogni pagina del sito. Serve a fornire informazioni di contatto, copyright, link secondari e collegamenti ai social media. Deve essere chiaro, coerente con il resto del sito e facilmente aggiornabile.


Struttura del Footer

  1. Informazioni legali e copyright

    • Indicazione dell’anno e del nome dell’autore.

  2. Link di navigazione secondari

    • Collegamenti rapidi a Home, Contatti, Galleria, Blog.

  3. Social media (opzionale)

    • Link a profili Facebook, Twitter, Instagram, LinkedIn.

  4. Coerenza grafica

    • Stesso colore di sfondo, font e stile delle altre pagine per uniformità.


Scelte progettuali

  • Chiarezza: informazioni essenziali, leggibili e brevi.

  • Accessibilità: testo contrastante e leggibile.

  • Semplicità: non sovraccaricare con troppe informazioni, il footer deve completare la pagina senza distrarre.

  • Link interni ed esterni: consentono una navigazione rapida e condivisione del sito.


Codice Footer da copiare sull’editor

<!-- Footer -->
<footer style="background-color:#222; color:#fff; padding:20px; text-align:center; font-family:times;">
  <p>&copy; 2025 Marco Rossi. Tutti i diritti riservati.</p>
  
  <!-- Link di navigazione secondari -->
  <nav>
    <a href="/p/home.html" style="color:#fff; margin:0 10px;">Home</a>|
    <a href="/p/contatti.html" style="color:#fff; margin:0 10px;">Contatti</a>|
    <a href="/p/galleria.html" style="color:#fff; margin:0 10px;">Galleria</a>|
    <a href="/p/blog.html" style="color:#fff; margin:0 10px;">Blog</a>
  </nav>
  
  <!-- Social media -->
  <p>
    <a href="https://facebook.com/marcorossi" style="color:#fff; margin:0 5px;">Facebook</a>|
    <a href="https://twitter.com/marcorossi" style="color:#fff; margin:0 5px;">Twitter</a>|
    <a href="https://instagram.com/marcorossi" style="color:#fff; margin:0 5px;">Instagram</a>|
    <a href="https://linkedin.com/in/marcorossi" style="color:#fff; margin:0 5px;">LinkedIn</a>
  </p>
</footer>

Note per lo studente

  • I link interni (/p/home.html, /p/contatti.html ecc.) devono corrispondere ai nomi dei file delle pagine create su Blogger.

  • I link ai social sono di esempio e vanno sostituiti con quelli reali dell’autore.

  • Il colore di sfondo e il colore del testo possono essere modificati per adattarsi al design generale del sito.

  • L’uso del tag <nav> aiuta sia l’accessibilità che la SEO, indicando i link principali della pagina.


Corso Fondamenti di Informatica e Reti: 4 Architettura del computer

  ARCHITETTURA DEL COMPUTER come funziona davvero una macchina Capire un computer non significa solo saperlo accendere o aprire file: die...