<?xml version="1.0"?>
<rss version="2.0"><channel><title>&#x627;&#x644;&#x628;&#x631;&#x645;&#x62C;&#x629;: CSS</title><link>https://academy.hsoub.com/programming/css/page/10/?d=2</link><description>&#x627;&#x644;&#x628;&#x631;&#x645;&#x62C;&#x629;: CSS</description><language>ar</language><item><title>&#x62E;&#x641;&#x627;&#x64A;&#x627; CSS &#x627;&#x644;&#x645;&#x64F;&#x645;&#x644;&#x651;&#x629; &#x627;&#x644;&#x62A;&#x64A; &#x64A;&#x62C;&#x628; &#x639;&#x644;&#x64A;&#x643; &#x627;&#x644;&#x625;&#x644;&#x645;&#x627;&#x645; &#x628;&#x647;&#x627;</title><link>https://academy.hsoub.com/programming/css/%D8%AE%D9%81%D8%A7%D9%8A%D8%A7-css-%D8%A7%D9%84%D9%85%D9%8F%D9%85%D9%84%D9%91%D8%A9-%D8%A7%D9%84%D8%AA%D9%8A-%D9%8A%D8%AC%D8%A8-%D8%B9%D9%84%D9%8A%D9%83-%D8%A7%D9%84%D8%A5%D9%84%D9%85%D8%A7%D9%85-%D8%A8%D9%87%D8%A7-r41/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2015_03/css3_480x300.png.c1f51fedb7e375468f77b3376d9a4548.png" /></p>
<p>لربما لاحظت مُؤخّرا أنّ CSS في تطور مستمر، وإلى الأفضل بالطبع. فمن جهة لدينا العديد من المُميّزات الجديدة (مثل القواعد الجديدة <span style="font-family:'courier new', courier, monospace;">@rules</span> وأشباه الأصناف المطورة) ونظم بناء الصّفحات وتقسيمها (مثل flexbox و Grid system). ومن جهة أخرى لدينا بعض الأدوات التي تُتيح لنا التّلاعب بالأشكال والصور مباشرة من المتصفح، وأنا أحب هذه الأمور، ومتأكد من أنّك تُحبّها أيضًا، وفي هذه المقالة سنعرض بعضا منها.</p><p>سنتحدث عن بعض الأمور التي لا تحظى بالكثير من الشّهرة عادة، هذه الأمور المجهولة ستزيد من إنتاجيتك بشكل مُعتبر، وستجعلك تُفكّر بطرق مُختلفة لحلّ المشاكل اليومية. بعض هذه الأمور هي المُحدّدات Selectors الجديدة الخاصة باللغة، والبعض الآخر عبارة عن دوال، وأشباه أصناف pseudo-classes جديدة.</p><h2>وحدات القياس النّسبية</h2><p>بحكم أنّنا في 2015 فلابد وأنّك قد تعاملت من قبل مع الوحدات النّسبية <span style="font-family:'courier new', courier, monospace;">em</span> والنّسب المئوية. ولذا فأنا واثق من أنّك وقعت في المُشكلة الشّائعة والتي تكمن في استخدام هذه الوحدات ضمن الوراثة. سأشرح الأمر بمثال بسيط. من الشّائع مُؤخّرًا أن يتمّ استعمال حجم خط ثابت في الصّفحة، ومن بعدها استعمال وحدات القياس النّسبية لتحديد حجم الخطّ لبقية العناصر في الصفحة.<br>في CSS سيبدو الأمر كالتالي:</p><pre class="ipsCode prettyprint">html { font-size: 10px; } 
 p { font-size: 1.4em; }</pre><p>إلى غاية هذه اللحظة، كل شيء يسير على ما يرام. لكن تظهر المشكلة عندما تريد أن تحدد حجم خط مُختلف لعنصر ما داخل العُنصر السّابق. لنجرب المثال التالي:</p><pre class="ipsCode prettyprint">The cat sat on the &lt;span&gt;mat&lt;/span&gt;.</pre><p>إذا أردت أن يكون حجم خط span أصغر مثلا، وليكن مثلًا <span style="font-family:'courier new', courier, monospace;">1.2em</span>، فما الذي ستفعله؟ تحضر الآلة الحاسبة وتحسب نتيجة 1.2/1.4؟ لتحصل على شيء كهذا:</p><pre class="ipsCode prettyprint">p span { font-size: 0.85714em; }</pre><p>مشكلة الوراثة ليست محدودة في em فحسب. فإذا كُنت تستخدم النّسب المئوية فالقيمة عادة منسوبة إلى العنصر الحاوي (الأب) وليس إلى حجم الصّفحة. لنضرب مثالًا بسيطًا، ولنقل أنك تملك عنصرًا بارتفاع يُقدّر بـ75% من الصفحة، وهذا العنصر يملك بداخله عنصرًا آخر، ونحن نريد من العنصر الابن أن يكون بارتفاع 40% من الصفحة، في هذه الحالة عليك أن تعطيه قيمة 53.33333%.</p><p>الأمر ليس مثالّيًّا إطلاقًا.</p><h3>القيم المنسوبة إلى أساس ثابت</h3><p>كالعادة، لكل مشكلة حل. في حالتنا تم تقديم وحدة جديدة تُدعى <span style="font-family:'courier new', courier, monospace;">rem</span>. هذه الوحدة هي وحدة نسبية، ولكنها منسوبة إلى قيمة ثابتة وليس إلى حاويها. هذه القيمة هي حجم الخط في العنصر الأساسي في الصفحة (في حالة HTML فهذا العنصر هو دوما وسم html ). في مثالنا السابق، استعملنا 10px كحجم الخط في الصفحة، سنرى كيف يمكن لـ<span style="font-family:'courier new', courier, monospace;">rem</span> أن تساعدنا:</p><pre class="ipsCode prettyprint">p { font-size: 1.4rem; }
