الفرق بين المراجعتين ل"Sass/SassScript"

من موسوعة حسوب
اذهب إلى التنقل اذهب إلى البحث
ط (إضافة عنوان الصفحة والتصنيفات)
ط (مراجعة الصفحة وتدقيقها.)
سطر 1: سطر 1:
<noinclude>{{DISPLAYTITLE:صياغة SassScript}}</noinclude>
+
تدعم Sass، بالإضافة إلى الصياغة العادية للغة [[CSS]]، مجموعةً صغيرةً من المُلحقات تُدعى SassScript. تُتيح SassScript للخاصيّات استخدام المتغيرات والعمليات الحسابيّة ودوالَّ أخرى إذ يمكن استخدام SassScript في قيمة أيِّ خاصيّة.
بالإضافة إلى الصياغة العادية للغة [[CSS]]، تدعم Sass مجموعةً صغيرةً من المُلحقات تُدعى SassScript. تُتيح SassScript للخاصيّات استخدام المتغيرات والحسابيّات ودوالَّ إضافية. كما يمكن استخدام SassScript في قيمة أي خاصيّة.
 
 
 
ويمكن أيضًا استخدامها لتوليد المُحددّات (selectors) وأسماء الخاصيات، وهو أمرٌ مفيد عند كتابة [[Sass/mixins|المخاليط]] (mixins). ويتم ذلك عن طريق الاستيفاء (interpolation).
 
  
== الصّدَفة التفاعلية (Interactive Shell) ==
+
يمكن أيضًا استخدامها لتوليد المُحددّات (selectors) وأسماء الخاصِّيَّات، وهو أمرٌ مفيد عند كتابة [[Sass/mixins|المخاليط]] (mixins) إذ يكون ذلك باستخدام الاستيفاء (interpolation).
يمكنك تجريب SassScript بسهولةٍ باستخدام الصّدفة التفاعلية. لتشغيل الصّدفة عليك تشغيل الأمر Sass في سطر الأوامر متبوعًا بالخيار <code>‎-i</code>. أدخل في المِحث (prompt) أي تعبير صالح في SassScript لأجل تقييمه وطباعة النتائج:<syntaxhighlight lang="sass">
+
==الصّدَفة التفاعلية (Interactive Shell)==
 +
يمكنك تجريب SassScript بسهولةٍ باستخدام الصّدفة التفاعلية. لتشغيل تلك الصّدفة، اكتب الأمر <code>sass</code> في سطر الأوامر متبوعًا بالخيار <code>‎-i</code> ثمَّ أدخل في المِحث (prompt) أيَّ تعبير صالح في SassScript لأجل تقييمه وطباعة النتائج.<syntaxhighlight lang="sass">
 
$ sass -i
 
$ sass -i
 
>> "Hello, Sassy World!"
 
>> "Hello, Sassy World!"
سطر 17: سطر 15:
  
 
</syntaxhighlight>
 
</syntaxhighlight>
 
+
==المتغيرات: <code>$</code>==
== المتغيرات: <code>$</code> ==
+
الطريقة البدهيّة لاستخدام SassScript هي باستخدام المتغيرات. تبدأ المتغيرات بعلامة الدولار (<code>$</code>)، وتُضبط كما تُضبط خاصيّات [[CSS]].<syntaxhighlight lang="sass">
الطريقة البدهيّة لاستخدام SassScript هي باستخدام المتغيرات. تبدأ المتغيرات بعلامة الدولار (<code>$</code>)، وتُضبط كما تُضبط خاصيّات [[CSS]]:<syntaxhighlight lang="sass">
 
 
$width: 5em;
 
$width: 5em;
  
</syntaxhighlight>يمكنك بعد ذلك الإشارة إليها في الخاصيّات، مثلًا:<syntaxhighlight lang="sass">
+
</syntaxhighlight>يمكنك بعد ذلك الإشارة إليها في الخاصيّات، مثل:<syntaxhighlight lang="sass">
 
#main {
 
#main {
 
   width: $width;
 
   width: $width;
 
}
 
}
</syntaxhighlight>المتغيرات ستكون مرئيةً فقط في مستوى المُحدّدات المُتشعّبة حيث عُرِّفت أو دُونه. وإن عُرِّفت خارج كل المُحدّدات المتشعّبة فستكون مُتاحةً في كل مكان. يمكن أيضًا جعلها متاحةً في كل مكانٍ يدويًا عبر تعريفها بالرّاية <code>‎!global</code>. على سبيل المثال:<syntaxhighlight lang="sass">
+
</syntaxhighlight>ستكون المتغيرات مرئيةً فقط في مستوى المُحدّدات المُتشعّبة حيث عُرِّفت أو دُونه. وإن عُرِّفت خارج كل المُحدّدات المتشعّبة، فستكون مُتاحةً في كل مكان. يمكن أيضًا جعلها متاحةً في كل مكانٍ يدويًا باستعمال بالرّاية <code>‎!global</code>. انظر على سبيل المثال:<syntaxhighlight lang="sass">
 
#main {
 
#main {
 
   $width: 5em !global;
 
   $width: 5em !global;
سطر 44: سطر 41:
 
}
 
}
  
</syntaxhighlight>لأسباب تاريخية، لا فرق بين الشّرْطات (hyphens) والشرطات السُّفلية (underscores) في أسماء المتغيرات (وجميع مُعرِّفات Sass الأخرى). على سبيل المثال، إن عَرّفت متغيّرًا باسم <code>‎$main-width</code>، فيمكنك الدخول إليه بالاسم <code>‎$main_width</code>، والعكس بالعكس.
+
</syntaxhighlight>لأسباب تاريخية، لا فرق بين الشّرْطات العاديَّة (hyphens) والشرطات السُّفلية (underscores) في أسماء المتغيّرات (وجميع مُعرِّفات Sass الأخرى). إن عَرّفت مثلًا متغيّرًا باسم <code>‎$main-width</code>، فيمكنك الوصول إليه بالاسم <code>‎$main_width</code> أيضًا، والعكس بالعكس.
 
