מודולים של SASS
מאמר זה מסביר את מודולי SASS.
אנחנו מסבירים איך למודולאר את SASS באמצעות @use ו-@forward ואיך לעשות שימוש חוזר במשתנים, מיקסים, פונקציות, הגדרות עיצוב ו-API ציבוריים.
YouTube Video
מודולים של SASS
מערכת המודולים של SASS עוזרת לתחום את הסגנונות בצורה ברורה ומספקת עיצוב שקל לעשות בו שימוש חוזר ותחזוקה.
מושגי יסוד של מודולים
מודולי SASS פותרים בעיות של זיהום שם-מרחב גלובלי ותלותות לא ברורות שהיו קיימות ב-@import הישן. כל קובץ נטען כמודול עם מרחב שמות משלו, ורק פריטים שייוצאו במפורש זמינים לגישה מקבצים אחרים.
דוגמה למבנה קבצים
ראשית, הנה דוגמה למבנה פרויקט ריאלי. להלן דוגמה למערכת עיצוב קטנה.
1styles/
2├─ _variables.scss
3├─ _mixins.scss
4├─ _functions.scss
5├─ components/
6│ ├─ _button.scss
7│ └─ _card.scss
8├─ utilities/
9│ └─ _helpers.scss
10└─ main.scss- מבנה זה מקל על מִדְרוּג (modularization), בדיקה והחלפת חלקים.
- קבצים פרטיים (partials) מסומנים בקו תחתי (_) בתחילת שם הקובץ.
יסודות @use
@use טוען מודול ומספק מרחב שמות. דבר זה מונע התנגשויות שמות ומבהיר את מקור המודול.
1// _variables.scss
2$primary-color: #0a74da;
3$padding-base: 12px;- קובץ זה פשוט ומגדיר רק משתנים. ניתן להתייחס למשתנים שמפורסמים ממודול ישירות באמצעות
@use.
1// main.scss
2@use 'variables';
3
4.example {
5 color: variables.$primary-color;
6 padding: variables.$padding-base;
7}- כאן, מודול
variablesנגיש באמצעות מרחב השמותvariables.. גישה זו גורמת לכך שמקור כל פריט יהיה ברור.
קיצור או יצירת כינוי למרחב שמות
שימוש ב-as מאפשר לקצר את מרחב השמות.
1@use 'variables' as vars;
2
3.btn {
4 color: vars.$primary-color;
5}- זו דוגמה לייבוא
variablesבאמצעות הכינוי המקוצרvars. בחר שמות לפי עדיפות לקריאות או קלות ההקלדה.
הגדרת מיקסין
אפשר להגדיר ולהשתמש בתערובות (mixins) ופונקציות גם בתוך מודולים. שמירה על אחידות בהערות לפי מוסכמות הפרויקט מסייעת לבהירות.
1// _mixins.scss
2// Create a simple responsive container mixin
3@mixin container($max-width: 1200px) {
4 width: 100%;
5 margin-left: auto;
6 margin-right: auto;
7 max-width: $max-width;
8}- קובץ זה מגדיר mixin עבור קונטיינרים. הוא מקבל ארגומנטים ומספק ערכי ברירת מחדל.
1// main.scss
2@use 'mixins' as m;
3
4.wrapper {
5 @include m.container(1000px);
6}- זוהי דוגמה לשימוש בתערובת (mixin) עם
@include.
הגדרת פונקציות
פונקציות משמשות להחזרת ערכים, וניתן להגדירן ולהשתמש בהן מחדש בתוך מודולים. על ידי עטיפת חישובים של ערכי עיצוב בפונקציות, הסגנונות הופכים ליציבים ותחזוקתם קלה יותר.
1// _functions.scss
2@use 'sass:math';
3
4// Create a simple px-to-rem converter function
5@function to-rem($px, $base: 16) {
6 @return math.div($px, $base) * 1rem;
7}- קובץ זה מגדיר פונקציה שממירה ערכי פיקסל ל-rem. מוגדר גם ערך בסיס ברירת מחדל.
1// main.scss
2@use 'functions' as f;
3
4.title {
5 font-size: f.to-rem(24);
6}- להלן דוגמה לקריאת פונקציה דרך @use ויישום התוצאה לסגנון.
ייצוא מודולים ו-@forward (עיצוב API)
כאשר ברצונך לחשוף מספר קבצים פנימיים כלפי חוץ, ניתן להשתמש ב-@forward ליצירת 'API ציבורי'.
1// _index.scss (module entry)
2@forward 'variables';
3@forward 'mixins';
4@forward 'functions';- ניתן לאגד כמה קבצים פנימיים כנקודת כניסה אחת המהווה את ה-API הציבורי. כך המשתמשים יוכלו לגשת לכל הפיצ'רים הנדרשים באמצעות ייבוא נקודת כניסה אחת בלבד.
1// main.scss
2@use 'index' as ds; // ds = design system
3
4.button {
5 color: ds.$primary-color;
6 @include ds.container();
7}- התוכן של
variablesו-mixinsנגיש ביחד באמצעותindex.@forwardהופך אתindexלשכבה הציבורית.
שליטת על ה-API עם אפשרויות show / hide של @forward
אם ברצונך לחשוף רק משתנים מסוימים, השתמש באפשרות show או hide.
1// _variables.scss
2$internal-thing: 10px !default; // for internal use
3$primary-color: #0a74da !default;
4$secondary-color: #f5f5f5 !default;- הוספת
!defaultמאפשרת לפרסם ערך שניתן לדרוס אותו.
1// _index.scss
2@forward 'variables' show $primary-color, $secondary-color;
3@forward 'mixins';- שימוש ב-
showעם@forwardמגביל את ה-API הציבורי לאלמנטים הנחוצים בלבד. משתנים ופונקציות לשימוש פנימי לא יהיו גלויים מבחוץ.
הפיכת מודולים למוגדרים (באמצעות with)
אם תשתמש ב-!default במודול, ניתן לדרוס ערכים באמצעות with בצד הייבוא.
1// _theme.scss
2$brand-color: #ff6600 !default;
3$radius: 4px !default;
4
5@mixin button-style() {
6 background-color: $brand-color;
7 border-radius: $radius;
8}- מודול עם ערכי ברירת מחדל שמוגדרים באמצעות
!defaultיכול לקבל הגדרות דרךwith.
1// main.scss
2@use 'theme' with (
3 $brand-color: #2288ff,
4 $radius: 8px
5);
6
7.my-btn {
8 @include theme.button-style();
9}- שימוש ב-
withבתוך@useמאפשר לדרוס משתנים ברירת מחדל בעת הייבוא. דבר זה מועיל להחלפת ערכות נושא. - שים לב ש-
withמשפיע רק בזמן הייבוא ולא ניתן לשנות את הערכים הללו מאוחר יותר.
דוגמה מעשית: קומפוננטת כפתור (דוגמה שלמה)
בוא ננסה לעצב סגנון לכפתורים באמצעות מודולים. קודם כל, הפרד משתנים ותערובות (mixins) למודולים נפרדים.
1// _variables.scss
2$btn-padding-y: 8px !default;
3$btn-padding-x: 16px !default;
4$btn-font-size: 14px !default;
5$btn-primary-bg: #0a74da !default;
6$btn-primary-color: #fff !default;- משתנים ברירת מחדל עבור כפתורים מוגדרים כאן. שימוש ב-
!defaultמאפשר לצרכנים לדרוס ערכים אלה.
1// _mixins.scss
2@use "variables" as v;
3
4@mixin btn-base() {
5 display: inline-flex;
6 align-items: center;
7 justify-content: center;
8 padding: v.$btn-padding-y v.$btn-padding-x;
9 font-size: v.$btn-font-size;
10 border: none;
11 cursor: pointer;
12}- תערובת בסיסית לכפתורים מוגדרת כאן. הם מופרדים לשימוש חוזר בקלות.
1// _button.scss
2@use 'variables' as v;
3@use 'mixins' as m;
4
5.button {
6 @include m.btn-base();
7 background: v.$btn-primary-bg;
8 color: v.$btn-primary-color;
9 border-radius: 4px;
10 transition: opacity 0.15s ease;
11 &:hover { opacity: 0.9; }
12}
13
14.button--large {
15 padding: calc(v.$btn-padding-y * 1.5) calc(v.$btn-padding-x * 1.5);
16 font-size: v.$btn-font-size * 1.25;
17}- סגנונות כפתור נוצרים באמצעות הפניות מרחב שמות עם
@use. וריאנט מוגדר כ-.button--large.
1// main.scss
2@use 'button'; // or @use 'index' that forwards button, variables, mixins- ייבוא מודול
buttonמאפשר להתחיל להשתמש בסגנונות הכפתור מידית.
החלפת ערכות נושא (באמצעות קבצי ערכת נושא מרובים)
החלפת ערכת נושא יכולה להיעשות על ידי הגדרה דרך with, או על ידי יצירת מודולים נפרדים ושינוי המודול בו משתמשים עם @use.
1// themes/_light.scss
2$brand-color: #0a74da !default;1// themes/_dark.scss
2$brand-color: #111827 !default;- הגדר צבעי מותג ושאר הגדרות בכמה קבצי ערכת נושא והחלף ביניהם בעת הבנייה או הייבוא.
1// main.scss (light theme)
2@use 'theme' with ($brand-color: #0a74da);
3@use 'button';- בחר ערכת נושא בשימוש ב-
withאו על ידי ייבוא, לדוג'@use 'themes/light'בזמן הבנייה.
פרטי וציבורי (קידומת _ ו-!default)
ב-SASS, הוספת קו תחתון בתחילת שם הקובץ מסמנת אותו כ-partial. אך כאשר מנהלים את ניראות הייצוא, השתמש ב-show ו-hide עם @forward כדי לקבוע אילו פריטים ייוצאו.
ניתן להשתמש ב-@forward כדי לארגן את ה-API הציבורי ולהסתיר מימושים פנימיים מהחוץ.
שיטות עבודה מומלצות לשימוש אמיתי
להלן כמה מושגים בסיסיים ששימושיים בעת עבודה עם SASS במצבים מעשיים. כל ההנחיות הללו יסייעו להפחית בלבול במהלך הפיתוח ולשמור על סדר בקוד שלך.
- אם המשתנים עשויים להשתנות כחלק מהערכת נושא, הוסף
!default. דבר זה מקל על המשתמשים להחליף ערכים. - יש לחלק מודולים לפי תחומי אחריות ולהתמקד במטרה אחת בלבד. הניהול הופך לקל יותר באמצעות הפרדה של משתנים, מיקסים ורכיבים.
- נהל תכנים ציבוריים עם
@forwardוהשתמש ב-showאוhideבמידת הצורך. הגדרת תחום הציבורי מובילה לעיצוב בטוח יותר. - השתמש במרחבי שמות כדי להבהיר לאיזה מודול כל פונקציה שייכת. זה מונע בלבול עם קוד אחר.
- זכור ש-
withעובד רק בזמן@use. מכיוון שלא ניתן לשנותן לאחר מכן, הגדר את ההגדרות בזמן הייבוא. - השתמש בקו תחתון בתחילת שמות הקבצים כדי להפוך אותם ל-partials, כך שהם לא יקומפלו בנפרד. כך קל יותר לשלב קבצים למבנה גדול יותר.
- הכללת דוגמאות שימוש במודול
indexעוזרת בבדיקות ובתיעוד. המשתמשים מבינים את ההתנהגות ביתר קלות.
שמירה על נקודות אלו תסייע לך לנהל פרויקטים גדולים ולשמור על קוד קריא בצוות.
סיכום
מערכת המודולים של SASS מארגנת את קוד הסגנון באמצעות שמות-מרחב, API ציבוריים והגדרה פשוטה. שימוש מיומן ב-@use ו-@forward הופך פיתוח בצוות, החלפת ערכות נושא ועיצוב ספריות לקלים בהרבה.
תוכלו לעקוב אחר המאמר שלמעלה באמצעות Visual Studio Code בערוץ היוטיוב שלנו. נא לבדוק גם את ערוץ היוטיוב.