CSS Houdini הוא מונח-על שמתייחס לקבוצה של ממשקי API ברמה נמוכה שמציגים חלקים ממנוע הרינדור של CSS ומעניקים למפתחים גישה למודל האובייקטים של CSS. זהו שינוי משמעותי בסביבת ה-CSS, כי הוא מאפשר למפתחים להורות לדפדפן איך לקרוא ולנתח CSS בהתאמה אישית, בלי להמתין לספקים של הדפדפנים שיספקו תמיכה מובנית בתכונות האלה. זה כל כך מרגש!
אחת מהתוספות המעניינות ביותר ל-CSS במסגרת Houdini היא Properties and Values API.
ה-API הזה תורם לשיפור המאפיינים המותאמים אישית של ה-CSS (שנקראים גם משתני CSS) בכך שהוא נותן להם משמעות סמנטית (מוגדרת באמצעות תחביר) ואפילו ערכים חלופיים, וכך מאפשר בדיקה של CSS.
כתיבת מאפיינים מותאמים אישית ב-Houdini
הנה דוגמה להגדרת מאפיין מותאם אישית (למשל: משתנה CSS), אבל עכשיו עם תחביר (סוג), ערך ראשוני (חלופה) וערכו של בוליאני בירושה (האם הוא יקבל בירושה את הערך מהורה שלו או לא?). הדרך הנוכחית לעשות זאת היא באמצעות CSS.registerProperty()
ב-JavaScript, אבל בדפדפנים שתומכים בכך אפשר להשתמש ב-@property
:
CSS.registerProperty({ name: '--colorPrimary', syntax: '<color>', initialValue: 'magenta', inherits: false });
@property --colorPrimary { syntax: '<color>'; initial-value: magenta; inherits: false; }
עכשיו אפשר לגשת ל---colorPrimary
כמו לכל מאפיין CSS מותאם אישית אחר, דרך var(--colorPrimary)
. עם זאת, ההבדל הוא ש---colorPrimary
לא נקרא רק כמחרוזת. יש בו נתונים!
ערכים חלופיים
כמו בכל מאפיין מותאם אישית אחר, אפשר לקבל (באמצעות var
) או להגדיר (כתיבה/כתיבה מחדש) ערכים, אבל במאפיינים מותאמים אישית של Houdini, אם מגדירים ערך שקרי בזמן שמבטלים את ההגדרה שלו, מנוע העיבוד של CSS ישלח את הערך הראשוני (ערך ברירת המחדל שלו) במקום להתעלם מהשורה.
דוגמה: המשתנה --colorPrimary
מכיל initial-value
של magenta
. אבל המפתח הגדיר לו את הערך הלא תקין '23'. בלי @property
, המנתח של שירות ה-CSS יתעלם
מהקוד הלא חוקי. עכשיו, המנתח חוזר ל-magenta
. כך ניתן להשתמש בחלופות אמיתיות ולבדוק אותן בתוך ה-CSS. נהדר!
.card {
background-color: var(--colorPrimary); /* magenta */
}
.highlight-card {
--colorPrimary: yellow;
background-color: var(--colorPrimary); /* yellow */
}
.another-card {
--colorPrimary: 23;
background-color: var(--colorPrimary); /* magenta */
}
תחביר
בעזרת תכונת התחביר, עכשיו אפשר לכתוב CSS סמנטי על ידי ציון סוג. הסוגים הנוכחיים המותרים הם:
length
number
percentage
length-percentage
color
image
url
integer
angle
time
resolution
transform-list
transform-function
custom-ident
(מחרוזת מזהה בהתאמה אישית)
הגדרת תחביר מאפשרת לדפדפן לבדוק את הסוג של מאפיינים מותאמים אישית. יש לכך הרבה יתרונות.
כדי להמחיש את הנקודה הזו, אראה לכם איך ליצור אנימציה של שינוי הדרגתי. בשלב זה, אין דרך ליצור אנימציה חלקה (או אינטרפולציה) בין ערכי שיפוע, כי כל הצהרת שיפוע מנותחת כמחרוזת.
בדוגמה הזו, אחוז העצירה של העקומה נע מ-40% ל-100% באמצעות אינטראקציה של עכבר מרחף. אתם אמורים לראות מעבר חלק של הצבע העליון ההדרגתי כלפי מטה.
הדפדפן שמימין תומך ב-Houdini Properties and Values API, ומאפשר מעבר חלק בין עצירות של שיפוע. הדפדפן בצד שמאל לא עושה זאת. הדפדפן שלא תומך בכך יכול להבין את השינוי הזה רק כמחרוזת שמגיעה מנקודה א' לנקודה ב'. אין אפשרות לבצע אינטרפולציה של הערכים, ולכן לא רואים את המעבר החלק.
עם זאת, אם תצהירו על סוג תחביר בזמן כתיבת מאפיינים מותאמים אישית, ואז תשתמשו במאפיינים המותאמים אישית האלה כדי להפעיל את האנימציה, תוכלו לראות את המעבר. אפשר ליצור מופע של המאפיין המותאם אישית --gradPoint
באופן הבא:
@property --gradPoint {
syntax: '<percentage>';
inherits: false;
initial-value: 40%;
}
ואז, כשתרצו להוסיף אנימציה, תוכלו לעדכן את הערך מ-40%
הראשוני ל-100%
:
.post:hover,
.post:focus {
--gradPoint: 100%;
}
כך תהיה לך אפשרות ליצור את המעבר החלק בין הצבעים.
סיכום
הכלל @property
הופך טכנולוגיה חדשה לנגישה עוד יותר, כי הוא מאפשר לכתוב CSS עם משמעות סמנטית בתוך שירות ה-CSS עצמו. למידע נוסף על CSS Houdini ועל ה-Properties and Value API, עיינו במקורות המידע הבאים:
- האם Houdini מוכן?
- חומר עזר בנושא Houdini ב-MDN
- מאפיינים מותאמים אישית חכמים יותר עם ה-API החדש של Houdini
- תור הבעיות של Houdini CSSWG
תמונה של Cristian Escobar ב-Unsplash.