Slick carousel - силовые слайды имеют одинаковую высоту
У меня возникают проблемы с плагином JS Plick с несколькими слайдамиToShow, которые имеют разную высоту.
Мне нужно, чтобы слайды имели одинаковую высоту, но с помощью flex-box CSS он не работает, поскольку слайды имеют противоречивые определения 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>
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;
}
Ответы
Ответ 1
Хорошо, ребята, я нашел легкое решение. Просто добавьте функцию обратного вызова 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');
});
Не забывайте, что ваши слайды должны иметь полную высоту:
CSS
.slide {
height: 100%;
}
Вот немного jsFiddle, чтобы продемонстрировать: https://jsfiddle.net/JJaun/o29a4q45/
Ответ 2
Добавьте пару стилей CSS, и все будет готово:
.slick-track
{
display: flex !important;
}
.slick-slide
{
height: inherit !important;
}
Наслаждайтесь! :-)
Ответ 3
У меня есть другое решение, основанное только на CSS. вы можете переопределить плавающие элементы с помощью 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>
Ответ 4
Решение js от @JJaun не идеально, потому что вы видите скачок высоты, если вы используете фоновое изображение для слайдов. Это сработало для меня:
.slick-track {
display: flex !important;
}
.slick-slide {
height: auto;
}
Ответ 5
Я написал быстрый JS-хак, чтобы сделать галерею с разными высотами изображений, чтобы выглядеть немного аккуратно.
Он делает следующее:
- Получить экземпляр ползунка
- Определите высоту - высота изображения будет установлена на
- Получите src attr для каждого изображения и скройте его
-
Установите src attr в качестве родителя изображения как фоновое изображение вместе с некоторым CSS.
function equalizeImagesHeight(slider) {
const slides = slider.find('.slick-slide');
const imgHeight = $(slider)[0].clientHeight;
slides.each(function(slide){
const src = $(this).find('img').hide().attr('src');
$(this).css({
backgroundImage:'url('+src+')',
minHeight: imgHeight,
backgroundSize: "cover",
backgroundPosition: "center"
});
});
};
equalizeImagesHeight ($() 'мой слайдер.');
Ответ 6
Вот решение только для SCSS, если вы в порядке с использованием object-fit
:
.slick {
.slick-track {
display: flex;
.slick-slide {
display: flex;
height: auto;
img {
height: 100%;
object-fit: cover;
object-position: center;
}
}
}
}
Ответ 7
Решение, помеченное как правильное, не будет работать, если для параметра "бесконечный" задано значение "истина".