Menu

CSS Box Shadow: תחביר, spread, inset ודוגמאות

box-shadow מצייר צללים סביב התיבה של אלמנט. למדו את חמשת הערכים (x, y, blur, spread, color), צללים פנימיים עם inset, שכבות של כמה צללים לעומק מציאותי, טבעות פוקוס שנוצרות עם spread, והטעויות שגורמות לצללים להיראות עכורים.

בדף הזה יש עורכים שאפשר להריץ - לערוך, להריץ ולראות את הפלט מיד.

איך 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כל צבע; שחור חצי שקוף נראה בדרך כלל הכי טובצבע הטקסט

מספר האורכים קובע את המשמעות שלהם: שניים הם ההיסטים, שלושה מוסיפים blur, ארבעה מוסיפים spread. נסו:

נסו 0 0 0 4px #f59e0b (טבעת), inset 0 0 12px #2563eb, ו--8px -8px 0 #16a34a.

Spread: טבעות וצללים בצד אחד

Spread משנה את גודל הצל לפני הטשטוש. יוצאים ממנו שני דפוסים:

  • טבעת: בלי היסט, בלי blur, רק spread. בניגוד לגבול, היא לא משנה את גודל האלמנט, ולכן היא מחוון פוקוס טוב (:focus-visible { box-shadow: 0 0 0 3px #2563eb; }).
  • טבעת עם רווח: ערמו spread לבן מתחת ל-spread צבעוני וגדול יותר.
  • צד אחד בלבד: הזיזו את הצל למטה וכווצו אותו עם spread שלילי, כך שהוא מציץ רק מלמטה.

צללים בשכבות לעומק מציאותי

לצללים אמיתיים יש חלק כהה וחד קרוב לאובייקט, וחלק רך וחלש רחוק יותר. שתיים או שלוש שכבות מחקות את זה הרבה יותר טוב מ-blur גדול אחד:

הצל הראשון ברשימה נצבע למעלה. שמרו על צבעי צל של שחור חצי שקוף או גוון כהה של הרקע, אף פעם לא אפור מלא, כדי שהם יכהו את מה שמתחתם.

צללי inset

inset מצייר את הצל בתוך תיבת ה-padding, כאילו המשטח שקוע פנימה. זה מתאים לשדות טקסט, לאזורים שקועים ולכפתורים לחוצים:

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%);
}

צל inset מצויר מעל הרקע אבל מתחת לתוכן. צללים שעוקבים אחרי צורות האותיות במקום אחרי התיבה הם text-shadow.

טעויות נפוצות

  • צללים בשחור מלא ואטום. הם נראים כמו קו מתאר כהה. השתמשו באלפא של 10% עד 30%.
  • blur ענק אחד בשביל עומק. שלבו צל קטן וחד עם צל גדול ורך.
  • צל שנחתך בקצה. אב קדמון עם overflow: hidden חותך אותו; הוסיפו padding לאב הקדמון או העבירו את כלל ה-overflow.
  • blur שלילי. הוא לא תקין, וכל ההצהרה נזרקת.
  • הנפשה של 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?

הוא מגדיל (ערך חיובי) או מקטין (ערך שלילי) את הצל לפני הטשטוש. צל בלי היסט, בלי blur ועם spread של 3px הוא טבעת מלאה של 3px סביב האלמנט.

איך שמים צל רק למטה?

מזיזים אותו למטה ומכווצים אותו עם spread שלילי כך שהצדדים נעלמים: box-shadow: 0 8px 6px -6px rgb(0 0 0 / 40%);.

האם box-shadow משפיע על הפריסה?

לא. צל לא תופס מקום ולא מזיז אלמנטים אחרים, ולכן הוא דרך טובה להוסיף טבעת פוקוס או הרמה ב-hover בלי תזוזה בפריסה. הוא יכול להיחתך על ידי overflow: hidden של אב קדמון.

אפשר להגדיר כמה box shadows?

כן, מפרידים ביניהם בפסיקים. הצל הראשון מצויר למעלה. שכבה של צל קטן וחד יחד עם צל גדול ורך נראית טבעית יותר מצל גדול אחד.

איור של שפות התכנות ב-Coddy

ללמוד תכנות עם Coddy

להתחיל