 
 
 <?xml version="1.0" encoding="UTF-8"?><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/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>upCreative &#187; animazioni</title>
	<atom:link href="https://www.upcreative.net/tag/animazioni/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.upcreative.net</link>
	<description>Web Design, grafica,  web application e content web marketing</description>
	<lastBuildDate>Wed, 10 Apr 2019 12:53:28 +0000</lastBuildDate>
	<language>it-IT</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.1.41</generator>
	<item>
		<title>Twitter Bootstrap search box responsive con animazioni CSS3</title>
		<link>https://www.upcreative.net/twitter-bootstrap-search-box-responsive/</link>
		<comments>https://www.upcreative.net/twitter-bootstrap-search-box-responsive/#comments</comments>
		<pubDate>Wed, 05 Feb 2014 10:03:15 +0000</pubDate>
		<dc:creator><![CDATA[upcreative]]></dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Coding Gallery]]></category>
		<category><![CDATA[Risorse]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[Web Apps]]></category>
		<category><![CDATA[Web Design]]></category>
		<category><![CDATA[animazioni]]></category>
		<category><![CDATA[css3]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[Modernizr]]></category>
		<category><![CDATA[Search box]]></category>
		<category><![CDATA[twitter bootstrap]]></category>

		<guid isPermaLink="false">http://www.upcreative.net/?p=3215</guid>
		<description><![CDATA[<p>Tutorial su come rendere originale il proprio sito web sviluppato con Twitter Bootstrap, realizzando un'esperienza di ricerca originale ed accattivante, il tutto utilizzando animazioni CSS3 fluide e performanti. Il risultato è reso compatibile con tutti i tipi di browser grazie alla tecnica del progressive enhancement (miglioramento progressivo).</p>
<p>The post <a rel="nofollow" href="https://www.upcreative.net/twitter-bootstrap-search-box-responsive/">Twitter Bootstrap search box responsive con animazioni CSS3</a> appeared first on <a rel="nofollow" href="https://www.upcreative.net">upCreative</a>.</p>
]]></description>
				<content:encoded><![CDATA[<div class="l-submain"><div class="l-submain-h g-html i-cf"><div class="g-cols"><div class="full-width">
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			<a title="Twitter Bootstrap - Framework Javascript e CSS per la realizzazione di siti web e applicazioni" href="http://getbootstrap.com"><em>Twitter Bootstrap</em></a> rappresenta un&#8217;ottima risorsa per tutti coloro che operano nell&#8217;ambito del web design, ed in rete si possono trovare migliaia di siti web e applicazioni realizzate con questo utilissimo framework. Se però da una parte fa senz&#8217;altro comodo potersi appoggiare ad un sistema solido ed aggiornato, crossbrowser e responsive, dall&#8217;altra è altrettanto vero che, in un mare di progetti &#8220;<em>Bootstrap-based</em>&#8220;, diventa  necessario distinguersi dagli altri.</p>
<p>Uno dei modi più utili per farlo è quello di implementare delle <strong>funzionalità originali sui componenti dell&#8217;interfaccia.</strong> In un precedente articolo ti ho mostrato come realizzare uno <strong>slide menu originale con animazioni CSS3</strong>, con tanto di progressive enhancement, ovvero quella tecnica che permette di applicare alle funzionalità dei componenti un <strong>miglioramento progressivo a seconda del browser, tramite CSS3:</strong></p>
<ul>
<li><a title="CSS3 slide panel: tutorial su come realizzare un menu stile mobile" href="http://www.upcreative.net/css3-slide-panel-tutorial-creare-menu-mobile/">CSS3 slide panel: tutorial su come realizzare un menu stile mobile</a></li>
</ul>
<h2>Twitter Bootstrap Search Box</h2>
<p>In questo articolo ti voglio mostrare come rendere <strong>originale</strong> ed <strong>accattivante</strong> l&#8217;<strong>esperienza di ricerca</strong> all&#8217;interno di un sito web o applicazione, sia essa desktop o mobile. Ciò che infatti realizzeremo è un search box con effetto <em>slide-down, </em>la cui caratteristica principale è quella di essere <strong>totalmente responsive</strong>, in quanto ci serviremo di Twitter Bootstrap.
		</div> 
	</div> 
	<div class="wpb_single_image wpb_content_element">
		<div class="wpb_wrapper">
			
			<img width="690" height="400" src="http://www.upcreative.net/wp-content/uploads/2014/02/twitter-bootstrap-search-box-responsive.jpg" class="attachment-full" alt="twitter-bootstrap-search-box-responsive" />
		</div> 
	</div> <div class="g-cols"><div class="one-half"><div class="wpb_button align_center"><a href="http://www.upcreative.net/tutorials/05022014Twitter-Bootstrap-search-box-responsive/"class="g-btn type_primary size_big"><span>Demo</span></a></div>
</div><div class="one-half"><div class="wpb_button align_center"><a href="http://www.upcreative.net/download/3242/"class="g-btn type_primary size_big"><span>Download</span></a></div>
</div></div>
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			
<p>Il risultato dell&#8217;esperimento potrà essere pertanto implementato anche su applicazioni Mobile, anche per il fatto che utilizzeremo delle <strong>animazioni CSS3 altamente performanti</strong> per i dispositivi che le supportano, mentre ricorreremo a quelle meno performanti nel caso di browser più datati.<em><br />
</em></p>
<hr />
<p><em>Realizzare un search box #crossbrowser e #responsive con #TwitterBootstrap #webdesign</em><br /><a href='https://twitter.com/share?text=Realizzare+un+search+box+%23crossbrowser+e+%23responsive+con+%23TwitterBootstrap+%23webdesign&#038;via=upCreativeIta&#038;related=upCreativeIta&#038;url=https://www.upcreative.net/twitter-bootstrap-search-box-responsive/' target='_blank'>Click To Tweet</a></p>
<hr />
<p>L&#8217;obiettivo è quello di far comparire dall&#8217;alto il campo di ricerca nel momento in cui viene cliccata l&#8217;apposita icona, in modo da coprire completamente la barra di navigazione. Quando si verifica l&#8217;evento &#8220;<em>blur</em>&#8221; del campo richiameremo invece l&#8217;effetto contrario, quello per nascondere il form.</p>
<p><em>A questo proposito ti consiglio di leggere:</em></p>
<ul>
<li><em><a title="Performance CSS3: consigli per ottimizzare le prestazioni" href="http://www.upcreative.net/performance-css3-consigli-per-ottimizzare-le-animazioni/">Performance CSS3: consigli per ottimizzare le prestazioni</a></em></li>
<li><em><a title="Web e mobile app fluide con Hardware Acceleration" href="http://www.upcreative.net/web-e-mobile-app-fluide-con-layer-e-hardware-acceleration/">Web e mobile app fluide con Hardware Acceleration</a></em></li>
</ul>
<h2>Il markup HTML</h2>
<p>Il codice HTML utilizzato per i vari elementi DOM è relativamente semplice; in particolare non facciamo altro che prelevarlo dalla documentazione del sito ufficiale di Twitter Bootstrap in modo da ricreare la <em>navbar</em>, applicando qualche piccola modifica:</p><pre class="crayon-plain-tag">&lt;!-- menu di navigazione --&gt;

&lt;nav class="navbar navbar-inverse navbar-fixed-top" role="navigation"&gt;	

  &lt;div class="container-fluid"&gt;
    &lt;div class="navbar-header"&gt;        

      &lt;button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse"&gt;
        &lt;span class="sr-only"&gt;Toggle navigation&lt;/span&gt;
        &lt;span class="icon-bar"&gt;&lt;/span&gt;
        &lt;span class="icon-bar"&gt;&lt;/span&gt;
        &lt;span class="icon-bar"&gt;&lt;/span&gt;
      &lt;/button&gt;

      &lt;a class="navbar-brand" href="http://www.upcreative.net"&gt;upCreative.net&lt;/a&gt;
    &lt;/div&gt;
    &lt;div class="navbar-collapse collapse"&gt;
      &lt;ul class="nav navbar-nav navbar-right"&gt;
        &lt;li&gt;&lt;a href="#"&gt;Dashboard&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a href="#"&gt;Settings&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a href="#"&gt;Profile&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;
        	&lt;a href="#" id="search-button"&gt;
            	&lt;i class="fa fa-search fa-lg"&gt;&lt;/i&gt; 
	        &lt;span&gt;Cerca&lt;/span&gt;
        	&lt;/a&gt;
        &lt;/li&gt;
      &lt;/ul&gt;          
    &lt;/div&gt;
  &lt;/div&gt;

  &lt;!-- il form di ricerca, inizialmente nascosto --&gt;

  &lt;form class="navbar-form" action="#"&gt;
    &lt;input type="search" placeholder="Cerca..."&gt;
    &lt;a href="#" id="close-button"&gt;&lt;i class="fa fa-times fa-lg"&gt;&lt;/i&gt;&lt;/a&gt;
  &lt;/form&gt;
&lt;/nav&gt;</pre><p>
Ci serviamo quindi del tag <em>&lt;article&gt; </em>per rappresentare il contenuto della pagina (o applicazione):</p><pre class="crayon-plain-tag">&lt;!-- Contenuto pagina web --&gt; 

&lt;article class="text-center"&gt;

	&lt;h1&gt;Twitter Bootstrap search box con animazioni CSS3&lt;/h1&gt;	

	&lt;a href="http://www.upcreative.net/" class="btn btn-primary btn-lg"&gt;Vai all'articolo del tutorial &lt;i class="fa fa-chevron-right"&gt;&lt;/i&gt;&lt;/a&gt;

	&lt;p&gt;
		Guarda la demo in un dispositivo mobile per poter poter visualizzare al meglio le 
		performance raggiungibili con la tecnica dell'&lt;strong&gt;accelerazione hardware&lt;/strong&gt;.
	&lt;/p&gt;

	&lt;p style="margin-top:30px;"&gt;
		oppure consulta altri tutorial su upCreative.net:
	&lt;/p&gt;

	&lt;a href="http://www.upcreative.net/tutorial-css3-e-javascript-per-web-designers/" class="btn btn-primary"&gt;&lt;i class="fa fa-globe"&gt;&lt;/i&gt; upCreative.net&lt;/a&gt;

&lt;/article&gt;</pre><p>
Per quanto riguarda le icone di ricerca e di chiusura abbiamo usato quelle del framework <em><a title="Fontawesome - l'icon font creato appositamente per Twitter Bootstrap" href="http://fontawesome.io">Fontawesome</a></em>, <em>icon-font</em> appositamente creato per Twitter Bootstrap.</p>
<h2>Il codice CSS3</h2>
<p>Vediamo ora il codice per il foglio di stile:</p><pre class="crayon-plain-tag">/* stili del form della navbar */
.navbar-form{

	/*
		posizioniamo il form di ricerca in modo assoluto ed impostiamo
		larghezza ed altezza al 100% in modo da coprire completamente la 
		navbar che lo contiente		
	*/
	position: absolute;
	padding:0;
	left:0;
	top:0;
	width:100%;
	height:70px;
	margin: 0;
}</pre><p>
Abbiamo impostato la grandezza del form che contiene il campo di ricerca (classe <em>.navbar-form</em>) in modo che avesse le stesse dimensioni della <em>navbar,</em> per far sì che quest&#8217;ultima venga interamente coperta al momento dell&#8217;azione di ricerca.</p>
<p>Aggiungiamo ora la definizione delle modalità di animazione:</p><pre class="crayon-plain-tag">.navbar-form{	
	/* 
		impostiamo ad all l"attributo scantenante" per l'effetto 
		di transizione, in modo da scatenarlo sia se viene modificato il 
		valore della proprietà 'top', che quello della proprietà 'transorm'.
		Grazie alla proprietà 'transform sarà' possibile rendere l'effetto 
		fluido e performante anche per i dispositivi mobile, 
		forzando la creazione dei layers grafici.
	*/
	-webkit-transition: all .3s;
	   -moz-transition: all .3s;
	   	-ms-transition: all .3s;
		 -o-transition: all .3s;
		 	transition: all .3s;

	/*
		inizialmente nascondiamo fuori dallo schermo il form di ricerca, 
		in modo che sia traslato negativamente in verticale dello stesso
		numero di pixek che compone l'altezza della navbar 
	*/
	-webkit-transform: translate3d(0,-70px,0);
	   -moz-transform: translate3d(0,-70px,0);
	    -ms-transform: translate3d(0,-70px,0);
	     -o-transform: translate3d(0,-70px,0);
	        transform: translate3d(0,-70px,0);
}</pre><p>
Aggiungiamo una piccola porzione di codice per &#8220;ripiegare&#8221; sull&#8217;utilizzo della proprietà &#8220;<em>top</em>&#8220;, al fine di scatenare l&#8217;effetto di entrata nel caso in cui il browser del visitatore non supporti la proprietà &#8220;<i>translate</i>&#8221; (poco performante perché implica la ripetizione di gran parte del processo di rendering):</p><pre class="crayon-plain-tag">/*
se il browser non supporta la proprietà translate, allora impostiamo il
valore top negativo, dello stesso numero di pixel dell'altezza della navbar
*/
body.without-translate .navbar-form{
    top: -70px;
}</pre><p>
La classe .<em>with-translate</em> verrà aggiunta al <em>body </em>della pagina utilizzando <em><a title="Modernizr - Libreria per determinare le funzionalità HTML5 e CSS3 di ogni dispositivo" href="http://modernizr.com">Modernizr</a>; </em>lo vedremo analizzando il codice Javascript.</p>
<p>Passiamo quindi a definire gli stili per le proprietà grafiche dell&#8217;input di ricerca e quelle per il posizionamento dell&#8217;icona di chiusura:</p><pre class="crayon-plain-tag">/*
	impostaiamo gli stili per l'elemento input. In particolare facciamo in modo 
	che il campo di testo abbia le stesse dimensioni dell'elemento form che lo contiene
*/
.navbar-form input[type='search']{
	outline: 0;	
	width: 100%;
	height:100%;
	font-size: 24px;
	color:#F4F4F4;
	-moz-box-sizing: border-box;
	box-sizing: border-box;	
	padding:11px 15px;
	padding-right: 35px; /*aumentiamo il padding per "fare spazio" al pulsante di chiusura del form	*/
	background: #000;
	border:0;	
}

/*
	impostiamo in modo assoluto il pulsante di chiusura del 
	form di ricerca in modo che sia posizionato in fondo a destra rispetto 
	al conteitore e che stia sopra il campo di ricerca
*/

#close-button{
	position: absolute;
	right:18px;
	top:24px;
	color: #FFF;
}</pre><p>
Infine facciamo in modo che, nel momento in cui viene aggiunta la classe <em>.open </em>al form di ricerca, siano modificate le &#8220;proprietà scatenanti&#8221; che avviano l&#8217;effetto, secondo quanto definito precedentemente:</p><pre class="crayon-plain-tag">/*
definiamo la classe per la visualizzazione del form di ricerca	
*/
.navbar-form.open{	
	/*
	nel momento in cui questa classe viene aggiunta al form,
	andiamo a modifica l'attributo scatenante definito in precedenza (transform)
	per avviare l'aniamzione
	*/	
	-webkit-transform: translate3d(0,0,0);
	   -moz-transform: translate3d(0,0,0);
	    -ms-transform: translate3d(0,0,0);
	     -o-transform: translate3d(0,0,0);
	        transform: translate3d(0,0,0);

}

/*
se il browser non supporta la proprietà translate, allora 
attiviamo l'effetto agendo sulla proprietà 'top'.
*/

body.without-translate .navbar-form.open {
    top: 0;
}</pre><p>
&nbsp;</p>
<h2>Il codice Javascript</h2>
<p>Come al solito definiamo subito, tramite Modernizr,  il nome dell&#8217;<strong>evento di fine <em>transition</em></strong> in modo da eseguire la nostra funzione javascript nel momento in cui l&#8217;animazione di apertura giunge al termine:</p><pre class="crayon-plain-tag">/* Grazie a modernizr riprendo il nome dell'evento di fine transizione, che cambia a seconda del browser */

var endTransitionName = {
	'WebkitTransition' : 'webkitTransitionEnd',
	'OTransition' : 'oTransitionEnd',
	'msTransition' : 'MSTransitionEnd',
	'transition' : 'transitionend'
};
var transitionEventName = endTransitionName[ Modernizr.prefixed( 'transition' ) ];</pre><p>
<em>Per avere maggiori informazioni sulla gestione degli eventi di effetti realizzati tramite le proprietà transition e animation, ti consiglio di leggere questo articolo:</em></p>
<ul>
<li><em><a title="Modernizr e CSS3: gestire gli eventi di fine animazione e transizione con javascript" href="http://www.upcreative.net/modernizr-e-css3-gestire-eventi-animazioni-e-transizioni/">Modernizr e CSS3: gestire gli eventi di fine animazione e transizione con javascript</a></em></li>
</ul>
<p>Aggiungendo ora la classe <em>.without-translate </em>al <em>body</em>, nel caso in cui non sia presente il supporto per la proprietà <em>transform:</em></p><pre class="crayon-plain-tag">/* 
    grazie a modernizr, controllando le classi del tag HTML 
    possiamo sapere se il browser supporta determinate funzionalità        
*/
var supportCssTransforms = $("html").hasClass("csstransforms3d"),
    supportCssTransitions = $("html").hasClass("csstransitions");

/*
    se il browser non supporta la prop. 'transform' aggiungiamo la classe 'without-translate' al body, 
    in modo da poter differenziare la modalità d'effetto tramite CSS
*/
if(!supportCssTransforms){
    $("body").addClass("without-translate");
}</pre><p>
Infine gestiamo gli eventi di <em>click</em> e <em>blur  </em>per pulsanti e campo di ricerca:</p><pre class="crayon-plain-tag">/*
	definiamo gli elementi sui quali agiremo
*/
var navForm = $("nav .navbar-form"), 
	input = navForm.find("input[type='search']"),
	openBnt = $("#search-button"),
	closeBtn = $("#close-button");

openBnt.on("click", function(e){
	e.preventDefault();
	//alla fine dell'effetto di transizione richiamiamo il focus sul campo di testo		    	
	navForm.addClass("open").one(transitionEventName, function(){ 	   
    	   input.focus();
	});
        /* 
        se il browser non supporta le transition CSS3 allora l'evento di fine animazione non si verificherà, 
        pertanto richiameremo il focus sul campo di ricerca subito dopo aver aggiunto 
        la classe 'open' al form
        */
        if(!supportCssTransitions)
	   input.focus();

});

/*
	nel momento in cui si verifica l'evento blur, rimuoviamo la classe "open"
	dal form in modo da scatenare l'animazione con effetto contrario (quella
	che nasconde appunto il form)
*/	    	
input.on("blur", function(){ 		    	
	navForm.removeClass("open");
});

/*
	al click dell'icona di chiusura forziamo il blur del campo per scatenare il
	conseguente effetto di chiusura
*/
closeBtn.on("click", function(e){
	e.preventDefault(); 		    	
	input.trigger("blur");
});</pre><p>
Ed ecco finalmente il risultato finale:</p>

		</div> 
	</div> 
	<div class="wpb_single_image wpb_content_element">
		<div class="wpb_wrapper">
			
			<img width="690" height="400" src="http://www.upcreative.net/wp-content/uploads/2014/02/twitter-bootstrap-search-box-responsive.jpg" class="attachment-full" alt="twitter-bootstrap-search-box-responsive" />
		</div> 
	</div> <div class="g-cols"><div class="one-half"><div class="wpb_button align_center"><a href="http://www.upcreative.net/tutorials/05022014Twitter-Bootstrap-search-box-responsive/"class="g-btn type_primary size_big"><span>Demo</span></a></div>
</div><div class="one-half"><div class="wpb_button align_center"><a href="http://www.upcreative.net/download/3242/"class="g-btn type_primary size_big"><span>Download</span></a></div>
</div></div>
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			
<h2>Conclusioni</h2>
<p>Con questo tutorial spero di averti dimostrato che servirsi di <strong>animazioni CSS3 performanti</strong> è un&#8217;ottimo metodo per rendere originale un sito web e distinguerlo dagli altri, oppure per implementare dei <strong>componenti fluidi</strong> nelle proprie applicazioni mobile sviluppate in HTML5, CSS3 e Javascript. Così facendo possiamo realizzare prodotti le cui prestazioni si avvicinano il più possibile a quelle di applicazioni native.</p>
<hr />
<p><em>Realizzare un search box #crossbrowser e #responsive con #TwitterBootstrap #webdesign</em><br /><a href='https://twitter.com/share?text=Realizzare+un+search+box+%23crossbrowser+e+%23responsive+con+%23TwitterBootstrap+%23webdesign&#038;via=upCreativeIta&#038;related=upCreativeIta&#038;url=https://www.upcreative.net/twitter-bootstrap-search-box-responsive/' target='_blank'>Click To Tweet</a></p>
<hr />
<p>L&#8217;impiego della tecnica del <strong>miglioramento progressivo</strong> permette inoltre di applicare il nostro effetto a <strong>tutti i tipi di browser</strong>, spaziando da quel più vecchi quelli a quelli di ultima generazione.</p>
<p>E tu? Utilizzerai questa tecnica nei tuoi progetti? Lascia pure un tuo commento per qualunque dubbio o perplessità, o per suggerire delle funzionalità aggiuntive.
		</div> 
	</div> <div class="g-hr">
						<span class="g-hr-h">
							<i class="fa fa-chevron-down"></i>
						</span>
					</div><div class="g-cols color_alternate w-actionbox"><div class="one-half">
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			
<h3>Crea la tua mobile app in HTML, CSS3 e Javascript</h3>
<p>Utilizzando questa tecnica insieme a molte altre, ho realizzato più di 10 mobile app in HTML, CSS3 e Javascript (tra cui <a title="Tint HTML mobile app" href="http://www.upcreative.net/tint-weather-app/">Tint</a> e <a title="Dieta SI o NO? HTML Mobile app" href="http://www.upcreative.net/app-dieta-si-o-no/">Dieta SI o NO?</a>).</p>
<p>Se anche tu vuoi realizzare la tua applicazione in HTML, CSS e javascript da distribuire nei vari store, forse potrebbe interessarti il mio e-book <strong><a title="HTML Mobile Accelerato - Come creare una mobile app in HTML, CSS e Javacript" href="http://www.upcreative.net/html-mobile-accelerato/">HTML Mobile Accelerato</a>.</strong>
		</div> 
	</div> </div><div class="one-half">
	<div class="wpb_single_image wpb_content_element">
		<div class="wpb_wrapper">
			
			<a href="http://www.upcreative.net/html-mobile-accelerato/"><img width="563" height="418" src="http://www.upcreative.net/wp-content/uploads/2013/11/HTML-mobile-accelerato-ebook-cover1.png" class="attachment-full" alt="HTML-mobile-accelerato-ebook-cover" /></a>
		</div> 
	</div> 
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			<div class="widget_wysija_cont shortcode_wysija"><div id="msg-form-wysija-shortcode6ab002ab7ea2b-4" class="wysija-msg ajax"></div><form id="form-wysija-shortcode6ab002ab7ea2b-4" method="post" action="#wysija" class="widget_wysija shortcode_wysija">
<p class="wysija-paragraph">
    
    
    	<input type="text" name="wysija[user][email]" class="wysija-input validate[required,custom[email]]" title="Inserisci la tua mail" placeholder="Inserisci la tua mail" value="" />
    
    
    
    <span class="abs-req">
        <input type="text" name="wysija[user][abs][email]" class="wysija-input validated[abs][email]" value="" />
    </span>
    
</p>
<input class="wysija-submit wysija-submit-field" type="submit" value="Tienimi aggiornato/a" />

    <input type="hidden" name="form_id" value="4" />
    <input type="hidden" name="action" value="save" />
    <input type="hidden" name="controller" value="subscribers" />
    <input type="hidden" value="1" name="wysija-page" />

    
        <input type="hidden" name="wysija[user_list][list_ids]" value="4,1" />
    
 </form></div>
		</div> 
	</div> </div></div></div></div>
</div></div><p>The post <a rel="nofollow" href="https://www.upcreative.net/twitter-bootstrap-search-box-responsive/">Twitter Bootstrap search box responsive con animazioni CSS3</a> appeared first on <a rel="nofollow" href="https://www.upcreative.net">upCreative</a>.</p>
]]></content:encoded>
			<wfw:commentRss>https://www.upcreative.net/twitter-bootstrap-search-box-responsive/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Come realizzare un HTML Mobile Slide Menu con Animazioni CSS3</title>
		<link>https://www.upcreative.net/mobile-slide-menu-css3/</link>
		<comments>https://www.upcreative.net/mobile-slide-menu-css3/#comments</comments>
		<pubDate>Wed, 22 Jan 2014 09:30:01 +0000</pubDate>
		<dc:creator><![CDATA[upcreative]]></dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Creare applicazioni javascript]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[Web Apps]]></category>
		<category><![CDATA[Web Design]]></category>
		<category><![CDATA[animazioni]]></category>
		<category><![CDATA[css3]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[mobile app]]></category>
		<category><![CDATA[mobile slide menu]]></category>

		<guid isPermaLink="false">http://www.upcreative.net/?p=3086</guid>
		<description><![CDATA[<p>Un altro tutorial sulla creazione di HTML Mobile App per la realizzazione di un mobile slide menu animato utilizzando CSS3 e con effetto ease elastico.</p>
<p>The post <a rel="nofollow" href="https://www.upcreative.net/mobile-slide-menu-css3/">Come realizzare un HTML Mobile Slide Menu con Animazioni CSS3</a> appeared first on <a rel="nofollow" href="https://www.upcreative.net">upCreative</a>.</p>
]]></description>
				<content:encoded><![CDATA[<div class="l-submain"><div class="l-submain-h g-html i-cf"><div class="g-cols"><div class="full-width"><div class="g-cols"><div class="full-width">
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			
<p>Oggi riprendiamo il discorso delle <a title="Scrivere animazioni CSS3 tenendo in considerazione le performance" href="http://www.upcreative.net/performance-css3-consigli-per-ottimizzare-le-animazioni/"><strong>performance</strong></a> per quanto riguarda le interfacce nei <strong>dispositivi mobile</strong>, che per caratteristiche hardware sono meno potenti di quelli desktop e riescono a supportare i <strong>processi di rendering</strong> in maniera molto più difficoltosa.</p>
<p>La strada scelta per realizzare un&#8217;<strong>animazione CSS3</strong> influenza notevolmente la fluidità e la reattività con cui un dispositivo mobile riesce a metterla in atto, e scrivere gli stili in modo corretto permette di creare <strong>Applicazioni Mobile in HTML5 e Javascript che non hanno nulla da invidiare a quelle native</strong>.</p>
<hr />
<p><em>Come realizzare un #mobileapp slide menu animato con #CSS3 e #modernizr #webdesign </em><br /><a href='https://twitter.com/share?text=Come+realizzare+un+%23mobileapp+slide+menu+animato+con+%23CSS3+e+%23modernizr+%23webdesign+&#038;via=upCreativeIta&#038;related=upCreativeIta&#038;url=https://www.upcreative.net/mobile-slide-menu-css3/' target='_blank'>Click To Tweet</a></p>
<hr />
<p><em>A tal proposito ti consiglio di leggere:</em></p>
<ul>
<li><em><a title="Performance CSS3: consigli per ottimizzare le prestazioni" href="http://www.upcreative.net/performance-css3-consigli-per-ottimizzare-le-animazioni/">Performance CSS3: consigli per ottimizzare le prestazioni</a></em></li>
<li><em><a title="Web e Mobile App fluide con Hardware acceleration" href="http://www.upcreative.net/web-e-mobile-app-fluide-con-layer-e-hardware-acceleration/">Web e Mobile App fluide con Hardware acceleration</a></em></li>
</ul>
<h2>Il tutorial di oggi: HTML Mobile Slide Menu</h2>
<p>In questo tutorial ti voglio mostrare come creare un <strong>Mobile Slide Menu</strong> con effetto <em>ease</em> e con voci di navigazione animate, utilizzando stili CSS3 performanti e gestendo gli eventi tramite Javascript. Ogni voce di menu sarà animata con un leggero ritardo rispetto a quella precedente, in modo da creare un effetto più accattivante.</p>
<p>L&#8217;esperimento potrebbe essere benissimo integrato in una <strong>HTML5 Mobile App </strong>da utilizzare come versione mobile di un sito web o da distribuire nei vari store, compilandola tramite tools come <a title="Phonegap - Creare applicazioni utilizzando HTML, CSS, e JavaScript" href="http://phonegap.com">Phonegap</a>.</p>

		</div> 
	</div> </div></div>
	<div class="wpb_single_image wpb_content_element align_center">
		<div class="wpb_wrapper">
			
			<img width="690" height="400" src="http://www.upcreative.net/wp-content/uploads/2014/01/mobile-slide-menu-css3.jpg" class="attachment-full" alt="mobile-slide-menu-css3" />
		</div> 
	</div> <div class="g-cols"><div class="one-half"><div class="wpb_button align_center"><a href="http://www.upcreative.net/tutorials/21012014-Mobile-slide-menu-CSS3/"class="g-btn type_primary size_big"><span><i class="fa fa-eye-open"></i>Demo</span></a></div>
</div><div class="one-half"><div class="wpb_button align_center"><a href="http://www.upcreative.net/download/3094/"class="g-btn type_primary size_big"><span><i class="fa fa-download-alt"></i>Download</span></a></div>
</div></div>
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			
<h2></h2>
<h2>Premessa</h2>
<p>Il risultato è ottimizzato per dispositivi mobile e le tecniche utilizzate (come l&#8217;<strong><a title="Accelerazione Hardware" href="http://www.upcreative.net/web-e-mobile-app-fluide-con-layer-e-hardware-acceleration/">accelerazione hardware</a> </strong>e la composizione dei<strong> livelli grafici</strong>)  sono suppurate solo dai browser di ultima generazione. Pertanto, se vuoi integrare il menu in un sito web, è opportuno attuare un&#8217;adeguata tecnica di <b>Progressive Enhancement.</b></p>
<p><em>Per approfondire il discorso del Progressive Enhancement e per vedere come realizzare uno slide menu ottimizzato su tutti i browser, ti consiglio di leggere questo post:</em></p>
<ul>
<li><em><a title="CSS3 slide panel: tutorial su come realizzare un menu stile mobile" href="http://www.upcreative.net/css3-slide-panel-tutorial-creare-menu-mobile/">CSS3 slide panel: tutorial su come realizzare un menu stile mobile</a></em></li>
</ul>
<h2>Il markup HTML</h2>
<p>Come primo passo impostiamo il markup HTML del documento, il quale prevede principalmente due elementi essenziali: il <strong>contenitore del menu</strong> (con al suo interno una lista di 4 voci) e quello dei <strong>contenuti</strong> dell&#8217;applicazione, rispettivamente rappresentati da un elemento <em>&lt;nav&gt; </em> con classe <em>&#8216;menu&#8217;</em>, e da un <em>&lt;div&gt; </em>con classe <em>&#8216;content-wrapper&#8217;.</em></p><pre class="crayon-plain-tag">&lt;nav class="menu"&gt;
    &lt;ul&gt;	    
    	&lt;li&gt;
	    	&lt;a href="#"&gt;
	    		&lt;i class="fa fa-search fa-2x"&gt;&lt;/i&gt;
	    		&lt;span&gt;Ricerca&lt;/span&gt;
	    	&lt;/a&gt;
    	&lt;/li&gt;
    	&lt;li&gt;
	    	&lt;a href="#"&gt;
	    		&lt;i class="fa fa-star fa-2x"&gt;&lt;/i&gt;
	    		&lt;span&gt;Preferiti&lt;/span&gt;
	    	&lt;/a&gt;
	    &lt;/li&gt;
    	&lt;li&gt;
	    	&lt;a href="#"&gt;
	    		&lt;i class="fa fa-users fa-2x"&gt;&lt;/i&gt;
	    		&lt;span&gt;Amici&lt;/span&gt;
	    	&lt;/a&gt;
	    &lt;/li&gt;
    	&lt;li&gt;
	    	&lt;a href="#"&gt;
	    		&lt;i class="fa fa-cog fa-2x"&gt;&lt;/i&gt;
	    		&lt;span&gt;Impostazioni&lt;/span&gt;
	    	&lt;/a&gt;
    	&lt;/li&gt;	    
    &lt;/ul&gt;

&lt;/nav&gt;

&lt;!-- contenuto dell'applicazione --&gt;

&lt;div class="content-wrapper"&gt;

	&lt;section class="page"&gt; &lt;!-- pagina (o view dell'applicazione) --&gt;

		&lt;header&gt; &lt;!-- header della pagina --&gt;
			&lt;button class="toggle-menu"&gt;&lt;i class="fa fa-bars fa-lg"&gt;&lt;/i&gt;&lt;/button&gt;
			&lt;h1 class="title"&gt;HTML Mobile App&lt;/h1&gt;

		&lt;/header&gt;
		&lt;article class="text-center"&gt;

			Conenuto pagina	

		&lt;/article&gt;
	&lt;/section&gt;

&lt;/div&gt;</pre><p>
Per realizzare il nostro HTML Mobile Slide Menu facciamo in modo di <strong>posizionare entrambi gli elementi DOM (&#8216;<em>.menu</em>&#8216; e &#8216;.<em>content-wrapper</em>&#8216;) tramite la proprietà <em>position:absolute</em></strong>, per sovrapporre il contenitore dell&#8217;applicazione al menu.</p>
<p>Poi, avviando l&#8217;effetto <em>slide</em>, il contenitore sarà traslato orizzontalmente dello stesso numero di pixel che compongono la larghezza del menu (260px).</p>
<p style="text-align: center;"><a ref="magnificPopup" href="http://www.upcreative.net/wp-content/uploads/2014/01/elementi-mobile-slide-menu.jpg"><img class="size-full wp-image-3101 aligncenter" alt="elementi-mobile-slide-menu" src="http://www.upcreative.net/wp-content/uploads/2014/01/elementi-mobile-slide-menu.jpg" width="586" height="460" /></a></p>
<p>Andiamo quindi a vedere il codice CSS3 necessario per raggiungere tale obiettivo.</p>
<h2>Gli stili CSS3</h2>
<p>Innanzitutto posizioniamo i due elementi, attribuendo al contenitore uno <em>z-index </em>superiore a quello del menu:</p><pre class="crayon-plain-tag">nav.menu {
    position: absolute;
    left: 0;
    width: 260px;
    height: 100%;
    top: 0;
    z-index: 1;	    
    background: #B8BDC5;
}
.content-wrapper{
    position: absolute;
    top: 0;
    left: 0;
    height: 100%;
    width: 100%;
    z-index: 2;
    background-color: #4A5A6E;	    
}
/*
	ecco gli stili per il posizionamento di un'ipotetica pagina (o view)	
	che si trova all'internod el contenitore su cui effettueremo l'effeto slide	
*/
.content-wrapper &gt; section.page{
	position: absolute;
	top:0;
	left:0;
	width: 100%;
	height: 100%;
}</pre><p>
Attiviamo l&#8217;effetto<em> slide-right, </em>utile per rivelare il menu, impostando il foglio di stile in modo che basti aggiungere una classe all&#8217;elemento DOM:</p><pre class="crayon-plain-tag">.content-wrapper {
    position: absolute;
    top: 0;
    left: 0;
    height: 100%;
    width: 100%;
    z-index: 2;
    background-color: #4A5A6E;

    /*
	impostiamo l'effetto di transizione sul contenitore della pagina/delle pagine del documento	    
	in modo da forzare la creazione dei layer grafici (accelerazione hardware)
	e rendere l'animazione più performante;
	il tutto riportando tutti i prefix per la compatibilità browser
    */

    -webkit-transition: -webkit-transform .5s ease-in-out;
    	  -moz-transition: -moz-transform .5s ease-in-out;
    	    -ms-transition: -ms-transform .5s ease-in-out;
    	      -o-transition: -o-transform .5s ease-in-out;
    	            transition: transform .5s ease-in-out;

}			

.content-wrapper.open-left {

	/*
		nel caso in cui venga aggiunta la classe 'open-left'
		avviamo l'effetto transition modificando la prop. transform
		e traslando in senso positivo tutto il contenuto di 260px,
		al fine di rivelare il menu nascosto sotto
	*/

    -webkit-transform: translate3d(260px, 0, 0);
       -moz-transform: translate3d(260px, 0, 0);
        -ms-transform: translate3d(260px, 0, 0);
         -o-transform: translate3d(260px, 0, 0);
            transform: translate3d(260px, 0, 0);

}</pre><p>
Agendo sulla proprietà di stile <em>transition, </em>richiamiamo, tramite il <em>transform</em>, un tipo di effetto che forza l&#8217;accelerazione hardware e quindi la composizione dei livelli grafici (il cui rendering è delegato alla GPU), <strong>alleggerendo così i carichi di lavoro</strong> e<strong> favorendo la fluidità dell&#8217;animazione.</strong></p>
<p>Facciamo quindi la stessa cosa per gli elementi della lista del menu, che devono essere traslati anch&#8217;essi orizzontalmente e mostrati con una leggera dissolvenza:</p><pre class="crayon-plain-tag">nav.menu ul li{
	display: block;
	margin-bottom: 10px;  

	opacity: 0.8;  	 	

    -webkit-transform: translate3d(-260px, 0, 0);
       -moz-transform: translate3d(-260px, 0, 0);
        -ms-transform: translate3d(-260px, 0, 0);
         -o-transform: translate3d(-260px, 0, 0);
            transform: translate3d(-260px, 0, 0);

}

/* 
facciamo in modo che le &lt;li&gt; della navigazione siano animate solo nel caso 
in cui  l'elemento '.menu' abbia la classe 'animate li';
questo ci permette di animare ogni &lt;li&gt; solo quando il menu viene mostrato e 
non quando viene chiuso
*/

nav.menu.animate-li ul li{
    -webkit-transition: all .5s ease-in-out;
       -moz-transition: all .5s ease-in-out;
    	-ms-transition: all .5s ease-in-out;
    	 -o-transition: all .5s ease-in-out;
    	    transition: all .5s ease-in-out;
}</pre><p>
Dal codice puoi vedere che l&#8217;effetto <em>transition</em> viene attivato solo nel caso in cui all&#8217;elemento<em> &lt;nav&gt;</em> del menu venga aggiunta la classe &#8216;<em>animate-li</em>&#8216;; questo è per <strong>animare gli elementi della lista solo nel caso in cui il menu venga aperto</strong>, e non durante l&#8217;azione di chiusura.</p>
<p>Per rendere l&#8217;effetto più accattivante aggiungiamo a tutti gli elementi della lista (tranne il primo) un leggero ritardo rispetto a quello precedente tramite la proprietà <strong><em>transition-delay</em></strong>:</p><pre class="crayon-plain-tag">/* impostiamo i ritardi di animazione per gli elementi della lista */

nav.menu ul li:nth-child(2){
	-webkit-transition-delay: .05s;
		transition-delay: .05s;
}

nav.menu ul li:nth-child(3){
	-webkit-transition-delay: .08s;
		transition-delay: .08s;
}

nav.menu ul li:nth-child(4){
	-webkit-transition-delay: .11s;
		transition-delay: .11s;
}</pre><p>
<p style="text-align: center;"><a ref="magnificPopup" href="http://www.upcreative.net/wp-content/uploads/2014/01/transition-delay-mobile-slide-menu.jpg"><img class="size-full wp-image-3102 aligncenter" alt="transition-delay-mobile-slide-menu" src="http://www.upcreative.net/wp-content/uploads/2014/01/transition-delay-mobile-slide-menu.jpg" width="690" height="460" /></a></p>
<p>Impostiamo quindi la classe da giungere al menu per attivare l&#8217;animazione sulle 4 voci:</p><pre class="crayon-plain-tag">/* attiviamo l'animazione della transition agendo sulle proprietà 'scatenanti' */

nav.menu.open-left ul li{

    opacity: 1;

    -webkit-transform: translate3d(0, 0, 0);
       -moz-transform: translate3d(0, 0, 0);
        -ms-transform: translate3d(0, 0, 0);
         -o-transform: translate3d(0, 0, 0);
            transform: translate3d(0, 0, 0);
}</pre><p>
Infine, per inclinare graficamente ogni voce di menu, ci serviamo anche qui della proprietà <em>tansform</em><em>, </em>tramite la funzionalità <strong><em>skew</em></strong> attivata agendo sull&#8217;asse delle Y:</p><pre class="crayon-plain-tag">nav.menu ul a &gt; span{
	display: block;
	width:100%;
	height: 60px;
	background: #000;
	font-size: 20px;
	z-index: 1;
	text-transform: uppercase;
	font-weight: 400;

	padding:15px 10px 15px 75px;

	-moz-box-sizing: border-box;
		 box-sizing: border-box;

    /* 
    utilizziamo la proprietà 'skew' per effettuare un'inclinazione 
    verticale per lo span (agendo sull'asse delle Y), usando come origine 
    l'angolo in basso a sinistra per fare in modo che l'icona rimanga nella
    sua posizione rispetto allo span
    */

    -webkit-transform-origin: 0 100%;
       -moz-transform-origin: 0 100%;
        -ms-transform-origin: 0 100%;
         -o-transform-origin: 0 100%;
            transform-origin: 0 100%;

    -webkit-transform: skew(0,-10deg);
       -moz-transform: skew(0,-10deg);
        -ms-transform: skew(0,-10deg);
         -o-transform: skew(0,-10deg);
            transform: skew(0,-10deg);

}</pre><p>
Poiché l&#8217;obiettivo era quello di inclinare tutta la voce ma non l&#8217;icona, ci siamo serviti di uno <em>&lt;span&gt;</em> posto all&#8217;interno del link a cui abbiamo attribuito uno sfondo nero e all&#8217;interno del quale abbiamo inserito il testo della rispettiva voce.</p>
<p>Questa tecnica ci ha permesso inoltre di applicare due trasformazioni diverse ad ogni voce di menu, in quanto non sarebbe stato possibile traslare ed inclinare contemporaneamente l&#8217;elemento <em>&lt;li&gt; </em>(la possibilità di <strong>impostare una sola trasformazione alla volta per ogni elemento è purtroppo una limitazione delle animazioni CSS3</strong>).</p>
<hr />
<p><em>Come realizzare un #mobileapp slide menu animato con #CSS3 e #modernizr #webdesign </em><br /><a href='https://twitter.com/share?text=Come+realizzare+un+%23mobileapp+slide+menu+animato+con+%23CSS3+e+%23modernizr+%23webdesign+&#038;via=upCreativeIta&#038;related=upCreativeIta&#038;url=https://www.upcreative.net/mobile-slide-menu-css3/' target='_blank'>Click To Tweet</a></p>
<hr />
<h2>Il codice Javascript</h2>
<p>Andiamo a gestire ora l&#8217;evento di click sul pulsante di apertura per aprire o chiudere il nostro Mobile Slide Menu:</p><pre class="crayon-plain-tag">/* Grazie a modernizr riprendo il nome dell'evento di fine transizione, che cambia a seconda del browser */

var endTransitionName = {
	'WebkitTransition' : 'webkitTransitionEnd',
	'OTransition' : 'oTransitionEnd',
	'msTransition' : 'MSTransitionEnd',
	'transition' : 'transitionend'
};
var transitionEventName = endTransitionName[ Modernizr.prefixed( 'transition' ) ];

$(function(){

	var menuNav = $("nav.menu");	
	$(".toggle-menu").on("click", function(){	

    	if(!menuNav.hasClass("open-left")){

    		/*
	    		se il menu di navigazione non ha la classe 'open-left' e quindi è chiuso, 
	    		come prima cosa aggiungiamo la classe 'animate-li', che aggiunge le impostazioni per l'effetto di transizione,  
	    		e poi la stessa 'open-left'; facciamo quindi lo stesso con il contenitore della pagina (classe 'content-wrapper')
    		*/

    		menuNav.addClass("animate-li");
	    	$("nav.menu, .content-wrapper").addClass("open-left");
    	}else{

    		/*
    			se il menu di navigazione è 'aperto', quindi presenta la classe 'open-left',
	    		come prima cosa rimuoviamo la classe 'animate-li' in modo da non scatenare l'animazione
	    		sulle &lt;li&gt; per la chiusura
	    		Poi rimuoviamo la classe 'open-left' SOLO al contentenitore, in modo da scatenare l'aniamzione di chiusura.
	    		AL termine di quest'ultima rimuoveremo la classe anche dal menu per ripristinare la posizione di partenza di ogni &lt;li&gt;
    		*/

	    	menuNav.removeClass("animate-li");
	    	$(".content-wrapper").removeClass("open-left").one(transitionEventName, function(){
		    	menuNav.removeClass("open-left");
	    	});
    	}		    	
	});

});</pre><p>
Nel momento in cui il pulsante viene cliccato controlliamo se il menu è aperto o chiuso verificando la presenza o meno della classe &#8216;<em>open-left</em>&#8216; sull&#8217;elemento <em>&lt;nav&gt;</em>.</p>
<p><strong>Se è chiuso</strong>, prima attiviamo gli effetti per le voci di menu aggiungendo la classe &#8216;<em>animate-li</em>&#8216; al contenitore del menu, poi avviamo le animazioni sia su di esso che sul contenitore delle pagine, aggiungendo ai relativi elementi la classe &#8216;<em>open-left</em>&#8216;.</p>
<p><strong>Se invece il menu è visible</strong>, rimuoviamo la classe &#8216;<em>animate-li</em>&#8216; dall&#8217;elemento <em>&lt;nav&gt;</em> per non scatenare l&#8217;animazione contraria sulle 4 voci, poi rimuoviamo la classe &#8216;<em>open-left</em>&#8216; dal contenitore in modo avviare l&#8217;effetto <em>slide</em> di chiusura, ed infine, una volta terminato quest&#8217;ultimo, riportiamo le voci di menu allo stato iniziale rimuovendo anche dall&#8217;elemento <em>&lt;nav&gt;</em> la classe &#8216;<em>open-left&#8217;</em>.</p>
<p><em>Per vedere come gestire gli eventi di fine transizione e animazione con <a title="Modenizr - Liberia per la compatibilità dei browser" href="http://modernizr.com">Modernizr</a>, ti consiglio di leggere questo articolo:</em></p>
<ul>
<li><em><a title="Modernizr e CSS3: gestire gli eventi di fine animazione e transizione con javascript" href="http://www.upcreative.net/modernizr-e-css3-gestire-eventi-animazioni-e-transizioni/">Modernizr e CSS3: gestire gli eventi di fine animazione e transizione con javascript</a></em></li>
</ul>
<p>&nbsp;</p>

		</div> 
	</div> 
	<div class="wpb_single_image wpb_content_element align_center">
		<div class="wpb_wrapper">
			
			<img width="690" height="400" src="http://www.upcreative.net/wp-content/uploads/2014/01/mobile-slide-menu-css3.jpg" class="attachment-full" alt="mobile-slide-menu-css3" />
		</div> 
	</div> <div class="g-cols"><div class="one-half"><div class="wpb_button align_center"><a href="http://www.upcreative.net/tutorials/21012014-Mobile-slide-menu-CSS3/"class="g-btn type_primary size_big"><span><i class="fa fa-eye-open"></i>Demo</span></a></div>
</div><div class="one-half"><div class="wpb_button align_center"><a href="http://www.upcreative.net/download/3094/"class="g-btn type_primary size_big"><span><i class="fa fa-download-alt"></i>Download</span></a></div>
</div></div>
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			
<hr />
<p><em>Come realizzare un #mobileapp slide menu animato con #CSS3 e #modernizr #webdesign </em><br /><a href='https://twitter.com/share?text=Come+realizzare+un+%23mobileapp+slide+menu+animato+con+%23CSS3+e+%23modernizr+%23webdesign+&#038;via=upCreativeIta&#038;related=upCreativeIta&#038;url=https://www.upcreative.net/mobile-slide-menu-css3/' target='_blank'>Click To Tweet</a></p>
<hr />
<h2>Conclusioni</h2>
<p>Dalla demo puoi vedere come il risultato dell&#8217;esperimento sia un&#8217;animazione fluida e performante, priva di quei sfarfalli e crash che spesso caratterizzano le applicazioni HTML realizzate con framework come jQuery Mobile o jQtouch.</p>
<p>Due piccole note su questo tutorial:</p>
<ol>
<li>nel codice sopra riportato sono stati aggiunti i prefissi su proprietà come <em>transition</em> e <em>transform</em> per la compatibilità browser; tuttavia sviluppando solo per mobile sarebbe possibile omettere tutti i prefissi tranne quello per browser webkit-based (<em>-webkit-)</em></li>
<li>per avere un risultato ed una <em>user-experience </em>migliore sarebbe opportuno aggiungere il <strong>supporto per il touch</strong>, in modo da mostrare il menu durante l&#8217;azione di <em>swipe</em> dell&#8217;utente.</li>
</ol>
<p>E tu? Hai mai realizzato delle applicazioni Mobile in HTML4, CSS3 e Javascript? Lascia un commento qui di seguito e fammi sapere le tue opinioni a riguardo!</p>

		</div> 
	</div> <div class="g-hr">
						<span class="g-hr-h">
							<i class="fa fa-chevron-down"></i>
						</span>
					</div><div class="g-cols color_alternate w-actionbox"><div class="one-half">
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			
<h3>Crea la tua mobile app in HTML, CSS3 e Javascript</h3>
<p>Utilizzando questa tecnica insieme a molte altre, ho realizzato più di 10 mobile app in HTML, CSS3 e Javascript (tra cui <a title="Tint HTML mobile app" href="http://www.upcreative.net/tint-weather-app/">Tint</a> e <a title="Dieta SI o NO? HTML Mobile app" href="http://www.upcreative.net/app-dieta-si-o-no/">Dieta SI o NO?</a>).</p>
<p>Se anche tu vuoi realizzare la tua applicazione in HTML, CSS e javascript da distribuire nei vari store, forse potrebbe interessarti il mio e-book <strong><a title="HTML Mobile Accelerato - Come creare una mobile app in HTML, CSS e Javacript" href="http://www.upcreative.net/html-mobile-accelerato/">HTML Mobile Accelerato</a>.</strong></p>

		</div> 
	</div> </div><div class="one-half">
	<div class="wpb_single_image wpb_content_element align_center">
		<div class="wpb_wrapper">
			
			<a href="http://www.upcreative.net/html-mobile-accelerato/"><img width="563" height="418" src="http://www.upcreative.net/wp-content/uploads/2013/11/HTML-mobile-accelerato-ebook-cover1.png" class="attachment-full" alt="HTML-mobile-accelerato-ebook-cover" /></a>
		</div> 
	</div> </div></div></div></div>
</div></div><p>The post <a rel="nofollow" href="https://www.upcreative.net/mobile-slide-menu-css3/">Come realizzare un HTML Mobile Slide Menu con Animazioni CSS3</a> appeared first on <a rel="nofollow" href="https://www.upcreative.net">upCreative</a>.</p>
]]></content:encoded>
			<wfw:commentRss>https://www.upcreative.net/mobile-slide-menu-css3/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Come realizzare un Mobile Action Sheet con Bootstrap 3 e Animazioni CSS3</title>
		<link>https://www.upcreative.net/come-realizzare-un-mobile-action-sheet-con-bootstrap3-e-animazioni-css3/</link>
		<comments>https://www.upcreative.net/come-realizzare-un-mobile-action-sheet-con-bootstrap3-e-animazioni-css3/#comments</comments>
		<pubDate>Tue, 14 Jan 2014 09:23:44 +0000</pubDate>
		<dc:creator><![CDATA[upcreative]]></dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[Web Apps]]></category>
		<category><![CDATA[Web Design]]></category>
		<category><![CDATA[animazioni]]></category>
		<category><![CDATA[bootstrap]]></category>
		<category><![CDATA[css3]]></category>
		<category><![CDATA[HTML Mobile App]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[iOS 7]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://www.upcreative.net/?p=3013</guid>
		<description><![CDATA[<p>Un altro tutorial in cui ti mostro come realizzare un'interfaccia con mobile action sheet stile iOS7, tramite animazioni CSS3 e Twitter Bootstrap 3, e sfruttando la tecnica dell'accelerazione hardware per rendere l'effetto fluido e performante.</p>
<p>The post <a rel="nofollow" href="https://www.upcreative.net/come-realizzare-un-mobile-action-sheet-con-bootstrap3-e-animazioni-css3/">Come realizzare un Mobile Action Sheet con Bootstrap 3 e Animazioni CSS3</a> appeared first on <a rel="nofollow" href="https://www.upcreative.net">upCreative</a>.</p>
]]></description>
				<content:encoded><![CDATA[<div class="l-submain"><div class="l-submain-h g-html i-cf"><div class="g-cols"><div class="full-width">
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			
<p>Nella realizzazione di <strong>HTML5 Mobile App</strong> in <strong>CSS3</strong> e <strong>Javascript</strong> numerosi sono i controlli che possono essere ricreati in modo da sviluppare prodotti che si avvicinano più possibile alle applicazioni native.</p>
<p>Negli articoli precedenti mi sono soffermato più volte sull&#8217;importanza delle<strong> performance di animazioni CSS3</strong> per quanto riguarda le interfacce web, soprattuto per quelle destinate a girare su dispositivi mobile.</p>
<p>Utilizzando questo tipo di animazioni, che forzano la creazione di <strong>livelli grafici</strong> da essere poi inviati alla <strong>GPU</strong> velocizzando il <strong>processo di</strong><strong> rendering</strong>, è possibile riprodurre la maggior parte dei componenti presenti in app native in modo <strong>fluido e performante</strong>.</p>
<p><em>A questo proposito ti consiglio di leggere:</em></p>
<ul>
<li><em><a title="Ottimizzare le animazioni CSS3 con i layers grafici" href="http://www.upcreative.net/performance-css3-consigli-per-ottimizzare-le-animazioni/">Performance CSS3 &#8211; Consigli per ottimizzare le prestazioni di rendering con i livelli grafici</a></em></li>
</ul>
<p>Con i CSS3 è possibile riprodurre per esempio elementi come slide menu (ecco un <a title="CSS3 slide panel: tutorial su come realizzare un menu stile mob" href="http://www.upcreative.net/css3-slide-panel-tutorial-creare-menu-mobile/">tutorial su come crearne uno</a>), tab bar, modal alert, popover ecc..</p>

		</div> 
	</div> 
	<div class="wpb_single_image wpb_content_element align_center">
		<div class="wpb_wrapper">
			
			<img width="690" height="400" src="http://www.upcreative.net/wp-content/uploads/2014/01/Mobile-Action-Sheet-con-Bootstrap-3-e-Animazioni-CSS3.jpg" class="attachment-full" alt="Mobile-Action-Sheet-con-Bootstrap-3-e-Animazioni-CSS3" />
		</div> 
	</div> <div class="g-cols"><div class="one-half"><div class="wpb_button align_center"><a href="http://www.upcreative.net/tutorials/14012014-Action-sheet-per-dispositivi-mobile/"class="g-btn type_primary size_big"><span><i class="fa fa-eye-open"></i>Demo</span></a></div>
</div><div class="one-half"><div class="wpb_button align_center"><a href="http://www.upcreative.net/download/3048/"class="g-btn type_primary size_big"><span><i class="fa fa-download-alt"></i>Download</span></a></div>
</div></div>
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			
<h2></h2>
<h2>Mobile Action Sheet con Animazioni CSS3</h2>
<p><a ref="magnificPopup" href="http://www.upcreative.net/wp-content/uploads/2014/01/CSS3-mobile-action-sheet.jpg"><img class="alignright" alt="CSS3-mobile-action-sheet" src="http://www.upcreative.net/wp-content/uploads/2014/01/CSS3-mobile-action-sheet.jpg" width="250" height="auto" /></a></p>
<p>In questo articolo voglio mostrarti come realizzare un <strong>modal action-sheet</strong> sfruttando <strong>animazioni CSS3</strong> performanti, che agiscono su determinati attributi in modo da sfruttare la tecnica della composizione dei livelli grafici.</p>
<p>In altre parole ricreeremo una modal dialog con dei pulsanti al suo interno che compare dal fondo dello schermo.</p>
<p>Per quanto riguarda gli stili dei pulsanti ci serviremo di quelli forniti dal framework <a title="Twitter Bootstrap 3 - Responsive CSS framework" href="http://getbootstrap.com"><strong>Twitter Bootstrap 3</strong></a>, che con i suoi <a title="Twitter Bootstrap 3 - Gruppi di pulsanti verticali" href="http://getbootstrap.com/components/#btn-groups-vertical">gruppi di pulsanti verticali</a> si avvicina molto ai pulsanti che si trovano nel mobile action sheet del sistema operativo iOS7.</p>
<p><em>Qui a fianco uno screenshot che mostra il classico esempio di un mobile action sheet nativo durante l&#8217;utilizzo dall&#8217;applicazione &#8220;Mail&#8221; di iOS7</em></p>
<h2>Il markup HTML</h2>
<p>Dopo aver incluso nel documento le risorse di cui ci serviremo, come appunto il framework Twitter Bootstrap, <a title="Modernizr - Libreria per determinare le compatibilità dei browser" href="http://modernizr.com">Modernizr</a> ed il solito <a title="jQuery - Javascript framework" href="http://jquery.com">jQuery</a>, andiamo a definire il markup HTML:</p><pre class="crayon-plain-tag">&lt;nav&gt; &lt;!-- tabbar --&gt;
&lt;/nav&gt;
&lt;article&gt;  &lt;!-- corpo documento --&gt;

	&lt;h1&gt;Action Sheet con animazioni CSS3&lt;/h1&gt;

	&lt;div class="text-center"&gt;
		&lt;button id="start"  type="button" class="btn btn-default"&gt;Mostra action sheet&lt;/button&gt;
	&lt;/div&gt;		

&lt;/article&gt;

&lt;div class="action-sheet"&gt; &lt;!-- contenitore action sheet --&gt;

    &lt;div&gt;&lt;/div&gt; &lt;!-- l'overlay dell'action-sheet --&gt;
    &lt;section&gt;   &lt;!-- il contenitore dei pulsanti --&gt;

    &lt;/section&gt;
&lt;/div&gt;</pre><p>
&nbsp;</p>
<p><span style="line-height: 1.5em;">Oltre ai tag </span><em style="line-height: 1.5em;">&lt;nav&gt;</em><span style="line-height: 1.5em;">  ed </span><em style="line-height: 1.5em;">&lt;article&gt;,</em><span style="line-height: 1.5em;"> che rappresentano rispettivamente la tabbar ed il corpo del documento, inseriamo il codice HTML per definire gli elementi DOM che rappresentano l&#8217;intero action sheet. Abbiamo un contenitore principale (con classe .</span><em style="line-height: 1.5em;">action-sheet</em><span style="line-height: 1.5em;">) all&#8217;interno del quale si trovano una </span><strong style="line-height: 1.5em;"><em>&lt;div&gt;</em></strong><span style="line-height: 1.5em;"> ed un elemento </span><em style="line-height: 1.5em;"><strong>&lt;section&gt;</strong>, il primo per </em><span style="line-height: 1.5em;">l&#8217;</span><strong style="line-height: 1.5em;">overlay</strong><span style="line-height: 1.5em;"> trasparente di sfondo, mentre il secondo per il </span><strong style="line-height: 1.5em;">contenitore dei pulsanti</strong><span style="line-height: 1.5em;">.</span></p>
<p>Vediamo ora come scrivere il markup dei pulsanti, utilizzando gli stili di Bootstrap:</p><pre class="crayon-plain-tag">&lt;div class="row"&gt;
    &lt;div class="col-xs-12 col-sm-6 col-sm-offset-3 col-md-6 col-md-offset-3 btn-group-vertical"&gt;
        &lt;button type="button" class="btn btn-default"&gt;Pulsante 1&lt;/button&gt;
        &lt;button type="button" class="btn btn-default"&gt;Pulsante 1&lt;/button&gt;
        &lt;button type="button" class="btn btn-default"&gt;Pulsante 1&lt;/button&gt;
    &lt;/div&gt;
&lt;/div&gt;
&lt;div class="row"&gt;
    &lt;div class="col-xs-12 col-sm-6 col-sm-offset-3 col-md-6 col-md-offset-3"&gt;
        &lt;button type="button" class="btn btn-danger btn-block cancel"&gt;Chiudi&lt;/button&gt;
    &lt;/div&gt;
&lt;/div&gt;</pre><p>
&nbsp;</p>

		</div> 
	</div> <div class="g-cols"><div class="full-width">
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			
<p style="text-align: center;"><a ref="magnificPopup" href="http://www.upcreative.net/wp-content/uploads/2014/01/mobile-action-sheet-smartphone.jpg"><img class="size-full wp-image-3030 aligncenter" alt="mobile-action-sheet-smartphone" src="http://www.upcreative.net/wp-content/uploads/2014/01/mobile-action-sheet-smartphone.jpg" width="393" height="240" /></a></p>
<p style="text-align: center;"><em>risultato del markup in uno smartphone</em></p>
<p style="text-align: center;"><a ref="magnificPopup" href="http://www.upcreative.net/wp-content/uploads/2014/01/mobile-action-sheet-tablet.jpg"><img class="size-full wp-image-3031 aligncenter" alt="mobile-action-sheet-tablet" src="http://www.upcreative.net/wp-content/uploads/2014/01/mobile-action-sheet-tablet.jpg" width="772" height="240" /></a></p>
<p style="text-align: center;"><em>risultato del markup in un tablet</em></p>

		</div> 
	</div> </div></div>
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			
<p><span style="line-height: 1.5em;">Abbiamo organizzato il gruppo di pulsanti in una prima </span><em style="line-height: 1.5em;">&lt;div&gt;</em><span style="line-height: 1.5em;"> con classe .</span><em style="line-height: 1.5em;">row, </em><span style="line-height: 1.5em;">in modo da rendere poi </span><strong style="line-height: 1.5em;">responsive</strong><span style="line-height: 1.5em;"> gli elementi interni utilizzando le classi del sistema a griglia di Bootstrap (piena larghezza nel caso di smartphone, 6 colonne centrate nel caso di tablet e dispositivi desktop).</span></p>
<p>Per riprodurre poi i pulsanti abbiamo utilizzato le solite classi .<em>btn</em> e <em>.btn-[tipo-di-stile]</em><em> </em>al fine di definire quale tipo di pulsante utilizzare. Nel caso del gruppo di pulsanti superiore ci siamo serviti della classe .<em>btn-group-vertical </em>che come accennato in precedenza raggruppa verticalmente i pulsanti in modo molto analogo a quello di <strong>iOS7</strong>.</p>
<h2>Il foglio di stile CSS3</h2>
<p>Vediamo ora come servirci di animazioni CSS3 performanti per realizzare gli effetti desiderati.</p>
<p>Il primo effetto sarà applicato alla <em>&lt;div&gt; </em>che rappresenta l&#8217;overlay di sfondo, il quale dovrà apparire in dissolvenza, mentre il secondo sarà applicato al contenitore dei pulsanti (ovvero l&#8217;elemento <em>&lt;section&gt;</em>), che dovrà fare la sua comparsa dal fondo dello schermo.<span style="line-height: 1.5em;"> </span></p>
<p>Come prima cosa posizioniamo i due elementi utilizzando l&#8217;istruzione <em>position:absolute </em>e le relative coordinate:</p><pre class="crayon-plain-tag">.action-sheet {
	/*
		finchè non viene avviata l'animazione lasciamo la proprietà "display: none"		
		in modo che l'elemento non vada ad interferire con il resto del DOM del documento
		(omettendo questa istruzione, questo elemento non sarebbe comunque visibile,
		ma allo stesso la sua presenza tempo non permetterebbe di interagire con gli altri elementi)
	*/
    display: none;	  
}

/*overlay di sfondo */

.action-sheet &gt; div{
	/*
		impostiamo le dimensioni e ed il posizionamento 
		assoluto dell'overlay in modo da coprire tutto il documento
	*/
    position:absolute;
    top:0;right:0;
    left:0;bottom:0;
    /*
	    per dare la trsparenza all'overlay utilizziamo l'attributo 'rgba' 
	    che ci permette appunto di impostare un valore di trasparenza
    */
    background: rgba(0,0,0, 0.5);    
}

/* contenitore pulsanti */
.action-sheet &gt; section{

	/*
		anche qui impostiamo il posizionamento assoluto in modo 
		da poter facilmente posizionare il contenitore in fondo allo schermo	
	*/		

    position:absolute;
    left:0;
    right:0;
    bottom:0;
    background: none;
    padding: 0 10px;
}</pre><p>
Poi passiamo ad impostare il punto focale dell&#8217;esperimento, ovvero il funzionamento dell&#8217;effetto:</p><pre class="crayon-plain-tag">.action-sheet &gt; div{    
    /* trasparenza iniziale pari a 0, in modo da visualizzare l'overlay in dissolvenza */
    opacity:0;
    /* 
    	impostiamo l'effetto tramite la proprietà transition 
    	utilizzando l'opacity, attributo performante, per 
    	creare un effetto a comparsa sulla trasparenza
    */
    -webkit-transition: opacity .15s;
    -moz-transition: opacity .15s;
    transition: opacity .15s;
}

/* contenitore pulsanti */
.action-sheet &gt; section{    
    /* 
    	impostiamo la proprietà transitio per l'attributo "transform",
    	che forza la creazine dei livelli grafici da inviare alla GPU 
    	e rende più fluida l'animazione	    
    */	
    -webkit-transition: -webkit-transform .3s;
    -moz-transition: -moz-transform .3s;
    transition: transform .3s;

    /*
	    inzialmente impostiamo il la transform del contenitore in modo che 
	    prima dell'avvio dell'effetto si trovi al di fuori dello schermo,
	    mediante il parametro "Y" della proprietà translate3d
    */
    -webkit-transform: translate3d(0, 110%, 0);
    -moz-transform: translate3d(0, 110%, 0);
    transform: translate3d(0, 110%, 0);
}</pre><p>
&nbsp;</p>
<p>Riassumento il discorso,  per ricreare gli effetti abbiamo attribuito alla proprietà <em>transition i parametri</em> <em>opacità (</em>per l&#8217;overlay<em>) </em>e <em>tranform</em> (per il contenitore dei pulsanti) facendo in modo che quando essi vengono modificati,  di conseguenza viene avviata anche l&#8217;animazione di comparsa. In particolare, andiamo a modificare quei parametri nel caso in cui alla div con classe .<em>action-sheet</em> presenti anche la classe di stile &#8220;<em>open&#8221;.</em></p>
<p><em>(La div .action-sheet serve quindi solamente ad attivare in un colpo solo le animazioni applicate agli elementi che si trovano al suo interno.)</em></p>
<h2>Il codice Javascript</h2>
<p>Abbiamo detto che per attivare l&#8217;effetto dobbiamo solamente aggiungere la classe &#8220;<i>open</i>&#8221; alla div <em>.action-sheet. </em>Come al solito per farlo ci serviamo del <em>Javascript</em> e procediamo in questo modo<em>:</em></p><pre class="crayon-plain-tag">/* Grazie a modernizr riprendo il nome dell'evento di fine animazione, che cambia a seconda del browser */

    	var endTransitionName = {
			'WebkitTransition' : 'webkitTransitionEnd',
			'OTransition' : 'oTransitionEnd',
			'msTransition' : 'MSTransitionEnd',
			'transition' : 'transitionend'
		};
		var transitionEventName = endTransitionName[ Modernizr.prefixed( 'transition' ) ];

	    $(function(){

	    	var actionSheet = $(".action-sheet");

	    	$("#start").on("click", function(){		    	
		    	actionSheet.show(); //equivalente ad impostare la proprietà "display" = "block" 
		        setTimeout(function () {
		            actionSheet.addClass("open"); //aggiungiamo la classe 'open' per avviare l'aniamzione
		        }, 10);		    	
	    	});	 

	    	$(".cancel").on("click", function(){	    
	    		//rimuoviamo la classe che scatena l'effetto, in modo da ritornare allo stato di partenza
	    		//all'evento di fine della transition reipostiamo tramite jQuery la propretà "display" = "none", 
	    		//che era quella dello stato iniziale        
		        actionSheet.removeClass("open").one(transitionEventName, function () {
		            actionSheet.hide();
		        });		    	
	    	});	

	    });</pre><p>
Al click del pulsante con id &#8220;<em>start</em>&#8221; rendiamo visibile tutto il markup del nostro componente tramite il metodo <em>.show()</em> di jQuery (che equivale ad impostare la proprietà CSS &#8220;<em>display: block&#8221;</em> ), poi con un ritardo di 10 millisecondi (piccolo hack per &#8220;far passare qualche istante di il tempo&#8221; dopo il rendering del markup), aggiungiamo la classe &#8220;<em>open</em>&#8220;, avviando l&#8217;effetto a comparsa.</p>
<p>Al contrario, nel momento in cui l&#8217;utente effettua il click (o tap, se si tratta di mobile) sul pulsante di chiusura <em>.cancel</em>, rimuoviamo la classe &#8220;<em>open</em>&#8221; e, nel momento in cui l&#8217;animazione giunge al termine, reimpostiamo la proprietà &#8220;<em>display: none</em>&#8221; per la div <em>.action-sheet</em>, in modo da nasconderla di nuovo.</p>
<p>Come è possibile vedere dal codice, per riprendere il nome giusto dell&#8217;evento di fine animazione in base al browser utilizzato dall&#8217;utente, ci siamo serviti di <strong>Modernizr</strong>, ed in particolare del metodo <em>.prefixed(&#8221;transition&#8217;).</em></p>
<p>Eccoci quindi al risultato finale: come puoi vedere il movimento risulta fluido e piacevole, anche se lo si visualizza da un dispositivo mobile.</p>

		</div> 
	</div> 
	<div class="wpb_single_image wpb_content_element align_center">
		<div class="wpb_wrapper">
			
			<img width="690" height="400" src="http://www.upcreative.net/wp-content/uploads/2014/01/Mobile-Action-Sheet-con-Bootstrap-3-e-Animazioni-CSS3.jpg" class="attachment-full" alt="Mobile-Action-Sheet-con-Bootstrap-3-e-Animazioni-CSS3" />
		</div> 
	</div> <div class="g-cols"><div class="one-half"><div class="wpb_button align_center"><a href="http://www.upcreative.net/tutorials/14012014-Action-sheet-per-dispositivi-mobile/"class="g-btn type_primary size_big"><span><i class="fa fa-eye-open"></i>Demo</span></a></div>
</div><div class="one-half"><div class="wpb_button align_center"><a href="http://www.upcreative.net/download/3048/"class="g-btn type_primary size_big"><span><i class="fa fa-download-alt"></i>Download</span></a></div>
</div></div>
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			
<h2>Conclusioni</h2>
<p>Con questo ennesimo esempio ti ho voluto dimostrare come sia possibile servirsi della composizione dei livelli grafici e dell&#8217;<a title="Web e mobile app fluide con l'accelerazione hardware" href="http://www.upcreative.net/web-e-mobile-app-fluide-con-layer-e-hardware-acceleration/"><strong>accelerazione hardware</strong></a> per sfruttare la GPU al fine di realizzare interfacce mobile, dove è possibile avere animazioni più lente e caratterizzate da numerosi sfarfalli, se non vengono utilizzate le giuste proprietà.</p>
<p><em>Per vedere la differenza tra un&#8217;animazione fluida ed una con sfarfallii, ti consiglio di provare la demo di questo tutorial i<em>n cui ho messo a confronto l&#8217;effetto di riempimento di due progressbar:</em></em></p>
<ul>
<li><a title="Come realizzare una progress bar CSS3 per una HTML Mobile App" href="http://www.upcreative.net/come-realizzare-una-progress-bar-css3-per-una-html-mobile-app/"><em>Come realizzare una progress bar CSS3 per una HTML Mobile App</em></a></li>
</ul>

		</div> 
	</div> <div class="g-cols color_alternate w-actionbox"><div class="one-half">
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			
<h3>Crea la tua mobile app in HTML, CSS3 e Javascript</h3>
<p>Utilizzando questa tecnica insieme a molte altre, ho realizzato più di 10 mobile app in HTML, CSS3 e Javascript (tra cui <a title="Tint HTML mobile app" href="http://www.upcreative.net/tint-weather-app/">Tint</a> e <a title="Dieta SI o NO? HTML Mobile app" href="http://www.upcreative.net/app-dieta-si-o-no/">Dieta SI o NO?</a>).</p>
<p>Se anche tu vuoi realizzare la tua applicazione in HTML, CSS e javascript da distribuire nei vari store, forse potrebbe interessarti il mio e-book <strong><a title="HTML Mobile Accelerato - Come creare una mobile app in HTML, CSS e Javacript" href="http://www.upcreative.net/html-mobile-accelerato/">HTML Mobile Accelerato</a>.</strong></p>

		</div> 
	</div> </div><div class="one-half">
	<div class="wpb_single_image wpb_content_element align_center">
		<div class="wpb_wrapper">
			
			<a href="http://www.upcreative.net/html-mobile-accelerato/"><img width="563" height="418" src="http://www.upcreative.net/wp-content/uploads/2013/11/HTML-mobile-accelerato-ebook-cover1.png" class="attachment-full" alt="HTML-mobile-accelerato-ebook-cover" /></a>
		</div> 
	</div> </div></div></div></div>
</div></div><p>The post <a rel="nofollow" href="https://www.upcreative.net/come-realizzare-un-mobile-action-sheet-con-bootstrap3-e-animazioni-css3/">Come realizzare un Mobile Action Sheet con Bootstrap 3 e Animazioni CSS3</a> appeared first on <a rel="nofollow" href="https://www.upcreative.net">upCreative</a>.</p>
]]></content:encoded>
			<wfw:commentRss>https://www.upcreative.net/come-realizzare-un-mobile-action-sheet-con-bootstrap3-e-animazioni-css3/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Search form con animazione CSS3 per HTML Mobile App</title>
		<link>https://www.upcreative.net/search-form-con-animazione-css3-per-html-mobile-app/</link>
		<comments>https://www.upcreative.net/search-form-con-animazione-css3-per-html-mobile-app/#comments</comments>
		<pubDate>Wed, 08 Jan 2014 08:53:11 +0000</pubDate>
		<dc:creator><![CDATA[upcreative]]></dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[Web Apps]]></category>
		<category><![CDATA[Web Design]]></category>
		<category><![CDATA[animazioni]]></category>
		<category><![CDATA[css3]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[mobile app]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://www.upcreative.net/?p=2966</guid>
		<description><![CDATA[<p>Articolo-tutorial che ho scritto per gli amici di LaboratorioCSS.it su come realizzare un'animazione CSS3 fluida su una search form per riprodurre l'effetto dell'applicazione mobile di Gmail, in modo da ottimizzare lo spazio per i risultati della ricerca.</p>
<p>The post <a rel="nofollow" href="https://www.upcreative.net/search-form-con-animazione-css3-per-html-mobile-app/">Search form con animazione CSS3 per HTML Mobile App</a> appeared first on <a rel="nofollow" href="https://www.upcreative.net">upCreative</a>.</p>
]]></description>
				<content:encoded><![CDATA[<div class="l-submain"><div class="l-submain-h g-html i-cf"><div class="g-cols"><div class="full-width">
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			
<p>Oltre che realizzare interfacce semplici ed intuitive, per creare un&#8217;ottima <em>user-experience</em> bisogna rendere la nostra applicazione anche <strong>comoda </strong>per l&#8217;utente. Innumerevoli sono le tecniche per raggiungere questo obiettivo, e nell&#8217;ambito di HTML Mobile App, una fra queste è sicuramente quella di ottimizzare lo spazio in cui vengono mostrati gli elementi di una lista.</p>
<p>E&#8217; quello che fa per esempio l&#8217;applicazione di <a title="Applciazione mobile Gmail per iPhone" href="https://itunes.apple.com/it/app/gmail/id422689480?mt=8">Gmail per iPhone</a>, dove se viene selezionato il campo di testo per la ricerca nella casella mail, questo si sposta verticalmente posizionandosi al posto della <em>navbar</em>, che allo stesso tempo modifica anch&#8217;essa la sua posizione verticalmente per uscire dallo schermo.</p>

		</div> 
	</div> 
	<div class="wpb_single_image wpb_content_element align_center">
		<div class="wpb_wrapper">
			
			<img width="930" height="500" src="http://www.upcreative.net/wp-content/uploads/2014/01/aniumazione-CSS3-su-searchbox-html-mobile-app.jpg" class="attachment-full" alt="aniumazione-CSS3-su-searchbox-html-mobile-app" />
		</div> 
	</div> 
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			
<p>In questo modo è possibile ottimizzare lo spazio per la visualizzazione dei risultati, espandendolo di circa 45 pixel (l&#8217;altezza della <em style="line-height: 1.5em;">navbar</em><span style="line-height: 1.5em;">), che in un dispositivo mobile possono fare la differenza.</span></p>
<h2>Riproduciamo l&#8217;effetto con un&#8217;animazione CSS3 performante</h2>
<p>A tal proposito in questo articolo voglio segnalarti un tutorial che ho scritto per gli amici di <a title="LaboratorioCSS.it - Blog sulle tecniche dei CSS" href="http://www.laboratoriocss.it">LaboratorioCSS.it</a>, atto a riprodurre lo stesso effetto in <strong>HTML5</strong> e <strong>CSS3</strong>, il tutto utilizzando animazioni fluide e performanti (ti consiglio di leggere <a title="animazioni CSS3 - consigli per ottimizzare le prestazioni" href="http://www.upcreative.net/performance-css3-consigli-per-ottimizzare-le-animazioni/">questo articolo a proposito delle prestazioni</a>).</p>

		</div> 
	</div> <div class="wpb_button align_center"><a href="http://www.laboratoriocss.it/animazione-css3-su-search-form-in-stile-gmail-mobile-app.html"class="g-btn type_primary size_big"><span>Clicca qui per vedere il tutorial su laboratorioCSS </span></a></div>
<div class="g-hr">
						<span class="g-hr-h">
							<i class="fa fa-chevron-down"></i>
						</span>
					</div><div class="g-cols color_alternate w-actionbox"><div class="one-half">
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			
<h3>Crea la tua mobile app in HTML, CSS3 e Javascript</h3>
<p>Utilizzando questa tecnica insieme a molte altre, ho realizzato più di 10 mobile app in HTML, CSS3 e Javascript (tra cui <a title="Tint HTML mobile app" href="http://www.upcreative.net/tint-weather-app/">Tint</a> e <a title="Dieta SI o NO? HTML Mobile app" href="http://www.upcreative.net/app-dieta-si-o-no/">Dieta SI o NO?</a>).</p>
<p>Se anche tu vuoi realizzare la tua applicazione in HTML, CSS e javascript da distribuire nei vari store, forse potrebbe interessarti il mio e-book <strong><a title="HTML Mobile Accelerato - Come creare una mobile app in HTML, CSS e Javacript" href="http://www.upcreative.net/html-mobile-accelerato/">HTML Mobile Accelerato</a>.</strong></p>

		</div> 
	</div> </div><div class="one-half">
	<div class="wpb_single_image wpb_content_element">
		<div class="wpb_wrapper">
			
			<a href="http://www.upcreative.net/html-mobile-accelerato/"><img width="563" height="418" src="http://www.upcreative.net/wp-content/uploads/2013/11/HTML-mobile-accelerato-ebook-cover1.png" class="attachment-full" alt="HTML-mobile-accelerato-ebook-cover" /></a>
		</div> 
	</div> </div></div></div></div>
</div></div><p>The post <a rel="nofollow" href="https://www.upcreative.net/search-form-con-animazione-css3-per-html-mobile-app/">Search form con animazione CSS3 per HTML Mobile App</a> appeared first on <a rel="nofollow" href="https://www.upcreative.net">upCreative</a>.</p>
]]></content:encoded>
			<wfw:commentRss>https://www.upcreative.net/search-form-con-animazione-css3-per-html-mobile-app/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Web e Mobile app fluide con layer e hardware acceleration</title>
		<link>https://www.upcreative.net/web-e-mobile-app-fluide-con-layer-e-hardware-acceleration/</link>
		<comments>https://www.upcreative.net/web-e-mobile-app-fluide-con-layer-e-hardware-acceleration/#comments</comments>
		<pubDate>Mon, 23 Dec 2013 17:06:08 +0000</pubDate>
		<dc:creator><![CDATA[upcreative]]></dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Creare applicazioni javascript]]></category>
		<category><![CDATA[Risorse]]></category>
		<category><![CDATA[Web Apps]]></category>
		<category><![CDATA[animazioni]]></category>
		<category><![CDATA[css3]]></category>
		<category><![CDATA[HTML Mobile App]]></category>
		<category><![CDATA[transizioni]]></category>
		<category><![CDATA[web app]]></category>

		<guid isPermaLink="false">http://www.upcreative.net/?p=2830</guid>
		<description><![CDATA[<p>Molte volte ho affrontato il discorso dell&#8217;importanza delle prestazioni, e su come esse incidono notevolmente nella realizzazione di applicazioni web e mobile scritte in HTML, CSS3 e Javascript. Numerosi web developer durante lo sviluppo dei propri lavori non tengono conto del rendering</p>
<p>The post <a rel="nofollow" href="https://www.upcreative.net/web-e-mobile-app-fluide-con-layer-e-hardware-acceleration/">Web e Mobile app fluide con layer e hardware acceleration</a> appeared first on <a rel="nofollow" href="https://www.upcreative.net">upCreative</a>.</p>
]]></description>
				<content:encoded><![CDATA[<div class="l-submain"><div class="l-submain-h g-html i-cf"><p>Molte volte ho affrontato il discorso dell&#8217;importanza delle prestazioni, e su come esse incidono notevolmente nella <a title="10 mobile frameworks per la realizzazione di Applicazioni HTML5, CSS3 e javascript " href="http://www.upcreative.net/8-mobile-framework-per-applicazioni-html5-css-javascript/">realizzazione di applicazioni web e mobile scritte in HTML, CSS3 e Javascript</a>. Numerosi web developer durante lo sviluppo dei propri lavori non tengono conto del <strong>rendering</strong> del browser, ovvero del processo tramite il quale avviene la rappresentazione degli elementi DOM nello schermo, quando invece è uno dei fattori che influiscono maggiormente sulle prestazioni di un&#8217;interfaccia.</p>
<p>Con i browser più moderni, compresi quelli dei dispositivi mobile, abbiamo la possibilità di sfruttare il rendering a &#8220;schede grafiche&#8221;, comunemente conosciuto come <strong>accelerazione hardware </strong>(<em>hardware acceleration</em>). Esso rappresenta un modo molto efficace per aumentare la reattività e la fluidità di animazioni e la creazione di documenti DOM complicati.</p>
<p>Forse ti può interessare questo articolo su <a title="Come ottimizzare le performance CSS3 per aumentarne le prestazioni" href="http://www.upcreative.net/performance-css3-consigli-per-ottimizzare-le-animazioni/">come scrivere animazioni CSS3 per ottmizzarne le performance</a>.</p>
<p><span style="line-height: 1.5em;">Sfruttando l&#8217;accelerazione hardware è possibile quindi realizzare web application con una user-experience avanzata e, soprattutto per quanto riguarda i dispositivi mobile, inserire effetti ed animazioni che ci permettono di cerare prodotti dalle prestazioni molto simili a quelle native.</span></p>
<hr />
<p><em>Con l&#8217;accelerazione hardware è possibile creare ottime #webapplication e #mobileapp</em><br /><a href='https://twitter.com/share?text=Con+l%27accelerazione+hardware+%C3%A8+possibile+creare+ottime+%23webapplication+e+%23mobileapp&#038;via=upCreativeIta&#038;related=upCreativeIta&#038;url=https://www.upcreative.net/web-e-mobile-app-fluide-con-layer-e-hardware-acceleration/' target='_blank'>Click To Tweet</a></p>
<hr />
<p>In questo articolo voglio introdurre il concetto di <strong>layers</strong>, e di come possiamo servircene per <strong>aumentare la fluidità delle tue animazioni CSS3</strong>.</p>
<h3>Prima di iniziare</h3>
<p>Prima di andare avanti vorrei discutere sulla compatibilità: il sistema di rendering basato sull&#8217;accelerazione hardware non è ancora supportato da tutti i tipi di browser, ma solamente da quelli più moderni, i quali possono eseguire la rappresentazione del markup nello schermo sia tramite la classica metodologia che tramite i layers.</p>
<p>Tuttavia gli attuali browser sono in costante aggiornamento e ogni volta che vengono rilasciate versioni più recenti, essi si presentano maggiormente compatibili con questa caratteristica.</p>
<p>In particolare l&#8217;accelerazione hardware è ben supportata da tutti i browser basati su <em>webkit e </em>da quelli presenti nei recenti sistemi operativi Windows, per cui risulta uno strumento fondamentale per realizzare <strong>HTML5 mobile app</strong>, in quanto tutti i mobile browser (o perlomeno quelli su sistemi iOS, Android e Windows Phone), ne possono beneficiare.</p>
<p>Per quanto riguarda i siti web invece, se deciderai di servirti dell&#8217;<em>hardware acceleration</em>, sarà opportuno inserire dei <em>fallback per i browser meno recenti. </em>Puoi trovare un esempio di fallback in questo <a title="CSS3 slide panel: tutorial su come realizzare un menu stile mobile" href="http://www.upcreative.net/css3-slide-panel-tutorial-creare-menu-mobile/">tutorial su come realizzare un menu stile mobile</a>.</p>
<h2>Concetti base</h2>
<p>Quando parliamo di layer dobbiamo fare una distinzione fra due tipologie, quella dei &#8220;<strong><em>Layer di Rendering</em></strong>&#8221; e quella dei &#8220;<strong><em>Layer Grafici</em></strong>&#8220;: entrambi fanno parte del processo di rappresentazione degli elementi della pagina nello schermo (rendering). I primi si preoccupano di gestire i sottolivelli degli elementi DOM, mentre i secondi gestiscono i sottolivelli dei <em>Layer di Rendering</em>.</p>
<p>Quando cito i &#8220;layer per le rappresentazioni e le animazioni CSS3&#8243;, mi riferisco ai Layer Grafici, che sono quelli il cui rendering è delegato alla GPU (la memoria video), la quale se ne occupa sottoforma di <strong><em>texture.  </em></strong>La texture è un oggetto facilmente modificabile, la cui trasformazione non richiede un grosso impiego di risorse.</p>
<p>Questo è sostanzialmente il motivo per cui le trasformazioni 3D CSS sono molto performanti: esse fanno parte di un processo separato dal flusso di lavoro della memoria principale, in quanto vengono eseguite nella GPU.</p>
<p>Per citare un esempio concreto, le trasformazioni CSS3 3D sono usate nelle mobile app con la tecnica del fast scrolling:</p>
<p>&nbsp;</p><pre class="crayon-plain-tag">.content {
  -webkit-overflow-scrolling: touch;
}
.content &gt; * {
  -webkit-transform: translateZ(0px);
          transform: translateZ(0px);
}</pre><p>
&nbsp;</p>
<p>Il codice mostrato in questo esempio sfrutta l&#8217;accelerazione hardware per forzare il rendering degli elementi con <em>position:relative</em> e <em>position:absolute</em> durante lo scroll nei dispositivi mobile (la conoscevi?).</p>
<h2>Il funzionamento</h2>
<p>Ma perché gli effetti e le trasformazioni operate dalla GPU sui layer sono più veloci?</p>
<p>Il funzionamento non è niente di particolarmente complicato: quando il browser deve modificare delle determinate caratteristiche per un elemento DOM (più avanti vedremo quali), esso si preoccuperà di creare un <em>layer</em> che rappresenti quell&#8217;elemento (insieme a tutti i suoi sotto elementi). Il layer non è altro che un<strong>&#8216;immagine <em>bitmap</em></strong>, che viene caricata nella GPU, la quale ne modificherà elementi grafici come trasparenza, rotazione, scale ecc..</p>
<p>Ecco quindi svelato il mistero della velocità: <strong>tutte le modifiche apportate nella GPU sono applicate ad un&#8217;immagine</strong>.</p>
<p style="text-align: center;"><span style="color: #ff0000;"><a ref="magnificPopup" href="http://www.upcreative.net/wp-content/uploads/2013/12/hardware-acceleration.jpg"><img class="size-full wp-image-2843 aligncenter" alt="hardware-acceleration" src="http://www.upcreative.net/wp-content/uploads/2013/12/hardware-acceleration.jpg" width="690" height="420" /></a></span></p>
<p>Ma cosa succede se il contenuto di quel layer viene modificato?</p>
<p>Se abbiamo bisogno di modificare il contenuto del layer, il browser dovrà rieffettuare l&#8217;intera operazione: il processo di rendering prima (ho descritto i relativi step in <a title="CSS3 slide panel: tutorial su come realizzare un menu stile mobile" href="http://www.upcreative.net/css3-slide-panel-tutorial-creare-menu-mobile/">questo articolo</a>), e l&#8217;upload della <em>bitmap </em>alla GPU dopo.</p>
<p>Per cui, al fine di preservare la fluidità degli effetti applicati ad un elemento, ci si deve preoccupare di modificare il meno possibile le caratteristiche CSS che implicano la ripetizione del processo di disegno.</p>
<h2>Come scatenare la creazione di un layer</h2>
<p>Abbiamo compreso il vantaggioso funzionamento della creazione dei layer da parte del browser e della delegazione alla GPU, ora vediamo come fare in modo che il browser trasformi un elemento DOM in un layer.</p>
<p>Il browser crea un layer per ogni elemento al quale sono applicate proprietà CSS di trasformazioni 3D o di trasformazioni con prospettiva (es: <em>transform: translate3d(&#8230;);  o perspective: &#8230;;</em>), e per ogni elemento che interagisce in qualche maniera con un elemento avente quelle caratteristiche.</p>
<p>&nbsp;</p>
<p style="text-align: center;"><img class="size-full wp-image-2845 aligncenter" style="line-height: 1.5em;" alt="hardware-acceleration-con-rotate3d" src="http://www.upcreative.net/wp-content/uploads/2013/12/hardware-acceleration-con-rotate3d.jpg" width="318" height="546" /></p>
<p style="text-align: center;"><span style="color: #808080;"><em>esempio di animazione che sfrutta la proprietà transform: translate3d</em></span></p>
<p style="text-align: center;">
<p>Per cui per &#8220;stimolare&#8221; la creazione di un layer per un elemento, dovremo scrivere gli stili CSS in modo da agire su determinate proprietà CSS invece che su altre.</p>
<p>In particolare, l&#8217;upload alla GPU avviene nel caso di elementi:</p>
<ul>
<li>che hanno proprietà CSS 3d o di prospettiva</li>
<li>sui quali viene applicata un&#8217;animazione che comprende quelle proprietà</li>
<li>che si sovrappongono a dei layers presenti nel loro stesso livello DOM (aventi un <em>z-index</em> minore)</li>
<li>che hanno dei layer come sottoelementi</li>
<li>a cui sono applicati filtri CSS avanzati (es.: <em>filter: blur(&#8230;) </em>o<em> filter: grayscale(&#8230;) </em>)</li>
</ul>
<h2>Conlusioni</h2>
<p>Quindi tutto quello che dobbiamo fare per creare web e mobile app con un&#8217;interfaccia di alto livello, è realizzare i nostri effetti tramite<strong> proprietà che richiamano la creazione dei layers</strong>, sfruttando la tecnica dell&#8217;<strong>accelerazione hardware</strong>. In questo modo eviteremo di ripetere l&#8217;intero processo di rendering per ogni keyframe dell&#8217;animazione.</p>
<p>Piccola nota al riguardo, non abusare di questa tecnica: la creazione di un numero troppo elevato di layers potrebbe infatti causare un sovraccarico dei processi nella GPU.</p>
<p>E tu? Hai mai sfruttato la GPU per migliorare le prestazioni dei tuoi lavori?</p>
<h2>Crea la tua mobile app in HTML, CSS3 e Javascript</h2>
<p>Utilizzando questa tecnica unita a molte altre ho creato per i miei clienti oltre 10 applicazioni per dispositivi mobile, tra cui due progetti personali: <a title="Tint Weather App - HTML, CSS3 e javascript mobile app" href="http://www.upcreative.net/tint-weather-app/">Tint Weather App</a> e <a title="Dieta SI o NO? - HTML, CSS3 e javascript mobile app" href="http://www.upcreative.net/app-dieta-si-o-no/">Dieta SI o NO?</a>. Se anche tu sei un web designer e vuoi realizzare la tua applicazione mobile da distribuire nei vari stores, forse sarai interessato al mio e-book: <a title="Html Mobile Accelerato - Come realizzare HTML Mobile App fluide e preformanti" href="http://www.upcreative.net/html-mobile-accelerato/"><strong>HTML Mobile Accelerato</strong></a>.</p>
<p>Grazie ad esso verrai a conoscenza di tutte quelle tecniche che renderanno la tua applicazione mobile fluida e reattiva come quelle native.</p>
<p style="text-align: center;">Clicca nell&#8217;immagine sottostante per saperne di più!</p>
<p style="text-align: center;"><a href="http://www.upcreative.net/html-mobile-accelerato/"><img class="size-full wp-image-2689 aligncenter" alt="HTML-mobile-accelerato-ebook-cover" src="http://www.upcreative.net/wp-content/uploads/2013/11/HTML-mobile-accelerato-ebook-cover1.png" width="563" height="418" /></a></p>
</div></div><p>The post <a rel="nofollow" href="https://www.upcreative.net/web-e-mobile-app-fluide-con-layer-e-hardware-acceleration/">Web e Mobile app fluide con layer e hardware acceleration</a> appeared first on <a rel="nofollow" href="https://www.upcreative.net">upCreative</a>.</p>
]]></content:encoded>
			<wfw:commentRss>https://www.upcreative.net/web-e-mobile-app-fluide-con-layer-e-hardware-acceleration/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>HTML Mobile App: animazione CSS3 su pagine di una lista</title>
		<link>https://www.upcreative.net/html-mobile-app-animazione-css3-su-pagine/</link>
		<comments>https://www.upcreative.net/html-mobile-app-animazione-css3-su-pagine/#comments</comments>
		<pubDate>Wed, 11 Dec 2013 14:04:15 +0000</pubDate>
		<dc:creator><![CDATA[upcreative]]></dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Creare applicazioni javascript]]></category>
		<category><![CDATA[Risorse]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[Web Apps]]></category>
		<category><![CDATA[Web Design]]></category>
		<category><![CDATA[animazioni]]></category>
		<category><![CDATA[css3]]></category>
		<category><![CDATA[HTML Mobile App]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[Modernizr]]></category>

		<guid isPermaLink="false">http://www.upcreative.net/?p=2777</guid>
		<description><![CDATA[<p>The post <a rel="nofollow" href="https://www.upcreative.net/html-mobile-app-animazione-css3-su-pagine/">HTML Mobile App: animazione CSS3 su pagine di una lista</a> appeared first on <a rel="nofollow" href="https://www.upcreative.net">upCreative</a>.</p>
]]></description>
				<content:encoded><![CDATA[<div class="l-submain"><div class="l-submain-h g-html i-cf"><div class="g-cols"><div class="full-width">
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			
<p>Nell&#8217;ultimo articolo ho spiegato <a title="HTML Web app - Modernizr e CSS3 per gestire gli eventi di fine animazione" href="http://www.upcreative.net/modernizr-e-css3-gestire-eventi-animazioni-e-transizioni/">come gestire gli eventi di fine animazione e fine transizione CSS3 tramite Modernizr</a>, ottima tecnica per <a title="Performance CSS3: consigli per ottimizzare le animazioni" href="http://www.upcreative.net/performance-css3-consigli-per-ottimizzare-le-animazioni/">realizzare effetti performanti</a> nella creazione di HTML Mobile App fluide e reattive.</p>
<p>In questo articolo, restando sempre nel tema delle <strong>HTML Mobile Apps</strong>, vedremo come combinare quella tecnica in combinazione con il <a title="Animate.css - framework per animazioni  CSS3" href="https://daneden.me/animate/">framework animate.css</a>, per realizzare una animazione css3 su pagine di una lista.</p>
<p><em><span style="color: #888888;">Forse ti potrebbe interessare</span>: </em><a title="Animate.css: Raccolta di stili per animazioni CSS3 cross-browser" href="http://www.upcreative.net/animate-css-animazioni-css3-cross-browser/">Animate.css: Raccolta di stili per animazioni CSS3 cross-browser</a>.</p>
<blockquote><p>Se sei un web designer interessato alla creazione di mobile app in HTML, CSS e Javascript, forse ti potrebbe interessare il mio e-book: <a title="Come realizzare HTML Mobile App fluide come quelle native" href="http://www.upcreative.net/html-mobile-accelerato/">HTML Mobile Accelerato, </a>che spiega quali tecniche utilizzare per creare delle applicazioni fluide e altamente performanti, senza conoscere il codice nativo ma sfruttando solamente le tue conoscenze in ambito web.</p></blockquote>
<p>L&#8217;idea è quella di creare la view di un&#8217;interfaccia mobile, contenente semplicemente un header ed una lista, alla quale applicheremo una paginazione tramite il click su due pulsanti &#8220;<em>avanti</em>&#8221;  e &#8220;<em>indietro</em>&#8220;.</p>

		</div> 
	</div> <div class="g-cols"><div class="full-width">
	<div class="wpb_single_image wpb_content_element align_center">
		<div class="wpb_wrapper">
			
			<img width="690" height="400" src="http://www.upcreative.net/wp-content/uploads/2013/12/paginazione-su-lista-con-CSS3.jpg" class="attachment-full" alt="paginazione-su-lista-con-CSS3" />
		</div> 
	</div> </div></div><div class="g-cols"><div class="one-half"><div class="wpb_button align_center"><a href="http://www.upcreative.net/tutorials/10122013_Paginazione-su lista-con-CSS3/"class="g-btn type_primary"><span>Demo</span></a></div>
</div><div class="one-half"><div class="wpb_button align_center"><a href="http://www.upcreative.net/download/2783/"class="g-btn type_primary"><span>Download</span></a></div>
</div></div>
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			
<h2></h2>
<h2>Il markup HTML</h2>
<p>Come primo step impostiamo il markup HTML della pagina:</p><pre class="crayon-plain-tag">&lt;nav&gt;
	&lt;button rel="prev"&gt;&lt;i class="fa fa-chevron-left"&gt;&lt;/i&gt; Indietro&lt;/button&gt;
	&lt;h1 class="title"&gt;HTML Mobile App&lt;/h1&gt;
	&lt;button rel="next"&gt;Avanti &lt;i class="fa fa-chevron-right"&gt;&lt;/i&gt;&lt;/button&gt;
&lt;/nav&gt;
&lt;article&gt;	

	&lt;ul class='page animated'&gt;
		&lt;li class="show-detail"&gt;
			&lt;img src="img/1.jpg" height="80px"&gt;
			&lt;div&gt;
				&lt;h3&gt;Lorem ipsum&lt;/h3&gt;
				&lt;h4&gt;Radioactive&lt;/h4&gt;
				&lt;p&gt;Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt.&lt;/p&gt;
			&lt;/div&gt;
		&lt;/li&gt;
		&lt;li class="show-detail"&gt;
			&lt;aside&gt;
				&lt;img src="img/2.jpg" height="80px"&gt;
			&lt;/aside&gt;
			&lt;div&gt;
				&lt;h3&gt;Lorem ipsum&lt;/h3&gt;
				&lt;h4&gt;Radioactive&lt;/h4&gt;
				&lt;p&gt;Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt.&lt;/p&gt;
			&lt;/div&gt;
		&lt;/li&gt;
		...
                ...
                ...
	&lt;/ul&gt;

&lt;/article&gt;</pre><p>
&nbsp;</p>
<p>Dal codice possiamo vedere che il documento è molto semplice: abbiamo un <em>header</em> contenente i pulsanti &#8220;<em>next</em>&#8221; e &#8220;<em>prev</em>&#8221; per la paginazine, ed un tag <em>article</em> contenente la lista.</p>
<p>Siccome rappresenteremo ogni pagina con un elemento <em>ul</em> avente la classe &#8216;<em>page</em>&#8216;, puoi ben notare che inizialmente sarà presente nel documento solo una pagina.</p>
<p>&nbsp;</p>
<h2>Gli stili CSS</h2>
<p>Vediamo quali stili applicare alla pagina, al fine di ottimizzarne il layout per i dispositivi mobili</p><pre class="crayon-plain-tag">.page {
   list-style: none;
   margin: 0;
   padding: 0;
   border-top: solid 1px #c8c8c8;
   border-bottom: solid 1px #c8c8c8;
   background-color: #fff;
   overflow: hidden;
   overflow-y: auto;

   /* stili per il posizionamento */
   position: absolute;
   top:100px;
   bottom:0;
   width: 100%;

}

/* 
	stili per le pagine prima delle animazioni di entrata, 'nascoste' fuori dallo schermo,
	a sinistra nel caso  della classe prev, a destra nel caso della classe next
*/

.page.prev{
	-webkit-transform: translateX(-110%);
	-moz-transform: translateX(-110%);
	-o-transform: translateX(-110%);
	transform: translateX(-110%);
}
.page.next{
	-webkit-transform: translateX(-110%);
	-moz-transform: translateX(-110%);
	-o-transform: translateX(-110%);
	transform: translateX(-110%);
}</pre><p>
In primis abbiamo attribuito gli stili alla lista, in modo da renderla più accattivante, poi ci siamo soffermati sulla parte più importante, il posizionamento.</p>
<p>Usiamo poi un <em>position:absolute</em> per poter spostare la pagina all&#8217;interno del documento; con l&#8217;attribuito <em>width:100%</em> diamo alla pagina la stessa larghezza della finestra, mentre con gli attributi <em>top</em> e <em>bottom</em> dettiamo la sua altezza rispetto a quella del documento.</p>
<p>Il risultato è un layout fluido ed ottimizzato per ogni risoluzione (prova a ridimensionare la finestra nella <a title="HTML Mobile App: Paginazione con CSS3 e Javascript" href="http://www.upcreative.net/tutorials/10122013_Paginazione-su lista-con-CSS3/">demo</a>)</p>
<p>Impostiamo una proprietà <em>transform: translateX(-110%)</em> , con i vari prefissi per la compatibilità, ad ogni pagina avente classe &#8216;<em>next</em>&#8216; o &#8216;<em>prev</em>&#8216;, in modo da &#8220;nascondere&#8221; fuori dallo schermo (rispettivamente a destra o a sinistra) la div creata al click dei pulsanti <em>avanti</em> e <em>indietro,</em> ma non ancora animata.</p>
<p style="text-align: center;"><a ref="magnificPopup" href="http://www.upcreative.net/wp-content/uploads/2013/12/schema-paginazione-css3.jpg"><img class="size-full wp-image-2792 aligncenter" alt="schema-paginazione-css3" src="http://www.upcreative.net/wp-content/uploads/2013/12/schema-paginazione-css3.jpg" width="690" height="400" /></a></p>
<h2>La libreria animate.css</h2>
<p>Come già accennato, per animare le pagine ci serviamo delle due animazioni &#8216;slideInLeft&#8217; e &#8216;slideInRight&#8217; del framework CSS3 animate.css, per cui includiamo la libreria all&#8217;interno del tag <em>head</em> del documento (è possibile scaricare uno stilesheet custom dalla <a title="Custom build per animate.css" href="https://daneden.me/animate/build">sezione custom build</a> del sito):</p><pre class="crayon-plain-tag">&lt;link href="css/animate-custom.css" rel="stylesheet"&gt;</pre><p>
<h2>Il codice Javascript</h2>
<p>Includiamo come al solito jQuery nel documento. Visto che questo è soltanto un tutorial, per il rendering di ogni pagina successiva o precedente, ci limiteremo a clonare la pagina già esistente per poi inserire il nuovo elemento nel documento.</p>
<p>Ovviamente in un contesto reale (che presenti dati reali), l&#8217;operazione dovrebbe essere sostituita dalla generazione del markup tramite <a title="I sistemi di Javascript templating" href="http://www.upcreative.net/web-application-i-sistemi-di-javascript-templating-e-le-migliori-librerie/">un sistema di javascript templating</a> o altre logiche di codifica javascript in combinazione con dati (in formato json, xml ecc.) già precariati nella pagina, o magari caricati al click dei pulsanti &#8220;<em>next</em>&#8221; e &#8220;<em>prev</em>&#8221; tramite una chiamata Ajax.</p>
<p>Per prima cosa &#8220;ricaviamo&#8221; il nome dell&#8217;evento di fine animazione tramite <a title="Modernizr - framework javascript per CSS3 web app" href="http://modernizr.com">Modernizr</a>:</p><pre class="crayon-plain-tag">var endAnimationName = {
	'WebkitAnimation' : 'webkitAnimationEnd',
	'OAnimation' : 'oAnimationEnd',
	'msAnimation' : 'MSAnimationEnd',
	'animation' : 'animationend'
};
var animationName = endAnimationName[ Modernizr.prefixed( 'animation' ) ];</pre><p>
Poi passiamo alla gestione dell&#8217;evento c&#8217;lick&#8217; su entrambi i pulsanti di &#8216;<em>next</em>&#8216; e &#8216;<i>previ</i>&#8216;:</p><pre class="crayon-plain-tag">//variabile globale per controllare se un'animazione è in corso o meno
   var animating = false;

   //bind dell'evento click sui pulsanti di paginazione 
   $("nav button").on("click", function(){

   	   /* 
   	   	siccome non vogliamo che più animazioni vengano eseguite contemporanemante,
   	   	annulliamo l'animazione se un 'altra è in corso. Con questa tecnica 
   	   	evitiamo per esempio l'avvio di due animazioni se l'utente effettua un 
   	   	doppio click sul pulsante
   	    */
   	   if(animating)
   	   		return false;

   	   /*
   	   riprendiamo come prima cosa il tipo di 
   	   button (next o prev) attraverso l'attributo 'rel'
   	   */
	   var mode = $(this).attr("rel");

	   /*
	   cloniamo l'elemnto della lista; questa azione, in un contesto reale,
	   andrebbe sostituita con la generazione di una lista a dopo 
	   un'eventuale chiamata ajax per reperire i dati o qualunque altro
	   sistema per ottenere idati della pagina successiva o precedente 
	   */			   
	   var newPage = $("ul.page").clone();

	   /*
	   	una volta generato l'elemento della lista, aggiungiamo la classe next o prev, 
	   	a seconda button premuto; questa classe determinerà la posizione della pagina 
	   	prima dell'animazione (fuori dello schermo, a sinistra o a destra).
	   */
	   newPage.addClass(mode)

	   //aggiungiamo l'elemento DOM al documento, all'interno del tag article
	   $("article").append(newPage);

	   /*
	   a seconda del tipo di button premuto aggiungiamo la classe 
	   di entrata da destra o sinista, che avvia l'animazione
	   */
	   animating = true; //l'animazione ha inizio
	   newPage.addClass(mode=="next"?"slideInRight":"slideInLeft");
	   /*
	   	   gestiamo l'evento di fine animazione in modo da resettare la variabile 'animating'
	   	   e rimuovere l'elemento precedente dal documento, per alleggerire il markup 
	   	   (utile nei dispositivi mobile)
	   	   rimuoviamo inoltre le classi 'next' o 'prev' e 'slideInRight' o 'slideInLeft' dall'elemento
	   */			

	   newPage.one(animationName, function(){
		   animating = false;
		   $("ul.page").not(newPage).remove();
		   newPage.removeClass("next prev slideInRight slideInLeft");
	   });

   });</pre><p>
Dal codice puoi vedere che ho utilizzato lo stesso selettore per selezionare i pulsanti su cui gestire l&#8217;evento di click, in quanto le azioni da svolgere per entrambi sono le stesse, a parte la differenza della classe CSS che detta il tipo di animazione di entrata nello schermo (<em>slideInLeft</em> o  <em>slideInRight</em>).</p>
<p>Un aspetto da sottolineare è il fatto che la pagina precedentemente visualizzata viene rimossa dal documento alla fine dell&#8217;animazione di quella appena creata: ciò è pensato per <strong>alleggerire il markup</strong> su cui un eventuale dispositivo mobile dovrebbe eseguire il rendering.</p>
<p>Nel possibile scenario di un&#8217;app il cui compito è quello di mostrare un elevato numero di record all&#8217;interno di una lista paginata, dopo aver scorso qualche decina di pagine, l&#8217;utente potrebbe assistere infatti ad un improvviso arresto (o crash), dovuto all&#8217;elevato numero di elementi DOM su cui il browser sarebbe costretto ad eseguire il rendering.</p>
<h2></h2>

		</div> 
	</div> <div class="g-cols"><div class="full-width">
	<div class="wpb_single_image wpb_content_element align_center">
		<div class="wpb_wrapper">
			
			<img width="690" height="400" src="http://www.upcreative.net/wp-content/uploads/2013/12/paginazione-su-lista-con-CSS3.jpg" class="attachment-full" alt="paginazione-su-lista-con-CSS3" />
		</div> 
	</div> </div></div><div class="g-cols"><div class="one-half"><div class="wpb_button align_center"><a href="http://www.upcreative.net/tutorials/10122013_Paginazione-su lista-con-CSS3/"class="g-btn type_primary"><span>Demo</span></a></div>
</div><div class="one-half"><div class="wpb_button align_center"><a href="http://www.upcreative.net/download/2783/"class="g-btn type_primary"><span>Download</span></a></div>
</div></div>
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			
<h2></h2>
<h2>Il risultato finale</h2>
<p>Il gioco è fatto! Dalla demo si può notare come applicando poche righe di codice Javascript e facendo svolgere quasi tutto il lavoro ai CSS3 tramite delle animazioni performanti, è possibile realizzare interfacce che non hanno nulla da invidiare a quelle di applicazioni native (hai notato l&#8217;ottima fluidità dell&#8217;animazione di entrata di ogni pagina?).</p>
<h2>Crea la tua mobile app in HTML, CSS3 e Javascript</h2>
<p>Utilizzando questa tecnica unita a molte altre ho creato per i miei clienti oltre 10 applicazioni per dispositivi mobile, tra cui due progetti personali: <a title="Tint Weather App - HTML, CSS3 e javascript mobile app" href="http://www.upcreative.net/tint-weather-app/">Tint Weather App</a> e <a title="Dieta SI o NO? - HTML, CSS3 e javascript mobile app" href="http://www.upcreative.net/app-dieta-si-o-no/">Dieta SI o NO?</a>. Se anche tu sei un web designer e vuoi realizzare la tua applicazione mobile da distribuire nei vari stores, forse sarai interessato al mio e-book: <a title="Html Mobile Accelerato - Come realizzare HTML Mobile App fluide e preformanti" href="http://www.upcreative.net/html-mobile-accelerato/"><strong>HTML Mobile Accelerato</strong></a>.</p>
<p>Grazie ad esso verrai a conoscenza di tutte quelle tecniche che renderanno la tua applicazione mobile fluida e reattiva come quelle native.</p>

		</div> 
	</div> 
	<div class="wpb_single_image wpb_content_element align_center">
		<div class="wpb_wrapper">
			
			<a href="http://www.upcreative.net/html-mobile-accelerato/"><img width="563" height="418" src="http://www.upcreative.net/wp-content/uploads/2013/11/HTML-mobile-accelerato-ebook-cover1.png" class="attachment-full" alt="HTML-mobile-accelerato-ebook-cover" /></a>
		</div> 
	</div> </div></div>
</div></div><p>The post <a rel="nofollow" href="https://www.upcreative.net/html-mobile-app-animazione-css3-su-pagine/">HTML Mobile App: animazione CSS3 su pagine di una lista</a> appeared first on <a rel="nofollow" href="https://www.upcreative.net">upCreative</a>.</p>
]]></content:encoded>
			<wfw:commentRss>https://www.upcreative.net/html-mobile-app-animazione-css3-su-pagine/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Modernizr e CSS3: gestire gli eventi di fine animazione e transizione con javascript</title>
		<link>https://www.upcreative.net/modernizr-e-css3-gestire-eventi-animazioni-e-transizioni/</link>
		<comments>https://www.upcreative.net/modernizr-e-css3-gestire-eventi-animazioni-e-transizioni/#comments</comments>
		<pubDate>Tue, 03 Dec 2013 08:29:08 +0000</pubDate>
		<dc:creator><![CDATA[upcreative]]></dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[Web Design]]></category>
		<category><![CDATA[animazioni]]></category>
		<category><![CDATA[css3]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[Modernizr]]></category>
		<category><![CDATA[transizioni]]></category>

		<guid isPermaLink="false">http://www.upcreative.net/?p=2631</guid>
		<description><![CDATA[<p>The post <a rel="nofollow" href="https://www.upcreative.net/modernizr-e-css3-gestire-eventi-animazioni-e-transizioni/">Modernizr e CSS3: gestire gli eventi di fine animazione e transizione con javascript</a> appeared first on <a rel="nofollow" href="https://www.upcreative.net">upCreative</a>.</p>
]]></description>
				<content:encoded><![CDATA[<div class="l-submain"><div class="l-submain-h g-html i-cf"><div class="g-cols"><div class="full-width">
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			
<p>Usare <a title="Animate.css: raccolta di stili per animazioni CSS3 cross browser" href="http://www.upcreative.net/animate-css-animazioni-css3-cross-browser/"><strong>animazioni e transizioni CSS3</strong></a> in siti e applicazioni web è ormai diventata (fortunatamente) pratica sempre più comune ed i vari web designer si sbizzarriscono con il loro utilizzo per cercare di distinguersi in creatività e design rispetto agli altri.</p>
<p>Molte volte navigando in rete ci imbattiamo in portfolio o showcase che usano una combinazione di effetti CSS3 ben organizzati e disposti secondo un determinato ordine, al fine di raggiungere un certo tipo di risultato.</p>
<p>Anche a me capita molto spesso di dover far partire un&#8217;animazione o transizione nel momento in cui l&#8217;altra è appena terminata. In questo articolo che ti voglio parlare di una risorsa secondo me molto utile: <strong>come gestire gli eventi di callback di fine animazione e transizione nei CSS3</strong>.</p>

		</div> 
	</div> 
	<div class="wpb_single_image wpb_content_element align_center">
		<div class="wpb_wrapper">
			
			<img width="690" height="400" src="http://www.upcreative.net/wp-content/uploads/2013/11/Modernizr-e-CSS3-eventi-fine-animazione.jpg" class="attachment-full" alt="Modernizr-e-CSS3-eventi-fine-animazione" />
		</div> 
	</div> <div class="g-cols"><div class="one-half"><div class="wpb_button align_center"><a href="http://www.upcreative.net/tutorials/30112013Modernizr-e-CSS3-eventi-fine-animazione/"class="g-btn type_primary size_big"><span>Demo</span></a></div>
</div><div class="one-half"><div class="wpb_button align_center"><a href="http://www.upcreative.net/download/2647/"class="g-btn type_primary size_big"><span>Download</span></a></div>
</div></div>
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			
<p>&nbsp;</p>
<h2><span style="font-size: 1.5em;">Modernizr e CSS3</span></h2>
<p>Un tool che non deve mai mancare nelle <a title="Le mie HTML5 mobile web apps | upCreative" href="http://www.upcreative.net/html5-mobile-apps/">mie applicazioni</a>, siano esse mobile o web, è sicuramente <a title="Modernizr - Tool per gestire la compatibilità browser" href="http://modernizr.com">Modernizr</a>. Grazie ad esso possiamo tranquillamente inserire nei nostri progetti tutte le nuove tecnologie e funzionalità che il web ci mette a disposizione, in modo da gestire i browser che non le supportano e applicando la tecnica del miglioramento progressivo molto facilmente.</p>
<p>Mi ero servito di Modernizr per applicare la tecnica del progressive enhancement in questo articolo su <a title="Come realizzare un menù stile mobile con i CSS3" href="http://www.upcreative.net/css3-slide-panel-tutorial-creare-menu-mobile/">come realizzare un menù stile mobile con i CSS3</a>.</p>
<p>Vediamo un esempio di come usare il framework per richiamare tramite javascript una funzione all&#8217;evento di fine animazione o transizione CSS3 di un elemento DOM.</p>
<p>Supponiamo di avere due animazioni e di voler far partire la seconda solo al termine della prima:</p>

		</div> 
	</div> <div class="g-cols"><div class="one-half">
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			
<h3 style="text-align: center;">Animazione 1: Rotazione in Entrata</h3>

		</div> 
	</div> 
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			
<pre class="crayon-plain-tag">@-webkit-keyframes rotateInDownLeft {
  0% {
    -webkit-transform-origin: left bottom;
    transform-origin: left bottom;
    -webkit-transform: rotate(-90deg);
    transform: rotate(-90deg);
    opacity: 0;
  }

  100% {
    -webkit-transform-origin: left bottom;
    transform-origin: left bottom;
    -webkit-transform: rotate(0);
    transform: rotate(0);
    opacity: 1;
  }
}

@keyframes rotateInDownLeft {
  0% {
    -webkit-transform-origin: left bottom;
    -ms-transform-origin: left bottom;
    transform-origin: left bottom;
    -webkit-transform: rotate(-90deg);
    -ms-transform: rotate(-90deg);
    transform: rotate(-90deg);
    opacity: 0;
  }

  100% {
    -webkit-transform-origin: left bottom;
    -ms-transform-origin: left bottom;
    transform-origin: left bottom;
    -webkit-transform: rotate(0);
    -ms-transform: rotate(0);
    transform: rotate(0);
    opacity: 1;
  }
}

.rotateInDownLeft {
  -webkit-animation-name: rotateInDownLeft;
  animation-name: rotateInDownLeft;
}</pre>

		</div> 
	</div> </div><div class="one-half">
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			
<h3 style="text-align: center;">Animazione 2: Effetto fade in uscita</h3>

		</div> 
	</div> 
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			
<pre class="crayon-plain-tag">@-webkit-keyframes fadeOutRight {
  0% {
    opacity: 1;
    -webkit-transform: translateX(0);
    transform: translateX(0);
  }

  100% {
    opacity: 0;
    -webkit-transform: translateX(20px);
    transform: translateX(20px);
  }
}

@keyframes fadeOutRight {
  0% {
    opacity: 1;
    -webkit-transform: translateX(0);
    -ms-transform: translateX(0);
    transform: translateX(0);
  }

  100% {
    opacity: 0;
    -webkit-transform: translateX(20px);
    -ms-transform: translateX(20px);
    transform: translateX(20px);
  }
}

.fadeOutRight {
  -webkit-animation-name: fadeOutRight;
  animation-name: fadeOutRight;
}</pre>
&nbsp;</p>

		</div> 
	</div> </div></div>
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			
<p><span style="color: #888888; font-size: 0.7em;">Credits: le animazioni sono state prelevate dal codice sorgente del <a title="Animate.css - Framework per animazioni CSS3" href="https://daneden.me/animate/">framework animate.css</a> (ne avevo parlato in <a title="Animazioni CSS3 cross-browser con animate.css" href="http://www.upcreative.net/animate-css-animazioni-css3-cross-browser/">questo articolo</a>)</span></p>

		</div> 
	</div> 
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			
<p>Per prima cosa includiamo Modernizr nel documento, all&#8217;interno del tag <em>&lt;head&gt;</em>, come dice la <a title="Documentazione installazione Modernizr" href="http://modernizr.com/docs/#installing">documentazione</a>:</p><pre class="crayon-plain-tag">&lt;script src="js/modernizr.custom.js"&gt;&lt;/script&gt;</pre><p>
Per spiegare il concetto nel modo più semplice applicheremo il primo effetto ad una div, e dopo l&#8217;evento di fine animazione aspetteremo 5 secondi per poi passare alla seconda animazione. Utilizziamo <strong>jQuery</strong> per realizzare tutto ciò:</p><pre class="crayon-plain-tag">$(function(){

   var endAnimationEventName = getEndAnimationName();  

   //aggiungiamo la classe per l'animazione e all'evento di dine animazione
   //eseguiamo (una volta con '.one') la funzione successiva
   $("#mydiv").addClass("rotateInDownLeft").one(endAnimationEventName, function(){
       $(this).text("Aspetto 5s poi me ne vado...");
       setTimeout(function(){
           $("#mydiv").addClass("fadeOutRight");   
       }, 5000); //aspettiamo 5 secondi
   });

});</pre><p>
OK, ma come fa la funzione &#8220;<em>getEndAnimationName</em>&#8221; a riprendere il nome dell&#8217;animazione?</p>
<p>E&#8217; proprio qui che entra in gioco Modernizr: ci serviamo della funzione &#8220;<strong><em>prefix</em></strong>&#8221; per conoscere il prefisso del browser dell&#8217;utente associato alla proprietà passata come input.</p><pre class="crayon-plain-tag">function getEndAnimationName(){
   var endAnimationName = {
       'WebkitAnimation' : 'webkitAnimationEnd',
       'OAnimation' : 'oAnimationEnd',
       'msAnimation' : 'MSAnimationEnd',
       'animation' : 'animationend'
   };
   return endAnimationName[ Modernizr.prefixed( 'animation' ) ];
}</pre><p>
Nella funzione  abbiamo preparato un oggetto con i prefissi di tutti i browser come chiavi e i nomi degli eventi di fine animazione come valori; quindi impostiamo come parametro di ritorno il valore corrispondente alla chiave restituita da Modernizr.</p>
<p>Ovviamente, se abbaiamo bisogno del nome dell&#8217;evento di inizio animazione, la procedura sarà la stessa, modificando i nomi degli eventi con &#8220;<em>webkitAnimationStart</em>&#8220;, &#8220;<em>oAnimationStart</em>&#8220;, &#8220;<em>MSAnimationStart</em>&#8220;, e &#8220;<em>animationStart</em>&#8220;.</p>
<p>Per impostare <strong>l&#8217;evento di fine transizione</strong>, il procedimento sarà analogo:</p><pre class="crayon-plain-tag">function getEndTransitionnName(){
   var endTransitionName = {
	'WebkitTransition' : 'webkitTransitionEnd',
	'OTransition' : 'oTransitionEnd',
	'msTransition' : 'MSTransitionEnd',
	'transition' : 'transitionend'
   };
   return endTransitionName[ Modernizr.prefixed( 'transition' ) ];
}</pre><p>
&nbsp;</p>

		</div> 
	</div> 
	<div class="wpb_single_image wpb_content_element align_center">
		<div class="wpb_wrapper">
			
			<img width="690" height="400" src="http://www.upcreative.net/wp-content/uploads/2013/11/Modernizr-e-CSS3-eventi-fine-animazione.jpg" class="attachment-full" alt="Modernizr-e-CSS3-eventi-fine-animazione" />
		</div> 
	</div> <div class="g-cols"><div class="one-half"><div class="wpb_button align_center"><a href="http://www.upcreative.net/tutorials/30112013Modernizr-e-CSS3-eventi-fine-animazione/"class="g-btn type_primary size_big"><span>Demo</span></a></div>
