מעטפת CSS: 2023!

כותרת CSS Wrapped

סיכום השנה של CSS: ‏2023!

וואו! ‫2023 הייתה שנה משמעותית ל-CSS!

מ-#Interop2023 ועד להשקות חדשות רבות בתחום ה-CSS וממשקי המשתמש, שמאפשרות למפתחים יכולות שפעם נחשבו לבלתי אפשריות בפלטפורמת האינטרנט. עכשיו, כל דפדפן מודרני תומך בשאילתות של קונטיינרים, ב-subgrid, בסלקטור :has() ובמגוון רחב של פונקציות ומרחבי צבעים חדשים. יש לנו תמיכה ב-Chrome באנימציות מבוססות גלילה שמבוססות רק על CSS, ובמעברים חלקים בין תצוגות אינטרנט באמצעות מעברים בין תצוגות. בנוסף, יש כל כך הרבה פרימיטיבים חדשים שנוספו כדי לשפר את חוויית המפתחים, כמו CSS nesting וסגנונות scoped.

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

היסודות הארכיטקטוניים

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

פונקציות טריגונומטריות

Browser Support

  • Chrome: 111.
  • Edge: 111.
  • Firefox: 108.
  • Safari: 15.4.

Source

ב-Chrome 111 נוספה תמיכה בפונקציות הטריגונומטריות sin(),‏ cos(),‏ tan(),‏ asin(),‏ acos(),‏ atan() ו-atan2(), כך שהן זמינות בכל המנועים העיקריים. הפונקציות האלה שימושיות מאוד למטרות של אנימציה ופריסה. לדוגמה, עכשיו הרבה יותר קל לסדר רכיבים במעגל סביב מרכז נבחר.

הדגמה של פונקציות טריגונומטריות

מידע נוסף על הפונקציות הטריגונומטריות ב-CSS

בחירה מורכבת של כל פריט n-*

Browser Support

  • Chrome: 111.
  • Edge: 111.
  • Firefox: 113.
  • Safari: 9.

בעזרת הסלקטור של פסאודו-המחלקות :nth-child() אפשר לבחור רכיבים ב-DOM לפי האינדקס שלהם. באמצעות An+B מיקרו-תחביר, אפשר לשלוט בדיוק באילו רכיבים רוצים לבחור.

כברירת מחדל, פסאודו-אלמנטים של :nth-*() לוקחים בחשבון את כל רכיבי הצאצא. החל מ-Chrome 111, אפשר להעביר רשימת בוררים אל :nth-child() ו-:nth-last-child(). כך תוכלו לסנן מראש את רשימת הילדים לפני ש-An+B יבצע את הפעולה.

בדמו הבא, הלוגיקה של 3n+1 מוחלת רק על הבובות הקטנות על ידי סינון מראש באמצעות of .small. משתמשים בתפריטים הנפתחים כדי לשנות באופן דינמי את הסלקטור שבו נעשה שימוש.

הדגמה של בחירה מורכבת של nth-*

מידע נוסף על בחירות מורכבות של nth-* ‎

היקף

Browser Support

  • Chrome: 118.
  • Edge: 118.
  • Firefox: behind a flag.
  • Safari: 17.4.

Source

ב-Chrome 118 נוספה תמיכה ב-@scope, כלל at שמאפשר להגדיר את ההתאמה של בורר לעץ משנה ספציפי של המסמך. בעזרת סגנון מוגבל, אפשר להיות מאוד ספציפיים לגבי האלמנטים שבוחרים בלי לכתוב סלקטורים ספציפיים מדי או לקשר אותם באופן הדוק למבנה ה-DOM.

עץ משנה עם היקף מוגדר על ידי שורש היקף (הגבול העליון) ומגבלת היקף אופציונלית (הגבול התחתון).

@scope (.card) {  } /* scoping root */
@scope (.card) to (.card__content) {  } /* scoping root + scoping limit*/

