Dott.Ing.Ivan Ferrazzi HTML5 Introduzione ai concetti base Dott. Ing. Ivan Ferrazzi V1.2 del 30/05/2014 1/31 Dott.Ing.Ivan Ferrazzi Copyright ©2013 Dott.Ing. Ivan Ferrazzi Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. 2/31 Dott.Ing.Ivan Ferrazzi Indice generale INTRODUZIONE....................................................................................................5 Semplificazione del DOCTYPE..........................................................................5 Omissione dei tag............................................................................................5 La sintassi dei tag............................................................................................6 La sintassi degli attributi..................................................................................6 Blocchi style e script........................................................................................6 Tag ed attributi deprecati................................................................................6 IL NUOVO CONTENT MODEL................................................................................8 Tag per definire le sezioni ...............................................................................8 Il tag <header>............................................................................................................................8 Il tag <footer>.............................................................................................................................9 Il tag <section>............................................................................................................................9 Il tag <nav>.................................................................................................................................9 Il tag <article>.............................................................................................................................9 Il tag <aside>.............................................................................................................................10 Tag per definire i titoli...................................................................................10 I tag dei titoli <h1>...<h6>........................................................................................................10 Tag aggiuntivi................................................................................................10 Il tag <mark>.............................................................................................................................10 I tag <figure> e <figcaption>....................................................................................................10 Il tag <datalist>.........................................................................................................................11 Il tag <meter>............................................................................................................................11 Il tag <progress>.......................................................................................................................11 I NUOVI ATTRIBUTI.............................................................................................13 L'attributo autofocus......................................................................................13 L'attributo placeholder...................................................................................13 L'attributo form..............................................................................................14 L'attributo required........................................................................................14 L'attributo pattern..........................................................................................14 L'attributo contenteditable............................................................................14 L'attributo hidden..........................................................................................15 L'attributo spellcheck.....................................................................................15 I NUOVI TIPI DI INPUT........................................................................................16 type=”tel”.....................................................................................................16 type=”search”...............................................................................................16 type=”url”.....................................................................................................17 type=”email”.................................................................................................17 type=”range”................................................................................................17 I CANVAS...........................................................................................................18 Le proprietà e i metodi per i canvas..............................................................19 Stile di riempimento con fillStyle.............................................................................................19 Riempimento graduale..............................................................................................................19 Riempimento a pattern..............................................................................................................20 Disegnare percorsi.....................................................................................................................21 Disegnare tratti curvi.................................................................................................................21 Disegnare testo..........................................................................................................................22 Posizionare un'immagine..........................................................................................................22 3/31 Dott.Ing.Ivan Ferrazzi SCALABLE VECTOR GRAPHICS (SVG).................................................................24 Le principali figure geometriche....................................................................25 La linea......................................................................................................................................26 Il tracciato..................................................................................................................................26 Il cerchio....................................................................................................................................26 Il poligono.................................................................................................................................26 Il rettangolo...............................................................................................................................26 L'ellisse......................................................................................................................................27 Il percorso..................................................................................................................................27 Il testo............................................................................................................28 Posizionamento assoluto...........................................................................................................28 Posizionamento relativo............................................................................................................28 Attributi per <text> e <tspan>..................................................................................................28 Testo lungo un percorso ...........................................................................................................29 Le immagini...................................................................................................29 TAG MULTIMEDIALI............................................................................................30 File video.......................................................................................................30 File audio.......................................................................................................31 4/31 Dott.Ing.Ivan Ferrazzi INTRODUZIONE Sempre più browser stanno cercando di soddisfare le direttive del HTML5. Questo tutorial vi aiuterà a capire i concetti base. Prima di iniziare con il codice vediamo quali sono le definizioni da un punto di vista di sintassi del codice. Semplificazione del DOCTYPE. Per definire il tipo di documento come HTML5 scriviamo semplicemente: <!DOCTYPE html> Omissione dei tag. In HTML5 possiamo, in alcuni casi, non indicare dei tag. Questo è possibile nel caso in cui il browser sia in grado di definire i limiti del raggio di azione del tag stesso. Una pagina HTML5 potrebbe quindi essere scritta come segue: <meta charset=”utf-8”> <title>Questa è una prova</title> <p>Questo è il contenuto della pagina</p> Come potete notare mancano i tag <html>, <head> e <body>. In questo caso il browser è in grado di identificare le appartenenze dei vari vari tag. 5/31 Dott.Ing.Ivan Ferrazzi La sintassi dei tag. In XHTML i tag vanno definiti utilizzando il minuscolo. In HTML5 li possiamo invece scrivere anche in maiuscolo. Es.: <INPUT type=”text” /> La sintassi degli attributi. Anche per gli attributi XHTML prevedeva una sintassi molto rigida. Ogni attributo doveva (per forza) avere un valore (definito tra virgolette). In HTML5 possiamo definire attributi vuoti dove possibile come segue: <INPUT type=”checkbox” checked /> L'attributo checked non ha quindi più bisogno di un valore assegnato come in XHTML. Nel caso in cui l'attributo venisse definito con un particolare valore questo lo si potrebbe scrivere con o senza virgolette (o apici), come segue: <INPUT type=checked checked /> Blocchi style e script. In questo caso HTML5 ci permette di semplificare i codice per definire i blocchi di stile o di scripting. In HTML5 possiamo infatti evitare di specificare il type=”text/css” oppure type=”text/javascript”. I due blocchi possono quindi essere definiti come segue: <style></style> <script></script> HTML5 si basa quindi su una maggiore flessibilità e semplicità, caratteristiche già note in HTML4.01. Possiamo comunque vincolare anche HTML5 alle direttive XML definendo il tag <html> come segue: <!DOCTYPE html> <html xmlns=”http://www.w3.org/1999/xhtml” xml:lang=”en”> Tag ed attributi deprecati. Le specifiche HTML5 rendono deprecati uno svariato numero di tag ed attributi. Non vengono quindi più utilizzati i tag che possono essere sostituiti dall'appropriato utilizzo dei fogli di stile, come basefont, big, center, font, s, strike, tt e u, o che sono diventati obsoleti, come acronym, applet, isindex e dir, 6/31 Dott.Ing.Ivan Ferrazzi rimpiazzati ormai da tempo da altri tag. Anche gli attributi come align, valign, background, bgcolor, cellpadding, border, cellspacing, ecc. o elementi dannosi per l'usabilità e accessibilità come frame, frameset e noframe vengono banditi dalle nuove specifiche. 7/31 Dott.Ing.Ivan Ferrazzi IL NUOVO CONTENT MODEL In HTML4.01 si utilizzavano diversi <div> per definire le varie sezioni del nostro sito web. Il più delle volte si aggiungeva l'attributo id con il relativo nome della sezione in questione. Questo rendeve molto difficile l'identificazione di determinate sezioni all'interno della pagina, perchè non esisteva una specifica globale per la definizione dei nomi da utilizzare all'interno degli id. La sezione che conteneva il menu di navigazione in alcuni casi veniva definito come id=”nav”, oppure id=”menu”, o altro ancora. In HTML5 si è cercato di porre rimedio a questo problema definendo tag diversi da utilizzare per specifiche sezioni. Ecco che entrano in scena tag come article, aside, nav, section, ecc. Tag per definire le sezioni HTML5 mette a disposizione nuovi tag che permettono di definire la tipologia di sezione che si vuole creare. All'interno di ogniuno di questi tag dovrà essere presente almeno uno dei tag che definiscono i titoli (vedi capitolo seguente) e si consiglia di posizionarli subito dopo l'apertura del tag della sezione. Questo permetterà anche a sistemi automatici di identificare in maniera precisa il titolo assegnato ad ogni sezione. Il tag <header>. Questo tag può essere utilizzato per definire l'intestazione di particolari sezioni all'interno della pagina stessa. Attenzione a non confondere questo tag con il tag <head> che identifica il blocco di intestazione dell'intera pagina. Il tag in questione va utilizzato se aumenta la comprensione (anche da un punto di 8/31 Dott.Ing.Ivan Ferrazzi vista strutturale) della sezione che stiamo creando. Es.: <header> <h1>Titolo principale</h1> <h2>Titolo secondario</h2> </header> Il tag <footer>. Così come il tag <header> anche questo tag permette di definire le informazioni di piè di pagina all'interno di una sezione ben definita. Possiamo utilizzare questo tag per definire il piè di pagina dell'intera pagina o di sezioni particolari. Il tag <section>. Questo tag viene utilizzato per definire delle sezioni generiche all'interno della struttura concettuale del sito. Questo non deve però in nessun caso sostituire l'utilizzo dei <div> nella definizione della struttura grafica del sito. Ogni sezione che contiene determinati elementi può essere definita utilizzando il tag <section>. Un contenitore che all'interno del sito visualizza l'elenco degli articoli di un blog, oppure l'elenco di articoli messi in vendita, può essere definito con il tag in question. Es. <section> <h1>Elenco degli articoli:</h1> <article> … </article> <article> … </article> … </section> Il tag <nav>. Questo blocco permette di identificare con esattezza il menu di navigazione messo a disposizione all'interno del sito. Ogni menu di navigazione orizzontale, oppure verticale verrà inserito all'interno di questo blocco. Sarà quindi possibile identificare in maniera automatica la o le sezioni che contengono i link ad altre parti del sito. Es.: <nav> <h1>Navigazione:</h1> <ul> <li>Chi siamo</li> … </ul </nav> Il tag <article>. Questo tag permette di definire sezioni autonome all'interno del proprio sito. Queste sezioni potrebbere essere riprese all'interno di altri siti, oppure 9/31 Dott.Ing.Ivan Ferrazzi all'interno di altre sezioni del nostro sito. Es. <article> <header> <h1>Art. 1515 – Titolo dell'articolo</h1> </header> <p>Descrizione dell'articolo</p> </article> Il tag <aside>. Possiamo utilizzare questo tag per definire delle sezioni che contengono delle informazioni marginali (o aggiuntive) in base al proprio contenitore che lo contiene. Tag per definire i titoli. Tutti i tag definiti all'interno di questa sezione permettono di aggiungere un titolo ad una delle sezioni definite con i tag precedentemente citati. I tag dei titoli <h1>...<h6> Questi tag dovrebbero essere già noti perchè comunque già disponibili nella versione HTML4.01. Ricordiamoci di utilizzare questi tag per definire i titoli delle varie sezioni che definiamo all'interno del nostro sito web. Tag aggiuntivi. In questa sezione identifichiamo alcuni dei tag che sono stati aggiunti per definire determinate parti della struttura o del codice. Il tag <mark>. Questo tag viene utilizzato per marcare in particolare porzioni di testo all'interno di un blocco. Es.: <p>Il nome <mark>Pinco Palla</mark> deriva dal...</p> I tag <figure> e <figcaption>. Questi due tag permettono di identificare delle sezioni contenenti delle immagini con relativa didascalia. Es.: <figure> <img src=”foto.jpg” alt=”articolo2” /> <figcaption> Foto dell'articolo 2 </figcaption> </figure> 10/31 Dott.Ing.Ivan Ferrazzi Il tag <datalist>. Questo tag ci permette di combinare le funzionalità del tag <select> e <input> di tipo testo. Possiamo scegliere l'elemento desiderato da una lista di opzioni, ma abbiamo anche la possibilità di inserire nuove opzioni scrivendole direttamente. Per attivare il tag datalist dobbiamo prima definire un campo input al quale poi verrà abbinato il datalist in questione. Per abbinare l'input al datalist utilizziamo l'attributo list. Es.: <input type="text" name="stato" list="elenco_stati" /> <datalist id="elenco_stati"> <option value="Italia"> <option value="Germania"> <option value="Austria"> <option value="Svizzera"> </datalist> Il tag <meter>. Questo tag ci permette di creare una barra grafica per indicare lo stato di una determinata cosa, come ad esempio lo spazio usato su disco fisso, l'attuale stato di avanzamento di un determinato lavoro a lungo termine, ecc. Si consiglia di non utilizzare questo tag per la visualizzazione di uno stato di avanzamento dinamico, come stato di avanzamento di download, oppure di elaborazione dinamica. Gli attributi che possiamo utilizzare sono min, max e value, dove min definisce il valore iniziale della barra, max il valore e finale e value il valore attuale di visualizzazione. <meter min=”0” max=”100” value=”75”></meter> E possibile lasciare via gli attributi min e max e definire lo stato attuale in percentuale con value compreso tra 0 e 1 come segue: <meter value=”0.75”></meter> Il tag <progress>. Questo tag ci permette di visualizzare una barra grafica che indica lo stato di avanzamento dinamico, come ad esempio lo stato di avanzamento di un download oppure di un'elaborazione dinamica. Non utilizzare questo tag per visualizzare informazioni statiche, come ad esempio lo spazio disponibile su disco fisso ecc. Questo tag mette a disposizione gli attributi max e value, dove max indica il valore da raggiungere ad elaborazione finita e value il valore di elaborazione attuale. <progress max=”100” value=”75”></progress> E possibile lasciare via l'attributo max e definire lo stato attuale in percentuale con value compreso tra 0 e 1 come segue: 11/31 Dott.Ing.Ivan Ferrazzi <progress value=”0.75”></progress> 12/31 Dott.Ing.Ivan Ferrazzi I NUOVI ATTRIBUTI In HTML4.01 uno dei più grandi problemi è la validazione di determinati contenuti all'interno di un form, oppure la gestione di determinati eventi. Per far fronte alle varie richiesta bisogna integrare codice Javascript in grado di effettuare i dovuti controlli. In HTML5 si è cercato di riprendere le situazioni più utilizzate per riuscire a definire quanto più possibili con l'apporto di determinati attributi direttamente all'interno dei tag in questione. Vediamo nelle seguenti pagine quali sono i nuovi attributi che HTML5 mette a disposizione. L'attributo autofocus. Questo attributo permette di posizionare il focus all'interno di un determinato campo presente sulla pagina. Se l'attributo in questione viene definito all'interno di vari elementi verrà preso in considerazione l'ultimo elemento inserito. Es.: <input type=”text” name=”cognome” autofocus /> L'attributo placeholder. Il valore assegnato mediante questo attributo verrà visualizzato all'interno del campo di inserimento testo o del textarea fino a quando il cursore non verrà posizionato al suo interno. In questo caso la stringa definita verrà cancellata permettendo l'inserimento del valore richiesto. Es.: 13/31 Dott.Ing.Ivan Ferrazzi <input type=”text” name=”cognome” placeholder=”inserire il cognome” /> L'attributo form. Con l'aiuto di questo attributo possiamo assegnare dei tag <input> ad uno specifico <form> anche se questo è stato definito all'esterno di esso. Es.: <form id=”modulo” action=”...” method=”post”> <input type=”text” name=”cognome” /> <input type=”submit” /> </form> <input type=”text” name=”nome” form=”modulo” /> L'attributo required. Questo attributo permette di definire gli elementi obbligatori all'interno di un form di compilazione. I campi verranno verificato al momento del submit. Es.: <input type=”text” name=”cognome” required /> L'attributo pattern. Per controllare la sintassi di un valore inserito all'interno di un campo di testo fino ad ora era indispensabile l'utilizzo di Javascript. Questo attributo ci da la possibilità di definire mediante espressioni regolari l'esatta struttura del valore da aggiungere. Es.: <input type=”text” name=”nickname” pattern=”[a-z]{1}[a-z_]{2,19}” /> In questo caso il nickname deve essere composto da almeno 20 caratteri minuscoli, oppure “_”, dove quest'ultimo non può essere utilizzato come primo elemento. La lunghezza minima da inserire è pari a 3. L'attributo contenteditable. Questo attributo permette di rendere editabile l'elemento HTML in questione. Attiviamo questa proprietà assegnando il valore true e la spegnamo mediante il valore false. Es.: <p contenteditable=”true”>Provate a modificare questo testo.</p> 14/31 Dott.Ing.Ivan Ferrazzi L'attributo hidden. Questo attributo va a sostituire lo stile in linea “display:none”. Es.: <div hidden>Questo testo non si vede più</div> L'attributo spellcheck. Questo attributo abilita o disabilità il controllo di sintassi. Attiviamo questa proprietà assegnando il valore true e la spegnamo mediante il valore false. Es.: <div spellcheck>Questo testo è da controllare</div> 15/31 Dott.Ing.Ivan Ferrazzi I NUOVI TIPI DI INPUT I dati che vengono richiesti direttamente dall'utente che compila un form sono bene o male sempre gli stessi. Per questo motivo HTML5 mette a disposizione alcuni tipi di input in più che permettono di definire la sintassi del valore da inserire. type=”tel” Questo tipo di input mette a disposizione il campo per l'inserimento di un numero di telefono. Su alcuni dispositivi mobile questo campo attiva un pannello appositamente creato per l'inserimento di numeri di telefono (simile alla tastiera numerica di un telefono). Es.: <input type=”tel” name=”telefono” /> type=”search” Questo campo nella maggior parte dei casi è uguale ad un campo di inserimento testo. Anche questo è un campo libero svincolato da un pattern di default. Es.: <input type=”search” name=”cerca” /> 16/31 Dott.Ing.Ivan Ferrazzi type=”url” Questo tipo di input permette l'inserimento di una url. Anche per questo campo alcuni dispositivi mobile mettono a disposizione un pannello dedicato all'inserimento di valori url. Es.: <input type=”url” name=”www” /> type=”email” Questo tipo di input mette a disposizione un campo che permette l'inserimento di indirizzi email. Anche per questo campo alcuni dispositivi mobile mettono a disposizione un pannello dedicato. Es.: <input type=”email” name=”email” /> type=”range” Questo tipo di input mette a disposizione un elemento che permette di scegliere un valore numerico tra un valore minimo ( min) e un valore massimo (max) con una determinata distanza tra una tacca e l'altra ( step). L'attuale valore può essere definito con l'attributo value. Es.: <input type=”range” min=”0” max=”10” step=”2” value=”8” /> 17/31 Dott.Ing.Ivan Ferrazzi I CANVAS Un canvas è un contenitore messo a disposizione da HTML5 per effettuare dei disegni “al volo” utilizzando un linguaggio script come ad esempio JavaScript. Come prima cosa dobbiamo definire quindi lo spazio che vogliamo utilizzare come superficie di disegno. Per fare questo utilizziamo il tag <canvas> all'interno del quale dobbiamo definire l'attributo id che ci permetterà di riconoscere l'elemento direttamente da JavaScript. <canvas id=”canvas” width=”400” height=”400”></canvas> Poi possiamo passare al codice JavaScript dove come prima cosa dobbiamo creare l'oggetto dal nostro canvas in questione con var canvas = document.getElementById(“canvas”); Una volta creato l'oggetto dobbiamo recuperare la superficie di disegno. In questo caso usiamo il metodo getContext() con il quale recuperiamo la superficie 2D del nostro oggetto canvas come segue var context = canvas.getContext(“2d”); L'oggetto context creato dalla superficie del nostro canvas mette ora a disposizione una serie di proprietà e metodi con i quali saremo in grado di disegnare all'interno dello spazio messo a disposizione. Nel prossimo esempio vediamo la proprietà fillStyle, che permette di definire il colore di riempimento, e fillRect, che permette di disegnare un rettangolo colorato utilizzando proprio il colore definito con fillStyle. 18/31 Dott.Ing.Ivan Ferrazzi <html> <head> <title>Prova Rettangolo</title> <meta charset=”utf-8” /> </head> <body> <canvas id=”canvas” width=”400” height=”400”></canvas> <script> var canvas = document.getElementById(“canvas”); var context = canvas.getContext(“2d”); context.fillStyle = “#00ff00”; context.fillRect(50,50,100,100); </script> </body> </html> Le proprietà e i metodi per i canvas Il linguaggio JavaScript mette a disposizione una serie di proprietà e metodi che possiamo utilizzare su una superficie di disegno. Vediamo qui di seguito quelli più utilizzati: Stile di riempimento con fillStyle Questa proprietà permette di definire lo stile da utilizzare come riempimento dei vari oggetti grafici. Possiamo definire lo stile utilizzando tre modi diversi: color gradient pattern è possibile definire un colore CSS, ossia come valore esadecimale (#ff0000), con il relativo nome del colore ( red), oppure utilizzando la funzione rgb ( rgb(255,0,0) ) è possibile utilizzare un riempimento graduale lineare ( getLinearGradient() ) oppure circolare ( getRadialGradient() ) è possibile definire come elemento di riempimento un'immagine impostando poi una serie di funzioni che ne definiscono il comportamento Riempimento graduale Per definire un riempimento graduale lineare usiamo createLinearGradient() messo a disposizione dall'oggetto context canvas. La sintassi di questo metodo è la seguente: il metodo del nostro var grad = context.createLinearGradient(x0,y0,x1,y1); dove x0 e y0 identificano le coordinate del punto di partenza dell'effetto, mentre x1 e y1 ne identificano il punto di arrivo. Questo oggetto mette a disposizione il metodo addColorStop() che permette di indicare quale colore utilizzare fino a che punto dell'effetto in questione. La sintassi di questo metodo è 19/31 Dott.Ing.Ivan Ferrazzi grad.addColorStop(stop,color); dove stop è un valore decimale compreso tra 0 e 1 che determina fino a che punto va utilizzato il colore definito con color. Vediamo il seguente esempio: var canvas = document.getElementById(“canvas”); var context = canvas.getContext(“2d”); var grad = context.createLinearGradient(0,0,170,0); grad.addColorStop(0,”black”); grad.addColorStop(0.5,”green”); grad.addColorStop(1,”yellow”); context.fillStyle = grad; context.fillRect(0,0,170,100); Per definire un riempimento graduale circolare usiamo createRadialGradient() messo a disposizione dall'oggetto context canvas. La sintassi di questo metodo è la seguente: il metodo del nostro var grad = context.createRadialGradient(x0,y0,r0,x1,y1,r1); dove x0 e y0 identificano le coordinate del punto di partenza dell'effetto con il relativo raggio r0, mentre x1 e y1 ne identificano il punto di arrivo con il relativo raggio r1. Anche questo oggetto mette a disposizione il metodo addColorStop() che permette di indicare quale colore utilizzare fino a che punto dell'effetto in questione. var canvas = document.getElementById(“canvas”); var context = canvas.getContext(“2d”); var grad = context.createLinearGradient(85,50,5,85,50,100); grad.addColorStop(0,”green”); grad.addColorStop(1,”white”); context.fillStyle = grad; context.fillRect(0,0,170,100); Riempimento a pattern Questo tipo di riempimento ci permette di utilizzare un'immagine e definirne poi il comportamento di riempimento. Il metodo in grado di creare un riempimento simile è il createPattern() con la seguente sintassi: var pat = context.createPattern(img,direction); dove img identifica l'immagine che vogliamo utilizzare, mentre direction permette di utilizzare una delle seguenti direzioni di riempimento: repeat, repeat-x, repeat-y, oppure no-repeat. Vediamo un semplice esempio: <html> <head> <title>Prova Pattern</title> <meta charset=”utf-8” /> </head> <body> 20/31 Dott.Ing.Ivan Ferrazzi <img id=”id_img” src=”image.png” /> <canvas id=”canvas” width=”400” height=”400”></canvas> <script> var img = document.getElementById(“id_img”); var canvas = document.getElementById(“canvas”); var context = canvas.getContext(“2d”); var pat = context.createPattern(img,”repeat”); context.fillStyle = pat; context.fillRect(50,50,100,100); </script> </body> </html> Disegnare percorsi Per disegnare un percorso all'interno di un cavas definiamo il punto di partenza con il metodo moveTo() per poi spostarci di punto in punto con lineTo(). Una volta definito l'intero percorso che vogliamo disegnare dobbiamo confermare il tutto con stroke() in maniera tale da visualizzare effettivamente quanto voluto. var canvas = document.getElementById(“canvas”); var context = canvas.getContext(“2d”); context.moveTo(100,10); context.lineTo(150,110); context.lineTo(50,110); context.lineTo(100,10); context.stroke(); Disegnare tratti curvi Per disegnare dei tratti curvi possiamo usare il metodo arc() che utilizza il seguente formato: context.arc(x,y,r,start,stop); dove x e y identificano le coordinate interne e r la distanza dal punto di partenza dove si inizierà a disegnare. Il punto di inizio start è un valore compreso tra 0 e 6.28 ( 2 x PI ) dove il valore 0 parte alla coordinata (x + r, y). Il punto di fine corsa stop è un valore compreso tra 0 e 6.28 (2 x PI) e identifica fino a dove disegnare la linea curva. La linea verrà disegnata dal punto di partenza al punto di fine corso in senso orario. Per raggruppare più elemento all'interno dello stesso percorso utilizziamo il metodo beginPath() e confermiamo l'effettiva scrittura con stroke() come segue: var canvas = document.getElementById(“canvas”); var context = canvas.getContext(“2d”); context.beginPath(); context.arc(100,100,50,0,2*Math.PI); context.stroke(); 21/31 Dott.Ing.Ivan Ferrazzi Disegnare testo Per disegnare del testo all'interno del nostro canvas dobbiamo come prima cosa definire le proprietà del font con font per poi poter scrivere un testo riempito ( fillText() ) oppure senza riempimento ( strokeText() ). La sintassi utilizzata è la seguente: context.font = “font-style font-variant font-weight font-size font-family”; context.fillText(text,x,y); context.strokeText(text,x,y); Nei metodi fillText() e strokeText() il parametro text identifica il testo che vogliamo scrivere, mentre x e y ne identificano le coordinate di posizionamento dell'angolo in basso a sinistra. var canvas = document.getElementById(“canvas”); var context = canvas.getContext(“2d”); context.font=”italic small-caps bold 30px Arial”; context.fillText(“Hello World”,0,30); Posizionare un'immagine Per posizionare un'immagine all'interno di un canvas possiamo utilizzare il metodo drawImage(). La sintassi più semplice che possiamo utilizzare è: context.drawImage(img,x,y); dove img identifica l'immagine che vogliamo inserire, mentre x e y le coordinate di posizionamento dell'angolo in alto a sinistra. Esempio: var img = new Image(); img.src = 'image.png'; var canvas = document.getElementById(“canvas”); var context = canvas.getContext(“2d”); img.onload = function() { context.drawImage(img,10,10); } La proprietà onload permette di attendere il completo caricamento dell'immagine prima di inserirla nel canvas. Il metodo drawImage() mette a disposizione una sintassi in grado di definire anche l'altezza e la larghezza dell'immagine da inserire: context.drawImage(img,x,y,width,height); Oppure possiamo definire una clip di visualizzazione se non vogliamo mostrare l'intera immagine con context.drawImage(img,sx,sy,swidth,sheight,x,y,width,height); 22/31 Dott.Ing.Ivan Ferrazzi dove sx, sy, swidth e sheight permetto di definire la clip di visualizzazione. 23/31 Dott.Ing.Ivan Ferrazzi SCALABLE VECTOR GRAPHICS (SVG) VG viene usato per sfruttare la grafica vettoriale all'interno del Web e viene definito con un formato XML. Il tag che utilizziamo è <svg></svg> e al suo interno va definito il tipo di XML e la versione da utilizzare: <svg xmlns=”http://www.w3.org/2000/svg” version=”1.1”></svg> I parametri XML vengono messi direttamente all'interno del tag <svg> come nel seguente esempio: <svg xmlns=”http://www.w3.org/2000/svg” version=”1.1” width=”200” height=”200”> <polygon points=”100,10 150,110 50,110 100,10” style=”fill:blue;stroke:lightblue;stroke-width:10px;fill-rule:evenodd;” /> <text x=”45” y=”135” style=”fill:black;font-family:verdana;font-size:20px;”>Il triangolo</text> </svg> L'unità di misura di default per le dimensioni width e height del tag <svg> è pixel, ma è possibile utilizzare anche altre unità di misura come ad esempio em, ex, px, pt, pc, cm, mm e %. SVG ci permette di disegnare in vettoriale e proprio per questo motivo ci viene data anche la possibilità di definire le proporzioni di visualizzazione a piacimento. Nel tag <svg> abbiamo a disposizione l'attributo viewBox che ci permette di definire un nuovo sistema di coordinamento dello spazio messo a disposizione. L'esempio precedente mette a disposizione una tela di 24/31 Dott.Ing.Ivan Ferrazzi dimensione 200px x 200px, ma possiamo diminuire l'immagine riprodotta aumentando il numero di pixel all'interno dello stesso riquadro come segue: <svg xmlns=”http://www.w3.org/2000/svg” version=”1.1” width=”200” height=”200” viewBox=”0 0 400 400”> <polygon points=”100,10 150,110 50,110 100,10” style=”fill:blue;stroke:lightblue;stroke-width:10px;fill-rule:evenodd;” /> <text x=”45” y=”135” style=”fill:black;font-family:verdana;font-size:20px;”>Il triangolo</text> </svg> L'attributo viewBox si aspetta i parametri x1, y1, x2 e y2 separati da uno spazio per definire il nuovo punto in alto a sinistra e quello in basso a destra dell'attuale riquadro. E' possibile creare anche un file SVG esterno che possiamo importare utilizzando il tag <object> oppure <embed>. Il file che creiamo deve avere la seguente forma: <?xml version=”1.0” encoding=”utf-8” standalone=”no”?> <!DOCTYPE svg PUBLIC “-//W3C//Dtd SVG 1.1//EN” “http://www.w3.org/Graphics/SVG/1.1/Dtd/svg11.dtd”> <svg width=”200” height=”200” version=”1.1” xmlns=”http://www.w3.org/2000/svg”> ... </svg> Come possiamo notare definiamo il file come file XML nella prima riga, mentre nella seconda dobbiamo definire il tipo di documento che stiamo utilizzando. Dopo aver salvato il file con il nome file.svg lo possiamo inserire all'interno della nostra pagina con <object width=”200” height=”200” data=”file.svg” type=”image/xml+svg”> SVG non supportato! Scaricare i plugin! </object> oppure con <embed src=”file.svg” width=”200” height=”200” type=”image/xml+svg”> In entrambi i casi la cosa importante è definire in maniera corretta il MIME TYPE, ossia image/xml+svg. Le principali figure geometriche Vediamo ora il codice XML per riprodurre le principali figure geometriche all'interno del nostro tag <svg> 25/31 Dott.Ing.Ivan Ferrazzi La linea Per disegnare una linea usiamo <line x1=”20” y1=”20” x2=”100” y2=”100” style=”stroke:green” /> Gli attributi x1, y1, x2 e y2 identificano le coordinate di inizio e fine punto. Il tracciato Per disegnare un tracciato usiamo <polyline points=”100,10 150,110 50,110 100,10” style=”stroke:green;” /> L'attributo points contiene i vari punti di unione x,y separati da uno spazio. Il cerchio Per disegnare un cerchio usiamo <circle cx=”100” cy=”100” r=”50” style=”stroke:green;fill:yellow;” /> Gli attributi cx e cy identificano le coordinate del punto al centro del cerchio, mentre r permette di specificare il raggio da utilizzare. Il poligono Per disegnare un poligono usiamo <polygon points=”100,10 150,110 50,110” style=”stroke:green;fill:yellow;” /> Questo elemento è simile al tracciato con l'unica differenza che con il poligono non è possibile creare un tracciato aperto, ossia il primo e l'ultimo punto verranno sempre chiusi da una linea. Il rettangolo Per disegnare un rettangolo usiamo <rect x=”20” y=”20” rx=”5” ry=”5” width=”200” height=”200” style=”fill:blue;” /> Gli attributi x e y definiscono il punto di partenza, mentre width e height rispettivamente la larghezza e l'altezza del rettangolo. Gli attributi rx e ry, se diversi da 0, definiscono l'arrotondamento degli angoli. 26/31 Dott.Ing.Ivan Ferrazzi L'ellisse Per disegnare un'ellisse usiamo <ellipse cx=”100” cy=”100” rx=”40” ry=”80” style=”fill:blue;” /> Gli attributi cx e cy definiscono il centro dell'ellisse, mentre rx e ry rispettivamente il raggio utilizzato per l'asse x e y. Il percorso Per disegnare un percorso usiamo <path d=”M10,10 L150,100 L100,150 Z” style=”fill:blue;” /> L'attributo d permette di definire una serie di codici separati da spazio in grado di aiutarci nel disegnare il nostro percorso. I codici che possiamo utilizzare sono: Mx,y Lx,y Z Hx Vy Cx1,y1 x2,y2 x,y Sx2,y2 x,y Qx1,y1 x,y Tx,y Permette di definire il punto di partenza per il nostro percorso. Permette di unire l'ultimo punto inserito con quello definito. Permette di unire l'ultimo punto inserito con il punto di partenza. Permette di unire l'ultimo punto con un punto spostato sull'asse x (ossia orizzontalmente). Permette di unire l'ultimo punto con un punto spostato sull'asse y (ossia verticalmente). Permette di creare una linea curva dall'ultimo punto inserto al punto x,y utilizzando il punto x1,y1 come direzione per la curva di partenza ed il punto x2,y2 come direzione per la curva di arrivo. Permette di creare una linea curva cubica dall'ultimo punto inserito al punto x,y utilizzando il punto x2,y2 come direzione per la curva di arrivo. La direzione della curva in partenza è simmetrica al secondo punto definito all'interno del comando precedente. Permette di creare una linea curva quadratica dall'ultimo punto inserito al punto x,y utilizzando il punto x1,y1 come parametro di controllo. Permette di creare una linea curva quadratica dall'ultimo punto inserito al punto x,y utilizzando come parametro di controllo il valore simmetrico del punto di controllo del comando precedente. 27/31 Dott.Ing.Ivan Ferrazzi Il testo Vediamo ora il codice XML per l'inserimento di testo all'interno del nostro tag <svg> Posizionamento assoluto Quando inseriamo del testo abbiamo la possibilità di definire il punto x,y all'interno del quale verrà inserito l'angolo in basso a sinistra del nostro testo. Il tag XML che utilizziamo è il seguente <text x=”20” y=”20”>Ciao a tutti</text> dove gli attributi x e y permetto di definire il punto di inserimento. Posizionamento relativo Per non inserire ogni volta le coordinate assolute per il posizionamento del testo possiamo utilizzare un riferimento relativo. In questo caso utilizziamo il seguente tag XML <tspan dx=”20” dy=”20”>Ciao</tspan> In questo caso gli attributi dx e dy permettono di definire lo spostamento in relazione agli ultimi valori x e y utilizzati. E' comunque possibile utilizzare anche gli attributi x e y per combinare il posizionamento relativo con quello assoluto. Attributi per <text> e <tspan> All'interno di entrambi i tag possiamo inserire i seguenti attributi che ci permettono di formattare il testo a dovere: font-family font-size font-style font-weight text-decoration fill stroke text-anchor baseline-shift letter-spacing word-spacing Permette di definire il font da utilizzare per il testo. Per la dimensione del testo. Permette di definire lo stile (italic, oblique, normal). Permette lo spessore del testo (normal, bold, ecc.). Permette di definire l'aspetto del testo (normal, underline, line-through, ecc.). Permette di definire il colore interno della scritta. Permette di definire il colore del bordo della scritta. Permette di definire l'allineamento del testo (start, middle, end). Permette di definire il testo come apice o pedice (super, sub). Permette di definire lo spazio tra i caratteri. Permette di definire lo spazio tra le parole. 28/31 Dott.Ing.Ivan Ferrazzi Questi attributi possono essere definiti anche come elenco CSS all'interno dell'attributo style. Questo attributo aumenta le proprietà di stile che possiamo utilizzare. Si aggiungono in fatti: opacity fill-rule stroke-width stroke-dasharray stroke-linecap stroke-linejoin display Permette di definire il livello di opacità. Permette di definire la regola di riempimento, molto comodo quando disegniamo un percorso. I valori possibili sono nonzero (viene riempita l'intera area) e evenodd (viene riempita l'area esterna, mentre quelle interne rimangono vuote). Permette di definire lo spessore della linea di disegno. Permette di definire lo stile della linea di disegno. Permette di definire il simbolo da usare per gli estremi della linea. I valori possibili sono butt, round oppure square. Permette di definire il come disegnare l'intersezione tra due linee. I valori possibili sono miter, round oppure bevel. Permette di definire la visibilità dell'elemento (none oppure inline). Testo lungo un percorso E' possibile definire un percorso sopra il quale si fa scorrere un determinato testo. Come prima cosa dobbiamo definire il percorso con path, il testo con text, ed infine, dobbiamo definire il posizionamento del testo sul percorso con textPath. Per funzionare è necessario l'utilizzo del namespace xlink. Ecco perché è fondamentale dichiararlo all'interno del tag <svg>. Vediamo il seguente esempio: <svg width=”200” height=”200” xmlns:xlink=”http://www.w3.org/1999/xlink”> <path id=”percorso” d=”M10,10 L150,100 L100,150 Z” style=”fill:blue;” /> <text style=”font-family:Verdana; font-size:12px; fill:blue;”> <textPath xlink:href=”#percorso”> Questo è il testo! </textPath> </text> </svg> Le immagini I formati delle immagini supportati da SVG sono PNG e JPEG. Anche qui è fondamentale l'utilizzo del namespace xlink. Vediamo il seguente esempio: <svg width=”200” height=”200” xmlns:xlink=”http://www.w3.org/1999/xlink”> <image x=”0” y=”0” width=”100” height=”100” xlink:href=”image.png” /> </svg> 29/31 Dott.Ing.Ivan Ferrazzi TAG MULTIMEDIALI HTML5 mette a disposizione dei tag multimediali per la riproduzione di file audio e video, integrando già una serie di codec compatibili. File video Il tag che permette di riprodurre dei video è <video>. Attualmente sono supportati tre tipi di formati video, ossia MP4, WebM e Ogg, anche se non tutti sono compatibili con tutti i browser attualmente disponibili. <video width=”320” height=”240” controls> <source src=”video.ogg” type=”video/ogg” /> Attenzione! I video non sono supportati! </video> Gli attributi che possiamo utilizzare con questo tag sono: autoplay controls height loop muted poster La riproduzione del video parte subito automaticamente. Mette a disposizione un pannello di controllo. Definisce l'altezza del riquadro messo a disposizione per la riproduzione del video. Il video verrà riprodotto all'infinito. Il video verrà riprodotto senza audio. Permette di definire un'immagine da visualizzare quando il video non viene riprodotto. L'immagine viene 30/31 Dott.Ing.Ivan Ferrazzi src width inserita come percorso url. Indica il file video. Definisce la larghezza del riquadro messo a disposizione per la riproduzione del video. File audio Il tag che permette di riprodurre dei file audio è <audio>. Attualmente sono supportati tre tipi di formati audio, ossia MP3, WAV e Ogg, anche se non tutti sono compatibili con tutti i browser attualmente disponibili. <audio controls> <source src=”audio.ogg” type=”audio/ogg” /> Attenzione! Gli audio non sono supportati! </audio> Gli attributi che possiamo utilizzare con questo tag sono: autoplay controls loop muted src La riproduzione audio parte subito automaticamente. Mette a disposizione un pannello di controllo. L'audio verrà riprodotto all'infinito. Il file verrà riprodotto senza audio. Indica il file audio. 31/31