ویژگی تصویر

طراحی اسلایدر ساده با CSS

  /  CSS   /  طراحی اسلایدر ساده با CSS
بنر تبلیغاتی الف

اسلایدرها (carousel یا slider) یکی از عناصر رایج در رابط‌های کاربری وب هستند. در این مقاله به روش‌های ساخت اسلایدر ساده با CSS خواهیم پرداخت، شامل نمونه‌های عملی، نکات دسترس‌پذیری و بهینه‌سازی و مقایسهٔ روش‌ها. هدف این است که بتوانید بدون یا با حداقل جاوااسکریپت یک اسلایدر سبک و قابل اعتماد بسازید.

روش‌های متداول برای ساخت اسلایدر با CSS

  • اسلایدر مبتنی بر radio/checkbox — کنترل دستی (بدون JS).
  • اسلایدر خودکار با @keyframes — مناسب نمایش اتوماتیک محتوا.
  • اسلایدر با جاوااسکریپت — انعطاف‌پذیری و کنترل کامل.

در ادامه دو مثال عملی می‌بینیم: یکی کنترل دستی با radio و دیگری اسلایدر خودکار تنها با CSS.

مثال 1 — اسلایدر دستی (CSS-only با radio)

<!-- HTML structure -->
<div class="slider" role="region" aria-label="Image Slider">
  <input type="radio" name="slides" id="s1" checked>
  <input type="radio" name="slides" id="s2">
  <input type="radio" name="slides" id="s3">

  <div class="slides">
    <div class="slide"><img src="img1.jpg" alt="Description 1"></div>
    <div class="slide"><img src="img2.jpg" alt="Description 2"></div>
    <div class="slide"><img src="img3.jpg" alt="Description 3"></div>
  </div>

  <div class="controls">
    <label for="s1">1</label>
    <label for="s2">2</label>
    <label for="s3">3</label>
  </div>
</div>

<!-- CSS -->
.slider{width:100%;max-width:800px;margin:0 auto;position:relative;overflow:hidden;}
.slides{display:flex;transition:transform .6s ease;}
.slide{min-width:100%;box-sizing:border-box;}
.slide img{display:block;width:100%;height:auto;}

input[type="radio"]{display:none;}
#s1:checked ~ .slides{transform:translateX(0%);}
#s2:checked ~ .slides{transform:translateX(-100%);}
#s3:checked ~ .slides{transform:translateX(-200%);}