כללי סגנון שמוצבים בתוך בלוק היקף יחולו רק על רכיבים בתוך עץ המשנה שהוגדר. לדוגמה, כלל הסגנון הבא שמוגדר בהיקף מצומצם מכוון רק לרכיבי <img> שנמצאים בין רכיב .card לבין כל רכיב מוטמע שתואם לסלקטור [data-component].

@scope (.card) to ([data-component]) {
  img {  }
}

בהדגמה הבאה, הרכיבים <img> ברכיב הקרוסלה לא תואמים בגלל מגבלת ההיקף שהוחלה.

צילום מסך של הדגמה של היקף

צילום מסך לדוגמה של ההדגמה של @scope

הדגמה של קריינות בשידור חי במשחק $Scope

הדגמה של @scope CSS

מידע נוסף על @scope זמין במאמר איך משתמשים ב-@scope כדי להגביל את טווח ההגעה של בוררים. במאמר הזה נסביר על :scope selector, איך המערכת מטפלת בספציפיות, על היקפים ללא prelude ואיך ה-cascade מושפע מ@scope.

קינון

Browser Support

  • Chrome: 120.
  • Edge: 120.
  • Firefox: 117.
  • Safari: 17.2.

Source

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

dl {
  /* dt styles */
  
  dt {
    /* dl dt styles */
  }

  dd {
    /* dl dd styles */
  }
}

/* same as */
dt {
  /* dt styles */
}

dl dt {
  /* dl dt styles */
}

dl dd {
  /* dl dd styles */
}

הקלטת מסך של קינון

הדגמה של קינון

שינוי בורר ההיררכיה המקוננת כדי להכריע מי המנצח בתחרות

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

מידע נוסף על קינון

Subgrid

Browser Support

  • Chrome: 117.
  • Edge: 117.
  • Firefox: 71.
  • Safari: 16.

Source

שירות CSS subgrid מאפשר ליצור פריסות מורכבות יותר עם התאמה טובה יותר בין פריסות צאצא. הוא מאפשר לרשת שנמצאת בתוך רשת אחרת לאמץ את השורות והעמודות של הרשת החיצונית כשורות ועמודות משלה, באמצעות הערך subgrid בשורות או בעמודות של הרשת.

Subgrid Screencast

הדגמה חיה של רשת משנה

הכותרת, גוף המסמך והכותרות התחתונות מיושרים לגדלים הדינמיים של הרכיבים האחים שלהם.

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

מידע נוסף על רשתות משנה

טיפוגרפיה

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

Initial-letter

Browser Support

  • Chrome: 110.
  • Edge: 110.
  • Firefox: not supported.
  • Safari: 9.

Source

המאפיין initial-letter הושק בתחילת השנה בגרסה 110 של Chrome. זהו מאפיין CSS קטן אך עוצמתי שקובע את הסגנון של מיקום האותיות הראשונות. אפשר להציב את האותיות במצב מונמך או מוגבה. המאפיין מקבל שני ארגומנטים: הראשון קובע את עומק ההזחה של האות לתוך הפסקה המתאימה, והשני קובע את גובה ההזחה של האות מעל הפסקה. אפשר גם לשלב בין שתי האפשרויות, כמו בהדגמה הבאה.

צילום מסך של האות הראשונה

צילום מסך של הדגמה של אות ראשונית

הדגמה של אות ראשונית

כדי לראות את השינוי, משנים את הערכים של initial-letter עבור רכיב פסאודו ::first-letter.

מידע נוסף על initial-letter

text-wrap: balance and pretty

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

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

הוספת גלישת טקסט להקלטת מסך

הדגמה חיה של גלישת טקסט

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

מידע נוסף על text-wrap: balance

צבע

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

HD Color Spaces (Color Level 4)

Browser Support

  • Chrome: 111.
  • Edge: 111.
  • Firefox: 113.
  • Safari: 15.

Source

