box-shadow הוא מאפיין ה-CSS שמוסיף צללים נופלים, זוהר ושקעים פנימיים לכל אלמנט. זה המנוף הגדול ביותר לתת לעיצוב שטוח תחושת *הגבהה*: כרטיסים מתרוממים מהדף, חלונות מודאליים מרחפים מעל התוכן, כפתורים מרגישים לחיצים.
הטריק הוא שצל *טוב* הוא כמעט אף פעם לא שכבה אחת. צללים בעולם האמיתי רכים יותר ויש להם החזר אור סביבתי: רוב מערכות העיצוב (Material, iOS, Tailwind) עורמות 2 עד 3 הצהרות box-shadow עם היסטים ואטימויות שונים. לכתוב אותן ביד זו עבודה פרכנית; מחולל מאפשר לכוונן כל שכבה חזותית ולראות את התוצאה המשולבת בזמן אמת.
המחולל של Coddy תומך במספר בלתי מוגבל של שכבות, בצללים *חיצוניים* ו*פנימיים*, בצבע ובאטימות לכל שכבה, ובתבניות מוכנות לדפוסים הנפוצים ביותר: כרטיסים עדינים, צללים חדים, זוהר מותג, שקעים פנימיים ומשטחים נאומורפיים. העתיקו את ה-CSS והדביקו אותו ישר בגיליון הסגנונות: בלי העלאה, בלי חשבון, בלי סימן מים.
מה חשוב לדעת על box-shadow ב-CSS
התחביר הוא box-shadow: [inset] <x> <y> <blur> <spread> <color>. inset שם את הצל *בתוך* האלמנט; בלעדיו הצל נופל מחוצה לו.
*טשטוש* (blur) מרכך את הקצה: ערכים גדולים יותר יוצרים צל מפוזר יותר. *התפשטות* (spread) מגדילה או מקטינה את הצל לפני שהטשטוש מוחל (ערכים שליליים מכווצים אותו, שימושי להרמות פנימיות רכות).
כמה צללים מופרדים בפסיקים ונערמים מאחור לפנים לפי סדר הכתיבה: הראשון ברשימה יושב *מתחת* לאלה שאחריו בתוצאה הסופית.
השתמשו ב-rgba() (או ב-hsla()) לצבע כדי שתוכלו לכוונן את האטימות לכל שכבה. שחור טהור באטימות נמוכה נקרא כצל אפור רך; שחור טהור באטימות מלאה נקרא כגזיר קשה.
box-shadow מורכב על ידי ה-GPU והוא אחד השדרוגים החזותיים הזולים ביותר שאפשר להחיל. הוא לא משפיע על הפריסה: האלמנט שומר על הגודל והמיקום המקוריים שלו.
איך לעצב box-shadow
1
התחילו מתבנית
בחרו תבנית שמתאימה לתחושה שאתם רוצים: כרטיס עדין, הגבהה רכה, צל חד, זוהר מותג, שקע פנימי או נאומורפי. התבניות הן נקודות התחלה טובות שאפשר לכוונן.
2
כווננו את השכבה הפעילה
גררו את המחוונים של היסט X/Y, טשטוש, התפשטות, צבע ואטימות. התצוגה המקדימה מתעדכנת בזמן אמת. אטימות נמוכה וטשטוש גבוה נקראים כצללים *רכים* יותר.
3
ערמו שכבות נוספות
לחצו על *הוספת שכבה* כדי לערום צל שני. עומק מציאותי משתמש כמעט תמיד בשתי שכבות: אחת קצרה והדוקה (צל המגע) ואחת ארוכה ורכה (הצל הסביבתי).
4
הפעילו inset לשקעים פנימיים
הפעלת *Inset* מציירת את הצל בתוך האלמנט במקום סביבו. שלבו עם צל חיצוני עדין לאפקט של כפתור לחוץ.
5
העתיקו את ה-CSS
כשהתצוגה המקדימה תואמת לעיצוב שלכם, לחצו על *העתקת CSS*. הדביקו את התוצאה בגיליון הסגנונות: הכלל שנוצר כולל את כל השכבות הפעילות.
מדריך מהיר ל-box-shadow
כל ערך ב-box-shadow: x y blur spread color והתפקיד שלו.
ערך
השפעה
טווח אופייני
היסט X
מזיז את הצל אופקית; חיובי = ימינה
−40px עד 40px
היסט Y
מזיז את הצל אנכית; חיובי = למטה
0px עד 40px לאור טבעי
טשטוש
מרכך את קצה הצל
0px עד 80px
התפשטות
מגדיל או מקטין לפני שהטשטוש מוחל
−30px עד 30px
צבע
כל צבע CSS, אבל rgba() מאפשר לכוונן אטימות לכל שכבה
צל הדוק עם טשטוש נמוך מגדיר את נקודת המגע, וצל ארוך ורך יותר נותן רושם של אור סביבתי. זה הדפוס שרוב מערכות העיצוב המודרניות משתמשות בו.
זוהר מותג
זוהר צבעוני רך
box-shadow:0024px4pxrgba(108,140,255,0.45);
קבעו את X ו-Y לאפס כדי שהזוהר יקרין באופן שווה. התפשטות חיובית קטנה מעבה את הזוהר לפני שהטשטוש מרכך אותו. השתמשו בזה במשורה: זוהר צבעוני מושך הרבה תשומת לב.
צללים פנימיים מצוירים בתוך האלמנט. צל רך אחד נותן רושם של שקע; קו פנימי דק מוסיף גבול פנימי עדין להגדרה.
טעויות נפוצות ב-box-shadow
להשתמש בשחור טהור באטימות גבוהה. זה נקרא כגזיר קשה, לא כצל. הורידו את האטימות ל-0.06 עד 0.18 להגבהה שנראית טבעית.
לשכוח את היסט ה-Y. צל עם X=0 ו-Y=0 יושב *מאחורי* האלמנט באופן שווה: מתאים לזוהר, לא נכון לכרטיס שאמור להיראות כמרחף.
לערום יותר מדי שכבות. שלוש מספיקות בדרך כלל; עשר יוצרות בלגן עכור ומטושטש ועלות ציור מורגשת.
להשתמש ב-filter: drop-shadow() וב-box-shadow לסירוגין כאילו הם אותו דבר. drop-shadow() עוקב אחרי מסכת השקיפות של SVG או תמונה, שימושי לצורות לא סדירות, אבל box-shadow מהיר ונקי יותר לאלמנטים מלבניים.
לשכוח ש-box-shadow מתעלם מ-overflow: hidden על האלמנט עצמו. אם להורה יש overflow: hidden, הצל נחתך.
שאלות נפוצות על CSS box-shadow
מה המשמעות של כל ערך ב-box-shadow?
box-shadow: x y blur spread color. שני הראשונים הם היסטים; *blur* מרכך את הקצה; *spread* משנה את הגודל לפני הטשטוש; הצבע הוא כל צבע CSS (השתמשו ב-rgba() לשליטה באטימות). הוסיפו inset בהתחלה כדי לשים את הצל בתוך האלמנט.
איך עורמים כמה צללים בכלל אחד?
הפרידו כל צל בפסיק. הם מצוירים מאחור לפנים לפי סדר הכתיבה, כך שהצל הראשון שהוצהר נמצא בסוף *מתחת* לאלה שאחריו. השתמשו בזה כדי לשלב צל מגע הדוק עם צל סביבתי רך.
מה ההבדל בין box-shadow לבין filter: drop-shadow()?
box-shadow עוקב אחרי המלבן התוחם של האלמנט ומהיר לציור. drop-shadow() עוקב אחרי ערוץ השקיפות של מה שהוא מוחל עליו (מעולה ל-SVG ול-PNG שקופים) אבל עולה יותר ברינדור. השתמשו ב-box-shadow לכרטיסים ולכפתורים; השתמשו ב-drop-shadow() לצורות לא סדירות.
למה הצל שלי נראה מפוקסל?
או שהטשטוש קטן מאוד (טשטוש של 0px הוא צל חד מעצם ההגדרה) או שהאלמנט עובר שינוי קנה מידה. הגדילו את ערך הטשטוש או חפשו transform: scale() איפשהו במעלה העץ.
האם box-shadow משפיע על הפריסה?
לא. צללים מצוירים מחוץ לקופסה של האלמנט אבל לא דוחפים תוכן שכן. אם אתם צריכים שההורה ישאיר מקום לצל, תנו להורה padding או overflow: visible.