ویژگی تصویر

ساخت گالری تصاویر واکنش‌گرا با CSS — راهنمای کامل

  /  CSS   /  ساخت گالری تصاویر واکنش‌گرا با CSS
بنر تبلیغاتی الف

گالری تصاویر واکنش‌گرا (responsive image gallery) یکی از اجزای رایج وب‌سایت‌هاست که باید هم زیبا باشد و هم سریع و در دسترس. در این مقاله به اصول طراحی، نمونه‌های کاربردی با CSS Grid و Flexbox، نکات عملکردی (performance) و دسترس‌پذیری (accessibility) می‌پردازیم و کدهایی برای پیاده‌سازی عملی ارائه می‌کنیم.

اصول کلیدی گالری واکنش‌گرا

  • استفاده از سیستم شبکه‌ای (Grid یا Flex) برای چیدمان پویا.
  • حفظ نسبت ابعاد تصاویر با aspect-ratio یا فضای نگهدارنده (placeholder).
  • بهینه‌سازی بارگذاری با lazy loading و تصاویر واکنش‌گرا (srcset/sizes).
  • قابلیت پیمایش با صفحه‌کلید، متن جایگزین مناسب (alt) و کنتراست کافی.

نمونه پایه: ساختار HTML

<div class="gallery">
  <figure class="gallery-item">
    <img src="photo1.jpg" alt="توضیح عکس ۱" loading="lazy">
    <figcaption>عنوان عکس ۱</figcaption>
  </figure>
  <!-- تکرار برای آیتم‌های دیگر -->
</div>

در این مثال از عنصر <figure> برای گروه‌بندی تصویر و کپشن استفاده شده و با صفت loading="lazy" بارگذاری تنبل فعال می‌شود که عملکرد صفحه را بهتر می‌کند.

CSS اولیه با Grid (ریسپانسیو و ساده)

.gallery{
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
  gap: 16px;
  align-items: start;
}

.gallery-item{
  background: #f8f8f8;
  border-radius: 8px;
  overflow: hidden;
}

.gallery-item img{
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
  aspect-ratio: 16/9;
}

این CSS از auto-fit و minmax برای ایجاد ستون‌های منعطف استفاده می‌کند. خاصیت aspect-ratio باعث می‌شود همه تصاویر نسبت ثابت داشته باشند. object-fit: cover برای پر کردن کادر بدون کشیدگی تصویر مناسب است.

بهبود عملکرد با تصاویر واکنش‌گرا

<figure class="gallery-item">
  <img
    src="photo1-800.jpg"
    srcset="photo1-400.jpg 400w, photo1-800.jpg 800w, photo1-1200.jpg 1200w"
    sizes="(max-width:600px) 100vw, (max-width:1200px) 50vw, 33vw"
    alt="توضیح عکس ۱"
    loading="lazy">
  <figcaption>عنوان عکس ۱</figcaption>
</figure>

با srcset و sizes مرورگر مناسب‌ترین نسخه تصویر را انتخاب می‌کند و پهنای باند کاربر ذخیره می‌شود. ترکیب با loading="lazy" بار اولیه را کاهش می‌دهد.

افزودن تعامل: افکت‌ها و دسترس‌پذیری

.gallery-item{
  position: relative;
  transition: transform .25s ease, box-shadow .25s ease;
}

.gallery-item:focus-within,
.gallery-item:hover{
  transform: translateY(-6px);
  box-shadow: 0 8px 20px rgba(0,0,0,.12);
}

.gallery-item img{
  border-radius: 6px;
}

.gallery-item a{
  outline: none;
}

.gallery-item a:focus{
  box-shadow: 0 0 0 3px rgba(0,123,255,.25);
}

این CSS حرکت و سایه برای تعامل بهتر روی حالت‌ها (hover و focus) فراهم می‌کند. استفاده از :focus یا :focus-within اهمیت دارد تا کاربران صفحه‌کلید نیز پیمایش کنند.

نمونه بهبود یافته: مدال/لایت‌باکس ساده (اختیاری)

const openModal = (src, alt) => {
  const modal = document.getElementById('modal');
  const modalImg = modal.querySelector('img');
  modalImg.src = src;
  modalImg.alt = alt;
  modal.classList.add('open');
};

document.addEventListener('click', (e) => {
  const target = e.target;
  if(target.matches('.gallery-item img')){
    openModal(target.src, target.alt);
  } else if(target.matches('#modal') || target.matches('#modal .close')){
    document.getElementById('modal').classList.remove('open');
  }
});

این اسکریپت بسیار ساده برای باز کردن یک تصویر در لایت‌باکس کاربرد دارد. توجه کنید در پروژه‌های واقعی باید از مدیریت تار شدن پس‌زمینه، کنترل صفحه‌کلید (Escape) و دسترس‌پذیری ARIA استفاده کنید.

نکات تکمیلی و بهترین شیوه‌ها

  • تصاویر را فشرده و در فرمت‌های مدرن (WebP/AVIF) ارائه کنید و برای مرورگرهایی که پشتیبانی ندارند تصویر پشتیبان داشته باشید.
  • از CDN یا سرویس‌های بهینه‌سازی تصویر برای بارگذاری سریع‌تر استفاده کنید.
  • برای بارگذاری اولیه از placeholder‌های کم‌حجم (LQIP) یا SVG‌های بلور استفاده کنید تا لودینگ کمتر محسوس باشد.
  • متن جایگزین (alt) مختصر و معنادار بنویسید؛ برای تصاویر صرفاً تزئینی از alt="" استفاده کنید.

جدول پیشنهادی نقاط قطع (breakpoints)

نمای صفحهستون پیشنهادی
کمتر از 600pxیک ستون
600px تا 900pxدو ستون
900px تا 1200pxسه ستون
بیش از 1200pxچهار ستون یا بیشتر (بسته به طراحی)

خلاصه و جمع‌بندی

برای ساخت یک گالری تصاویر واکنش‌گرا، از یک سیستم شبکه‌ای (معمولاً CSS Grid) استفاده کنید، نسبت ابعاد را حفظ کنید، تصاویر را با srcset و loading="lazy" بهینه کنید و تعاملات و دسترس‌پذیری را فراموش نکنید. این موارد باعث می‌شود گالری شما سریع، منعطف و کاربردی برای کاربران مختلف باشد.

در صورت نیاز می‌توانم یک پروژه نمونه کامل ZIP یا کد آماده برای فریم‌ورک‌های رایج (React/Vue) ارائه دهم یا نسخه RTL و فارسی‌سازی‌شده با سبک متریال تهیه کنم.

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

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