Javascript e CSS: separare l’azione dalla presentazione

20 marzo 2006

Decisioni basate sulle quote di mercato dei browser

Un argomento oggettivo e reale a favore o contro l’utilizzo di Javascript potrebbero essere le quote di mercato dei browser. Se Javascript gode di un supporto più ampio dei CSS -o viceversa- la scelta sarebbe forse più semplice.

Si pensa che la quota di browser che non usano Javascript si attesti tra il 10 e il 15%. Questi dati sono basati su vecchie statistiche di TheCounter. È interessante notare che negli ultimi mesi questa quota si è ridotta del 55%, passando dal 13% del maggio 2003 al 6% del marzo 2004.

Ma questo calo così netto fa sì che io non abbia molta fiducia in questi dati. Non credo che il 5% di tutti gli utenti che navigano sul web abbiano attivato il supporto di Javascript negli ultimi mesi. Ritengo, piuttosto, che theCounter abbia modificato il suo metodo di rivelazione. Cosa che mi fa avere poca fiducia verso entrambi i dati, il vecchio 13% e il nuovo 6%.

E comunque, seguiamo l’opinione comune, supponiamo che i dati sopra riportati siano realistici, facciamo la media. Arriviamo alla conclusione che i browser che non supportano gli script rappresentano una quota del 10%.

Ora dobbiamo solo confrontare questa cifra con quella dei browser che non supportano i fogli di stile CSS. Purtroppo questo dato è sconosciuto. Non conosco una sola società di rilevazione che produca statistiche sul supporto dei CSS.

Secondo TheCounter i browser moderni rappresentano il 98% del mercato. Potremmo allora supporre che il 98% dei browser supporta i CSS, ma è pericoloso. Dopo tutto, potremmo trarre la stessa conclusione per Javascript, ma sappiamo che non è vero.

In buona sostanza, abbiamo pochi elementi per poter effettuare una scelta sulla base delle quote di mercato.

Regole?

Vediamo se è possibile allora elaborare una teoria. Possiamo, cioè, definire con esattezza le circostanze in cui è meglio usare Javascript rispetto ai CSS, e viceversa? In altre parole, possiamo definire un confine netto tra azione e presentazione? Io ho trovato una regola, ma ho scoperto che non funziona:

Ogni effetto che avviene in base all’input dell’utente è azione. Tutti gli altri sono presentazione.

Il vantaggio di questa regola è che evidenzia la grande forza di Javascript. È davvero difficile scrivere script utili che non siano attivati dall’utente, così possiamo addirittura creare una regola basata su questo assunto. Nella pratica, però, andiamo subito incontro ad una serie di problemi.

Secondo questa regola, infatti, l’image replacement è affare per i CSS poiché non dipende da azioni dell’utente. I menu a tendina sarebbero invece da fare con Javascript, dal momento che dipendono da eventi mouseover e mouseout. Significa che dovremmo eliminare il selettore :hover. È un gestore di eventi che effettua uno pseudo-mouseover e sappiamo che gli eventi dovrebbero gestiti con Javascript, non con i CSS. Poiché penso che l’abolizione di quel selettore non sarebbe salutata con salti di gioia dagli sviluppatori web, dobbiamo concludere che questa regola non ci aiuta ancora molto.

Vediamo se allora funziona una regola più pratica:

Usa la tecnologia che richiede meno codice.

È una regola che non ci dice niente sulla fondamentale differnza tra azione e presentazione. Infatti, vedremo come porti a risultati contraddittori.

Io comunque la preferisco a quella di prima. Il modo migliore per mantenere un sito semplice è scrivere codice efficiente per ottenere un certo effetto, evitando sia gli hack dei CSS sia complessi oggetti Javascript.

Ma quale tecnologia richiede meno codice? In genere i CSS sono la scelta migliore se dobbiamo applicare lo stesso effetto su un gruppo di elementi. Javascript stravince se dobbiamo applicare un effetto simile su un gruppo di elementi.

Se vuoi aggiornamenti su Javascript e CSS: separare l'azione dalla presentazione inserisci la tua e-mail nel box qui sotto:
 
X
Se vuoi aggiornamenti su Javascript e CSS: separare l'azione dalla presentazione

inserisci la tua e-mail nel box qui sotto:

Ho letto e acconsento l'informativa sulla privacy

Acconsento al trattamento di cui al punto 3 dell'informativa sulla privacy