<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="wordpress/2.1" -->
<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/"
	>

<channel>
	<title>Andrea Gandino</title>
	<link>http://www.andreagandino.com/it</link>
	<description>Solo un altro weblog targato WordPress</description>
	<pubDate>Thu, 20 Dec 2007 10:09:10 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.1</generator>
	<language>en</language>
			<item>
		<title>Finalmente!</title>
		<link>http://www.andreagandino.com/it/2007/12/20/finalmente/</link>
		<comments>http://www.andreagandino.com/it/2007/12/20/finalmente/#comments</comments>
		<pubDate>Thu, 20 Dec 2007 10:09:10 +0000</pubDate>
		<dc:creator>Andre</dc:creator>
		
		<category><![CDATA[internet]]></category>

		<category><![CDATA[browser]]></category>

		<guid isPermaLink="false">http://www.andreagandino.com/it/2007/12/20/finalmente/</guid>
		<description><![CDATA[Definizione di felicità per un web developer. Ottima notizia!
Tags: internet explorer, ie8, acid2]]></description>
			<content:encoded><![CDATA[<p><a href="http://blogs.msdn.com/ie/archive/2007/12/19/internet-explorer-8-and-acid2-a-milestone.aspx" hreflang="en" title="IE8 passa l'Acid 2">Definizione di <em>felicità</em> per un web developer</a>. Ottima notizia!</p>
<p class="tags">Tags: <a href="http://technorati.com/tag/internet+explorer" title="See the Technorati tag page for 'internet explorer'." rel="tag">internet explorer</a>, <a href="http://technorati.com/tag/ie8" title="See the Technorati tag page for 'ie8'." rel="tag">ie8</a>, <a href="http://technorati.com/tag/acid2" title="See the Technorati tag page for 'acid2'." rel="tag">acid2</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.andreagandino.com/it/2007/12/20/finalmente/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Interfaccia multi-upload</title>
		<link>http://www.andreagandino.com/it/2007/10/24/interfaccia-multi-upload/</link>
		<comments>http://www.andreagandino.com/it/2007/10/24/interfaccia-multi-upload/#comments</comments>
		<pubDate>Wed, 24 Oct 2007 20:21:49 +0000</pubDate>
		<dc:creator>Andre</dc:creator>
		
		<category><![CDATA[javascript]]></category>

		<category><![CDATA[usabilità]]></category>

		<guid isPermaLink="false">http://www.andreagandino.com/it/2007/10/24/interfaccia-multi-upload/</guid>
		<description><![CDATA[Una possibile soluzione al problema della gestione dei form che prevedono il caricamento sul server di più file alla volta.]]></description>
			<content:encoded><![CDATA[<p>Uno degli assiomi dell&#8217;esperienza di navigazione propria di ognuno di noi è che compilare i campi dei moduli è piuttosto seccante.</p>

<p>Prendiamo un caso specifico di modulo: se si deve effettuare l&#8217;upload di tre foto, ad esempio, può risultare estremamente noioso dover ripetere l&#8217;operazione di invio del modulo per ben tre volte; se il modulo prevede l&#8217;upload di più files alla volta, rimane la limitazione del numero fisso di file che è possibile caricare.</p>

<p>Per ovviare a questi problemi, e rendere così leggermente meno doloroso l&#8217;invio di moduli con più file, bisogna necessariamente intervenire mediante Javascript</p>

<p>La soluzione che mi pare essere la più diffusa prevede la possibilità, mediante la pressione di un bottone, di inserire quanti campi di file si voglia, uno di seguito all&#8217;altro.</p>

<p>Personalmente trovo che, sebbene molto efficace, questa soluzione non sia il massimo quanto a chiarezza, per l&#8217;utente finale. L&#8217;elenco dei campi di file fa aumentare considerevolmente la lunghezza dell&#8217;intero modulo, cosa che in generale sarebbe meglio evitare. Inoltre non è possibile avere una chiara percezione di <em>quali</em> file si stia per caricare, dal momento che il percorso del file molto spesso è più lungo della larghezza del campo dov&#8217;è stato immesso.</p>

<p>Per finire, l&#8217;unico modo <em>certo</em> per evitare l&#8217;upload di un file è un reset dell&#8217;intero form; un&#8217;eventualità, quella della cancellazione dell&#8217;upload, che esiste e che non è neanche così remota, sebbene lato server possano essere messe in atto contromisure adeguate.</p>

<h4>Una possibile soluzione</h4>

<p>Partendo da questo presupposto, ho pensato non fosse una brutta idea scrivere uno script per snellire l&#8217;aspetto di quei moduli che consentono il caricamento di più file alla volta.</p>

<p>Spiegare lo script che ho realizzato riga per riga diventerebbe decisamente pesante e oltremodo noioso, anche per dei <del>nerd</del>&#8220;persone genuinamente interessate all&#8217;informatica&#8221; come me, quindi riassumo velocemente:</p>

<ul>
<li>Aggiungo prima tutti i file che mi servono, uno per uno, apparentemente usando sempre lo stesso campo di <code>input</code>.</li>
<li>Ad ogni inserimento di un nuovo file, aggiorno un&#8217;apposita lista creata per avere sottomano l&#8217;elenco dei file che si sta per caricare in maniera semplice e leggibile.</li>
<li>Eseguendo un doppio click su un elemento di quella lista è possibile annullare l&#8217;upload di quel particolare file.</li>
</ul>

<p>I vantaggi, sebbene lo script non abbia nessuna pretesa di completezza, sono due:</p>

<ol>
<li>Il contenuto è molto più semplice da aggiungere e da visualizzare.</li>
<li>Non si deve necessariamente compiere un reset in caso di errore.</li>
</ol>

<p>Infine, ho cercato di rendere lo script il più possibile accessibile, in modo che il suo utilizzo non sia precluso anche a coloro i quali navigano in condizioni non convenzionali, per così dire.</p>

<p>Nello specifico, in caso di Javascript disattivato o totalmente assente (come ad esempio nei browser testuali), la funzionalità non è preclusa in assoluto (lo script è dunque <em>degradabile</em>), ma limitata a un solo file; in altre parole, si perde il concetto di multi-upload, ma non si perde la possibilità di ottenere lo scopo che anche il multi-upload si proponeva, ovvero il caricamento di un file sul server.</p>

<p>In caso di <abbr title="Cascading Style Sheets">CSS</abbr> disabilitati e Javascript abilitato, lo script è comunque fruibile nella sua interezza.</p>

<p>Un piccolo problema si riscontra nel caso in cui sia i CSS, sia Javascript siano disabilitati, dal momento che il bottone <code>aggiungi</code>, pur avendo perso la sua funzionalità, rimane visibile, rischiando quindi di risultare fuorviante per l&#8217;utente finale.</p>

<p>Come sempre, vi rimando all&#8217;apposito <a href="http://andreagandino.com/it/labs/multi-upload/multi-upload.html" title="Esempio pratico di interfaccia multi-upload" />esempio</a>, avvertendovi che, per ovvie ragioni, l&#8217;upload (ma non l&#8217;invio del form) è disabilitato.</p>
<p class="tags">Tags: <a href="http://technorati.com/tag/upload" title="See the Technorati tag page for 'upload'." rel="tag">upload</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.andreagandino.com/it/2007/10/24/interfaccia-multi-upload/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Principi di drag&#038;drop in Javascript</title>
		<link>http://www.andreagandino.com/it/2007/10/14/principi-di-dragdrop-in-javascript/</link>
		<comments>http://www.andreagandino.com/it/2007/10/14/principi-di-dragdrop-in-javascript/#comments</comments>
		<pubDate>Sun, 14 Oct 2007 13:59:32 +0000</pubDate>
		<dc:creator>Andre</dc:creator>
		
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://www.andreagandino.com/it/2007/10/14/principi-di-dragdrop-in-javascript/</guid>
		<description><![CDATA[Un rapido sguardo a cosa sia un drag&#38;drop, e come si implementi un semplice drag&#38;drop in Javascript.]]></description>
			<content:encoded><![CDATA[<p>Qualche giorno fa, mi sono trovato a dover aiutare un amico su come mettere a posto uno script Javascript che implementava un <span title="Traduzione: trascinameno" xml:lang="en" lang="en">drag&amp;drop</span>; ho pensato dunque che sarebbe potuto essere interessante spiegare i principi base che stanno dietro a detto <em>comportamento</em>.</p>

<p>Innanzitutto, penso sia doveroso cominciare a dire <em>cosa sia</em> un drag&amp;drop e quali siano le sue peculiarità.</p>

<p>Come spesso accade, <a href="http://it.wikipedia.org/wiki/Drag_%26_drop" title="'Drag&amp;Drop' su Wikipedia Italia">Wikipedia</a> ci viene in aiuto definendo il drag&amp;drop come segue:</p>

<blockquote>
  <p>Nell&#8217;interfaccia grafica di un computer, il drag and drop indica il cliccare su un oggetto virtuale (quale una finestra o un&#8217;icona) e trascinarlo (in inglese:drag) in un&#8217;altra posizione, dove viene rilasciato (in inglese:drop).</p>
</blockquote>

<p>Tecnicamente, e nel caso specifico delle pagine Web, questa definizione si traduce in quanto segue:</p>

<ol>
<li>Clicco su un oggetto (elemento) della pagina.</li>
<li>Tenendo premuto il tasto del mouse, muovo lo stesso mouse.</li>
<li>Giunto alla posizione di destinazione, rilascio il tasto.</li>
</ol>

<p>Andiamo dunque per punti, ad analizzare come si implementa un sistema del genere mediante Javascript.</p>

<h4>Primo click sull&#8217;oggetto</h4>

<p>Dopo essersi posizionati col cursore del mouse sull&#8217;oggett che si intende trascinare, eseguiamo un click. Al momento del click, viene attivato il rispettivo evento Javascript, denominato <code>onmousedown</code>, letteralmente tradotto come <q>quando viene premuto il mouse</q>.</p>

<p>A questo evento, associato <em>soltanto all&#8217;oggetto che abbiamo cliccato</em>, possiamo associare una funzione, il che equivale a dire che ogni volta che cliccheremo detto oggetto, una porzione di codice da noi stabilita sarà eseguita.</p>

<pre><code>el.onmousedown = seleziona;
</code></pre>

<p>Notare come la funzione <code>seleziona</code> sia qui indicata soltanto come <span title="Traduzione: riferimento" lang="en" xml:lang="en">reference</span>, e pertanto non ammetta l&#8217;indicazione di parametri.</p>

<p>Bene, quello che accade all&#8217;interno della funzione <code>seleziona</code> ci interessa relativamente, dal momento che questo articolo non parla di trascinare <em>effettivamente</em> oggetti, nel senso di spostarli da un punto all&#8217;altro dello schermo, ma solo di come impostare correttamente quello che <em>sta dietro</em> al drag&amp;drop.</p>

<p>Quello che possiamo dire riguardo alla funzione <code>seleziona</code>, ci porta però al secondo aspetto della faccenda.</p>

<h4>Spostamento del mouse</h4>

<p>Dopo aver cliccato, si sposta il mouse <em>tenendo premuto il tasto opportuno</em>. Il fatto di muovere il mouse, attiva anche in questo caso un evento particolare chiamato <code>onmousemove</code>.</p>

<p>C&#8217;è da dire una cosa riguardo a <code>onmousemove</code>. L&#8217;elemento che chiama questo <span title="Traduzione: gestore (di evento)" xml:lang="en" lang="en">handler</span> può essere alternativamente o un elemento della pagina, o la pagina stessa.</p>

<p>Nel primo caso, l&#8217;evento sarà attivo solo nel caso in cui il mouse si sposti all&#8217;interno dell&#8217;area dell&#8217;elemento (per esempio, nel caso di un elemento rettangolare come può essere un <code>div</code>, all&#8217;interno dell&#8217;area di quel <code>div</code>), mentre nel secondo caso, più generico, l&#8217;evento sarà attivo nel caso il mouse si muova all&#8217;interno della porzione di schermo che il browser dedica al rendering della pagina.</p>

<p>Nel nostro caso, volendo <em>catturare</em> ogni movimento del mouse, a prescindere da dove esso si trovi, scriviamo:</p>

<pre><code>document.onmousemove = muovi;
</code></pre>

<p>che può essere letto come <q>ogni volta che muovi il mouse all&#8217;interno della finestra di rendering del browser, fai quello che ti dice la funzione <code>muovi</code></q>.</p>

<p>Anche in questo caso non ci sofferiamo su cosa effettivamente svolga la funzione <code>muovi</code>.</p>

<p>All&#8217;interno della funzione <code>seleziona</code> dobbiamo però anche definire cosa accade al rilascio del mouse, o meglio, definire quale sarà la funzione adibita alle operazioni in concomitanza di quello che è l&#8217;evento <code>onmouseup</code>.</p>

<h4>Rilascio del mouse</h4>

<p>All&#8217;interno della funzione <code>seleziona</code>, scriviamo la seguente riga, dal significato che ormai dovrebbe essere chiaro:</p>

<pre><code>document.onmouseup = fine;
</code></pre>

<p>Spostandoci nella funzione <code>fine</code>, due sono le cose da fare:</p>

<ol>
<li>&#8220;Scollegare&#8221; l&#8217;evento <code>onmouseup</code>, ovvero dissociarlo dalla funzione <code>fine</code>.</li>
<li>Fare la stessa cosa per l&#8217;evento <code>onmousemove</code>, per la funzione <code>muovi</code>.</li>
</ol>

<p>Ovvero:</p>

<pre><code>document.onmouseup = null;
document.onmousemove = null;
</code></pre>

<h4>Cenni conclusivi</h4>

<p>Le funzioni <code>seleziona</code> e <code>muovi</code>, ovvero quelle funzioni che gestiscono le vere operazioni di drag&amp;drop, sono indicate, come abbiamo visto, mediante un semplice riferimento.</p>

<p>Queste funzioni, però, sono lanciate quando un particolare evento viene attivato, sia esso un click, uno spostamento, o un altro tipo di evento. Esse sono così in grado di <em>sapere quale sia stato l&#8217;evento che le ha lanciate</em> e di reperire informazioni utili rispetto sia all&#8217;evento, sia alla periferica che lo ha attivato (mouse, tastiera).</p>

<p>Tutte queste belle cose, che meriterebbero senz&#8217;altro una trattazione più esaustiva, avvengono mediante la variabile <code>e</code>, un oggetto in cui vengono memorizzate tutte le informazioni. Questo oggetto, incidentalmente, <em>viene</em> indicato come parametro al momento di <em>definire</em> la funzione.</p>

<p>Per esempio, se volessimo conoscere le coordinate del mouse al momento del click, basterebbe fare riferimento ai valori <code>e.clientX</code> ed <code>e.clientY</code>, e così via.</p>

<p>Per la solita storiella che noi non viviamo in un mondo ideale, <code>e</code> non è universalmente riconosciuta (qualcuno ha nominato per caso IE?).</p>

<p>Internet Explorer infatti utilizza un&#8217;altra variabile per memorizzare le informazioni dell&#8217;evento, vale a dire <code>window.event</code>.</p>

<p>Possiamo ovviare a questo problema, scrivendo all&#8217;interno delle funzioni sopra citate, quanto segue:</p>

<pre><code>if (!e) var e = window.event;
</code></pre>

<p>Per una maggiore completezza, e visto che abbiamo parlato di coordinate, ho preparato <a href="http://andreagandino.com/it/labs/drag_drop/drag_drop.html" title="Esempio di drag&amp;drop in Javascript">un esempio</a> di quanto illustrato in questo articolo, ovvero uno script che traccia le coordinate del mouse solo in presenza di un drag&amp;drop.</p>
<p class="tags">Tags: <a href="http://technorati.com/tag/drag%26drop" title="See the Technorati tag page for 'drag&drop'." rel="tag">drag&drop</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.andreagandino.com/it/2007/10/14/principi-di-dragdrop-in-javascript/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Framework CSS? No, grazie.</title>
		<link>http://www.andreagandino.com/it/2007/09/24/framework-css-no-grazie/</link>
		<comments>http://www.andreagandino.com/it/2007/09/24/framework-css-no-grazie/#comments</comments>
		<pubDate>Mon, 24 Sep 2007 16:45:15 +0000</pubDate>
		<dc:creator>Andre</dc:creator>
		
		<category><![CDATA[fogli di stile]]></category>

		<category><![CDATA[framework]]></category>

		<guid isPermaLink="false">http://www.andreagandino.com/it/2007/09/24/framework-css-no-grazie/</guid>
		<description><![CDATA[Visto che sembra essere l&#8217;argomento del momento, nel mondo del web design, spendo anch&#8217;io un paio di parole sull&#8217;argomento e lo premetto subito: non sono un grande fan dei framework CSS.

Li trovo abbastanza inutili per varie ragioni:


La prima ragione è che ognuno disegna e programma a modo suo, quindi quello che va bene per uno, [...]]]></description>
			<content:encoded><![CDATA[<p>Visto che sembra essere l&#8217;argomento del momento, nel mondo del web design, spendo anch&#8217;io un paio di parole sull&#8217;argomento e lo premetto subito: non sono un grande fan dei <span xml:lang="en" lang="en">framework</span> <abbr title="Cascading Style Sheets">CSS</abbr>.</p>

<p>Li trovo abbastanza inutili per varie ragioni:</p>

<ul>
<li><p>La prima ragione è che ognuno disegna e programma a modo suo, quindi quello che va bene per uno, può risultare scomodo per un altro.</p></li>
<li><p>Secondo poi, i <span xml:lang="en" lang="en">framework</span> sono generalmente piuttosto estesi, e sebbene a volte siano suddivisi in più file separati e importabili a piacere, quasi sempre l&#8217;80% delle regole che vi sono scritte non vengono utilizzate.</p></li>
<li><p>Infine, una considerazione un po&#8217; più filosofica, che nasce dal fatto che usando i <span xml:lang="en" lang="en">framework</span> si è costretti ad usare nomi di classi scelti da altri, che in molti casi, inoltre, non sono esattamente semantici.</p>

<p>Mi riferisco, ad esempio, alle classi specifiche per &#8220;floattare&#8221; (sì, lo so, sto termine fa rabbrividire anche me, ma non mi veniva di meglio) degli elementi a destra e a sinistra, comunemente indicate con <code>left</code> e <code>right</code>: ora, &#8220;left&#8221; e &#8220;right&#8221; sono due parole che racchiudono in loro un concetto visivo, e dunque non sono, a parer mio, adatte per essere messe all&#8217;interno di un <span xml:lang="en" lang="en" title="Traduzione: linguaggio di marcatura">markup</span> che dev&#8217;essere il più possibile generico.</p></li>
</ul>

<p>Quindi, come consiglia tanta altra gente, è meglio piuttosto farsi il proprio <span xml:lang="en" lang="en">framework</span>/foglio di reset <em>da soli</em>, cosicchè non si debba essere costretti a scrivere le solite regole n volte per n progetti, e con il vantaggio non indifferente di avere qualcosa che è fatto su misura per le nostre esigenze.</p>

<p>Quindi, qui sotto, pubblico quanto ho realizzato finora, col duplice scopo di non perdermelo in qualche cartella sperduta nell&#8217;<span xml:lang="en" lang="en">hard disk</span> e di condividerlo con chi avesse avuto <a href="http://www.laburno.net/2007/09/22/smashing-magazine-sui-frameworks-css/" title="Smashing Magazine sui Frameworks CSS di Laburno.net">dubbi simili ai miei sulla questione</a>.</p>

<p><a href="http://www.andreagandino.com/it/labs/css_reset/reset.css" title="Il mio foglio di stile di reset" class="download">Scarica!</a></p>
<p class="tags">Tags: <a href="http://technorati.com/tag/css" title="See the Technorati tag page for 'css'." rel="tag">css</a>, <a href="http://technorati.com/tag/framework" title="See the Technorati tag page for 'framework'." rel="tag">framework</a>, <a href="http://technorati.com/tag/fogli+di+stile" title="See the Technorati tag page for 'fogli di stile'." rel="tag">fogli di stile</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.andreagandino.com/it/2007/09/24/framework-css-no-grazie/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Colonne di altezza uguale tramite Javascript</title>
		<link>http://www.andreagandino.com/it/2007/07/06/colonne-di-altezza-uguale-tramite-javascript/</link>
		<comments>http://www.andreagandino.com/it/2007/07/06/colonne-di-altezza-uguale-tramite-javascript/#comments</comments>
		<pubDate>Fri, 06 Jul 2007 12:32:35 +0000</pubDate>
		<dc:creator>Andre</dc:creator>
		
		<category><![CDATA[fogli di stile]]></category>

		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://www.andreagandino.com/it/2007/07/06/colonne-di-altezza-uguale-tramite-javascript/</guid>
		<description><![CDATA[Riprendo un secondo un articolo che avevo scritto tempo fa per la versione inglese di questo spazio, e cerco di portare il discorso un po&#8217; più avanti.

Dunque, potendo scegliere di inventare così su due piedi una nuova proprietà dei fogli di stile, avevo pensato che sarebbe stato utile poter impostare automaticamente due colonne ad avere [...]]]></description>
			<content:encoded><![CDATA[<p>Riprendo un secondo un articolo che avevo scritto tempo fa per la versione inglese di questo spazio, e cerco di portare il discorso un po&#8217; più avanti.</p>

<p>Dunque, potendo scegliere di inventare così su due piedi una nuova proprietà dei fogli di stile, avevo pensato che sarebbe stato utile poter impostare automaticamente due colonne ad avere la stessa altezza. Tradotto in fanta-<abbr title="Cascading Style Sheets">CSS</abbr> verrebbe più o meno così:</p>

<pre><code>#div2 {
    height: #div1;
}
</code></pre>

<p>Ovvero, in parole povere:</p>

<blockquote>
  <p>Rendi l&#8217;elemento caratterizzato da <code>id</code> uguale a <code>div2</code> alto tanto quanto l&#8217;elemento con <code>id</code> uguale a <code>div1</code>.</p>
</blockquote>

<p>Ok, questa è fantascienza, ma con Javascript forse qualcosa può essere fatto in tal senso. Javascript è infatti in grado di modificare gli elementi di un documento <abbr title="eXtensible Markup Language">XML</abbr> leggendo e alterandone le rispettive proprietà. Per questo motivo, possiamo immaginare di leggere l&#8217;altezza di <code>div1</code>, e applicarla a <code>div2</code>.</p>

<p>Portando avanti il ragionamento, potremmo pensare di estendere la cosa a più elementi. Potremmo ad esempio scegliere di dare una particolare <code>classe</code> a tutti gli elementi che vorremmo avessero la stessa altezza, in modo da gestire la <em>presentazione</em> della nostra pagina solo ed esclusivamente tramite fogli di stile, come dovrebbe essere.</p>

<p>Quindi, con la funzione <code>getElementsByClassName</code> definita dall&#8217;utente che ritorna un <span xml:lang="en" lang="en" title="Traduzione: 'vettore'">array</span> contenente tutti gli elementi che hanno una data classe, ecco la funzione che normalizza le altezze degli elementi posti in quell&#8217;<span xml:lang="en" lang="en">array</span>.</p>

<pre><code>function stessa_altezza(className) {
    cols = getElementsByClassName(className);
    var max = 0;
    for(var i=0; i&lt;cols.length; i++) {
        if(cols[i].clientHeight &gt; max) max = cols[i].clientHeight;
    }
    for(i=0; i&lt;cols.length; i++) {
        cols[i].style.height = max + "px";
    }
    for(i=0; i&lt;cols.length; i++) {
        if(cols[i].clientHeight &gt; max) {
            offset = cols[i].clientHeight - max;
            cols[i].style.height = (parseInt(cols[i].style.height)) - offset + "px";
        }
    }
}
</code></pre>

<p>Descrivendo a parole cosa fa la funzione in oggetto:</p>

<ol>
<li>Scelgo tutti gli elementi nel mio documento che presentano la classe <code>className</code></li>
<li>Individuo l&#8217;elemento con altezza massima</li>
<li>Imposto tutti gli elementi ad avere quell&#8217;altezza</li>
<li>Correggo eventuali imperfezioni derivanti da una non corretta interpretazione del <a href="http://www.w3.org/TR/REC-CSS2/box.html" hreflang="en" title="Il Box Model definito sul sito del W3C [EN]">Box Model</a> nei diversi <span xml:lang="en" lang="en">browsers</span>.</li>
</ol>

<p>Per maggiore chiarezza, ecco un <a href="http://www.andreagandino.com/it/labs/stessaaltezza/stessa_altezza.html" title="Esempio della realizzazione di colonne di uguale altezza tramite Javascript">esempio</a> pratico della funzione.</p>
<p class="tags">Tags: <a href="http://technorati.com/tag/javascript" title="See the Technorati tag page for 'javascript'." rel="tag">javascript</a>, <a href="http://technorati.com/tag/css" title="See the Technorati tag page for 'css'." rel="tag">css</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.andreagandino.com/it/2007/07/06/colonne-di-altezza-uguale-tramite-javascript/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Pensieri su XHTML e HTML</title>
		<link>http://www.andreagandino.com/it/2007/06/25/pensieri-su-xhtml-e-html/</link>
		<comments>http://www.andreagandino.com/it/2007/06/25/pensieri-su-xhtml-e-html/#comments</comments>
		<pubDate>Mon, 25 Jun 2007 13:40:25 +0000</pubDate>
		<dc:creator>Andre</dc:creator>
		
		<category><![CDATA[markup]]></category>

		<guid isPermaLink="false">http://www.andreagandino.com/it/2007/06/25/pensieri-su-xhtml-e-html/</guid>
		<description><![CDATA[Pensieri sparsi riguardanti il <em>vero</em> utilizzo di XHTML, e le ragioni per cui la scelta tra HTML e XHTML non è poi così scontata quanto uno potrebbe pensare.]]></description>
			<content:encoded><![CDATA[<p>Pensieri sparsi sulle letture che ho avuto modo di effettuare in questi giorni. Premetto che innanzitutto mi sono reso conto come fossi (sono) drammaticamente poco ferrato sulla materia; fortunatamente, con un po&#8217; di pazienza, è possibile aggiornarsi e recuperare lo svantaggio.</p>

<p>La seconda premessa è che le mie conoscenze a proposito degli argomenti trattati qui sotto sono più che mai in evoluzione, dunque correzioni, obiezioni, critiche e quant&#8217;altro sono più che mai accettate e incoraggiate.</p>

<p>In questi giorni, dicevo, ho letto parecchio materiale riguardo alla questione, in sé piuttosto datata, riguardante la scelta tra <abbr title="eXtended HyperText Markup Language">XHTML</abbr> e <abbr title="HyperText Markup Language">HTML</abbr>.</p>

<p>Mi rendo conto che, in passato, sono caduto anch&#8217;io in uno degli errori più comuni che si possono fare, ovvero usare XHTML soltanto perché è <em>percepito</em> come <em>la novità</em>, o come <em>la cosa di moda</em>. In realtà, dopo aver indagato più a fondo, sono giunto alla conclusione, diametralmente opposta alle mie idee di non più di un paio di mesi fa, che usare <a href="http://www.w3.org/TR/html401/" hreflang="en" title="Le specifiche di HTML 4.01 [en]">HTML4</a> è una scelta tanto rispettabile quanto quella di usare XHTML, e che non vi sono vere e proprie ragioni per cui il secondo debba essere preferito al primo, o comunque possa dirsi oggettivamente migliore.</p>

<p>L&#8217;inghippo è sostanzialmente uno: l&#8217;XHTML che usiamo ogni giorno non è trattato come <abbr title="eXtensible Markup Language">XML</abbr>. Per fare in modo che l&#8217;XHTML sia effettivamente gestito dai browser come tale, dovremmo infatti assicurarci che il nostro documento sia inviato come un <a href="http://en.wikipedia.org/wiki/MIME" hreflang="en" title="Definizione di 'MIME' su Wikipedia [en]">tipo MIME</a> che faccia effettivamente parte della &#8220;famiglia&#8221; di XML, ovvero <code>application/xhtml+xml</code>.</p>

<p><em>Normalmente</em>, però, quando scriviamo un documento in XHTML, esso è gestito <em>dal server</em> come normalissimo <code>text/html</code>, di fatto eliminando gran parte (se non la totalità) dei vantaggi dell&#8217;usare XHTML: se non serviamo XHTML come <code>application/xhtml+xml</code> l&#8217;unico effetto che otteniamo è che il nostro documento è trattato come se fosse HTML e nulla più.</p>

<p>Potremmo dunque chiederci cosa ci trattenga dall&#8217;usare <code>application/xhtml+xml</code> su base quotidiana. La risposta è che non tutti gli <a href="http://it.wikipedia.org/wiki/User_agent" hreflang="en" title="Definizione di 'User Agent' su Wikipedia [it]">User Agent</a> sono in grado di leggere correttamente tale tipo MIME, uno su tutti l&#8217;amato (da pochi)/odiato (da molti) Internet Explorer 6 (Si veda <a href="http://www.w3.org/People/mimasa/test/xhtml/media-types/results" hreflang="en" title="Tabella comparativa del supporto del tipo MIME 'application/xhtml+xml'">questa tabella</a> per una comparazione tra i vari browser oggi disponibili).</p>

<p>Quindi diciamo che gli scogli da superare se volessimo utilizzare detto tipo MIME sono due:</p>

<ol>
<li><p><strong>Le impostazioni dei server</strong>, dal momento che trattano automaticamente i file <code>.html</code> come <code>text/html</code>, sostanzialmente fregandosene del <code>DOCTYPE</code> da noi impostato.</p></li>
<li><p><strong>Lo scarso supporto di <code>application/xhtml+xml</code> da parte degli user agent</strong>. Qui ci possiamo fare relativamente poco, anche se esistono <a href="http://www.peterprovost.org/archive/2004/10/22/2003.aspx" hreflang="en">dei</a> <a href="http://www.w3.org/MarkUp/2004/xhtml-faq#ie" hreflang="en">modi</a>, un po&#8217; tortuosi forse, per far digerire <code>application/xhtml+xml</code> anche a IE.</p></li>
</ol>

<p>Per quel che concerne il primo punto, possiamo pensare di gestire la cosa in due modi. Dal momento che gli header <abbr title="Hypertext Transfer Protocol">HTTP</abbr> hanno priorità più elevata rispetto alle indicazioni fornite dal documento nell&#8217;apposito elemento <code>meta</code>, possiamo intervenire modificando tali header con i metodi già conosciuti e forniti da linguaggi di programmazione quale ad esempio <abbr title="PHP: Hypertext Preprocessor">PHP</abbr>, oppure divertendoci con il file <code>.htaccess</code>.</p>

<p>Con i linguaggi di programmazione come PHP, inoltre, è possibile tentare anche un abbozzo di <span xml:lang="en" lang="en" title="Traduzione: riconoscimento del browser">browser sniffing</span>, andando a controllare l&#8217;esistenza di <code>$_SERVER["HTTP_ACCEPT"]</code>, un header inviato dai browser che può contenere la stringa <code>application/xhtml+xml</code>, cosa che permette dunque il riconoscimento automatico degli user agent che supportano XHTML mediante un semplicissimo controllo <code>if</code>.</p>

<p>Utilizzare XHTML secondo le modalità con cui è stato <em>realmente</em> concepito ci porta in un mondo tutto nuovo, in cui l&#8217;essere <span xml:lang="en" lang="en" title="Traduzione: 'ben formato'">well-formed</span> è una caratteristica essenziale, non più solo un valore aggiunto, o comunque qualcosa che, qualora mancasse, non comprometterebbe la visualizzazione della nostra pagina.</p>

<p>Il discorso che faccio è iper-semplificato, anche e soprattutto per le lacune del sottoscritto a riguardo, ma in pratica, se si utilizza un parser XML al posto del solito parser HTML, ci si avvicina molto di più alla situazione che si ha in programmazione, nella quale un singolo errore causa il blocco dell&#8217;intero programma. Similmente, un errore nella <span xml:lang="en" lang="en">well-formedness</span> del documento, causerebbe una schermata di errore, impedendo drasticamente la visualizzazione della pagina intera.</p>

<p>Ad oggi tutti i browser implementano vari sistemi di correzione degli errori, in modo che, anche in presenza di imperfezioni nel <span xml:lang="en" lang="en" title="Traduzione: 'linguaggio di marcatura'">markup</span>, la pagina venga sempre caricata e mostrata all&#8217;utente.</p>

<p>Naturalmente il dibattito è tra chi è un sostenitore della rigidità anche nei linguaggi di marcatura adoperati sul Web, e chi invece reputa giusto l&#8217;inserimento di meccanismi per la correzione degli errori. Se è vero che la prima ipotesi sensibilizzerebbe gli autori/sviluppatori a scrivere codice valido e ben formato (che sono due cose diverse, non necessariamente sovrapponibili), è anche vero che non è pensabile stampare solo un messaggio di errore in presenza di una pagina che non sia conforme a XML, dal momento che la stragrande maggioranza delle pagine Internet non lo sono.</p>

<p>Comunque, questo è un altro argomento. La scelta del tipo MIME con cui i nostri documenti XHTML sono inviati appartiene solo a noi. Nella maggior parte dei casi non vi sono veri e propri vantaggi nell&#8217;inviare XHTML come <code>application/xhtml+xml</code>, per le ragioni illustrate precedentemente.</p>

<p>Inoltre, le differenze tra HTML e XHTML non finiscono qui, e toccano anche altri aspetti della programmazione per il web, come ad esempio le funzioni Javascript del <abbr title="Document Object Model">DOM</abbr>: non è possibile usare la funzione, molto diffusa, <code>document.write</code> (sostituita da <code>document.createElementNS</code>), funzioni di uso comune come <code>getElementsByTagName</code> potrebbero non dare i risultati che si aspetta, dal momento che XHTML è <span xml:lang="en" lang="en" title="Traduzione: sensibile alle maiuscole/minuscole">case-sensitive</span>, al contrario di HTML, giusto per citare quelle più immediate.</p>

<p>Riassunto di tutta la sbrodolata di informazioni di cui sopra: si può usare XHTML, ma bisogna però tener presente che, quando scriviamo un documento con quel DOCTYPE, in realtà esso sarà letto come un comune documento HTML.</p>

<p>Ma allora, se nella maggior parte dei casi usare XHTML ha lo stesso valore che usare HTML, com&#8217;è possibile scegliere tra i due? E ancora, come mai si dovrebbe preferire il primo, quand&#8217;è chiaro che lo si utilizzerebbe in un modo per il quale non è stato progettato?</p>

<p>Personalmente ritengo che XHTML sia più chiaro e meno confusionario rispetto ad HTML, e aiuti lo sviluppatore a scrivere codice migliore, anche sotto un punto di vista di organizzazione dei contenuti, non solo dal punto di vista &#8220;estetico&#8221;.</p>

<p>Inoltre lo sviluppo che è in atto con XHTML2 mi sembra molto più sensato, rispetto al lavoro portato sinora avanti dal <a href="http://www.whatwg.org/" hreflang="en"><abbr title="Web Hypertext Application Technology Working Group">WHATWG</abbr></a>.</p>

<p>Tuttavia, ed è qui che arrivano i <em>veri</em> dolori, il <abbr title="World Wide Web Consortium">W3C</abbr> dice che XHTML2&#160;<em>non</em> dovrà essere inviato come <code>text/html</code>, ma solo come <code>application/xhtml+xml</code>. Se è vero che per arrivare a XHTML2, posto che effettivamente ci si arrivi, passeranno parecchi anni, è anche vero che se i browser non saranno pronti a gestire il tipo MIME <code>application/xhtml+xml</code> saremo di nuovo al punto di partenza: una tecnologia buona, ma scarsamente supportata favorirà l&#8217;utilizzo di un&#8217;altra, a mio modo di vedere inferiore, ma universalmente accettata.</p>
<p class="tags">Tags: <a href="http://technorati.com/tag/html" title="See the Technorati tag page for 'html'." rel="tag">html</a>, <a href="http://technorati.com/tag/xhtml" title="See the Technorati tag page for 'xhtml'." rel="tag">xhtml</a>, <a href="http://technorati.com/tag/xml" title="See the Technorati tag page for 'xml'." rel="tag">xml</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.andreagandino.com/it/2007/06/25/pensieri-su-xhtml-e-html/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Effetto &#8220;foglio rialzato&#8221; in Photoshop</title>
		<link>http://www.andreagandino.com/it/2007/05/27/effetto-foglio-rialzato-in-photoshop/</link>
		<comments>http://www.andreagandino.com/it/2007/05/27/effetto-foglio-rialzato-in-photoshop/#comments</comments>
		<pubDate>Sun, 27 May 2007 20:22:05 +0000</pubDate>
		<dc:creator>Andre</dc:creator>
		
		<category><![CDATA[web design]]></category>

		<category><![CDATA[guide]]></category>

		<guid isPermaLink="false">http://www.andreagandino.com/it/2007/05/27/effetto-foglio-rialzato-in-photoshop/</guid>
		<description><![CDATA[Ripropongo tradotto in italiano un mio tutorial per Photoshop, volto a creare quell&#8217;effetto tipo foglio rialzato che è oggi piuttosto comune in tanti layout (esempio). La sua realizzazione è piuttosto semplice, nulla per cui valga la pena preoccuparsi.

Ecco quindi la procedura passo-passo per creare il suddetto effetto:


Creare un nuovo documento, di dimensioni a piacere, ad [...]]]></description>
			<content:encoded><![CDATA[<p>Ripropongo tradotto in italiano un mio tutorial per Photoshop, volto a creare quell&#8217;effetto tipo foglio rialzato che è oggi piuttosto comune in tanti layout (<a href="http://indelebile.135.it">esempio</a>). La sua realizzazione è piuttosto semplice, nulla per cui valga la pena preoccuparsi.</p>

<p>Ecco quindi la procedura passo-passo per creare il suddetto effetto:</p>

<ol>
<li>Creare un nuovo documento, di dimensioni a piacere, ad esempio 600x400, con uno sfondo grigio.</li>
<li>Creare un nuovo livello (Layer 1) e selezionare un&#8217;area di dimensioni 400x400, con lo strumento di selezione rettangolare.</li>
<li>Riempire la selezione di bianco. (<a href="/it/labs/tutorials/raised_paper/1.jpg">Immagine #1</a>)</li>
<li>Creare un nuovo livello (Layer 2), e posizionarlo in primo piano.</li>
<li>Con lo strumento di selezione circolare, selezionare una porzione molto stretta del libello. Potrebbe essere più facile usando una selezione di dimensione prefissata, ad esempio 25x300.</li>
<li>Allineare il lato sinistro della selezione con il lato sinistro del rettangolo bianco che si è disegnato in precedenza.</li>
<li>Riempire la selezione ovale con qualsiasi colore. In questo esempio ho scelto il nero, poiché è facilmente distinguibile se rapportato sia al bianco, sia al nero. (<a href="/it/labs/tutorials/raised_paper/2.jpg">Immagine #2</a>)</li>
<li>Ripetere i passi 5, 6 e 7 ma questa volta allineare la selezione al lato destro del rettangolo bianco (<a href="/it/labs/tutorials/raised_paper/3.jpg">Immagine #3</a>).</li>
<li>Portare il Layer 2 al di sotto del Layer 1.</li>
<li>Colorare di bianco lo sfondo del documento.</li>
<li>Applicare un effetto &#8220;bagliore esterno&#8221; al Layer 2, e modificare a piacimento i valori dell&#8217;effetto. <a href="/it/labs/tutorials/raised_paper/4.jpg">Questi sono i parametri che ho utilizzato in questo tutorial</a>.</li>
</ol>

<p><em>Questo è il risultato finale</em></p>

<p><img src="http://andreagandino.com/it/labs/tutorials/raised_paper/tutorial_preview.jpg" alt="Effetto rialzato" /></p>

<p>Per concludere, suggerisco di tenere a mente che l&#8217;ultimo punto è, ovviamente, il più importante, dal momento che cambiando la curva del bagliore esterno, cambia sensibilmente il risultato finale.</p>

<p>La curva dritta produrrà un&#8217;ombra più scura e larga, mentre la curva ondulata creerà un effetto opposto, ovvero un&#8217;ombra stretta e chiara.</p>
<p class="tags">Tags: <a href="http://technorati.com/tag/tutorial" title="See the Technorati tag page for 'tutorial'." rel="tag">tutorial</a>, <a href="http://technorati.com/tag/photoshop" title="See the Technorati tag page for 'photoshop'." rel="tag">photoshop</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.andreagandino.com/it/2007/05/27/effetto-foglio-rialzato-in-photoshop/feed/</wfw:commentRss>
		</item>
		<item>
		<title>La solita domanda che mi ronza in testa da un po&#8217;</title>
		<link>http://www.andreagandino.com/it/2007/05/02/la-solita-domanda-che-mi-ronza-in-testa-da-un-po/</link>
		<comments>http://www.andreagandino.com/it/2007/05/02/la-solita-domanda-che-mi-ronza-in-testa-da-un-po/#comments</comments>
		<pubDate>Wed, 02 May 2007 19:24:43 +0000</pubDate>
		<dc:creator>Andre</dc:creator>
		
		<category><![CDATA[web design]]></category>

		<category><![CDATA[programmazione]]></category>

		<category><![CDATA[sproloqui]]></category>

		<guid isPermaLink="false">http://www.andreagandino.com/it/2007/05/02/la-solita-domanda-che-mi-ronza-in-testa-da-un-po/</guid>
		<description><![CDATA[Quello che segue è un pensiero che gira nella mia testa da parecchio tempo, e che solo ora ho la voglia, o il tempo di fare uscire. Non è niente di che, e durerà solo il tempo che impiegherà il backup che sto facendo a terminare.

Il punto è che quando vedo cose come questa, mi [...]]]></description>
			<content:encoded><![CDATA[<p>Quello che segue è un pensiero che gira nella mia testa da parecchio tempo, e che solo ora ho la voglia, o il tempo di fare uscire. Non è niente di che, e durerà solo il tempo che impiegherà il <span xml:lang="en" lang="en">backup</span> che sto facendo a terminare.</p>

<p>Il punto è che quando vedo cose come <a href="http://www.panic.com/coda" hreflang="en" title="Home page di Coda [en]">questa</a>, mi viene inevitabilmente da chiedermi come mai i migliori programmi nel nostro campo (e probabilmente non solo in quello) vengano progettati per piattaforme diverse da Windows.</p>

<p>Nota: lungi da me scatenare flames tra utenti Windows e utenti Mac, dal momento che sono discussioni fini a se stesse, e devo dire anche piuttosto stupide; inoltre attualmente lavoro su base quotidiana su entrambi i sistemi, quindi non mi sento di esprimere preferenze per l&#8217;uno o per l&#8217;altro in senso assoluto.</p>

<p>Coda è solo l&#8217;ultimo degli esempi, ma potrei farne molti altri: <a href="http://www.macromates.com" hreflang="en" xml:lang="en" title="Home page di Textmate [en]">Textmate</a> su tutti, ma anche <a href="http://www.barebones.com/products/bbedit/" hreflang="en" xml:lang="en" title="Home page di BBedit [en]">BBedit</a>, <a href="http://www.panic.com/transmit" hreflang="en" title="Home page di Transmit [en]">Transmit</a>, perfino un semplicissimo <a href="http://cyberduck.ch/" hreflang="en" xml:lang="en" title="Home page del client FTP Cyberduck [en]">Cyberduck</a>, client <abbr title="File Transfer Protocol">FTP</abbr> noto ai più e assolutamente gratuito, secondo me è in grato tranquillamente di reggere il confronto (e mi fermo qua) con qualunque client FTP, anche a pagamento, presente per Windows.</p>

<p>Ora, per i gestori di connessioni FTP, per ora ci mettiamo una pietra sopra. Per gli editor di testo qualcosa si sta muovendo, con due ottimi progetti quali <a href="http://www.intype.info" hreflang="en" xml:lang="en" title="Home page di Intype [en]">Intype</a> ed <a href="http://www.e-texteditor.com/" hreflang="en" xml:lang="en" title="Home page di e [en]">e</a>, purtroppo entrambi a pagamento, ma sono sempre stato dell&#8217;idea che un buon editor di testo valga la pena spenderci qualche Euro sopra.</p>

<p>Un discorso analogo può essere fatto per i gestori di feed, peraltro, ma per ora limiterei la discussione solo all&#8217;ambito lavorativo degli editor di testo e client FTP.</p>

<p>La domanda è: è davvero così difficile programmare roba buona per Windows, o è piuttosto il dato di fatto che la maggior parte dei web designers / web developers lavorano su Mac a determinare l&#8217;aridità di soluzioni per chi utilizza i sistemi operativi di Redmond?</p>

<p>E quand&#8217;anche fosse la seconda delle due, chi mi spiega come mai esistono moltissime IDE per detti sistemi, ma nessuno veramente leggero, versatile, e <em>usabile</em> per il nostro lavoro?</p>
<p class="tags">Tags: <a href="http://technorati.com/tag/programmazione" title="See the Technorati tag page for 'programmazione'." rel="tag">programmazione</a>, <a href="http://technorati.com/tag/web+design" title="See the Technorati tag page for 'web design'." rel="tag">web design</a>, <a href="http://technorati.com/tag/sistemi+operativi" title="See the Technorati tag page for 'sistemi operativi'." rel="tag">sistemi operativi</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.andreagandino.com/it/2007/05/02/la-solita-domanda-che-mi-ronza-in-testa-da-un-po/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Ancora sui CMS</title>
		<link>http://www.andreagandino.com/it/2007/04/24/ancora-sui-cms/</link>
		<comments>http://www.andreagandino.com/it/2007/04/24/ancora-sui-cms/#comments</comments>
		<pubDate>Tue, 24 Apr 2007 12:07:58 +0000</pubDate>
		<dc:creator>Andre</dc:creator>
		
		<category><![CDATA[web design]]></category>

		<category><![CDATA[markup]]></category>

		<category><![CDATA[programmazione]]></category>

		<category><![CDATA[cakephp]]></category>

		<guid isPermaLink="false">http://www.andreagandino.com/it/2007/04/24/ancora-sui-cms/</guid>
		<description><![CDATA[Il blog procede. Lo sviluppo in CakePHP, almeno per quanto riguarda l&#8217;interfaccia di amministrazione è giunto ad un discreto 70% di realizzazione.

Ho riflettutto molto, negli ultimi giorni, riguardo al CMS da usare. Come mio solito ho cambiato idea una decina di volte. Ho provato sia Expression Engine, sia Textpattern. Due CMS simili, in un certo [...]]]></description>
			<content:encoded><![CDATA[<p>Il blog procede. Lo sviluppo in <a href="http://www.cakephp.org" hreflang="en" xml:lang="en" title="Home page del framework CakePHP [en]">CakePHP</a>, almeno per quanto riguarda l&#8217;interfaccia di amministrazione è giunto ad un discreto 70% di realizzazione.</p>

<p>Ho riflettutto molto, negli ultimi giorni, riguardo al <abbr title="Content Management System">CMS</abbr> da usare. Come mio solito ho cambiato idea una decina di volte. Ho provato sia <a href="http://expressionengine.com" hreflang="en" xml:lang="en" title="Home page del CMS Expression Engine [en]">Expression Engine</a>, sia <a href="http://textpattern.com" hreflang="en" xml:lang="en" title="Home page del CMS Textpattern [en]">Textpattern</a>. Due CMS simili, in un certo senso, perchè entrambi hanno un sistema di templates basato su propri tags; tuttavia sono distanti anni luce.</p>

<p>Devo dire con piacere di aver riscoperto Expression Engine. Ad una prima occhiata non può risultare che ostico. L&#8217;interfaccia rimane molto dispersiva, e per trovare un&#8217;opzione, possono passare anche 2-3 minuti (sono dell&#8217;idea che in questo genere di cose l&#8217;<em>immediatezza</em> sia un pregio cui non bisognerebbe mai rinunciare), ma tuttavia il CMS risulta estremamente flessibile e utilizzabile per scopi che vanno ben oltre il semplice blog personale.</p>

<p>Alla fine, però, non ho potuto far meno di ritornare all&#8217;ovile e continuare ad usare il mio sistema, conscio del fatto che le chances di vedere, un giorno, un CMS sviluppato da altri che si adatti <em>completamente</em> ai miei gusti, probabilmente sono tanto basse che possono essere approssimate a zero.</p>

<p>Uno dei nodi principali, ora, diventa un&#8217;organizzazione sensata dei contenuti. Ed è qui che entrano in gioco dubbi, se va bene, ancora più profondi.</p>

<p>Layout fisso, fluido o liquido? Chiaro su scuro o viceversa? Struttura a singolo articolo in home page, e link ai successivi nella forma di una lista puntata, o solita pagina &#8220;a cascata&#8221;?</p>

<p>Mi fa piacere, comunque, notare che queste scelte saranno supportate da un sistema che davvero si adatta a quello che ho in mente. Penso ad esempio alla possibilità di postare articoli in un cosiddetto <a href="http://en.wikipedia.org/wiki/Tumblelog" hreflang="en" xml:lang="en" title="Definizione di 'tumblelog' su Wikipedia EN">tumblelog</a>, una cosa che ho sempre desiderato di implementare come si deve su WordPress, e che per un motivo o per l&#8217;altro non sono mai riuscito a fare.</p>

<p>Il tutto iscritto in quella che è l&#8217;ennesima mia personale rivoluzione copernicana, nata dall&#8217;aver letto <a href="http://www.webdevout.net/articles/beware-of-xhtml" hreflang="en" title="Beware of XHTML [en]">questo articolo</a>.</p>

<p>Al che mi spunta una domanda: se è vero che usare <a href="http://www.w3.org/TR/html401/" xml:lang="en" hreflang="en" title="Specifiche di HTML 4.01 Strict sul sito del W3C [en]"><abbr title="HyperText Markup Language">HTML</abbr> 4.01 Strict</a> pare essere la soluzione migliore per avere la migliore compatbilità possibile, e siccome detto HTML 4.01 Strict non ammette il carattere <code>/</code> a fine tag, come faremo noi povere anime che per pubblicare il contenuto usiamo strumenti come <a href="http://en.wikipedia.org/wiki/Textile_(markup_language)" hreflang="en" xml:lang="en" title="Definizione di Textile su Wikipedia EN [en]">Textile</a> o <a href="http://en.wikipedia.org/wiki/Markdown" hreflang="en" xml:lang="en" title="Definizione di Markdown su Wikipedia EN [en]">Markdown</a>, che mandano in output codice XHTML (e quindi <em>con</em> <code>/</code> a fine tag), compromettendo dunque la validazione?</p>
<p class="tags">Tags: <a href="http://technorati.com/tag/cms" title="See the Technorati tag page for 'cms'." rel="tag">cms</a>, <a href="http://technorati.com/tag/cakephp" title="See the Technorati tag page for 'cakephp'." rel="tag">cakephp</a>, <a href="http://technorati.com/tag/doctype" title="See the Technorati tag page for 'doctype'." rel="tag">doctype</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.andreagandino.com/it/2007/04/24/ancora-sui-cms/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Nodi genitori e CSS</title>
		<link>http://www.andreagandino.com/it/2007/04/03/nodi-genitori-e-css/</link>
		<comments>http://www.andreagandino.com/it/2007/04/03/nodi-genitori-e-css/#comments</comments>
		<pubDate>Tue, 03 Apr 2007 17:58:39 +0000</pubDate>
		<dc:creator>Andre</dc:creator>
		
		<category><![CDATA[fogli di stile]]></category>

		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://www.andreagandino.com/it/2007/04/03/nodi-genitori-e-css/</guid>
		<description><![CDATA[Pensierino della sera da catalogare nella serie &#8220;cosa vorrei da un selettore di un foglio di stile, e cosa probabilmente non avrò mai prima di 10 anni&#8221;: non sarebbe veramente una gran cosa se i CSS prevedessero un particolare selettore che ritornasse, dato un elemento, il suo genitore?

Mi è venuta in mente questa idea, di [...]]]></description>
			<content:encoded><![CDATA[<p>Pensierino della sera da catalogare nella serie &#8220;cosa vorrei da un selettore di un foglio di stile, e cosa probabilmente non avrò mai prima di 10 anni&#8221;: non sarebbe veramente una gran cosa se i <abbr title="Cascading StyleSheets">CSS</abbr> prevedessero un particolare selettore che ritornasse, dato un elemento, il suo genitore?</p>

<p>Mi è venuta in mente questa idea, di per sé piuttosto banale, tentando di realizzare un form con dei <span xml:lang="en" lang="en" title="Traduzione: livello a comparsa">popup</span> per meglio specificare il contenuto dei vari campi, cercando di non utilizzare in nessun modo Javascript.</p>

<p>L&#8217;implementazione sarebbe anche piuttosto semplice, dal momento che in Javascript una cosa del genere è possibile renderla attraverso una singola riga di codice:</p>

<pre><code>var elem = document.getElementById('mioelemento');
var parent = elem.parentNode;
</code></pre>

<p>Niente di fantascientifico dunque; rimanendo nel mondo della fantasia, ecco un ipotetico selettore che restituisce il padre di un elemento dato:</p>

<pre><code>div#mioElemento input:focus &lt;&lt; p.informazioni
</code></pre>

<p>Il difficile sarebbe interpretare questa scrittura, dal momento che sovvertirebbe un po&#8217; tutte le regole base dei selettori di CSS che vedono l&#8217;elemento a sinistra come padre di quello a destra. In questo caso invece potremmo interpretare la riga qui sopra come:</p>

<ol>
<li>Prendi l&#8217;elemento caratterizzato da un <code>id</code> uguale a <code>mioElemento</code></li>
<li>Quando l&#8217;input figlio di quell&#8217;elemento ottiene lo stato di focus, ovvero quando è attivo, modifica le proprietà stilistiche del paragrafo con attributo <code>class</code> uguale a <code>informazioni</code>, che è figlio del genitore di <code>input</code> (<code>&lt;&lt;</code>).</li>
</ol>

<p>Per prendere il genitore di <code>input</code>, si potrebbe invece ipotizzare di avere un selettore del tipo <code>&lt;</code>.</p>

<p>Ok, ora torno nel mondo reale.</p>
<p class="tags">Tags: <a href="http://technorati.com/tag/css" title="See the Technorati tag page for 'css'." rel="tag">css</a>, <a href="http://technorati.com/tag/selettori" title="See the Technorati tag page for 'selettori'." rel="tag">selettori</a>, <a href="http://technorati.com/tag/genitori" title="See the Technorati tag page for 'genitori'." rel="tag">genitori</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.andreagandino.com/it/2007/04/03/nodi-genitori-e-css/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
