Menu

CSS Opacity: אלמנטים שקופים, רקעים ו-fade

opacity הופך אלמנט שלם וכל מה שבתוכו לשקוף, מ-0 (בלתי נראה) עד 1 (אטום). למדו את הערכים, למה opacity מדהה גם את הטקסט ואיך להפוך רק את הרקע לשקוף, opacity: 0 מול visibility ו-display, ו-fade במעבר עכבר.

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

מה opacity עושה

opacity קובע עד כמה אלמנט שקוף: 1 הוא אטום (ברירת המחדל), 0 הוא בלתי נראה, וכל ערך באמצע נותן לרקע להיראות דרכו. הקופסאות למטה יושבות על רקע מפוספס כדי שתוכלו לראות אותו:

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

רקע שקוף, טקסט אטום

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

שני הלוחות הלבנים נותנים לפסים להיראות דרכם באותה מידה. בראשון, הטקסט דוהה יחד עם הלוח. בשני רק צבע הרקע שקוף (rgb(255 255 255 / 0.6), זהה ל-rgba(255, 255, 255, 0.6)), ולכן הטקסט נשאר אטום וקל לקריאה. צבעים עם אלפא מוסברים בדף על צבעים.

ילד לא יכול לברוח מה-opacity של ההורה שלו: opacity: 1 על הילד לא עושה כלום, כי ההורה מצויר כשכבה דהויה אחת שהילד כבר נמצא בתוכה.

ערכים

ערךתוצאה
1 או 100%אטום לגמרי (ברירת מחדל)
0.5 או 50%חצי שקוף
0 או 0%שקוף לגמרי, עדיין בפריסה ולחיץ
1.5, -1נחתכים ל-1 ול-0

opacity עובר בירושה ויזואלית אבל לא כמאפיין: ה-opacity המחושב של ילד נשאר 1, בזמן שהוא מצויר בתוך הורה דהוי.

opacity: 0 מול visibility: hidden מול display: none

שלושתם גורמים לאלמנט להיעלם, אבל הם שונים בכל השאר:

opacity: 0visibility: hiddendisplay: none
תופס מקוםכןכןלא
מקבל לחיצות ופוקוסכןלאלא
נקרא על ידי קוראי מסךכןלאלא
אפשר להפעיל עליו transitionכן, בצורה חלקהמתחלף בקצה אחד, בלי דהייהלא

ההבדל שנושך הוא השורה השנייה. על כפתור עם opacity: 0 עדיין אפשר ללחוץ ולהגיע אליו ב-Tab:

התצוגה שואלת את הדפדפן איזה אלמנט נמצא מתחת לנקודה בתוך כל כפתור מוסתר. הכפתור עם opacity: 0 עונה "clickable"; זה עם visibility: hidden לא. הכפתור Visible מתחיל אחרי שני מקומות ריקים של 150px, כי הכפתור עם display: none הוא היחיד שהחזיר את המקום שלו. כדי להדהות משהו ואז להוציא אותו, הנפישו את opacity והגדירו visibility: hidden בסוף.

fade במעבר עכבר

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

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

נגישות: טקסט דהוי מאבד ניגודיות

הורדת ה-opacity מורידה את הניגודיות. טקסט אפור על לבן עם opacity: 0.5 יכול לרדת הרבה מתחת ליחס 4.5:1 שטקסט רץ צריך. לטקסט משני, בחרו צבע שעומד בדרישות הניגודיות במקום להדהות צבע כהה. לפקדים מושבתים, opacity מופחת הוא סימן נפוץ, אבל שלבו אותו עם המאפיין disabled כדי שגם אי אפשר יהיה להגיע לפקד במקלדת והוא יוכרז כמושבת.

תופעת לוואי: stacking context

כל opacity מתחת ל-1 יוצר stacking context חדש, כמו ש-transform עושה. ילדים עם z-index גבוה נערמים אז רק בתוך האלמנט הדהוי ולא יכולים לעלות מעל אלמנטים שמחוצה לו. אם תפריט נפתח בתוך לוח דהוי מחליק מתחת לאלמנט אחר, זו הסיבה (הדף על z-index מסביר את סדר הערימה).

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

  • להדהות כרטיס כדי להפוך את הרקע שלו לשקוף. גם הטקסט דוהה. השתמשו ב-rgb(... / 0.5) על הרקע.
  • לנסות להפוך ילד לאטום שוב. ה-opacity של ההורה מגביל כל ילד.
  • הסתרה עם opacity: 0 בלבד. האלמנט עדיין מקבל לחיצות ופוקוס. הוסיפו visibility: hidden, או השתמשו ב-display: none (pointer-events: none עוצר לחיצות אבל לא פוקוס מקלדת).
  • לכתוב opacity: 50. opacity הוא בין 0 ל-1; 50 נחתך ל-1. כתבו 0.5 או 50%.
  • טקסט בניגודיות נמוכה בגלל opacity. בדקו את הניגודיות של התוצאה, לא של הצבע המקורי.

שאלות נפוצות

מה opacity עושה ב-CSS?

הוא קובע עד כמה אלמנט שקוף, מ-0 (שקוף לגמרי) עד 1 (אטום לגמרי). הוא חל על כל האלמנט, כולל הטקסט, הגבול, התמונות וכל ילד, כשכבה אחת שטוחה.

איך הופכים רק את הרקע לשקוף, בלי הטקסט?

אל תגעו ב-opacity ותנו לרקע צבע עם ערוץ אלפא: background-color: rgb(37 99 235 / 0.5); או rgba(37, 99, 235, 0.5). הטקסט והילדים נשארים אטומים לגמרי.

האם אלמנט ילד יכול להיות אטום יותר מההורה שלו?

לא. ה-opacity של ההורה חל על כל הקבוצה, ולכן opacity: 1 על ילד לא יכול לבטל אותו. ילד של הורה עם 0.5 מצויר לכל היותר בחצי אטימות. העבירו את השקיפות לצבע הרקע של ההורה במקום.

מה ההבדל בין opacity: 0, visibility: hidden ו-display: none?

opacity: 0 מסתיר את האלמנט, אבל הוא עדיין תופס מקום, אפשר ללחוץ עליו וקוראי מסך קוראים אותו. visibility: hidden שומר את המקום, אבל אי אפשר ללחוץ עליו והוא לא נקרא. display: none מוציא אותו מהפריסה לגמרי.

האם opacity יכול להיות באחוזים?

כן. opacity: 50% זהה ל-opacity: 0.5 בכל הדפדפנים הנוכחיים. ערכים מתחת ל-0 או מעל 1 נחתכים לטווח הזה.

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

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

להתחיל