Browser Support

  • Chrome: 111.
  • Edge: 111.
  • Firefox: 113.
  • Safari: 15.

Source

מהחומרה ועד התוכנה, מה-CSS ועד לאורות המהבהבים – המחשבים שלנו צריכים לעבוד קשה כדי לנסות לייצג צבעים בצורה טובה כמו העיניים שלנו. בשנת 2023 הוספנו צבעים חדשים, עוד צבעים, מרחבי צבעים חדשים, פונקציות צבעים ויכולות חדשות.

מעכשיו אפשר להשתמש ב-CSS ובצבע כדי: – לבדוק אם חומרת המסך של המשתמשים תומכת בצבעי HDR בטווח רחב. – בודקים אם הדפדפן של המשתמש מבין תחביר צבעים כמו Oklch או Display P3. – אפשר לציין צבעי HDR ב-Oklab,‏ Oklch,‏ HWB,‏ Display P3,‏ Rec.2020,‏ XYZ ועוד. ‫- ליצור שינויי צבע הדרגתיים עם צבעי HDR, ‫- לבצע אינטרפולציה של שינויי צבע הדרגתיים במרחבי צבעים חלופיים. – ערבוב צבעים עם color-mix(). – ליצור וריאציות של צבעים באמצעות תחביר צבעים יחסי.

הקלטת מסך בצבע 4

הדגמת צבע 4

בהדגמה הבאה אפשר להשוות בין ההשפעות של הערכים `balance` ו-`pretty` על כותרת ועל פסקה, על ידי גרירת פס ההזזה. נסו לתרגם את ההדגמה לשפה אחרת!

מידע נוסף על צבע 4 ומרחבי צבע

פונקציית color-mix

Browser Support

  • Chrome: 111.
  • Edge: 111.
  • Firefox: 113.
  • Safari: 16.2.

Source

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

הקלטת מסך של color-mix()

הדגמה של color-mix()

הדגמה מאפשרת לכם לבחור שני צבעים באמצעות בוחר הצבעים, מרחב הצבעים וכמה מכל צבע צריך להיות דומיננטי בתערובת.

אפשר לחשוב על color-mix() כעל נקודה בזמן מתוך מעבר הדרגתי. אם מעבר הדרגתי מציג את כל השלבים שנדרשים כדי לעבור מכחול ללבן, color-mix() מציג רק שלב אחד. הדברים מסתבכים כשמתחילים להתייחס למרחבי צבעים ולומדים עד כמה מרחב הצבעים של הערבוב יכול להיות שונה מהתוצאות.

מידע נוסף על color-mix()‎

תחביר של צבעים יחסיים

תחביר צבעים יחסי (RCS) הוא שיטה משלימה לשיטה color-mix() ליצירת וריאציות של צבעים. היא קצת יותר חזקה מ-color-mix() אבל היא גם מייצגת אסטרטגיה שונה לעבודה עם צבעים. ב-color-mix() אפשר לערבב צבע לבן כדי להבהיר צבע, ואילו ב-RCS יש גישה מדויקת לערוץ הבהירות ואפשרות להשתמש ב-calc() בערוץ כדי להפחית או להגדיל את הבהירות באופן פרוגרמטי.

הקלטת מסך ב-RCS

הדגמה חיה של RCS

משנים את הצבע, משנים את הסצנות. כל אחת מהן משתמשת בתחביר צבע יחסי כדי ליצור וריאציות של צבע הבסיס.

ב-RCS אפשר לבצע שינויים יחסיים ומוחלטים בצבע. שינוי יחסי הוא שינוי שבו לוקחים את הערך הנוכחי של הרוויה או הבהירות ומשנים אותו באמצעות calc(). שינוי מוחלט הוא שינוי שבו מחליפים ערך של ערוץ בערך חדש לגמרי, כמו הגדרת אטימות של 50%. התחביר הזה מספק כלים משמעותיים ליצירת ערכות נושא, וריאציות בזמן אמת ועוד.

