كيف تعمل box-shadow
تطلي box-shadow ظلًا حول صندوق حد العنصر. تتبع border-radius، ولا تشغل مساحة في التخطيط، وتحتاج إلى قيمتين على الأقل: مقدار إزاحتها أفقيًا وعموديًا.
الصيغة
box-shadow: [inset] <offset-x> <offset-y> [<blur>] [<spread>] [<color>];
| القيمة | المعنى | الافتراضي |
|---|---|---|
inset | ارسم الظل داخل الصندوق، كمنطقة مضغوطة إلى الداخل | خارجي |
| offset-x | الموجبة تحرك إلى اليمين، والسالبة إلى اليسار | مطلوبة |
| offset-y | الموجبة تحرك إلى الأسفل، والسالبة إلى الأعلى | مطلوبة |
| blur | مدى نعومة الحافة؛ لا يمكن أن يكون سالبًا | 0 (حافة حادة) |
| spread | يكبّر الظل (موجب) أو يصغّره (سالب) | 0 |
| color | أي لون؛ الأسود شبه الشفاف يبدو غالبًا الأفضل | لون النص |
عدد الأطوال يحدد معناها: اثنان هما الإزاحتان، والثالث يضيف التمويه، والرابع يضيف الانتشار. جرّب:
جرّب 0 0 0 4px #f59e0b (حلقة)، وinset 0 0 12px #2563eb، و-8px -8px 0 #16a34a.
الانتشار: الحلقات والظلال من جانب واحد
يغيّر الانتشار حجم الظل قبل التمويه. ينتج عنه نمطان:
- حلقة: بلا إزاحة ولا تمويه، انتشار فقط. على عكس الحد، لا تغيّر حجم العنصر، لذلك هي مؤشر تركيز جيد (
:focus-visible { box-shadow: 0 0 0 3px #2563eb; }). - حلقة مع فجوة: كدّس انتشارًا أبيض تحت انتشار ملون أكبر.
- جانب واحد فقط: حرّك الظل إلى الأسفل وصغّره بانتشار سالب، فلا يظهر إلا من الأسفل.
ظلال متراكبة لعمق واقعي
للظلال الحقيقية جزء داكن حاد قريب من الجسم، وجزء ناعم خافت أبعد. طبقتان أو ثلاث تحاكي ذلك أفضل بكثير من تمويه واحد كبير:
يُطلى الظل الأول في القائمة في الأعلى. اجعل ألوان الظلال أسود شبه شفاف أو درجة داكنة من لون الخلفية، لا رماديًا خالصًا أبدًا، كي تُعتم ما تحتها.
الظلال الداخلية
ترسم inset الظل داخل صندوق الحشو، كأن السطح مضغوط إلى الداخل. يناسب حقول النص والتجاويف والأزرار المضغوطة:
input {
box-shadow: inset 0 1px 3px rgb(0 0 0 / 20%);
}
button:active {
box-shadow: inset 0 3px 6px rgb(0 0 0 / 30%);
}
يُرسم الظل الداخلي فوق الخلفية وتحت المحتوى. أما الظلال التي تتبع أشكال الحروف بدل الصندوق فهي text-shadow.
أخطاء شائعة
- ظلال سوداء خالصة معتمة تمامًا. تبدو كحد داكن. استخدم ألفا بين 10% و30%.
- تمويه ضخم واحد للعمق. كدّس ظلًا صغيرًا حادًا مع ظل كبير ناعم.
- ظل مقصوص عند الحافة. سلف عليه
overflow: hiddenيقصّه؛ أضف حشوًا إلى السلف أو انقل قاعدة overflow. - تمويه سالب. غير صالح ويُتجاهل التصريح كله.
- تحريك
box-shadowعلى عناصر كثيرة. يعيد الطلاء في كل إطار. في الصفحات الثقيلة، حرّكopacityلعنصر زائف يحمل الظل الأكبر بدلًا من ذلك.
الأسئلة الشائعة
ما صيغة box-shadow؟
box-shadow: offset-x offset-y blur spread color;، مثلًا box-shadow: 0 4px 12px 0 rgb(0 0 0 / 15%);. الإزاحتان وحدهما مطلوبتان؛ أضف inset لرسم الظل داخل الصندوق.
ماذا يفعل الانتشار spread في box-shadow؟
يكبّر الظل (القيمة الموجبة) أو يصغّره (القيمة السالبة) قبل تمويهه. الظل الذي بلا إزاحة ولا تمويه مع انتشار 3px حلقة صلبة بعرض 3px حول العنصر.
كيف أضع ظلًا من الأسفل فقط؟
أزِحه إلى الأسفل واسحبه إلى الداخل بانتشار سالب كي تختفي الجوانب: box-shadow: 0 8px 6px -6px rgb(0 0 0 / 40%);.
هل تؤثر box-shadow على التخطيط؟
لا. الظل لا يشغل مساحة ولا يحرّك العناصر الأخرى، ولهذا هو طريقة جيدة لإضافة حلقة تركيز أو رفع عند التمرير من دون أن يتحرك التخطيط. لكن قد يقصّه overflow: hidden على أحد الأسلاف.
هل يمكن وضع عدة ظلال للصندوق؟
نعم، افصل بينها بفواصل. يُرسم الظل الأول في الأعلى. تكديس ظل صغير حاد مع ظل كبير ناعم يبدو أكثر طبيعية من ظل واحد كبير.