</div><div class="one-half"><div class="wpb_button align_center"><a href="http://www.upcreative.net/download/2647/"class="g-btn type_primary size_big"><span>Download</span></a></div>
</div></div>
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			
<h2></h2>
<h2>Conculsioni</h2>
<p>Grazie a questa tecnica sono riuscito ad organizzare e coordinare la sinergia tra le view delle applicazioni mobile HTML5 che ho distribuito su App Store. Mi è tornata particolarmente utile per esempio al fine di nascondere o eliminare la div di una view al termine di una animazione di uscita per alleggerire il markup (<a title="Come migliorare le prestazioni delle animazioni CSS3" href="http://www.upcreative.net/performance-css3-consigli-per-ottimizzare-le-animazioni/">migliorando quindi le prestazioni</a>).</p>
<p>E tu? Quale tecniche utilizzi per gestire le animazioni e le transizioni nei tuoi progetti?</p>

		</div> 
	</div> <div class="g-hr">
						<span class="g-hr-h">
							<i class="fa fa-chevron-down"></i>
						</span>
					</div><div class="g-cols"><div class="one-half">
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			
<div>Hey! Sto scrivendo un e-book su come aumentare le performance e la fluidità per le tue HTML mobile app! Segui i consigli e le tecniche di cui mi sono servito per creare le mie applicazioni (come <a title="Le mie applicazioni HTML5" href="http://www.upcreative.net/html5-mobile-apps/">Tint, Dieta SI o NO?</a>).</div>
<div>Iscriviti alla newsletter per sapere quando sarà pronto!</div>

		</div> 
	</div> 
	<div class="wpb_single_image wpb_content_element align_center">
		<div class="wpb_wrapper">
			
			<img width="563" height="418" src="http://www.upcreative.net/wp-content/uploads/2013/11/HTML-mobile-accelerato-ebook-cover1.png" class="attachment-full" alt="HTML-mobile-accelerato-ebook-cover" />
		</div> 
	</div> </div><div class="one-half">
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			
<h4 style="text-align: center;"><strong>HTML Mobile Accelerato (E-book)</strong></h4>
<p style="text-align: center;">Lascia la tua email per ricevere aggiornamenti e sapere quando sarà disponibile</p>
<style><!--
.wysija-submit{margin:0 !important;}
--></style>
<div style="text-align: center;"><div class="widget_wysija_cont shortcode_wysija"><div id="msg-form-wysija-shortcode6ab002ac29dba-4" class="wysija-msg ajax"></div><form id="form-wysija-shortcode6ab002ac29dba-4" method="post" action="#wysija" class="widget_wysija shortcode_wysija">
<p class="wysija-paragraph">
    
    
    	<input type="text" name="wysija[user][email]" class="wysija-input validate[required,custom[email]]" title="Inserisci la tua mail" placeholder="Inserisci la tua mail" value="" />
    
    
    
    <span class="abs-req">
        <input type="text" name="wysija[user][abs][email]" class="wysija-input validated[abs][email]" value="" />
    </span>
    
