Progettazione Multimediale

Chi sono

Filippo Matteo Riggio

CTO @ Kaleidoscope Srl

Full Stack Developer

Introduzione

HTML

HTML è un meta linguaggio per la creazione di pagine web.

Analizzeremo e studieremo gli elementi e gli attributi per la creazione di pagine strutturate.

CSS

CSS è un meta linguaggio per applicare stili alle nostre pagine web, migliorandone la presentazione per una migliore fruizione.

Cosa è HTML?

HTML è un acronimo per Hyper Text Markup Language, cioè un linguaggio di markup per gli ipertesti.

NON è un linguaggio di programmazione, bensì un meta-linguaggio dichiarativo per la strutturazione di pagine.

Nasce nel 1994, da un’idea di Tim Berners-Lee, per scambiare informazioni all’interno della rete del CERN di Ginevra.

E’ rappresentato da un file di testo con estensione .html.

Unito con altre tecnologie quali CSS e JavaScript (abbreviato in JS), formano lo stack  base per la creazione di pagine, ogni componente con le sue peculiarità.

 

Cosa è HTML?

Con l’HTML si definiscono i componenti che vogliamo in pagina (paragrafi, liste, immagini, ecc.).

Con CSS possiamo andare a definire lo stile di questi elementi (colori, sfondo, tipo di font, ecc.)

Con JS possiamo interagire con i vari elementi della pagina HTML, andando a gestire interazioni, animazioni e molto altro.

HTML è uno standard (l’ultima versione è la 5) e viene gestito dal W3C (World Wide Web Consortium).

La vera rivoluzione che ha portato HTML nel mondo dell’informazione è la possiblità di linkare queste informazioni tra di esse, in modo da costrutire alberi aggregati di informazioni.

 

Come si accede al web

Le persone che accedono al web lo fanno attraverso un software, il browser.

Una volta digitato l'indirizzo nella barra degli indirizzi, Il browser richiede la pagina al relativo web server, che restituirà la pagina html, il browser interpreterà il linguaggio e ci fornirà il contenuto della pagina.

Gli utenti accedono alle nostre pagine attraverso svariati dispositivi (smartphone, tablet, pc, portatili, screen reader).

Sarà nostro compito creare siti web che forniscano i contenuti per ogni tipologia di dispositivo in modo che gli utenti possano usufruire delle informazioni in modo agevole.

Come funziona il web

Il web server che stiamo cercando di visitare potrebbe essere ovunque nel mondo. Il browser, preso l'indirizzo testuale  www.nomesito.it (il dominio), chiede a un server DNS (Domain Name System) tramite il nostro ISP (Internet Service Provider) la corrispondenza tra indirizzo testuale e indirizzo IP. Un gruppo di quattro cifre (ora portato a sei, a causa dell'esaurimento degli IP), ad es. 192.168.0.1.

Il browser ora conosce l'indirizzo IP e il dominio ed effettua una richiesta al web server, che restituirà la pagina web che stiamo richiedendo, che sarà un documento HTML.

La Struttura

La struttura

La struttura di una pagina di giornale è fatta in modo da dare un senso semantico ai contenuti che stiamo leggendo.

Dal più importante (il titolo), a quello meno importante le note e i piè di pagina.

Allo stesso modo funzionano le pagine web. Avremo varie intestazioni, elementi per il testo e altro ancora.

Descrivere la struttura di una pagina con HTML

Qui di seguito un primo esempio di pagina HTML.

<!doctype html>
<html lang="it">
    <head>
        <title>Title of page</title>
    </head>
    <body>
        <h1>This is the Main Heading</h1>
        <p>
           This text might be an introduction to the rest of
           the page. And if the page is a long one it might
           be split up into several sub-headings.
        </p>
        <h2>This is a Sub-Heading</h2>
        <p>
            Many long articles have sub-headings so to help
            you follow the structure of what is being written. 
            There may even be sub-sub-headings (or lower-level headings).
        </p>
        <h2>Another Sub-Heading</h2>
        <p>Here you can see another sub-heading.</p>
    </body>
</html>

Il codice HTML (rosso) è costituito da caratteri che devono trovarsi dentro parentesi angolari: questi vengono chiamati elementi. Gli elementi normalmente sono costituiti da due tag. Uno di apertura e uno di chiusura (quello di chiusura si nota per il carattere /). Ogni elemento fornisce al browser informazioni specifiche per il relativo contenuto.

