الفرق بين المراجعتين لصفحة: «Sass/guide»

من موسوعة حسوب
لا ملخص تعديل
ط استبدال النص - '\[\[تصنيف:(.*)\]\]' ب'{{SUBPAGENAME}}'
 
(10 مراجعات متوسطة بواسطة 3 مستخدمين غير معروضة)
سطر 1: سطر 1:
<noinclude>{{DISPLAYTITLE:دليل Sass}}</noinclude>لغة CSS لغة ممتعةٌ، ولكنّ ملفات الأنماط صارت أكبر وأكثر تعقيدًا، وصارت صيانتها أصعب. وهنا يمكن أن تساعدنا المعالجة الأولية. تتيح لك Sass استخدام ميزات غير موجودة في CSS، مثل المتغيرات والتشعب والمخاليط والوراثة وغيرها من الأشياء التي تجعل البرمجة بلغة CSS ممتعةً مرةً أخرى.
<noinclude>{{DISPLAYTITLE:دليل Sass}}</noinclude>لغة [[CSS]] لغة ممتعةٌ، ولكنّ ملفات الأنماط أصبحت أكبر وأكثر تعقيدًا، وصيانتها صعبة ومتعبة؛ يمكن حينذاك أن تساعدنا المعالجة الأوليَّة (preprocessor). تتيح لك [[Sass]] استخدام ميزات غير موجودة في [[CSS]] مثل المتغيرات، والتشعب، [[Sass/mixins|والمخاليط]]، والوراثة، وغيرها من الأشياء التي تجعل البرمجة بلغة [[CSS]] ممتعةً مرةً أخرى.


تحفظ Sass الملفات المعالجة على هيئة ملف CSS عادي، والذي يمكنك استخدامه في موقعك.
تحفظ Sass الملفات المعالجة على هيئة ملف [[CSS]] عادي، والذي يمكنك استخدامه في موقعك.


الطريقة المباشرة لفعل ذلك هي باستخدام سطر الأوامر (terminal). فبمجرد تثبيت Sass، يمكنك تصريف ملفات Sass إلى CSS باستخدام الأمر sass. ستحتاج إلى إخبار Sass بالملف الذي تريد تصريفه، وكذلك أين سيُخرج ملف CSS الناتج. على سبيل المثال، تنفيذ التعليمة <code>sass input.scss output.css</code> في سطر الأوامر سيأخذ الملف input.scss ويُصرّفه إلى الملف output.css.
الطريقة المباشرة لفعل ذلك هي باستخدام سطر الأوامر (terminal). يمكنك بمجرد تثبيت [[Sass]] تصريف الملفات إلى [[CSS]] باستخدام الأمر <code>sass</code>. ستحتاج إلى إخبار [[Sass]] بالملف الذي تريد تصريفه، وكذلك أين سيُخرج ملف [[CSS]] الناتج. مثلًا، تنفيذ الأمر <code>sass input.scss output.css</code> في سطر الأوامر سيصرف الملف <code>input.scss</code> إلى الملف <code>output.css</code>.


== المتغيرات ==
== المتغيرات ==
المتغيرات هي وسيلة لتخزين المعلومات التي تريد أن تستخدمها أكثر من مرّةٍ في ملف الأنماط خاصتك. يمكنك تخزين أشياء مثل الألوان أو مجموعات الخطوط أو أيّ قيمة من قيم CSS ترى أنك ستحتاج إلى استخدامها. تستخدم Sass الرمز $ لإنشاء المتغيرات. إليك هذا المثال:<syntaxhighlight lang="sass">
المتغيرات هي وسيلة لتخزين المعلومات التي تريد أن تستخدمها أكثر من مرّةٍ في ملف الأنماط خاصتك. يمكنك تخزين أشياء مثل الألوان أو مجموعات الخطوط أو أيّ قيمة من قيم [[CSS]] ترى أنك ستحتاج إلى استخدامها. تستخدم [[Sass]] الرمز <code>$</code> لإنشاء المتغيرات. إليك هذا المثال:<syntaxhighlight lang="sass">
$font-stack:    Helvetica, sans-serif;
$font-stack:    Helvetica, sans-serif;
$primary-color: #333;
$primary-color: #333;
body {
body {
 font: 100% $font-stack;
  font: 100% $font-stack;
 color: $primary-color;
  color: $primary-color;
}
}


 
</syntaxhighlight>عندما يُعالَج ملف Sass، يبدَّل المتغير <code>‎$font-stack</code> والمتغير <code>‎$primary-color</code>، اللذين عرّفناهما بقيمهما، ثمَّ يُخرج ملف [[CSS]] عادي بعدئذ. يمكن أن يكون هذا مفيدًا جدًّا عند استخدام ألوان خاصَّة بهوية الشركة البصرية لجعل الموقع متناسقًا.<syntaxhighlight lang="css">
</syntaxhighlight>
 
