מודולים מובנים ב‑SASS
מאמר זה מסביר על המודולים המובנים של SASS.
נכסה את המודולים המובנים של SASS צעד־אחר־צעד, מהבסיס ועד לשימוש מתקדם.
YouTube Video
מודולים מובנים ב‑SASS
SASS מספקת מגוון מודולים מובנים, והשימוש בהם הופך את כתיבת גיליונות הסגנון ליעילה אף יותר.
מהם המודולים המובנים של SASS?
המודולים המובנים של SASS מספקים פונקציות ומיקסינים לשימוש חוזר. השימוש בהם מקל על ביצוע חישובים מורכבים ועל יצירת סגנונות מותאמים אישית.
המודולים המובנים העיקריים כוללים את הבאים:.
sass:colorsass:stringsass:mathsass:listsass:mapsass:selectorsass:meta
כל מודול כולל יכולות המייעלות משימות ספציפיות.
פרטים ודוגמאות לכל מודול
המודול sass:color
המודול sass:color מספק פונקציות שמקלות על מניפולציה בצבעים.
פונקציות עיקריות
mix(): ערבוב שני צבעיםadjust(): לשנות גוון, בהירות, רוויה ותכונות אחרות יחד
דוגמה לשימוש
1@use "sass:color";
2
3$primary-color: #3498db;
4$secondary-color: #e74c3c;
5
6// Mix two colors with equal weight
7$blended-color: color.mix($primary-color, $secondary-color, 50%);
8
9// Adjust hue by 45 degrees using color.adjust()
10$adjusted-color: color.adjust($primary-color, $hue: 45deg);
11
12div {
13 background-color: $blended-color; // Result of mixing two colors
14 border-color: $adjusted-color; // Hue adjusted by 45 degrees
15}- קוד זה יוצר צבע חדש באמצעות ערבוב שני צבעים וצבע נוסף עם גוון מותאם. הצבעים שנוצרו מוחלים על אלמנטים כצבעי רקע ומסגרות. דוגמה זו מסייעת להבין את יסודות מניפולציית הצבעים.
המודול sass:string
המודול sass:string מספק פונקציות שימושיות למניפולציה במחרוזות.
פונקציות עיקריות
quote(),unquote(): הוספת מרכאות או הסרתן ממחרוזתlength(): קבלת אורך מחרוזתto-upper-case(),to-lower-case(): המרת מחרוזת לאותיות רישיות או קטנות
דוגמה לשימוש
1@use "sass:string";
2
3// base values
4$base-url: "https://example.com";
5$path: "/assets/style.css";
6
7// 1) Combine strings using interpolation and then quote the result
8$full-quoted: string.quote("#{$base-url}#{$path}");
9// Example result: "\"https://example.com/assets/style.css\""
10
11// 2) Remove quotes from a quoted string
12$full-unquoted: string.unquote($full-quoted);
13// Example result: https://example.com/assets/style.css
14
15// 3) Get the length of the unquoted string
16$url-length: string.length($full-unquoted);
17// Example output: number of characters in the URL
18
19// 4) Convert strings to upper/lower case and quote for safe CSS output
20$block-name: "main-header";
21// "MAIN-HEADER"
22$upper-quoted: string.quote(string.to-upper-case($block-name));
23// "main-footer"
24$lower-quoted: string.quote(string.to-lower-case("MAIN-FOOTER"));
25
26a::after {
27 /* Use quoted strings for content to ensure valid CSS */
28 content: $full-quoted; /* "https://example.com/assets/style.css" */
29}
30
31:root {
32 /* Insert numeric values with interpolation when needed */
33 --url-length: #{ $url-length }; /* Example: --url-length: 31; */
34}
35
36.header::before {
37 /* Output uppercase version */
38 content: $upper-quoted; /* "MAIN-HEADER" */
39}
40
41.footer::after {
42 /* Output lowercase version */
43 content: $lower-quoted; /* "main-footer" */
44}- השימוש ב־
string.quote()וב־string.unquote()מאפשר שליטה מדויקת בייצוג המחרוזות ב‑CSS המופק.string.length()היא פונקציה שמחזירה את אורך המחרוזת.string.to-upper-case()/string.to-lower-case()שימושיות ליצירת שמות מחלקות ולעיצוב שמות BEM.
המודול sass:math
המודול sass:math מספק פונקציות לחישובים מתמטיים.
פונקציות עיקריות
pow(): חזקהsqrt(): שורש ריבועיabs(): ערך מוחלטround(),ceil(),floor(): עיגול, עיגול כלפי מעלה, עיגול כלפי מטה
דוגמה לשימוש
1@use "sass:math";
2
3// Using pow() to calculate exponential values
4$base-size: math.pow(2, 3) * 10px; // 80px
5
6// Using sqrt() to compute a square root
7$root-size: math.sqrt(144) * 1px; // 12px
8
9// Using abs() to ensure a positive value
10$offset: math.abs(-15px); // 15px
11
12// Using round(), ceil(), and floor() for different rounding methods
13$rounded: math.round(12.6px); // 13px
14$ceiled: math.ceil(12.1px); // 13px
15$floored: math.floor(12.9px); // 12px
16
17.container {
18 width: $base-size; // 80px
19 height: $root-size; // 12px
20 margin-left: $offset; // 15px
21}
22
23.values {
24 /* Demonstrating different rounding operations */
25 padding: $rounded; // 13px
26 border-width: $ceiled; // 13px
27 margin-top: $floored; // 12px
28}math.pow()ו־math.sqrt()שימושיות לחישובי גדלים, בעודmath.abs()ופונקציות העיגול מסייעות בהתאמות. השילוב ביניהן מקל על חישוב קני מידה עקביים ל‑UI.
המודול sass:list
המודול sass:list מספק פונקציות ייעודיות לפעולות על רשימות.
פונקציות עיקריות
append(): הוספת רכיביםjoin(): איחוד רשימותnth(): אחזור האיבר במיקום נתוןlength(): קבלת אורך רשימה
דוגמה לשימוש
1@use "sass:list";
2
3// Base list
4$colors: ("red", "blue", "green");
5
6// Add an element to the end of the list
7$colors-appended: list.append($colors, "yellow");
8// ("red", "blue", "green", "yellow")
9
10// Add an element to the beginning of the list using join()
11$colors-prepended: list.join(("black",), $colors);
12// ("black", "red", "blue", "green", "yellow")
13
14// Join two lists together
15$extra-colors: ("pink", "cyan");
16$merged-colors: list.join($colors-prepended, $extra-colors);
17// ("black", "red", "blue", "green", "yellow", "pink", "cyan")
18
19// Get list length
20$total-length: list.length($merged-colors);
21
22// Example usage in a loop: assign each color to a list item
23ul {
24 @for $i from 1 through $total-length {
25 li:nth-child(#{$i}) {
26 /* Get the color at index $i */
27 color: list.nth($merged-colors, $i);
28 }
29 }
30}- באפשרותך להוסיף רכיבים לסוף רשימה באמצעות
append(), ולהשתמש ב-join()כדי לשלב בקלות מספר רשימות. אם ברצונך להוסיף רכיב להתחלה, תוכל לעשות זאת על ידי איחוד רשימה של רכיב יחיד להתחלה עםjoin(). באמצעות שילוב שלlength()ו-nth(), קל יותר ליצור סגנונות ממשק משתמש שדורשים עיבוד רשימות דינמי.
המודול sass:map
המודול sass:map מספק פונקציות לעבודה עם מפות (מערכים אסוציאטיביים).
פונקציות עיקריות
get(): קבלת הערך עבור מפתחset(): הוספה או עדכון של זוג מפתח‑ערךkeys(): קבלת כל המפתחות
דוגמה לשימוש
1@use "sass:map";
2
3// Base theme map
4$theme-colors: (
5 "primary": #3498db,
6 "secondary": #e74c3c
7);
8
9// Update or add a value using set()
10$updated-theme: map.set($theme-colors, "warning", #f1c40f);
11// Map now has "warning": #f1c40f added
12
13// Get a value from the map
14$primary-color: map.get($updated-theme, "primary");
15
16// Get all keys from the map
17$all-keys: map.keys($updated-theme);
18// Example: ("primary", "secondary", "warning")
19
20button {
21 /* Apply color retrieved from the theme map */
22 background-color: $primary-color;
23}
24
25.debug {
26 /* Print keys as content for demonstration */
27 content: "#{$all-keys}";
28}- השימוש ב־
map.set()מאפשר לעדכן מפות בצורה דינמית, ובשילוב עםmap.get()ניתן לבנות מבני ערכות נושא גמישים. בעזרתmap.keys()ניתן למנות ערכי תצורה, מה שעוזר בעיצוב סגנונות ניתנים להרחבה.
המודול sass:selector
המודול sass:selector מספק פונקציות שימושיות למניפולציה בבוררי CSS.
פונקציות עיקריות
nest(): קינון בורריםis-superselector(): בדיקת הכלה בין בורריםreplace(): החלפת בוררים
דוגמה לשימוש
1@use "sass:selector";
2
3// Nest selectors (combine parent and child)
4$nested-selector: selector.nest(".parent", ".child");
5// Result: ".parent .child"
6
7// Check if one selector is a superselector of another
8$is-super: selector.is-superselector(".parent", $nested-selector);
9// true because ".parent" matches all elements that
10// ".parent .child" can match as an ancestor
11
12// Replace part of a selector with another selector
13$replaced-selector: selector.replace(".parent .child", ".child", ".item");
14// Result: ".parent .item"
15
16// Use generated selectors in actual CSS output
17#{$nested-selector} {
18 /* Applies to .parent .child */
19 color: red;
20}
21
22@if $is-super {
23 .info::after {
24 /* Demonstrate boolean result */
25 content: "parent is a superselector";
26 }
27}
28
29#{$replaced-selector} {
30 /* Applies to .parent .item */
31 background: blue;
32}- השתמשו ב־
selector.nest()להרכבה גמישה של בוררים וב־selector.is-superselector()לאימות היחסים ביניהם. שלבו עםselector.replace()כדי לטפל בתמציתיות בלוגיקה מתקדמת ליצירת בוררים.
המודול sass:meta
המודול sass:meta מספק יכולות שימושיות למטא‑תכנות ב‑SASS.
פונקציות עיקריות
variable-exists(): בדיקה אם משתנה קייםglobal-variable-exists(): בדיקה אם משתנה גלובלי קייםinspect(): הצגת ערך לצורכי ניפוי שגיאות
דוגמה לשימוש
1@use "sass:meta";
2
3// Define a global variable
4$color: #3498db;
5
6// Check if a variable exists in the current scope
7@if meta.variable-exists("color") {
8 body {
9 /* Apply style only if $color exists */
10 background-color: $color;
11 }
12}
13
14// Create a local variable inside a block
15.container {
16 $local-size: 20px;
17
18 @if meta.variable-exists("local-size") {
19 /* Demonstrates detection of local variable */
20 width: $local-size;
21 }
22}
23
24// Check if a global variable exists
25$result: meta.global-variable-exists("color"); // true
26
27.debug {
28 /* Use inspect() to output the inspected value as a string */
29 content: meta.inspect($result); // "true"
30}meta.variable-exists()ו־meta.global-variable-exists()מאפשרות לקבוע בבטחה את מצבם של משתנים לפי היקף (scope).meta.inspect()שימושית מאוד לניפוי שגיאות ויכולה להציג ערכים כמחרוזות.
דוגמה מעשית
שילוב של מספר מודולים מובנים מגביר עוד יותר את היכולת הביטויית של SASS. להלן דוגמה המשתמשת יחד במודולים color, math ו־list כדי לבצע אוטומציה של עיבוד צבעים ושל פעולות על רשימות.
1@use "sass:color";
2@use "sass:math";
3@use "sass:list";
4
5// Base color list
6$base-colors: (#3498db, #e74c3c, #2ecc71);
7$darkened-colors: (); // Empty list for processed colors
8
9// Loop through each base color and darken it by 10%
10@each $color in $base-colors {
11 $darkened-colors: list.append(
12 $darkened-colors,
13 // Darken color by decreasing lightness by 10%
14 color.adjust($color, $lightness: -10%)
15 );
16}
17
18div {
19 // Apply each processed color to a corresponding <div>
20 @for $i from 1 through list.length($darkened-colors) {
21 &:nth-child(#{$i}) {
22 // Set color by index
23 background-color: list.nth($darkened-colors, $i);
24 }
25 }
26}- בקוד זה, הצבעים המעובדים מתווספים ברצף בעזרת
list.append(), ו-color.adjust()עם$lightness: -10%משמש להכהות את הצבעים ב-10%. לבסוף, משלבים את@forעםlist.nth()כדי להחיל צבעי רקע שונים על כל<div>.
סיכום
המודולים המובנים של SASS מגדילים משמעותית את הגמישות של CSS. בהבנת כל מודול ובשימוש מושכל בהם תוכלו ליצור גיליונות סגנון יעילים יותר וניתנים לתחזוקה.
תוכלו לעקוב אחר המאמר שלמעלה באמצעות Visual Studio Code בערוץ היוטיוב שלנו. נא לבדוק גם את ערוץ היוטיוב.