これで問題が解決するはずです:
JSフィドル
そして、高さが異なるもの: JSfiddle
HTML
<div class="bxslider">
<div class="bxslider-inner"><div style="width:80px; height:80px; background:#CCC; padding:5px;"></div></div>
<div class="bxslider-inner"><div style="width:80px; height:80px; background:#F5F5F5; padding:5px;"></div></div>
<div class="bxslider-inner"><div style="width:80px; height:10px; background:#6699cc; padding:5px;"></div></div>
<div class="bxslider-inner"><div style="width:80px; height:80px; background:#F5F5F5; padding:5px;"></div></div>
</div>
CSS
body {
background: orange;
margin-top: 50px;
}
.bxslider-inner {
vertical-align: middle;
display: inline-block;
height: 80px;
}
JavaScript
'use strict';
jQuery(document).ready(function(){
jQuery('.bxslider').bxSlider({
mode: 'horizontal',
speed: 500,
slideMargin:20,
infiniteLoop: true,
pager: false,
controls: true,
slideWidth: 80,
minSlides: 1,
maxSlides: 5,
moveSlides: 1
}
});
// Initial
$('.bxslider-inner').each(function(){
var height_parent = $(this).css('height').replace('px', '') * 1;
var height_child = $('div', $(this)).css('height').replace('px', '') * 1;
var padding_top_child = $('div', $(this)).css('padding-top').replace('px', '') * 1;
var padding_bottom_child = $('div', $(this)).css('padding-bottom').replace('px', '') * 1;
var top_margin = (height_parent - (height_child + padding_top_child + padding_bottom_child)) / 2;
$(this).html('<div style="height: ' + top_margin + 'px; width: 100%;"></div>' + $(this).html());
});
});
計算された中央値は、パディング、マージン、ボーダーなどの他の高さ変数に大きく依存することに注意してください。そのようなスタイルを追加する場合は、それらを計算に追加する必要があることに注意してください。別のオプションは を使用することbox-sizing: border-box;
です。そのため、すべてが div の内側に折りたたまれます。
bxslider-inner
高さを持たなければならないか、計算された DOM の高さを取得して回避する必要があります。本当にそれが必要な場合は、メモを残してください。調査します。
幸運を!
アップデート
- JSfiddle が更新されました。ループに陥ることはありません。
- 高すぎる高さでテストしたところ、コードは壊れていないように見えますが、非表示にオーバーフローする可能性があります
- http://bxslider.com/options (> Callbacks > onSlideAfter)を見てください。必要に応じて、各サイクルの後に変更を行うこともできます。顔色に必要な場合は、ここでコードを再度変更できます