سایه دادن در CSS
سایهها در طراحی وب ابزار قدرتمندی برای افزودن عمق، تاکید و جداسازی عناصر از پسزمینه هستند. در CSS چندین روش برای تولید سایه وجود دارد که پرکاربردترینها عبارتاند از box-shadow، text-shadow و فیلتر drop-shadow. در این مقاله به صورت عملیاتی و با مثالهای واقعی هرکدام را توضیح میدهیم، نکات بهینهسازی و دسترسی را میآوریم و الگوهای طراحی محبوب مثل Material و Neumorphism را بررسی میکنیم.
اصول و پارامترهای اصلی box-shadow
قواعد کلی box-shadow به شکل زیر است:
box-shadow: offset-x offset-y blur-radius spread-radius color inset;در اینجا:
- offset-x و offset-y: جابجایی سایه نسبت به جعبه.
- blur-radius: میزان محوشدگی؛ هرچه بیشتر باشد سایه نرمتر میشود.
- spread-radius: گسترش یا فشردگی سایه.
- color: رنگ سایه، معمولاً از rgba برای شفافیت استفاده میشود.
- inset: اختیاری؛ سایه را داخل جعبه تولید میکند.
| پارامتر | توضیح | مثال |
|---|---|---|
| offset-x | افزایش/کاهش افقی | 10px |
| offset-y | افزایش/کاهش عمودی | 5px |
| blur-radius | مقدار محوشدگی | 15px |
| spread-radius | گسترش سایه | 0px |
| color | رنگ با شفافیت | rgba(0,0,0,0.3) |
| inset | سایه درون عنصر | inset |
مثال پایه — سایه برای کارت
.card {
background: #fff;
border-radius: 8px;
padding: 20px;
box-shadow: 0 8px 24px rgba(0,0,0,0.12);
}این نمونه یک کارت با سایه ملایم میسازد که جلوهٔ شناوری به آن میدهد. استفاده از rgba به شما اجازه میدهد شفافیت سایه را کنترل کنید تا در پسزمینههای مختلف مناسب باشد.
سایهٔ تو در تو (inset) و چندگانه
.panel {
background: #f8f9fa;
box-shadow:
inset 0 2px 4px rgba(0,0,0,0.06),
0 6px 18px rgba(0,0,0,0.08);
}در اینجا دو سایه تعریف شده: یکی داخلی برای دادن احساس عمق در داخل پنل و دیگری خارجی برای جدا کردن آن از پسزمینه. ترتیب نوشتن مهم است؛ سایهها از چپ به راست اعمال میشوند.
سایه متن — text-shadow
h1 {
color: #222;
text-shadow: 1px 1px 2px rgba(0,0,0,0.25);
}برای تاکید عنوانها یا افکتهای خاص از text-shadow استفاده کنید. اما احتیاط: سایهٔ زیاد روی متن میتواند خوانایی را کاهش دهد — مخصوصاً در اندازههای کوچک یا روی پسزمینههای شلوغ.
فیلتر drop-shadow برای عناصر تصویری
.img {
filter: drop-shadow(0 10px 20px rgba(0,0,0,0.2));
}فیلتر drop-shadow() برای عناصر غیرمستطیلی (مثل تصاویر با پسزمینه شفاف) بهتر عمل میکند زیرا بر اساس شکل ظاهر پیکسلها سایه تولید میکند. این روش برای آیکونها و تصاویر SVG مناسب است.
نکات عملکردی و دسترسی
- سایههای بسیار نرم (blur بالا) میتوانند روی GPU رندر شوند و در برخی مرورگرها هزینهٔ پردازشی داشته باشند؛ برای افکتهای سنگین از تصاویر یا SVG استفاده کنید یا سایهها را بهینه کنید.
- برای دسترسی، هرگاه سایه را بهعنوان نشانگر تمرکز (focus) به کار میبرید، مطمئن شوید معادل متنی یا دیگر نشانهها نیز وجود دارد. از حذف outline پیشفرض بدون جایگزین مناسب خودداری کنید.
- در حالت Dark Mode شدت و رنگ سایهها را تنظیم کنید (مثلاً سایهٔ تیرهتر با کمی شفافیت کمتر یا سایهٔ روشن برای جلوهٔ برآمده).
الگوهای طراحی با سایه
- Material Design: از سایههای چندلایه با مقادیر ثابت برای نشاندادن ارتفاع استفاده میشود.
- Neumorphism: ترکیب سایههای روشن و تیره برای ایجاد حس برجستگی/فرورفتگی؛ دقت کنید که این سبک ممکن است خوانایی و دسترسی را کاهش دهد.
- Flat + Subtle Shadow: سایههای خیلی نرم و با شفافیت کم برای جداسازی ملایم بین لایهها.
استفاده از متغیرهای CSS برای مدیریت سایهها
:root {
--shadow-1: 0 4px 10px rgba(0,0,0,0.08);
--shadow-2: 0 8px 24px rgba(0,0,0,0.12);
}
.card { box-shadow: var(--shadow-2); }
.card:hover { box-shadow: var(--shadow-1); transform: translateY(-4px); }تعریف سایهها با متغیر باعث میشود در سراسر پروژه هماهنگی حفظ شود و تغییر تم یا حالت تاریک آسانتر شود.
مثال پیشرفته — جایگزینی برای outline هنگام فوکوس
.btn {
background: #0069ff;
color: #fff;
padding: 10px 14px;
border-radius: 6px;
border: none;
}
.btn:focus {
outline: none;
box-shadow: 0 0 0 4px rgba(0,105,255,0.18);
}در این مثال به جای حذف کامل outline، یک سایهٔ واضح و قابل تشخیص اضافه شده که برای کاربران صفحهخوان و کیبورد قابل دیدن است. این روش دسترسپذیری را بهتر حفظ میکند.
خطاهای متداول و راهحلها
- استفاده از سایهٔ کاملاً سیاه و پررنگ: باعث مصنوعی شدن طراحی میشود؛ از
rgbaبا شفافیت استفاده کنید. - سایهٔ متن برای خوانایی پایین: برای متنهای متراکم یا اندازه کوچک از سایهٔ متن خودداری کنید.
- پشتهٔ سایههای طولانی: اگر لازم است از چندین سایه استفاده کنید، آنها را منطقی نامگذاری یا با متغیر مدیریت کنید تا پیچیدگی کم شود.
خلاصه بهترین شیوهها
- از سایهها برای ایجاد سلسلهمراتب بصری استفاده کنید، نه تزئین صرف.
- شفافیت و سایز سایه را بر اساس پسزمینه و حالت (Light/Dark) تنظیم کنید.
- برای تصاویر غیرمستطیلی از
filter: drop-shadow()بهره ببرید. - دقت کنید که اثرات ظریف معمولاً حرفهایتر و کاربرپسندترند.
سایهها ابزاری ساده اما قدرتمند در جعبهابزار هر طراح وب هستند. با درک پارامترها و توجه به دسترسی و عملکرد، میتوانید با چند خط CSS عمق و کیفیت بصری صفحات خود را بهطور چشمگیری بهبود دهید.
آیا این مطلب برای شما مفید بود ؟




