Tengo problemas con el plugin Slick carrusel JS con múltiples slidesToShow que tienen diferentes alturas.

Necesito que las diapositivas tengan la misma altura , pero con CSS flex-box no funciona ya que las diapositivas tienen definiciones CSS en conflicto.

Tampoco encontré nada útil en los foros y en la web.

Si algo funciona, publicaré la solución aquí. Por supuesto, cualquier sugerencia es bienvenida.

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>

JS

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

CSS

.slide {
  height: 100%;
  background-color: #ccc;
  padding: 10px;
}
49
JJaun 28 feb. 2018 a las 14:48

5 respuestas

La mejor respuesta

Ok chicos, encontré una solución fácil. Simplemente agregue una función de devolución de llamada setPosition (se activa después de cambios de posición / tamaño) que establece la altura de las diapositivas a la altura del control deslizante (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');
});

No olvide que sus diapositivas deben tener altura completa:

CSS

.slide {
  height: 100%;
}

Aquí hay un pequeño jsFiddle para demostrar: https://jsfiddle.net/JJaun/o29a4q45/

23
JJaun 28 feb. 2018 a las 11:55

Agregue un par de estilos CSS y estará listo:

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

.slick-slide
{
    height: inherit !important;
}

¡Disfrutar! :-)

60
Phoenix 3 nov. 2018 a las 13:54

Tengo otra solución solo para CSS. puede anular elementos flotantes con table/table-cell.

$(function() {
  $('.slider')
    .slick({
      autoplay: false,
      dots: false,
      infinite: false,
      arrows: false,
      slidesToShow: 2,
      slidesToScroll: 2,
      rows: 0
    });
})
.slide {
  background-color: #ccc;
  padding: 10px;
  display: table-cell !important;
  float: none !important;
}

.slick-track {
  display: table !important;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<link href="https://cdnjs.cloudflare.com/ajax/libs/slick-carousel/1.8.1/slick.min.css" rel="stylesheet"/>
<script src="https://cdnjs.cloudflare.com/ajax/libs/slick-carousel/1.8.1/slick.min.js"></script>


<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>
2
Okan Kocyigit 28 feb. 2018 a las 12:07

La solución js de @JJaun no es perfecta, porque ves que la altura salta si usas una imagen de fondo para las diapositivas. Esto funcionó para mí:

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

.slick-slide {
  height: auto;
}
4
Artem Bruner 14 nov. 2018 a las 13:21

Aquí hay una solución solo para SCSS si está de acuerdo con utilizar { {X0}}:

.slick {
  .slick-track {
    display: flex;

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

      img {
        height: 100%;
        object-fit: cover;
        object-position: center;
      }
    }
  }
}
0
dodov 18 abr. 2019 a las 11:53