</p>
<input class="wysija-submit wysija-submit-field" type="submit" value="Tienimi aggiornato/a" />

    <input type="hidden" name="form_id" value="4" />
    <input type="hidden" name="action" value="save" />
    <input type="hidden" name="controller" value="subscribers" />
    <input type="hidden" value="1" name="wysija-page" />

    
        <input type="hidden" name="wysija[user_list][list_ids]" value="4,1" />
    
 </form></div></div>
<div style="text-align: center;"></div>
<div style="text-align: center;"><a title="E-book HTML5 Mobile Accelerato" href="http://www.upcreative.net/html-mobile-accelerato/">Clicca qui per avere maggiori informazioni<i class="fa fa-chevron-right"></i></a></div>

		</div> 
	</div> </div></div></div></div>
</div></div><p>The post <a rel="nofollow" href="https://www.upcreative.net/modernizr-e-css3-gestire-eventi-animazioni-e-transizioni/">Modernizr e CSS3: gestire gli eventi di fine animazione e transizione con javascript</a> appeared first on <a rel="nofollow" href="https://www.upcreative.net">upCreative</a>.</p>
]]></content:encoded>
			<wfw:commentRss>https://www.upcreative.net/modernizr-e-css3-gestire-eventi-animazioni-e-transizioni/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Animate.css: raccolta di stili per animazioni CSS3 cross browser</title>
		<link>https://www.upcreative.net/animate-css-animazioni-css3-cross-browser/</link>
		<comments>https://www.upcreative.net/animate-css-animazioni-css3-cross-browser/#comments</comments>
		<pubDate>Mon, 11 Nov 2013 20:33:53 +0000</pubDate>
		<dc:creator><![CDATA[upcreative]]></dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Risorse]]></category>
		<category><![CDATA[Web Design]]></category>
		<category><![CDATA[animazioni]]></category>
		<category><![CDATA[cross browser]]></category>
		<category><![CDATA[css3]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[interfacce]]></category>
		<category><![CDATA[web app]]></category>

		<guid isPermaLink="false">http://www.upcreative.net/?p=2460</guid>
		<description><![CDATA[<p>The post <a rel="nofollow" href="https://www.upcreative.net/animate-css-animazioni-css3-cross-browser/">Animate.css: raccolta di stili per animazioni CSS3 cross browser</a> appeared first on <a rel="nofollow" href="https://www.upcreative.net">upCreative</a>.</p>
]]></description>
				<content:encoded><![CDATA[<div class="l-submain"><div class="l-submain-h g-html i-cf"><div class="g-cols"><div class="full-width">
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			
<p>Nello sviluppo di un&#8217;<strong>interfaccia</strong>, sia essa progettata per una web app o per un sito web, le <strong>animazioni CSS3</strong> stanno diventando uno degli ingredienti fondamentali. Grazie ad esse è possibile creare una <strong>user experience più gradevole</strong> e inevitabilmente un risultato finale di maggiore qualità (es.: la <a title="Tint Weather App - Applicazione meteo per iOS7" href="http://www.upcreative.net/tint-weather-app/">web page della mia nuova applicazione per iOS7: Tint</a>).</p>
<p>Tuttavia usare stili CSS per creare delle animazioni non è sempre facile, soprattuto se si parla di importanti fattori come <strong>performance</strong> e <strong>compatibilità tra browser.</strong></p>
<p>Combinare <em>animation</em> e <em>transition</em> (accompagnati dai relativi prefissi per i vari browser come -webkit-, -moz-, -ms- , -o-) con degli attributi sbagliati (affronteremo anche questo argomento in uno dei prossimi articoli) può infatti portare a problemi di sfarfallio, scatti e, soprattuto nel caso di dispositivi mobili o di effetti che prevedono lo spostamento ed il rendering di numerosi elementi DOM, ad un crash della nostra applicazione/sito web.</p>
<p>Dall&#8217;altro lato, l&#8217;operazione di scrittura di fogli per animazioni ed effetti in modo corretto può portare via diverse ore del nostro prezioso tempo.</p>
<p>In questo post voglio parlarti di <a title="Animazioni CSS3 cross-crowser con Animate.css" href="https://daneden.me/animate/">animate.css</a>, un&#8217;interessante <strong>raccolta di animazioni CSS3 cross-browser</strong> (ovviamente per browser ci si riferisce a quelli moderni), molto utile se si vuole realizzare effetti di svariato genere.</p>

		</div> 
	</div> 
	<div class="wpb_single_image wpb_content_element animate_rfl align_center">
		<div class="wpb_wrapper">
			
			<img width="238" height="90" src="http://www.upcreative.net/wp-content/uploads/2013/11/logo_upCreative.jpg" class="attachment-full" alt="logo_upCreative" />
		</div> 
	</div> 
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			
<p>La libreria, un progetto di <a title="Daniel Eden Designer Inglese" href="https://daneden.me"><strong>Daniel Eden</strong></a>, è stata creata al fine di far risparmiare del tempo a coloro che (come me) usano costantemente gli stessi tipi di animazioni, evitando l&#8217;inutile spreco di quel tempo che altrimenti sarebbe impiegato per organizzare i <em>keyframes</em> degli effetti di cui abbiamo bisogno.</p>
<p>Servendoci di animate.css avremo a disposizione tutti i tipi di animazioni più comuni come shake, bounce, swing, rotate e molti altri combinati tra loro, molto utili per implementare nei nostri lavori oggetti come modal, alerts, transizioni tra pagine ecc..</p>
<p>Dal <a title="Animazioni CSS3 cross-crowser con Animate.css" href="https://daneden.me/animate/">sito web</a> è possibile sia scaricare <strong>l&#8217;intero pacchetto</strong> che <strong>crearne uno personalizzato</strong> in base alle nostre esigenze, solo con gli effetti che vogliamo includere nel documento.</p>
<p>Ogni animazione è stata scritta in modo tale da poter essere eseguita su tutti i browser moderni come safari, mozilla, opera ed IE 10+ (per maggiori dettagli consulta questa <a title="Tabella sulla compatibilità delle animazioni CSS3" href="http://caniuse.com/css-animation">tabella sulla compatibilità delle animazioni CSS3</a>).</p>

		</div> 
	</div> <div class="g-cols"><div class="one-half"><div class="wpb_button align_center"><a href="https://daneden.me/animate/"class="g-btn type_default"><span>Sito web</span></a></div>
</div><div class="one-half"><div class="wpb_button align_center"><a href="https://github.com/daneden/animate.css/blob/master/animate.css"class="g-btn type_default"><span>Git Hub</span></a></div>
</div></div>
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			
<p>&nbsp;</p>
<p>Ora potrai concentrati più su quali effetti scegliere per la tua interfaccia che sulla loro stessa creazione, buon divertimento!</p>

		</div> 
	</div> </div></div>
</div></div><p>The post <a rel="nofollow" href="https://www.upcreative.net/animate-css-animazioni-css3-cross-browser/">Animate.css: raccolta di stili per animazioni CSS3 cross browser</a> appeared first on <a rel="nofollow" href="https://www.upcreative.net">upCreative</a>.</p>
]]></content:encoded>
			<wfw:commentRss>https://www.upcreative.net/animate-css-animazioni-css3-cross-browser/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>
