כאשר לומדים את העקרונות של CSS בסיסי, מלמדים לכתוב סגנונות מודולריים, ניתנים לשימוש חוזר ותיאוריים כדי להבטיח תחזוקה. אבל כאשר מפתחים מתערבים ביישומים מהעולם האמיתי, לעתים קרובות זה מרגיש בלתי אפשרי להוסיף תכונות ממשק משתמש מבלי שסגנונות ידלפו לאזורים לא מכוונים. נושא זה הופך לעתים קרובות לכדור שלג ללופ המגשימה את עצמה; סגנונות המוגדרים תיאורטית לרכיב או מחלקה אחד מתחילים להופיע היכן שהם לא שייכים. זה מאלץ את המפתח ליצור בוררים ספציפיים עוד יותר כדי לעקוף את הסגנונות שדלפו, ואז בטעות יעקפו סגנונות גלובליים, וכן הלאה. מוסכמות שמות מחלקות נוקשות, כגון BEM, הן פתרון תיאורטי אחד לבעיה זו. מתודולוגיית BEM (Block, Element, Modifier) ​​היא דרך שיטתית למתן שמות למחלקות CSS כדי להבטיח שימוש חוזר ומבנה בתוך קובצי CSS. מתן שמות למוסכמות כמו זה יכול להפחית עומס קוגניטיבי על ידי מינוף שפת התחום לתיאור אלמנטים ומצבם, ואם מיושמים נכון, יכול להפוך סגנונות ליישומים גדולים לקלים יותר לתחזוקה. בעולם האמיתי, לעומת זאת, זה לא תמיד עובד ככה. סדרי עדיפויות יכולים להשתנות, ועם השינוי, היישום הופך לבלתי עקבי. שינויים קטנים במבנה ה-HTML עשויים לדרוש גרסאות רבות של שם מחלקות CSS. עם יישומי קצה אינטראקטיביים במיוחד, שמות מחלקות העוקבים אחר דפוס BEM עלולים להפוך לארוכים ומסורבלים (למשל, app-user-overview__status--מאמת), ואי הקפדה מלאה על כללי השמות שוברת את מבנה המערכת, ובכך שוללת את היתרונות שלה. בהתחשב באתגרים הללו, אין זה פלא שמפתחים פנו למסגרת, Tailwind היא מסגרת ה-CSS הפופולרית ביותר. במקום לנסות להילחם במה שנראה כמו מלחמת ספציפיות בלתי ניתנת לניצחון בין סגנונות, קל יותר לוותר על Cascade CSS ולהשתמש בכלים המבטיחים בידוד מוחלט. מפתחים נשענים יותר על כלי עזר איך אנחנו יודעים שחלק מהמפתחים מעוניינים להימנע מסגנונות מדורגים? זוהי עלייתם של כלי עבודה קדמיים "מודרניים" - כמו מסגרות CSS-in-JS - שתוכננו במיוחד למטרה זו. עבודה עם סגנונות מבודדים המותאמים היטב לרכיבים ספציפיים יכולה להיראות כמו משב רוח צח. זה מסיר את הצורך בשמות דברים - עדיין אחת המשימות החזיתיות השנואות והגוזלות זמן - ומאפשר למפתחים להיות פרודוקטיביים מבלי להבין או למנף את היתרונות של הורשת CSS. אבל ביטול ה-CSS Cascade מגיע עם בעיות משלו. לדוגמה, חיבור סגנונות ב-JavaScript דורש תצורות בנייה כבדות ולעיתים קרובות מוביל לסגנונות המתערבבים בצורה מביכה עם סימון רכיבים או HTML. במקום מוסכמות שמות שנשקלו בקפידה, אנו מאפשרים לבנות כלים ליצירה אוטומטית של בוררים ומזהים עבורנו (למשל, .jsx-3130221066), מה שמחייב מפתחים להתעדכן בעוד פסאודו-שפה בפני עצמה. (כאילו העומס הקוגניטיבי של הבנת מה כל השפעות השימוש של הרכיב שלך לא הספיק כבר!) הפשטה נוספת של העבודה של מתן שמות למחלקות לכלים פירושה שניפוי באגים בסיסי מוגבל לרוב לגרסאות יישומים ספציפיות שנערכו לפיתוח, במקום למנף את תכונות הדפדפן המקוריות התומכות באגים חי, כגון כלים למפתחים. זה כמעט כמו שאנחנו צריכים לפתח כלים כדי לנפות באגים בכלים שבהם אנחנו משתמשים כדי להפשט את מה שהרשת כבר מספקת - הכל כדי לברוח מה"כאב" של כתיבת CSS סטנדרטי. למרבה המזל, תכונות ה-CSS המודרניות לא רק הופכות את כתיבת ה-CSS הסטנדרטי לגמיש יותר אלא גם נותנות למפתחים כמונו הרבה יותר כוח לנהל את המפל ולגרום לו לעבוד עבורנו. שכבות CSS Cascade הן דוגמה מצוינת, אבל יש עוד תכונה שזוכה לחוסר תשומת לב מפתיע - למרות שזה משתנה עכשיו, לאחר שהיא הפכה לאחרונה לתואמת Baseline. ה-CSS @scope At-Rule אני מחשיב את ה-CSS @scope at-rule כתרופה פוטנציאלית לסוג החרדה הנגרמת על ידי דליפת סגנון שכיסינו, כזו שאינה מאלצת אותנו להתפשר על יתרונות האינטרנט המקוריים להפשטות וכלי בנייה נוספים. "ה-@scope CSS at-rule מאפשר לך לבחור אלמנטים בתתי עצי DOM ספציפיים, למקד לאלמנטים בדיוק מבלי לכתוב בוררים ספציפיים מדי שקשה לעקוף, ומבלי לחבר את הבוררים שלך בצורה הדוקה מדי למבנה ה-DOM."- MDN

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

<סגנון> .button .button__text { /* סגנונות טקסט של כפתור */ } .button .button__icon { /* סגנונות סמל כפתור */ } .button--primary { סגנונות לחצן ראשי */ }

<סגנון> @scope (.primary-button) { span:first-child { /* סגנונות טקסט של כפתור */ } span:last-child { /* סגנונות סמל כפתור */ } }

הכלל @scope מאפשר דיוק עם פחות מורכבות. המפתח כבר לא צריך ליצור גבולות באמצעות שמות מחלקות, אשר, בתורו, מאפשר להם לכתוב בוררים המבוססים על אלמנטים מקוריים של HTML, ובכך מבטל את הצורך בדפוסי שמות מחלקות של CSS. פשוט על ידי הסרת הצורך בניהול שמות כיתה, @scope יכול להקל על הפחד הקשור ל-CSS בפרויקטים גדולים. שימוש בסיסי כדי להתחיל, הוסף את הכלל @scope ל-CSS שלך והכנס בורר שורש שאליו יקפו סגנונות: @scope () { /* סגנונות בהיקף ל- */ }

אז, למשל, אם היינו מרחיקים סגנונות לאלמנט

You May Also Like

Enjoyed This Article?

Get weekly tips on growing your audience and monetizing your content — straight to your inbox.

No spam. Join 138,000+ creators. Unsubscribe anytime.

Create Your Free Bio Page

Join 138,000+ creators on Seemless.

Get Started Free