الفرق بين المراجعتين لصفحة: «Sass/control directives»
ط إضافة عنوان الصفحة والتصنيفات |
ط استبدال النص - '\[\[تصنيف:(.*)\]\]' ب'{{SUBPAGENAME}}' |
||
(3 مراجعات متوسطة بواسطة مستخدم واحد آخر غير معروضة) | |||
سطر 1: | سطر 1: | ||
<noinclude>{{DISPLAYTITLE: | <noinclude>{{DISPLAYTITLE:تعليمات التحكم في Sass}}</noinclude> | ||
تدعم SassScript | تدعم SassScript تعليمات وتعابير التحكم التي تُستعمل لرَهن تفعيل الأنماط بشروط معيّنةٍ أو لتضمين نفس النمط لكن مع تطبيق بعض التنويعات عليه. | ||
ملاحظة: | '''ملاحظة''': تعليمات التحكم هي ميزة متقدمةٌ، كما أنّها غير شائعة الاستخدام. وُجدت أساسًا لتُستعمل في [[Sass/mixins|المخاليط]] (mixins)، لاسيما تلك التي هي جزءٌ من المكتبات مثل [http://compass-style.org/ Compass]، لذلك فهي تتطلب مرونةً كبيرةً في التعامل معها. | ||
== <code>if()</code> == | == <code>if()</code> == | ||
تُعيد الدالة المضمّنة <code>if()</code> إحدى قيمتين على | تُعيد الدالة المضمّنة <code>if()</code> إحدى قيمتين محدَّدتين بناءً على شرط معيّن، ويمكن استخدامها في أيّ سياق برمجي. لا تتحقق الدالة <code>if</code> إلا من الوسيط (argument) المقابل للقيمة التي ستعيدها، وهذا يسمح لك بالإشارة إلى المتغيرات غير المعرّفة أو بتنفيذ حساباتٍ قد تسبّب خطأً في العادة (مثل القسمة على الصفر).<syntaxhighlight lang="sass"> | ||
if(true, 1px, 2px) => 1px | if(true, 1px, 2px) => 1px | ||
if(false, 1px, 2px) => 2px | if(false, 1px, 2px) => 2px | ||
سطر 12: | سطر 12: | ||
== <code>@if</code> == | == <code>@if</code> == | ||
تأخذ التعليمة <code>@if</code> تعبيرًا من [[Sass/SassScript|تعابير SassScript]] وتستخدم الأنماط المتشعّبة تحتها عندما يعيد التعبير أيّ قيمة غير القيمة <code>false</code> أو القيمة <code>null</code>، مثل:<syntaxhighlight lang="sass"> | |||
p { | p { | ||
@if 1 + 1 == 2 { border: 1px solid; } | @if 1 + 1 == 2 { border: 1px solid; } | ||
سطر 18: | سطر 18: | ||
@if null { border: 3px double; } | @if null { border: 3px double; } | ||
} | } | ||
</syntaxhighlight>ستُصرّف إلى:<syntaxhighlight lang="css"> | </syntaxhighlight>ستُصرّف الشيفرة السابقة إلى:<syntaxhighlight lang="css"> | ||
p { | p { | ||
border: 1px solid; } | border: 1px solid; } | ||
</syntaxhighlight>يمكنك | </syntaxhighlight>يمكنك التحقُّق يدويًا من <code>$var == false</code> أو <code>$var == null</code> إن كنت تريد أن تُميّز بينهما. | ||
يمكن أن تُتبع التعليمة <code>@if</code> | يمكن أن تُتبع التعليمة <code>@if</code> بعدَّة تعليمات مثل التعليمة <code>@else if</code> والتعليمة <code>@else</code> التي تستعمل لمرة واحدة في النهاية. إن لم تحقِّق التعليمة <code>@if</code> الشرط، فسيُنتقل إلى التعليمات <code>@else if</code> بالترتيب إلى أن تنجح إحداها في تحقيق الشرط أو ستُطبّقَ التعليمة <code>@else</code> إن لم يتحقق الشرط في أيِّ منها. انظر الشيفرة التالية:<syntaxhighlight lang="sass"> | ||
$type: monster; | $type: monster; | ||
p { | p { | ||
سطر 42: | سطر 42: | ||
== <code>@for</code> == | == <code>@for</code> == | ||
تستعمل التعليمة <code>@for</code> لإظهار مجموعة من الأنماط تكراريًا، ويستخدم عند كل تكرارٍ عدّادٌ (متغيرٌ) لأجل ضبط عدد مرات ظهور الأنماط. هنالك شكلان لاستعمال هذه التعليمة؛ الشكل الأول هو <code>@for $var from <start> through <end></code>، والشكل الثاني هو <code>@for $var from <start> to <end></code>. الاختلاف بينهما هو في الكلمتين <code>through</code> و <code>to</code> اللتين ستحددان مجال التكرار كما سيوضح ذلك. يمكن أن يكون <code>$var</code> أيَّ مُتغيّر مثل <code>$i</code> أمّا <code><start></code> و <code><end></code> فهما تعبيران من [[Sass/SassScript|تعابير SassScript]] يُرجعان أعدادًا صحيحةً. عندما يكون <code><start></code> أكبر من <code><end></code>، فسيكون العد تنازليًّا بدلًا من أن يكون تصاعديًّا. | |||
التعليمة <code>@for</code> | تضبط التعليمة <code>@for</code> المتغير <code>$var</code> إلى القيم الموجود في المجال المحدَّد بالتتابع في كل مرة تُخرج الأنماط المتشعّبة باستخدام قيمة <code>$var</code>. انتبه إلى أنه ستدخل في الشكل <code>from ... through</code> القيمة <code><start></code> والقيمة <code><end></code> في مجال العد بينما لن تدخل في الشكل <code>from ... to</code> القيمة <code><end></code> أي سيتوقف العد عند القيمة السابقة أو اللاحقة لها بحسب نوع العد (تصاعديًّا أم تنازليًّا). | ||
يوضح المثال التالي اسخدام الصياغة <code>through</code>:<syntaxhighlight lang="sass"> | |||
@for $i from 1 through 3 { | @for $i from 1 through 3 { | ||
.item-#{$i} { width: 2em * $i; } | .item-#{$i} { width: 2em * $i; } | ||
سطر 60: | سطر 60: | ||
== <code>@each</code> == | == <code>@each</code> == | ||
الشكل الاعتيادي | الشكل الاعتيادي للتعليمة <code>@each</code> هو <code>@each $var in <list or map></code>. يمكن أن يكون <code>$var</code> أي مُتغيّر، مثل <code>$length</code> أو <code>$name</code>، والقيمة <code><list or map></code> هي تعبيرٌ من [[Sass/SassScript|تعابير SassScript]] ترجع [[Sass/SassScript#.D8.A7.D9.84.D9.82.D9.88.D8.A7.D8.A6.D9.85|قائمةً]] أو [[Sass/SassScript#.D8.A7.D9.84.D8.AE.D8.B1.D8.A7.D8.A6.D8.B7 .28Maps.29|خريطة]] (map). | ||
التعليمة <code>@each</code> تعطي للمتغير <code>$var</code> كل القيم الموجودة في القائمة أو الخريطة، ثم تُخرج الأنماط التي تحتويها باستخدام قيمة <code>$var</code>. انظر المثال التالي:<syntaxhighlight lang="sass"> | |||
@each $animal in puma, sea-slug, egret, salamander { | @each $animal in puma, sea-slug, egret, salamander { | ||
.#{$animal}-icon { | .#{$animal}-icon { | ||
سطر 69: | سطر 69: | ||
} | } | ||
</syntaxhighlight> | </syntaxhighlight>سيصرّف إلى:<syntaxhighlight lang="css"> | ||
.puma-icon { | .puma-icon { | ||
background-image: url('/images/puma.png'); } | background-image: url('/images/puma.png'); } | ||
سطر 82: | سطر 82: | ||
=== الإسناد المتعدد (Multiple Assignment) === | === الإسناد المتعدد (Multiple Assignment) === | ||
يمكن | يمكن للتعليمة <code>@each</code> استخدام عدَّة متغيرات، كما هو الحال في <code>@each $var1, $var2, ... in <list></code>. إن كانت <code><list></code> قائمةً مكوّنةً من عدَّة قوائم، فإنّ كل عنصرٍ من عناصر القوائم الفرعية سيسند إلى المتغير الموافق له مثل:<syntaxhighlight lang="sass"> | ||
@each $animal, $color, $cursor in (puma, black, default), | @each $animal, $color, $cursor in (puma, black, default), | ||
(sea-slug, blue, pointer), | (sea-slug, blue, pointer), | ||
سطر 92: | سطر 92: | ||
} | } | ||
} | } | ||
</syntaxhighlight>ستُصرّف إلى:<syntaxhighlight lang="css"> | </syntaxhighlight>ستُصرّف الشيفرة السابقة إلى:<syntaxhighlight lang="css"> | ||
.puma-icon { | .puma-icon { | ||
background-image: url('/images/puma.png'); | background-image: url('/images/puma.png'); | ||
سطر 106: | سطر 106: | ||
cursor: move; } | cursor: move; } | ||
</syntaxhighlight>لمّا كانت | </syntaxhighlight>لمّا كانت [[Sass/SassScript#.D8.A7.D9.84.D8.AE.D8.B1.D8.A7.D8.A6.D8.B7 .28Maps.29|الخرائط]] تُعامل كأنّها قوائمٌ مُكوّنةٌ من أزواج، فيمكن تطبيق الاسناد المتعددة عليها أيضًا. الشيفرة التالية:<syntaxhighlight lang="sass"> | ||
@each $header, $size in (h1: 2em, h2: 1.5em, h3: 1.2em) { | @each $header, $size in (h1: 2em, h2: 1.5em, h3: 1.2em) { | ||
#{$header} { | #{$header} { | ||
سطر 124: | سطر 124: | ||
== @while == | == @while == | ||
تأخذ التعليمة <code>@while</code> تعبيرًا من [[Sass/SassScript|تعابير SassScript]] وتخرج الأنماط المتشعّبة بشكلٍ متكررٍ إلى أن تساوي قيمة ذلك التعبير القيمة <code>false</code>. يمكن أن تُستخدم لإجراء عمليّات تكراريّة أكثر تعقيدًا مما تُتيحه التعليمة <code>[[#@for|@for]]</code>، على الرغم من أنّ هذا نادرًا ما يكون ضروريًا. انظر مثلًا الشيفرة التالية:<syntaxhighlight lang="sass"> | |||
$i: 6; | $i: 6; | ||
@while $i > 0 { | @while $i > 0 { | ||
سطر 144: | سطر 144: | ||
== مصادر == | == مصادر == | ||
* [https://sass-lang.com/documentation/file.SASS_REFERENCE.html#control_directives__expressions قسم Control Directives & Expressions من توثيق Sass الرسمي]. | * [https://sass-lang.com/documentation/file.SASS_REFERENCE.html#control_directives__expressions قسم Control Directives & Expressions من توثيق Sass الرسمي]. | ||
[[تصنيف:Sass]] | [[تصنيف:Sass|{{SUBPAGENAME}}]] |
المراجعة الحالية بتاريخ 07:00، 20 مايو 2018
تدعم SassScript تعليمات وتعابير التحكم التي تُستعمل لرَهن تفعيل الأنماط بشروط معيّنةٍ أو لتضمين نفس النمط لكن مع تطبيق بعض التنويعات عليه.
ملاحظة: تعليمات التحكم هي ميزة متقدمةٌ، كما أنّها غير شائعة الاستخدام. وُجدت أساسًا لتُستعمل في المخاليط (mixins)، لاسيما تلك التي هي جزءٌ من المكتبات مثل Compass، لذلك فهي تتطلب مرونةً كبيرةً في التعامل معها.
if()
تُعيد الدالة المضمّنة if()
إحدى قيمتين محدَّدتين بناءً على شرط معيّن، ويمكن استخدامها في أيّ سياق برمجي. لا تتحقق الدالة if
إلا من الوسيط (argument) المقابل للقيمة التي ستعيدها، وهذا يسمح لك بالإشارة إلى المتغيرات غير المعرّفة أو بتنفيذ حساباتٍ قد تسبّب خطأً في العادة (مثل القسمة على الصفر).
if(true, 1px, 2px) => 1px
if(false, 1px, 2px) => 2px
@if
تأخذ التعليمة @if
تعبيرًا من تعابير SassScript وتستخدم الأنماط المتشعّبة تحتها عندما يعيد التعبير أيّ قيمة غير القيمة false
أو القيمة null
، مثل:
p {
@if 1 + 1 == 2 { border: 1px solid; }
@if 5 < 3 { border: 2px dotted; }
@if null { border: 3px double; }
}
ستُصرّف الشيفرة السابقة إلى:
p {
border: 1px solid; }
يمكنك التحقُّق يدويًا من $var == false
أو $var == null
إن كنت تريد أن تُميّز بينهما.
يمكن أن تُتبع التعليمة @if
بعدَّة تعليمات مثل التعليمة @else if
والتعليمة @else
التي تستعمل لمرة واحدة في النهاية. إن لم تحقِّق التعليمة @if
الشرط، فسيُنتقل إلى التعليمات @else if
بالترتيب إلى أن تنجح إحداها في تحقيق الشرط أو ستُطبّقَ التعليمة @else
إن لم يتحقق الشرط في أيِّ منها. انظر الشيفرة التالية:
$type: monster;
p {
@if $type == ocean {
color: blue;
} @else if $type == matador {
color: red;
} @else if $type == monster {
color: green;
} @else {
color: black;
}
}
ستُصرّف إلى:
p {
color: green; }
@for
تستعمل التعليمة @for
لإظهار مجموعة من الأنماط تكراريًا، ويستخدم عند كل تكرارٍ عدّادٌ (متغيرٌ) لأجل ضبط عدد مرات ظهور الأنماط. هنالك شكلان لاستعمال هذه التعليمة؛ الشكل الأول هو @for $var from <start> through <end>
، والشكل الثاني هو @for $var from <start> to <end>
. الاختلاف بينهما هو في الكلمتين through
و to
اللتين ستحددان مجال التكرار كما سيوضح ذلك. يمكن أن يكون $var
أيَّ مُتغيّر مثل $i
أمّا <start>
و <end>
فهما تعبيران من تعابير SassScript يُرجعان أعدادًا صحيحةً. عندما يكون <start>
أكبر من <end>
، فسيكون العد تنازليًّا بدلًا من أن يكون تصاعديًّا.
تضبط التعليمة @for
المتغير $var
إلى القيم الموجود في المجال المحدَّد بالتتابع في كل مرة تُخرج الأنماط المتشعّبة باستخدام قيمة $var
. انتبه إلى أنه ستدخل في الشكل from ... through
القيمة <start>
والقيمة <end>
في مجال العد بينما لن تدخل في الشكل from ... to
القيمة <end>
أي سيتوقف العد عند القيمة السابقة أو اللاحقة لها بحسب نوع العد (تصاعديًّا أم تنازليًّا).
يوضح المثال التالي اسخدام الصياغة through
:
@for $i from 1 through 3 {
.item-#{$i} { width: 2em * $i; }
}
ستُصرّف إلى:
.item-1 {
width: 2em; }
.item-2 {
width: 4em; }
.item-3 {
width: 6em; }
@each
الشكل الاعتيادي للتعليمة @each
هو @each $var in <list or map>
. يمكن أن يكون $var
أي مُتغيّر، مثل $length
أو $name
، والقيمة <list or map>
هي تعبيرٌ من تعابير SassScript ترجع قائمةً أو خريطة (map).
التعليمة @each
تعطي للمتغير $var
كل القيم الموجودة في القائمة أو الخريطة، ثم تُخرج الأنماط التي تحتويها باستخدام قيمة $var
. انظر المثال التالي:
@each $animal in puma, sea-slug, egret, salamander {
.#{$animal}-icon {
background-image: url('/images/#{$animal}.png');
}
}
سيصرّف إلى:
.puma-icon {
background-image: url('/images/puma.png'); }
.sea-slug-icon {
background-image: url('/images/sea-slug.png'); }
.egret-icon {
background-image: url('/images/egret.png'); }
.salamander-icon {
background-image: url('/images/salamander.png'); }
الإسناد المتعدد (Multiple Assignment)
يمكن للتعليمة @each
استخدام عدَّة متغيرات، كما هو الحال في @each $var1, $var2, ... in <list>
. إن كانت <list>
قائمةً مكوّنةً من عدَّة قوائم، فإنّ كل عنصرٍ من عناصر القوائم الفرعية سيسند إلى المتغير الموافق له مثل:
@each $animal, $color, $cursor in (puma, black, default),
(sea-slug, blue, pointer),
(egret, white, move) {
.#{$animal}-icon {
background-image: url('/images/#{$animal}.png');
border: 2px solid $color;
cursor: $cursor;
}
}
ستُصرّف الشيفرة السابقة إلى:
.puma-icon {
background-image: url('/images/puma.png');
border: 2px solid black;
cursor: default; }
.sea-slug-icon {
background-image: url('/images/sea-slug.png');
border: 2px solid blue;
cursor: pointer; }
.egret-icon {
background-image: url('/images/egret.png');
border: 2px solid white;
cursor: move; }
لمّا كانت الخرائط تُعامل كأنّها قوائمٌ مُكوّنةٌ من أزواج، فيمكن تطبيق الاسناد المتعددة عليها أيضًا. الشيفرة التالية:
@each $header, $size in (h1: 2em, h2: 1.5em, h3: 1.2em) {
#{$header} {
font-size: $size;
}
}
ستُصرّف إلى:
h1 {
font-size: 2em; }
h2 {
font-size: 1.5em; }
h3 {
font-size: 1.2em; }
@while
تأخذ التعليمة @while
تعبيرًا من تعابير SassScript وتخرج الأنماط المتشعّبة بشكلٍ متكررٍ إلى أن تساوي قيمة ذلك التعبير القيمة false
. يمكن أن تُستخدم لإجراء عمليّات تكراريّة أكثر تعقيدًا مما تُتيحه التعليمة @for
، على الرغم من أنّ هذا نادرًا ما يكون ضروريًا. انظر مثلًا الشيفرة التالية:
$i: 6;
@while $i > 0 {
.item-#{$i} { width: 2em * $i; }
$i: $i - 2;
}
ستُصرّف إلى:
.item-6 {
width: 12em; }
.item-4 {
width: 8em; }
.item-2 {
width: 4em; }