<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Howtoweb.it &#187; Tutorial</title>
	<atom:link href="http://www.howtoweb.it/category/tutorial/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.howtoweb.it</link>
	<description>Tutorial e risorse per chi lavora sul web</description>
	<lastBuildDate>Mon, 14 Mar 2011 16:57:22 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.5</generator>
		<item>
		<title>Rotazioni crossbrowser con CSS3</title>
		<link>http://www.howtoweb.it/tutorial/rotazioni-crossbrowser-con-css3/</link>
		<comments>http://www.howtoweb.it/tutorial/rotazioni-crossbrowser-con-css3/#comments</comments>
		<pubDate>Mon, 14 Mar 2011 12:00:22 +0000</pubDate>
		<dc:creator>Mauro Accornero</dc:creator>
				<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[CSS3]]></category>
		<category><![CDATA[web design]]></category>

		<guid isPermaLink="false">http://www.howtoweb.it/?p=777</guid>
		<description><![CDATA[In questo articolo vediamo come ottenere rotazioni compatibili con la maggior parte dei browser, su questa pagina è presente una demo della soluzione proposta. Rotazione con CSS3 Grazie alla proprietà transform che si occupa delle trasformazioni bidimensionali è possibile definire &#8230; <a href="http://www.howtoweb.it/tutorial/rotazioni-crossbrowser-con-css3/">Continua a leggere<span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.howtoweb.it/wp-content/uploads/2011/03/rotate1.jpg"><img class="alignnone size-full wp-image-788" title="rotate" src="http://www.howtoweb.it/wp-content/uploads/2011/03/rotate1.jpg" alt="" width="580" height="200" /></a></p>
<p>In questo articolo vediamo come ottenere rotazioni compatibili con la maggior parte dei browser, su questa pagina è presente una <a href="http://www.howtoweb.it/wp-content/uploads/rotate_css/rotate_css.html" target="_blank">demo della soluzione proposta</a>.</p>
<h3>Rotazione con CSS3</h3>
<p>Grazie alla proprietà transform che si occupa delle trasformazioni  bidimensionali è possibile definire rotazioni customizzate per i vari  elementi della pagina.</p>
<pre>transform: rotate(7.5deg)</pre>
<p>La sintassi è molto semplice:</p>
<pre>proprietà: funzione(valore)</pre>
<p>come eneunciato nelle <a href="http://www.w3.org/TR/css3-2d-transforms/" target="_blank">specifiche di trasformazione bisimensionale dei CSS3</a> presenti sul sito del W3C.</p>
<h3>Ampliare il supporto ai vari browser</h3>
<p>Per ampliare il supporto di questa proprietà è possibile utilizzare la stessa sintassi ma dedicata ai singoli browser/motori di rendering.</p>
<pre>transform: rotate(7.5deg);
/*generica*/
-webkit-transform: rotate(7.5deg);
/* CHROME/SAFARI*/
-moz-transform: rotate(7.5deg);
/* FIREFOX/MOZILLA */
-o-transform: rotate(7.5deg);
/* OPERA */
-ms-transform: rotate(7.5deg);
/* IE 9 */</pre>
<h3>Ampliare il supporto a Internet Explorer precendenti al 9</h3>
<p>Come notiamo manca un supporto per Internet Explorer precedenti alla versione 9, per colmare questa lacuna è possibile utilizzare due filter predisposti da Microsoft a questo scopo: <a href="http://msdn.microsoft.com/en-us/library/ms532972%28v=vs.85%29.aspx" target="_blank">Basic Image</a> e <a href="http://msdn.microsoft.com/en-us/library/ms533014%28v=vs.85%29.aspx" target="_blank">Matrix</a>.</p>
<h3>Basic Image</h3>
<p>Con il <a href="http://msdn.microsoft.com/en-us/library/ms532972%28v=vs.85%29.aspx" target="_blank">filter Basic Image</a> è possibile definire 3 tipi di rotazione per un elemento: 90°,180° e 270° settando la proprietà rotation rispettivamente a 1, 2 o 3.</p>
<pre>filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=0);/*ie5.5/7*/
-ms-filter: 'progid:DXImageTransform.Microsoft.BasicImage(rotation=0)';/*ie8*/
/* nessuna rotazione*/
filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1);/*ie5.5/7*/
-ms-filter: 'progid:DXImageTransform.Microsoft.BasicImage(rotation=1)';/*ie8*/
/* rotazione di 90°*/
filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2);/*ie5.5/7*/
-ms-filter: 'progid:DXImageTransform.Microsoft.BasicImage(rotation=2)';/*ie8*/
/* rotazione di 180°*/
filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3);/*ie5.5/7*/
-ms-filter: 'progid:DXImageTransform.Microsoft.BasicImage(rotation=3)';/*ie8*/
/* rotazione di 270°*/</pre>
<h3>Matrix</h3>
<p>Il limite della poprietà Basic Image è rappresentato dal fatto di offrire solo 3 tipi di rotazione e nessun tipo di rotazione custom. Per ottenere un maggiore controllo è allora possibile utilizzare il <a href="http://msdn.microsoft.com/en-us/library/ms533014%28v=vs.85%29.aspx" target="_blank">filter Matrix</a>, che si occupa della trasformazione bidimensionale di un elemento (come la proprietà transform dei css3).</p>
<pre>filter: progid:DXImageTransform.Microsoft.Matrix(
       M11=0.9914448613738104,
       M12=-0.13052619222005157,
       M21=0.13052619222005157,
       M22=0.9914448613738104, sizingMethod='auto expand');
       zoom: 1;   /* IE 5.5-7*/
-ms-filter: 'progid:DXImageTransform.Microsoft.Matrix(
       M11=0.9914448613738104,
       M12=-0.13052619222005157,
       M21=0.13052619222005157,
       M22=0.9914448613738104, sizingMethod='auto expand');
       zoom: 1'; /* IE8 */
       /*rotazione di 7.5 gradi*/</pre>