Elementi strutturali

Elementi strutturali

<!doctype html>

E’ il tag che definisce che la nostra è una pagina HTML e che stiamo utilizzando la versione 5 del linguaggio.

<html lang=”it”>

La radice del nostro albero è il tag <html>; che racchiuderà gli elementi della nostra pagina.

Qui si può notare l’uso del primo attributo sul tag, l’attributo lang che definisce la lingua della nostra pagina html.

<head>

Questo tag è la nostra “testa” della pagina html, racchiude tutta una serie di informazioni utili al browser per il caricamento di file esterni (CSS/JS), il tag title per il titolo da mostrare nella finestra e per la SEO e tutta un’altra serie di informazioni utili, in genere opzionali. Il tag <head> non viene visualizzato a video.

<body>

Questo tag è il nostro “corpo”, conterrà tutto il contenuto che vogliamo rendere visibile a video.
Per visualizzre il codice della pagina HTML del browser possiamo utiizzare vari modi Ctrl+U, Opt+Mela+U, ecc.

Elementi e tag

I tag si divino in varie categorie:

  • Tag di layout (<header>, <footer>, <section>, ecc.)
  • Tag di testo (<h1>, <p>, <ul>, <ol>, <blockquote>, ecc.)
  • Tag multimediali (<img>, <video>, <audio>)

 

Alcuni specifici tag possono essere chiusi senza l’obbligo di scrivere la controparte prefissata dallo slash.

E’ il caso del tag <img>, che si scrive in questo modo <img /> o del tag per andare a capo riga <br />.

 

I moderni browser non necessitano neanche più dello slash prima del simbolo di maggiore finale.

Gli attributi

Gli attributi forniscono informazioni aggiuntive sul contenuto di un elemento. Compaiono all'interno del tag di apertura dell'elemento e sono costituiti da due parti: un nome e un valore, separati dal segno di "uguale".

<p lang="it-it">Paragrafo in italiano</p>

Gli attributi

Alcuni attributi, sono globali per tutti i tag, tra questi:
id=”identificativo_tag” : come dal nome, è un valore che deve essere univoco per identificare il tag all’interno della nostra pagina

 

class=”testo-grassetto” : è un attributo che permette di specificare un’insieme di regole CSS per tutti i tag che presentano lo stesso attributo di classe.

 

style=”color: red; background: blue;” : è un attributo che permette di specificare lo stile grafico del nostro tag html

 

Oltre agli attributi globali, esistono tutta una serie di attributi specifici per i singoli tag. Il tag <img>, ad esempio, vuole al suo interno l’attributo src, dove specificare il link all’immagine da visualizzare.

Gli attributi per la gestione degli eventi

Esitono un’altra serie di attributi, gli attributi per la gestione di eventi.

 

Gli attributi per la gestione di evento prevedono di agganciare una o più istruzioni, da eseguire all’avvenuta esecuzione dell’evento.

 

Ad esempio:

onclick=”alert(‘ciao’)” : stampa un messaggio di avviso con scritto “ciao”, una volta che l’utente ha premuto sul tag con l’attributo.

 

Altri eventi:

onscroll, onload, ondrag, ecc.

Testi

Tags ed elementi

Nella strutturazione dei testi in HTML, possiamo suddividere i tag in 2 categorie :

  • tag strutturali : elementi utilizzabili per descrivere titoli e paragrafi
  • tag semantici : elementi utilizzati per forire informazioni aggiuntive (citazioni, abbreviazioni, ecc.)

Titoli

In HTML sono previsti 6 "livelli" di titoli.

Dal più importante <h1> al meno importante <h6>

<h1>Titolo principale</h1>
<h2>Titolo di livello 2</h2>
<h3>Titolo di livello 3</h3>
<h4>Titolo di livello 4</h4>
<h5>Titolo di livello 5</h5>
<h6>Titolo di livello 6</h6>

Paragrafi

Un paragrafo consiste in una o più frasi che compongono un'unità di contenuto.

<p>
    Lorem ipsum dolor sit amet, consectetur adipiscing elit. 
    Proin rutrum varius commodo. 
    Sed nisl neque, pharetra vitae nibh vitae, posuere convallis risus.
