وحدات SASS المضمنة
تشرح هذه المقالة وحدات SASS المضمنة۔
نغطي وحدات SASS المضمنة خطوة بخطوة، من الأساسيات إلى الاستخدام المتقدم۔
YouTube Video
وحدات SASS المضمنة
يوفر SASS مجموعة متنوعة من الوحدات المضمنة، واستخدامها يجعل تأليف أوراق الأنماط أكثر كفاءة۔
ما هي وحدات SASS المضمنة؟
وحدات SASS المضمنة هي وحدات توفر دوال وخلطات (mixins) قابلة لإعادة الاستخدام۔ استخدامها يجعل الحسابات المعقدة وإنشاء الأنماط المخصصة أسهل۔
تشمل الوحدات المضمنة الرئيسية ما يلي:۔
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()مفيدان لإنشاء أسماء الأصناف (classes) وتنسيق أسماء 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()ودوال التقريب في التعامل مع التعديلات۔ يجعل جمع هذه الدوال من السهل حساب مقاييس واجهة مستخدم متناسقة۔
وحدة 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 دوالًا مفيدة لمعالجة المحددات (selectors)۔
الدوال الرئيسية
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 ميزات مفيدة للبرمجة الوصفية (meta-programming) في 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()تتيحان لك تحديد حالات المتغيرات بأمان لكل نطاق۔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 على قناتنا على YouTube.۔ يرجى التحقق من القناة على YouTube أيضًا.۔