ویژگی تصویر

طراحی کارت‌های فلیپ با CSS

  /  CSS   /  طراحی کارت های فلیپ با CSS
بنر تبلیغاتی الف

کارت‌های فلیپ (Flip Cards) یکی از جلوه‌های متداول در رابط‌های کاربری مدرن هستند که اطلاعات را به صورت جذاب و فشرده نمایش می‌دهند. با ترکیب transform، perspective و backface-visibility در CSS می‌توان افکتی روان و طبیعی ایجاد کرد. در این مقاله روش‌های پایه‌ای و پیشرفته، نکات دسترس‌پذیری، بهینه‌سازی برای موبایل و مثال‌های عملی را بررسی می‌کنیم.

وقتی از فلیپ کارت استفاده کنیم؟

  • نمایش اطلاعات اختصاری در جلو و جزئیات در پشت کارت
  • پروفایل‌های کاربری، محصولات، آزمون‌ها و کارت‌های اطلاع‌رسان
  • جلوه‌های بصری در رابط‌های سرگرم‌کننده و تعاملی

ساختار پایه HTML و CSS

یک کارت فلیپ معمولی شامل یک کانتینر با دو وجه (front و back) است. مثال ساده زیر را ببینید:

<div class="flip-card">
  <div class="flip-card-inner">
    <div class="flip-card-front">
      <h3>Front</h3>
      <p>Short info</p>
    </div>
    <div class="flip-card-back">
      <h3>Back</h3>
      <p>Detailed info</p>
    </div>
  </div>
</div>

توضیح: ساختار شامل سه لایه است—کانتینر بیرونی (.flip-card)، لایه داخلی که چرخش روی آن اعمال می‌شود (.flip-card-inner) و دو وجه (.flip-card-front و .flip-card-back).

.flip-card {
  perspective: 1000px;
  width: 300px;
  height: 200px;
}
.flip-card-inner {
  position: relative;
  width: 100%;
  height: 100%;
  transition: transform 0.6s;
  transform-style: preserve-3d;
}
.flip-card-front, .flip-card-back {
  position: absolute;
  width: 100%;
  height: 100%;
  backface-visibility: hidden;
  -webkit-backface-visibility: hidden;
}
.flip-card-back {
  transform: rotateY(180deg);
}
.flip-card:hover .flip-card-inner {
  transform: rotateY(180deg);
}

توضیح: در این CSS، perspective به والد داده می‌شود تا عمق سه‌بعدی شبیه‌سازی شود. transform-style: preserve-3d باعث می‌شود که عناصر فرزند در فضای سه‌بعدی حفظ شوند. backface-visibility: hidden از نمایش پشت وجه جلوگیری می‌کند. همچنین با :hover چرخش انجام می‌شود.

نکات دسترس‌پذیری و کیبورد

فقط :hover برای دستگاه‌های لمسی یا کاربرانی که با کیبورد کار می‌کنند مناسب نیست. بهتر است با tabindex و رویدادهای کیبورد یا جاوااسکریپت کنترل شود. مثال زیر یک راه استانداردتر است:

<div class="flip-card" tabindex="0" aria-pressed="false">
  <div class="flip-card-inner"> ... </div>
</div>

توضیح: افزودن tabindex=0 باعث می‌شود کارت با تب در دسترس باشد و aria-pressed یا aria-expanded می‌تواند وضعیت فعلی کارت را برای دسترسی‌پذیری گزارش دهد.

const card = document.querySelector('.flip-card');
card.addEventListener('click', () => {
  card.classList.toggle('is-flipped');
  card.setAttribute('aria-pressed', card.classList.contains('is-flipped'));
});
card.addEventListener('keydown', (e) => {
  if (e.key === 'Enter' || e.key === ' ') {
    e.preventDefault();
    card.click();
  }
});

توضیح: این اسکریپت ساده کلیک و کلید Enter/Space را به کارت متصل می‌کند و کلاس is-flipped را تغییر می‌دهد. همچنین صفت ARIA به‌روزرسانی می‌شود تا خوانندگان صفحه‌نمایش بدانند کارت باز یا بسته است.

پیشنهادات بهینه‌سازی و تجربه کاربر

  • prefers-reduced-motion: برای کاربرانی که حرکت کمتر ترجیح می‌دهند، انیمیشن را حذف یا کوتاه کنید.
  • اندازه و نسبت تصاویر را مشخص کنید تا Layout Shift نداشته باشید.
  • استفاده از will-change با احتیاط — فقط در حالت‌های فعال برای جلوگیری از مصرف بیش از حد GPU.
  • برای موبایل، تعویض مبتنی بر کلیک یا لمس را به جای hover استفاده کنید.
@media (prefers-reduced-motion: reduce) {
  .flip-card-inner {
    transition: none;
  }
}

توضیح: این دستورالعمل از مدیا کوئری سیستم کاربر پیروی می‌کند و اگر کاربر تنظیم کاهش حرکت را فعال کرده، انیمیشن‌ها را خاموش می‌کند.

نمونه پیشرفته: چند جهت و جلوه‌های ترکیبی

می‌توانید چرخش‌های محور X یا ترکیب با scale، translate و سایه‌ها را امتحان کنید تا جلوه طبیعی‌تر ایجاد شود. مثال ترکیبی:

.flip-card-inner.is-flipped {
  transform: rotateY(180deg) translateZ(1px);
  box-shadow: 0 12px 24px rgba(0,0,0,0.2);
  will-change: transform;
}

توضیح: اضافه کردن translateZ(1px) باعث می‌شود مرورگر عنصر را در لایه GPU قرار دهد که در برخی موارد عملکرد و روانی انیمیشن را بهتر می‌کند. توجه داشته باشید که استفاده زیاد از will-change می‌تواند باعث مصرف منابع شود.

مثال کاربردی: کارت محصول قابل فلیپ

موارد استفاده رایج؛ نمایش قیمت و دکمه خرید در پشت کارت، یا نمایش مشخصات بیشتر برای هر محصول. طراحی مناسب باعث کاهش شلوغی صفحه و افزایش تعامل می‌شود.

مسئلهراه‌حل
حذف انیمیشن برای کاربران حساسprefers-reduced-motion
قابلیت استفاده در موبایلفعال کردن حالت لمس/کلیک به جای hover
خوانایی محتوااستفاده از backface-visibility و فونت قابل خواندن

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

  • از کلاس‌های واضح و نامگذاری منطقی استفاده کنید (مثلاً .flip-card-inner، .is-flipped).
  • تست روی مرورگرها و دستگاه‌های مختلف را فراموش نکنید — برخی مرورگرها نیاز به prefix دارند.
  • اگر محتوای پشت کارت شامل فرم است، مطمئن شوید فوکوس به درستی مدیریت می‌شود.
  • برای عملکرد بهتر، تصاویر را بهینه و سایز فایل‌ها را کم کنید.

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

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

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