<p>Il filter Matrix si occupa di ridefinire l&#8217;elemento in base ai 4 angoli dell&#8217;elemento, per calcolare questi 4 punti è necessaria un po&#8217; di matematica per disporre correttamente le coordinate, nello specifico i 4 valori inseriti (m11,m12,m21,m22) saranno uguali alle seguenti formule.</p>
<p>m11 = cos((gradi)*3,14159265*2/360)<br />
m12 = -sen((gradi)*3,14159265*2/360)<br />
m21 = sen((gradi)*3,14159265*2/360)<br />
m22 = cos((gradi)*3,14159265*2/360)</p>
<p>La proprietà sizingMethod definisce invece se l&#8217;elemento contenitore dovrà adattarsi o meno all&#8217;immagine generata grazie al valore &#8220;auto expand&#8221;.</p>
<p>Su questa pagina è possibile vedere una <a href="http://www.howtoweb.it/wp-content/uploads/rotate_css/rotate_css.html" target="_blank">demo della soluzione proposta</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.howtoweb.it/tutorial/rotazioni-crossbrowser-con-css3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Creare sfumature crossbrowser con i CSS</title>
		<link>http://www.howtoweb.it/tutorial/sfumature-crossbrowser-con-css/</link>
		<comments>http://www.howtoweb.it/tutorial/sfumature-crossbrowser-con-css/#comments</comments>
		<pubDate>Mon, 28 Feb 2011 07:00:23 +0000</pubDate>
		<dc:creator>Mauro Accornero</dc:creator>
				<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[browser]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[web design]]></category>

		<guid isPermaLink="false">http://www.howtoweb.it/?p=727</guid>
		<description><![CDATA[La definizione di sfumature attraverso i css  offre una valida alternativa all&#8217;utilizzo di immagini, riducendo così tempi di caricamento. Nonostante questa tecnica non sia totalmente crossbrowser ricopre i browser maggiormente utilizzati in un numero considerevole di versioni portando così un &#8230; <a href="http://www.howtoweb.it/tutorial/sfumature-crossbrowser-con-css/">Continua a leggere<span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.howtoweb.it/wp-content/uploads/2011/02/sfumature_crossbrowser_css.jpg"><img class="alignnone size-full wp-image-775" title="sfumature_crossbrowser_css" src="http://www.howtoweb.it/wp-content/uploads/2011/02/sfumature_crossbrowser_css.jpg" alt="" width="580" height="200" /></a></p>
<p>La definizione di sfumature attraverso i css  offre una valida alternativa all&#8217;utilizzo di immagini, riducendo così tempi di caricamento. Nonostante questa tecnica non sia totalmente crossbrowser ricopre i browser maggiormente utilizzati in un numero considerevole di versioni portando così un ampio numero di utenti a risparmiare tempo e banda ad ogni richiesta per le pagine web.</p>
<p>La creazione di sfumature attraverso i css è un tipo di immagine generata, non una proprietà. Questo significa che possono essere utilizzate all&#8217;interno di altre proprietà come avviene per rgb() o rgba().</p>
<p>Nei CSS3 esistono due metodi per la definizione di sfumature, in particolare uno per le sfumature lineari (linear-gradient) e uno per le sfumature radiali (radial-gradient). Da questi sono ricavati i rispettivi per firefox, google chrome e safari con uguali sintassi ma differente premessa.</p>
<p><a href="http://www.howtoweb.it/wp-content/uploads/gradient_css/gradient_css.html" target="_blank">Qui un esempio delle soluzioni proposte</a>, di seguito la spiegazione nel dettaglio.</p>
<h3>Sfumature lineari</h3>
<p>La sintassi della sfumatura lineare richiede un minimo di tre parametri:</p>
<ul>
<li>posizione iniziale (valore numerico, percentuale o gradi)</li>
<li>colore iniziale (colore in valore esadecimale, rgb o rgba)</li>
<li>colore finale (colore in valore esadecimale, rgb o rgba)</li>
</ul>
<pre>-webkit-linear-gradient(top, #ccc, #000);
-moz-linear-gradient(top, #ccc, #000);
linear-gradient(top, #ccc, #000);</pre>
<p>E&#8217; possibile aggiungere più colori ad una singola sfumatura definendo la porzione occupata dal colore attraverso un valore in percentuale tra 0% e 100%. Per i colori per cui non viene specificata una percentuale la larghezza della sfumatura viene definita in automatico.</p>
<pre>-webkit-linear-gradient(top, #ccc 20%, #000);
 -moz-linear-gradient(top, #ccc 20%, #000);
 linear-gradient(top, #ccc 20%, #000);</pre>
<p>E&#8217; inoltre possibile definire sfumature con più colori aggiungendoli nell&#8217;ordine desiderato</p>
<pre>-webkit-linear-gradient(top, #ccc 20%, #000, #c00);
 -moz-linear-gradient(top, #ccc 20%, #000, #c00);
 linear-gradient(top, #ccc 20%, #000, #c00);</pre>
<h3>Ampliare il supporto per google chrome e webkit</h3>
<p>Oltre alla definizione di sfumature con i CSS3 è possibile utilizzare webkit-gradient per ampliare il supporto a safari 4 e superiori e google chrome inferiori alla 10.</p>
<p>La sintassi della sfumatura lineare per webkit richiede un minimo di cinque parametri:</p>
<ul>
<li>tipo di sfumature (linear o radial)</li>
<li>posizione iniziale (valore numerico, percentuale o gradi)</li>
<li>posizione finale (valore numerico, percentuale o gradi)</li>
<li>colore iniziale (colore in valore esadecimale)</li>
<li>colore finale (colore in valore esadecimale)</li>
</ul>
<pre>-webkit-gradient(linear, left top, right top, from(#ccc), to(#000));</pre>
<p>Si sconsiglia di definire i colori in rgb o rgba considerato che la dichiarazione serve per ampliare il supporto su browser meno recenti che potrebbero non supportare i colori in rgb essendo parte dei CSS3.</p>
<p>E&#8217; possibile aggiungere più colori ad una singola sfumatura definendo la porzione occupata dal colore attraverso un valore in percentuale tra 0% e 100%. Per i colori per cui non viene specificata una percentuale la larghezza della sfumatura viene definita in automatico.</p>
<pre>-webkit-gradient(linear, left top, right top, from(40%, #ccc), to(#000));</pre>
<p>E&#8217; inoltre possibile definire sfumature con più colori aggiungendoli attraverso la dichiarazone color-stop.</p>
<pre>-webkit-gradient(linear, left top, left bottom, from(#ccc), to(#000),
color-stop(40%, #c00))</pre>
<h3>Sfumature lineari su  Internet explorer</h3>
<p>Le soluzioni viste fino ad ora non trovano supporto su Internet Explorer in versioni precedenti alla 9, bisogna quindi ricorrere al gradient filter.</p>
<p>Questo filtro per Internet Explorer permette sfumature lineari verticali ed orizzontali di due colori.</p>
<p>Per questo filtro sono necessari tre parametri:</p>
<ul>
<li>gradienttype (definisce una sfumatura verticale (0) o orizzontale (1))</li>
<li>colore iniziale (in valore esadecimale)</li>
<li>colore finale (in valore esadecimale)</li>
</ul>
<pre>filter: progid:DXImageTransform.Microsoft.gradient(GradientType = 0,
startColorstr='#cccccc', endColorstr='#000000');</pre>
<p>Per ampliare il supporto a più versioni di Internet Explorer occorre ricordare la diversa definizione di filters:</p>
<pre>//per ie 5.5 e successivi
filter: progid:DXImageTransform.Microsoft.filtername(sProperties)
//per ie 8
-ms-filter: 'progid:DXImageTransform.Microsoft.filtername(sProperties)'</pre>
<p>In questo modo è possibile creare sfumature con i css compatibili con Firefox 3.6+, Safari 4+, google chrome e internet explorer 7+. Purtroppo opera non offre un supporto per le sfumature da css e ricade nella soluzione di callback con la definizione di un colore o di un&#8217;immagine di sfondo.</p>
<h3>Sfumature Radiali</h3>
<p>E&#8217; inoltre possibile definire sfumature radiali attraverso radial-gradient, le derivate per webkit e mozilla -webkit-radial-gradient e -moz-radial-gradient e la definizione webkit-gradient (con tipologia radial).</p>
<p>Per questa soluzione con i css3 può essere utile inserire un parametro di definizione sulla larghezza delle sfumature che definisce forma ed estensione.</p>
<p>I valori definibili sono:<br />
Circle (per sfumature circolari)<br />
Ellipse (per sfumature ad ellisse)</p>
<p>In aggiunta si possono definire ulteriori parametri per il comportamento della sfumatura:</p>
<p>closest-side (sfumatura al lato più vicino)<br />
farthest-side  (sfumatura al lato più distante)<br />
closest-corner (sfumatura all&#8217;angolo più vicino)<br />
farthest-corner (sfumatura all&#8217;angolo più lontano)</p>
<p><a href="http://www.howtoweb.it/wp-content/uploads/gradient_css/gradient_css.html" target="_blank">Qui un esempio delle soluzioni descritte</a>.</p>
<p><strong>Per maggiori informazioni sull&#8217;utilizzo delle sfumature ecco alcuni link:</strong></p>
<p><a href="https://developer.mozilla.org/en/Using_gradients" target="_blank">sfumature con CSS3 in firefox</a> (https://developer.mozilla.org/en/Using_gradients)<br />
<a href="http://www.webkit.org/blog/1424/css3-gradients">sfumature con CSS3 in webkit</a> (http://www.webkit.org/blog/1424/css3-gradients)<br />
<a href="http://www.webkit.org/blog/175/introducing-css-gradients" target="_blank">sfumature con webkit-gradient</a> (http://www.webkit.org/blog/175/introducing-css-gradients)<br />
<a href="http://msdn.microsoft.com/en-us/library/ms532997%28v=vs.85%29.aspx" target="_blank">sfumature con filter per internet explorer</a> (http://msdn.microsoft.com/en-us/library/ms532997%28v=vs.85%29.aspx)<br />
<a href="https://developer.mozilla.org/en/CSS/-moz-radial-gradient#Size_constants" target="_blank">definizioni della posizione della sfumatura</a> (https://developer.mozilla.org/en/CSS/-moz-radial-gradient#Size_constants)<br />
<a href="http://msdn.microsoft.com/en-us/library/ms532847%28v=vs.85%29.aspx" target="_blank">utilizzo di filters in Internet explorer</a> (http://msdn.microsoft.com/en-us/library/ms532847%28v=vs.85%29.aspx)</p>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 3103px; width: 1px; height: 1px; overflow: hidden;">
<p>La definizione di sfumature attraverso i css permette di offrire una  valida alternativa all’utilizzo di immagini, permettendo così tempi di  caricamento più brevi. Benchè questa tecnica non possa essere totalmente  crossbrowser ricopre i browser maggiormente utilizzati in un numero  considerevole di versioni portando così un ampio numero di utenti a  risparmiare tempo e banda ad ogni richiesta per le pagine web.</p>
<p>La creazione di sfumature attraverso i css è un tipo di immagine  generata, non una proprietà, possono quindi essere utilizzate  all’interno di altre proprietà come avviene per rgb() o rgba().</p>
<p>Nei CSS3 esistono due metodi per la definizione di sfumature, in  particolare una per le sfumature lineari (linear-gradient) e una per le  sfumature radiali (radial-gradient). Da queste due versioni sono  ricavati i rispettivi per firefox, google chrome e safari con uguali  sintassi ma differente premessa.</p>
<h3>Sfumature lineari</h3>
<p>La sintassi della sfumatura lineare richiede un minimo di tre parametri:</p>
<ul>
<li>posizione iniziale (valore numerico, percentuale o gradi)</li>
<li>colore iniziale (colore in valore esadecimale, rgb o rgba)</li>
<li>colore finale (colore in valore esadecimale, rgb o rgba)</li>
</ul>
<pre>-webkit-linear-gradient(top, #ccc, #000);
-moz-linear-gradient(top, #ccc, #000);
linear-gradient(top, #ccc, #000);</pre>
<p>E’ possibile aggiungere più colori ad una singola sfumatura definendo  la porzione occupata dal colore attraverso un valore in percentuale tra  0% e 100%. Per i colori per cui non viene specificata una percentuale  la larghezza della sfumatura viene definita in automatico.</p>
<pre>-webkit-linear-gradient(top, #ccc 20%, #000);
 -moz-linear-gradient(top, #ccc 20%, #000);
 linear-gradient(top, #ccc 20%, #000);</pre>
<p>E’ inoltre possibile definire sfumature con più colori aggiungendoli nell’ordine desiderato</p>
<pre>-webkit-linear-gradient(top, #ccc 20%, #000, #c00);
 -moz-linear-gradient(top, #ccc 20%, #000, #c00);
 linear-gradient(top, #ccc 20%, #000, #c00);</pre>
<h3>Ampliare il supporto per google chrome e webkit</h3>
<p>Oltre alla definizione di sfumature con i CSS3 è possibile utilizzare  webkit-gradient per ampliare il supporto a safari 4 e superiori e  google chrome inferiori alla 10.</p>
<p>La sintassi della sfumatura lineare per webkit richiede un minimo di cinque parametri:</p>
<ul>
<li>tipo di sfumature (linear o radial)</li>
<li>posizione iniziale (valore numerico, percentuale o gradi)</li>
<li>posizione finale (valore numerico, percentuale o gradi)</li>
<li>colore iniziale (colore in valore esadecimale)</li>
<li>colore finale (colore in valore esadecimale)</li>
</ul>
<pre>-webkit-gradient(linear, left top, right top, from(#ccc), to(#000));</pre>
<p>Si sconsiglia di definire i colori in rgb o rgba considerato che la  dichiarazione serve per ampliare il supporto su browser meno recenti che  potrebbero non supportare i colori in rgb essendo parte dei CSS3.</p>
<p>E’ possibile aggiungere più colori ad una singola sfumatura definendo  la porzione occupata dal colore attraverso un valore in percentuale tra  0% e 100%. Per i colori per cui non viene specificata una percentuale  la larghezza della sfumatura viene definita in automatico.</p>
<pre>-webkit-gradient(linear, left top, right top, from(40%, #ccc), to(#000));</pre>
<p>E’ inoltre possibile definire sfumature con più colori aggiungendoli attraverso la dichiarazone color-stop.</p>
<pre>-webkit-gradient(linear, left top, left bottom, from(#ccc), to(#000),
color-stop(40%, #c00))</pre>
<h3>Sfumature lineari su  Internet explorer</h3>
<p>Le soluzioni viste fino ad ora non trovano supporto su Internet  Explorer in versioni precendenti alla 9, bisogna quindi ricorrere al  gradient filter.</p>
<p>Questo filtro per Internet Explorer permette sfumature lineari verticali ed orizzontali di due colori.</p>
<p>Per questo filtro sono necessari tre parametri:</p>
<ul>
<li>gradienttype (definisce una sfumatura verticale (0) o orizzontale (1))</li>
<li>colore iniziale (in valore esadecimale)</li>
<li>colore finale (in valore esadecimale)</li>
</ul>
<pre>filter: progid:DXImageTransform.Microsoft.gradient(GradientType = 0,
startColorstr='#cccccc', endColorstr='#000000');</pre>
<p>Per ampliare il supporto a più versioni di Internet Explorer occorre ricordare la diversa definizione di filters:</p>
<pre>//per ie 5.5 e successivi
filter: progid:DXImageTransform.Microsoft.filtername(sProperties)
//per ie 8
-ms-filter: 'progid:DXImageTransform.Microsoft.filtername(sProperties)'</pre>
<p>In questo modo è possibile creare sfumature con i css compatibili con  Firefox 3.6+, Safari 4+, google chrome e internet explorer 7+.  Purtroppo opera non offre un supporto per le sfumature da css e ricade  nella soluzione di callback con la definizione di un colore o di  un’immagine di sfondo.</p>
<h3>Sfumature Radiali</h3>
<p>E’ inoltre possibile definire sfumature radiali attraverso la  proprietà radial-gradient, le derivate per webkit e mozilla  -webkit-radial-gradient e -moz-radial-gradient e la definizione  webkit-gradient (con tipologia radial).</p>
<p>Per questa soluzione con i css3 può essere utile inserire un  parametro di definizione sulla larghezza delle sfumature che definisce  forma ed estensione.</p>
<p>I valori definibili sono:<br />
Circle (per sfumature cricolari)<br />
Ellipse (per sfumature ad ellisse)</p>
<p>In aggiunta si possono definire ulteriori parametri per il comportamento della sfumatura:</p>
<p>closest-side (sfumatura al lato più vicino)<br />
farthest-side  (sfumatura al lato più distante)<br />
closest-corner (sfumatura all’angolo più vicino)<br />
farthest-corner (sfumatura all’angolo più lontano)</p>
<p><strong>Per maggiori informazioni sull’utilizzo delle sfumature ecco alcuni link:</strong></p>
<p><a href="https://developer.mozilla.org/en/Using_gradients" target="_blank">sfumature con CSS3 in firefox</a> (https://developer.mozilla.org/en/Using_gradients)<br />
<a href="http://www.webkit.org/blog/1424/css3-gradients">sfumature con CSS3 in webkit</a> (http://www.webkit.org/blog/1424/css3-gradients)<br />
<a href="http://www.webkit.org/blog/175/introducing-css-gradients" target="_blank">sfumature con webkit-gradient</a> (http://www.webkit.org/blog/175/introducing-css-gradients)<br />
<a href="http://msdn.microsoft.com/en-us/library/ms532997%28v=vs.85%29.aspx" target="_blank">sfumature con filter per internet explorer</a> (http://msdn.microsoft.com/en-us/library/ms532997%28v=vs.85%29.aspx)<br />
<a href="https://developer.mozilla.org/en/CSS/-moz-radial-gradient#Size_constants" target="_blank">definizioni della posizione della sfumatura</a> (https://developer.mozilla.org/en/CSS/-moz-radial-gradient#Size_constants)<br />
<a href="http://msdn.microsoft.com/en-us/library/ms532847%28v=vs.85%29.aspx" target="_blank">utilizzo di filters in Internet explorer</a> (http://msdn.microsoft.com/en-us/library/ms532847%28v=vs.85%29.aspx)</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.howtoweb.it/tutorial/sfumature-crossbrowser-con-css/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Creare siti multilingua con WordPress e Qtranslate</title>
		<link>http://www.howtoweb.it/tutorial/creare-siti-multilingua-con-wordpress-e-qtranslate/</link>
		<comments>http://www.howtoweb.it/tutorial/creare-siti-multilingua-con-wordpress-e-qtranslate/#comments</comments>
		<pubDate>Tue, 22 Feb 2011 05:00:41 +0000</pubDate>
		<dc:creator>Mauro Accornero</dc:creator>
				<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://www.howtoweb.it/?p=705</guid>
		<description><![CDATA[Se siete dei fedeli utilizzatori di wordpress e state cercando un modo veloce per aggiungere la gestione di contenuti in più lingue, vi suggerisco di provare qtranslate (http://www.qianqin.de/qtranslate/), plugin per wordpress che permette la gestione di più lingue per contenuti &#8230; <a href="http://www.howtoweb.it/tutorial/creare-siti-multilingua-con-wordpress-e-qtranslate/">Continua a leggere<span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.howtoweb.it/wp-content/uploads/2011/02/wordpress_qtranslate_multilingua.jpg"><img class="alignnone size-full wp-image-710" title="wordpress_qtranslate_multilingua" src="http://www.howtoweb.it/wp-content/uploads/2011/02/wordpress_qtranslate_multilingua.jpg" alt="" width="580" height="200" /></a></p>
<p>Se siete dei fedeli utilizzatori di wordpress e state cercando un modo veloce per aggiungere la gestione di contenuti in più lingue, vi suggerisco di provare <a href="http://www.qianqin.de/qtranslate/" target="_blank">qtranslate </a>(http://www.qianqin.de/qtranslate/), plugin per wordpress che permette la gestione di più lingue per contenuti differente.</p>
<p>Per installarlo, scaricate il plugin nella versione compatibile alla vostra installazione di wordpress (potete rintracciarlo nel <a href="http://wordpress.org/extend/plugins/qtranslate/" target="_blank">repository di wordpress plugin</a> (http://wordpress.org/extend/plugins/qtranslate/)), copiate la cartella del plugin in wp-content/plugin e attivate il plugin dal pannello di amministrazione.</p>
<p>A questo punto verrà aggiunta la voce &#8220;lingue&#8221; (o &#8220;languages&#8221;) nel menu di amministrazione.<br />
Da questa sezione è possibile gestire quante e quali lingue si desidera utilizzare per il proprio sito, definendone l&#8217;ordine e la lingua di default oltre ad opzioni sulla gestione dell&#8217;url per i contenuti multilingua e il tracciamento della lingua dell&#8217;utente dal browser.</p>
<p>Una volta impostate le varie opzioni è possibile gestire categorie, pagine ed articoli come contenuti multilingua direttamente dal pannello di amministrazione.</p>
<p>La gestione delle lingue di qtranslate è basata sui tag multilingua, che consentono di definire contenuti diversi in base alla lingua all&#8217;interno del sito. Questo procedimento è automatizzato per titoli e testi ma va definito a mano nel caso di testi per allegati e in alcuni casi per i custom menu.</p>
<pre>&lt;!--:en--&gt;English text&lt;!--:--&gt;
&lt;!--:it--&gt;Testo in italiano&lt;!--:--&gt;
</pre>
<p>In base alla lingua selezionata verrà restituito come output solo il contenuto pertinente alla specifica lingua.</p>
<p>Nel caso incontriate la necessità di gestire il codice in maniera customizzata all&#8217;interno di funzioni o del tema è possibile utilizzare le API di Qtranslate per l&#8217;esecuzione dei tag.</p>
<pre>__(&lt;!--:en--&gt;English text&lt;!--:--&gt;
&lt;!--:it--&gt;Testo in italiano&lt;!--:--&gt; );</pre>
<p>Per valutare la lingua selezionata è possibile utilizzare qtrans_getLanguage() ed ottenere l&#8217;abbreviazione univoca della lingua scelta dall&#8217;utente.</p>
<pre>if(qtrans_getLanguage() == "it"){
echo "testo italiano";
}else{
echo "english text";
}</pre>
<p>Per ottenere la navigazione tra le lingue viene offerta la funzione qtrans_generateLanguageSelectCode().<br />
Questa permette l&#8217;output di una lista o un dropdown con le varie lingue selezionabili dall&#8217;utente.<br />
Tra le opzioni è possibile scegliere il tipo di output: lista con testo, lista con bandiere, lista con testo e bandiere oppure un select.</p>
<pre>qtrans_generateLanguageSelectCode("image");
//lista lingue con immagini delle bandiere</pre>
<p>Qtranslate fornisce di default le bandiere, i nomi e le abbreviazioni per le varie lingue, che sono ovviamente customizzabili a piacimento. Una soluzione rapida per la modifica delle immagini delle bandiere è l&#8217;utilizzo di css sprite basato sulle classi della lista di default.</p>
<pre>#qtranslate-chooser li a.qtrans_flag{
background:#FFF url(images/flags.png) 0 0 no-repeat;
width:20px;
height:20px;
display:block;
}
#qtranslate-chooser li a.qtrans_flag_it{background-position:0 0;}
#qtranslate-chooser li a.qtrans_flag_en{background-position:0 -20px;}
#qtranslate-chooser li a.qtrans_flag_de{background-position:0 -40px;}
#qtranslate-chooser li a.qtrans_flag_fr{background-position:0 -60px;}</pre>
<p>Un limite riscontrato nella gestione dei contenuti multilingue su wordpress attraverso qtranslate è il fatto di non poter definire allegati differenti per lo stesso contenuto in base alla lingua. Per aggirare questo ostacolo è possibile definire come testo alternativo o come excerpt dell&#8217;allegato l&#8217;abbreviazione della lingua e valutare questo parametro nel momento dell&#8217;output.</p>
<p>Di seguito un esempio per ricavare le immagini allegate ad una pagina solo per una specifica lingua.</p>
<pre>&lt;?php
$my_id = get_the_ID();
 $args = array(
'post_type' =&gt; 'attachment',
'post_parent' =&gt; $my_id,
'orderby' =&gt; 'menu_order',
'order' =&gt; 'asc'
);
 $attachments = get_posts($args);
 if ($attachments) {
   foreach ($attachments as $attachment) {
     if($attachment-&gt;post_excerpt == qtrans_getLanguage()){
       echo "&lt;img src='".$attachment-&gt;guid."'/&gt;";
     }
   }
}
?&gt;</pre>
<p>Come ultima nota suggerisco una visita al <a href="http://www.qianqin.de/qtranslate/" target="_blank">sito dell&#8217;autore del plugin</a> (http://www.qianqin.de/qtranslate/) e al <a href="http://www.qianqin.de/qtranslate/forum/" target="_blank">forum </a>(http://www.qianqin.de/qtranslate/forum/), nel caso vogliate espandere le potenzialità di qtranslate potete testare<a href="http://wordpress.org/extend/plugins/search.php?q=qtranslate" target="_blank"> altri plugin</a> che permettono gestioni più avanzate per specifici ambiti (meta tag, buddy press, sitemap) sul repository di wordpress plugin (http://wordpress.org/extend/plugins/search.php?q=qtranslate).</p>
]]></content:encoded>
			<wfw:commentRss>http://www.howtoweb.it/tutorial/creare-siti-multilingua-con-wordpress-e-qtranslate/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Utilizzare JQuery UI Autocomplete con PHP e Mysql</title>
		<link>http://www.howtoweb.it/articoli/utilizzare-jquery-ui-autocomplete-con-php-e-mysql/</link>
		<comments>http://www.howtoweb.it/articoli/utilizzare-jquery-ui-autocomplete-con-php-e-mysql/#comments</comments>
		<pubDate>Fri, 25 Jun 2010 08:56:36 +0000</pubDate>
		<dc:creator>Mauro Accornero</dc:creator>
				<category><![CDATA[Articoli]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery]]></category>

		<guid isPermaLink="false">http://www.howtoweb.it/?p=680</guid>
		<description><![CDATA[In questo articolo vedremo come integrare facilmente il widget autocomplete di Jquery UI all&#8217;interno di pagine dinamiche. L&#8217;utilizzo è molto semplice, come prima cosa è necessario scaricare il pacchetto completo di Jquery UI compreso di tema personalizzato o standard e &#8230; <a href="http://www.howtoweb.it/articoli/utilizzare-jquery-ui-autocomplete-con-php-e-mysql/">Continua a leggere<span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><img class="alignnone size-full wp-image-687" title="autocomplete" src="http://www.howtoweb.it/wp-content/uploads/2010/06/autocomplete.jpg" alt="" /></p>
<p>In questo articolo vedremo come integrare facilmente il widget autocomplete di Jquery UI all&#8217;interno di pagine dinamiche.</p>
<p>L&#8217;utilizzo è molto semplice, come prima cosa è necessario scaricare il pacchetto completo di Jquery UI compreso di tema personalizzato o standard e collegare i rispettivi files alla pagina dinamica.</p>
<pre>&lt;link rel="stylesheet" href="css/theme/ui.theme.css" type="text/css"/&gt;
&lt;script src="js/jquery.min.js" type="text/javascript"&gt;&lt;/script&gt;
&lt;script src="js/jquery-ui.min.js" type="text/javascript"&gt;&lt;/script&gt;</pre>
<p>Ora possiamo aggiungere l&#8217;elemento input che utilizzero per l&#8217;autocomplete, per comodità di selezione verrà aggiunto un id.</p>
<pre>&lt;input value="Insert your tag here" /&gt;</pre>
<p>Per ciò che riguarda javascript iniziamo applicando un autocomplete base al campo input</p>
<pre>$(function() {var myTags = ["tag1", "tag2", "anotherTag", "simpleTag"];
$("#tags").autocomplete({source: myTags});});</pre>
<p>In questo caso settiamo come opzione &#8220;source&#8221; che specifica come sorgente l&#8217;array &#8220;myTags&#8221;.Per rendere dinamico l&#8217;autocomplete modifichiamo la sorgente con un file dinamico che si occuperà di effettuare la ricerca</p>
<pre> $("#tags").autocomplete({source: "tagSearch.php"});</pre>
<p>Di seguito un esempio per tagSearch.php:</p>
<pre>//creazione di un array vuoto
$return_arr = array();

//dati di accesso a mysql e al db
$dbhost = 'YOUR_SERVER';
$dbuser = 'YOUR_USERNAME';
$dbpass = 'YOUR_PASSWORD';
$dbname = 'YOUR_DATABASE_NAME';

//definisco la variabile di ricerca dell'utente
$term = $_GET("term");

//connessione al a mysql
$conn = mysql_connect($dbhost, $dbuser, $dbpass)
or die ('Impossibile connettersi a Mysql');
//selezione ddb
mysql_select_db($dbname);
//se connesso
if ($conn)
{
//query select
$fetch = mysql_query("SELECT * FROM tags WHERE MATCH(tagName) AGAINST('".$term."*')");
//loop dei dati
while ($row = mysql_fetch_array($fetch, MYSQL_ASSOC)) {
$row_array['value'] = $row['tagName '];
array_push($return_arr,$row_array);
}

}
//chiudo la connessione a mysql
mysql_close($conn);
//restituisco l'array in formato json
echo json_encode($return_arr);</pre>
<p>La variabile $terms viene ricavata dall&#8217;url, l&#8217;autocomplete di Jquery UI richiama infatti il file search.php con la variabile term (es. search.php?term=ciao) ad ogni change nel campo input.Considerato che la variabile term viene aggiornata e inviata ad ogni change del campo ho utilizzato MATCH AGAINST nella query affinchè ad ogni richiesta mysql cerchi l&#8217;input dell&#8217;utente seguito da altro.Il risultato è che a fronte di una ricerca &#8220;a&#8221; verranno restituiti tutti i dati che iniziano per &#8220;a&#8221;, aggiungendo lettere verranno restituiti solo i dati che corrispondono ai criteri della ricerca.</p>
<p>L&#8217;autocomplete di JQuery UI prevede una vasta serie di opzioni con le quali è possibile manipolare i dati prensenti nell&#8217;input e nei risultati, creare una cache dai dati e customizzare aspetto e animazioni dell&#8217;input.Per maggiori informazioni consiglio una lettura della documentazione disponibile sulla <a title="jquery ui autocomplete demo" href="http://jqueryui.com/demos/autocomplete/" target="_blank">pagina dedicata</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.howtoweb.it/articoli/utilizzare-jquery-ui-autocomplete-con-php-e-mysql/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Realizzare select multilingue con Jquery</title>
		<link>http://www.howtoweb.it/tutorial/realizzare-select-multilingue-con-jquery/</link>
		<comments>http://www.howtoweb.it/tutorial/realizzare-select-multilingue-con-jquery/#comments</comments>
		<pubDate>Mon, 14 Jun 2010 05:00:25 +0000</pubDate>
		<dc:creator>Mauro Accornero</dc:creator>
				<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[jquery]]></category>

		<guid isPermaLink="false">http://www.howtoweb.it/?p=666</guid>
		<description><![CDATA[In questo articolo vedremo come realizzare un selettore multilingue con html, css e jquery, per vedere l&#8217; esempio completo visitate la demo. Per questo tutorial ho utilizzato world-flags-sprite, una soluzione css che offre una vasta gamma di bandiere di numerosi &#8230; <a href="http://www.howtoweb.it/tutorial/realizzare-select-multilingue-con-jquery/">Continua a leggere<span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><img class="alignnone size-full wp-image-665" title="selectlanguageImage" src="http://www.howtoweb.it/wp-content/uploads/2010/06/selectlanguageImage1.jpg" alt="" width="580" height="200" /></p>
<p>In questo articolo vedremo come realizzare un selettore multilingue con html, css e jquery, per vedere l&#8217; esempio completo visitate la <a href="http://www.howtoweb.it/wp-content/uploads/selectlanguage/" target="_self">demo</a>.</p>
<p>Per questo tutorial ho utilizzato <a title="world flags sprite" href="http://github.com/lafeber/world-flags-sprite" target="_blank">world-flags-sprite</a>, una soluzione css che offre una vasta gamma di bandiere di numerosi stati attraverso la tecnica degli sprites css, consiglio vivamente questa soluzione che permette di aggiungere facilmente le immagini per nuove lingue.<br />
Iniziamo creando un nuovo file html in cui inseriremo il nostro markup. L&#8217;esempio qui proposto è pensato in chiave statica ma può essere facilmente applicato anche a pagine dinamiche gestendo l&#8217;output del testo e delle classi.</p>
<h3>HTML</h3>
<pre>
<div id="_mcePaste">&lt;ul&gt;</div>
<div id="_mcePaste">&lt;li&gt;</div>
<div id="_mcePaste">&lt;a href="http://www.mywebsite.it/index.html?lang=it" title="Italy"&gt;</div>
<div id="_mcePaste">&lt;span&gt;&lt;/span&gt;Italy</div>
<div id="_mcePaste">&lt;/a&gt;</div>
<div id="_mcePaste">&lt;/li&gt;</div>
<div id="_mcePaste">&lt;li&gt;</div>
<div id="_mcePaste">&lt;a href="http://www.mywebsite.it/index.html?lang=us" title="Usa"&gt;</div>
<div id="_mcePaste">&lt;span&gt;&lt;/span&gt;Usa</div>
<div id="_mcePaste">&lt;/a&gt;</div>
<div id="_mcePaste">&lt;/li&gt;</div>
<div id="_mcePaste">&lt;li&gt;</div>
<div id="_mcePaste">&lt;a href="http://www.mywebsite.it/index.html?lang=uk" title="England"&gt;</div>
<div id="_mcePaste">&lt;span&gt;&lt;/span&gt;England</div>
<div id="_mcePaste">&lt;/a&gt;</div>
<div id="_mcePaste">&lt;/li&gt;</div>
<div id="_mcePaste">&lt;li&gt;</div>
<div id="_mcePaste">&lt;a href="http://www.mywebsite.it/index.html?lang=fr" title="France"&gt;</div>
<div id="_mcePaste">&lt;span&gt;&lt;/span&gt;France</div>
<div id="_mcePaste">&lt;/a&gt;</div>
<div id="_mcePaste">&lt;/li&gt;</div>
<div id="_mcePaste">&lt;li&gt;</div>
<div id="_mcePaste">&lt;a href="http://www.mywebsite.it/index.html?lang=es" title="Spain"&gt;</div>
<div id="_mcePaste">&lt;span&gt;&lt;/span&gt;Spain</div>
<div id="_mcePaste">&lt;/a&gt;</div>
<div id="_mcePaste">&lt;/li&gt;</div>
<div id="_mcePaste">&lt;li&gt;</div>
<div id="_mcePaste">&lt;a href="http://www.mywebsite.it/index.html?lang=de" title="Germany"&gt;</div>
<div id="_mcePaste">&lt;span&gt;&lt;/span&gt;Germany</div>
<div id="_mcePaste">&lt;/a&gt;</div>
<div id="_mcePaste">&lt;/li&gt;</div>
<div id="_mcePaste">&lt;/ul&gt;</div>
</pre>
<p>Definiamo una lista non ordinata con  all&#8217;interno degli elementi &#8220;li&#8221; che conterranno le singole lingue. In ogni singola voce definiamo un link che conterrà l&#8217;url al sito nella rispettiva lingua.In questo esempio ogni link rimanda ad una pagina fittizia a cui viene aggiunta una variabile per la selezione della lingua. Nel link inseriremo un elemento span che utilizzaremo come contenitore per l&#8217;immagine della bandiera e il testo della lingua.</p>
<p>Le classi presenti sull&#8217;elemento &#8220;ul&#8221; sono relative al layout della lista (.langSelect) e al template applicato (&#8220;.black&#8221;,&#8221;.white&#8221; oppure &#8220;.grey&#8221;). Le classi &#8220;.f16&#8243; e &#8220;flag&#8221; sono relative a flags16.css e servono per mostrare l&#8217;immagine delle rispettive bandiere.</p>
<h3>CSS</h3>
<p>La prima parte del css è dedicata al template. Colori, bordi e immagini di fondo sono gestiti dalle classi &#8220;.black&#8221; , &#8220;.white&#8221; e &#8220;.grey&#8221;.</p>
<pre>/*black theme*/
.black{background-color:#000;border:1px solid #444;}
.black li:first-child{background-position:right top;}
.black a{color:#fff;}
.black a:hover{background:#111;}
.black li:first-child + li{border-top:1px solid #444;}
/*white theme*/
.white{background-color:#eee;border:1px solid #bbb;}
.white li:first-child{background-position:right -25px;}
.white a{color:#333;}
.white a:hover{background:#ddd;}
.white li:first-child + li{border-top:1px solid #bbb;}
/*grey theme*/
.grey{background-color:#ccc;border:1px solid #eee;}
.grey li:first-child{background-position:right -50px;}
.grey a{color:#000;}
.grey a:hover{background:#999;}
.grey li:first-child + li{border-top:1px solid #aaa;}</pre>
<p>La seconda parte del css gestisce il layout della lista definendo dimensioni, spaziature e larghezza.</p>
<pre>.langSelect{
    width:150px;
    -moz-border-radius:10px;
    -webkit-border-radius:10px;
    border-radius:10px;
    text-align:left;
    list-style:none;
}
.langSelect li{
    line-height:25px;
    position:relative;
}
.langSelect a{
    padding-left:35px;
    position:relative;
    text-decoration:none;
    display:block;
}
.langSelect li:first-child a:hover{
    background:transparent;
}
.langSelect li:first-child{
    background-image:url(../img/bg_lang_select.png);
    background-repeat:no-repeat;
    -moz-border-radius:10px;
    -webkit-border-radius:10px;
    border-radius:10px;
}
.langSelect li:last-child a:hover{
    -moz-border-radius:0 0 10px 10px;
    -webkit-border-radius:0 0 10px 10px;
    border-radius:0 0 10px 10px;
}
.langSelect a span{
    width:16px;
    height:16px;
    position:absolute;
    top:50%;
    margin-top:-8px;
    left:10px;
}</pre>
<p>In questo modo è possibile creare stili customizzati in poco tempo e senza dover metter mano al layout.</p>
<h3>JQUERY E JAVASCRIPT</h3>
<p>Prima di inizare con il codice javascript assicuratevi di aver incluso la libreria  jquery nella pagina, la potete trovare sul <a title="jquery" href="http://www.jquery.com/" target="_blank">sito di jquery</a> o in alternativa caricarla attraverso le <a title="google ajax libraries api" href="http://code.google.com/apis/ajaxlibs/" target="_blank">Google AJAX Libraries API</a>.<br />
Lo script può essere incluso sia internamente che esternamente alla pagina html.</p>
<p>Il codice verifica innanzitutto il caricamento della pagina.</p>
<pre> $(function() {</pre>
<p>Una volta certo della presenza degli elementi nel DOM inizia nascondendo tutti gli elementi &#8220;li&#8221; successivi al primo.</p>
<p>$(&#8220;.langSelect li:first-child&#8221;).nextAll().hide();</p>
<p>La seguente istruzione verifica l&#8217;hover del mouse sulla lista.</p>
<pre> $(".langSelect").hover(function(){</pre>
<p>Al mouseover anima gli elementi successivi al primo &#8220;li&#8221; mostrandoli.</p>
<pre> $(this).find("li:first-child").nextAll().not(":animated").slideDown(500);</pre>
<p>Mentre al mouseout li nasconde</p>
<pre> $(this).find("li:first-child").nextAll().not(":animated").slideUp(500);</pre>
<p>Una piccola nota su questo passaggio, è possibile notare l&#8217;utilizzo di .not(&#8220;:animated&#8221;) questa aggiunta impedisce che le animazioni partano o si ripetano quando gli elementi sono ancora animati.<br />
Una volta completate le istruzioni sull&#8217;animazione definiamo il codice da eseguire al click della singola voce.</p>
<pre> $(".langSelect li").click(function(){</pre>
<p>Come prima cosa è necessario verificare se la voce cliccata sia quella già selezionata.</p>
<pre> if($("li").index(this) == 0){</pre>
<p>in quel caso annulliamo la chiamata del link e non eseguiamo ulteriori istruzioni</p>
<pre> return false;</pre>
<p>In questo caso return false sull&#8217;elemento li annulla la chiamata del link al suo interno impedendo la chiamata alla pagina su cui l&#8217;utente già si trova.<br />
Nel caso l&#8217;utente clicchi su una lingua diversa da quella selezionata spostiamo questa voce come prima della lista.</p>
<pre> $(this).prependTo($(this).parent("ul"));</pre>
<p>Subito dopo animo il menu per nascondere le altre lingue.</p>
<pre> $(this).parent("ul").find("li:first-child").nextAll().slideUp(400,</pre>
<p>E aggiungo una funzione di callback che al completamento dell&#8217;animazione rimanda l&#8217;utente all&#8217;url presente nel link della lingua cliccata.</p>
<pre> function (){
 location.href = $(this).find("a").attr("href");
 });</pre>
<p>Per concludere annullo la chiamata del link tradizionale ed evitare l&#8217;immediata chiamata alla pagina in questione.</p>
<pre> return false;</pre>
<p>Per vedere l&#8217; esempio completo visitate la <a href="http://www.howtoweb.it/wp-content/uploads/selectlanguage/">demo</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.howtoweb.it/tutorial/realizzare-select-multilingue-con-jquery/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Lezioni di HTML 5 Lezione 1 &#8211; Impostare il file HTML</title>
		<link>http://www.howtoweb.it/tutorial/lezioni-di-html-5-lezione-1-impostare-il-file-html/</link>
		<comments>http://www.howtoweb.it/tutorial/lezioni-di-html-5-lezione-1-impostare-il-file-html/#comments</comments>
		<pubDate>Wed, 14 Apr 2010 05:00:44 +0000</pubDate>
		<dc:creator>Mauro Accornero</dc:creator>
				<category><![CDATA[Tutorial]]></category>

		<guid isPermaLink="false">http://www.howtoweb.it/?p=568</guid>
		<description><![CDATA[L&#8217;HTML 5 è ormai una realtà affermata, le attuali specifiche attendono solo gli ultimi commenti prima di essere dichiarate ufficiali e i browser già permettono un valido supporto che permette di iniziare ad utilizzare parte delle features offerte da questo &#8230; <a href="http://www.howtoweb.it/tutorial/lezioni-di-html-5-lezione-1-impostare-il-file-html/">Continua a leggere<span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><img class="alignnone size-full wp-image-573" title="html5_lesson1" src="http://www.howtoweb.it/wp-content/uploads/2010/04/html5_lesson11.jpg" alt="" width="580" height="200" /></p>
<p>L&#8217;HTML 5 è ormai una realtà affermata, le attuali specifiche attendono solo gli ultimi commenti prima di essere dichiarate ufficiali e i browser già permettono un valido  supporto che permette di iniziare ad utilizzare parte delle features offerte da questo linguaggio per i propri progetti.</p>
<p>Vediamo quindi come iniziare ad impostare una pagina in HTML 5 per un eventuale sito web.</p>
<h3>Sintassi</h3>
<p>Per creare il nostro primo file HTML è sufficiente definire un nuovo file testuale con estensione .html o .htm, al suo interno possiamo iniziare a definire la struttura della nostra pagina.</p>
<pre>&lt;html&gt;
&lt;head&gt;&lt;/head&gt;
&lt;body&gt;&lt;/body&gt;
&lt;/html&gt;</pre>
<p>L&#8217;HTML 5 come tutti i linguaggi di marcatura ipertestuale presenta una struttura base racchiusa nell&#8217;elemento &lt;html&gt; con all&#8217;interno i due elementi &lt;head&gt; e &lt;body&gt; per una corretta suddivisione tra informazioni e contenuto.</p>
<h3>Il doctype</h3>
<p>Una delle caratteristiche più importanti dell&#8217;HTML 5 è lo shorten doctype o doctype dtdless</p>
<pre>&lt;!doctype html&gt;</pre>
<p>Questo doctype privo di indicazioni sul dtd o sul linguaggio utilizzato, forza automaticamente il browser in modalità standard senza l&#8217;aggiunta di ulteriore codice.<br />
Nonostante la sua semplicità vanta un ottimo supporto, non a caso è utilizzato da tempo sulla homepage di Google e da molti altri siti.</p>
<h3>Gli attributi</h3>
<p>Non vi sono grandi differenze negli attributi rispetto ad altre versioni dell&#8217;HTML. Per enunciare l&#8217;attributo è sufficiente utilizzare il nome seguito da un = e il valore. Nell&#8217;HTML 5 il valore dell&#8217;attributo può essere dichiarato a scelta senza apici, con apici singoli o apici doppi. Tuttavia il mio consiglio è quello di utilizzare sempre apici singoli o doppi per mantenere più ordinato il codice.</p>
<pre>&lt;html lang="it"&gt;</pre>
<h3>Dichiarazione del Charset</h3>
<p>Per la dichiarazione del charset della pagina è possibile utilizzare la classica sintassi:</p>
<pre id="line1">&lt;meta http-equiv="Content-Type" content="text/html; charset=UTF-8"&gt;
</pre>
<p>o in alternativa una versione contratta altrettanto compatibile e funzionante</p>
<pre>&lt;meta charset="utf-8"&gt;</pre>
<p>In ogni caso è sempre opportuno (se non doveroso) esplicitare un charset valido per la pagina, possibilmente un UTF-8 piuttosto dell&#8217;ISO (questo per ragioni che in effetti sarebbe opportuno trattare in un altro post <img src='http://www.howtoweb.it/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  ).</p>
<h3>CSS e JAVASCRIPT</h3>
<p>Per il collegamento a risorse diverse dall&#8217;HTML, per esempio i javascript possiamo tranquillamente omettere l&#8217;attributo type.</p>
<pre>&lt;script&gt;
//script javascript interno
&lt;/script&gt;</pre>
<p>anche nel caso di javascript interni alla pagina</p>
<pre>&lt;script src="js/javascriptesterno.js"&gt;&lt;/script&gt;</pre>
<p>Stesso discorso vale per i fogli stile con l&#8217;aggiunta di un attributo rel che diventa fondamentale nel caso si utilizzi il tag link.</p>
<pre>&lt;link href="css/fogliodistileesterno.css" rel="stylesheet"&gt;</pre>
<p>Nel caso si utilizzi l&#8217;elemento style per definire fogli di stile interni, l&#8217;attributo rel non è necessario</p>
<pre>&lt;style&gt;
/*foglio di stile interno*/
&lt;/style&gt;</pre>
<p>Ed infine ecco il nostro file in HTML 5:</p>
<pre>&lt;!doctype html&gt;
&lt;html lang="it"&gt;
&lt;head&gt;
&lt;meta charset="utf-8"&gt;
&lt;title&gt;La mia prima pagina in HTML 5&lt;/title&gt;
&lt;link href="css/fogliodistileesterno.css" rel="stylesheet"&gt;
&lt;style&gt;
/*foglio di stile interno*/
&lt;/style&gt;
&lt;script src="js/javascriptesterno.js"&gt;&lt;/script&gt;
&lt;script&gt;
//script javascript interno
&lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;/body&gt;
&lt;/html&gt;</pre>
<p>Nel caso voleste fare un test, potete provare a validare il codice nel <a title="W3C VALIDATOR" href="http://validator.w3.org/" target="_blank">validatore w3c</a> per l&#8217;HTML 5. Il validatore  è ancora sperimentale ma è basato sulle attuali specifiche disponibili.</p>
<h3>E i nuovi tag? Canvas? Video?</h3>
<p>C&#8217;è molto da dire sull&#8217;HTML 5, per questioni pratiche ho pensato di suddividere i vari argomenti in più post, nei prossimi articoli vedremo come verificare la compatibilità del browser con le varie features dell&#8217;HTML 5,  i nuovi elementi messi a disposizione e il loro funzionamento,  semantica del linguaggio e altro ancora.<br />
Che dire&#8230; passate a trovarmi su <a title="Howtoweb.it" href="http://www.howtoweb.it" target="_self">howtoweb.it</a> oppure controllate i <a title="Howtoweb.it - Rss Feed" href="http://www.howtoweb.it/feed/" target="_blank">feed rss</a> per rimanere aggiornati sugli ultimi post.</p>
<p>Alla prossima!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.howtoweb.it/tutorial/lezioni-di-html-5-lezione-1-impostare-il-file-html/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Integrare le API di Youtube con PrettyPhoto</title>
		<link>http://www.howtoweb.it/tutorial/integrare-api-di-youtube-prettyphoto/</link>
		<comments>http://www.howtoweb.it/tutorial/integrare-api-di-youtube-prettyphoto/#comments</comments>
		<pubDate>Mon, 10 Aug 2009 05:00:34 +0000</pubDate>
		<dc:creator>Mauro Accornero</dc:creator>
				<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[web design]]></category>
		<category><![CDATA[youtube]]></category>

		<guid isPermaLink="false">http://www.howtoweb.it/?p=510</guid>
		<description><![CDATA[L&#8217;integrazione del video nei siti web è ormai diventata una pratica comune, l&#8217;inserimento in una pagina web è molto semplice soprattutto se supportato da un servizio che ospita e gestisce i contenuti video come Youtube. Nell&#8217;articolo di oggi mostrerò una &#8230; <a href="http://www.howtoweb.it/tutorial/integrare-api-di-youtube-prettyphoto/">Continua a leggere<span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><img class="alignnone size-full wp-image-515" title="esempio_youtube_api" src="http://www.howtoweb.it/wp-content/uploads/2009/08/esempio_youtube_api1.jpg" alt="esempio_youtube_api" width="580" height="250" /></p>
<p>L&#8217;integrazione del video nei siti web è ormai diventata una pratica comune, l&#8217;inserimento in una pagina web è molto semplice soprattutto se supportato da un servizio che ospita e gestisce i contenuti video come Youtube.</p>
<p>Nell&#8217;articolo di oggi mostrerò una semplice integrazione tra le Youtube API e il plugin per JQuery Prettyphoto per ottenere una galleria di video in stile Youtube da inserire nella pagina del proprio sito.</p>
<p>Le Youtube API non sono altro che librerie messe a disposizione degli sviluppatori per gestire con semplicità i contenuti di Youtube su un sito esterno. E&#8217; possibile integrarle con diversi linguaggi e tecnologie, nell&#8217;esempio di oggi vedremo com&#8217;è possibile utilizzarle con javascript. Per ulteriori informazioni è possibile consultare la relativa <a title="Youtupe API" href="http://code.google.com/apis/youtube/getting_started.html" target="_blank">documentazione</a>.</p>
<p>PrettyPhoto è un plugin per jquery simile in tutto e per tutto a Lightbox (per prototype e scriptaculus) ulteriori informazioni sono disponibili sul sito ufficiale di <a title="PrettyPhoto" href="http://www.no-margin-for-errors.com/projects/prettyPhoto-jquery-lightbox-clone/" target="_blank">PrettyPhoto.</a></p>
<p><span id="more-510"></span></p>
<p>Per questa soluzione sono partito dall&#8217;<a title="Youtube API Example" href="http://gdata.ops.demo.googlepages.com/yt_json_codelab.html#attractive" target="_blank">esempio fornito da Youtube</a> nella rispettiva documentazione. Lo script proposto carica dal canale desiderato le thumbnails dei video e il rispettivo titolo, caricando inoltre il player che esegue il filmato sul quale viene cliccato.</p>
<p>Nel nostro caso desidero mantenere le thumbnails e i titoli ma preferisco evitare che il player occupi spazio nella pagina, modificherò quindi lo script per permettere l&#8217;apertura del video in un div grazie al plugin PrettyPhoto.</p>
<p>Per iniziare creiamo la nostra pagina html, avendo l&#8217;accortezza di lasciare un div con id nel quale verranno caricate le thumbnails dei video.</p>
<h3>Caricare i dati da Youtube</h3>
<p>Ora possiamo iniziare a creare il javascript che richiamerà i dati necessari da Youtube.</p>
<p>Per prima cosa inseriamo un link alle api di youtube, dove specificheremo che cosa selezionare (nel nostra caso andremo a prelevare tutti i video del canale di GoogleDevelopers).</p>
<pre>&lt;script type="text/javascript"
src="http://gdata.youtube.com/feeds/users/GoogleDevelopers/uploads?alt=json-in-script&amp;callback=getVideos"&gt;
&lt;/script&gt;</pre>
<p>Questo link ci permette di selezionare tutti i feed di un determinato utente (GoogleDevelopers) esenguendo una funzione javascript di callback (getVideos).</p>
<p>Andiamo quindi a definire la nostra funzione nella pagina.</p>
<pre>&lt;script type="text/javascript"&gt;
function getVideos(data) {

}
&lt;/script&gt;</pre>
<p>All&#8217;interno di questa funzione filtreremo i dati e li utilizzeremo per ottenere l&#8217;output desiderato.</p>
<p>Per prima cosa definiamo un array per i dati ottenuti</p>
<pre>var feed = data.feed;
var entries = feed.entry || [];</pre>
<p>Ora possiamo estrarre i dati utilizzando un ciclo for</p>
<pre>for (var i = 0; i &lt; entries.length; i++) {
}</pre>
<p>All&#8217;interno del quale ricaviamo i dati che ci servono</p>
<pre>var entry = entries[i];
var title = entry.title.$t.substr(0, 35);
var thumbnailUrl = entries[i].media$group.media$thumbnail[0].url;
var videoUrl = entries[i].media$group.media$player[0].url;</pre>
<p>Per gestire in maniera corretta l&#8217;output salviamo i dati relativi ai feed all&#8217;interno delle rispettive vairabili, in seguito raggruppiamo i dati con il codice html necessario all&#8217;impaginazione.</p>
<pre>html.push('&lt;div class="singleVideo"&gt;&lt;a rel="prettyPhoto[flash]" href="',videoUrl,'" title="',title,'"&gt;',
'&lt;img src="', thumbnailUrl, '"/&gt;','&lt;/a&gt;',
'&lt;a rel="prettyPhoto[flash]" href="',videoUrl,'" title="',title,'"&gt;&lt;span&gt;',title,'...&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;');</pre>
<p>Il risultato per ogni output del ciclo nell&#8217;html  sarà:</p>
<pre>&lt;div class="singleVideo"&gt;
&lt;a rel="prettyPhoto[flash]" href="[URLVIDEO]" title="[TITOLO VIDEO]"&gt;
&lt;img src="[THUMBNAILVIDEO]"/&gt;
&lt;/a&gt;
&lt;a rel="prettyPhoto[flash]" href="[URLVIDEO]" title="[TITOLO VIDEO]"&gt;
&lt;span&gt;[TITOLO VIDEO]...&lt;/span&gt;&lt;/a&gt;
&lt;/div&gt;</pre>
<p>L&#8217;ultima riga stamperà il risultato nell&#8217;elemento con l&#8217;id specificato</p>
<pre>document.getElementById('videoContainer').innerHTML = html.join('');</pre>
<h3>Aggiungiamo PrettyPhoto</h3>
<p>Avendo già inserito gli attributi <em>rel </em>per i link non resta che aggiungere Jquery e il plugin PrettyPhoto nella pagina</p>
<pre>&lt;script type="text/javascript" src="javascript/jquery.js"&gt;&lt;/script&gt;
&lt;script type="text/javascript" src="javascript/prettyPhoto.js"&gt;&lt;/script&gt;</pre>
<p>ed inserire le opzioni per il desiderato funzionamento di PrettyPhoto</p>
<pre>$(function() {
$("a[rel^='prettyPhoto']").prettyPhoto({
animationSpeed: 'normal',
padding: 40,
opacity: 0.35,
showTitle: true,
allowresize: true,
counter_separator_label: ' di ',
theme: 'light_square',
callback: function(){}
});
});</pre>
<p>Il risultato è visibile in questa <a title="Esempio di integrazione di API di Youtube con PrettyPhoto" href="http://www.howtoweb.it/wp-content/uploads/esempio_youtube/esempio_youtube.html" target="_self">demo</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.howtoweb.it/tutorial/integrare-api-di-youtube-prettyphoto/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Come utilizzare qualunque font nelle pagine web con Cufon</title>
		<link>http://www.howtoweb.it/tutorial/come-utilizzare-qualunque-font-cufon/</link>
		<comments>http://www.howtoweb.it/tutorial/come-utilizzare-qualunque-font-cufon/#comments</comments>
		<pubDate>Mon, 03 Aug 2009 12:46:37 +0000</pubDate>
		<dc:creator>Mauro Accornero</dc:creator>
				<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[web design]]></category>

		<guid isPermaLink="false">http://www.howtoweb.it/?p=497</guid>
		<description><![CDATA[Uno dei più grandi limiti del web per i designer è la ristretta scelta data dai font utilizzabili sul web. Normalmente è possibile definire una o più famiglie di font tramite la proprietà font-family nei css, esprimendo tramite l&#8217;ordine quale &#8230; <a href="http://www.howtoweb.it/tutorial/come-utilizzare-qualunque-font-cufon/">Continua a leggere<span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Uno dei più grandi limiti del web per i designer è la ristretta scelta data dai font utilizzabili sul web. Normalmente è possibile definire una o più famiglie di font tramite la proprietà <em>font-family </em>nei css, esprimendo tramite l&#8217;ordine quale famiglia utilizzare nel caso l&#8217;utente non abbia installato un determinato font.</p>
<p>Il grande problema è rappresentato dal fatto che non tutti i sistemi operativi hanno gli stessi font installati e solo poche famiglie di caratteri risultano comuni a tutti gli utenti.</p>
<p>Per far fronte a questo problema ed avere la possibilità di utilizzare un qualunque font su una pagina web è possibile utilizzare una tecnici di font replacement (nota anche come <a title="definizione di sIFR" href="http://en.wikipedia.org/wiki/Scalable_Inman_Flash_Replacement" target="_blank">sIFR</a>).</p>
<p>Esistono numerose tecniche per raggiungere il proprio obiettivo, una delle più recenti e funzionali è <a title="Cufon" href="http://wiki.github.com/sorccu/cufon/about" target="_blank">Cufon</a>.</p>
<p>Cufon permette la sotituzione del normale web font con un altro, tramite uno script Javascript che utilizzando <a title="Vector Markup Language" href="http://en.wikipedia.org/wiki/Vector_Markup_Language" target="_blank">VML</a> e <a title="Cos'è canvas e a cosa serve" href="http://www.howtoweb.it/articoli/cose-canvas-e-a-cosa-serve/" target="_blank">Canvas</a> permette una rapida sostituzione del testo con il carattere desiderato senza modificare il codice html.<span id="more-497"></span></p>
<p>Per iniziare ad utilizzare Cufon, creiamo una pagina html con del testo al quale sostituiremo il font con quello desiderato.</p>
<p>Come secondo step <a title="Cufon script" href="http://cufon.shoqolate.com/js/cufon-yui.js" target="_blank">scarichiamo lo script di cufon, </a>salviamolo in un file .js e colleghiamolo alla pagina html.</p>
<pre>&lt;<span class="start-tag">script</span><span class="attribute-name"> type</span>=<span class="attribute-value">"text/javascript" </span><span class="attribute-name">src</span>=<span class="attribute-value">"javascript/cufon.js"</span>&gt;&lt;/<span class="end-tag">script</span>&gt;</pre>
<p>Ora andiamo a scegliere un font da utilizzare nella pagina (per questa operazione è indispensabile avere il file del font) ed utilizziamo lo <a title="Cufon script generator" href="http://cufon.shoqolate.com/generate/" target="_blank">script generator presente sul sito di Cufon </a>.</p>
<p>Con questo comodo tool otterremo un file .js contenente tutte i dati per sotituire il font originale con quello desiderato.</p>
<p>Vediamo nel dettaglio i campi e a cosa servono:</p>
<p><em>Regular typeface </em>- Campo obbligatorio, qua dovrete selezionare il file del font presente sulla vostra macchina</p>
<p><em>Bold typeface , Italic typeface, Bold Italic typeface &#8211; </em>Campi opzionali, se il vostro font possiede un file per il grassetto, italico e il grassetto italico aggiungete in questi campi i rispettivi files. Questo passaggio è indispensabile per renderizzare il grassetto, l&#8217;italico e il grassetto italico di un font nella pagina web.</p>
<p><em>Use the following value as the <code>font-family</code> of the generated font &#8211; </em>Serve per definire una nomenclatura standard per i diversi files che verranno generati ed evitare errori nei collegamenti.</p>
<p><em>EULA -</em> Campo obbligatorio, con questo checkbox si conferma di avere il diritto di utilizzare un determinato font secondo la legge sulle proprietà d&#8217;intelletto.</p>
<p><em>Glyphs</em> &#8211; I checkbox seguenti richiedono quali caratteri utilizzare dalla famiglia font, come suggerito nel form è sconsigliabile utilizzarli tutti in quanto il file risulterebbe molto pesante. Una buona combinazione è data da &#8220;uppercase&#8221;, &#8220;lowercase&#8221;, &#8220;numerals&#8221;, &#8220;punctation&#8221; e &#8220;basic latin&#8221; che mette a disposizione maiuscole, minuscole, numeri e punteggiatura mantenendo le dimensioni del file contenuto. E&#8217; anche possibile aggiungere caratteri specifici non compresi nei precedenti checkbox tramite il form al termine di questa parte.</p>
<p><em>Security</em> &#8211; In caso di font commerciali può essere obbligatorio limitare l&#8217;utilizzo di un font a uno o più domini, inserire gli url nel campo per limitarne l&#8217;utilizzo.</p>
<p><em>Scale the font to the following size </em>- Permette di scalare il corpo del carattere riducendo così il peso dei singoli caratteri nella pagina. E&#8217; consigliabile mantenere comunque un corpo superiore alle 256 unità per preservarne la qualità.</p>
<p><em>If allowed, optimized paths may differ from the original by at most &#8211; </em>Definisce di quante unità rispetto all&#8217;originale verrà ottimizzato il singolo carattere,  è sconsigliabile utilizzare quest&#8217;opzione per font con corpo ridotto.</p>
<p><em>Include kerning table</em> &#8211; Aumenta la leggibilità del carattere ma anche il peso del javascript generato.</p>
<p>Gli ultimi due campi sono rispettivamente relativi alla condivisione dei dati e all&#8217;accettazione dei termini e delle condizioni del servizio.</p>
<p>Una volta completato cliccate sul pulsante in fondo e verrà generato uno o più  files javascript con il nome del vostro font e il corpo (es.<span class="attribute-value">Marketing_Script_400.font.js</span>), scaricatelo e linkatelo alla pagina html.</p>
<pre>&lt;<span class="start-tag">script</span><span class="attribute-name"> type</span>=<span class="attribute-value">"text/javascript" </span><span class="attribute-name">src</span>=<span class="attribute-value">"javascript/Marketing_Script_400.font.js"</span>&gt;&lt;/<span class="end-tag">script</span>&gt;</pre>
<p>Ora è possibile inserire il codice javascript nella pagina per definire a quale applicare il font replacement</p>
<pre>&lt;<span class="start-tag">script</span><span class="attribute-name"> type</span>=<span class="attribute-value">"text/javascript"</span>&gt;
   Cufon.replace('p');
&lt;/<span class="end-tag">script</span>&gt;</pre>
<p>E&#8217; possibile definire anche più elementi a cui applicare la sostituzione</p>
<pre>&lt;<span class="start-tag">script</span><span class="attribute-name"> type</span>=<span class="attribute-value">"text/javascript"</span>&gt;
  Cufon.replace(['h1','p']);
&lt;/<span class="end-tag">script</span>&gt;</pre>
<p>Esistono inoltre una serie di opzioni aggiuntivi per il funzionamento dell&#8217;hover o per l&#8217;utilizzo di sfumature di colore sul carattere, per una completa lista delle opzioni consultare la <a title="Cufon styling" href="http://wiki.github.com/sorccu/cufon/styling" target="_blank">sezione styling del sito di Cufon</a>.</p>
<p>Per un corretto funzionamento di Cufon la pagina html deve avere un doctype di tipo <em>strict, </em>inoltre per ottimizzare la velocità di rendering su ie si deve aggiungere questo script subito dopo il tag body</p>
<pre>&lt;!--[if IE]&gt;
  &lt;script type="text/javascript"&gt; Cufon.now(); &lt;/script&gt;
&lt;![endif]--&gt;</pre>
<p>Una volta completati questi passaggi potete vedere un risultato simile a <a title="Esempio di text replacement con Cufon" href="http://www.howtoweb.it/wp-content/uploads/cufon/esempio_cufon.html" target="_self">questa demo</a>.</p>
<p>Coma abbiamo visto Cufon richiede poco tempo per l&#8217;implementazione e garantisce un ottimo risultato nonostante ciò ha i suoi limiti, vediamo di fare un bilancio di questa tecnica:</p>
<h3>Vantaggi</h3>
<p>- Semplice implementazione</p>
<p>- Compatibile su tutti i più recenti browser</p>
<p>- Non modifica il codice html</p>
<p>- Mantiene il codice leggibile per i motori di ricerca</p>
<h3>Svantaggi</h3>
<p>- Peso dei file javascript</p>
<p>- Esecuzione lenta su grandi quantità di testo</p>
<p>- Obbligatorio l&#8217;utilizzo di un doctype strict</p>
<h3>Conclusioni</h3>
<p>Nonostante i limiti rimane al momento la miglior tecnica di font replacement per prestazioni e qualità, c&#8217;è da sperare che in immediato futuro tutti i browser supportino le nuove specifiche per l&#8217;html 5 e migliorino i tempi di esecuzione del javascript  in modo da avere migliori prestazioni sul rendering della pagina con questa tecnica.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.howtoweb.it/tutorial/come-utilizzare-qualunque-font-cufon/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Realizzare slideshow complessi con jquery cycle</title>
		<link>http://www.howtoweb.it/tutorial/realizzare-slideshow-complessi-con-jquery-cycle/</link>
		<comments>http://www.howtoweb.it/tutorial/realizzare-slideshow-complessi-con-jquery-cycle/#comments</comments>
		<pubDate>Mon, 27 Jul 2009 12:10:44 +0000</pubDate>
		<dc:creator>Mauro Accornero</dc:creator>
				<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[web design]]></category>

		<guid isPermaLink="false">http://www.howtoweb.it/?p=467</guid>
		<description><![CDATA[Tempo fa avevamo parlato di come realizzare un semplice slideshow con jquery, oggi vediamo come creare in poco tempo uno slideshow completamente customizzabile e compatibile grazie a jquery e jquery cycle. Cos&#8217;è jquery cycle? Jquery cycle è una libreria per &#8230; <a href="http://www.howtoweb.it/tutorial/realizzare-slideshow-complessi-con-jquery-cycle/">Continua a leggere<span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><img class="alignnone size-full wp-image-488" title="jquerycycle" src="http://www.howtoweb.it/wp-content/uploads/2009/07/jquerycycle1.jpg" alt="jquerycycle" width="580" height="201" /></p>
<p>Tempo fa avevamo parlato di <a title="Realizzare una semplice galleria immagini con jquery" href="http://www.howtoweb.it/tutorial/realizzare-una-semplice-galleria-immagini-con-jquery/" target="_self">come realizzare un semplice slideshow con jquery</a>, oggi vediamo come creare in poco tempo uno slideshow completamente customizzabile e compatibile grazie a jquery e jquery cycle.</p>
<h3>Cos&#8217;è jquery cycle?</h3>
<p>Jquery cycle è una libreria per jquery che permette la realizzazione di slideshow con molteplici effetti di transizione garantendo una buona customizzazione a livello funzionale tramite le opzioni messe a disposizione dagli sviluppatori.</p>
<p>Jquery cycle è scaricabile da <a title="Jquery cycle" href="http://malsup.com/jquery/cycle/" target="_blank">qui</a>.</p>
<h3><span id="more-467"></span>Come funziona?</h3>
<p>Per iniziare creiamo una pagina html ed inseririamo le immagini della nostra galleria all&#8217;interno di un div, al quale daremo delle regole css per dimensioni e stile.</p>
<pre>&lt;div id="photos"&gt;
&lt;img src="images/sample1.jpg" alt="Questa è la prima foto"/&gt;
&lt;img src="images/sample2.jpg" alt="Questa è la seconda foto"/&gt;
&lt;img src="images/sample3.jpg" alt="Questa è la terza foto"/&gt;
&lt;img src="images/sample1.jpg" alt="Questa è la quarta foto"/&gt;
&lt;img src="images/sample2.jpg" alt="Questa è la quinta foto"/&gt;
&lt;img src="images/sample3.jpg" alt="Questa è la sesta foto"/&gt;
&lt;img src="images/sample1.jpg" alt="Questa è la settima foto"/&gt;
&lt;/div&gt;</pre>
<p>Fatto questo colleghiamo la nostra pagina html alla libreria di jquery e al plugin di jquery cycle.</p>
<pre>&lt;script type="text/javascript" src="javascript/jquery.js"&gt;&lt;/script&gt;
&lt;script type="text/javascript" src="javascript/jquery_cycle.js"&gt;&lt;/script&gt;</pre>
<p>(ovviamente i percorsi andranno definiti in base alla struttura della cartella)</p>
<p>A questo punto inseriamo la funzione <em>cycle</em> che farà funzionare il nostro slideshow</p>
<pre>&lt;script type="text/javascript"&gt;
$(document).ready(function() {
  $('#photos').cycle({
    fx:'fade',
    speed:  1000,
    timeout: 2000
  });
});
&lt;/script&gt;</pre>
<p>In questo codice applichiamo la funzione <em>cycle </em>al div <em>#photos </em>definendo un effetto di transizione <em>fade</em>, una velocità di transizione di un secondo (<em>speed: 1000</em>) ed un timeout di due secondi (<em>timeout:2000).</em></p>
<p>Per vedere la demo clicca <a title="Esempio di slideshow semplice con Jquery cycle" href="http://www.howtoweb.it/wp-content/uploads/jquery_cycle/jquery_cycle.html" target="_self">qui</a>.</p>
<h3>Come aggiungere le thumbnails delle immagini</h3>
<p>Per aggiungere le thumbnails delle immagini possiamo utilizzare l&#8217;opzione <em>pager </em>per ottenere una paginazione numerica delle immagini e la funzione di callback <em>pagerAnchorBuilder </em>per sostituire i numeri alle rispettive thumbnails.</p>
<p>Creiamo quindi un div <em>#thumbnails </em>dove andremo a collocare le immagini</p>
<pre>&lt;div id="thumbnails"&gt;&lt;ul&gt;&lt;/ul&gt;&lt;/div&gt;</pre>
<p>Aggiungiamo quindi l&#8217;opzione <em>pager </em>per dichiarare a jquery cycle dove desideriamo collocare le anteprime</p>
<pre>$('#photos').cycle({
  fx:     'fade',
  speed:  1000,
  timeout: 2000,
  pager:  '#thumbnails ul',
});</pre>
<p>Per alleggerire l&#8217;esecuzione di javascript ho preferito aggiungere manualmente i tag <em>&lt;ul&gt;&lt;/ul&gt; </em>ma è possibile aggiungere questi tag attraverso jquery nel funzione <em>pagerAnchorBuilder </em>che andiamo ad aggiungere.</p>
<pre>$('#photos').cycle({
fx:     'fade',
speed:  1000,
timeout: 2000,
pager:  '#thumbnails ul',

pagerAnchorBuilder: function(idx, slide) {
return '&lt;li&gt;&lt;a href="#" title="Thumbnail"&gt;&lt;img src="' + slide.src + '"/&gt;&lt;/a&gt;&lt;/li&gt;';
}
});</pre>
<p>La funzione <em>pagerAnchorBuilder </em>la normale paginazione di jquery cycle con le immagini contenute nello slide show.</p>
<p>Questo permette di visualizzare l&#8217;immagine scelta cliccando sulla thumbnail, viene inoltre messa a disposizione la classe <em>.activeSlide </em>presente sull&#8217;immagine attualmente visualizzata.</p>
<p>Questa soluzione molto comoda renderizza però due volte la stessa immagine, appesantendo notevolmente la pagina, in un contesto dinamico sarebbe opportuno gestire le thumbnails lato server per evitare ridimensionamenti da css che non riducono il peso dell&#8217;immagine.</p>
<p>Per vedere la demo clicca <a title="Esempio di slideshow semplice con thumbnails realizzato con Jquery cycle" href="http://www.howtoweb.it/wp-content/uploads/jquery_cycle/jquery_cycle_thumbs.html" target="_self">qui</a></p>
<h3>Aggiungere una navigazione direzionale</h3>
<p>Oltre alle thumbnails potrebbe essere utile aggiungere la possibilità all&#8217;utente di passare alla foto successiva o di tornare a quella precedente.</p>
<p>Per farè ciò è sufficiente creare due link con id da associare a jquery cycle</p>
<pre>&lt;div id="navPhotos"&gt;
&lt;a id="prev" href=""&gt;&lt;img src="images/button_prev.png" alt="Prev photo"&gt;&lt;/a&gt;
&lt;a id="next" href=""&gt;&lt;img src="images/button_next.png" alt="Next photo"&gt;&lt;/a&gt;
&lt;/div&gt;</pre>
<p>e aggiungere le opzioni <em>prev </em>e <em>next</em> al nostro script</p>
<pre>[...]
next:   '#next',
prev:   '#prev',
[...]</pre>
<p>In questo modo i due link porteranno sempre all&#8217;immagine precedente o successiva.</p>
<p>Da notare che entrambi i link sono contenuti nel div <em>#navPhotos </em>a questo viene assegnato un posizionamento assoluto e uno z-index elevato poichè jquery cycle utilizza la proprietà z-index per mostrare le immagini. Diventa dunque indispensabile settare uno z-index che sia sempre superiore al numero di immagini per poszionare i due link sopra lo slideshow.</p>
<p>Per vedere la demo clicca <a title="Esempio di slideshow semplice con navigazione realizzato con Jquery cycle" href="http://www.howtoweb.it/wp-content/uploads/jquery_cycle/jquery_cycle_arrow.html" target="_self">qui</a></p>
<h3>Aggiungere una descrizione alle immagini</h3>
<p>Per aggiungere una descrizione alle immagini è possibile sfruttare l&#8217;attributo <em>alt </em>del tag <em>&lt;img&gt;.</em></p>
<p>Con l&#8217;aiuto dell opzioni <em>before </em>e <em>after </em>è possibile richiamare delle funzioni prima e dopo il caricamento dell&#8217;immagine.</p>
<p>Definiamo quindi una div <em>#description </em>dove andremo ad inserire le descrizioni</p>
<pre>&lt;div id="description"&gt;
&lt;/div&gt;</pre>
<p>E aggiungiamo al nostro script le opzioni <em>after </em>e <em>before </em>che richiameranno le funzioni <em>onAfter </em>e <em>onBefore</em></p>
<pre>[...]
before:  onBefore,
after:   onAfter,
[...]</pre>
<p>Ora definiamo le funzioni <em>onBefore </em>e <em>onAfter </em>per caricare il testo contenuto nell&#8217;attributo <em>alt </em>del tag <em>&lt;img&gt;</em></p>
<pre><em>function onBefore() {
  $('#description p').fadeOut('1000');
}
function onAfter() {
  $('#description p').fadeIn('1000');
  $('#description').html('&lt;p&gt;' + this.alt + '&lt;/p&gt;');
}

</em></pre>
<p>Queste due funzioni andranno definite al di fuori della funzione <em>cycle </em>poichè vengono valutate ad ogni caricamento della singola immagine.</p>
<p>Per il div <em>#description </em>è stata creata una regola css simile a <em>#navPhotos</em> in modo che la descrizione sia posta sopra lo slideshow con uno z-index superiore al numero di immagini presenti.</p>
<p>Per vedere una demo clicca <a title="Esempio di slideshow semplice con descrizione delle immagini realizzato con Jquery cycle" href="http://www.howtoweb.it/wp-content/uploads/jquery_cycle/jquery_cycle_description.html" target="_self">qui</a></p>
<h3>In conclusione</h3>
<p>Come abbiamo visto jquery cycle mette a disposizione un numero elevato di opzioni per realizzare slideshow, è possibile inoltre aggiungere dei pulsanti per mettere in pausa o far ripartire lo slideshow, caricare contenuto diverso da immagini, settare un tempo di delay per sincronizzare più slideshow e customizzare i numerosi effetti presenti.</p>
<p>Per maggiori informazioni sulle possibilità di customizzazione esiste una sezione <a title="jquery cycle demo and examples" href="http://malsup.com/jquery/cycle/" target="_blank">demo ed esempi</a> sul sito di jquery cycle sicuramente molto utile.</p>
<p>Inoltre grazie alla gestione dello stile da css e al semplice markup è possibile creare valide alternative senza javascript per migliorarne l&#8217;accessibilità rendenfo questa una delle migliori soluzioni per realizzare slideshow in contesti statici e dinamici.</p>
<p><em><br />
</em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.howtoweb.it/tutorial/realizzare-slideshow-complessi-con-jquery-cycle/feed/</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
		<item>
		<title>Realizzare layout al 100% di altezza con i css</title>
		<link>http://www.howtoweb.it/tutorial/realizzare-layout-altezza-fluida-con-i-css/</link>
		<comments>http://www.howtoweb.it/tutorial/realizzare-layout-altezza-fluida-con-i-css/#comments</comments>
		<pubDate>Mon, 15 Jun 2009 18:07:18 +0000</pubDate>
		<dc:creator>Mauro Accornero</dc:creator>
				<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[web design]]></category>

		<guid isPermaLink="false">http://www.howtoweb.it/?p=449</guid>
		<description><![CDATA[Molto spesso capita di dover realizzare layout fluidi, che a causa del molto contenuto debbano adattarsi in larghezza alle dimensioni del browser. In un precedente articolo abbiamo visto quanto sia semplice realizzare layout fluidi con una buona compatibilità tra browser. &#8230; <a href="http://www.howtoweb.it/tutorial/realizzare-layout-altezza-fluida-con-i-css/">Continua a leggere<span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Molto spesso capita di dover realizzare layout fluidi, che a causa del molto contenuto debbano adattarsi in larghezza alle dimensioni del browser. In un precedente articolo abbiamo visto quanto sia semplice realizzare layout fluidi con una buona compatibilità tra browser.</p>
<p>Obbiettivo più complesso è invece realizzare un layout con altezza che si adatti al browser. Questa operazione sicuramente non troppo comune ha il pregio (e soprattutto il difetto) di limitare il contenuto nell&#8217;altezza della finestra del browser.</p>
<p>Diventa quindi una scelta poco consigliata per garatire l&#8217;accessibilità dei contenuto, tuttavia può tornare utile per specifiche richieste che richiedono di emulare un full screen tipico dei siti in flash.</p>
<p>Per raggiungere in nostro obbiettivo è indispensabile far sì che il div contenitore della pagina mantenga un&#8217;altezza pari all&#8217;altezza della finestra del browser.</p>
<p>Cosa non fattibile settando semplicemente l&#8217;altezza dell&#8217;elemento al 100%, ma richiede che l&#8217;elemento genitore abbia settata un&#8217;altezza e che l&#8217;elemento in questione abbia un posizionamento assoluto.</p>
<pre>body{
margin:0;
padding:0;
height:100%;
}

#content{
height:100%;
width:100%;
position:absolute;
top:0;
left:0;
overflow:hidden;
}</pre>
<p>Grazie a questi parametri l&#8217;elemento si estende su tutta l&#8217;altezza della pagina rimanendo fuori dal flusso tradizionale con un posizionamento assoluto. <a title="Layout ad altezza 100%" href="http://www.howtoweb.it/wp-content/uploads/height/height.html" target="_self">Vedi l&#8217;esempio</a>.</p>
<p>Per aggiungere un footer al nostro layout sarà sufficiente ridurre l&#8217;altezza dell&#8217;elemento precedente di pari valore all&#8217;altezza del footer ricordando di settare un posizionamento assoluto con <em>bottom </em>uguale a 0.</p>
<pre>#footer{
height:10%;
width:100%;
position:absolute;
bottom:0;
left:0;
overflow:hidden;
}</pre>
<p>In questo modo il footer rimarrà attaccato al fondo della finestra del browser anche al resize da parte dell&#8217;utente. <a title="Layout ad altezza 100%" href="http://www.howtoweb.it/wp-content/uploads/height/height2.html" target="_self">Vedi esempio</a>.</p>
<p>Come ultimo esempio vediamo come rendere centrato e a larghezza fissa il nostro layout.</p>
<p>Iniziamo settando delle larghezze a larghezza fissa mentre per centrare gli elementi non utilizziamo i margini laterali settati su auto bensì la proprietà <em>left:50% </em>in aggiunta ad un margine sinistro negativo pari alla metà della larghezza dell&#8217;elemento.</p>
<pre>#content{
height:90%;
width:960px;
position:absolute;
top:0;
left:50%;
margin-left:-480px;
overflow:hidden;
}

#footer{
height:10%;
width:960px;
position:absolute;
bottom:0;
left:50%;
margin-left:-480px;
overflow:hidden;
}</pre>
<p>In questo modo otteniamo un layout a larghezza fissa centrato con altezza al 100% e footer adiacente al margine inferiore della finestra del browser. <a title="Layout ad altezza 100%" href="http://www.howtoweb.it/wp-content/uploads/height/height3.html" target="_self">Vedi l&#8217;esempio</a>.</p>
<h3>Note:</h3>
<p>Questa soluzione non è consigliata per siti complessi in quanto il posizionamente assoluto rende maggiormente complessa l&#8217;impaginazione dei contenuti e come detto all&#8217;inizio mette a repentaglio l&#8217;accessibilità dei contenuti a risoluzioni ridotte.</p>
<p>La proprietà <em>overflow:hidden; </em>è stata inserita negli elementi per evitare che al ridimensionamento della finestra del browser l&#8217;altezza del contenuto comprometta il layout  ma non è indispensabile per rendere l&#8217;altezza fluida.</p>
<p>Per far sì che il footer della pagina sia sempre adiacente al margine inferiore della pagina è possibile utilizzare solo il posizionamento assoluto con la proprietà <em>bottom:0; </em>senza ricorrere ad altezze in percentuale.</p>
<p>Le altezze in percentuale come le larghezze vengono renderizzate convertendo la dimensione in percentuale dell&#8217;elemento in pixel, può quindi accadere di avere uno spazio bianco tra due elementi (come #content e #footer) dato da un arrotondamento approssimativo, per risolvere questo problema è possibile utilizzare il background del body per non rendere visibile questo spazio. Nell&#8217;esempio si è settato volontariamente un sfondo bianco per rendere visibile questa problematica.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.howtoweb.it/tutorial/realizzare-layout-altezza-fluida-con-i-css/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
	</channel>
</rss>

