افکت روشنایی تدریجی متن با CSS
افکت روشنایی (یا درخشش) روی متن یکی از محبوبترین جلوههای بصری در طراحی وب است. این افکت میتواند توجه کاربر را جلب کند، تمرکز بصری ایجاد کند و حس مدرن یا نئونی به رابط بدهد. در این مقاله به صورت گامبهگام روشهای مختلف برای ساخت افکت روشنایی تدریجی متن با CSS، نکات بهینهسازی، دسترسی و نمونههای عملی را بررسی میکنیم.
ابزارهای اصلی
- text-shadow: سادهترین و سریعترین روش برای ایجاد درخشش.
- filter و drop-shadow: برای المانهای تکراری یا تصاویر متن.
- background-clip: text و گرادینت متحرک: برای نورپردازیهای پیچیدهتر و sweep.
- pseudo-elements (:before/:after) و mix-blend-mode: برای کنترل بهتر و کارایی.
- transition و @keyframes: برای تدریجیسازی و انیمیشن.
مثال 1 — درخشش ساده با hover و transition
.glow {
color: #fff;
text-shadow: 0 0 6px rgba(255,255,255,0.6);
transition: text-shadow 300ms ease;
}
.glow:hover {
text-shadow:
0 0 8px rgba(255,255,255,0.9),
0 0 20px rgba(0,150,255,0.6);
}شرح: این نمونه یک کلاس پایه (.glow) تعریف میکند که یک text-shadow ملایم دارد و هنگام hover با transition افزایش مییابد تا روشنایی تدریجی شکل بگیرد. از چندین text-shadow در حالت hover برای عمق بیشتر استفاده شده است.
مثال 2 — pulsating glow با keyframes
.pulse {
color: #0ff;
text-shadow: 0 0 6px rgba(0,255,255,0.6);
animation: pulseGlow 2s infinite ease-in-out;
}
@keyframes pulseGlow {
0% {
text-shadow: 0 0 4px rgba(0,255,255,0.4);
opacity: 0.95;
}
50% {
text-shadow: 0 0 24px rgba(0,255,255,0.9), 0 0 40px rgba(0,150,255,0.5);
opacity: 1;
}
100% {
text-shadow: 0 0 4px rgba(0,255,255,0.4);
opacity: 0.95;
}
}شرح: انیمیشن keyframes یک پالس ملایم ایجاد میکند که در طول زمان شدت text-shadow تغییر میکند. این روش برای عناوین یا آیکونهایی که باید توجه را به صورت متناوب جلب کنند مناسب است.
مثال 3 — نور sweep با background-clip و gradient (اثر حرفهای)
.sweep {
font-weight: 800;
font-size: 48px;
color: #111;
background: linear-gradient(90deg, #fff 0%, #fff 30%, rgba(255,255,255,0.0) 50%);
background-size: 200% 100%;
-webkit-background-clip: text;
background-clip: text;
color: transparent;
animation: sweep 2.5s infinite;
}
@keyframes sweep {
0% { background-position: 200% 0%; }
100% { background-position: -50% 0%; }
}شرح: این تکنیک متن را با گرادینت سفید پر میکند و با background-clip: text گرادینت را فقط داخل حروف نشان میدهد. حرکت گرادینت با انیمیشن باعث ایجاد نور عبوری (sweep) میشود که حس روشنایی تدریجی و پویا ایجاد مینماید.
بهبود عملکرد و رندر
- text-shadow متعدد میتواند هزینهٔ رندر بالایی داشته باشد؛ از سایههای زیاد برای متنهای زیادی در یک صفحه پرهیز کنید.
- برای انیمیشنهای سنگین، از transform و opacity استفاده کنید چون GPU-accelerated هستند؛ هرچند برای درخشش متن اغلب text-shadow لازم است.
- در صورت نیاز به افکت پیچیده ولی سبکتر، از pseudo-element با background و mix-blend-mode: screen استفاده کنید تا فقط یک لایه تصویری حرکت کند نه خود متن.
- در صورت امکان از prefers-reduced-motion پشتیبانی کنید تا کاربران حساس به حرکت تجربهٔ آرامتری داشته باشند.
نمونه بهینهتر با pseudo-element
.title {
position: relative;
color: #fff;
z-index: 1;
}
.title::before {
content: "";
position: absolute;
inset: 0;
background: linear-gradient(90deg, rgba(255,255,255,0.0), rgba(255,255,255,0.8), rgba(255,255,255,0.0));
mix-blend-mode: screen;
transform: translateX(-100%);
transition: transform 1s ease;
z-index: 0;
pointer-events: none;
}
.title:hover::before {
transform: translateX(100%);
}شرح: این روش یک pseudo-element ایجاد میکند که روی متن حرکت میکند و با mix-blend-mode روشنایی را به متن اضافه میکند. چون فقط یک لایه حرکت میکند، در برخی سناریوها کارایی بهتری نسبت به تغییر مکرر text-shadow دارد.
دسترسی و تجربه کاربری
- تبااین رنگی: مطمئن شوید پسزمینه و متن در همۀ حالتها خوانایی کافی دارند؛ افکت نباید جای محتوای واقعی را بگیرد.
- prefers-reduced-motion: برای کاربران با حساسیت به حرکت، انیمیشنها را غیرفعال یا ساده کنید.
- قابلیت انتخاب متن: در صورت نیاز میتوانید pointer-events یا user-select را تنظیم کنید تا متن همچنان انتخابپذیر بماند.
پشتیبانی مرورگر
| ویژگی | پشتیبانی عمومی |
|---|---|
| text-shadow | پشتیبانی قوی در تمام مرورگرهای مدرن |
| background-clip: text | پشتیبانی در کروم، فایرفاکس، سافاری (در برخی نسخهها -webkit- نیاز است) |
| mix-blend-mode | پشتیبانی نسبتاً خوب اما ممکن است در برخی مرورگرها رفتار متفاوت داشته باشد |
موارد کاربرد و نکات نهایی
- استفاده در هدرها و hero sections برای جلب توجه.
- افکتهای hover برای دکمهها و لینکهای مهم؛ از افکتهای ثابت برای خوانایی بهتر جلوگیری کنید.
- برای تولید حالت نئونی، رنگهای شدید و چندین text-shadow با رنگهای مختلف ترکیب کنید.
- همیشه تست روی موبایل و دسکتاپ انجام دهید و بار پردازشی را بسنجید.
خلاصهٔ کاربردی
برای ایجاد افکت روشنایی تدریجی متن با CSS، سریعترین راه استفاده از text-shadow و transition است؛ برای افکتهای پیچیدهتر میتوان از گرادینت با background-clip یا pseudo-element با mix-blend-mode بهره برد. بهینهسازی، پشتیبانی از prefers-reduced-motion و تضمین خوانایی از نکات حیاتیاند.
آیا این مطلب برای شما مفید بود ؟




