問題は、滑らかなスライダーdivにoverflow:hidden;があるため、スライドdivのボックスシャドウが途切れてしまうことです。
誰かもこの問題に遭遇しましたか?
ここに問題を示す小さなフィドルがあります: https://jsfiddle.net/2zvcud0u/
HTML
<div class="slider row">
<div class="col-sm-4">
<div class="drop-shadow">
<div class="content">
<p>Lorem ipsum dolor sit amet</p>
</div>
</div>
</div>
<div class="col-sm-4">
<div class="drop-shadow">
<div class="content">
<p>Lorem ipsum dolor sit amet</p>
</div>
</div>
</div>
<div class="col-sm-4">
<div class="drop-shadow">
<div class="content">
<p>Lorem ipsum dolor sit amet</p>
</div>
</div>
</div>
<div class="col-sm-4">
<div class="drop-shadow">
<div class="content">
<p>Lorem ipsum dolor sit amet</p>
</div>
</div>
</div>
</div>
</div>
CSS
.row{
margin: 20px 0;
}
.drop-shadow {
box-shadow: 0px 0px 43px 0px rgba(0, 0, 0, 0.35);
}
.content{
margin: 10px;
}
JS
$('.slider').slick({
autoplay: false,
dots: false,
arrows: false,
infinite: false,
speed: 300,
slidesToShow: 3,
slidesToScroll: 1,
swipeToSlide: true,
responsive: [{
breakpoint: 992,
settings: {
slidesToShow: 2
}
}, {
breakpoint: 768,
settings: {
slidesToShow: 1
}
}]
});
提案をありがとう
さて、皆さん、私は静かで簡単な解決策を見つけたと思います。
次のCSSを使用して、スライダーの周りにラッパーdivを配置します。
.slider-wrapper {
width: calc(100% + 30px); //we need more width for the shadows on the edges
padding: 0 15px; //space for the shadows
margin-left: -15px; //put the div in its original position
overflow: hidden; //hide the overflow
}
スリックリストのdivオーバーフローを表示します。
.slick-list {
overflow: visible;
}
これで最初の部分は終わりです。
別の問題は、オーバーフローの最初の要素のボックスシャドウがまだ表示されていることです。
これはそれを修正するはずです:
.slick-slide .drop-shadow {
box-shadow: none; //no shadow for a hidden slide
transition: box-shadow 0.1s ease-in-out; //little effect to fade the shadow
}
.slick-slide.slick-active .drop-shadow {
box-shadow: 0px 0px 43px 0px rgba(0, 0, 0, 0.35); //only the active slides have the shadow
}
ここに別のデモフィドルがあります: https://jsfiddle.net/cc5fmwaL/2/
私は誰かを助けて、この簡単な解決策を自由に修正できることを願っています。
より簡単な解決策は次のとおりです:
.slick-list {
box-sizing: initial;
padding: 25px 0px;
}
副作用があるかどうかはわかりませんが、slick.jsのソースを
.css({
'width':(100 / _.options.slidesPerRow) + '%',
'display': 'inline-block'
});
に
.css({
'width':(98 / _.options.slidesPerRow) + '%',
'display': 'inline-block'
});
これにより、水平方向のボックスシャドウ用のスペースが残ります