</p>
<p>
    Fusce id malesuada purus. Mauris est justo, iaculis eget ligula id, 
    sagittis semper erat. 
    Vestibulum venenatis tortor sed lorem faucibus, vitae 
    tempus enim placerat. 
</p>

Grassetti e corsivi, strong ed enfasi.

Per modificare il testo e renderlo grassetto o corsivo, possiamo usare i tag <b> oppure <i>.
I tag <strong> e <em>, permettono sempre di rendere il testo grassetto e corsivo, ma danno un senso semantico alle parole racchiuse.

<p>
    Fusce id <b>malesuada</b> purus. <i>Mauris</i> est justo, iaculis eget ligula id, 
    sagittis semper erat. 
    Vestibulum <strong>venenatis</strong> tortor sed lorem <em>faucibus</em>, vitae 
    tempus enim placerat. 
</p>

Sottolineature e cancellature.

Per modificare il testo e renderlo sottolineato o cancellato possiamo utilizzare i tag <u> e <del>.

<p>
    Fusce id <u>malesuada</u> purus. <del>Mauris</del> est justo, iaculis eget ligula id, 
    sagittis semper erat. 
</p>

Spazi vuoti, a capo e separatori.

Per migliorare la leggibilità si possono utilizzare spazi vuoti, a capo o separatori.

Il browser, se incontra più spazi vuoti o più a capo, li tratta come semplici spazi vuoti.

Per mandare a capo il testo o inserire un separatore dobbiamo usare i tag <br /> o <hr />.

<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
<p>Lorem ipsum dolor       sit amet, consectetur adipiscing elit.</p>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing 

elit.</p>
<p>
    Fusce id malesuada purus. Mauris est justo,<br />iaculis eget ligula id, 
    sagittis semper erat.
</p>
<hr />
<p>Vestibulum venenatis tortor sed lorem faucibus, vitae tempus enim placerat.</p>

Citazioni

Le citazioni si possono effettuare con 2 tag, <q> per le citazioni brevi, <blockquote> per le citazioni lunghe. Con l'attributo cite si può specificare da dove è tratta la citazione.

<blockquote cite="https://en.wikipedia.org/wiki/Lorem_ipsum">
    <p>
        Lorem ipsum dolor sit amet, consectetur adipiscing elit.
        Fusce id malesuada purus. Mauris est justo, iaculis eget ligula id, 
        sagittis semper erat.
    </p>
</blockquote>
<q>Vestibulum venenatis tortor sed lorem faucibus, vitae tempus enim placerat.</q>

Le liste

Liste

Le liste si suddividono in 3 tipologie :

  • liste ordinate : ogni elemento ha la sua numerazione
  • liste non ordinate : ogni elemento inizia con un suo puntatore (un pallino di solito)
  • liste di definizioni : ogni elemento rappresenta una determinata definizione

Liste ordinate

<ol>
    <li>Voce 1</li>
    <li>Voce 2</li>
    <li>Voce 3</li>
    <li>Voce 4</li>
</ol>

Liste non ordinate

<ul>
    <li>Voce 1</li>
    <li>Voce 2</li>
    <li>Voce 3</li>
    <li>Voce 4</li>
</ul>

Liste di definizioni

<dl>
    <dt>Definizione 1</dt>
    <dd>Descrizion testuale definizione 1</dd>
    <dt>Definizione 2</dt>
    <dd>Descrizion testuale definizione 2</dd>
</dl>

Liste nidificate

<ul>
    <li>Voce 1</li>
    <li>Voce 2</li>
    <li>
        Sottovoci
        <ul>
            <li>Sottovoce 1</li>
            <li>Sottovoce 2</li>
            <li>Sottovoce 3</li>
        <ul>
    </li>
    <li>Voce 4</li>
</ul>

I link

Link

I link sono la vera potenza del web, perchè permettono di collegare pagine tra di loro.

 

Con i link possiamo collegarci ad altri siti, a pagine sullo stesso sito, ancore, link che aprono altre finestre o software della posta elettronica.

Come creare un link

I link hanno bisogno obbligatoriamente dell'attributo href e un valore.

<a href="http://www.imdb.com">IMDB</a>

