Menu

CSS Blur ו-Filter: blur(), grayscale, brightness

filter: blur(5px) מטשטש אלמנט, ו-backdrop-filter: blur() מטשטש את מה שמאחוריו. למדו כל פונקציית פילטר (brightness, contrast, grayscale, sepia, saturate, hue-rotate, invert, drop-shadow) עם מחוונים חיים, איך משלבים אותן, ואת בעיית הקצוות בטשטוש.

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

לטשטש אלמנט

filter: blur() מקבל אורך, רדיוס הטשטוש. ככל שהוא גדול יותר, האלמנט מטושטש יותר:

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

לטשטש את הרקע: backdrop-filter

כדי לטשטש את מה שמאחורי אלמנט (פאנל של זכוכית חלבית מעל תמונה או עמוד), השתמשו ב-backdrop-filter. התוכן של האלמנט עצמו נשאר חד. הוא צריך רקע שקוף כדי שהטשטוש ייראה:

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

כל פונקציות הפילטר, בזמן אמת

הזיזו כל מחוון. השורה שמתחת לתמונה היא ערך ה-filter המדויק, מוכן להעתקה:

רק פונקציות שהזזתם מהערך הנייטרלי שלהן נכתבות, וזה שומר על ערך קצר. brightness(1) או blur(0px) לא משנים כלום, אז אין סיבה לכתוב אותם.

פונקציות פילטר

פונקציהערך נייטרלימה היא עושהדוגמה
blur(r)0טשטוש גאוסיאני ברדיוס rblur(4px)
brightness(n)1כהה יותר מתחת ל-1, בהיר יותר מעליוbrightness(0.7)
contrast(n)1שטוח יותר מתחת ל-1, חד יותר מעליוcontrast(1.3)
grayscale(n)01 (או 100%) אפור לגמריgrayscale(100%)
sepia(n)0גוון חום חמיםsepia(0.6)
saturate(n)10 אפור, מעל 1 חי יותרsaturate(1.5)
hue-rotate(a)0degמזיז כל גוון סביב גלגל הצבעיםhue-rotate(90deg)
invert(n)01 הוא נגטיב צבעוני מלאinvert(1)
opacity(n)1כמו המאפיין opacityopacity(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 והגדילו את התמונה מעט, כך שהקצה הרך נחתך:

.hero { overflow: hidden; }
.hero img { filter: blur(8px); transform: scale(1.1); }

אפקטי hover עם filter

אפשר להחיל transition על filter, כך שקיר לוגואים שעובר מאפור לצבע או כרטיס שמעומעם עד שמרחפים מעליו הם שני כללים:

רחפו מעל אריח (או הגיעו אליו עם 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 שנייה מחליפה את הראשונה.

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

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

להתחיל