.controls{position:absolute;left:50%;transform:translateX(-50%);bottom:10px;display:flex;gap:8px;}
.controls label{background:rgba(0,0,0,0.5);color:#fff;padding:6px 10px;border-radius:4px;cursor:pointer;}

این کد یک اسلایدر ساده مبتنی بر عناصر input با type=”radio” ایجاد می‌کند. سه input پنهان وضعیت اسلاید فعال را نگه می‌دارند و با CSS سِلکتورهای برادر عمومی (~) موقعیت کانتینر .slides را با استفاده از transform جابجا می‌کنیم. لیبل‌ها نقش دکمه‌های کنترل را دارند و به دلیل استفاده از تگ <img> ویژگی alt نیز برای دسترس‌پذیری فراهم شده است.

چرا این روش مفید است و محدودیت‌ها

  • مزایا: بدون جاوااسکریپت کار می‌کند، سبک و سازگار با مرورگرهای مدرن است.
  • معایب: محدودیت در تعداد اسلایدها (با افزایش تعداد باید CSS را دستی توسعه داد) و فقدان انیمیشن‌های پیچیده یا کنترل‌های پویا.

مثال 2 — اسلایدر خودکار با @keyframes (بدون کنترل دستی)

<!-- HTML -->
<div class="auto-slider">
  <div class="auto-slides">
    <div class="auto-slide"><img src="img1.jpg" alt="Slide 1"></div>
    <div class="auto-slide"><img src="img2.jpg" alt="Slide 2"></div>
    <div class="auto-slide"><img src="img3.jpg" alt="Slide 3"></div>
  </div>
</div>

<!-- CSS -->
.auto-slider{width:100%;max-width:900px;overflow:hidden;margin:0 auto;}
.auto-slides{display:flex;width:300%;animation:slide 12s infinite;}
.auto-slide{width:100%;flex:0 0 33.3333%;}
.auto-slide img{width:100%;display:block;height:auto;}

@keyframes slide{
  0%{transform:translateX(0%);}
  25%{transform:translateX(0%);}
  33%{transform:translateX(-100%);}
  58%{transform:translateX(-100%);}
  66%{transform:translateX(-200%);}
  100%{transform:translateX(-200%);}
}

در این نمونه از انیمیشن‌های @keyframes برای حرکت اتوماتیک اسلایدها استفاده شده است. کانتینر .auto-slides به صورت افقی با display:flex پهن شده و سپس با انیمیشن transform جابجا می‌شود تا اثر اسلایدینگ ایجاد شود. پارامترهای درصدی در keyframes برای تعیین زمان نمایش هر اسلاید به کار رفته‌اند.

نکات طراحی، دسترس‌پذیری و بهینه‌سازی

  • همیشه از attributeهای alt برای تصاویر استفاده کنید تا برای کاربران صفحه‌خوان قابل دسترس باشد.
  • در اسلایدرهای خودکار گزینه توقف/پلی فراهم کنید تا کنترل برای کاربر وجود داشته باشد.
  • برای موبایل‌ها از تصاویر responsive یا srcset و از تکنیک lazy-loading (loading=”lazy”) استفاده کنید تا مصرف داده کاهش یابد.
  • برای سئو، متن مهم را در کنار تصویر (caption یا هدینگ) قرار دهید و تصاویر را با فرمت‌های فشرده مثل WebP ارائه کنید.
  • در صورت استفاده از radio/label، از نقش‌های ARIA و tabindex برای دسترس‌پذیری بهتر بهره ببرید.

مقایسهٔ سریع روش‌ها

روشمزایامعایب
CSS + radioبدون JS، ساده، قابل پیاده‌سازی سریعانعطاف‌پذیری کم برای انیمیشن‌های پیچیده
CSS @keyframesخودکار، کدنویسی کمکنترل کاربر محدود، توقف/تغییر داینامیک مشکل
JavaScriptکنترل کامل، قابل توسعهحجم بیشتر، نیاز به نگهداری

نمونهٔ بهبود یافته: افزودن دسترس‌پذیری و دکمه توقف

<!-- Minimal JS to toggle paused state for accessibility -->
const slider = document.querySelector('.auto-slider');
let paused = false;

slider.addEventListener('mouseenter', () => {
  slider.querySelector('.auto-slides').style.animationPlayState = 'paused';
});
slider.addEventListener('mouseleave', () => {
  slider.querySelector('.auto-slides').style.animationPlayState = 'running';
});

این اسکریپت بسیار کوتاه زمانی که کاربر موس را روی اسلایدر نگه دارد، انیمیشن را متوقف می‌کند و پس از خروج موس دوباره اجرا می‌شود. این ترکیب CSS برای نمایش خودکار و یک تکه JS برای کنترل دسترس‌پذیری تعادل خوبی بین عملکرد و قابل استفاده بودن ایجاد می‌کند.

پیشنهادات حرفه‌ای

  • برای پروژه‌های بزرگ از کتابخانه‌های成熟 مثل Swiper یا Flickity استفاده کنید که امکانات مثل lazy load، pagination و accessibility را به طور کامل دارند.
  • همیشه انیمیشن‌ها را روان و با duration مناسب پیاده کنید (بین 400ms تا 800ms معمولاً مناسب است).
  • برای سئو و بارگذاری سریع، تصاویر را پیش از نمایش فشرده و در اندازه مناسب قرار دهید و از CDN استفاده کنید.
  • در تست‌ها روی مرورگرها و دستگاه‌های مختلف، تعامل لمسی (swipe) و صفحه‌خوان را بررسی کنید.

در مجموع طراحی اسلایدر ساده با CSS امکان‌پذیر و مفید است اما برای تجربهٔ کامل کاربری و نیازهای پیچیده بهتر است ترکیبی از CSS و JS یا استفاده از کتابخانه‌های تخصصی را در نظر بگیرید. با رعایت نکات دسترس‌پذیری و بهینه‌سازی می‌توانید اسلایدری سریع، سبک و کاربردی بسازید.

آیا این مطلب برای شما مفید بود ؟

خیر
بله
موضوعات شما در انجمن: