我有一个卡片轮播。
.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>
轮播具有下一个和上一个按钮,用于在卡片之间导航。轮播溢出是可见的,因为我希望能够看到未聚焦的卡片
但是当溢出设置为可见时,下一个和上一个按钮将停止工作。在响应模式(移动设备)下,按钮可以工作,因为溢出变为隐藏。
@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);
如何解决这个问题?
问题在于
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>