מידע נוסף על תחביר של צבעים יחסיים

עיצוב רספונסיבי

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

שאילתות בנוגע לגודל מאגר

Browser Support

  • Chrome: 105.
  • Edge: 105.
  • Firefox: 110.
  • Safari: 16.

Source

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

כדי להשתמש בתכונה הזו, קודם צריך להגדיר את המאפיין containment ברכיב שמבצעים עליו שאילתה, ואז, בדומה לשאילתת מדיה, משתמשים ב-@container עם פרמטרי הגודל כדי להחיל את הסגנונות. בנוסף לשאילתות של מאגרי תגים, מקבלים גם את הגדלים של שאילתות מאגרי התגים. בהדגמה הבאה, גודל שאילתת המאגר cqi (שמייצג את הגודל של המאגר בתוך השורה) משמש להגדרת הגודל של כותרת הכרטיס.

@container Screencast

@container Demo

מידע נוסף על שימוש בשאילתות של מאגרי תגים

שאילתות של מאגרי סגנונות

Browser Support

  • Chrome: 111.
  • Edge: 111.
  • Firefox: not supported.
  • Safari: 18.

שאילתות סגנון הוטמעו באופן חלקי ב-Chrome 111. בשלב הזה, באמצעות שאילתות סגנון אפשר לשאול על הערך של מאפיינים מותאמים אישית ברכיב אב כשמשתמשים ב-@container style(). לדוגמה, אפשר לשלוח שאילתה כדי לבדוק אם ערך של מאפיין מותאם אישית קיים או מוגדר לערך מסוים, כמו @container style(--rain: true).

צילום מסך של שאילתת סגנון

צילום מסך של הדמיה של שאילתות של מאגרי סגנונות בכרטיסי מזג אוויר

הדגמה של שאילתת סגנון

משנים את הצבע, משנים את הסצנות. כל אחת מהן משתמשת בתחביר צבע יחסי כדי ליצור וריאציות של צבע הבסיס.

זה נשמע דומה לשימוש בשמות מחלקות ב-CSS, אבל לשאילתות סגנון יש כמה יתרונות. היתרון הראשון הוא שבעזרת שאילתות סגנון אפשר לעדכן את הערך ב-CSS לפי הצורך למצבי פסאודו. בנוסף, בגרסאות עתידיות של ההטמעה, תוכלו לשאול על טווחים של ערכים כדי לקבוע את הסגנון שהוחל, כמו style(60 <= --weather <= 70), וסגנון שמבוסס על צמדי מאפיין-ערך כמו style(font-style: italic).

מידע נוסף על שימוש בשאילתות סגנון

:has() selector

Browser Support

  • Chrome: 105.
  • Edge: 105.
  • Firefox: 121.
  • Safari: 15.4.

Source

במשך כמעט 20 שנה, מפתחים ביקשו להוסיף ל-CSS 'סלקטור הורה'. עם בורר :has() שנכלל בגרסה 105 של Chrome, אפשר לעשות את זה עכשיו. לדוגמה, שימוש ב-.card:has(img.hero) יבחר את רכיבי .card שיש להם תמונת גיבור כרכיב צאצא.

צילום מסך של הדגמה של ‎:has()‎

צילום מסך לדוגמה של ההדגמה של ‎ :has()‎

:has() Live Demo

הדגמה של CSS :has(): כרטיס עם תמונה או בלי תמונה

מכיוון ש-:has() מקבל רשימה של סלקטורים יחסיים כארגומנט, אפשר לבחור הרבה יותר מרכיב האב. באמצעות קומבינטורים שונים של CSS, אפשר לא רק לעלות בעץ ה-DOM, אלא גם לבצע בחירות צדדיות. לדוגמה, li:has(+ li:hover) יבחר את הרכיב <li> שקודם לרכיב <li> שמרחפים מעליו כרגע.

