<?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>Pixline &#187; CSS</title>
	<atom:link href="http://pixline.net/tag/css/it/feed/it/" rel="self" type="application/rss+xml" />
	<link>http://pixline.net</link>
	<description>handmade coding &#038; wordpress hacking</description>
	<lastBuildDate>Tue, 03 Mar 2009 20:57:23 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>it</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Ecco a voi CSS:Greyscaper</title>
		<link>http://pixline.net/2008/05/ecco-a-voi-css-greyscaper/it/</link>
		<comments>http://pixline.net/2008/05/ecco-a-voi-css-greyscaper/it/#comments</comments>
		<pubDate>Tue, 06 May 2008 15:43:51 +0000</pubDate>
		<dc:creator>paolo</dc:creator>
				<category><![CDATA[CSS schemes]]></category>
		<category><![CDATA[color scheme]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Greyscaper]]></category>
		<category><![CDATA[wp-admin]]></category>

		<guid isPermaLink="false">http://pixline.net/?p=191</guid>
		<description><![CDATA[CSS:Greyscaper è il mio primo schema di colori per l&#8217;area amministrativa di WordPress. E&#8217; basato sulla paletta di colori &#8216;Greyscale Paper&#8217; di victorfacius, trovata su Adobe Kuler. A voi!
 

]]></description>
			<content:encoded><![CDATA[<p><a href="http://pixline.net/plugin-per-wordpress/css-greyscaper-schema-colori-wordpress/it/">CSS:Greyscaper</a> è il mio primo schema di colori per l&#8217;area amministrativa di WordPress. E&#8217; basato sulla paletta di colori &#8216;Greyscale Paper&#8217; di victorfacius, trovata su Adobe Kuler. <a href="http://pixline.net/plugin-per-wordpress/css-greyscaper-schema-colori-wordpress/it/">A voi</a>!</p>
<p> </p>
<p><a href="http://pixline.net/plugin-per-wordpress/css-greyscaper-schema-colori-wordpress/it/"><img class="aligncenter size-medium wp-image-186" title="Greyscaped dashboard" src="http://pixline.net/files/2008/05/greyscape_dashboard-300x186.png" alt="Greyscaped dashboard" width="300" height="186" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://pixline.net/2008/05/ecco-a-voi-css-greyscaper/feed/it/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Buon CSS Naked Day!</title>
		<link>http://pixline.net/2008/04/buon-css-naked-day/it/</link>
		<comments>http://pixline.net/2008/04/buon-css-naked-day/it/#comments</comments>
		<pubDate>Tue, 08 Apr 2008 23:01:01 +0000</pubDate>
		<dc:creator>pixline</dc:creator>
				<category><![CDATA[Accessibilità]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[CSS Naked Day]]></category>

		<guid isPermaLink="false">http://pixline.net/?p=157</guid>
		<description><![CDATA[Questo sito internet supporta il CSS Naked Day, promosso da Dustin Diaz. E&#8217; solo il nostro contributo alla promozione degli standard web. Potete trovare maggiori informazioni sul sito internet del CSS Naked Day. 
E, si, lo sappiamo, il nostro &#60;body&#62; non è molto in forma (questa rende meglio in inglese; n.d.A), ma stiamo lavorandoci giorno [...]]]></description>
			<content:encoded><![CDATA[<p>Questo sito internet supporta il <a href="http://naked.dustindiaz.com/">CSS Naked Day</a>, promosso da <a href="http://www.dustindiaz.com/">Dustin Diaz</a>. E&#8217; solo il nostro contributo alla promozione degli standard web. Potete trovare maggiori informazioni sul sito internet del <a href="http://naked.dustindiaz.com/">CSS Naked Day</a>. </p>
<p>E, si, lo sappiamo, il nostro &lt;body&gt; <a href="http://validator.w3.org/check?uri=http%3A%2F%2Fpixline.net">non è molto in forma</a> (questa rende meglio in inglese; n.d.A), ma stiamo lavorandoci giorno dopo giorno, è letteralmente un work in progress.. :-)</p>
]]></content:encoded>
			<wfw:commentRss>http://pixline.net/2008/04/buon-css-naked-day/feed/it/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Showcase: Pixline restyling</title>
		<link>http://pixline.net/2007/05/showcase-pixline-restyling/it/</link>
		<comments>http://pixline.net/2007/05/showcase-pixline-restyling/it/#comments</comments>
		<pubDate>Thu, 24 May 2007 16:24:11 +0000</pubDate>
		<dc:creator>pixline</dc:creator>
				<category><![CDATA[Showcase]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[kuler]]></category>
		<category><![CDATA[restyling]]></category>
		<category><![CDATA[simone_ferraro]]></category>
		<category><![CDATA[stili]]></category>

		<guid isPermaLink="false">http://pixline.net/2007/05/showcase-pixline-restyling/</guid>
		<description><![CDATA[Pixline si prepara al decimo anno di attività con un nuovo gruppo di coders, un nuovo logo e una nuova veste grafica per il sito internet.
La nuova grafica è una derivazione del tema Unsleepable per WordPress, basato sul tema K2 e creato da Ben Gray, aka Openswitch. L&#8217;intero tema è stato modificato in modo da [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://pixline.net/files/2007/05/screenshot.png" title="Pixline Logo"><img src="http://pixline.net/files/2007/05/screenshot.thumbnail.png" title="Pixline Logo" alt="Pixline Logo" align="left" /></a>Pixline si prepara al decimo anno di attività con un nuovo gruppo di coders, un nuovo logo e una nuova veste grafica per il sito internet.</p>
<p>La nuova grafica è una derivazione del tema <a href="http://openswitch.org/unsleepable">Unsleepable</a> per WordPress, basato sul tema <a href="http://getk2.com">K2</a> e creato da <a href="http://openswitch.org/about/">Ben Gray, <em>aka</em> Openswitch</a>. L&#8217;intero tema è stato modificato in modo da uniformarsi al nuovo logo Pixline creato da <a href="http://kallipolis.net/graphixx/">Simone Ferraro</a>, e adottando una paletta di colori un po&#8217; meno grigia dell&#8217;originale. La paletta originaria è reperibile su <a href="http://kuler.adobe.com">Adobe Kuler</a> ed è chiamata &#8216;Post Dolores&#8217;, anche se è stata leggermente modificata nel nostro caso.</p>
<p>Il nuovo sito pixline fa uso dei seguenti plugin WordPress:</p>
<ul>
<li><a href="http://akismet.com/">Akismet</a> per evitare spam nei commenti;</li>
<li><a href="http://meidell.dk/archives/category/wordpress/latest-comments/">Brian&#8217;s Latest Comments</a> per mostrare i commenti in modo più coerente;</li>
<li><a href="http://ideathinking.com/wiki/index.php/WordPress:CodeHighlighterPlugin">CodeHighlighter</a> per evidenziare il codice sorgente e la sua sintassi negli articoli e nei tutorial;</li>
<li><a href="http://cavemonkey50.com/code/google-analyticator/">Google Analyticator</a> per tenere traccia degli accessi al sito;</li>
<li><a href="http://www.arnebrachhold.de/2005/06/05/google-sitemaps-generator-v2-final">Google Sitemaps</a> per generare le mappe del sito richieste dai maggiori motori di ricerca</li>
<li><a href="http://alexrabe.boelinger.com/?page_id=80">NextGEN Gallery</a> per gestire le immagini e le gallerie immagini</li>
<li><a href="http://pixline.net/wordpress-plugins/upload-plus/">Upload+</a> per rendere sani i nomi dei file inviati al server</li>
<li><a href="http://www.neato.co.nz/ultimate-tag-warrior/">Ultimate Tag Warrior</a> per gestire in modo più leggero un ampio numero di parole chiave</li>
</ul>
<p>Il template è ottimizzato per ogni browser recente, e per un ampio numero di versioni precedenti. E&#8217; testato su Internet Explorer, Firefox, Safari, Opera e Lynx su tre differenti sistemi operativi, ma non per questo siamo certi di aver soddisfatto ogni browser possibile; segnalateci gli eventuali problemi o le vostre impressioni!</p>
]]></content:encoded>
			<wfw:commentRss>http://pixline.net/2007/05/showcase-pixline-restyling/feed/it/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>YUI CSS Reset: stilizzare il web in modo semplice</title>
		<link>http://pixline.net/2006/12/yui-css-reset-stilizzare-il-web-in-modo-semplice-2/it/</link>
		<comments>http://pixline.net/2006/12/yui-css-reset-stilizzare-il-web-in-modo-semplice-2/it/#comments</comments>
		<pubDate>Wed, 20 Dec 2006 17:32:07 +0000</pubDate>
		<dc:creator>pixline</dc:creator>
				<category><![CDATA[Tecniche]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[yahoo]]></category>
		<category><![CDATA[YUI]]></category>

		<guid isPermaLink="false">http://pixline.net/2006/12/yui-css-reset-stilizzare-il-web-in-modo-semplice-2/</guid>
		<description><![CDATA[Yahoo ha reso disponibile un nuovo componente chiave del suo framework web YUI; si chiama reset.css, e non è altro che un file con 30-righe-30 di codice CSS in grado di AZZERARE le differenze tra un browser e l'altro, o quasi.]]></description>
			<content:encoded><![CDATA[<p>Yahoo ha reso disponibile un nuovo componente chiave del suo framework web YUI, sempre nell&#8217;ottica di fornire strumenti utili a disegnare un sito o una interfaccia nel modo più semplice possibile, senza gridare ogni volta che si prova un altro browser&#8230; e chi scrive CSS sa cosa intendo ;-)   </p>
<p>La chicca in questione si chiama reset.css, e non è altro che un file con 30-righe-30 di codice CSS in grado di AZZERARE le differenze tra un browser e l&#8217;altro, o quasi. Il suo uso è semplicissimo: basta includerlo PRIMA di ogni altro stile in una pagina html.</p>
<p><a href='http://developer.yahoo.com/yui/reset/' title='YUI CSS reset'>http://developer.yahoo.com/yui/reset/</a></p>
<p>Con questo foglio di stile, è possibile scrivere stili coerenti a prescindere dal browser; bisogna  comunque tenere presente che con questo reset è necessario dichiarare esplicitamente ogni stile, anche i più ovvi (quindi, per esempio, è necessario definire strong{} con font-weight:bold; altrimenti verrà visualizzato normale).</p>
<p>Anche se questo file può essere usato <em>stand-alone</em>, è auspicabile tenere in considerazione l&#8217;uso del <a href='' title='Yahoo User Interface Framework'>framework YUI</a> per avere a disposizione controlli ancora più potenti sull&#8217;uniformità di una interfaccia a prescindere dal browser. Per chi si chiedesse a cosa serve, o se ne vale la pena, consiglio una visita alla <a href='http://yahoo.com' title='yahoo'>homepage</a> e alla <a href='http://mail.yahoo.com' title='yahoo mail'>webmail</a> di Yahoo&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://pixline.net/2006/12/yui-css-reset-stilizzare-il-web-in-modo-semplice-2/feed/it/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Javascript non intrusivo (6/6)</title>
		<link>http://pixline.net/2006/09/javascript-non-intrusivo-6di6/it/</link>
		<comments>http://pixline.net/2006/09/javascript-non-intrusivo-6di6/it/#comments</comments>
		<pubDate>Mon, 11 Sep 2006 17:42:09 +0000</pubDate>
		<dc:creator>pixline</dc:creator>
				<category><![CDATA[Accessibilità]]></category>
		<category><![CDATA[Tecniche]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[elementi]]></category>
		<category><![CDATA[getelementbyid]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[stili]]></category>
		<category><![CDATA[traduzione]]></category>

		<guid isPermaLink="false">http://altro.pixline.net/2006/09/javascript-non-intrusivo-66/</guid>
		<description><![CDATA[Arrivare alla completa separazione &#8211; con successo &#8211; di struttura, presentazione e comportamento, applicando dinamicamente stili CSS agli elementi. Ultimo capitolo del corso di Javascript non intrusivo.
 Separazione di CSS e Javascript
Potreste aver notato nei precedenti esempi che non abbiamo esattamente praticato quello che abbiamo spiegato.
Il nostro errore
E&#8217; vero, abbiamo separato la struttura dalle azioni, [...]]]></description>
			<content:encoded><![CDATA[<p>Arrivare alla completa separazione &#8211; con successo &#8211; di struttura, presentazione e comportamento, applicando dinamicamente stili CSS agli elementi. Ultimo capitolo del corso di <a href="http://www.onlinetools.org/articles/unobtrusivejavascript/">Javascript non intrusivo</a>.</p>
<p><span id="more-24"></span> <strong>Separazione di CSS e Javascript</strong></p>
<p>Potreste aver notato nei precedenti esempi che non abbiamo esattamente praticato quello che abbiamo spiegato.</p>
<p><strong>Il nostro errore</strong></p>
<p>E&#8217; vero, abbiamo separato la struttura dalle azioni, ma abbiamo anche definito una presentazione via Javascript, il che è decisamente sbagliato da un punto di vista semantico.</p>
<p>Abbiamo definito la presentazione accedendo alle proprietà di stile degli elementi:</p>
<p>if(!document.getElementById(&#8217;errormsg&#8217;)){<br />
    var em=document.createElement(&#8217;p');<br />
    em.id=&#8217;errormsg&#8217;;<br />
    em.style.border=&#8217;2px solid #c00&#8242;;<br />
    em.style.padding=&#8217;5px&#8217;;<br />
    em.style.width=&#8217;20em&#8217;;<br />
    em.appendChild(document.createTextNode(&#8217;Please enter<br />
		or change the fields marked with a &#8216;))<br />
    i=document.createElement(&#8217;img&#8217;);<br />
    i.src=&#8217;img/alert.gif&#8217;;<br />
    i.alt=&#8217;Error&#8217;;<br />
    i.title=&#8217;This field has an error!&#8217;;<br />
    em.appendChild(i);<br />
}</p>
<p>Questo significa che in qualunque momento sia necessario cambiare l&#8217;aspetto della nostra modifica, avremo bisogno di modificare il Javascript, e questo non è nè pratico nè intelligente.</p>
<p>Ci sono diversi modi per applicare una presentazione definita nei CSS a un elemento raggiunto via Javascript. Uno potrebbe voler applicare un ID a un elemento cambiando il suo attribute ID. Una via decisamente più versatile è quella di applicare una class all&#8217;elemento, specialmente in quanto gli elementi possono avere più di una classe.</p>
<p><strong>Sintassi a classi multiple</strong></p>
<p>Perchè un elemento possieda più di una class, basta semplicemente separare i nomi delle classe con uno spazio: </p>
<div class="special highlight kids">
<p>Questo è supportato da molta parte dei browser moderni, alcuni dei quali tuttavia mostrano qualche problema. IE su di un Mac non gradisce classi multiple quando una classe contiene il nome di un&#8217;altra, e si comporta decisamente male quando l&#8217;attributo class inizia o finisce con uno spazio.</p>
<p><strong>Applicare classi via Javascript</strong></p>
<p>Per aggiungere una classe a un certo elemento, dobbiamo modificre il suo attributo className. Quindi se vogliamo cambiare un elemento di navigazione solo se Javascript e il DOM sono disponibili, possiamo fare questo:</p>
<p><strong>HTML:</strong></p>
<ul id="nav">
   [...]
</ul>
<p><strong>Javascript:</strong></p>
<p>if(document.getElementById &#038;&#038; document.createTextNode){<br />
  if(document.getElementById(&#8217;nav&#8217;)){<br />
    document.getElementById(&#8217;nav&#8217;).className=&#8217;isDOM&#8217;;<br />
  }<br />
}</p>
<p>Questo ci permetterà di definire due differenti stati nel nostro CSS:</p>
<p>ul#nav{<br />
  [ ... ]<br />
}<br />
ul#nav.isDOM{<br />
  [ ... ]<br />
}</p>
<p>Questo sovrascriverà ogni classe finora applicata all&#8217;elemento. Per questo abbiamo bisogno di controllare se esiste una precedente classe applicata ed aggiungere la nuova preceduta da uno spazio, nel caso.</p>
<p>if(document.getElementById &#038;&#038; document.createTextNode){<br />
  var n=document.getElementById(&#8217;nav&#8217;);<br />
  if(n){<br />
    n.className+=n.className?&#8217; isDOM&#8217;:'isDOM&#8217;;<br />
  }<br />
}</p>
<p>Lo stesso si applica quando vogliamo rimuovere una classe aggiunta dinamicamente, in quanto alcuni browser non permettono una sintassi simile a class=&#8221;foo bar &#8220;. Questo può essere noioso, ed è molto più semplice riutilizzare una funzione che farà questo per noi (<- indica un ritorno a capo):</p>
<p>function jscss(a,o,c1,c2){<br />
  switch (a){</p>
<p>    case 'swap':<br />
      o.className=!jscss('check',o,c1)?o.className.replace(c2,c1): <-<br />
      o.className.replace(c1,c2);<br />
    break;</p>
<p>    case 'add':<br />
      if(!jscss('check',o,c1)){o.className+=o.className?' '+c1:c1;}<br />
    break;</p>
<p>    case 'remove':<br />
      var rep=o.className.match(' '+c1)?' '+c1:c1;<br />
      o.className=o.className.replace(rep,'');<br />
    break;</p>
<p>    case 'check':<br />
      return new RegExp('\\b'+c1+'\\b').test(o.className)<br />
    break;<br />
  }<br />
}</p>
<p>Questa funzione di esempio richiede quattro parametri:</p>
<blockquote><p>
<em><br />
<strong>a</strong>        definisce l&#8217;azione che volete effettuare<br/><br />
<strong>o</strong>        l&#8217;oggetto in questione<br/><br />
<strong>c1</strong>      il nome della prima classe<br/><br />
<strong>c2</strong>      il nome della seconda classe<br/><br />
</em></p></blockquote>
<p>Azioni possibili sono:</p>
<blockquote><p>
<em><br />
<strong>swap</strong>       sostituisce la classe c1 con la classe c2 nell&#8217;oggetto o<br/><br />
<strong>add</strong>         aggiunge la classe c1 all&#8217;oggetto o<br/><br />
<strong>remove</strong>    rimuove la classe c1 dall&#8217;oggetto o<br/><br />
<strong>check</strong>       controlla se la classe c1 è già applicata all&#8217;oggetto o e restituisce true o false.</em>
</p></blockquote>
<p>Vediamo un esempio di come si può usare. Vogliamo tutte le testate di secondo livello (h2) espandere e comprimere il loro elemento più prossimo (next sibling). Una classe dovrebbe essere applicata alla testata per indicare che è un elemento dinamico, e una classe all&#8217;elemento successivo per nasconderlo. Una volta che una testata è attivata,, dovrebbe ricevere un altro stile e l&#8217;elemento successivo dovrebbe essere mostrato. Per rendere il tutto più interessante, vogliamo inoltre un effetto rollover sulla testata.</p>
<p><strong>CSS:</strong></p>
<p>.hidden{<br />
display:none;<br />
}<br />
.shown{<br />
display:block;<br />
}<br />
.trigger{<br />
background:#ccf;<br />
}<br />
.open{<br />
background:#66f;<br />
}<br />
.hover{<br />
background:#99c;<br />
}</p>
<p><strong>Javascript:</strong></p>
<p>function collapse(){<br />
// controlla se DOM è presente, return in caso contrario<br />
	if(!document.createTextNode){return;}<br />
// crea un nuovo paragrafo che spiega che le testate<br />
// sono cliccabili<br />
	var p=document.createElement(&#8217;p');<br />
	p.appendChild(document.createTextNode(&#8217;Clicca sulla testata per espandere o comprimere il contenuto&#8217;));<br />
// effettua un loop di tutte le testate di secondo livello<br />
        var heads=document.getElementsByTagName(&#8217;h2&#8242;);<br />
	for(var i=0;i<heads.length;i++)<br />
		{<br />
// identifica il nextSibling (il loop è necessario<br />
// a causa di problemi con gli spazi vuoti)<br />
		var tohide=heads[i].nextSibling;<br />
		while(tohide.nodeType!=1)<br />
		{<br />
		tohide=tohide.nextSibling;<br />
		}<br />
// nasconde il sibling applicando la classe 'hidden'<br />
// e mostra che la testata e' cliccabile assegnando<br />
// la classe 'trigger'<br />
		cssjs('add',tohide,'hidden')<br />
		cssjs('add',heads[i],'trigger')<br />
// memorizza l'elemento da nascondere in un attributo<br />
		heads[i].tohide=tohide;<br />
// aggiunge la classe 'hover' quando il mouse tocca la testata<br />
		heads[i].onmouseover=function()<br />
		{<br />
			cssjs('add',this,'hover');<br />
		}<br />
// rimuove la classe 'hover' quando il mouse esce dalla testata<br />
		heads[i].onmouseout=function()<br />
		{<br />
			cssjs('remove',this,'hover');<br />
		}<br />
// nel caso in cui l'utente attivi la headline<br />
		heads[i].onclick=function()<br />
		{<br />
// controlla se la classe 'hidden' e' gia' assegnata<br />
// al next sibling<br />
			if(cssjs('check',this.tohide,'hidden'))<br />
			{<br />
// se e' il caso, la sostituisce con shown<br />
// e la classe della testata con open<br />
			cssjs('swap',this,'trigger','open');<br />
			cssjs('swap',this.tohide,'hidden','shown');<br />
			} else {<br />
// e viceversa<br />
			cssjs('swap',this,'open','trigger');<br />
			cssjs('swap',this.tohide,'shown','hidden');<br />
			}<br />
		}<br />
// inserisce il nuovo paragrafo prima della prossima h2.<br />
  document.body.insertBefore(p,document.getElementsByTagName('h2')[0]);<br />
}</p>
<p>function cssjs(a,o,c1,c2){<br />
[...]<br />
}<br />
}</p>
<p>window.onload=collapse;</p>
<p><a href="http://www.onlinetools.org/articles/unobtrusivejavascript/demo_cssseparation.html">Prova questa funzione online</a></p>
<p>Questo è il modo in cui abbiamo separato con successo struttura, presentazione e comportamento, e creato un effetto piuttosto complesso. La manutenzione di questo effetto è semplice e non richiede alcuna conoscenza di Javascript.</p>
<p>Salvate <a href="http://www.onlinetools.org/articles/unobtrusivejavascript/cssjs.js">css.js</a> per il vostro uso salvandolo tramite il seguente link sul vostro computer.</p>
]]></content:encoded>
			<wfw:commentRss>http://pixline.net/2006/09/javascript-non-intrusivo-6di6/feed/it/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Javascript non intrusivo (1/6)</title>
		<link>http://pixline.net/2006/09/javascript-non-intrusivo-1di6/it/</link>
		<comments>http://pixline.net/2006/09/javascript-non-intrusivo-1di6/it/#comments</comments>
		<pubDate>Sun, 10 Sep 2006 21:30:36 +0000</pubDate>
		<dc:creator>pixline</dc:creator>
				<category><![CDATA[Accessibilità]]></category>
		<category><![CDATA[Tecniche]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[elementi]]></category>
		<category><![CDATA[getelementbyid]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[traduzione]]></category>

		<guid isPermaLink="false">http://www.nu.pixline.net/2006/09/javascript-non-intrusivo-1di6/</guid>
		<description><![CDATA[Traduzione del primo capitolo del corso di javascript non intrusivo di Chris Heilmann. Dopo aver separato presentazione, dati e struttura, questo corso spiega un ulteriore livello di astrazione da raggiungere: le azioni.

Javascript è uno splendido strumento per aumentare l&#8217;usabilità di un sito web. E&#8217; il layer aggiuntivo sopra il mark-up &#8220;cos&#8217;è questo testo&#8221; e il [...]]]></description>
			<content:encoded><![CDATA[<p>Traduzione del primo capitolo del <a title="Sito internet del corso originale (eng)" href="http://www.onlinetools.org/articles/unobtrusivejavascript/">corso di javascript non intrusivo</a> di Chris Heilmann. Dopo aver separato presentazione, dati e struttura, questo corso spiega un ulteriore livello di astrazione da raggiungere: le azioni.</p>
<p><span id="more-19"></span></p>
<p>Javascript è uno splendido strumento per aumentare l&#8217;usabilità di un sito web. E&#8217; il layer aggiuntivo sopra il mark-up &#8220;cos&#8217;è questo testo&#8221; e il CSS &#8220;come dev&#8217;essere mostrato&#8221;. Javascript aggiunge una nuova dimensione, il &#8220;come questo elemento si comporta&#8221;.</p>
<p>Nelle pagine seguenti discuteremo e vedremo come possiamo usare Javascript, mantenendo invariata l&#8217;accessibilità. La tecnica di separare completamente Javascript dagli altri due livelli dello sviluppo web è diventata nota sotto il nome &#8220;Javascript non intrusivo&#8221;, dato che &#8220;Javascript accessibile&#8221; non definisce esattamente la tecnica in questione. E&#8217; possibile avere un Javascript perfettamente separato ed essere ancora totalmente inaccessibili.</p>
<p>Comunque sia, entriamo nei dettagli.</p>
<p><span style="font-weight: bold"></p>
<p><span style="text-decoration: underline">Capitolo 1: Operazione Pulizia</p>
<p><br style="font-weight: bold; text-decoration: underline" /></span></span><br />
Lo sviluppo web negli scorsi anni ha subito un cambiamento, abbiamo smesso di mescolare la presentazione con la struttura, e questo ha reso più facile il cambiare layout attraverso il sito cambiando semplicemente il foglio di stile. Ulteriore separazione è possibile evitando l&#8217;uso di ogni stile e classe inserita nel codice, preferendo l&#8217;ereditarietà e i selettori contestuali</p>
<table border="0" cellpadding="0" width="100%" cellspacing="5">
<tr>
<td><font face="Arial" size="-2">Lorem Ipsum</font></td>
</tr>
</table>
<p>diventa</p>
<p><strong><acronym title="Cascading Style Sheets">CSS</acronym>:</strong></p>
<p>td.content {<br />
  font-family:Arial,sans-serif;<br />
  font-size:12px;<br />
}</p>
<p><strong>HTML:</strong></p>
<table cellpadding="0">
<tr>
<td class="content">Lorem Ipsum</td>
</tr>
</table>
<p>e alla fine</p>
<p><strong><acronym title="Cascading Style Sheets">CSS</acronym>:</strong></p>
<p>body {<br />
  font-family:Arial,sans-serif;<br />
  font-size:12px;<br />
}<br />
p {<br />
  padding:5px;<br />
}</p>
<p><strong><acronym title="Hypertext Markup Language">HTML</acronym>:</strong></p>
<p> < p > Lorem Ipsum < /p ></p>
<p>La stessa evoluzione può e deve accadere per Javascript.</p>
<p><span style="font-weight: bold">Tenere Javascript separato</span><br style="font-weight: bold" /><br />
La prima regola del club del Javascript non intrusivo è di non parlare mai del club del Javascript non intrusivo. No, aspettate, è&#8230;</p>
<p><span style="font-weight: bold"></p>
<p>1. Mai, in nessuna circostanza, aggiungere Javascript direttamente al documento.</span><br style="font-weight: bold" /><br />
Uno dei grandi pregi di Javascript è che può essere consegnato tramite un file separato. Come i CSS, questo significa che è possibile applicare una collezione di funzioni ad ogni pagina del sito, e se è necessario modificare una sua funzionalità, può essere fatto in un documento anzichè modificare ogni singola pagina.</p>
<p>Questo significa &#8211; tranne in casi particolari &#8211; che tutto ciò che è necessario vedere in un documento HTML è:</p>
<p><script type="text/javascript" src="scripts.js"></script></p>
<p>Questo è tutto ciò di cui avremo bisogno, non più inline Javascript. Leggete e ripetete.</p>
<p><span style="font-weight: bold">2. Javascript è un miglioramento, non una funzionalità certa.</span><br/><br />
Possiamo usare Javascript solamente per migliorare una funzionalità già presente, non possiamo affidarci completamente ad esso. Il supporto Javascript può essere disattivato o filtrato tramite un proxy o un firewall di una compagnia sensibile ai problemi di sicurezza. Non è possibile considerarlo come garantito.</p>
<p>Questo non significa che non possiamo usare Javascript, ma solamente che dovrà essere aggiunto come una opzione piuttosto che come un requisito.</p>
<p><strong><acronym title="Hypertext Markup Language">HTML</acronym>:</strong></p>
<form action="index.php" onsubmit="return checkform(this)">
 <label for="login">Login:</label></p>
<input type="text" name="login" id="login" />
 <label for="pw">Password:</label></p>
<input type="password" name="pw" id="pw" />
<input type="submit" value="send" />
</form>
<p><strong>Javascript:</strong></p>
<p>function checkform(f)<br />
{<br />
 var error=&#8221;;<br />
 error+=f.login.value==&#8221;?&#8217;\nlogin&#8217;:&#8221;;<br />
 error+=f.pw.value==&#8221;?&#8217;\npassword&#8217;:&#8221;;<br />
 if (error!=&#8221;)<br />
 {<br />
  alert(&#8217;Please enter the following:&#8217;+error);<br />
 }<br />
 return error==&#8221;;<br />
}</p>
<p>E&#8217; perfettamente valido, ed eviterà gli utenti di affrontare un reload di pagina quando è stato dimenticato l&#8217;inserimento di un valore.</p>
<p><strong><acronym title="Hypertext Markup Language">HTML</acronym>:</strong></p>
<form action="index.php">
 <label for="login">Login:</label></p>
<input type="text" name="login" id="login" />
 <label for="pw">Password:</label></p>
<input type="password" name="pw" id="pw" />
<input type="button" onclick="checkform()" value="send" />
</form>
<p><strong>Javascript:</strong></p>
<p>function checkform()<br />
{<br />
 var f=document.forms[0];<br />
 var error=&#8221;;<br />
 error+=f.login.value==&#8221;?&#8217;\nlogin&#8217;:&#8221;;<br />
 error+=f.pw.value==&#8221;?&#8217;\npassword&#8217;:&#8221;;<br />
 if (error!=&#8221;)<br />
 {<br />
  alert(&#8217;Please enter the following:&#8217;+error);<br />
 } else {<br />
  f.submit();<br />
 }<br />
}</p>
<p>Apparentemente agisce allo stesso modo, ma ha un problema. Se Javascript è disattivato, il pulsante di invio non effettuerà alcuna azione, a prescindere dal numero di volte che l&#8217;utente frustrato lo premerà. Ripetiamo: non si può avere fiducia su Javascript, non bisogna affidarsi ad esso.</p>
<p><span style="font-weight: bold"></p>
<p>3. Controlla la disponibilità di un oggetto prima di accedere ad esso</span><br style="font-weight: bold" /><br />
Molti errori Javascript occorrono semplicemente perchè lo sviluppatore era troppo pigro per controllare se un <span style="font-style: italic">metodo</span> o un <span style="font-style: italic">oggetto</span> era disponibile o meno.</p>
<p><strong>Javascript:</strong></p>
<p>function color(o,col){<br />
  o.style.background=col;<br />
}</p>
<p>può risultare in un errore Javascript, quando l&#8217;oggetto <span style="font-style: italic">o</span> non è disponibile.</p>
<p><strong>Javascript:</strong></p>
<p>function color(o,col){<br />
 if(o) {<br />
   o.style.background=col;<br />
  }<br />
}</p>
<p>funzionerà in ogni situazione.</p>
<p>Questa tecnica è prevalentemente usata per controllare se un browser è abile a supportare una certa funzionalità Javascript. Nei giorni delle prove e degli errori durante lo sviluppo (non importava, pagava il cliente, o la .com per cui si lavorava) questo era effettuato tramite uno script di identificazione browser, un concetto malato dal principio (ogni volta che un browser era aggiornato o un nuovo browser era diffuso, lo script aveva bisogno di essere aggiornato). Per molti degli esempi usati attualmente è necessario controllare se il browser è in grado di capire il <a title="World Wide Web Consortium" href="http://www.w3.org/">W3C</a> <a title="W3C Document Object Model" href="http://www.w3.org/DOM/">DOM</a>, il che ci porta alla prossima regola.</p>
<p><span style="font-weight: bold"></p>
<p>4. Create Javascript, non dialetti per specifici browser</span><br style="font-weight: bold" /><br />
A meno che sia presente un&#8217;ottima ragione, non dovremmo mai usare estensioni specifiche dei browser agli standard web. Il tempo di fare controlli per <span style="font-style: italic">document.layers</span> (Netscape 4.x) o <span style="font-style: italic">document.all</span> (Internet Explorer < 5.x) è passato. Tutti i browser moderni supportano il metodo DOM <span style="font-style: italic">document.getElementById</span>, e questo è quello che usiamo e controlliamo.</p>
<p><strong>Javascript:</strong></p>
<p>function doDOMstuff(){<br />
  if(document.getElementById &#038;&#038; document.createTextNode){<br />
    [...]<br />
  }<br />
}</p>
<p>Il secondo controllo è necessario solamente in quanto alcune prime versioni di Opera sostenevano di supportare il DOM, ma non lo supportavano correttamente.</p>
<p><span style="font-weight: bold"></p>
<p>5. Non prendere in prestito variabili da altri script</span><br style="font-weight: bold" /><br />
Quando creiamo una funzione o una funzionalità dovremmo essere certi che tutte le variabili usate siano <span style="font-style: italic">locali</span>, per evitare che una funzione possa sovrascrivere una variabile usata da un&#8217;altra funzione.</p>
<p><strong>Javascript:</strong></p>
<p>var i=42; // global variable<br />
function dothings(){<br />
  for (i=0; i<200; i++ ) // i gets changed<br />
  {<br />
  // some code<br />
  }<br />
}</p>
<p>function dothingsright(){<br />
 var i; // define i locally<br />
 for (i=0;i<200;i++){<br />
  // some code<br />
 }<br />
}</p>
<p>alert(i); // = 42<br />
dothingsright()<br />
alert(i) // = 42 (due to local definition)<br />
dothings()<br />
alert(i) // = 200, oops!</p>
<p><span style="font-weight: bold"><br />
6. Mantenere gli effetti indipendenti dal mouse</span><br style="font-weight: bold" /><br />
Assicurarsi che le cose possano funzionare solo in presenza di Javascript attivato non è abbastanza. Dobbiamo considerare gli utenti che non possono usare un mouse in parte o del tutto. Inoltre dobbiamo assicurarci che gli effetti attivati contemporaneamen da azioni del mouse e azioni di tastiera.</p>
<p>Il maggior problema con l&#8217;indipendenza dai mouse sono gli elementi dei moduli che vengono validati o attivano un effetto tramite <span style="font-style: italic">onchange</span> oppure <span style="font-style: italic">onblur</span>. Non usateli, semplicemente.</p>
<p>Un uso comune di questa tecnica inaccessibile è l&#8217;uso di box di selezione come navigazione.</p>
<p><strong><acronym title="Hypertext Markup Language">HTML</acronym>:</strong></p>
<form>
<label for="go2">Go to:</label></p>
<select name="go2" id="go2" onchange="send(this)">
<option value="index.html">Home</option><br />
<option value="chapter1.html">Operation Cleanout</option><br />
<option value="chapter2.html">Reaching things</option><br />
</select>
</form>
<p><strong>Javascript:</strong><br/></p>
<p>function send(f){<br />
var chosen;<br />
chosen=f.options[f.selectedIndex].value;<br />
self.location=chosen;<br />
}</p>
<p><a href="http://www.onlinetools.org/articles/unobtrusivejavascript/ex_selectboxbad.html">Prova questo esempio di modulo inaccessibile</a></p>
<p>Apparentemente il problema principale è che quando viene usata una tastiera per selezionare l&#8217;elemento tramite il tasto tab, premendo la freccia in basso per selezionare qualcosa non si potrà andare oltre la prima opzione, in quando <span style="font-style: italic">send() </span>verrà attivata non appena passerete dalla prima alla seconda opzione.</p>
<p>Utenti esperti di tastiera sapranno che è necessario premere alt+freccia in basso all&#8217;inizio per espandere l&#8217;intero menù prima di selezionare la voce. In ogni caso, questo non è noto a tutti gli utenti. Inoltre, l&#8217;esempio in questione non avrà effetto quando Javascript non è disponibile.</p>
<p><strong><acronym title="Hypertext Markup Language">HTML</acronym>:</strong></p>
<form action="send.php" method="post" onsubmit="return send(this)">
<label for="go2">Go to:</label></p>
<select name="go2" id="go2">
<option value="index.html">Home</option><br />
<option value="chapter1.html">Operation Cleanout</option><br />
<option value="chapter2.html">Reaching things</option><br />
</select>
<input type="submit" value="go" />
</form>
<p><strong>Javascript:</strong></p>
<p>function send(f){<br />
var chosen;<br />
chosen=f.go2.options[f.go2.selectedIndex].value;<br />
self.location=chosen;<br />
return false;<br />
}</p>
<p><strong>PHP:</strong></p>
<p><?PHP if(isset($_POST['go2'])){<br />
header('Location:'.$_POST['go2']);<br />
}?></p>
<p><a href="http://www.onlinetools.org/articles/unobtrusivejavascript/ex_selectbox.html">Prova questo esempio di modulo accessibile</a></p>
<p>Questo, in confronto, lavora perfettamente, ed risparmia una server hit inutile allo script <span style="font-style: italic">send.php</span>, che viene chiamato solo quando Javascript non è abilitato.</p>
<p><span style="font-weight: bold">A proposito di <span style="font-style: italic">onkeypress</span></span><br style="font-weight: bold" /><br />
Durante la lettura delle Linee Guida per l&#8217;Accessibilità dei Contenuti Web è richiesto di usare gestori di eventi indipendenti dalle periferiche nei nostri scripts:</p>
<div style="margin-left: 40px; font-style: italic">Otherwise, if you must use device-dependent attributes, provide redundant input mechanisms (i.e., specify two handlers for the same element): Use &#8220;onmousedown&#8221; with &#8220;onkeydown&#8221;. Use &#8220;onmouseup&#8221; with &#8220;onkeyup&#8221; Use &#8220;onclick&#8221; with &#8220;onkeypress&#8221;</div>
<p>Questo suona perfetto in teoria, ma nelle situazioni reali, il gestore di eventi <span style="font-style: italic">onkeypress</span> è mal supportato da diversi browser. Gli utenti che si affidano alla navigazione via tastiera normalmente hanno un tasto predisposto per simulare un click, di solito il tasto invio o la barra spazio, ed entrambi questo attivano l&#8217;evento <span style="font-style: italic">onclick</span>. Usando <span style="font-style: italic">onkeypress</span> è inoltre possibile sovrascrivere altre funzionalità di tastiera che gli utenti desiderano. Esempi sono la funzionalità <a title="Mozilla Type Ahead" href="http://www.mozilla.org/projects/ui/accessibility/typeaheadfind.html">Type Ahead</a> di Mozilla, le <a title="Opera Extensive Keyboard Shortcuts" href="http://www.opera.com/features/keyboard/complete/">Extensive Keyboard Shortcurts</a> di Opera (come &#8216;A&#8217; per il prossimo link) o i <a title="JAWS' Keyboard Controls" href="http://www.webaim.org/techniques/jaws/keyboard-shortcuts">JAWS&#8217; Keyboard Controls</a>.</p>
<p>In questo modo facendo la giusta cosa prevista dalle linee guida, potremmo rendere il nostro script addirittura meno accessibile.</p>
<p>Negli esempi che seguiranno in questo corso, aggiungeremo onkeypress come gestore extra, ma lo terremo commentato. Questo verrà fatto per permettere di attivare questo evento nei casi necessari, o nel caso dobbiate passare un test di accessibilità tramite tool automatici piuttosto che con utenti reali.</p>
<p><a href="http://www.onlinetools.org/articles/unobtrusivejavascript/chapter1.html">http://www.onlinetools.org/articles/unobtrusivejavascript/chapter1.html<br />
</a></p>
<p><span style="font-style: italic">Chris Heilmann  has been bouncing around the globe working for several agencies and companies.  A web enthusiast from 1997 on workplaces include Munich, London, Santa Monica,  San Francisco and Mumbai. Chris spends far too much time for his own good on  his free PHP and Javascript resources, scripts and applications at  </span><a style="font-style: italic" href="http://www.onlinetools.org/">http://www.onlinetools.org/</a><span style="font-style: italic"> and generally strives to fight for a better, faster and more accessible web. More articles can be found  at </span><a style="font-style: italic" href="http://icant.co.uk/">http://icant.co.uk</a><span style="font-style: italic" /></p>
]]></content:encoded>
			<wfw:commentRss>http://pixline.net/2006/09/javascript-non-intrusivo-1di6/feed/it/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
