 
 
 <?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; Modernizr</title>
	<atom:link href="https://www.upcreative.net/tag/modernizr/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-shortcode6aabb5e399158-4" class="wysija-msg ajax"></div><form id="form-wysija-shortcode6aabb5e399158-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>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-shortcode6aabb5e3eb762-4" class="wysija-msg ajax"></div><form id="form-wysija-shortcode6aabb5e3eb762-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>
	</channel>
</rss>