‫:has() Screencast

הדגמה של ‎:has()‎

הדגמה של CSS :has(): Dock

מידע נוסף על הסלקטור :has() ב-CSS

עדכון שאילתת מדיה

Browser Support

  • Chrome: 113.
  • Edge: 113.
  • Firefox: 102.
  • Safari: 17.

Source

שאילתת המדיה update מאפשרת להתאים את ממשק המשתמש לקצב הרענון של המכשיר. התכונה יכולה לדווח על ערך של fast, slow או none, שקשור ליכולות של מכשירים שונים.

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

עדכון של Screencast

עדכון ההדגמה

בוחרים באחת מאפשרויות הבחירה כדי לדמות ערך של מהירות עדכון ולראות איך זה משפיע על הברווז.

מידע נוסף על@media (update)

סקריפט של שאילתת מדיה

Browser Support

  • Chrome: 120.
  • Edge: 120.
  • Firefox: 113.
  • Safari: 17.

Source

אפשר להשתמש בשאילתת המדיה של הסקריפט כדי לבדוק אם JavaScript זמין. זה מאוד שימושי לשיפור הדרגתי. לפני שאילתת המדיה הזו, אחת מהאסטרטגיות לזיהוי הזמינות של JavaScript הייתה להציב מחלקה nojs ב-HTML ולהסיר אותה באמצעות JavaScript. אפשר להסיר את הסקריפטים האלה כי עכשיו יש ל-CSS דרך לזהות JavaScript ולבצע התאמות בהתאם.

כאן מוסבר איך להפעיל ולהשבית JavaScript בדף לצורך בדיקה באמצעות כלי הפיתוח ל-Chrome.

הקלטת מסך של כתיבת סקריפט

הדגמה של כתיבת סקריפטים

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

מידע נוסף על סקריפטים

שאילתת מדיה עם שקיפות מופחתת

Browser Support

  • Chrome: 118.
  • Edge: 118.
  • Firefox: behind a flag.
  • Safari: not supported.

Source

ממשקים לא אטומים עלולים לגרום לכאבי ראש או להיות קשים לצפייה עבור אנשים עם ליקויי ראייה שונים. לכן במערכות Windows,‏ macOS ו-iOS יש העדפות מערכת שמאפשרות להפחית את השקיפות בממשק המשתמש או להסיר אותה. שאילתת המדיה הזו של prefers-reduced-transparency מתאימה לשאילתות מדיה אחרות של העדפות, שמאפשרות לכם להיות יצירתיים וגם להתאים את האתר למשתמשים.

הקלטת מסך עם שקיפות מופחתת

הדגמה של שקיפות מופחתת

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

מידע נוסף על@media (prefers-reduced-transparency)

אינטראקציה

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

הצגת מעברים

Browser Support

  • Chrome: 111.
  • Edge: 111.
  • Firefox Technology Preview: supported.
  • Safari: 18.

Source

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

בבסיס של View Transitions API נמצאת הפונקציה document.startViewTranstion. מעבירים פונקציה שמעדכנת את ה-DOM למצב החדש, וה-API מטפל בכל השאר. הוא עושה את זה על ידי צילום תמונת מצב לפני ואחרי, ואז מעבר בין שתי התמונות. באמצעות CSS אפשר לקבוע מה יצולם, ואפשר גם להתאים אישית את האופן שבו התמונות האלה יוצגו באנימציה.

הקלטת מסך של VT

הדגמת VT

הדגמה של מעברים בין תצוגות

ה-API של מעברי תצוגה לאפליקציות דף יחיד הושק ב-Chrome 111. מידע נוסף על מעברים בין תצוגות

פונקציית שיכוך לינארית

Browser Support

  • Chrome: 113.
  • Edge: 113.
  • Firefox: 112.
  • Safari: 17.2.

Source