====== عندما يُعالَج ملف Sass، فإنه يأخذ المتغيرين  <code>‎$font-stack</code> و <code>‎$primary-color</code> اللذين عرّفناهما ويُخرج ملف CSS عادي مع تعويض المتغيرين بقيمهما في ملف CSS. يمكن أن يكون هذا مفيدًا جدًّا عند استخدام ألوان خاصة بهوية الشركة البصرية لجعل الموقع متناسقًا. ======
<syntaxhighlight lang="css">
body {
body {
 font: 100% Helvetica, sans-serif;
  font: 100%   Helvetica, sans-serif;
 color: #333;
  color: #333; }
}
 
 
</syntaxhighlight>
</syntaxhighlight>


== التشعّب (nesting) ==
== التشعّب (nesting) ==
عند كتابة ملفات HTML، فلا شكّ أنّك لاحظت أنها مبنية على تسلسل متشعّب. لكنّ لغة CSS، من ناحية أخرى، ليست كذلك.
لا شكّ أنّك لاحظت أنَّ ملفات [[HTML]] مبنية على تسلسل متشعّب. من جهة أخرى، لغة [[CSS]] ليست كذلك.


تسمح لك Sass بأن تُنظّم مُحدّدات CSS بنفس الطريقة التشعبيّة التي تجدها في ملفات HTML. ولكن تذكّر أنّ المبالغة في تشعيب القواعد سيؤدي إلى إنتاج قواعد CSS لها درجة تحديد كبيرة، وهو أمرٌ يُعدّ من الممارسات السيئة عمومًا.
تسمح لك [[Sass]] بأن تُنظّم مُحدّدات [[CSS]] بنفس الطريقة التشعبيّة التي تجدها في ملفات [[HTML]]. انتبه إلى أنّ المبالغة في تشعيب القواعد سيؤدي إلى إنتاج قواعد [[CSS]] ذات محدِّدات قويَّة جدًا (over-qualified)، وهو أمرٌ يُعدّ من الممارسات السيئة عمومًا ولا ينصح به.


مع أخذ ذلك بالحسبان، إليك مثالًا لبعض الأنماط المعتادة لقائمة التنقل في مواقع الويب:<syntaxhighlight lang="Sass">
مع أخذ ذلك بالحسبان، إليك مثالًا لبعض الأنماط المعتادة لقائمة تنقل في مواقع الويب:<syntaxhighlight lang="sass">
nav {
nav {
 ul {
  ul {
   margin: 0;
    margin: 0;
   padding: 0;
    padding: 0;
   list-style: none;
    list-style: none;
 }
  }
 li { display: inline-block; }
 a {
   display: block;
   padding: 6px 12px;
   text-decoration: none;
 }
}


  li {
    display: inline-block;
  }


</syntaxhighlight>لاحظ أنّ المحدّدات <code>ul</code> و <code>li</code> و <code>a</code> مُتشعّبة داخل المحدد <code>navselector</code>. هذه طريقة جيدة لتنظيم ملف CSS خاصتك وتحسين مقروئيته. عند إنشاء ملف CSS، ستحصل على مثل هذا:<syntaxhighlight lang="css">
  a {
    display: block;
    padding: 6px 12px;
    text-decoration: none;
  }
}
</syntaxhighlight>لاحظ أنّ المحدّدات <code>[[HTML/ul|ul]]</code> و <code>[[HTML/li|li]]</code> و <code>[[HTML/a|a]]</code> مُتشعّبة داخل المحدد <code>nav</code>. هذه طريقة جيدة لتنظيم ملف [[CSS]] خاصتك وتحسين مقروئيته. عند إنشاء ملف [[CSS]]، ستحصل على:<syntaxhighlight lang="css">
nav ul {
nav ul {
 margin: 0;
  margin: 0;
 padding: 0;
  padding: 0;
 list-style: none;
  list-style: none; }
}
 
nav li {
nav li {
 display: inline-block;
  display: inline-block; }
}
 
nav a {
nav a {
 display: block;
  display: block;
 padding: 6px 12px;
  padding: 6px 12px;
 text-decoration: none;
  text-decoration: none; }
}
</syntaxhighlight>
</syntaxhighlight>


== المجزوءات (partials) ==
== المجزوءات (partials) ==
يمكنك إنشاء ملفات Sass جزئية تحتوي على مقتطفات صغيرة من CSS، والتي يمكنك تضمينها في ملفات Sass الأخرى. هذه الطريقة جيدةٌ لتنظيم ملفات CSS خاصتك، كما تساعد على جعلها أسهل للصيانة. المجزوء هو ببساطة ملف Sass يُسبق اسمه بشرطة سفلية بادئة (underscore)، مثل ‎_partial.scss. تُعلِم الشرطةُ السفلية لغةَ Sass أنّ الملف هو ملف جزئي، وأنّه لا ينبغي أن يُصرّف إلى ملف CSS. تُستخدم مجزوءات Sass مع المُوجّه ‎<code>@import</code>.
يمكنك إنشاء ملفات [[Sass]] جزئية تحتوي على مقتطفات صغيرة من [[CSS]] والتي يمكنك تضمينها في ملفات [[Sass]] أخرى. هذه الطريقة جيدةٌ لتنظيم ملفات [[CSS]] خاصتك كما تساعد على جعلها أسهل للصيانة. المجزوء هو ببساطة ملف [[Sass]] يُسبق اسمه بشرطة سفلية بادئة (underscore) مثل ‎<code>_partial.scss</code>. تُعلِم الشرطةُ السفلية لغةَ [[Sass]] أنّ الملف هو ملف جزئي، وأنّه لا ينبغي أن يُصرّف إلى ملف [[CSS]]. تُستخدم مجزوءات [[Sass]] مع التعليمة ‎<code>@import</code>.


== الاستيراد ==
== الاستيراد ==
لدى CSS خيارُ الاستيراد الذي يتيح لك تقسيم ملفات CSS إلى أجزاء أصغر وأكثر ملائمةً للصيانة. العيب الوحيد في هذا هو أنّه في كل مرة تستخدم  <code>‎@import</code> في CSS فإنّها تُنشئ طلبيةً (request) أخرى لبروتوكول HTTP. تبني Sass على عمل التعليمة ‎<code>@import</code> الراهنة في CSS، ولكن بدلاً من أن ترسل طلبيةَ HTTP، فإنّها تأخذ الملف الذي تريد استيراده وتدمجه مع الملف الذي تريد أن تستورد إليه كيلا تُخدِّم إلّا ملفَّ CSS واحدٍ إلى المتصفح.
تملك [[CSS]] خيارُ الاستيراد الذي يتيح لك تقسيم ملفات [[CSS]] إلى أجزاء أصغر وأكثر ملائمةً للصيانة. العيب الوحيد فيه هو أنّه في كل مرة تستخدم قاعدة  <code>‎[[CSS/@import|@import]]</code> في [[CSS]]، فإنّها تُنشئ طلبيةً (request) أخرى لبروتوكول [[HTTP]]. تبني [[Sass]] على عمل التعليمة ‎<code>@import</code> الراهنة في [[CSS]]، ولكن بدلاً من أن ترسل طلبيةَ HTTP، فإنّها تأخذ الملف الذي تريد استيراده وتدمجه مع الملف الذي تريد أن تستورد إليه كيلا تُخدِّم إلّا ملفَّ [[CSS]] واحدٍ إلى المتصفح.


لنفترض أنّ لديك ملفين اثنين للغة Sass، أحدهما ‎_reset.scss والآخر base.scss. نريد أن نستورد الملف ‎_reset.scss في base.scss.<syntaxhighlight lang="sass">
لنفترض أنّ لديك ملفين اثنين للغة [[Sass]] أحدهما ‎<code>_reset.scss</code> والآخر <code>base.scss</code>. نريد أن نستورد الملف <code>‎_reset.scss</code> في <code>base.scss</code>.<syntaxhighlight lang="sass">
// _reset.scss
// _reset.scss
html,
html,
body,
body,
ul,
ul,
ol {
ol {
 margin:  0;
  margin:  0;
 padding: 0;
  padding: 0;
}
}
</syntaxhighlight>الملف <code>base.scss</code>:<syntaxhighlight lang="sass">
// base.scss
// base.scss
@import 'reset';
@import 'reset';
body {
body {
 font: 100% Helvetica, sans-serif;
  font: 100% Helvetica, sans-serif;
 background-color: #efefef;
  background-color: #efefef;
}
</syntaxhighlight>لاحظ أننا استخدمنا ‎<code>@import 'reset</code>'‎ في الملف base.scss. عند استيراد ملف، فلن تحتاج إلى تضمين الامتداد ‎.scss. لغة Sass ذكيةٌ وستخمّن ذلك لوحدها. عندما تنشئ ملف CSS، ستحصل على:<syntaxhighlight lang="css">
html, body, ul, ol {
 margin: 0;
 padding: 0;
}
}
</syntaxhighlight>لاحظ أننا استخدمنا ‎<code>@import 'reset'‎</code> في الملف <code>base.scss</code>. لاحظ أنَّه لن تحتاج إلى تضمين الامتداد ‎<code>.scss</code> عند استيراد الملف، إذ لغة [[Sass]] ذكيةٌ وستخمّن ذلك لوحدها. عند إنشاء ملف [[CSS]]، ستحصل على:<syntaxhighlight lang="css">
html,
body,
ul,
ol {
  margin:  0;
  padding: 0; }
body {
body {
 font: 100% Helvetica, sans-serif;
  font: 100% Helvetica, sans-serif;
 background-color: #efefef;
  background-color: #efefef; }
}
</syntaxhighlight>
</syntaxhighlight>


== المخاليط (mixins) ==
== المخاليط (mixins) ==
بعض الأشياء في CSS قد تكون مملة للكتابة، خاصةً مع CSS3 وكثرة بادئات المتصفّحات. يتيح لك المخلوط (mixin) إنشاء مجموعات من تصريحات CSS والتي يمكنك إعادة استخدامها في جميع الملفات الأخرى. ويمكنك كذلك تمرير قيم إلى المخلوط لجعله أكثر مرونةً. هناك عدة استخدامات نافعةٍ للمخاليط، مثل بادئات المتصفّحات. وإليك هذا المثال عن الخاصية <code>border-radius</code>. <syntaxhighlight lang="Sass">
بعض الأشياء في [[CSS]] قد تكون مملة للكتابة، خاصةً مع [[CSS|CSS3]] وكثرة بادئات المتصفّحات. يتيح لك [[Sass/mixins|المخلوط]] (mixin) إنشاء مجموعات من تصريحات [[CSS]] والتي يمكنك إعادة استخدامها في جميع الملفات الأخرى. يمكنك كذلك تمرير قيم إلى المخلوط مما يجعله أكثر مرونةً. هناك عدة استخدامات نافعةٍ للمخاليط مثل بادئات المتصفّحات. إليك هذا المثال عن الخاصِّيَّة <code>[[CSS/border-radius|border-radius]]</code>. <syntaxhighlight lang="Sass">
 @mixin border-radius($radius) {
@mixin border-radius($radius) {
 -webkit-border-radius: $radius;
 -webkit-border-radius: $radius;
    -moz-border-radius: $radius;
    -moz-border-radius: $radius;
سطر 104: سطر 105:
         border-radius: $radius;
         border-radius: $radius;
}
}
.box { @include border-radius(10px); }
.box { @include border-radius(10px); }
</syntaxhighlight>
</syntaxhighlight>


لإنشاء مخلوطٍ، استخدم التعليمة ‎<code>@mixin</code> ومرّر إليها اسمًا. لقد سمّينا مخلوطنا هذا <code>border-radius</code>. كما وضعنا المتغير ‎<code>$radius</code> بين قوسين حتى نتمكن من تمرير قيمة نصف القطر متى شئنا. بعد إنشاء المخلوط، يمكنك استخدامه كما تستخدم تصريحات CSS، فتبدأُ بالتعليمة ‎@include متبوعًةً باسم المخلوط. سيبدو ملف CSS كما يلي:<syntaxhighlight lang="css">
لإنشاء [[Sass/mixins|مخلوطٍ]]، استخدم التعليمة ‎<code>@mixin</code> ومرّر إليها اسمًا. لقد سمّينا المخلوط السابق بالاسم <code>[[CSS/border-radius|border-radius]]</code> ووضعنا المتغير ‎<code>$radius</code> بين قوسين حتى نتمكن من تمرير قيمة نصف القطر متى شئنا. بعد إنشاء المخلوط، يمكنك استخدامه كما تستخدم تصريحات [[CSS]] باستعمال التعليمة <code>‎@include</code> متبوعًةً باسم المخلوط. سيبدو ملف [[CSS]] الناتج كما يلي:<syntaxhighlight lang="css">
 .box {
.box {
 -webkit-border-radius: 10px;
  -webkit-border-radius: 10px;
 -moz-border-radius: 10px;
      -moz-border-radius: 10px;
 -ms-border-radius: 10px;
      -ms-border-radius: 10px;
 border-radius: 10px;
          border-radius: 10px; }
}
</syntaxhighlight>
</syntaxhighlight>


== التوسعة والوراثة (Extend/Inheritance) ==
== التوسعة والوراثة (Extend/Inheritance) ==
هذه واحدةٌ من الميزات الأكثر فائدة في Sass. ستتيح لك القاعدة ‎<code>@extend</code> مشاركة مجموعة من خاصيات CSS بين المحددات. وستساعدك على تجنب التكرار. في مثالنا هذا سنحاول إنشاء سلسلة بسيطة من الرسائل لأجل الأخطاء والتحذيرات والنجاحات باستخدام ميزةٍ أخرى تعمل جنبًا إلى جنبٍ مع التوسعة، وهي الأصناف النائبة (placeholder classes). الأصناف النائبة هي نوعٌ خاصّ من الأصناف لا تُطبع إلّا عند توسيعها، ويمكن أن تساعد في جعل ملفات CSS نظيفة وأنيقة.
هذه واحدةٌ من الميزات الأكثر فائدة في [[Sass]]. ستتيح لك القاعدة ‎<code>[[Sass/@ rules|@extend]]</code> مشاركة مجموعة من خاصيات [[CSS]] بين المحدِّدات، وستساعدك على تجنب التكرار. سنحاول في المثال التالي إنشاء سلسلة بسيطة من رسائل الأخطاء والتحذيرات والنجاحات باستخدام ميزةٍ أخرى تعمل جنبًا إلى جنبٍ مع التوسعة ألا وهي الأصناف النائبة (placeholder classes). الأصناف النائبة هي نوعٌ خاصّ من الأصناف لا تُطبع إلّا عند توسيعها، ويمكن أن تساعد في جعل ملفات [[CSS]] نظيفة وأنيقة.


<syntaxhighlight lang="Sass">
<syntaxhighlight lang="Sass">
//لم تُوسّع على الإطلاق %equal-heights الناتج لأنّ CSS لن يُطبع هذا في ملف
//لم تُوسّع على الإطلاق %equal-heights الناتج لأنّ CSS لن يُطبع هذا في ملف
%equal-heights {
%equal-heights {
 display: flex;
  display: flex;
 flex-wrap: wrap;
  flex-wrap: wrap;
}
}
//قد وُسِّعت %equal-heights الناتج لأنّ CSS سيُطبع هذا في ملف
//قد وُسِّعت %equal-heights الناتج لأنّ CSS سيُطبع هذا في ملف
%message-shared {
%message-shared {
 border: 1px solid #ccc;
  border: 1px solid #ccc;
 padding: 10px;
  padding: 10px;
 color: #333;
  color: #333;
}
}
.message {
.message {
 @extend %message-shared;
  @extend %message-shared;
}
}
.success {
.success {
 @extend %message-shared;
  @extend %message-shared;
 border-color: green;
  border-color: green;
}
}
.error {
.error {
 @extend %message-shared;
  @extend %message-shared;
 border-color: red;
  border-color: red;
}
}
.warning {
.warning {
 @extend %message-shared;
  @extend %message-shared;
 border-color: yellow;
  border-color: yellow;
}
}
</syntaxhighlight>الكود البرمجي أعلاه يجعل المحدّدات ‎<code>.message</code> و ‎<code>.success</code> و ‎<code>.error</code> و ‎<code>.warning</code> تتصرف كما يتصرّف المحدّد <code>‎‎%message-shared</code>. هذا يعني أنه في أي مكان يظهر ‎<code>%message-shared</code> فإنّ ‎<code>.message</code> و ‎<code>.success</code> و ‎<code>.error</code> و ‎<code>.warning</code> ستظهر هي كذلك. يحدث ذلك في ملف CSS المُنشأ، إذ يحصل كل صنفٍ من هذه الأصناف على نفس خاصيات CSS التي لدى ‎<code>%message-shared</code>. سيساعدك هذا على تجنب كتابة الكثير من أسماء الأصناف لتمييز عناصر HTML.
</syntaxhighlight>الكود البرمجي أعلاه يجعل المحدّدات ‎<code>.message</code> و ‎<code>.success</code> و ‎<code>.error</code> و ‎<code>.warning</code> تتصرف كما يتصرّف المحدّد <code>‎‎%message-shared</code>. هذا يعني أنَّه في أي مكان يظهر ‎<code>%message-shared</code> فإنّ ‎<code>.message</code> و ‎<code>.success</code> و ‎<code>.error</code> و ‎<code>.warning</code> ستظهر كذلك. يحدث ذلك في ملف [[CSS]] المُنشأ، إذ يحصل كل صنفٍ من هذه الأصناف على نفس خاصيات CSS التي لدى ‎<code>%message-shared</code>. سيساعدك هذا على تجنب كتابة الكثير من أسماء الأصناف لتمييز عناصر [[HTML]].
 
يمكنك توسيع معظم مُحّددات [[CSS]] بالإضافة إلى الأصناف النائبة في [[Sass]]، ولكن يبقى استخدام النائبات هو أسهل طريقةٍ للتأكد من ألّا تُوسّع صنفًا متشعبًا في مكانٍ آخر في ملف الأنماط، لأنّ ذلك قد يؤدي إلى إنشاء محدّدات غير مقصودة في ملف [[CSS]] الناتج.


يمكنك توسيع معظم مُحّددات CSS بالإضافة إلى الأصناف النائبة في Sass، ولكن يبقى استخدام النائبات هو أسهل طريقةٍ للتأكد من ألّا تُوسّع صنفًا متشعبًا في مكانٍ آخر في ملف الأنماط، لأنّ ذلك قد يؤدي إلى إنشاء محدّدات غير مقصودة في ملف CSS الناتج.
عندما تنشئ ملف [[CSS]]، فإنّه سيبدو هكذا: (لاحظ أنّ <code>‎%equal-heights</code> لا يُطبع لأنّه لم يُستخدم مطلقًًا).<syntaxhighlight lang="css">
.message, .success, .error, .warning {
  border: 1px solid #ccc;
  padding: 10px;
  color: #333; }


عندما تنشئ ملف CSS فإنّه سيبدو هكذا. لاحظ أنّ <code>‎%equal-heights</code> لا يُطبع لأنّه لم يُستخدم مطلقًًا.<syntaxhighlight lang="css">
 .message, .success, .error, .warning {
 border: 1px solid #cccccc;
 padding: 10px;
 color: #333;
}
.success {
.success {
 border-color: green;
  border-color: green; }
}
 
.error {
.error {
 border-color: red;
  border-color: red; }
}
 
.warning {
.warning {
 border-color: yellow;
  border-color: yellow; }
}
</syntaxhighlight>
</syntaxhighlight>
== العوامل (operators) ==
== العوامل (operators) ==
استخدام الرياضيات في CSS يمكن أن يكون مفيدًا للغاية. لدى Sass عددٌ من العوامل الرياضية القياسية مثل + و - و * و / و%. في المثال سنقوم ببعض الرياضيات البسيطة لأجل حساب عرض العنصرين <code>aside</code> و <code>article</code>.<syntaxhighlight lang="Sass">
استخدام الرياضيات في [[CSS]] يمكن أن يكون مفيدًا للغاية. لدى [[Sass]] عددٌ من العوامل الرياضيَّة القياسيَّة مثل <code>+</code> و <code>-</code> و <code>*</code> و <code>/</code> و<code>%</code>. سنجري في المثال التالي بعض العمليات الرياضيَّة البسيطة لحساب عرض العنصرين <code>aside</code> و <code>article</code>.<syntaxhighlight lang="Sass">
.container { width: 100%; }
.container {
  width: 100%;
}
 
article[role="main"] {
article[role="main"] {
 float: left;
  float: left;
 width: 600px / 960px * 100%;
  width: 600px / 960px * 100%;
}
}
aside[role="complementary"] {
aside[role="complementary"] {
 float: right;
  float: right;
 width: 300px / 960px * 100%;
  width: 300px / 960px * 100%;
}
</syntaxhighlight>لقد أنشأنا شبكةً مرنةً (fluid grid) بسيطة، عرضها الكلّي 960px. تسمح لنا عومل Sass بفعل أشياء من قبيل أخذ قيم بكسلية (وحدتها px) وتحويلها إلى نسب مئوية دون جهد كبيرٍ. سيبدو ملف CSS الناتج هكذا:<syntaxhighlight lang="css">
 .container {
 width: 100%;
}
}
</syntaxhighlight>لقد أنشأنا شبكةً مرنةً (fluid grid) بسيطة، عرضها الكلّي 960px. تسمح لنا عومل Sass بفعل أشياء مثل أخذ قيم واحدتها البكسل (px) وتحويلها إلى نسب مئوية دون جهد كبيرٍ. سيبدو ملف [[CSS]] الناتج هكذا:<syntaxhighlight lang="css">
.container {
  width: 100%; }
article[role="main"] {
article[role="main"] {
 float: left;
  float: left;
 width: 62.5%;
  width: 62.5%; }
}
 
aside[role="complementary"] {
aside[role="complementary"] {
 float: right;
  float: right;
 width: 31.25%;
  width: 31.25%; }
}
</syntaxhighlight>
</syntaxhighlight>


== مصادر ==
== مصادر ==
* [https://sass-lang.com/guide دليل Sass]
* [https://sass-lang.com/guide صفحة Sass Basics في موقع Sass الرسمي].
[[تصنيف:Sass]]
[[تصنيف:Sass|{{SUBPAGENAME}}]]

المراجعة الحالية بتاريخ 06:59، 20 مايو 2018

لغة CSS لغة ممتعةٌ، ولكنّ ملفات الأنماط أصبحت أكبر وأكثر تعقيدًا، وصيانتها صعبة ومتعبة؛ يمكن حينذاك أن تساعدنا المعالجة الأوليَّة (preprocessor). تتيح لك Sass استخدام ميزات غير موجودة في CSS مثل المتغيرات، والتشعب، والمخاليط، والوراثة، وغيرها من الأشياء التي تجعل البرمجة بلغة CSS ممتعةً مرةً أخرى.

تحفظ Sass الملفات المعالجة على هيئة ملف CSS عادي، والذي يمكنك استخدامه في موقعك.

الطريقة المباشرة لفعل ذلك هي باستخدام سطر الأوامر (terminal). يمكنك بمجرد تثبيت Sass تصريف الملفات إلى CSS باستخدام الأمر sass. ستحتاج إلى إخبار Sass بالملف الذي تريد تصريفه، وكذلك أين سيُخرج ملف CSS الناتج. مثلًا، تنفيذ الأمر sass input.scss output.css في سطر الأوامر سيصرف الملف input.scss إلى الملف output.css.

المتغيرات

المتغيرات هي وسيلة لتخزين المعلومات التي تريد أن تستخدمها أكثر من مرّةٍ في ملف الأنماط خاصتك. يمكنك تخزين أشياء مثل الألوان أو مجموعات الخطوط أو أيّ قيمة من قيم CSS ترى أنك ستحتاج إلى استخدامها. تستخدم Sass الرمز $ لإنشاء المتغيرات. إليك هذا المثال:

$font-stack:    Helvetica, sans-serif;
$primary-color: #333;

body {
  font: 100% $font-stack;
  color: $primary-color;
}

عندما يُعالَج ملف Sass، يبدَّل المتغير ‎$font-stack والمتغير ‎$primary-color، اللذين عرّفناهما بقيمهما، ثمَّ يُخرج ملف CSS عادي بعدئذ. يمكن أن يكون هذا مفيدًا جدًّا عند استخدام ألوان خاصَّة بهوية الشركة البصرية لجعل الموقع متناسقًا.

body {
   font: 100%    Helvetica, sans-serif;
   color: #333; }

التشعّب (nesting)

لا شكّ أنّك لاحظت أنَّ ملفات HTML مبنية على تسلسل متشعّب. من جهة أخرى، لغة CSS ليست كذلك.

تسمح لك Sass بأن تُنظّم مُحدّدات CSS بنفس الطريقة التشعبيّة التي تجدها في ملفات HTML. انتبه إلى أنّ المبالغة في تشعيب القواعد سيؤدي إلى إنتاج قواعد CSS ذات محدِّدات قويَّة جدًا (over-qualified)، وهو أمرٌ يُعدّ من الممارسات السيئة عمومًا ولا ينصح به.

مع أخذ ذلك بالحسبان، إليك مثالًا لبعض الأنماط المعتادة لقائمة تنقل في مواقع الويب:

nav {
  ul {
    margin: 0;
    padding: 0;
    list-style: none;
  }

  li {
    display: inline-block;
  }

  a {
    display: block;
    padding: 6px 12px;
    text-decoration: none;
  }
}

لاحظ أنّ المحدّدات ul و li و a مُتشعّبة داخل المحدد nav. هذه طريقة جيدة لتنظيم ملف CSS خاصتك وتحسين مقروئيته. عند إنشاء ملف CSS، ستحصل على:

nav ul {
  margin: 0;
  padding: 0;
  list-style: none; }

nav li {
  display: inline-block; }

nav a {
  display: block;
  padding: 6px 12px;
  text-decoration: none; }

المجزوءات (partials)

يمكنك إنشاء ملفات Sass جزئية تحتوي على مقتطفات صغيرة من CSS والتي يمكنك تضمينها في ملفات Sass أخرى. هذه الطريقة جيدةٌ لتنظيم ملفات CSS خاصتك كما تساعد على جعلها أسهل للصيانة. المجزوء هو ببساطة ملف Sass يُسبق اسمه بشرطة سفلية بادئة (underscore) مثل ‎_partial.scss. تُعلِم الشرطةُ السفلية لغةَ Sass أنّ الملف هو ملف جزئي، وأنّه لا ينبغي أن يُصرّف إلى ملف CSS. تُستخدم مجزوءات Sass مع التعليمة ‎@import.

الاستيراد

تملك CSS خيارُ الاستيراد الذي يتيح لك تقسيم ملفات CSS إلى أجزاء أصغر وأكثر ملائمةً للصيانة. العيب الوحيد فيه هو أنّه في كل مرة تستخدم قاعدة  @import في CSS، فإنّها تُنشئ طلبيةً (request) أخرى لبروتوكول HTTP. تبني Sass على عمل التعليمة ‎@import الراهنة في CSS، ولكن بدلاً من أن ترسل طلبيةَ HTTP، فإنّها تأخذ الملف الذي تريد استيراده وتدمجه مع الملف الذي تريد أن تستورد إليه كيلا تُخدِّم إلّا ملفَّ CSS واحدٍ إلى المتصفح.

لنفترض أنّ لديك ملفين اثنين للغة Sass أحدهما ‎_reset.scss والآخر base.scss. نريد أن نستورد الملف ‎_reset.scss في base.scss.

// _reset.scss

html,
body,
ul,
ol {
  margin:  0;
  padding: 0;
}

الملف base.scss:

// base.scss

@import 'reset';
body {
  font: 100% Helvetica, sans-serif;
  background-color: #efefef;
}

لاحظ أننا استخدمنا ‎@import 'reset'‎ في الملف base.scss. لاحظ أنَّه لن تحتاج إلى تضمين الامتداد ‎.scss عند استيراد الملف، إذ لغة Sass ذكيةٌ وستخمّن ذلك لوحدها. عند إنشاء ملف CSS، ستحصل على:

html,
body,
ul,
ol {
  margin:  0;
  padding: 0; }

body {
  font: 100% Helvetica, sans-serif;
  background-color: #efefef; }

المخاليط (mixins)

بعض الأشياء في CSS قد تكون مملة للكتابة، خاصةً مع CSS3 وكثرة بادئات المتصفّحات. يتيح لك المخلوط (mixin) إنشاء مجموعات من تصريحات CSS والتي يمكنك إعادة استخدامها في جميع الملفات الأخرى. يمكنك كذلك تمرير قيم إلى المخلوط مما يجعله أكثر مرونةً. هناك عدة استخدامات نافعةٍ للمخاليط مثل بادئات المتصفّحات. إليك هذا المثال عن الخاصِّيَّة border-radius

@mixin border-radius($radius) {
 -webkit-border-radius: $radius;
    -moz-border-radius: $radius;
     -ms-border-radius: $radius;
         border-radius: $radius;
}

.box { @include border-radius(10px); }

لإنشاء مخلوطٍ، استخدم التعليمة ‎@mixin ومرّر إليها اسمًا. لقد سمّينا المخلوط السابق بالاسم border-radius ووضعنا المتغير ‎$radius بين قوسين حتى نتمكن من تمرير قيمة نصف القطر متى شئنا. بعد إنشاء المخلوط، يمكنك استخدامه كما تستخدم تصريحات CSS باستعمال التعليمة ‎@include متبوعًةً باسم المخلوط. سيبدو ملف CSS الناتج كما يلي:

.box {
   -webkit-border-radius: 10px;
      -moz-border-radius: 10px;
       -ms-border-radius: 10px;
           border-radius: 10px; }

التوسعة والوراثة (Extend/Inheritance)

هذه واحدةٌ من الميزات الأكثر فائدة في Sass. ستتيح لك القاعدة ‎@extend مشاركة مجموعة من خاصيات CSS بين المحدِّدات، وستساعدك على تجنب التكرار. سنحاول في المثال التالي إنشاء سلسلة بسيطة من رسائل الأخطاء والتحذيرات والنجاحات باستخدام ميزةٍ أخرى تعمل جنبًا إلى جنبٍ مع التوسعة ألا وهي الأصناف النائبة (placeholder classes). الأصناف النائبة هي نوعٌ خاصّ من الأصناف لا تُطبع إلّا عند توسيعها، ويمكن أن تساعد في جعل ملفات CSS نظيفة وأنيقة.

//لم تُوسّع على الإطلاق %equal-heights الناتج لأنّ CSS لن يُطبع هذا في ملف

%equal-heights {
  display: flex;
  flex-wrap: wrap;
}
//قد وُسِّعت %equal-heights الناتج لأنّ CSS سيُطبع هذا في ملف
%message-shared {
  border: 1px solid #ccc;
  padding: 10px;
  color: #333;
}

.message {
  @extend %message-shared;
}

.success {
  @extend %message-shared;
  border-color: green;
}

.error {
  @extend %message-shared;
  border-color: red;
}

.warning {
  @extend %message-shared;
  border-color: yellow;
}

الكود البرمجي أعلاه يجعل المحدّدات ‎.message و ‎.success و ‎.error و ‎.warning تتصرف كما يتصرّف المحدّد ‎‎%message-shared. هذا يعني أنَّه في أي مكان يظهر ‎%message-shared فإنّ ‎.message و ‎.success و ‎.error و ‎.warning ستظهر كذلك. يحدث ذلك في ملف CSS المُنشأ، إذ يحصل كل صنفٍ من هذه الأصناف على نفس خاصيات CSS التي لدى ‎%message-shared. سيساعدك هذا على تجنب كتابة الكثير من أسماء الأصناف لتمييز عناصر HTML.

يمكنك توسيع معظم مُحّددات CSS بالإضافة إلى الأصناف النائبة في Sass، ولكن يبقى استخدام النائبات هو أسهل طريقةٍ للتأكد من ألّا تُوسّع صنفًا متشعبًا في مكانٍ آخر في ملف الأنماط، لأنّ ذلك قد يؤدي إلى إنشاء محدّدات غير مقصودة في ملف CSS الناتج.

عندما تنشئ ملف CSS، فإنّه سيبدو هكذا: (لاحظ أنّ ‎%equal-heights لا يُطبع لأنّه لم يُستخدم مطلقًًا).

.message, .success, .error, .warning {
  border: 1px solid #ccc;
  padding: 10px;
  color: #333; }

.success {
  border-color: green; }

.error {
  border-color: red; }

.warning {
  border-color: yellow; }

العوامل (operators)

استخدام الرياضيات في CSS يمكن أن يكون مفيدًا للغاية. لدى Sass عددٌ من العوامل الرياضيَّة القياسيَّة مثل + و - و * و / و%. سنجري في المثال التالي بعض العمليات الرياضيَّة البسيطة لحساب عرض العنصرين aside و article.

.container {
  width: 100%;
}

article[role="main"] {
  float: left;
  width: 600px / 960px * 100%;
}

aside[role="complementary"] {
  float: right;
  width: 300px / 960px * 100%;
}

لقد أنشأنا شبكةً مرنةً (fluid grid) بسيطة، عرضها الكلّي 960px. تسمح لنا عومل Sass بفعل أشياء مثل أخذ قيم واحدتها البكسل (px) وتحويلها إلى نسب مئوية دون جهد كبيرٍ. سيبدو ملف CSS الناتج هكذا:

.container {
  width: 100%; }

article[role="main"] {
  float: left;
  width: 62.5%; }

aside[role="complementary"] {
  float: right;
  width: 31.25%; }

مصادر