{"id":259,"date":"2012-04-25T16:58:05","date_gmt":"2012-04-25T14:58:05","guid":{"rendered":"https:\/\/alistapart.com\/it\/article\/tuffiamoci-nel-responsive-prototyping-con-foundation\/"},"modified":"2012-04-25T16:58:05","modified_gmt":"2012-04-25T14:58:05","slug":"tuffiamoci-nel-responsive-prototyping-con-foundation","status":"publish","type":"article","link":"https:\/\/alistapart.com\/it\/article\/tuffiamoci-nel-responsive-prototyping-con-foundation\/","title":{"rendered":"Tuffiamoci nel responsive prototyping con Foundation"},"content":{"rendered":"<p><img decoding=\"async\" src=\"http:\/\/alistapart.com\/it\/wp-content\/uploads\/sites\/2\/2012\/04\/n49.png\" border=\"0\" align=\"left\" \/>Ci sono centinaia di dispositivi al momento che possono accedere <a href=\"http:\/\/www.apple.com\/hotnews\/thoughts-on-flash\/\">all&#8217;intero web<\/a>, come disse una volta Steve Jobs. Questi device hanno capacit\u00e0 e limiti differenti, cose come lo stile dell&#8217;input o la dimensione dello schermo, la risoluzione e la forma. Con tutti questi dispositivi <a href=\"http:\/\/www.morganstanley.com\/institutional\/techresearch\/pdfs\/Internet_Trends_041210.pdf\">pronti a superare i computer tradizionali per quel che riguarda il traffico web del prossimo anno<\/a>, abbiamo bisogno di tool che ci aiutino a creare in maniera responsive per questi dispositivi.<\/p>\n<p>Ci sono molti strumenti per accelerare il processo di design del front-end, come <a href=\"http:\/\/blueprintcss.org\/\">Blueprint<\/a> o <a href=\"http:\/\/960.gs\/\">960.gs<\/a>, ma, fino ad ora, i tool per la progettazione e lo sviluppo del responsive design che tenessero conto di tutti questi diversi dispositivi e capacit\u00e0 erano pochi e rari. C&#8217;\u00e8 <a href=\"http:\/\/stuffandnonsense.co.uk\/projects\/320andup\/\">320 and Up<\/a> di Andy Clarke e Keith Clarke e <a href=\"http:\/\/www.columnal.com\/\">Columnal<\/a>, un grid system responsive. Recentemente, <a href=\"http:\/\/twitter.github.com\/bootstrap\/\">Twitter Bootstrap<\/a> \u00e8 diventato responsive.<\/p>\n<p>Oggi, daremo un&#8217;occhiata a come potete tuffarvi nel responsive design utilizzando <a href=\"http:\/\/foundation.zurb.com\">Foundation<\/a>, un leggero framework front-end che vi aiuta a creare prototipi e siti in produzione in maniera rapida. Se avete evitato il responsive design perch\u00e9 vi sembrava complicato o perch\u00e9 non c&#8217;erano tool o perch\u00e9 non eravate sicuri della necessit\u00e0 di adottare questo approccio, allora questo \u00e8 il momento giusto per cominciare!<\/p>\n<div class=\"paragrafo\">\n<h2>Un framework leggero<\/h2>\n<p>Foundation \u00e8 un framework front-end che vi pu\u00f2 aiutare a creare cose rapidamente. L&#8217;abbiamo realizzato in ZURB, come ossatura e punto d&#8217;avvio generale per i nostri progetti interni e per quelli dei nostri clienti. Non solo include una griglia responsive a 12 colonne, annidabili, che gli d\u00e0 molto potere sul layout, ma predefinisce con semplici stili altri elementi e costrutti comuni: la navigazione, le tab, i pulsanti, la tipografia, le form e altro ancora, cos\u00ec che possiate passare subito al codice senza preoccuparvi inizialmente del CSS personalizzato.<\/p>\n<p>Quasi sicuramente avrete gi\u00e0 usato o visto dei framework prima d&#8217;ora, ma Foundation \u00e8 un po&#8217; diverso: <em>\u00e8 pensato per essere sovrascritto<\/em>. Con i framework front-end si rischia \u201cl&#8217;omologazione\u201d: i siti sembrano tutti uguali perch\u00e9 sono stati creati con lo stesso framework.<\/p>\n<p>Nei nostri esempi, useremo gli stili di base di Foundation. Si noti tuttavia che questi stili non si prestano al design finale di un sito ed \u00e8 intenzionale: Foundation vi porter\u00e0 fino al 90% del percorso, ma per il restante 10% dovrete tirare fuori la vostra creativit\u00e0 e il vostro design.<\/p>\n<p>Potrete anche notare che Foundation non \u00e8 proprio l&#8217;ideale come potreste aspettarvi: non \u00e8 completamente semantico, non \u00e8 mobile-first. Abbiamo creato Foundation per aiutare le persone ad avviare un progetto in maniera rapida, senza bisogno di altri tool.<\/p>\n<p>Se siete pi\u00f9 attratti da un grid system semantico, provate l&#8217;appropriatamente definito <a href=\"http:\/\/semantic.gs\/\">Semantic Grid System<\/a>, che usa Less per generare una griglia in cui i dati sono completamente separati dalla visualizzazione. Per un approccio mobile-first, provate 320 and up.<\/p>\n<\/div>\n<div class=\"paragrafo\">\n<h2>Fare prototipi per divertimento e per profitto<\/h2>\n<p>Foundation d\u00e0 il meglio di s\u00e9 nel rapid prototyping. Il Prototyping \u00e8 un metodo potente e raramente messo in pratica, che \u00e8 ancora pi\u00f9 importante adesso che abbiamo cos\u00ec tanti tipi di dispositivi diversi e cos\u00ec tanti modi in cui le persone possono interagire con le cose che progettiamo.<\/p>\n<p>Per il nostro scopo, supponiamo di voler creare un servizio di condivisione di libri, qualcosa che non vi consiglieremmo di portare avanti davvero, considerando l&#8217;avanzare dei Kindle e di altri eReader, ma si tratta di un esempio divertente. Cominceremo con l&#8217;abbozzare quello che vogliamo, poi realizzeremo un rapido prototipo del front-end per avere un&#8217;idea di quella che pu\u00f2 essere l&#8217;esperienza sui vari dispositivi.<\/p>\n<\/div>\n<div class=\"paragrafo\">\n<h2>Abbozzare il nostro servizio di condivisione libri BookImpart<\/h2>\n<p>Per farci un&#8217;idea di come funzioner\u00e0 il nuovo servizio e per valutare l&#8217;esperienza su diversi device, abbiamo bisogno solo di alcune schermate, ossia:<\/p>\n<ul>\n<li>l&#8217;homepage, dove l&#8217;utente pu\u00f2 scegliere un libro che vorrebbe leggere,<\/li>\n<li>una schermata del libro per mostrare chi ce l&#8217;ha, dove si trova e quello che il proprietario vorrebbe leggere in cambio,<\/li>\n<li>una dialog box modale che permetta all&#8217;utente di scegliere uno dei propri libri da offrire in cambio,<\/li>\n<li>una comunicazione in homepage che confermi che lo scambio \u00e8 avvenuto con successo.<\/li>\n<\/ul>\n<p>Naturalmente, potete vedere i buchi nel prototipo (login, registrazione, aggiunta libri, casi limite come la non-accettazione, etc.), ma prenderemo in considerazione solo questo flusso. Cominceremo, cos\u00ec come facciamo sempre per l&#8217;interface design, con degli schizzi.<\/p>\n<p>Su BookImpart iniziamo a creare la homepage con il nome del sito e alcune semplici azioni di login (che non collegheremo al codice che le deve gestire). Le categorie si trovano sul lato sinistro per incoraggiare l&#8217;esplorazione sui device dotati di schermi grandi e vi abbiamo messo tre libri che pensiamo interessino ai lettori. Abbiamo usato dei tab per mostrare gli scambi pi\u00f9 gettonati, i libri pi\u00f9 popolari e i libri di tendenza.<\/p>\n<div class=\"illustration full left\"><img decoding=\"async\" src=\"http:\/\/alistapart.com\/it\/wp-content\/uploads\/sites\/2\/2012\/04\/homepage.png\" border=\"0\" \/><\/p>\n<p>Fig 1. La homepage del nostro sito fittizio. La navigazione a sinistra e una sezione di contenuto principale.<\/p>\n<\/div>\n<p>Nella schermata del libro (nel nostro prototipo, colleghiamo ogni libro a questa pagina) manteniamo la navigazione e mostriamo in grande la copertina del libro, il titolo e le informazioni. Mostriamo anche un&#8217;elenco dei libri che questo utente possiede e che possono essere scambiati per un libro che si sta cercando, cos\u00ec che si sappia quali sono le possibili opzioni e se ce ne sono. Potremmo perfino fare un accordo con il Times per poter caricare sul nostro sito le loro recensioni.<\/p>\n<div class=\"illustration full left\"><img decoding=\"async\" src=\"http:\/\/alistapart.com\/it\/wp-content\/uploads\/sites\/2\/2012\/04\/book.png\" border=\"0\" \/><\/p>\n<p>Fig 2. La pagina di ogni singolo libro del nostro servizio, con il libro stesso e quelli con cui pu\u00f2 essere scambiato.<\/p>\n<\/div>\n<p>Una volta che l&#8217;utente seleziona l&#8217;azione Swap, usiamo Reveal (un plugin che attiva una finestra di dialogo modale all&#8217;interno di Foundation) per mostrare una modale con i libri che gli utenti possono scegliere di scambiare con quello della pagina. Quando l&#8217;utente ha scelto, lo portiamo alla pagina di conferma.<\/p>\n<div class=\"illustration full left\"><img decoding=\"async\" src=\"http:\/\/alistapart.com\/it\/wp-content\/uploads\/sites\/2\/2012\/04\/modal.png\" border=\"0\" \/><\/p>\n<p>Fig 3. Modali come questa sono semplici da realizzare usando Reveal.<\/p>\n<\/div>\n<p>Qui mostriamo all&#8217;utente cosa stanno dando via e cosa stanno prendendo. Forse dovremmo anche dire come avverr\u00e0 lo scambio (via posta, di persona, etc.) e dargli un modo per tornare all&#8217;homepage.<\/p>\n<div class=\"illustration full left\"><img decoding=\"async\" src=\"http:\/\/alistapart.com\/it\/wp-content\/uploads\/sites\/2\/2012\/04\/confirm.png\" border=\"0\" \/><\/p>\n<p>Fig 4. Un&#8217;ultima pagina, la schermata di conferma ed il nostro prototipo \u00e8 pronto.<\/p>\n<\/div>\n<p>In un progetto normale, potremmo dover fare diverse modifiche a questi schizzi, chiedere un feedback al cliente o ai nostri colleghi, ma in questo caso saltiamo questi step. Da questo momento in poi, se volete seguire lo sviluppo di questo codice, scaricate il pacchetto Foundation da <a href=\"http:\/\/foundation.zurb.com\">foundation.zurb.com<\/a>. Potete lavorare con il file <code>index.html<\/code> che vi forniamo e duplicarlo per tutte le pagine aggiuntive.<\/p>\n<\/div>\n<div class=\"paragrafo\">\n<h2>Programmare i wireframe<\/h2>\n<p>Un modo di pensare ai prototipi creati rapidamente \u00e8 quello dei wireframe programmati. \u00c8 da un po&#8217; che questa pratica si \u00e8 diffusa, ma solo recentemente \u00e8 diventato pratico creare dei wireframe responsive tramite codice.<\/p>\n<p>La griglia che ho menzionato precedentemente gestisce la parte pi\u00f9 grossa della nostra prototipizzazione. \u00c8 larga 12 colonne ed \u00e8 completamente fluida: tutto \u00e8 basato sulle percentuali, con specifiche media query per sistemare la visualizzazione per i piccoli device. Un semplice layout potrebbe avere questo aspetto:<\/p>\n<pre><code>\n&lt;div class=\"container\"&gt;\n  &lt;div class=\"row\"&gt;\n    &lt;div class=\"eight columns\"&gt;Main Content&lt;\/div&gt;\n    &lt;div class=\"four columns\"&gt;Sidebar&lt;\/div&gt;\n  &lt;\/div&gt;\n&lt;\/div&gt;\n<\/code><\/pre>\n<p>Qui il container ha del padding left e right, la riga ha una max-width arbitraria per la leggibilit\u00e0 e le colonne creano un layout di pagina \u201cdue terzi\/un terzo\u201d Potremmo anche annidare le colonne in questo modo, per creare dei layout pi\u00f9 complessi:<\/p>\n<pre><code>\n&lt;div class=\"container\"&gt;\n  &lt;div class=\"row\"&gt;\n    &lt;div class=\"eight columns\"&gt;\n      &lt;div class=\"row\"&gt;\n        &lt;div class=\"two columns\"&gt;Avatar&lt;\/div&gt;\n        &lt;div class=\"ten columns\"&gt;Article Title&lt;\/div&gt;\n      &lt;\/div&gt;\n    &lt;\/div&gt;\n      &lt;div class=\"four columns\"&gt;Sidebar&lt;\/div&gt;\n  &lt;\/div&gt;\n&lt;\/div&gt;\n<\/code><\/pre>\n<p>I fanatici dei sistemi a griglie noteranno che non stiamo usando un sistema come <a href=\"http:\/\/semantic.gs\/\">semantic.gs<\/a> per separare completamente i dati dalla visualizzazione, per un paio di motivi: usare un sistema come questo richiede un preprocessore come Sass o Less e noi non andiamo pazzi per il CSS che si ottiene alla fine usando questo approccio. \u00c8 una buona idea, ma pensando in maniera pragmatica, la sintassi del grid system tradizionale ci sembra ancora l&#8217;opzione migliore.<\/p>\n<p>All&#8217;interno di questo prototipo useremo anche i pulsanti e le tab di Foundation, cos\u00ec come alcune immagini segnaposto gentilmente offerte dall&#8217;eccellente <a href=\"http:\/\/placehold.it\">servizio placehold.it<\/a>. Tornando alla bozza della nostra homepage, abbiamo fatto delle annotazioni per mostrare come vorremmo che fosse programmata:<\/p>\n<div class=\"illustration full left\"><img decoding=\"async\" src=\"http:\/\/alistapart.com\/it\/wp-content\/uploads\/sites\/2\/2012\/04\/homepage-notes.png\" border=\"0\" \/><\/p>\n<p>Fig 5. Abbiamo fatto degli schizzi all&#8217;interno per mostrare come suddivideremo il layout usando la griglia di Foundation.<\/p>\n<\/div>\n<p>Niente pi\u00f9 fermate: ecco <a href=\"articles-code\/responsive-prototyping-con-foundation\/index.html\">come appare il codice<\/a>.<\/p>\n<p>La nostra homepage \u00e8 in realt\u00e0 la pagina pi\u00f9 complicata di cui faremo un prototipo ed \u00e8 piuttosto semplice metterla insieme. La griglia gestisce la maggior parte del layout. Ne abbiamo gi\u00e0 visti alcuni esempi, ma guardiamone un altro. Vedete la sezione Top Swaps, una tab verso il fondo?<\/p>\n<div class=\"illustration full left\"><img decoding=\"async\" src=\"http:\/\/alistapart.com\/it\/wp-content\/uploads\/sites\/2\/2012\/04\/topswaps.png\" border=\"0\" \/><\/p>\n<p>Fig 6. Mettendo le righe all&#8217;interno delle nostre tab possiamo facilmente creare questo tipo di layout.<\/p>\n<\/div>\n<p>Potremmo usare degli stili personalizzati per creare il layout in quelle entry, ma con Foundation possiamo semplicemente annidare la griglia. Mentre l&#8217;intera colonna \u00e8 una sezione <code>.eight.column<\/code>, possiamo aggiungere righe in pi\u00f9 all&#8217;interno del tab container, ciascuna delle quali pu\u00f2 contenere altre dodici colonne. Quindi, le nostre entry della lista diventano due colonne, sette colonne e tre colonne da sinistra a destra.<\/p>\n<p>Le tab stesse sono piuttosto semplici. Fare in modo che mostrino contenuto differente non richiede JavaScript (n\u00e9 CSS). La sintassi per i tab \u00e8 cos\u00ec:<\/p>\n<pre><code>\n&lt;dl class=\"nice contained tabs\"&gt;\n  &lt;dd&gt;&lt;a href=\"#top\" class=\"active\"&gt;Top Swaps&lt;\/a&gt;&lt;\/dd&gt;\n  &lt;dd&gt;&lt;a href=\"#popular\"&gt;Popular&lt;\/a&gt;&lt;\/dd&gt;\n  &lt;dd&gt;&lt;a href=\"#trending\"&gt;Trending&lt;\/a&gt;&lt;\/dd&gt;\n&lt;\/dl&gt;\n\n&lt;ul class=\"nice tabs-content contained\"&gt;\n  &lt;li class=\"active\" id=\"topTab\"&gt;\n    Books go here...\n  &lt;\/li&gt;\n  &lt;li class=\"active\" id=\"popularTab\"&gt;*changed indent here*\n    Books go here...\n  &lt;\/li&gt;\n  &lt;li class=\"active\" id=\"trendingTab\"&gt;*and here*\n    Books go here...\n  &lt;\/li&gt;\n&lt;\/ul&gt;\n<\/code><\/pre>\n<p>Quando mappiamo i link agli specifici ID nelle tab, come abbiamo mostrato sopra, il JavaScript built-in cambier\u00e0 tab automaticamente e applicher\u00e0 le classi corrette. Potremmo anche collegare questa pagina con una tab preselezionata, con <code>index.html#trending<\/code>, <code>index.html#popular<\/code>, etc.<\/p>\n<p>Passiamo infine ai pulsanti. In questo prototipo abbiamo fatto in modo che tutto quello che \u00e8 cliccabile all&#8217;interno del nostro prototipo abbia lo stesso colore dei link (blu) e abbiamo rimpicciolito tutto il resto. Per creare i vari pulsanti nel prototipo, creiamo semplicemente delle ancore con una classe \u201cbutton\u201d. Possiamo poi aggiungere alcune classi per decorarli:<\/p>\n<ul>\n<li>\u201cnice\u201d d\u00e0 un po&#8217; di profondit\u00e0 e luminosit\u00e0, semplicemente per facilitare i click,<\/li>\n<li>\u201cradius\u201d gli assegna un angolo leggermente arrotondato,<\/li>\n<li>\u201cround\u201d li arrotonda completamente ai lati.<\/li>\n<\/ul>\n<p>Nella nostra implementazione:<\/p>\n<ul>\n<li>\u201cwhite\u201d rende il pulsante bianco invece che blu elettrico come da default. L&#8217;abbiamo usato nell&#8217;header e nella sidebar.<\/li>\n<li>\u201clarge\u201d \u00e8 usato solo nella pagina Book, ma abbiamo usato anche \u201csmall\u201d per il pulsante di registrazione.<\/li>\n<\/ul>\n<p>Risulta molto semplice da scrivere e perfettamente human-readable: \u00e8 semplice da sovrascrivere per gli eventuali stili. Guardiamo la <a href=\"articles-code\/responsive-prototyping-con-foundation\/book.html\">pagina Book<\/a>: potete cliccare su una qualsiasi delle thumbnail dei libri sulla homepage per proseguire.<\/p>\n<p>Nella pagina del libro abbiamo mantenuto alcune parti dell&#8217;homepage, come l&#8217;header e la sidebar. Infatti, l&#8217;intero layout per questa pagina \u00e8 creato utilizzando la griglia, le immagini segnaposto e i pulsanti\/testo. Quello che potreste aver notato \u00e8 che le immagini hanno dimensioni in pixel (fornite da placehold.it), ma non ne siamo molto preoccupati in questo momento: di default, Foundation non permetter\u00e0 alle immagini di essere pi\u00f9 grandi della griglia che li contiene, quindi sono tutte della dimensione adatta al layout che desideriamo.<\/p>\n<p>Se cliccate sulla grande call to action  \u201cSwap for This\u201d, vedrete l&#8217;unico nuovo elemento su questa pagina: una modale di Reveal. Abbiamo aggiunto dopo il vicino <code>.container<\/code> questo elemento:<\/p>\n<pre><code>\n&lt;div id=\"swapModal\" class=\"reveal-modal\"&gt;\n  &lt;h5&gt;Swap for Neverwhere:&lt;\/h5&gt;\n  &lt;h3&gt;Jason M. is willing to swap <em>Neverwhere<\/em> for one of these:&lt;\/h3&gt;\n  &lt;ul class=\"block-grid four-up\"&gt;\n    &lt;li&gt;&lt;a href=\"confirm.html\"&gt;\n      &lt;img src=\"http:\/\/placehold.it\/120x160\" alt=\"Book Title\" \/&gt;&lt;\/a&gt;&lt;\/li&gt;\n    &lt;li&gt;&lt;a href=\"confirm.html\"&gt;\n      &lt;img src=\"http:\/\/placehold.it\/120x160\" alt=\"Book Title\" \/&gt;&lt;\/a&gt;&lt;\/li&gt;\n    &lt;li&gt;&lt;a href=\"confirm.html\"&gt;\n      &lt;img src=\"http:\/\/placehold.it\/120x160\" alt=\"Book Title\" \/&gt;&lt;\/a&gt;&lt;\/li&gt;\n    &lt;li&gt;&lt;a href=\"confirm.html\"&gt;\n      &lt;img src=\"http:\/\/placehold.it\/120x160\" alt=\"Book Title\" \/&gt;&lt;\/a&gt;&lt;\/li&gt;\n    &lt;li&gt;&lt;a href=\"confirm.html\"&gt;\n      &lt;img src=\"http:\/\/placehold.it\/120x160\" alt=\"Book Title\" \/&gt;&lt;\/a&gt;&lt;\/li&gt;\n    &lt;li&gt;&lt;a href=\"confirm.html\"&gt;\n      &lt;img src=\"http:\/\/placehold.it\/120x160\" alt=\"Book Title\" \/&gt;&lt;\/a&gt;&lt;\/li&gt;\n  &lt;\/ul&gt;\n  &lt;a href=\"book.html\"&gt;Never Mind&lt;\/a&gt;\n  &lt;a class=\"close-reveal-modal\"&gt;\u00d7&lt;\/a&gt;\n&lt;\/div&gt;\n<\/code><\/pre>\n<p>Non c&#8217;\u00e8 niente di strano riguardo al contenuto nella nostra modale: \u00e8 molto semplice, a griglia. La cosa interessante \u00e8 il modo in cui la chiamiamo: con un ID sulla modale (<code>#swapModal<\/code>). Possiamo chiamarla assegnando un attributo data ad ogni ancora sulla pagina, in questo caso il pulsante CTA \u201cSwap for This\u201d. Ecco com&#8217;\u00e8:<\/p>\n<pre><code>&lt;a href=\"\" class=\"nice large blue radius button\" data-reveal-id= \u00bb\n\"swapModal\"&gt;Swap for This&lt;\/a&gt;<\/code><\/pre>\n<p>Reveal, il plugin per le modali che si trova in Foundation, tiene traccia dei data-reveal-id e gli attacca le azioni appropriate al posto nostro. Ci manca solo una semplice pagina per finire: la <a href=\"articles-code\/responsive-prototyping-con-foundation\/confirm.html\">schermata di conferma<\/a>. Cliccate su una qualunque delle thumbnail all&#8217;interno della modale \u201cSwap\u201d per raggiungere l&#8217;ultima pagina del nostro prototipo.<\/p>\n<p>Si tratta di una pagina semplicissima che spiega quello che abbiamo fato e come funzioner\u00e0 il nostro servizio fittizio di scambio libri. Dal momento che abbiamo cos\u00ec poco contenuto, lo vincoliamo al centro della schermata sui dispositivi pi\u00f9 grandi, usando le classi di offset della griglia. Sarebbe cos\u00ec:<\/p>\n<pre><code>\n&lt;div class=\"row\"&gt;\n  &lt;div class=\"seven columns offset-by-two\"&gt;\n    &lt;h3&gt;All set!&lt;\/h3&gt;\n    &lt;p&gt;We've started the swap between you and Jason...&lt;\/p&gt;\n  &lt;\/div&gt;\n&lt;\/div&gt;\n<\/code><\/pre>\n<p>Ogni colonna della griglia pu\u00f2 avere un offset che varia tra le due e le dieci colonne sui cui pu\u00f2 spostarsi, il che risulta comodo per creare spazio o indentare il layout.<\/p>\n<p>Abbiamo coperto tutti gli elementi che usiamo in questo prototipo, sebbene ci\u00f2 sia solo una piccola parte di quello che si pu\u00f2 fare. Ora, quello che abbiamo fatto va bene per i device pi\u00f9 grandi (come i laptop o i desktop), ma a quanto pare ci stiamo perdendo qualcosa&#8230;<\/p>\n<\/div>\n<div class=\"paragrafo\">\n<h2>Gli altri device&#8230;<\/h2>\n<p>Questo articolo non \u00e8 incentrato sul mobile-first: se lo fosse stato, avremmo fatto subito le nostre bozze su degli sketchsheet per smartphone o per diverse dimensioni. L&#8217;approccio con cui noi abbiamo pi\u00f9 familiarit\u00e0, e che riteniamo essere il pi\u00f9 semplice per cominciare a pensare in maniera responsive, consiste nel partire dai dispositivi pi\u00f9 grandi per poi passare a quelli pi\u00f9 piccoli. Adesso che abbiamo sistemato la parte pi\u00f9 grande, diamo un&#8217;occhiata a quello che pu\u00f2 fare per noi Foundation cos\u00ec com&#8217;\u00e8.<\/p>\n<div class=\"illustration full left\"><img decoding=\"async\" src=\"http:\/\/alistapart.com\/it\/wp-content\/uploads\/sites\/2\/2012\/04\/desktop-mobile.png\" border=\"0\" \/><\/p>\n<p>Fig 7. La homepage prototipo vista su un desktop e su un piccolo device mobile.<\/p>\n<\/div>\n<p>Come probabilmente avrete intuito dagli screenshot, il comportamento di default di Foundation consiste nel \u201clinearizzare\u201d la pagina, impilando la griglia in verticale ed impostando la larghezza di ogni colonna al 100%. Nella maggior parte dei casi, questo ci toglie molto lavoro.Le persone sono davvero abituate a fare lo scroll in verticale di una pagina e lo trovano comodo se la larghezza orizzontale \u00e8 limitata. In alcuni casi, tuttavia, potrebbe non essere l&#8217;ideale o perlomeno insufficiente.<\/p>\n<div class=\"illustration full left\"><img decoding=\"async\" src=\"http:\/\/alistapart.com\/it\/wp-content\/uploads\/sites\/2\/2012\/04\/badnav.png\" border=\"0\" \/><\/p>\n<p>Fig 8. Di default, stiamo usando troppo spazio in alto per la navigazione.<\/p>\n<\/div>\n<p>Se arrivassimo su questa pagina con uno smartphone, vedremmo molta navigazione prima di raggiungere un solo libro. Le persone hanno la volont\u00e0 di esplorare un po&#8217; sui piccoli dispositivi, ma pi\u00f9 di qualunque altra cosa bramano il contenuto. Possiamo darglielo subito attraverso un paio di \u201caffordance\u201d di Foundation: ordinamento del codice e classi per la visualizzazione su mobile.<\/p>\n<p>Vogliamo che i libri che mostriamo in homepage appaiano per primi e poi mostreremo la navigazione. Dal momento che la pagina \u00e8 disposta cos\u00ec com&#8217;\u00e8, abbiamo scritto per prima la navigazione. Quando la pagina cambia il proprio layout per adattarlo ad un piccolo device, sar\u00e0 prima nella pagina. Dobbiamo scrivere la navigazione per ultima, dopo il contenuto, ma sui grandi dispositivi l&#8217;abbiamo a sinistra. Facciamo ci\u00f2 scrivendo la nav per ultima, ma \u201ctirandola\u201d a sinistra e \u201cspingendo\u201d il contenuto a destra, in questo modo:<\/p>\n<pre><code>\n&lt;div class=\"row\"&gt;\n  &lt;!-- pushes this three columns to the right --&gt;\n    &lt;div class=\"nine columns push-three\"&gt; \n      Main Content...\n    &lt;\/div&gt;\n  &lt;!-- pulls this nine columns to the left --&gt;\n    &lt;div class=\u201dthree columns pull-nine\u201d&gt; \n      Sidebar...\n    &lt;\/div&gt;\n&lt;\/div&gt;\n<\/code><\/pre>\n<p>Adesso abbiamo la navigazione principale dove vogliamo che sia, ma potrebbero ancora esserci degli utenti che vogliono esplorare una categoria come prima azione. Per aiutarli, mettiamo subito un costrutto nav molto pi\u00f9 piccolo (una semplice lista di selezione, per quelli che sono i nostri scopi in questo caso), cos\u00ec:<\/p>\n<div class=\"illustration full left\"><img decoding=\"async\" src=\"http:\/\/alistapart.com\/it\/wp-content\/uploads\/sites\/2\/2012\/04\/goodnav-and-grid.png\" border=\"0\" \/><\/p>\n<p>Fig 9. Con alcuni semplici cambiamenti alle classi nel markup possiamo gestire molto meglio il layout per i device pi\u00f9 piccoli.<\/p>\n<\/div>\n<p>Con la classe <code>.show-on-phones<\/code> (anche: <code>.hide-on-desktops<\/code>, <code>.show-on-tablets<\/code>, etc.,) mostreremo quell&#8217;elemento solo sui piccoli device, ossia su qualunque cosa sia pi\u00f9 piccola del tablet medio. Le classi di device sono ovviamente qualcosa di arbitrario (Che dimensione ha un tablet? I telefoni sono tutti uguali?) ma con prospettiva pragmatica rendono semplice la gestione.<\/p>\n<p>Un&#8217;ultima cosa a cui dovremmo fare attenzione \u00e8 l&#8217;uso della griglia a quattro colonne per piccoli device di Foundation. In alcuni casi, ad esempio questa entry nell&#8217;homepage, non vogliamo davvero che tutto semplicemente si \u201cimpili\u201d, specialmente non la copertina di un libro in una lista (che probabilmente sar\u00e0 molto piccola). Attaccheremo la griglia a quattro colonne per i telefoni alle colonne esistenti, in questo modo:<\/p>\n<pre><code>\n&lt;div class=\"row\"&gt;\n  &lt;!-- this column will be 2 of the 4 small device columns wide --&gt;\n    &lt;div class=\"four columns phone-two\"&gt;\n      &lt;a href=\"book.html\"&gt;&lt;img src=\"http:\/\/placehold.it\/300x400\" \/&gt;&lt;\/a&gt;\n      &lt;p&gt;&lt;a href=\"book.html\"&gt;&lt;strong&gt;Neverwhere&lt;\/a&gt;\n      &lt;br \/&gt;Neil Gaiman&lt;\/p&gt;\n    &lt;\/div&gt;\n  &lt;!-- this column will be 2 of the 4 small device columns wide --&gt;\n    &lt;div class=\"four columns phone-two\"&gt;\n      &lt;a href=\"book.html\"&gt;&lt;img src=\"http:\/\/placehold.it\/300x400\" \/&gt;&lt;\/a&gt;\n      &lt;p&gt;&lt;a href=\"book.html\"&gt;&lt;strong&gt;Good Omens&lt;\/strong&gt;&lt;\/a&gt;\n      &lt;br \/&gt;Neil Gaiman and Terry Pratchett&lt;\/p&gt;\n    &lt;\/div&gt;\n&lt;\/div&gt;\n<\/code><\/pre>\n<p>Abbiamo implementato questa cosa in alcuni punti all&#8217;interno del codice completo, se volete potete controllare. Ora il nostro layout \u00e8 pi\u00f9 conciso e rappresentativo del display che stiamo osservando. Molto meglio.<\/p>\n<p>Copriamo solo parzialmente questo argomento qui: idealmente, dovremmo far passare ogni schermata del nostro prototipo e fare degli aggiustamenti per le varie categorie di dispositivi (l&#8217;abbiamo fatto nel codice che potete scaricare). Essere in grado di fare questi rapidi cambiamenti \u00e8 il motivo per cui fare prototipi programmandoli (o fare prototipi in generale) \u00e8 cos\u00ec utile. Il nostro servizio di condivisione di libri sta migliorando ad ogni revisione e non stiamo solo osservando delle schermate statiche: possiamo vedere come funziona in realt\u00e0 e su vari dispositivi, prima di fare commit e mettere il nostro codice in produzione.<\/p>\n<p>Quando lavorate in maniera responsive, assicuratevi di non pensare solamente al layout: c&#8217;\u00e8 di pi\u00f9 nel creare un sito o un&#8217;app responsive e future-friendly. Ottimizzate i vostri media (caricamento di immagini e video). Potete inviare diversi file dal back-end o usare qualcosa come <a href=\"https:\/\/github.com\/filamentgroup\/Responsive-Images\">le immagini responsive di Scott Jehl<\/a>. Anche l&#8217;articolo sulle <a href=\"http:\/\/italianalistapart.com\/articoli\/58-numero-44-14-febbraio-2012\/234-immagini-responsive-quasi-funzionato-cosa-ci-serve\">immagini responsive di Mat Marquis<\/a> val bene una lettura.<\/p>\n<p>Ricordatevi che i dispositivi touch non hanno uno stato hover. Ricordatevi delle differenze nelle intenzioni degli utenti a seconda del device che stanno usando. Avete gi\u00e0 sentito queste cose, ma adesso sono pi\u00f9 critiche che mai.<\/p>\n<\/div>\n<div class=\"paragrafo\">\n<h2>Fate subito prototipi e fateli spesso e ovunque<\/h2>\n<p>I vostri prodotti e i vostri siti saranno migliori se farete dei prototipi prima ed in maniera pi\u00f9 rapida, cos\u00ec come per quanti pi\u00f9 device potete. Foundation \u00e8 stato creato per aiutarvi a fare ci\u00f2 e la recente ondata di strumenti simili \u00e8 estremamente rincuorante. Nei prossimi cinque anni, i device saranno lo scopo del gioco e non stiamo parlando solo della dimensione dello schermo o del browser. Cambieranno le interfacce, l&#8217;input e il modo in cui useremo il web. Dobbiamo prepararci gi\u00e0 adesso.<\/p>\n<p>Illustrazioni: {carlok}<\/p>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Ci sono centinaia di dispositivi che possono accedere al full web, come disse una volta Steve Jobs. Hanno capacit\u00e0 e vincoli differenti, cose come lo stile di input o le dimensioni dello schermo, la risoluzione e la forma. Con tutti questi dispositivi pronti a superare i tradizionali computer desktop per quel che riguarda il traffico web del prossimo anno, abbiamo bisogno di tool che ci aiutino a creare in maniera responsive. Jonathan Smiley ci mostra come tuffarci nel responsive design usando Foundation, un leggero framework front-end che ci aiuta a fare prototipi e siti in produzione in maniera rapida.<\/p>\n","protected":false},"author":818,"featured_media":7000653,"comment_status":"open","ping_status":"open","template":"","categories":[242,244,247,273,64,274],"tags":[],"coauthors":[360],"class_list":["post-259","article","type-article","status-publish","has-post-thumbnail","hentry","category-browser","category-css","category-html","category-mobile-multidevice","category-numero-49-25-aprile-2012","category-responsive-design"],"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/alistapart.com\/it\/wp-json\/wp\/v2\/article\/259","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/alistapart.com\/it\/wp-json\/wp\/v2\/article"}],"about":[{"href":"https:\/\/alistapart.com\/it\/wp-json\/wp\/v2\/types\/article"}],"author":[{"embeddable":true,"href":"https:\/\/alistapart.com\/it\/wp-json\/wp\/v2\/users\/818"}],"replies":[{"embeddable":true,"href":"https:\/\/alistapart.com\/it\/wp-json\/wp\/v2\/comments?post=259"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/alistapart.com\/it\/wp-json\/wp\/v2\/media\/7000653"}],"wp:attachment":[{"href":"https:\/\/alistapart.com\/it\/wp-json\/wp\/v2\/media?parent=259"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/alistapart.com\/it\/wp-json\/wp\/v2\/categories?post=259"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/alistapart.com\/it\/wp-json\/wp\/v2\/tags?post=259"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/alistapart.com\/it\/wp-json\/wp\/v2\/coauthors?post=259"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}