In my JS image slider (Owl-Carousel), images have different dimensions:
http://goo.gl/KmpX2P
You can see that the image height varies within the carousel. How to make it constant while keeping carousel responsive? I need images to fill the slider space at all times, therefore some will have to be cropped through CSS somehow. The desired result looks like this:
The dynamic image slider skin allows you to add titles and descriptions to both thumbnails and Lightbox items. It also grants you with lots of setting options including gallery and thumbnail size, performance customization and security related options.
An optimal size for a slider is 1200px width and 500-800px height.
They both have the same function: to display photos or other media files in the form of a slideshow. This is either automatic or manually controlled. However, sliders only display one slide at a time. Whereas carousels allow users to see multiple slides at once.
Go to Customize>Content>Front Page. Adjust the Set slider's height in pixels setting. Also check the settings Apply this height to all sliders and Replace the default image slider's height.
It can be specified in css.
Example,
http://jsfiddle.net/AwBLL/2/
.owl-carousel .owl-item{
height:285px;
width:100%;
}
EDIT The following solution uses the plugin's callback events to modify the viewport's/wrapper's height according to the smallest image height.
http://jsfiddle.net/DNMpF/1/
js
$(document).ready(function () {
$("#owl-example").owlCarousel({
afterUpdate: function () {
updateSize();
},
afterInit:function(){
updateSize();
}
});
function updateSize(){
var minHeight=parseInt($('.owl-item').eq(0).css('height'));
$('.owl-item').each(function () {
var thisHeight = parseInt($(this).css('height'));
minHeight=(minHeight<=thisHeight?minHeight:thisHeight);
});
$('.owl-wrapper-outer').css('height',minHeight+'px');
}
});
css
.owl-carousel .owl-item img {
height:auto;
width:100%;
display: block;
}
.owl-carousel .item {
margin:0px;
}
EDIT2
Regarding the latest comment, to show the bottom part of the large images one approach could be to iterate the images and add a negative top margin equal to the part of these images hidden.
function updateSize(){
var minHeight=parseInt($('.owl-item').eq(0).css('height'));
$('.owl-item').each(function () {
var thisHeight = parseInt($(this).css('height'));
minHeight=(minHeight<=thisHeight?minHeight:thisHeight);
});
$('.owl-wrapper-outer').css('height',minHeight+'px');
/*show the bottom part of the cropped images*/
$('.owl-carousel .owl-item img').each(function(){
var thisHeight = parseInt($(this).css('height'));
if(thisHeight>minHeight){
$(this).css('margin-top',-1*(thisHeight-minHeight)+'px');
}
});
}
Slides with random height at http://jsfiddle.net/AwBLL/108/
HTML:
<h2>Vertical align</h2>
<div class="owl-carousel bg-contain">
<img src="http://lorempixel.com/234/100/technics/1/" />
<img src="http://lorempixel.com/234/400/technics/2/" />
<img src="http://lorempixel.com/234/200/technics/9/" />
<img src="http://lorempixel.com/234/150/technics/10/" />
</div>
<h2>Full Zoom small images</h2>
<div class="owl-carousel bg-cover">
<img src="http://lorempixel.com/234/100/technics/1/" />
<img src="http://lorempixel.com/234/400/technics/2/" />
<img src="http://lorempixel.com/234/200/technics/9/" />
<img src="http://lorempixel.com/234/150/technics/10/" />
</div>
CSS:
.owl-wrapper-outer {
border: 1px solid red;
font: 0/0 a;
line-height: 0;
}
.owl-carousel .owl-item {
background-position: 50% 50%;
background-repeat: no-repeat;
}
.bg-contain .owl-item { background-size: contain }
.bg-cover .owl-item { background-size: cover }
.owl-carousel .owl-item img {
height: auto;
width: 100%;
visibility: hidden;
}
JS:
$(".owl-carousel").each(function () {
var $this = $(this);
$this.owlCarousel({
afterUpdate: function () {
updateSize($this);
},
afterInit: function () {
updateSize($this);
}
});
});
function updateSize($carousel) {
var maxHeight = 0;
$('.owl-item', $carousel).each(function () {
var $this = $(this);
var $image = $this.find('img');
//Max height
var prevHeight = $this.height();
var thisHeight = $this.height('auto').height();
$this.height(prevHeight);
maxHeight = (maxHeight > thisHeight ? maxHeight : thisHeight);
//Set image as background
var imageSource = $image.attr('src');
$this.css('backgroundImage', 'url(' + imageSource + ')');
});
//Set equal height
$('.owl-item', $carousel).height(maxHeight);
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With