{"id":299,"date":"2012-08-28T11:33:35","date_gmt":"2012-08-28T09:33:35","guid":{"rendered":"https:\/\/alistapart.com\/it\/article\/impariamo-ad-amare-le-parti-noiose-di-css\/"},"modified":"2012-08-28T11:33:35","modified_gmt":"2012-08-28T09:33:35","slug":"impariamo-ad-amare-le-parti-noiose-di-css","status":"publish","type":"article","link":"https:\/\/alistapart.com\/it\/article\/impariamo-ad-amare-le-parti-noiose-di-css\/","title":{"rendered":"Impariamo ad amare le parti noiose di CSS"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/alistapart.com\/it\/wp-content\/uploads\/sites\/2\/2012\/08\/n58b.png\" border=\"0\" width=\"216\" height=\"240\" align=\"left\" \/>Il futuro di CSS ci d\u00e0 molte ragioni per cui essere emozionati: da un lato, c&#8217;\u00e8 una vasta gamma di nuovi metodi che rivoluzioneranno il modo in cui creiamo le nostre pagine sul web; dall&#8217;altro, c&#8217;\u00e8 un nuovo insieme di effetti grafici che ci permetteranno l&#8217;uso di filtri e ombreggiature al volo. Le persone adorano queste cose e i magazine e i blog sono pieni di articoli che li riguardano.<\/p>\n<p>Ma se questi strumenti fanno la parte dello show di CSS, allora penso che sia ora di dare un po&#8217; del nostro amore ai cavalli da traino: i dettagli pratici dei componenti del linguaggio, come i selettori, le unit\u00e0 e le funzioni. Spesso li chiamo &#8220;le parti noiose&#8221;, sebbene lo dico solo con un grande affetto, un amore che penso dovreste condividere con me.<\/p>\n<p>Per capire perch\u00e9, diamo un&#8217;occhiata ad alcune delle migliori nuove parti noiose in CSS, le parti su cui si lavora in laboratori male illuminati, lontani dalla luce delle nuove cose glamour nelle vetrine dei negozi. Alcune di queste parti noiose sono in giro da un po&#8217; ma si meritano pi\u00f9 riconoscimenti, mentre altre stanno appena cominciando ad apparire nei browser. Tuttavia, rivoluzioneranno tutte il modo in cui lavoriamo, sebbene in modi umili e senza pretese.<\/p>\n<div class=\"paragrafo\">\n<h2>Unit\u00e0 di misure relative<\/h2>\n<p>\u00c8 probabile che, dato che siete dei developer illuminati, avrete gi\u00e0 lavorato con le misure relative, ossia con gli em o con le percentuali; pertanto, conoscerete il problema: dover usare una calcolatrice per trovare le misure a causa dell&#8217;ereditariet\u00e0. Ad esempio, al giorno d&#8217;oggi \u00e8 piuttosto comune impostare nel proprio documento una dimensione di base per i font e poi usare delle misure relative per impostare i propri font nel resto della pagina. In CSS, tutto ci\u00f2 probabilmente somiglia a questo:<\/p>\n<p>\u00a0<\/p>\n<pre><code>html { font-size: 10px; }\np { font-size: 1.4em; }<\/code><\/pre>\n<p>\u00a0<\/p>\n<p>Questa cosa va bene, non \u00e8 affatto un problema, finch\u00e9 non si ha un elemento figlio a cui volete dare una dimensione di font differente. Ad esempio, in un markup come questo:<\/p>\n<p>\u00a0<\/p>\n<pre><code>The cat sat on the &lt;span&gt;mat&lt;\/span&gt;.<\/code><\/pre>\n<p>\u00a0<\/p>\n<p>Se volete che lo span abbia un font size pi\u00f9 piccolo, diciamo 1.2em, cosa dovete fare? Tirate fuori la calcolatrice e calcolate 1.2 diviso 1.4. Il risultato \u00e8 questo:<\/p>\n<p>\u00a0<\/p>\n<pre><code>p span { font-size: 0.85714em; }<\/code><\/pre>\n<p>\u00a0<\/p>\n<p>Inoltre, il problema non si limita nemmeno ad usare <code>em<\/code>. Se state creando un sito fluido usando le percentuali, saprete che la percentuale \u00e8 relativa al suo contenitore: quindi, se avete un elemento che volete che sia il 40% del suo genitore, la cui lunghezza \u00e8 75%, allora la larghezza dell&#8217;elemento deve essere impostata al 53.33333%.<\/p>\n<p>Non \u00e8 il massimo.<\/p>\n<\/div>\n<div class=\"paragrafo\">\n<h2>Lunghezze relative alla root<\/h2>\n<p>Per combattere questo problema della dimensione dei font, abbiamo ora accesso all&#8217;unit\u00e0 <code>rem<\/code> (root em). Si tratta sempre di un&#8217;unit\u00e0 relativa, ma \u00e8 sempre relativa a un valore base fisso, che \u00e8 la font size dell&#8217;elemento root del documento (in HTML, \u00e8 sempre l&#8217;elemento <code>html<\/code>). Presumendo la stessa dimensione del font di 10px che abbiamo usato nell&#8217;esempio precedente, le regole CSS richieste in questo caso sono:<\/p>\n<p>\u00a0<\/p>\n<pre><code>p { font-size: 1.4rem; }\np span { font-size: 1.2rem; }<\/code><\/pre>\n<p>\u00a0<\/p>\n<p>Ora entrambe le regole sono relative alla dimensione del font size della root: un modo molto pi\u00f9 elegante e semplice in cui lavorare, specialmente se avete una base semplice, come 10px o 12px. \u00c8 come tornare indietro e usare di nuovo i valori espressi in <code>px<\/code>, solo che in questo modo sono scalabili.<\/p>\n<p>Questa \u00e8 una delle features meglio supportate tra quelle che descriver\u00f2 in questo articolo: la si trova in tutti i browser moderni, incluso IE9 e <a href=\"http:\/\/caniuse.com\/#feat=rem\">manca solo in Opera Mobile<\/a>.<\/p>\n<\/div>\n<div class=\"paragrafo\">\n<h2>Lunghezze relative alla viewport<\/h2>\n<p>Se pensiate che l&#8217;unit\u00e0 <code>rem<\/code> sia cool (io lo penso), sarete felici di sapere che c&#8217;\u00e8 un altro nuovo insieme di unit\u00e0 di lunghezza per combattere il problema delle percentuali. Queste funzionano in maniera simile a <code>rem<\/code>, tranne che sono relative non ad un valore definito dall&#8217;utente della root del documento, ma alle dimensioni stesse della viewport del dispositivo.<\/p>\n<p>Le due unit\u00e0 principali sono <code>vh<\/code> e <code>vw<\/code>, che sono relative rispettivamente all&#8217;altezza e alla larghezza della viewport. Ciascuna prende come valore un numero, che equivale alla stessa percentuale della lunghezza specificata. Siccome mi ricordo ancora delle lezioni di scrittura di sceneggiature a scuola, lasciate che vi mostri come funzionano piuttosto che cercare di spiegarvelo:<\/p>\n<p>\u00a0<\/p>\n<pre><code>div { height: 50vh; }<\/code><\/pre>\n<p>\u00a0<\/p>\n<p>In questo esempio, l&#8217;altezza del <code>div<\/code> sarebbe esattamente la met\u00e0 dell&#8217;altezza della viewport: 1vh = 1% dell&#8217;altezza della viewport, cos\u00ec ha senso immaginare che 50vh = 50% dell&#8217;altezza della viewport.<\/p>\n<p>Al cambiare della dimensione della viewport cambia il valore dell&#8217;unit\u00e0, ma il vantaggio di questa rispetto alle percentuali \u00e8 che non dovete preoccuparvi degli elementi contenitori: un oggetto con un valore di 10vw avr\u00e0 sempre questa larghezza, indipendentemente dalla larghezza dei suoi genitori.<\/p>\n<p>C&#8217;\u00e8 anche un&#8217;unit\u00e0 <code>vmin<\/code>, che equivale alla minima dimensione di <code>vh<\/code> o <code>vw<\/code> ed \u00e8 stato recentemente annunciato che una corrispondente unit\u00e0 <code>vmax<\/code> verr\u00e0 aggiunta alla specifica (sebbene non lo sia ancora al momento in cui scrivo).<\/p>\n<p>Al momento, le si trova in IE9+, Chrome e Safari 6.<\/p>\n<\/div>\n<div class=\"paragrafo\">\n<h2>Valori calcolati<\/h2>\n<p>Quando si realizza un sito fluido e\/o responsive, si incontra sicuramente il problema della combinazione di pi\u00f9 unit\u00e0, poich\u00e9 si vuole una griglia che abbia le dimensioni in percentuale ma i margini fissi. Per esempio:<\/p>\n<p>\u00a0<\/p>\n<pre><code>div {\n  margin: 0 20px;\n  width: 33%; \n}<\/code><\/pre>\n<p>\u00a0<\/p>\n<p>Se il vostro layout utilizza solo padding e border, allora potete usare <code>box-sizing<\/code> per aiutarvi ad aggirare il problema, ma non vi sar\u00e0 d&#8217;aiuto con i margin. Un approccio migliore e pi\u00f9 flessibile consiste nell&#8217;usare la funzione valore <code>calc()<\/code>, che vi permette di fare operazioni matematiche con diverse unit\u00e0, come:<\/p>\n<p>\u00a0<\/p>\n<pre><code>div {\n  margin: 0 20px;\n  width: calc(33% - 40px);\n}<\/code><\/pre>\n<p>\u00a0<\/p>\n<p>Non siete limitati ad usarla solo su <code>width<\/code>: potete usarla con qualunque valore di lunghezza e se volete davvero andare in fondo alla tana del coniglio, potete anche usare <code>calc()<\/code> all&#8217;interno di <code>calc()<\/code>.<\/p>\n<p>IE9+ usa la versione senza prefisso (!), Firefox la usa con il prefisso <em>-moz-<\/em> (ma dovrebbe apparire senza prefisso nella versione 16 o 17) e Chrome e Safari l&#8217;hanno implementata con il prefisso <em>-webkit-<\/em>. Tuttavia, <a href=\"http:\/\/caniuse.com\/#feat=calc\">pare che non ci sia ancora in Webkit mobile<\/a>.<\/p>\n<\/div>\n<div class=\"paragrafo\">\n<h2>Caricare un sottoinsieme di caratteri<\/h2>\n<p>Le performance brillanti sono sempre state importanti, ma la vasta gamma di dispositivi mobili presenti al momento sul mercato (con un&#8217;ampia variabilit\u00e0 e incertezza nella velocit\u00e0 di connessione) forse le rende ancora pi\u00f9 importanti. Un modo per rendere pi\u00f9 veloce il caricamento di una pagina consiste nel tenere ridotta la dimensione dei files esterni, il che rende molto ben gradita l&#8217;introduzione di una nuova propriet\u00e0 per <code>@font-face<\/code> che aiuta a fare proprio questo.<\/p>\n<p>La propriet\u00e0 in questione \u00e8 <code>unicode-range<\/code> e prende come valore un range di caratteri unicode. Quando importate le risorse esterne, solo i caratteri specificati qui dentro vengono caricati dal file del font al posto dell&#8217;intero insieme. Questo codice dimostra come caricare solo tre caratteri dal file <em>foo.ttf<\/em>:<\/p>\n<p>\u00a0<\/p>\n<pre><code>@font-face {\n  font-family: foo;\n  src: url('foo.ttf');\n  unicode-range: U+31-33;\n}<\/code><\/pre>\n<p>\u00a0<\/p>\n<p>\u00c8 particolarmente utile se state usando delle <a href=\"http:\/\/net.tutsplus.com\/tutorials\/html-css-techniques\/quick-tip-ever-thought-about-using-font-face-for-icons\/\">font icon<\/a> e volete mostrarne solo un sottoinsieme in una data pagina. In un test che ho fatto, l&#8217;utilizzo di <code>unicode-range<\/code> ha permesso di togliere in media 0.85 secondi dal tempo di caricamento di un file di font, che non \u00e8 una cosa da poco. Ovviamente, i vostri dati possono variare.<\/p>\n<p>Questa propriet\u00e0 \u00e8 attualmente implementata in IE9+ e nei browser WebKit come Chrome e Safari.<\/p>\n<\/div>\n<div class=\"paragrafo\">\n<h2>Nuove pseudo-classi<\/h2>\n<p>Le unit\u00e0 e i valori sono una cosa buona e giusta, ma mi entusiasmano particolarmente i selettori e le pseudo-classi. Uscirsene con un intelligente pattern di selezione, anche se \u00e8 nascosto dove solo pochi potrebbero vederlo, mi fa sentire come un artigiano. <a href=\"http:\/\/hbr.org\/2012\/04\/the-real-leadership-lessons-of-steve-jobs\/\">Parafrasando il padre di Steve Jobs<\/a>: devi fare il retro della cancellata bello quanto il davanti anche se nessun altro sapr\u00e0 che l&#8217;hai fatto, perch\u00e9 tu lo saprai.<\/p>\n<p>La prima volta che ho usato <code>:nth-of-type()<\/code> ho avuto una rivelazione, come se avessi abbattuto le porte della percezione. Ok, sto un po&#8217; esagerando, ma ci sono un paio di pseudo-classi CSS per cui vale davvero la pena di entusiasmarsi.<\/p>\n<\/div>\n<div class=\"paragrafo\">\n<h2>La pseudo-classe &#8220;negation&#8221;<\/h2>\n<p>Probabilmente, non vi renderete conto di quanto sia utile la pseudo-classe <code>:not()<\/code> finch\u00e9 non l&#8217;avrete provata. L&#8217;argomento che si passa a <code>:not()<\/code> \u00e8 un semplice selettore, niente di pi\u00f9. Quando un selettore crea una lista di soggetti che include <code>:not()<\/code>, tutti gli elementi che corrispondono all&#8217;argomento verranno esclusi dalla lista. Lo so, suona complicato anche a me, ma \u00e8 in realt\u00e0 piuttosto semplice.<\/p>\n<p>Immaginatevi questo: avete una lista di item e volete applicare una regola a tutti gli item dispari, ma mai all&#8217;ultimo della lista. Al momento, dovreste fare qualcosa del genere:<\/p>\n<p>\u00a0<\/p>\n<pre><code>li { color: #00F; }\nli:nth-child(odd) { color: #F00; }\nli:last-child { color: #00F; } \n<\/code><\/pre>\n<p>\u00a0<\/p>\n<p>Con la pseudo-classe &#8220;negazione&#8221; potete escludere l&#8217;ultimo item dalla regola utilizzando <code>:last-child<\/code> come argomento, riducendo cos\u00ec il numero di regole di una e rendendo il codice un po&#8217; pi\u00f9 semplice da gestire:<\/p>\n<p>\u00a0<\/p>\n<pre><code>li { color: #00F; }\nli:nth-child(odd):not(:last-child) { color: #F00; }\n<\/code><\/pre>\n<p>\u00a0<\/p>\n<p>Non \u00e8 nulla di eclatante e come ho gi\u00e0 mostrato potete farne a meno, ma \u00e8 piuttosto utile. Ho avuto l&#8217;opportunit\u00e0 di usarla in un progetto creato con WebKit integrato e ha dimostrato il suo valore in maniera coerente. Onestamente, \u00e8 una delle mie pseudo-classi preferite.<\/p>\n<p>\u00c8 proprio cos\u00ec, ho le mie pseudo-classi preferite.<\/p>\n<p>Questa \u00e8 la feature pi\u00f9 implementata tra quelle di cui parlo in questo articolo: la si trova in IE9+ e in tutti i browser moderni, senza prefisso. E se avete familiarit\u00e0 con jQuery, potreste essere abituati ad usarla: ne fa parte fin dalla versione 1.0, insieme all&#8217;analogo metodo <code>not()<\/code>.<\/p>\n<\/div>\n<div class=\"paragrafo\">\n<h2>La pseudo-class &#8220;matches-any&#8221;<\/h2>\n<p>La pseudo-classe <code>:matches()<\/code> accetta come argomento un semplice selettore, un selettore composto, un elenco separato da virgole o una qualsiasi combinazione di questi item. Grande! Ma cosa fa?<\/p>\n<p>\u00c8 maggiormente utile per ridurre la ridondanza dei selettori multipli. Come caso d&#8217;uso, immaginate di avere un certo numero di elementi <code>p<\/code> in diversi container, ma volete selezionarne solo alcuni. La regola di stile che scrivereste potrebbe assomigliare a questa:<\/p>\n<p>\u00a0<\/p>\n<pre><code>.home header p,\n.home footer p,\n.home aside p {\n  color: #F00;\n}\n<\/code><\/pre>\n<p>\u00a0<\/p>\n<p>Con <code>:matches()<\/code> potete accorciarla notevolmente cercando degli elementi in comune tra i selettori: nel nostro esempio hanno tutti <code>.home<\/code> all&#8217;inizio e alla fine nel <code>p<\/code>, pertanto possiamo usare <code>:matches()<\/code> per raggruppare tutti gli elementi tra questi. Confusi? Ecco come appare:<\/p>\n<p>\u00a0<\/p>\n<pre><code>.home :matches(header,footer,aside) p { color: #F00; }<\/code><\/pre>\n<p>\u00a0<\/p>\n<p>In realt\u00e0, fa parte di CSS4 (CSS Selectors Level 4, per essere precisi) e nella stessa specifica si dice anche che saremo in grado di usare la stessa sintassi per pi\u00f9 selettori, separati da virgole, nelle versioni future di <code>:not()<\/code>. Forte!<\/p>\n<p>Al momento, <code>:matches()<\/code> \u00e8 presente in Chrome e Safari con il prefisso <em>-webkit-<\/em> e in Firefox con il suo vecchio nome, <code>:any()<\/code>, con il prefisso <em>-moz-<\/em>.<\/p>\n<\/div>\n<div class=\"paragrafo\">\n<h2>Vi siete gi\u00e0 innamorati dei cavalli da traino?<\/h2>\n<p>L&#8217;aspetto migliore di tutte queste nuove feature presentate in questo articolo \u00e8 che risolvono dei problemi reali, dalle piccole ma noiose ripetizioni dei selettori alle nuove e continue sfide poste dalla creazione di siti responsive ad alta performance. Infatti, posso benissimo immaginare l&#8217;uso di ciascuna di queste feature in maniera regolare.<\/p>\n<p>Nuove feature come i filtri potrebbero avere maggior visibilit\u00e0, ma \u00e8 molto pi\u00f9 probabile che troviate quelle presentate qui utili in tutto quello che create.<\/p>\n<p>Ciascuna di queste render\u00e0 un po&#8217; pi\u00f9 semplice la vostra vita professionale, espandendo il ventaglio di possibilit\u00e0 di quello che potete ottenere, e non c&#8217;\u00e8 niente di noioso in tutto questo!<\/p>\n<p>Illustrazioni: {carlok}<\/p>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Il futuro di CSS ci d\u00e0 molti motivi per cui essere emozionati: da un lato, c&#8217;\u00e8 una vasta gamma di nuovi metodi che rivoluzioneranno il modo in cui creiamo le nostre pagine sul web; dall&#8217;altro, c&#8217;\u00e8 un nuovo insieme di effetti grafici che ci permetteranno l&#8217;uso di filtri e ombreggiature al volo. Le persone adorano queste cose. I magazine e i blog sono pieni di articoli che li riguardano, ma se questi strumenti sono la parte appariscente di CSS, \u00e8 ora di dare un po&#8217; di attenzione ai cavalli da tiro del linguaggio. Vediamo quali sono le parti noiose come i selettori, le unit\u00e0 e le funzioni che rivoluzioneranno il modo in cui lavoriamo, sebbene in maniera umile e senza pretese.<\/p>\n","protected":false},"author":818,"featured_media":7000670,"comment_status":"open","ping_status":"open","template":"","categories":[244,247,73],"tags":[],"coauthors":[372],"class_list":["post-299","article","type-article","status-publish","has-post-thumbnail","hentry","category-css","category-html","category-numero-58-28-agosto-2012"],"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/alistapart.com\/it\/wp-json\/wp\/v2\/article\/299","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=299"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/alistapart.com\/it\/wp-json\/wp\/v2\/media\/7000670"}],"wp:attachment":[{"href":"https:\/\/alistapart.com\/it\/wp-json\/wp\/v2\/media?parent=299"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/alistapart.com\/it\/wp-json\/wp\/v2\/categories?post=299"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/alistapart.com\/it\/wp-json\/wp\/v2\/tags?post=299"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/alistapart.com\/it\/wp-json\/wp\/v2\/coauthors?post=299"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}