Slider Responsive Full Screen con testi animati utilizzando Flex Slider
Oggi vedremo come costruire uno Slider di immagini Fullscreen con testi animati utilizzando l’affidabile FlexSlider 2. Imposteremo prima il Css in modo che le slide occupino tutto lo spazio disponibile, poi animeremo i testi con jquery e infine renderemo il tutto Responsive grazie alle media queries.
1) Inzializziamo Flexslider
Scarichiamo lo slider al seguente indirizzo, scompattiamo il file e copiamo i file flexslider.css e jquery.flexslider.js nella cartella del nostro progetto.
In questa cartella creiamo il file index.html dentro questo pagina richiamiamo gli stili necessari.
<link rel="stylesheet" href="css/flexslider.css" type="text/css" media="screen" />
<link rel="stylesheet" href="css/slider.css" type="text/css" media="screen" />
Il primo serve al funzionamento di default dello slider, il secondo slider.css è il file nel quale scriveremo le modifiche per rendere lo slider Fullscreen.
A fine pagina richimiamo i file javascript di jquery e Flexslider:
<!– jQuery –>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
<script>window.jQuery || document.write(‘<script src="js/libs/jquery-1.7.min.js">\x3C/script>’)</script><!– FlexSlider –>
<script defer src="js/jquery.flexslider.js"></script><script type="text/javascript">
$(window).load(function(){
$(‘.flexslider’).flexslider({
animation: "fade"});
});
</script>
2) Impostiamo l’HTML base
Lo slider per funzionare correttamente e mostrare i testi “caption” sopra le immagini ha bisogno di una struttura html di questo tipo:
<div class="flexslider">
<ul class="slides">
<li>
<img src="my_img.jpg"/>
<div class="flex-caption">…
</div>
</li>
<li>
<img src="my_img.jpg"/>
<div class="flex-caption">…
</div>
</li>
</ul>
</div>
3) Definaimo il CSS
Ora nel file slider.css scriviamo il css che andrà a sovrascrivere il css di default di FlexSlider rendendo ogni slide grande come l’intera pagina.
body, html {margin:0; padding:0;width:100%;height:100%!important; overflow-x: hidden;}
.flexslider, .flex-viewport {width:100%;height:100%!important; margin:0;padding:0;}
.flexslider .slides {height:100%!important;}
.flexslider .slides li {width:100%;height:100%!important; margin:0;padding:0;}
Con height: 100%Important ogni slide è forzata a occupare tutta l’atezza visibile disponibile, se però inseriamo un immagine in una delle slide vediamo che questa occupa tutta la larghezza della pagina ma non tutta l’altezza.
4) Impostiamo le immagini Fullscreen
Per rendere le immagini alte come l’altezza della pagina utilizziamo un piccolo trick css. Come prima cosa impostiamo l’immagine come background della slide li
<div class="flexslider">
<ul class="slides">
<li style="background: url(img/1.jpg) center"><div class="flex-caption">
<h1>Amsterdam, Netherlands</h1>
<p>The capital and most populous city of the Netherlands</p>
</div>
</li><li style="background: url(img/2.jpg) center">
<div class="flex-caption">
<h1>Noord, Netherlands</h1>
<p>The largest metropolitan area</p>
</div>
</li></ul>
</div>
Poi utilizzando la propietà Css3 background-size: impostata come cover rendiamo le immagini in background alte come le slide li impostate con height :100%
.flexslider .slides li {width:100%;height:100%!important; margin:0;padding:0;
-webkit-background-size: cover!important;
-moz-background-size: cover!important;
-o-background-size: cover!important;
background-size: cover!important;
}
5) Animiamo le caption
Per animare i testi usiamo due funzioni javascript che eseguiremo con i callback before e after di Felxslider. Before viene eseguito prima del cambio di slide, after viene eseguito dopo l’animazione della slide in ingresso.
$(window).load(function(){
$(‘.flexslider’).flexslider({
animation: "fade",
start: function(){}, //Callback: function(slider) – Fires when the slider loads the first slide
before: function(){captionMoveOut();}, //Callback: function(slider) – Fires asynchronously with each slider animation
after: function(){captionMoveIn();}, //Callback: function(slider) – Fires after each slider animation completes
end: function(){}, //Callback: function(slider) – Fires when the slider reaches the last slide (asynchronous)
added: function(){}, //{NEW} Callback: function(slider) – Fires after a slide is added
removed: function(){}
});$(‘.flex-caption’).hide();
$(‘.flex-caption’).fadeIn(2000);
});
function captionMoveIn() {
$(‘.flex-caption’)
.animate({top: "35%"},0)
.fadeIn(2000)
;};function captionMoveOut() {
$(‘.flex-caption’)
.animate({top: "-40%"},700)
.fadeOut("normal");};
Dopo aver inizializzato lo slider nascondiamo i testi “caption” con il metodo hide(); di jquery.
La funzione captionMoveIn(); (legata al callback after) mostra il testo con un effetto fade in di 2000 millisecondi dopo l’ingresso della slide.
La funzione captionMoveOut(); (Legata al callback before) effettua un fade out del testo e sposta la caption verso l’alto prima del cambio slide.
6) Rendiamo il tutto Responsive
Ora lo slider ridimensiona correttamente le immagini ma non le caption che rimangono troppo grandi su Smartphone e Tablet. Con due media queries rendiamo la grandezza delle caption ottimale anche su device mobili.
@media (min-width: 768px) and (max-width: 980px) {
.flex-caption h1 {font-size: 55px;}
.flex-caption p {font-size: 13px;}
.flex-control-nav {bottom: 25%; }
}
@media (max-width: 767px) {
.flex-caption h1 {font-size: 35px;}
.flex-caption p {font-size: 10px;}
.flex-control-nav {bottom: 15%; }
}
Cosi facendo abbiamo ottenuto uno Slider Fullscreen con testi animati. Lo Slider con qualche piccolo aggiustamento sulle immagini può essere utilizzato come un normale Slider Responsive (senza immagini full screen) qui di seguito il link per la demo e il download.
Stay Tuned!
GRAZIE!!!!
Salve, ottimo tutorial! una domanda, io vorrei inserire i social in alto a destra sopra le immagini dello slider. come posso fare?
Ciao Fabio,
utilizza un div e posizionalo con position: absolute 😉
fantastico il tuo sito! utilissimo e molto chiaro. bravo bravo bis!
Grazie Daniela 😉
Vorrei utilizzare questa fantastica guida per un sito WP ma vorrei sapere dove installare la cartella DEMO!
grazie e ottimo sito!
Ciao Fabio,
per utilizzare lo slider con wordpress devi adattare il codice html alla struttura di wordpress, ti consiglio di guardarti un tutorial tipo questo:
http://www.marchettidesign.net/2012/12/integrare-uno-slider-con-wordpress/
c’è modo di fargli pescare le immagini da una cartella invece di doverle inserire manualmente nel codice?
grazie
Ciao Andrea,
grazie per questa e le altre guide, molto ben fatte.
Ho notato che nella demo, a fondo pagina rimane un margine bianco alto circa 10px, che fa comparire la scrollbar verticale. Ho provato a dare un’occhiata con firebug ma non riesco a capire da dove possa provenire. Hai idee?
Ciao Francesco,
il modo più veloce per farla sparire è disattivare lo scroll verticale con overflow-y: hidden
andrea potresti vedere la mia domanda sopra?grazie 😉
Ciao Simone,
nel esempio il codice pesca le immagini dalla cartella img..
ciao Andrea e complimenti,
volevo chiederti,: non capisco come avviene il posizionamento del h1 e del caption a centro pagina rispetto al plugin originale!
Avviene utilizzando il js?
Grazie
Ciao Franz,
avviene tramite css.. text-align: center;width:100%;
ok, cosi lo centro,
ma non vedo la regola css dell’inserimento a mezza pagina,
nel flexslider originale il caption viene posizionato sotto.
io sostanzialmente voglio prendere l’originale e mettere come hai fatto te, titolo e descrizione al centro dell’immagine.
Ciao Andrea, tutorial molto utile, però volevo chiederti un consiglio. Siccome ho creato lo slide per dei prodotti ed ho un menu esterno per essi, come posso linkare ogni singolo prodotto del menu al relativo frame dello slide ( ovviamente mantenendo l’animazione ). ?
Ciao Dario,
devi utilizzare la flex control nav che ora è visualizzata a forma di “pallini”, devi sostiuire nell html/css i pallini con le voci del menu..
Ciao, c’è un modo per mostrare nella parte bassa dell’immagine i pulsantini del carusel?
In modo da far capire ad esempio che si tratta dell’immagine uno di due e così via..
Grazie in anticipo per l’aiuto.
Ciao Fabrizio,
ci dovrebbero gia essere due “pallini” che mostrano in che slide sei..
Ciao, grazie per la risposta, da mobile non me ne ero accorto.
Sono riuscito ad attaccarli in fondo alla pagina facendo .flex-control-nav {bottom: 0%; }
Adesso mi piacerebbe attaccare in fondo alla pagina, subito sopra i pallini, il div flex-caption, ovvero fare in modo che le scritte che scorrono stiano in fondo alla pagina ma subito sopra i pallini.
Ho provato con bottom:0% ma mentre per la prima schermata funziona, quando la slide va avanti il nuovo div entrante diventa molto più grosso
Grazie mille ancora per il tuo aiuto!
Scusami, ed infine, c’è un modo per disabilitare lo scorrimento automatico delle immagini e far si che scorrano solo tramite swipe?
Grazie!
Ciao, da Mobile non riesco a vedere i pallini.
Mi dai una mano per piacere?
Scusami ancora, potresti rispondere alla domanda sul problema della visualizzazione dei pallini da mobile?
Ciao Fabrizio, scusami per la risposta in ritardo,
aggingi z-index: 9999 alla classe .flex-control-nav 😉