The CSS Podcast – 017: Shadows
נניח שנשלח אליכם עיצוב ליצירת build, ובעיצוב הזה יש תמונה של חולצה, חתוכה, עם צללית. המעצב/ת אומר/ת לכם שתמונת המוצר דינמית ואפשר לעדכן אותה דרך מערכת ניהול התוכן, ולכן גם צללית המוצר צריכה להיות דינמית. במקום חולצה, התמונה יכולה להיות של כובע שמש, של מכנסי קצרים או של פריט אחר. איך עושים את זה באמצעות CSS?
ל-CSS יש את המאפיינים box-shadow
ו-text-shadow
, אבל התמונה היא לא טקסט, ולכן אי אפשר להשתמש ב-text-shadow
.
אם משתמשים ב-box-shadow
, הצל עומד על התיבה שמסביב, לא סביב החולצה.
למרבה המזל, יש אפשרות אחרת: המסנן drop-shadow()
.
כך תוכלו לעשות בדיוק את מה שהמעצב ביקש.
יש מגוון רחב של אפשרויות ליצירת צללים ב-CSS, וכל אחת מהן מיועדת לתרחיש לדוגמה אחר.
צללית תיבה
המאפיין box-shadow
משמש להוספת צללים לתיבה של רכיב HTML.
הוא פועל ברכיבי בלוק וברכיבים בתוך שורה.
.my-element {
box-shadow: 5px 5px 20px 5px #000;
}
סדר הערכים של box-shadow
הוא:
- הזחה אופקית: מספר חיובי ידחוף את התמונה שמאלה ומספר שלילי ידחוף אותה ימינה.
- הזחה אנכית: מספר חיובי ידחוף את התמונה למטה מלמעלה, ומספר שלילי ידחוף אותה למעלה מלמטה.
- רדיוס טשטוש: מספר גדול יותר יוצר צל מטושטש יותר, ומספר קטן יותר יוצר צל חד יותר.
- Spread radius (אופציונלי): מספר גדול יותר מגדיל את גודל הצל ואילו מספר קטן יותר מקטין אותו, עד שהוא יהיה באותו גודל כמו blur radius אם הוא מוגדר כ-0.
- צבע: כל ערך צבע חוקי. אם לא תגדירו את הערך הזה, המערכת תשתמש בצבע הטקסט המחושב.
כדי להפוך את צללית התיבה לצללית פנימית, במקום לצללית החיצונית שמוגדרת כברירת מחדל, מוסיפים את מילת המפתח inset
לפני המאפיינים האחרים.
/* Outer shadow */
.my-element {
box-shadow: 5px 5px 20px 5px #000;
}
/* Inner shadow */
.my-element {
box-shadow: inset 5px 5px 20px 5px #000;
}
כמה צללים
אפשר להוסיף כמה צללים שרוצים באמצעות box-shadow
.
כדי לעשות זאת, מוסיפים אוסף של קבוצות ערכים מופרדים בפסיקים:
.my-element {
box-shadow: 5px 5px 20px 5px darkslateblue, -5px -5px 20px 5px dodgerblue,
inset 0px 0px 10px 2px darkslategray, inset 0px 0px 20px 10px steelblue;
}
מאפיינים שמשפיעים על box-shadow
הוספת border-radius
לתיבת הטקסט תשפיע גם על צורת הצל של התיבה.
הסיבה לכך היא ש-CSS יוצר צל על סמך צורת התיבה, כאילו אור מופנה אליה.
.my-element {
box-shadow: 0px 0px 20px 5px darkslateblue;
border-radius: 25px;
}
אם התיבה עם box-shadow
נמצאת בקונטיינר עם overflow: hidden
, גם האובייקט של האופלואוס לא יחרוג מהקונטיינר.
<div class="my-parent">
<div class="my-shadow">My shadow is hidden by my parent.</div>
</div>
.my-parent,
.my-shadow {
width: 250px;
height: 250px;
}
.my-shadow {
box-shadow: 0px 0px 20px 5px darkslateblue;
}
.my-parent {
overflow: hidden;
}
צללית טקסט
המאפיין text-shadow
דומה מאוד למאפיין box-shadow
.
הוא פועל רק בצמתים של טקסט.
.my-element {
text-shadow: 3px 3px 3px hotpink;
}
הערכים של text-shadow
זהים לערכים של box-shadow
ובאותו סדר.
ההבדל היחיד הוא של-text-shadow
אין ערך spread
ואין לו מילת מפתח inset
.
כשמוסיפים box-shadow
, הוא חתוך לפי צורת התיבה, אבל text-shadow
לא חתוך.
כלומר, אם הטקסט שקוף לגמרי או למחצה, אפשר לראות דרכו את הצל.
.my-element {
text-shadow: 3px 3px 3px gold;
color: rgb(0 0 0 / 70%);
}
כמה צללים
אפשר להוסיף כמה צללים שרוצים באמצעות text-shadow
, בדיוק כמו עם box-shadow
.
אפשר להוסיף אוסף של ערכים מופרדים בפסיקים, וליצור אפקטים מגניבים של טקסט, כמו טקסט תלת-ממדי.
.my-element {
text-shadow: 1px 1px 0px white,
2px 2px 0px firebrick;
color: darkslategray;
}
הטלת צללית
כדי ליצור צללית שתתאים לעקומות האפשריות של תמונה, משתמשים בפילטר drop-shadow
של CSS.
הצל הזה מוחל על מסכת אלפא, ולכן הוא שימושי מאוד להוספת צל לתמונה חתוכה, כמו במקרה של הקדמה ליחידה הזו.
.my-image {
filter: drop-shadow(0px 0px 10px rgba(0 0 0 / 30%))
}
המסנן drop-shadow
כולל את אותם ערכים כמו המסנן box-shadow
אבל אסור להשתמש במילת המפתח inset
ובערך spread
. אפשר להוסיף כמה צללים שרוצים על ידי הוספת כמה מכונות של ערכי drop-shadow
למאפיין filter
.
כל צל עושה שימוש בצל האחרון כנקודת ייחוס למיקום.
בדיקת ההבנה
בחינת הידע שלכם על צללים
איזה ערך צל שלמטה ייחודי ל-box-shadow
?
inset
inset
היא מילת מפתח שגם היא ייחודית ל-box-shadow
.מותר להשתמש ב-13 צלליות תיבה ברכיב אחד בכל פעם.