p span { font-size: 1.2rem; }</pre><p>الآن كلاّ من قيمة التصريحين منسوبة إلى حجم الخط المبدئي، وهذا أفضل من ناحية التّحكم والاستخدام. خُصوصًا إذا كنت تملك حجمًا مبدئيًّا بسيطًا مثل 10px أو 12px. الأمر شبيه باستخدام وحدة البكسل مُجدّدًا، عدى أنها قابلة للتوسع.</p><p>هذه الخاصّيّة مدعومة بشكل جيّد من المُتصفّحات. كل المُتصفّحات المُتطوّرة إلى جانب IE9 تقوم بدعمها.<br>لكن هناك مشاكل بسيطة في الدعم، فمُتصفّح IE لا يدعمها في حال ما إذا استخدمتها داخل الخاصّيّة المُختصرة font ويتم تجاهل التّصريح كاملًا. تستطيع قراءة المشاكل المعروفة هنا في خانة Known Issues في الأسفل <a rel="external nofollow" href="http://caniuse.com/#feat=rem">Can I use rem</a>.</p><h3>وحدات القياس المنسوبة إلى النّافذة (Viewport)</h3><p>إلى جانب وحدة <span style="font-family:'courier new', courier, monospace;">rem</span>، هناك وحدات جديدة أخرى. هذه الوحدات أتت لتحلّ مُشكلة النّسب المئوية والوراثة. هذه الوحدات تعمل بطريقة مُشابهة لـ<span style="font-family:'courier new', courier, monospace;">rem</span> عدى أنّ الأساس التي تعتمد عليه هو أبعاد النّافذة أو شاشة الجهاز.</p><p>الوحدات الرّئيسية هي <span style="font-family:'courier new', courier, monospace;">vh</span> (التي ترمز إلى viewport height) و <span style="font-family:'courier new', courier, monospace;">vw</span> (التي ترمز إلى viewport width) وهي منسوبة إلى ارتفاع وعرض النّافذة. الوحدتان منسوبتان إلى أبعاد النّافذة حيث أن قيمة واحدة تقدر بـ 1 بالمئة من أبعاد الشّاشة. أيّ `1vw = 1%’. هذا مثال بسيط لنشرح به الأمر:</p><pre class="ipsCode prettyprint">div { height: 50vh; }</pre><p>في هذا المثال، ارتفاع العنصر سيكون بالتّحديد نصف ارتفاع النافذة، حيث أنّه -كما أسلفنا- 1vh = 1% أيّ أن 50vh = 50%من ارتفاع النّافذة.</p><p>قيمة الوحدة -كما سبقت الإشارة إليه- منسوبة إلى أبعاد النّافذة، فإذا تغيّر حجم النافذة ستتغير معه قيمة الوحدة. أُنشئت هذه الوحدة لتحل مشكلة النّسب المئوية في الوراثة، حيث أنّ10vw ستبقى دومًا منسوبة إلى حجم النّافذة مهما كان حجم الحاوي.</p><p>هناك أيضا وحدة <span style="font-family:'courier new', courier, monospace;">vmin</span> والتي تُساوي أصغر قيمة من أيّ من vh أو vw، إلى جانب وحدة <span style="font-family:'courier new', courier, monospace;">vmax</span> التي تقوم بالعكس أيّ أكبر قيمة من أيّ منهما.</p><p>دعم المتصفحات جيد، فكل المتصفحات إلى جانب IE9 تقوم بدعم كل من vh وvw. دعم وحدة vmin جيّد أيضًا، على عكس وحدة vmax فهي غير مدعومة في كل إصدارات IE.<br>هناك بعض المشاكل في chrome في الإصدارات التي سبقت 34 (عند استعمال الوحدة داخل border وبعض التصريحات الأخرى) <a rel="external nofollow" href="http://caniuse.com/#feat=viewport-units">Can I use Viewport units</a>.</p><h3>القيم المحسوبة</h3><p>خلال عملك على موقع مُتجاوب، ستصادفك مشكلة شائعة وهي الخلط بين الوحدات. كمثال على ذلك: أنت تريد أن تُسند إلى عنصر ما حجمًا بالنّسب المئوية، ولكنك تريد أن تُضيف له حاشيّة بقيمة ثابتة (عبر البكسل)، شيء كهذا مثلا:</p><pre class="ipsCode prettyprint">div {
  margin:  20px;
  width: 33%; 
}</pre><p>إن كنت تستخدم قيم <span style="font-family:'courier new', courier, monospace;">padding</span> و <span style="font-family:'courier new', courier, monospace;">border</span> فحسب في تقسيم عناصرك في الصّفحة، فتستطيع تخطّي المُشكلة السّابقة عبر استخدام <span style="font-family:'courier new', courier, monospace;">box-sizing: border-box</span> ولكن هذه الخاصّيّة لن تُساعدك في حال كنت تستخدم الحواشي <span style="font-family:'courier new', courier, monospace;">margins</span>. لذا تم توفير دالة تُدعى بـ <span style="font-family:'courier new', courier, monospace;">calc()</span>. هذه الدّالة تسمح لك بالقيام بعمليات حسابية على مختلف الوحدات. شاهد هذا المثال:</p><pre class="ipsCode prettyprint">div {
  margin:  20px;
  width: calc(33% - 40px);
}</pre><p>تستطيع استعمال الخاصّيّة في أيّ مكان تريد، ولو داخل نفسها. انظر للمثال في الأسفل:</p><pre class="ipsCode prettyprint">width: calc(calc(50% - 4em) + 4vmin);</pre><p>هذه الخاصّيّة مدعومة بشكل جيد، كل الإصدارات الحديثة من المُتصفّحات إلى جانب الإصدار 9 من IE تدعمها (هناك بعض الاستثناءات التي يمكنك قراءتها في خانة known issues على <a rel="external nofollow" href="http://caniuse.com//#feat=calc">Can I use calc()</a>).</p><h3>تحميل مجموعة مُعيّنة من الأحرف</h3><p>الأداء هو عامل رئيسي في بقاء الزّائر في موقعك من عدمه. وسرعة تحميل الموقع هي أحد هذه العوامل. والآن مع انتشار الهواتف الذّكيّة وشبكات الإنترنت اللاسلكية (شبكات 3G التي من مشاكلها التّدفّق البطيء) تدفع المطور للتّحسين من سرعة الموقع أكثر وأكثر. القاعدة الرئيسية في تقليل وقت التحميل هي التقليل من حجم وعدد الملفّات الخارجية، والخاصيّة التّالية تقوم بهذا الأمر.</p><p>الخاصية الجديدة تُدعى unicode-range وهي تأخذ مجالًا مُعيّنًا من unicode كقيمة (unicode هو إعطاء كل محرف قيمة له على مجال ما، مثلا الأحرف العربية تقع في المجال <span style="font-family:'courier new', courier, monospace;">0600—06FF</span> وتقدر بحوالي 255 رمز، وكل ترميز يخصّ محرفًا).</p><p>هذه الخاصّيّة تُضاف إلى تصريح <span style="font-family:'courier new', courier, monospace;">@font-face</span>. وعندما يقوم المُتصفّح بجلب الخط، سيقوم بجلب الحُرُوف المُحدّدة فحسب، ويتم التّخلّص من الحروف غير المرغوب فيها. الأمر مُفيدٌ جدًّا في الخطوط الكبيرة جدًّا مثل Helvetica الذي يُقدّر حجمه بـ500kbs ويحتوي أغلب لغات العالم.</p><p>في هذا المثال سنقوم بسحب الحروف “عـ ، ـلـ، ـم” (يجب التّنويه إلى أنّ حرف العين المُنفصل ‘ع’ يملك رمزًا مُستقلّا عن حرف العين في أول الكلمة ‘عـ’ والذي يملك رمزًا مُستقلًّا عن نفس الحرف في نهاية الكلمة أو في وسطها، وهذا الأمر ينطبق على كلّ الحروف. تستطيع معرفة ترميز كل حرف <a rel="external nofollow" href="http://en.wikipedia.org/wiki/Arabic_script_in_Unicode#Contextual_forms">من هنا</a>).</p><pre class="ipsCode prettyprint">@font-face {
  font-family: foo;
  src: url('helvetica.ttf');
  unicode-range: U+FECB,U+FEE0,U+FEE2;
}</pre><p>في هذا المثال سنقوم بسحب الحروف العربية فقط عبر مجال كامل:</p><pre class="css ipsCode prettyprint">@font-face {
  font-family: foo;
  src: url('helvetica.ttf');
  unicode-range: U+0600-06FF;
}</pre><p>سيُقلّل هذا من حجم الخط من 500kb إلى حوالي 30kb وهذا تحسن مُمتاز جدًّا.</p><p>دعم المُتصفّحات ليس جيّدًا بما فيه الكفاية حاليًّا، الخاصية مدعومة من طرف chrome و من طرف Safari ومتصفح فيَرفُكس سيدعم الخاصية ابتدءًا من الإصدار 36، كما أنّها مدعومة من طرف IE9+ لكن يتم تجاهلها إذا استُخدمت u على شكل صغير (lowercase).</p><p><a rel="external nofollow" href="http://caniuse.com/#feat=font-unicode-range">Can I use Font unicode-range subsetting</a></p><h2>أشباه الأصناف الجديدة (pseudo-classes)</h2><p>إلى جانب كل تلك الأمور الجميلة التي رأيناها، فأنا أجزم أنّ أشباه الأصناف هي أجمل ما تم إصداره، عبر تحديد أنماط مُعيّنة من خلالها أصبحنا نملك القدرة على تحديد عناصر تتبع نمطًا مُعيّنًا وهذا من شأنه تقليل كمية الجافاسكربت المُستخدمة.</p><h3>شبه صنف التّجاهل (negation pseudo-class)</h3><p>شبه صنف التجاهل الجديد <span style="font-family:'courier new', courier, monospace;">not()</span> هو صنع رائع جدا إذا عرفت أين تستخدمه. لتستخدمه عليك أن تُمرّر مُحدّدًا (على شرط أن لا يكون مُركّبًا). سيتم تطبيق كل التأثيرات المُرادة على مجموعة العناصر هذه عدى العُنصر الذي تمّ تمريره للصّنف. فلنلق نظرة على المثال التّالي:</p><p>لنقل أن لديك مجموعة من العناصر، وتريد أنّ تغيّر لون كل عنصر ذي مرتبة زوجية ما عدى العنصر الأخير، ستقوم بشيء كهذا:</p><pre class="css ipsCode prettyprint">li { color: white;}
li:nth-child(even) { color: red;}
li:last-child { color: white;}</pre><p>لكن عبر مُحدّد التّجاهل تستطيع القيام بهذا عبر الشكل التالي</p><pre class="css ipsCode prettyprint">li { color: white;}
li:nth-child(even):not(:last-child) { color: red;}</pre><p>الخاصّيّة ليست عجيبة، فكما رأيت تستطيع أن تعيش بدونها، ولكنك ستقع في حالات تكون فيها الخاصية مُفيدة جدًّا. الخاصّيّة مدعومة بشكل جيد من طرف المُتصفّحات الحديثة ومن طرف IE9+.</p><h3>شبه صنف المُطابقة (matches-any pseudo-class)</h3><p>شبه صنف <span style="font-family:'courier new', courier, monospace;">matches()</span> يقبل مُحدِّدًا (selector)، أو مُحدِّدًا مُركّبًا، أو مجموعة من المُحدّدَات. لكن ما الذي يفعله؟</p><p>إنّه مفيد للقيام بتأثير ما على مجموعة من العناصر. كمثال، تخيل أنّه لديك مجموعة من وسوم الفقرات <span style="font-family:'courier new', courier, monospace;">&lt;p&gt;</span> في أماكن مختلفة من الصّفحة، وأنت تريد التّأثير على مجموعة مُعيّنة منها، قد تقوم بالأمر التّالي:</p><pre class="css ipsCode prettyprint">.home header p,
.home footer p,
.home aside p {
  color: #F00;
}</pre><p>لكن مع <span style="font-family:'courier new', courier, monospace;">matches()</span> تستطيع اختصار الأمر السّابق عبر إيجاد الأمور المشتركة في ما سبق. في مثالنا كل سطر يبدأ بـ .home وينتهي بـ p، لذا نستطيع استخدام <span style="font-family:'courier new', courier, monospace;">matches()</span> لتحديد كل العناصر الموجودة بينهما. لم تفهم كيف سنقوم بذلك؟ لابأس، هذا ما سنفعله:</p><pre class="css ipsCode prettyprint">.home :matches(header,footer,aside) p { color: #F00; }</pre><p>شبه الصنف هذا هو جزء من CSS4 لذا دعمه ليس قويًّا كالبقية.</p><p>حاليًّا تستطيع استخدامه مع chrome و safari بشكل عادي وفي IE9+ تحت الاسم <span style="font-family:'courier new', courier, monospace;">matchesSelector</span> وفي فيَرفُكس أيضًا، من الأفضل أخط الحيطة واستخدامه مع <span style="font-family:'courier new', courier, monospace;">-moz-</span> و <span style="font-family:'courier new', courier, monospace;">-webkit-</span> قبل اسمه.</p><p><a rel="external nofollow" href="http://caniuse.com/#feat=matchesselector">Can I use matches() DOM method</a></p><h2>إذًا، ما رأيك في ما سبق؟</h2><p>الرائع بشأن هذه الخواص أنها تحل مشاكل فعلية في حياتنا اليومية، انطلاقًا من المُحددّات المُتكرّرة المُزعجة في CSS إلى طرق أكثر رُقيًّا في بناء المواقع التجاوبية. سبق وأن استخدمت العديد من هذه الخواص كثيرا وسأستخدمها مُجدّدًا.</p><p>الميزات الجديدة الأخرى مثل المُرشِّحات (filters) الخاصّة بالصّور قد تكون أجمل ولكن استخدامها محدُود على عكس الميزات التي استعرضناها.</p><p>كل واحدة منها تستطيع جعل حياتك أسهل بشكل أكثر، ولكن لا تتوقّف هنا. هناك الكثير لتتعلمه فلا تتوقف عن البحث.</p><p>ترجمة -وبتصرّف- للمقال <a rel="external nofollow" href="http://alistapart.com/article/love-the-boring-bits-of-css">Learning to Love the Boring Bits of CSS</a> لصاحبه <a rel="external nofollow" href="https://twitter.com/stopsatgreen">Peter Gasston</a></p>
]]></description><guid isPermaLink="false">41</guid><pubDate>Sun, 15 Mar 2015 13:38:00 +0000</pubDate></item><item><title>&#x623;&#x633;&#x627;&#x633;&#x64A;&#x627;&#x62A; &#x627;&#x644;&#x637;&#x648;&#x641;&#x627;&#x646; Float &#x641;&#x64A; &#x623;&#x648;&#x631;&#x627;&#x642; &#x627;&#x644;&#x623;&#x646;&#x645;&#x627;&#x637; &#x627;&#x644;&#x645;&#x64F;&#x62A;&#x62A;&#x627;&#x644;&#x64A;&#x629; CSS</title><link>https://academy.hsoub.com/programming/css/%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A7%D8%AA-%D8%A7%D9%84%D8%B7%D9%88%D9%81%D8%A7%D9%86-float-%D9%81%D9%8A-%D8%A3%D9%88%D8%B1%D8%A7%D9%82-%D8%A7%D9%84%D8%A3%D9%86%D9%85%D8%A7%D8%B7-%D8%A7%D9%84%D9%85%D9%8F%D8%AA%D8%AA%D8%A7%D9%84%D9%8A%D8%A9-css-r36/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2015_03/css-floats_480x300.png.a379184f30e70a69ec14e2e621db7007.png" /></p>

<p>تُعتبر خاصيّة الطوفان float property من مصادر القوّة لأي مطوّر أو مُصمّم يستخدم تِقنيّات HTML وCSS. ويُؤدّي عدم الفهم الصحيح لآلية عمل هذه الخاصيّة إلى بعض التِباس في كيفية التعامُل معها.</p><p>ارتبطت هذه الخاصيّة في الماضي مع أخطاء المُتصفّحات ومشاكل التوافقية، أما الآن فالتعامُل مع خاصيّة الطوفان أصبح من الأمور الأساسيّة التي لا يستطيع المُطوّر تجاهلها. سنتناولُ الموضوع بجزئيّاته الصغيرة لفهم ما تُقدمه هذه الخاصيّة واستخدامها بالشكل الأمثل.</p><p>عرفنا الطوفان سابقًا من عالم الطباعة والتصميم كما في المجلات، حيثُ الصورة على أحد الجهتين اليمين أو اليسار ويتوضع نَصّ بجانبها بشكل مُتناسق وجذّاب، وفي عالم الويب ومع تقنيّات HTML/CSS، يلتف النصّ حول الصورة باستخدام خاصيّة الطوفان float property كما هو الأمر في تصاميم المجلات. استخدام الصُور مع خاصيّة الطوفان هو أحد الأمور الّتي يُمكنك استخدامها مع هذه الخاصيّة، ولكن في الحقيقة يُمكن استخدام هذه الخاصيّة أيضًا مع أي عنصر من عناصر HTML، حتّى أنّه بالإمكان استخدامها في تقسيم الصفحة page layout.</p><h2>التعريف</h2><p>تُعرّف رابطة الشبكة العالمية W3C خاصيّة الطوفان بالشكل التالي:</p><blockquote><blockquote class="ipsQuote" data-cite="اقتباس" data-ipsquote=""><p>الطوفان هو انتقال صندوق إلى أحد الجهتين اليسار أو اليمين على الخط الحالي، وأكثر ما يُميّز العنصر الطائف (أو المُطوّف أو الصندوق العائم) كيف أنّ المُحتوى قد ينساب إلى جانبه (أو يُمنع من ذَلِك باستخدام الخاصيّة "clear"). وينساب المُحتوى أسفل الجانب الأيمن من الصندوق عندما يكون مُطوفًا إلى جهة اليسار، وأسفل الجانب الأيسر من الصندوق عندما يكون مطوفًا إلى جهة اليمين.</p></blockquote></blockquote><p>يُمكن تحديد أربعة قيم لخاصيّة الطوفان: <span style="font-family:'courier new', courier, monospace;">left</span>, <span style="font-family:'courier new', courier, monospace;">right</span>, <span style="font-family:'courier new', courier, monospace;">inherit</span>, <span style="font-family:'courier new', courier, monospace;">none</span>، حيثُ كل قيمة تُعبّر عن دلالتها فمثلًا، تحديد قيمة الطوفان إلى اليسار لعنصر ما (<span style="font-family:'courier new', courier, monospace;">float: left</span>) سينقل العنصر إلى أقصى حافة العنصر الأب الخاص به من جهة اليسار. كما هو الحال عندما تكون القيمة المُحددة للعنصر هي <span style="font-family:'courier new', courier, monospace;">float: right</span>، حيثُ أنّ العنصر سينتقل إلى أقصى اليمين لحواف العنصر الأب الخاص به، وتجعل القيمة <span style="font-family:'courier new', courier, monospace;">inherit</span> العنصر يرثُ قيمة الطوفان من العنصر الأب الخاص به، والقيمة <span style="font-family:'courier new', courier, monospace;">none</span> هي القيمة الافتراضيّة والتي تجعل من العنصر لا يستخدم الطوفان أبدًا.</p><pre class="css ipsCode prettyprint">img { 
  float: right;
  margin: 10px;
}
</pre><h2 style="text-align:center;"><a class="ipsAttachLink ipsAttachLink_image" rel="external nofollow" href="https://academy.hsoub.com/uploads/monthly_2015_03/Example_A.png.75ef9b6e41f6398c5d01ad751480be95.png"><img data-fileid="558" class="ipsImage ipsImage_thumbnailed" alt="Example_A.thumb.png.f93e9e65f113156d772d" src="https://academy.hsoub.com/uploads/monthly_2015_03/Example_A.thumb.png.f93e9e65f113156d772d1da63313e1f7.png"></a></h2><h2>آلية عمل الطوفان</h2><p>يعمل الطوفان بطريقة غير مُعقدة وليس كما يعتقد البعض، لتوضيح ذلك يجب العودة إلى أساسيات HTML لمعرفة حقيقة ما يجري قبل الخوض في التفاصيل. في عالم الويب، تتقيّد تقنية HTML بجملة قواعد، ما يتقاطع مع خاصيّة الطوفان هو قاعدة <a rel="external nofollow" href="http://www.w3.org/TR/CSS21/visuren.html#normal-flow">التدفّق الطبيعيّ normal flow</a>، حيثُ تصطف العناصر مِن نوع <span style="font-family:'courier new', courier, monospace;">block</span> فوق بعضها البعض، كما في العناصر <span style="font-family:'courier new', courier, monospace;">div</span>، <span style="font-family:'courier new', courier, monospace;">p</span>، <span style="font-family:'courier new', courier, monospace;">h1</span> من الأعلى إلى الأسفل. تتوضع العناصر المُطوفة في بادئ الأمر حسب التدفّق الطبيعيّ وتبعًا إلى تسلسلها في مُستند HTML، ومن ثُمّ تُسحب العناصر المُطوفة من التدفّق الطبيعيّ، وتُنقل إلى أقصى يمين أو يسار (على حسب القيمة المُحددة) العنصر الأب الخاصّ بالعنصر المُطوف. بمعنى آخر، تغيّر العناصر المُطوفة من طريقة عملها وتُخالف التدفّق الطبيعيّ في اصطفاف العناصر بعضها فوق بعض إلى اصطفاف العناصر بجانب بعضها البعض، وذلك في حال توفر مساحة كافية للعناصر للتتوضع بجانب بعضها البعض. فَهم هذا التسلسل في عرض العناصر هو أهمّ ما في الطوفان، وهو ما يجعل البعض مرتبكًا في تطبيق هذه الخاصيّة وحلّ مشاكلها.</p><p>في المثال التالي يوجد ثلاثة صناديق مُحددة الطول والارتفاع، ومن دون تطبيق خاصيّة الطوفان وتُعرض وفقًا لتسلسلها في مُستند HTML.</p><p style="text-align:center;"><a class="ipsAttachLink ipsAttachLink_image" rel="external nofollow" href="https://academy.hsoub.com/uploads/monthly_2015_03/Example_B.png.794a23a2fc2879435a2860dc8b06abbf.png"><img data-fileid="559" class="ipsImage ipsImage_thumbnailed" alt="Example_B.thumb.png.b4d87dd9c02fe71d7060" src="https://academy.hsoub.com/uploads/monthly_2015_03/Example_B.thumb.png.b4d87dd9c02fe71d7060e6a39ecb85ac.png"></a></p><pre class="html ipsCode prettyprint">&lt;div class="block pink"&gt;&lt;/div&gt;
&lt;div class="block blue"&gt;&lt;/div&gt;
&lt;div class="block green"&gt;&lt;/div&gt;</pre><pre class="css ipsCode prettyprint">.block { 
  width: 200px;
  height: 200px;
}</pre><p>من المُلاحظ في المثال السابق كيف أنّ العناصر تصطف فوق بعضها البعض، ويُمثل ذلك مفهوم "التدفق الطبيعيّ". في المثال التالي نفس الصناديق ولكنها مُطوّفة باستخدام خاصيّة الطوفان<span style="font-family:'courier new', courier, monospace;"> float: left</span>.</p><p style="text-align:center;" href="http://academy.hsoub.com/uploads/monthly_2015_03/Example_C.png.4f629c48297785c24f2a96b934fe47c5.png"><img data-fileid="560" class="ipsImage ipsImage_thumbnailed" alt="Example_C.png.4f629c48297785c24f2a96b934" src="https://academy.hsoub.com/uploads/monthly_2015_03/Example_C.thumb.png.5240ea98387da4498dc88b788df87dc1.png"></p><pre class="css ipsCode prettyprint">.block { 
  float: left;
  width: 200px;
  height: 200px;
}</pre><p>تصطفُ الصناديق في المثال السابق بجانب بعضها البعض، وهو أمرٌ مُتوقع بعد معرفة عمل خاصيّة الطوفان، ويتم ذلك فقط لوجود مساحة كافية للعناصر للتتوضع بجانب بعضها البعض. لتوضيح الجزئيّة السابقة تَمّ التعديل على المثال السابق بزيادة عدد الصناديق، مع الانتباه أنّ العنصر الأب لهذه الصناديق هو جِذْعُ الصفحة . من المُلاحظ كيف أنّ تسلسل عرض هذه الصناديق يختلف بناءً على حجم نافذة المُتصفّح -بالإضافة إلى جذع الصفحة - ولذلك ستستهلك هذه الصناديق مزيدًا من الصفوف عند عدم توفر مساحة كافية لعرض هذه الصناديق بجانب بعضها البعض، حيثُ كُلّما تَمّ تصغير حجم نافذة المُتصفّح كُلّما ازداد عدد الصفوف.</p><p style="text-align:center;" href="http://academy.hsoub.com/uploads/monthly_2015_03/floats.gif.59a568e3f9f4885ebe1a0064a649c576.gif"><img data-fileid="570" class="ipsImage ipsImage_thumbnailed" alt="floats.gif.59a568e3f9f4885ebe1a0064a649c" src="https://academy.hsoub.com/uploads/monthly_2015_03/floats.thumb.gif.63f6b2c0bdc67e31c60b84b5b5adc912.gif"></p><h2>تحرير الطوفان</h2><p>تعمل خاصيّة الطوفان float جنبًا إلى جنب مع الخاصيّة clear، حيثُ تُكمّل الخاصيّتان بعضُهما البعض لتُقدّم للمُطوّر أداة تطوير أفضل وأسهل. تمّت الإشارة سابقًا إلى أن العنصر المُطوف يتوضع في التدفّق الطبيعيّ في بادئ الأمر، ثم يُزال منه. هذا يعني أنّ كُلّ عنصر يتبع هذا العنصر سوف يعمل بطريقة مُغايرة لما هو مُتوقع، هذا السلوك هو ما يُربك البعض في خاصيّة الطوفان . يوجد في المثال التالي صندوقان مُطوّفان هما الورديّ والأزرق، ومِن ثُمّ صندوقان غير مُطوّفان هما الأخضر والبرتقالي.</p><p style="text-align:center;" href="http://academy.hsoub.com/uploads/monthly_2015_03/Example_E.png.aa23a2934a42a264e4a7c13e59fd3ae8.png"><img data-fileid="561" class="ipsImage ipsImage_thumbnailed" alt="Example_E.png.aa23a2934a42a264e4a7c13e59" src="https://academy.hsoub.com/uploads/monthly_2015_03/Example_E.thumb.png.3ff72c9dc1b308755404ddee31fb9c7e.png"></p><pre class="html ipsCode prettyprint">&lt;!-- HTML --&gt;
&lt;div class="block pink float"&gt;&lt;/div&gt;
&lt;div class="block blue float"&gt;&lt;/div&gt;
&lt;div class="block green"&gt;&lt;/div&gt;
&lt;div class="block orange"&gt;&lt;/div&gt;
</pre><pre class="css ipsCode prettyprint">/* CSS */
.block {
  width: 200px;
  height: 200px;
}
.float { float: left; }
.pink { background: #ee3e64; }
.blue { background: #44accf; }
.green { background: #b7d84b; }
.orange { background: #E2A741; }</pre><p>كُلّ شيءٍ في المثال السابق واضح ماعدا عدم ظهور الصندوق الأخضر من العرض، وتوضعه أسفل الصندوق الورديّ، حيثُ أنّ الصندوق الورديّ والصندوق الأزرق هي عناصر مُطوّفة، وتتوافق طريقة عرضها في المُتصفّح بناءً على المعلومات التي توصلنا إليها حتّى الآن، حيثُ أنّها تُسحب من تسلسل عرض التتدفّق الطبيعيّ وتصطف بجانب بعضها البعض، وهذا ما أخفى الصندوق الأخضر، ولإظهاره يجبُ استخدام الخاصيّة clear.</p><p>تملك الخاصيّة clear خمس قيم هي: يسار <span style="font-family:'courier new', courier, monospace;">left</span>، يمين <span style="font-family:'courier new', courier, monospace;">right</span>، الطرفين <span style="font-family:'courier new', courier, monospace;">both</span>، مَوروث <span style="font-family:'courier new', courier, monospace;">inherit</span> ولا شيء <span style="font-family:'courier new', courier, monospace;">none</span>. تجعل القيمة <span style="font-family:'courier new', courier, monospace;">left</span> العنصر أسفل أي عنصر مُطوف إلى جهة اليسار، وتجعل القيمة <span style="font-family:'courier new', courier, monospace;">right</span> العنصر أسفل أي عنصر مُطوف إلى جهة اليمين، واستخدام القيمة <span style="font-family:'courier new', courier, monospace;">both</span> تجعل من العنصر أسفل أي عنصر مُطوف على الجهتين اليُمنة واليسرى، أما القيمة <span style="font-family:'courier new', courier, monospace;">inherit</span> فتجعل من العنصر يرث قيمة العنصر الأب للخاصيّة <span style="font-family:'courier new', courier, monospace;">clear</span>. في المثال التالي تم استخدام الخاصيّة <span style="font-family:'courier new', courier, monospace;">clear</span> بالقيمة <span style="font-family:'courier new', courier, monospace;">left</span> مع الصندوق الأخضر.</p><p style="text-align:center;" href="http://academy.hsoub.com/uploads/monthly_2015_03/Example_E2.png.8e01505a1eec285b3f2a197cefe8f8bd.png"><img data-fileid="562" class="ipsImage ipsImage_thumbnailed" alt="Example_E2.png.8e01505a1eec285b3f2a197ce" src="https://academy.hsoub.com/uploads/monthly_2015_03/Example_E2.thumb.png.59daff2a8bb7f39869412ef14f3c7e45.png"></p><pre class="html ipsCode prettyprint">&lt;!-- HTML --&gt;
&lt;div class="block pink float"&gt;&lt;/div&gt;
&lt;div class="block blue float"&gt;&lt;/div&gt;
&lt;div class="block green clear"&gt;&lt;/div&gt;
&lt;div class="block orange"&gt;&lt;/div&gt;
</pre><pre class="css ipsCode prettyprint">/* CSS */
.block {
  width: 200px;
  height: 200px;
}
.float { float: left; }
.clear { clear: left; }
.pink { background: #ee3e64; }
.blue { background: #44accf; }
.green { background: #b7d84b; }
.orange { background: #E2A741; }</pre><p>يجعل التعديل الأخير على الصندوق الأخضر من الصندوق الورديّ وكأنّه في التدفّق الطبيعيّ لمُستند HTML، على الرَغم من أنّه ليس كذلك، وهذا ما يجعل من الخاصيّة clear خاصيّة رائعة والتي تُساعد على إرجاع عنصر غير مُطوف ليُعرض بشكل مُتوافق مع التدفّق الطبيعيّ ويَظهر على المُتصفّح كما هو مُتوقع له أن يظهر. بعد فهم عمل هاتان الخاصيّتان سيكون من السهلِ ابتكارُ أساليب جديدة للتعامل مع شيفرة HTML وCSS</p><h2>استخدام الطوفان لتقسيم الصفحات</h2><p>تبرز أهمّيّة خاصيّة الطوفان عند استخدامها في إنشاء تقسيمات الصفحة ، حيثُ بإمكاننا إنشاء صفحة بعمودين بطرق عدّة، وأغلب هذه الطُرق تستخدم عنصرًا مُطوّفًا واحدًا أوعنصرين مطوّفين. لنأخذ مثالًا بسيطًا: يحتوي موقع على عمودين، حيثُ المُحتوى على الجانب الأيسر وشريط التنقل الجانبي على الجانب الأيمن، في أعلى الصفحة يوجد ترويسة header وأسفل الصفحة يوجد ذيل الصفحة footer.</p><p style="text-align:center;" href="http://academy.hsoub.com/uploads/monthly_2015_03/Example_F.png.0e4ce4c06a21ec264be66d7ba5b8d078.png"><img data-fileid="563" class="ipsImage ipsImage_thumbnailed" alt="Example_F.png.0e4ce4c06a21ec264be66d7ba5" src="https://academy.hsoub.com/uploads/monthly_2015_03/Example_F.thumb.png.eaef991518f6ab7615a41c09013b26aa.png"></p><pre class="css ipsCode prettyprint">#container {
width: 960px;
margin: 0 auto;
}
#content {
float: left;
width: 660px;
background: #fff;
}
#navigation {
float: right;
width: 300px;
background: #eee;
}
#footer {
clear: both;
background: #aaa;
padding: 10px;
}
</pre><p>تحليل ملف التنسيق السابق يُظهر أنّ الحاوية الرئيسة والتي تُدعى container تُقيّد عناصر الصفحة المُطوفة في موضعها الذي يجب أن تكون عليه، ولو لم يكن لدينا هذه الحاوية لكانت العناصر المُطوفة مُلتصقةً على حواف نافذة المُتصفّح، وأما العناصر المُطوفة داخل الحاوية فهي content و navigation. يُمكن الحصول على تقسيمٍ ذو عمودان وذلك بأنّ نُطوّف المُحتوى content إلى جهة اليسار، وشريط التنقّل الجانبي navigation إلى جهة اليمين، ولكلٍ منهما قيمة عرض مُحددة بـ <span style="font-family:'courier new', courier, monospace;">660px</span> للمُحتوى و<span style="font-family:'courier new', courier, monospace;">300px</span> لشريط التنقّل الجانبي، وبذلك سيستحوذ هذان العنصران عرض الحاوية بالكامل (960px). أخيرًا تم تحديد الخاصيّة <span style="font-family:'courier new', courier, monospace;">clear</span> على ذيل الصفحة footer، والتي من شأنها أنّ تُعيد العناصر التي تلي أي عناصر مُطوفة إلى التدفّق الطبيعيّ، في هذه الحالة حُددت القيمة <span style="font-family:'courier new', courier, monospace;">both</span> لذيل الصفحة footer، لجعله يصطفُ أسفل المحتوى وشريط التنقّل الجانبي.</p><p>يُظهر المثال التالي كيفية عرض ذيل الصفحة footer في حال عدم استخدام الخاصيّة <span style="font-family:'courier new', courier, monospace;">clear</span>، ويُلاحظ كيف أنّ ذيل الصفحة انتقل إلى أسفل شريط التنقّل الجانبي، وذلك يحدث بسبب وجود مساحة كافية له أسفل الشريط، وأيضًا هذا السلوك هو مُتوافق مع التدفّق الطبيعيّ الذي نعمل به، ولكن هذا بالطبع ليس ما نريده. يُفترض الآن أن يكون الأمر واضحًا كيف أنّ الخاصيّتين <span style="font-family:'courier new', courier, monospace;">float</span> و<span style="font-family:'courier new', courier, monospace;">clear</span> تعملان جنبًا إلى جنب وكُل منهما يُكمّل الآخر.</p><p style="text-align:center;" href="http://academy.hsoub.com/uploads/monthly_2015_03/Example_G.png.b60e933514342e2f8fac903f802c51a3.png"><img data-fileid="564" class="ipsImage ipsImage_thumbnailed" alt="Example_G.png.b60e933514342e2f8fac903f80" src="https://academy.hsoub.com/uploads/monthly_2015_03/Example_G.thumb.png.b0d170367d070ef36913dbcb625129f6.png"></p><h2>الطوفان أولًا</h2><p>حتى الآن جميع الأمثلة السابقة كانت واضحة وبعيدةً عن المشاكل، حيثُ هناك حالات دقيقة يجبُ الإشارة إليها عند استخدام خاصيّة الطوفان. واحدةٌ من أهمّ هذه الحالات هي غير مُرتبطة بشكل مُباشر مع تقنيّة CSS بل مع تقنيّة HTML نفسها، حيثُ يختلف توضع العنصر المُطوف عن ما هو مُتوقع له أنّ يكون فيه، كما في المثال التالي حيثُ لدينا صندوق صغير نوعًا ما وبداخله صورة مُطوفة إلى جهة اليمين وبجانبها نصٌّ، ويملك العنصر الأب، وهو الحاوية، مساحة عرض مُحدودة (280px) ليُحيط بالعناصر المُطوفة بداخله.</p><p style="text-align:center;" href="http://academy.hsoub.com/uploads/monthly_2015_03/Example_H.png.05d28f9d9703ffe76e6e5c87d2ff5c6d.png"><img data-fileid="565" class="ipsImage ipsImage_thumbnailed" alt="Example_H.png.05d28f9d9703ffe76e6e5c87d2" src="https://academy.hsoub.com/uploads/monthly_2015_03/Example_H.thumb.png.57246a556ca1a8125b53a3801e59d5ce.png"></p><pre class="css ipsCode prettyprint">#container {
width: 280px;
margin: 0 auto;
padding: 10px;
background: #aaa;
border: 1px solid #999;
}
img {
float: right;
}

</pre><pre class="html ipsCode prettyprint">&lt;div id="container"&gt;
  &lt;img src="image.gif" /&gt;
  &lt;p&gt;This is some text contained within a small-ish box. I'm using it as an example of how placing your floated elements in different orders in your HTML can affect your layouts. For example, take a look at this great photo placeholder that should be sitting on the right.&lt;/p&gt;
&lt;/div&gt;
</pre><p>حتى الآن لا يوجد ما هو غريب في المثال السابق، ولكن ماذا لو كان ترتيب العناصر في صفحة HTML مُختلفٌ بعض الشيء، حيث الصورة بعد النَصّ</p><pre class="html ipsCode prettyprint">&lt;div id="container"&gt;
  &lt;p&gt;...&lt;/p&gt;
  &lt;img src="image.gif" /&gt;
&lt;/div&gt;
</pre><p style="text-align:center;" href="http://academy.hsoub.com/uploads/monthly_2015_03/Example_I.png.4c19a7c806b57b8432de4e348193f108.png"><img data-fileid="566" class="ipsImage ipsImage_thumbnailed" alt="Example_I.png.4c19a7c806b57b8432de4e3481" src="https://academy.hsoub.com/uploads/monthly_2015_03/Example_I.thumb.png.9757979f0120660ddb31a8f93b2411fe.png"></p><p>النتيجة ليست مرضية أبدًا، حيث انتقلت الصورة من أعلى الزاوية اليُمنى إلى أسفل النصّ، ليس هذا فقط بل أصبحت الصورة خارج الحاوية الخاصّة بها. إذا ما المُشكلة؟ في الحقيقة سبب المُشكلة يحتاج إلى شرحٍ والذي سنتطرّق إليه لاحقًا، ولكن الجدير بالذكر الآن أنّه من المُمكن تطبيق قاعدة "التطويف أولًا"، أيّ أنّ العناصر المُطوفة تأتي قبل العناصر غير المُطوفة في مُستند HTML، قد لا تعطي هذه القاعدة النتيجة المطلوبة دائمًا ولكن من الجيد تذكرها. أما سبب ظهور الصورة خارج حدود الحاوية الخاصّة بها فهو يعود إلى ما يُسمى بالانْطِواء collapsing.</p><h2>الانْطِواء Collapsing</h2><p>الانْطِواء هو عندما لا يتوسّع العنصر الأب الذي يحتوي على أي عدد من العناصر المطوفة بشكلٍ كامل ليُحيط بها كما لو كان سيفعل لو كانت هذه العناصر غير مُطوفة. في المثال السابق لم تكن المُشكلة في المُتصفّح نفسه والترتيب الذي ظهر عليه المُحتوى في المثال السابق هو ترتيب منطقيٌّ، حيثُ أنّه تُسحب العناصر المُطوفة من التدفّق الطبيعيّ للعناصر على الصفحة، لذلك لا تَعتبر الحاوية container العناصر المُطوفة جزءًا منها وتتعامل معها وكأنّها غير موجودة. لمزيد من التفاصيل حول هذا الموضوع يُمكن الرجوع إلى مقالة بعنوان: <a rel="external nofollow" href="http://complexspiral.com/publications/containing-floats">احتواء الطوفان</a>.</p><p>يُوضّح المثال التالي حاوية بداخلها صندوقين</p><p style="text-align:center;" href="http://academy.hsoub.com/uploads/monthly_2015_03/collapse-before-float.png.e5dbb88c9ef4489c903652bdd406f8b5.png"><img data-fileid="557" class="ipsImage ipsImage_thumbnailed" alt="collapse-before-float.png.e5dbb88c9ef448" src="https://academy.hsoub.com/uploads/monthly_2015_03/collapse-before-float.thumb.png.589b30b75d8bd286813c272d91da478c.png"></p><pre class="html ipsCode prettyprint">&lt;!-- HTML --&gt;
&lt;div class="container"&gt; 
&lt;div class="block pink"&gt;&lt;/div&gt;
&lt;div class="block blue"&gt;&lt;/div&gt;
&lt;/div&gt;

</pre><pre class="css ipsCode prettyprint">/* CSS */
.container {
   background: rgb(168, 207, 166);
   width: 600px;
   margin: auto;
}
.block {
  width: 200px;
  height: 200px;
  margin-left: 64px;
}</pre><p>يُلاحظ بعد إضافة الطوفان إلى الصندوقين اختفاء الحاوية من المُتصفّح، هل أصبحت تحت الصندوق الأزرق؟ أم الورديّ؟ أم ربما الأخضر الذي هو تحت الورديّ؟ في الحقيقة ما حدث هو أنّ الحاوية انطوت على نفسها بسبب عدم وجود عناصر لاحتوائها بعد الطوفان، ويبدو ذلك جليًا بعد إضافة حدودٍ للحاوية.</p><p style="text-align:center;" href="http://academy.hsoub.com/uploads/monthly_2015_03/collapse-after-float.png.9e10228200a3a444548c1b3a32c9f6d8.png"><img data-fileid="556" class="ipsImage ipsImage_thumbnailed" alt="collapse-after-float.png.9e10228200a3a44" src="https://academy.hsoub.com/uploads/monthly_2015_03/collapse-after-float.thumb.png.f465df0457c7393708c51cf4ecb1fd67.png"></p><p style="text-align:center;" href="http://academy.hsoub.com/uploads/monthly_2015_03/collapse-after-float-with-border.png.6363e9e6a841d7b2cd40be4f2cc9c673.png"><img data-fileid="555" class="ipsImage ipsImage_thumbnailed" alt="collapse-after-float-with-border.png.636" src="https://academy.hsoub.com/uploads/monthly_2015_03/collapse-after-float-with-border.thumb.png.e3823cc730b973544ee6802efb4622b9.png"></p><p>بعد أن توضّحت المُشكلة سوف نتطرّق إلى الحلول المُتوفرة، حيثُ يوجد طُرق عدّة لحل هذه المُشكلة، تعدّد الحلول يعود إلى المُرونة في اختيار الحلّ الأنْسَب، فالحلول المطروحة قد لا تُناسب جميع الحالات.</p><p>تُعتبر الطريقة التالية أقدم الطُرق في حل مُشكلة الانطواء، وهي باستخدام الخاصيّة <span style="font-family:'courier new', courier, monospace;">clear</span> بعد العنصر المُطوف، وذلك بجعل العنصر الأب مُمتدًا إلى ما بعد العنصر المُطوف، حيثُ يتم إضافة <span style="font-family:'courier new', courier, monospace;">div</span> مع تنسيق مُضمّن <span style="font-family:'courier new', courier, monospace;">clear: right</span>، والذي يجعل من الصورة المُطوفة مأخوذةً بالحسبان. يعمل هذا الحل بشكل جيّد جدًا ومع جميع المُتصفحات ومن دون أي مشاكل في التوافقية، ولكن استخدام تنسيق مُضمّن يُخالف قاعدة الفصل بين مُستند HTML و ملف التنسيق CSS لذلك لا يُحبّذ العديد من المُطوّرين هذه الطريقة.</p><pre class="html ipsCode prettyprint">&lt;div id="container"&gt;
  &lt;p&gt;...&lt;/p&gt;
  &lt;img src="image.gif" /&gt;
  &lt;div style="clear: right;"&gt;&lt;/div&gt;
&lt;/div&gt;
</pre><p style="text-align:center;" href="http://academy.hsoub.com/uploads/monthly_2015_03/Example_J.png.2a0c32f5acd1b1e8633ed6e38ccd7cee.png"><img data-fileid="567" class="ipsImage ipsImage_thumbnailed" alt="Example_J.png.2a0c32f5acd1b1e8633ed6e38c" src="https://academy.hsoub.com/uploads/monthly_2015_03/Example_J.thumb.png.f5b90073099f9171b4206b55fdc88398.png"></p><p>في المثال التالي لدينا عنصر أب يحتوي على ثلاثة صور مُطوفة، من المُلاحظ كيف أن الصور الثالثة خارج الحاوية.</p><pre class="html ipsCode prettyprint">&lt;div id="container"&gt;
  &lt;img src="image.gif" /&gt;
  &lt;img src="image.gif" /&gt;
  &lt;img src="image.gif" /&gt;
&lt;/div&gt;
</pre><p style="text-align:center;" href="http://academy.hsoub.com/uploads/monthly_2015_03/Example_K.png.3c80016af9fda2b4275dabc85846ebc1.png"><img data-fileid="568" class="ipsImage ipsImage_thumbnailed" alt="Example_K.png.3c80016af9fda2b4275dabc858" src="https://academy.hsoub.com/uploads/monthly_2015_03/Example_K.thumb.png.d6ddf88b3446048db978b9466c964eaa.png"></p><p>لتصحيح طريقة العرض سنستخدم CSS بدلًا من التنسيق المُضمّن، تسمح الطريقة التالية للعنصر الأب بالتوسّع ليُحيط بالعناصر المُطوفة، حيثُ يتم إضافة الخاصيّة فيضان <span style="font-family:'courier new', courier, monospace;">overflow</span> للعنصر الأب مع القيمة <span style="font-family:'courier new', courier, monospace;">hidden</span>. الجدير بالذكر هنا أنّه لم تُنشئ هذه الخاصيّة بهدف حل مُشكلة الانطواء، لذلك قد يكون لها بعض المشاكل، فمثلًا قد يختفي المُحتوى من الظهور عندما يكون أكبر من أنّ يتسع داخل الحاوية، لذلك يجب الحذر عن استخدام هذه الطريقة.</p><pre class="css ipsCode prettyprint">#container {
  overflow: hidden;
  width: 260px;
  margin: 0 auto;
  padding: 10px 0 10px 10px;
  background: #aaa;
  border: 1px solid #999;
}</pre><p style="text-align:center;" href="http://academy.hsoub.com/uploads/monthly_2015_03/Example_L.png.be25ce36114aa92103a0bacc01ebec63.png"><img data-fileid="569" class="ipsImage ipsImage_thumbnailed" alt="Example_L.png.be25ce36114aa92103a0bacc01" src="https://academy.hsoub.com/uploads/monthly_2015_03/Example_L.thumb.png.327d7e0d746afe848cda8992eab1e349.png"></p><p>يُوضح المثال التالي اختفاء المحتوى من الظهور عند استخدام خاصيّة <span style="font-family:'courier new', courier, monospace;">overflow</span>.</p><p style="text-align:center;" href="http://academy.hsoub.com/uploads/monthly_2015_03/overflow-con.png.36676541943234f3300f8dcb4faa2efd.png"><img data-fileid="571" class="ipsImage ipsImage_thumbnailed" alt="overflow-con.png.36676541943234f3300f8dc" src="https://academy.hsoub.com/uploads/monthly_2015_03/overflow-con.thumb.png.969d43a82ecf62a1f38ba8469b7ebdb7.png"></p><p>يوجد طريقة أُخرى لحل مُشكلة الانطواء والّتي تعطي نتائج جيّدة كما في الحلول السابقة، وهي استخدام شبه العناصر pseudo-elements المُسمى "بعد" <span style="font-family:'courier new', courier, monospace;">after</span>.</p><pre class="css ipsCode prettyprint">#container:after {
content: ".";
display: block;
height: 0;
clear: both;
visibility: hidden;
}
</pre><p>تقوم أوراق الأنماط المُتتالية CSS بإضافة عنصر جديد بعد الحاوية container مع بعض المُحتوى، في المثال السابق هو النقطة (.)، وإخفائه من العرض وبدون ارتفاع. يُمكن القراءة عن هذه الطريقة بمزيد من التفصيل عبر موقع: <a rel="external nofollow" href="http://www.positioniseverything.net/easyclearing.html">التمركز أهمّ ما في الأمر</a>.</p><p>تقوم جميع الطرق السابقة بحل مُشكلة الانطواء، والطريقة الأخيرة هي الأكثر استخدامًا في الوقت الحالي بعد تطوّر المُتصفحات ودعمها لمعايير CSS3. يقدم الموقع التالي أفضل استخدام لهذه الطريقة ويُوضح تطوّر الشيفرة الخاصة بها عبر الوقت: <a rel="external nofollow" href="http://css-tricks.com/snippets/css/clear-fix">إصلاح الانطواء</a>.</p><h2>خاتمة</h2><p><span style="font-size:14px;line-height:1.6;">أصبحت الخاصيّة <span style="font-family:'courier new', courier, monospace;">float</span> من الأدوات الأساسيّة في تصميم صفحات مُتجاوبة، لذلك فهم آليّة عمل هذه الأداة والمشاكل الخاصّة بها سيقدم للمطوّر أداة عمليّة لا يستطيع الاستغناء عنها.</span></p><p>ترجمة -وبتصرّف- للمقال: <a rel="external nofollow" href="http://alistapart.com/article/css-floats-101">CSS Floats 101</a> لصاحبه <a rel="external nofollow" href="https://twitter.com/motherfuton">Noah Stokes</a></p>
]]></description><guid isPermaLink="false">36</guid><pubDate>Sun, 08 Mar 2015 09:28:00 +0000</pubDate></item><item><title>&#x627;&#x633;&#x62A;&#x62E;&#x62F;&#x627;&#x645; &#x627;&#x644;&#x646;&#x645;&#x627;&#x630;&#x62C; &#x641;&#x64A; HTML5 &#x645;&#x639; &#x627;&#x644;&#x623;&#x635;&#x646;&#x627;&#x641; &#x627;&#x644;&#x632;&#x651;&#x627;&#x626;&#x641;&#x629; (pseudo-classes) &#x641;&#x64A; CSS3</title><link>https://academy.hsoub.com/programming/css/%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D8%A7%D9%84%D9%86%D9%85%D8%A7%D8%B0%D8%AC-%D9%81%D9%8A-html5-%D9%85%D8%B9-%D8%A7%D9%84%D8%A3%D8%B5%D9%86%D8%A7%D9%81-%D8%A7%D9%84%D8%B2%D9%91%D8%A7%D8%A6%D9%81%D8%A9-pseudo-classes-%D9%81%D9%8A-css3-r25/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2015_03/css3_480x300.png.caaa4d091172d0e127b119df6b9f634f.png" /></p>

<p>سنتحدّث في هذه المقالة عن جزءٍ مهمٍّ في CSS3، والذي يعمل بشكلٍ مُنسجمٍ مع HTML5 وبالتحديد مع النماذج (forms). يَشترط هذا المقال معرفة مُسبقة بلغة HTML وCSS ومبادئ JavaScript، لن يكون الموضوع صعبًا وسنتناوله بشكلٍ مُبسط.</p><h2>نبذة عن الأصناف الزائفة</h2><p>لكي لا يلتبس عليك الأمر أودُ الإشارة إلى أنّ كلمة pseudo (الّتي تعني "زائف") تُلفظ "سودو" وذلك لكي تَستطيعَ تمييزها في حال سماعك لها في شرح ما.</p><p>يُشير الصّنف الزائف إلى عنصر (element) موجود في البناء الهيكلي لمُستند HTML ولكن لا يُمكن الوصول إليه مباشرةً عبر خواص (attributes) محددة سابقًا، فمثلًا: يستهدف الصنف الزائف <code>‎:first-child</code> العنصر الأول الذي يلي العنصر الأب، وقد يكون العنصر الأول <code>&lt;h1&gt;</code> أو<code>&lt;p&gt;</code>، لذلك لا تستطيع استهدافه بشكل مباشر ولكن المتصفّح يَعرف طريقه إليه.</p><p>قدّم الإصدار 2.1 من CSS عددًا قليلًا من الأصناف الزّائفة، من بينها أوضاع الوصلات (link states)، وأيضًا تلك التي تُعبر عن أفعال المستخدم مثل <code>‎:active</code> و<code>‎:hover</code>؛ أمّا في الإصدار الثالث فقد ازداد عددها، وتوفّر منها ما هو مُرتبط بهيكل مُستند HTML مثل <code>‎:nth-of-type</code> و<code>‎:nth-child</code> ، وكذلك ما هو مُرتبط مع الواجهة المرئيّة مثل <code>‎:checked</code> و<code>‎:enabled</code>، ومنها أيضًا ما يتعلّق بتدقيق النّماذج (form validation)، وهي موضوع مقالنا هذا.</p><h2>تدقيق صلاحية النموذج بدون استخدام JavaScript</h2><p>قدّمت لنا HTML5 إمكانيّة تدقيق النّماذج ضمن المتصفّح (خلافًا للتّدقيق على الخادوم) بدون الاستعانة بلغة JavaScript، عندما تُحاول إرسال النموذج، سيُدقّق المتصفح كافة الحقول ويُظهر رسالة خطأ عند تعبئتها بشكل غير صحيح، هذا التصرّف تلقائيّ من المتصفّح إذا كان يدعم ذلك، وقد تختلف رسائل الخطأ هذه من متصفح إلى آخر ومن نظام تشغيل إلى آخر، وتعديلها ليس سهلًا نسبيًا، ولكن بإمكانك تغيير طريقة ظهور رسائل الخطأ على العناصر نفسها باستخدام الأصناف الزّائفة والتي تُصنّف ضمن <a rel="external nofollow" href="http://www.w3.org/TR/css3-ui/">وحدة واجهة المستخدم الأساسية في CSS3‏</a> (‏CSS Basic User Interface Module) وفق مُواصفات W3C، تَجد في الصور التّالية كيف يَعرض كل متصفح تنسيقًا مُختلفًا عن الآخر.</p><p><a class="ipsAttachLink ipsAttachLink_image" rel="external nofollow" href="https://academy.hsoub.com/uploads/monthly_2015_03/chrome.jpg.07072ebab72cfa8645668183f02523d4.jpg"><img class="ipsImage ipsImage_thumbnailed" data-fileid="115" alt="chrome.thumb.jpg.c0d28732b5cd74d82dec06a" src="https://academy.hsoub.com/uploads/monthly_2015_03/chrome.thumb.jpg.c0d28732b5cd74d82dec06a460db1ae5.jpg"></a></p><p><a class="ipsAttachLink ipsAttachLink_image" rel="external nofollow" href="https://academy.hsoub.com/uploads/monthly_2015_03/firefox.jpg.ddcf6fc7ef70f627f26bad613c650099.jpg"><img class="ipsImage ipsImage_thumbnailed" data-fileid="116" alt="firefox.thumb.jpg.a2744196363de2def822b1" src="https://academy.hsoub.com/uploads/monthly_2015_03/firefox.thumb.jpg.a2744196363de2def822b1d6e9ad7b67.jpg"></a></p><p><a class="ipsAttachLink ipsAttachLink_image" rel="external nofollow" href="https://academy.hsoub.com/uploads/monthly_2015_03/opera.jpg.7548b95520fcb3ffc7a03d0efde36ec8.jpg"><img class="ipsImage ipsImage_thumbnailed" data-fileid="119" alt="opera.thumb.jpg.55dc618105ce5997be256cc6" src="https://academy.hsoub.com/uploads/monthly_2015_03/opera.thumb.jpg.55dc618105ce5997be256cc6258f000f.jpg"></a></p><p>سأركز على دعم المتصفحات في القسم الأخير من المقالة ولكن باختصار أغلب المتصفحات تدعم تدقيق النماذج، والأمثلة في الصور التوضيحية التّالية مأخوذة من متصفح Chrome، ويُفضل دائمًا متابعة التحديثات التي تطرأ على دعم المتصفحات بالاطلاع على الموقع <a rel="external nofollow" href="http://caniuse.com">هنا</a>، لنُباشر بالأمثلة العملية.</p><h2>العناصر المطلوبة والاختيارية</h2><p>إن القيم المطلوبة (الإلزاميّة) واحدة من أشكال التدقيق الأكثر شيوعًا، وتُستخدم لتمييز الحقول التي يتحتّم على المستخدم تعبئتها لكي يتسنى له المُتابعة، لجعل عنصر في نموذج مطلوبًا، أضف الخاصّة <code>required</code> إليه:</p><pre class="html ipsCode prettyprint">&lt;input type="text" required&gt;</pre><p>من ناحية المظهر، استخدم الصّنف الزائف <code>‎:required</code> والذي يَستهدف العنصر الذي يَملك الخاصّة <code>required</code>، على سبيل المثال لِوضع علامة النجمة (*) بجانب عنوان الحقل، والتي عادةً ما تُستخدم لتُشير إلى أنّ هذا الجزء من النموذج مطلوب وليس اختياريًّا اكتب التالي:</p><pre class="css ipsCode prettyprint">input:required + label::after { content: "*"; }</pre><p>تطبيق التنسيق السابق يَعتمد على كيفيّة بناء مُستند HTML فالمثال السابق يخص التّالي:</p><pre class="html ipsCode prettyprint">&lt;input type="text" required id="foo"&gt;
&lt;label for="foo"&gt;Foo&lt;/label&gt;</pre><p>يُستهدف الحقل الاختياري بالصّنف الزّائف <code>‎:optional</code> وبُطبق تأثيره على على كل عنصر لا يملك الخاصة <code>required</code>، مثلًا لجعلٍ حقل اختياري ذا حدود فاتحة نُطبق التنسيق التالي:</p><pre class="css ipsCode prettyprint">input:optional { border-color: silver; }</pre><p><a class="ipsAttachLink ipsAttachLink_image" rel="external nofollow" href="https://academy.hsoub.com/uploads/monthly_2015_03/optional-required.jpg.ffbfb5ef0befd8ee4284e6a10d3cc157.jpg"><img class="ipsImage ipsImage_thumbnailed" data-fileid="120" alt="optional-required.thumb.jpg.77f22fd6d87f" src="https://academy.hsoub.com/uploads/monthly_2015_03/optional-required.thumb.jpg.77f22fd6d87ff613722d8e263f6c17ca.jpg"></a></p><h2>العناصر السليمة وغير السليمة</h2><p>لتدقيق النماذج أشكال أخرى بجانب <code>required</code> و<code>optional</code> تُمكنك من استخدام مطابقة الأنماط (pattern matching)، فمثلًا لِتدقيق عنوان البريد الإلكتروني:</p><pre class="html ipsCode prettyprint">&lt;input type="email"&gt;</pre><p>عندما يقوم المُستخدم بإرسال مُدخلات لا تُطابق نمطًا مُحددًا، يُعتبر المُدخل غير سليم، ولِتَنسيق عناصر النموذج السليمة وغير السليمة، يُستخدم الصّنفان الزائفان <code>:valid</code> و<code>:invalid</code> بالتّرتيب، وتُرسم إشارة تبعًا لسلامة المُدخل كما يلي:<code class="lang-css"> </code></p><pre class="css ipsCode prettyprint">input:invalid + label::after { content: ' ⨉'; }
input:valid + label::after { content: ' ✓'; }</pre><p>لاحظ أنّ هذا التنسيق يُطبقُ عند تحميل الصفحة لذلك يجب استخدام JavaScript لتطبيق التأثيرات عند إرسال النموذج، وذلك بإضافة صنف (class) إليه، في مثالنا سوف نضيف الصنف <code>submitted</code>:</p><pre class="javascript ipsCode prettyprint">document.forms[0].addEventListener('submit', function(e) {
  e.currentTarget.classList.add('submitted');
});</pre><p>قد يَختلف النّص البرمجيّ الذي ستكتبه، ولكن كلّ ما عليك فعله هو تنسيق الصنف كما في التالي:</p><pre class="css ipsCode prettyprint">.submitted input:invalid + label::after { content: ' ⨉'; }</pre><p><a class="ipsAttachLink ipsAttachLink_image" rel="external nofollow" href="https://academy.hsoub.com/uploads/monthly_2015_03/valid-invalid.jpg.28f6c9e894e6b2ae3a0e7fa20f8695bc.jpg"><img class="ipsImage ipsImage_thumbnailed" data-fileid="123" alt="valid-invalid.thumb.jpg.5b92ef077c318d25" src="https://academy.hsoub.com/uploads/monthly_2015_03/valid-invalid.thumb.jpg.5b92ef077c318d2543d2c395cede3217.jpg"></a></p><h2>مجالات الأرقام</h2><p>تسمح بعض أنواع الحقول مثل <code>number</code> بتحديد مجال من القيم باستخدام الخاصيات <code>min</code> و<code>max</code> كما في التّالي:</p><pre class="html ipsCode prettyprint">&lt;input type="number" max="10" min="1"&gt;</pre><p>في الحالة الطبيعية سيحدّ المتصفح مجال الأرقام تلقائيًّا بحيثُ لا يَسمح للمُستخدم بتجاوزه، ولكن إنّ أمكن تعديل هذه القيمة (باستعمال JavaScript مثلًا) لتتجاوز هذا المجال، فيمكن أنّ يُستخدم تنسيق خاص لإظهار الخطأ:</p><pre class="html ipsCode prettyprint">&lt;input type="number" max="10" min="1" value="11"&gt;</pre><p>يُستخدم عندها الصنف الزائف <code>‎:out-of-range</code> وتنسيقه:</p><pre class="css ipsCode prettyprint">input[type='number']:out-of-range { border-color: red; }</pre><p>بعكس <code>‎:out-of-range</code> لدينا <code>‎:in-range</code> وتنسيقه:</p><pre class="css ipsCode prettyprint">input[type='number']:in-range { border-color: green; }</pre><p><a class="ipsAttachLink ipsAttachLink_image" rel="external nofollow" href="https://academy.hsoub.com/uploads/monthly_2015_03/number-ranges.jpg.20aee01e40a225a2ae64b8e7f9594679.jpg"><img class="ipsImage ipsImage_thumbnailed" data-fileid="118" alt="number-ranges.thumb.jpg.4241ddcde3616e78" src="https://academy.hsoub.com/uploads/monthly_2015_03/number-ranges.thumb.jpg.4241ddcde3616e78a3e39641c027612e.jpg"></a></p><h2>القراءة والكتابة</h2><p>يكون لديك في بعض الأحيان حقل نموذج مُدخل مسبقًا بقيمة لاتريد من المستخدم التعديل عليها كما في حقل <code>textarea</code> في اتفاقية الاستخدام مثلًا، يُمكنك عندها إضافة الخاصّة للقراءة فقط <code>readonly</code>.</p><pre class="html ipsCode prettyprint">&lt;textarea readonly&gt;Lorem ipsum&lt;/textarea&gt;</pre><p>لتنسيق العناصر التي تحمل الخاصّة <code>readonly</code> يُستخدم الصّنف الزّائف <code>‎:read-only</code> وبإمكانك أيضًا إضافة الخاصة <code>user-select</code> لِتمنع المستخدم من تحديد النص.</p><pre class="css ipsCode prettyprint">textarea:read-only { user-select: none; }</pre><p>ويُستخدم الصّنف الزّائف <code>‎:read-write</code> للعناصر الأُخرى المسموح بتعديلها ويُنسق بالشكل التّالي:</p><pre class="css ipsCode prettyprint">textarea:read-write { user-select: text; }</pre><p>لاحظ أنّه قد تمّ تنسيق الحواف للتمييز، حيث بشكل افتراضيّ لا يُوجد فرق في التنسيق بين الصّنفين الزّائفين <code>‎:read-only</code> و<code>‎:read-write</code></p><p><a class="ipsAttachLink ipsAttachLink_image" rel="external nofollow" href="https://academy.hsoub.com/uploads/monthly_2015_03/readonly.jpg.7fdb464f23370da351615a11ad206816.jpg"><img class="ipsImage ipsImage_thumbnailed" data-fileid="122" alt="readonly.thumb.jpg.49fbd6e79d7c299077a1b" src="https://academy.hsoub.com/uploads/monthly_2015_03/readonly.thumb.jpg.49fbd6e79d7c299077a1bb526f83e6c4.jpg"></a></p><h2>دعمُ المتصفحات</h2><p>يُوضّح الجدول التّالي دعم المُتصفحات لِتدقيق النموذج، تجد آخر تحديث للجدول <a rel="external nofollow" href="http://caniuse.com/#search=form-validation">هنا</a>، حيث يُلاحظ أنّ أغلب المتصفحات في آخر إصداراتها تدعم هذه الخاصة.</p><p><a class="ipsAttachLink ipsAttachLink_image" rel="external nofollow" href="https://academy.hsoub.com/uploads/monthly_2015_03/form-validation-table.jpg.ebebd5ea2497fc010481b4ae8eb7699f.jpg"><img class="ipsImage ipsImage_thumbnailed" data-fileid="117" alt="form-validation-table.thumb.jpg.4abdbcde" src="https://academy.hsoub.com/uploads/monthly_2015_03/form-validation-table.thumb.jpg.4abdbcdec6ad1ecb9151bec27249f8d0.jpg"></a></p><p>أما الجدول التّالي فيُوضح دعم المتصفحات للأصناف الزّائفة، بالنسبة للدّعم الجزئي (partial support) لأشباه الأصناف، فيعني أنّه عند استخدامها يجب إضافة البادئة <code>moz</code> لفيرفُكس و<code>ms</code> لـِIE و<code>webkit</code> لباقي المُتصفحات، تجد آخر تحديث للجدول <a rel="external nofollow" href="http://caniuse.com/#search=pseudo-class">هنا</a></p><p><a class="ipsAttachLink ipsAttachLink_image" rel="external nofollow" href="https://academy.hsoub.com/uploads/monthly_2015_03/pseudo-class-table.jpg.fc8b901a0dbaa07affeb64d6e7453279.jpg"><img class="ipsImage ipsImage_thumbnailed" data-fileid="121" alt="pseudo-class-table.thumb.jpg.24ea74eb369" src="https://academy.hsoub.com/uploads/monthly_2015_03/pseudo-class-table.thumb.jpg.24ea74eb36950943ced9eb046f0251b3.jpg"></a></p><p>‏HTML و CSS لغتان في تطوّر مُستمر وذلك من شأنه أنّ يُقلّل من اعتمادنا على JavaScript، مما يُقلّل حجم ملف <code>.js</code> (على حِساب ملف <code>.css</code>) المُرسل للمستخدم ومنه إلى سرعة نسبيّة في التصفح وتجربة استخدام أفضل، أرجو أنّ أكون قد وفقت في الشرح وقدّمت الفائدة المرجوّة من هذه المقالة، أنصحكَ بالتطبيق العمليّ لتركيز المعلومة، ولا تنسَ مشاركة المقالة.</p><p>ترجمة -وبتصرّف- للمقال: <a rel="external nofollow" href="http://html5doctor.com/css3-pseudo-classes-and-html5-forms">CSS3 Pseudo-Classes and HTML5 Forms‏</a> لصاحبه <a rel="external nofollow" href="http://twitter.com/stopsatgreen">Peter Gasston‏</a>.</p>
]]></description><guid isPermaLink="false">25</guid><pubDate>Tue, 03 Mar 2015 19:09:00 +0000</pubDate></item><item><title>&#x623;&#x633;&#x627;&#x633;&#x64A;&#x627;&#x62A; &#x625;&#x637;&#x627;&#x631; &#x639;&#x645;&#x644; Foundation: &#x645;&#x64F;&#x643;&#x648;&#x651;&#x646;&#x627;&#x62A; &#x62E;&#x627;&#x635;&#x651;&#x629;</title><link>https://academy.hsoub.com/programming/css/%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A7%D8%AA-%D8%A5%D8%B7%D8%A7%D8%B1-%D8%B9%D9%85%D9%84-foundation-%D9%85%D9%8F%D9%83%D9%88%D9%91%D9%86%D8%A7%D8%AA-%D8%AE%D8%A7%D8%B5%D9%91%D8%A9-r34/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2015_03/foundation_480x300.jpg.5ec77f163f1aa88e6cda20f76e2ffe25.jpg" /></p>

<p>في الجزء السادس والأخير سوف نتحدّث عن مواضيع مُكمّلة للإطار نوعًا ما، والّتي رُبما تستطيع الاستغناء عنها، ولكنّك صدّقني لن تفعل، لأنّ هذه الكماليّات هي ما تُميز إطار العمل Foundation عن غيره من أُطر العمل.</p><h2>المُسوّي (Equalizer)</h2><p>المُسوّي هو إضافة JavaScript صغيرة تُساعدك في تسوية التنسيق بين حاويتين (containers) فيما بينهما عندما يحتويان على مُحتويين مُختلفين، في الصفحة الرئيسة الخاصة بالمتجر لدينا ثلاثة أعمدة على سويّة مختلفة، كذلك الأمر في صفحة الخطط والأسعار لدينا "جداول الأسعار"، لنستخدم المُسوّي للتصحيح من تنسيقهما.</p><p><a class="ipsAttachLink ipsAttachLink_image" rel="external nofollow" href="https://academy.hsoub.com/uploads/monthly_2015_03/equ.png.1fdab710c1edaf6feb632aef395fd63a.png"><img class="ipsImage ipsImage_thumbnailed" data-fileid="446" alt="equ.thumb.png.a8feb944bfc8c74952ded9d8d4" src="https://academy.hsoub.com/uploads/monthly_2015_03/equ.thumb.png.a8feb944bfc8c74952ded9d8d426e692.png"></a></p><p><a class="ipsAttachLink ipsAttachLink_image" rel="external nofollow" href="https://academy.hsoub.com/uploads/monthly_2015_03/equ2.png.5f99351675856af0e3806cd1e032cca4.png"><img class="ipsImage ipsImage_thumbnailed" data-fileid="447" alt="equ2.thumb.png.62d80d261b71ec311a14e312b" src="https://academy.hsoub.com/uploads/monthly_2015_03/equ2.thumb.png.62d80d261b71ec311a14e312bb177bf4.png"></a></p><p>لتنسيق هذه الصناديق بشكل مُتساوي، كل ما عليك فعله هو إضافة خاصيّة المعلومات <code>data-equalizer</code> إلى العنصر الأب الخاص بهذه الصناديق، وخاصيّة المعلومات <code>data-equalizer-watch</code> لكل عُنصرٍ تُريد تسويته على نفس الارتفاع.</p><pre class="html ipsCode prettyprint">    &lt;div class="row" data-equalizer&gt;
      &lt;div class="small-12 medium-4 columns"&gt;
        &lt;div class="panel" data-equalizer-watch&gt;
          &lt;h3&gt;...&lt;/h3&gt;
          &lt;p&gt;...&lt;/p&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div class="small-12 medium-4 columns"&gt;
        &lt;div class="panel" data-equalizer-watch&gt;
          &lt;h3&gt;...&lt;/h3&gt;
          &lt;p&gt;...&lt;/p&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div class="small-12 medium-4 columns"&gt;
        &lt;div class="panel" data-equalizer-watch&gt;
          &lt;h3&gt;...&lt;/h3&gt;
          &lt;p&gt;...&lt;/p&gt;
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;</pre><p><a class="ipsAttachLink ipsAttachLink_image" rel="external nofollow" href="https://academy.hsoub.com/uploads/monthly_2015_03/right-equ1.png.a33e7993d1faf757a9e1cbb687637b93.png"><img data-fileid="512" class="ipsImage ipsImage_thumbnailed" alt="right-equ1.thumb.png.bee084689ed2ecf421c" src="https://academy.hsoub.com/uploads/monthly_2015_03/right-equ1.thumb.png.bee084689ed2ecf421c173b1d2337a45.png"></a></p><pre class="html ipsCode prettyprint">    &lt;div class="row" data-equalizer&gt;
      &lt;div class="large-4 columns"&gt;
        &lt;ul class="pricing-table" data-equalizer-watch&gt;
          ...
        &lt;/ul&gt;
      &lt;/div&gt;
      &lt;div class="large-4 columns"&gt;
        &lt;ul class="pricing-table" data-equalizer-watch&gt;
          ...
        &lt;/ul&gt;
      &lt;/div&gt;
      &lt;div class="large-4 columns"&gt;
        &lt;ul class="pricing-table" data-equalizer-watch&gt;
          ...
        &lt;/ul&gt;
      &lt;/div&gt;
    &lt;/div&gt;</pre><p><code class="lang-html"> <a class="ipsAttachLink ipsAttachLink_image" rel="external nofollow" href="https://academy.hsoub.com/uploads/monthly_2015_03/right-equ2.png.e3a99391875c7d09eff6a92ac170451e.png"><img data-fileid="513" class="ipsImage ipsImage_thumbnailed" alt="right-equ2.thumb.png.03d6da6f5ca292848bb" src="https://academy.hsoub.com/uploads/monthly_2015_03/right-equ2.thumb.png.03d6da6f5ca292848bbce4749b25780d.png"></a></code></p><h2>التبادل (Interchange)</h2><p>يُستخدم "التبادل" (interchange) في تحميل (load) جزء مُحدد من مُستند HTML بناءً على استعلامات وسائط (media queries) مُعينة، حيث أنك تستطيع تحميل مُحتوى مُعين دون الآخر على حجم شاشة مُعين دون الآخر، لاحظ أنّي قلّت تحميل وليس إظهار، وهو ما يحدث في "أصناف الظهور". تمت إضافة "التبادل" في الإصدار الخامس من Foundation، وهو من الميزات الّتي يتوفق بها Foundation على إطار العمل Bootstrap.</p><p>تخيلْ أنّ يكونَ لديك صفحة تحتوي نصًّا لخرائط Google، الخرائط سوف تظهر بشكل سلس على أجهزة سطح المكتب، ولكن على أجهزة الهاتف المحمول سيكون هناك تأخيرٌ بعض الشيء في عرض الصفحة. "التبادل" يسمح لك بتحميل صورة ثابتة على أجهزة الهاتف المحمول بدلًا من تضمين خريطة تفاعليّة، الأمر الذي يزيد من سرعة عرض الصفحة وبالتّالي تجربة استخدام أفضل للمُستخدم.</p><p>تُستخدم JavaScript لتطبيق مفهوم "التبادل" لذلك عليك ضمان عرض مُحتوى ما على الصفحة في حال عدم توفرها على المُتصفح، وذلك باستخدام الوسم <code>&lt;noscript&gt;</code>.</p><p>يَستخدم Foundation خاصيّة المعلومات <code>data-interchange</code> للتحكم بتحميل المُحتوى، بحيث كل جزء نريد عرضه سوف نوفر له قيمتان، القيمة الأولى هي مسار المُحتوى، والقيمة الثانية هي استعلام وسائط (media query)، ويُوفر Foundation مجموعة من استعلامات الوسائط منها "مبدئي" <code>default</code> و"صغير" <code>small</code> و"كبير" <code>large</code> ولوضعية اتجاه الجهاز عمودي <code>portrait</code> وأفقي <code>landscape</code>.</p><p>عند عرض الصفحة يتمّ اختبار كل استعلام على الترتيب، والاستعلامات الّتي تُحقق الشرط يتمّ تحميل المَسار الخاصّ بها، حيثُ يتمّ تحميلُ مُحتوى آخر استعلام تُحقق الدلالة الخاصة بها، مع الانتباه أنّه عليك دائمًا التصريح عن الاستعلام المُسمى "مبدئي" <code>default</code>.</p><p>في صفحة المُنتج الخاصّة بالمتجر لدينا صورة تُعرض بحجمها الكامل على جميع الأجهزة، مانُريده هو تخصيص حجم الصورة لكل قياس شاشة:</p><pre class="html ipsCode prettyprint">    &lt;img data-interchange="[img/green-default.jpg, (default)], [img/green-small.jpg, (small)], [img/green-medium.jpg, (medium)], [img/green-large.jpg, (large)]"&gt;</pre><p>لاحظ أن أبعاد الصورة المُحملة في الشاشات الكبيرة هو 960 * 1600:</p><p><a class="ipsAttachLink ipsAttachLink_image" rel="external nofollow" href="https://academy.hsoub.com/uploads/monthly_2015_03/interchange-large.png.b4d21eaa5563ea9cc0ed7afb8be1020a.png"><img class="ipsImage ipsImage_thumbnailed" data-fileid="448" alt="interchange-large.thumb.png.bb8594a95c81" src="https://academy.hsoub.com/uploads/monthly_2015_03/interchange-large.thumb.png.bb8594a95c811a1d82a703ee9b2e5e74.png"></a></p><p>أما أبعاد الصورة في الشاشات المتوسطة هو 480 * 800:</p><p><a class="ipsAttachLink ipsAttachLink_image" rel="external nofollow" href="https://academy.hsoub.com/uploads/monthly_2015_03/interchange-medium.png.0b3276d68ab10f6cce90b53428ed7692.png"><img class="ipsImage ipsImage_thumbnailed" data-fileid="449" alt="interchange-medium.thumb.png.320ec792ee9" src="https://academy.hsoub.com/uploads/monthly_2015_03/interchange-medium.thumb.png.320ec792ee9354dc6debf64da86eebc8.png"></a></p><p>وأخيرًا الصورة في الشاشات الصغيرة ستظهر بأصغر حجم:<a class="ipsAttachLink ipsAttachLink_image" rel="external nofollow" href="https://academy.hsoub.com/uploads/monthly_2015_03/interchange-small.png.f53e481a63a0fef6f10f92c228cf2a34.png"><img class="ipsImage ipsImage_thumbnailed" data-fileid="450" alt="interchange-small.thumb.png.add9f5918fff" src="https://academy.hsoub.com/uploads/monthly_2015_03/interchange-small.thumb.png.add9f5918fffacf936a461ecb748774e.png"></a></p><p>النّصّ البرمجيّ السابق يعرض المُحتوى بشكل ممتاز طالما أن JavaScript مُفعلة على المُتصفح، ولضمان عرض المُحتوى في حال أنها مُعطلة علينا إضافة السطر التّالي إلى النّصّ:</p><pre class="html ipsCode prettyprint">    &lt;noscript&gt;&lt;img src="img/green-default.jpg"&gt;&lt;/noscript&gt;</pre><p>كما أنّه بإمكانك كتابةُ الاستعلامات الخاصّة بك، حيثُ أنّ النّصّ السابق كان من المُمكن كتابته على الشكل التّالي لتحصل على نفس النتيجة:</p><pre class="html ipsCode prettyprint">    &lt;img data-interchange="[img/green-default.jpg, (only screen and (min-width: 1px))], [img/green-small.jpg, (only screen and (max-width: 640px))], [img/green-medium.jpg, (only screen and (max-width: 1024px))], [img/green-large.jpg, (only screen and (min-width: 1024px))]"&gt;</pre><p>"التبادل" من الميزات الّتي سوف تستخدمها بكثرة إنّ كنتَ مطوّرًا مُحترفًا، طبعًا بإمكانك دائمًا الاستعانة بحلولٍ من جهة الخادم (server-side)، ولكن مع المواقع الصغيرة "التبادل" يأتي كحلٍ مثالي على جهة العميل (client-side) ولا يتطلب الكثير من الإعداد، لذلك أنصحك بالاعتماد على هذه الإضافة في مشاريعك.</p><h2>الجولة (Joyride)</h2><p>من الإضافات المُميزة جدًا في Foundation، والّتي يَفتقد لها إطار العمل Bootstrap، تُتيح "الجولة" joyride أخذ المستخدم في جولة لاستعراض الموقع وميزاته، أو الإشارة إلى ميزة جديدة قُمت بإضافتها مؤخرًا إلى الموقع، أو حتّى شرح كيفية إجراء مهمة (task) في الموقع عبر شرح خطوات التنفيذ.</p><p>الإعداد سيكون عبر إنشاء "قائمة مُرتبة" <code>&lt;ol&gt;</code>، أو "قائمة غير مُرتبة" <code>&lt;ul&gt;</code>، في أسفل صفحة HTML وإضافة الخاصيّة <code>data-joyride</code>، هذه القائمة سوف تحتوي مكان التوقف في كل خطوة من خطوات الجولة ومُحتوى الرسالة الخاص بكل نقطة وقوف، سوف نستخدم الصنف <code>joyride-list</code> لإخفاء القائمة من الظهور في المتصفح، وخاصيّة المعلومات <code>data-joyride</code> ستكون مسؤولة عن النصّ الخاص بـِHTML. لكل عنصر قائمة <code>&lt;li&gt;</code>، والّتي من المُمكن أن تحتوي على عنوان ورسالة مناسبة، سنُعرف محطات الوقوف بخاصيّة المعلومات <code>data-id</code> مُعطاةً قيمةً مُناسبة، والخاصيّة <code>data-text</code> ستكون مسؤولة عن الانتقال إلى نقطة الوقوف التّالية، والخاصيّة <code>data-prev-text</code> ستكون مسؤولة عن الانتقال إلى محطة وقوف سابقة، أما القائمة الأخيرة ستكون مسؤولة عن إنهاء الجولة وذلك بالخاصيّة <code>data-button</code>.</p><p>في صفحة المعرض الخاص بالمتجر سوف نُشير إلى الخيارات المتوفرة لاستعراض الصور، سوف نقوم بتحديد <code>id</code> لكل عنصر نريد الوقوف عنده، ومحطات الوقوف لدينا هي كالتّالي: <code>stop1</code> للإشارة إلى إمكانيّة البحث و<code>stop2</code> للإشارة إلى إمكانيّة تصفية المُحتوى و أخيرًا <code>stop3</code> للإشارة إلى إمكانيّة استعراض الصور عبر "ترقيم الصفحات" (pagination)، وبعد تحديد محطات الوقوف علينا كتابة النصّ البرمجيّ الخاص بالجولة:</p><pre class="html ipsCode prettyprint">    &lt;ol class="joyride-list" data-joyride&gt;
      &lt;li data-id="1stop" data-text="Next"&gt; &lt;!-- محتوى التوقف الأول --&gt;
        &lt;h4&gt;Search&lt;/h4&gt;
        &lt;p&gt;You can search for photo.&lt;/p&gt;
      &lt;/li&gt;
      &lt;li data-id="2stop" data-text="Next" data-prev-text="Prev"&gt; &lt;!-- محتوى التوقف الثاني --&gt;
        &lt;h4&gt;Filter&lt;/h4&gt;
        &lt;p&gt;You can filter the content.&lt;/p&gt;
      &lt;/li&gt;
      &lt;li data-id="3stop" data-text="Next" data-prev-text="Prev"&gt; &lt;!-- محتوى التوقف الثالث --&gt;
        &lt;h4&gt;Explore&lt;/h4&gt;
        &lt;p&gt;Or explore our gallery.&lt;/p&gt;
      &lt;/li&gt;
      &lt;li data-button="End" data-prev-text="Prev"&gt; &lt;!-- محتوى رسالة الانتهاء من الجولة --&gt;
        &lt;h4&gt;The end&lt;/h4&gt;
        &lt;p&gt;Happy shooting&lt;/p&gt;
      &lt;/li&gt;
    &lt;/ol&gt;</pre><p><a class="ipsAttachLink ipsAttachLink_image" rel="external nofollow" href="https://academy.hsoub.com/uploads/monthly_2015_03/joyride1.png.33a77a76feccd95bd7f51aaf82b3ca15.png"><img data-fileid="543" class="ipsImage ipsImage_thumbnailed" alt="joyride1.thumb.png.dae2390575f3e1617d9cc" src="https://academy.hsoub.com/uploads/monthly_2015_03/joyride1.thumb.png.dae2390575f3e1617d9cc80af01132a2.png"></a></p><p><a class="ipsAttachLink ipsAttachLink_image" rel="external nofollow" href="https://academy.hsoub.com/uploads/monthly_2015_03/joyride2.png.816c5b93d5fd3cead8f63f969c8cf6f2.png"><img data-fileid="544" class="ipsImage ipsImage_thumbnailed" alt="joyride2.thumb.png.b098ed2e2085a49694a9c" src="https://academy.hsoub.com/uploads/monthly_2015_03/joyride2.thumb.png.b098ed2e2085a49694a9c7ba0fb18504.png"></a></p><p><a class="ipsAttachLink ipsAttachLink_image" rel="external nofollow" href="https://academy.hsoub.com/uploads/monthly_2015_03/joyride3.png.157a09478d8c65a2b7e9d7d063310b31.png"><img class="ipsImage ipsImage_thumbnailed" data-fileid="451" alt="joyride3.thumb.png.1e22524dd2f522de29105" src="https://academy.hsoub.com/uploads/monthly_2015_03/joyride3.thumb.png.1e22524dd2f522de2910506e4c637615.png"></a></p><p><a class="ipsAttachLink ipsAttachLink_image" rel="external nofollow" href="https://academy.hsoub.com/uploads/monthly_2015_03/joyride-end.png.f0579b48f736aeda7213470eaa43fd28.png"><img data-fileid="546" class="ipsImage ipsImage_thumbnailed" alt="joyride-end.thumb.png.5a7c6ae5d75200f65c" src="https://academy.hsoub.com/uploads/monthly_2015_03/joyride-end.thumb.png.5a7c6ae5d75200f65c8dd04edbab58a3.png"></a></p><p>لا تعمل "الجولة" عند انتهاء تحميل الصفحة كما في الإضافات السابقة، ولذلك عليك استدعاء الدالة <code>start</code> باستخدام JavaScript:</p><pre class="html ipsCode prettyprint">    $(document).foundation('joyride', 'start');</pre><p>بإمكانك تخصيص طريقة العرض كما ترغب، سرعة الانتقال من نقطة إلى أخرى، أو طريقة الانتقال، أو حتّى إلغاء إمكانيّة التحكم "بالجولة" باستخدام لوحة المفاتيح، حيث بشكل افتراضي يُمكنك استخدام الأسهم للانتقال خطوة للأمام وخطوة للخلف وإنهاء "الجولة" بزر الهروب (<code>Esc</code>)، ولتعطيل هذه الأزرار بإمكانك استخدام خاصية المعلومات <code>data-options</code> والخيار <code>keyboard</code> والقيمة <code>false</code>، وللمزيد من التخصيص يُمكنك مراجعة <a rel="external nofollow" href="http://foundation.zurb.com/docs/components/joyride.html">التوثيق الرسمي</a></p><h2>الأيقونات الاجتماعيّة وخطوط الأيقونات</h2><h3>الأيقونات الاجتماعيّة</h3><p>يُوفر Foundation حزمة من الأيقونات الاجتماعيّة يصل عددها إلى 76 أيقونة، وهي بصيغة SVG والّتي تجعل من عرضها على شاشات Retina مثاليًا.</p><p><a class="ipsAttachLink ipsAttachLink_image" rel="external nofollow" href="https://academy.hsoub.com/uploads/monthly_2015_03/social-web-icons.png.0db61574f3f2a4efbef82150cb36d73a.png"><img data-fileid="547" class="ipsImage ipsImage_thumbnailed" alt="social-web-icons.thumb.png.282d97eefa024" src="https://academy.hsoub.com/uploads/monthly_2015_03/social-web-icons.thumb.png.282d97eefa0243e86a8cc7bbbb74d753.png"></a></p><p>بإمكانك تحميل الحزمة من <a rel="external nofollow" href="http://zurb.com/playground/social-webicons">هنا</a> لتحصل على ملف مضغوط، يحتوي على الأيقونات بصيغتين، SVG للمتصفحات الّتي تدعم هذه اللاحقة، وPNG للمتصفحات الّتي لا تدعم SVG. قم بفك الضغط عن الملفات وضعها في ملف CSS الخاص بالمشروع، ومن ثُمّ قم باستدعاء ملف CSS الخاصّ بالحزمة في الوسم <code>&lt;head&gt;</code> بإضافة السطر التّالي:</p><pre class="html ipsCode prettyprint">    &lt;link rel="stylesheet" href="css/webicons.css" /&gt; </pre><p>في متجرنا سوف نقوم بإضافة ثلاث أيقونات في ذيل الصفحة footer، وذلك باستخدام الصنف webicon ومن ثم اسم الأيقونة لتظهر بالحجم المتوسط، ولتخصيص الحجم يُمكننا استخدام الصنفين small و large.</p><pre class="html ipsCode prettyprint">  &lt;div class="row"&gt;
      &lt;footer class="text-center"&gt;
        &lt;a href="#" class="webicon facebook large"&gt;&lt;/a&gt;
        &lt;a href="#" class="webicon flickr large"&gt;&lt;/a&gt;
        &lt;a href="#" class="webicon twitter large"&gt;&lt;/a&gt;
      &lt;/footer&gt;
    &lt;/div&gt;</pre><h3><a class="ipsAttachLink ipsAttachLink_image" rel="external nofollow" href="https://academy.hsoub.com/uploads/monthly_2015_03/social-web-icons-footer.png.321166d1ca559ec3eafdf62c4abecbd3.png"><img data-fileid="548" class="ipsImage ipsImage_thumbnailed" alt="social-web-icons-footer.thumb.png.ab05ef" src="https://academy.hsoub.com/uploads/monthly_2015_03/social-web-icons-footer.thumb.png.ab05ef8c271e131566cc431be6e489ea.png"></a></h3><h3>خطوط الأيقونات</h3><p>يُوفر Foundation حزمة من خطوط الأيقونات وعددها 283، ويُمكنك الحصول عليها من <a rel="external nofollow" href="http://zurb.com/playground/foundation-icon-fonts-3">هنا</a>، وبعد التحميل وفك الضغط، قُم باستدعاء ملف CSS الخاص بالأيقونات في الوسم <code>&lt;head&gt;</code> بإضافة السطر التّالي:</p><pre class="html ipsCode prettyprint">&lt;link rel="stylesheet" href="css/foundation-icons.css" /&gt;
</pre><p>في متجرنا سوف نضيف "سلة التسوق" shopping-cart في الشريط العلوي، وذلك باستخدام اسم الأيقونة مسبوقًا بـِ fi كصنف للوسم &lt;i&gt;</p><pre class="html ipsCode prettyprint">&lt;li class="right"&gt;&lt;a href="#"&gt;&lt;i class="fi-shopping-cart"&gt;&lt;/i&gt;&lt;/a&gt;&lt;/li&gt;
</pre><p href="https://academy.hsoub.com/uploads/monthly_2015_03/icon.png.617796f5f556ed6755930aa1ea9a9a49.png"><img data-fileid="452" class="ipsImage ipsImage_thumbnailed" alt="icon.png.617796f5f556ed6755930aa1ea9a9a4" src="https://academy.hsoub.com/uploads/monthly_2015_03/icon.thumb.png.7009d5c6dd5ff3597f1ed6c39f96ea1c.png"></p><p>أيضًا في الصفحة الرئيسة بإمكاننا استخدام الأيقونات التّالية:</p><pre class="html ipsCode prettyprint">&lt;i class="fi-camera"&gt;&lt;/i&gt;
...
&lt;i class="fi-upload"&gt;&lt;/i&gt;
...
&lt;i class="fi-dollar"&gt;&lt;/i&gt;</pre><p><a class="ipsAttachLink ipsAttachLink_image" rel="external nofollow" href="https://academy.hsoub.com/uploads/monthly_2015_03/three-icon.png.713a51f150e9f14a84b37606dacff00e.png"><img data-fileid="549" class="ipsImage ipsImage_thumbnailed" alt="three-icon.thumb.png.005296f5ce885c5ce4e" src="https://academy.hsoub.com/uploads/monthly_2015_03/three-icon.thumb.png.005296f5ce885c5ce4ea3fd4dd6130c4.png"></a></p><h2>أُقصوصات</h2><p>يُوفر Foundation أقصوصات (snippets) للمحرر Sublime Text وهي مساعدة جدًا في عملية التطوير وتزيد من إنتاجيّة المُطوّر، وبإمكانك تحميلها عن طريق مُدير الحزم الخاص بالمُحرر، ولكن لا أنصح بتحميلها في بداية تعاملك مع الإطار وإنمّا عليك في البداية التعامل مع الإطار بشكل مباشر لتحفظ الصياغة الخاصة به.</p><p>إنّ كنت لا تملك مُدير الحزم فيُمكنك تحميله من <a rel="external nofollow" href="https://packagecontrol.io/installation">هنا</a> بعد التحميل كل ما عليك فعله هو كتابة اسم الأقصوصات.</p><p><a class="ipsAttachLink ipsAttachLink_image" rel="external nofollow" href="https://academy.hsoub.com/uploads/monthly_2015_03/snippets-install-sublime.png.618d60cc9dac1394b69b85fe429af208.png"><img data-fileid="507" class="ipsImage ipsImage_thumbnailed" alt="snippets-install-sublime.thumb.png.ecd07" src="https://academy.hsoub.com/uploads/monthly_2015_03/snippets-install-sublime.thumb.png.ecd078079f6e6a1a116378b1144b7a9d.png"></a></p><p>أو بإمكانك تحميل الأقصوصات بشكل مُباشر من المستودع الخاص بها على موقع GitHub، وبعد تحميلها يمكن وضعها في المُجلد الخاص بالإضافات. في نظام التشغيل Windows يُمكن تنفيذ السطر التّالي في موجه الأوامر لتحصل عليها مباشرةً.</p><pre class="html ipsCode prettyprint">    cd "%AppData%\Sublime Text 3\Packages\User"
    git clone https://github.com/zurb/foundation-5-sublime-snippets.git
</pre><pre><span style="font-family:'Helvetica Neue', Helvetica, Arial, sans-serif;line-height:1.6;">لاحظ عند كتابة </span><code style="line-height:1.6;">zf-topbar</code><span style="font-family:'Helvetica Neue', Helvetica, Arial, sans-serif;line-height:1.6;"> في المُحرر ثم الضغط على </span><code style="line-height:1.6;">Tab</code><span style="font-family:'Helvetica Neue', Helvetica, Arial, sans-serif;line-height:1.6;"> سينتج النّصّ البرمجيّ التّالي، وهي عبارة عن الشريط العلوي (topbar).</span>
</pre><p><a class="ipsAttachLink ipsAttachLink_image" rel="external nofollow" href="https://academy.hsoub.com/uploads/monthly_2015_03/zf-topbar.png.b5ebeeefe47c9b4895a8bf2ba4618c23.png"><img data-fileid="508" class="ipsImage ipsImage_thumbnailed" alt="zf-topbar.thumb.png.dc1911080a5e3c3a1a01" src="https://academy.hsoub.com/uploads/monthly_2015_03/zf-topbar.thumb.png.dc1911080a5e3c3a1a01e99405b7b22d.png"></a></p><p>وعند كتابة <code>zf-pagination</code> في المُحرر ثم الضغط على <code>Tab</code> سينتج النّصّ البرمجيّ الخاصّ بـ"ترقيم الصفحات" (pagination).</p><p><a class="ipsAttachLink ipsAttachLink_image" rel="external nofollow" href="https://academy.hsoub.com/uploads/monthly_2015_03/zf-pagination.png.c466237fcec9df66d791573edae65d43.png"><img data-fileid="509" class="ipsImage ipsImage_thumbnailed" alt="zf-pagination.thumb.png.10da8e82f9acea6d" src="https://academy.hsoub.com/uploads/monthly_2015_03/zf-pagination.thumb.png.10da8e82f9acea6d10664c926168f7d1.png"></a></p><p>تُقدم لك الأقصوصات أيضًا تعليق للإشارة إلى الأصناف المتوفرة لبعض العناصر، فعند كتابة <code>zf-button</code> والضغط على <code>Tab</code> النّص التّالي سيوضح لك إلى الأصناف المتوفرة والّتي يُمكنك استخدامها مع الصنف <code>button</code>.</p><p><a class="ipsAttachLink ipsAttachLink_image" rel="external nofollow" href="https://academy.hsoub.com/uploads/monthly_2015_03/zf-button.png.b486a15412e188046730c6039b054c2a.png"><img data-fileid="511" class="ipsImage ipsImage_thumbnailed" alt="zf-button.thumb.png.26c714f951182e02f466" src="https://academy.hsoub.com/uploads/monthly_2015_03/zf-button.thumb.png.26c714f951182e02f46658aa4d4c45b3.png"></a></p><p>كما تلاحظ أنّ هذه الأقصوصات تُوفر عليك الكثيرَ من الكتابة والوقت، لذلك أنصحك بالإطلاع عليها وتجربتها.</p><h2>ما الذي عليك فعله بعد انتهاء السلسلة؟</h2><p>بعد قراءتك لهذه السلسلة بشكلٍ كامل ستكون جاهزًا لبناء موقعك الأول باستخدام Foundation، وليكن التوثيق الرسميّ هو مرجعك الدائم فهو مُنظّم ومُنسّق بشكل أكثر من رائع ومع الأمثلة العمليّة وبلغة إنكليزية مُبسّطة تُسهل عليك التعامل مع الإطار حتّى لو كانت لغتك الإنكليزية ضعيفة، وأهم شيء هو التطبيق العمليّ واختبار ما تمّ التّطرقُ له في هذه السلسلة، وأرجو أن تكون هذه السلسلة قد نالت إعجابك وإلى اللقاء مع مواضيع أُخرى.</p>
]]></description><guid isPermaLink="false">34</guid><pubDate>Tue, 03 Mar 2015 19:09:00 +0000</pubDate></item><item><title>&#x623;&#x633;&#x627;&#x633;&#x64A;&#x627;&#x62A; &#x625;&#x637;&#x627;&#x631; &#x639;&#x645;&#x644; Foundation: &#x627;&#x644;&#x623;&#x632;&#x631;&#x627;&#x631; &#x648;&#x627;&#x644;&#x646;&#x651;&#x645;&#x627;&#x630;&#x62C;</title><link>https://academy.hsoub.com/programming/css/%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A7%D8%AA-%D8%A5%D8%B7%D8%A7%D8%B1-%D8%B9%D9%85%D9%84-foundation-%D8%A7%D9%84%D8%A3%D8%B2%D8%B1%D8%A7%D8%B1-%D9%88%D8%A7%D9%84%D9%86%D9%91%D9%85%D8%A7%D8%B0%D8%AC-r30/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2015_03/foundation_480x300.jpg.320160cc0b996284f096d84d65e31fe6.jpg" /></p>

<p>قد وصلت إلى الجزء الرابع، وهذا يعني أنّ السلسلة قد راقت لك -أرجو الله ذلك- في الجزء السابق تعرفنا على نظام التنقل الخاص بالإطار، وفي هذا الجزء سوف نتعرف على الأزرار وأنواعها، والنماذج وملحقاتها، وكيف سوف نستفيد منها في متجرنا.</p><h2>الأزرار (Buttons)</h2><p><a class="ipsAttachLink ipsAttachLink_image" rel="external nofollow" href="https://academy.hsoub.com/uploads/monthly_2015_03/buttons.png.884c669221fb8ff0c99c03e2130d7694.png"><img class="ipsImage ipsImage_thumbnailed" data-fileid="188" alt="buttons.thumb.png.18fced31613eb83b276195" src="https://academy.hsoub.com/uploads/monthly_2015_03/buttons.thumb.png.18fced31613eb83b27619543670abcab.png"></a></p><p>يَملك Foundation مجموعة من الأزرار الجذابة، لإنشاء زر كل ما عليك فعله هو إضافة الصنف <code>button</code> إلى الوسم <code>&lt;a&gt;</code> أو المُدخل <code>&lt;input&gt;</code> من نوع <code>submit</code> لتحصل على الزر الافتراضي وبالحجم المُتوسط مع اللون الأساسي للإطار ومع تأثير المرور (hover)، ولتخصيص حجم الزر لديك أصناف عدّة:"صغير جدًا" <code>tiny</code>، و"صغير" <code>small</code>، و"كبير" <code>large</code>، و"مُوسّع" <code>expanded</code>. الزر بشكله الافتراضي حاد الحواف، ولتغيير ذلك بإمكانك استخدام أحد الصنفين <code>round</code> أو <code>radius</code>، أمّا لتغيير الألوان فيُقدم Foundation خمسة أصناف باستثناء اللون الأساسي، ويُشير إلى هذه الألوان على أساس دلالتها اللونية، فاللون الأحمر ستجده باسم الصنف <code>alert</code> واللون الأخضر ستجده بالصنف <code>success</code>.</p><h3>أزرار ضمن مجموعة (Button Groups)</h3><p>كما يُمَكنك Foundation من إنشاء مجموعة أزرار مُترابطة مع بعضها البعض، وذلك باستخدام "قائمة غير مرتبة" <code>&lt;ul&gt;</code> مع الصنف <code>button-group</code>، ولتنسيق هذا النوع من الأزرار سوف نستخدم الأصناف <code>round</code> و<code>radius</code> لتظهر على أول وآخر زر من المجموعة، أمّا الصنف "مُتساوي" <code>even</code> فهو يُوزع مجموعة الأزرار على عرض المساحة الممنوحة لهذه الأزرار. كما يُقدم Foundation الصنف "اصطفاف" <code>stack</code> والذي يجعل من الأزرار مصفوفةً فوق بعضها البعض، والصنف <code>stack-for-small</code> الذي يَجعل من الأزرار متوافقةً مع الشاشات الصغيرة.</p><pre class="html ipsCode prettyprint">    &lt;!-- أبسط شكل من أشكال أزرار ضمن مجموعة وبدون أي تنسيق --&gt;
    &lt;ul class="button-group"&gt;
      &lt;li&gt;&lt;a href="#" class="button"&gt;Button 1&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href="#" class="button"&gt;Button 2&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href="#" class="button"&gt;Button 3&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;


    &lt;ul class="button-group even-3"&gt; &lt;!-- أزرار ضمن مجموعة مع تقسيم المساحة الكلية على ثلاثة أزرار --&gt;
      &lt;li&gt;&lt;a href="#" class="button secondary"&gt;Button 1&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href="#" class="button secondary"&gt;Button 2&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href="#" class="button secondary"&gt;Button 3&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
    &lt;ul class="button-group round even-6"&gt; &lt;!-- أزرار ضمن مجموعة مع تقسيم المساحة الكلية على الأزرار الستّة وتنسيق بحواف دائرية --&gt;
      &lt;li&gt;&lt;a href="#" class="button"&gt;Button 1&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href="#" class="button"&gt;Button 2&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href="#" class="button"&gt;Button 3&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href="#" class="button"&gt;Button 4&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href="#" class="button"&gt;Button 5&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href="#" class="button"&gt;Button 6&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;</pre><p href="https://academy.hsoub.com/uploads/monthly_2015_03/default-btn-group.png.d72e694ea706534e720bf9a4d33e9f58.png"><img data-fileid="187" class="ipsImage ipsImage_thumbnailed" alt="default-btn-group.png.d72e694ea706534e72" src="https://academy.hsoub.com/uploads/monthly_2015_03/default-btn-group.thumb.png.95191882f8163a3d99479597167b2025.png"></p><p href="https://academy.hsoub.com/uploads/monthly_2015_03/btn-group.png.c2686eeb77a0c9bcc23d4ede816ecbff.png"><img data-fileid="185" class="ipsImage ipsImage_thumbnailed" alt="btn-group.png.c2686eeb77a0c9bcc23d4ede81" src="https://academy.hsoub.com/uploads/monthly_2015_03/btn-group.thumb.png.92a2f81107706883d854590a12c84ea3.png"></p><p><em>مثال حي</em> <a rel="external nofollow" href="http://codepen.io/anon/pen/zxZrVa">http://codepen.io/anon/pen/zxZrVa</a></p><h3>أزرار مع قائمة منسدلة (Dropdown Buttons)</h3><p><a class="ipsAttachLink ipsAttachLink_image" rel="external nofollow" href="https://academy.hsoub.com/uploads/monthly_2015_03/drop-btn.png.d1b9ebf450db34993483cd82ea19c80f.png"><img class="ipsImage ipsImage_thumbnailed" data-fileid="184" alt="drop-btn.thumb.png.fe3878ca0a30e31556f9e" src="https://academy.hsoub.com/uploads/monthly_2015_03/drop-btn.thumb.png.fe3878ca0a30e31556f9e62e0fe81599.png"></a></p><p>في الإصدارات الأخيرة من إطار العمل Foundation تم تبسيط التعامل مع هذا النوع من الأزرار، كل ما تحتاج إليه العنصران <code>&lt;button&gt;</code> و<code>&lt;ul&gt;</code>، الزر سوف يأخذ الصنفين <code>button</code> و<code>dropdown</code> وخاصية المعلومات <code>data-dropdown</code> والتي تحمل قيمة بأيّ اسم معبّر لكي نعرّف به القائمة غير المرتبة، أمّا القائمة غير مرتبة ذاتها فتأخذ المعرّف المُسبق عبر قيمة الخاصية <code>id</code>، وبالإضافة إلى "خاصية المعلومات" <code>data-dropdown-content</code> والصنف <code>f-dropdown</code>، بهذا نحصل على زر مع قائمة مُنسدلة بأبسط شكلٍ ممكن.</p><pre class="html ipsCode prettyprint">    &lt;!-- زر مع قائمة مُنسدلة وبحواف دائرية ولون أحمر وكبير الحجم --&gt;
    &lt;button data-dropdown="drop" class="large alert round button dropdown"&gt;Dropdown Button&lt;/button&gt;&lt;br&gt;
    &lt;ul id="drop" data-dropdown-content class="f-dropdown"&gt; &lt;!-- القائمة المُنسدلة مع عناصرها --&gt;
      &lt;li&gt;&lt;a href="#"&gt;This is a link&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href="#"&gt;This is another&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href="#"&gt;Yet another&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;</pre><p><a class="ipsAttachLink ipsAttachLink_image" rel="external nofollow" href="https://academy.hsoub.com/uploads/monthly_2015_03/drop-btn-red.png.928a4949bea18e22a185be7bfc6fb6b8.png"><img class="ipsImage ipsImage_thumbnailed" data-fileid="186" alt="drop-btn-red.thumb.png.ad5ddf892543ca6c4" src="https://academy.hsoub.com/uploads/monthly_2015_03/drop-btn-red.thumb.png.ad5ddf892543ca6c465cc337472ebcb6.png"></a></p><p><em>مثال حي</em> <a rel="external nofollow" href="http://codepen.io/anon/pen/GgWZRJ">http://codepen.io/anon/pen/GgWZRJ</a></p><h3>الأزرار المُنقسمة (Split Buttons)</h3><p><a class="ipsAttachLink ipsAttachLink_image" rel="external nofollow" href="https://academy.hsoub.com/uploads/monthly_2015_03/split-btn.png.d2ad258cf9c9491724d95c329c5324ec.png"><img data-fileid="530" class="ipsImage ipsImage_thumbnailed" alt="split-btn.thumb.png.fe33de6be927ad34cee9" src="https://academy.hsoub.com/uploads/monthly_2015_03/split-btn.thumb.png.fe33de6be927ad34cee98d45ad04f766.png"></a></p><p>يُنشئ "زر منقسم" عن طريق الربط بين الوسوم الثلاثة<code>&lt;a&gt;</code>و <code>&lt;span&gt;</code> و <code>&lt;ul&gt;</code>، الوسم <code>&lt;a&gt;</code> سوف يأخذ الصنفين <code>button</code> و<code>split</code>، أمّا الصنف <code>&lt;span&gt;</code> سوف يأخذ "خاصية المعلومات" <code>data-dropdown</code> مع قيمة مناسبة لتعريف "القائمة غير المرتبة" <code>&lt;ul&gt;</code>، أمّا القائمة <code>&lt;ul&gt;</code> سوف نُضيف لها الخاصية <code>id</code> مع القيمة المُعرفة في خاصية المعلومات <code>data-dropdown</code> في الصنف <code>&lt;span&gt;</code>، وبالإضافة إلى الصنف <code>f-dropdown</code> و"خاصية المعلومات" <code>data-dropdown-content</code>.</p><p>لنستخدم بعض هذه الأزرار في متجرنا، في الصفحة الرئيسة لدينا الصور الأكثر مبيعًا سوف نحول زر الشراء العادي إلى زر مُنقسم (split button)، وذلك عبر إضافة الصنفين <code>button</code> و<code>split</code> ولنجعله صغير الحجم عبر الصنف <code>tiny</code>، وللقائمة المُنسدلة سوف نقوم بإنشاء "قائمة غير مُرتبة" للخيارات الإضافية، كما في الشيفرة التالية:</p><pre class="html ipsCode prettyprint">    &lt;!-- زر مُنقسم صغير جدًا مع قائمة مُنسدلة --&gt;
    &lt;a href="#" class="button split tiny"&gt;Buy&lt;span data-dropdown="drop"&gt;&lt;/span&gt;&lt;/a&gt;
    &lt;ul id="drop" class="f-dropdown" data-dropdown-content&gt; &lt;!-- القائمة المُنسدلة وعناصرها --&gt;
      &lt;li&gt;&lt;a href="#"&gt;Add to favorites&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href="#"&gt;Add to cart&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;</pre><p><a class="ipsAttachLink ipsAttachLink_image" rel="external nofollow" href="https://academy.hsoub.com/uploads/monthly_2015_03/split-btn-ex.png.6b993b16ffe47b6bf3474ff8d096ac74.png"><img data-fileid="531" class="ipsImage ipsImage_thumbnailed" alt="split-btn-ex.thumb.png.19b52f4103787d19b" src="https://academy.hsoub.com/uploads/monthly_2015_03/split-btn-ex.thumb.png.19b52f4103787d19b95469379bdfa9d2.png"></a></p><p>في صفحة المُنتج سوف نجعل زر "أضف إلى السلة" مصقول الحواف بالصنف <code>radius</code>، مع لون خفيف بالصنف Info.</p><pre class="html ipsCode prettyprint">    &lt;a href="#" class="button info radius"&gt;Add to Cart&lt;/a&gt;</pre><p><a class="ipsAttachLink ipsAttachLink_image" rel="external nofollow" href="https://academy.hsoub.com/uploads/monthly_2015_03/btn-exm.png.c6374ac6cdc7194410bed45ed7f6f907.png"><img class="ipsImage ipsImage_thumbnailed" data-fileid="183" alt="btn-exm.thumb.png.f7bc676535a35fc2e43f1a" src="https://academy.hsoub.com/uploads/monthly_2015_03/btn-exm.thumb.png.f7bc676535a35fc2e43f1a8b65bc2d3e.png"></a></p><p>في صفحة التسجيل سوف نقوم بالتعديل على المُدخل input من نوع "إرسال" submit وتنسيقه على أنّه غير مفعل بالصنف disabled وبحواف دائرية بالصنف round.</p><pre class="html ipsCode prettyprint">    &lt;input type="submit" value="Submit" class="button round disabled"&gt;</pre><h2><a class="ipsAttachLink ipsAttachLink_image" rel="external nofollow" href="https://academy.hsoub.com/uploads/monthly_2015_03/submit-btn.png.6aa9e598e9e7f88fc3c498bbfaccd6cb.png"><img data-fileid="532" class="ipsImage ipsImage_thumbnailed" alt="submit-btn.thumb.png.0cfeb18ef022f89c418" src="https://academy.hsoub.com/uploads/monthly_2015_03/submit-btn.thumb.png.0cfeb18ef022f89c41860687a318ddde.png"></a></h2><h2>الجداول والنماذج (Tables and Forms)</h2><h3>الجداول (Tables)</h3><p>يتفوّق Foundation على Bootstrap بتوفير "جداول الأسعار" (pricing tables)، ومع الاتجاه الكبير نحو تطبيقات الويب، وظهور العديد من الشركات الناشئة، تزايد الطلب على هذا النوع من الجداول. Foundation كما في كل الميزات التي يُقدمها، جعل من إنشاء "جدول أسعار" أمرًا يسيرًا، فالإنشاء "جدول أسعار" كل ما عليك فعله هو إضافة الصنف <code>pricing-table</code> إلى "قائمة غير مرتبة" (<code>&lt;ul&gt;</code>)، أمّا "عناصر القائمة" <code>&lt;li&gt;</code> فلديها الأصناف "عنوان" <code>title</code>، "سعر" <code>price</code>، "وصف" <code>description</code>، "عنصر دائري" <code>bullet-item</code>، وأخيرًا "الزر" <code>cta-button</code>.</p><p>في صفحة الأسعار الخاصة بالمتجر سوف نحدد ثلاثة خطط للاشتراك وهي "أساسية" و "قياسية" و "مُحترف"، الشيفرة التالية هي للخطة "مُحترف" والتي تُوضح العناصر مع الأصناف المناسبة لكل عنصر.</p><pre class="html ipsCode prettyprint">    &lt;ul class="pricing-table"&gt;
      &lt;li class="title"&gt;Pro&lt;/li&gt;
      &lt;li class="price"&gt;$99.99&lt;/li&gt;
      &lt;li class="description"&gt;We do every thing for you, just upload your photos&lt;/li&gt;
      &lt;li class="bullet-item"&gt;Unlimited photos per week&lt;/li&gt;
      &lt;li class="bullet-item"&gt;24/7 Support&lt;/li&gt;
      &lt;li class="bullet-item"&gt;We change bad comments and rating to good ones&lt;/li&gt;
      &lt;li class="cta-button"&gt;&lt;a class="button" href="#"&gt;Enroll Now&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;</pre><h2><a class="ipsAttachLink ipsAttachLink_image" rel="external nofollow" href="https://academy.hsoub.com/uploads/monthly_2015_03/pricing-table.png.83ed1bb17145c469aab10aa18d7dd3a4.png"><img data-fileid="533" class="ipsImage ipsImage_thumbnailed" alt="pricing-table.thumb.png.98ba09c7db978718" src="https://academy.hsoub.com/uploads/monthly_2015_03/pricing-table.thumb.png.98ba09c7db978718e6d782e2e9fb69e7.png"></a></h2><h2>النماذج (Forms)</h2><p>يَعتير البعض التعامل مع النماذج (forms) من الأمور المعقدة نوعًا ما في HTML، لما لها من تفاصيل، لم يشأ Foundation أن يزيد من هذا التعقيد، وحاول قدر الإمكان التسهيل من مُهمة المطوّر في التعامل معها وجعلها مرنةً في التخصيص، بُنيت النماذج في Foundation من دمج عناصر النماذج الأساسية في HTML مع النظام الشبكي، ويتحدد تَنسيق عناصر النموذج عن طريق الخاصية <code>type</code> بدلاً من استخدام الأصناف، ويُمكن جعل النماذج مُتجاوبة باستخدام النظام الشبكي في Foundation وذلك بتعريف الصنف <code>row</code> داخل الوسم <code>&lt;form&gt;</code> واستخدام الأصناف الثلاثة الخاصة بالنظام الشبكي <code>small</code>و<code>medium</code> و<code>large</code>، لتحصل على نماذج متجاوبة وبأقل قدر مُمكن من الكتابة.</p><h3>ملحقات النماذج (Pre/Postfix Labels &amp; Actions)</h3><p>يُقدم Foundation النماذج بشكل مرنٍ للغاية حيثُ بإمكانك ربط المُدخل (input) مع زر أو مع لاحقة أو بادئة نصية (pre/postfix label)، والتي تُقدم طريقة سريعة للمُستخدم لإدخال المدخلات الخاصة بالنماذج، وأيضًا تعطيه تلميحًا عن ما هو مطلوب منه في تعبئة النماذج. يُقدم Foundation طريقة سريعة للتحكم بحجم هذه الملحقات، وذلك باستخدام النظام الشبكي، ولربط مُدخل مع زر نستخدم الوسم <code>&lt;input&gt;</code> من النوع نص (<code>text</code>) مع الوسم <code>&lt;a&gt;</code> بالإضافة إلى الصنفين <code>button</code> و<code>postfix</code>، ونَستخدم الوسم <code>&lt;span&gt;</code> مع الصنف <code>prefix</code> لإنشاء "بادئة نصية" <code>prefix label</code>، والصنف <code>postfix</code> لإنشاء "لاحقة نصية" <code>postfix label</code>. أما للتنسيق فعليك استخدامُ الصنف <code>collapse</code> لإزالة الحشو (padding) بين المُدخل من جهة والبادئة أو اللاحقة والزر من جهة أخرى.</p><pre class="html ipsCode prettyprint">    &lt;form&gt;
      &lt;div class="row"&gt; &lt;!-- الصفّ الأول ويحتوي على مُدخلين --&gt;
        &lt;div class="large-6 columns"&gt;
          &lt;input type="text" placeholder="First name" /&gt;
        &lt;/div&gt;
        &lt;div class="large-6 columns"&gt;
          &lt;input type="text" placeholder="last name" /&gt;
        &lt;/div&gt;
      &lt;/div&gt;
      &lt;div class="row"&gt; &lt;!-- الصفّ الثاني ويحتوي على مُدخل واحد --&gt;
        &lt;div class="large-12 columns"&gt;
         &lt;input type="text" placeholder="Email" /&gt;
        &lt;/div&gt;
      &lt;/div&gt;
      &lt;div class="row"&gt; &lt;!-- الصفّ الثالث ويحتوي على مُدخل واحد --&gt;
        &lt;div class="large-12 columns"&gt;
         &lt;input type="text" placeholder="Re-enter email" /&gt;
        &lt;/div&gt;
      &lt;/div&gt;
      &lt;div class="row"&gt; &lt;!-- الصفّ الرابع --&gt;
        &lt;div class="large-12 columns"&gt;
         &lt;input type="text" placeholder="Password" /&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div class="row"&gt; &lt;!-- الصفّ الخامس --&gt;
        &lt;div class="large-6 columns"&gt;
          &lt;input type="radio" name="radioname" value="Male" id="thisidformale"&gt;&lt;label for="thisidformale"&gt;Male&lt;/label&gt;
          &lt;input type="radio" name="radioname" value="Female" id="thisidforfemale"&gt;&lt;label for="thisidforfemale"&gt;Female&lt;/label&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div class="row collapse"&gt; &lt;!-- لإزالة الحشو بين البادئة والمُدخل --&gt;
        &lt;div class="small-2 columns"&gt; &lt;!-- البادئة بعمودين --&gt;
          &lt;span class="prefix"&gt;http://&lt;/span&gt; &lt;!-- تعريف البادئة --&gt;
        &lt;/div&gt;
        &lt;div class="small-10 columns"&gt; &lt;!-- المُدخل --&gt;
          &lt;input type="text" placeholder="Enter your URL..."&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div class="row"&gt;
        &lt;div class="large-12 columns"&gt;
          &lt;label&gt;What is your favorite brand?
            &lt;select&gt;
              &lt;option value="Canon"&gt;Canon&lt;/option&gt;
              &lt;option value="Nikon"&gt;Nikon&lt;/option&gt;
              &lt;option value="Panasonic"&gt;Panasonic&lt;/option&gt;
              &lt;option value="Sony"&gt;Sony&lt;/option&gt;
            &lt;/select&gt;
          &lt;/label&gt;
        &lt;/div&gt;
      &lt;/div&gt;
      &lt;div class="row"&gt; &lt;!-- الصفّ الأخير --&gt;
        &lt;div class="large-12 columns"&gt;
          &lt;div class="row"&gt;
            &lt;div class="large-6 columns"&gt;
              &lt;div class="row collapse prefix-radius"&gt; &lt;!-- بادئة بحواف مصقولة --&gt;
                &lt;div class="small-3 columns"&gt;
                  &lt;span class="prefix"&gt;@&lt;/span&gt; &lt;!-- البادئة للإشارة إلى ادخال اسم العضوية فقط --&gt;
                &lt;/div&gt;
                &lt;div class="small-9 columns"&gt;
                  &lt;input type="text" placeholder="Twitter Account"&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;
            &lt;div class="large-6 columns"&gt;
              &lt;div class="row collapse prefix-radius"&gt; &lt;!-- بادئة بحواف مصقولة --&gt;
                &lt;div class="small-3 columns"&gt;
                  &lt;span class="prefix"&gt;photos/&lt;/span&gt; &lt;!-- البادئة للإشارة إلى ادخال اسم العضوية فقط --&gt;
                &lt;/div&gt;
                &lt;div class="small-9 columns"&gt;
                  &lt;input type="text" placeholder="Flickr account"&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;
          &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/form&gt;</pre><p><a class="ipsAttachLink ipsAttachLink_image" rel="external nofollow" href="https://academy.hsoub.com/uploads/monthly_2015_03/forms.png.76af3af0422570cf4f29da575eec0d90.png"><img class="ipsImage ipsImage_thumbnailed" data-fileid="189" alt="forms.thumb.png.1a54d75f8aa3588e38f8a893" src="https://academy.hsoub.com/uploads/monthly_2015_03/forms.thumb.png.1a54d75f8aa3588e38f8a89326f74a49.png"></a></p><p><em>مثال حي</em> <a rel="external nofollow" href="http://codepen.io/anon/pen/ZYeOzZ">http://codepen.io/anon/pen/ZYeOzZ</a></p><p>في صفحة المعرض الخاصة بالمتجر سوف نُوفر إمكانية البحث عن الصور باستخدام المُدخل <code>&lt;input&gt;</code> مع زرٍ مُلحق، سوف نُزيل الحشو (padding) بين المُدخل والزر باستخدام الصنف <code>collapse</code>، ولتنسيق الزر سوف نستخدم الصنف <code>expand</code>، والصنف <code>postfix</code> والذي سيجعل من الزر مُتناسقًا مع المُدخل.</p><pre class="html ipsCode prettyprint">    &lt;div class="large-12 columns"&gt;
      &lt;div class="radius panel"&gt;
      &lt;form&gt;
        &lt;div class="row collapse"&gt;
          &lt;div class="large-10 small-8 columns"&gt;
            &lt;input type="text"/&gt;
          &lt;/div&gt;
          &lt;div class="large-2 small-4 columns"&gt;
            &lt;a href="#" class="postfix button expand"&gt;Search&lt;/a&gt;
          &lt;/div&gt;
        &lt;/div&gt;
      &lt;/form&gt;
    &lt;/div&gt;
    &lt;/div&gt;</pre><p><a class="ipsAttachLink ipsAttachLink_image" rel="external nofollow" href="https://academy.hsoub.com/uploads/monthly_2015_03/search-gallery.png.23c33d7e8de46263909ecad8e06d816b.png"><img data-fileid="534" class="ipsImage ipsImage_thumbnailed" alt="search-gallery.thumb.png.33b627b3ff9bd0f" src="https://academy.hsoub.com/uploads/monthly_2015_03/search-gallery.thumb.png.33b627b3ff9bd0feb21a7e6afce3489e.png"></a></p><p>تعرفنا في هذا الجزء على النماذج والأزرار وتطبيقاتها في متجرنا، وفي الجزء الخامس سوف نتحدث عن أمور عدّة منها "المدار" (orbit) وعارض الصور (lightbox) وغيره من المواضيع المُهمة جدًا في الإطار.</p>
]]></description><guid isPermaLink="false">30</guid><pubDate>Tue, 03 Mar 2015 19:08:00 +0000</pubDate></item><item><title>&#x623;&#x633;&#x627;&#x633;&#x64A;&#x627;&#x62A; &#x625;&#x637;&#x627;&#x631; &#x639;&#x645;&#x644; Foundation: &#x627;&#x644;&#x62A;&#x639;&#x627;&#x645;&#x644; &#x645;&#x639; &#x627;&#x644;&#x635;&#x648;&#x631; &#x648;&#x627;&#x644;&#x641;&#x64A;&#x62F;&#x64A;&#x648;</title><link>https://academy.hsoub.com/programming/css/%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A7%D8%AA-%D8%A5%D8%B7%D8%A7%D8%B1-%D8%B9%D9%85%D9%84-foundation-%D8%A7%D9%84%D8%AA%D8%B9%D8%A7%D9%85%D9%84-%D9%85%D8%B9-%D8%A7%D9%84%D8%B5%D9%88%D8%B1-%D9%88%D8%A7%D9%84%D9%81%D9%8A%D8%AF%D9%8A%D9%88-r33/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2015_03/foundation_480x300.jpg.cbd53cb8d992c7fc2a704ebca3b4c1bd.jpg" /></p>

<p>الجزء الخامس والسادس هما أفضل أجزاء السلسلة بالنسبة لي، وفيهما سوف نتعرّف على مواضيع حساسة جدًا في استخدامنا لإطار العمل Foundation، وسنتعرف على آليّة التعامل مع الصور والفيديو وسوف نتحدّث عن أساليب عرض النصوص والعناوين التي يُقدمها Foundation وغيره من المواضيع.</p><h2>الصور والفيديو (Images and Videos)</h2><h3>المدار (Orbit)</h3><p>"المدار" وهو ما يقابل "carousel" في إطار العمل Bootstrap، قدم Foundation "المدار" بشكل مُبسطٍ وسريع الإعداد كل ما عليك فعله هو إضافة خاصية المعلومات data-orbit "للقائمة الغير مرتبة" (&lt;ul&gt;) وستتكفّل JavaScript بما بقي لإنشاء "المدار"، ومُحتوى "المدار" يُمكن أنّ يكون نصّيًا أو صورًا والتي يُمكن أن يُضاف لها "شرح صورة" (caption)، ويدعم "المدار" ميزة المسح بالإصبع (swiping) في الأجهزة التي تُوفر شاشات لمسية، وخاصية الربط العميق (deep linking)، والتي تُتيح لك إنشاء رابط لأحد عناصر "المدار".</p><p>في صفحة المعرض قمنا باختيار ثلاث صور لعرضها باستخدام "المدار"، لاحظ أنّ الشيفرة بسيطة جدًا ولا تحتاج إلى الكثير من الإعداد.</p><pre style="color:rgb(0,0,0);line-height:normal;" class="html ipsCode prettyprint">    &lt;div class="row"&gt;
        &lt;ul data-orbit&gt;
          &lt;li&gt;
            &lt;img src="img/1.jpg"&gt;
          &lt;/li&gt;
          &lt;li&gt;
            &lt;img src="img/2.jpg"&gt;
          &lt;/li&gt;
          &lt;li&gt;
            &lt;img src="img/3.jpg"&gt;
          &lt;/li&gt;
        &lt;/ul&gt;
    &lt;/div&gt;</pre><p><a class="ipsAttachLink ipsAttachLink_image" rel="external nofollow" href="https://academy.hsoub.com/uploads/monthly_2015_03/orbit-photo.png.aede245995000d59f52df1b5544398ea.png"><img data-fileid="535" class="ipsImage ipsImage_thumbnailed" alt="orbit-photo.thumb.png.e7dcbbf35bf96901fd" src="https://academy.hsoub.com/uploads/monthly_2015_03/orbit-photo.thumb.png.e7dcbbf35bf96901fdf4db46c2c8a839.png"></a></p><p>في الصفحة الرئيسة الخاصة بالمتجر قمنا بإنشاء "المدار" باستخدام مُحتوى نصّي فقط.</p><pre style="color:rgb(0,0,0);line-height:normal;" class="html ipsCode prettyprint">    &lt;div class="row panel"&gt;
        &lt;ul class="text-center" data-orbit&gt;
          &lt;li&gt;
            &lt;div&gt;
              &lt;h2&gt;Start make money by selling you photos&lt;/h2&gt;
              &lt;p&gt;We have connection with big clients looking for you photos&lt;/p&gt;
            &lt;/div&gt;
          &lt;/li&gt;
          &lt;li&gt;
            &lt;div&gt;
              &lt;h2&gt;We are fair&lt;/h2&gt;
              &lt;p&gt;We take 95% and the rest is for you&lt;/p&gt;
            &lt;/div&gt;
          &lt;/li&gt;
          &lt;li&gt;
            &lt;div&gt;
              &lt;h2&gt;We have subscription plans&lt;/h2&gt;
              &lt;p&gt;Three bussnies plans for all sizes&lt;/p&gt;
            &lt;/div&gt;
          &lt;/li&gt;
        &lt;/ul&gt;
    &lt;/div&gt;</pre><p><a class="ipsAttachLink ipsAttachLink_image" rel="external nofollow" href="https://academy.hsoub.com/uploads/monthly_2015_03/orbit.png.cf40475d4a0ee154180c1021bc6c5604.png"><img data-fileid="536" class="ipsImage ipsImage_thumbnailed" alt="orbit.thumb.png.77921c9025e9d0da1e571230" src="https://academy.hsoub.com/uploads/monthly_2015_03/orbit.thumb.png.77921c9025e9d0da1e5712300e36e6aa.png"></a></p><p>مثال حي <a rel="external nofollow" href="http://codepen.io/anon/pen/NPpRqQ">http://codepen.io/anon/pen/NPpRqQ</a>:</p><p>للأسف <a rel="external nofollow" href="http://foundation.zurb.com/forum/posts/14504-moving-on-from-developing-orbit">توقف Foundation عن دعم "المدار"</a> بعد أكثر من أربعة أعوام على إصداره، تنصح Zurb باستخدام أحد الحلول البديلة وهي إضافة <a rel="external nofollow" href="https://kenwheeler.github.io/slick">slick</a>. الأمر الجيد أنّه مازال بالإمكان متابعة استخدام "المدار" وبكامل ميزاته، ولكن بدون تحديثات مستقبلية.</p><h3>عارض الصور (Lightbox)</h3><p>قام Foundation بتوفير إضافة عرض الصور (lightbox)، حيثُ أنّ "المدار" لا يستطيع التعامل مع الصور ذات الارتفاع المختلف، ولإنشاء عارض الصور كل ماعليك فعله هو تجميع الصور في "قائمة غير مرتبة" وإضافة الصنف clearing-thumbs والخاصيةdata-clearing، لتحصل على معرض صور بأبسط الخيارات، حيث تُعرض جميع الصور على الصفحة وعند الضغط على أحدها يتم الانتقال إلى صفحة جديدة لتُعرض الصورة بحجم كبير مع إمكانية التّنقل بين الصور الأُخرى بشكل مُصغّرات (thumbnails)، ولإضافة شيء من الجمالية للصور بإمكانك استخدام الصنف th للوسم &lt;img&gt;، الذي يضيف إطارًا و"تأثير مرور" (hover) للصور، كما يُقدم Foundation أسلوبًا آخرًا للعرض حيثُ بإمكانك اختيار إحدى الصور وعرضها في الصفحة بشكل منفرد وبعد الضغط عليها يُنتقل إلى صفحة أُخرى تعرض الصورة المُختارة بحجمها الكبير وباقي الصور بشكل مُصغّر، ولتطبيق هذا الأسلوب عليك إضافة الصنف clearing-feature "للقائمة غير المرتبة" والصنف clearing-featured-img للصورة المُختارة، ولإضافة "شرح صورة" (caption) نستخدم "خاصية المعلومات" data-caption.</p><pre style="color:rgb(0,0,0);line-height:normal;" class="html ipsCode prettyprint">    &lt;div class="row"&gt;
      &lt;div class="large-12 columns"&gt;
        &lt;ul class="small-block-grid-2 medium-block-grid-3 large-block-grid-4 clearing-thumbs" data-clearing&gt;
          &lt;li&gt;&lt;a href="img/th1.jpg" class="th"&gt;&lt;img src="img/th1.jpg"&gt;&lt;/a&gt;&lt;/li&gt;
          &lt;li&gt;&lt;a href="img/th2.jpg" class="th"&gt;&lt;img src="img/th2.jpg"&gt;&lt;/a&gt;&lt;/li&gt;
          &lt;li&gt;&lt;a href="img/th3.jpg" class="th"&gt;&lt;img src="img/th3.jpg"&gt;&lt;/a&gt;&lt;/li&gt;
          &lt;li&gt;&lt;a href="img/th4.jpg" class="th"&gt;&lt;img src="img/th4.jpg"&gt;&lt;/a&gt;&lt;/li&gt;
          &lt;li&gt;&lt;a href="img/th5.jpg" class="th"&gt;&lt;img src="img/th5.jpg"&gt;&lt;/a&gt;&lt;/li&gt;
          &lt;li&gt;&lt;a href="img/th6.jpg" class="th"&gt;&lt;img src="img/th6.jpg"&gt;&lt;/a&gt;&lt;/li&gt;
          &lt;li&gt;&lt;a href="img/th7.jpg" class="th"&gt;&lt;img src="img/th7.jpg"&gt;&lt;/a&gt;&lt;/li&gt;
          &lt;li&gt;&lt;a href="img/th8.jpg" class="th"&gt;&lt;img src="img/th8.jpg"&gt;&lt;/a&gt;&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/div&gt;
    &lt;/div&gt;</pre><h3><a class="ipsAttachLink ipsAttachLink_image" rel="external nofollow" href="https://academy.hsoub.com/uploads/monthly_2015_03/lightbox.png.2ced905838f84ef0f246e699aabe7c79.png"><img data-fileid="537" class="ipsImage ipsImage_thumbnailed" alt="lightbox.thumb.png.cf4c1678d128235159755" src="https://academy.hsoub.com/uploads/monthly_2015_03/lightbox.thumb.png.cf4c1678d128235159755bf5babaa8b0.png"></a></h3><h3>الفيديو المرن (Flex Video)</h3><p>التعامل مع تجاوبيّة الفيديو من الأمور المزعجة في CSS، وهي في نفس الوقت مطلبٌ أساسيٌ في أي موقع. يُقدم Foundation الصنف flex-video للتعامل مع الفيديو المُضمّن (embedded) في الصفحة، حيث يقوم هذا الصنف بالحفاظ على أبعاد الفيديو مُتناسقة على مُختلف قياسات الشاشات. للاستفادة من "الفيديو المرن" Flex Video كل ما عليك فعله هو إحاطة الوسم &lt;iframe&gt; بالوسم &lt;div&gt; مع الصنف flex-video، لتحصل على تجاوبية على أي حجم شاشة، ويُمكن استخدام الصنف widescreen لتوسيع عرض الفيديو. كما يُقدم Foundation صنفًا خاصًا لموقع Vimeo وبنفس الاسم وذلك لتنسيقه بشكل أفضل في الصفحة.</p><pre style="color:rgb(0,0,0);line-height:normal;" class="html ipsCode prettyprint">    &lt;div class="flex-video"&gt;
      &lt;iframe width="560" height="315" src="https://www.youtube.com/embed/ExAmPl3" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;
    &lt;/div&gt;</pre><p>دائمًا لدمج فيديو في الصفحة يجب استخدام الرابط المسمى Embed المُلحق بالفيديو، في YouTube يُمكن الحصول على الرابط أسفل الفيديو.</p><h2><a class="ipsAttachLink ipsAttachLink_image" rel="external nofollow" href="https://academy.hsoub.com/uploads/monthly_2015_03/youtube-embed-video.png.b7d766cfef0a268e14e443684685ca8f.png"><img data-fileid="538" class="ipsImage ipsImage_thumbnailed" alt="youtube-embed-video.thumb.png.bc8a9460c2" src="https://academy.hsoub.com/uploads/monthly_2015_03/youtube-embed-video.thumb.png.bc8a9460c23f20a02bb0d2cf8952c69e.png"></a></h2><h2>الهيئة والظهور (Formatting and Visibility)</h2><h3>تنسيق العناوين والنّصوص</h3><p>يَهتم Foundation بمظهر العناوين والنصوص (typography)، حيث يُقدم Foundation "للقائمة غير مرتبة" &lt;ul&gt; الأصناف "قرص" disc لجعل جميع عناصر القائمة مسبوقًا بدائرة مُطمسة وحتى المتداخل منها (nested)، ,الصنف "دائري" circle يَسبق جميع العناصر بدائرة مُفرغة، والصنف "مربع" square يسبق العناصر بمُربع صغير مُطمس، ويعرض الصنف no-bullet القوائم مُجردة من أيّ شكل.</p><pre style="color:rgb(0,0,0);line-height:normal;" class="html ipsCode prettyprint">    &lt;ul class="no-bullet"&gt; &lt;!-- القائمة سوف تظهر من دون أيّ شكل --&gt;
      &lt;li&gt;List item with a much longer description or more content.&lt;/li&gt;
      &lt;li&gt;List item&lt;/li&gt;
      &lt;li&gt;List item
        &lt;ul&gt;
          &lt;li&gt;Nested List Item&lt;/li&gt;
          &lt;li&gt;Nested List Item&lt;/li&gt;
          &lt;li&gt;Nested List Item&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
      &lt;li&gt;List item&lt;/li&gt;
      &lt;li&gt;List item&lt;/li&gt;
      &lt;li&gt;List item&lt;/li&gt;
    &lt;/ul&gt;
</pre><p style="color:rgb(0,0,0);font-family:'Times New Roman';font-size:medium;line-height:normal;"><a class="ipsAttachLink ipsAttachLink_image" rel="external nofollow" href="https://academy.hsoub.com/uploads/monthly_2015_03/lists-with-foundation.png.1f3a93ce46beedf3ea5355a0bbbd173e.png"><img data-fileid="401" class="ipsImage ipsImage_thumbnailed" alt="lists-with-foundation.thumb.png.d5813277" src="https://academy.hsoub.com/uploads/monthly_2015_03/lists-with-foundation.thumb.png.d5813277bd8d773ec81d87e4b86c3532.png"></a></p><p>لاحظ الفرق في الاقتباسات الموجودة في الصفحة الرئيسة في المتجر قبل وبعد استخدامنا لـFoundation.</p><p style="color:rgb(0,0,0);font-family:'Times New Roman';font-size:medium;line-height:normal;"><a class="ipsAttachLink ipsAttachLink_image" rel="external nofollow" href="https://academy.hsoub.com/uploads/monthly_2015_03/blockquote-before.png.eb713b6cea1f55b57da9fca170db6fcc.png"><img data-fileid="379" class="ipsImage ipsImage_thumbnailed" alt="blockquote-before.thumb.png.2ec29f5419c6" src="https://academy.hsoub.com/uploads/monthly_2015_03/blockquote-before.thumb.png.2ec29f5419c68ee794d86da86ab2652f.png"></a></p><p><a rel="external nofollow" href="https://academy.hsoub.com/uploads/monthly_2015_03/blockquote-after.png.cd6cd99fbb7a60201ffc7c8143ed8095.png"><img data-fileid="378" alt="blockquote-after.thumb.png.39cf0a2e0e9a0" src="https://academy.hsoub.com/uploads/monthly_2015_03/blockquote-after.thumb.png.39cf0a2e0e9a05592951565c6619bf16.png"></a>لاحظ التنسيق الخاص بالعناوين (headings) في مُتصفح Chrome والتنسيق الخاص بـFoundation.</p><p style="color:rgb(0,0,0);font-family:'Times New Roman';font-size:medium;line-height:normal;"><a class="ipsAttachLink ipsAttachLink_image" rel="external nofollow" href="https://academy.hsoub.com/uploads/monthly_2015_03/header-without-foundation.png.19284b9f94787f00ec66eabb2903f778.png"><img data-fileid="394" class="ipsImage ipsImage_thumbnailed" alt="header-without-foundation.thumb.png.54d1" src="https://academy.hsoub.com/uploads/monthly_2015_03/header-without-foundation.thumb.png.54d16f09e40a138dd25ea6da3a5cb81e.png"></a></p><p style="color:rgb(0,0,0);font-family:'Times New Roman';font-size:medium;line-height:normal;"><a class="ipsAttachLink ipsAttachLink_image" rel="external nofollow" href="https://academy.hsoub.com/uploads/monthly_2015_03/header-with-foundation.png.67d04028996047a1573ff4b96744d23e.png"><img data-fileid="393" class="ipsImage ipsImage_thumbnailed" alt="header-with-foundation.thumb.png.0384f98" src="https://academy.hsoub.com/uploads/monthly_2015_03/header-with-foundation.thumb.png.0384f98a8a8a35a5a304f96dd3fc3155.png"></a></p><p>يُقدم Foundation الصنف <span style="font-family:'courier new', courier, monospace;">vcard</span> "لقائمة غير مرتبة" <span style="font-family:'courier new', courier, monospace;">&lt;ul&gt;</span> لعرض العناصر <span style="font-family:'courier new', courier, monospace;">&lt;li&gt;</span> على شكل بطاقة عمل، حيث يُحيط العناصر بحدود (border) لتبدو كالصندوق لتُستخدم كبطاقة عرض لبيانات الاتصال.</p><pre style="color:rgb(0,0,0);line-height:normal;" class="html ipsCode prettyprint">    &lt;ul class="vcard"&gt;
      &lt;li class="fn"&gt;Mohamad Abras&lt;/li&gt;
      &lt;li class="street-address"&gt;Address: its private.&lt;/li&gt;
      &lt;li class="locality"&gt;City: One of the city&lt;/li&gt;
      &lt;li class="email"&gt;&lt;a href="#"&gt;mohamad.abras@sawrha.com&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;Phone: 111111111&lt;/li&gt;
    &lt;/ul&gt;</pre><p><a class="ipsAttachLink ipsAttachLink_image" rel="external nofollow" href="https://academy.hsoub.com/uploads/monthly_2015_03/vcard.png.d756a2c36557e0a505d11e7debaa0bb7.png"><img data-fileid="539" class="ipsImage ipsImage_thumbnailed" alt="vcard.thumb.png.9e7f0a72ffdb1a3d2e592f21" src="https://academy.hsoub.com/uploads/monthly_2015_03/vcard.thumb.png.9e7f0a72ffdb1a3d2e592f21389ca5e5.png"></a></p><p>يُقدم Foundation الصنفين <span style="font-family:'courier new', courier, monospace;">show-for-print </span>لإظهار المُحتوى في صفحة الطباعة، والصنف <span style="font-family:'courier new', courier, monospace;">hide-for-print</span> لإخفاء المُحتوى في صفحة الطباعة.</p><p>يُقدم Foundation الصنف "علامة" <span style="font-family:'courier new', courier, monospace;">label</span> لتنسيق المُحتوى النصي ليكون ظاهرًا للعيان للإشارة إلى أهمية المُحتوى.</p><pre style="color:rgb(0,0,0);line-height:normal;" class="html ipsCode prettyprint">    &lt;li class="label"&gt;Its not my real number!......My number has 2 in the end.&lt;/li&gt;
</pre><p style="color:rgb(0,0,0);font-family:'Times New Roman';font-size:medium;line-height:normal;"><a class="ipsAttachLink ipsAttachLink_image" rel="external nofollow" href="https://academy.hsoub.com/uploads/monthly_2015_03/label.png.8e92b527d2aae84c7d39beefd21c30a1.png"><img data-fileid="400" class="ipsImage ipsImage_thumbnailed" alt="label.thumb.png.62431834c8ef5192e4dc8d82" src="https://academy.hsoub.com/uploads/monthly_2015_03/label.thumb.png.62431834c8ef5192e4dc8d82b7d091b8.png"></a></p><p>يُقدم Foundatin تنسيقًا خاصًا للوسم <span style="font-family:'courier new', courier, monospace;">&lt;kbd&gt;</span> لجعله بارزًا وأكثر وضوحًا في النص.</p><p>لابُدْ أنّك لاحظت أيضًا الصنف <span style="font-family:'courier new', courier, monospace;">panel</span> الذي قمنا باستخدامه في المتجر أكثر من مرّة والذي يُضيف حدود واضحة مع خلفية تحمل لونًا بالقيمة <span style="font-family:'courier new', courier, monospace;">f2f2f2</span> للمُحتوى الداخلي، ويُمكن تخصيص الصنف <span style="font-family:'courier new', courier, monospace;">panel</span> بالصنف <span style="font-family:'courier new', courier, monospace;">callout</span> ليُضيف لونًا يحمل القيمة <span style="font-family:'courier new', courier, monospace;">ecfaff</span>، والصنف <span style="font-family:'courier new', courier, monospace;">radius</span> لجعل الحواف مصقولة.</p><p>في صفحة الخطط والأسعار الخاصة بالمتجر سوف نستخدم الصنف <span style="font-family:'courier new', courier, monospace;">panel</span> مع الصنف <span style="font-family:'courier new', courier, monospace;">callout</span> والصنف <span style="font-family:'courier new', courier, monospace;">radius</span>.</p><pre class="html ipsCode prettyprint">    &lt;h1 class="panel callout radius"&gt;Plans and Pricing&lt;/h1&gt;
</pre><h3><a class="ipsAttachLink ipsAttachLink_image" rel="external nofollow" href="https://academy.hsoub.com/uploads/monthly_2015_03/panel.png.b73ae68a39df2a2d8c1ffa2e29e9b5ca.png"><img data-fileid="540" class="ipsImage ipsImage_thumbnailed" alt="panel.thumb.png.18e897b7f6e9d32da2123614" src="https://academy.hsoub.com/uploads/monthly_2015_03/panel.thumb.png.18e897b7f6e9d32da2123614422d6515.png"></a></h3><h3>صناديق التحذير والتنبيه (Alert Boxes)</h3><p>وهي من الإضافات المُساعدة التي بإمكانك أن تستخدمها مع النماذج، أو كوسيلة عرض للإشارة إلى نجاح أو فشل عملية ما على الموقع، أو حتى لعرض معلومات مُساعدة للمستخدم. تأخذ الصناديق عرض الحاوية الخاصة بها بشكل كامل، ولإنشاء صندوق كل ما تحتاجه هو خاصية المعلومات <span style="font-family:'courier new', courier, monospace;">data-alert</span> والصنف <span style="font-family:'courier new', courier, monospace;">alert-box</span>.</p><p>ولتخصيص الصناديق بإمكانك استخدام الأصناف "نجاح" <span style="font-family:'courier new', courier, monospace;">success</span>، "حواف مصقولة" <span style="font-family:'courier new', courier, monospace;">radius</span>، "تحذير" <span style="font-family:'courier new', courier, monospace;">warning</span>، "حواف دائرية" <span style="font-family:'courier new', courier, monospace;">round</span>، "تحذير" <span style="font-family:'courier new', courier, monospace;">alert</span>، و"معلومة" <span style="font-family:'courier new', courier, monospace;">info</span>.</p><p>في صفحة التسجيل الخاصة بالمتجر سوف نقوم بإنشاء صندوق تنبيه للإشارة إلى أننا نقوم بحماية معلومات المُستخدم، سوف نستخدم الصنفين <span style="font-family:'courier new', courier, monospace;">radius</span> لجعل الحواف مصقولة و<span style="font-family:'courier new', courier, monospace;">info</span> من أجل اللون.</p><pre style="color:rgb(0,0,0);line-height:normal;" class="html ipsCode prettyprint">    &lt;div data-alert class="alert-box info radius"&gt;
      We protect your information.
      &lt;a href="#" class="close"&gt;&amp;times;&lt;/a&gt;
    &lt;/div&gt;
</pre><p><a class="ipsAttachLink ipsAttachLink_image" rel="external nofollow" href="https://academy.hsoub.com/uploads/monthly_2015_03/alert-box.png.70013c9d59758c3d5ded6cb4a28a3000.png"><img data-fileid="376" class="ipsImage ipsImage_thumbnailed" alt="alert-box.thumb.png.bee2d69f58f9562f1036" src="https://academy.hsoub.com/uploads/monthly_2015_03/alert-box.thumb.png.bee2d69f58f9562f1036cb23bdce17a9.png"></a></p><h3>معلومة جانبية (Tooltip)</h3><p>"المعلومة الجانبية" (tooltip) هي طريقة سريعة لعرض معلومات لمصطلح مُعين أو حدث (action) عند وقوف المؤشر على كلمة ما على الصفحة. للتطبيق كل ماعليك فعله هو إحاطة المصطلح المُراد إضافة "معلومة جانبية" له بالوسم <span style="font-family:'courier new', courier, monospace;">&lt;span&gt;</span> مع الصنف <span style="font-family:'courier new', courier, monospace;">has-tip</span>، الذي يجعل من المصطلح عريضًا (bold)، بالإضافة إلى خاصية المعلومات <span style="font-family:'courier new', courier, monospace;">data-tooltip</span>، والرسالة المُراد عرضها سوف نضعها في الخاصية <span style="font-family:'courier new', courier, monospace;">title</span>.</p><p>في متجرنا سوف نستفيد من هذه الخاصية في صفحة التسجيل وفي عمود المزايا تحديدًا للإشارة إلى أنّ الرسائل الخاصة بالمتجر هي رسائل تنبيه فقط.</p><pre class="html ipsCode prettyprint">    &lt;p&gt;&lt;span data-tooltip class="has-tip" title="Just important notifications"&gt;No spam&lt;/span&gt;&lt;/p&gt;</pre><h3 style="color:rgb(0,0,0);font-family:'Times New Roman';font-size:medium;line-height:normal;"><a class="ipsAttachLink ipsAttachLink_image" rel="external nofollow" href="https://academy.hsoub.com/uploads/monthly_2015_03/tooltip.png.fe7dd97f909cc266bcd40f13b0d8d812.png"><img data-fileid="541" class="ipsImage ipsImage_thumbnailed" alt="tooltip.thumb.png.bac13cd5782a6eba364392" src="https://academy.hsoub.com/uploads/monthly_2015_03/tooltip.thumb.png.bac13cd5782a6eba36439222ce81c311.png"></a></h3><h3>حوار مُنبثق (Reveal Modal)</h3><p>وهو نوع من أنواع النوافذ المُنبثقة، حيث النافذة تظهر لعرض مُحتوى معين مع تعتيم للخلفية في الصفحة الحالية، يَستخدم Foundation مكتبة jQuery لتوفير إضافة الحوار المنبثق، ولإنشائها نقوم بإنشاء "قسم" &lt;div&gt; وإضافة تعريف id باسم مناسب، والصنف <span style="font-family:'courier new', courier, monospace;">reveal-modal</span>، وخاصية المعلومات <span style="font-family:'courier new', courier, monospace;">data-reveal</span>. داخل القسم بإمكانك وضع ما تريد من مُحتوى سواءً أكان كتابيًا أو صورًا أو فيديو أو نماذج، وحتى إنّه بالإمكان ربط حوار منبثق بآخر، وللتحكم بحجم الحوار بإمكانك استخدام خمسة أصناف، وهي بالتدريج من صغير جدًا <span style="font-family:'courier new', courier, monospace;">tiny</span> إلى كبير جدًا <span style="font-family:'courier new', courier, monospace;">xlarge</span>، بالإضافة إلى الصنف ملء الشاشة <span style="font-family:'courier new', courier, monospace;">full</span>، وبعد إنشاء <span style="font-family:'courier new', courier, monospace;">modal</span> بإمكانك استدعائه عبر خاصية المعلومات <span style="font-family:'courier new', courier, monospace;">data-reveal-id</span>.</p><p>في الصفحة الرئيسة بالمتجر سوف نقوم بإنشاء حوار منبثق للصور الأكثر مبيعًا، حيث عند الضغط على أحد الصور سوف يتم ظهور نافذة تعرض الصورة بنافذة مُستقلة مع إمكانية إغلاقها سواءً بالضغط على إشارة الإغلاق أو بالضغط على أي مكان في الصفحة.</p><pre class="html ipsCode prettyprint">    &lt;!-- Any where in the HTML document --&gt;
    &lt;a href="#" data-reveal-id="myModal"&gt;&lt;img class="th" src="img/th2.jpg"&gt;&lt;/a&gt;
    &lt;!-- At the bottom of HTML document --&gt;
    &lt;div id="myModal" class="reveal-modal small" data-reveal&gt;
      &lt;img src="img/th2.jpg"&gt;
      &lt;a class="close-reveal-modal"&gt;&amp;#215;&lt;/a&gt;
    &lt;/div&gt;</pre><p><a class="ipsAttachLink ipsAttachLink_image" rel="external nofollow" href="https://academy.hsoub.com/uploads/monthly_2015_03/reveal.png.67ba846dd7f099e9db4198d0f966238f.png"><img data-fileid="542" class="ipsImage ipsImage_thumbnailed" alt="reveal.thumb.png.2ea172f239b02438bff8d3f" src="https://academy.hsoub.com/uploads/monthly_2015_03/reveal.thumb.png.2ea172f239b02438bff8d3f3ed6773c7.png"></a></p><p>إلى هنا نكون قد وصلنا إلى نهاية الجزء الخامس من السلسلة، والذي من خلاله تحدثنا فيه عن أمور عدّة، وبعد هذا الجزء من المُفترض أن تكون قد ألفت التعامل مع الإطار وتوضحت الفلسفة التي يسير عليها، وفي الجزء السادس والأخير سوف نتحدّث عن أمور مُكملة للإطار وهي في نفس الوقت تُميز الإطار عن غيره من أُطر العمل.</p>
]]></description><guid isPermaLink="false">33</guid><pubDate>Tue, 03 Mar 2015 19:08:00 +0000</pubDate></item><item><title>&#x623;&#x633;&#x627;&#x633;&#x64A;&#x627;&#x62A; &#x625;&#x637;&#x627;&#x631; &#x639;&#x645;&#x644; Foundation: &#x627;&#x644;&#x646;&#x651;&#x638;&#x627;&#x645; &#x627;&#x644;&#x634;&#x651;&#x628;&#x643;&#x64A;</title><link>https://academy.hsoub.com/programming/css/%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A7%D8%AA-%D8%A5%D8%B7%D8%A7%D8%B1-%D8%B9%D9%85%D9%84-foundation-%D8%A7%D9%84%D9%86%D9%91%D8%B8%D8%A7%D9%85-%D8%A7%D9%84%D8%B4%D9%91%D8%A8%D9%83%D9%8A-r28/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2015_03/foundation_480x300.jpg.549e151fd2216984c00d4655349c4313.jpg" /></p>

<p>لم نشرح الكثير في الجزء الأول من هذه السلسلة، ولكن في هذا الجزء سنشرح النظام الشبكي وآليّة استخدامه وكافّة التفاصيل المُتعلقة به وبالأمثلة الحيّة، وسوف نتعرّف على النظام الشبكي العام والنظام الشبكي باستخدام الرزم والإزاحة ومفهوم "ترتيب المصدر" وأخيرًا سوف نتعرف على أصناف الظهور.</p><h2>النّظام الشبكي في Foundation</h2><p>يُمَكّنك Foundation من إنشاء تصاميم صفحات إنترنت مُتجاوبة مع جميع الشاشات والأجهزة بسرعة عالية، وذلك باستخدام نظامٍ شبكي يَعتمد على اثني عشر عمودًا بشكل مبدئيّ قابلة للتعديل، وهذه الشبكات يُمكن أن تكون مُتداخلة (nestable)، أي اثنا عشر عمودًا داخل اثني عشر عمودًا آخر.</p><p>يُعرَّف كل صفّ بإضافة الصنف <code>row</code> إلى <code>&lt;div&gt;</code>، وداخل كل صفّ يُحدَّد توزع الأعمدة باستخدام الأصناف <code>small-x</code> و<code>medium-x</code> و<code>large-x</code> حيث <code>x</code> هي من 1 حتى 12، وهي دائمًا تُعرف داخل صفّ (row)، وبعد تحديد توزّع الأعمدة في الصفّ عليك إضافة الصنف <code>column</code> (عمود) أو <code>columns</code>، لا فرقَ بين الصنفين ولكنّ صيغة الجمع هي الشائعة، ومُهمة هذا الصنف هي إضافة الطوفان (float) والحشو (padding).</p><p>يُعرّف Foundation نقاط الفصل (breakpoints) الّتي تُحدّد كل قياس من قياسات النظام الشبكي كما يلي:</p><ul><li>الشاشات الصغيرة small تبدأ من 0 بكسل إلى 640 بكسلًا.</li><li>الشاشات المتوسطة medium تبدأ من 641 بكسلًا إلى 1024 بكسلًا.</li><li>الشاشات الكبيرة large تبدأ من 1025 بكسلًا إلى 1440 بكسلًا.</li></ul><p>عند حدود هذه النقاط تتغير استجابة المُتصفّح في عرضه لمُحتويات الموقع لتبدو بأفضل صورةٍ مُمكنة.</p><p>بُني إطار العمل Foundation ليستهدف شاشات الأجهزة المحمولة أوّلًا ومنها إلى الأجهزة ذات الشاشات الكبيرة ويَستخدم في ذلك الصنف (class) المُسمى <code>small</code>، عند استخدام هذا الصنف، فإنّ تَوزع الأعمدة في الصفحة لن يختلف أبدًا مهما كانت قياس شاشة العرض، بمعنى أنّه في حال وجود عمودين في الصفحة سيبقى هذان العمودان مهما كان حجم الشاشة سواءٌ كانت متوسطة أو كبيرة، وعند استخدام الصنف المتوسط <code>medium</code>، والذي أُضيف في الإصدار الخامس، فإنّ توزع الأعمدة المُحدد على هذا الصنف سوف يتم استخدامه مع الشاشات الكبيرة أيضًا، ولكن في حالة الشاشات الصغيرة فسوف تصطف العناصر بعضها فوق بعض.</p><p>يجب أن يحتوي كل صفّ row اثني عشر عمودًا دومًا، في صفحة التسجيل في المتجر تتضمّن الصفحة صفًّا رئيسيًّا باثني عشر عمودًا داخل اثني عشر عمودًا آخر، حيث تكون النماذج (forms) ثمانية أعمدة والشريط الجانبي أربعة أعمدة، وعند تعريف النماذج يتم التعامل مع كل صفّ على أساس اثني عشر عمودًا داخل اثني عشر عمود، حيث يتم تعريف المُدخل الخاص بالاسم الأوّل على أنّه ستّة أعمدة والمُدخل الخاص بالاسم الأخير على أنه ستّة أعمدة.</p><pre class="html ipsCode prettyprint">    &lt;div class="row"&gt; &lt;!--صفّ رئيسي--&gt;
      &lt;div class="medium-4 columns"&gt; &lt;!--أربعة أعمدة للشريط الجانبي--&gt;
        &lt;aside&gt;
          &lt;div class="panel"&gt;
            &lt;h5&gt;Features&lt;/h5&gt;
            &lt;a href="#"&gt;Read More →&lt;/a&gt;
          &lt;/div&gt;
        &lt;/aside&gt;
      &lt;/div&gt;
      &lt;div class="medium-8 columns"&gt; &lt;!--ثمانية أعمدة للنماذج--&gt;
        &lt;form&gt;
          &lt;div class="row"&gt; &lt;!--صفّ داخل الصف الرئيسي--&gt;
            &lt;div class="large-6 columns"&gt;
              &lt;input type="text" placeholder="First name" /&gt;
            &lt;/div&gt;
            &lt;div class="large-6 columns"&gt;
              &lt;input type="text" placeholder="last name" /&gt;
            &lt;/div&gt;
          &lt;/div&gt;
          &lt;!-- بقية النماذج --&gt;
        &lt;/form&gt;
      &lt;/div&gt;
    &lt;/div&gt;</pre><p style="text-align:center;"><a class="ipsAttachLink ipsAttachLink_image" rel="external nofollow" href="https://academy.hsoub.com/uploads/monthly_2015_03/col-in-col.png.93579eefe680eb7c9367e9bad2fbbf9e.png"><img class="ipsImage ipsImage_thumbnailed" data-fileid="141" alt="col-in-col.thumb.png.003502cff0b92a73f1b" src="https://academy.hsoub.com/uploads/monthly_2015_03/col-in-col.thumb.png.003502cff0b92a73f1b4d96f97108cea.png"></a></p><h3>الإزاحة (Offset)</h3><p>يُقدم Foundation مفهوم "الإزاحة" لزيادة المرونة في استخدام النظام الشبكي، حيث بإمكانك تحريك أي عمود إلى جهة اليمين مستهدفًا أي حجم شاشة دون الآخر، وذلك عن طريق الأصناف <code>small-offset-x</code> و<code>medium-offset-x</code> و<code>large-offset-x</code> حيث x هي رقمٌ من 1 حتى 11، ومن المُمكن الجمع بين جميع القياسات الثالثة السابقة ولكن من واقع الخبرة العمليّة، الأكثر استخدامًا إمّا الصنف <code>small</code> مع <code>medium</code> أو <code>small</code> مع <code>large</code>.</p><p>يُطوّف Foundation العمود الأخير إلى جهة اليمين، على عكس ما يفعل إطار العمل <code>Bootstrap</code> عند إنشاء صفّ بأعمدة لا تُجمع إلى اثني عشر، ولكن بإمكانك إضافة الصنف <code>end</code> إلى العمود المُطوّف لجعله يصطف بجانب العمود السابق.</p><p>يُنسّق النظام الشبكي الأعمدةَ بإضافة حشو (padding) بينها، ولكن هناك حالات لاترغب بظهور هذا الحشو في قياس شاشة مُعين، ولذلك يُقدم لك Foundation أصنافًا مثلَ <code>large-collapse</code> لإزالة هذا الحشو من الشاشات الكبيرة على سبيل المثال.</p><p>يُقدم لك Foundation أصنافًا خاصة لتوسيط العمود في منتصف الصف، ولتوسيط العمود في الشاشات الصغيرة بإمكاننا استخدام الصنف <code>small-centered</code>، ويَشمل تأثير هذا الصنف الشاشات المتوسطة والكبيرة، ولكن بالإمكان استخدام صنف معاكس لتغيير هذا السلوك، حيث يَقومُ الصنف <code>large-uncentered</code> والصنف <code>medium-uncentered</code> بإلغاء تأثير الصنف <code>small-centered</code> في الشاشات الكبيرة والمتوسطة.</p><p>في الصفحة الرئيسة في المتجر لدينا صفّ يحتوي على ثلاثة عناصر، في الشاشات الصغيرة نريد لهذه العناصر أن يصطف بعضها فوق بعض وكلُ عنصر يأخُذ عرضَ الصفحة بالكامل ولذلك يجب أنّ نستخدم الصنف <code>small-12</code>، أمّا في الشاشات المتوسطة والكبيرة نُريد من العناصر الثلاثة أن تُعرض بجانب بعضها البعض وبالتّالي كل عنصرٍ سيكونُ له أربعة أعمدة (12/3) من أصلِ اثني عشر عمودًا لتظهر الصناديق الثلاثة على مُستوى واحد وعلى عرض الصفحة بالكامل ولذلك سوف نستخدم الصنف <code>medium-4</code> الذي يقوم بترتيب العناصر على مستوى الشاشات المُتوسطة والكبيرة.<code class="lang-html"> </code></p><pre class="html ipsCode prettyprint">    &lt;div class="row"&gt;
      &lt;div class="small-12 medium-4 columns"&gt;
        &lt;div class="panel"&gt;
          &lt;h3&gt;Shoot&lt;/h3&gt;
          &lt;p&gt;...&lt;/p&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div class="small-12 medium-4 columns"&gt;
        &lt;div class="panel"&gt;
          &lt;h3&gt;Upload&lt;/h3&gt;
          &lt;p&gt;...&lt;/p&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div class="small-12 medium-4 columns"&gt;
        &lt;div class="panel"&gt;
          &lt;h3&gt;Sell&lt;/h3&gt;
          &lt;p&gt;...&lt;/p&gt;
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
</pre><p style="text-align:center;"><a class="ipsAttachLink ipsAttachLink_image" rel="external nofollow" href="https://academy.hsoub.com/uploads/monthly_2015_03/grid.png.06d3d0cfd07bdfcfaaebce6db74e9cb1.png"><img class="ipsImage ipsImage_thumbnailed" data-fileid="142" alt="grid.thumb.png.d802ed7604bdaf4ac44ab83cb" src="https://academy.hsoub.com/uploads/monthly_2015_03/grid.thumb.png.d802ed7604bdaf4ac44ab83cb8c1fa5c.png"></a></p><p>لاحظ أنّ الصناديق ليست على سويّةٍ واحدة ويعود ذلك إلى المُحتوى الخاص بها. يُقدم Foundation مفهوم المُسوّي لحل هذه المُشكلة والذي سيجعل من هذه الصناديق على سويّة واحدة مهما اختلف المُحتوى بينها، والذي سوف نتحدث عنه بمزيد من التفصيل في الجزء الأخير من السلسلة.</p><p><a rel="external nofollow" href="http://codepen.io/anon/pen/ogBQao">http://codepen.io/anon/pen/ogBQao</a></p><p>أيضًا في الصفحةِ الرئيسة لدينا صفّ يَعرض الصور الأكثر مبيعًا في المتجر، نُريد عرض ثلاثة صورٍ في الصف الواحد في الشاشات الكبيرة ولذلك سوف نستخدم الصنف <code>large-4</code> وفي الشاشات الصغيرة والمتوسطة نريد عرض صورتين فقط في الصفّ الواحد ولذلك سوف نستخدم الصنف <code>small-6</code>.</p><pre class="html ipsCode prettyprint">&lt;code class="lang-html"&gt; 
&lt;/code&gt;  &lt;div class="row"&gt;
      &lt;div class="small-6 large-4 columns"&gt;
        ...
      &lt;/div&gt;
      &lt;div class="small-6 large-4 columns"&gt;
        ...
      &lt;/div&gt;
      &lt;div class="small-6 large-4 columns"&gt;
        ...
      &lt;/div&gt;
    &lt;/div&gt;</pre><p>الصورة التّالية لتوزع الأعمدة في الشاشات الكبيرة:</p><p style="text-align:center;"><a class="ipsAttachLink ipsAttachLink_image" rel="external nofollow" href="https://academy.hsoub.com/uploads/monthly_2015_03/best-sellers.png.f7ee92a1b6e8ed7c6c1b4f8368bd270b.png"><img class="ipsImage ipsImage_thumbnailed" data-fileid="143" alt="best-sellers.thumb.png.a5d813ca2d93c0e12" src="https://academy.hsoub.com/uploads/monthly_2015_03/best-sellers.thumb.png.a5d813ca2d93c0e127663913f15fb502.png"></a></p><p>أمّا في الشاشات المُتوسطة والصغيرة سوف تتوزع الصور كما في الصورة التّالية مع ملاحظة طوفان الصورة الأخيرة إلى جهة اليمين، ويُمكنك استخدام الصنف <code>end</code> لجعل الصورة تطوف إلى جهة اليسار.</p><p style="text-align:center;"><a class="ipsAttachLink ipsAttachLink_image" rel="external nofollow" href="https://academy.hsoub.com/uploads/monthly_2015_03/best-sellers-small.png.b9b2620743c7356d91a9eac49bdc2e89.png"><img class="ipsImage ipsImage_thumbnailed" data-fileid="144" alt="best-sellers-small.thumb.png.bbe1598fee2" src="https://academy.hsoub.com/uploads/monthly_2015_03/best-sellers-small.thumb.png.bbe1598fee29b789bcbb59d846243e7e.png"></a></p><p>ويستخدم Foundation في ذلك الطوفان "الصّنف الزّائف" (pseudo-class) المُسمى "العنصر الأخير" <code>last-child</code>.</p><p style="text-align:center;"><a class="ipsAttachLink ipsAttachLink_image" rel="external nofollow" href="https://academy.hsoub.com/uploads/monthly_2015_03/last-child.png.6626bae6107b460ed7b366d08fbe30ec.png"><img class="ipsImage ipsImage_thumbnailed" data-fileid="145" alt="last-child.thumb.png.59b4edc9073b60bc578" src="https://academy.hsoub.com/uploads/monthly_2015_03/last-child.thumb.png.59b4edc9073b60bc578f7f2d207e21a8.png"></a></p><p>أيضًا في الصفحة الرئيسة لدينا الشيفرة التّالية والّتي تتضمّن صفّين: الأول يحتوي على اقتباسين (blockquote) كل منهما ستة أعمدة، أمّا في الصف الثاني لدينا اقتباس وحيد سنجعله يتوسط الصفّ الذي ينتمي إليه في الشاشات الكبيرة والمتوسطة دون الشاشات الصغيرة باستخدام أصناف الإزاحة <code>medium-offset-3</code> و الصنف <code>large-offset-3</code>.</p><pre class="html ipsCode prettyprint">    &lt;div class="row"&gt;
      &lt;blockquote class="small-6 columns text-center"&gt;...&lt;cite&gt;..&lt;/cite&gt;&lt;/blockquote&gt;
      &lt;blockquote class="small-6 columns text-center"&gt;...&lt;cite&gt;..&lt;/cite&gt;&lt;/blockquote&gt;
    &lt;/div&gt;
    &lt;div class="row"&gt;
      &lt;blockquote class="large-6 medium-6 medium-offset-3 large-offset-3 columns"&gt;...&lt;cite&gt;..&lt;/cite&gt;&lt;/blockquote&gt;
    &lt;/div&gt;</pre><p><a class="ipsAttachLink ipsAttachLink_image" rel="external nofollow" href="https://academy.hsoub.com/uploads/monthly_2015_03/quote-grid.png.bb0a4774e1a4eb1adaaa96261df6a16f.png"><img data-fileid="520" class="ipsImage ipsImage_thumbnailed" alt="quote-grid.thumb.png.c70b185071f9556c270" src="https://academy.hsoub.com/uploads/monthly_2015_03/quote-grid.thumb.png.c70b185071f9556c2702570977517fd9.png"></a></p><p><a rel="external nofollow" href="http://codepen.io/anon/pen/rayBgg">http://codepen.io/anon/pen/rayBgg</a></p><h3>ترتيب المصدر (Source Ordering)</h3><p>من خلالِ تعامُلك مع النظام الشبكي لا بدَّ أن المشكلة التّالية واجهتك: تُريد ظُهور المُحتوى على المُتصفح بترتيب معين عند عرضه، وبترتيب آخر مُختلفٍ في نصّ مُستند HTML، رُبما لأسبابٍ تتعلقُ بالتحسينِ لمُحركات البحث (SEO)، أو أنّك تُريد عرضَ المُحتوى بترتيبٍ مُعين في شاشات سطح المكتب وبترتيبٍ مُغاير في الأجهزة المحمولة، ولهذا يُقدم Foundation حلًا لتلك المشكلة وذلك باستخدام أصناف الدفع والسحب (push and pull)، حيثُ يقوم الصنف <code>large-push-4</code> بدفع العنصر أربعة أعمدةٍ باتجاه اليمين، ويَسحب الصنف <code>large-pull-8</code> العُنصر ثمانية أعمدةٍ إلى اليسار.</p><p>في صفحةِ التسجيل الخاصة بالمتجر عمودان رئيسيان في الصفحة، فيهما ثمانية أعمدة للنماذج وأربعة أعمدة خاصة بعرض مزايا التسجيل في الموقع، التصميم يبدو مقبولًا على الشاشات المتوسطة والكبيرة ولكن عندَ عرض الصفحة على أجهزة الشاشات الصغيرة ستُعرض النماذج قبل العمود الخاص بالمزايا (features)، وهذا ما لا نُريده.</p><pre class="html ipsCode prettyprint">  &lt;div class="row"&gt;
      &lt;div class="medium-8 columns"&gt; &lt;!--عمود النماذج يُعرض أولًا في الشاشات الصغيرة وعلى يسار الصفحة في الشاشات المُتوسطة والكبيرة--&gt;
        &lt;form&gt;
          &lt;div class="row"&gt;
            &lt;div class="large-6 columns"&gt;
              &lt;input type="text" placeholder="First name" /&gt;
            &lt;/div&gt;
            &lt;div class="large-6 columns"&gt;
              &lt;input type="text" placeholder="last name" /&gt;
            &lt;/div&gt;
          &lt;/div&gt;
          &lt;!-- بقية النماذج --&gt;
        &lt;/form&gt;
      &lt;/div&gt;
      &lt;div class="medium-4 columns"&gt; &lt;!--عمود المزايا يُعرض بعد النماذج في الشاشات الصغيرة وعلى يمين الصفحة في الشاشات المُتوسطة والكبيرة--&gt;
        &lt;aside&gt;
          &lt;div class="panel"&gt;
            &lt;h5&gt;Features&lt;/h5&gt;
            &lt;a href="#"&gt;Read More →&lt;/a&gt;
          &lt;/div&gt;
        &lt;/aside&gt;
      &lt;/div&gt;
    &lt;/div&gt;</pre><p><a class="ipsAttachLink ipsAttachLink_image" rel="external nofollow" href="https://academy.hsoub.com/uploads/monthly_2015_03/src-order-before.png.bd7950f02b47852bfa82b5f89160b79f.png"><img data-fileid="521" class="ipsImage ipsImage_thumbnailed" alt="src-order-before.thumb.png.d2653af45d3d3" src="https://academy.hsoub.com/uploads/monthly_2015_03/src-order-before.thumb.png.d2653af45d3d3bb1f97f0556e2a184d8.png"></a></p><p><a class="ipsAttachLink ipsAttachLink_image" rel="external nofollow" href="https://academy.hsoub.com/uploads/monthly_2015_03/src-order-before-small.png.f50487da5eb474a9a990ae7877cc6b95.png"><img data-fileid="522" class="ipsImage ipsImage_thumbnailed" alt="src-order-before-small.thumb.png.fe88317" src="https://academy.hsoub.com/uploads/monthly_2015_03/src-order-before-small.thumb.png.fe8831783172e9d63ddde288eb723c59.png"></a></p><p>سنُعيدُ تصميم الصفحة لتكونَ مُتوافقة مع الهاتف المحمول أولًا، حيثُ يتمُ عرضُ المحتوى الخاص بالمزايا ثم النماذج لاستكمالِ التسجيل.</p><pre class="html ipsCode prettyprint">    &lt;div class="row"&gt;
      &lt;div class="medium-4 columns"&gt; &lt;!--عمود المزايا يُعرض أولًا وعلى يسار الصفحة--&gt;
        &lt;aside&gt;
          &lt;div class="panel"&gt;
            &lt;h5&gt;Features&lt;/h5&gt;
            &lt;a href="#"&gt;Read More →&lt;/a&gt;
          &lt;/div&gt;
        &lt;/aside&gt;
      &lt;/div&gt;
      &lt;div class="medium-8 columns"&gt; &lt;!-- عمود النماذج يُعرض بعد عمود المزايا وعلى يمين الصفحة--&gt;
        &lt;form&gt;
          &lt;div class="row"&gt;
            &lt;div class="large-6 columns"&gt;
              &lt;input type="text" placeholder="First name" /&gt;
            &lt;/div&gt;
            &lt;div class="large-6 columns"&gt;
              &lt;input type="text" placeholder="last name" /&gt;
            &lt;/div&gt;
          &lt;/div&gt;
          &lt;!-- بقية النماذج --&gt;
        &lt;/form&gt;
      &lt;/div&gt;
    &lt;/div&gt;</pre><p><a class="ipsAttachLink ipsAttachLink_image" rel="external nofollow" href="https://academy.hsoub.com/uploads/monthly_2015_03/src-order-after-small.png.5c0d24c226a77e6145681b32e1be96fc.png"><img data-fileid="523" class="ipsImage ipsImage_thumbnailed" alt="src-order-after-small.thumb.png.90e8c267" src="https://academy.hsoub.com/uploads/monthly_2015_03/src-order-after-small.thumb.png.90e8c267f1e738fecc3b4df2e336021d.png"></a></p><p>والآن بعد أن تمّ تعديل التصميم ليكون مُناسبًا لأجهزة الشاشات الصغيرة، أصبح التصميم على الشاشات الكبيرة والمتوسطة مُغايرًا تمامًا لما نُريده، حيثُ النماذج إلى جِهة اليمين والعمود الجانبي إلى اليسار.</p><p><a class="ipsAttachLink ipsAttachLink_image" rel="external nofollow" href="https://academy.hsoub.com/uploads/monthly_2015_03/src-order-after-large.png.3dbb180dc05799e05abf8d845f013572.png"><img data-fileid="524" class="ipsImage ipsImage_thumbnailed" alt="src-order-after-large.thumb.png.dcec9793" src="https://academy.hsoub.com/uploads/monthly_2015_03/src-order-after-large.thumb.png.dcec9793b36b39b65f144e7399b861e1.png"></a></p><p>لتصحيحِ العرض على الشاشات الكبيرة والمُوسطة سوف نستخدام أصناف السحب والدفع، سنقوم بدفع عمود المزايا ثمانية أعمدة إلى اليمين باستخدام الصنف <code>medium-push-8</code>، وسحب عمود النماذج أربعة أعمدة إلى اليسار باستخدام الصنف <code>medium-pull-4</code>، وذلك يجعلُ من التصميم كما كان سابقًا على الشاشات الكبيرة والمتوسطة.</p><pre class="html ipsCode prettyprint">    &lt;div class="row"&gt;
      &lt;div class="medium-4 columns medium-push-8"&gt; &lt;!-- أيها الشريط الجانبي الرجاء التكرّم بالانتقال ثمانية أعمدة إلى اليمين في الشاشات المتوسطة والكبيرة --&gt;
        &lt;aside&gt;
          &lt;div class="panel"&gt;
            &lt;h5&gt;Features&lt;/h5&gt;
            &lt;p&gt;Registration is free&lt;/p&gt;
            &lt;p&gt;&lt;span data-tooltip class="has-tip" title="Just important notifications"&gt;No spam&lt;/span&gt;&lt;/p&gt;
            &lt;a href="#"&gt;Read More →&lt;/a&gt;
          &lt;/div&gt;
        &lt;/aside&gt;
      &lt;/div&gt;
      &lt;div class="medium-8 columns medium-pull-4"&gt; &lt;!-- أيتها النماذج الرجاء التكرّم بالانتقال أربعة أعمدة إلى اليسار في الشاشات المتوسطة والكبيرة--&gt;
        &lt;form&gt;
          ...
        &lt;/form&gt;
      &lt;/div&gt;</pre><p><a class="ipsAttachLink ipsAttachLink_image" rel="external nofollow" href="https://academy.hsoub.com/uploads/monthly_2015_03/src-order-after.png.4ee3f69c23101aba219f56c419f6d398.png"><img data-fileid="525" class="ipsImage ipsImage_thumbnailed" alt="src-order-after.thumb.png.e9bc7e7bf73dcb" src="https://academy.hsoub.com/uploads/monthly_2015_03/src-order-after.thumb.png.e9bc7e7bf73dcb650d0a2f9d7d313ab6.png"></a></p><p>لم نستطع استخدام أصناف السحب والدفع من البداية، بل كان علينا ترتيب المُحتوى كما نريده على أجهزة الشاشات الصغيرة أولًا (تذكّر أنّ Foundation يستهدف أجهزة الهاتف المحمول أولًا (mobile-first)) ثم استخدام أصناف السحب والدفع ثانيًا.</p><h3>النظام الشبكي باستخدام القِطَع Block Grid</h3><p>وهو نظامٌ شبكيٌ آخر يُقدمه Foundation للتعامل مع توزع الأعمدة بأقلِ قدر مُمكن من الكتابة، وهو شائع الاستخدام مع الصّور المُصغّرة (thumbnails)، ويقوم هذا النظام الشبكي بتوزيع عناصر القوائم (<code>&lt;li&gt;</code>) بشكل مُتساوي على عرض الصفحة مهما كان حجم الشاشة، على عكسِ ما يفعل النظام الافتراضي باستخدام <code>max-width</code> لكل صفّ، حيث يُوزع الصنف <code>large-block-grid-3</code> ثلاثة عناصر على عرض الصفحة في الشاشات الكبيرة، ويُمَكنك هذا النظام من تحديد عدد العناصر كيفما تشاء في الصفّ الواحد والجمع بين الأصناف الثلاثة <code>small</code> و<code>medium</code> و<code>large</code>، والأصناف تُطبق على قائمة غير مرتبة <code>&lt;ul&gt;</code>.</p><p>المثالُ التّالي يُوضح استخدام نظام Block Grid في صفحة المعرض الخاصة بالمتجر، لاحظ أنه ما زال علينا استخدام نظام الأعمدة وذلك فقط لكي لا يأخذ النظام عرض الصفحة وليكون التنسيق مُتجانسًا مع بقيّة عناصر الصفحة.</p><p>عرض الصور في الشاشات الكبيرة والمتوسطة والصغيرة سوف يظهر كما في الصور اللاحقة وهي على الترتيب، أما بالنسبة للشيفرة فسوف نستخدم ثلاثة أصناف هي كالتّالي:</p><ul><li>الصنف <code>large-block-grid-4</code> يعرض أربعة عناصر بجانب بعضها البعض في الشاشات الكبيرة.</li><li>الصنف <code>medium-block-grid-3</code> يعرض ثلاثة عناصر بجانب بعضها البعض في الشاشات المتوسطة.</li><li>وأخيرًا الصنف <code>small-block-grid-2</code> يعرض عنصرين فقط بجانب بعضهم البعض في الشاشات الصغيرة.</li></ul><p>الشيفرة بشكلها الأخير المُستخدمة في صفحة المعرض ستكون على النحو التّالي:</p><pre class="html ipsCode prettyprint">    &lt;div class="row"&gt;
      &lt;div class="large-12 columns"&gt;
        &lt;ul class="small-block-grid-2 medium-block-grid-3 large-block-grid-4"&gt;
          &lt;li&gt;&lt;a href="img/th1.jpg" class="th"&gt;&lt;img src="img/th1.jpg"&gt;&lt;/a&gt;&lt;/li&gt;
          &lt;li&gt;&lt;a href="img/th2.jpg" class="th"&gt;&lt;img src="img/th2.jpg"&gt;&lt;/a&gt;&lt;/li&gt;
          &lt;li&gt;&lt;a href="img/th3.jpg" class="th"&gt;&lt;img src="img/th3.jpg"&gt;&lt;/a&gt;&lt;/li&gt;
          &lt;li&gt;&lt;a href="img/th4.jpg" class="th"&gt;&lt;img src="img/th4.jpg"&gt;&lt;/a&gt;&lt;/li&gt;
          &lt;li&gt;&lt;a href="img/th5.jpg" class="th"&gt;&lt;img src="img/th5.jpg"&gt;&lt;/a&gt;&lt;/li&gt;
          &lt;li&gt;&lt;a href="img/th6.jpg" class="th"&gt;&lt;img src="img/th6.jpg"&gt;&lt;/a&gt;&lt;/li&gt;
          &lt;li&gt;&lt;a href="img/th7.jpg" class="th"&gt;&lt;img src="img/th7.jpg"&gt;&lt;/a&gt;&lt;/li&gt;
          &lt;li&gt;&lt;a href="img/th8.jpg" class="th"&gt;&lt;img src="img/th8.jpg"&gt;&lt;/a&gt;&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/div&gt;
    &lt;/div&gt;
</pre><p style="text-align:center;"><a class="ipsAttachLink ipsAttachLink_image" rel="external nofollow" href="https://academy.hsoub.com/uploads/monthly_2015_03/block-grid.png.7ea9c28b6c7739a6368e28ed62f969b3.png"><img class="ipsImage ipsImage_thumbnailed" data-fileid="146" alt="block-grid.thumb.png.0c5119380b9f597fdce" src="https://academy.hsoub.com/uploads/monthly_2015_03/block-grid.thumb.png.0c5119380b9f597fdce13c24ce63430c.png"></a></p><p style="text-align:center;"><a class="ipsAttachLink ipsAttachLink_image" rel="external nofollow" href="https://academy.hsoub.com/uploads/monthly_2015_03/block-grid-medium.png.6d2a0dce02ed69b1a609ecf34312b86d.png"><img class="ipsImage ipsImage_thumbnailed" data-fileid="148" alt="block-grid-medium.thumb.png.ed52bb13af74" src="https://academy.hsoub.com/uploads/monthly_2015_03/block-grid-medium.thumb.png.ed52bb13af74bb7249fd536654532a72.png"></a><a class="ipsAttachLink ipsAttachLink_image" rel="external nofollow" href="https://academy.hsoub.com/uploads/monthly_2015_03/block-grid-small.png.87f5716f356ea400f3e78d048d1d8811.png"><img class="ipsImage ipsImage_thumbnailed" data-fileid="147" alt="block-grid-small.thumb.png.79077f9253313" src="https://academy.hsoub.com/uploads/monthly_2015_03/block-grid-small.thumb.png.79077f92533136ea5c6481575b50ace1.png"></a></p><h2>أصناف الظهور Visibility Classes</h2><p>تُقدم أصناف الظهور إمكانية إظهار أو إخفاء مُحتوى مُعين بناءً على معايير عدّة مثل حجم الشاشة واتجاه الجهاز هل هو في الوضع العموديّ (portrait) أم الأفقيّ (landscape) وهل تعمل شاشة الجهاز باللمس أم لا.</p><p>الأصناف المُستخدمة في التحكم بالظهور سهلة الحفظ والاستخدام، فلإظهار المُحتوى للشاشات الصغيرة سوف نستخدم الصنف <code>show-for-small-only</code>، ولإظهار المُحتوى للشاشات المُتوسطة والأكبر سنستخدم الصنف <code>show-for-medium-up</code>، وللإخفاء استخدم الكلمة <code>show</code> بدل <code>hide</code>، حيثُ سيُخفي الصنف <code>hide-for-small-only</code> المُحتوى للشاشات الصغيرة فقط.</p><p>وللتحكم بالظهور بناءً على اتجاه الشاشة نستخدم الصنفين <code>show-for-landscape</code> و<code>show-for-portrait</code>، وللشاشات اللمسية نستخدم الصنفين <code>show-for-touch</code> و<code>hide-for-touch</code>.</p><p>في متجرنا وفي صفحة المُنتج بالتحديد، لدينا نُبذة عن المُصور ووسائل الاتصال الخاصة به، من بريد الكتروني ورقم هاتف. ما نريده هو عدم ظهور رقم الهاتف في الأجهزة اللوحية وأجهزة سطح المكتب، والابقاء على الرقم في أجهزة الجوّال، ولتحقيقِ ذلك سوف نستخدم الصنف <code>hide-for-medium-up</code>.</p><pre class="html ipsCode prettyprint">     &lt;h2&gt;About the photographer&lt;/h2&gt;
      &lt;p&gt;Mohamad Abras is the best photographer on earth.&lt;/p&gt;
      &lt;p&gt;&lt;a href="mailto:mohamad.abras@sawrha.com"&gt;Email me&lt;/a&gt;&lt;/p&gt;
      &lt;p class="hide-for-medium-up"&gt;&lt;a href="tel:+33333333"&gt;Call me&lt;/a&gt;&lt;/p&gt;
</pre><p><a rel="external nofollow" href="http://codepen.io/anon/pen/PwWXZv">http://codepen.io/anon/pen/PwWXZv</a></p><p> </p><p>أصناف الظهور ملائمة جدًا للتحكم بالمُحتوى الكتابي، ولكنها ليست مناسبة للتحكم بالصور، فعلى الرّغم من أنّك تستطيع استخدام الصنف <code>hide-for-small-only</code> مع صورة ما، فإنّ هذه الصورة سوف تُنزّل في الخلفيّة وستُحسب تكلفة حجمها المستخدم رغم عدم ظهورها على المتصفح، قد يُغريك سهولة التعامل مع هذه الأصناف ولكن المُطوّر المُحترف سوف يتعاملُ مع هذه المُشكلة باستخدام مفهوم "التبادل" (Interchange) والذي قدّمه Foundation في الإصدار الخامس والذي سوف نتحدث عنه في الجزء الأخير من السلسلة.</p><p>مُلاحظة بإمكانك اختبار اتجاه الجهاز وشاشة اللمس باستخدام محاكي أدوات المُطوّرين الخاص بالمتصفح Chrome.</p><p style="text-align:center;"><a class="ipsAttachLink ipsAttachLink_image" rel="external nofollow" href="https://academy.hsoub.com/uploads/monthly_2015_03/google-emu.png.d8027be044df63e8df43a5c726424d72.png"><img class="ipsImage ipsImage_thumbnailed" data-fileid="149" alt="google-emu.thumb.png.49d5c305e7f6087c225" src="https://academy.hsoub.com/uploads/monthly_2015_03/google-emu.thumb.png.49d5c305e7f6087c22548c1d285b9622.png"></a></p><p>تعرفنا من خلال الجزء الثاني من السلسلة على كل ما يتعلق بالنظام الشبكي، بعد الانتهاء من هذا الجزء وتطبيق بعض الأمثلة العمليّة من المُفترض أن تكون على درايةٍ كاملةٍ بالنظام الشبكي في Foundation، وفي الجزء الثالث من السلسلة سوف نتعرف على كل ما بتعلق بنظام التنقل (navigation)، بدءًا من الشريط العلوي وانتهاءً بتجزئة المحتوى على صفحات (pagination).</p>
]]></description><guid isPermaLink="false">28</guid><pubDate>Tue, 03 Mar 2015 19:06:00 +0000</pubDate></item><item><title>&#x623;&#x633;&#x627;&#x633;&#x64A;&#x627;&#x62A; &#x625;&#x637;&#x627;&#x631; &#x639;&#x645;&#x644; Foundation: &#x645;&#x64F;&#x643;&#x648;&#x651;&#x646;&#x627;&#x62A; &#x627;&#x644;&#x62A;&#x646;&#x642;&#x651;&#x644;</title><link>https://academy.hsoub.com/programming/css/%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A7%D8%AA-%D8%A5%D8%B7%D8%A7%D8%B1-%D8%B9%D9%85%D9%84-foundation-%D9%85%D9%8F%D9%83%D9%88%D9%91%D9%86%D8%A7%D8%AA-%D8%A7%D9%84%D8%AA%D9%86%D9%82%D9%91%D9%84-r29/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2015_03/foundation_480x300.jpg.17a07405cc65778b586381c3aeeacc62.jpg" /></p>

<p>تعرّفنا على النظام الشبكي في الجزء السابق والذي هو أساس وجوهر أيّ إطار عمل ولابدّ من التعامل معه بأريحية تامّة فهو من المواضيع التي سوف تتعامل معها مع أيّ مشروع. في هذا الجزء سوف نتحدّث عن نظام التنقل الخاص بإطار العمل Foundation، من خلال التعامل مع الشريط العلوي والشريط الجانبي والتبويبات وغيره من الإضافات التي يُقدمها Foundation لتسهيل عمل المطوّر.</p><h2>التنقل Navigation</h2><h3>شريط التنقل الرئيسي والقوائم المُنسدلة Navigation Menus and Dropdowns</h3><p>الشريط العلوي من الأمور الأساسية في أي صفحة ويب، ولذلك سَهل Foundation إنشاءه، مستخدمًا JavaScript في ذلك، وجعله متجاوبًا وقدمه مع أصناف تُسهل عمل المطوّر.</p><p>يَستخدم Foundation الصنف <code>top-bar</code> مع خاصية المعلومات <code>data-topbar</code> للوسم <code>&lt;nav&gt;</code> لإنشاء الشريط، والصنف <code>top-bar</code> مسؤولٌ عن تحديدِ حجم وموقع الشريط أعلى الصفحة وإضافة خلفية سوداء له، ويتألف بناء الشريط العلوي من قائمة غير مُرتبة <code>&lt;ul&gt;</code> و قسم <code>&lt;section&gt;</code>، وتحتوي القائمة على عنصر خاص لعنوان الموقع والأصناف الخاصة بالشريط في الوضع المُصغر وهو <code>toggle-topbar</code> الذي يُخفي كلمة Menu في الوضع العادي وإظهارها في الوضع المُصغر، والصنف <code>menu-icon</code> وهو من أجل ما يُعرف برمز الهامبرغر (الخطوط الأفقية الثلاثة) في الوضع المُصغر، ولك حرية استخدامه أو حذفه.</p><p>أما القسم <code>&lt;section&gt;</code> ففيه يتم إنشاء القوائم الرئيسة والقوائم المُنسدلة، وله الصنف <code>top-bar-section</code>، والذي يُعطي عناوين القوائم اللون الأبيض، وتُنشئ القوائم عبر العنصر <code>&lt;ul&gt;</code>، ويُمكن التحكم بموضع القائمة بالصنفين <code>right</code> و<code>left</code>، وللإشارة إلى الصفحة الحالية نستخدم الصنف <code>active</code> لعناصر القائمة <code>&lt;li&gt;</code>، ويُمكن أن تحتوي كل قائمة رئيسة قائمة مُنسدلة، وكل قائمة مُنسدلة قائمة منسدلة داخلية، ولإنشاء قائمة مُنسدلة نضيف الصنف <code>has-dropdown</code> إلى القائمة الرئيسة، وذلك من شأنه أن يضيف مثلثًا صغيرًا يشير إلى أنّ القائمة مُنسدلة، ولكل قائمة مُنسدلة سوف نُضيف لها الصنف <code>dropdown</code> الذي يقوم بإخفاء العناصر <code>&lt;li&gt;</code> من العرض وإظهارها عند المرور (hover) فقط، ويمكنك الفصل بين العناصر عن طريق الصنف <code>divider</code>.</p><p>يأخذ الشريط العلوي عرض المتصفح بالكامل بشكل افتراضي، ويُستخدم الصنف <code>contain-to-grid</code> لجعل عناصر الشريط العلوي متجانسةً مع النظام الشبكي، حيث العرض هو 1000 بكسل، والصنف <code>fixed</code> يُثبت الشريط العلوي أعلى الصفحة مهما تم التدرّج إلى أسفلها.</p><p>في متجرنا لدينا الشريط العلوي مُعرف كالتالي:</p><pre class="html ipsCode prettyprint">    &lt;div class="contain-to-grid fixed"&gt;
      &lt;nav class="top-bar" data-topbar role="navigation"&gt;
        &lt;ul class="title-area"&gt;
          &lt;li class="name"&gt;
            &lt;h1&gt;&lt;a href="#"&gt;Sawrha&lt;/a&gt;&lt;/h1&gt;
          &lt;/li&gt;
          &lt;li class="toggle-topbar menu-icon"&gt;&lt;a href="#"&gt;&lt;span&gt;Menu&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
        &lt;/ul&gt;

        &lt;section class="top-bar-section"&gt;
          &lt;ul class="right"&gt; &lt;!--القوائم يمين الصفحة--&gt;
            &lt;li class="active"&gt;&lt;a href="#"&gt;Home&lt;/a&gt;&lt;/li&gt; &lt;!--الصنف "نشطّ للإشارة إلى الصفحة الحالية--&gt;
            &lt;li class="has-dropdown"&gt;
              &lt;a href="#"&gt;Pages&lt;/a&gt;
              &lt;ul class="dropdown"&gt;
                &lt;li&gt;&lt;a href="#"&gt;Regiseration&lt;/a&gt;&lt;/li&gt;
                &lt;li&gt;&lt;a href="#"&gt;Pricing&lt;/a&gt;&lt;/li&gt;
                &lt;li&gt;&lt;a href="#"&gt;Gallery&lt;/a&gt;&lt;/li&gt;
              &lt;/ul&gt;
            &lt;/li&gt;
          &lt;/ul&gt;
        &lt;/section&gt;
      &lt;/nav&gt;
    &lt;/div&gt;</pre><p>لاحظ أننا استخدمنا الصنف <code>contain-to-grid</code> لتسوية عناصر الشريط مع النظام الشبكي، والصنف <code>fixed</code> لتثبيت الشريط أعلى الصفحة بشكل دائم والفرق بين استخدام الصنف <code>contain-to-grid</code> وعدم استخدامه موضّح في الصور التالية.</p><p><a class="ipsAttachLink ipsAttachLink_image" rel="external nofollow" href="https://academy.hsoub.com/uploads/monthly_2015_03/contain-to-grid.png.63262d9d85279b04daac26f35671fe03.png"><img class="ipsImage ipsImage_thumbnailed" data-fileid="176" alt="contain-to-grid.thumb.png.c9d55789e1ecef" src="https://academy.hsoub.com/uploads/monthly_2015_03/contain-to-grid.thumb.png.c9d55789e1ecef68ca936a17dbb8463b.png"></a></p><p><a class="ipsAttachLink ipsAttachLink_image" rel="external nofollow" href="https://academy.hsoub.com/uploads/monthly_2015_03/after-contain-to-grid.png.6563d7e244e85f76ee4d8f555c27073d.png"><img class="ipsImage ipsImage_thumbnailed" data-fileid="177" alt="after-contain-to-grid.thumb.png.6f072006" src="https://academy.hsoub.com/uploads/monthly_2015_03/after-contain-to-grid.thumb.png.6f0720068d59f96328e3c5dd4e3e02b9.png"></a></p><p>الشريط كما سوف يظهر على الشاشات المتوسطة والكبيرة.</p><p><a class="ipsAttachLink ipsAttachLink_image" rel="external nofollow" href="https://academy.hsoub.com/uploads/monthly_2015_03/basic-topbar.png.c2e9ffa588b5ade151ced02acb5b3521.png"><img class="ipsImage ipsImage_thumbnailed" data-fileid="178" alt="basic-topbar.thumb.png.dee62525a3c6a0259" src="https://academy.hsoub.com/uploads/monthly_2015_03/basic-topbar.thumb.png.dee62525a3c6a0259507d069f607b30c.png"></a></p><p>يَسدل الشريط العلوي القوائم المُنسدلة عند المرور عليها (hover) بشكل افتراضي، وبإمكانك تغيير هذا السلوك عن طريق "خاصية المعلومات" <code>data-options</code> مُعطاةً القيمة <code>"is_hover: false"</code>، الذي سوف يجعل من القائمة تُنسدل بعد الضغط عليها.</p><p>يُتيح أيضًا الشريط العلوي إمكانية إضافة أزرار وعناصر إدخال <code>&lt;input&gt;</code> وذلك عبر الصنف <code>has-form</code>، ويُمكن الفصل بين العناصر باستخدام الصنف <code>divider</code>، ولإزالة الحشو (padding) بين المُدخل (input) والزر بإمكاننا استخدام الصنف <code>collapse</code>.</p><p>في متجر صوّرها سوف نضيف خانة بحث للصورة في الشريط العلوي.</p><pre class="html ipsCode prettyprint">&lt;li class="divider"&gt;&lt;/li&gt; &lt;!-- فاصل بين القوائم وخانة البحث --&gt;
&lt;li class="has-form right"&gt; &lt;!-- عنصر قائمة لخانة البحث وعلى يمين الصفحة --&gt;
&lt;div class="row collapse"&gt; &lt;!-- لإزالة المسافة بين المُدخل والزر --&gt;
  &lt;div class="large-8 small-9 columns"&gt;
    &lt;input type="text" placeholder="Find photo"&gt;
  &lt;/div&gt;
  &lt;div class="large-4 small-3 columns"&gt;
    &lt;a href="#" class="button expand"&gt;Search&lt;/a&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
</pre><p>لاحظ المسافة بين الزر وخانة البحث في حال عدم استخدامنا للصنف <code>collapse</code>.</p><p><a class="ipsAttachLink ipsAttachLink_image" rel="external nofollow" href="https://academy.hsoub.com/uploads/monthly_2015_03/collapse-class.png.3acd8c4690dd3fc06a81a2c4e9d4106e.png"><img class="ipsImage ipsImage_thumbnailed" data-fileid="179" alt="collapse-class.thumb.png.9b5d1f6886cca4d" src="https://academy.hsoub.com/uploads/monthly_2015_03/collapse-class.thumb.png.9b5d1f6886cca4d3a1c4719b90e4d336.png"></a></p><p>الفاصل بين القوائم.</p><p><a class="ipsAttachLink ipsAttachLink_image" rel="external nofollow" href="https://academy.hsoub.com/uploads/monthly_2015_03/divider.png.9ad65d0736ce3c612459af3d48c83547.png"><img class="ipsImage ipsImage_thumbnailed" data-fileid="180" alt="divider.thumb.png.ce16c21f3ee8999c395e79" src="https://academy.hsoub.com/uploads/monthly_2015_03/divider.thumb.png.ce16c21f3ee8999c395e79787227b37e.png"></a></p><p><em>مثال حي</em> <a rel="external nofollow" href="http://codepen.io/anon/pen/zxZXZw">http://codepen.io/anon/pen/zxZXZw</a> يُوضح المسافة بين الزر وخانة البحث.</p><p>الشريط العلوي بشكله النهائي سيكون كالتالي.</p><p><a class="ipsAttachLink ipsAttachLink_image" rel="external nofollow" href="https://academy.hsoub.com/uploads/monthly_2015_03/has-form.png.71afec941f10939a710e2450c98d496f.png"><img class="ipsImage ipsImage_thumbnailed" data-fileid="181" alt="has-form.thumb.png.583728f6078313fe32313" src="https://academy.hsoub.com/uploads/monthly_2015_03/has-form.thumb.png.583728f6078313fe32313b2b5fe95a13.png"></a></p><p><em>مثال حي</em> <a rel="external nofollow" href="http://codepen.io/anon/pen/OPWavB">http://codepen.io/anon/pen/OPWavB</a></p><h3>شريط التّنقل الجانبي (Side Nav)</h3><p>يُقدم Foundation الصنف <code>side-nav</code> لإنشاء "شريط تنقّل جانبي" باستخدام قائمة غير مرتبة (<code>&lt;ul&gt;</code>)، ويَستخدم Foundation هذا الشريط في <a rel="external nofollow" href="http://foundation.zurb.com/docs">التوثيق الرسمي</a> الخاص به، ويُمكنك استخدام الصنف <code>active</code> للوسم<code>&lt;li&gt;</code> للإشارة إلى الصفحة الحالية، والصنف <code>divider</code> لعمل فاصل بين القوائم.</p><pre class="html ipsCode prettyprint">   &lt;h5&gt;Categories&lt;/h5&gt;
    &lt;ul class="side-nav"&gt;
      &lt;li&gt;&lt;a href="#"&gt;Snow&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href="#"&gt;Green&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href="#"&gt;Sky&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href="#"&gt;Rainbow&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href="#"&gt;Misc&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;</pre><p><a class="ipsAttachLink ipsAttachLink_image" rel="external nofollow" href="https://academy.hsoub.com/uploads/monthly_2015_03/side-nav.png.e9a598421d04f2c82ac5fc82315d455c.png"><img data-fileid="526" class="ipsImage ipsImage_thumbnailed" alt="side-nav.thumb.png.a8c27dfc3c87b9971656e" src="https://academy.hsoub.com/uploads/monthly_2015_03/side-nav.thumb.png.a8c27dfc3c87b9971656e7e428b17e34.png"></a></p><p><em>مثال حي</em> <a rel="external nofollow" href="http://codepen.io/anon/pen/azpPBE">http://codepen.io/anon/pen/azpPBE</a></p><h3>التبويبات والتبويبات القابلة للطيّ (Tabs and Accordions)</h3><p>يُمكنك Foundation من إنشاء تبويبات أُفقية وعمودية، وهي عناصر تُساعدك على تنظيم وعرض أكثر من مُستند داخل حاوية واحدة والتبديل/التنقل فيما بينها، ولإنشاء تبويبات أفقية نستخدم عنصر قائمة وصف (<code>&lt;dl&gt;</code>) مع الصنف <code>tabs</code> والخاصية <code>data-tab</code>، ويُظهر الصنف <code>vertical</code> التبويبات بشكل عمودي، حيث أنها أفقية بشكل افتراضي. كما تدعم هذه التبويبات ميزة الربط العميق (deep linking)، والتي تُتيح لك إنشاء رابط لأحد التبويبات وتَدرّج (scroll) المتصفح إلى التبويب المُختار.</p><p>في صفحة المنتج الخاصة بمتجرنا، وبعد عرض الصورة المختارة سوف نعرض معلومات عن المُصور والتعليقات الخاصة بالصورة والتقييم الخاص بها باستخدام التبويبات الأفقية.</p><pre class="html ipsCode prettyprint">    &lt;div class="row"&gt;
      &lt;div class="large-12 columns"&gt;
        &lt;dl class="tabs" data-tab&gt; &lt;!--التبويبات سوف تكون أفقية لأننا لم نستخدم الصنف عمودي--&gt;
          &lt;dd class="active"&gt;&lt;a href="#panel1"&gt;Info&lt;/a&gt;&lt;/dd&gt; &lt;!--الصنف "نشط" للدلالة على أن هذا التبويب هو التبويب الحالي--&gt;
          &lt;dd&gt;&lt;a href="#panel2"&gt;Comments&lt;/a&gt;&lt;/dd&gt; &lt;!--ربط هذا التبويب مع المحتوى الموافق له --&gt;
          &lt;dd&gt;&lt;a href="#panel3"&gt;Rating&lt;/a&gt;&lt;/dd&gt; &lt;!--ربط هذا التبويب مع المحتوى الموافق له --&gt;
        &lt;/dl&gt;
        &lt;div class="tabs-content"&gt; &lt;!--يحتوي هذا القسم جميع محتويات التبويبات الثلاثة --&gt;
          &lt;div class="content active" id="panel1"&gt; &lt;!--التبويب الأول--&gt;
            &lt;h2&gt;About the photographer&lt;/h2&gt;
            &lt;p&gt;Mohamad Abras is the best photographer on earth.&lt;/p&gt;
            &lt;p&gt;&lt;a href="mailto:mohamad.abras@live.com"&gt;Email me&lt;/a&gt;&lt;/p&gt;
            &lt;p class="hide-for-medium-up"&gt;&lt;a href="tel:+33333333"&gt;Call me&lt;/a&gt;&lt;/p&gt;
          &lt;/div&gt;
          &lt;div class="content" id="panel2"&gt; &lt;!--التبويب الثاني--&gt;
            &lt;p&gt;Wow! Its the best photo I have ever seen.&lt;/p&gt;
          &lt;/div&gt;
          &lt;div class="content" id="panel3"&gt; &lt;!--التبويب الثالث--&gt;
            &lt;p&gt;Five star&lt;/p&gt;
          &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;</pre><p><a class="ipsAttachLink ipsAttachLink_image" rel="external nofollow" href="https://academy.hsoub.com/uploads/monthly_2015_03/tabs.png.971d478167b19f7c8c25c9d394f5cfe6.png"><img data-fileid="527" class="ipsImage ipsImage_thumbnailed" alt="tabs.thumb.png.800fb391ca02bd05ab9f14800" src="https://academy.hsoub.com/uploads/monthly_2015_03/tabs.thumb.png.800fb391ca02bd05ab9f14800b988330.png"></a></p><p>بإمكاننا تحسين النّص السابق بشكل أفضل من ذلك، حيث أنها الآن لا تسمح لك بإنشاء روابط عميقة للتبويبات، أي أنك لا تستطيع إنشاء رابط مُباشر للتعليقات الخاصة بالصورة مثلًا، والتبويب Info هو الذي سيُعرض دائمًا بعد تحميل الصفحة، ولكن بعد إضافة خاصية المعلومات <code>data-options</code> والقيمة <code>"deep_linking:true"</code>، ستتمكن من إنشاء رابط مُباشر لأحد التبويبات وفي حال كان هذا التبويب أسفل الصفحة سيقوم المتصفح بالتدرّج (scroll) إلى التبويب المُختار.</p><pre class="html ipsCode prettyprint">   &lt;dl class="tabs" data-tab data-options="deep_linking:true"&gt;</pre><p><em>مثال حي</em> <a rel="external nofollow" href="http://codepen.io/anon/pen/jEyXyq">http://codepen.io/anon/pen/jEyXyq</a></p><p>يُقدم Foundation "التبويبات القابلة للطي" (accordions) وهي تُشبه التبويبات التقليديّة (tabs)، ولكن الاختلاف بينها هو على مُستوى تجربة المُستخدم User Experience، حيث أن محتويات التبويب القابل للطيّ يجب أن تكون ضئيلة الحجم ولا تستدعي من المُستخدم النزول والصعود في المتصفح (scroll down/up) على عكس التبويبات التقليدية التي من المُمكن أن يكون المحتوى الخاص بها على طول الصفحة دون التأثير على تجربة المُستخدم، أيضًا التبويبات القابلة للطيّ مناسبة جدًا للشاشات الصغيرة وبطبيعة الحال أجهزة الهاتف المحمول، يُمكن قراءة المزيد عن الفروقات <a rel="external nofollow" href="https://ux.stackexchange.com/questions/6093/accordions-vs-tabs">هنا</a> .يَستخدم Foundation في اعداد هذه التبويبات الصنف <code>accordion</code> وخاصية المعلومات <code>data-accordion</code> مع قائمة غير مرتبة (<code>&lt;ul&gt;</code>)، والصنف <code>accordion-navigation</code> لكل عنصر من عناصر القائمة (<code>&lt;li&gt;</code>).</p><pre class="html ipsCode prettyprint">&lt;dl class="accordion" data-accordion&gt;
  &lt;dd class="accordion-navigation"&gt;
    &lt;a href="#panel1b"&gt;Accordion 1&lt;/a&gt;
    &lt;div id="panel1b" class="content active"&gt;
      ...
    &lt;/div&gt;
  &lt;/dd&gt;
  &lt;dd class="accordion-navigation"&gt;
    &lt;a href="#panel2b"&gt;Accordion 2&lt;/a&gt;
    &lt;div id="panel2b" class="content"&gt;
      ...
    &lt;/div&gt;
  &lt;/dd&gt;
  &lt;dd class="accordion-navigation"&gt;
    &lt;a href="#panel3b"&gt;Accordion 3&lt;/a&gt;
    &lt;div id="panel3b" class="content"&gt;
      ...
    &lt;/div&gt;
  &lt;/dd&gt;
&lt;/dl&gt;</pre><p><em>مثال حي</em> <a rel="external nofollow" href="http://codepen.io/anon/pen/ogZbyQ">http://codepen.io/anon/pen/ogZbyQ</a></p><h3>مسار التنقل (Breadcrumbs)</h3><p>يُستخدم "مسار التنقل" (breadcrumbs) كثيرًا في أنظمة إدارة المُحتوى مثل WordPress، وخاصةً عندما يكون تسلسل الصفحات طويلًا ومتشعبًا، ويُقدم Foundation الصنف <code>breadcrumbs</code> والذي يُضاف إلى قائمة غير مرتبة (<code>&lt;ul&gt;</code>) والصنفين <code>current</code> و<code>unavailable</code> لتحديد حالة عناصر القائمة. كما يُتيح Foundation إضافة الصنف <code>breadcrumbs</code> إلى العنصر <code>nav</code> أيضًا.</p><pre class="html ipsCode prettyprint">    &lt;ul class="breadcrumbs"&gt;
      &lt;li&gt;&lt;a href="#"&gt;Home&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href="#"&gt;Features&lt;/a&gt;&lt;/li&gt;
      &lt;li class="unavailable"&gt;&lt;a href="#"&gt;Last Photos&lt;/a&gt;&lt;/li&gt; &lt;!-- الصنف "غير مُتوفر للإشارة إلى أن المسار غير مُتوفر --&gt;
      &lt;li class="current"&gt;&lt;a href="#"&gt;High Rating&lt;/a&gt;&lt;/li&gt; &lt;!-- الصنف "الحالي" للإشارة إلى المسار الحالي --&gt;
    &lt;/ul&gt;</pre><p>سوف نحصل على نفس النتيجة في حال استخدامنا الوسم <code>&lt;nav&gt;</code></p><pre class="html ipsCode prettyprint">    &lt;nav class="breadcrumbs"&gt;
      &lt;a href="#"&gt;Home&lt;/a&gt;
      &lt;a href="#"&gt;Features&lt;/a&gt;
      &lt;a class="unavailable" href="#"&gt;Last Photos&lt;/a&gt;
      &lt;a class="current" href="#"&gt;High Rating&lt;/a&gt;
    &lt;/nav&gt;</pre><p><a class="ipsAttachLink ipsAttachLink_image" rel="external nofollow" href="https://academy.hsoub.com/uploads/monthly_2015_03/breadcrumbs.png.19d83fc3fb8808f05fb2ed5132d3bb49.png"><img class="ipsImage ipsImage_thumbnailed" data-fileid="182" alt="breadcrumbs.thumb.png.8b071546ea3ab936b1" src="https://academy.hsoub.com/uploads/monthly_2015_03/breadcrumbs.thumb.png.8b071546ea3ab936b19a7e5eaf5f8db4.png"></a></p><p> </p><h3>شريط التنقل الفرعي (Sub Nav)</h3><p>يُستخدم "شريط التنقل الفرعي" بشكل شائع مع تصفية مُحتوى، ويُنشئ باستخدام الصنف <code>sub-nav</code> مُضافًا إلى "قائمة وصف" (<code>&lt;dl&gt;</code>)، والصنف <code>active</code> للدلالة على الاختيار الحالي.</p><p>في متجرنا وفي صفحة المعرض لدينا عرض لجميع الصور المُتوفرة في المتجر، مانريده هو "شريط تنقل فرعي" لاستخدامه لتصفية الصور بناءً على المُميز منها أو الجديد وبطبيعة الحال كل الصور.</p><pre class="html ipsCode prettyprint">    &lt;div class="row"&gt;
      &lt;div class="large-12 columns"&gt;
        &lt;dl class="sub-nav"&gt;
          &lt;dt&gt;Filter:&lt;/dt&gt;
          &lt;dd&gt;&lt;a href="#"&gt;All&lt;/a&gt;&lt;/dd&gt;
          &lt;dd&gt;&lt;a href="#"&gt;New&lt;/a&gt;&lt;/dd&gt;
          &lt;dd class="active"&gt;&lt;a href="#"&gt;Feature&lt;/a&gt;&lt;/dd&gt;
        &lt;/dl&gt;
      &lt;/div&gt;
    &lt;/div&gt;</pre><h3><a class="ipsAttachLink ipsAttachLink_image" rel="external nofollow" href="https://academy.hsoub.com/uploads/monthly_2015_03/sub-nav.png.6834adbb18112a1cb9fd6bcfde1403aa.png"><img data-fileid="528" class="ipsImage ipsImage_thumbnailed" alt="sub-nav.thumb.png.141d1885093ca56041ffef" src="https://academy.hsoub.com/uploads/monthly_2015_03/sub-nav.thumb.png.141d1885093ca56041ffef72600c10ab.png"></a></h3><h3>ترقيم الصفحات (Pagination)</h3><p>يُستخدم "ترقيم الصفحات" (pagination) بشكل شائع على الرغم من انتشار تقنية AJAX والتحميل التلقائي، ويُقدم Foundation الصنف <code>pagination</code> للعنصر <code>&lt;ul&gt;</code> والصنف <code>unavailable</code> لإزالة تأثير المرور (hover) لعناصر القائمة <code>&lt;li&gt;</code> وجعلِها غير قابلة للنقر (unclickable)، أمّا الصنف <code>pagination-centered</code> فهو يُظهر "ترقيم الصفحات" في منتصف الصفحة.</p><p>بإمكاننا استخدام "ترقيم الصفحات" مع صور المعرض الخاصة بالمتجر وذلك من أجل استكشافها جميعًا.</p><pre class="html ipsCode prettyprint">    &lt;div class="row"&gt;
      &lt;div class="pagination-centered"&gt; &lt;!-- ترقيم الصفحات في المُنتصف --&gt;
        &lt;ul class="pagination"&gt;
          &lt;li class="arrow unavailable"&gt;&lt;a href=""&gt;&amp;laquo;&lt;/a&gt;&lt;/li&gt;
          &lt;li class="current"&gt;&lt;a href=""&gt;1&lt;/a&gt;&lt;/li&gt; &lt;!-- الصفحة الأولى هي الصفحة الحالية --&gt;
          &lt;li&gt;&lt;a href=""&gt;2&lt;/a&gt;&lt;/li&gt;
          &lt;li&gt;&lt;a href=""&gt;3&lt;/a&gt;&lt;/li&gt;
          &lt;li&gt;&lt;a href=""&gt;4&lt;/a&gt;&lt;/li&gt;
          &lt;li class="unavailable"&gt;&lt;a href=""&gt;&amp;hellip;&lt;/a&gt;&lt;/li&gt;
          &lt;li&gt;&lt;a href=""&gt;12&lt;/a&gt;&lt;/li&gt;
          &lt;li&gt;&lt;a href=""&gt;13&lt;/a&gt;&lt;/li&gt;
          &lt;li class="arrow"&gt;&lt;a href=""&gt;&amp;raquo;&lt;/a&gt;&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/div&gt;
    &lt;/div&gt;</pre><p><a class="ipsAttachLink ipsAttachLink_image" rel="external nofollow" href="https://academy.hsoub.com/uploads/monthly_2015_03/pagination.png.722bba11efe75405a3ded155a3f514a8.png"><img data-fileid="529" class="ipsImage ipsImage_thumbnailed" alt="pagination.thumb.png.b681617abbc197e9fb1" src="https://academy.hsoub.com/uploads/monthly_2015_03/pagination.thumb.png.b681617abbc197e9fb18b5561105ab91.png"></a></p><p><em>مثال حي</em> <a rel="external nofollow" href="http://codepen.io/anon/pen/wBJdRr">http://codepen.io/anon/pen/wBJdRr</a></p><p>وصلنا إلى نهاية الجزء الثالث والذي تعرفنا من خلاله على نظام التنقل الخاص بـFoundation، وذلك من خلال التعرف على الشريط العلوي والقوائم المُنسدلة، وشريط التنقل الفرعي والجانبي والتبويبات ومسار التنقل وأخيرًا ترقيم الصفحات، وفي الجزء الرابع من السلسلة سوف نتعرف على الأزرار والنماذج.</p>
]]></description><guid isPermaLink="false">29</guid><pubDate>Tue, 03 Mar 2015 18:53:00 +0000</pubDate></item><item><title>&#x623;&#x633;&#x627;&#x633;&#x64A;&#x627;&#x62A; &#x625;&#x637;&#x627;&#x631; &#x639;&#x645;&#x644; Foundation: &#x627;&#x644;&#x645;&#x64F;&#x642;&#x62F;&#x651;&#x645;&#x629;</title><link>https://academy.hsoub.com/programming/css/%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A7%D8%AA-%D8%A5%D8%B7%D8%A7%D8%B1-%D8%B9%D9%85%D9%84-foundation-%D8%A7%D9%84%D9%85%D9%8F%D9%82%D8%AF%D9%91%D9%85%D8%A9-r27/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2015_03/foundation_480x300.jpg.ca4df5bfa0305d8454e0335c3b96cb8c.jpg" /></p>

<h2>
	المُقدّمة
</h2>

<p>
	‏Foundation هو إطار عمل مُتجاوب (responsive) لجهة العميل (client-side)، أنشأتهُ شركة Zurb عام 2011 لتسهيل إنشاء المواقع، يُمكّنك Foundation من بناء موقعك بشكل سريع ممّا يزيد من إنتاجية التطوير، حيث يُقدم الإطار نصوص CSS جاهزة وقابلة للتعديل لتناسب أغلب المشاريع.
</p>

<p>
	تُقدم شركة Zurb حلولًا للمطوّرين بجانب إطار العمل Foundation، حيث هناك العديد من الإضافات التي تختبرها Foundation في مختبراتها والتي تطلق عليها اسم playground والتي تحتوي على خطوط الأيقونات (Icon Fonts)، وأيقونات الشبكات الاجتماعية (Social Web Icons)، والرسوم البيانية، ومخططات لإنشاء نماذج بدئيّة (prototypes)، وقوالب البريد الالكتروني، والعديد منها بإمكانك أن تجده <a href="http://zurb.com/playground" rel="external nofollow">هنا</a>، كما تُقدم شركة Zurb حزمة تطبيقات ويب <a href="http://zurb.com/apps/free-apps" rel="external nofollow">مجانية</a> و<a href="http://zurb.com/apps" rel="external nofollow">مدفوعة</a>.
</p>

<p style="text-align:center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="516" href="https://academy.hsoub.com/uploads/monthly_2015_03/playground.png.89e2d5adf01f35e3cd33a0a8c988a0ec.png" rel=""><img alt="playground.thumb.png.b68f0760e56578605de" class="ipsImage ipsImage_thumbnailed" data-fileid="516" src="https://academy.hsoub.com/uploads/monthly_2015_03/playground.thumb.png.b68f0760e56578605de72f1ac2b2909e.png"></a>
</p>

<p>
	أصبح Foundation في الإصدار الخامس أسرع وأسهل استخدامًا، وإن كنتَ قد تعاملت مع الإطار في إصداره الرابع فأنت مع الإصدار الخامس وكأنك تنظر إلى إطار مختلف تمامًا، إذ قدّم Foundation في الإصدار الخامس الكثير من التحسينات على مستوى الأداء والمظهر، فانتقل من استخدام مكتبة Zepto إلى jQuery، وهذا الانتقال من شأنه أن يقدمَ أداءً أفضل، والتحسينات طالت حتى التوثيق الرسميّ حيثُ أصبح سهل القراءة وأكثر تنظيمًا.
</p>

<p>
	يَدعم Foundation جميع المُتصفحات ما عدا IE في إصداره السابع والثامن، والصورة التّالية من التوثيق الرسميّ تُوضّح توافق الإطار مع مُختلف المُتصفحات.
</p>

<p>
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="506" href="https://academy.hsoub.com/uploads/monthly_2015_03/support.png.997d91a5888550cbfb400f9322a4cb7f.png" rel="">                       <img alt="support.thumb.png.de95407fece6e18045df29" class="ipsImage ipsImage_thumbnailed" data-fileid="506" src="https://academy.hsoub.com/uploads/monthly_2015_03/support.thumb.png.de95407fece6e18045df2921974aa142.png"></a>
</p>

<h2>
	‏Foundation أم Bootstrap؟
</h2>

<p>
	دائمًا هناك مقارنات وحروب لاختيار الأفضل وهذه المُقارنات قائمة منذ الأزل ولن يَربح بها أحد فدائمًا ما تجد أسئلة من نوع: هل متصفح فيرفُكس أفضل أم Chrome؟، هل لغة Ruby أفضل أم PHP؟ (Ruby طبعًا :))، والقائمة تطول، والإجابة تختلف من مجال لآخر، ولكنّ القاعدة العامة أنّه ما من شيء أفضل بالمُطلق، أمّا للإجابة على سؤال هل Foundation أفضل أم Bootsrap؟ فأقول: الإجابة ليست بنعم أو لا، الأفضل هو الأفضل للمشروع، ويجب على المُطوّر الاطلاع على الإطارين معًا والابتعاد عن الاعتماد المُطلق على أحدهما، فالإطاران يَملُكان شهرةً واسعةً تجعل منهما لاعبين قويّين في عالم تطوير الويب، ناهيك على أنّ الإطارين يتشابهان في الكثير من المفاهيم والأفكار، ممّا يجعل تعلّمهما أمرًا يسيرًا، ولكن تذكّر عند اختيار أيّ إطار عمل يجب على الإطار أن يملك توثيقًا رسميًا جيدًا ووجودًا قويًّا على الويب.
</p>

<p>
	إن كنت من مُحبي الأرقام، الترتيب التالي يُوضح أشهر أُطر العمل تقييمًا على موقع GitHub:
</p>

<ul>
<li>
		<p>
			<a href="https://github.com/twbs/bootstrap" rel="external nofollow">‏Bootstrap‏</a>: أكثر من 78000 نجمة.
		</p>
	</li>
	<li>
		<p>
			<a href="https://github.com/zurb/foundation" rel="external nofollow">‏Foundation‏</a>: أكثر من 19000 نجمة.
		</p>
	</li>
	<li>
		<p>
			<a href="https://github.com/semantic-org/semantic-ui" rel="external nofollow">‏Semantic UI‏</a>: أكثر من 15000 نجمة.
		</p>
	</li>
	<li>
		<p>
			‏<a href="https://github.com/yahoo/pure" rel="external nofollow">Pure‏</a>: أكثر من 10000 نجمة.
		</p>
	</li>
	<li>
		<p>
			<a href="https://github.com/dhg/skeleton" rel="external nofollow">‏Skeleton‏</a>: أكثر من 7000 نجمة.
		</p>
	</li>
	<li>
		<p>
			<a href="https://github.com/uikit/uikit" rel="external nofollow">‏UIkit‏</a>: أكثر من 4000 نجمة.
		</p>
	</li>
</ul>
<h2>
	التحميل
</h2>

<p>
	بإمكانك تحميل الإطار من <a href="http://foundation.zurb.com/develop/download.html" rel="external nofollow">هنا</a> بنسخته الكاملة أو تخصيص التحميل حسب الحاجة، في حالتنا سوف نستخدم النسخة الكاملة من الإصدار ذي الرقم 5.5.0. في حال اخترت تخصيص التحميل، وهو أمرٌ قد تفعله لتصغير حجم ملف الإطار، فعليك الانتباه عند تحميل النسخة الأحدث أن تختار ذات التخصيصات التي اخترتها سابقًا.
</p>

<p>
	في المجلد المُسمى <code>css</code> يوجد ثلاثة ملفات CSS، وهي <code>foundation.css</code> ويحتوي نسخة كاملة مقروءة من أنماط الإطار، والملف <code>foundation.min.css</code> والذي يحتوي على نسخة كاملة مُقلّصة (minified) من أنماط الإطار، حيث تم حذف جميع الفراغات والتعليقات لتصبح أصغر حجمًا، والملف الثّالث هو <code>normalize.css</code> ويُستخدم عادةً لتسوية المتصفحات على سوية واحدة، وهو ليس خاصًّا بـFoundation.
</p>

<p>
	في المجلد <code>js</code> سوف تجد ملفّ JavaScript يحمل الاسم <code>foundation.min.js</code> وهو بشكل مُقلّص، أي غير مقروء، ويحتوي كافّة خصائص الإطار، أمّا المجلد <code>foundation</code> ففيه كافّة مُحتويات المَلفّ السابق ولكن بشكل مُجزّأ، بحيث يكون لكل إضافة ملف مُستقل، وكلّ من هذه الملفّات مقروء وبإمكانك استخدام أيٍّ من هذه الملفات دون الآخر، أمّا المجلد <code>vendor</code> فيحتوي ملفات المكتبات المستخدمة في الإطار مثل مكتبة jQuery و<a href="http://www.webtuts.me/modernizr" rel="external nofollow">مكتبة Modernizr‏</a> والتي تُستخدم في استكشاف ميزات HTML5 وCSS التي يَدعمها المتصفح.
</p>

<h2>
	المتجر
</h2>

<p>
	سوف نعمل طيلة السلسلة على مشروع متجر بسيط لبيع الصور الفوتوغرافية نُسمّيه "صوّرها"، نستعرض من خلاله ميزات هذا الإطار، والميزات التي يُمكننا تطبيقها عليه، لا تتطرق السلسلة إلى أساسيات CSS ولا JavaScript، وسيقتصر التركيز الإطار نفسه.
</p>

<p>
	سنستدعي ملف الإطار والمكتبات المُساعدة في أعلى مُستند HTML في الوسم <code>&lt;head&gt;</code> بالشكل التالي:
</p>

<ul>
<li>
		الإطار مُقلّصًا، لنحصل على أصغر حجم مُمكن.
	</li>
	<li>
		ملفّ CSS الخاصّ بالتعديلات والتي سوف تكون مُستقلة عن الإطار لنُحافظ عليها في حال تحديث الإطار.
	</li>
	<li>
		ملف JavaScript الخاص بمكتبة Modernizr.
	</li>
</ul>
<p>
	سنستدعي ملفّ الإطار الكامل وبالحجم المُصغر ومكتبة jQuery في أسفل مُستند HTML، لتحميل الصفحة بشكل أسرع دون انتظار ملفات JavaScript.
</p>

<pre class="html ipsCode prettyprint">
    &lt;link rel="stylesheet" href="css/foundation.min.css"/&gt;
    &lt;link rel="stylesheet" href="css/mycss.css"/&gt;
    &lt;script src="js/vendor/modernizr.js"&gt;&lt;/script&gt;
    ...
    &lt;!--أسفل الصفحة--&gt;
    &lt;script src="js/vendor/jquery.js"&gt;&lt;/script&gt;
    &lt;script src="js/foundation.min.js"&gt;&lt;/script&gt;
    &lt;script&gt;
      $(document).foundation();
    &lt;/script&gt;</pre>

<p>
	لست مُقيدًا بتحميل كافة ملفّ الإضافات الخاصّ بـJavaScript، بل بإمكانك اختيار إضافة دون أُخرى، فلا حاجة لتحميل ملف الإطار بحجمه الكامل بل يُمكنك اختيار الإضافة التي تريدها لتناسب احتياجات الموقع.
</p>

<pre class="html ipsCode prettyprint">
    &lt;script src="/js/foundation.dropdown.js"&gt;&lt;/script&gt;
    &lt;script src="/js/foundation.tab.js"&gt;&lt;/script&gt;</pre>

<p>
	يتكوّن المتجرالذي سوف نعمل عليه خلال هذه السلسلة من خمسِ صفحات هي:
</p>

<ul>
<li>
		الصفحة الرئيسة وتحتوي على عرض بسيط لمزايا المتجر والصور الأكثر مبيعًا.
	</li>
	<li>
		صفحة المعرض التي تحتوي على عرضٍ لجميع صور المعرض.
	</li>
	<li>
		صفحة التسجيل والتي تحتوي على النماذج (forms).
	</li>
	<li>
		صفحة الخطط والأسعار والتي تحتوي على ثلاثة جداول تُمثل الخطط المتوفرة للاشتراك.
	</li>
	<li>
		صفحة المنتج وهي عبارة عن عرض للصورة المُختارة مع بيانات المُصور والتعليقات والتقييم الخاصّ بها.
	</li>
</ul>
<p>
	الهدف من المتجر هو عرض ميزات إطار العمل Foundation وليس تصميم المتجر بحد ذاته، فالمتجر مُصمّمٌ بأبسط الإمكانيات وللتوضيح فقط. سوف نستخدم متصفح Chrome طوال السلسلة ولك حريّةُ استخدام متصفحك المُفضل (أقصد Chrome :)) والصور التّالية هي لبعض الصفحات التي سوف نحصل عليها بعد انتهاء السلسلة.
</p>

<p>
	                                                                <a class="ipsAttachLink ipsAttachLink_image" data-fileid="138" href="https://academy.hsoub.com/uploads/monthly_2015_03/main-page.png.cdf956be63663de4a6d5ffcb97b19c21.png" rel=""><img alt="main-page.thumb.png.5b168c3785873525b624" class="ipsImage ipsImage_thumbnailed" data-fileid="138" src="https://academy.hsoub.com/uploads/monthly_2015_03/main-page.thumb.png.5b168c3785873525b62411b52f94cce2.png"></a>
</p>

<p>
	                                                          <a class="ipsAttachLink ipsAttachLink_image" data-fileid="140" href="https://academy.hsoub.com/uploads/monthly_2015_03/gallery-page.png.20389762151b077d18097abaa1c7e61e.png" rel=""><img alt="gallery-page.thumb.png.68cbe35447c85d2a9" class="ipsImage ipsImage_thumbnailed" data-fileid="140" src="https://academy.hsoub.com/uploads/monthly_2015_03/gallery-page.thumb.png.68cbe35447c85d2a98eab7ebe36e96fa.png"></a>
</p>

<p>
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="517" href="https://academy.hsoub.com/uploads/monthly_2015_03/registration-page.png.a9b8fd531c0a1b667b01b061e9a5d4c9.png" rel=""><img alt="registration-page.thumb.png.780f72f2e9bb" class="ipsImage ipsImage_thumbnailed" data-fileid="517" src="https://academy.hsoub.com/uploads/monthly_2015_03/registration-page.thumb.png.780f72f2e9bb87b835002baf943c03ab.png"></a>
</p>

<p>
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="518" href="https://academy.hsoub.com/uploads/monthly_2015_03/pricing-page.png.23027c797e6a50e379246efd81113fa8.png" rel=""><img alt="pricing-page.thumb.png.443d0b72f95b5231c" class="ipsImage ipsImage_thumbnailed" data-fileid="518" src="https://academy.hsoub.com/uploads/monthly_2015_03/pricing-page.thumb.png.443d0b72f95b5231cb075fb462680a0f.png"></a>
</p>

<p>
	                                               <a class="ipsAttachLink ipsAttachLink_image" data-fileid="519" href="https://academy.hsoub.com/uploads/monthly_2015_03/product-page.png.91ffe0185856611f53a37fcbcea9fac8.png" rel=""><img alt="product-page.thumb.png.27a41854510f4c6a7" class="ipsImage ipsImage_thumbnailed" data-fileid="519" src="https://academy.hsoub.com/uploads/monthly_2015_03/product-page.thumb.png.27a41854510f4c6a71fd774e6e9a3d07.png"></a>
</p>

<p>
	تعرّفنا من خلال هذه المُقدمة البسيطة على إطار العمل Foundation بشكل عام، ولما عليك اختياره، وشرحنا التحميل وطريقة الإعداد، وأخذنا فكرة عامّة عن المتجر الذي سوف نتعامل معه طيلة السلسلة. في المقالة الثّانية سوف نبدأ بالدخول في التفاصيل والشرح الفعليّ لميزات الإطار، وسوف نبدأ بالنظام الشبكي وكل ما يتعلق به وكيفيّة التطبيق على متجرنا مع عرضٍ للأمثلة من شيفرةٍ برمجية وصورٍ توضيحية.
</p>

<p>
	 
</p>
]]></description><guid isPermaLink="false">27</guid><pubDate>Tue, 03 Mar 2015 18:50:00 +0000</pubDate></item><item><title>Symbol Fonts: &#x62A;&#x639;&#x631;&#x641; &#x639;&#x644;&#x649; &#x62E;&#x637;&#x648;&#x637; &#x627;&#x644;&#x623;&#x64A;&#x642;&#x648;&#x646;&#x627;&#x62A;&#x60C; &#x627;&#x633;&#x62A;&#x639;&#x645;&#x627;&#x644;&#x627;&#x62A;&#x647;&#x627;&#x60C; &#x645;&#x627; &#x644;&#x647;&#x627; &#x648;&#x645;&#x627; &#x639;&#x644;&#x64A;&#x647;&#x627;</title><link>https://academy.hsoub.com/programming/css/symbol-fonts-%D8%AA%D8%B9%D8%B1%D9%81-%D8%B9%D9%84%D9%89-%D8%AE%D8%B7%D9%88%D8%B7-%D8%A7%D9%84%D8%A3%D9%8A%D9%82%D9%88%D9%86%D8%A7%D8%AA%D8%8C-%D8%A7%D8%B3%D8%AA%D8%B9%D9%85%D8%A7%D9%84%D8%A7%D8%AA%D9%87%D8%A7%D8%8C-%D9%85%D8%A7-%D9%84%D9%87%D8%A7-%D9%88%D9%85%D8%A7-%D8%B9%D9%84%D9%8A%D9%87%D8%A7-r9/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2015_03/ZURB-Foundation-Icon-Fonts.png.59eeb65494ff35bf3c49db0d15bf65d5.png" /></p>

<p dir="rtl">تحسين أداء المواقع التي نقوم بتصميمها هي عملية مُستمرة، بداية تخلصنا من الجداول، من صور spacer gifs ومن إضافة الأنماط بشكل مُباشرة إلى الصفحات، حيث أننا تخصلنا مثلا من استعمال الوسم &lt;font&gt; وتحويل ما يُمكن تحويله إلى ملفات CSS، كما أننا قلصنا أحجام صفحاتها وفصلنا ما بين الصفحة وما بين أنماط ظهور مُكوناتها. وبعد ذلك أولينا اهتماما بطلبات DNS، وبالتخزين المؤقت caching وبالعدد الكلي للملفات وهو ما نتج عنه استخدام تقنية CSS sprites وذلك عبر تجميع مجموعات من الصور الصغيرة في ملفات مُشتركة.</p><p dir="rtl">بعد أن استغلينا التقنيات السابقة إلى أقصى حدودها، حان الوقت الآن للولوج إلى عصر جديد من تحسين أداء مواقعنا: خطوط الأيقونات symbol fonts.</p><p dir="rtl">استخدام خطوط الأيقونات يسمح لنا بنقل تلك الصور الصغيرة التي نستعملها على مواقعنا إلى ملف خاص بالخطوط بدل استخدام خاصية CSS sprite وهو أمر له إيجابيات عديدة، خاصة لما يتعلق الأمر باستعراض هذه المواقع على شاشات عالية الدقة. سنستعرض في هذا المقال جُملة من إيجابيات خطوط الأيقونات وبعض المشاكل التي يُمكن أن تواجهك لدى استخدامك لها.</p><div><dl><dt style="text-align:center;"><a class="ipsAttachLink ipsAttachLink_image" rel="external nofollow" href="https://academy.hsoub.com/uploads/monthly_2015_02/ZURB-Foundation-Icon-Fonts.png.a4a772e4e69f1a0b9865928b7e115c95.png"><img class="ipsImage ipsImage_thumbnailed" data-fileid="10" alt="ZURB-Foundation-Icon-Fonts.thumb.png.3f7" src="https://academy.hsoub.com/uploads/monthly_2015_02/ZURB-Foundation-Icon-Fonts.thumb.png.3f72dfbbcf8c625ddab787ad2789a933.png"></a></dt><dd>مجموعة من أيقونات خط Foundation Icon Fonts</dd></dl></div><h1>تفاصيل أكثر دقة وتصفح أنعم</h1><p dir="rtl">بحكم أن الخطوط التي تم تصميمها للاستعمال كأيقونات، رموز أو كزخارف في تزايد مُستمر فإن العديد من المواقع الرائدة على الإنترنت شرعت في استبدال الصور التي تستخدمها بهذه الخطوط. أحد أفضل الأمثلة على ذلك هو موقع Github والذي استطاع تحسين سرعة الموقع وتوفير تجربة استخدام أفضل للزوار عبر التخلص من كل الأيقونات الصغيرة التي كان يستخدمها واستبدالها بخط <a rel="external nofollow" href="https://github.com/blog/1106-say-hello-to-octicons">Octicons</a> كبديل عنها.</p><p dir="rtl">أحد أهم الدوافع وراء التخلص من الأيقونات الصغيرة واستبدالها بخطوط الأيقونات هو التخلص من تلك الصور ذات الملامح "الخشنة" والتي تزداد خشونة وسوءًا لدى تكبيرها، برموز خطوط تُحافظ على نفس الشكل الناعم والسلس مهما تم تغيير حجم الأيقونة، حيث أن الأيقونات الرسومية مُصممة لتعمل في أبهى حُلة لها لدى استخدام دقة شاشة مُعينة، ويظهر الإشكال واضحا مع الشاشات عالية الدقة التي شهدت انتشارا في السنوات القليلة الماضية، حيث أن مُحاولة تكبير تلك الأيقونات لتتوافق معها تجعلها تظهر بشكل مُتدرج الحواف.</p><p dir="rtl">استخدام وتضمين الرسوم المُوجهة vector graphics في صفحات HTML كان محدودًا فيما سبق. صحيح بأنه بإمكان القيام بذلك عبر PDF وSVG لكن استخدامهما يُسبب عادة مشاكل في التوافقية ما بين المُتصفحات، وبحكم أن الخطوط عبارة عن رسوميات مُوجهة vector وكل المُتصفحات بما فيها IE6 تدعم إمكانية تصيير خُطوط مُضمنة في صفحات HTML فإنه بالإمكان الاعتماد عليها لتوفير أشكال عالية الجودة تكون مدعومة على جميع المُتصفحات، وهو أمر فتح المجال لنا لنمضي قدما في تحسين مواقعنا بشكل أفضل وتوفير تجربة استخدام أرقى للمُستخدم.</p><h1>قابلية الوصول</h1><p dir="rtl">لما يتعلق الأمر بقابلية الوصول فإنه من المُمكن أن تكون خطوط الأيقونات بنفس سوء الصور أو بنفس الأداء العالي للنصوص حسب طريقة استخدامها.</p><p dir="rtl">العديد من خطوط الأيقونات الأولى التي شُرع في استخدامها كانت تقوم بالربط ما بين أشكالها وبعض حروف ASCII. فعلى سبيل المثال لدى الضغط على مفتاح w ستظهر صورة مُصغرة للكرة الأرضية ولدى الضغط على مفتاح m يظهر ظرف رسالة. هذا الأمر سهل من معرفة أي رمز يُمثل أي شكل وذلك بمُجرد الضغط على ذلك الزر على لوحة المفاتيح. لكن مشاكل هذه التقنية تظهر بُمجرد أن تفشل الصفحة في تحميل ملف الخطوط حيث ينتهي بنا المطاف مع صفحة تحتوي حروفا في أماكن مُتفرقة من الصفحة لا تحمل أية دلالة أو معنى. فعلى سبيل المقال لو كان الخط الذي تستخدمه يهدف إلى إظهار سهم صغير أمام عبارة Next فإنه من المُحتمل أن تستعمله على النحو التالي:</p><pre class="html ipsCode prettyprint">&lt;div&gt;&lt;span class="icon"&gt;L&lt;/span&gt; Next&lt;/div&gt;</pre><p>لكن لو فشلت الصفحة في تحميل ملفات CSS، JavaScript أو ملف الخطوط فإن ما سيظهر على الصفحة هو حرف L بدل ذلك السهم. حتى ولو وجدت طريقة ما باستخدام JavaScript وCSS (بفضل :before و:after) لإظهار السهم على النحو الذي تريده فإن عناكب مُحركات البحث ستعجز عن فهم ذلك وستظل تُؤرشف مُحتوى صفحتك على الشكل "L Next”، وهو أمر لن ترغب فيه.</p><p dir="rtl">لكن هناك حل أفضل من الحل السابق. مرت خطوط الأيقونات بعدة مراحل عرفت خلالها مشاكل مُختلفة مكّنتها من الوصول إلى مرحلة نُضج مُتقدمة استطاعت بفضلها حل هذه المشاكل عبر استخدام محارف Unicode ذات استخدام خاص يُطلق عليها اسم <a rel="external nofollow" href="http://en.wikipedia.org/wiki/Private_Use_%28Unicode%29">Private Use Areas</a> حيث أن محارف هذه المناطق الخاصة لا تملك أية دلالية، كما أنها لا تملك أية صلة بحروف مُختلف الأبجديات. إذا لم يتم تحميل الخط الذي يستخدم هذه المحارف فإنما سيظهر هو مربعات فارغة بدل حروف.</p><p dir="rtl">سأزيدك من الشعر بيتا، بإمكاننا تحسين هذه التقنية أكثر. تملك الخطوط عادة محارف خاصة يُطلق عليها اسم <a rel="external nofollow" href="http://en.wikipedia.org/wiki/Typographic_ligature">ligatures</a>، هذه المحارف التي يندر أن تلمحها العين غير المُدربة بشكل جيد، تُستعمل لربط حرفين مُختلفين في حرف واحد لتسهيل قراءتهما. فعلى سبيل المثال لو كتبت حرفي f متتاليين فإنه من المُحتمل جدا – لو كنت تستخدم خطا عالي الجودة- أن تظهر على هيئة حرف ff واحد يربط ما بين الحرفين بلمسة جمالية. هناك عدة محارف مُدمجة شائعة مثل ff، fl أو fi إلا أنه لا يوجد ما يمنعك من إضافة محارفك الخاصة بك، حيث أنه من المُمكن إضافة ذلك في ملف الخط الخاص بك وبمُجرد أن تتم كتابة تلك الحروف بالترتيب الذي ترغب فيه يتم استبدالها بمحرفك الخاص، حتى أنه يُمكنك إضافة محرف جديد يُظهر شعار موقعك لدى كتابتك لجملة أو كلمة متعددة الحروف (كـ webtuts.me مثلا).</p><p dir="rtl">ما الذي يحدث في هذه الحالة؟ المُتصفحات التي لا تقدر على استظهار المحارف المُدمجة -ونقصد بذلك عناكب مُحركات البحث- ستقوم بأرشفة النص غير المُدمج (اسم موقعك في المثال السابق). أما المُتصفحات التي تقدر على ذلك فستقوم بإظهار الشكل المُوجه الذي قمت بتحديده (شعار موقعك مثلا)، وبالتالي فإننا حللنا المشكل السابق باستخدام أفضل ما يوجد في كلا العالمين (عالم المُتصفحات وعالم عناكب مُحركات البحث) بفضل تقنيات أعلى مما يُمكن القيام به بُمجرد HTML وCSS لوحدهما.</p><p dir="rtl">بُمجرد أن تفهم آلية عمل الحروف المُدمجة سيُفتح أمامك باب واسع من الخيارات اللامُتناهية. يُمكنك تضمين كل الأيقونات التي ترغب فيها والتي لا تُمثلها محارف فردية وإنما محارف مُدمجة. فعلى سبيل المثال يُمكن أن تُصبح شفرتك على النحو التالي:</p><pre class="html ipsCode prettyprint">&lt;ul&gt;
   &lt;li&gt;Home&lt;/li&gt;
   &lt;li&gt;Contact&lt;/li&gt;
   &lt;li&gt;About&lt;/li&gt;
   &lt;li&gt;Cart&lt;/li&gt;
&lt;/ul&gt;</pre><p dir="rtl">في حين ستكون النتيجة التي تظهر على النحو التالي:</p><p style="text-align:center;" dir="rtl"><a class="ipsAttachLink ipsAttachLink_image" rel="external nofollow" href="https://academy.hsoub.com/uploads/monthly_2015_02/glyphs.png.1c0b6e5523fd5a0b8d8ebfed7bcb8954.png"><img class="ipsImage ipsImage_thumbnailed" data-fileid="11" alt="glyphs.thumb.png.1574a337afcca08fb637500" src="https://academy.hsoub.com/uploads/monthly_2015_02/glyphs.thumb.png.1574a337afcca08fb6375002c98ed647.png"></a></p><p dir="rtl">أمضى موقع <a rel="external nofollow" href="http://symbolset.com/">Symbolset</a> الكثير من الوقت في إجراء تجارب على المحارف المُدمجة ما مكنه من تصميم مجموعات مُختلفة من الأيقونات شائعة الاستعمال التي يُمكن شراؤها واستخدامها على موقعك. يُمكن تجربة تلك الأيقونات مُباشرة على نفس الموقع، حيث يكفي أن تكتب بعض الكلمات وبُمجرد أن تفرغ من ذلك تتحول بشكل لحظي إلى أيقونات. ستعجب للكم الهائل من الاحتمالات التي تضعها خاصية دمج المحارف بين يديك.</p><p dir="rtl">لاستخدام المحارف المُدمجة التي تُستبدل بأيقونات وأشكال عدة استعمالات مُفيدة، فعلى سبيل المثال على موقع شبكة BBC الإخباري كانت تُستخدم <a rel="external nofollow" href="http://www.bbc.co.uk/blogs/webdeveloper/2010/04/good-news-the-clock-has.shtml">ساعة</a> تفاعلية في إحدى زوايا الصفحة الرئيسية. كان بإمكان استخدام Flash لتصميم تلك الساعة أو الاستعانة بـ CSS لإدارة صورة الساعة للحصول على التوقيت المُناسب وتوقيت عمليات التدوير بشيء من JavaScript، لكن خيار BBC وقع على HTML5 وتم استخدام Canvas و JavaScript لتتم إعادة رسم الساعة بشكل مُستمر.</p><p dir="rtl">كلا الحلين السابقين يعتمدان على صور لا يُمكن لها أن تظهر بشكل جيد على شاشات عالية الدقة. كان بالإمكان أيضا استخدام بعض مكتبات JavaScript مثل مكتبة Raphaeljs والتي ستقوم بإنشاء رسوميات SVG أو كائنات VML جميلة ومُوجهة، لكن بحكم أن كامل العملية سنتم عبر JavaScript فإن ذلك سيمنع مُحركات البحث والمُتصفحات التي لا تستخدم Javascript من رؤيتها.</p><p style="text-align:center;" dir="rtl"><a class="ipsAttachLink ipsAttachLink_image" rel="external nofollow" href="https://academy.hsoub.com/uploads/monthly_2015_02/clock.png.58ba57561332f4f04b73e82ae8720fb9.png"><img class="ipsImage ipsImage_thumbnailed" data-fileid="12" alt="clock.thumb.png.87a441290dd357c5de27ed6d" src="https://academy.hsoub.com/uploads/monthly_2015_02/clock.thumb.png.87a441290dd357c5de27ed6d3c7041a7.png"></a></p><p dir="rtl">لكن استخدام خطوط الأيقونات كان من شأنه أن يُعطي نتائج أفضل في كلا العالمين: قابلية الوصول وجودة الرسوم. فعلى سبيل المثال يُمكن تصميم خط بمُجرد أن نكتب 12:00 تظهر صورة ساعة تُشير إلى هذا الوقت، وكتابة 12:01 ستُظهر صورة أخرى مُختلفة وهكذا دواليك. بالرغم من أن هذه العملية طويلة وشاقة إلا أن نتائجها ستكون أفضل بكثير، بل هناك بعض الخطوط التي تقوم بتوفير <a rel="external nofollow" href="http://timepiece.inostudio.de/">ساعات مُماثلة</a>. قم بزيارة هذا الموقع وألق نظرة على الشفرة المصدرية وستُبهر ببساطتها.</p><p dir="rtl">فكر في كامل التفاصيل الدقيقة في صفحات الوَب التي تُصممها والتي يُمكنك أن تفعلها باستخدام خطوط الأيقونات، تفاصيل يُمكن أن تتراوح ما بين رؤوس القوائم والأسهم من جهة وما بين أيقونات الشبكات الاجتماعية من جهة أخرى، يُمكن جمع كل ذلك في ملف خطوط واحد قابلة للتصغير وللتكبير وللاستخدام على مُختلف الشاشات ومن دون الحاجة إلى ملفات صُور مُتعددة.</p><h1>إنشاء خط الأيقونات الخاص بك</h1><p dir="rtl">يعاني الكثير من المصممين و المطورين الأمرّين مع تطبيقات التصميم مثيلات Photoshop وfireworks. إن كان الانتقال إلى CSS sprites بسيطا بحكم أنه يتم استخدام نفس الأدوات المُتوفرة في حوزة المُطور للقيام بذلك فإن الأمر سيحتاج إلى خطوة إضافية مع الخطوط وذلك راجع إلى الحاجة إلى تطبيق خاص بتحرير الخطوط.</p><p dir="rtl">هذه التطبيقات ليست مُعقدة الاستعمال كثيرا، بل هناك من الخدمات من يسعى لجعل العملية في مُنتهى السهولة مثلما هو عليه الحال مع <a rel="external nofollow" href="http://icomoon.io/">Icomoon</a> حيث يكفي أن تقوم برفع ملفات SVG الخاصة بأيقوناتك، ربط تلك الأيقونات بمحارف unicode ومن ثم تصدير الخط، كل هذا مُباشرة من خلال مُتصفحك.</p><p dir="rtl">ماذا لو أردت مزيدا من التحكم في الخط؟ هناك عدة أدوات مُتوفرة للقيام بذلك، بعضها تِجاري وبعضها مُتوفر بشكل مجاني مثل تطبيق <a rel="external nofollow" href="http://fontforge.org/">FontForge</a>. قد يكون هذا التطبيق صعب المراس، لكن يُمكن للباحث إيجاد العديد من الدروس التي ستساعده على ترويضه.</p><h1>مشاكل قد تُواجهك لدى استخدام خطوط الأيقونات</h1><p dir="rtl">سيخبرك أي مُصمم بارع بأن أي شعار أو أيقونة ستظهر بشكل مُختلف كلما اختلف حجمها، سواء تم استخدام خط أنحف أو أصغر أو حتى تم إهمال بعض التفاصيل الفرعية هنا وهناك. مع خطوط الأيقونات لا يُمكن القيام بذلك حيث أنه لا يُمكنك توفير تصاميم تختلف باختلاف حجم الخط المُستعمل. الأيقونة التي تُصممها ستظهر بنفس الشكل سواء كنت تستخدم حجم الخط 20 نقطة، 120 نقطة أو حتى 6 نقاط فقط.</p><p dir="rtl">إذا كنت ترغب في الحصول على أشكال مُختلفة لنفس الأيقونة فما عليك سوى نسخها أكثر من مرة وربطها مع أكثر من مُحرف مُختلف، لكن بالرغم من ذلك فإنه يصعب عليك معرفة الطريقة التي ستظهر فيها الأيقونة للمُستخدم أو حجم الخط الذي سيستخدمه، فتكبير الخط أو تصغيره لن يُغير من شكل المحرف وبالتالي سيظهر على نفس الشكل لكن بحجم مُختلف. هذه الحيثية لن تُسبب مُشكلا في أغلب الحالات بحكم أن الأيقونات التي نستعملها حاليا (مثل أيقونات الشبكات الاجتماعية) لا تحتاج فعلا إلى إدخال تغييرات عليها لدى تغيير حجمها.</p><p dir="rtl">المُشكل الآخر الذي ستواجهه لدى استخدامك لخطوط الأيقونات هو توفر تلك الأيقونات بلون واحد فقط. يُمكنك عمل أيقونات بلونين مُختلفين عبر التحكم في لون الخلفية عن طريق CSS لكن لو احتوى شعارك على أكثر من لونين فإن هذه الخطوط لن تسمح لك بالقيام بذلك.</p><p dir="rtl">لمُواجهة هذا الإشكال اقترحت Apple خطوطا مُتعددة الألوان وهو ما سيسمح بإنشاء رسوم مُوجهة مُتعددة الألوان وإظهارها على صفحات الويب مثلما هو عليه الحال مع خط <a rel="external nofollow" href="http://en.wikipedia.org/wiki/Apple_Color_Emoji">Apple Color Emoji</a> المُتوفر على نظام OSX Lion، إلا أن هذا الحل يبقى محدودا جدًا بحكم أن توفير خط مُتعدد الألوان يحتاج إلى دعم المُتصفحات له كما سنحتاج إلى أدوات جديد لإنشائها وهو ما سيُؤخر من أية جهود تسعى لتعميم هذه الخطوط الجديدة.</p><h1>أهلا بكم في عصر جديد</h1><p dir="rtl">خطوط الأيقونات هي الخطوة القادمة لتحسين أداء وتصميم مواقعنا وتحتاج إلى فهم مبدأ عملها إن أردت استخدامها في مشاريعك. لن تحتاج سوى إلى بعض ٍمن التدريب لتتمكن من إنشاء خطك الخاص الذي يُمكنك من جمع كامل أيقوناتك وشعاراتك في ملف خط واحد لتضمينه في موقعك. لن تساعدك هذه الخطوط على إبهار زوار موقعك فحسب وإنما ستزيد من أدائه وسرعته. حان الوقت لنا جميعا لنشرع في استخدام هذه الخطوط وللمساعدة في تحسين أداء الأدوات التي تقوم بإنشائها، والمعايير التي تحكم ذلك والتقنيات المُتبعة خلال هذه العملية.</p><p dir="rtl">ترجمة -وبتصرف- للمقال: <a rel="external nofollow" href="http://alistapart.com/article/the-era-of-symbol-fonts">The Era of Symbol Fonts</a> لصاحبه <a rel="external nofollow" href="http://suda.co.uk/">Brian Suda</a> (بموافقة من موقع <a rel="external nofollow" href="http://www.alistapart.com/">A List Apart</a> وكاتب المقال).</p>
]]></description><guid isPermaLink="false">9</guid><pubDate>Sat, 07 Dec 2013 17:37:00 +0000</pubDate></item></channel></rss>