+
==أنواع البيانات==
== أنواع البيانات ==
+
تدعم SassScript ثمانيةً من أنواع البيانات وهي:
تدعم SassScript ثمانيةً من أنواع البيانات:
+
*الأعداد (مثل <code>1.2</code> و <code>13</code> و <code>10px</code>).
* الأعداد (على سبيل المثال <code>1.2</code> و <code>13</code> و <code>10px</code>)
+
*السلاسل النصيّة، مع علامة الاقتباس وبدونها (مثل <code>"‎foo"</code> و <code>'bar'</code> و <code>baz</code>).
* السلاسل النّصيّة، مع علامة الاقتباس وبدونها (على سبيل المثال <code>"‎foo"</code> و <code>'bar'</code> و <code>baz</code>)
+
*الألوان (مثل <code>blue</code> و‏ <code>#04a3f9‏</code> و <code>rgba‎(255, 0, 0, 0.5)‎</code>).
* الألوان (مثل <code>blue</code> و‏ <code>#04a3f9‏</code> و <code>rgba‎(255, 0, 0, 0.5)‎</code>)
+
*القيم المنطقيَّة (مثل <code>true</code> و <code>false</code>).
* القيم المنطقية (على سبيل المثال <code>true</code> و <code>false</code>)
+
*القيمة المعدومة (مثل <code>null</code>).
* القيمة المعدومة (على سبيل المثال <code>null</code>)
+
*القوائم التي تحتوي على قيم مفصولةً بمسافات أو فواصل (مثل <code>‎1.5em 1em 0 2em</code> أو‏‏ <code>Helvetica, Arial, sans-serif</code>).
* قوائم من القيم، مفصولةً بمسافات أو فواصل (على سبيل المثال <code>‎1.5em 1em 0 2em</code> و‏‏ <code>Helvetica, Arial, sans-serif</code>)
+
*القواميس (maps) التي تربط قيمةً بأخرى (مثل <code>(key1: value1, key2: value2)</code>).
* القواميس (maps) التي تربط قيمةً بأخرى (على سبيل المثال <code>(key1: value1, key2: value2)</code>)
+
*مؤشّرات الدوال (function references).
* مؤشّرات الدوال (function references)
+
كما تدعم SassScript أيضًا جميع الأنواع الأخرى لقيم خاصيّات [[CSS]]، مثل مجالات الترميز Unicode والتصريحات <code>‎!important</code>. على أي حال، لا تُعامَل تلك الأنواعَ معاملة خاصّة، ولكن تعامَل كأنّها سلاسل نصيّة غير مقتبسة.
كما تدعم SassScript أيضًا جميع الأنواع الأخرى لقيم خاصيّات [[CSS]]، مثل مجالات اليونيكود والتصريحات <code>‎!important</code>. ولا تُعامَل هذه الأنواعَ معاملة خاصّة. ولكن تعامَل كأنّها سلاسل نصيّة غير مقتبسة.
+
===السلاسل النصيّة===
 
+
يوجد في لغة CSS نوعان من السّلاسل النصّية هي: السلاسل النصيَّة المقتبسة، مثل <code>"Lucida Grande"</code> أو <code>'<nowiki>http://sass-lang.com'</nowiki></code>، والسلاسل النصيَّة غير المُقتبسة، مثل <code>sans-serif</code> أو <code>bold</code>. تتعرّف SassScript على كلا النّوعين وسيكون النّوع المُستخدم ذاته في ملف sass وملف [[CSS]] الناتج.
=== السلاسل النصيّة ===
 
يوجد في لغة CSS نوعان من السّلاسل النصّية: السلاسل النصية المقتبسة، مثل <code>"Lucida Grande"</code> أو <code>'<nowiki>http://sass-lang.com'</nowiki></code>، والسلاسل النصية غير المُقتبسة، مثل <code>sans-serif</code> أو <code>bold</code>. تتعرّف SassScript على كلا النّوعين، وبصفة عامّةٍ، فإنّ النّوع المُستخدم في ملف sass، هو الذي سيُستخدم في ملف [[CSS]] الناتج.
 
  
هناك استثناءٌ واحدٌ لهذه القاعدة: عند استخدام الاستيفاء (interpolation)، فإنّ السلاسل النصيّة المقتبسة تصبح غير مقتبسة. هذا يُسهّل استخدام أسماء المُحدّدات في [[Sass/mixins|المخاليط]] (mixins). على سبيل المثال:<syntaxhighlight lang="sass">
+
هناك استثناءٌ واحدٌ لتلك القاعدة وهو: عند استخدام الاستيفاء <code>{}#</code> (interpolation)، فإنّ السلاسل النصيّة المقتبسة تصبح غير مقتبسة. هذا يُسهّل استخدام أسماء المُحدّدات في [[Sass/mixins|المخاليط]] (mixins). انظر على سبيل المثال:<syntaxhighlight lang="sass">
 
@mixin firefox-message($selector) {
 
@mixin firefox-message($selector) {
 
   body.firefox #{$selector}:before {
 
   body.firefox #{$selector}:before {
سطر 74: سطر 69:
 
   content: "Hi, Firefox users!"; }
 
   content: "Hi, Firefox users!"; }
 
</syntaxhighlight>
 
</syntaxhighlight>
 +
===القوائم===
 +
تستخدم Sass القوائم لتمثيل قيم تصريحات لغة [[CSS]] مثل <code>[[CSS/margin|margin]]: 10px 15px 0 0</code> أو <code>[[CSS/font-face|font-face]]: Helvetica,‎ Arial, sans-serif</code>. ليست القوائم إلا سلسلةً من قيم أخرى مفصولةً إما بمسافاتٍ أو فواصل. في الواقع، القيم المُفردة تعدّ قوائم أيضًا إذ هي قوائم أحادية.
  
=== القوائم ===
+
لا تكون القوائم ذات فائدة دون دوال قوائم SassScript. مثلًا، [[Sass/nth|الدالة النونية (nth function)]] يمكنها الوصول إلى العناصر الموجودة في القائمة، [[Sass/join|ودالة الضّم (join function)]] تضمّ عدة قوائم معًا، ودالّة [[Sass/append|الإلحاق]] (append function) تضيف عناصر إلى القوائم؛ وأمّا التعليمة <code>[[Sass/@ rules|‎@each‏]]</code> ‎فيمكنها إضافة أنماط لكل عنصرٍ في القائمة.
تستخدم Sass القوائم لتمثيل قيم تصريحات لغة [[CSS]] مثل <code>[[CSS/margin|margin]]: 10px 15px 0 0</code> أو <code>[[CSS/font-face|font-face]]: Helvetica,‎ Arial, sans-serif</code>. القوائم ليست إلا سلسلةً من قيم أخرى، مفصولةً إما بمسافاتٍ أو فواصل. في الواقع، القيم المُفردة تعدّ قوائم كذلك: فهي قوائم أحادية.
 
 
 
القوائم لا تفعل الكثير بدون دوال قوائم SassScript. مثلًا، [[Sass/nth|الدالة النونية (nth function)]] يمكنها الوصول إلى العناصر الموجودة في القائمة، [[Sass/join|ودالة الضّم (join function)]] تضمّ عدة قوائم معًا، أمّا [[Sass/append|دالّة الإلحاق (append function)]] فيمكنها إضافة عناصر إلى القوائم. وأمّا التعليمة <code>[[Sass/@ rules|‎@each‏]]</code> ‎فيمكنها إضافة أنماط لكل عنصرٍ في القائمة.
 
 
 
بالإضافة إلى احتواء القيم البسيطة، يمكن أن تحتوي القوائمُ قوائمَ أخرى. مثلًا، <code>1px 2px, 5px 6px</code> هي قائمة ثنائيّة تحتوي القائمة <code>1px 2px</code> والقائمة <code>6px 5px</code>. إن كانت القوائم الداخلية تستخدم نفس الفاصل الذي تستخدمه القائمة الخارجية، فسيكون عليك استخدام الأقواس لتُوضّح بداية القائمة الداخلية ونهايتها. على سبيل المثال، <code>(1px 2px) (5px 6px)</code> هي قائمة ثنائية تحتوي القائمة <code>1px 2px</code> والقائمة <code>5px 6px</code>. الفرق هو أنّ القائمة الخارجية مفصولة بالمسافات البيضاء خلافًا للمثال السابق حيث فُصلت بفواصل.
 
 
 
عند تحويل القوائم إلى لغة [[CSS]]، فإنّ sass لا تضيف الأقواس، لأنّ CSS لا تعرف الأقواس. وهذا يعني أنَّ <code>(1px 2px) (5px 6px)</code> و <code>1px 2px 5px 6px</code> ستصبحان نفس الشيء عند تصريفهما إلى لغة CSS. لكنّها ليست كذلك عندما تكون مكتوبة بلغة sass: فالأولى هي قائمةٌ تحتوي قائمَتين، في حين أنّ الثانية هي قائمة تحتوي أربعة أعداد.
 
  
يمكن للقوائم أن تكون خاليةً من أيّ عنصر. تُمثّل هذه القوائم بالتعبير <code>()</code> (والذي يمكن أن يعني أيضًا قاموسًا [map] فارغًا). هذا النوع من القوائم لا يمكن أن يكون في مخرجات CSS مباشرة. فمثلًا القاعدة: <code>font-family: ()</code> ستجعل sass تطلق خطأً. إذا احتوت قائمةٌ على قائمةٍ فارغة أو القيمة المعدومة (null)، مثلًا <code>2px 1px () 3px</code> أو <code>1px 2px null 3px</code>، فستُزال القوائم الفارغة والقيم المعدومة قبل تحويل القائمة الحاوية إلى لغة CSS.
+
يمكن أن تحتوي القوائمُ، بالإضافة إلى القيم البسيطة،  قوائمَ أخرى. مثلًا، القائمة <code>1px 2px, 5px 6px</code> هي قائمة ثنائيّة تحتوي على القائمة <code>1px 2px</code> والقائمة <code>6px 5px</code>. إن كانت القوائم الداخليَّّة تستخدم نفس الفاصلة التي تستخدمها القائمة الخارجية، فيجب استخدام الأقواس لتوضيح بداية القائمة الداخلية ونهايتها. على سبيل المثال، القائمة  <code>(1px 2px) (5px 6px)</code> هي قائمة ثنائية تحتوي على القائمة <code>1px 2px</code> والقائمة <code>5px 6px</code>. الفرق هو أنّ القائمة الخارجية والداخلية مفصولتان بالمسافات البيضاء خلافًا للمثال السابق حيث فُصلت الخارجية بفاصلة والداخلية بمسافة بيضاء.
  
قد تحتوي القوائم المفصولة بفواصل على فاصلةٍ زائدةٍ. وهذا مفيدٌ إن أردت تمثيل قائمةٍ أحادية (single-element list). على سبيل المثال، <code>(,1)</code> هي قائمة تحتوي على 1 أمّا (‎1 2 3,‎) فهي قائمةٌ مفصولةٌ بفواصل تحتوي على قائمةٍ مفصولةٍ بمسافاتٍ بيضاء تحتوي على 1 و 2 و 3.
+
عند تحويل القوائم إلى لغة [[CSS]]، فلا تضيف sass الأقواس إذ لا تتعرف CSS على الأقواس. هذا يعني أنَّ القائمة <code>(1px 2px) (5px 6px)</code> والقائمة <code>1px 2px 5px 6px</code> ستبدوان متشابهتين عند تصريفهما إلى لغة CSS. مع ذلك، لن تكونا متشابهتين عندما كتابتهما بلغة sass إذ أنَّ الأولى هي قائمةٌ تحتوي قائمَتين، في حين أنّ الثانية هي قائمة تحتوي أربعة أعداد.
  
==== القوائم ذات الأقواس المربعة ====
+
يمكن للقوائم أن تكون خاليةً من أيّ عنصر وتُمثّل بقوسين <code>()</code> فقط (والذي يمكن أن يعني أيضًا قاموسًا [map] فارغًا). هذا النوع من القوائم لا يمكن أن يظهر في مخرجات CSS مباشرة. إن جربت ذلك باستعمال <code>font-family: ()‎</code> مثلًا، فستطلق sass حينئذ خطأً. إذا احتوت قائمةٌ على قائمةٍ فارغة أو قيمة عدمية (null) مثل <code>2px 1px () 3px</code> أو <code>1px 2px null 3px</code>، فستُزال القوائم الفارغة والقيم العدمية قبل تحويلها إلى لغة CSS.
يمكن أيضًا كتابة القوائم باستعمال الأقواس المربعة.  تُستخدم القوائم ذات الأقواس المربعة كأسماء للأسطر في [[:تصنيف:CSS Grid|مخطّطات شبكات CSS]]، ولكن يمكن أن تُستخدم أيضًا في الكود البرمجي للغة sass مَثَلُها كمَثَلِ أيِّ قائمةٍ أخرى. ويمكن للقوائم ذات الأقواس المربعة أن تُفصَل بالمسافات البيضاء أو الفواصل.
 
  
=== القواميس (Maps) ===
+
قد تحتوي القوائم المفصولة بفواصل على فاصلةٍ زائدةٍ وهذا مفيدٌ إذ تسمح لك بتمثيل قائمةٍ أحادية (single-element list). على سبيل المثال، <code>(,1)</code> هي قائمة تحتوي على 1 أمّا (‎1 2 3,‎) فهي قائمةٌ مفصولةٌ بفواصل تحتوي على قائمةٍ مفصولةٍ بمسافاتٍ بيضاء تحتوي على 1 و 2 و 3.
تمثل القواميس ارتباطًا بين مفاتيح (keys) وقيم، المفاتيح تُستخدم لإيجاد القيم. وتُسهّل تجميع القيم في مجموعات مُسمّاةٍ والوصول إلى تلك المجموعات بشكل ديناميكيّ. ليس للقواميس مقابلٌ مباشر في لغة CSS، على الرغم من أنّ صياغتها مشابهةٌ لتعبيرات [[CSS/@media|استعلامات الوسائط]] (media query expressions):<syntaxhighlight lang="sass">
+
====القوائم ذات الأقواس المربعة====
 +
يمكن أيضًا كتابة القوائم باستعمال الأقواس المربعة.  تُستخدم القوائم ذات الأقواس المربعة أسماءً للأسطر في [[:تصنيف:CSS Grid|مخطّطات شبكات CSS]]، ولكن يمكن أن تُستخدم أيضًا في الكود البرمجي للغة sass مَثَلُها كمَثَلِ أيِّ قائمةٍ أخرى. يمكن للقوائم ذات الأقواس المربعة أن تُفصَل بالمسافات البيضاء أو الفواصل.
 +
===القواميس (Maps)===
 +
تمثل القواميس ارتباطًا بين مفاتيح (keys) وقيم تلك المفاتيح. تُستخدم المفاتيح لإيجاد القيم وتُسهّل تجميعها في مجموعات مُسمّاةٍ والوصول إلى تلك المجموعات بشكل ديناميكيّ. ليس للقواميس مقابلٌ مباشر في لغة CSS، على الرغم من أنّ صياغتها مشابهةٌ لتعبيرات [[CSS/@media|استعلامات الوسائط]] (media query expressions).<syntaxhighlight lang="sass">
 
$map: (key1: value1, key2: value2, key3: value3);
 
$map: (key1: value1, key2: value2, key3: value3);
  
</syntaxhighlight>خلافًا للقوائم، يجب أن تٌحاط القواميس دائمًا بالأقواس، ويجب أن تُفصل بالفواصل. يمكن أن تكون المفاتيح وقيمها أي كائن من كائنات SassScript. وفي القواميس لا يمكن ربط أكثر من قيمةٍ واحدةٍ بنفس المفتاح (ولكنّ القيمة يمكن أن تكون قائمةً). لكن يمكن أن ترتبط قيمة معينة مع أكثر من مفتاح واحد.
+
</syntaxhighlight>خلافًا للقوائم، يجب أن تٌحاط القواميس دائمًا بالأقواس، ويجب أن تُفصل بالفواصل. يمكن أن تكون المفاتيح وقيمها أي كائن من كائنات SassScript. لا يمكن ربط أكثر من قيمةٍ واحدةٍ في القواميس مع نفس المفتاح (ولكنّ تلك القيمة يمكن أن تكون قائمةً)، بينما يمكن أن ترتبط قيمة معيَّنة مع أكثر من مفتاح واحد.
 
 
مثلَ القوائم، تُعالج القواميس أساسًا باستخدام دوال SassScript. فالدالة <code>[[Sass/map get|map-get]]</code> تبحث عن القيم في القاموس والدالّة <code>[[Sass/map merge|map-merge]]</code> تضيف قيمًا إلى القاموس. أمّا التعليمة <code>[[Sass/@ rules|‎@each]]</code> فيمكن استخدامها لإضافة أنماط لكل الأزواج مفتاح/قيمة (key/value) في القاموس. ترتيب الأزواج في القاموس يبقى كما كان لحظة إنشائه.
 
 
 
يمكن استخدام القواميس في أيّ مكان تُستخدم فيه القوائم. وعند استخدامها من قبل دالةٍ خاصة بالقوائم، فستُعامل على أنّها قائمةٌ مكونة من أزواج. على سبيل المثال، <code>(key1: value1, key2: value2)</code> ستُعاملها دوال القوائم كأنّها القائمة المتشعّبة <code>key1 value1, key2 value2</code>. ولا يمكن أن تُعامَل القوائم على أنّها قواميس، باستثناء القائمة الفارغة التي تمثّل في آنٍ واحدٍ قاموسًا لا يحتوي أيّ أزواج مفتاح/قيمة وقائمة لا تحتوي أيّ عناصر.
 
 
 
تذكر أنّ مفاتيح القاموس يمكن أن تنتمي إلى أيّ نوع من أنواع بيانات Sass (حتى القواميس)، كما تتيح طريقةُ صياغة التصريح بالقواميس استخدام أي تعبير من تعبيرات تقنية SassScript والتي ستُقيَّم وتُحدَّد قيمتها لمعرفة القيمة التي ستُسنَد إلى المفتاح.
 
 
 
لا يمكن ترجمة القواميس إلى لغة CSS. وسيُسبِّب استخدامها كمتغيراتٍ أو معطياتٍ لدوال CSS خطأ. استخدم الدالة ‎<code>inspect($value)‎</code> لإنتاج سلسلة نصّية لأجل إخراج القواميس في ملف CSS الناتج.
 
  
=== الألوان (Colors) ===
+
تُعالج القواميس، بشكل مشابه للقوائم، باستخدام دوال SassScript. الدالة <code>[[Sass/map get|map-get]]</code> مثلًا تبحث عن قيم محدَّدة في القاموس والدالّة <code>[[Sass/map merge|map-merge]]</code> تضيف قيمًا إلى القاموس. أمّا التعليمة <code>[[Sass/@ rules|‎@each]]</code> فيمكن استخدامها لإضافة أنماط لكل زوج مفتاح/قيمة (key/value) في القاموس. لا يتغير ترتيب الأزواج في القاموس منذ إنشائه.
كل تعبيرات الألوان في CSS تُرجع قيمة لونيّة في SassScript. وهذا يشمل عددًا كبيرًا من الألوان المُسمّاة، والتي لا يمكن تمييزها عن السلاسل النصية غير المُقتبسة.
 
  
في الوضع المضغوط (compressed mode)، ستُخرج sass أوجز تمثيل ممكن للألوان في CSS. على سبيل المثال، ستُترجم <code>‎#FF0000</code> إلى الكلمة red في الوضع المضغوط، ولكنّ <code>blanchedalmond</code> ستُترجَم إلى <code>‎#FFEBCD</code>.
+
يمكن استخدام القواميس في أيّ مكان تُستخدم فيه القوائم. عند استخدامها من قبل دالةٍ خاصَّة بالقوائم، فستُعامل على أنّها قائمةٌ مكونة من أزواج. ستُعامل دوال القوائم مثل القاموس <code>(key1: value1, key2: value2)</code> على أنَّه القائمة المتشعّبة <code>key1 value1, key2 value2</code>. لا يمكن أن تُعامَل القوائم على أنّها قواميس باستثناء القائمة الفارغة. تمثّل <code>()</code> قاموسًا لا يحتوي أيّ أزواج (مفتاح/قيمة) وقائمة لا تحتوي أيّ عناصر في آنٍ واحدٍ.
  
من المشاكل الشائعة في استخدام الألوان المسماة هو أنه لمّا كانت sass تُفضّل نفس تنسيق المُخرجات كما كُتبت في أوضاع الإخراج الأخرى، فإنّ الألوان المستوفاة (interpolated) في محدد معيّن ستصبح غير صالحة عند ضغطها. لتجنب هذه المشكلة، ضع الألوان المسماة دائمًا بين علامتي تنصيص إن كنت ترغب في استخدامها في إنشاء محدّد.
+
الجدير بالذكر أنّ مفاتيح القاموس يمكن أن تكون أيّ نوع من أنواع بيانات Sass كما تتيح الصياغة المستعملة لتعريف القاموس استخدام أي تعبير من تعبيرات تقنية SassScript التي ستُقيَّم وتُحدَّد قيمتها للتعرف على قيمة المفتاح.
  
=== الدوالّ من الدرجة الأولى (First Class Functions) ===
+
لا يمكن ترجمة القواميس إلى لغة CSS إذ سيُسبِّب استخدامها كمتغيراتٍ أو معطياتٍ لدوال CSS خطأ. استخدم الدالة ‎<code>inspect($value)</code> لإنتاج سلسلة نصّية عند إخراج القواميس في ملف CSS الناتج.
يمكن الحصول على مؤشر (reference) دالة معيّنة عبر التعبير <code>get-function($function-name)</code>. وعند تمرير مؤشّر دالة إلى <code>call($function, $args...)</code>‎ فستُستدعى الدالة التي يشير إليها. لا تُترجم لغة [[CSS]] دوال الدرجة الأولى مباشرةً، وأيّ محاولةٍ لفعل ذلك ستؤدي إلى إطلاق خطأ.
+
===الألوان (Colors)===
 +
تُرجع كلُّ تعابير الألوان في CSS قيمة لونيّة في SassScript. وهذا يشمل عددًا كبيرًا من الألوان المُسمّاة، والتي لا يمكن تمييزها عن السلاسل النصيَّة غير المُقتبسة.
  
== العمليات (Operations) ==
+
ستُخرج sass في الوضع المضغوط (compressed mode) أوجز تمثيل ممكن للألوان في CSS. سيُترجم <code>‎#FF0000</code> مثلًا إلى <code>red</code> في الوضع المضغوط، بينما سيُترجم <code>blanchedalmond</code> إلى <code>‎#FFEBCD</code>.
جميع الأنواع تدعم معاملات التساوي (<code>==</code> و <code>=!</code>). بالإضافة إلى ذلك، يدعم كل نوعٍ معاملاتٍ خاصةٍ به.
 
  
=== العمليات على الأعداد ===
+
من المشاكل الشائعة في استخدام الألوان المسماة هو أنّه لمّا كانت sass تُفضّل نفس تنسيق المُخرجات كما كُتبت في أوضاع الإخراج الأخرى، فستصبح الألوان المستوفاة (interpolated) في محدِّد معيّن غير صالحة عند ضغطها حينئذ. يمكن تجنب هذه المشكلة بوضع الألوان المسماة دائمًا بين علامتي تنصيص إن كنت ترغب في استخدامها في محدّد باني.
تدعم SassScript العمليات الحسابية الاعتيادية على الأعداد (الإضافة <code>+</code> والطرح <code>-</code> والضرب <code>*</code> والقسمة <code>/</code> وباقي القسمة <code>%</code>). تحفظ دوال sass الرياضية الوحدات خلال العمليات الحسابية. هذا يعني أنه، كما هو الحال في الحياة الحقيقية، لا يمكنك أن تعمل على أرقام ذات وحدات غير متوافقة (مثل إضافة قيمة وحدتها <code>px</code> إلى قيمة وحدتها <code>em</code>)، وسيكون ناتج ضرب عددين لهما نفس الوحدة وحدةً مربّعةً (<code>10px * 10px == 100px * px</code>). تذكّر أنّ الوحدة المربعة <code>px * px</code> غير صالحة في لغة CSS، وستُطلق Sass خطأً إن حاولت استخدام وحدات غير صالحة في CSS.
+
===الدوالّ من الدرجة الأولى (First Class Functions)===
 +
يمكن الحصول على مؤشِّر (reference) دالة معيّنة باستعمال التعبير <code>get-function($function-name)</code>‎. عند تمرير مؤشّر دالة إلى الدالة <code>call($function, $args...)</code>‎ فستُستدعى حينئذ الدالة التي يشير إليها. لا تُترجم لغة [[CSS]] دوال الدرجة الأولى مباشرةً، وأيّ محاولةٍ لفعل ذلك ستؤدي إلى إطلاق خطأ.
 +
==العمليات (Operations)==
 +
تدعم جميع الأنواع معاملات التساوي (<code>==</code> و <code>=!</code>). بالإضافة إلى ذلك، يدعم كلُّ نوعٍ معاملاتٍ خاصةٍ به.
 +
===العمليات على الأعداد===
 +
تدعم SassScript العمليات الحسابيَّة الاعتيادية على الأعداد (الجمع <code>+</code>، والطرح <code>-</code>، والضرب <code>*</code>، والقسمة <code>/</code>، وباقي القسمة <code>%</code>). تحفظ دوال sass الرياضية الواحدات خلال العمليات الحسابيَّة. هذا يعني أنَّه، كما هو الحال في الواقع، لا يمكنك أن تعمل على أرقام ذات واحدات غير متوافقة (مثل إضافة قيمة واحدتها <code>px</code> إلى قيمة واحدتها <code>em</code>)، وستكون واحدة ناتج ضرب عددين لهما الواحدة ذاتها واحدةً مربّعةً (<code>10px * 10px == 100px * px</code>). تذكّر أنّ الواحدة المربّعة <code>px * px</code> غير صالحة في لغة CSS، وستُطلق Sass خطأً إن حاولت استخدام واحدات غير صالحة في CSS.
  
 
معاملات المقارنة (<code><</code> و <code>></code> و <code>=<</code> و <code>=></code>) مدعومةٌ أيضًا على الأعداد، أمّا معاملات التساوي (<code>==</code> و <code>=!</code>) فتدعمها جميع الأنواع.
 
معاملات المقارنة (<code><</code> و <code>></code> و <code>=<</code> و <code>=></code>) مدعومةٌ أيضًا على الأعداد، أمّا معاملات التساوي (<code>==</code> و <code>=!</code>) فتدعمها جميع الأنواع.
 +
===القسمة والمعامل <code>/</code>===
 +
تسمح CSS بأن يظهر المعامل <code>/</code> في قيم الخاصِّيَّات كوسيلة لفصل الأعداد. ولمّا كانت SassScript امتدادًا لصياغة الخاصيّات في لغة CSS، فلابُد من أن تدعمَ هذا النوع من الصياغة، وتسمحَ أيضًا باستخدام المعامل <code>/</code> لأجل القسمة في الوقت عينه. وهذا يعني افتراضيًا، أنّه إذا فُصل عددان بالمعامل <code>/</code> في SassScript، فسيظهران على نفس النحو في ملف CSS الناتج.
  
=== القسمة والرمز <code>/</code> ===
+
هناك ثلاث حالات سيُفسَّر فيها الرمز <code>/</code> على أنّه عمليّة قسمة. هذه الحالات تشمل غالبية استعمالات عمليّة القسمة وهي:
تسمح CSS بأن يظهر الرمز <code>/</code> في قيم الخاصيات كوسيلة لفصل الأعداد. ولمّا كانت SassScript امتدادًا لصياغة الخاصيّات في لغة CSS، فلابُد من أن تدعمَ هذا النوع من الصياغة وفي الوقت عينه تسمحَ باستخدام الرمز <code>/</code> لأجل القسمة. وهذا يعني افتراضيًا، أنّه إذا فُصل عددان بالرمز <code>/</code> في SassScript، فسيظهران على نفس النحو في ملف CSS الناتج.
+
#إن خُزّنت القيمة، أو جزءٌ منها، في متغير أو أُعيدت من قبل دالة.
 
+
#إن أُحيطت القيمة بقوسين، ما لم يكن هذان القوسان خارج قائمةٍ والقيمة داخلها.
هناك ثلاث حالات سيُفسَّر فيها الرمز <code>/</code> على أنّه عمليّة قسمة. هذه الحالات تشمل غالبية استعمالات عمليّة القسمة. وهي:
+
#إن كانت القيمة جزءًا من تعبيرٍ حسابيّ آخر.
# إن خُزّنت القيمة، أو جزءٌ منها، في متغير أو أُعيدت من قبل دالة.
+
انظر على سبيل المثال الشيفرة التالية:<syntaxhighlight lang="sass">
# إن أُحيطت القيمة بقوسين، ما لم يكن هذان القوسان خارج قائمةٍ والقيمة داخلها.
 
# إن كانت القيمة جزءًا من تعبيرٍ حسابيّ آخر.
 
على سبيل المثال:<syntaxhighlight lang="sass">
 
 
p {
 
p {
 
 font: 10px/8px;             // العادية، ليست قسمةً CSS
 
 font: 10px/8px;             // العادية، ليست قسمةً CSS
سطر 146: سطر 133:
 
   height: 250px;
 
   height: 250px;
 
   margin-left: 9px; }
 
   margin-left: 9px; }
</syntaxhighlight>إن أردت استخدام المتغيرات مع الإبقاء على الصياغة العادية للرمز <code>/</code> في لغة CSS، فيمكنك استخدام <code>{}#</code> لإدراجها مباشرةً. على سبيل المثال:<syntaxhighlight lang="sass">
+
</syntaxhighlight>إن أردت استخدام المتغيرات مع الإبقاء على الصياغة العاديَّة للمعامل <code>/</code> في لغة CSS، فيمكنك استخدام الاستيفاء <code>{}#</code> لإدراجها مباشرةً. انظر مثلًا الشيفرة:<syntaxhighlight lang="sass">
 
p {
 
p {
 
   $font-size: 12px;
 
   $font-size: 12px;
سطر 157: سطر 144:
  
 
</syntaxhighlight>
 
</syntaxhighlight>
 
+
===الطرح والأعداد السالبة والمعامل <code>-</code>===
=== الطرح والأرقام السالبة والرمز <code>-</code> ===
+
يمكن أن يمثل المعامل <code>-</code> عدَّة أشياء مختلفة في لغة CSS و Sass. يمكن أن يكون عامل طرح (كما هو الحال في <code>5px - 3px</code>)، أو بداية عددٍ سالبٍ (كما هو الحال في <code>‎-3px</code>)، أو قد يكون عامل نفيٍ أحادي للمتغير (مثل ‎<code>-$var</code>)، ويمكن أن يكون جزءًا من مُعرّفٍ (مثل <code>[[CSS/font-weight|font-weight]]</code>). يمكن في أكثر الحالات معرفة وظيفة الرمز <code>-</code> من السياق، وقد تلتبس بعض الحالات الأخرى. إليك هذه التوصيات بوصفها قاعدة عامةٍ:
الرمز <code>-</code> يمكن أن يعني عدة أشياء مختلفة في لغتي CSS و Sass. فيمكن أن يكون عامل طرح (كما هو الحال في <code>5px - 3px</code>)، أو بداية عددٍ سالبٍ (كما هو الحال في <code>‎-3px</code>)، أو قد يكون عامل نفيٍ أحادي (كما في<code>-$var</code>)، ويمكن أن يكون جزءًا من مُعرّفٍ (كما في <code>[[CSS/font-weight|font-weight]]</code>). في أكثر الحالات يمكن معرفة وظيفة الرمز <code>-</code> من السياق، ولكن هناك بعض الحالات المُلتبسة. كقاعدة عامةٍ إليك هذه التوصيات:
+
*دائمًا ضع مسافةً بيضاء قبل المعامل <code>-</code> وبعده عند استخدامه للطرح.
* دائمًا ضع مسافةً بيضاء قبل الرمز <code>-</code> وبعده عند استخدامه لأجل الطرح.
+
*ضع مسافة قبل <code>-</code> ولكن ليس بعده في حالة الأعداد السالبة أو النفي الأحادي.
* ضع مسافة قبل <code>-</code> ولكن ليس بعدها في حالة الأعداد السلبية أو النفي الأحادي.
+
*ضع النفي الأحادي بين قوسين إن كان في قائمة مفصولة بالمسافات، مثل <code>‎10px (-$var)</code>‎.
* ضع النفي الأحادي بين قوسين إن كان في قائمة مفصولة بالمسافات، كما هو الحال في التعبير <code>‎10px (-$var)</code>‎.
+
أسبقية المعاني المختلفة للمعامل <code>-</code> هي حسب الترتيب التالي:
أسبقية المعاني المختلفة للرمز <code>-</code> هي حسب الترتيب التالي:
+
#كونه جزءًا من مُعرّف. أي أنّ <code>a-1</code> هي سلسلة نصيّة غير مُقتبسة قيمتها <code>"a-1"</code> وتستثنى الواحدات فقط من ذلك؛ تسمح Sass عادةً لأي مُعرّف صالح بأن يًستخدم كمعرّف، ولكن قد لا يصحّ أن تحتوي المُعرّفات على شرْطة يليها عدد. أي أنّ <code>5px-3px</code> هو مثل <code>5px - 3px</code>.
# جزء من مُعرّف. هذا يعني أنّ <code>a-1</code> هي سلسلة نصيّة غير مُقتبسة قيمتها <code>"a-1"</code>. الاستثناء الوحيد هي الوحدات؛ تسمح Sass عادةً لأي مُعرّف صالح بأن يًستخدم كمعرّف، ولكن لا يصحّ أن تحتوي المُعرّفات على شرْطة يليها عدد. وهذا يعني أنّ <code>5px-3px</code> مثل <code>5px - 3px</code>.
+
#وجوده بين عددين وبدون مسافة بيضاء يشير إلى عمليّة طرح، لذا يعدُّ التعبير <code>1-2</code> مماثلًا تمامًا للتعبير <code>1 - 2</code>.
# بين عددين وبدون مسافة بيضاء. هذا يدلّ على عمليّة الطرح، لذلك فالتعبير <code>1-2</code> مثل <code>1 - 2</code>.
+
#وجوده قبل عددٍ ولكن غيرَ مسبوق بعددٍ يشير إلى أن ذلك العدد هو عدد سالب، لذلك فالتعبير <code>1 -2</code> هو قائمة تحتوي على <code>1</code> و <code>-2</code>.
# قبل عددٍ ولكن غيرَ مسبوقة بعددٍ. هذا يشير إلى عدد سلبي، لذلك فالتعبير <s>1 -2</s> هو قائمة تحتوي على <code>1</code> و <code>-2</code>.
+
#وجوده بين عددين بغض النظر عن وجود المسافات يدلّ على عمليّة الطرح، لذلك يعدُّ التعبير <code>1‎ ‎-$var</code> مماثلًا للتعبير <code>1‎ ‎- $var</code>.
# بين عددين بغض النظر عن وجود المسافات. هذا يدلّ على عمليّة الطرح، لذلك فالتعبير <code>1‎ ‎-$var</code> مثل <code>1‎ ‎- $var</code>.
+
#وجوده قبل قيمة معيّنة يعني أنَّه عامل نفي أحادي. بعبارة أخرى، تعاد القيمة السالبة للعدد عند وجوده قبله.
# قبل قيمة معيّنة. هذا يعني عامل نفي أحادي. أي عاملًا يأخذ عددًا ويُرجع سالبه.
+
===عمليات الألوان (Color Operations)===
 
+
تدعم القيم اللّونية كل العمليات الحسابيَّة، إذ تنفذ تلك العمليات على مركّبات الألوان مثنى مثنى. أي تُنفّذ العمليّة على مركبة الأحمر والأخضر والأزرق. انظر المثال التالي:<syntaxhighlight lang="sass">
=== عمليات الألوان (Color Operations) ===
 
كل العمليات الحسابية مدعومةُ على القيم اللّونية، إذ تعمل على مركّبات الألوان مثنى مثنى. أي أنّ العمليّة تُنفّذ على الأحمر والأخضر والأزرق. على سبيل المثال:<syntaxhighlight lang="sass">
 
 
p {
 
p {
 
   color: #010203 + #040506;
 
   color: #010203 + #040506;
 
}
 
}
  
</syntaxhighlight>ستحسُب 01 + 04 = 05 و 02 + 05 = 07 و 03 + 06 = 09، وستُصرّف إلى:<syntaxhighlight lang="css">
+
</syntaxhighlight>ستُحسب 01 + 04 = 05 و 02 + 05 = 07 و 03 + 06 = 09، وستُصرّف إلى:<syntaxhighlight lang="css">
 
p {
 
p {
 
   color: #050709; }
 
   color: #050709; }
  
</syntaxhighlight>في المُجمل يُفضّل استخدام دوال الألوان على استخدام حسابيّات الألوان لتحقيق التأثير نفسه.
+
</syntaxhighlight>يُفضّل غالبًا استخدام دوال الألوان على استخدام العمليات الحسابيَّة لإنجاز العملية عليها والحصول على النتيجة ذاتها.
  
تعمل العمليات الحسابية أيضًا بين الأعداد والألوان، وأيضًا مثنى مثنى. على سبيل المثال:<syntaxhighlight lang="sass">
+
تطبَّق العمليات الحسابيَّة أيضًا على الأعداد والألوان، وأيضًا مثنى مثنى. انظر مثلًا:<syntaxhighlight lang="sass">
 
p {
 
p {
 
   color: #010203 * 2;
 
   color: #010203 * 2;
 
}
 
}
  
</syntaxhighlight>ستحسُب 01 * 2 = 02 و 02 * 2 = 04 و 03 * 2 = 06، وستُصرّف إلى:<syntaxhighlight lang="css">
+
</syntaxhighlight>ستُحسب 01 * 2 = 02 و 02 * 2 = 04 و 03 * 2 = 06، وستُصرّف إلى:<syntaxhighlight lang="css">
 
p {
 
p {
 
   color: #020406; }
 
   color: #020406; }
  
</syntaxhighlight>تذكّر أنّ الألوان ذات قناة الشفافية (alpha، أي تلك التي أُنشئت بواسطة إحدى الدالّتين <code>[[Sass/rgba|rgba]]</code> و <code>[[Sass/hsla|hsla]]</code>) يجب أن تكون لها نفس قيمة الشفافية من أجل أن تكون قابلةً لإجراء العمليّات الحسابية عليها. تلك العمليّات لا تؤثّر على قيمة الشفافية. على سبيل المثال:<syntaxhighlight lang="sass">
+
</syntaxhighlight>يجب أن يكون للألوان ذات قناة الشفافيَّة alpha (أي تلك التي أُنشئت بواسطة إحدى الدالّتين <code>[[Sass/rgba|rgba]]</code> و <code>[[Sass/hsla|hsla]]</code>) نفس قيمة الشفافيَّة لتتمكن من إجراء العمليّات الحسابيَّة عليها. تلك العمليّات لا تؤثّر على قيمة الشفافيَّة. انظر على سبيل المثال:<syntaxhighlight lang="sass">
 
p {
 
p {
 
   color: rgba(255, 0, 0, 0.75) + rgba(0, 255, 0, 0.75);
 
   color: rgba(255, 0, 0, 0.75) + rgba(0, 255, 0, 0.75);
سطر 200: سطر 185:
 
   color: rgba(255, 255, 0, 0.75); }
 
   color: rgba(255, 255, 0, 0.75); }
  
</syntaxhighlight>يمكن تعديل قناة الشفافية للونٍ معيّن باستخدام الدالّتين <code>[[Sass/opacify|opacify]]</code> و <code>[[Sass/transparentize|transparentize]]</code>. على سبيل المثال:<syntaxhighlight lang="sass">
+
</syntaxhighlight>يمكن تعديل قناة الشفافيَّة للونٍ معيّن باستخدام الدالّتين <code>[[Sass/opacify|opacify]]</code> و <code>[[Sass/transparentize|transparentize]]</code>. انظر المثال التالي:<syntaxhighlight lang="sass">
 
$translucent-red: rgba(255, 0, 0, 0.5);
 
$translucent-red: rgba(255, 0, 0, 0.5);
 
p {
 
p {
سطر 207: سطر 192:
 
}
 
}
  
</syntaxhighlight>ستُصرّف إلى:<syntaxhighlight lang="css">
+
</syntaxhighlight>ستُصرّف الشيفرة إلى:<syntaxhighlight lang="css">
 
p {
 
p {
 
   color: rgba(255, 0, 0, 0.8);
 
   color: rgba(255, 0, 0, 0.8);
 
   background-color: rgba(255, 0, 0, 0.25); }
 
   background-color: rgba(255, 0, 0, 0.25); }
  
</syntaxhighlight>تتطلب الخاصية <code>filters</code> في متصفح IE أن تشتمل كلُّ الألوان على قناة الشفافية، وأن تكون في الشكل <code>‎#AABBCCDD</code> تحديدًا. يمكنك بسهولة تحويل اللون باستخدام الدالة <code>[[Sass/ie hex str|ie_hex_str]]</code>. على سبيل المثال:<syntaxhighlight lang="sass">
+
</syntaxhighlight>تحتاج الخاصِّيَّة <code>filters</code> في متصفح IE أن تشتمل كلُّ الألوان على قناة الشفافيَّة، وأن تكون في الشكل <code>‎#AABBCCDD</code> تحديدًا. يمكنك بسهولة تحويل اللون باستخدام الدالة <code>[[Sass/ie hex str|ie_hex_str]]</code>. انظر المثال التالي:<syntaxhighlight lang="sass">
 
$translucent-red: rgba(255, 0, 0, 0.5);
 
$translucent-red: rgba(255, 0, 0, 0.5);
 
$green: #00ff00;
 
$green: #00ff00;
سطر 219: سطر 204:
 
}
 
}
  
</syntaxhighlight>ستُصرّف إلى:<syntaxhighlight lang="css">
+
</syntaxhighlight>ستُصرّف الشيفرة إلى:<syntaxhighlight lang="css">
 
div {
 
div {
 
   filter: progid:DXImageTransform.Microsoft.gradient(enabled='false', startColorstr=#FF00FF00, endColorstr=#80FF0000);
 
   filter: progid:DXImageTransform.Microsoft.gradient(enabled='false', startColorstr=#FF00FF00, endColorstr=#80FF0000);
 
}
 
}
 
</syntaxhighlight>
 
</syntaxhighlight>
 
+
===العمليات على السلاسل النصيّة (String Operations)===
=== العمليات على السلاسل النصيّة (String Operations) ===
+
يمكن استخدام عمليَّة الجمع <code>+</code> لضمّ السلاسل النصّية.<syntaxhighlight lang="sass">
يمكن استخدام العمليّة <code>+</code> لضمّ السلاسل النصّية:<syntaxhighlight lang="sass">
 
 
p {
 
p {
 
   cursor: e + -resize;
 
   cursor: e + -resize;
 
}
 
}
  
</syntaxhighlight>ستُصرّف إلى:<syntaxhighlight lang="css">
+
</syntaxhighlight>ستُصرّف الشيفرة السابقة إلى:<syntaxhighlight lang="css">
 
p {
 
p {
 
   cursor: e-resize; }
 
   cursor: e-resize; }
  
</syntaxhighlight>لاحظ أنّه إذا أُضيفت سلسلة نصّية مُقتبسة إلى أخرى غير مقتبسة (أي أنّ السلسلة النصية المقتبسة موجودة على يسار إشارة <code>+</code>) فالنتيجة هي سلسلة نصيّة مقتبسة. وبالمثل، إذا أُضيفت سلسلة نصّية غير مُقتبسة إلى أخرى مقتبسة (السلسلة النصية غير المقتبسة على يسار إشارة <code>+</code>) فالنتيجة هي سلسلة نصيّة غير مقتبسة. على سبيل المثال:<syntaxhighlight lang="sass">
+
</syntaxhighlight>لاحظ أنّه إذا أُضيفت سلسلة نصّية مُقتبسة إلى أخرى غير مقتبسة (أي أنّ السلسلة النصية المقتبسة موجودة على يسار إشارة <code>+</code>)، فالنتيجة هي سلسلة نصيّة مقتبسة. وبالمثل، إذا أُضيفت سلسلة نصّية غير مُقتبسة إلى أخرى مقتبسة (السلسلة النصية غير المقتبسة على يسار إشارة <code>+</code>)، فالنتيجة هي سلسلة نصيّة غير مقتبسة. انظر مثلًا الشيفرة التالية:<syntaxhighlight lang="sass">
 
p:before {
 
p:before {
 
   content: "Foo " + Bar;
 
   content: "Foo " + Bar;
سطر 244: سطر 228:
 
   content: "Foo Bar";
 
   content: "Foo Bar";
 
   font-family: sans-serif; }
 
   font-family: sans-serif; }
</syntaxhighlight>افتراضيّا، إذا وضَعت قيمتين بجانب بعضها البعض، فستُضمّان إلى بعضهما بفراغ واحد، مثلًا:<syntaxhighlight lang="sass">
+
</syntaxhighlight>افتراضيّا، إذا وضَعت قيمتين بجانب بعضها البعض، فستُضمّان إلى بعضهما بفراغ واحد، انظر مثلًا الشيفرة:<syntaxhighlight lang="sass">
 
p {
 
p {
 
   margin: 3px + 4px auto;
 
   margin: 3px + 4px auto;
سطر 252: سطر 236:
 
   margin: 7px auto; }
 
   margin: 7px auto; }
  
</syntaxhighlight>يمكن استخدام الاستيفاء (<code>{}#</code>) داخل سلسلة نصية لحشو قيمة ديناميكيّة داخل السلسلة، مثلًا:<syntaxhighlight lang="sass">
+
</syntaxhighlight>يمكن استخدام الاستيفاء (<code>{}#</code>) داخل سلسلة نصيَّة لحشو قيمة ديناميكيّة داخل السلسلة، انظر مثلًا الشيفرة التالية:<syntaxhighlight lang="sass">
 
p:before {
 
p:before {
 
   content: "I ate #{5 + 10} pies!";
 
   content: "I ate #{5 + 10} pies!";
سطر 261: سطر 245:
 
   content: "I ate 15 pies!"; }
 
   content: "I ate 15 pies!"; }
  
</syntaxhighlight>تُعامَل القيمة المعدومة (Null) على أنّها سلسلة فارغة عند استيفاء السلاسل النصّية، مثلًا:<syntaxhighlight lang="sass">
+
</syntaxhighlight>تُعامَل القيمة المعدومة (Null) على أنّها سلسلة فارغة عند استيفاء السلاسل النصّية.<syntaxhighlight lang="sass">
 
$value: null;
 
$value: null;
 
p:before {
 
p:before {
سطر 272: سطر 256:
  
 
</syntaxhighlight>
 
</syntaxhighlight>
 
+
===العمليات المنطقية (Boolean Operations)===
=== العمليات المنطقية (Boolean Operations) ===
+
تدعم SassScript استعمال المعامل <code>and</code> والمعامل <code>or</code> والمعامل <code>not</code> مع القيم المنطقيَّة.
تدعم SassScript العوامل <code>and</code> و <code>or</code> و <code>not</code> على القيم المنطقية.
+
===عمليات القوائم (List Operations)===
 
+
لا تدعم القوائم أيّ معاملات خاصَّة، بل تُعالج باستخدام دوال القوائم.
=== عمليات القوائم (List Operations) ===
+
==الأقواس==
لا تدعم القوائم أيّ معاملات خاصة، بل تُعالج باستخدام دوال القوائم.
+
يمكن استخدام الأقواس لترتيب العمليات. انظر مثلًا الشيفرة التالية:<syntaxhighlight lang="sass">
 
 
== الأقواس ==
 
يمكن استخدام الأقواس للتأثير على ترتيب العمليات، مثلًا:<syntaxhighlight lang="sass">
 
 
p {
 
p {
 
   width: 1em + (2em * 3);
 
   width: 1em + (2em * 3);
سطر 289: سطر 270:
  
 
</syntaxhighlight>
 
</syntaxhighlight>
 
+
==الدّوال==
== الدّوال ==
+
هنالك الكثير من الدّوال المفيدة المعرَّفة في SassScript التي يمكن استدعاؤها باستخدام الصياغة العادية للدّوال في لغة CSS.<syntaxhighlight lang="sass">
تُعرِّف SassScript بعض الدّوال المفيدة التي يمكن استدعاؤها باستخدام الصياغة العادية للدّوال في لغة CSS:<syntaxhighlight lang="sass">
 
 
p {
 
p {
 
   color: hsl(0, 100%, 50%);
 
   color: hsl(0, 100%, 50%);
 
}
 
}
</syntaxhighlight>ستُصرّف إلى:<syntaxhighlight lang="css">
+
</syntaxhighlight>ستُصرّف الشيفرة السابقة إلى:<syntaxhighlight lang="css">
 
p {
 
p {
 
   color: #ff0000; }
 
   color: #ff0000; }
  
 
</syntaxhighlight>راجع صفحة الدوال في Sass للحصول على قائمة كاملة بالدوال المتاحة.
 
</syntaxhighlight>راجع صفحة الدوال في Sass للحصول على قائمة كاملة بالدوال المتاحة.
 
+
===الوسائط المسمّاة (Keyword Arguments)===
=== الوسائط المسمّاة (Keyword Arguments) ===
+
يمكنُ استدعاء دوالّ Sass باستخدام وسائط (arguments) مسماةٍ بشكل صريح. المثال أعلاه يُمكن أن يُكتب على النحو التالي:<syntaxhighlight lang="sass">
يمكنُ استدعاء دوالّ Sass باستخدام وسائط (arguments) مسماةٍ صراحةً. المثال أعلاه يُمكن أن يُكتب على النحو التالي:<syntaxhighlight lang="sass">
 
 
p {
 
p {
 
   color: hsl($hue: 0, $saturation: 100%, $lightness: 50%);
 
   color: hsl($hue: 0, $saturation: 100%, $lightness: 50%);
 
}
 
}
</syntaxhighlight>قد تكون هذه الصياغة أقلّ إيجازًا، ولكنّها يمكن أن تجعل مقروئية ملف الأنماط أيْسر. كما ستسمح للدوالّ بتقديم واجهات أكثر مرونة، وتمرير العديد من الوسائط دون أن تكون هناك صعوبة في استدعائها.
+
</syntaxhighlight>قد تكون هذه الصياغة أقلّ إيجازًا، ولكنّها يمكن أن تجعل مقروئيَّة ملف الأنماط أيْسر. كما ستسمح للدوالّ بتقديم واجهات أكثر مرونة، وتمرير العديد من الوسائط دون أن تكون هناك صعوبة في استدعائها.
 
 
يمكن تمرير الوسائط المسمّاة حسب أيّ ترتيب، والمعطياتُ ذات القيم الافتراضية يمكن حذفها. ولأنّ الوسائط المُسمّاة أسماءُ متغيراتِ، فلا فرق بين استخدام الشرطات السفلية <code>_</code> (underscores) واستخدام الشرطات العادية <code>-</code> (dashes).
 
  
انظر صفحة [[Sass/functions|الدوال في Sass]] للحصول على قائمة كاملة من دوالّ sass وأسماء مُعطياتها، وكذلك إرشادات تعريفها في لغة [[Ruby]].
+
يمكن تمرير الوسائط المسمّاة حسب أيّ ترتيب، ويمكن حذف المعطياتُ ذات القيم الافتراضيَّة. لمَّا كانت الوسائط المُسمّاة أسماءُ متغيراتِ، فلا فرق بين استخدام الشرطات السفلية <code>_</code> واستخدام الشرطات العادية <code>-</code>.
  
=== الاستيفاء (Interpolation):‏ ‎<code>#{}‎</code> ===
+
انظر صفحة [[Sass/functions|الدوال في Sass]] للحصول على قائمة كاملة من دوالّ sass وأسماء مُعطياتها، وكذلك إرشادات تعريفها في لغة [[Ruby|روبي]].
يمكنك أيضًا استخدام المتغيرات في لغة SassScript في المُحدّدات (selectors) وأسماء الخاصيّات باستخدام صياغة الاستيفاء <code>{}#</code>:<syntaxhighlight lang="sass">
+
===الاستيفاء (Interpolation):‏ ‎<code>#{}‎</code>===
 +
يمكنك أيضًا استخدام المتغيرات في لغة SassScript في المُحدّدات (selectors) وأسماء الخاصيّات باستخدام صياغة الاستيفاء <code>{}#</code>.<syntaxhighlight lang="sass">
 
$name: foo;
 
$name: foo;
 
$attr: border;
 
$attr: border;
سطر 320: سطر 298:
 
}
 
}
  
</syntaxhighlight>ستُصرّف إلى:<syntaxhighlight lang="css">
+
</syntaxhighlight>ستُصرّف الشيفرة إلى:<syntaxhighlight lang="css">
 
p.foo {
 
p.foo {
 
   border-color: blue; }
 
   border-color: blue; }
  
</syntaxhighlight>من الممكن أيضًا استخدام <code>{}#</code> في قيم الخاصيات. في معظم الحالات، هذا ليس أفضل من استخدام المتغيرات، ولكن باستخدام الصيغة <code>{}#</code> فكلّ العمليات المجاورة لها ستُعامل على أنّها صياغة عادية للغة CSS. على سبيل المثال:<syntaxhighlight lang="sass">
+
</syntaxhighlight>من الممكن أيضًا استخدام الاستيفاء <code>{}#</code> في قيم الخاصيات. في معظم الحالات، هذا ليس أفضل من استخدام المتغيرات، ولكن باستخدام الصيغة <code>{}#</code> فكلّ العمليات المجاورة لها ستُعامل على أنّها صياغة عادية للغة CSS. على سبيل المثال:<syntaxhighlight lang="sass">
 
p {
 
p {
 
   $font-size: 12px;
 
   $font-size: 12px;
سطر 334: سطر 312:
 
   font: 12px/30px; }
 
   font: 12px/30px; }
 
</syntaxhighlight>
 
</syntaxhighlight>
 
+
==الرمز <code>&</code> في SassScript==
== الرمز <code>&</code> في SassScript ==
+
يشير الرمز <code>&</code> في SassScript إلى المُحدّد الأب الحالي، تمامًا كما هو الحال عندما يُستخدم في المحدّدات. وهو قائمةٌ مفصولة بالفواصل لقوائم مفصولة بالمسافات. انظر على سبيل المثال:<syntaxhighlight lang="sass">
يشير الرمز <code>&</code> في SassScript إلى المُحدّد الأب الحالي، تمامًا كما هو الحال عندما يُستخدم في المحدّدات. وهو قائمةٌ مفصولة بالفواصل لقوائم مفصولة بالمسافات. على سبيل المثال:<syntaxhighlight lang="sass">
 
 
.foo.bar .baz.bang, .bip.qux {
 
.foo.bar .baz.bang, .bip.qux {
 
   $selector: &;
 
   $selector: &;
 
}
 
}
  
</syntaxhighlight>قيمة <code>‎$selector</code> في المثال هي ‎<code>((".foo.bar" ".baz.bang"), ".bip.qux")‎</code>. وُضعت المحددات المُركّبة بين علامتي اقتباس للإشارة إلى أنها سلاسلٌ نصّيةٌ، ولكن يمكن أن تكون غير مُقتبسة.
+
</syntaxhighlight>قيمة <code>‎$selector</code> في المثال هي ‎<code>((".foo.bar" ".baz.bang"), ".bip.qux")‎</code>. وُضعت المحدِّدات المُركّبة بين علامتي اقتباس للإشارة إلى أنها سلاسلٌ نصّيةٌ، ولكن يمكن أن تكون غير مُقتبسة.
  
حتى لو لم يحتوِ المحدد الأب فاصلةً أو مسافةً، فسيكون لقيمة الرمز <code>&</code> دائمًا مستويان من التشعّب، بحيث يمكن الوصول إليها بطريقة موحدة.
+
حتى إن لم يحتوِ المحدِّد الأب على فاصلةً أو مسافةً، فسيكون لقيمة الرمز <code>&</code> دائمًا مستويان من التشعّب، بحيث يمكن الوصول إليها بطريقة موحدة.
  
إن لم يكن هناك محددٌ أب، فإنّ قيمة <code>&</code> ستكون معدومةً (null). هذا يعني أنه يمكنك استخدامها في [[Sass/mixins|مخلوط]] (mixin) للتحقق من وجود المحدد الأب:<syntaxhighlight lang="sass">
+
إن لم يكن هناك محددٌ أب، فإنّ قيمة <code>&</code> ستكون معدومةً (null). هذا يعني أنَّه يمكنك استخدامها في [[Sass/mixins|مخلوط]] (mixin) للتحقَّق من وجود المحدِّد الأب.<syntaxhighlight lang="sass">
 
@mixin does-parent-exist {
 
@mixin does-parent-exist {
 
   @if & {
 
   @if & {
سطر 358: سطر 335:
 
}
 
}
 
</syntaxhighlight>
 
</syntaxhighlight>
 
+
==القيمة الافتراضية للمتغيرات: <code>‎!default</code>==
== القيمة الافتراضية للمتغيرات: <code>‎!default</code> ==
+
يمكنك ضبط قيمة افتراضيَّة للمتغيرٍ إن لم يكن قد ضُبِط سلفًا بإضافة الراية <code>‎!default</code> عقِب تلك القيمة. هذا يعني أنه متى أسندت قيمة إلى المتغير، فلن تسند تلك القيمة (الافتراضية) إليه مجدّدًا. أمَّا إن لم تسند قيمة إلى المتغير، فستكون قيمته هي القيمة الافتراضيَّة المحدَّدة. انظر الشيفرة التالية على سبيل المثال:<syntaxhighlight lang="sass">
يمكنك ضبط قيمة متغيرٍ إن لم يكن قد ضُبِط سلفًا بإضافة الراية <code>‎!default</code> عقِب القيمة. هذا يعني أنه إذا عُيِّنت قيمة المتغير سابقُا فلن يُعيّن مجدّدًا، ولكن إذا لم تكن لديه قيمة بعدُ، فستعطى له قيمةٌ في تلك الحالة. على سبيل المثال:<syntaxhighlight lang="sass">
 
 
$content: "First content";
 
$content: "First content";
 
$content: "Second content?" !default;
 
$content: "Second content?" !default;
سطر 375: سطر 351:
 
   new-content: "First time reference"; }
 
   new-content: "First time reference"; }
  
</syntaxhighlight>تَعتبر <code>‎!default</code> أنّ المتغيرات ذات القيمة المعدومة (null) هي قيمٌ غير مُعيّنة. مثلًا:<syntaxhighlight lang="sass">
+
</syntaxhighlight>تعامَل القيمة المعدومة (null) المسندة إلى المتغير على أنَّها قيمة غير مسندة، لذا ستسند القيمة الإفتراضيَّة إليه آنذاك.<syntaxhighlight lang="sass">
 
$content: null;
 
$content: null;
 
$content: "Non-null content" !default;
 
$content: "Non-null content" !default;
سطر 388: سطر 364:
  
 
</syntaxhighlight>
 
</syntaxhighlight>
 
+
==مصادر==
== مصادر ==
+
* <span> </span>[https://sass-lang.com/documentation/file.SASS_REFERENCE.html#sassscript قسم SassScript من توثيق Sass الرسمي].
* [https://sass-lang.com/documentation/file.SASS_REFERENCE.html#sassscript قسم SassScript من توثيق Sass الرسمي].
+
<noinclude>{{DISPLAYTITLE:صياغة SassScript}}</noinclude>
 
[[تصنيف:Sass]]
 
[[تصنيف:Sass]]

مراجعة 14:42، 30 أبريل 2018

تدعم Sass، بالإضافة إلى الصياغة العادية للغة CSS، مجموعةً صغيرةً من المُلحقات تُدعى SassScript. تُتيح SassScript للخاصيّات استخدام المتغيرات والعمليات الحسابيّة ودوالَّ أخرى إذ يمكن استخدام SassScript في قيمة أيِّ خاصيّة.

يمكن أيضًا استخدامها لتوليد المُحددّات (selectors) وأسماء الخاصِّيَّات، وهو أمرٌ مفيد عند كتابة المخاليط (mixins) إذ يكون ذلك باستخدام الاستيفاء (interpolation).

الصّدَفة التفاعلية (Interactive Shell)

يمكنك تجريب SassScript بسهولةٍ باستخدام الصّدفة التفاعلية. لتشغيل تلك الصّدفة، اكتب الأمر sass في سطر الأوامر متبوعًا بالخيار ‎-i ثمَّ أدخل في المِحث (prompt) أيَّ تعبير صالح في SassScript لأجل تقييمه وطباعة النتائج.

$ sass -i
>> "Hello, Sassy World!"
"Hello, Sassy World!"
>> 1px + 1px + 1px
3px
>> #777 + #777
#eeeeee
>> #777 + #888
white

المتغيرات: $

الطريقة البدهيّة لاستخدام SassScript هي باستخدام المتغيرات. تبدأ المتغيرات بعلامة الدولار ($)، وتُضبط كما تُضبط خاصيّات CSS.

$width: 5em;

يمكنك بعد ذلك الإشارة إليها في الخاصيّات، مثل:

#main {
  width: $width;
}

ستكون المتغيرات مرئيةً فقط في مستوى المُحدّدات المُتشعّبة حيث عُرِّفت أو دُونه. وإن عُرِّفت خارج كل المُحدّدات المتشعّبة، فستكون مُتاحةً في كل مكان. يمكن أيضًا جعلها متاحةً في كل مكانٍ يدويًا باستعمال بالرّاية ‎!global. انظر على سبيل المثال:

#main {
  $width: 5em !global;
  width: $width;
}

#sidebar {
  width: $width;
}

ستُصرّف إلى:

#main {
  width: 5em;
}

#sidebar {
  width: 5em;
}

لأسباب تاريخية، لا فرق بين الشّرْطات العاديَّة (hyphens) والشرطات السُّفلية (underscores) في أسماء المتغيّرات (وجميع مُعرِّفات Sass الأخرى). إن عَرّفت مثلًا متغيّرًا باسم ‎$main-width، فيمكنك الوصول إليه بالاسم ‎$main_width أيضًا، والعكس بالعكس.

أنواع البيانات

تدعم SassScript ثمانيةً من أنواع البيانات وهي:

  • الأعداد (مثل 1.2 و 13 و 10px).
  • السلاسل النصيّة، مع علامة الاقتباس وبدونها (مثل "‎foo" و 'bar' و baz).
  • الألوان (مثل blue و‏ #04a3f9‏ و rgba‎(255, 0, 0, 0.5)‎).
  • القيم المنطقيَّة (مثل true و false).
  • القيمة المعدومة (مثل null).
  • القوائم التي تحتوي على قيم مفصولةً بمسافات أو فواصل (مثل ‎1.5em 1em 0 2em أو‏‏ Helvetica, Arial, sans-serif).
  • القواميس (maps) التي تربط قيمةً بأخرى (مثل (key1: value1, key2: value2)).
  • مؤشّرات الدوال (function references).

كما تدعم SassScript أيضًا جميع الأنواع الأخرى لقيم خاصيّات CSS، مثل مجالات الترميز Unicode والتصريحات ‎!important. على أي حال، لا تُعامَل تلك الأنواعَ معاملة خاصّة، ولكن تعامَل كأنّها سلاسل نصيّة غير مقتبسة.

السلاسل النصيّة

يوجد في لغة CSS نوعان من السّلاسل النصّية هي: السلاسل النصيَّة المقتبسة، مثل "Lucida Grande" أو 'http://sass-lang.com'، والسلاسل النصيَّة غير المُقتبسة، مثل sans-serif أو bold. تتعرّف SassScript على كلا النّوعين وسيكون النّوع المُستخدم ذاته في ملف sass وملف CSS الناتج.

هناك استثناءٌ واحدٌ لتلك القاعدة وهو: عند استخدام الاستيفاء {}# (interpolation)، فإنّ السلاسل النصيّة المقتبسة تصبح غير مقتبسة. هذا يُسهّل استخدام أسماء المُحدّدات في المخاليط (mixins). انظر على سبيل المثال:

@mixin firefox-message($selector) {
  body.firefox #{$selector}:before {
    content: "Hi, Firefox users!";
  }
}

@include firefox-message(".header");

ستُصرّف إلى:

body.firefox .header:before {
  content: "Hi, Firefox users!"; }

القوائم

تستخدم Sass القوائم لتمثيل قيم تصريحات لغة CSS مثل margin: 10px 15px 0 0 أو font-face: Helvetica,‎ Arial, sans-serif. ليست القوائم إلا سلسلةً من قيم أخرى مفصولةً إما بمسافاتٍ أو فواصل. في الواقع، القيم المُفردة تعدّ قوائم أيضًا إذ هي قوائم أحادية.

لا تكون القوائم ذات فائدة دون دوال قوائم SassScript. مثلًا، الدالة النونية (nth function) يمكنها الوصول إلى العناصر الموجودة في القائمة، ودالة الضّم (join function) تضمّ عدة قوائم معًا، ودالّة الإلحاق (append function) تضيف عناصر إلى القوائم؛ وأمّا التعليمة ‎@each‏ ‎فيمكنها إضافة أنماط لكل عنصرٍ في القائمة.

يمكن أن تحتوي القوائمُ، بالإضافة إلى القيم البسيطة، قوائمَ أخرى. مثلًا، القائمة 1px 2px, 5px 6px هي قائمة ثنائيّة تحتوي على القائمة 1px 2px والقائمة 6px 5px. إن كانت القوائم الداخليَّّة تستخدم نفس الفاصلة التي تستخدمها القائمة الخارجية، فيجب استخدام الأقواس لتوضيح بداية القائمة الداخلية ونهايتها. على سبيل المثال، القائمة (1px 2px) (5px 6px) هي قائمة ثنائية تحتوي على القائمة 1px 2px والقائمة 5px 6px. الفرق هو أنّ القائمة الخارجية والداخلية مفصولتان بالمسافات البيضاء خلافًا للمثال السابق حيث فُصلت الخارجية بفاصلة والداخلية بمسافة بيضاء.

عند تحويل القوائم إلى لغة CSS، فلا تضيف sass الأقواس إذ لا تتعرف CSS على الأقواس. هذا يعني أنَّ القائمة (1px 2px) (5px 6px) والقائمة 1px 2px 5px 6px ستبدوان متشابهتين عند تصريفهما إلى لغة CSS. مع ذلك، لن تكونا متشابهتين عندما كتابتهما بلغة sass إذ أنَّ الأولى هي قائمةٌ تحتوي قائمَتين، في حين أنّ الثانية هي قائمة تحتوي أربعة أعداد.

يمكن للقوائم أن تكون خاليةً من أيّ عنصر وتُمثّل بقوسين () فقط (والذي يمكن أن يعني أيضًا قاموسًا [map] فارغًا). هذا النوع من القوائم لا يمكن أن يظهر في مخرجات CSS مباشرة. إن جربت ذلك باستعمال font-family: ()‎ مثلًا، فستطلق sass حينئذ خطأً. إذا احتوت قائمةٌ على قائمةٍ فارغة أو قيمة عدمية (null) مثل 2px 1px () 3px أو 1px 2px null 3px، فستُزال القوائم الفارغة والقيم العدمية قبل تحويلها إلى لغة CSS.

قد تحتوي القوائم المفصولة بفواصل على فاصلةٍ زائدةٍ وهذا مفيدٌ إذ تسمح لك بتمثيل قائمةٍ أحادية (single-element list). على سبيل المثال، (,1) هي قائمة تحتوي على 1 أمّا (‎1 2 3,‎) فهي قائمةٌ مفصولةٌ بفواصل تحتوي على قائمةٍ مفصولةٍ بمسافاتٍ بيضاء تحتوي على 1 و 2 و 3.

القوائم ذات الأقواس المربعة

يمكن أيضًا كتابة القوائم باستعمال الأقواس المربعة.  تُستخدم القوائم ذات الأقواس المربعة أسماءً للأسطر في مخطّطات شبكات CSS، ولكن يمكن أن تُستخدم أيضًا في الكود البرمجي للغة sass مَثَلُها كمَثَلِ أيِّ قائمةٍ أخرى. يمكن للقوائم ذات الأقواس المربعة أن تُفصَل بالمسافات البيضاء أو الفواصل.

القواميس (Maps)

تمثل القواميس ارتباطًا بين مفاتيح (keys) وقيم تلك المفاتيح. تُستخدم المفاتيح لإيجاد القيم وتُسهّل تجميعها في مجموعات مُسمّاةٍ والوصول إلى تلك المجموعات بشكل ديناميكيّ. ليس للقواميس مقابلٌ مباشر في لغة CSS، على الرغم من أنّ صياغتها مشابهةٌ لتعبيرات استعلامات الوسائط (media query expressions).

$map: (key1: value1, key2: value2, key3: value3);

خلافًا للقوائم، يجب أن تٌحاط القواميس دائمًا بالأقواس، ويجب أن تُفصل بالفواصل. يمكن أن تكون المفاتيح وقيمها أي كائن من كائنات SassScript. لا يمكن ربط أكثر من قيمةٍ واحدةٍ في القواميس مع نفس المفتاح (ولكنّ تلك القيمة يمكن أن تكون قائمةً)، بينما يمكن أن ترتبط قيمة معيَّنة مع أكثر من مفتاح واحد.

تُعالج القواميس، بشكل مشابه للقوائم، باستخدام دوال SassScript. الدالة map-get مثلًا تبحث عن قيم محدَّدة في القاموس والدالّة map-merge تضيف قيمًا إلى القاموس. أمّا التعليمة ‎@each فيمكن استخدامها لإضافة أنماط لكل زوج مفتاح/قيمة (key/value) في القاموس. لا يتغير ترتيب الأزواج في القاموس منذ إنشائه.

يمكن استخدام القواميس في أيّ مكان تُستخدم فيه القوائم. عند استخدامها من قبل دالةٍ خاصَّة بالقوائم، فستُعامل على أنّها قائمةٌ مكونة من أزواج. ستُعامل دوال القوائم مثل القاموس (key1: value1, key2: value2) على أنَّه القائمة المتشعّبة key1 value1, key2 value2. لا يمكن أن تُعامَل القوائم على أنّها قواميس باستثناء القائمة الفارغة. تمثّل () قاموسًا لا يحتوي أيّ أزواج (مفتاح/قيمة) وقائمة لا تحتوي أيّ عناصر في آنٍ واحدٍ.

الجدير بالذكر أنّ مفاتيح القاموس يمكن أن تكون أيّ نوع من أنواع بيانات Sass كما تتيح الصياغة المستعملة لتعريف القاموس استخدام أي تعبير من تعبيرات تقنية SassScript التي ستُقيَّم وتُحدَّد قيمتها للتعرف على قيمة المفتاح.

لا يمكن ترجمة القواميس إلى لغة CSS إذ سيُسبِّب استخدامها كمتغيراتٍ أو معطياتٍ لدوال CSS خطأ. استخدم الدالة ‎inspect($value)‎ لإنتاج سلسلة نصّية عند إخراج القواميس في ملف CSS الناتج.

الألوان (Colors)

تُرجع كلُّ تعابير الألوان في CSS قيمة لونيّة في SassScript. وهذا يشمل عددًا كبيرًا من الألوان المُسمّاة، والتي لا يمكن تمييزها عن السلاسل النصيَّة غير المُقتبسة.

ستُخرج sass في الوضع المضغوط (compressed mode) أوجز تمثيل ممكن للألوان في CSS. سيُترجم ‎#FF0000 مثلًا إلى red في الوضع المضغوط، بينما سيُترجم blanchedalmond إلى ‎#FFEBCD.

من المشاكل الشائعة في استخدام الألوان المسماة هو أنّه لمّا كانت sass تُفضّل نفس تنسيق المُخرجات كما كُتبت في أوضاع الإخراج الأخرى، فستصبح الألوان المستوفاة (interpolated) في محدِّد معيّن غير صالحة عند ضغطها حينئذ. يمكن تجنب هذه المشكلة بوضع الألوان المسماة دائمًا بين علامتي تنصيص إن كنت ترغب في استخدامها في محدّد باني.

الدوالّ من الدرجة الأولى (First Class Functions)

يمكن الحصول على مؤشِّر (reference) دالة معيّنة باستعمال التعبير get-function($function-name)‎. عند تمرير مؤشّر دالة إلى الدالة call($function, $args...)‎ فستُستدعى حينئذ الدالة التي يشير إليها. لا تُترجم لغة CSS دوال الدرجة الأولى مباشرةً، وأيّ محاولةٍ لفعل ذلك ستؤدي إلى إطلاق خطأ.

العمليات (Operations)

تدعم جميع الأنواع معاملات التساوي (== و =!). بالإضافة إلى ذلك، يدعم كلُّ نوعٍ معاملاتٍ خاصةٍ به.

العمليات على الأعداد

تدعم SassScript العمليات الحسابيَّة الاعتيادية على الأعداد (الجمع +، والطرح -، والضرب *، والقسمة /، وباقي القسمة %). تحفظ دوال sass الرياضية الواحدات خلال العمليات الحسابيَّة. هذا يعني أنَّه، كما هو الحال في الواقع، لا يمكنك أن تعمل على أرقام ذات واحدات غير متوافقة (مثل إضافة قيمة واحدتها px إلى قيمة واحدتها em)، وستكون واحدة ناتج ضرب عددين لهما الواحدة ذاتها واحدةً مربّعةً (10px * 10px == 100px * px). تذكّر أنّ الواحدة المربّعة px * px غير صالحة في لغة CSS، وستُطلق Sass خطأً إن حاولت استخدام واحدات غير صالحة في CSS.

معاملات المقارنة (< و > و =< و =>) مدعومةٌ أيضًا على الأعداد، أمّا معاملات التساوي (== و =!) فتدعمها جميع الأنواع.

القسمة والمعامل /

تسمح CSS بأن يظهر المعامل / في قيم الخاصِّيَّات كوسيلة لفصل الأعداد. ولمّا كانت SassScript امتدادًا لصياغة الخاصيّات في لغة CSS، فلابُد من أن تدعمَ هذا النوع من الصياغة، وتسمحَ أيضًا باستخدام المعامل / لأجل القسمة في الوقت عينه. وهذا يعني افتراضيًا، أنّه إذا فُصل عددان بالمعامل / في SassScript، فسيظهران على نفس النحو في ملف CSS الناتج.

هناك ثلاث حالات سيُفسَّر فيها الرمز / على أنّه عمليّة قسمة. هذه الحالات تشمل غالبية استعمالات عمليّة القسمة وهي:

  1. إن خُزّنت القيمة، أو جزءٌ منها، في متغير أو أُعيدت من قبل دالة.
  2. إن أُحيطت القيمة بقوسين، ما لم يكن هذان القوسان خارج قائمةٍ والقيمة داخلها.
  3. إن كانت القيمة جزءًا من تعبيرٍ حسابيّ آخر.

انظر على سبيل المثال الشيفرة التالية:

p {
 font: 10px/8px;             // العادية، ليست قسمةً CSS
 $width: 1000px;
 width: $width/2;            // استخدام متغير، تحدث القسمة
 width: round(1.5)/2;        // استخدام دالة، تحدث القسمة
 height: (500px/2);          // استخدام الأقواس، تحدث القسمة
 margin-left: 5px + 8px/2px; // استخدام +، تحدث القسمة
 font: (italic bold 10px/8px); // داخل قائمة، لا تُحتسب الأقواس
}

ستُصرّف إلى:

p {
  font: 10px/8px;
  width: 500px;
  height: 250px;
  margin-left: 9px; }

إن أردت استخدام المتغيرات مع الإبقاء على الصياغة العاديَّة للمعامل / في لغة CSS، فيمكنك استخدام الاستيفاء {}# لإدراجها مباشرةً. انظر مثلًا الشيفرة:

p {
  $font-size: 12px;
  $line-height: 30px;
  font: #{$font-size}/#{$line-height};
}

ستُصرّف إلى:

p {
  font: 12px/30px; }

الطرح والأعداد السالبة والمعامل -

يمكن أن يمثل المعامل - عدَّة أشياء مختلفة في لغة CSS و Sass. يمكن أن يكون عامل طرح (كما هو الحال في 5px - 3px)، أو بداية عددٍ سالبٍ (كما هو الحال في ‎-3px)، أو قد يكون عامل نفيٍ أحادي للمتغير (مثل ‎-$var)، ويمكن أن يكون جزءًا من مُعرّفٍ (مثل font-weight). يمكن في أكثر الحالات معرفة وظيفة الرمز - من السياق، وقد تلتبس بعض الحالات الأخرى. إليك هذه التوصيات بوصفها قاعدة عامةٍ:

  • دائمًا ضع مسافةً بيضاء قبل المعامل - وبعده عند استخدامه للطرح.
  • ضع مسافة قبل - ولكن ليس بعده في حالة الأعداد السالبة أو النفي الأحادي.
  • ضع النفي الأحادي بين قوسين إن كان في قائمة مفصولة بالمسافات، مثل ‎10px (-$var)‎.

أسبقية المعاني المختلفة للمعامل - هي حسب الترتيب التالي:

  1. كونه جزءًا من مُعرّف. أي أنّ a-1 هي سلسلة نصيّة غير مُقتبسة قيمتها "a-1" وتستثنى الواحدات فقط من ذلك؛ تسمح Sass عادةً لأي مُعرّف صالح بأن يًستخدم كمعرّف، ولكن قد لا يصحّ أن تحتوي المُعرّفات على شرْطة يليها عدد. أي أنّ 5px-3px هو مثل 5px - 3px.
  2. وجوده بين عددين وبدون مسافة بيضاء يشير إلى عمليّة طرح، لذا يعدُّ التعبير 1-2 مماثلًا تمامًا للتعبير 1 - 2.
  3. وجوده قبل عددٍ ولكن غيرَ مسبوق بعددٍ يشير إلى أن ذلك العدد هو عدد سالب، لذلك فالتعبير 1 ‎-2 هو قائمة تحتوي على 1 و ‎-2.
  4. وجوده بين عددين بغض النظر عن وجود المسافات يدلّ على عمليّة الطرح، لذلك يعدُّ التعبير 1‎ ‎-$var مماثلًا للتعبير 1‎ ‎- $var.
  5. وجوده قبل قيمة معيّنة يعني أنَّه عامل نفي أحادي. بعبارة أخرى، تعاد القيمة السالبة للعدد عند وجوده قبله.

عمليات الألوان (Color Operations)

تدعم القيم اللّونية كل العمليات الحسابيَّة، إذ تنفذ تلك العمليات على مركّبات الألوان مثنى مثنى. أي تُنفّذ العمليّة على مركبة الأحمر والأخضر والأزرق. انظر المثال التالي:

p {
  color: #010203 + #040506;
}

ستُحسب 01 + 04 = 05 و 02 + 05 = 07 و 03 + 06 = 09، وستُصرّف إلى:

p {
  color: #050709; }

يُفضّل غالبًا استخدام دوال الألوان على استخدام العمليات الحسابيَّة لإنجاز العملية عليها والحصول على النتيجة ذاتها. تطبَّق العمليات الحسابيَّة أيضًا على الأعداد والألوان، وأيضًا مثنى مثنى. انظر مثلًا:

p {
  color: #010203 * 2;
}

ستُحسب 01 * 2 = 02 و 02 * 2 = 04 و 03 * 2 = 06، وستُصرّف إلى:

p {
  color: #020406; }

يجب أن يكون للألوان ذات قناة الشفافيَّة alpha (أي تلك التي أُنشئت بواسطة إحدى الدالّتين rgba و hsla) نفس قيمة الشفافيَّة لتتمكن من إجراء العمليّات الحسابيَّة عليها. تلك العمليّات لا تؤثّر على قيمة الشفافيَّة. انظر على سبيل المثال:

p {
  color: rgba(255, 0, 0, 0.75) + rgba(0, 255, 0, 0.75);
}

ستُصرّف إلى:

p {
  color: rgba(255, 255, 0, 0.75); }

يمكن تعديل قناة الشفافيَّة للونٍ معيّن باستخدام الدالّتين opacify و transparentize. انظر المثال التالي:

$translucent-red: rgba(255, 0, 0, 0.5);
p {
  color: opacify($translucent-red, 0.3);
  background-color: transparentize($translucent-red, 0.25);
}

ستُصرّف الشيفرة إلى:

p {
  color: rgba(255, 0, 0, 0.8);
  background-color: rgba(255, 0, 0, 0.25); }

تحتاج الخاصِّيَّة filters في متصفح IE أن تشتمل كلُّ الألوان على قناة الشفافيَّة، وأن تكون في الشكل ‎#AABBCCDD تحديدًا. يمكنك بسهولة تحويل اللون باستخدام الدالة ie_hex_str. انظر المثال التالي:

$translucent-red: rgba(255, 0, 0, 0.5);
$green: #00ff00;
div {
  filter: progid:DXImageTransform.Microsoft.gradient(enabled='false', startColorstr='#{ie-hex-str($green)}', endColorstr='#{ie-hex-str($translucent-red)}');
}

ستُصرّف الشيفرة إلى:

div {
  filter: progid:DXImageTransform.Microsoft.gradient(enabled='false', startColorstr=#FF00FF00, endColorstr=#80FF0000);
}

العمليات على السلاسل النصيّة (String Operations)

يمكن استخدام عمليَّة الجمع + لضمّ السلاسل النصّية.

p {
  cursor: e + -resize;
}

ستُصرّف الشيفرة السابقة إلى:

p {
  cursor: e-resize; }

لاحظ أنّه إذا أُضيفت سلسلة نصّية مُقتبسة إلى أخرى غير مقتبسة (أي أنّ السلسلة النصية المقتبسة موجودة على يسار إشارة +)، فالنتيجة هي سلسلة نصيّة مقتبسة. وبالمثل، إذا أُضيفت سلسلة نصّية غير مُقتبسة إلى أخرى مقتبسة (السلسلة النصية غير المقتبسة على يسار إشارة +)، فالنتيجة هي سلسلة نصيّة غير مقتبسة. انظر مثلًا الشيفرة التالية:

p:before {
  content: "Foo " + Bar;
  font-family: sans- + "serif";
}

ستُصرّف إلى:

p:before {
  content: "Foo Bar";
  font-family: sans-serif; }

افتراضيّا، إذا وضَعت قيمتين بجانب بعضها البعض، فستُضمّان إلى بعضهما بفراغ واحد، انظر مثلًا الشيفرة:

p {
  margin: 3px + 4px auto;
}

ستُصرّف إلى:

p {
  margin: 7px auto; }

يمكن استخدام الاستيفاء ({}#) داخل سلسلة نصيَّة لحشو قيمة ديناميكيّة داخل السلسلة، انظر مثلًا الشيفرة التالية:

p:before {
  content: "I ate #{5 + 10} pies!";
}

ستُصرّف إلى:

p:before {
  content: "I ate 15 pies!"; }

تُعامَل القيمة المعدومة (Null) على أنّها سلسلة فارغة عند استيفاء السلاسل النصّية.

$value: null;
p:before {
  content: "I ate #{$value} pies!";
}

ستُصرّف إلى:

p:before {
  content: "I ate  pies!"; }

العمليات المنطقية (Boolean Operations)

تدعم SassScript استعمال المعامل and والمعامل or والمعامل not مع القيم المنطقيَّة.

عمليات القوائم (List Operations)

لا تدعم القوائم أيّ معاملات خاصَّة، بل تُعالج باستخدام دوال القوائم.

الأقواس

يمكن استخدام الأقواس لترتيب العمليات. انظر مثلًا الشيفرة التالية:

p {
  width: 1em + (2em * 3);
}

ستُصرّف إلى:

p {
  width: 7em; }

الدّوال

هنالك الكثير من الدّوال المفيدة المعرَّفة في SassScript التي يمكن استدعاؤها باستخدام الصياغة العادية للدّوال في لغة CSS.

p {
  color: hsl(0, 100%, 50%);
}

ستُصرّف الشيفرة السابقة إلى:

p {
  color: #ff0000; }

راجع صفحة الدوال في Sass للحصول على قائمة كاملة بالدوال المتاحة.

الوسائط المسمّاة (Keyword Arguments)

يمكنُ استدعاء دوالّ Sass باستخدام وسائط (arguments) مسماةٍ بشكل صريح. المثال أعلاه يُمكن أن يُكتب على النحو التالي:

p {
  color: hsl($hue: 0, $saturation: 100%, $lightness: 50%);
}

قد تكون هذه الصياغة أقلّ إيجازًا، ولكنّها يمكن أن تجعل مقروئيَّة ملف الأنماط أيْسر. كما ستسمح للدوالّ بتقديم واجهات أكثر مرونة، وتمرير العديد من الوسائط دون أن تكون هناك صعوبة في استدعائها.

يمكن تمرير الوسائط المسمّاة حسب أيّ ترتيب، ويمكن حذف المعطياتُ ذات القيم الافتراضيَّة. لمَّا كانت الوسائط المُسمّاة أسماءُ متغيراتِ، فلا فرق بين استخدام الشرطات السفلية _ واستخدام الشرطات العادية -.

انظر صفحة الدوال في Sass للحصول على قائمة كاملة من دوالّ sass وأسماء مُعطياتها، وكذلك إرشادات تعريفها في لغة روبي.

الاستيفاء (Interpolation):‏ ‎#{}‎

يمكنك أيضًا استخدام المتغيرات في لغة SassScript في المُحدّدات (selectors) وأسماء الخاصيّات باستخدام صياغة الاستيفاء {}#.

$name: foo;
$attr: border;
p.#{$name} {
  #{$attr}-color: blue;
}

ستُصرّف الشيفرة إلى:

p.foo {
  border-color: blue; }

من الممكن أيضًا استخدام الاستيفاء {}# في قيم الخاصيات. في معظم الحالات، هذا ليس أفضل من استخدام المتغيرات، ولكن باستخدام الصيغة {}# فكلّ العمليات المجاورة لها ستُعامل على أنّها صياغة عادية للغة CSS. على سبيل المثال:

p {
  $font-size: 12px;
  $line-height: 30px;
  font: #{$font-size}/#{$line-height};
}

ستُصرّف إلى:

p {
  font: 12px/30px; }

الرمز & في SassScript

يشير الرمز & في SassScript إلى المُحدّد الأب الحالي، تمامًا كما هو الحال عندما يُستخدم في المحدّدات. وهو قائمةٌ مفصولة بالفواصل لقوائم مفصولة بالمسافات. انظر على سبيل المثال:

.foo.bar .baz.bang, .bip.qux {
  $selector: &;
}

قيمة ‎$selector في المثال هي ‎((".foo.bar" ".baz.bang"), ".bip.qux")‎. وُضعت المحدِّدات المُركّبة بين علامتي اقتباس للإشارة إلى أنها سلاسلٌ نصّيةٌ، ولكن يمكن أن تكون غير مُقتبسة.

حتى إن لم يحتوِ المحدِّد الأب على فاصلةً أو مسافةً، فسيكون لقيمة الرمز & دائمًا مستويان من التشعّب، بحيث يمكن الوصول إليها بطريقة موحدة.

إن لم يكن هناك محددٌ أب، فإنّ قيمة & ستكون معدومةً (null). هذا يعني أنَّه يمكنك استخدامها في مخلوط (mixin) للتحقَّق من وجود المحدِّد الأب.

@mixin does-parent-exist {
  @if & {
    &:hover {
      color: red;
    }
  } @else {
    a {
      color: red;
    }
  }
}

القيمة الافتراضية للمتغيرات: ‎!default

يمكنك ضبط قيمة افتراضيَّة للمتغيرٍ إن لم يكن قد ضُبِط سلفًا بإضافة الراية ‎!default عقِب تلك القيمة. هذا يعني أنه متى أسندت قيمة إلى المتغير، فلن تسند تلك القيمة (الافتراضية) إليه مجدّدًا. أمَّا إن لم تسند قيمة إلى المتغير، فستكون قيمته هي القيمة الافتراضيَّة المحدَّدة. انظر الشيفرة التالية على سبيل المثال:

$content: "First content";
$content: "Second content?" !default;
$new_content: "First time reference" !default;

#main {
  content: $content;
  new-content: $new_content;
}

ستُصرّف إلى:

#main {
  content: "First content";
  new-content: "First time reference"; }

تعامَل القيمة المعدومة (null) المسندة إلى المتغير على أنَّها قيمة غير مسندة، لذا ستسند القيمة الإفتراضيَّة إليه آنذاك.

$content: null;
$content: "Non-null content" !default;

#main {
  content: $content;
}

ستُصرّف إلى:

#main {
  content: "Non-null content"; }

مصادر