The CSS3 background-size property is the perfect solution to create fully responsive jQuery slideshows that look great even on mobile devices. Basically, this property scales a background image until it fits its container. Let's see a practical example.
The markup used here is very common:
<div id="slideshow"> <div id="slideshow-wrapper"> <div class="slide" id="s1"></div> <div class="slide" id="s2"></div> <div class="slide" id="s3"></div> <div class="slide" id="s4"></div> </div> <div id="slideshow-nav"> <a href="#s1" class="active">1</a> <a href="#s2">2</a> <a href="#s3">3</a> <a href="#s4">4</a> </div> </div>
The CSS uses background images with the background-size
property set to contain
:
#slideshow { margin: 2em auto; width: 70%; max-width: 40em; overflow: hidden; } #slideshow-wrapper { width: 1600em; height: 15em; position: relative; } div.slide { width: 40em; height: 15em; float: left; background-repeat: no-repeat; background-size: contain; } #s1 { background-image: url(slide-1.jpeg); } #s2 { background-image: url(slide-2.jpeg); } #s3 { background-image: url(slide-3.jpeg); } #s4 { background-image: url(slide-4.jpeg); } #slideshow-nav { margin: 1em 0; text-align: center; } #slideshow-nav a { display: inline-block; width: 1.5em; height: 1.5em; line-height: 1.5; border: 1px solid silver; color: #333; text-decoration: none; margin-right: 0.5em; } #slideshow-nav a.active { background: #000; color: #fff; border-color: #000; }
Finally, the jQuery code used here is purely demonstrative:
var Slideshow = { navigate: function() { $('a', '#slideshow-nav').click(function(e) { e.preventDefault(); var $a = $(this); var slide = $($a.attr('href')); var wrapper = $('#slideshow-wrapper'); wrapper.animate({ left: -slide.position().left }, 1000, 'linear', function() { $a.addClass('active').siblings().removeClass('active'); }); }); }, init: function() { this.navigate(); } }; Slideshow.init();
You can see the demo below.