创建卡片轮播和使用溢出 CSS 属性时出现问题

问题描述 投票:0回答:1

我有一个卡片轮播。

.carousel {
    display: flex;
    overflow: visible;
    position: relative;
    justify-content: flex-start;
    width: 100%;
    border-radius: 15px;
    box-shadow: 0 4px 10px rgba(0, 0, 0, 0.3);
}

.cards {
    display: flex;
    transition: transform 0.5s ease-in-out;
    justify-content: space-between; /* Ensure cards are spaced */
    width: 100%; /* Use full width for the cards */
}

.card {
    flex: 0 0 30%; /* Ensure the cards have consistent size */
    margin-right: 20px;
    box-sizing: border-box;
    overflow: hidden; /* Prevent overflow */
}

.card {
    background: white;
    border-radius: 15px;
    box-shadow: 0 4px 10px rgba(0, 0, 0, 0.2);
    margin: 0;
    flex: 0 0 100%;
    display: flex;
    flex-direction: column;
    align-items: center;
    transition: transform 0.3s, box-shadow 0.3s;
    text-decoration: none;
    min-width: calc(100% / 5);
    margin-right: 20px;
}

.card:hover {
    transform: scale(1.05);
    box-shadow: 0 8px 20px rgba(0, 0, 0, 0.3);
}

.card:active {
    transform: scale(0.95);
    box-shadow: 0 4px 10px rgba(0, 0, 0, 0.2);
}

.card img {
    width: 100%;
    height: 80%;
    border-top-left-radius: 15px;
    border-top-right-radius: 15px;
    object-fit: cover;
    max-height: 400px;
}

.card .title {
    font-size: 20px;
    padding: 10px;
    font-weight: 700;
    color: #333;
    text-align: center;
}

.card .subtitle {
    font-size: 16px;
    padding: 0 10px 10px;
    text-align: center;
    color: #666;
}

.carousel-controls {
    position: absolute; /* Define os controles como posicionamento absoluto */
    top: 50%; /* Centraliza verticalmente os controles */
    transform: translateY(-50%); /* Ajusta para garantir que o centro esteja alinhado */
    width: 100%; /* Define que os controles ocupam a largura total do carrossel */
    display: flex;
    justify-content: space-between; /* Espaça os botões para as extremidades */
}

.carousel-button {
    background: #0077B6;
    border: none;
    border-radius: 50%;
    width: 50px;
    height: 50px;
    cursor: pointer;
    transition: background 0.3s;
    display: flex;
    justify-content: center;
    align-items: center;
    position: absolute; /* Posiciona os botões dentro do contêiner relativo */
    top: 50%; /* Centraliza verticalmente no contêiner */
    transform: translateY(-50%); /* Ajusta para alinhar exatamente no centro */
}

#prev {
    left: -20px; /* Ajuste à esquerda fora do carrossel */
}

#next {
    right: -20px; /* Ajuste à direita fora do carrossel */
}
<div data-aos="fade-right" class="carousel-outer-wrapper">
  <div data-aos="fade-right" class="carousel">
    <div data-aos="fade-down"class="cards" id="carousel-cards">
      <a href="de-cara-nova.html" class="card">
        <img src="./images/uiux.jpg" alt="Solução 1">
        <div class="title">UI/UX. Ganhe uma cara nova!</div>
        <div class="subtitle">
          <p data-aos="fade-left">Na O.F. Consulting, acreditamos que a experiência do usuário (UX) e o design da interface do usuário (UI) são essenciais para o sucesso de qualquer aplicação. Nossos especialistas em UI/UX desenvolvem soluções intuitivas e eficientes, sempre priorizando a usabilidade e a satisfação do cliente. A nossa abordagem começa com uma compreensão profunda das necessidades do usuário final, permitindo a criação de interfaces que sejam não apenas atraentes visualmente, mas que também facilitem a navegação e maximizem o engajamento. Trabalhamos em estreita colaboração com nossos clientes para garantir que cada detalhe da interface reflita os valores da marca e proporcione uma experiência única e eficiente.</p>
        </div>
      </a>
      <a href="web-mobile.html" class="card">
        <img src="./images/webdesktop_wallpaper.png" alt="Solução 2">
        <div class="title">Aplicativos Web e Mobile</div>
        <div class="subtitle">
          <p>Na era digital, a presença online é essencial para qualquer negócio. Nossa equipe de desenvolvimento de aplicativos web e móveis cria soluções robustas e personalizadas, que atendem às necessidades específicas de cada cliente. Seja um aplicativo responsivo ou uma solução móvel nativa, oferecemos uma experiência otimizada para qualquer plataforma. Utilizando as mais recentes tecnologias e metodologias ágeis, desenvolvemos desde aplicações simples até plataformas complexas, garantindo desempenho, segurança e escalabilidade. A O.F. Consulting está preparada para transformar suas ideias em soluções funcionais, entregando produtos que geram valor imediato ao negócio.</p>
        </div>
      </a>
      <a href="infra-cloud.html" class="card">
        <img src="./images/cloud-arch.png" alt="Solução 3">
        <div class="title">Infraestrutura e Ambientes Cloud</div>
        <div class="subtitle">
          <p>A infraestrutura tecnológica e a migração para ambientes em nuvem são essenciais para a modernização e o crescimento escalável das empresas. Na O.F. Consulting, oferecemos uma abordagem estratégica para infraestrutura e cloud, garantindo alta disponibilidade, segurança e eficiência em ambientes flexíveis e escaláveis. Implementamos soluções que reduzem custos operacionais, aumentam a produtividade e asseguram o desempenho ideal dos sistemas. Nossos especialistas em cloud computing estão prontos para planejar, implementar e gerenciar ambientes em nuvem que permitem às empresas se adaptar rapidamente às mudanças do mercado e às demandas crescentes.</p>
        </div>
      </a>
      <a href="solucoes-arquitetura.html" class="card">
        <img src="./images/arch.png" alt="Solução 4">
        <div class="title">Arquitetura de Soluções</div>
        <div class="subtitle">
          <p>Desenvolver uma solução eficaz requer uma arquitetura sólida. A O.F. Consulting se especializa em projetar e implementar arquiteturas de soluções que garantem flexibilidade, escalabilidade e segurança. Trabalhamos lado a lado com nossos clientes para entender seus desafios e identificar a melhor estrutura tecnológica para atender às suas necessidades. Nossos arquitetos de soluções utilizam padrões modernos de arquitetura, como microsserviços e arquitetura orientada a eventos, para criar sistemas robustos e fáceis de manter, alinhando as necessidades de curto prazo com a estratégia de longo prazo do cliente.</p>
        </div>
      </a>
      <a href="consultoria.html" class="card">
        <img src="./images/consulting_wallpaper.png" alt="Solução 5">
        <div class="title">Consultoria para Impulsionar seu Negócio</div>
        <div class="subtitle">
          <p>Na O.F. Consulting, nossa missão é apoiar o crescimento de nossos clientes por meio de uma consultoria estratégica e focada em resultados. Oferecemos insights valiosos que ajudam empresas a superar desafios e aproveitar oportunidades em um mercado dinâmico. Com uma abordagem personalizada, trabalhamos de forma colaborativa para entender seus objetivos de negócios e recomendar soluções que aumentam a eficiência, reduzem custos e melhoram a competitividade. Seja no planejamento estratégico, na transformação digital ou na otimização de processos, nossa consultoria está preparada para impulsionar o seu negócio a novos patamares.</p>
        </div>
      </a>
    </div>
  </div>

  <button class="carousel-button" id="prev">
    <span class="material-icons">arrow_back</span>
  </button>
  <button class="carousel-button" id="next">
    <span class="material-icons">arrow_forward</span>
  </button>
