Box Shadow چیست؟ (مبانی علمی)
ویژگی box-shadow در CSS یکی از قدرتمندترین ابزارها برای ایجاد عمق بصری (Visual Hierarchy) در طراحی رابط کاربری است. این ویژگی به طراحان اجازه میدهد تا بدون استفاده از تصاویر اضافی، افکتهای سایه را به فریم (Frame) یک عنصر HTML اضافه کنند. از نظر روانشناسی بصری، سایهها به کاربر میگویند کدام المان "بالاتر" از سطح صفحه قرار دارد و تعامل با آن (مانند دکمهها) مهمتر است. در معماریهای مدرن مثل Material Design و Fluent Design، سایهها نقش کلیدی در تفکیک لایهها ایفا میکنند.
فرمول و ساختار کد
ساختار استاندارد سایه در CSS شامل ۵ پارامتر اصلی و یک پارامتر اختیاری (Inset) است:
box-shadow: [inset] offset-x offset-y blur-radius spread-radius color;مثالهای کاربردی در طراحی ایرانی
کارت محصول دیجیکالا
در فروشگاههای بزرگ ایرانی، کارت محصولات معمولاً یک سایه بسیار محو (0 4px 12px rgba(0,0,0,0.08)) دارند که هنگام هاور شدن (Hover) کمی پررنگتر میشود تا حس تعامل را القا کند.
پنل کاربری نئومورفیسم
برخی داشبوردهای مدرن مالی از سبک "Soft UI" استفاده میکنند که ترکیبی از دو سایه روشن و تیره (یکی مثبت و یکی منفی) است تا دکمهها حالتی "برجسته از دل صفحه" داشته باشند.
مودال (Modal) و پاپآپ
پنجرههای پاپآپ نیاز به سایه عمیق با Spread زیاد دارند تا کاملاً از محتوای پسزمینه جدا شوند و تمرکز کاربر را جلب کنند.
خطاهای رایج (Khataha-ye Rayej)
- ×
استفاده از رنگ سیاه خالص (
#000) با شفافیت بالا. بهتر است از رنگهای سرمهای یا خاکستری تیره با شفافیت کم استفاده کنید تا سایه "چرک" نشود. - ×
فراموش کردن جهت نور. اگر همه سایهها به سمت پایین هستند، نباید ناگهان یک سایه به سمت بالا باشد (مگر اینکه منبع نور خاصی داشته باشید).
- ×
اعمال Blur Radius بسیار زیاد روی تعداد زیادی المان. این کار باعث درگیر شدن شدید GPU و کند شدن اسکرول در موبایلهای قدیمی میشود.
- ×
عدم استفاده از
transitionبرای تغییر وضعیت سایه در حالت Hover، که باعث پرش ناگهانی بصری میشود.
سوالات متداول
تفاوت Inset و حالت عادی چیست؟
inset سایه را به داخل کادر میبرد و حس فرو رفتگی یا گودی ایجاد میکند (مثل فیلدهای ورودی فرم).چگونه چند سایه همزمان داشته باشیم؟
,) میتوانید چندین لایه سایه تعریف کنید. مثلاً: box-shadow: 0 0 5px red, 0 0 10px blue;بهترین تنظیمات برای سایه "طبیعی" چیست؟
0px 4px 10px rgba(0,0,0,0.15).