vue — как сделать разрыв между гибким элементом в Slick-carousel

#javascript #css #vue.js #vuejs2

Вопрос:

Это моя текущая скользкая карусель.
В строке 4 элемента, и я хочу добавить поле между каждым элементом без изменения текущего aspect-ratio: 1.3/1;

Я обнаружил, что мне трудно переопределить vue-slick-carousel классы. Кто-нибудь знает, как это сделать?

введите описание изображения здесь

HelloWorld.vue

 <template>
  <div class="slick">
    <VueSlickCarousel
      v-bind="{
        arrow: true,
        focusOnSelect: true,
        speed: 500,
        slidesToShow: 4,
        slidesToScroll: 4,
        touchThreshold: 5,
      }"
    >
      <div class="slick-item">1</div>
      <div class="slick-item">2</div>
      <div class="slick-item">3</div>
      <div class="slick-item">4</div>
      <div class="slick-item">5</div>
      <div class="slick-item">6</div>
      <template #prevArrow="">
        <button class="arrow-btn">
          <img src="@/assets/images/common/arrow-right.svg" alt="arrow-left" />
        </button>
      </template>
      <template #nextArrow="">
        <button class="arrow-btn">
          <img src="@/assets/images/common/arrow-right.svg" alt="arrow-left" />
        </button>
      </template>
    </VueSlickCarousel>
  </div>
</template>

<script>
import VueSlickCarousel from "vue-slick-carousel";
import "vue-slick-carousel/dist/vue-slick-carousel.css";

export default {
  components: { VueSlickCarousel },
};
</script>

<style scoped lang="scss">
// override default class

.slick-slider {
  display: flex;
  align-items: center;
  border: 1px solid grey;
}

.slick-item {
  aspect-ratio: 1.3/1;
  max-width: 280px;
  margin-left: 10px;
  background-color: #e5e5e5;
}
.arrow-btn {
  border: none;
  img {
    height: 40px;
  }
}
</style>
 

Codesandbox:
https://codesandbox.io/s/empty-leftpad-ti367?file=/src/components/HelloWorld.vue

Ответ №1:

Если вы посмотрите на примеры в самом пакете npm, промежутки между слайдами достигаются путем обертывания каждого слайда дополнительным <div> элементом, а затем добавления полей к внутреннему.

Лучше всего обновить ваш DOM как таковой, обернув ваш .slick-item элемент дополнительным <div> :

 <div><div class="slick-item">1</div></div>
 

Тогда в вашем CSS нужно добавить произвольное горизонтальное поле, например margin: 0 5px , для достижения интервала в 10 пикселей между каждым слайдом:

 .slick-item {
  margin: 0 5px;
  background-color: #e5e5e5;
  aspect-ratio: 1.3/1;
  max-width: 280px;
}
 

Смотрите Пример проверки концепции: https://codesandbox.io/s/charming-bas-b78ke?file=/src/components/HelloWorld.vue