אל תתבלבלו משם הפונקציה. הפונקציה linear() (לא להתבלבל עם מילת המפתח linear) מאפשרת ליצור פונקציות מורכבות של מעבר הדרגתי בצורה פשוטה, אבל יש פה פשרה כי מאבדים קצת דיוק.

לפני linear(), שהושקה ב-Chrome 113, לא הייתה אפשרות ליצור אפקטים של קפיצה או של קפיץ ב-CSS. הודות ל-linear(), אפשר להעריך את ההאצות וההאטות האלה על ידי פישוט שלהן לסדרת נקודות, ואז לבצע אינטרפולציה לינארית בין הנקודות האלה.

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

הקלטת מסך עם מעבר לינארי

הדגמה של מעבר לינארי

הדגמה של linear() שירות CSS

מידע נוסף על linear() כדי ליצור עקומות linear(), משתמשים במחולל ההאצה הליניארית.

סיום הגלילה

Browser Support

  • Chrome: 114.
  • Edge: 114.
  • Firefox: 109.
  • Safari: not supported.

Source

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

הקלטת מסך של Scrollend

הדגמה של Scrollend

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

מידע נוסף על scrollend

אנימציות שמופעלות בגלילה

Browser Support

  • Chrome: 115.
  • Edge: 115.
  • Firefox: behind a flag.
  • Safari: 26.

Source

אנימציות מבוססות-גלילה הן תכונה מעניינת שזמינה מגרסה Chrome 115. המאפיינים האלה מאפשרים לכם לקחת אנימציית CSS קיימת או אנימציה שנוצרה באמצעות Web Animations API ולשייך אותה להיסט הגלילה של רכיב גלילה. כשגוללים למעלה ולמטה – או שמאלה וימינה בסרגל גלילה אופקי – האנימציה המקושרת תתקדם ותחזור אחורה בתגובה ישירה.

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

SDA Screencast

הדגמה של SDA

הדגמה של אנימציות מבוססות גלילה ב-CSS: ציר זמן של גלילה

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

הדגמה של SDA

הדגמה חיה של SDA

הדגמה של אנימציות מבוססות גלילה ב-CSS: צפייה בציר הזמן

אנימציות מבוססות-גלילה פועלות עם אנימציות CSS ועם Web Animations API, כך שאפשר ליהנות מכל היתרונות של ממשקי ה-API האלה. זה כולל את היכולת להפעיל את האנימציות האלה מחוץ ל-thread הראשי. עכשיו אפשר להפעיל אנימציות חלקות במיוחד שמבוססות על גלילה, מחוץ ל-thread הראשי, באמצעות כמה שורות קוד נוספות בלבד.

כדי לקבל מידע נוסף על אנימציות מבוססות גלילה, אפשר לעיין במאמר הזה עם כל הפרטים או להיכנס לכתובת scroll-driven-animations.style שכוללת הרבה הדגמות.

צירוף ציר זמן שמושהה

Browser Support

  • Chrome: 116.
  • Edge: 116.
  • Firefox: not supported.
  • Safari: 26.

Source

כשמחילים אנימציה מבוססת-גלילה באמצעות CSS, מנגנון החיפוש שמוצא את רכיב הגלילה השולט תמיד עולה בעץ ה-DOM, ולכן הוא מוגבל רק לרכיבי גלילה ברמת צאצא. אבל לעיתים קרובות, הרכיב שצריך להנפיש הוא לא צאצא של רכיב הגלילה, אלא רכיב שנמצא בעץ משנה שונה לחלוטין.

כדי לאפשר לרכיב המונפש למצוא ציר זמן של גלילה עם שם של רכיב שאינו רכיב אב, צריך להשתמש במאפיין timeline-scope ברכיב אב משותף. כך אפשר לצרף את scroll-timeline או view-timeline שהוגדרו עם השם הזה, ולהרחיב את ההיקף שלהם. אחרי שמגדירים את זה, כל ילד או ילדה של אותו הורה משותף יכולים להשתמש בציר הזמן עם השם הזה.

