光滑的旋转木马 - 强制滑动以具有相同的高度

JJa*_*aun 26 javascript css jquery slick.js

我遇到了Slick carousel JS插件的问题,其中有多个slideToShow,它们具有不同的高度.

我需要幻灯片具有相同的高度,但是使用CSS flex-box它不起作用,因为幻灯片具有冲突的CSS定义.

也没有在论坛和网络上找到任何有用的东西.

如果我得到了一些工作,我会在这里发布解决方案.当然,欢迎提出任何建议.

HTML

<div class="slider">
  <div class="slide">
    <p>Lorem ipsum.</p>
  </div>
  <div class="slide">
    <p>Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua</p>
  </div>
  <div class="slide">
    <p>At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.</p>
  </div>
  <div class="slide">
    <p>Lorem ipsum dolor sit amet, consetetur sadipscing elitr.</p>
  </div>
</div>
Run Code Online (Sandbox Code Playgroud)

JS

$('.slider')
.slick({
    autoplay: false,
    dots: false,
    infinite: false,
    arrows: false,
    slidesToShow: 2,
    slidesToScroll: 2,
    rows: 0
});
Run Code Online (Sandbox Code Playgroud)

CSS

.slide {
  height: 100%;
  background-color: #ccc;
  padding: 10px;
}
Run Code Online (Sandbox Code Playgroud)

Pho*_*nix 46

添加几个CSS样式,它将准备好:

.slick-track
{
    display: flex !important;
}

.slick-slide
{
    height: inherit !important;
}
Run Code Online (Sandbox Code Playgroud)

请享用!:-)

  • 就我而言,在“track”和“slide”类 div 之间还有**两个**“div”。为了使其工作,我也为它们设置了“height: 100%”,类似于@Luke所说的:) (4认同)
  • 这是一个简单得多的解决方案。我还必须添加`.slick-slide&gt; div {高度:100%;}`来说明自动生成的div元素。 (3认同)
  • 大!这段代码在新版本(1.9.0)中的工作原理就像是一种魅力。 (2认同)
  • 效果很好。我添加了一些额外的flex声明,以对不同大小的图像进行2D居中:`.slick-track {display:flex!important; } .slick-slide {高度:继承!important; 显示:flex!important; 证明内容:中心;align-items:居中; }` (2认同)
  • 这是每个人都需要的。+1 (2认同)

JJa*_*aun 24

好的,我找到了一个简单的解决方案 只需添加一个setPosition回调函数(在位置/大小更改后触发),它将幻灯片的高度设置为滑块的高度(slideTrack):

JS

$('.slider').slick({
    autoplay: false,
    dots: false,
    infinite: false,
    arrows: false,
    slidesToShow: 2,
    slidesToScroll: 2,
  rows: 0
})
.on('setPosition', function (event, slick) {
    slick.$slides.css('height', slick.$slideTrack.height() + 'px');
});
Run Code Online (Sandbox Code Playgroud)

别忘了你的幻灯片需要有全高:

CSS

.slide {
  height: 100%;
}
Run Code Online (Sandbox Code Playgroud)

这是一个小jsFiddle演示:https://jsfiddle.net/JJaun/o29a4q45/

  • 您应该更新答案以使用 `slick.$slideTrack.find('.slick-slide')`,因为克隆元素在转换时没有相同的高度。 (3认同)

小智 10

@JJaun 的 js 解决方案并不完美,因为如果您使用幻灯片的背景图像,您会看到高度跳跃。这对我有用:

.slick-track {
  display: flex !important;
}

.slick-slide {
  height: auto;
}
Run Code Online (Sandbox Code Playgroud)


tee*_*ire 6

正如上面的回答。在光滑的滑块上工作得很好

.slick-track
{
    display: flex !important;
}

.slick-slide
{
    height: inherit !important;
}
Run Code Online (Sandbox Code Playgroud)

但是,我在使用平滑同步导航时遇到问题

简单地将CSS放在下面来覆盖它。

.slick-slide {
    margin-bottom: 0;
    object-fit: cover;
}
Run Code Online (Sandbox Code Playgroud)


Lys*_*sak 6

纯css的解决方案

.slick-track {
    display: flex;
}

.slick-track .slick-slide {
    display: flex;
    height: auto;
}

.slick-slide img {
    height: 100%;
    object-fit: contain;
    object-position: center;
}
Run Code Online (Sandbox Code Playgroud)