{"id":1024,"date":"2016-12-13T11:45:02","date_gmt":"2016-12-13T10:45:02","guid":{"rendered":"http:\/\/www.neamesa.it\/blog\/?p=1024"},"modified":"2016-12-13T17:05:27","modified_gmt":"2016-12-13T16:05:27","slug":"realizzare-un-calendario-con-html-css3-javascript","status":"publish","type":"post","link":"http:\/\/www.neamesa.it\/blog\/realizzare-un-calendario-con-html-css3-javascript\/","title":{"rendered":"Realizzare un calendario dell&#8217;avvento con HTML, CSS(3) e (poco) Javascript"},"content":{"rendered":"<p><a href=\"realizzare-un-calendario-con-html-css3-javascript\"><img loading=\"lazy\" decoding=\"async\" class=\"alignleft wp-image-1035 size-full\" title=\"Come realizzare un calendario in html, css e js\" src=\"http:\/\/www.neamesa.it\/blog\/wp-content\/uploads\/2016\/12\/cover_avvento.jpg\" alt=\"Come realizzare un calendario in html, css e js\" width=\"300\" height=\"300\" srcset=\"http:\/\/www.neamesa.it\/blog\/wp-content\/uploads\/2016\/12\/cover_avvento.jpg 300w, http:\/\/www.neamesa.it\/blog\/wp-content\/uploads\/2016\/12\/cover_avvento-150x150.jpg 150w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a>Questo articolo \u00e8 un semplice tutorial che approfondisce alcune tecniche utilizzate per la realizzazione del <a href=\"http:\/\/neamesa.it\/avvento\/html\/calendario-avvento-2016.html\" target=\"_blank\">calendario dell&#8217;avvento online<\/a>\u00a0realizzato da Nea\u00a0Mesa Comunicazione.<br \/>\nIn particolare abbiamo trattato, in forma di esempio pratico, le possibilit\u00e0 offerte nei moduli <a href=\"https:\/\/www.w3.org\/TR\/css-transforms-1\/\" target=\"_blank\">transforms<\/a> e <a href=\"https:\/\/www.w3.org\/TR\/css3-transitions\/\" target=\"_blank\">transitions<\/a> nelle specifiche CSS.<!--more-->Negli esempi CSS, per semplificarne la leggibilit\u00e0, abbiamo indicato solo le propriet\u00e0 &#8220;pure&#8221;, tralasciando le istruzioni con prefisso (<a href=\"https:\/\/en.wikipedia.org\/wiki\/CSS_hack#Prefix_filters\" target=\"_blank\">Vendor prefix<\/a> su Wikipedia).<br \/>\nLa fonte principale di informazioni utilizzata \u00e8\u00a0<a href=\"https:\/\/developer.mozilla.org\" target=\"_blank\">Mozilla Developer Network<\/a>, ma in rete si possono trovare molti ottimi articoli, tutorial e corsi.<br \/>\nIl calendario \u00e8 compatibile con i browser pi\u00f9 moderni, con qualche accorgimento per renderlo funzionante anche su Internet Explorer 10.<br \/>\nLa tabella delle compatibilit\u00e0 \u00e8 disponibile <a href=\"#browser\">qui<\/a>, in chiusura dell&#8217;articolo.<\/p>\n<h2>Il layout<\/h2>\n<p>Iniziamo impostando la grafica del nostro calendario, creando cio\u00e8 due immagini che dovranno sovrapporsi l&#8217;una all&#8217;altra.<\/p>\n<figure style=\"display: inline-block;\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.neamesa.it\/blog\/wp-content\/uploads\/2016\/12\/calendario1.jpg\" alt=\"calendario1\" width=\"320\" height=\"320\" \/><figcaption>Fig1. &#8211; Le finestre &#8220;chiuse&#8221;.<\/figcaption><\/figure>\n<figure style=\"display: inline-block;\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.neamesa.it\/blog\/wp-content\/uploads\/2016\/12\/calendario2.jpg\" alt=\"calendario2\" width=\"320\" height=\"320\" \/><figcaption>Fig2. &#8211; Le finestre &#8220;aperte&#8221;.<\/figcaption><\/figure>\n<p>Poi con l&#8217;ausilio di un buon programma di manipolazione delle immagini, taglieremo in 25 pezzi, uno per giorno, il calendario.<br \/>\nNaturalmente le immagini che si sovrappongono dovranno essere della stessa misura.<\/p>\n<h2>La finestra del giorno<\/h2>\n<p>Iniziamo impostando il codice html che definir\u00e0 una ad una tutte le finestre del calendario:<\/p>\n<pre>&lt;div class=\"container\"&gt;<span class=\"comment\" style=\"color: #993300;\">&lt;!-- il contenitore che flotter\u00e0--&gt;<\/span>\r\n\t&lt;div class=\"giorno\" title=\"01\"&gt;<span class=\"comment\" style=\"color: #993300;\">&lt;!--la finestra del giorno--&gt;<\/span>\r\n    &lt;img class=\"cover\" src=\"cover\/01.jpg\" alt=\"1\"\/&gt;<span class=\"comment\" style=\"color: #993300;\">&lt;!--l'immagine \"nascosta\"--&gt;<\/span>\r\n    &lt;img class=\"flip\" src=\"flip\/01.jpg\" alt=\"1\"\/&gt;<span class=\"comment\" style=\"color: #993300;\">&lt;!--l'immagine visibile--&gt;<\/span>\r\n    &lt;\/div&gt;\r\n&lt;\/div&gt;\r\n\r\n<\/pre>\n<p>Il primo div (<span class=\"comment\">.<span style=\"color: #993300;\">container<\/span><\/span>) ci servir\u00e0 per disporre le finestre una a fianco all&#8217;altra.<br \/>\nNel secondo div (<span class=\"comment\">.<span style=\"color: #993300;\">giorno<\/span><\/span>) sono contenute le immagini.<br \/>\nIl foglio di stile imposter\u00e0 tutte le caratteristiche necessarie:<\/p>\n<pre>\t\r\n\t.container {\r\n\t\tfloat: left;\r\n\t\theight: 160px;\r\n\t\tmargin: 5px;\r\n\t\tposition: relative;\r\n\t\twidth: 160px;\r\n\t\t}\r\n\t\r\n\t.giorno {\r\n\t    \tcursor: pointer;\r\n\t    \theight: 100%;\r\n\t    \tleft: 0px;\r\n\t    \tposition: absolute;\r\n\t    \ttop: 0px;\r\n\t    \twidth: 100%;\r\n\t\t}\r\n\t\t\r\n\t.giorno img {\r\n\t    \tborder-color: #770000 #f00 #f00 #770000;\r\n\t    \tborder-style: solid;\r\n\t    \tborder-width: 1px;\r\n\t    \theight: 100%;\r\n\t    \tleft:0px;\r\n\t    \tposition: absolute;\r\n\t    \ttop:0px;\r\n\t    \twidth: 100%;\r\n\t\t}\r\n<\/pre>\n<p>Come si noter\u00e0 le immagini sono posizionate in modo assoluto sulle stesse coordinate (0 , 0).<br \/>\nCos\u00ec facendo l&#8217;immagine .flip &#8220;coprir\u00e0&#8221; l&#8217;immagine .cover, nascondendola.<br \/>\nL&#8217;istruzione float:left applicata al contenitore alineer\u00e0 le finestre, ponendole una di fianco all&#8217;altra.<\/p>\n<h2>Montiamo il calendario<\/h2>\n<p>Ora non resta che replicare per altre 24 volte lo stesso codice html, modificando, ovviamente, i path delle immagini.<br \/>\nL&#8217;intero blocco delle 25 finestre sar\u00e0 rinchiuso in unico div (#calendario) al quale daremo una larghezza tale da distribuire le finestre in file di cinque ovvero 170px (160 di larghezza + 10 dei margini) X 5 = 850px.<\/p>\n<pre>&lt;div id=\"calendario\"&gt;\r\n\r\n  &lt;div class=\"container\"&gt;<span class=\"comment\" style=\"color: #993300;\">&lt;!-- il contenitore che flotter\u00e0--&gt;<\/span>\r\n    &lt;div class=\"giorno\"&gt;<span class=\"comment\" style=\"color: #993300;\">&lt;!--la finestra del giorno--&gt;<\/span>\r\n      &lt;img class=\"cover\" src=\"cover\/01.jpg\" alt=\"1\"\/&gt;<span class=\"comment\" style=\"color: #993300;\">&lt;!--l'immagine \"nascosta\"--&gt;<\/span>\r\n      &lt;img class=\"flip\" src=\"flip\/01.jpg\" alt=\"1\"\/&gt;<span class=\"comment\" style=\"color: #993300;\">&lt;!--l'immagine visibile--&gt;<\/span>\t\r\n  &lt;\/div&gt;\r\n\r\n  &lt;div class=\"container\"&gt;<span class=\"comment\" style=\"color: #993300;\">&lt;!-- il contenitore che flotter\u00e0--&gt;<\/span>\r\n    &lt;div class=\"giorno\"&gt;<span class=\"comment\" style=\"color: #993300;\">&lt;!--la finestra del giorno--&gt;<\/span>\r\n     &lt;img class=\"cover\" src=\"cover\/02.jpg\" alt=\"2\"\/&gt;<span class=\"comment\" style=\"color: #993300;\">&lt;!--l'immagine \"nascosta\"--&gt;<\/span>\r\n     &lt;img class=\"flip\" src=\"flip\/02.jpg\" alt=\"2\"\/&gt;<span class=\"comment\" style=\"color: #993300;\">&lt;!--l'immagine visibile--&gt;<\/span>\r\n  &lt;\/div&gt;\r\n\r\n\t\t... ecc. ...\r\n\r\n&lt;\/div&gt;<\/pre>\n<h2>Apriamo le finestre. La propriet\u00e0 transform.<\/h2>\n<p>Il calendario \u00e8 montato: ora con un po&#8217;di css e un tocco di javascript possiamo rendere &#8220;apribili&#8221; le finestre.<br \/>\nPer farlo useremo due propriet\u00e0 CSS: <span class=\"comment\" style=\"color: #993300;\">transform <\/span>e<span class=\"comment\" style=\"color: #993300;\"> transition<\/span>. Per facilitare la lettura non abbiamo inserito negli esempi le istruzioni con prefisso (-webkit- , -moz-), ma solo la versione &#8220;pura&#8221;.<br \/>\nEcco come si presenta la sezione del foglio di stile dedicata alle finestre con le nuove istruzioni e una nuova classe, <span class=\"comment\">.<span style=\"color: #993300;\">flipped<\/span><\/span> che sar\u00e0 aggiunta o rimossa dinamicamente &#8211; per mezzo di javascript &#8211; al div.giorno. Per effetto della contestualit\u00e0, la presenza di questa classe cambier\u00e0 lo stato dell&#8217;immagine.<\/p>\n<pre>.giorno {\r\n\tcursor: pointer;\r\n\theight: 100%;\r\n\tleft: 5px;\r\n\tposition: absolute;\r\n\ttop: 5px;\r\n\t<span class=\"comment\" style=\"color: #993300;\">perspective: 920px;<\/span>\r\n\twidth: 100%;\r\n\t}\r\n\t\r\n.giorno img { \r\n\t<span style=\"color: #993300;\"><span class=\"comment\">backface-visibility: hidden<\/span>;<\/span>\r\n\tborder-color: #770000 #f00 #f00 #770000;\r\n\tborder-style: solid;\r\n\tborder-width: 1px;\r\n\theight: 100%;\r\n\tleft:0;\r\n\tposition: absolute;\r\n\ttop:0;\r\n\t<span class=\"comment\" style=\"color: #993300;\">transition: transform 1.0s;<\/span>\r\n\twidth: 100%;\r\n\t}\r\n\r\n.flip{ \r\n\t<span class=\"comment\" style=\"color: #993300;\">transform: rotateY(0deg); <\/span>\r\n\t}\r\n\r\n.cover{ \r\n\t<span class=\"comment\" style=\"color: #993300;\">transform: rotateY(-180deg); <\/span>\r\n\t}\r\n \r\n<span class=\"comment\" style=\"color: #993300;\">.flipped .flip<\/span>{\r\n\t<span class=\"comment\" style=\"color: #993300;\">tranform: rotateY(180deg);<\/span>\r\n\t}\r\n\t\r\n<span class=\"comment\" style=\"color: #993300;\">.flipped .cover<\/span>{\r\n\t<span class=\"comment\" style=\"color: #993300;\">transform: rotateY(0deg);<\/span>\r\n\t}\r\n   \r\n<\/pre>\n<p>Per mezzo dell&#8217;istruzione <span style=\"color: #993300;\">rotateY<\/span> il css opera una trasformazione sugli elementi immagine, ruotandoli sul loro asse verticale (Y).<br \/>\nAll&#8217;apertura della pagina .flip non \u00e8 di fatto ruotato, <span class=\"comment\" style=\"color: #993300;\">rotateY(0deg);<\/span> .cover, invece, \u00e8 ruotato sullo stesso asse di 180\u00b0, <span style=\"color: #993300;\"><span class=\"comment\">rotateY(-180deg);<\/span><\/span><\/p>\n<figure style=\"display: inline-block; margin-right: 1em;\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.neamesa.it\/blog\/wp-content\/uploads\/2016\/12\/flip01.jpg\" alt=\"\" width=\"160\" height=\"160\" \/><figcaption>.flip non \u00e8 ruotato:\u00a0<span class=\"comment\" style=\"color: #993300;\">rotateY(0deg); <\/span><\/figcaption><\/figure>\n<figure style=\"display: inline-block;\"><img loading=\"lazy\" decoding=\"async\" style=\"transform: rotateY(-180deg);\" src=\"http:\/\/www.neamesa.it\/blog\/wp-content\/uploads\/2016\/12\/cover01.jpg\" alt=\"\" width=\"160\" height=\"160\" \/><figcaption>.cover \u00e8 ruotato di 180\u00b0:\u00a0<span class=\"comment\" style=\"color: #993300;\">rotateY(-180deg); <\/span><\/figcaption><\/figure>\n<p>Quando al <span class=\"comment\" style=\"color: #993300;\">div.giorno<\/span> \u00e8 aggiunta la classe<span class=\"comment\" style=\"color: #993300;\"> .flipped <\/span>la situazione si inverte:\u00a0.flip ruota di 180\u00b0, <span class=\"comment\" style=\"color: #993300;\">rotateY(180deg);<\/span> .cover ruota per tornare ad una visualizzazione normale: <span class=\"comment\" style=\"color: #993300;\">rotateY(0deg)<\/span>.<\/p>\n<figure style=\"display: inline-block; margin-right: 1em;\"><img loading=\"lazy\" decoding=\"async\" style=\"transform: rotateY(180deg);\" src=\"http:\/\/www.neamesa.it\/blog\/wp-content\/uploads\/2016\/12\/flip01.jpg\" alt=\"\" width=\"160\" height=\"160\" \/><figcaption>.flip ruota di 180\u00b0:\u00a0<span class=\"comment\" style=\"color: #993300;\">rotateY(180deg); <\/span><\/figcaption><\/figure>\n<figure style=\"display: inline-block;\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.neamesa.it\/blog\/wp-content\/uploads\/2016\/12\/cover01.jpg\" alt=\"\" width=\"160\" height=\"160\" \/><figcaption>.cover \u00e8 ruotato di 180\u00b0:\u00a0<span class=\"comment\" style=\"color: #993300;\">rotateY(0deg); <\/span><\/figcaption><\/figure>\n<p>Queste poche rige di javascript consentiranno di aggiungere (o togliere se c&#8217;\u00e8 gi\u00e0) la classe<span class=\"comment\" style=\"color: #993300;\"> .flipped <\/span>al <span class=\"comment\" style=\"color: #993300;\">div.giorno<\/span>. Lo script si appoggia JQuery, ma naturalmente l&#8217;uso di questa libreria \u00e8 puramente indicativo.<br \/>\nIn ogni caso, se decidete di usare JQuery non dimenticate di caricarlo nella pagina&#8230;<\/p>\n<pre>\t\r\n$('.giorno').each(function(){\r\n\t$(this).click(function(){\r\n\t\t$(this).toggleClass('flipped');\r\n\t});\r\n});\t\r\n<\/pre>\n<p>Pur operando nella realt\u00e0 bidimensionale dello schermo le propriet\u00e0 come rotateY ci trasportano di fatto in un contesto 3D. In tale contesto un elemento ha anche una &#8220;faccia posteriore&#8221; che nel nostro caso deve essere nascosta. Questo spiega l&#8217;uso della propriet\u00e0 <span class=\"comment\" style=\"color: #993300;\">backface-visibility<\/span> valorizzata a<span class=\"comment\" style=\"color: #993300;\"> hidden<\/span>.<\/p>\n<p style=\"margin-bottom: 2em;\">Il contesto tridimensionale ci permette anche di applicare effetti prospettici agli elementi ruotati con la propriet\u00e0 perspective.<\/p>\n<figure style=\"display: block; border: 1px solid #333; width: 160px; perspective: 920px; margin: auto;\"><img loading=\"lazy\" decoding=\"async\" style=\"transform: rotateY(45deg);\" src=\"http:\/\/www.neamesa.it\/blog\/wp-content\/uploads\/2016\/12\/flip01.jpg\" alt=\"\" width=\"160\" height=\"160\" \/><figcaption style=\"background: #333; color: #fff;\">perspective: 920px<\/figcaption><\/figure>\n<p>In questo modo durante la rotazione l&#8217;immagine sembra veramente &#8220;fuoriuscire&#8221; dal proprio contenitore.<br \/>\nDa notare che la deformazione prospettica sar\u00e0 tanto pi\u00f9 accentuata quanto pi\u00f9 piccolo \u00e8 il valore di perspective (nell&#8217;esempio seguente indicato a 320px;). Nel contesto tridimensionale nel quale agisce la propriet\u00e0 &#8220;esiste&#8221; un piano di fondo (Z) la cui profondit\u00e0 \u00e8 definita dal valore di perspective. La deformazione prospettica dell&#8217;oggetto \u00e8 inversamente proporzionale a questo valore . Poich\u00e9 rappresenta la distanza tra lo spettatore e l&#8217;oggetto, maggiore \u00e8 il valore meno intenso \u00e8 l&#8217;effetto visivo.<br \/>\nPer definizione il punto di fuga \u00e8 posto al centro dell&#8217;oggetto: la propriet\u00e0 perspective-origin permette di controllarne la posizione sugli assi verticale e orizzontale.<\/p>\n<figure style=\"display: block; border: 1px solid #333; width: 160px; perspective: 320px; perspective-origin: 10% 90%; margin: auto;\"><img loading=\"lazy\" decoding=\"async\" style=\"transform: rotateY(45deg);\" src=\"http:\/\/www.neamesa.it\/blog\/wp-content\/uploads\/2016\/12\/flip01.jpg\" alt=\"\" width=\"160\" height=\"160\" \/><figcaption style=\"background: #333; color: #fff;\">perspective: 320px<br \/>\nperspective-origin:10% 90%<\/figcaption><\/figure>\n<h2>Animiamo l&#8217;apertura. La propriet\u00e0 transition<\/h2>\n<p>Normalmente, quando il valore di una propriet\u00e0 CSS cambia, il risultato della trasformazione (per esempio di uno sfondo da un colore a un altro) avviene immediatamente.<br \/>\nLa propriet\u00e0 transition permette di animare il passaggio di un elemento da uno stato ad un altro in modo fluido in un intervallo di tempo definito.<br \/>\nPer farla pi\u00f9 semplice: senza transition (nel css applicata alle immagini oggetto di trasformazione), il passaggio da un&#8217;immagine all&#8217;altra avverrebbe instantaneamente, senza alcun effetto di rotazione.<br \/>\nAlle immagini da trasformare \u00e8 associata l&#8217;istruzione <span class=\"comment\" style=\"color: #993300;\">transition: transform 1.0s;<\/span> La propriet\u00e0 \u00e8 usata in modalit\u00e0 <em>shorthand<\/em>; il primo valore indica l&#8217;istruzione che deve essere animata (transform), il secondo valore la durata dell&#8217;animazione. Possono essere specificati anche i valori di ritardo (delay) nella partenza dell&#8217;animazione e la curva di velocit\u00e0 (transition-timing-function).<\/p>\n<h2>Teniamo a bada i curiosi?<\/h2>\n<p>Quando si possiede un calendario dell&#8217;avvento, si sa, non si dovrebero aprire le finestrelle se non nel giorno corrispondente. Se proprio vogliamo tenere sotto controllo i curiosi possiamo aggiungere nello script un meccanismo di controllo che impedisca l&#8217;interazione sulle finestre se la loro data non \u00e8 uguale o precedente a quella odierna. I metodi per farlo sono diversi e ognuno pu\u00f2 scegliere quello che preferisce.<\/p>\n<p>In ogni caso, se volete vedere il calendario in azione e sbirciare nel codice, eccolo qua:\u00a0<a href=\"http:\/\/neamesa.it\/avvento\/html\/calendario-avvento-2016.html\" target=\"_blank\">http:\/\/neamesa.it\/avvento\/html\/calendario-avvento-2016.html<\/a><\/p>\n<h2 id=\"browser\">Compatibilit\u00e0 con i principali browser<\/h2>\n<p>Fonte: <a href=\"https:\/\/developer.mozilla.org\" target=\"_blank\">Mozilla Developer Network<\/a><\/p>\n<table>\n<caption>transform (3d)<\/caption>\n<tbody>\n<tr>\n<th>Chrome<\/th>\n<th>Firefox<\/th>\n<th>IE<\/th>\n<th>Opera<\/th>\n<th>Safari<\/th>\n<\/tr>\n<tr>\n<td>12.0 -webkit<\/td>\n<td>10.0 -moz<\/td>\n<td rowspan=\"2\">10.0<\/td>\n<td>15 -webkit<\/td>\n<td rowspan=\"2\">4.0 -webkit<\/td>\n<\/tr>\n<tr>\n<td>36<\/td>\n<td>16.0<\/td>\n<td>23<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<table>\n<caption>transition<\/caption>\n<tbody>\n<tr>\n<th>Chrome<\/th>\n<th>Firefox<\/th>\n<th>IE<\/th>\n<th>Opera<\/th>\n<th>Safari<\/th>\n<\/tr>\n<tr>\n<td>1.0 -webkit<\/td>\n<td>4.0 -moz<\/td>\n<td rowspan=\"2\">10.0<\/td>\n<td>10.1 -o<\/td>\n<td>3.0 -webkit<\/td>\n<\/tr>\n<tr>\n<td>26.0<\/td>\n<td>16.0<\/td>\n<td>12.10<\/td>\n<td>6.1<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<table>\n<caption>backface-visibility<\/caption>\n<tbody>\n<tr>\n<th>Chrome<\/th>\n<th>Firefox<\/th>\n<th>IE<\/th>\n<th>Opera<\/th>\n<th>Safari<\/th>\n<\/tr>\n<tr>\n<td rowspan=\"2\">12 -webkit<\/td>\n<td>10 -moz<\/td>\n<td rowspan=\"2\">10<\/td>\n<td rowspan=\"2\">15 -webkit<\/td>\n<td rowspan=\"2\">-webkit<\/td>\n<\/tr>\n<tr>\n<td>16<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<table>\n<caption>perspective<\/caption>\n<tbody>\n<tr>\n<th>Chrome<\/th>\n<th>Firefox<\/th>\n<th>IE<\/th>\n<th>Opera<\/th>\n<th>Safari<\/th>\n<\/tr>\n<tr>\n<td>12 -webkit<\/td>\n<td>10 -moz<\/td>\n<td rowspan=\"2\">10<\/td>\n<td rowspan=\"2\">15 -webkit<\/td>\n<td rowspan=\"2\">-webkit<\/td>\n<\/tr>\n<tr>\n<td>45<\/td>\n<td>16<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p style=\"text-align: right;\"><em>Fabio Bosso<\/em><br \/>\n<em> <a href=\"http:\/\/www.neamesa.it\" target=\"_blank\">Nea Mesa Comunicazione<\/a><\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Questo articolo \u00e8 un semplice tutorial che approfondisce alcune tecniche utilizzate per la realizzazione del calendario dell&#8217;avvento online\u00a0realizzato da Nea\u00a0Mesa Comunicazione. In particolare abbiamo trattato, in forma di esempio pratico, le possibilit\u00e0 offerte nei moduli transforms e transitions nelle specifiche &hellip; <a href=\"http:\/\/www.neamesa.it\/blog\/realizzare-un-calendario-con-html-css3-javascript\/\">Continua a leggere<span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6,25],"tags":[110,36,37,32],"class_list":["post-1024","post","type-post","status-publish","format-standard","hentry","category-internet","category-tecnologia","tag-calendario","tag-codice-html","tag-css","tag-programmazione"],"aioseo_notices":[],"_links":{"self":[{"href":"http:\/\/www.neamesa.it\/blog\/wp-json\/wp\/v2\/posts\/1024","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/www.neamesa.it\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.neamesa.it\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.neamesa.it\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.neamesa.it\/blog\/wp-json\/wp\/v2\/comments?post=1024"}],"version-history":[{"count":30,"href":"http:\/\/www.neamesa.it\/blog\/wp-json\/wp\/v2\/posts\/1024\/revisions"}],"predecessor-version":[{"id":1059,"href":"http:\/\/www.neamesa.it\/blog\/wp-json\/wp\/v2\/posts\/1024\/revisions\/1059"}],"wp:attachment":[{"href":"http:\/\/www.neamesa.it\/blog\/wp-json\/wp\/v2\/media?parent=1024"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.neamesa.it\/blog\/wp-json\/wp\/v2\/categories?post=1024"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.neamesa.it\/blog\/wp-json\/wp\/v2\/tags?post=1024"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}