הדמיה של עץ משנה של DOM עם היקף ציר זמן שמשמש הורה משותף
אם timeline-scope מוצהר באלמנט ההורה המשותף, אפשר למצוא את scroll-timeline שהוצהר באלמנט הגלילה על ידי האלמנט שמשתמש בו כ-animation-timeline

הקלטת מסך לדוגמה

הדגמה בשידור חי

הדגמה של אנימציות מבוססות גלילה ב-CSS: צירוף ציר זמן מושהה

מידע נוסף על timeline-scope

אנימציות של מאפיינים נפרדים

יכולת חדשה נוספת שהשקנו ב-2023 היא האפשרות להנפיש אנימציות נפרדות, כמו אנימציה של מעבר אל display: none וממנו. החל מ-Chrome 116, אפשר להשתמש ב-display וב-content-visibility בכללי keyframe. אפשר גם להעביר כל נכס נפרד בנקודת ה-50% ולא בנקודת ה-0%. אפשר להשיג את זה באמצעות המאפיין transition-behavior עם מילת המפתח allow-discrete, או במאפיין transition כקיצור דרך.

Discrete Anim. הקלטת מסך

Discrete Anim. הדגמה (דמו)

מידע נוסף על מעבר בין אנימציות נפרדות

@starting-style

Browser Support

  • Chrome: 117.
  • Edge: 117.
  • Firefox: 129.
  • Safari: 17.5.

Source

כלל ה-CSS‏ @starting-style מבוסס על יכולות חדשות באינטרנט ליצירת אנימציה אל display: none וממנו. הכלל הזה מאפשר להגדיר לאלמנט סגנון 'לפני פתיחה' שהדפדפן יכול לחפש לפני שהאלמנט נפתח בדף. האפשרות הזו שימושית מאוד לאנימציות כניסה, ולאנימציה של אלמנטים כמו חלון קופץ או תיבת דו-שיח. הוא יכול להיות שימושי גם כשיוצרים רכיב ורוצים להוסיף לו אפשרות של אנימציה בכניסה. בדוגמה הבאה, מאפיין popover (ראו את הקטע הבא) מונפש כך שיוצג בשכבה העליונה בצורה חלקה מחוץ לאזור התצוגה.

@starting-style Screencast

הדגמה של @starting-style

מידע נוסף על @starting-style ועל אנימציות אחרות של כניסה.

שכבת-על

Browser Support

  • Chrome: 117.
  • Edge: 117.
  • Firefox: not supported.
  • Safari: not supported.

Source

אפשר להוסיף את מאפיין ה-CSS החדש overlay למעבר כדי לאפשר לאלמנטים עם סגנונות של השכבה העליונה – כמו popover ו-dialog – לצאת מהשכבה העליונה בצורה חלקה. אם לא תעבירו את השכבה העליונה, הרכיב יחזור מיד למצב של חיתוך, שינוי וכיסוי, ולא תראו את המעבר. באופן דומה, overlay מאפשרת ל-::backdrop לצאת בצורה חלקה כשהיא מתווספת לרכיב בשכבה העליונה.

הקלטת מסך של שכבת-על

הדגמה של שכבת-על

מידע נוסף על שכבת-על ועל אנימציות אחרות של יציאה

רכיבים

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

חלון קופץ

Browser Support

  • Chrome: 114.
  • Edge: 114.
  • Firefox: 125.
  • Safari: 17.

Source

