Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
DESIGN
PROGRAMMARE WEB DESIGN
PROGRAMMARE IN HTML
Capitolo 1
L’importanza del Web
Cosa ci serve
Come funziona un sito?
Capitolo 2 Di cosa si tratta?
HTML e la sua struttura
Capitolo 3 Il testo
Il tag adatto
Capitolo 3 I link
Realizzare pagine interattive
URL assoluti e relativi
Capitolo 4 Le liste
A cosa servono
Capitolo 5 Le immagini
Trucchi del mestiere
Il formato corretto
Capitolo 6 Le tabelle
Come, quando, perché
Tabelle con stile
Capitolo 7 I form
Raccogliere i dati
GET o POST?
Liste di informazioni
Date e file
Capitolo 8 HTML5
Evoluzione di un linguaggio
Conclusione
PROGRAMMARE IN CSS
Premessa
Capitolo 1 Un po’ di storia
Capitolo 2 Caratteristiche di CSS
Semplicità
Riusare i fogli di stile
Fogli a cascata
Dimensioni ridotte
Capitolo 3 Unire HTML e CSS
I selettori
Raggruppare più elementi
Capitolo 4 Classi e ID
Selettori di classe
Selettori di ID
Selettori di attributi
Capitolo 5 Struttura di una pagina
Selettori discendenti
Selettori di figli
Selettore di figli adiacenti
Capitolo 5 Pseudo-classi
Capitolo 6 Valori ed unità
I colori
Le lunghezze
Conclusioni
PROGRAMMARE IN JAVASCRIPT
Premessa
Capitolo 1
Cos’è JavaScript?
Capitolo 2
Tipi ed operatori
Numeri
Stringhe
Booleani e operatori logici
Conversione di tipo
Capitolo 3
Programmare in JS
Funzioni
Controllo dell’esecuzione
Capitolo 4
Oggetti e dintorni
Gli Oggetti
Gli Array
JSON
Capitolo 5
ll DOM
Layout
Stile
Capitolo 6
Eventi
Capitolo 7
Programmazione asincrona
Callbacks
Promise
Eccezioni
Capitolo 8
JS e Internet
GET /
HTTP / 1.1
Fetch
Conclusioni
PROGRAMMARE IN HTML
Capitolo 1
L’importanza del Web
Cosa ci serve
Avremmo potuto tuffarci direttamente nel codice HTML utile per creare siti Web
ma riteniamo non sarebbe stata la cosa migliore perché prima è importante porre
l’attenzione su come le persone accedono al Web e chiarire alcuni termini. Per
poter progettare un sito Web abbiamo bisogno sicuramente di:
Browser
Web server
Dispositivo
Screen reader in caso di disabilità
Probabilmente hai già sentito questi nomi, hanno un nome familiare quindi per
alcuni sai già di cosa si tratta mentre per altri non ne hai la minima idea. Ma
andiamo per ordine, partendo dal browser. Per poter accedere al sito web viene
utilizzato un software ovvero un programma del computer, del cellulare, del
tablet, detto browser web alcuni browser famosi sono Firefox, Safari, Chrome e
Edge ovvero l'evoluzione di Internet Explorer. Per poter visualizzare una pagina
web gli utenti si collegano a un indirizzo web nel loro browser anche detto URL
e da qui posso avere accesso ad una serie di funzionalità, che nel tempio si sono
evolute: ad esempio è possibile inserire dei segnalibri, inserire dei collegamenti
con un altro sito internet, Ma la parte più importante e sapere che ogni browser è
diverso perché basato su una tecnologia diversa e dovremmo tenere a mente
questo aspetto nel momento in cui sviluppiamo una pagina web. Non tutti gli
utenti, infatti, avranno l'ultima versione del browser, quindi la pagina dovrà
essere interamente fruibile da tutti i browser di tutte le versioni (o quasi).
Quando ti colleghi ad un sito, il tuo browser richiede una pagina Web, inviando
una richiesta tramite Internet per uno speciale server. Un server Web non è altro
che un computer che ospita uno o più siti Web. Il server è collegato ad Internet in
modo permanente ed è utilizzato per inviare le pagine Web a coloro che le
richiedono. Per la gestione di questi server ci sono delle grandi aziende che si
occupano di questi servizi dette società di web hosting, grazie alle quali puoi
comprare un dominio e inizia a sviluppare il tuo sito.
Gli screen reader sono molto utili a persone con disabilità, essi consentono di
leggere il contenuto dello schermo pertanto sono indicati per coloro che sono
ciechi, ipovedenti o con disabilità visive. Questo tipo di tecnologia, però, viene
utilizzata anche in casi in cui non è possibile guardare lo schermo del cellulare,
pensiamo alle auto che consentono di leggere i messaggi che riceviamo. In
questo e-book ti daremo dei suggerimenti per creare dei siti che possano essere
utilizzati anche dai disabili in modo da essere fruibili davvero da tutti,
indistintamente.
Come funziona un sito?
Quando consulti un sito Web il tuo browser riceve una serie di informazioni dal
server sottoforma di file, in particolare sono necessari file HTML e file CSS. Il
primo definisce la struttura del sito che possiamo immaginare sostanzialmente
come un giornale che, contiene delle sezioni più importanti con dei titoli in
evidenza e delle sezioni marginali e con titoli meno evidenti. In un sito Web ed
in particolare in un file HTML troviamo riferimenti ad immagini, audio e video
con cui possiamo interagire, a differenza di un giornale.
Il browser scarica questi file dal server e li interpreta per poterli fornire
all’utente, per completezza devi sapere che spesso oltre a questi file i siti inviano
anche dei file per gestire la logica all’interno di un sito, scritti in JavaScript.
Pensiamo a validazioni complesse come quella di un codice fiscale, gestire una
modale in modo dinamico, la sostituzione di un’immagine in modo dinamico dal
sito. Come puoi immaginare questi aspetti sono legati ad un livello più avanzato
di sviluppo ma per raggiungerlo bisogna avere delle buone basi, a partire dalla
struttura dell’HTML.
Probabilmente ti sarai chiesto cosa vuol dire HTML e CSS, HTML sta per
HyperText Markup Language. La parte HyperText si riferisce alla possibilità di
creare collegamenti che consentono ai visitatori di spostarsi da una pagina
all'altra in modo rapido e semplice. Un linguaggio di markup ti consente di
annotare il testo e tali annotazioni forniscono un ulteriore significato al
contenuto di un documento. Se pensi a una pagina Web, aggiungiamo delle
“linee guida” per il browser attorno al testo originale che vogliamo visualizzare.
Il browser utilizza quindi il codice per visualizzare correttamente la pagina
perciò i tag che aggiungiamo sono, a tutti gli effetti, il markup.
Di seguito vediamo una semplice pagina Web con alcuni titoli e sottotitoli:
<html>
<body>
<h1>Titolo principale</h1>
<p>Testo introduttivo<p>
<h2>Sottotitolo</h2>
<p>Articolo che potrebbe contenere riferimenti ad altre pagine,
immagini, video e altri elementi multimediali</p>
<h2>Un altro sottotitolo </h2>
<p>Testo conclusivo</p>
</body>
</html>
Il tag di apertura <html> indica che qualsiasi cosa tra esso e il tag
di chiusura </html> è un codice HTML;
Il tag <body> indica che qualsiasi cosa tra esso ed il tag di
chiusura </body> dovrebbe essere mostrato nella finestra
principale del browser;
Il tag <h1> indica l’inizio di un titolo principale mentre </h1> ne
indica la fine;
Un paragrafo di testo appare tra questi tag <p> e </p>;
Le parole tra <h2> e </h2> formano un sottotitolo.
Approfondiamo la struttura dei tag, ogni tag è formato dalle parentesi angolari <
e >, che racchiudono un carattere ovvero lo scopo del tag. Sino ad ora abbiamo
visto che i tag si dividono in tag di apertura e tag di chiusura, ma talvolta i tag
possono essere abbreviati come nell’esempio che segue:
<html>
<body>
<h1>Test dell'immagine</h1>
<img src="immagine.gif" alt="logo" width="42" height="42">
</body>
</html>
Come puoi notare in questo esempio non c'è nessun tag di chiusura per
l'elemento img infatti questo tag non prevede di contenere qualcosa quindi non è
un vero e proprio contenitore. In questo esempio per il tag <img>, abbiamo degli
elementi aggiuntivi, mi riferisco ha gli attributi width e height che definiscono
rispettivamente larghezza e altezza dell’immagine, in questo modo istruiremo il
browser su come mostrare l'immagine e con quali dimensioni. Questi elementi
aggiuntivi sono detti attributi e forniscono appunto informazioni aggiuntive
sull’elemento, gli attributi appaiono solo nel tag di apertura e solitamente sono
composti da nome e valore separati dal simbolo uguale. Di solito sia il nome che
il valore dell'attributo sono scritti in minuscolo, in questo caso tramite l’attributo
src siamo in grado di definire la sorgente dell’immagine. L'ultimo attributo che
possiamo vedere nel tag relativo all'immagine è alt, questo attributo specifica un
testo alternativo per un'immagine, se l'immagine non può essere visualizzata. Ci
sono diversi motivi per cui un’immagine potrebbe non essere visualizzata
correttamente, a causa di una connessione lenta ad esempio, a causa di un errore
nell’attributo src oppure nel caso in cui l'utente utilizzi uno screen reader. Come
puoi notare anche per una semplice immagine è fondamentale inserire tutti gli
attributi necessari affinché il sito sia fruibile in ugual modo da tutti gli utenti.
2. Creare il file con il nome che preferite e l’estensione .html
3. Aprire il file con un editor di testo come Blocco Note o altri (i
più usati sono Atom, Notepad++, Sublime Text…)
4. Inserire il codice della pagina e salvare il file
5. Aprire il file con un browser per vedere il risultato
5.
Il nostro file .html conterrà il seguente testo, che il browser sarà in grado di
interpretare:
<html>
<head>
<title>Titolo della pagina</title>
</head>
<body>
<h1>Titolo visibile nella pagina</h1>
<p>Un qualsiasi testo da mostrare</p>
</body>
</html>
All’interno del tag <head> troviamo il tag che definisce il titolo della pagina
ovvero il titolo che verrà mostrato nella parte superiore del browser cioè il nome
della scheda del browser. Prova a modificarlo dall’esempio qui in alto, salva il
file e ricarica la pagina per vedere come cambia il risultato.
Capitolo 3
Il testo
Il tag adatto
All’inizio di questo e-book abbiamo paragonato il sito Web ad un giornale, il
paragone non è forzato in quanto molti considerano il Web l’evoluzione del
giornale. Ogni giornale che si rispetti è composto da titoli che solitamente sono
un sunto dell’articolo; anche in HTML è stata data importanza ai titoli infatti
esistono 6 tipi di titoli diversi in ordine di importanza.
Una best practice afferma che in una pagina non dovrebbe mai essere presente
più di un tag <h1> e soprattutto bisogna prestare attenzione a non confondere il
titolo della pagina <title> con il titolo che mostriamo nella finestra del browser
all’interno del <body>.
Abbiamo detto che esistono 6 tipi di tag per i titoli infatti si parte da <h1> che è
il più importante fino ad arrivare ad <h6>, passando per <h2>, <h3>, <h4>,
<h5>. Usa le intestazioni quando è importante per la tua struttura, per la
navigazione e per facilitare la lettura del contenuto della pagina all’utente. Non è
necessario utilizzare tutti i tipi di intestazione su una pagina infatti, a seconda
della lunghezza e del tipo di contenuto, potresti avere solo tag <h1> e <h2>.
In un paragrafo è utile marcare una nuova parola o il suo significato per darne
risalto pertanto sono utili i tag <b> e <i>, usati rispettivamente per mostrare una
o più parole in grassetto o in corsivo. È possibile anche combinare i due tag per
ottenere entrambi gli effetti.
<html>
<head>
<title>Albert Einstein</title>
</head>
<body>
<h1>Il genio</h1>
<p>Considerato il più importante <b>fisico</b> del XX secolo, conosciuto
al grande pubblico anche per la formula dell'equivalenza<sub>1</sub>
massa-energia, E = mc<sup>2</sup>, riconosciuta come <b><i>l'equazione
più famosa al mondo</b></i></p>
<p>1. Una relazione di equivalenza è un concetto matematico che esprime
in termini formali quello intuitivo di "oggetti che condividono una certa
proprietà". </p>
</body>
</html>
Questa pagina verrà mostrata dal browser con due paragrafi distinti, contenuti in
un tag <body>.
È possibile inserire dei caratteri come apice con il tag <sup> e caratteri come
pedice con il tag <sub>, questi sono molto usati per semplici formule
matematiche, per rimandare a delle note a piè di pagina ecc.
Come hai già visto, il browser mostrerà automaticamente ogni nuovo paragrafo o
intestazione su una nuova riga ma se si desidera aggiungere un'interruzione di
riga all'interno di un paragrafo, è possibile utilizzare il tag di interruzione di riga
<br />. Per creare una pausa, un distacco come un cambio di argomento in un
libro o una nuova scena in un'opera teatrale - puoi aggiungere un elemento
orizzontale tra le sezioni usando il tag <hr />. Ci sono alcuni elementi che non
hanno parole tra l'apertura e la chiusura del tag pertanto sono detti elementi
vuoti.
Capitolo 3
I link
I collegamenti vengono creati utilizzando l'elemento <a>. Gli utenti possono fare
clic su qualsiasi elemento che si trovi tra il tag <a> di apertura e il tag di
chiusura </a>. È necessario specificare a quale pagina si desidera collegare
utilizzando l'attributo href. Il testo tra il tag di apertura e il tag di chiusura è
anche conosciuto come testo di collegamento e dovrebbe spiegare a quale pagina
verranno trasferiti i visitatori se fanno clic su di esso. Di solito si legge “fai clic
qui” per rimandare ad un’altra pagina del sito ma questo approccio non è del
tutto corretto. Il testo del link può aiutare i visitatori a trovare quello che
desiderano e se ciò che cercano è facile da individuare, avranno un'impressione
migliore del tuo sito incoraggiandoli a visitarlo più spesso e più a lungo. Per
scrivere un buon testo per un link è fondamentale mettersi nei panni dell’utente.
URL assoluti e relativi
<html>
<head>
<title>Albert Einstein</title>
</head>
<body>
<h1>Il genio</h1>
<p>Considerato il più importante <b>fisico</b> del XX secolo, conosciuto
al grande pubblico anche per la formula dell'equivalenza<sub>1</sub>
massa-energia, E = mc<sup>2</sup>, riconosciuta come <b><i>l'equazione
più famosa al mondo</b></i></p>
<p>1. Una relazione di equivalenza è un concetto matematico che esprime
in termini formali quello intuitivo di "oggetti che condividono una certa
proprietà".</p>
<p>Come si diventa un genio? Ecco la sua <a
href="https://it.wikipedia.org/wiki/Albert_Einstein#Biografia">biografia</a>
</p>
</body>
</html>
Abbiamo aggiunto un tag che rimanda alla pagina italiana di Wikipedia con la
biografia.
Quando si effettua un collegamento ad un altro sito Web, il valore dell’attributo
href sarà l'indirizzo web completo per il sito, noto come URL assoluto. I
browser mostrano i link in blu e con una sottolineatura ma non è sempre così,
infatti, grazie alle regole di stile del CSS è possibile modificarne l’aspetto.
URL è l’acronimo di Uniform Resource Locator. Ogni pagina web ha il suo URL
ed è l'indirizzo web che dovresti digitare in un browser se desideri visitare quella
pagina specifica. Un URL assoluto inizia con il nome di dominio per quel sito e
può essere seguito dal percorso di una pagina specifica. Il sito visualizzerà la
pagina iniziale anche detta homepage, qualora non sia stata specificata alcuna
pagina.
https://it.wikipedia.org/wiki/Albert_Einstein#Biografia
Come puoi notare l’URL termina con un cancelletto (#) e seguito da Biografia,
questo contribuisce a creare un frammento. I frammenti servono ad individuare
una porzione di contenuto all'interno di una pagina Web. Sono molto utilizzati
perché, come in questo caso, si punta ad una sezione mirata della pagina
evitando che l’utente si perda tra cose a cui non è interessato.
Quando vogliamo inserire dei link al nostro sito, piuttosto che ad un sito Web
esterno, creiamo degli URL relativi. In questo modo non è necessario
specificare l’intero percorso comprendendo il nome del dominio, basterà fare
riferimento al file che vogliamo puntare. Immaginiamo ad esempio di avere in
una cartella 3 pagine Web distinte: Homepage, Chi siamo e Contatti. In base a
quello che abbiamo imparato avremo 3 file diversi con estensione .html.
<html>
<head>
<title>Il mio sito</title>
</head>
<body>
<a href="homepage.html"><img
src="https://it.wikipedia.org/static/images/project-logos/itwiki.png"></a>
<p>Benvenuti nel nostro sito</p>
<hr>
<p>La nostra azienda si fonda sul saper innovare, su un consolidato know-
how nel campo e sulla voglia di trovare sempre la soluzione migliore.</p>
<hr>
<p>Abbiamo innovato molto e continuiamo a farlo, tenendo conto di <a
href="chi_siamo.html">Chi siamo</a> e delle nostre origini.</p>
<p>Se vuoi innovare la tua azienda o qualche processo, <a
href="contatti.html">contattaci</a> per un preventivo gratuito.</p>
</body>
</html>
In questo modo potrai navigare in tutte le pagine del sito con un semplice click, a
patto che i file si trovino tutti nella stessa cartella.
Sui siti Web più grandi è una buona idea organizzare il codice posizionando le
pagine per ogni diversa sezione del sito in una nuova cartella anche detta
directory. La cartella principale contiene tutti gli altri file e le altre cartelle del
sito Web. Ogni sezione del sito viene posizionata in una cartella separata; questo
aiuta l’organizzazione dei file. In questo modo è più facile creare delle relazioni
tra le pagine e anche delle relazioni con la homepage la quale, di solito, è
contenuta in un file chiamato index.html. Potresti aver già visto questo nome
nella barra dell’URL del browser per qualche sito Web.
Vediamo adesso come organizzare meglio il nostro piccolo sito in modo da avere
delle cartelle dedicate alle immagini e delle cartelle dedicate alle pagine.
Per prima cosa scegli un’immagine da usare nel sito che non sia troppo grande,
ad esempio un logo, inserendola nella cartella immagini.
Adesso modifichiamo il codice in modo che possa funzionare anche con questa
struttura:
<html>
<head>
<title>Il mio sito</title>
</head>
<body>
<a href="homepage.html"><img src="./immagini/logo.png" alt="logo">
</a>
<p>Benvenuti nel nostro sito</p>
<hr>
<p>La nostra azienda si fonda sul saper innovare, su un consolidato know-
how nel campo e sulla voglia di trovare sempre la soluzione migliore.</p>
<hr>
<p>Abbiamo innovato molto e continuiamo a farlo, tenendo conto di <a
href="./pagine/chi_siamo.html">Chi siamo</a> e delle nostre origini.</p>
<p>Se vuoi innovare la tua azienda o qualche processo, <a
href="./pagine/contatti.html">contattaci</a> per un preventivo gratuito.
</p>
</body>
</html>
Tipo di Esempio
relazione
Stessa <a href="home.html">home</a>
cartella
Cartella <a
figlia href="root/azienda.html">azienda</a>
Cartella <a
figlia di 2 href="root/it/azienda.html">azienda</a>
livelli
Cartella <a href="../index.html">Homepage</a>
padre
Cartella <a
padre di 2 href="../../index.html">Homepage</a>
livelli
Potresti voler aprire un link in una nuova finestra del browser, questo è possibile
grazie all’attributo target come segue:
Nel caso in cui si punti ad un altro sito Web, potrebbe essere utile questo
attributo.
In questi casi, si spera che l'utente ritorni alla finestra contenente il proprio sito
dopo aver concluso la navigazione sull'altro sito Web. In generale, dovresti
evitare di aprire i collegamenti in una nuova finestra, ma se lo fai, è considerata
buona pratica informare gli utenti prima ci clicchino sopra, in particolare dovrai
avvisarli che il collegamento aprirà una nuova finestra del browser.
Capitolo 4
Le liste
A cosa servono
Ci sono molte occasioni in cui poter usare le liste infatti HTML ci offre diversi
tipi:
● Gli elenchi ordinati sono elenchi in cui ogni elemento nell'elenco è numerato.
Ad esempio, l'elenco potrebbe essere una serie di passaggi per una ricetta che
deve essere eseguita in un certo ordine o un contratto legale in cui ciascun punto
deve essere identificato da un numero di sezione;
● Gli elenchi non ordinati sono elenchi che non hanno un ordine anche detti
elenchi puntati;
Quello che abbiamo appena creato è un elenco puntato quindi senza ordine
perché in questo caso non è fondamentale. Replichiamo lo stesso elenco in
HTML:
<html>
<head>
<title>Il mio sito</title>
</head>
<body>
<ul>
<li>Gli elenchi ordinati sono elenchi in cui ogni elemento nell'elenco è
numerato. Ad esempio, l'elenco potrebbe essere una serie di passaggi per
una ricetta che deve essere eseguita in ordine o un contratto legale in cui
ciascun punto deve essere identificato da un numero di sezione;</li>
<li>Gli elenchi non ordinati sono elenchi che non hanno un ordine, sono
anche detti elenchi puntati;</li>
<li>Gli elenchi di definizioni sono costituiti da un insieme di termini
insieme alle definizioni per ciascuno di tali termini.</li>
</ul>
</body>
</html>
Se invece stiamo creando un sito Web con delle ricette di cucina probabilmente
sarà più utile una lista ordinata perché è fondamentale seguire i passaggi della
ricetta seguendo un ordine. Come avrai intuito il tag da utilizzare sarà <ol> che è
l’abbreviazione di ordered list e potremo riusare il tag <li>, sarà cura del
browser indentare gli elementi della lista.
<html>
<head>
<title>Il mio sito</title>
</head>
<body>
<h1>Pizza Margherita</h1>
<ol>
<li>Realizzare l'impasto;</li>
<li>Lasciar lievitare;</li>
<li>Stendere l’impasto e condire con mozzarella e salsa di pomodoro;</li>
<li>Cuocere la pizza.</li>
</ol>
</body>
</html>
L’ultimo tipo di liste in HTML sono gli elenchi di definizioni e sono usati per
definire degli elementi per un unico termine. L’uso è simile a quello di un
vocabolario dove ad ogni termine corrisponde una lista di definizioni poiché un
termine può avere diversi significati a seconda del contesto.
Puoi anche usare i CSS per includere le immagini nelle tue pagine come sfondo
di una sezione o per inserire immagini come elementi a sé stanti.
Si dice che un'immagine valga più di mille parole infatti immagini ben fatte
aiutano a fare la differenza tra un sito dall'aspetto mediocre ed uno davvero
accattivante. Le immagini possono essere utilizzate per rendere più gradevole ed
interattivo un sito Web ma anche per fornire illustrazioni, più facili da
comprendere rispetto ad una descrizione. Se non hai fotografie da usare sul tuo
sito web, ci sono diversi portali che vendono immagini o che ti permettono di
usarle gratuitamente menzionando il nome dell’autore. Di seguito ti propongo un
breve elenco che puoi consultare:
https://it.freeimages.com/
https://pixabay.com/
https://www.pexels.com/
https://unsplash.com/
Ricorda che tutte le immagini sono soggette a copyright perciò ti invito a leggere
l’apposita sezione sui termini di utilizzo del sito scelto. Se hai una pagina che
mostra diverse immagini, un consiglio è quello di mostrarle su uno sfondo
semplice e coerente, in modo da sembrare un gruppo di immagini (vedi
l’esempio di Instagram):
Ricorda che le immagini devono rispettare alcune regole: devono essere rilevanti
cioè di interesse per l’utente, devono fornire informazioni, essere facili da
riconoscere ed infine dovrebbero rispecchiare, se possibile, i colori del sito.
Abbiamo già visto il tag per inserire le immagini in una pagina Web pertanto
limitiamoci ad un breve riepilogo degli attributi:
Il formato corretto
Per poter inserire un’immagine in modo corretto è fondamentale usare dei
formati supportati dalla maggior parte dei browser come jpeg, gif o png. Se
si sceglie un formato errato, l'immagine potrebbe non apparire nitida come
dovrebbe o potrebbe non essere caricata dal browser.
Vedremo come creare delle tabelle, come rappresentare i dati con HTML ed
aggiungere informazioni aggiuntive ad una tabella (didascalie).
Ogni blocco nella griglia viene definito cella della tabella. In HTML una tabella
viene scritta riga per riga.
Per creare una tabella in HTML sono necessari solo 3 tag: uno relativo alla
tabella, uno relativo alla riga e uno alla cella rispettivamente <table>, <tr> e
<td>.
Con <table> si crea una tabella in cui è necessario aggiungere una riga affinché
non sia vuota. Le tabelle in HTML sono strutture abbastanza dinamiche infatti
non vi sono limiti su righe e colonne, basta aggiungere una cella nella riga
desiderata senza dover modificare altro. Il tag <table> è seguito da uno o più tag
di tipo <tr> che a sua volta contiene uno o più tag di tipo <td>.
<html>
<head>
<title>Il mio sito</title>
</head>
<body>
<p>Riepilogo degli articoli in stock</p>
<p>La colonna a sinistra indica l'ID del prodotto</p>
<p>La colonna a destra indica la quantità</p>
<table>
<tr>
<td>1512361253</td>
<td>2</td>
</tr>
<tr>
<td>2342676237</td>
<td>2770</td>
</tr>
<tr>
<td>3276735560</td>
<td>503</td>
</tr>
</table>
</body>
</html>
Il risultato di questo codice sarà una pagina con una semplice tabella:
<html>
<head>
<title>Il mio sito</title>
</head>
<body>
<p><b>Riepilogo degli articoli in stock</b></p>
<table border="1">
<tr>
<th scope="col">ID prodotto</th>
<th scope="col">Disponibilità</th>
</tr>
<tr>
<td>1512361253</td>
<td>2</td>
</tr>
<tr>
<td>2342676237</td>
<td>2770</td>
</tr>
<tr>
<td>3276735560</td>
<td>503</td>
</tr>
</table>
</body>
</html>
Prova ad aggiungere questi attributi con i relativi valori, ricarica la pagina e vedi
come cambia l’aspetto della tabella:
bordercolor="blue" o
bgcolor="#00CCFF"
Avrai notato che con il primo è possibile cambiare il colore del bordo della
tabella mentre con il secondo è possibile cambiare il colore dello sfondo della
tabella, di una singola riga, di una singola cella, in base a dove è posizionato
l’attributo bgcolor.
È possibile usare i nomi inglesi dei colori, per convenzione infatti, tutti i browser
moderni supportano circa 140 nomi di colori, ad esempio: aqua, aquamarine,
beige, darkblue, fuchsia, grey, orange e tanti altri, oltre ai classici red, black,
green, yellow. In alternativa è possibile usare il valore esadecimale che
rappresenta un colore, come abbiamo fatto nel caso precedente per impostare il
colore dello sfondo della tabella. Un colore esadecimale è specificato con:
#RRGGBB, dove gli interi esadecimali RR (rosso), GG (verde) e BB (blu)
specificano i componenti del colore. Tutti i valori devono essere compresi tra 00
e FF, ad esempio, il valore #ff0000 viene visualizzato come rosso, poiché il
componente rosso è impostato sul valore più alto (RR) e gli altri sono impostati
su 00. Puoi creare delle combinazioni dei tre colori RGB giocando con il loro
valore ad esempio combinando il verde con il blu quindi #00FFFF otterrai il
colore Aqua che è molto simile al celeste. È preferibile usare le lettere maiuscole
per il valore del componente, che inoltre, è possibile abbreviare infatti #00FFFF
può essere scritto anche come #0FF. Puoi divertirti con i colori grazie ai molti
strumenti online o con semplici software come Paint e la sua tavolozza.
Nell’esempio precedente abbiamo dato risalto alle prime due celle perché
rappresentano l’intestazione della cella, ciò è stato possibile grazie all’attributo
scope. Questo attributo può assumere diversi valori come col (abbreviazione di
column), row, colgroup, rowgroup. Tramite l’attributo row è possibile
specificare che la cella è l’intestazione di una riga mentre con colgroup e
rowgroup si specifica che una cella è l’intestazione di un gruppo di colonne o
righe.
In realtà per quell’esempio sarebbe più interessante aggiungere una riga con il
totale degli elementi in magazzino quindi aggiungeremo una parte finale anche
detto footer ed una parte iniziale anche detta header alla nostra tabella. Queste
sezioni ti saranno molto utili per tabelle con molti elementi infatti i tag <thead> e
<tfoot> sono consigliati se hai una tabella più alta dello schermo (o, se stampata,
più lunga di una pagina). In questo modo il browser manterrà l'intestazione e il
piè di pagina permettendoti di avere sempre il riferimento dell’intestazione e del
footer.
L'elemento <thead> viene utilizzato insieme agli elementi <tbody> e <tfoot> per
specificare una parte di una tabella (intestazione, corpo, parte finale).
<html>
<head>
<title>Il mio sito</title>
</head>
<body>
<p><b>Riepilogo degli articoli in stock</b></p>
<table border="1" bordercolor="blue" bgcolor="#0FF" >
<thead>
<tr>
<th scope="col">ID prodotto</th>
<th scope="col">Disponibilità</th>
</tr>
</thead>
<tbody>
<tr>
<td>1512361253</td>
<td>2</td>
</tr>
<tr>
<td>2342676237</td>
<td>2770</td>
</tr>
<tr>
<td>3276735560</td>
<td>503</td>
</tr>
</tbody>
<tfoot>
<tr>
<td></td>
<td>3275</td>
</tr>
</tfoot>
</table>
</body>
</html>
Nonostante ci siano ancora molti attributi con cui cambiare aspetto alla tua
tabella non è consigliato usarli. Alcuni attributi come width, height, border,
bgcolor ecc. possono essere molto utili e bisogna conoscerli, soprattutto quando
si ha a che fare con sistemi obsoleti ma per la realizzazione di un nuovo sito Web
sarebbe preferibile usare i fogli di stile o CSS per applicare delle regole di questo
tipo. Usando dei fogli di stile garantiresti uniformità al tuo sito, potresti
riutilizzare molto di quello che scrivi e avresti un codice HTML molto più pulito
e facile da comprendere.
Capitolo 7
I form
Raccogliere i dati
Ma come funziona esattamente un form? Cosa succede dopo aver raccolto i dati?
Dopo aver inserito i dati l’utente preme sul pulsante Invia che manda al server i
dati inseriti. Un server elabora queste informazioni usando un linguaggio di
programmazione come PHP, Java, JavaScript, C# o altri ancora. Il server elabora
la richiesta in ingresso, talvolta memorizza i dati in un database ed infine
restituisce un messaggio al browser in modo da dare un feedback all’utente
riguardo l’invio.
Un form può avere diversi controlli al suo interno, ognuno infatti, raccoglie
informazioni diverse perciò deve esistere un modo per comunicare al server a
quale campo corrisponde un elemento del form. Per distinguere tra i vari dati
inseriti, le informazioni vengono inviate dal browser al server utilizzando delle
coppie nome - valore.
il tag <form>
l’attributo action
l’attributo method
Un semplice form che possiamo creare prevede un solo campo di input, ovvero
un solo campo con cui raccogliere le informazioni dall’utente:
<html>
<head>
<title>Il mio sito</title>
</head>
<body>
<p>Compila il seguente form per iscriverti al sito!</p>
<form action="http://www.example.com/login.php">
<p>Username:
<input type="text" name="username" maxlength="30" />
</p>
</form>
</body>
</html>
Il tag <form> dovrebbe sempre contenere l'attributo action e di solito avrà anche
un metodo e un attributo id. Il campo action conterrà l’URL della pagina sul
server che riceverà le informazioni del modulo al momento dell’invio.
L'attributo method specifica come inviare i dati del form, come variabili URL
(con method = "get") o come richieste HTTP post (con method = "post").
GET o POST?
Abbiamo parlato di richieste http ma cosa sono? Per poter proseguire abbiano la
necessità di fissare alcuni concetti. Le applicazioni Web si basano, di solito, sul
protocollo HTTP che è l’acronimo di Hyper Text Tranfer Protocol. Questo
protocollo consente lo scambio di informazioni tra i browser e i server ed è detto
stateless cioè senza stato perché la connessione viene chiusa non appena
terminato lo scambio tra richiesta e risposta. Questi due elementi sono
fondamentali per lo scambio e nella richiesta vengono inserite tutte le
informazioni necessarie come ad esempio il metodo (GET o POST ma ci sono
anche altri come PUT, DELETE, OPTIONS…). La risposta, invece, contiene un
codice numerico che corrisponde al risultato della richiesta. I codici più usati
sono:
Adesso che sappiamo qualcosa in più riguardo allo scambio di informazioni tra
client e server in ambito Web vediamo quando usare GET e quando POST.
Ritorniamo al nostro esempio, abbiamo usato il tag <form> che abbiamo avuto
modo di approfondire ma è presente anche <input>. Quest’ultimo viene
utilizzato per creare diversi tipi di controlli sul modulo e molti sono già integrati
in HTML. Il valore dell'attributo type determina il tipo di input che verrà creato.
Nell’esempio abbiamo usato type=”text” per poter inserire del testo libero su una
singola riga. Quando gli utenti inseriscono le informazioni in un form, il server
deve sapere chi ha il controllo dei dati inseriti (ad esempio, in un modulo di
accesso, il server deve sapere cosa è stato immesso come nome utente e ciò che è
stato fornito come password). Pertanto, ogni controllo del form richiede un
attributo name. Il valore di questo attributo identifica il controllo di quel campo
del modulo. È possibile utilizzare l'attributo maxlength per limitare il numero di
caratteri che un utente può inserire nel campo di testo. Il suo valore è il numero
massimo di caratteri che l’utente può inserire, ad esempio, se chiedessimo un
anno come campo di input, l'attributo maxlength potrebbe avere un valore di 4.
<html>
<head>
<title>Il mio sito</title>
</head>
<body>
<p>Compila il seguente form per iscriverti al sito!</p>
<form action="http://www.example.com/login.php">
<p>Username:
<input type="text" name="username" maxlength="30" />
</p>
<p>Password:
<input type="password" name="password" maxlength="30" />
</p>
</form>
</body>
</html>
Ora che possiamo raccogliere i dati dall’utente ci serve un pulsante per inviare il
form, ovvero le informazioni raccolte, al server in modo da elaborarle e farci
accedere al sito o respingere l’accesso con un messaggio d’errore. Useremo
sempre un tag <input> ma con un tipo diverso, infatti, con il tipo submit
possiamo inviare un form al server. HTML si occuperà di mostrare questo tipo di
tag, non come una barra in cui inserire il testo ma come un vero pulsante. Il testo
del pulsante possiamo modificarlo a nostro piacere tramite l’attributo value.
<html>
<head>
<title>Il mio sito</title>
</head>
<body>
<p>Compila il seguente form per iscriverti al sito!</p>
<form action="http://www.example.com/login.php">
<p>Username:
<input type="text" name="username" maxlength="30" />
</p>
<p>Password:
<input type="password" name="password" maxlength="10" />
</p>
<input type="submit" name="access" value="Invia" />
</form>
</body>
</html>
<html>
<head>
<title>Il mio sito</title>
</head>
<body>
<p>Compila il seguente form per iscriverti al sito!</p>
<form action="http://www.example.com/login.php">
<p>E-mail:
<input type="email" name="email" />
</p>
<p>Password:
<input type="password" name="password" maxlength="10" />
</p>
<input type="submit" name="access" value="Invia" />
</form>
</body>
</html>
Dopo aver salvato e aver ricaricato la pagina ci siamo accorti che entrambi i
campi non sono obbligatori ma è fondamentale che lo siano. Per garantire queste
condizioni bisogna aggiungere un attributo particolare, required. Si tratta di un
attributo insolito, infatti, perché è composto solo dal nome dell’attributo senza
alcun valore. I campi dell’esempio precedente diverranno rispettivamente:
Liste di informazioni
Talvolta bisogna scegliere una tra molte informazioni per completare un form, ci
sono diverse possibilità per raggiungere questo obiettivo. Vedremo come usare i
cosiddetti pulsanti radio, le checkbox e le liste di elementi a tendina.
Probabilmente questi nomi adesso non ti dicono nulla ma sono sicuro che avrai
già visto e usato questi elementi in diversi siti Web. Per i primi due basterà
cambiare il type del tag <input>. Creeremo un sondaggio ma in un due modi
diversi per capire subito la differenza tra radio e checkbox.
Come puoi vedere ci sono elementi grafici che hai già usato e forse sai già che
nel primo caso non è possibile selezionare più valori mentre nel secondo caso
non solo è possibile selezionare più di un valore ma è anche possibile non
selezionare alcun valore.
<html>
<head>
<title>Il mio sito</title>
</head>
<body>
<p>Compila il seguente form per proseguire con il sondaggio</p>
<form action="http://www.example.com/sondaggio.php">
<p>Seleziona il tuo stile di vita:
<br />
<input type="radio" name="genere" value="onnivoro" checked="checked"
/> Onnivoro
<input type="radio" name="genere" value="vegetariano" /> Vegetariano
<input type="radio" name="genere" value="vegano" /> Vegano
<input type="radio" name="genere" value="fruttariano" /> Fruttariano
<input type="radio" name="genere" value="crudista" /> Crudista
</p>
</form>
<form action="http://www.example.com/sondaggio.php">
<p>Seleziona gli stili di vita che si avvicinano al tuo:
<br />
<input type="checkbox" name="genere" value="onnivoro"
checked="checked" /> Onnivoro
<input type="checkbox" name="genere" value="vegetariano" />
Vegetariano
<input type="checkbox" name="genere" value="vegano" /> Vegano
<input type="checkbox" name="genere" value="fruttariano" />
Fruttariano
<input type="checkbox" name="genere" value="crudista" /> Crudista
</p>
</form>
</body>
</html>
Appena viene visualizzata la pagina esistono dei valori che sono già selezionati,
questo avviene per la presenza dell’attributo checked con valore checked. Può
sembrare strano che il valore di un attributo sia uguale al nome dell’attributo
stesso infatti con HTML5 è possibile inserire soltanto il nome dell’attributo, in
modo simile a required.
Supponiamo adesso di voler creare una tendina anche detta drop down list per
selezionare un elemento tra quelli già elencati. Questo approccio può essere
considerato un’alternativa ai radio in quanto almeno un elemento deve essere
selezionato. Ci sono due fattori chiave per capire quale utilizzare:
Useremo il tag <select> con un tag <option> per ogni voce della tendina.
<html>
<head>
<title>Il mio sito</title>
</head>
<body>
<p>Compila il seguente form per proseguire con il sondaggio</p>
<form action="http://www.example.com/sondaggio.php">
<p>Seleziona il tuo stile di vita:</p>
<select name="stili">
<option value="onnivoro"> Onnivoro</option>
<option value="vegetariano"> Vegetariano</option>
<option value="vegano"> Vegano</option>
<option value="fruttariano">Fruttariano</option>
<option value="crudista">Crudista</option>
</select>
</form>
</body>
</html>
L'attributo name indica il nome del campo del form che verrà inviato al server,
insieme al valore selezionato dall'utente. L'elemento <option> viene utilizzato
per specificare le opzioni che l'utente può selezionare. Le parole tra il tag di
apertura <option> e il tag di chiusura </option> verranno mostrate all'utente
nella tendina. L'elemento <option> utilizza l'attributo value per contrassegnare il
valore inviato al server insieme al nome della tendina quando l’opzione è
selezionata.
Date e file
Molti form servono per raccogliere informazioni come date, indirizzi e-mail e
URL. Fino a poco tempo fa questo è stato possibile usando del semplice testo.
HTML5 introduce nuovi controlli dei moduli per standardizzare il modo in cui
vengono raccolte alcune informazioni. I browser meno recenti che non
riconoscono questi input li tratteranno semplicemente come una casella di testo.
Se stai chiedendo una data all'utente, ad esempio la data di nascita o la data di
emissione di un documento, è possibile utilizzare un elemento <input> e
assegnare all'attributo type il valore date. In questo modo si creerà un input di
data nei browser che supportano i nuovi tipi di input HMTL5. L'aspetto
dell'input della data cambia in base al browser. Creiamo un piccolo form per
l’inserimento dei documenti di un utente, creeremo l’upload del documento e
soprattutto aggiungeremo dei controlli per inserire la data di emissione e
scadenza. L’aspetto di questi elementi varia in base al browser pertanto potresti
avere un aspetto grafico diverso da Chrome a Mozilla Firefox, da Edge a Opera.
Per realizzare questo form vediamo il codice sorgente che sostanzialmente userà
diversi valori del tipo di input e l’aggiunta di qualche nuovo attributo come
pattern.
<html>
<head>
<title>Il mio sito</title>
</head>
<body>
<h3>Documento di riconoscimento</h3>
<form method="post" action="http://www.example.com/documento.php">
<p>Tipo di documento:</p>
<select name="tipoDocumento">
<option value="CI">Carta d'identità</option>
<option value="PAT">Patente</option>
<option value="PAS">Passaporto</option>
<option value="TS">Tessera sanitaria</option>
</select>
<p>Ente di rilascio</p>
<input type="text" name="enteRilascio" required/>
<p>Numero documento</p>
<input type="text" name="numDocumento" pattern="/^[a-zA-Z]{2}[0-9]
{7}$" required/>
<p>Data di emissione</p>
<input type="date" name="dataEmissione" />
<p>Data di scadenza</p>
<input type="date" name="dataScadenza" />
<p>Documento in formato PDF</p>
<input type="file" name="pdfDoc" />
<hr />
<input type="submit">
</form>
</body>
</html>
Per quanto concerne il tipo date è possibile preimpostare una data come segue:
Continuando con l’analisi del codice del form possiamo notare l’ennesimo tipo
per il tag <input>, utile per l’upload dei file, che siano mp3, pdf, jpg ecc.
A tal proposito voglio darti un consiglio, se consenti ai tuoi utenti di inviare dei
file dovresti dotarti di un antivirus per scansionarli prima di salvarli sul tuo
server. I file che gli utenti inviano possono nascondere dei virus abbastanza
dannosi che potrebbero compromettere l’integrità del tuo server.
Questo tipo di input crea una casella che assomiglia a un input di testo seguito da
un pulsante Sfoglia. Quando l'utente clicca sul pulsante, si apre una finestra che
consente di selezionare un file dal proprio computer per caricarlo sul sito Web.
In questo caso l'attributo del metodo sull'elemento <form> deve assumere
necessariamente il valore di post poiché non è possibile inviare file utilizzando il
metodo HTTP get.
Quando un utente fa clic sul pulsante Sfoglia, la presentazione della finestra che
consente di cercare il file che desidera caricare corrisponderà alle finestre del
sistema operativo dell'utente. Non è possibile modificare l’aspetto di queste
finestre perché sono proprie del sistema operativo ma, se proprio hai la necessità
di cambiarle, potresti creare delle modali personalizzate e modificarne l’aspetto
tramite fogli di stile.
Ti ricordo che questo e-book è volto ad imparare HTML ma per ogni sito
sarebbe utile anche una validazione via JavaScript per evitare richieste errate al
server così come sarebbe necessario controllare ogni richiesta direttamente lato
server.
Capitolo 8
HTML5
Evoluzione di un linguaggio
Nel corso dell’e-book abbiamo fatto spesso riferimento ad HTML5 perciò è
arrivato il momento di approfondire.
HTML5 è l’evoluzione del protocollo HTML4 che innova con nuovi elementi,
attributi e comportamenti perché, come abbiamo constatato, le esigenze
cambiano. Fino a circa 10 anni sarebbe stato impensabile scrivere una e-mail con
il cellulare, oggi invece questi sono diventati degli smart-phone a tutti gli effetti.
Per questo motivo è fondamentale continuare a lavorare per andare incontro alle
esigenze dei programmatori ma soprattutto degli utenti, che sono il nostro vero
obiettivo. Creare un input di tipo e-mail è molto più veloce rispetto allo scrivere
un’espressione regolare per validare l’e-mail stessa, in questo modo si velocizza
lo sviluppo e lo si rende più sicuro.
Immaginiamo questo scenario: hai creato la tua agenda online per salvare tutti
gli appuntamenti giorno per giorno, non sei l’unico ad averne accesso quindi
anche la tua segretaria può fissare degli appuntamenti per te. Il sito deve essere
fruibile sia online che offline quindi un worker può registrare tutti gli
appuntamenti nell’agenda salvando la risposta del server. Successivamente puoi
impostare una logica che ti permette di fare una richiesta al server e, se non
disponibile (se sei offline), il worker restituirà la risposta che aveva salvato dal
server in precedenza. In questo modo all’utente sembrerà di essere online ma in
realtà si tratta di qualcosa salvato quando si era online.
Immaginiamo questo scenario: stai sviluppando il sito Web per una Banca e
potrebbe essere utile al tuo utente trovare la filiale più vicina. Grazie a questa
funzionalità di HTML5 potrai mostrargli dove si trova la filiale, la distanza dalla
sua posizione attuale ed addirittura mostrargli il percorso per raggiungerla. Tutto
questo ti può sembrare incredibile ma puoi solo immaginare quante diverse
applicazioni è possibile creare con HTML5.
Conclusione
La tecnologia che ci circonda ha assunto davvero un ruolo importante nella
nostra vita, ci circonda, ci aiuta ma può anche travolgerci, che sia per lavoro, per
svago o per comunicare. Siamo sempre incollati ad un cellulare anzi uno smart-
phone tanto che spesso ci sembra strano uscire di casa senza averlo preso. Credo
che la tecnologia così come tutte le cose che ci circondano debbano essere usate
per quello che di buono possono offrire. Sinceramente trovo che poter fare un
bonifico direttamente da casa in 5 minuti sia molto più conveniente di spendere
20 minuti per recarsi in banca, fare la fila ed effettuare la stessa operazione.
Basti pensare che da un social network è partita una rivoluzione in Egitto e
Tunisia, l’informazione e la comunicazione è molto più rapida anche grazie a
persone ed aziende che continuano ad investire in questi strumenti e che ci
credono davvero. Esistono anche tanti lati negativi, dal dark web
all’egocentrismo che dilaga nei social network, al mondo che i motori di ricerca
ci fanno vedere, dopo averci opportunamente profilato.
PROGRAMMARE IN CSS
Premessa
Nei primi anni del Web l'HTML era un linguaggio piuttosto snello e composto
quasi interamente da elementi strutturali che erano utili per descrivere paragrafi,
collegamenti ipertestuali, elenchi e intestazioni. L'HTML era originariamente
inteso come un linguaggio di markup strutturale, usato per descrivere le varie
parti di un documento. Il linguaggio non si occupava dell'aspetto: era solo un
piccolo schema di markup. All'improvviso, il potere del World Wide Web fu
evidente a tutti e capirono che il testo e le immagini potevano essere visualizzati
insieme quindi tutto ciò che serviva per creare una pagina era un editor di testo. I
siti Web, così, hanno iniziato a spuntare ovunque tra riviste personali, siti
universitari, siti aziendali e altro ancora. Con l'aumentare del numero di siti,
aumentò anche la richiesta di nuovi elementi HTML che avrebbero dovuto
svolgere una funzione specifica. Gli autori hanno iniziato a chiedere di poter
rendere il testo in grassetto o in corsivo. Non esisteva nulla per garantire che ciò
che lo sviluppatore aveva creato fosse effettivamente ciò che il lettore avrebbe
visto. Improvvisamente, un linguaggio strutturale ha iniziato ad occuparsi anche
dell’aspetto, creando una grande confusione. Naturalmente, questo problema non
è stato sottovalutato dal World Wide Web Consortium (W3C), che ha iniziato a
cercare una soluzione rapida. Nel 1995 il consorzio ha iniziato a pubblicizzare
un work-in-progress chiamato CSS che, finalmente, nel 1996 è stato
raccomandato, con lo stesso peso di HTML.
Fu così che nacque CSS (Cascading Style Sheets) ovvero fogli di stile a cascata,
un modo efficace per modificare l’aspetto di un documento o una raccolta di
documenti.
Semplicità
Vogliamo che il titolo sia presentato con un determinato font, di colore rosso
scuro e con uno sfondo giallo. Con CSS tutto questo si traduce in una semplice
regola di stile:
h1 {
color: darkred;
font: 2em Times, serif;
background: yellow;
}
Questo deve essere fatto per ogni sottotitolo di secondo livello quindi se hai 40
sottotitoli nel tuo documento, devi inserire 40 volte lo stesso attributo con lo
stesso valore! Questo comporta molto lavoro per un effetto molto semplice ma la
criticità è un’altra. Probabilmente cambiando il colore dello sfondo ti accorgerai
che il viola non è il colore adatto per un sottotitolo quindi deciderai di cambiare
il colore da viola a rosso. Dovrai modificare tutte quelle regole di stile che hai
scritto, correggendo ogni singolo carattere. Potresti essere in grado di cercare e
sostituire in blocco ma rischieresti di modificare anche altro. Se hai inserito altri
elementi di carattere viola nel tuo documento, con una sostituzione “a tappeto”
cambieresti anche il colore di questi.
h2 {color: purple;}
Non solo è più veloce da digitare, ma è più facile da modificare infatti se passi
dal viola ad un altro colore, tutto ciò che devi cambiare è quell'unica regola. Puoi
anche combinare più elementi infatti se hai anche dei sottotitoli di terzo livello
puoi applicargli lo stesso stile del sottotitolo di secondo livello in modo molto
semplice:
Hai notato che in pochi secondi abbiamo cambiato tutti i 40 sottotitoli? Qui inizi
a notare la potenza di CSS, inoltre, la maggior parte delle regole CSS sono
raccolte in un'unica posizione nel documento. È possibile sparpagliarle in tutto il
documento raggruppandoli in stili o singoli elementi, ma di solito è molto più
efficiente posizionare tutti i tuoi stili in un singolo foglio di stile con estensione
.css. Ciò consente di creare (o modificare) l'aspetto di un intero documento in
un'unica posizione.
Riusare i fogli di stile
Non solo puoi centralizzare tutte le informazioni di stile per una pagina in un
unico file, ma puoi anche creare un foglio di stile che può quindi essere applicato
a più pagine. Viene creato un file con tutte le regole di stile quindi importato da
qualsiasi pagina per essere utilizzato. Utilizzando questa funzionalità, è possibile
creare rapidamente un aspetto coerente per un intero sito Web. Tutto quello che
devi fare è collegare il singolo foglio di stile a tutti i documenti sul tuo sito Web.
Quindi, se volessi cambiare l'aspetto delle pagine del tuo sito, dovrai modificare
un solo singolo file e la modifica verrà propagata ovunque in modo automatico!
Considera un sito in cui tutte le intestazioni sono grigie su uno sfondo bianco. Il
foglio di stile ha le seguenti regole:
Ora diciamo che questo sito ha 300 pagine, ognuna delle quali utilizza il foglio
di stile che mostra i titoli in grigio. Ad un certo punto, il webmaster del sito
decide che i titoli devono essere bianchi su uno sfondo grigio. È sufficiente
modificare il foglio di stile:
Dopo aver salvato il file, la modifica verrà apportata al sito ed è certo che la
modifica sarà apportata su tutte le pagine perché tutte dipendono da quel file.
Fogli a cascata
Dimensioni ridotte
Bisogna ricordare che i documenti HTML hanno una propria struttura, che
generalmente dovrebbe essere di sostegno e creata attorno ai contenuti. In realtà,
nella fretta di creare le pagine più belle sul Web, abbiamo piegato, deformato e
generalmente ignorato l'idea che le pagine dovrebbero contenere informazioni
con un significato.
Usando il tag style nella sezione head della pagina puoi includere delle regole di
stile specifiche per la tua pagina:
<html>
<head>
<title>CSS interno</title>
<style type="text/css">
h1 {
color: red;
}
</style>
</head>
<body>
<h1>CSS interno</h1>
<p style="color: gray;">
Qui trovi una pagina html con regole di stile all'interno
</p>
</body>
</html>
L’attributo style dovrebbe sempre usare l’attributo type di attributo che, nel caso
di un documento CSS, assume il valore di text/css, proprio come con l'elemento
link. L'elemento style dovrebbe sempre iniziare con <style type="text/css">,
come mostrato nell'esempio precedente. Questo tag deve essere seguito da una o
più regole di stile e terminare con un tag di chiusura </style>.
In HTML ci sono diversi modi per integrare il CSS, il più semplice consiste nel
dichiarare un tag di tipo link in modo da dipendere da un file con estensione .css.
<html>
<head>
<title>CSS esterno</title>
<link rel="stylesheet" type="text/css" href="regole.css" media="all" />
</head>
<body>
<h1>CSS esterno</h1>
<p style="color: gray;">
Questa pagina html punta al file regole.css
</p>
</body>
</html>
Lo scopo del tag link consiste nel permettere l’associazione di altri documenti al
documento contenente il tag link. CSS lo usa per collegare fogli di stile al
documento; in questo caso è stato collegato un foglio di stile chiamato regole.css
alla pagina.
Questi fogli di stile, che non fanno parte del documento HTML ma sono
utilizzati da esso, vengono definiti fogli di stile esterni. Questo perché sono fogli
di stile che non sono inclusi (quindi definiti) all’interno del documento HTML.
Per caricare correttamente un foglio di stile esterno, il collegamento deve essere
posizionato all'interno della sezione head ma non può essere inserito all'interno
di nessun altro elemento. Ciò consentirà al browser Web di individuare e caricare
il foglio di stile e di utilizzare gli stili in esso contenuti per eseguire il rendering
del documento HTML.
h1 {
color: yellow; background: blue;
}
h2, h3 {
color: yellow; background: red;
}
h4, h5, h6 {
color: gray; background: white;
}
Gli altri attributi del tag link e i valori che possono assumere sono abbastanza
semplici. L’attributo rel indica il tipo di "relazione" con il documento e in questo
caso la relazione è foglio di stile. L’attributo type è sempre impostato su text/css.
Questo valore descrive il tipo di dati che verranno caricati utilizzando il tag link.
In questo modo, il browser Web sa che il foglio di stile è un file CSS, quindi si
tratta di un’istruzione per il browser per capire come gestire i dati.
Successivamente, troviamo l'attributo href e il valore di questo attributo è l'URL
del tuo foglio di stile ovvero dove si trova il file. Questo URL può essere
assoluto o relativo, a seconda della posizione. Nel nostro esempio, ovviamente,
l'URL è relativo perché il file che vogliamo usare si trova nello stesso percorso
della pagina. Potresti avere la necessità di usare un URL assoluto nel momento
in cui tu debba usare il CSS ospitato da un altro sito o se, per esempio, stai
migrando il tuo dominio.
Infine, abbiamo un attributo media il cui valore significa che il foglio di stile
deve essere applicato in tutti i supporti di presentazione. Esistono diversi valori
consentiti per questo attributo:
Uno dei principali vantaggi di CSS, in particolare per gli sviluppatori Web, è la
sua capacità di applicare facilmente una serie di stili a tutti gli elementi dello
stesso tipo. Questo aspetto consente di concentrarti molto sul design piuttosto
che lavorare per istruire il browser. Ovviamente, i CSS non possono risolvere
tutti i tuoi problemi, ad esempio non puoi usarli per cambiare il colore delle tue
GIF, ma possono rendere molto più semplici alcune modifiche a livello globale.
Abbiamo già visto delle regole di stile ma come sono composte? Analizziamole
in dettaglio:
h1 {
color: yellow; background: blue;
}
dimensione: 2cm;
color: rosso;
In un'istanza in cui è possibile utilizzare più di una parola chiave per il valore di
una proprietà, le parole chiave sono generalmente separate da spazi. Non tutte le
proprietà possono accettare più parole chiave, ma molte, come la proprietà font,
possono farlo. A tal proposito riprendiamo l’esempio usato nel capitolo
precedente:
h1 {
color: darkred;
font: 2em Times, serif;
background: yellow;
}
Nota bene che vi è uno spazio tra 2em e Times, il primo è la dimensione del
carattere e il secondo è il nome del font da usare. Lo spazio consente al browser
di distinguere tra le due parole chiave e applicarle correttamente. Il punto e
virgola indica che la dichiarazione è stata conclusa. Queste parole separate da
spazi vengono chiamate parole chiave perché insieme, formano il valore della
proprietà in questione.
Posizionando i selettori h2 e p sul lato sinistro della regola e separandoli con una
virgola, hai definito una regola in cui lo stile a destra (colore: blu;) si applica agli
elementi a cui fanno riferimento entrambi i selettori. La virgola indica al browser
che ci sono due diversi selettori coinvolti nella regola.
* {color: red;}
Tieni presente che l'utilizzo del punto e virgola alla fine di ogni dichiarazione è
fondamentale quando le raggruppi. I browser ignorano gli spazi bianchi nei fogli
di stile e fanno affidamento sulla sintassi corretta per analizzare il foglio di stile.
Proviamo ad omettere un punto e virgola ovvero un carattere di terminazione per
vedere cosa succede:
h1 {
font: 2em Times, serif;
color: darkred
background: yellow;
}
Come vedi la dichiarazione color non è stata terminata e poiché background: non
è un valore valido per la proprietà color perché accetta una sola parola chiave, il
browser ignorerà completamente la dichiarazione del colore (inclusa quella dello
sfondo). Il browser potrebbe rendere h1 come testo rosso scuro senza uno sfondo
giallo o, in modo più probabile, non otterrai nemmeno h1 di colore rosso scuro.
Verrebbe usato in tal caso il colore predefinito (che di solito è nero) senza
sfondo. La dichiarazione sul font, invece, avrà effetto poiché è stata
correttamente terminata con un punto e virgola.
Hai raggruppato i selettori, quindi gli stili sul lato destro della regola verranno
applicati a tutte le intestazioni elencate così come a tutti i paragrafi. Raggruppare
le dichiarazioni significa che tutti gli stili elencati verranno applicati ai selettori
sul lato sinistro della regola.
Capitolo 4
Classi e ID
Selettori di classe
Il selettore ora corrisponde a tutti gli elementi h1 che hanno un attributo class
contenente la parola sponsorizzato, ma nessun altro elemento di alcun tipo,
classificato o meno. Il selettore h1.sponsorizzato si traduce in: "Qualsiasi titolo
principale il cui attributo class contenga la parola sponsorizzato ". Possiamo
verificare questa regola aggiungendo alla pagina la regola:
<h1 class="sponsorizzato doppio_bordo">Super offerta</h1>
Non è importante specificare l’ordine in questo caso perché non ci sono
proprietà uguali negli stili. Nel caso in cui ci sia la stessa proprietà in entrambe
le classi, prevale l’ultima inserita come abbiamo già visto con il concetto di fogli
di stile a cascata.
Selettori di ID
Ora che conosciamo entrambi, sorge spontanea una domanda: quando dobbiamo
usare il selettore di classe? E quando quello di ID?
Un altro aspetto importante sia per i selettori di classe che per ID consiste nella
distinzione tra maiuscole e minuscole, a seconda della “lingua” del documento.
In HTML si definiscono i valori di classe e ID in modo che facciano distinzione
tra maiuscole e minuscole, quindi le lettere maiuscole e minuscole dei valori di
classe e ID devono corrispondere a quelle nella pagina. Pertanto, nel seguente
accoppiamento di CSS e HTML, l'elemento h1 non sarà di colore rosso su
sfondo giallo:
Selettori di attributi
Quando si tratta di selettori di classi e ID, ciò che stai realmente facendo è
selezionare i valori degli attributi. Se desideri selezionare elementi con un
determinato attributo, indipendentemente dal suo valore, puoi utilizzare un
semplice selettore di attributi. Ad esempio, per selezionare tutti gli elementi h1
che hanno un attributo class con qualsiasi valore e rendere il loro testo verde, è
sufficiente la seguente regola:
<h1 class="super">Supertitolo</h1>
<h1 class="help">Aiuto</h1>
<h1 class="grande">Intestazione</h1>
Allo stesso modo, potresti applicare uno stile solo a quegli elementi di tipo <a>
che hanno un attributo href. È anche possibile usare più di un attributo per
selezionare degli elementi, infatti, puoi concatenare i selettori. Ad esempio, per
evidenziare in grassetto il testo di qualsiasi ipertesto HTML che abbia sia un
attributo href che un titolo, dovresti scrivere:
a[href][title] {
font-weight: bold;
}
a[href="http://www.google.it"] {
font-weight: bold;
}
a[href="http://www.google.it"][title="Homepage di Google"] {
font-weight: bold;
}
h1[class~="sponsorizzato"] {
font-weight: bold;
}
In questo caso la presenza della tilde (~) nel selettore è la chiave. In questo modo
la selezione è basata sulla presenza di una parola separata dallo spazio all'interno
del valore dell'attributo. Omettendo la tilde, si avrebbe un requisito di
corrispondenza con valore esatto, come discusso nella sezione precedente.
img[title~="Illustrazione"] {
border: 1px solid gray;
}
Questa regola selezionerà qualsiasi immagine il cui testo del titolo contenga la
parola Illustrazione. Pertanto, tutte le tue immagini che hanno un testo del titolo
che assomiglia a "Illustrazione 32. Un esempio di modello 3D" verranno
selezionate da questa regola. Qualsiasi immagine senza un attributo del titolo o il
cui valore del titolo non contiene la parola Illustrazione non sarà selezionata.
Esistono anche altri modi per selezionare degli elementi infatti è possibile
selezionare ogni elemento con attributo nome e valore che inizia con Pippo.
Questo è possibile con la seguente regola:
[nome^="Pippo"] {}
Potremmo selezionare elementi con attributo nome i cui valori finiscano con
Pippo tramite la regola:
[nome$="Pippo"] {}
[nome*="Pippo"] {}
a[href*="sitoaffiliato.it"] {
font-weight: bold;
}
E, naturalmente, non sei limitato agli attributi class e href. Qualsiasi attributo è
disponibile per essere usato title, alt, src, id ecc.
Capitolo 5
Struttura di una pagina
<html>
<head>
<title>SuperShop</title>
</head>
<body>
<h1><em>SuperShop</em></h1>
<p>
Benvenuto in <em>SuperShop</em>, il <strong>più grande rivenditore su
<a href="http://www.ebay.it">Ebay</a></strong>!</p>
<ul>
<li>Ti offriamo:
<ul>
<li><strong>Informazioni dettagliate</strong> sui prodotti</li>
<li>Spedizione veloce</li>
<li><em>Originalità</em> dei nostri prodotti</li>
</ul>
</li>
<li>...e molto altro!</li>
</ul>
<p>
Hai dubbi? <a href="mailto:rivenditore@ebay.it">Contattaci!</a>
</p>
</body>
</html>
Gran parte della forza dei CSS si basa sulla relazione degli elementi genitore-
figlio. I documenti HTML si basano su una gerarchia di elementi, che è
rappresentabile come un "albero" del documento. La radice dell’albero sarà il
nodo <html> con due figli <head> e <body>. A sua volta <body> contiene
diversi figli: <h1>, <p>, <ul> e un altro <p>.
h1 em {color: gray;}
In una regola di stile di questo tipo la parte sinistra è composta da due o più
selettori separati da spazi.
Non sei limitato ad usare solo due selettori nella parte sinistra di questa regola di
stile, infatti, puoi combinare diversi elementi per formare la regola che cerchi. È
ovvio che quanti più selettori aggiungi, tanto più specifica sarà la regola.
Supponiamo di avere un documento con una barra laterale e un'area principale.
La barra laterale ha uno sfondo blu, l'area principale ha uno sfondo bianco ed
entrambe le aree includono elenchi di collegamenti. Non puoi impostare tutti i
link di colore blu perché sarebbero impossibili da distinguere nella barra laterale.
La soluzione consiste nell’usare i selettori discendenti. In questo caso puoi
assegnare alla cella della tabella che contiene la barra laterale una class pari a
sidebar ed assegnare all'area principale una class pari a main. Quindi il tuo file
CSS sarà qualcosa simile a:
<html>
<head>
<title>Tabella colorata</title>
<style>
table {border: 1px solid black;}
td.sidebar {background: blue;}
td.main {background: white;}
td.sidebar a:link {color: white;}
td.main a:link {color: blue;}
</style>
</head>
<body>
<h2>Collegamenti utili</h2>
<table>
<tr>
<td class="sidebar">
<a href="www.sito1.it">www.sito1.it</a><br>
<a href="www.sito2.it">www.sito2.it</a><br>
<a href="www.sito3.it">www.sito3.it</a><br>
<a href="www.sito4.it">www.sito4.it</a><br>
<a href="www.sito5.it">www.sito5.it</a><br>
</td>
<td class="main">
Questi sono alcuni collegamenti utili <br>per la tua ricerca, per altri
risultati ti <br>invitiamo a cercare su
<a href="www.miosito.it">miosito.it</a>
</td>
</tr>
</table>
</body>
</html>
Selettori di figli
Opzione 1:
<div>
<h1>Il titolo</h1>
<p>è <strong>davvero</strong> importante</p>
</div>
Opzione 2:
<h1>Questo è
<em>davvero <strong>molto</strong></em>
importante.
</h1>
La regola che abbiamo definito farà diventare rosso il testo contenuto
nell’elemento strong dell’opzione 2. Leggendo da destra verso sinistra, il
selettore h1 > strong si traduce in "seleziona qualsiasi elemento strong che è
figlio di un elemento h1". Il combinatore figlio è facoltativamente circondato da
spazi bianchi infatti puoi liberamente omettere oppure usare gli spazi. Le
seguenti regole sono equivalenti:
h1 > strong
h1> strong
h1>strong
h1 >strong
Selettore di figli adiacenti
h1 + p {margin-top: 0;}
<div>
<p>Lista ordinata</p>
<ol>
<li>Elemento</li>
<li>Elemento</li>
<li>Elemento</li>
</ol>
Lista non ordinata
<ul>
<li>Elemento</li>
<li>Elemento</li>
<li>Elemento</li>
</ul>
</div>
In questo frammento, una coppia di elenchi discende da un elemento div, uno è
ordinato e l'altro no, ciascuno contenente tre voci di elenco. Ogni elenco è un
fratello adiacente e gli stessi elementi dell'elenco sono anche fratelli adiacenti tra
loro. Tuttavia, gli elementi del primo elenco non sono fratelli degli elementi del
secondo elenco, poiché i due set non condividono lo stesso elemento padre, al
massimo possono essere considerati cugini. Ricorda che puoi selezionare il
secondo dei due fratelli adiacenti con un singolo combinatore, quindi, scrivendo
li + li {font-weight: bold;}, solo il secondo e il terzo elemento di ciascun elenco
saranno in grassetto ed i primi elementi dell'elenco non saranno interessati. Per
poter funzionare correttamente i CSS richiedono che i due elementi compaiano
in "ordine sorgente". Nel nostro esempio, un elemento ol è seguito da un
elemento ul. Ciò consente di selezionare il secondo elemento con ol + ul, ma non
è possibile selezionare il primo utilizzando la stessa sintassi. Affinché ul + ol
corrisponda, un elenco ordinato deve seguire immediatamente un elenco non
ordinato.
Il contenuto del testo tra due elementi non impedisce il funzionamento del
combinatore fratello-fratello adiacente. Anche se c'è del testo tra i due elenchi,
puoi comunque abbinare il secondo elenco con il selettore ol + ul. Questo perché
il testo intermedio non è contenuto con un elemento fratello, ma fa invece parte
del div padre. Se si racchiuesse quel testo in un elemento di paragrafo, si
eviterebbe che ol + ul corrisponda al secondo elenco. Invece, potresti dover
scrivere qualcosa come ol + p + ul.
Capitolo 5
Pseudo-classi
In questo caso abbiamo aggiunto una classe di stile per far diventare verde ogni
link con la classe visitato. Tuttavia, un tale approccio richiede che le classi sui
collegamenti cambino ogni volta che visiti una nuova pagina, il che è un po'
complicato. CSS a questo proposito definisce delle pseudo-classi che fanno sì
che i link alle pagine visitate si comportino come se avessero class pari a
visitato:
Ora, qualsiasi link che punti a una pagina visitata sarà verde e non dovrai
nemmeno aggiungere attributi di classe ai link. Nota bene che per usare pseudo-
classi sono necessari i due punti (:) nella regola. I due punti servono per separare
a e visited, quindi, tutte le parole chiave di pseudo-classe sono precedute da due
punti.
Sicuramente durante la navigazione sul Web avrai già incontrato queste regole di
stile ma forse non lo sapevi. Immagina un sito Web con un menu, quando
posizioni il puntatore del mouse ogni voce del menu passa dal colore grigio al
colore nero. Questo è un classico uso di :hover.
Procediamo con ordine dalle unità più semplici: i numeri. Ci sono due tipi di
numeri nei CSS: numeri interi e numeri reali (frazioni). In CSS, un numero reale
è definito come un numero intero che è facoltativamente seguito da un numero
decimale e un numero frazionario, quindi, i seguenti valori sono validi: 15.5,
-270.00004 e 5. Sia i numeri interi che i reali possono essere positivi o negativi,
sebbene le proprietà possano (e spesso lo facciano) limitare l'intervallo di numeri
accettati.
Talvolta i numeri non sono sufficienti per indicare quanto spazio dedicare ad una
componente della pagina. Immaginiamo di voler dedicare metà pagina ad una
componente ma non sappiamo esattamente la larghezza totale. Fissare un
numero sarebbe errato perché quasi ogni utente ha una risoluzione diversa quindi
quasi ogni utente vedrebbe un layout diverso.
Una delle prime domande poste da ogni sviluppatore Web è: "Come posso
impostare i colori sulla mia pagina?" In HTML, hai due scelte: puoi usare il
nome di un colore in inglese, scegliendo tra un vasto elenco, come red o purple,
o utilizzare codici esadecimali. Entrambi questi metodi per descrivere i colori in
CSS risultano molto intuitivi. Supponendo che tu sia contento di scegliere da un
elenco di 140 colori di base, il metodo più semplice è semplicemente usare il
nome del colore che desideri. Contrariamente a quanto alcuni produttori di
browser potrebbero farti credere, hai un set limitato di parole chiave valide con
nome di colore. Ad esempio, non potrai scegliere la parola "ebano" perché non è
un colore definito ma potrai scegliere tra tanti altri, ecco i più usati:
I computer creano colori combinando diversi livelli di rosso, verde e blu, una
combinazione che viene spesso definita colore RGB. In effetti, se dovessi aprire
un vecchio monitor a tubi catodici per computer, scopriresti tre "pistole". Queste
pistole sparano raggi di elettroni a intensità diverse in ogni punto dello schermo.
Quindi, la luminosità di ogni raggio si combina in quei punti sullo schermo,
formando tutti i colori che vedi. Ogni punto è noto come pixel ovvero la più
piccola unità per rappresentare un’immagine digitale. Anche se la maggior parte
dei monitor in questi giorni non sono a tubi catodici, la loro resa cromatica si
basa ancora su miscele RGB. Dato il modo in cui i colori vengono creati su un
monitor, ha senso che tu possa determinare la tua miscela dei tre colori per avere
il massimo controllo. Questa soluzione è complessa, ma possibile, ne vale la
pena perché ci sono pochissimi limiti su quali colori puoi produrre. Esistono
cinque modi per far riferimento ad un colore:
nome
rgb(valori numerici)
rgb(percentuali)
esadecimale
abbreviazione di un esadecimale
Avendo già esaminato il primo punto della lista, passiamo al secondo. RGB è
l’acronimo di Red Green Blue (rosso, verde, blu) ed indica la quantità dei tre
colori primari che desideriamo per creare il nostro colore. La quantità può essere
espressa tramite un valore intero da 0 a 255 oppure con una percentuale da 0% a
100% per ogni colore. Per indicare il colore rosso ad esempio, avremo una
tripletta di valori dove il primo sarà il valore massimo mentre gli altri saranno
pari a 0:
Ti basterà cambiare questi valori per creare nuovi colori mischiando il rosso con
il verde ed il blu.
Per i numeri esadecimali composti da tre coppie di cifre abbinate, CSS consente
una notazione abbreviata. Come puoi vedere dal markup, ci sono solo tre cifre
per ogni valore di colore. Tuttavia, poiché i numeri esadecimali tra 00 e FF
richiedono due cifre ciascuno e hai solo tre cifre totali, come può capire il
browser a quale valore ti riferisci? Come funziona questo metodo? La risposta è
che il browser considera ogni cifra e la replica. In questo modo #F00 equivale a
#FF0000, #6FA sarebbe uguale a #66FFAA e #FFF equivale a #FFFFFF, che
indica il colore bianco. Ovviamente, non tutti i colori possono essere
rappresentati in questo modo. Il grigio, ad esempio, verrebbe scritto in notazione
esadecimale standard come #808080 ma non può essere scritto in forma
abbreviata. L'equivalente più vicino sarebbe #888, che è lo stesso di #888888 ma
ovviamente non si tratta dello stesso identico colore.
Le lunghezze
Le unità di lunghezza assolute sono più facili da capire, nonostante siano meno
usate nel Web design. I cinque tipi di unità assolute sono i seguenti:
Pollici (in)
Centimetri (cm)
Millimetri (mm)
Punti (pt)
Picas (pc)
Naturalmente, queste unità sono davvero utili solo se il browser conosce tutti i
dettagli del monitor su cui viene visualizzata la tua pagina, la stampante che stai
utilizzando ecc. Su un browser Web, la visualizzazione è influenzata dalle
dimensioni del monitor e dalla risoluzione su cui è impostato, e non c'è molto
che tu, come sviluppatore, possa fare su questi fattori. Puoi solo sperare che, se
non altro, le misurazioni siano coerenti l'una rispetto all'altra, ovvero che
un'impostazione di 1 pollice sarà doppia rispetto a 0,5 pollici. Esistono dei
framework basati su CSS (come Bootstrap) che consentono di rendere
responsive ogni interfaccia con molto meno sforzo ma esulano dal contesto di
questo e-book. Le unità assolute sono molto più utili nella definizione dei fogli
di stile per i documenti stampati, dove è comune misurare le distanze in pollici,
centimetri o millimetri. Come hai visto, tentare di utilizzare misure assolute nel
web design è nella migliore delle ipotesi pericoloso, quindi passiamo ad alcune
unità di misura più utili.
L'unità px è l'unità magica del CSS infatti non è correlata al carattere corrente e
di solito non è nemmeno correlata a centimetri o pollici. L'unità px è definita
come piccola ma visibile tale che una linea orizzontale larga 1px possa essere
visualizzata. Il px non è quindi definito come una lunghezza costante, ma come
qualcosa che dipende dal tipo di dispositivo e dal suo uso tipico. Per avere
un'idea dell'aspetto di un px, immagina un monitor degli anni '90: il punto più
piccolo che può visualizzare misura circa 1/5 di pollice (0,25 mm) o poco più.
L'unità px ha preso il nome da quei pixel dello schermo. Al giorno d'oggi ci sono
dispositivi che in linea di principio potrebbero visualizzare punti ancora più
piccoli (anche se potrebbe essere necessario una lente d’ingrandimento per
vederli). I dispositivi cambiano, ma il px ha sempre lo stesso aspetto visivo.
D'altra parte, le misure dei pixel sono perfette per esprimere la dimensione delle
immagini, che hanno già altezza e larghezza stabilite in pixel. In effetti, l'unica
volta in cui non si specificano i pixel è quando si desidera ridimensionare la
dimensione dell'immagine insieme alla dimensione del testo. Questo è un
approccio ammirevole e talvolta utile e, sarebbe davvero sensato se si usassero
immagini basate su vettori anziché immagini basate su pixel. Oggi questo è
possibile grazie alle immagini vettoriali che possono essere ingrandite senza
intaccarne la risoluzione.
Conclusioni
Ci auguriamo che questo viaggio possa essere stato d’aiuto ma voglio darti un
consiglio per diventare uno sviluppatore Web davvero bravo. Il consiglio è di
esercitarsi tanto, essendo curioso, solo così potrai stimolare la tua curiosità ed
imparare nuove funzionalità di CSS che ti saranno certamente utili. Fissa un
obiettivo, ad esempio la realizzazione di un sito Web personale o per un amico,
per un’azienda o per chi preferisci, in modo da poterti allenare e sfruttare ciò che
hai imparato.
PROGRAMMARE IN JAVASCRIPT
Premessa
JavaScript è stato introdotto nel lontano 1995 come un modo per aggiungere
programmi alle pagine Web nel browser Netscape Navigator e da allora questo
linguaggio è stato usato da tutti gli altri principali browser. Sostanzialmente
JavaScript ha aggiunto interattività alle pagine Web, rendendo possibile
interagire direttamente senza dover ricaricare la pagina ad ogni azione. Se
conosci il linguaggio di programmazione Java, è importante notare che
JavaScript non ha quasi nulla a che fare con esso infatti il nome simile è stato
ispirato da considerazioni di marketing piuttosto che dal buon senso. Quando è
stato introdotto JavaScript, Java era molto commercializzato e stava
guadagnando popolarità pertanto hanno pensato di cavalcare l’onda.
Negli ultimi anni JavaScript si è evoluto anche fuori dai browser Web infatti
alcuni database, come MongoDB e CouchDB, utilizzano JavaScript come
linguaggio di scripting e per le query. Ci sono anche diverse piattaforme per la
programmazione desktop e server, in particolare Node.js, che forniscono un
ambiente per la programmazione con JavaScript al di fuori del browser. In
questo modo potrai usare JavaScript lato server con notevole risparmio di tempo
poiché non è richiesta alcuna conversione di tipo dal momento che client e
server parlano la stessa “lingua”.
Capitolo 2
Tipi ed operatori
Nel mondo in cui la tecnologia ci pervade è fondamentale capire quali sono i dati
da memorizzare e come è possibile farlo. I dati sono delle sequenze di bit ovvero
sequenze di due valori: 0 e 1. Questo potrebbe farti pensare al celebre film
Matrix ma, effettivamente, all’interno del tuo computer qualsiasi elemento è
rappresentato da sequenze di questo tipo. Queste sequenze di bit, in JavaScript,
sono chiamate valori e possono essere differenziati quindi alcuni sono numeri,
altri caratteri, altri funzioni ecc.
Ogni valore che deve essere memorizzato fa parte di un tipo di dati. I tipi di dati
in JavaScript sono:
number;
string;
boolean;
object;
function;
null;
undefined.
Ogni valore è memorizzato in una variabile che può passare da un tipo numerico
ad una stringa o ad un valore booleano (vero o falso) senza alcun problema.
Numeri
Esistono tre valori speciali in JavaScript che sono considerati numeri ma non si
comportano come tali. I primi due rappresentano i numeri infiniti positivi e
negativi, questi sono rispettivamente Infinity e -Infinity. Questi valori ben presto
conducono al prossimo numero speciale: NaN. NaN indica che quel valore "non
è un numero", anche se è un valore di tipo numerico. Otterrai questo risultato
quando, ad esempio, provi a calcolare 0/0 (zero diviso zero), Infinity - Infinity o
qualsiasi altra operazione numerica che non produce un risultato significativo.
Stringhe
numero = "10";
In questo caso abbiamo omesso la parola chiave var perché stiamo assegnando
un valore ad una variabile che è già stata dichiarata. Puoi contrassegnare una
stringa utilizzando virgolette singole, doppie o backtick (`), purché le virgolette
all'inizio e alla fine della stringa siano dello stesso tipo. Ogni volta che viene
posta una barra rovesciata (\) all'interno del testo tra virgolette, questa indica che
il carattere successivo ha un significato speciale. Una virgoletta preceduta da una
barra rovesciata non termina la stringa ma ne fa parte. Quando il carattere n
segue una barra rovesciata (\n), questo viene interpretato come l’inizio di una
nuova riga.
Booleani e operatori logici
console.log(confronto);
In questo caso il risultato sarà un booleano con valore true perché 10 è maggiore
di 9.
Esistono due valori speciali, null e undefined, che vengono utilizzati per indicare
l'assenza di un valore significativo. Sono comunque valori, ma non aggiungono
delle informazioni significative. Molte operazioni non producono un valore
significativo e la differenza di significato tra undefined e null è solo un problema
di design di JavaScript quindi ti consiglio di trattarli come equivalenti.
Esistono diversi modi con cui definire una variabile, puoi usare var per
memorizzare sia variabili che costanti, oppure, puoi distinguere tra le due
possibilità. Puoi usare let per memorizzare delle variabili e const per
memorizzare le costanti. Queste ultime due sono state introdotte con
ECMAScript 6 pertanto sono ampiamente utilizzate e supportate.
È possibile confrontare valori dello stesso tipo usando ==, il risultato è facile da
prevedere: dovrebbe restituire vero se entrambi i valori sono uguali, tranne nel
caso di NaN. Quando i tipi differiscono, JavaScript utilizza un insieme
complicato e confuso di regole per determinare cosa fare. Nella maggior parte
dei casi, tenta solo di convertire uno dei valori nell'altro tipo di valore. Talvolta
potresti ottenere null da un lato e undefined dall’altro, presta attenzione perché:
console.log(null == undefined);
// -> true
Esiste anche un altro tipo di operatore che viene usato quando non si desidera
effettuare una conversione di tipo. La differenza tra === e == consiste proprio in
questo, il primo verifica se un valore è esattamente uguale all'altro e il secondo
verifica se non è esattamente uguale. Ti consiglio di usare l’operatore di
confronto === per evitare che conversioni di tipo impreviste ti restituiscano
valori non previsti. Tuttavia, quando sei sicuro che i tipi su entrambi i lati
dell’operatore sono gli stessi, non ci sono problemi con l'uso dell’operatore ==.
console.log(typeof 3);
// -> number
console.log(typeof 'test');
// -> string
Capitolo 3
Programmare in JS
Funzioni
console.log(Math.min(2, 4) * 200);
// -> 400
Controllo dell’esecuzione
suggerisci(20);
// -> "Fiat 500"
suggerisci(38);
// -> "Audi A4"
suggerisci(17);
// -> "BMW X5"
Come vedi c’è un problema perché non abbiamo specificato bene tutte le
condizioni. Abbiamo creato un costrutto if-else dove l’ultimo costrutto else non
ha alcuna condizione pertanto anche chi non potrebbe guidare, come un
diciassettenne, riceverebbe “BMW X5” come suggerimento. Come esercizio
puoi aggiungere la condizione appropriata e risolvere questo problema. Potresti
anche inserire un messaggio d’errore per utenti con età inferiore a 18 anni.
let numero = 1;
while (numero <= 20) {
console.log(numero);
numero++;
}
Un'istruzione che inizia con la parola chiave while crea un ciclo. Come puoi
notare la parola while è seguita da un'espressione tra parentesi cioè un'istruzione,
in modo simile a if. Il ciclo continua ad eseguire quelle istruzioni fino a quando
l'espressione produce un valore che fornisce true quando convertito in booleano.
Ogni volta che il ciclo si ripete, il numero ottenuto viene incrementato di
un’unità rispetto al valore precedente. Quando il valore di numero è 21 la
condizione sarà falsa quindi si uscirà dal ciclo.
var numero = 1;
do {
console.log(numero);
numero++;
} while (numero <= 20);
In questo caso le istruzioni nel blocco do verranno eseguite almeno una volta e
successivamente sono soggette alla condizione della clausola while.
È possibile usare un altro tipo di ciclo che si adatta meglio a questo caso. Un
ciclo for ha lo stesso funzionamento del ciclo while ma le condizioni di
inizializzazione e di uscita sono esplicitate in modo diverso:
Tuttavia, fare in modo che la condizione di loop produca false non è l'unico
modo in cui un ciclo può terminare. Grazie alla parola chiave break puoi
abbandonare immediatamente il ciclo. Questa parola chiave è molto utile quando
bisogna iterare su molti elementi, ad esempio, per trovare il primo elemento tra
una serie di elementi. Questa parola chiave ti consente di uscire prima da un
ciclo risparmiando tempo e, soprattutto, ti consente di evitare cicli infiniti.
Un altro suggerimento consiste nell’usare dei nomi “parlanti” ovvero dei nomi
con un significato e che ti facciano capire il compito della funzione. Oltre a
questo, puoi usare dei commenti all’interno del tuo codice per includere delle
considerazioni sul tuo codice, ad esempio, per ricordarti di implementare un
controllo. Potresti voler commentare una funzione per crearne una nuova
versione senza cancellare la precedente, anche a questo servono i commenti. Un
commento è una parte di testo che fa parte di un programma ma è
completamente ignorato dall’interprete. JavaScript ha due modi per scrivere
commenti: se il commento inizia e finisce su una riga singola, è possibile
utilizzare due caratteri di barra (//) e successivamente il testo del commento,
oppure, se il commento è multiriga è possibile racchiudere il codice tra /* e */.
Vediamo qualche esempio di questi commenti:
Numeri, valori booleani e stringhe sono la base da cui costruire strutture di dati
più complesse. Gli oggetti ci consentono di raggruppare i valori, compresi altri
oggetti, per costruire strutture sempre più complesse. I programmi che abbiamo
creato finora sono stati limitati dall’uso di tipi di dati semplici ma puoi ben
capire che raggruppare una serie di proprietà può essere molto utile nella
programmazione orientata agli oggetti. Questo tipo di programmazione
considera ogni entità presente nel mondo che ci circonda come un oggetto con
attributi e con metodi. Gli attributi sono delle caratteristiche mentre i metodi
sono delle funzioni. Un classico esempio è la macchina che è composta da
attributi come ruote, sportelli, volante ecc. e ha il compito di marciare, svoltare,
frenare ecc.
let automobile = {
ruote: 4,
motore: 1,
volante: 1,
'air-bag': 4
};
console.log(automobile.ruote);
// -> 4
console.log(automobile.sedili);
// -> undefined
automobile.sedili = 5;
console.log(automobile.sedili);
// -> 5
La lettura di una proprietà che non esiste ti darà undefined come abbiamo
dimostrato per la proprietà sedili che non era inizialmente definita nell’oggetto.
È possibile assegnare un valore ad un'espressione grazie all'operatore di
assegnamento (=). Ciò sostituirà il valore della proprietà se esiste già o creerà
una nuova proprietà dell'oggetto qualora non esistesse già.
delete automobile.volante;
console.log(automobile.volante);
// -> undefined
console.log(Object.keys(automobile));
// -> ["ruote", "motore", "sedili"]
Abbiamo visto che i valori degli oggetti possono essere modificati mentre i tipi
di valori discussi nei capitoli precedenti, come numeri, stringhe e booleani, sono
tutti immutabili: è impossibile modificare i valori di tali tipi. Puoi combinarli e
ricavare nuovi valori, ma il valore originario rimarrà sempre lo stesso, pensa ad
una stringa ad esempio, il testo al suo interno non può essere modificato. Gli
oggetti funzionano in modo diverso infatti è possibile modificarne le proprietà,
facendo sì che un singolo valore dell'oggetto abbia contenuti diversi in momenti
diversi. Così come per le stringhe, quando abbiamo due numeri possiamo
considerarli esattamente lo stesso numero, indipendentemente dal fatto che si
riferiscano o meno agli stessi bit fisici. Con gli oggetti, c'è una differenza tra
avere due riferimenti allo stesso oggetto ed avere due oggetti diversi che
contengono le stesse proprietà. Considera il seguente codice:
let prodotto1 = {articoli: 10};
let prodotto2 = prodotto1;
let prodotto3 = {articoli: 10};
console.log(prodotto1 == prodotto2);
// -> true
console.log(prodotto1 == prodotto3);
// -> false
prodotto1.articoli = 15;
console.log(prodotto2.articoli);
// -> 15
console.log(prodotto3.articoli);
// -> 10
Gli oggetti prodotto1 e prodotto2 fanno riferimento allo stesso oggetto, motivo
per cui cambiando prodotto1 si cambia anche il valore di prodotto2 infatti si dice
che hanno la stessa identità. L'oggetto prodotto3 punta a un oggetto diverso, che
inizialmente contiene le stesse proprietà di prodotto1 ma vive una vita separata.
Anche se i valori numerici non cambiano, puoi utilizzare la parola chiave let per
tenere traccia di un numero che cambia modificando il valore. Allo stesso modo,
sebbene un'associazione const a un oggetto non possa di per sé essere modificata
e continuerà a puntare allo stesso oggetto, il contenuto dell’oggetto potrebbe
cambiare.
Gli Array
Per lavorare con una serie di dati digitali, è fondamentale trovare un modo per
rappresentarli nella memoria della nostra macchina. Supponiamo, ad esempio,
che vogliamo rappresentare una raccolta dei numeri 1, 6, 7, 8 e 15. Potremmo
usare le stringhe: dopo tutto, le stringhe possono avere qualsiasi lunghezza,
quindi potrebbero contenere più dati e usare "1 6 7 8 15" come rappresentazione.
In tal avremmo bisogno anche di un modo per estrarre le cifre e riconvertirle in
numeri per accedervi. Fortunatamente, JavaScript fornisce un tipo di dati
specifico per la memorizzazione di sequenze di valori. Un array viene scritto
come un elenco di valori tra parentesi quadre, separati da virgole pertanto
possiamo usare questa rappresentazione per memorizzare i dati:
Vi è una lunga tradizione nella tecnologia e per certi versi ha senso iniziare da 0,
ma ci vuole un po' per abituarsi. Pensa all'indice come alla quantità di elementi
da saltare, contando dall'inizio dell'array. La lunghezza dell’array in questione
sarà pari a 5 perciò per accedere all’ultimo elemento potremo usare:
console.log(arrayNumeri[arrayNumeri.length-1]);
// -> 15
let somma = 0;
for (let i = 0; i < arrayNumeri.length; i++) {
somma = somma + arrayNumeri[i];
}
console.log(somma);
// -> 37
Questo tipo di ciclo è comune in JavaScript: iteri sugli elementi dell’array uno
per volta, controllando ad ogni ciclo la condizione di uscita. Tuttavia, esiste un
modo più semplice per scrivere tali cicli in JavaScript:
let somma = 0;
for (let numero of arrayNumeri) {
somma = somma + numero;
}
console.log(somma);
// -> 37
Questo tipo di ciclo for funziona non solo per gli array ma anche per le stringhe
e alcune altre strutture di dati. Tuttavia, questo tipo di ciclo non è supportato da
alcuni browser come Internet Explorer che è ancora usato in alcune aziende. Se
vuoi essere certo che il tuo programma sia compatibile proprio per tutti faresti
meglio ad usare il classico for.
Ci sono altri metodi interessanti per gli array che consentono di inserire o
rimuovere elementi. Stiamo parlando di push, shift e unshift. Immaginiamo di
avere un elenco di numeri interi che indicano le righe di un documento che
dobbiamo controllare. Ogni volta che abbiamo verificato una riga possiamo
togliere l’elemento dall’array:
JSON
Quando apri una pagina web nel tuo browser, esso recupera il testo HTML della
pagina e lo analizza. Il browser crea un modello della struttura del documento e
utilizza questo modello per disegnare la pagina sullo schermo. Questa
rappresentazione del documento è una struttura di dati che è possibile leggere o
modificare e funziona come se fosse aggiornata in tempo reale: quando la
struttura viene modificata, la pagina sullo schermo viene aggiornata per riflettere
le modifiche.
<!doctype html>
<html>
<head>
<title>Homepage</title>
</head>
<body>
<h1>Homepage</h1>
<p>Link in <a href="https://www.google.it">bio</a></p>
</body>
</html>
La struttura dei dati utilizzata dal browser per rappresentare il documento segue
questa forma: per ogni riquadro esiste un oggetto con cui possiamo interagire per
scoprire quale tag HTML rappresenta e quali "scatole" e testo contengono.
È possibile navigare tra i vari elementi che compongono la pagina proprio come
è possibile fare con i CSS. Puoi passare da un genitore ad un figlio, da un fratello
ad un altro ma se vogliamo trovare un nodo specifico nel documento, non è
consigliato raggiungerlo partendo dal document.body seguendo un percorso
fisso di proprietà. In questo modo creiamo delle assunzioni nel nostro
programma sulla struttura precisa del documento, struttura che potrebbe
cambiare in seguito. Un'altra complicazione è che i nodi di testo vengono creati
anche per lo spazio bianco tra i vari nodi. Quindi, se vogliamo ottenere l'attributo
href del link nel codice precedente, non vogliamo dire all'interprete qualcosa del
tipo "Recupera il primo figlio del secondo figlio del body del documento".
Sarebbe meglio se potessimo dire "Recupera il primo link nel documento". Per
fortuna possiamo tradurre questa frase per l’interprete:
console.log(link.href);
// -> https://www.google.it
<p>UNO</p>
<p>DUE</p>
<p>TRE</p>
let paragrafi = document.body.getElementsByTagName("p");
document.body.insertBefore(paragrafi[2], paragrafi[0]);
Un nodo può esistere nel documento in una sola posizione pertanto, inserendo il
paragrafo TRE davanti al paragrafo UNO, lo si rimuoverà dalla fine del
documento, quindi verrà inserito nella parte anteriore, la sequenza diverrà TRE /
UNO / DUE. Tutte le operazioni che inseriscono un nodo da qualche parte, come
effetto collaterale, lo rimuovono dalla sua posizione corrente (se ne ha una).
Il metodo replaceChild viene utilizzato per sostituire un nodo figlio con un altro.
Accetta come argomenti due nodi: un nuovo nodo e il nodo da sostituire. Il nodo
sostituito deve essere figlio dell'elemento su cui viene chiamato il metodo. Nota
bene che replaceChild e insertBefore si aspettano che il nuovo nodo sia il loro
primo argomento.
Stile
Abbiamo visto che diversi elementi HTML sono disegnati in modo diverso.
Alcuni aggiungono uno stile: <strong> rende più accattivante il suo contenuto
mentre <a> lo mostra in blu e lo sottolinea. Il comportamento con cui un tag
<img> mostra un'immagine o un tag <a> si aggancia ad un collegamento è
fortemente legato al tipo di elemento. È possibile, tuttavia, cambiare lo stile
associato a un elemento, come il colore del testo o la sottolineatura tramite la
proprietà style di HTML. Il codice JavaScript può manipolare direttamente lo
stile di un elemento attraverso la proprietà style dell'elemento. Questa proprietà
contiene un oggetto con proprietà per tutte le possibili proprietà di stile. I valori
di queste proprietà sono stringhe che possiamo modificare per cambiare lo stile
dell'elemento.
<button>Clicca qui</button>
<p>Il paragrafo non contiene handler</p>
<script>
let pulsante = document.querySelector("button");
pulsante.addEventListener("click", () => {
console.log("Pulsante premuto");
});
</script>
Puoi avere un effetto simile usando l'attributo onclick. Con la maggior parte dei
tipi di eventi puoi associare un gestore tramite l'attributo il cui nome è il nome
dell'evento con on davanti. Presta attenzione perché un nodo può avere solo un
attributo onclick, quindi puoi registrare un solo gestore per nodo in quel modo.
Con il metodo addEventListener puoi aggiungere un numero qualsiasi di gestori
in modo che sia sicuro aggiungere nuovi gestori anche se sull'elemento ne sono
presenti altri. Il metodo removeEventListener, chiamato con argomenti simili a
addEventListener, rimuove un gestore.
<button>Gestisci 1 click</button>
<script>
let button = document.querySelector("button");
function click1() {
console.log("Eseguito");
button.removeEventListener("click", click1);
}
button.addEventListener("click", click1);
</script>
<a href="https://www.google.it/">Link</a>
<script>
let link = document.querySelector("a");
link.addEventListener("click", event => {
console.log("Non è possibile aprire questo link");
event.preventDefault();
});
</script>
A seconda del browser, tuttavia, alcuni eventi non possono essere intercettati
affatto. Su Chrome, ad esempio, la scorciatoia da tastiera per chiudere la scheda
corrente (Ctrl+W o ⌘ +W) non può essere gestita da JavaScript.
Un caso comune di gestione degli eventi si verifica quando l'utente inserisce dei
dati nei campi di input. Quando viene premuto un tasto sulla tastiera, il browser
genera un evento keydown invece quando viene rilasciato, viene generato un
evento keyup.
Nonostante il suo nome, keydown non si attiva soltanto quando il tasto viene
fisicamente premuto. Quando si tiene premuto un tasto, l'evento si attiva
nuovamente ogni volta che il carattere si ripete perciò presta attenzione anche a
questo aspetto. Ad esempio, se si aggiunge un pulsante al DOM quando viene
premuto un tasto e lo si rimuove quando il tasto viene rilasciato, è possibile
aggiungere in modo accidentale centinaia di pulsanti quando si tiene premuto a
lungo il tasto.
Questi eventi si verificano sui nodi DOM che si trovano immediatamente sotto il
puntatore del mouse. Dopo l'evento mouseup, l'evento click si attiva sul nodo più
specifico che contiene sia la pressione che il rilascio del pulsante. Ad esempio,
se premo il pulsante del mouse su un paragrafo poi sposto il puntatore su un altro
paragrafo e rilascio il pulsante, l'evento click si verificherà sull'elemento che
contiene entrambi quei paragrafi. Se si verificano due click ravvicinati, viene
generato anche un evento dblclick (doppio clic), dopo il secondo evento click.
Per ottenere informazioni precise su dove si è verificato un evento del mouse,
puoi esaminare le sue proprietà clientX e clientY, che contengono le coordinate
dell'evento (in pixel) relative all'angolo in alto a sinistra della finestra, oppure
pageX e pageY, che sono rispettive all'angolo in alto a sinistra dell'intero
documento.
Capitolo 7
Programmazione asincrona
La parte centrale di un computer che esegue i singoli passaggi che compongono i
nostri programmi, è chiamata processore. I programmi che abbiamo visto finora
terranno occupato il processore fino a quando non avranno finito il loro compito.
La velocità con cui è possibile eseguire qualcosa come un ciclo che manipola i
numeri dipende quasi interamente dalla velocità del processore. Molti
programmi, tuttavia, interagiscono con altri fattori, esterni al processore. Ad
esempio, supponiamo di dover recuperare un file dalla rete, questo processo è
molto più lento rispetto a recuperare un file dalla memoria. Quando accade una
cosa del genere, sarebbe un peccato lasciare il processore inattivo dato che
potrebbe esserci qualche altro programma da eseguire nel frattempo. In parte,
questo è gestito dal tuo sistema operativo, che assegnerà il processore tra i vari
programmi in esecuzione ma ciò non aiuta quando vogliamo che un singolo
programma sia in grado di fare altro mentre è in attesa di una richiesta di rete.
Callbacks
setTimeout(()=>console.log("Tick"),500);
La funzione seguente accetta due parametri e una funzione di callback che viene
eseguita con l'evento onload:
Nel caso di azioni asincrone, è possibile, invece di disporre che una funzione sia
chiamata in un determinato momento nel futuro, restituendo un oggetto che
rappresenta un evento futuro. Questo è lo scopo della classe standard Promise
che indica un'azione asincrona che può risolversi ad un certo punto nel tempo e
produrre un valore. Una promise consente di avvisare chiunque sia interessato
non appena il suo valore è disponibile.
Per ottenere il risultato di una promise, puoi usare il suo metodo then. Questo
metodo registra una funzione di callback da chiamare quando la promise si
risolve e produce un valore. È possibile aggiungere più callback ad una singola
promise che verranno chiamate dopo che la promise è stata risolta (terminata). È
utile pensare alle promise come a un metodo per spostare valori in una realtà
asincrona, il valore di una promise è un valore che potrebbe già essere
disponibile o potrebbe esserlo in futuro.
Eccezioni
Le promise rendono tutto più semplice, tuttavia, perché questi problemi possono
essere risolti (l'azione è stata completata correttamente) o rifiutati (si sono
verificati degli errori). Il blocco resolve (registrato con then) viene invocato solo
quando l'azione ha esito positivo e il blocco reject viene propagato alla nuova
promise restituita da then. Quando un handler lancia un'eccezione, questo fa
automaticamente rifiutare la promise prodotta dalla sua invocazione. Quindi, se
un elemento in una catena di azioni asincrone fallisce, il risultato dell'intera
catena viene contrassegnato come rifiutato. Così come risolvere una promise
fornisce un valore, anche rifiutarne una fornisce un valore, di solito chiamato il
motivo del rifiuto. Allo stesso modo, quando un gestore restituisce una promise
che viene respinta, quel rifiuto confluisce nella promise successiva. Le promise
usano il metodo catch che registra un handler da chiamare quando la promessa
viene respinta, in modo simile a quando le richieste vanno a buon fine. Questo
meccanismo è molto simile a quello che avviene quando si restituisce una nuova
promise, che si risolve al valore della promise originale se l’esecuzione va a
buon fine. Se un gestore genera un errore, anche la nuova promise viene
respinta.
GET /
Host: google.it
User-Agent: Chrome
HTTP/1.1 200 OK
Content-Length: 65585
Content-Type: text/html
Il browser prende la parte della risposta dopo la riga vuota, detta “corpo della
risposta” (da non confondere con il tag <body> HTML) e la visualizza come
documento HTML. Le informazioni inviate dal client sono chiamate richieste ed
iniziano con questa riga:
GET /
HTTP / 1.1
La prima parola è il metodo della richiesta infatti GET specifica che vogliamo
ottenere la risorsa specificata. Altri metodi comuni sono: DELETE per eliminare
una risorsa, PUT per crearla o sostituirla e POST per inviare informazioni ad
essa. Si noti che il server non è obbligato ad eseguire tutte le richieste che riceve.
Se scegli un sito Web ed invii una richiesta DELETE per eliminare la sua pagina
principale, probabilmente rifiuterà la richiesta.
La parte dopo il nome del metodo è il percorso della risorsa a cui si applica la
richiesta. Nel caso più semplice, una risorsa è semplicemente un file sul server,
ma il protocollo non richiede che sia così.
Una risorsa può essere qualsiasi cosa che può essere trasferita come se fosse un
file. Dopo il percorso delle risorse, la prima riga della richiesta menziona HTTP /
1.1 che indica la versione del protocollo HTTP che si sta utilizzando. In pratica,
molti siti utilizzano la versione 2 di HTTP, che supporta gli stessi concetti della
versione 1.1 ma è un po' più complicato, veloce e sicuro.
HTTP/1.1 200 OK
I codici di stato che iniziano con il numero 2 indicano che la richiesta è andata a
buon fine mentre i codici che iniziano con 4 indicano qualcosa di sbagliato nella
richiesta. L'errore 404 è probabilmente il codice di stato HTTP più famoso e
significa che non è stato possibile trovare la risorsa. I codici che iniziano con 5
indicano che si è verificato un errore sul server ma la richiesta può essere valida.
Content-Length: 65585
Content-Type: text/html
In questo caso ci informa sulle dimensioni e sul tipo del documento di risposta.
Nell'esempio si tratta di un documento HTML di 65.585 byte, che è stato
modificato l'ultima volta il 29 giugno 2020. Per la maggior parte delle
intestazioni, il client e il server sono liberi di decidere se includerli in una
richiesta o risposta ma alcune sono obbligatorie, ad esempio, l'intestazione Host,
che specifica il nome dell’host. Dopo le intestazioni, sia le richieste che le
risposte possono includere una riga vuota seguita da un “corpo”, che contiene i
dati inviati. Le richieste GET e DELETE non inviano alcun dato aggiuntivo ma
le richieste PUT e POST inviano dei dati fondamentali per il loro compito. Allo
stesso modo, alcuni tipi di risposta, come le risposte agli errori, non richiedono
un corpo.
Fetch
fetch("test/data.txt").then(response => {
console.log(response.status);
// -> 200
console.log(response.headers.get("Content-Type"));
// -> text/plain
});
Conclusioni
In questo ebook abbiamo compiuto un lungo viaggio cercando di toccare tutti gli
argomenti fondamentali di JavaScript, tuttavia, per diventare un esperto in
questo linguaggio è necessaria tanto pratica. Puoi creare tantissimi programmi
lato client ma anche lato server grazie a Node.js. È anche possibile creare
un'intera applicazione client-server scritta soltanto con JavaScript, evitando tutte
quelle fastidiose conversioni per i tipi di file.
Non ti arrendere qualora dovessi riscontrare degli errori, sono opportunità per
crescere ed imparare. In tal caso leggi la descrizione e se non dovessi trovare la
soluzione, una ricerca su Google ti dirà sicuramente dove sbagli.
L'apprendimento è un lavoro duro, ma tutto ciò che impari oggi renderà più
facile l'apprendimento di domani.