I link si suddividono in 2 categorie:
- assoluti : che contengono anche il dominio a cui punta il link

- relativi : che puntano a pagine e contenuti sullo stesso dominio.

Altre proprietà dei link.

Per aprire un link all'interno di una nuova pagina, bisognerà specificare l'attributo target.

 

 

Per aprire il link con il software della posta elettronica:

 

 

Per aprire un link ad un punto preciso di una pagina:
 

<a href="..." target="_blank">Apri in una nuova finestra</a>
<a href="mailto:indirizzo@email.com">Invia Email</a>
<a href="nomepagina.html#ancora">Ancora</a>

<h1 id="ancora">Titolo</h1>

Tabelle

Le tabelle

Una tabella rappresenta le informazioni all'interno di una griglia.

Tra i vari usi, report finanziari, palinsesti tv, risultati sportivi, ecc.

Le tabelle sono strutturate da righe e colonne.

 

Le righe sono rappresentate dal tag <tr>.

Le colonne sono rappresentate dal tag <td>.

Struttura di base

<table>
    <tr>
        <td>15</td>
        <td>30</td>
        <td>28</td>
    </tr>
    <tr>
        <td>7</td>
        <td>10</td>
        <td>22</td>
    </tr>
</table>

Titoli delle tabelle

<table>
    <tr>
        <th></th>
        <th>Sabato</th>
        <th>Domenica</td>
    </tr>
    <tr>
        <th scope="row">Venduto:</td>
        <td>10</td>
        <td>22</td>
    </tr>
    <tr>
        <th scope="row">Venduto:</td>
        <td>17</td>
        <td>29</td>
    </tr>
</table>

Unire celle o righe.

<table>
    <tr>
        <td>15</td>
        <td>30</td>
        <td>28</td>
    </tr>
    <tr>
        <td cellspan="2">7</td>
        <td>22</td>
    </tr>
    <tr>
        <td rowspan="2">15</td>
        <td>30</td>
    </tr>
    <tr>
        <td>34</td>
    </tr>
</table>

Moduli

Perchè usare i moduli.

I moduli ci permettono di fare molte cose, fare ricerche (pensiamo a google), registrarsi a un sito, inviando dati a un server.

Possiamo compilare i dati in vari modi, attraverso campi di testo, aree di testo, radio, checkbox, tendine, ecc.

 

L'invio poi verrà effettuato attraverso il bottone di "submit".

Attributi di un campo input

Dobbiamo far sapere al server quali dati stiamo inviando. Per farlo usiamo l'attributo name e un valore.

<input type="text" name="username" />

Il server riceverà i dati strutturati in chiave=valore:

username="valore"

Struttura di un modulo

Per iniziare un modulo, dobbiamo usare il tag <form>. All'attributo dobbiamo associare un attributo action e un attributo method.

<form action="http://www.sito.it/ricevoidati.php" method="POST">

</form>

L'attributo action è l'indirizzo del server verso cui invieremo i dati.

L'attributo method, invece, identifica il modo in cui invieremo i dati al server. Possiamo scegliere tra GET e POST.
Con il metodo GET, i valori del form (sempre come chiave=valore), verranno appesi all'indirizzo della action.
Con il metodo POST, i valori del form vengono inviati con una chiamata HTTP dedicata di tipo POST.
La scelta tra un metodo o l'altro, è dettata da quanti dati dobbiamo inviare al server, se dobbiamo inviare file o se i dati sono riservati.

Input Testuali e Area di testo.

I campi input testuali possono essere di varie tipologie.

<input type="text" name="nome" maxlength="50" required><br><br>

<input type="password" name="password" maxlength="50" required><br><br>

<input type="email" name="email" maxlength="50" placeholder="Email"><br><br>

<input type="url" name="sito" maxlength="50" placeholder="Sito della tua azienda..."><br><br>

<input type="search" name="ricerca" placeholder="Ricerca..."><br><br>

<input type="date" name="data" min="1979-12-31" max="2000-01-02"><br><br>

<textarea name="commento"required></textarea>

Tendine, pulsanti di opzioni e caselle di selezione.

<select name="cars">
	<option value="volvo">Volvo</option>
	<option value="saab">Saab</option>
	<option value="fiat">Fiat</option>
	<option value="audi">Audi</option>