</div>

轮播具有下一个和上一个按钮,用于在卡片之间导航。轮播溢出是可见的,因为我希望能够看到未聚焦的卡片

Like this!

但是当溢出设置为可见时,下一个和上一个按钮将停止工作。在响应模式(移动设备)下,按钮可以工作,因为溢出变为隐藏。

@media (max-width: 768px) {
    .carousel {
        width: 100vw;
        padding: 0;
        overflow: hidden;
        position: relative;
    }

JS:

function updateCarousel(direction) {
    const cardWidth = cardsContainer.children[0].offsetWidth; // Largura do card
    const scrollMargin = parseInt(getComputedStyle(cardsContainer.children[0]).marginRight) || 0;
    const scrollWidth = cardWidth + scrollMargin; // Largura total do card com margens

    const scrollStep = direction === 'next' ? scrollWidth : -scrollWidth;

    // Use scrollBy instead of manipulating scrollLeft directly to preserve overflow visible behavior
    cardsContainer.scrollBy({
        left: scrollStep,
        behavior: 'smooth'
    });
}


// Adiciona eventos aos botões de navegação
nextButton.addEventListener('click', () => {
    console.log('nextClick');
    updateCarousel('next');
});

prevButton.addEventListener('click', () => {
    console.log('prevClick');
    updateCarousel('prev');
});

// Intervalo automático para troca de cards
setInterval(() => {
    if (currentIndex < totalCards - 1) {
        currentIndex++;
    } else {
        currentIndex = 0; // Volta para o primeiro
    }
    updateCarousel();
}, 10000);

如何解决这个问题?

javascript html css carousel
1个回答
0
投票

问题在于

overflow: auto
,因为它隐藏了“按钮”,或者当它们从您已经知道的容器中溢出时将它们切掉。现在要解决此问题,将在第一个
fade-right
div 上方创建一个额外的容器。

在我的例子中,我添加了

card-outter
div ,它具有以下 css 属性:

.card-outter {
    padding: 0 50px;
    overflow: hidden;
 }

padding: 0 50px
将在“card-outter”和“card-inner”(这基本上是您的“fade-right”类)之间创建一个间隙,因此溢出的按钮有空间显示,并且不会被剪切。您可以使用开发工具直观地了解我所取得的成就,下面是它的工作示例。

body {
  margin: 0;
  padding: 0;
}

.mainDiv {
  color: black;
  width: 100%;
  height: 100vh;
  background-color: white;
  display: flex;
  align-items: center;
  justify-content: center;
}

.card-outter {
  padding: 0 50px;
  overflow: hidden;
}

.card-inner {
  position: relative;
}

.actual-card {
  width: 50vw;
  height: 50vw;
  border: 1px solid gray;
  display: flex;
  align-items: center;
  justify-content: center;
}

.prev-btn {
  position: absolute;
  left: -30px;
  top: 25vw
}

.next-btn {
  position: absolute;
  right: -20px;
  top: 25vw
}
<h2 class="mainDiv">
  <div class="card-outter">
    <div class="card-inner">
      <div class="actual-card">CleanCodeEditor</div>
      <button class="prev-btn">Previous</button>
      <button class="next-btn">Next</button>
    </div>
  </div>
</h2>

© www.soinside.com 2019 - 2024. All rights reserved.