You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何调整Bootstrap多行列轮播每屏元素数量以适配不同视口宽度

推荐优先用CSS实现布局逻辑,如果你需要全量展示所有logo且适配窗口动态调整分页,再加少量JS即可,两种方案都比纯JS实现布局更简便。

方案1:纯CSS实现(最快实现布局要求)

直接修改你的SCSS代码即可,用CSS Grid替代原来的Flex布局,可以精准控制行列数,不需要修改现有HTML结构:

#current-clients-wrapper {
  background-color: white;

  .carousel-item {
    padding: 0;
    margin: 0 auto;
    height: 100%;
  }
  .carousel-size {
    max-width: 750px;
    margin: 0 auto;
  }
  .client-logos {
    display: grid;
    column-gap: 20px;
    row-gap: 30px;
    /* 大屏>576px时默认5列2行,刚好放10张图 */
    grid-template-columns: repeat(5, 1fr);
    grid-template-rows: repeat(2, auto);
    div {
      display: flex;
      align-items: center;
      justify-content: center;
      img {
        max-width: 100%;
        height: auto;
      }
    }
  }
}

@media (max-width: 575.98px) {
  #current-clients-wrapper {
    .carousel-size {
      max-width: 90%;
    }
    .client-logos {
      /* 小屏<576px时2列2行,刚好放4张图 */
      grid-template-columns: repeat(2, 1fr);
      grid-template-rows: repeat(2, auto);
    }
    /* 隐藏小屏下每页多余的logo,避免溢出 */
    .client-logos div:nth-child(n+5) {
      display: none;
    }
  }
}

如果不需要展示多余logo,这个方案就可以直接满足需求。

方案2:CSS+轻量JS实现(全量展示所有logo,动态适配分页)

如果你需要小屏下也能轮播展示全部20个logo,只需要调整一下HTML结构加少量JS即可:

修改HTML.SLIM代码

把所有logo统一渲染,不要预先拆分到轮播项里:

#current-clients-wrapper
  .container
    .wrapper
      h1 Customers using Slidesync

      div[class="carousel slide carousel-size" data-ride="carousel"]
        div[class="carousel-inner" role="listbox" id="client-carousel-inner"]
          - # 统一渲染所有logo,默认隐藏
          - %w[BASF DeutscheBahn DeutscheBundesBank eon Eurowings NTT p7s1 Pfizer SWISS thyssenkrupp Airbus EQS-Group Habegger HugoBoss KION Linde-Group MediaBroadcast Swissport Uniper zf].each do |item|
            div[class="client-logo-item d-none"]
              img[src=asset_path("customers/#{item}.jpg") alt=""]

新增JS代码

页面加载和窗口缩放时自动按当前视口要求拆分轮播项:

function renderClientCarousel() {
  const perPage = window.innerWidth < 576 ? 4 : 10;
  const innerContainer = document.getElementById('client-carousel-inner');
  const allLogos = Array.from(document.querySelectorAll('.client-logo-item'));
  // 清空原有轮播项
  innerContainer.innerHTML = '';

  // 按每页数量拆分生成轮播项
  for (let i = 0; i < allLogos.length; i += perPage) {
    const pageLogos = allLogos.slice(i, i + perPage);
    const carouselItem = document.createElement('div');
    carouselItem.className = `carousel-item item ${i === 0 ? 'active' : ''}`;
    const logosWrapper = document.createElement('div');
    logosWrapper.className = 'client-logos d-block w-100';
    
    pageLogos.forEach(logo => {
      const logoClone = logo.cloneNode(true);
      logoClone.classList.remove('d-none');
      logosWrapper.appendChild(logoClone);
    });

    carouselItem.appendChild(logosWrapper);
    innerContainer.appendChild(carouselItem);
  }

  // 重新初始化Bootstrap轮播
  $('.carousel-size').carousel('dispose').carousel();
}

// 页面加载和窗口大小变化时触发重绘
window.addEventListener('load', renderClientCarousel);
window.addEventListener('resize', renderClientCarousel);

共用SCSS代码

和方案1的SCSS代码一致即可。

内容的提问来源于stack exchange,提问作者Valeria

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 18:15:03