</select><br><br>

<input type="radio" name="gender" value="uomo" checked="checked"> Uomo<br>
<input type="radio" name="gender" value="donna"> Donna<br>
<input type="radio" name="gender" value="altro"> Altro
<br><br>

<input type="checkbox" name="veicolo_1" value="Bici" checked="checked"> Ho una bici<br>
<input type="checkbox" name="veicolo_2" value="Auto"> Ho un auto 

Input per file, pulsante di invio e input nascosti.

<form action="indirizzo_sito" method="POST" enctype="multipart/form-data">
	<input type="file" name="avatar"><br><br>
	<input type="submit" name="invio" value="Invia">
	<input type="hidden" name="dato_nascosto" value="1234">
</form>

Etichette per gli input e raggruppamento dei campi.

<fieldset>
    <legend>Dati contatto</legend>
    <label>
        Email:<br>
        <input type="email" name="email">
    </label>
    <br><br>
    <label>
        Telefono:<br>
        <input type="tel" name="mobile">
    </label>
</fieldset>

Immagini, video e audio

Immagini

Per rappresentare le immagini usiamo il tag <img>.
Useremo gli attributi src, width, height e alt per aggiungere informazioni alla nostra immagine.

<img src="http://lorempixel.com/300/200/sports/" 
     width="300" height="200" alt="Sport Image">

Width, Height e Alt

width

Con questo attributo possiamo specificare la larghezza della nostra immagine.

 

height

Con questo attributo possiamo specificare l'altezza della nostra immagine.

 

<alt>

Con questo attributo possiamo specificare il testo alternativo della nostra immagine.
Servirà agli screen reader per non-vedenti per identificare l'immagine. Molto utile per la SEO.

Formati per le immagini.

JPEG

Il formato più comune, con una buona compressione/qualità.

PNG

Si utilizza il formato PNG per la possibilità di utilizzare il canale alpha che gestisce la trasparenza di parti dell'immagine.

GIF

Il formato per avere immagini animate.

SVG

Formato che sta prendendo piede ormai negli ultimi anni. Gli Scalable Vector Graphics sono molto utili nella gestione delle immagini responsive e per la possibilità di animare parte delle immagini. Il formato SVG viene rappresentato in formato XML (quindi codice).

Il responsive: <picture>

Per la gestione della responsività relativamente ai vari schermi che usiamo, si deve utilizzare il tag <picture>, che ci permette di specificare varie risoluzioni in base alla dimensione dello schermo.

<picture>
    <source media="(min-width: 650px)" srcset="https://lorempixel.com/400/300/sports/">
    <source media="(min-width: 465px)" srcset="https://lorempixel.com/300/200/sports/">
    <img src="https://lorempixel.com/400/300/sports/" alt="Sport" style="width:auto;">
</picture>

Video

Per rappresentare i video usiamo il tag <video>.
Useremo i tag source per specificare i vari formati del video.

<video width="320" height="240" controls autoplay loop poster="https://lorempixel.com/400/200/sports" preload="auto">
    <source src="https://www.w3schools.com/html/mov_bbb.mp4" type="video/mp4">
    <source src="https://www.w3schools.com/html/mov_bbb.ogg" type="video/ogg">
    Your browser does not support the video tag.
</video>

Attributi sul tag <video>.

controls

Con questo attributo possiamo specificare se mostrare o meno i controlli per il video.

autoplay

L'attributo è autoesplicativo, permette di far andare il video in autoplay.

loop

L'attributo è autoesplicativo, permette di far andare il video in loop infinito.

poster

L'attributo permette di dichiarare un immagine da caricare prima che il video parta.

preload="auto|metadata|none"

L'attributo permette di specificare come caricare il video durante il caricamento della pagina.

Audio

Per rappresentare l'audio usiamo il tag <audio>.
Useremo i tag source per specificare i vari formati dell'audio.

<audio controls autoplay loop>
    <source src="https://www.w3schools.com/html/horse.ogg" type="audio/ogg">
    <source src="https://www.w3schools.com/html/horse.mp3" type="audio/mpeg">
    Your browser does not support the audio tag.
</audio>

Attributi sul tag <audio>.

controls