בעזרת Popover API אפשר ליצור אלמנטים שמוצגים מעל שאר הדף. למשל, תפריטים, אפשרויות בחירה ותיאורי כלים. כדי ליצור חלון קופץ פשוט, מוסיפים את המאפיין popover ואת id לרכיב שמופיע בחלון הקופץ, ומקשרים את המאפיין id ללחצן ההפעלה באמצעות popovertarget="my-popover". ה-API של חלונות קופצים תומך ב:

  • קידום לשכבה העליונה. החלונות הקופצים יופיעו בשכבה נפרדת מעל שאר הדף, כך שלא תצטרכו להתעסק עם z-index.
  • פונקציונליות של סגירה בלחיצה מחוץ לחלון. לחיצה מחוץ לאזור של ה-popover תסגור אותו ותחזיר את המיקוד.
  • ניהול ברירת המחדל של המיקוד. פתיחת ה-popover גורמת לכך שה-tab stop הבא יהיה בתוך ה-popover.
  • מקשי קיצור נגישים. הקשה על המקש esc או החלפה כפולה של המצב תסגור את הבועה ותחזיר את המיקוד.
  • קישורי רכיבים נגישים. קישור סמנטי של רכיב חלון קופץ ללחצן להצגת החלון הקופץ.

חלון קופץ של הקלטת מסך

הדגמה חיה של חלון קופץ

קווי הפרדה אופקיים ברכיב select

שינוי קטן נוסף ב-HTML שהוטמע ב-Chrome וב-Safari השנה הוא היכולת להוסיף רכיבי קו אופקי (תגי <hr>) לרכיבי <select> כדי ליצור הפרדה ויזואלית בין חלקי התוכן. בעבר, אם הייתם מציבים תג <hr> בתוך תג select, הוא פשוט לא היה מוצג. אבל השנה, גם Safari וגם Chrome תומכים בתכונה הזו, ומאפשרים הפרדה טובה יותר של תוכן ברכיבי <select>.

בחירת צילום מסך

צילום מסך של HR בבחירה עם עיצוב בהיר וכהה ב-Chrome

בחירה באפשרות 'הדגמה חיה'

מידע נוסף על שימוש בתג hr בבורר

:user-valid ו-invalid pseudo classes

Browser Support

  • Chrome: 119.
  • Edge: 119.
  • Firefox: 88.
  • Safari: 16.5.

Source

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

עם הסלקטורים החדשים האלה, כבר לא צריך לכתוב קוד עם מצב כדי לעקוב אחרי קלט שמשתמש שינה.

‫:user-* הקלטת מסך

‫:user-* הדגמה חיה

מידע נוסף על שימוש ברכיבי פסאודו של אימות טפסים מסוג user-*

אקורדיון בלעדי

Browser Support

  • Chrome: 120.
  • Edge: 120.
  • Firefox: 130.
  • Safari: 17.2.

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

בגרסה 120 של Chrome נוספה תמיכה במאפיין name ברכיבי <details>. כשמשתמשים במאפיין הזה, כמה רכיבי <details> עם אותו ערך name יוצרים קבוצה סמנטית. אפשר לפתוח רק רכיב אחד בקבוצה בכל פעם: כשפותחים אחד מרכיבי <details> בקבוצה, הרכיב הקודם שנפתח ייסגר אוטומטית. סוג האקורדיון הזה נקרא אקורדיון בלעדי.

הדגמה בלעדית של אקורדיון

רכיבי <details> שהם חלק מאקורדיון בלעדי לא חייבים להיות רכיבים מאותו סוג. יכול להיות שהם מפוזרים במסמך.

בשנים האחרונות, ובמיוחד בשנת 2023, חל שיפור משמעותי ב-CSS. אם אתם חדשים בתחום של CSS או שאתם רוצים לרענן את הידע שלכם בנושאים הבסיסיים, כדאי לעיין בקורס החינמי שלנו בנושא לימוד CSS ובקורסים החינמיים האחרים שמוצעים באתר web.dev.

מאחלים לכם עונת חגים שמחה ומקווים שתהיה לכם הזדמנות לשלב בעבודה שלכם בקרוב חלק מהתכונות החדשות והמבריקות האלה של CSS וממשק המשתמש!

⇾ צוות DevRel של ממשק המשתמש של Chrome,