ویژگی تصویر

ساخت افکت بارکد با CSS — روش‌ها، مثال‌ها و نکات حرفه‌ای

  /  CSS   /  ساخت افکت بارکد با CSS
بنر تبلیغاتی الف

ایجاد یک افکت بصری شبیه بارکد با CSS می‌تواند برای وب‌سایت‌ها، کارت‌های آنیماسیون، بخش‌های UI و اثرات موشن جذاب باشد. در این مقاله به شکل گام‌به‌گام روش‌های مختلف ساخت “افکت بارکد” با CSS را توضیح می‌دهم، از راه‌حل‌های ساده با repeating-linear-gradient تا نمونه‌های متحرک با pseudo-elements و CSS variables. همچنین درباره محدودیت‌ها و زمانی که بهتر است از SVG یا کتابخانه‌های مخصوص بارکد واقعی استفاده کنید، خواهیم گفت.

چرا فقط CSS؟ محدودیت‌ها و مزایا

  • مزایا: ساده، سبک، بدون نیاز به تصاویر، قابل انیمیت و واکنش‌گرا.
  • محدودیت‌ها: این بارکدها صرفاً بصری‌اند و برای اسکنرهای واقعی به طور قابل اطمینانی کدگذاری نمی‌شوند.
  • توصیه: برای نمایشی استفاده کنید؛ برای بارکد واقعی از SVG یا کتابخانه‌هایی مثل JsBarcode یا سرور-ساید تولید کنید.

نمونه پایه — بارکد ایستا با repeating-linear-gradient

<div class="barcode-basic"></div>


.barcode-basic{
  width: 320px;
  height: 120px;
  background: repeating-linear-gradient(
    to right,
    #000 0 6px,
    #fff 6px 10px
  );
  border: 2px solid #333;
  box-shadow: 0 2px 8px rgba(0,0,0,0.15);
}

توضیح: این قطعه کد یک عنصر ساده ایجاد می‌کند که با repeating-linear-gradient خطوط سیاه و سفید متوالی می‌سازد. در مثال بالا هر بار سیاه 6px و سفید 4px است؛ می‌توانید این مقادیر را تغییر دهید تا تراکم یا ضخامت خطوط تغییر کند.

بارکد با ضخامت‌های متغیر (نمای واقعی‌تر)

<div class="barcode-variant"></div>


.barcode-variant{
  width: 360px;
  height: 120px;
  background:
    linear-gradient(to right, #000 0 12px, transparent 12px 16px),
    linear-gradient(to right, #000 20px 26px, transparent 26px 30px),
    linear-gradient(to right, #000 36px 42px, transparent 42px 46px),
    linear-gradient(to right, #000 50px 58px, transparent 58px 64px);
  background-color: #fff;
  background-repeat: no-repeat;
  border: 2px solid #222;
}

توضیح: این روش با قرار دادن چند linear-gradient در پس‌زمینه، خطوط با عرض‌ها و فاصله‌های متفاوت ایجاد می‌کند که ظاهر واقع‌گرایانه‌تری می‌دهد. اما پیچیدگی بیشتر و نگهداری سخت‌تر خواهد بود.

افکت اسکن متحرک (scanline)

<div class="barcode-scan">
  <span class="scanline"></span>
</div>


.barcode-scan{
  position: relative;
  width: 320px;
  height: 140px;
  background: repeating-linear-gradient(to right,#000 0 6px,#fff 6px 10px);
  overflow: hidden;
  border-radius: 4px;
}
.scanline{
  position: absolute;
  left: -40%;
  top: 0;
  width: 40%;
  height: 100%;
  background: linear-gradient(90deg, rgba(255,255,255,0) 0%, rgba(255,255,255,0.25) 50%, rgba(255,255,255,0) 100%);
  transform: skewX(-20deg);
  animation: scan 3s linear infinite;
}
@keyframes scan{
  0% { left: -40%; }
 50% { left: 140%; }
 100% { left: -40%; }
}

توضیح: این مثال یک نوار روشن (scanline) را با استفاده از یک pseudo-element یا عنصر داخلی به عرض 40% و یک گرادیانت شفاف متحرک از چپ به راست اجرا می‌کند. نتیجه حس اسکن شدن روی خطوط بارکد را القا می‌کند. می‌توان سرعت، میزان شفافیت و شیب را برای جلوه‌های مختلف تنظیم کرد.

استفاده از CSS variables برای کنترل داینامیک

<div class="barcode-vars" style="--thick: 8px; --gap: 4px;"></div>


.barcode-vars{
  --color: #000;
  width: 320px;
  height: 110px;
  background: repeating-linear-gradient(
    to right,
    var(--color) 0 var(--thick),
    #fff var(--thick) calc(var(--thick) + var(--gap))
  );
  border: 1px solid #aaa;
}

توضیح: CSS variables (متغیرها) امکان تغییر پویا را می‌دهند؛ می‌توانید از JavaScript یا media queries برای تغییر ضخامت (--thick) یا فاصله (--gap) بسته به اندازه نمایشگر یا حالت کاربر استفاده کنید.

دسترس‌پذیری، چاپ و سازگاری

  • متن جایگزین: چون این تنها یک افکت بصری است، اگر اطلاعات مهمی نمایش می‌دهید، متن قابل خواندن را کنار آن قرار دهید.
  • چاپ: رنگ و رزولوشن چاپ روی خوانایی تاثیر دارد؛ بهتر است نسخهٔ چاپی با خطوط واضح و کنتراست بالا تولید شود.
  • اسکن واقعی: برای بارکدهای قابل اسکن از SVG یا تصویر تولیدشده توسط کتابخانه‌های استاندارد استفاده کنید.

جدول خلاصه‌ای از خواص پرکاربرد

خاصیتکاربرد
repeating-linear-gradientساخت خطوط تکرارشونده و ساده
linear-gradientایجاد خطوط با ضخامت متغیر یا افکت سایه
transform / animationایجاد افکت متحرک مانند نوار اسکن

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

  • برای افکت‌های نمایشی از CSS استفاده کنید؛ برای کاربردهای عملی و اسکن بهتر از SVG یا کتابخانه خاص استفاده کنید.
  • از متغیرها برای کنترل پارامترها استفاده کنید تا قابل نگهداری و قابل تنظیم باشد.
  • در صورت نیاز به چاپ یا کنتراست بالا، رنگ‌ها و ضخامت‌ها را آزمایش کنید تا در خروجی چاپی نیز خوانا بماند.
  • ترکیب با انیمیشن‌های ملایم و استفاده از prefers-reduced-motion توصیه می‌شود تا برای کاربرانی که حرکت را محدود می‌کنند مناسب باشد.

مثال نهایی — بهبود برای کاهش حرکت

<div class="barcode-scan reduced-motion">
  <span class="scanline"></span>
</div>

/* CSS (partial) */@media (prefers-reduced-motion: reduce){
  .scanline { animation: none; opacity: 0.5; }
}

توضیح: این قطعه نشان می‌دهد چگونه با استفاده از media query مربوط به prefers-reduced-motion می‌توان انیمیشن را برای کاربران حساس به حرکت غیرفعال کرد. این یک از بهترین شیوه‌های دسترس‌پذیری است.

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

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

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