filter: blur(5px) מטשטש אלמנט, ו-backdrop-filter: blur() מטשטש את מה שמאחוריו. למדו כל פונקציית פילטר (brightness, contrast, grayscale, sepia, saturate, hue-rotate, invert, drop-shadow) עם מחוונים חיים, איך משלבים אותן, ואת בעיית הקצוות בטשטוש.
▶בדף הזה יש עורכים שאפשר להריץ - לערוך, להריץ ולראות את הפלט מיד.
filter עובד על כל אלמנט, לא רק על תמונות: div מטושטש מטשטש גם את הטקסט, הגבול והילדים שלו. שימו לב לקצוות הרכים של התמונות המטושטשות: הטשטוש מפזר את התמונה החוצה ומערבב פנימה את האזור השקוף שסביבה. הפתרון מופיע בהמשך, תחת "בעיית הקצוות המטושטשים".
לטשטש את הרקע: backdrop-filter
כדי לטשטש את מה שמאחורי אלמנט (פאנל של זכוכית חלבית מעל תמונה או עמוד), השתמשו ב-backdrop-filter. התוכן של האלמנט עצמו נשאר חד. הוא צריך רקע שקוף כדי שהטשטוש ייראה:
הפסים והעיגולים חדים סביב הפאנל ומטושטשים מאחוריו, בזמן שהטקסט של הפאנל לא נפגע. שמרו על טקסט קריא: גוון בהיר או כהה יותר בצבע הרקע עוזר על תמונות עמוסות.
כל פונקציות הפילטר, בזמן אמת
הזיזו כל מחוון. השורה שמתחת לתמונה היא ערך ה-filter המדויק, מוכן להעתקה:
רק פונקציות שהזזתם מהערך הנייטרלי שלהן נכתבות, וזה שומר על ערך קצר. brightness(1) או blur(0px) לא משנים כלום, אז אין סיבה לכתוב אותם.
פונקציות פילטר
פונקציה
ערך נייטרלי
מה היא עושה
דוגמה
blur(r)
0
טשטוש גאוסיאני ברדיוס r
blur(4px)
brightness(n)
1
כהה יותר מתחת ל-1, בהיר יותר מעליו
brightness(0.7)
contrast(n)
1
שטוח יותר מתחת ל-1, חד יותר מעליו
contrast(1.3)
grayscale(n)
0
1 (או 100%) אפור לגמרי
grayscale(100%)
sepia(n)
0
גוון חום חמים
sepia(0.6)
saturate(n)
1
0 אפור, מעל 1 חי יותר
saturate(1.5)
hue-rotate(a)
0deg
מזיז כל גוון סביב גלגל הצבעים
hue-rotate(90deg)
invert(n)
0
1 הוא נגטיב צבעוני מלא
invert(1)
opacity(n)
1
כמו המאפיין opacity
opacity(0.5)
drop-shadow(x y blur color)
צל שעוקב אחרי הצורה
drop-shadow(2px 4px 6px rgb(0 0 0 / 0.3))
מספרים יכולים להיות גם אחוזים (grayscale(100%) שווה ל-grayscale(1)). כמה פונקציות נכנסות בערך אחד, מופרדות ברווחים, ומוחלות לפי הסדר: filter: grayscale(1) sepia(1) נותן גוון חום, בעוד ש-sepia(1) grayscale(1) מסתיים באפור רגיל.
drop-shadow עוקב אחרי הצורה
box-shadow הוא תמיד מלבן (לכל היותר עם פינות מעוגלות). drop-shadow() מצויר לפי הפיקסלים הנראים, כך שאייקון שקוף מקבל צל עם קו המתאר של האייקון:
הכוכב הראשון מטיל צל מרובע מהתיבה התוחמת הבלתי נראית שלו. השני מטיל צל בצורת כוכב. בניגוד ל-box-shadow, ל-drop-shadow() אין ערך spread ואין inset; עמוד ה-box-shadow מסביר אותם.
בעיית הקצוות המטושטשים
תמונה מטושטשת דוהה בקצוות שלה, כי הטשטוש מושך פנימה את הפיקסלים השקופים שסביבה. כדי לשמור על קצה חד (למשל ברקע ראשי מטושטש), שימו את התמונה בתוך מכל עם overflow: hidden והגדילו את התמונה מעט, כך שהקצה הרך נחתך:
רחפו מעל אריח (או הגיעו אליו עם Tab) והצבע שלו יופיע בהדרגה.
טוב לדעת
ביצועים. רדיוסי טשטוש גדולים על שטחים גדולים הם היקרים ביותר, במיוחד backdrop-filter על אלמנטים שזזים או נגללים. בדקו בטלפון.
קריאות. לעולם אל תטשטשו טקסט שאנשים צריכים לקרוא, ובדקו ניגודיות של טקסט מעל פאנל חלבי.
שכבות. כל filter שאינו none יוצר stacking context חדש והופך ל-containing block של צאצאים עם position: fixed, כמו transform.
טעויות נפוצות
filter: blur(5). הרדיוס צריך יחידה: blur(5px).
שימוש ב-filter: blur() לפאנל חלבי. הוא מטשטש את הטקסט של הפאנל עצמו. השתמשו ב-backdrop-filter עם רקע שקוף.
backdrop-filter שלא מראה כלום. הרקע של האלמנט חייב להיות שקוף לפחות בחלקו, וחייב להיות משהו מאחוריו.
שתי הצהרות filter. השנייה מחליפה את הראשונה. שימו את כל הפונקציות בערך אחד.
צללים בצורת תיבה על אייקונים שקופים. השתמשו ב-filter: drop-shadow() במקום box-shadow.
שאלות נפוצות
איך מטשטשים אלמנט ב-CSS?
משתמשים ב-filter: blur(5px);. האורך הוא רדיוס הטשטוש: 0 חד, וערכים גדולים יותר מטושטשים יותר. הוא מטשטש את האלמנט ואת כל מה שבתוכו, כולל הטקסט והתמונות שלו.
איך מטשטשים את הרקע שמאחורי אלמנט?
משתמשים ב-backdrop-filter: blur(10px); על האלמנט, עם רקע שקוף חלקית כמו rgb(255 255 255 / 0.5). התוכן של האלמנט עצמו נשאר חד, ומה שמאחוריו מטושטש: אפקט הזכוכית החלבית.
מה ההבדל בין drop-shadow() ל-box-shadow?
box-shadow תמיד עוקב אחרי התיבה המלבנית של האלמנט. filter: drop-shadow() עוקב אחרי הצורה הנראית, כולל אזורים שקופים של PNG או SVG, כך שלצל של אייקון יש את קו המתאר של האייקון.
איך הופכים תמונה לשחור לבן ב-CSS?
משתמשים ב-filter: grayscale(100%); (או grayscale(1)). הוסיפו transition ו-filter: grayscale(0) ב-hover כדי להחזיר את הצבע.
אפשר להשתמש בכמה פילטרים בבת אחת?
כן, כתבו אותם מופרדים ברווחים: filter: grayscale(1) brightness(1.2) blur(1px);. הם מוחלים לפי הסדר, כך שהסדר יכול לשנות את התוצאה. הצהרת filter שנייה מחליפה את הראשונה.