Con questo attributo possiamo specificare se mostrare o meno i controlli per l'audio.

autoplay

L'attributo è autoesplicativo, permette di far andare l'audio in autoplay.

loop

L'attributo è autoesplicativo, permette di far andare l'audio in loop infinito.

preload="auto|metadata|none"

L'attributo permette di specificare come caricare l'audio durante il caricamento della pagina.

Tags strutturali

I blocchi

Possiamo raggruppare testi ed elementi in un tag generico: <div>.

<div class="primo_blocco">
    <h1>Primo Blocco</h1>
    <p>
        Fusce id malesuada purus. Mauris est justo, iaculis eget ligula id, 
        sagittis semper erat. 
        Vestibulum venenatis tortor sed lorem faucibus, vitae 
        tempus enim placerat. 
    </p>
    <img src="https://lorempixel.com/400/200/sports" alt="sports">
</div>

Gli span

Possiamo raggruppare testi ed elementi in linea con un tag generico: <span>.

<div class="secondo_blocco">
    <h1>Secondo Blocco</h1>
    <p>
        Fusce id malesuada purus. Mauris est justo, iaculis eget ligula id, 
        sagittis semper erat. <span class="bold">Vestibulum venenatis</span> 
        tortor sed lorem faucibus, vitae 
        tempus enim placerat. 
    </p>
</div>

iFrame

Con il tag <iframe> possiamo includere una pagina di un altro sito all'interno del nostro, specificando l'attributo src.

<iframe src="https://www.youtube.com/embed/2VARCYS8iGA"
        width="560" height="315" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen></iframe>

Header e footer

Con HTML5 sono stati introdotti i tag di layout in modo semantico. Tra questi <header> e <footer>.

<header>
    Questo è l'header.
</header>

<footer>
    Questo è il footer
</footer>

Navigazione

Un altro tag semantico è quello per il menù <nav>.

<header>
    <h1>Nome Sito</h1>
    <nav>
       <a href="/pagina-1">Pagina 1</a> | 
       <a href="/pagina-2">Pagina 2</a>
    </nav>
</header>

<br><br>

<footer>
    &copy; Azienda Sito.
</footer>

Articoli e sidebar

<article>
    <h1>Titolo Articolo</h1>
    <p>
        Testo articolo...
    </p>
</article>

<aside>
    <h3>Link Utili</h3>
    <nav>
        <a href="link-1">Link 1</a><br>
        <a href="link-2">Link 2</a><br>
        <a href="link-3">Link 3</a>
    </nav>
</aside>

Sezioni

Il tag <section> contiene contenuti correlati tra loro, generalmente rappresentato anche da un titolo.

<section class="contact-details">
	<h2>Contatti</h2>
	<p>
		Nome Azienda<br>
		Vai Cipalipa, 123<br>
		Verona 12345
	</p>
</section>

Altri tags

Doctype e commenti

Il tag <doctype> permette di specificare quale versione di HTML stiamo usando.
Per scrivere i commenti, invece, basterà racchiudere il testo tra i caratteri <!-- e -->

<!-- HTML 5 doctype -->
<!DOCTYPE html>

<!-- HTML 4 doctype -->
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<!-- HTML DA 1 A 3 doctype -->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<!-- XML doctype -->
<?xml version="1.0" ?>

Informazioni relative alle pagine

Talvolta vorremo aggiungere informazioni alle nostre pagine, per gli scraper o per qualsiasi altra applicazione che dovrà leggere il nostro sito.

Per farlo, basterà inserire i tag <meta> all'interno del nostro tag <head>.

<!-- HTML 5 doctype -->
<!DOCTYPE html>
<html>
<head>
    <meta name="description" content="Testo descrittivo..." />
    <meta name="keywords" content="chiave, chiave, chiave" />
    <meta name="robots" content="nofollow" />
</head>
<body>...</body>
</html>

Referenze e contatti

Libri

https://www.oreilly.com/library/view/html-css/9781118206911/

 

Guide online
https://www.html.it/guide/guida-html/

 

Email: filippo@kaleidoscope.it

Twitter: @fmriggio

IED - Progettazione Multimediale - Introduzione HTML - Lezione 1

By Filippo Matteo Riggio

IED - Progettazione Multimediale - Introduzione HTML - Lezione 1

  • 864