Skip to content

Commit c83867c

Browse files
committed
📱 better featured slider responsive
1 parent 6a90078 commit c83867c

3 files changed

Lines changed: 69 additions & 45 deletions

File tree

css/components.css

Lines changed: 19 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -601,32 +601,36 @@
601601
}
602602

603603
.slider-track {
604-
display: flex;
604+
position: relative;
605605
width: 100%;
606-
transition: transform 0.6s cubic-bezier(0.77, 0, 0.175, 1);
606+
height: 320px;
607607
}
608608

609609
.slider-card.featured {
610-
min-width: 100%;
611-
max-width: 900px;
612-
margin: 0 48px;
613-
box-shadow: var(--shadow-accent);
614-
border-radius: var(--border-radius-large);
615-
overflow: hidden;
616-
display: flex;
617-
flex-direction: column;
618-
background: var(--bg-card);
619-
position: relative;
620-
cursor: pointer;
610+
position: absolute;
611+
inset: 0;
612+
width: 100%;
613+
opacity: 0;
614+
visibility: hidden;
615+
pointer-events: none;
616+
transform: scale(0.98);
617+
transition: opacity 0.35s ease, transform 0.35s ease;
618+
}
619+
620+
.slider-card.featured.active {
621+
opacity: 1;
622+
visibility: visible;
623+
pointer-events: auto;
624+
transform: scale(1);
625+
z-index: 2;
621626
}
622627

623628
.slider-card.featured img,
624629
.slider-img {
630+
display: block;
625631
width: 100%;
626632
height: 320px;
627633
object-fit: cover;
628-
image-rendering: auto;
629-
filter: none;
630634
}
631635

632636
.slider-overlay {

css/responsive.css

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,10 @@
6868
.slider-dots {
6969
gap: 1rem;
7070
}
71+
72+
.slider-track {
73+
height: 220px;
74+
}
7175
}
7276

7377
@media (max-width: 600px) {
@@ -113,6 +117,10 @@
113117
margin-top: 0.7rem;
114118
gap: 0.7rem;
115119
}
120+
121+
.slider-track {
122+
height: 120px;
123+
}
116124
}
117125

118126
@media (max-width: 480px) {
@@ -172,4 +180,8 @@
172180
margin-top: 0.4rem;
173181
gap: 0.4rem;
174182
}
183+
184+
.slider-track {
185+
height: 80px;
186+
}
175187
}

js/display.js

Lines changed: 38 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -199,38 +199,46 @@ function renderFeaturedSlider() {
199199

200200
function render() {
201201
slider.innerHTML = `
202-
<div class="slider-wrapper">
203-
<div class="slider-track">
204-
${featuredItems
205-
.map(
206-
(item, idx) => `
207-
<div class="slider-card featured" data-idx="${idx}" style="cursor:pointer;">
208-
<img src="${item.banner}" alt="${item.title}" class="slider-img">
209-
<div class="slider-overlay">
210-
<div class="slider-card-title">${item.title}</div>
211-
<div class="slider-card-desc">${item.description}</div>
212-
</div>
213-
</div>
214-
`
215-
)
216-
.join("")}
202+
<div class="slider-wrapper">
203+
<div class="slider-track">
204+
${featuredItems
205+
.map(
206+
(item, idx) => `
207+
<div class="slider-card featured ${
208+
idx === currentIndex ? "active" : ""
209+
}"
210+
data-idx="${idx}" style="cursor:pointer;" aria-hidden="${
211+
idx === currentIndex ? "false" : "true"
212+
}">
213+
<img src="${item.banner}" alt="${
214+
item.title
215+
}" class="slider-img">
216+
<div class="slider-overlay">
217+
<div class="slider-card-title">${item.title}</div>
218+
<div class="slider-card-desc">${item.description}</div>
217219
</div>
218-
<div class="slider-dots">
219-
${featuredItems
220-
.map(
221-
(_, dotIdx) => `
222-
<span class="slider-dot${
223-
dotIdx === currentIndex ? " active" : ""
224-
}" data-idx="${dotIdx}"></span>
225-
`
226-
)
227-
.join("")}
228-
</div>
229-
</div>
230-
`;
220+
</div>
221+
`
222+
)
223+
.join("")}
224+
</div>
225+
<div class="slider-dots">
226+
${featuredItems
227+
.map(
228+
(_, dotIdx) => `
229+
<span class="slider-dot${
230+
dotIdx === currentIndex ? " active" : ""
231+
}" data-idx="${dotIdx}"></span>
232+
`
233+
)
234+
.join("")}
235+
</div>
236+
</div>
237+
`;
231238

232-
const track = slider.querySelector(".slider-track");
233-
track.style.transform = `translateX(-${currentIndex * 100}%)`;
239+
// No horizontal translate needed anymore
240+
// const track = slider.querySelector(".slider-track");
241+
// track.style.transform = `translateX(-${currentIndex * 100}%)`;
234242

235243
slider.querySelectorAll(".slider-card.featured").forEach((card) => {
236244
card.onclick = () => {

0 commit comments

Comments
 (0)