ساخت افکت بارکد با 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، این تکنیکها سریع، کمحجم و انعطافپذیر هستند.
آیا این مطلب برای شما مفید بود ؟




