<?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/9/?d=2</link><description>&#x627;&#x644;&#x628;&#x631;&#x645;&#x62C;&#x629;: CSS</description><language>ar</language><item><title>&#x643;&#x64A;&#x641;&#x64A;&#x629; &#x625;&#x646;&#x634;&#x627;&#x621; &#x645;&#x639;&#x631;&#x636; &#x635;&#x648;&#x631; &#x628;&#x627;&#x633;&#x62A;&#x62E;&#x62F;&#x627;&#x645; CSS &#x641;&#x642;&#x637;</title><link>https://academy.hsoub.com/programming/css/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%A5%D9%86%D8%B4%D8%A7%D8%A1-%D9%85%D8%B9%D8%B1%D8%B6-%D8%B5%D9%88%D8%B1-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-css-%D9%81%D9%82%D8%B7-r154/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2015_08/css-gallery.jpg.aa26c9743d1ea2c7384fda61fae08ae8.jpg" /></p>

<p>
	عند قيامك بتطبيق خصائص ‏CSS‏ المتعددة بشكل مرتب، سينتج لديك أشكال ومناظر ساحرة، خصوصًا إذا ‏كان مضافًا إليها بعض من الحِيَل ‏CSS3 Tricks‏. دعنا نلق نظرة على معرض الصور الفورية (‏Polaroid‏) ‏بتنسيق ‏CSS‏ خالص. (‏Polaroid‏ تعني الصور التي تستطيع التقاطها واستخراجها على هيئة بطاقة مباشرة ‏من الكاميرات الفورية).‏
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2015_08/css-gallery.jpg.cb68afeb39d254f23896e52ac34192b7.jpg" data-fileid="4266" rel=""><img alt="css-gallery.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="4266" src="https://academy.hsoub.com/uploads/monthly_2015_08/css-gallery.thumb.jpg.be796a5ace5412d60224a38c5425c489.jpg"></a>
</p>

<p>
	سنستخدم في هذا الدرس عدة خصائص من ‏CSS3‎‏، للأسف، فإن بعض ‏التأثيرات لن تظهر على متصفح الإنترنت إكسبلورر، بينما ستظهر كاملة على المتصفحات الأخرى مثل ‏FireFox‏ ‏وSafari‏. سنقوم باستخدام أساسيات ‏CSS‏ لتنسيق الصور، ومن ثم إدراج بعض التأثيرات الإضافية مثل الظل ‏والاستدارة، وبعدها نستخدم خاصية <span style="font-family:courier new,courier,monospace;">‏z-index</span>‏ لإرسال العناصر إلى الأمام لتبدو ظاهرة للمستخدمين.‏
</p>

<h2>
	تحضير الصور
</h2>

<p>
	لنبدأ العمل بتحديد مسارات الصور التي ترغب في وضعها، قمنا في درسنا هذا بجلب عدد من الصور الجميلة من ‏موقع ‏Flickr‎‏: ‏
</p>

<ul>
<li>
		<a href="http://www.flickr.com/photos/claudio_ar/2214532638/" rel="external nofollow">Iguassu Falls 006 by claudio</a>
	</li>
	<li>
		<a href="http://www.flickr.com/photos/galego/3131005845/" rel="external nofollow">Sweet Home Under White Clouds by galego</a>
	</li>
	<li>
		<a href="http://www.flickr.com/photos/claudio_ar/1810490865/" rel="external nofollow">Sunset over the highway by claudio</a>
	</li>
	<li>
		<a href="http://www.flickr.com/photos/claudio_ar/2952099761/" rel="external nofollow">Skies and fields from Argentina’s pampa 7 by claudio</a>
	</li>
	<li>
		<a href="http://www.flickr.com/photos/claudio_ar/2811295698/" rel="external nofollow">Sunrise by claudio</a>
	</li>
	<li>
		<a href="http://www.flickr.com/photos/claudio_ar/2601700491/" rel="external nofollow">Södermanland Lake by claudio</a>
	</li>
</ul>
<h2>
	بنية الصفحة
</h2>

<p>
	ننتقل إلى الخطوة التالية، نشرع في إعداد بُنية الصفحة بوضع ‏<span style="font-family:courier new,courier,monospace;">Container‏</span> وسط الصفحة (‏<span style="font-family:courier new,courier,monospace;">Container‏</span> ‏هو العنصر الذي سيكون داخله باقي عناصر المشروع، تمامًا مثل الأب). 
</p>

<p>
	<span style="line-height: 22.3999996185303px;">قم بإدراج مجموعة الصور في قائمة عناصر ‏‎ul‎، وأرفق بكل صورة محور عنصر لإنشاء رابط لها. لا تنس أن ‏تقوم بإضافة وصف مناسب لكل صورة:</span>
</p>

<pre class="html ipsCode prettyprint prettyprinted" data-pbcklang="html" data-pbcktabsize="4">
<span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"container"</span><span class="tag">&gt;</span><span class="pln">
</span><span class="tag">&lt;ul</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"gallery"</span><span class="tag">&gt;</span><span class="pln"> 
    </span><span class="tag">&lt;li&gt;</span><span class="pln">
        </span><span class="tag">&lt;a</span><span class="pln"> </span><span class="atn">href</span><span class="pun">=</span><span class="atv">"http://www.flickr.com/photos/claudio_ar/2214532638/"</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"pic-1"</span><span class="tag">&gt;&lt;img</span><span class="pln"> </span><span class="atn">src</span><span class="pun">=</span><span class="atv">"images/1.jpg"</span><span class="pln"> </span><span class="atn">alt</span><span class="pun">=</span><span class="atv">"Photograph of a waterfall"</span><span class="pln"> </span><span class="tag">/&gt;&lt;/a&gt;</span><span class="pln">
    </span><span class="tag">&lt;/li&gt;</span><span class="pln"> 
    </span><span class="tag">&lt;li&gt;</span><span class="pln">
        </span><span class="tag">&lt;a</span><span class="pln"> </span><span class="atn">href</span><span class="pun">=</span><span class="atv">"http://www.flickr.com/photos/galego/3131005845/"</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"pic-2"</span><span class="tag">&gt;&lt;img</span><span class="pln"> </span><span class="atn">src</span><span class="pun">=</span><span class="atv">"images/2.jpg"</span><span class="pln"> </span><span class="atn">alt</span><span class="pun">=</span><span class="atv">"Photograph of clouds and sunlight"</span><span class="pln"> </span><span class="tag">/&gt;&lt;/a&gt;</span><span class="pln">
    </span><span class="tag">&lt;/li&gt;</span><span class="pln"> 
    </span><span class="tag">&lt;li&gt;</span><span class="pln">
        </span><span class="tag">&lt;a</span><span class="pln"> </span><span class="atn">href</span><span class="pun">=</span><span class="atv">"http://www.flickr.com/photos/claudio_ar/1810490865/"</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"pic-3"</span><span class="tag">&gt;&lt;img</span><span class="pln"> </span><span class="atn">src</span><span class="pun">=</span><span class="atv">"images/3.jpg"</span><span class="pln"> </span><span class="atn">alt</span><span class="pun">=</span><span class="atv">"Photograph of a lake scene at dusk"</span><span class="pln"> </span><span class="tag">/&gt;&lt;/a&gt;</span><span class="pln">
    </span><span class="tag">&lt;/li&gt;</span><span class="pln"> 
    </span><span class="tag">&lt;li&gt;</span><span class="pln">
        </span><span class="tag">&lt;a</span><span class="pln"> </span><span class="atn">href</span><span class="pun">=</span><span class="atv">"http://www.flickr.com/photos/claudio_ar/2811295698/"</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"pic-4"</span><span class="tag">&gt;&lt;img</span><span class="pln"> </span><span class="atn">src</span><span class="pun">=</span><span class="atv">"images/4.jpg"</span><span class="pln"> </span><span class="atn">alt</span><span class="pun">=</span><span class="atv">"Photograph of a tree and green grass"</span><span class="pln"> </span><span class="tag">/&gt;&lt;/a&gt;</span><span class="pln">
    </span><span class="tag">&lt;/li&gt;</span><span class="pln"> 
    </span><span class="tag">&lt;li&gt;</span><span class="pln">
        </span><span class="tag">&lt;a</span><span class="pln"> </span><span class="atn">href</span><span class="pun">=</span><span class="atv">"http://www.flickr.com/photos/claudio_ar/2811295698/"</span><span class="pln"> </span><span class="atn">class</span><span class="pln"> </span><span class="pun">=</span><span class="atv">"pic-5"</span><span class="tag">&gt;&lt;img</span><span class="pln"> </span><span class="atn">src</span><span class="pun">=</span><span class="atv">"images/5.jpg"</span><span class="pln"> </span><span class="atn">alt</span><span class="pun">=</span><span class="atv">"Photograph of a beach sunset"</span><span class="pln"> </span><span class="tag">/&gt;&lt;/a&gt;</span><span class="pln">
    </span><span class="tag">&lt;/li&gt;</span><span class="pln"> 
    </span><span class="tag">&lt;li&gt;</span><span class="pln">
        </span><span class="tag">&lt;a</span><span class="pln"> </span><span class="atn">href</span><span class="pun">=</span><span class="atv">"http://www.flickr.com/photos/claudio_ar/2601700491/"</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"pic-6"</span><span class="tag">&gt;&lt;img</span><span class="pln"> </span><span class="atn">src</span><span class="pun">=</span><span class="atv">"images/6.jpg"</span><span class="pln"> </span><span class="atn">alt</span><span class="pun">=</span><span class="atv">"Photograph of a flower and lake"</span><span class="pln"> </span><span class="tag">/&gt;&lt;/a&gt;</span><span class="pln">
    </span><span class="tag">&lt;/li&gt;</span><span class="pln"> 
</span><span class="tag">&lt;/ul&gt;</span><span class="pln">
</span><span class="tag">&lt;/div&gt;</span></pre>

<p>
	الآن نقوم بتنسيق الصفحة، <span style="line-height: 22.3999996185303px;">أضف خلفية الصفحة ‏</span><span style="line-height: 22.3999996185303px; font-family: 'courier new', courier, monospace;">wood ‎texture‏</span><span style="line-height: 22.3999996185303px;"> مكررة لتضفي جمالا على الصفحة:</span>
</p>

<pre class="css ipsCode prettyprint prettyprinted" data-pbcklang="css" data-pbcktabsize="4" style="line-height: 17.92px;">
<span class="pln">body </span><span class="pun">{</span><span class="pln"> 
    background</span><span class="pun">:</span><span class="pln"> </span><span class="com">#959796 url(images/wood-repeat.jpg);</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
</span><span class="pun">‏#‏</span><span class="pln">container</span><span class="pun">‏</span><span class="pln"> </span><span class="pun">{</span><span class="pln"> 
    width</span><span class="pun">:</span><span class="pln"> </span><span class="lit">600px</span><span class="pun">;</span><span class="pln"> 
    margin</span><span class="pun">:</span><span class="pln"> </span><span class="lit">40px</span><span class="pln"> </span><span class="kwd">auto</span><span class="pun">‏;‏</span><span class="pln"> </span><span class="pun">‏</span><span class="pln">
</span><span class="pun">}</span></pre>

<h2>
	تنسيقات معرض الصور
</h2>

<p>
	بدأنا العمل الآن فعليًا على تنسيقات معرض الصور بالـ‏CSS‏. بداية، سَنُزيل النقاط الافتراضية لعناصر القائمة. ‏ولتطبيق ذلك قم باستخدام <span style="font-family:courier new,courier,monospace;">‏list-style: none</span>‏:
</p>

<pre class="css ipsCode prettyprint prettyprinted" data-pbcklang="css" data-pbcktabsize="4">
<span class="pln">ul</span><span class="pun">.</span><span class="pln">gallery li a</span><span class="pun">‏</span><span class="pln"> </span><span class="pun">{</span><span class="pln"> 
    </span><span class="kwd">float</span><span class="pun">:</span><span class="pln"> left</span><span class="pun">‏;‏</span><span class="pln"> 
    padding</span><span class="pun">:</span><span class="pln"> </span><span class="lit">10px</span><span class="pln"> </span><span class="lit">10px</span><span class="pln"> </span><span class="lit">25px</span><span class="pln"> </span><span class="lit">10px</span><span class="pun">‏;‏</span><span class="pln"> 
    background</span><span class="pun">:</span><span class="pln"> </span><span class="com">#eee‏;‏ </span><span class="pln">
    border</span><span class="pun">:</span><span class="pln"> </span><span class="lit">1px</span><span class="pln"> solid </span><span class="com">#fff‏;‏</span><span class="pln">
    </span><span style="font-family: 'courier new', courier, monospace; line-height: 22.3999996185303px;"><span class="pun">‏</span><span class="pln">list</span><span class="pun">-</span><span class="pln">style</span><span class="pun">:</span><span class="pln"> none</span></span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	طبق تأثيرات ‏Polaroid‏‏‎ ‎للصور بإضافة بعض التنسيقات إلى المحاور. أولاً قم بتطبيق خاصية الـ‏<span style="font-family:courier new,courier,monospace;">float</span>‏ ‏بالقيمة ‏‎<span style="font-family:courier new,courier,monospace;">left</span> لإلصاقهم جنبًا إلى جنب، ثم أضف مقاسات الـ‏<span style="font-family:courier new,courier,monospace;">padding</span>‏ المذكورة أدناه. غَيّر لون الخلفية إلى ‏الرمادي الفاتح حتى تضفي اللون التقليدي لشكل الـ‏Polaroid‏. بعد ذلك أضف تأثيرات الظل للحدود.
</p>

<p>
	<span style="line-height: 22.3999996185303px;">لإضفاء الواقعيّة الجمالية على التصميم، استخدم خاصية ‏</span><span style="line-height: 22.3999996185303px; font-family: 'courier new', courier, monospace;">box-shadow</span><span style="line-height: 22.3999996185303px;">‏ في الـ‏CSS3‎‏ لتطبيق تأثيرات الظل ‏الجميلة على الصور. يلزمنا إضافة خاصية ‏</span><span style="line-height: 22.3999996185303px; font-family: 'courier new', courier, monospace;">position: relative‏</span><span style="line-height: 22.3999996185303px;"> لضمان ترتيب العناصر ملتصقة:</span>
</p>

<pre class="css ipsCode prettyprint prettyprinted" data-pbcklang="css" data-pbcktabsize="4">
<span class="pln">ul</span><span class="pun">.</span><span class="pln">gallery li a</span><span class="pun">‏</span><span class="pln"> </span><span class="pun">{</span><span class="pln"> 
    </span><span class="kwd">float</span><span class="pun">:</span><span class="pln"> left</span><span class="pun">‏;‏</span><span class="pln"> 
    padding</span><span class="pun">:</span><span class="pln"> </span><span class="lit">10px</span><span class="pln"> </span><span class="lit">10px</span><span class="pln"> </span><span class="lit">25px</span><span class="pln"> </span><span class="lit">10px</span><span class="pun">‎‏;‏</span><span class="pln"> 
    background</span><span class="pun">:</span><span class="pln"> </span><span class="com">#eee‏;‏ </span><span class="pln">
    border</span><span class="pun">:</span><span class="pln"> </span><span class="lit">1px</span><span class="pln"> solid </span><span class="com">#fff‏;‏</span><span class="pln">
    </span><span class="pun">-</span><span class="pln">moz</span><span class="pun">-</span><span class="pln">box</span><span class="pun">-</span><span class="pln">shadow</span><span class="pun">:</span><span class="pln"> </span><span class="lit">0px</span><span class="pln"> </span><span class="lit">2px</span><span class="pln"> </span><span class="lit">15px</span><span class="pln"> </span><span class="com">#333‎‏;‏ </span><span class="pln">
    position</span><span class="pun">:</span><span class="pln"> relative</span><span class="pun">‏;‏</span><span class="pln"> </span><span class="pun">‏</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	‏الآن نحتاج إلى تطبيق تنسيق مفرد لكل صورة على حدة، فلنعد إلى الوراء قليلا ونعطي اسم ‏class‏ محدد لكل محور ‏عنصر بمفرده.‏ مثال:
</p>

<pre class="html ipsCode prettyprint prettyprinted" data-pbcklang="html" data-pbcktabsize="4" style="line-height: 22.4px;">
<span class="tag">&lt;li&gt;</span><span class="pln">
    </span><span class="tag">&lt;a</span><span class="pln"> </span><span class="atn">href</span><span class="pun">=</span><span class="atv">"http://www.flickr.com/photos/claudio_ar/2214532638/"</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"pic-1"</span><span class="tag">&gt;&lt;img</span><span class="pln"> </span><span class="atn">src</span><span class="pun">=</span><span class="atv">"images/1.jpg"</span><span class="pln"> </span><span class="atn">alt</span><span class="pun">=</span><span class="atv">"Photograph of a waterfall"</span><span class="pln"> </span><span class="tag">/&gt;&lt;/a&gt;</span><span class="pln">
</span><span class="tag">&lt;/li&gt;</span><span class="pln"> </span></pre>

<p>
	<span style="line-height: 22.3999996185303px;">يمكننا الآن إضافة تنسيقات محددة لكل صورة بمفردها، عن طريق اسم ‏</span><span style="line-height: 22.3999996185303px; font-family: 'courier new', courier, monospace;">class‏</span><span style="line-height: 22.3999996185303px;"> الخاص بكل</span><span style="line-height: 22.3999996185303px;"> منها. سنقوم الآن بكتابة ‏تنسيقات الـ‏CSS‏ مع تغيير خاصية <span style="font-family:courier new,courier,monospace;">‏z-index</span>‏ <span style="font-family:courier new,courier,monospace;">و‏rotation‏</span> لكل صورة على حدة:</span>
</p>

<pre class="css ipsCode prettyprint prettyprinted" data-pbcklang="css" data-pbcktabsize="4">
<span class="pln">ul</span><span class="pun">.</span><span class="pln">gallery li a</span><span class="pun">.</span><span class="pln">pic</span><span class="pun">-</span><span class="lit">1</span><span class="pln"> </span><span class="pun">{</span><span class="pln"> z</span><span class="pun">-</span><span class="pln">index</span><span class="pun">:</span><span class="pln"> </span><span class="lit">1</span><span class="pun">;</span><span class="pln"> </span><span class="pun">-</span><span class="pln">webkit</span><span class="pun">-</span><span class="pln">transform</span><span class="pun">:</span><span class="pln"> rotate</span><span class="pun">(-</span><span class="lit">10deg</span><span class="pun">);</span><span class="pln"> </span><span class="pun">-</span><span class="pln">moz</span><span class="pun">-</span><span class="pln">transform</span><span class="pun">:</span><span class="pln"> rotate</span><span class="pun">(-</span><span class="lit">10deg</span><span class="pun">);</span><span class="pln"> </span><span class="pun">}</span><span class="pln"> ul</span><span class="pun">.</span><span class="pln">gallery li a</span><span class="pun">.</span><span class="pln">pic</span><span class="pun">-</span><span class="lit">2</span><span class="pln"> </span><span class="pun">{</span><span class="pln"> z</span><span class="pun">-</span><span class="pln">index</span><span class="pun">:</span><span class="pln"> </span><span class="lit">5</span><span class="pun">;</span><span class="pln"> </span><span class="pun">-</span><span class="pln">webkit</span><span class="pun">-</span><span class="pln">transform</span><span class="pun">:</span><span class="pln"> rotate</span><span class="pun">(-</span><span class="lit">3deg</span><span class="pun">);</span><span class="pln"> </span><span class="pun">-</span><span class="pln">moz</span><span class="pun">-</span><span class="pln">transform</span><span class="pun">:</span><span class="pln"> rotate</span><span class="pun">(-</span><span class="lit">3deg</span><span class="pun">);</span><span class="pln"> </span><span class="pun">}</span><span class="pln"> ul</span><span class="pun">.</span><span class="pln">gallery li a</span><span class="pun">.</span><span class="pln">pic</span><span class="pun">-</span><span class="lit">3</span><span class="pln"> </span><span class="pun">{</span><span class="pln"> z</span><span class="pun">-</span><span class="pln">index</span><span class="pun">:</span><span class="pln"> </span><span class="lit">3</span><span class="pun">;</span><span class="pln"> </span><span class="pun">-</span><span class="pln">webkit</span><span class="pun">-</span><span class="pln">transform</span><span class="pun">:</span><span class="pln"> rotate</span><span class="pun">(</span><span class="lit">4deg</span><span class="pun">);</span><span class="pln"> </span><span class="pun">-</span><span class="pln">moz</span><span class="pun">-</span><span class="pln">transform</span><span class="pun">:</span><span class="pln"> rotate</span><span class="pun">(</span><span class="lit">4deg</span><span class="pun">);</span><span class="pln"> </span><span class="pun">}</span></pre>

<p>
	نرى الآن تداخل الصور فيما بينها بعض الشيء وتموضعها بشكل عشوائي على السطح الخشبي.‏
</p>

<p>
	<span style="line-height: 22.3999996185303px;">قم بإضافة حدث التنسيق<span style="font-family:courier new,courier,monospace;"> ‏‎:hover‎</span>‏ لكل المحاور مرة واحدة، وأدرج فيه خاصية ‏<span style="font-family:courier new,courier,monospace;">z-index‏</span> لأعلى قيمة موجودة ‏لديك، وبذلك فإن الصورة التي يمر عليها الماوس تصبح بارزةً أمام باقي الصور الأخرى. اضبط خاصية ‏<span style="font-family:courier new,courier,monospace;">box-‎shadow</span>‏ لتعطي انطباعًا أن تلك الصورة برزت أمام أخواتها:</span>
</p>

<pre class="css ipsCode prettyprint prettyprinted" data-pbcklang="css" data-pbcktabsize="4">
<span class="pln">ul</span><span class="pun">.</span><span class="pln">gallery li a</span><span class="pun">:</span><span class="pln">hover</span><span class="pun">‏</span><span class="pln"> </span><span class="pun">{</span><span class="pln"> 
    z</span><span class="pun">-</span><span class="pln">index</span><span class="pun">:</span><span class="pln"> </span><span class="lit">10</span><span class="pun">‎‏;‏</span><span class="pln"> </span><span class="pun">‏-‏</span><span class="pln">
    moz</span><span class="pun">-</span><span class="pln">box</span><span class="pun">-</span><span class="pln">shadow</span><span class="pun">:</span><span class="pln"> </span><span class="lit">3px</span><span class="pln"> </span><span class="lit">5px</span><span class="pln"> </span><span class="lit">15px</span><span class="pln"> </span><span class="com">#333‎‏;‏ ‏</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	مثال حي:  <a href="http://HsoubAcademy.github.io/examples/Pure%20CSS%20Polaroid%20Photo%20Gallery/" rel="external nofollow">يمكن معاينة المثال من هنا</a>
</p>

<p>
	وصلنا إلى نهاية هذا الدرس، <a href="https://github.com/HsoubAcademy/HsoubAcademy.github.io/tree/master/examples/Pure%20CSS%20Polaroid%20Photo%20Gallery" rel="external nofollow">تصفح ملفات المشروع</a>. تستطيع تطويره وربط الصور بتأثيرات ‏أخرى رائعة مثل ‏<strong>javascript lightbox</strong>‏ وعرضها في موقعك الخاص بك.‏
</p>

<p>
	ترجمة وبتصرف للمقال: <a href="http://line25.com/tutorials/how-to-create-a-pure-css-polaroid-photo-gallery" rel="external nofollow">How To Create a Pure CSS Polaroid Photo Gallery</a>.
</p>

<p><a class="ipsAttachLink" href="//academy.hsoub.com/applications/core/interface/file/attachment.php?id=4233">shapes.zip</a></p>
<p><a href="https://academy.hsoub.com/uploads/monthly_2015_08/css-shapes_(1).png.cac1fe989f7a5ef99cd661bfc47802d5.png" class="ipsAttachLink ipsAttachLink_image"><img data-fileid="4236" src="https://academy.hsoub.com/uploads/monthly_2015_08/css-shapes_(1).thumb.png.6eefd67ee8139e9b1c99c0a835a2d3b2.png" class="ipsImage ipsImage_thumbnailed" alt="css-shapes (1).png"></a></p>]]></description><guid isPermaLink="false">154</guid><pubDate>Sun, 30 Aug 2015 23:03:00 +0000</pubDate></item><item><title>&#x635;&#x646;&#x627;&#x639;&#x629; &#x639;&#x62F;&#x629; &#x623;&#x634;&#x643;&#x627;&#x644; &#x647;&#x646;&#x62F;&#x633;&#x64A;&#x629; &#x645;&#x62E;&#x62A;&#x644;&#x641;&#x629; &#x628;&#x648;&#x627;&#x633;&#x637;&#x629; CSS</title><link>https://academy.hsoub.com/programming/css/%D8%B5%D9%86%D8%A7%D8%B9%D8%A9-%D8%B9%D8%AF%D8%A9-%D8%A3%D8%B4%D9%83%D8%A7%D9%84-%D9%87%D9%86%D8%AF%D8%B3%D9%8A%D8%A9-%D9%85%D8%AE%D8%AA%D9%84%D9%81%D8%A9-%D8%A8%D9%88%D8%A7%D8%B3%D8%B7%D8%A9-css-r153/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2015_08/css-shapes_(1).png.62b346d2f8218964bdcf4d995dd245e4.png" /></p>

<p>من أهم مميزات ‏CSS3‎‏ أنها تقلل من استخدام الصور في تصاميم الويب، وتسمح لك بإنشاء أشكال مختلفة ‏بواسطتها. فالأشكال الشائعة التي تراها عادة في ‏فوتوشوب أو ‏Illustrator‏ يمكنك عملها الآن بكل ‏سهولة مستخدمًا ‏CSS3‎‏. تقوم الخصائص الجديدة مثل ‏<span style="font-family:courier new,courier,monospace;">transform‏</span> و <span style="font-family:courier new,courier,monospace;">‏border-radius</span>‏ بإضافة تشكيلات ‏جديدة إلى الأشكال الأساسية بدلاً من رسمها وتصميمها على برامج الرسم والتصميم. ‏</p><p style="text-align: center;"><a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2015_08/css-shapes_(1).png.cac1fe989f7a5ef99cd661bfc47802d5.png"><img data-fileid="4236" class="ipsImage ipsImage_thumbnailed" alt="css-shapes_(1).thumb.png.6eefd67ee8139e9" src="https://academy.hsoub.com/uploads/monthly_2015_08/css-shapes_(1).thumb.png.6eefd67ee8139e9b1c99c0a835a2d3b2.png"></a></p><p style="text-align: center;"> </p><p>في درسنا لهذا اليوم، دعنا ننشئ قائمة بالأشكال الأكثر شيوعًا، وذلك باستخدام ‏CSS3‎‏.‏</p><p>يمكنك تحميل الملفات المصدرية لهذا الدرس <a class="ipsAttachLink" href="https://academy.hsoub.com/applications/core/interface/file/attachment.php?id=4233">من هنا.</a></p><h2>الدائرة</h2><p style="text-align: center;"><a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2015_09/circle.png.4c052e821afb1b4f378b4208013896c7.png"><img data-fileid="4370" class="ipsImage ipsImage_thumbnailed" alt="circle.thumb.png.d4ebd8d130790d9212f5fb7" src="https://academy.hsoub.com/uploads/monthly_2015_09/circle.thumb.png.d4ebd8d130790d9212f5fb77528a07e4.png"></a></p><h3>HTML‎</h3><p>لإنشاء دائرة في الـCSS، نحتاج أولاً إلى ‏<span style="font-family:courier new,courier,monospace;">div‏</span> واسمٍ للشكل ‏<span style="font-family:courier new,courier,monospace;">id‏.</span> وهنا ستأخذ الدائرة هذا الإسم:</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">‎&lt;div id="circle"&gt;&lt;/div&gt;‎</pre><h3>CSS‎</h3><p>ضع مقاسات العرض والارتفاع ‏<span style="font-family:courier new,courier,monospace;">width‏</span> و ‏<span style="font-family:courier new,courier,monospace;">height‏</span> بالـ‏CSS‏ واجعل قيمة <span style="font-family:courier new,courier,monospace;">‏border-radius‏</span> ‏نصف قيمة العرض والارتفاع:</p><pre data-pbcklang="css" data-pbcktabsize="4" class="css ipsCode prettyprint">‏#‏circle‏ } ‏ ‏
    width: 120px‏;‏ 
    height: 120px;‏
   ‏ ‏background: #7fee1d;‏ ‏ 
    -moz-border-radius: 60px‏;‏ 
    webkit-border-radius: 60px‏;‏‏ 
    border-radius: 60px‏;‏‏
}</pre><h2>المربع</h2><p style="text-align: center;">‏<a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2015_09/square.png.e86b0ee351f2deb6913a356a8a6f8333.png"><img data-fileid="4371" class="ipsImage ipsImage_thumbnailed" alt="square.thumb.png.f0685e09636866e6ae3c9b9" src="https://academy.hsoub.com/uploads/monthly_2015_09/square.thumb.png.f0685e09636866e6ae3c9b9707a97081.png"></a></p><h3>HTML‎</h3><p>نحتاج إلى ‏<span style="font-family:courier new,courier,monospace;">div‏</span> مع وضع اسمٍ له، لإنشاء شكل مربع وربطه بالاسم:</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">‎&lt;div id="square"&gt;&lt;/div&gt;</pre><h3>‎CSS‎</h3><p>اضبط مقاسات العرض والارتفاع بنفس القيمة، حتى يبدو واضحًا:</p><pre data-pbcklang="css" data-pbcktabsize="4" class="css ipsCode prettyprint">#‏square‏ } ‏ ‏
    width: 120px‏;‏‏ 
    height: 120px‏;‏
    background: #f447ff‏;‏‏
}</pre><h2>المستطيل</h2><p style="text-align: center;"><a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2015_09/rectangle.png.986b196a06326e0721203365948e8c18.png"><img data-fileid="4372" class="ipsImage ipsImage_thumbnailed" alt="rectangle.thumb.png.d6c073880c1d96e63439" src="https://academy.hsoub.com/uploads/monthly_2015_09/rectangle.thumb.png.d6c073880c1d96e634390259640b5197.png"></a></p><h3>HTML</h3><p>أنشئ ‏<span style="font-family:courier new,courier,monospace;">div‏</span> وضع اسمًا له، ويفضل أن يكون الاسم نفس نوع الشكل:</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">‎&lt;div id="rectangle"&gt;&lt;/div&gt;‎</pre><h3>‎CSS‎</h3><p>نضبط العرض والارتفاع تمامًا مثل المربع؛ ولكن بزيادة قيمة العرض أكثر من الارتفاع:</p><pre data-pbcklang="css" data-pbcktabsize="4" class="css ipsCode prettyprint">‏#‏rectangle‏ } ‏ ‏
    width: 220px‏;‏
    height: 120px‏;‏
    background: #4da1f7‎‏;‏‏
}</pre><h2>الشكل البيضاوي</h2><p style="text-align: center;"><a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2015_09/oblong.png.b2b9f8da812af0b8a13a31ce56a56bb5.png"><img data-fileid="4373" class="ipsImage ipsImage_thumbnailed" alt="oblong.thumb.png.f663c5d8e1b2c78113f7ea8" src="https://academy.hsoub.com/uploads/monthly_2015_09/oblong.thumb.png.f663c5d8e1b2c78113f7ea84894ef76a.png"></a></p><h3>HTML</h3><p>لنقم بإنشاء ‏<span style="font-family:courier new,courier,monospace;">div‏</span> ونعطه اسم ‏<span style="font-family:courier new,courier,monospace;">oval‏</span>:</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">‎&lt;div id="oval"&gt;&lt;/div&gt;‎</pre><h3>CSS‎</h3><p>يشابه الشكلُ البيضاوي الدائرةَ إلى حد كبير؛ ومع ذلك، فإن الشكل البيضاوي هو مستطيل زواياه مستديرة بقيمة ‏نصف الارتفاع:</p><pre data-pbcklang="css" data-pbcktabsize="4" class="css ipsCode prettyprint">#‏oval‏ } ‏ ‏
    width: 200px‏;‏‏
    height: 100px‏;
    background: #e9337c‏;-‏
    webkit-border-radius: 100px / 50px‏;‏-‏
    moz-border-radius: 100px / 50px‏;‏
    border-radius: 100px / 50px‏;‏‏
}
</pre><h2>المثلث</h2><p style="text-align: center;"><a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2015_09/triangle.png.e8cc5773ff15346e0fced4789620d79e.png"><img data-fileid="4374" class="ipsImage ipsImage_thumbnailed" alt="triangle.thumb.png.e519845debe5eb1c755ec" src="https://academy.hsoub.com/uploads/monthly_2015_09/triangle.thumb.png.e519845debe5eb1c755ecd49e53035aa.png"></a></p><h3>HTML</h3><p>يحتاج المثلث إلى ‏<span style="font-family:courier new,courier,monospace;">div‏</span> باسم ‏<span style="font-family:courier new,courier,monospace;">triangle‏</span>:‏</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">‎&lt;div id="triangle"&gt;&lt;/div&gt;‎</pre><h3>CSS‎</h3><p>لإنشاء مثلث بواسطة الـ‏CSS‏، نقوم بالتعديل في خاصية ‏<span style="font-family:courier new,courier,monospace;">border‏</span>. سنقوم بتعديل عرض الـ‏<span style="font-family:courier new,courier,monospace;">border‏</span> ‏حتى يعطينا نتائج مغايرة في قياس الزاويا:</p><pre data-pbcklang="css" data-pbcktabsize="4" class="css ipsCode prettyprint">#‏triangle‏ } ‏ ‏
    width: 0‎‏;‏‏
    height: 0‎‏;‏‏
    border-bottom: 140px solid #fcf921‎‏;‏‏‏
    border-left: 70px solid transparent‏;‏‏
    border-right: 70px solid transparent‏;‏‏
}</pre><h2>المثلث المقلوب</h2><p style="text-align: center;"><a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2015_09/triangle_down.png.16fd8b0bb1ddaa1dbb1c64204f56c8a9.png"><img data-fileid="4375" class="ipsImage ipsImage_thumbnailed" alt="triangle_down.thumb.png.c6b59aa43bf8b244" src="https://academy.hsoub.com/uploads/monthly_2015_09/triangle_down.thumb.png.c6b59aa43bf8b244053c283699e7325d.png"></a></p><h3>HTML</h3><p>قُم بإنشاء ‏<span style="font-family:courier new,courier,monospace;">div‏</span> وأعطه اسمًا‏:</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">‎&lt;div id="triangle_down"&gt;&lt;/div&gt;‎</pre><h3>CSS‎</h3><p>نحتاج إلى تعديل خاصية الحدّ السفليّ، لينتُج لدينا مثلث معكوس:</p><pre data-pbcklang="css" data-pbcktabsize="4" class="css ipsCode prettyprint">#‏triangle_down‏ } ‏ ‏
    width: 0‎‏;‏‏
    height: 0‎‏;‏‏
    border-top: 140px solid #20a3bf‏;‏‏
    border-left: 70px solid transparent‏;‏
    border-right: 70px solid transparent‏;
}</pre><h2>مثلث متجه إلى اليسار</h2><p style="text-align: center;"><a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2015_09/triangle_left.png.ed41c96089c990bf8c84e75a857ad338.png"><img data-fileid="4376" class="ipsImage ipsImage_thumbnailed" alt="triangle_left.thumb.png.8bf6f24a2e95bae6" src="https://academy.hsoub.com/uploads/monthly_2015_09/triangle_left.thumb.png.8bf6f24a2e95bae677a9cedeeecb6eb2.png"></a></p><h3>HTML</h3><p>يتطلب هذا الشكل وجود ‏<span style="font-family:courier new,courier,monospace;">div‏</span> مع اسمٍ للشكل وليكن ‏<span style="font-family:courier new,courier,monospace;">triangle_left</span>‏‏:</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">‎&lt;div id="triangle_left"&gt;&lt;/div&gt;‎</pre><h3>CSS</h3><p>نقوم بالتعديل في خاصية الحدّ الأيمن، حتى نحصلَ على مُثلث مُتَّجه لليسار:</p><pre data-pbcklang="css" data-pbcktabsize="4" class="css ipsCode prettyprint">#‏triangle_left‏ } ‏ ‏
    width: 0‎‏;‏‏
    height: 0‎‏;‏
    border-top: 70px solid transparent‎‏;‏
    border-right: 140px solid #6bbf20‎;‏
   ‏ ‏border-bottom: 70px solid transparent‏;‏
}</pre><h2>مثلث متجه لليمين</h2><p style="text-align: center;"><a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2015_09/triangle_right.png.f3ed69381a1214b7711f5b06a13808b7.png"><img data-fileid="4377" class="ipsImage ipsImage_thumbnailed" alt="triangle_right.thumb.png.8c0b78544c8069c" src="https://academy.hsoub.com/uploads/monthly_2015_09/triangle_right.thumb.png.8c0b78544c8069c788c2d3054545e223.png"></a></p><h3>HTML</h3><p>لنقم بإنشاء ‏<span style="font-family:courier new,courier,monospace;">div‏</span> ونعطه اسم ‏<span style="font-family:courier new,courier,monospace;">triangle_right‏:</span></p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">‎&lt;div id="triangle_right"&gt;&lt;/div&gt;</pre><p>‎</p><h3>CSS</h3><p>بعد ذلك نقوم بالتعديل على خاصية الحدّ الأيسر، ليصبح عندنا مثلثًا متجهًا إلى اليمين:</p><pre data-pbcklang="css" data-pbcktabsize="4" class="css ipsCode prettyprint">#‏triangle_right‏ }
    ‏width: 0‎‏;‏‏
    height: 0‎‏;‏
    border-top: 70px solid transparent‏;‏
    border-left: 140px solid #ff5a00‎‏;‏
    border-bottom: 70px solid transparent‏;‏
}</pre><h2>الشكل المعين (الماسة)‏</h2><p style="text-align: center;"><a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2015_09/diamond.png.339decfa28c8a28622f4c70ed3d83a87.png"><img data-fileid="4378" class="ipsImage ipsImage_thumbnailed" alt="diamond.thumb.png.e572aefcae5aa0fb3fd115" src="https://academy.hsoub.com/uploads/monthly_2015_09/diamond.thumb.png.e572aefcae5aa0fb3fd115efc4aceda7.png"></a></p><h3>HTML</h3><p>يحتاج المُعين إلى ‏<span style="font-family:courier new,courier,monospace;">div‏</span> باسم ‏<span style="font-family:courier new,courier,monospace;">diamond‏:</span></p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">‎&lt;div id="diamond"&gt;&lt;/div&gt;‎</pre><h3>CSS‎</h3><p>يُمكن عرض المُعيّن بعدة طرق، وذلك باستخدام خاصية ‏<span style="font-family:courier new,courier,monospace;">transform‏</span> مع ‏<span style="font-family:courier new,courier,monospace;">rotate‏</span>. بهذا يصبح لديك مُثلثان ‏متقابلان ومتلاصقان ببعضهما:</p><pre data-pbcklang="css" data-pbcktabsize="4" class="css ipsCode prettyprint">#‏diamond‏ } ‏ ‏
    width: 120px‏;‏
    height: 120px‏;
    background: #1eff00‎‏;‏
    -webkit-transform: rotate(-45deg); 
    -moz-transform: rotate(-45deg); 
    -ms-transform: rotate(-45deg); 
    -o-transform: rotate(-45deg); 
    transform: rotate(-45deg); ‏
    webkit-transform-origin: 0 100%‎‏;‏
    moz-transform-origin: 0 100%‎‏;‏ 
    -ms-transform-origin: 0 100%‎‏;‏‏ 
    -o-transform-origin: 0 100%‎‏;‏
    transform-origin: 0 100%‎‏;‏
    margin: 60px 0 10px 310px‏;‏
}</pre><h2>شبه المنحرف</h2><p style="text-align: center;"><a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2015_09/trapezium.png.6e08795cb7c62a5809466f25b52a9681.png"><img data-fileid="4379" class="ipsImage ipsImage_thumbnailed" alt="trapezium.thumb.png.9c9f503fed7e1cf1c68e" src="https://academy.hsoub.com/uploads/monthly_2015_09/trapezium.thumb.png.9c9f503fed7e1cf1c68ee0df1ba10e2a.png"></a></p><h3>HTML</h3><p>يتطلب هذا الشكل وجود ‏<span style="font-family:courier new,courier,monospace;">div‏</span> مع اسمٍ للشكل ولنسمه ‏<span style="font-family:courier new,courier,monospace;">trapezium‏‏:</span></p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">‎&lt;div id="trapezium"&gt;&lt;/div&gt;‎</pre><h3>CSS‎</h3><p>نقوم الآن بصناعة الشكل المطلوب، حيث نجعل الحدَّ الأيمن والأيسر متساويين مع الاحتفاظ بالحدّ السفليّ مُسَطّحًا:</p><pre data-pbcklang="css" data-pbcktabsize="4" class="css ipsCode prettyprint">#‏trapezium‏ } ‏ ‏
    height: 0‎;‏
   ‏ ‏width: 120px‏;‏‏
    border-bottom: 120px solid #ec3504‎‏;‏‏
    border-left: 60px solid transparent‏;‏
    border-right: 60px solid transparent‏;‏
}</pre><h2>متوازي الأضلاع</h2><p style="text-align: center;"><a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2015_09/parralelogram.png.2161c8bc7687fff6e306cfee49c42542.png"><img data-fileid="4380" class="ipsImage ipsImage_thumbnailed" alt="parralelogram.thumb.png.f3e9f960a19919b1" src="https://academy.hsoub.com/uploads/monthly_2015_09/parralelogram.thumb.png.f3e9f960a19919b1afa4f6b4f2808f6b.png"></a></p><h3>HTML‎</h3><p>قُم بإنشاء ‏<span style="font-family:courier new,courier,monospace;">div‏</span> وأعطه اسم ‏<span style="font-family:courier new,courier,monospace;">parallelogram‏‏:</span></p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">‎&lt;div id="parallelogram"&gt;&lt;/div&gt;‎</pre><h3>CSS‎</h3><p>ثم قم بضبط قيمة الانحراف ‏<span style="font-family:courier new,courier,monospace;">skew‏</span> لخاصية ‏<span style="font-family:courier new,courier,monospace;">transform‏</span> لحرفه بزاوية 30 درجة:</p><pre data-pbcklang="css" data-pbcktabsize="4" class="css ipsCode prettyprint">#‏parallelogram‏ } ‏ ‏
    width: 160px‏;‏
    height: 100px‏;‏
    background: #8734f7‎‏;‏ 
    -webkit-transform: skew(30deg); 
    -moz-transform: skew(30deg); 
    -o-transform: skew(30deg); 
    transform: skew(30deg); 
}</pre><h2>النجمة</h2><p style="text-align: center;"><a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2015_09/star.png.359cd74a05cb9360eca650cc15f5d17c.png"><img data-fileid="4381" class="ipsImage ipsImage_thumbnailed" alt="star.thumb.png.757953152ad97527b12da8176" src="https://academy.hsoub.com/uploads/monthly_2015_09/star.thumb.png.757953152ad97527b12da8176f765318.png"></a></p><h3>HTML</h3><p>‎يلزمنا ‏<span style="font-family:courier new,courier,monospace;">div‏</span> لإنشاء النجمة مع اسمٍ له وليكن ‏<span style="font-family:courier new,courier,monospace;">star‏‏:</span></p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">‎&lt;div id="star"&gt;&lt;/div&gt;‎</pre><h3>CSS‎</h3><p>يتطلب إنشاء النجمة بالـ‏CSS‏ تعديلات عجيبة في خصائص الحدود مع استعمال قيمة ‏<span style="font-family:courier new,courier,monospace;">rotate‏</span> لخاصية ‏‏‏<span style="font-family:courier new,courier,monospace;">transform‏</span>، لاحظ ذلك في الكود‏:</p><pre data-pbcklang="css" data-pbcktabsize="4" class="css ipsCode prettyprint">#‏star‏ } ‏ ‏
    width: 0‎‏;‏‏
    height: 0‎‏;‏
    margin: 50px 0‎‏;‏
    color: #fc2e5a‏;‏
    position: relative‏;‏‏
    display: block‏;‏
    border-right: 100px solid transparent‏;‏
    border-bottom: 70px solid #fc2e5a‏;‏
    border-left: 100px solid transparent‏;‏ 
    -moz-transform: rotate(35deg); 
    -webkit-transform: rotate(35deg); 
    -ms-transform: rotate(35deg); 
    -o-transform: rotate(35deg); ‏
}
‏#‏star:before‏ { 
    height: 0; 
    width: 0; 
    position: absolute; 
    display: block; 
    top: -45px; 
    left: -65px; 
    border-bottom: 80px solid #fc2e5a; 
    border-left: 30px solid transparent; 
    border-right: 30px solid transparent; 
    content: ''; 
    -webkit-transform: rotate(-35deg); 
    -moz-transform: rotate(-35deg); 
    -ms-transform: rotate(-35deg); 
    -o-transform: rotate(-35deg);
‏}
#‏star:after‏ { 
    content: ''; 
    width: 0; 
    height: 0; 
    position: absolute; 
    display: block; 
    top: 3px; 
    left: -105px; 
    color: #fc2e5a; 
    border-right: 100px solid transparent; 
    border-bottom: 70px solid #fc2e5a; 
    border-left: 100px solid transparent; 
    -webkit-transform: rotate(-70deg); 
    -moz-transform: rotate(-70deg); 
    -ms-transform: rotate(-70deg); 
    -o-transform: rotate(-70deg); ‏
}</pre><h2>النجمة السداسية</h2><p style="text-align: center;"><a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2015_09/star-6pt.png.072cbedcaa59d9a9603e2510aed5c5ca.png"><img data-fileid="4382" class="ipsImage ipsImage_thumbnailed" alt="star-6pt.thumb.png.1c35b9f261f5f383168bf" src="https://academy.hsoub.com/uploads/monthly_2015_09/star-6pt.thumb.png.1c35b9f261f5f383168bfbb8656dc5a0.png"></a></p><h3>HTML</h3><p>تتطلب النجمة السداسية وجود ‏<span style="font-family:courier new,courier,monospace;">div‏</span> مع اسمٍ للشكل، ولنطلق عليه اسم ‏<span style="font-family:courier new,courier,monospace;">parallelogram‏‏</span>:</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">‎&lt;div id="parallelogram"&gt;&lt;/div&gt;‎</pre><h3>CSS</h3><p>بخلاف النجمة السابقة، فإننا سنقوم بتعديل خصائص الحدود. سننشئ مجموعة من الأشكال ومن ثم نُلصقُها ببعضها ‏البعض لنحصل على الشكل المطلوب:</p><pre data-pbcklang="css" data-pbcktabsize="4" class="css ipsCode prettyprint">#‏star_six_points‏} ‏ ‏
    width: 0‎‏;‏‏
    height: 0‎‏;‏‏
    display: block;‏
   ‏ ‏position: absolute‏;‏‏
    border-left: 50px solid transparent‏;‏‏
    border-right: 50px solid transparent‏;‏
    border-bottom: 100px solid #de34f7‎‏;‏‏
    margin: 10px auto‏;‏ 
} 
‏#‏star_six_points:after‏ } ‏ ‏
    content: '';‏
   ‏ ‏width: 0‎‏;‏
    height: 0‎‏;‏
    position: absolute‏;‏
    border-left: 50px solid transparent‏;‏‏
    border-right: 50px solid transparent‏;‏‏
    border-top: 100px solid #de34f7‎‏;‏‏
    margin: 30px 0 0 -50px‎‏;‏‏
}</pre><p>‏</p><h2>المضلع الخماسي</h2><p style="text-align: center;"><a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2015_09/pentagon.png.12ecfb4d9c73681a0eecd50372cbfb40.png"><img data-fileid="4383" class="ipsImage ipsImage_thumbnailed" alt="pentagon.thumb.png.9ea1eaee793988232c2b6" src="https://academy.hsoub.com/uploads/monthly_2015_09/pentagon.thumb.png.9ea1eaee793988232c2b69ea339afa36.png"></a></p><h3>HTML</h3><p>‎يتطلب المُضلعُ الخماسي وجود ‏<span style="font-family:courier new,courier,monospace;">div‏</span> مع اسمٍ للشكل ولنسمه ‏<span style="font-family:courier new,courier,monospace;">pentagon‏‏:</span></p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">‎&lt;div id="pentagon"&gt;&lt;/div&gt;‎</pre><h3>CSS‎</h3><p>نحتاج إلى عنصرين لإنشاء المضلع الخماسي. أول عنصر نقوم بإنشائه هو شكل شبه المنحرف والعنصر الثاني هو ‏المثلث حيث سيكون أعلى الشكل الأول:</p><pre data-pbcklang="css" data-pbcktabsize="4" class="css ipsCode prettyprint">#‏pentagon‏ } ‏ ‏
    width: 54px‏;‏
    position: relative‏;‏
    border-width: 50px 18px 0‎‏;‏‏
    border-style: solid‏;‏
    border-color: #277bab transparent‏;‏ 
} 
‏#‏pentagon:before‏ } ‏ ‏
    content: '';‏
   ‏ ‏height: 0‎‏;‏‏
    width: 0‎‏;‏‏
    position: absolute‏;‏‏
    top: -85px‎‏;‏
    left: -18px‎‏;‏‏
    border-width: 0 45px 35px‏;‏
    border-style: solid‏;‏‏
    border-color: transparent transparent #277bab‏;‏‏
}</pre><h2>المضلع السداسي</h2><p style="text-align: center;"><a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2015_09/hexagon.png.cde9e073d5333f801bfe446119cbfced.png"><img data-fileid="4384" class="ipsImage ipsImage_thumbnailed" alt="hexagon.thumb.png.aca15d01e881404e28cb2a" src="https://academy.hsoub.com/uploads/monthly_2015_09/hexagon.thumb.png.aca15d01e881404e28cb2a03816d556a.png"></a></p><h3>HTML</h3><p>‎<br>يلزمنا ‏<span style="font-family:courier new,courier,monospace;">div‏</span> لإنشاء المُضلع السداسي مع اسم له وليكن ‏<span style="font-family:courier new,courier,monospace;">hexagon‏‏:</span></p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">‎&lt;div id="hexagon"&gt;&lt;/div&gt;‎
</pre><h3><span style="line-height: 1.6;">CSS‎</span></h3><p>هناك عدة طرق لإنشاء المُضلع السداسي. إحدى هذه الطرق مطابقة بشكل كبير لطريقة إنشاء المُضلع الخماسي. حيث ‏نقوم بإنشاء مستطيل في البداية ومن ثم نضيف أعلاه مُثلثين:</p><pre data-pbcklang="css" data-pbcktabsize="4" class="css ipsCode prettyprint">#‏hexagon‏ } ‏ ‏
    width: 100px‏;‏‏
    height: 55px‏;‏
    background: #fc5e5e‏;‏‏
    position: relative‏;‏‏
    margin: 10px auto‎‏;‏‏
} 
‏#‏hexagon:before‏ } ‏ ‏
    content: '';‏
   ‏ ‏width: 0‎‏;‏‏
    height: 0‎‏;‏
    position: absolute‏;‏
    top: -25px‎‏;‏
    left: 0‎‏;‏‏
    border-left: 50px solid transparent‏;‏
    border-right: 50px solid transparent‏;‏‏
    border-bottom: 25px solid #fc5e5e‏;‏‏
}
‏#‏hexagon:after‏ } ‏ ‏
    content: '';‏ ‏ ‏
    width: 0‎‏;‏‏
    height: 0‎‏;‏
    position: absolute‏;‏‏
    bottom: -25px‎‏;‏
    left: 0‎‏;‏‏
    border-left: 50px solid transparent‏;
    border-right: 50px solid transparent‏;‏‏
    border-top: 25px solid #fc5e5e‏;‏‏
}</pre><h2>المضلع الثماني</h2><p style="text-align: center;"><img alt="octagon" src="http://www.1stwebdesigner.com/wp-content/uploads/2014/05/octagon.png"></p><h3>HTML</h3><p><br>قُم بإنشاء ‏<span style="font-family:courier new,courier,monospace;">div‏</span> وأعطه اسم ‏<span style="font-family:courier new,courier,monospace;">octagon‏‏</span>:</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">‎&lt;div id="octagon"&gt;&lt;/div&gt;‎</pre><h3>CSS‎</h3><p>يُمكن إنشاء هذا الشكل بطرق مُشابهة للشكل السابق. حيث نقوم بإنشاء شكلين شبه منحرفين ومن ثم نضع مُثلثين على ‏كل جانب منهما. على الرغم من وجود بعض الطرق الأخرى لعمل ذلك؛ إلا أن هذه هي أفضل طريقة لذلك:</p><pre data-pbcklang="css" data-pbcktabsize="4" class="css ipsCode prettyprint">#‏octagon‏ } ‏ ‏
    width: 100px‏;‏
    height: 100px‏;‏‏
    background: #ac60ec‏;‏‏
    position: relative‏;‏‏
} 
‏#‏octagon:before‏ } ‏ ‏
    content: '';‏
   ‏ ‏width: 42px‏;‏‏
    height: 0‎‏;‏
    position: absolute‏;‏
    top: 0‎‏;‏‏
    left: 0‎‏;‏
    border-bottom: 29px solid #ac60ec‏;
    border-left: 29px solid #f4f4f4‎‏;‏‏
    border-right: 29px solid #f4f4f4‎‏;‏‏
} ‏
#octagon:after‏ } ‏ ‏
    content: '';‏ ‏ ‏
    width: 42px‏;‏
    height: 0‎‏;‏
    position: absolute‏;‏
    bottom: 0‎‏;‏‏
    left: 0‎‏;‏
    border-top: 29px solid #ac60ec‏;‏
    border-left: 29px solid #f4f4f4‎‏;‏‏
    border-right: 29px solid #f4f4f4‎‏;‏‏
}</pre><h2>شكل القلب</h2><p style="text-align: center;"><a href="https://academy.hsoub.com/uploads/monthly_2015_09/heart.png.fde62880e741f52a2e7523c8e9a2ecac.png" class="ipsAttachLink ipsAttachLink_image"><img data-fileid="4385" src="https://academy.hsoub.com/uploads/monthly_2015_09/heart.thumb.png.6351acebe3b6af9842e77bc07b50fc4c.png" class="ipsImage ipsImage_thumbnailed" alt="heart.thumb.png.6351acebe3b6af9842e77bc0"></a></p><h3>HTML</h3><p><br>يتطلب شكل القلب وجود ‏<span style="font-family:courier new,courier,monospace;">div‏</span> مع اسمٍ للشكل ولنسمه ‏<span style="font-family:courier new,courier,monospace;">heart‏‏:</span></p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">‎&lt;div id="heart"&gt;&lt;/div&gt;
</pre><h3>‎CSS‎</h3><p>يُمكن أن يكون إنشاءُ شكل القلب صعبًا بعض الشيء؛ ولكن نستطيع القيام بذلك عن طريق عمل استدارة للعناصر من ‏زوايا مختلفة وتغيير قيمة خاصية ‏<span style="font-family:courier new,courier,monospace;">transform-origin‏ </span>حتى نتمكن من تغيير موضع العنصر المُحَدَّد:</p><pre data-pbcklang="css" data-pbcktabsize="4" class="css ipsCode prettyprint">‏#‏heart‏ } ‏ ‏
    position: relative‏;‏ ‏
}
‏#heart:before, #heart:after‏ } ‏ ‏
    content: '';‏ ‏ ‏
    width: 70px‏;‏‏
    height: 115px‏;‏
    position: absolute‏;‏
    background: red‏;‏
    left: 70px‏;‏‏
    top: 0‎‏;‏ 
    -webkit-border-radius: 50px 50px 0 0; 
    -moz-border-radius: 50px 50px 0 0; 
    border-radius: 50px 50px 0 0; 
    -webkit-transform: rotate(-45deg); 
    -moz-transform: rotate(-45deg); 
    -ms-transform: rotate(-45deg); 
    -o-transform: rotate(-45deg); 
    transform: rotate(-45deg); 
    -webkit-transform-origin: 0 100%; 
    -moz-transform-origin: 0 100%; 
    -ms-transform-origin: 0 100%; 
    -o-transform-origin: 0 100%; 
    transform-origin: 0 100%; 
‏{‏
#‏heart:after‏ {
   ‏ left: 0; 
    -webkit-transform: rotate(45deg); 
    -moz-transform: rotate(45deg); 
    -ms-transform: rotate(45deg); 
    -o-transform: rotate(45deg); 
    transform: rotate(45deg); 
    -webkit-transform-origin: 100% 100%; 
    -moz-transform-origin: 100% 100%; 
    -ms-transform-origin: 100% 100%; 
    -o-transform-origin: 100% 100%; 
    transform-origin: 100% 100%; ‏
}</pre><h2>البيضة</h2><p style="text-align: center;"><a href="https://academy.hsoub.com/uploads/monthly_2015_09/egg.png.59bbd7cfd5dd40f0b4d269df6e959b98.png" class="ipsAttachLink ipsAttachLink_image"><img data-fileid="4386" src="https://academy.hsoub.com/uploads/monthly_2015_09/egg.thumb.png.af7b3dc96f72b9f9dbd983984546ba64.png" class="ipsImage ipsImage_thumbnailed" alt="egg.thumb.png.af7b3dc96f72b9f9dbd9839845"></a></p><h3>HTML</h3><p><br>يلزمنا ‏<span style="font-family:courier new,courier,monospace;">div‏</span> لإنشاء شكل البيضة مع اسمٍ له وليكن ‏<span style="font-family:courier new,courier,monospace;">egg‏‏:</span></p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">‎&lt;div id="egg"&gt;&lt;/div&gt;‎</pre><h3>CSS‎</h3><p>إنَّ شكل البيضة مطابق إلى حدٍّ ما للشكل البيضاوي؛ إلا أن ارتفاعها أكبر بقليل من عرضها. نقوم بضبط خاصية ‏الزوايا المستديرة بشكل دقيق حتى نحصل على مرادنا بالضبط:</p><pre data-pbcklang="css" data-pbcktabsize="4" class="css ipsCode prettyprint">#‏egg‏ } ‏ ‏
    width: 136px‏;‏
    height: 190px‏;‏
    background: #ffc000‎‏;‏‏
    display: block‏;‏‏
    -webkit-border-radius: 63px 63px 63px 63px / 108px 108px 72px 72px‏;‏‏
    border-radius: 50% 50% 50% 50% / 60% 60% 40% 40%‎‏;‏‏
} ‏</pre><h2>شكل اللانهائية</h2><p style="text-align: center;"><a href="https://academy.hsoub.com/uploads/monthly_2015_09/infinity.png.7f7edd4adc9503acd0565a9120ba0af6.png" class="ipsAttachLink ipsAttachLink_image"><img data-fileid="4387" src="https://academy.hsoub.com/uploads/monthly_2015_09/infinity.thumb.png.5f13d55a7669eb054f2a7e88a3c7b6cf.png" class="ipsImage ipsImage_thumbnailed" alt="infinity.thumb.png.5f13d55a7669eb054f2a7"></a></p><h3>HTML</h3><p><br>قُم بإنشاء ‏<span style="font-family:courier new,courier,monospace;">div‏</span> وأعطه اسم ‏<span style="font-family:courier new,courier,monospace;">infinity‏‏:</span></p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">‎&lt;div id="infinity"&gt;&lt;/div&gt;‎</pre><h3>CSS‎</h3><p>يمكن الحصول على شكل اللانهائية بالضبط الدقيق لخصائص الحدود وزاويا الدائرة كما بالشكل السابق:</p><pre data-pbcklang="css" data-pbcktabsize="4" class="css ipsCode prettyprint">#‏infinity‏ } ‏ ‏
    width: 220px‏;‏
    height: 100px‏;‏
    position: relative‏;‏‏
}
‏#‏infinity:before, #infinity:after‏ } ‏ ‏
    content: '';‏ ‏ ‏
    width: 60px‏;‏
    height: 60px‏;‏‏
    position: absolute‏;‏‏
    top: 0‎‏;‏
    left: 0‎‏;‏ 
    border: 20px solid #06c999; 
    -moz-border-radius: 50px 50px 0; 
    border-radius: 50px 50px 0 50px; 
    -webkit-transform: rotate(-45deg); 
    -moz-transform: rotate(-45deg); 
    -ms-transform: rotate(-45deg); 
    -o-transform: rotate(-45deg); 
    transform: rotate(-45deg); 
}
‏#‏infinity:after‏ { 
    left: auto; 
    right: 0; 
    -moz-border-radius: 50px 50px 50px 0; 
    border-radius: 50px 50px 50px 0; 
    -webkit-transform: rotate(45deg); 
    -moz-transform: rotate(45deg); 
    -ms-transform: rotate(45deg); 
    -o-transform: rotate(45deg); 
    transform: rotate(45deg); 
‏}</pre><h2>بالون التعليقات</h2><p style="text-align: center;"><a href="https://academy.hsoub.com/uploads/monthly_2015_09/comment-bubble.png.41ac27fe50e482f1ad0b04a8e515fac3.png" class="ipsAttachLink ipsAttachLink_image"><img data-fileid="4388" src="https://academy.hsoub.com/uploads/monthly_2015_09/comment-bubble.thumb.png.d0ec2c025677c7c859c0decd3832f1a9.png" class="ipsImage ipsImage_thumbnailed" alt="comment-bubble.thumb.png.d0ec2c025677c7c"></a></p><p>HTML</p><p>قُم بإنشاء ‏<span style="font-family:courier new,courier,monospace;">div‏</span> وأعطه اسم ‏<span style="font-family:courier new,courier,monospace;">comment_bubble‏‏:</span></p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">‎&lt;div id="comment_bubble"&gt;&lt;/div&gt;‎</pre><h3>CSS‎</h3><p>نقوم بصناعة هذا الشكل بواسطة إنشاء مستطيل ذي زوايا مستديرة، ثم ننشيء مُثلثًا ونضعه على الجانب الأيسر كما ‏بالصورة:</p><pre data-pbcklang="css" data-pbcktabsize="4" class="css ipsCode prettyprint">#‏comment_bubble‏ } ‏ ‏
    width: 140px‏;‏
    height: 100px‏;‏
    background: #088cb7‎‏;‏
    position: relative‏;‏ 
    -moz-border-radius: 12px; 
    -webkit-border-radius: 12px; ‏
    ‏border-radius: 12px‏;‏
}
‏#‏comment_bubble:before‏ } ‏ ‏
    content: '';‏
   ‏ ‏width: 0‎‏;‏
    height: 0‎‏;‏
    right: 100%‎‏;‏‏
    top: 38px‏;‏‏
    position: absolute‏;‏‏
    border-top: 13px solid transparent‏;‏‏
    border-right: 26px solid #088cb7‎‏;‏‏
    border-bottom: 13px solid transparent‏;‏
}</pre><h2>شكل باكمان (لعبة آكلة الجبنة)‏</h2><p style="text-align: center;"><a href="https://academy.hsoub.com/uploads/monthly_2015_09/pacman.png.f810da82e4dae239c2d51bdea2ce562c.png" class="ipsAttachLink ipsAttachLink_image"><img data-fileid="4389" src="https://academy.hsoub.com/uploads/monthly_2015_09/pacman.thumb.png.66fb7cd70a416e49d908ba86339510fa.png" class="ipsImage ipsImage_thumbnailed" alt="pacman.thumb.png.66fb7cd70a416e49d908ba8"></a></p><h3>HTML</h3><p>يتطلب شكل الباكمان وجود ‏<span style="font-family:courier new,courier,monospace;">div‏</span> مع اسمٍ للشكل ولنسمه ‏<span style="font-family:courier new,courier,monospace;">pacman‏‏:</span></p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">‎&lt;div id="pacman"&gt;&lt;/div&gt;‎</pre><h3>CSS‎</h3><p>إنشاء شكل الباكمان غير صعب، فكل ما يحتاجه هو نفس خطوات إنشاء الدائرة مع تعديل بسيط في الحدود وخاصية ‏‏‏<span style="font-family:courier new,courier,monospace;">radius‏</span> لصنع فتحة على الجانب الأيسر من الدائرة‏:</p><pre data-pbcklang="css" data-pbcktabsize="4" class="css ipsCode prettyprint">#‏pacman‏ } ‏ ‏
    width: 0‎‏;‏‏
    height: 0‎‏;‏‏
    border-right: 70px solid transparent‏;‏
    border-top: 70px solid #ffde00‎‏;‏‏
    border-left: 70px solid #ffde00‎‏;‏‏
    border-bottom: 70px solid #ffde00‎‏;‏
    border-top-left-radius: 70px‏;‏‏
    border-top-right-radius: 70px‏;‏‏
    border-bottom-left-radius: 70px‏;‏
    border-bottom-right-radius: 70px‏;‏‏
}</pre><h2>في الختام</h2><p>توجد هناك العديد من الميزات في استخدام الأشكال المصنوعة بالـ‏CSS‏، فهي أفضل بكثير من وضع صور ‏جاهزة على موقعك. فأنت تستطيع استخدامها الآن كجزء من تصاميم المواقع، على الرغم من أنها قد لا تعمل على ‏بعض المتصفحات مثل إنترنت إكسبلورر بإصداراته القديمة. ‏</p><p>الآن وقد انتهيت من درس اليوم، أتمنى أن تكون قد استمتعت فيه، وأنا على استعداد لتقبل أي تعليقات أو تساؤلات أو ‏اقتراحات في هذا المجال.‏</p><p>ترجمة وبتصرف للمقال: <a rel="external nofollow" href="http://www.1stwebdesigner.com/create-different-shapes-css/">How to Create Different Shapes in CSS</a>.</p><p>حقوق الصورة البارزة: <a rel="external nofollow" href="http://www.freepik.com/free-vector/triangle-pencil-vector-infography_715741.htm">Designed by Freepik</a>.</p>
]]></description><guid isPermaLink="false">153</guid><pubDate>Sat, 29 Aug 2015 22:21:00 +0000</pubDate></item><item><title>&#x62A;&#x646;&#x628;&#x64A;&#x647;&#x627;&#x62A; &#x645;&#x646;&#x628;&#x62B;&#x642;&#x629; &#x648;&#x645;&#x648;&#x642;&#x648;&#x62A;&#x629; &#x628;&#x627;&#x633;&#x62A;&#x62E;&#x62F;&#x627;&#x645; &#x62D;&#x631;&#x643;&#x64A;&#x627;&#x62A; CSS</title><link>https://academy.hsoub.com/programming/css/%D8%AA%D9%86%D8%A8%D9%8A%D9%87%D8%A7%D8%AA-%D9%85%D9%86%D8%A8%D8%AB%D9%82%D8%A9-%D9%88%D9%85%D9%88%D9%82%D9%88%D8%AA%D8%A9-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D8%AD%D8%B1%D9%83%D9%8A%D8%A7%D8%AA-css-r152/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2015_08/css-timed-notification.png.b7b34db6454d596db9cf5b72ae543d86.png" /></p>

<p>في هذا المقال القصير سوف نصنع تنبيها مؤقتا بسيطا عبر CSS animations. ما سنفعله بالتحديد هو إظهار تنبيه بسيط أو عبارة ما أسفل الشاشة لمدة معينة، ثم إخفائها. وسوف سنعمل شريط تقدم (progress bar) لنعرف كم تبقى من الوقت ليختفي التنبيه.</p><p style="text-align: center;"><a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2015_08/css-timed-notification.png.e2f67d42d1ae357c8744916716ec8fb3.png"><img data-fileid="4157" class="ipsImage ipsImage_thumbnailed" alt="css-timed-notification.thumb.png.9f560f4" src="https://academy.hsoub.com/uploads/monthly_2015_08/css-timed-notification.thumb.png.9f560f4809807011423828be4a31dc92.png"></a></p><p>ستكون تنبيهات هذا الدرس من الشكل التالي:</p><p style="text-align: center;"><a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2015_08/21-1439316799-notif.png.56eb78316f6d00f8946a99dda4ddb7f0.png"><img data-fileid="4156" class="ipsImage ipsImage_thumbnailed" alt="21-1439316799-notif.thumb.png.1c19e88f17" src="https://academy.hsoub.com/uploads/monthly_2015_08/21-1439316799-notif.thumb.png.1c19e88f17c5b5d5e161adc24af04859.png"></a></p><p>بالنسبة للهيكلة فسوف نستخدم <span style="font-family:courier new,courier,monospace;"><code>div</code></span> يحتوي على الرسالة وبداخله <span style="font-family:courier new,courier,monospace;"><code>div</code></span> آخر من أجل شريط التقدم:</p><pre data-pbcklang="html" data-pbcktabsize="" class="html ipsCode prettyprint">&lt;div class="tn-box tn-box-color-1"&gt;
    &lt;p&gt;Your settings have been saved successfully!&lt;/p&gt;
    &lt;div class="tn-progress"&gt;&lt;/div&gt;
&lt;/div&gt;</pre><p>سيملك التنبيه <span style="font-family:courier new,courier,monospace;"><code>tn-box.</code> </span>و <span style="font-family:courier new,courier,monospace;"><code>tn-box-color-1.</code></span> من أجل تحديد اللون، سوف نثبت الصندوق أسفل النافذة حتى يرتفع عندما يظهر:</p><pre data-pbcklang="css" data-pbcktabsize="" class="css ipsCode prettyprint">.tn-box {
    width: 360px;
    position: fixed;
    bottom: 20px;
    left: 20px;
    padding: 25px 15px;
    text-align: right;
    border-radius: 5px;
    box-shadow: 
        0 1px 1px rgba(0,0,0,0.1), 
        inset 0 1px 0 rgba(255,255,255,0.6);  
    opacity: 0;
    cursor: default;
    display: none;
    transform: translateY(30px)
}

.tn-box-color-1{
    background: #ffe691;
    border: 1px solid #f6db7b;
}</pre><p>أما بالنسبة لشريط التقدم فسنعطيه التالي:</p><pre data-pbcklang="css" data-pbcktabsize="" class="css ipsCode prettyprint">.tn-progress {
    width: 0;
    height: 4px;
    background: rgba(255,255,255,0.3);
    position: absolute;
    bottom: 5px;
    right: 2%;
    border-radius: 3px;
    box-shadow: 
        inset 0 1px 1px rgba(0,0,0,0.05), 
        0 -1px 0 rgba(255,255,255,0.6);
}</pre><p>في البداية، سيكون عرض شريط التقدم 0.</p><p>في هذا المثال، أنا أستخدم checkbox من أجل إطلاق animation عندما يتم الضغط عليه:</p><pre data-pbcklang="html" data-pbcktabsize="" class="html ipsCode prettyprint">&lt;input type="checkbox" class="fire-check"&gt;
&lt;section&gt;
    &lt;div class="tn-box tn-box-color-1"&gt;
        &lt;p&gt;شريط التقدم الجميل!&lt;/p&gt;
        &lt;div class="tn-progress"&gt;&lt;/div&gt;
      &lt;/div&gt;
  &lt;/section&gt;</pre><p>الزر يسبق صندوق التنبيهات لذا نستطيع استخدام محدد <span style="font-family:courier new,courier,monospace;"><code>~</code></span> من أجل تحديد العنصر الذي يأتي بعده.</p><p>وإذا أردت أن تتحكم بالأمر عبر جافاسكربت (عبر إضافة <span style="font-family:courier new,courier,monospace;"><code>tn-box-active</code></span><span style="font-family:courier new,courier,monospace;"><code>.</code></span> )، فاستخدم التالي:</p><pre data-pbcklang="css" data-pbcktabsize="" class="css ipsCode prettyprint">.tn-box.tn-box-active {
    display: block;
    animation: fadeOut 5s cubic-bezier(0.4, 0, 0.2, 1) forwards;
}

.tn-box.tn-box-active .tn-progress {
    animation: runProgress 4s linear forwards 0.5s;
}</pre><p>أما بالنسبة للحركية (animation) فهي كالتالي:</p><pre data-pbcklang="css" data-pbcktabsize="" class="css ipsCode prettyprint">@keyframes fadeOut {
    0%  { opacity: 0; }
    10% { opacity: 1; transform: translateY(0px);}
    90% { opacity: 1; transform: translateY(0px);}
    99% { opacity: 0; transform: translateY(30px);}
    100% { opacity: 0; }
}
@keyframes runProgress {
    0%  { width: 0%; background: rgba(255,255,255,0.3); }
    100% { width: 96%; background: rgba(255,255,255,1); }
}</pre><p>ما ستقوم به الـحركية (animation) هو إظهار الصندوق (عبر رفعه ورفع درجة الشفافية) ثم تكبير عرض شريط التقدم.</p><p>حددنا عرض شريط التقدم إلى 96% (لأنه يبعد عن يمين الصندوق بـ 2% لذا نريده أن يتوقف قبل 2% من اليسار أيضا).</p><h2>مثال حي</h2><p data-height="268" data-theme-id="0" data-slug-hash="ZbzMWQ" data-default-tab="result" data-user="HsoubAcademy" class="codepen">See the Pen <a rel="external nofollow" href="http://codepen.io/HsoubAcademy/pen/ZbzMWQ/">ZbzMWQ</a> by Hsoub Academy (<a rel="external nofollow" href="http://codepen.io/HsoubAcademy">@HsoubAcademy</a>) on <a rel="external nofollow" href="http://codepen.io">CodePen</a>.</p><script async src="https://assets.codepen.io/assets/embed/ei.js"></script><p><strong>ملاحظة</strong>: شيء إضافي وجدت أنه من الجميل إضافته هو إيقاف animation عند تمرير المؤشر على الصندوق. ولكن للأسف، الأمر لم ينجح في chrome بينما نجح في فيرفكس.</p><pre data-pbcklang="css" data-pbcktabsize="" class="css ipsCode prettyprint">.tn-box:hover, 
.tn-box:hover .tn-progress{
    animation-play-state: paused;
}</pre><p>ترجمة -وبتصرف- للمقال: <a rel="external nofollow" href="http://tympanus.net/codrops/2012/06/25/timed-notifications-with-css-animations/">Timed Notifications with CSS Animations</a> لصاحبه Mary Lou.</p><p>حقوق الصورة البارزة: <a rel="external nofollow" href="http://www.freepik.com/free-vector/christmas-bells-icon_760672.htm">Designed by Freepik</a>.</p>
]]></description><guid isPermaLink="false">152</guid><pubDate>Fri, 28 Aug 2015 17:39:00 +0000</pubDate></item><item><title>&#x62A;&#x62D;&#x631;&#x64A;&#x643; &#x634;&#x628;&#x647; &#x627;&#x644;&#x639;&#x646;&#x627;&#x635;&#x631; (pseudo-elements) &#x641;&#x64A; CSS</title><link>https://academy.hsoub.com/programming/css/%D8%AA%D8%AD%D8%B1%D9%8A%D9%83-%D8%B4%D8%A8%D9%87-%D8%A7%D9%84%D8%B9%D9%86%D8%A7%D8%B5%D8%B1-pseudo-elements-%D9%81%D9%8A-css-r145/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2015_08/shiny.png.468eba130c17a36d853ef75865ea467c.png" /></p>

<p>
	تُقدّم أشباه العناصر (pseudo-elements) عناصر <strong>DOM</strong> إضافيّة وبدون عناء يُذكر، فهي تَسمح للمُطوّر في إضافة مُحتوى إضافي إلى الصفحات وبدون إضافة أيًا من عناصر <strong>HTML</strong> على الصفحة، كما يُمكن لها أنّ تتحرّك (animated).
</p>

<p>
	ستتناول هذه المقالة استخدام شبه عنصر (pseudo-element) لإضافة تأثير بصري على زر.
</p>

<p>
	 
</p>

<section class="shiny demo-container tap-to-activate"><button>Shiny effect</button>
</section><p>
	 
</p>

<h2>
	شبه العناصر Pseudo-elements
</h2>

<p>
	يُمكن باستخدام <strong>CSS</strong> تحديد شبه عنصر باستخدام <span style="font-family:courier new,courier,monospace;"><code>::before</code></span> أو<span style="font-family:courier new,courier,monospace;"> <code>::after</code></span> ليتم بعد ذلك إدراج <strong>شبه العنصر</strong> ضمن العنصر، أو بين العنصر و محتوى ما، وباعتبار أنّ شبه العنصر يعمل عمل أي عنصر، فمن المُمكن أنّ يتمّ تنسيقه، أو توضيعه، وستكون صياغة الشيفرة الخاصّة به على الشكل التّالي:
</p>

<pre class="css ipsCode prettyprint" data-pbcklang="css" data-pbcktabsize="">
.pebble::before {
  ...
}
.pebble::after {
  ...
}</pre>

<p>
	يُمكن القول هنا، أنّ العنصر <code>pebble.</code> يملك عنصرين وهميين مُرتبطين به، ويُمكن تنسيقهما أيضًا.
</p>

<h3>
	ملاحظة حول الفرق بين استخدام "::" و ":"
</h3>

<p>
	يُقبَل عامًّا استخدام تضعيف النقطتان، وذلك للدلالة على استخدام شبه العناصر، وذلك على عكس شبه الأصناف (pseudo-classes) مثل <code>:hover</code> أو <code>:first-child</code>، ولكن يجب استخدام (<code><img alt=":)" src="https://academy.hsoub.com/uploads/monthly_2015_02/smile.png.cf72ab87c1aaefd42371e0a7de39cfae.png" title=":)" srcset="https://academy.hsoub.com/uploads/emoticons/smile@2x.png 2x" width="20" height="20"></code> في حال الرغبة في دعم <strong>IE8</strong>، مع العلم أنّ جميع المُتصفّحات الأخرى وبإصداراتها الأخيرة تدعم النقطتان المُضاعفتان (<code>::</code>).
</p>

<h3>
	استخدام خاصية <code>content</code>
</h3>

<p>
	يجب عند استخدام شبه العناصر، ضبط الخاصّيّة <code>content</code> لكي يُصبح شبه العناصر مرئيًا على الصّفحة، ومن المُمكن الاحتيال عليه للظهور عبر استخدام مُحتوى فارغ كما في التّالي:
</p>

<pre class="css ipsCode prettyprint" data-pbcklang="css" data-pbcktabsize="">
.pebble::before {
  content: ""
  ... more styling goes here...
}</pre>
<style type="text/css">
.shiny{-webkit-perspective:500px;perspective:500px;-webkit-transform-style:preserve-3d;transform-style:preserve-3d;display:inline-block}.shiny button{background:#d1703c;color:#fff;font-size:14px;border:none;border-radius:0.5em;height:3em;padding:0 1em;position:relative;overflow:hidden;line-height:2em;-webkit-transition:all 0.5s cubic-bezier(.67,-0.51,.42,1.43);transition:all 0.5s cubic-bezier(.67,-0.51,.42,1.43)}.shiny button:hover,.shiny button:focus{border-color:#d1703c;color:#fff;font-size:24px}.shiny button:hover::after,.shiny button:focus::after,.shiny .demo-container.active button::after{-webkit-animation:sheen 1s 0.5s forwards;animation:sheen 1s 0.5s forwards}.shiny button::after{content:'';position:absolute;top:-50%;right:-50%;bottom:-50%;left:-50%;background:-webkit-linear-gradient(top,rgba(209,112,60,0),rgba(255,255,255,0.5) 50%,rgba(209,112,60,0));background:linear-gradient(to bottom,rgba(209,112,60,0),rgba(255,255,255,0.5) 50%,rgba(209,112,60,0));-webkit-transform:rotateZ(60deg) translate(-5em,7.5em);transform:rotateZ(60deg) translate(-5em,7.5em)}.shiny button.visible{overflow:visible}.shiny button:hover{cursor:pointer}@-webkit-keyframes sheen{100%{-webkit-transform:rotateZ(60deg) translate(1em,-14em);transform:rotateZ(60deg) translate(1em,-14em)}}@keyframes sheen{100%{-webkit-transform:rotateZ(60deg) translate(1em,-14em);transform:rotateZ(60deg) translate(1em,-14em)}}</style>
<p>
	يجب أنّ تجعل الشيفرة السابقة من العنصر مرئيًا على الصّفحة.
</p>

<h2>
	الزر البراق (Shiny button)
</h2>

<p>
	سيتمّ استخدام شبه العنصر لإتمام هذا المثال، وذلك عبر إنشاء تأثير اللّمعان عند المرور فوق الزر، كما في المثال.
</p>

<p>
	 
</p>

<section class="shiny demo-container tap-to-activate"><button>Shiny effect</button>
</section><p>
	 
</p>

<p>
	البداية مع شيفرة HTML
</p>

<pre class="html ipsCode prettyprint" data-pbcklang="html" data-pbcktabsize="">
&lt;button&gt;Oooh SHINY&lt;/button&gt;</pre>

<p>
	لا يوجد حاجة إلى كتابة المزيد من سطور <strong>HTML</strong> للمُتابعة، على اعتبار أنّه سيتمّ استخدام شبه العنصر لإضافة بقيّة المُحتوى، ولكن لا بأس من إضافة صنف (class) إلى الوسم <code>&lt;button&gt;</code> لتنسيقه عند وجود أكثر من نوع على الصّفحة، ولكن للمثال الحالي سيتمّ استخدام عنصر الزر على حاله للتبسيط.
</p>

<h3>
	إضافة التأثير
</h3>

<p>
	إن التأثير المُراد إضافته ما هو إلا تدرّج خطي (linear gradient) يمر عبر الزر، ولإنشاء هذا التدرّج سيتمّ استخدام شبه العنصر <code>after</code>، وتوضيعه في خارج الزر وفي بدايته.
</p>

<pre class="css ipsCode prettyprint" data-pbcklang="css" data-pbcktabsize="">
button::after {
  content: '';
  position: absolute;
  top: -50%;
  right: -50%;
  bottom: -50%;
  left: -50%;
  background: linear-gradient(to bottom, rgba(229, 172, 142, 0), rgba(255,255,255,0.5) 50%, rgba(229, 172, 142, 0));
  transform: rotateZ(60deg) translate(-5em, 7.5em);
}</pre>

<p>
	يُصنع تأثير اللّمعان من تدرّج اللون الخارجي للزر إلى الأبيض ومن ثُمّ إلى العودة إلى اللون الأصلي.
</p>

<p>
	يجب إخفاء طبقة اللّمعان لتظهر فقط عند حركة المرور (hover)، ولعمل ذلك سيتمّ ضبط خاصّيّة <code>overflow</code> إلى <code>hidden</code> للزر، وباعتبار أنّ شبه العنصر هو ضمن الزر، فهذا يعني أنّ تموضعه خارج الزر لن يكون مرئيًّا.
</p>

<pre class="css ipsCode prettyprint" data-pbcklang="css" data-pbcktabsize="">
button {
  background: #e5ac8e;
  color: #fff;
  font-size: 14px;
  border-radius: 0.5em;
  padding: 0 1em;
  position: relative;
  overflow: hidden;
  line-height: 32px;
}</pre>

<p>
	تمّ إضافة بعض التنسيق إلى الزر لكي يظهر بارزًا وذو منظرٍ خاصٍّ به، تجدر الإشارة هنا إلى استخدام <code>position: relative</code>، وذلك لكي يكون شبه العنصر المتموضع بشكل مُطلق (absolutely) مُتواجدًا داخل الزر، فبدون ضبط هذه الخاصّيّة، سيتموضع العنصر ذو التَمَوْضُع المُطلق ضمن العنصر الأب.
</p>

<h2 id="إضافة-التحريك">
	إضافة التحريك (Adding the animation)
</h2>

<p>
	يجب لاستكمال هذا المثال باستخدام التحريك:
</p>

<ul>
<li>
		أوّلًا: إخبار المُتصفّح ليستخدم التحريك عند حركة المرور (hover).
	</li>
	<li>
		ثانيًا: تحديد بالضَّبط ما هو التحريك المطلوب وذلك باستخدام <code>keyframes</code>.
	</li>
</ul>
<p>
	يتمّ إضافة حالة المرور عبر إلحاق <code>after</code> إلى <code>hover</code> كما في التّالي:
</p>

<pre class="css ipsCode prettyprint" data-pbcklang="css" data-pbcktabsize="">
button:hover::after, button:focus::after {
  animation: sheen 1s forwards;
}</pre>

<p>
	تمّ في الشيفرة السابقة إخبار المُتصفّح، أنّه عند حركة المرور (hover)،<br>
	يجب على شبه العنصر <code>after</code> أنّ يُطبّق التحريك <code>animation</code>، ذو الاسم “sheen”، ولمدّة ثانية واحدة، ويتوقف عند النهاية بدون تكرار.
</p>

<p>
	يجب الأخذ بعني الاعتبار الترتيب، فاستخدام <code>::after:hover</code> لن يعمل، حيثُ عندها سيتمّ إخبار المُتصفّح ليتفاعل مع حالة المرور (hover) لشبه العنصر نفسه.
</p>

<p>
	تتوفّر الشيفرة السابقة أيضًا على حالة التمركز (focus)، والّتي تعني أنّ المُستخدم الّذي يضغط على زر لوحة المفاتيح <code>tab</code> ضمن الصّفحة سيرى التأثير "sheen" أيضًا عند الوصول إليه، وبدون الحاجة لحركة المرور.
</p>

<p>
	سيتمّ في الخطوة التّالية تعيين وضبط <code>keyframes</code> لهذا التحريك:
</p>

<pre class="css ipsCode prettyprint" data-pbcklang="css" data-pbcktabsize="">
@keyframes sheen {
  100% {
    transform: rotateZ(60deg) translate(1em, -9em);
  }
}</pre>

<p>
	تمّ في الشيفرة السابقة كتابة keyframe واحد فقط، وذلك باعتبار أنّ بداية التَمَوْضُع (0%) هي مُضمّنة من قبل تَمَوْضُع بداية <strong>شبه العنصر</strong>، فكل ما يجب فعله هو ضبط نهاية التَمَوْضُع، والتي ستكون أعلى يمين الزر، ليُحاكي المُتصفح هذا التأثير
</p>

<p>
	 
</p>

<section class="shiny demo-container tap-to-activate"><button>Shiny effect</button>
</section><p>
	 
</p>

<h2>
	دعم المتصفحات للتحريك
</h2>

<p>
	أصبحت الخاصّيّة <a href="http://caniuse.com/#feat=css-animation" rel="external nofollow">animation</a>، و <a href="http://caniuse.com/#feat=css-gencontent" rel="external nofollow">شبه العناصر</a> مدعومة بشكل جيّد مع آخر إصدارات المُتصفّحات، ولكن يُستحسن دائمًا إلحاق السوابق <code>webkit</code> و <code>moz</code> من أجل الخاصّيّة <code>keyframes</code>.
</p>

<p>
	ترجمة وبتصرف للمقال <a href="https://cssanimation.rocks/pseudo-elements/" rel="external nofollow">Animating pseudo-elements</a>.
</p>
]]></description><guid isPermaLink="false">145</guid><pubDate>Sat, 15 Aug 2015 09:52:00 +0000</pubDate></item><item><title>&#x62A;&#x62D;&#x631;&#x64A;&#x643; &#x632;&#x631; &#x62A;&#x641;&#x636;&#x64A;&#x644; &#x627;&#x644;&#x62A;&#x63A;&#x631;&#x64A;&#x62F;&#x629; &#x627;&#x644;&#x62E;&#x627;&#x635; &#x628;&#x62A;&#x648;&#x64A;&#x62A;&#x631; &#x628;&#x627;&#x633;&#x62A;&#x62E;&#x62F;&#x627;&#x645; css &#x641;&#x642;&#x637;</title><link>https://academy.hsoub.com/programming/css/%D8%AA%D8%AD%D8%B1%D9%8A%D9%83-%D8%B2%D8%B1-%D8%AA%D9%81%D8%B6%D9%8A%D9%84-%D8%A7%D9%84%D8%AA%D8%BA%D8%B1%D9%8A%D8%AF%D8%A9-%D8%A7%D9%84%D8%AE%D8%A7%D8%B5-%D8%A8%D8%AA%D9%88%D9%8A%D8%AA%D8%B1-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-css-%D9%81%D9%82%D8%B7-r117/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2019_06/5d0a610246d1c_.jpg.cc67525e2abeeb991bc323b1ef7e531a.jpg" /></p>

<div id="wmd-preview-section-22">
	<p id="تحريك-زر-تفضيل-التغريدة-الخاص-بتويتر">
		حدّث تويتر مؤخرًا تصميم زر التفضيل "fave" الخاصّ به، وذلك بتقديم تحريكٍ جديد، وبدلًا من الاعتماد على التنقل transitions في CSS، فإن التحريك المُستخدم يعتمد على استخدام سلسلة من الصور، في هذا الشرح سيتمّ إعادة إنشاء التحريك باستخدام CSS وبدالة التوقيت <span style="font-family:courier new,courier,monospace;">steps</span>.
	</p>
</div>

<div id="wmd-preview-section-23">
	<h2 id="وهم-الحركة-illusion-of-movement">
		وهم الحركة (Illusion of movement)
	</h2>

	<p>
		يُشبه هذا التأثير إلى حدٍ كبيرٍ التأثير المُقدّم بواسطة أجهزة <a href="http://en.wikipedia.org/wiki/Zoetrope" rel="external nofollow">Zoetrope</a> القديمة، حيثُ تعرض سلسلة من الرسومات في حلقة وحول أسطوانة، ولكن ما سيتمّ استخدامه هنا هو عرض سلسلة مُسطّحة من الصور داخل عنصر.
	</p>
</div>

<div id="wmd-preview-section-24">
	<h2 id="عرض-المثال">
		عرض المثال
	</h2>

	<p>
		مثال على تحريك الزر عند حركة المرور <span style="font-family:courier new,courier,monospace;">hover</span>:
	</p>

	<div class="twitter-fave" style="text-align: center;">
		 
	</div>
	<style type="text/css">
.twitter-fave {
	    width: 70px;
	    height: 50px;
	    background: url("//raw.githubusercontent.com/HsoubAcademy/HsoubAcademy.github.io/master/examples/CSS-animation-series/Twitter%20fave%20animation/twitter_fave.png") no-repeat;
	    background-position: 0 0;
	  }

	  .twitter-fave:hover {
	    background-position: -3519px 0;
	    transition: background 1s steps(55);
	  }	</style>
<p>
		يمكن معاينة الملفات المصدرية لهذا الدرس على <a href="https://github.com/HsoubAcademy/HsoubAcademy.github.io/tree/master/examples/CSS-animation-series/Twitter%20fave%20animation" rel="external nofollow">حساب أكاديمية حسوب على Github</a>.
	</p>

	<p>
		تمّ في البداية إنشاء سلسلة من الصور، والّتي ستُشكل التحريك في نهاية الأمر:
	</p>

	<p style="text-align: center;">
		<a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2015_07/twitter_fave_rectangle.png.158763faf765a31d59ce1584a8bc3e4e.png" data-fileid="3193" rel=""><img alt="twitter_fave_rectangle.thumb.png.d96e778" class="ipsImage ipsImage_thumbnailed" data-fileid="3193" src="https://academy.hsoub.com/uploads/monthly_2015_07/twitter_fave_rectangle.thumb.png.d96e778fa5f73b6a6856848b56af984d.png"></a>
	</p>

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

	<p>
		كيف ستتموضع صور الخلفيّة background image ضمن العنصر:
	</p>

	<p style="text-align: center;">
		<a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2015_07/frames.png.0caedd7c5c140ce8380e417da6896564.png" data-fileid="3192" rel=""><img alt="frames.thumb.png.52c5fce6a58555e803942a2" class="ipsImage ipsImage_thumbnailed" data-fileid="3192" src="https://academy.hsoub.com/uploads/monthly_2015_07/frames.thumb.png.52c5fce6a58555e803942a285f3e78c9.png"></a>
	</p>
</div>

<div id="wmd-preview-section-25">
	<h3 id="دالة-التوقيت-steps">
		دالة التوقيت ()steps
	</h3>

	<p>
		كما هو الأمر مع مُعظم دالات التوقيت مثل ease أو cubic-bezier، فإن الانتقال transition يُحرّك العنصر بسلاسة بين حالة البداية وحالة النهاية، أما دالة التوقيت <span style="font-family:courier new,courier,monospace;">steps</span> فهي مُختلفة، فبدلًا من ذلك الانتقال (بين نقطتين)، سيتمّ تقسيم التحوّل/الانتقال إلى عدد من الخطوات والتحكم بين هذه الخطوات بشكل مُنفصل.
	</p>

	<p>
		تمثيل دالة ()steps بالرسم البياني، والّتي تَظهر على شكل سلسلة من الخطوات:
	</p>

	<p style="text-align: center;">
		<a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2015_07/steps.png.dcf42b429a74c579661ea38ba318fb97.png" data-fileid="3196" rel=""><img alt="steps.thumb.png.6458c4dbfe5b983412c636bb" class="ipsImage ipsImage_thumbnailed" data-fileid="3196" src="https://academy.hsoub.com/uploads/monthly_2015_07/steps.thumb.png.6458c4dbfe5b983412c636bb856960d4.png"></a>
	</p>

	<p>
		البداية مع إعداد HTML:
	</p>

	<pre class="ipsCode prettyprint" data-pbcklang="" data-pbcktabsize="">
&lt;section class="fave"&gt;&lt;/section&gt;</pre>
</div>

<div id="wmd-preview-section-26">
	<h3 id="صورة-الخلفية-background-image">
		صورة الخلفيّة Background image 
	</h3>

	<p>
		سيتمّ في الخطوة التّالية تنسيق العنصر السابق وإضافة تَمَوْضُع لصورة الخلفيّة background image:
	</p>

	<p style="text-align: center;">
		<a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2015_07/twitter_fave.png.15da901267f4209523d38236875384f4.png" data-fileid="3194" rel=""><img alt="twitter_fave.thumb.png.0bdc462244b88e597" class="ipsImage ipsImage_thumbnailed" data-fileid="3194" src="https://academy.hsoub.com/uploads/monthly_2015_07/twitter_fave.thumb.png.0bdc462244b88e597de77cbe3b9df3b0.png"></a>
	</p>

	<pre class="css ipsCode prettyprint" data-pbcklang="css" data-pbcktabsize="">
.fave {
  width: 70px;
  height: 50px;
  background: url(images/twitter_fave.png) no-repeat;
  background-position: 0 0;
}</pre>

	<p>
		سيتمّ إضافة تنسيق لحركة المرور <span style="font-family:courier new,courier,monospace;">hover</span>، ليتم نقل تَمَوْضُع الخلفيّة إلى نهاية سلسلة الصّور:
	</p>

	<pre class="css ipsCode prettyprint" data-pbcklang="css" data-pbcktabsize="">
.fave:hover {
  background-position: -3519px 0;
  transition: background 1s steps(55);
}</pre>

	<p>
		تمّ في الخاصّيّة الثانية تعيين قيمة للانتقال <span style="font-family:courier new,courier,monospace;">transition</span>، وذلك للخاصية background وبمدة انتقال ثانية واحدة، ولدالة التوقيت <span style="font-family:courier new,courier,monospace;">()steps</span> القيمة <span style="font-family:courier new,courier,monospace;">55</span>، وذلك لأن عدد الصور الكلّي الّتي سيتمّ التبديل بينها هو: <span style="font-family:courier new,courier,monospace;">55</span>.
	</p>

	<p>
		لن يحدث التحريك إلّا عند حركة المرور hover، حيثُ سيتمّ الانتقال عبر جميع الصور وبعدد خطوات متساوي (55 خطوة).
	</p>
</div>

<div id="wmd-preview-section-27">
	<h3 id="لماذا-لا-يتم-استخدام-gif-مع-التحريك">
		لماذا لا يتمّ استخدام gif مع التحريك؟
	</h3>

	<p>
		يُمكن في الحقيقة استخدام الصور المُتحركة (gifs)، ولكن لن تكون الاختيار الأمثل في هذه الحالة، حيثُ حجم الملفّ سيكون أكبر، ومن الصعب التحكم بمُعدّل النقل، ولكن بالطريقة المُستخدمة هنا يُمكن عمل: إيقاف مؤقت، إعادة التحريك، وإجراء كافّة التعديلات المطلوبة لإتمام التحريك على الوجه المطلوب.
	</p>
</div>

<div id="wmd-preview-section-28">
	<h2 id="استخدامات-أخرى-للدالة-steps">
		استخدامات أخرى للدالة steps
	</h2>

	<p>
		إن تحريك الصور من نوع sprites هو أحد استخدامات دالة التوقيت steps، فأي شيء يحتاج إلى التحريك على شكل سلسلة من الخطوات المُفصّلة، يُمكن له الاستفادة من هذه الدالة.
	</p>
</div>

<div id="wmd-preview-section-29">
	<h2 id="أقصوصة-الغش-cheatsheet">
		أقصوصة الغش (Cheatsheet)
	</h2>

	<p>
		تقدّم الأقصوصة التّالية مُختصر للمقالة، والذي يُمكن الرجوع إليه عند تطبيق الدرس.
	</p>

	<p style="text-align: center;">
		<a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2015_07/twitter-fave.png.7d7f8db37177ad6f758805443e5239a9.png" data-fileid="3195" rel=""><img alt="twitter-fave.thumb.png.565060287d0e7548c" class="ipsImage ipsImage_thumbnailed" data-fileid="3195" src="https://academy.hsoub.com/uploads/monthly_2015_07/twitter-fave.thumb.png.565060287d0e7548cd247bab4de8cf49.png"></a>
	</p>
</div>

<div id="wmd-preview-section-30">
	<h2 id="خاتمة">
		خاتمة
	</h2>

	<p>
		ما أجمل التحريك في صفحات الويب؛ سرعة، خفّة، مرونة، جمال، أنصح بالقراءة عن الأمر والتعمّق في جنباته، فهو الوجه الجديد لصفحات الويب.
	</p>

	<p>
		ترجمة وبتصرّف للمقال <a href="https://cssanimation.rocks/twitter-fave/" rel="external nofollow">Twitter’s "fave" animation</a>.
	</p>
</div>
]]></description><guid isPermaLink="false">117</guid><pubDate>Sat, 01 Aug 2015 18:35:00 +0000</pubDate></item><item><title>&#x636;&#x628;&#x637; &#x648;&#x62A;&#x648;&#x633;&#x64A;&#x637; &#x639;&#x646;&#x627;&#x635;&#x631; &#x627;&#x644;&#x62A;&#x631;&#x648;&#x64A;&#x633;&#x629; (Header) &#x639;&#x645;&#x648;&#x62F;&#x64A;&#x627; &#x628;&#x627;&#x633;&#x62A;&#x62E;&#x62F;&#x627;&#x645; CSS</title><link>https://academy.hsoub.com/programming/css/%D8%B6%D8%A8%D8%B7-%D9%88%D8%AA%D9%88%D8%B3%D9%8A%D8%B7-%D8%B9%D9%86%D8%A7%D8%B5%D8%B1-%D8%A7%D9%84%D8%AA%D8%B1%D9%88%D9%8A%D8%B3%D8%A9-header-%D8%B9%D9%85%D9%88%D8%AF%D9%8A%D8%A7-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-css-r115/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2015_07/css-center-items.png.40b31c34b754354d3c5e07551e07f371.png" /></p>

<p dir="rtl">في بعض الأحيان تحتاج التصاميم شديدة البساطة إلى بنية معقدة وتطبيق مهارات مختلفة على التنسيق. توسيط العناصر، ضبط المحتوى و المحاذاة هي طرق غير كافية لجميع الحالات. أحد العيوب التي يمكن أن تسببها الطرق السابقة تكمن عند ضبط الترويسة بحيث يكون: العنوان على اليسار وقائمة التنقل على اليمين. في هذه الحالة من الشائع استخدام الخواص <span style="font-family:courier new,courier,monospace;">float</span> ،<span style="font-family:courier new,courier,monospace;">position</span> مع إعطاء القيمة <span style="font-family:courier new,courier,monospace;">absolute</span>، كأسلوب آخر يمكن التفكير باستخدام الخصائص <span style="font-family:courier new,courier,monospace;">padding</span>, <span style="font-family:courier new,courier,monospace;">margin</span> ، حيث يوجد بالتأكيد عدة طرق وأساليب ولكن السؤال المهم هو: أي هذه الطرق مناسب عند عمل تصميم متوافق مع جميع أجهزة العرض "responsive" ؟ فبعض الطرق تعطي نتائج جيدة على الشاشات كبيرة الحجم ولكنها تؤدي إلى نتائج غير مرغوبة في الشاشات الصغيرة.</p><p style="text-align: center;"><a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2015_07/css-center-items.png.751f35a7a269fa2b7535206a58476286.png"><img data-fileid="3267" class="ipsImage ipsImage_thumbnailed" alt="css-center-items.thumb.png.1760a2bf75e81" src="https://academy.hsoub.com/uploads/monthly_2015_07/css-center-items.thumb.png.1760a2bf75e8117423f23b6df06f74dc.png"></a></p><p dir="rtl">ضمن هذا الدرس سنظهر كيفية توسيط عناصر الترويسة (أو أي عنصر آخر) وضبطها بشكل عمودي/شاقولي وباستخدام أشباه العناصر<span style="font-family:courier new,courier,monospace;"> pseudo-elements</span> فقط. وبدون استخدام الخصائص <span style="font-family:courier new,courier,monospace;">float</span> أو <span style="font-family:courier new,courier,monospace;">absolute</span>. وذلك للحصول على نتيجة مشابهة للتالي :</p><p dir="rtl" style="text-align: center;"><img alt="Header01" src="https://lh5.googleusercontent.com/821u97k872pX4l3snN3bihHuXtZ4NE_HrcZgCOjIQ-PSXqD0xoCTqIrUbVBt3TYRb4oFekY3zhA3bF6hJRrnCh8xTghAmUeKrdYxBMm6vP9PpLRtJibGNzIHTCxM64td68wa_tNcuK9uZ5AP"></p><p dir="rtl">شيفرة HTML لهذا المثال بسيطة جدا وهي :</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">&lt;header&gt;
    &lt;h1&gt;Super Bad&lt;/h1&gt;
    &lt;nav&gt;
        &lt;a&gt;First Link&lt;/a&gt;
        &lt;a&gt;Second Link&lt;/a&gt;
        &lt;a&gt;Third Link&lt;/a&gt;
    &lt;/nav&gt;
&lt;/header&gt;</pre><p dir="rtl">سنقوم بتطبيق بعض التنسيقات على هذه الترويسة لإعطائها ارتفاعًا ثابتًا وبعض الحشوة <span style="font-family:courier new,courier,monospace;">padding</span> كما نقوم بإعطاء الخاصية <span style="font-family:courier new,courier,monospace;">text-align</span> القيمة <span style="font-family:courier new,courier,monospace;">justify</span> وذلك لضبط العناصر داخل الترويسة:</p><pre data-pbcklang="css" data-pbcktabsize="4" class="css ipsCode prettyprint">header {
   text-align: justify;
   letter-spacing: 1px;
   height: 8em;
   padding: 2em 10%;
   background: #2c3e50;
   color: #fff;
}</pre><p dir="rtl">وفقاً للنتيجة المطلوب الوصول إليها، يجب أن يظهر كلً من العنوان وقائمة التنقل على سطر واحد، سنقوم بعمل هذا بدون استخدام <span style="font-family:courier new,courier,monospace;">float</span> أو <span style="font-family:courier new,courier,monospace;">position</span> إنما عبر تطبيق القيمة <span style="font-family:courier new,courier,monospace;">inline-block</span> كالتالي :</p><pre data-pbcklang="css" data-pbcktabsize="4" class="css ipsCode prettyprint">header h1,
header nav {
   display: inline-block;
}</pre><p dir="rtl">في الواقع فإن الخاصية <span style="font-family:courier new,courier,monospace;">text-align:justify</span> والتي من شأنها أن تجعل العنوان على اليسار وقائمة التنقل على اليمين، فإنها لن تعطي النتيجة المرجوة منها بوجود الخاصية الأخرى <span style="font-family:courier new,courier,monospace;">inline-block</span> إلا إذا كانت محتويات العنصر أكبر من العنصر نفسه، أي حدوث طفحان <span style="font-family:courier new,courier,monospace;">overflow</span> وهذا غير موجود في مثالنا الحالي، لذلك نقوم استخدام شبه عنصر pseudo-element وذلك عبر استخدام الصنف <span style="font-family:courier new,courier,monospace;">after::</span> على الترويسة وظهوره معها ضمن نفس السطر عبر الخاصية <span style="font-family:courier new,courier,monospace;">inline-block </span>وضمان حدوث الطفحان عبر الخاصية <span style="font-family:courier new,courier,monospace;">width: 100% </span>:</p><pre data-pbcklang="css" data-pbcktabsize="4" class="css ipsCode prettyprint">header::after {
   content: '';
   display: inline-block;
   width: 100%;
}
</pre><p dir="rtl"><span style="line-height: 1.6;">لغاية الآن نكون قد حصلنا على <a rel="external nofollow" href="http://codepen.io/HsoubAcademy/full/LVdKXq/">النتيجة التالية</a>.</span></p><script async src="https://assets.codepen.io/assets/embed/ei.js"></script><p dir="rtl">حتى الآن تمكنا من الحصول على العناصر مرتبة بأسلوب صحيح بشكل أفقي وبدون استخدام الخصائص <span style="font-family:courier new,courier,monospace;">float</span> أو <span style="font-family:courier new,courier,monospace;">absolute</span> ولكن ما نرغب به زيادةً على هذا هو تطبيق التوسيط عمودياً، وهي حقيقة من المشاكل التي تواجه مطوري الويب بشكل مستمر (توسيط المحتوى عمودياً)، يوجد بالتأكيد عدة حلول ومن الشائع استخدام الخصائص <span style="font-family:courier new,courier,monospace;">margin،line-height</span> أو حتى <span style="font-family:courier new,courier,monospace;">absolute</span>. ولكن دعنا نناقش طريقة أفضل.</p><p dir="rtl">بدايةً لو قمنا بإعطاء الخاصية <span style="font-family:courier new,courier,monospace;">vertical-align: top</span> إلى قائمة التنقل فإننا سنلاحظ أن جميع عناصر القائمة ستتحرك إلى الأعلى وبالتحديد إلى بداية قسم الترويسة وهذا طبيعي إلى الآن (<a rel="external nofollow" href="http://codepen.io/HsoubAcademy/full/RPMzzN/">معاينة</a>).</p><p dir="rtl">الآن إذا قمنا بإعطاء ارتفاع الترويسة القيمة 100% فيصبح بإمكاننا توسيط عناصر قائمة التنقل عبر استخدام الخاصية <span style="font-family:courier new,courier,monospace;">vertical-align: middle</span> <a rel="external nofollow" href="http://codepen.io/HsoubAcademy/full/EjEBBd/">نحصل على هذا</a>.</p><p dir="rtl">ولكن كيف يمكن توسيط جميع عناصر الترويسة عموديا ؟ يكمن الحل بإضافة عنصر جديد وإعطائه ارتفاع 100% وذلك لنضمن عمل المحاذاة العمودية بالشكل الصحيح ، حيث سنلجأ إلى استخدام شبه عنصر نطبق عليه هذه الخاصية لنضمن توسيط باقي العناصر والحصول على النتيجة المرجوة، هذا الأسلوب <a rel="external nofollow" href="https://css-tricks.com/centering-in-the-unknown/">تم شرحه من قبل Michal Czernow</a>.</p><p dir="rtl">وبالتالي يكون تنسيق CSS :</p><pre data-pbcklang="css" data-pbcktabsize="4" class="css ipsCode prettyprint">header h1 {
   height: 100%;
}

header h1::before {
   content: '';
   display: inline-block;
   vertical-align: middle;  
   height: 100%;
}</pre><p dir="rtl">وبالتالي نحصل على <a rel="external nofollow" href="http://codepen.io/HsoubAcademy/full/gpeNVP/">النتيجة المطلوبة</a>.</p><p dir="rtl">كما يبدو فإننا حصلنا على النتيجة المطلوبة ولكن علينا أن نتأكد من أمرين اثنين :</p><ol dir="rtl"><li><strong>Line-breaks</strong> : أي النتيجة التي ستظهر في حال النص الطويل والنزول لأكثر من سطر.</li><li><strong>Responsiveness</strong> : أي توافقية العرض على جميع الأجهزة للحصول على نفس النتيجة المطلوبة.</li></ol><p dir="rtl">لنبدأ بالنقطة الأولى: في حال كان العنوان يمتد على أكثر من سطر، عندئذ سيتم دفعه إلى الأسفل وهذا تصرف منطقي على اعتبار أن ارتفاع العنصر الوهمي هو 100%، <a rel="external nofollow" href="http://codepen.io/HsoubAcademy/full/zGWVgm/">أنظر هذا المثال</a>.</p><p dir="rtl">لحل هذه المسألة دعنا بالبداية نضع العنوان ضمن عنصر <span style="font-family:courier new,courier,monospace;">div</span> خاص به:</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">&lt;header&gt;
    &lt;div&gt;
        &lt;h1&gt;Super Bad&lt;/h1&gt;
    &lt;/div&gt;

    &lt;nav&gt;
        &lt;a&gt;First Link&lt;/a&gt;
        &lt;a&gt;Second Link&lt;/a&gt;
        &lt;a&gt;Third Link&lt;/a&gt;
    &lt;/nav&gt;
&lt;/header&gt;</pre><p dir="rtl">وبالتالي تطبيق شبه عنصر على هذه الفقرة الجديدة كالتالي:</p><pre data-pbcklang="css" data-pbcktabsize="4" class="css ipsCode prettyprint">header {
   text-align: justify;
   height: 15em;
   padding: 2em 5%;
   background: #2c3e50;
   color: #fff;
}

header::after {
   content: '';
   display: inline-block;
   width: 100%;
}

header &gt; div,
header nav,
header div h1 {
   display: inline-block;
   vertical-align: middle;
}

header &gt; div {
   width: 50%;
   height: 100%;
   text-align: left;
}

header &gt; div::before {
   content: '';
   display: inline-block;  
   vertical-align: middle;
   height: 100%;
}</pre><p dir="rtl">وبالتالي الحصول على <a rel="external nofollow" href="http://codepen.io/HsoubAcademy/full/VLXowZ/">هذه النتيجة</a>.</p><p dir="rtl">ننتقل الآن إلى النقطة الثانية وهي التوافق مع جميع أجهزة العرض. يمكن على سبيل المثال عدم تعريف ارتفاع الترويسة وإعطاء حشوة <span style="font-family:courier new,courier,monospace;">padding</span> لجميع العناصر الداخلية للحصول على الارتفاع المطلوب. في هذه الحالة لن نحتاج إلى العنصر <span style="font-family:courier new,courier,monospace;">div</span> الذي تم إضافته مسبقا ويكون تنسيق CSS كالتالي :</p><pre data-pbcklang="css" data-pbcktabsize="4" class="css ipsCode prettyprint">header {
   text-align: justify;
   padding: 2em 5%;
   background: #2c3e50;
   color: #fff;
}

header::after {
   content: '';
   display: inline-block;
   width: 100%;
}

header h1,
header nav {
   display: inline-block;
   vertical-align: middle;
}

header h1 {
   width: 50%;
   text-align: left;
   padding-top: 0.5em;
}

header nav {
   padding-top: 1em;
}</pre><p dir="rtl">ونحصل على <a rel="external nofollow" href="http://codepen.io/HsoubAcademy/full/yNKmLv/">هذه النتيجة</a>.</p><p dir="rtl">وبالتالي نكون قد حصلنا على النتيجة المطلوبة، أما في حال رغبت بتحديد ارتفاع الترويسة عندئذ يجب إعادة استخدام العنصر <span style="font-family:courier new,courier,monospace;">div</span> والاستعانة بـ <span style="font-family:courier new,courier,monospace;">media query</span> من أجل الشاشات الصغيرة، ويصبح تنسيق CSS كالتالي:</p><pre data-pbcklang="css" data-pbcktabsize="4" class="css ipsCode prettyprint">@media screen and (max-width: 820px){
   header {
       height: auto;
   }

   header &gt; div,
   header &gt; div h1,
   header nav {
       height: auto;
       width: auto;
       display: block;
       text-align: center;
   }
}</pre><p dir="rtl">وتكون النتيجة <a rel="external nofollow" href="http://codepen.io/HsoubAcademy/full/oXqKNr/">مشابهة لهذه</a>.</p><p dir="rtl"><strong>ملاحظة</strong>:  إن ترغب بجعل هذا المثال يعمل بشكل صحيح على المتصفح انترنت اكسبلورر 8 فيجب استخدام ":<span style="font-family:arial,helvetica,sans-serif;">"</span> عوضا عن "<font face="courier new, courier, monospace">::</font><font face="arial, helvetica, sans-serif">"</font> ضمن العناصر والفئات الوهمية، حيث يكون تنسيق CSS كاملا كالتالي :</p><pre data-pbcklang="css" data-pbcktabsize="4" class="css ipsCode prettyprint">@import url(http://fonts.googleapis.com/css?family=Lato:400,700italic);

* { padding: 0; margin: 0; }

body { 
    background: #1abc9c; 
    font-family: 'Lato', sans-serif; text-transform: uppercase; 
    letter-spacing: 1px;
}

header {
   text-align: justify;
   height: 8em;
   padding: 2em 5%;
   background: #2c3e50;
   color: #fff;
}

header::after {
   content: '';
   display: inline-block;
   width: 100%;
}

header &gt; div,
header &gt; div::before,
header nav,
header &gt; div h1 {
   display: inline-block;
   vertical-align: middle;
   text-align: left;
}

header &gt; div {
   height: 100%;
}

header &gt; div::before {
   content: '';
   height: 100%;
}

header &gt; div h1 {
   font-size: 3em;
   font-style: italic;
}

header nav a {
   padding: 0 0.6em;
   white-space: nowrap;
}

header nav a:last-child {
   padding-right: 0;
}

@media screen and (max-width: 720px){
   header {
      height: auto;
   }

   header &gt; div,
   header &gt; div h1,
   header nav {
       height: auto;
       width: auto;
       display: block;
       text-align: center;
   }
}</pre><p dir="rtl">والنتيجة <a rel="external nofollow" href="http://codepen.io/HsoubAcademy/full/jPzgEG/">ستبدو كهذه</a>.</p><p dir="rtl">إلى هنا نأتي إلى نهاية هذا الدرس، والذي ناقشنا فيه كيفية توسيط العناصر عمودي/شاقولياً وبشكل يتوافق مع جميع شاشات العرض، يوجد بالتأكيد طرق أخرى بالإمكان الاستفادة منها. آمل أن يكون هذا الدرس قد حمل في طياته الشيء المفيد.</p><p dir="rtl">ترجمة -وبتصرّف- للدّرس  <a rel="external nofollow" href="http://tympanus.net/codrops/2013/07/14/justified-and-vertically-centered-header-elements/">Justified and Vertically Centered Header Elements</a> لكاتبه Mary Lou </p><p dir="rtl">جميع حقوق المقال محفوظة لموقع <a rel="external nofollow" href="http://tympanus.net/codrops/">codrops</a>.</p>
]]></description><guid isPermaLink="false">115</guid><pubDate>Wed, 08 Jul 2015 18:37:00 +0000</pubDate></item><item><title>&#x62A;&#x631;&#x642;&#x64A;&#x645; &#x622;&#x644;&#x64A; &#x644;&#x644;&#x639;&#x646;&#x627;&#x635;&#x631; &#x648;&#x627;&#x644;&#x635;&#x648;&#x631; &#x628;&#x627;&#x633;&#x62A;&#x62E;&#x62F;&#x627;&#x645; CSS Counters</title><link>https://academy.hsoub.com/programming/css/%D8%AA%D8%B1%D9%82%D9%8A%D9%85-%D8%A2%D9%84%D9%8A-%D9%84%D9%84%D8%B9%D9%86%D8%A7%D8%B5%D8%B1-%D9%88%D8%A7%D9%84%D8%B5%D9%88%D8%B1-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-css-counters-r119/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2015_07/css-counter.png.9a93f1dbebcbcbb9fdc52f1a38ac3b1b.png" /></p>

<div id="wmd-preview-section-32">
	<p id="ترقيم-العناصرالصور-باستخدام-css-counters">
		عند كتابة نص أو مقال ما، فأنت في الأغلب ستضيف له بعض الصور، أو الفيديو أو رسومات لتوضح المحتوى بشكل أكبر. والأغلب أنك ستضيف لكل منه نصا تقوم فيه بشرح مفهوم الصورة، وقد ترغب بترقيم الصور حتى لا يضيع القارئ، وهذا ما سنقوم به عبر استخدام عنصر<span style="font-family:courier new,courier,monospace;"> &lt;figure&gt;</span> مع المُرقمات (counters).
	</p>

	<p style="text-align: center;">
		<a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2015_07/css-counter.png.960b2cc62170c5468648d3f11e64ee6f.png" data-fileid="3266" rel=""><img alt="css-counter.thumb.png.b44645f5cb3623fa83" class="ipsImage ipsImage_thumbnailed" data-fileid="3266" src="https://academy.hsoub.com/uploads/monthly_2015_07/css-counter.thumb.png.b44645f5cb3623fa83515e8f06b02b50.png"></a>
	</p>
</div>

<div id="wmd-preview-section-33">
	<h2 id="عنصر-figure">
		عنصر figure
	</h2>

	<p>
		إن عنصر <span style="font-family:courier new,courier,monospace;">&lt;figure&gt;</span> صُمم ليستخدم جنبا إلى جنب مع <span style="font-family:courier new,courier,monospace;">&lt;figcaption&gt;</span> لاحتواء الصور وما شابه. هذا هو شرح <span style="font-family:courier new,courier,monospace;">&lt;figure&gt;</span> في وصف لغة <a href="https://wiki.hsoub.com/HTML" rel="external">HTML </a>الرسمي:
	</p>

	<blockquote>
		<blockquote class="ipsQuote" data-cite="اقتباس" data-ipsquote="">
			<div class="ipsQuote_citation">
				اقتباس
			</div>

			<div class="ipsQuote_contents ipsClearfix">
				<p>
					عنصر figure يمثل وحدة محتوى، والتي يمكن أن تدمج معها شرحا caption بشكل اختياري. ويقوم العنصر بإحتواء نفسه وإضافته للمحتوى، وإزالته عن المحتوى لن تؤثر على مضمون المحتوى. <br><a href="http://dev.w3.org/html5/markup/figure.html" rel="external nofollow">W3C Specification</a>
				</p>
			</div>
		</blockquote>
	</blockquote>

	<p>
		هكذا نقوم بإضافة figure :
	</p>

	<pre class="ipsCode prettyprint prettyprinted" data-pbcklang="" data-pbcktabsize="" style="">
<span class="tag">&lt;figure&gt;</span><span class="pln">
  </span><span class="tag">&lt;img</span><span class="pln"> </span><span class="atn">src</span><span class="pun">=</span><span class="atv">"path/to/your/image.jpg"</span><span class="pln"> </span><span class="atn">alt</span><span class="pun">=</span><span class="atv">""</span><span class="pln"> </span><span class="tag">/&gt;</span><span class="pln">
  </span><span class="tag">&lt;figcaption&gt;</span><span class="pln">Here is the legend for your image</span><span class="tag">&lt;figcaption&gt;</span><span class="pln">
</span><span class="tag">&lt;/figure&gt;</span></pre>

	<p>
		هناك بعض الملاحظات بشأن العنصر: 
	</p>

	<ul>
<li>
			عنصر <span style="font-family:courier new,courier,monospace;">&lt;figcaption&gt;</span> اختياري. 
		</li>
		<li>
			تستطيع استخدام عنصر <span style="font-family:courier new,courier,monospace;">&lt;figcaption&gt;</span> واحد فقط داخل عنصر <span style="font-family:courier new,courier,monospace;">&lt;figure&gt;.</span>
		</li>
		<li>
			تستطيع إدراج أيّ عدد تشاء من العناصر داخل <span style="font-family:courier new,courier,monospace;">&lt;figure&gt;.</span> 
		</li>
		<li>
			إذا كنت ستدرج صورة فتستطيع ترك <span style="font-family:courier new,courier,monospace;">alt</span> فارغة إذا كنت ستدرج <span style="font-family:courier new,courier,monospace;">&lt;figcaption&gt;</span> حتى لا تقوم برامج قراءة الشاشة بقراءة نفس المحتوى مرّتين.
		</li>
	</ul>
<p>
		للمزيد من المعلومات حول <span style="font-family:courier new,courier,monospace;">&lt;figure&gt;</span> ألق نظرة على هذه المصادر: 
	</p>

	<ul>
<li>
			<a href="http://html5doctor.com/the-figure-figcaption-elements/" rel="external nofollow">HTML5Doctor</a> 
		</li>
		<li>
			<a href="https://developer.mozilla.org/en-US/docs/HTML/Element/figure" rel="external nofollow">Mozilla Developer Network</a> 
		</li>
		<li>
			<a href="http://dev.w3.org/html5/markup/figure.html" rel="external nofollow">W3C Specification</a>
		</li>
	</ul>
</div>

<div id="wmd-preview-section-34">
	<h3 id="أمثلة">
		أمثلة:
	</h3>

	<p>
		إذا أردت أن تظهر شيفرة برمجية ما، فتستطيع استخدامه بهذه الطريقة:
	</p>

	<pre class="ipsCode prettyprint prettyprinted" data-pbcklang="" data-pbcktabsize="" style="">
<span class="tag">&lt;figure&gt;</span><span class="pln">
    </span><span class="tag">&lt;code&gt;</span><span class="pln">body { background: white; }</span><span class="tag">&lt;/code&gt;</span><span class="pln">
    </span><span class="tag">&lt;figcaption&gt;</span><span class="pln">Some illustrated code with figure</span><span class="tag">&lt;figcaption&gt;</span><span class="pln">
</span><span class="tag">&lt;/figure&gt;</span></pre>

	<p>
		بدل إدراج صورك بهذه الطريقة:
	</p>

	<pre class="ipsCode prettyprint prettyprinted" data-pbcklang="" data-pbcktabsize="" style="">
<span class="tag">&lt;img</span><span class="pln"> </span><span class="atn">src</span><span class="pun">=</span><span class="atv">"cute-kitty.jpg"</span><span class="pln"> </span><span class="atn">alt</span><span class="pun">=</span><span class="atv">"This is a cute kitty!"</span><span class="pln"> </span><span class="tag">/&gt;</span></pre>

	<p>
		تستطيع إدراجها بهذه الطريقة:
	</p>

	<pre class="ipsCode prettyprint prettyprinted" data-pbcklang="" data-pbcktabsize="" style="">
<span class="tag">&lt;figure&gt;</span><span class="pln">
    </span><span class="tag">&lt;img</span><span class="pln"> </span><span class="atn">src</span><span class="pun">=</span><span class="atv">"cute-kitty.jpg"</span><span class="pln"> </span><span class="atn">alt</span><span class="pun">=</span><span class="atv">""</span><span class="pln"> </span><span class="tag">/&gt;</span><span class="pln">
    </span><span class="tag">&lt;figcaption&gt;</span><span class="pln">This is a cute kitty!</span><span class="tag">&lt;figcaption&gt;</span><span class="pln">
</span><span class="tag">&lt;figure&gt;</span></pre>
</div>

<div id="wmd-preview-section-35">
	<h3 id="دعم-المتصفحات">
		دعم المتصفحات
	</h3>

	<p>
		عنصر <span style="font-family:courier new,courier,monospace;">&lt;figure&gt;</span> يعتبر من أحد عناصر HTML5 الجديدة، ولذا فهو ليس مدعوما من قبل المتصفحات القديمة (IE 8) ولكن لا أحد يهتم صراحة. ولكن إن كنت مُهتمًا بدعم المُتصفّحات القديمة فتستطيع استخدام <a href="https://code.google.com/p/html5shiv/" rel="external nofollow">html5shiv</a> ليظهر الوسم بشكل عادي.
	</p>
</div>

<div id="wmd-preview-section-36">
	<h2 id="المرقمات-في-css">
		المُرقّمات في CSS
	</h2>

	<p>
		أحد أكثر خصائص CSS ديناميكة وأقلها شهرة هي CSS Counter فهي تسمح لك بترقيم العناصر ديناميكيا عبر CSS فحسب، بدون الاستعانة بأيّ شيء آخر. <br>
		استخدام المرقمات يكون عبر خاصيتين وقيمة وهما: 
	</p>

	<ul>
<li>
			<strong>counter-reset </strong>والتي تستخدم لتهيئة أو إعادة تهيئة مرقم أو أكثر. 
		</li>
		<li>
			<strong>counter-increment </strong>والتي تستخدم لزيادة قيمة مرقم أو أكثر. 
		</li>
		<li>
			<strong>()counter </strong>وهي قيمة تستخدمها مع <span style="font-family:courier new,courier,monospace;">before::</span> أو <span style="font-family:courier new,courier,monospace;">after::</span> والتي تقبل اسم المرقم كقيمة من أجل أن تظهر القيمة.
		</li>
	</ul>
<p>
		الأمر بسيط. كل ما تقوم به هو تهيئة عدّاد ما بالاسم الذي تريده، ثم تحدد لمجموعة عناصر ما أن تقوم بزيادة تلك القيمة كلنا ظهر أحدها. ويمكن إظهار هذه القيمة عبر CSS باستخدام <span style="font-family: 'courier new', courier, monospace; line-height: 22.3999996185303px; text-align: right;">before::</span> و <span style="font-family: 'courier new', courier, monospace; line-height: 22.3999996185303px; text-align: right;">after::</span>.
	</p>

	<p>
		<strong>مثال بسيط للعداد:</strong>
	</p>

	<pre class="css ipsCode prettyprint prettyprinted" data-pbcklang="css" data-pbcktabsize="" style="">
<span class="com">/* 1. نقوم بتهيئة المرقم (أو العداد) */</span><span class="pln">
body </span><span class="pun">{</span><span class="pln">
  counter</span><span class="pun">-</span><span class="pln">reset</span><span class="pun">:</span><span class="pln"> thisSuperCoolCounter</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

</span><span class="com">/* 2. نحدد أنه في كل مرة يظهر فيها هذا العنصر نرفع قيمة المرقم */</span><span class="pln">
</span><span class="pun">.</span><span class="pln">myAwesomeElement </span><span class="pun">{</span><span class="pln">
  counter</span><span class="pun">-</span><span class="pln">increment</span><span class="pun">:</span><span class="pln"> thisSuperCoolCounter</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

</span><span class="com">/* 3. نقوم بإظهار قيمة العداد قبل العنصر */</span><span class="pln">
</span><span class="pun">.</span><span class="pln">myAwesomeElement</span><span class="pun">:</span><span class="pln">before </span><span class="pun">{</span><span class="pln">
  content</span><span class="pun">:</span><span class="pln"> counter</span><span class="pun">(</span><span class="pln">thisSuperCoolCounter</span><span class="pun">);</span><span class="pln">
</span><span class="pun">}</span></pre>
</div>

<div id="wmd-preview-section-37">
	<h3 id="مثال-بسيط">
		مثال بسيط
	</h3>

	<p>
		حسنا نعود للموضوع الأساسي الذي يدور حوله الدرس، نريد ترقيم صورنا حتى تظهر قبلها Fig. 2 – … Fig. 1 – … وهكذا.
	</p>

	<pre class="css ipsCode prettyprint prettyprinted" data-pbcklang="css" data-pbcktabsize="" style="">
<span class="pun">.</span><span class="pln">article </span><span class="pun">{</span><span class="pln">
    counter</span><span class="pun">-</span><span class="pln">reset</span><span class="pun">:</span><span class="pln"> figures</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

</span><span class="pun">.</span><span class="pln">figure </span><span class="pun">{</span><span class="pln">
    counter</span><span class="pun">-</span><span class="pln">increment</span><span class="pun">:</span><span class="pln"> figures</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

</span><span class="pun">.</span><span class="pln">figure figcaption</span><span class="pun">:</span><span class="pln">before </span><span class="pun">{</span><span class="pln">
    content</span><span class="pun">:</span><span class="pln"> </span><span class="str">'Fig. '</span><span class="pln"> counter</span><span class="pun">(</span><span class="pln">figures</span><span class="pun">)</span><span class="pln"> </span><span class="str">' - '</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></pre>
</div>

<div id="wmd-preview-section-38">
	<h2 id="إعداد-كل-شيء">
		إعداد كل شيء
	</h2>
</div>

<div id="wmd-preview-section-39">
	<h3 id="الأساسيات">
		الأساسيات
	</h3>

	<p>
		بعد أن فهمنا كيف نستخدم عنصر <span style="font-family:courier new,courier,monospace;">&lt;figure&gt;</span> وكيف تعمل المرقمات في CSS حان الوقت لاستخدامها في ترقيم الصور.
	</p>

	<p>
		نقوم بإعداد وسم <span style="font-family:courier new,courier,monospace;">&lt;figure&gt;</span> ببعض الأمور البسيطة:
	</p>

	<pre class="css ipsCode prettyprint prettyprinted" data-pbcklang="css" data-pbcktabsize="" style="">
<span class="pun">.</span><span class="pln">figure </span><span class="pun">{</span><span class="pln">
    padding</span><span class="pun">:</span><span class="pln"> </span><span class="lit">0.9em</span><span class="pun">;</span><span class="pln">
    border</span><span class="pun">:</span><span class="pln"> </span><span class="lit">3px</span><span class="pln"> solid </span><span class="com">#f5bca8;</span><span class="pln">
    background</span><span class="pun">:</span><span class="pln"> </span><span class="com">#fff;</span><span class="pln">
    margin</span><span class="pun">:</span><span class="pln"> </span><span class="lit">0</span><span class="pln"> </span><span class="kwd">auto</span><span class="pln"> </span><span class="lit">1em</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></pre>

	<p>
		ثم نريد أن نحاذي الصور في وسط عنصر <span style="font-family:courier new,courier,monospace;">&lt;figure&gt;</span> ونمنعهم من الخروج عن حجم الحاوي لذا نضيف التالي:
	</p>

	<pre class="css ipsCode prettyprint prettyprinted" data-pbcklang="css" data-pbcktabsize="" style="">
<span class="pun">.</span><span class="pln">figure img </span><span class="pun">{</span><span class="pln">
    margin</span><span class="pun">:</span><span class="pln"> </span><span class="lit">0</span><span class="pln"> </span><span class="kwd">auto</span><span class="pun">;</span><span class="pln">
    display</span><span class="pun">:</span><span class="pln"> block</span><span class="pun">;</span><span class="pln">
    max</span><span class="pun">-</span><span class="pln">width</span><span class="pun">:</span><span class="pln"> </span><span class="lit">100</span><span class="pun">%;</span><span class="pln">
</span><span class="pun">}</span></pre>

	<pre>
<span style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; line-height: 1.6;">الآن بالنسبة لوصف الصّورة (caption) وسنجعلها تبرز أكثر بتوسيطها وجعل الخط بارزًا. </span>
</pre>

	<p>
		فقط تذكر أنّ الهدف من الوصف أن يضيف شرحًا بسيطا، وأن إزالته لن تشكل مشكلة في الفهم فلا داعي لأن تضيف فقرة هناك.
	</p>

	<pre class="css ipsCode prettyprint prettyprinted" data-pbcklang="css" data-pbcktabsize="" style="">
<span class="pun">.</span><span class="pln">figure figcaption </span><span class="pun">{</span><span class="pln">
    font</span><span class="pun">-</span><span class="pln">weight</span><span class="pun">:</span><span class="pln"> </span><span class="lit">700</span><span class="pun">;</span><span class="pln">
    font</span><span class="pun">-</span><span class="pln">size</span><span class="pun">:</span><span class="pln"> </span><span class="lit">0.8em</span><span class="pun">;</span><span class="pln">
    padding</span><span class="pun">:</span><span class="pln"> </span><span class="pun">.</span><span class="lit">5em</span><span class="pun">;</span><span class="pln">
    text</span><span class="pun">-</span><span class="pln">align</span><span class="pun">:</span><span class="pln"> center</span><span class="pun">;</span><span class="pln">
    color</span><span class="pun">:</span><span class="pln"> </span><span class="com">#fff;</span><span class="pln">
    background</span><span class="pun">:</span><span class="pln"> </span><span class="com">#f5bca8;</span><span class="pln">
</span><span class="pun">}</span></pre>
</div>

<div id="wmd-preview-section-40">
	<h3 id="الترقيم">
		الترقيم
	</h3>

	<p>
		حان الوقت لإضافة الترقيم للصور، وإضافته سهلة كما رأينا سابقا.
	</p>

	<pre class="css ipsCode prettyprint prettyprinted" data-pbcklang="css" data-pbcktabsize="" style="">
<span class="pun">.</span><span class="pln">article </span><span class="pun">{</span><span class="pln">
    counter</span><span class="pun">-</span><span class="pln">reset</span><span class="pun">:</span><span class="pln"> figures</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

</span><span class="pun">.</span><span class="pln">figure figcaption </span><span class="pun">{</span><span class="pln">
    counter</span><span class="pun">-</span><span class="pln">increment</span><span class="pun">:</span><span class="pln"> figures</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

</span><span class="pun">.</span><span class="pln">figure figcaption</span><span class="pun">:</span><span class="pln">before </span><span class="pun">{</span><span class="pln">
    content</span><span class="pun">:</span><span class="pln"> </span><span class="str">'Fig. '</span><span class="pln"> counter</span><span class="pun">(</span><span class="pln">figures</span><span class="pun">)</span><span class="pln"> </span><span class="str">' - '</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></pre>
</div>

<div id="wmd-preview-section-41">
	<h3 id="الإضافات-البسيطة">
		الإضافات البسيطة
	</h3>

	<p>
		نريد أن نضيف طريقة سهل لجعل الصور تتمركز على يمين المحتوى أو على يساره، وسنقوم بذلك عبر إضافة التالي:
	</p>

	<pre class="css ipsCode prettyprint prettyprinted" data-pbcklang="css" data-pbcktabsize="" style="">
<span class="pun">.</span><span class="pln">figure</span><span class="pun">-</span><span class="pln">left </span><span class="pun">{</span><span class="pln">
    </span><span class="kwd">float</span><span class="pun">:</span><span class="pln"> left</span><span class="pun">;</span><span class="pln">
    margin</span><span class="pun">:</span><span class="pln"> </span><span class="lit">0</span><span class="pln"> </span><span class="lit">1em</span><span class="pln"> </span><span class="pun">.</span><span class="lit">5em</span><span class="pln"> </span><span class="lit">0</span><span class="pun">;</span><span class="pln">
    width</span><span class="pun">:</span><span class="pln"> </span><span class="pun">-</span><span class="pln">webkit</span><span class="pun">-</span><span class="pln">min</span><span class="pun">-</span><span class="pln">content</span><span class="pun">;</span><span class="pln">
    width</span><span class="pun">:</span><span class="pln"> </span><span class="pun">-</span><span class="pln">moz</span><span class="pun">-</span><span class="pln">min</span><span class="pun">-</span><span class="pln">content</span><span class="pun">;</span><span class="pln">
    width</span><span class="pun">:</span><span class="pln"> min</span><span class="pun">-</span><span class="pln">content</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

</span><span class="pun">.</span><span class="pln">figure</span><span class="pun">-</span><span class="pln">right </span><span class="pun">{</span><span class="pln">
    </span><span class="kwd">float</span><span class="pun">:</span><span class="pln"> right</span><span class="pun">;</span><span class="pln">
    margin</span><span class="pun">:</span><span class="pln"> </span><span class="lit">0</span><span class="pln"> </span><span class="lit">0</span><span class="pln"> </span><span class="pun">.</span><span class="lit">5em</span><span class="pln"> </span><span class="lit">1em</span><span class="pun">;</span><span class="pln">
    width</span><span class="pun">:</span><span class="pln"> </span><span class="pun">-</span><span class="pln">webkit</span><span class="pun">-</span><span class="pln">min</span><span class="pun">-</span><span class="pln">content</span><span class="pun">;</span><span class="pln">
    width</span><span class="pun">:</span><span class="pln"> </span><span class="pun">-</span><span class="pln">moz</span><span class="pun">-</span><span class="pln">min</span><span class="pun">-</span><span class="pln">content</span><span class="pun">;</span><span class="pln">
    width</span><span class="pun">:</span><span class="pln"> min</span><span class="pun">-</span><span class="pln">content</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></pre>

	<p>
		إنّ <span style="font-family:courier new,courier,monospace;">min-content</span> هي قيمة صحيحة لكل من الخواص التالية min-height min-width max-height max-widthheight width.
	</p>

	<p>
		في حالتنا، نريد من figure أن يكون بأصغر قدر ممكن، أو بالأحرى نريد من عرضه أن يكون هو نفس عرض الصورة التي هي بداخله. لأن figure هو عنصر بحجم كامل (block) فسوف يتمد عرضه إلى كامل الحاوي (100%). <br>
		نستطيع استخدام<span style="font-family:courier new,courier,monospace;"> float: left</span> أو <span style="font-family:courier new,courier,monospace;">display: inline-block</span> لجعل عرضه يقل إلى أكبر عنصر داخله، ولكن ماذا سيحدث لو كان الوصف أكبر من حجم الصورة، فستحدث مشكلة.
	</p>

	<p>
		نستطيع أن نحدد عرض العنصر يدويًّا، ولكن الأمر غير منطقي وغير ديناميكي، لهذا استخدمنا قيمة <span style="font-family:courier new,courier,monospace;">min-content</span>، فهي بكل بساطة تخبر عنصر figure أن يقلل من حجمه إلى حجم الصورة مثال: 
	</p>

	<p class="codepen" data-default-tab="result" data-height="268" data-slug-hash="pJLXde" data-theme-id="0" data-user="HsoubAcademy">
		See the Pen <a href="http://codepen.io/HsoubAcademy/pen/pJLXde/" rel="external nofollow">pJLXde</a> by Hsoub Academy (<a href="http://codepen.io/HsoubAcademy" rel="external nofollow">@HsoubAcademy</a>) on <a href="http://codepen.io" rel="external nofollow">CodePen</a>.
	</p>
	<script async src="https://assets.codepen.io/assets/embed/ei.js"></script><p>
		الخاصية مدعومة من قبل فيرفكس باستخدام <span style="font-family:courier new,courier,monospace;">-moz- </span>و <span style="font-family:courier new,courier,monospace;">chrome</span> باستخدام <span style="font-family:courier new,courier,monospace;">-webkit-.</span> <br>
		المتصفحات التي لا تدعم الخاصية ستتصرف كما هو متوقع منها، لن يتم تعيين أيّ عرض وسيكون عرضه هو عرض أكبر عنصر داخله.
	</p>

	<p>
		<strong>ملاحظة</strong>: يوجد قيم أخرى وهي <span style="font-family:courier new,courier,monospace;">max-content</span> و <span style="font-family:courier new,courier,monospace;">fit-content</span> و <span style="font-family:courier new,courier,monospace;">available</span>. اطلع على <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/width" rel="external nofollow">التوثيق</a> للمزيد من المعلومات.
	</p>

	<p>
		وأخيرًا وليس آخرا، نريد أن نغير أو نحذف العرض الأقصى الذي حددناه للصور التي ستميل لليمين أو لليسار، فإذا أردت أن تأخذ الصور حجمها الطبيعي فاستخدم <span style="font-family:courier new,courier,monospace;">max-width: none </span>وإذا أردت عرضا أقصى فاستخدم التالي:
	</p>

	<pre class="css ipsCode prettyprint prettyprinted" data-pbcklang="css" data-pbcktabsize="" style="">
<span class="pun">.</span><span class="pln">figure</span><span class="pun">-</span><span class="pln">right img</span><span class="pun">,</span><span class="pln">
</span><span class="pun">.</span><span class="pln">figure</span><span class="pun">-</span><span class="pln">left img </span><span class="pun">{</span><span class="pln">
    max</span><span class="pun">-</span><span class="pln">width</span><span class="pun">:</span><span class="pln"> </span><span class="lit">300px</span><span class="pun">;</span><span class="pln"> </span><span class="com">/* عدل على حسب حاجتك */</span><span class="pln">
</span><span class="pun">}</span></pre>
</div>

<div id="wmd-preview-section-42">
	<h3 id="توافق-الشاشات-الصغيرة">
		توافق الشاشات الصغيرة
	</h3>

	<p>
		لنتأكد من العناصر التي نحاذيها لا تتصرف بغرابة في شاشات الهواتف الصغيرة سنقوم ببعض التعديلات حتى تأخذ العناصر كامل العرض وتتوسط الصفحة أفقيا:
	</p>

	<pre class="css ipsCode prettyprint prettyprinted" data-pbcklang="css" data-pbcktabsize="" style="">
<span class="lit">@media</span><span class="pln"> </span><span class="pun">(</span><span class="pln">max</span><span class="pun">-</span><span class="pln">width</span><span class="pun">:</span><span class="pln"> </span><span class="lit">767px</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
    </span><span class="pun">.</span><span class="pln">figure</span><span class="pun">-</span><span class="pln">left</span><span class="pun">,</span><span class="pln">
    </span><span class="pun">.</span><span class="pln">figure</span><span class="pun">-</span><span class="pln">right </span><span class="pun">{</span><span class="pln">
        </span><span class="kwd">float</span><span class="pun">:</span><span class="pln"> none</span><span class="pun">;</span><span class="pln">
        margin</span><span class="pun">:</span><span class="pln"> </span><span class="lit">0</span><span class="pln"> </span><span class="lit">0</span><span class="pln"> </span><span class="lit">1em</span><span class="pln"> </span><span class="lit">0</span><span class="pun">;</span><span class="pln">
        width</span><span class="pun">:</span><span class="pln"> </span><span class="lit">100</span><span class="pun">%;</span><span class="pln">
    </span><span class="pun">}</span><span class="pln">

    </span><span class="pun">.</span><span class="pln">figure img </span><span class="pun">{</span><span class="pln">
        max</span><span class="pun">-</span><span class="pln">width</span><span class="pun">:</span><span class="pln"> </span><span class="lit">100</span><span class="pun">%;</span><span class="pln">
    </span><span class="pun">}</span><span class="pln">
</span><span class="pun">}</span></pre>
</div>

<div id="wmd-preview-section-43">
	<h3 id="الاستخدام">
		الاستخدام
	</h3>

	<p>
		استخدام ما قدمناه شيء بسيط، إما أن تستخدم صورا تستغل كامل المساحة عبر استخدام<span style="font-family:courier new,courier,monospace;"> figure.</span> أو تريد أن تحاذي الصور لليمين أو لليسار فتستخدم كل من <span style="font-family:courier new,courier,monospace;">figure.</span> و<span style="font-family:courier new,courier,monospace;">figure-left.</span> أو <span style="font-family:courier new,courier,monospace;">figure-right.</span>
	</p>

	<pre class="html ipsCode prettyprint prettyprinted" data-pbcklang="html" data-pbcktabsize="4" style="">
<span class="tag">&lt;figure</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">'figure'</span><span class="tag">&gt;</span><span class="pln">
	</span><span class="tag">&lt;img</span><span class="pln"> </span><span class="atn">src</span><span class="pun">=</span><span class="atv">"path/to/your/image.jpg"</span><span class="pln"> </span><span class="atn">alt</span><span class="pun">=</span><span class="atv">""</span><span class="pln"> </span><span class="tag">/&gt;</span><span class="pln">
	</span><span class="tag">&lt;figcaption&gt;</span><span class="pln">Here is the legend for your image</span><span class="tag">&lt;figcaption&gt;</span><span class="pln">
</span><span class="tag">&lt;/figure&gt;</span><span class="pln">

</span><span class="tag">&lt;figure</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">'figure figure-left'</span><span class="tag">&gt;</span><span class="pln">
	</span><span class="tag">&lt;img</span><span class="pln"> </span><span class="atn">src</span><span class="pun">=</span><span class="atv">"path/to/your/image.jpg"</span><span class="pln"> </span><span class="atn">alt</span><span class="pun">=</span><span class="atv">""</span><span class="pln"> </span><span class="tag">/&gt;</span><span class="pln">
	</span><span class="tag">&lt;figcaption&gt;</span><span class="pln">Here is the legend for your image</span><span class="tag">&lt;figcaption&gt;</span><span class="pln">
</span><span class="tag">&lt;/figure&gt;</span><span class="pln">

</span><span class="tag">&lt;figure</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">'figure figure-right'</span><span class="tag">&gt;</span><span class="pln">
	</span><span class="tag">&lt;img</span><span class="pln"> </span><span class="atn">src</span><span class="pun">=</span><span class="atv">"path/to/your/image.jpg"</span><span class="pln"> </span><span class="atn">alt</span><span class="pun">=</span><span class="atv">""</span><span class="pln"> </span><span class="tag">/&gt;</span><span class="pln">
	</span><span class="tag">&lt;figcaption&gt;</span><span class="pln">Here is the legend for your image</span><span class="tag">&lt;figcaption&gt;</span><span class="pln">
</span><span class="tag">&lt;/figure&gt;</span></pre>

	<h2>
		خاتمة
	</h2>
</div>

<div id="wmd-preview-section-44">
	<p>
		هذا كان كل شيء، كل ما تبقى هو أن تطبقها في موقعك، جرب إلقاء <a href="http://codepen.io/HsoubAcademy/full/yNKdJV/" rel="external nofollow">نظرة على المثال</a> لترى مثالا عمليا.
	</p>

	<p>
		ترجمة وبتصرّف للمقال: <a href="http://tympanus.net/codrops/2013/05/02/automatic-figure-numbering-with-css-counters/" rel="external nofollow">Automatic Figure Numbering with CSS Counters</a> لصاحبه: <a href="https://twitter.com/HugoGiraudel" rel="external nofollow">Hugo Giraudel</a>.
	</p>

	<p>
		جميع حقوق المقال محفوظة لموقع <a href="http://tympanus.net/codrops/" rel="external nofollow">codrops</a>.
	</p>
</div>

<p><a href="https://academy.hsoub.com/uploads/monthly_2015_07/Iy4B6Km.png.abd479c499eadfe98d26ed867c086b96.png" class="ipsAttachLink ipsAttachLink_image"><img data-fileid="3229" src="https://academy.hsoub.com/uploads/monthly_2015_07/Iy4B6Km.thumb.png.b5f31810b357d9b976a5c5698e6c9d3b.png" class="ipsImage ipsImage_thumbnailed" alt="Iy4B6Km.png"></a></p>]]></description><guid isPermaLink="false">119</guid><pubDate>Wed, 08 Jul 2015 14:41:00 +0000</pubDate></item><item><title>&#x62A;&#x639;&#x631;&#x641; &#x639;&#x644;&#x649; CSS Flexbox &#x648;&#x623;&#x633;&#x627;&#x633;&#x64A;&#x627;&#x62A; &#x627;&#x633;&#x62A;&#x639;&#x645;&#x627;&#x644;&#x647; &#x644;&#x647;&#x64A;&#x643;&#x644;&#x629; &#x635;&#x641;&#x62D;&#x627;&#x62A; &#x627;&#x644;&#x648;&#x64A;&#x628;</title><link>https://academy.hsoub.com/programming/css/%D8%AA%D8%B9%D8%B1%D9%81-%D8%B9%D9%84%D9%89-css-flexbox-%D9%88%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A7%D8%AA-%D8%A7%D8%B3%D8%AA%D8%B9%D9%85%D8%A7%D9%84%D9%87-%D9%84%D9%87%D9%8A%D9%83%D9%84%D8%A9-%D8%B5%D9%81%D8%AD%D8%A7%D8%AA-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-r118/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2015_07/css-flext.png.55ee72061ed4cfa3c2c4333520b880fa.png" /></p>
<div id="wmd-preview-section-22">
	<div id="wmd-preview-section-21">
		<p id="مقدمة">
			إنّ HTML و CSS من أفضل وأسهل الطرق لتقديم المحتوى وأكثرها مرونة. فهي سهلة التعلم وقوية. لكن شيئا واحدا تعجَز فيه هذه اللغات هو الهيكلة المعقدة.، فإذا أردت إنشاء موقع بسيط بهيكلة واضحة فالأمر سهل جدا، ولكن انتقل إلى محتوى متعدد الأعمدة مثلا وشيئا آخر تماما، فهنا تقع نقطة ضعف لغات هيكلة الويب، فيستلزم بنا استخدام طرق ملتوية لإصلاح المشاكل، ناهيك عن توافق هذه الطرق مع مختلف المتصفحات وطريقة ظهورها في كل متصفح.
		</p>

		<p style="text-align: center;">
			<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="3264" href="https://academy.hsoub.com/uploads/monthly_2015_07/css-flext.png.b99be202d910901d5ee5662f00373be3.png" rel=""><img alt="css-flext.thumb.png.3ec0c55b9fe84250f128" class="ipsImage ipsImage_thumbnailed" data-evernote-hover-show="true" data-fileid="3264" src="https://academy.hsoub.com/uploads/monthly_2015_07/css-flext.thumb.png.3ec0c55b9fe84250f1287bdbf03162fa.png"></a>
		</p>

		<p>
			لمجابهة هذه المشكلة يقدم لنا الإصدار الثالث من CSS مجموعة من الحلول البسيطة والسهلة لهذه المشاكل، وهي كالتالي:
		</p>

		<ul>
			<li>
				Multi-column layout Module.
			</li>
			<li>
				Grid layout Module.
			</li>
			<li>
				Flexbox layout Module.
			</li>
		</ul>

		<p>
			وسنتكلم نحن اليوم عن Flexbox (المعروف عموما بـFlex) وهو أكثرهم شيوعا وأكثرهم دعما من قبل المتصفحات (لدى كتابة هذا المقال كل المتصفحات تدعم flex إلى جانب الإصدار العاشر من IE)، وما يقوم به Flexbox هو التحكم بهيكلة مجموعة من العناصر التي تقع تحت حاوي واحد، ويسمح لنا بـ: 
		</p>

		<ul>
			<li>
				صف هذه العناصر في سطر واحد بدون تحديد عرض كل واحد منها (واستخدام <span style="font-family:courier new,courier,monospace;">float</span>) كما يقوم بإضافة العناصر إلى سطر جديد إن لم تكفي المساحة. 
			</li>
			<li>
				صّف هذه العناصر على شكل عمود بسهولة كبيرة. 
			</li>
			<li>
				محاذات العناصر إلى اليمين أو اليسار أو الوسط (بالنسبة للحاوي). 
			</li>
			<li>
				تغيير الترتيب الذّي تظهر به العناصر بدون التعديل على HTML. 
			</li>
			<li>
				تحديد المساحة التي يأخذها كل عنصر بدون القلق في حال تغيير حجم الحاوي.
			</li>
		</ul>

		<p>
			والآن لنتفقد المزيد من المميزات.
		</p>
	</div>

	<div id="wmd-preview-section-22">
		<h2 id="مثال-بسيط-للعمل-به">
			مثال بسيط للعمل به
		</h2>

		<p>
			حتى نبدأ باستخدام Flexbox، علينا استخدام مثال بسيط لنشرح به، ومن أجل ذلك اخترنا العمل على هيكلة ذيل صفحة يحتوي على 3 عناصر تجدها في أيّ ذيل صفحة وسنقوم بالتجربة عليها. ما نريد إنجازه هو أن نقوم بصف العناصر الثلاثة بشكل أفقي، وأن نقوم بمحاذاتها عموديا إلى المنتصف وأن يستغل العنصر الأخير ضعف مساحة بقية العناصر، لنقوم بالأمر بالطريقة التقليدية سيتوجب علينا صف العناصر باستخدام float مع تحديد مساحة كل واحدة وحسابها بشكل دقيق حتى يكون هناك ما يكفي من مكان. <a href="http://codepen.io/HsoubAcademy/full/wambdQ/" rel="external nofollow">هذه هي النتيجة النهائية</a>.
		</p>
	</div>

	<div id="wmd-preview-section-23">
		<h2 id="البدء-باستخدام-flexbox">
			البدء باستخدام Flexbox
		</h2>

		<p>
			الشيء الذي يجب أن نفهمه هو أن Flexbox ليس خاصية واحدة بل مجموعة من الخواص المختلفة، ونستعمل Flexbox عبر تطبيق هذه الخواص على الحاوي والبعض الآخر على العناصر التي نريد التحكم بها. ولنبدأ باستخدام Flexbox نقوم بتطبيق الخاصية التالية على الحاوي:
		</p>

		<pre class="css ipsCode prettyprint" data-pbcklang="css" data-pbcktabsize="">footer {
    display: flex;
}</pre>

		<p>
			تستطيع أيضا استخدام خاصية <span style="font-family:courier new,courier,monospace;">flex-flow</span> التي تسمح لك بأن تحدد هل تريد أن تصف العناصر على شكل صف أفقي (<span style="font-family:courier new,courier,monospace;">row</span> وهي القيمة الإفتراضية )أو على شكل عمود (<span style="font-family:courier new,courier,monospace;">column</span>) وهل تريد أن تحشر كل العناصر في سطر واحد (<span style="font-family:courier new,courier,monospace;">nowrap</span> وهي القيمة الافتراضية) أو أن تضيف سطرا جديدا (أو عمودا جديدا) في حال نفاذ المكان (<span style="font-family:courier new,courier,monospace;">wrap</span>).
		</p>

		<pre class="css ipsCode prettyprint" data-pbcklang="css" data-pbcktabsize="">footer {
    display: flex;
    flex-flow: row wrap;
}</pre>

		<p>
			ملاحظة: <span style="font-family:courier new,courier,monospace;">flex-flow</span> تجمع ما بين الخاصيتين <span style="font-family:courier new,courier,monospace;">flex-direction</span> (وقيمها هي row , column row-reverse column-reverse) و <span style="font-family:courier new,courier,monospace;">flex-wrap </span>(قيمها هي wrap no-wrap wrap-reverse).
		</p>
	</div>

	<div class="banner-container ipsBox ipsPadding">
		<div class="inner-banner-container">
			<p class="banner-heading">
				دورة تطوير واجهات المستخدم
			</p>

			<p class="banner-subtitle">
				ابدأ عملك الحر بتطوير واجهات المواقع والمتاجر الإلكترونية فور انتهائك من الدورة
			</p>

			<div>
				<a class="ipsButton ipsButton_large ipsButton_primary ipsButton_important" href="https://academy.hsoub.com/learn/front-end-web-development/" rel="">اشترك الآن</a>
			</div>
		</div>

		<div class="banner-img">
			<img alt="دورة تطوير واجهات المستخدم" src="https://academy.hsoub.com/learn/assets/images/courses/front-end-web-development.png">
		</div>
	</div>

	<div id="wmd-preview-section-24">
		<h2 id="المحور-الرئيسي-والمحور-الجانبي">
			المحور الرئيسي والمحور الجانبي
		</h2>

		<p>
			Flexbox تعتمد على مبدأ المحاور في العمل، فهي لا تعمل على أساس محور أفقي ومحور عمودي (حيث ستنعكس الأمور إذا صفننا العناصر عموديا عبر <span style="font-family:courier new,courier,monospace;">flex-direction : column</span>) بل تستخدم محورا رئيسيا أو Main Axis وهو يتبع الإتجاه الذي حددناه في <span style="font-family:courier new,courier,monospace;">flex-direction</span> بمعنى أنه من بداية الصفحة إلى نهايتها إذا حددنا <span style="font-family:courier new,courier,monospace;">flex-direction : row</span> أو من أسفل الصفحة إلى أعلاها إذا حددنا <span style="font-family:courier new,courier,monospace;">flex-direction : column-reverse</span> أما المحور الجانبي فهو يعامد المحور الرئيسي ويجري في نفس اتجاهه، هذه صورة توضح الأمر. 
		</p>

		<p style="text-align: center;">
			<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="3229" href="https://academy.hsoub.com/uploads/monthly_2015_07/Iy4B6Km.png.abd479c499eadfe98d26ed867c086b96.png" rel=""><img alt="Iy4B6Km.thumb.png.b5f31810b357d9b976a5c5" class="ipsImage ipsImage_thumbnailed" data-evernote-hover-show="true" data-fileid="3229" src="https://academy.hsoub.com/uploads/monthly_2015_07/Iy4B6Km.thumb.png.b5f31810b357d9b976a5c5698e6c9d3b.png"></a>
		</p>
	</div>

	<div id="wmd-preview-section-25">
		<h2 id="محاذات-العناصر">
			محاذات العناصر
		</h2>

		<p>
			يتيح لنا Flexbox محاذات العناصر بأكثر من طريقة، وعبر المحور الرئيسي والجانبي.
		</p>
	</div>

	<div id="wmd-preview-section-26">
		<h3 id="المحاذات-في-المحور-الجانبي">
			المحاذات في المحور الجانبي
		</h3>

		<p>
			للمحاذات على المحور الجانبي نستخدم خاصية <span style="font-family:courier new,courier,monospace;">align-items</span> وقيمه هي: 
		</p>

		<ul>
			<li>
				<strong>flex-start/baseline</strong>: تقوم بمحاذات أعلى نقطة من كل عنصر عند بداية المحور الجانبي. 
			</li>
			<li>
				<strong>flex-end</strong>: تقوم بمحاذات نهاية كل عنصر عند نهاية المحور الجانبي. 
			</li>
			<li>
				<strong>center</strong>: تقوم بمحاذات منتصف كل العناصر مع منتصف المحور الجانبي. 
			</li>
			<li>
				<strong>stretch</strong>: تقوم بجعل العناصر تتمدد حتى تملأ مساحة كامل المحور الجانبي.
			</li>
		</ul>

		<p>
			كل هذه القيم واضحة، ولكن إن احتجت فهمها أكثر، جرب التعديل على المثال التالي:
		</p>

		<p class="codepen" data-default-tab="result" data-height="268" data-slug-hash="jPzGPR" data-theme-id="0" data-user="HsoubAcademy">
			See the Pen <a href="http://codepen.io/HsoubAcademy/pen/jPzGPR/" rel="external nofollow">jPzGPR</a> by Hsoub Academy (<a href="http://codepen.io/HsoubAcademy" rel="external nofollow">@HsoubAcademy</a>) on <a href="http://codepen.io" rel="external nofollow">CodePen</a>.
		</p>
		<script async src="https://assets.codepen.io/assets/embed/ei.js"></script>

		<p>
			بالنسبة لمثالنا فقد قررت استخدام <span style="font-family:courier new,courier,monospace;">stretch:</span>
		</p>

		<pre class="css ipsCode prettyprint" data-pbcklang="css" data-pbcktabsize="">footer {
    display: flex;
    flex-flow: row wrap;
    align-items: stretch;
}</pre>

		<p>
			والآن نحن نملك عناصر تأخذ كامل مساحة الحاوي، مهما كان ارتفاعه ومهما كان محتواها قصيرا أو طويلا، ألم تتمنى لو كنت قادرا على الحصول على أعمدة متساوية الطول سابقا ولجأت إلى <a href="https://css-tricks.com/fluid-width-equal-height-columns/" rel="external nofollow">حلول غريبة جدا</a>.
		</p>

		<p>
			<strong>ملاحظة: </strong>هناك خاصية اسمها <span style="font-family:courier new,courier,monospace;">align-self</span> تستطيع تطبيقها على العناصر وتملك نفس القيم، وسوف تتخطى أيّ قيمة حددتها في <span style="font-family:courier new,courier,monospace;">align-items</span>.
		</p>
	</div>

	<div id="wmd-preview-section-27">
		<h3 id="المحاذات-على-المحور-الرئيسي">
			المحاذات على المحور الرئيسي
		</h3>

		<p>
			بعد أن شاهدنا طريقة لمحاذات العناصر على المحور الجانبي، سنرى الآن كيف سنقوم بمحاذاتهم على المحور الرئيسي، وذلك يتم عبر خاصية<span style="font-family:courier new,courier,monospace;"> justify-content </span>والتي تحدد كيف يجب أن تتم محاذات العناصر على المحور الرئيسي، أو بالأحرى كيف تم توزيع المساحة الفارغة المتبقية. لا يكون لهذه الخاصية أيّ تأثير إذا كان مجموع أطوال العناصر (بالإضافة إلى <span style="font-family:courier new,courier,monospace;">margin</span> الخاص بها) يساوي طول العنصر. بالنسبة لمثالنا فطول العناصر يساوي طول الحاوي لذا لا حاجة لها، ولكن سنرى كيف تعمل. <br>
			الخاصية تأخذ القيم التالية: 
		</p>

		<ul>
			<li>
				<strong>flex-start</strong>: تقوم بصف كامل العناصر في بداية المحور مع ترك المساحة الفارغة في النهاية. 
			</li>
			<li>
				<strong>flex-end</strong>: تقوم بصف كامل العناصر في نهاية المحور مع ترك المساحة الفارغة في البداية. 
			</li>
			<li>
				<strong>center</strong>: تقوم بصف العناصر في منتصف المحور، مع ترك مساحة متساوية على يمين وعلى يسار العناصر. 
			</li>
			<li>
				<strong>space-between</strong>: تقوم بحساب كامل المساحة الفارغة، ثم تقوم بتوزيعها بين العناصر. 
			</li>
			<li>
				<strong>space-around</strong>: تقوم أيضا بحساب كامل المساحة الفارغة وتقوم بتوزيعها بين العناصر، ولكن تقوم أيضا بتوزيع المساحة قبل أول عنصر وبعد آخر عنصر.
			</li>
		</ul>

		<p>
			جرب اللعب بهذا المثال حتى تفهم أكثر:
		</p>

		<p class="codepen" data-default-tab="result" data-height="268" data-slug-hash="xGWXZE" data-theme-id="0" data-user="HsoubAcademy">
			See the Pen <a href="http://codepen.io/HsoubAcademy/pen/xGWXZE/" rel="external nofollow">xGWXZE</a> by Hsoub Academy (<a href="http://codepen.io/HsoubAcademy" rel="external nofollow">@HsoubAcademy</a>) on <a href="http://codepen.io" rel="external nofollow">CodePen</a>.
		</p>
		<script async src="https://assets.codepen.io/assets/embed/ei.js"></script>

		<p>
			بالنسبة لمثالنا الأول فقد استخدمت التالي:
		</p>

		<pre class="css ipsCode prettyprint" data-pbcklang="css" data-pbcktabsize="">#first {
    width: 25%;
}

#second {
    width: 40%;
}

#third {
    width: 25%;
}
footer {
    display: flex;
    flex-flow: row wrap;
    align-items: stretch;
    justify-content: space-around;
}</pre>
	</div>

	<div id="wmd-preview-section-28">
		<h2 id="جعل-العناصر-مرنة">
			جعل العناصر مرنة
		</h2>

		<p>
			أحد أقوى الخواص في Flexbox هي القدرة على جعل العناصر مرنة بحيث تقوم بإعطائها طولا محددا (عرضا محددا إذا كنت تستخدم <span style="font-family:courier new,courier,monospace;">flex-flow: row</span> أو ارتفاعا معينا إذا كنت تستخدم <span style="font-family:courier new,courier,monospace;">flex-flow: column</span>) ليتغير طول العنصر إعتمادا على المساحة الفارغة المتوفرة في الحاوي، يتم هذا عبر خاصية flex التي تأخذ 3 خواص مجتمعة، سنجرب أول خاصية فيها وهي معامل التضخم flex grow factor:
		</p>

		<pre class="css ipsCode prettyprint" data-pbcklang="css" data-pbcktabsize="">#first {
    flex: 1;
}

#second {
    flex: 1;
}

#third {
    flex: 1;
}</pre>

		<p>
			هذه القيم عديمة الوحدة وهي تحدد كم المساحة التي يأخذها كل عنصر من الحاوي، إذا قمنا بتحديد 1 لكل العناصر، فسيأخذون نفس المساحة، وإذا حدننا لأحدهم 2 فسوف يأخذ ضعف المساحة لبقية العناصر:
		</p>

		<pre class="css ipsCode prettyprint" data-pbcklang="css" data-pbcktabsize="">#first {
    flex: 1;
}

#second {
    flex: 2;
}

#third {
    flex: 1;
}</pre>

		<p>
			وتستطيع أيضا تحديد قيمة <span style="font-family:courier new,courier,monospace;">flex-basis</span> لكل واحد هكذا:
		</p>

		<pre class="css ipsCode prettyprint" data-pbcklang="css" data-pbcktabsize="">#first {
    flex: 1 200px;
}

#second {
    flex: 2 300px;
}

#third {
    flex: 1 250px;
}</pre>

		<p>
			خاصية <span style="font-family:courier new,courier,monospace;">flex-basis</span> تعني الطول الذي سيأخذه كل عنصر (عرض في حال <span style="font-family:courier new,courier,monospace;">row</span> و ارتفاع في حال <span style="font-family:courier new,courier,monospace;">column</span>) ثم، المساحة الفارغة الباقية في الحاوي يتم توزيعها اعتمادا على معامل التضخم grow factor حتى يتم تحديد العرض النهائي للعناصر، ولنضرب مثالا أوضح: <br>
			العناصر أطوالها الإبتدائية هي 200 + 300 + 250 وهي 750px وعرض الحاوي هو 950px مما يعني وجود 200px من المساحة الفارغة ليتم توزيعها على العناصر. <br>
			أول وثالث عنصر (الذين يملكون <span style="font-family:courier new,courier,monospace;">flex:1</span>) سيحصلون على 50px إضافية ليصبح حجمهم النهائي 250px و 300px على الترتيب. أما العناصر الثاني (الذي يملك <span style="font-family:courier new,courier,monospace;">flex:2</span>) فسيحصل على 100px أيّ ضعف بقية العناصر ليكون حجمه النهائي 400px.
		</p>

		<p>
			مثال آخر، لنقل أن العنصر الثاني كان يملك <span style="font-family:courier new,courier,monospace;">flex:3</span>. الآن كيف سنعرف ماهي المساحة التي سيكتسبها كل عنصر، حسنا الأمر بسيط سنقوم بحساب مجموع هذه المعاملات (1 + 3 + 1 = 5) ثم نقوم بقسم المساحة المتبقية على المجموع (200px ÷ 5 = 40px) الآن سنضيف للعنصر الأول 40px والعنصر الثالث 40px والعنصر الثاني 3×40px أي 120px.
		</p>

		<p>
			الخاصية الثالثة والتي نادرا ما تستخدم هي معامل التقلص flex shrink factor:
		</p>

		<pre class="css ipsCode prettyprint" data-pbcklang="css" data-pbcktabsize="">#first {
    flex: 1 1 400px;
}

#second {
    flex: 2 3 600px;
}

#third {
    flex: 1 2 400px;
}</pre>

		<p>
			معامل التقلص هو أيضا بلا وحدة، ويعمل عكس معامل التضخم، ويكون للقيم تأثير عندما يتجاوز مجموع أطوال العناصر طول الحاوي والهدف منه هو تحديد القيمة التي سيصغر بها كل عنصر، لنضرب مثالا.
		</p>

		<p>
			لنقل أنّ حجم الحاوي هو 1100px، ومجموع العناصر فوق هو 1400px أي أنهم سيتجاوزون الحاوي بقيمة 300px. معامل التقلص سيحدد القيمة التي ينقص بها كل عنصر الآن، وهي كالتالي: 
		</p>

		<ul>
			<li>
				العنصر الأول سيفقد 1/6 من المساحة الإضافية أي سيفقد 50px ليصبح طوله 350px.
			</li>
			<li>
				العنصر الثاني سيفقد 3/6 من المساحة الإضافية أي سيفقد 150px ليصبح حجمه 450px.
			</li>
			<li>
				العنصر الثالث سيفقد 2/6 المساحة الإضافية أي سيفقد 100px ليصبح حجمه 300px.
			</li>
		</ul>

		<p>
			لذا كلما ارتفعت قيمة معامل التقلص، تقلص العنصر أكثر.
		</p>

		<p>
			القيم التي نستخدمها في المثال هي كالتالي:
		</p>

		<pre class="css ipsCode prettyprint" data-pbcklang="css" data-pbcktabsize="">.first {
  flex: 1 0 7rem;
}

.second {
  flex: 2 0 8rem;
  order: 1;
}

.third {
  flex: 1.5 0 7rem;
}</pre>

		<p>
			ملاحظة: خاصية <span style="font-family:courier new,courier,monospace;">flex</span> هي اختصار للقيم التالية على الترتيب:
		</p>

		<ul>
			<li>
				flex-grow 
			</li>
			<li>
				flex-shrink 
			</li>
			<li>
				flex-basis 
			</li>
		</ul>
	</div>

	<div id="wmd-preview-section-29">
		<h2 id="flex-auto-و-flex-initial">
			flex: auto و flex: initial
		</h2>

		<p>
			أحد أكثر قيم flex إفادة هم <span style="font-family:courier new,courier,monospace;">auto</span> و <span style="font-family:courier new,courier,monospace;">initial</span>. <br>
			<span style="font-family:courier new,courier,monospace;">flex: auto</span> والتي هي اختصار لـ <span style="font-family:courier new,courier,monospace;">flex: 1 1 auto</span> تجعل من العنصر مرنا جدا، خصوصا إذا حددت له قيمة لـ <span style="font-family:courier new,courier,monospace;">min-width </span>فسيتمدد العنصر إن كان هناك مساحة فارغة إضافية، ويتقلص إن لم تكفي المساحة، وإذا أضفت له <span style="font-family:courier new,courier,monospace;">min-width</span> فسيتقلص إلى تلك القيمة، ثم تقفز بقية العناصر إلى سطر جدي وتتوزع المساحة مجددا. <a href="http://codepen.io/HsoubAcademy/full/eNMaRN/" rel="external nofollow">شاهد هذا المثال</a> لترى كيف تتقلص العناصر وتتمد إعتمادا على المساحة المتوفرة (جرب تصغير المتصفح).
		</p>

		<p>
			أما إذا حددنا القيمة إلى <span style="font-family:courier new,courier,monospace;">flex: initial</span> (التي هي اختصار ل <span style="font-family:courier new,courier,monospace;">flex: 0 1 auto</span> فستلاحظ أن العناصر لا تتمدد في حال وجود مساحة فراغة ولكنها تتقلص عند الحاجة.
		</p>

		<p class="codepen" data-default-tab="result" data-height="268" data-slug-hash="EjEzXy" data-theme-id="0" data-user="HsoubAcademy">
			See the Pen <a href="http://codepen.io/HsoubAcademy/pen/EjEzXy/" rel="external nofollow">EjEzXy</a> by Hsoub Academy (<a href="http://codepen.io/HsoubAcademy" rel="external nofollow">@HsoubAcademy</a>) on <a href="http://codepen.io" rel="external nofollow">CodePen</a>.
		</p>
		<script async src="https://assets.codepen.io/assets/embed/ei.js"></script>
	</div>

	<div id="wmd-preview-section-30">
		<h2 id="خلاصة">
			خلاصة
		</h2>

		<p>
			أتمنى أن تكون هذه المقالة واضحة وبسيطة لتشرح مجموعة الخواص الرائعة هذه، Flexbox تسمح لنا بالكثير من "المرونة" في التطوير وتتيح لنا أشياء لم نكن قادريين على القيام بها سابقا.
		</p>

		<p>
			ترجمة -وبتصرّف- للمقال <a href="https://dev.opera.com/articles/flexbox-basics/" rel="external nofollow">Flexbox — Fast Track to Layout Nirvana</a>.
		</p>
	</div>
</div>
]]></description><guid isPermaLink="false">118</guid><pubDate>Wed, 08 Jul 2015 13:19:00 +0000</pubDate></item><item><title>10 &#x645;&#x62D;&#x62F;&#x62F;&#x627;&#x62A; CSS &#x644;&#x627; &#x62A;&#x644;&#x64A;&#x642; &#x627;&#x644;&#x628;&#x631;&#x645;&#x62C;&#x629; &#x628;&#x62F;&#x648;&#x646;&#x647;&#x627;</title><link>https://academy.hsoub.com/programming/css/10-%D9%85%D8%AD%D8%AF%D8%AF%D8%A7%D8%AA-css-%D9%84%D8%A7-%D8%AA%D9%84%D9%8A%D9%82-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D8%A8%D8%AF%D9%88%D9%86%D9%87%D8%A7-r116/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2015_07/css-selectors.png.5b8ec5ae4868c93626a16fb18fba0a01.png" /></p>

<p>نستخدِم المحدِّدات Selectors في كلّ مرّة نستخدم فيها CSS. تبقى محدِّدات CSS - رغم كثرة الاستخدام - أحد الأجزاء الأكثر إهمالًا في ملفّ المواصفة Specification.</p><p style="text-align: center;"><a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2015_07/css-selectors.png.1f97a564e7f9704e396dd4a78bd7c708.png"><img data-fileid="3213" class="ipsImage ipsImage_thumbnailed" alt="css-selectors.thumb.png.9a867d8cfe194258" src="https://academy.hsoub.com/uploads/monthly_2015_07/css-selectors.thumb.png.9a867d8cfe19425825c587eb1c5c52b1.png"></a></p><p>نتحدّث كثيرًا عن التّحويلات Transformations الكبرى في CSS3 لكنّنا دائمًا ننسى الأساسيّات. يجعل الاستخدام الجيّد للمحدّدات من كتابة الشّفرة أيسر وأكثر أناقة. سنغطّي في هذا المقال عشرة محدّدات يقلّ الانتباه إليها في الغالب، إلّا أنّها تجمع بين الفائدة العاليّة والفعاليّة.</p><h2 id="section">*</h2><p>ربّما يكون محدِّد <code>*</code> الأسهل تذكّرا إلّا أنّه في الغالب لا يُستخدَم بكثرة. يتمثّل عمل هذا المحدِّد في تنسيق جميع العناصر الموجودة في الصّفحة؛ ومن الجيّد استخدامُه لإعادة العناصر للوضع الابتدائيّ Reset وإنشاء بعض التّنسيقات الافتراضيّة للصّفحة مثل مجموعة الخطوط Font family والحجم Size.</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">* {
   margin: 0;
   padding: 0;
   font-family: helvetica, arial, sans-serif;
   font-size: 16px;
}</pre><h2 id="a-b">A + B</h2><p>يُسمَّى محدّد المُجاوِر Adjacent ويعمل على تحديد العنصُر (<code>B</code>) الّذي يتبع العُنصُرَ الأوَّل (<code>A</code>) <strong>مباشرةً</strong>. العنصران <code>A</code> و<code>B</code> يوجدان في نفس المستوى. نحدّد في المثال التّالي أوَّلَ عنصر <code>div</code> بعد التّرويسة Header:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">header + div {
  margin-top: 50px;
}</pre><h2 id="a-b-1">A &gt; B</h2><p>يُشبه عملُه عملَ المحدِّد <code>A B</code>. يكمن الاختلاف في أنّ <code>A B</code> يحدّد كلّ العناصر المتفرّعة من العنصُر <code>A</code> مهما كان المستوى الّذي توجد به ؛ أما <code>A &gt; B</code> فيكتفي بالعناصر الفرعيّة ذات المستوى الأوّل. يُنصَح باستخدام المحدِّد <code>A &gt; B</code> عند التّعامل مع الأبناء المباشرين للعنصُر الأب. لاحِظ المثال التّالي:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">&lt;h1&gt;
  &lt;em&gt;هامّ:&lt;/em&gt;
  هذا 
  &lt;span&gt;
    العنوان 
    &lt;em&gt;مهمّ&lt;/em&gt; 
    جدًّا
  &lt;/span&gt;
&lt;/h1&gt;</pre><p>التّنسيق التّاليّ يلوّن عنصُر <code>em</code> المتفرّع عن <code>h1</code> مباشرةً بالأحمر:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">h1 &gt; em {
  color: red;
}</pre><p>لو استخدمنا المحدّد <code>A B</code> لأعطى اللّون الأحمر لكلّ عناصر <code>em</code> في المثال السّابق.</p><h2 id="ahrefexample">["A[href*="example</h2><p>يُستخدَم لتنسيق رابط خاصّ بطريقة مغايرة. يُقارن ما يوجد بين ظفريْن بعنوان الرّابط فإن وُجدت مطابقة نُفِّذ التّنسيق. المثال التّاليّ يجعل كلّ الّروابط الّتي تُحيل إلى فيسبوك تبدو زرقاء:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">a[href*="facebook"] {
  color: blue;
}</pre><p>يُمكن استخدام المحدِّد دون علامة <code>*</code>؛ يجب في هذه الحالة أن يكون التّطابق مع الرّابط تامًّا.</p><h2 id="anotb">(A:not(B</h2><p>يستخدم عبارة النّفي <code>not</code> لاستبعاد ما لا يُطابق <code>B</code>. المثال التّاليّ يحدّد كلّ عناصر <code>div</code> الموجودة في الصّفحة ما عدا التّذييل Footer:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">div:not(.footer) {
  margin-bottom: 40px;
}</pre><h2 id="afirst-child-alast-child">A:first-child / A:last-child</h2><p>يسمح بتحديد أوّل أو آخر عنصُر فرعيّ من العنصُر <code>A</code> (على التّوالي <code>A:first-child</code> و<code>A:last-child</code>). يُمكن أن يكون المحدِّد مفيدًا عند التّعامل مع عناصر لائحة، لحذف هامش أو إطار على سبيل المثال. في ما يلي نحذف الإطار عن أوّل عنصُر من اللّائحة والهامش عن آخر عنصُر:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">ul li:first-child {  
  border: none;  
}     
ul li:last-child {  
  margin-right: 0px;
}</pre><h2 id="anth-childn">(A:nth-child(n</h2><p>يوفّر المحدِّد <code>nth-child</code> وسيلةً سهلة لاختيّار أيّ عنصُر فرعيّ حسب ترتيبه. يحدّد المثال التّالي العنصُر الثّالث ضمن لائحة غير مرتَّبة <code>ul</code> ويطبِّق عليه التّنسيق.</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">ul li:nth-child(3) {
  background: #ccc;
}</pre><p>يُمكن استخدام هذا المحدّد أيضًا لاختيّار العناصِر الّتي ترتيبها مُضاعِف لعدد معيَّن عبر إضافة <code>n</code> بعد العدد. المثال التّالي يحدِّد العناصر ذات التّرتيب 3، 6، 9، 12 وهكذا.</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">ul li:nth-child(3n) {
  background: #ccc;
}</pre><h2 id="anth-last-childn">(A:nth-last-child(n</h2><p>يُشبِه عمله عمل المحدِّد <code>nth-child</code> ويُستعمل على نفس المنوال؛ لكنه يبدأ حساب التّرتيب من آخر عنصُر، بدلًا من أوّل عنصُر. يعني هذا أنّك عند إعطاء العدد <code>2</code> لتحديد عنصُر من لائحة فسيختار العنصُر قبل الأخير في التّرتيب.</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">ul li:nth-last-child(2) {
  background: #ccc;
}</pre><h2 id="anth-of-typen">(A:nth-of-type(n</h2><p>يحدّد العنصُر من نوع <code>A</code> الّذي يظهر للمرّة <code>n</code>. نختار في المثال التّاليّ ثالث فقرة (عنصُر <code>p</code>) ضمن <code>div</code>.</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">div p:nth-of-type(3) {
  font-style: italic;
}</pre><h2 id="avisited">A:visited</h2><p>هل لاحظت في ما مضى أنّ الصّفحات الّتي سبقت لك زيّارتها تظهر بلون مختلف في نتائج Google؟ هذا بالضّبط هو عمل المحدِّد <code>visited</code>. يمثّل هذا التّنسيق إضافةً كبيرة للمستخدِم؛ إلّا أنّه يُهمَل في بعض الأحيان.</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">a:visited {
  color: blue;
}</pre><h2 id="final-thoughts">خاتمة</h2><p>يظهر لي - حسب خبرتي - أنّ هذا النّوع من المحدِّدات يُمكن أن يختصر الكثير من الوقت ويجنِّب تكدّس الكثير من المعرّفات <code>ID</code> داخل الوسوم. ليست هذه سوى البداية، توجد الكثير من محدِّدات CSS الأخرى المفيدة الّتي تُهمَل أحيانًا.</p><p>هل تستخدِم محدِّدات CSS؟ هل استخدامها أيسر من المعرِّفات والأصناف Classes؟ شاركنا تجربتك عبر التّعليقات.</p><p>ترجمة بتصرّف لمقال <a rel="external nofollow" href="http://www.webdesignerdepot.com/2013/08/10-css-selectors-you-shouldnt-code-without/">10 CSS selectors you shouldn’t code without</a> لصاحبته <a rel="external nofollow" href="http://www.webdesignerdepot.com/author/Sara-Vieira/">Sara Vieira</a>.</p>
]]></description><guid isPermaLink="false">116</guid><pubDate>Mon, 06 Jul 2015 15:37:00 +0000</pubDate></item><item><title>&#x645;&#x628;&#x627;&#x62F;&#x626; &#x627;&#x644;&#x62A;&#x62D;&#x631;&#x64A;&#x643; &#x641;&#x64A; &#x635;&#x641;&#x62D;&#x627;&#x62A; &#x627;&#x644;&#x648;&#x64A;&#x628; &#x628;&#x627;&#x633;&#x62A;&#x62E;&#x62F;&#x627;&#x645; CSS</title><link>https://academy.hsoub.com/programming/css/%D9%85%D8%A8%D8%A7%D8%AF%D8%A6-%D8%A7%D9%84%D8%AA%D8%AD%D8%B1%D9%8A%D9%83-%D9%81%D9%8A-%D8%B5%D9%81%D8%AD%D8%A7%D8%AA-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-css-r106/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2019_06/5d0a61b9d14bc_.jpg.5ccc1c34e01cb083bdc70a8e9f2bfb69.jpg" /></p>

<p id="-animation-principles-for-the-web-">
	نستخدم نحن المطوّرين ومُصمّمي الواجهات CSS في التنسيق والتَمَوْضُع (positioning)، وفي إنشاء مواقع تتسم بالجماليّة والمظهر الخلّاب، ونستخدمها غالبًا في إضافة الحركة إلى الصفحات باستخدام التنقّل (transitions) أو التحريك (animations)، ولكنّنا عادةً لا نتعمّق، ولا ندخل في خفايا خاصّيات CSS المُعقّدة.
</p>

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

<p>
	إنّ هذه المبادئ ليست بالجديدة، وهي عبارة عن مُمارسات عمليّة وتجارب طويلة من عالم ديزني، فقد نُشرت هذه <a href="http://en.wikipedia.org/wiki/12_basic_principles_of_animation" rel="external nofollow">المبادئ الاثنا عشر للتحريك</a> بكتاب وهو بعنوان:  "وهم الحياة: الرسوم المُتحركة في ديزني" في عام 1981، وصفت وصوّرت هذه المبادئ كيف يُمكن للتحريك أنّ يُستخدم في سلب عقل المُشاهدين في عالم وهميٍّ قابل للتصديق.
</p>

<p>
	سأتناول في هذه المقالة، كلًا من المبادئ الاثنا عشر، ومُناقشة كيف لها أنّ تُطبّق في صناعة صفحات الويب مُستخدمًا الأمثلة التوضيحيّة، وإتاحة الوصول إلى مصدر شيفرة HTML و CSS الخاصّة بهذه الأمثلة عبر <a href="" http:="" rel="">حساب الأكاديمية في Github</a>.
</p>

<h2 id="-squash-and-stretch-">
	التمدّد والانكماش (Squash and Stretch)
</h2>

<p>
	<iframe height="350" style="border:none" width="100%" src="https://github.com/HsoubAcademy/HsoubAcademy.github.io/tree/master/examples/CSS-animation-series/Animation%20Principles%20for%20the%20Web/Principle%201%20Squash%20and%20stretch.html"></iframe>
</p>

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

<p>
	يُمكن الاستفادة من هذا المفهوم عند إنشاء الكائنات الّتي نُريدها أنّ تبدو فيزيائيّة، مثل الأشخاص، الأشياء، أو تنطط الكرات.
</p>

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

<p>
	ولكن في حقيقة الأمر، يُمكن الاستفادة من مبدأ التمدّد والانكماش في إعطاء الكائن أو الجسم صفات الكتلة الفيزيائيّة، ويُمكن للتغيرات الصغيرة في الشكل إنشاء تأثيرات طفيفة ولكنّها في نفس الوقت مُلفتة للنظر.
</p>

<h2 id="-anticipation-">
	التهيئة (Anticipation)
</h2>

<p>
	<iframe height="400" style="border:none" width="100%" src="http://academy-examples.hsoub.com/examples/CSS-animation-series/Animation%20Principles%20for%20the%20Web/Principle%202%20Anticipation.html"></iframe>
</p>

<p>
	لا تحدث الحركات فجأةً، ففي الواقع العمليّ، تَنتج الحركة عادةً تدريجيًا، سواءً كان ذلك في دوران الكرة قبل السقوط من على الطاولة، أو عندما يثني شخصٌ ما قدميه استعدادًا للقفز.
</p>

<p>
	يُمكننا استخدام ذلك في جعل التحوّل (transitions) والتحريك (animations) في CSS أكثر حيويّةً وواقعيّة، ويُمكن لهذا المبدأ أنّ يكون على شكل ارتداد خفيف للكرة، ليُساعد المُستخدم على إدراك ما الّذي يتغيّر ويتتبّع مسار الجسم على الشاشة.
</p>

<p>
	فعلى سبيل المثال، يُمكن لعنصر من عناصر الصفحة أنّ يتقلّص قليلًا قبل أنّ يكبر في الحجم عند حركة المرور (hover)، أو لنقل مثلًا عند إضافة عناصر قائمة (items) جديدة إلى قائمة، فيُمكن أنّ يُمهد لهذه الحركة عبر إبعاد باقي العناصر وإفساح المجال لها أوّلًا.
</p>

<h2 id="-staging-">
	التقديم (Staging)
</h2>

<p>
	<iframe height="300" style="border:none" width="100%" src="http://academy-examples.hsoub.com/examples/CSS-animation-series/Animation%20Principles%20for%20the%20Web/Principle%203%20Staging.html"></iframe>
</p>

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

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

<p>
	يُمكن استخدام أسلوب آخر وهو الحركة، فعندما تتحرّك أجسام عدّة، فمن الصعب معرفة أي منها جديرٌ بالاهتمام والمُتابعة، ولكن إنّ توقّفت جميع التحركات وجسم واحد تحرّك، ولو بحركة صغيرة، فمن السهل جدًا اكتشافه.
</p>

<p>
	يُستخدم هذا الأسلوب عادةً مع زر الحِفظ (save)، بحيث يتذبذب أو يتمايل أو يومض بخفّة ليوضّح للمُستخدم أنّ عليه حِفظ المُستند قبل المُتابعة، مع الحفاظ على بقية أجزاء الصفحة ساكنة وبدون أدنى حركة، مع العلم أنّ أي حركة ولو طفيفة ستبرز وتكون واضحة للعيان.
</p>

<h2 id="-straight-ahead-action-and-pose-to-pose-">
	الحركة المُفصّلة والحركة من توقّف إلى توقّف (Straight-Ahead Action and Pose-to-Pose)
</h2>

<p>
	<iframe height="400" style="border:none" width="100%" src="http://academy-examples.hsoub.com/examples/CSS-animation-series/Animation%20Principles%20for%20the%20Web/Principle%204%20Straight%20Ahead%20Action%20and%20Pose%20to%20Pose.html"></iframe>
</p>

<p>
	إن الفعل straight-ahead يكون عندما يتمّ رسم كل إطار صورة (frame) لإتمام التحريك، أما الفعل pose-to-pose (توقّف إلى توقّف) يكون عندما يتمّ رسم سلسلة من الإطارات المفتاحيّة (keyframes) وتُرسم الفترات فيما بينها لاحقًا، عادةً من قِبل مُساعد.
</p>

<p>
	يُستخدم في عالم الويب معظم الأحيان التحريك من نوع pose-to-pose، فمثلًا الانتقال (transition) بين الإطارات المفتاحيّة (keyframes) يُمكن أنّ تتم معالجتها من قبل المُتصفّح، والذي يُقحم الاختلاف بين كل إطار ويرسم عددًا منها أيضًا بهدف جعل التحريك أكثر سلاسةً وواقعيّة.
</p>

<p>
	يوجد استثناء وحيد، وهو دالة التوقيت steps، فمع هذه الدالة، سيخطو المُتصفّح خطوات على عدد الإطارات المُحدّدة، وبهذه الطريقة ستتمكن من رسم سلسلة من الصور وجعل المُتصفّح يعرض كل منها تتابُعيًا، ليُنشئ بذلك حركة بالأسلوب **Straight Ahead Action”.
</p>

<h2 id="-follow-through-and-overlapping-action-">
	توابع الفعل وتداخله (Follow Through and Overlapping Action)
</h2>

<p>
	<iframe height="315" style="border:none" width="100%" src="http://academy-examples.hsoub.com/examples/CSS-animation-series/Animation%20Principles%20for%20the%20Web/Principle%205%20Follow%20Through%20and%20Overlapping%20Action.html"></iframe>
</p>

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

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

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

<p>
	قد يُستخدم هذا الأسلوب في عالم الويب عبر تجميع التنقلات (transitions) أو التحريك (animations) تتابعيًا، بهدف إنشاء تأثيرات تظهر بمُعدّل سرعة مُختلف فيما بينها.
</p>

<h2 id="-slow-in-and-slow-out-">
	التباطؤ والتسريع (Slow In and Slow Out)
</h2>

<p>
	<iframe height="315" style="border:none" width="100%" src="http://academy-examples.hsoub.com/examples/CSS-animation-series/Animation%20Principles%20for%20the%20Web/Principle%206%20Slow%20in%20and%20Slow%20out.html"></iframe>
</p>

<p>
	لا تنتقل الأجسام من السكون التام إلى السرعة القصوى فورًا، بل تميل الأجسام إلى رفع السرعة تدريجيًا، والتَبْطيء منها قبل التوقّف، فبدون التسارع والتباطؤ، ستكون الحركة وكأنها حركة آلة (روبوتي)
</p>

<p>
	يُعرَف التباطؤ والتسريع في عالم CSS بالمُصطلح easing (تسهيل)، ويُستخدم كدالة توقيت (timing function)، وهو طريقة في وصف وتحديد مُعدّل التغيّر خلال مسار التحريك.
</p>

<p>
	يُمكن وباستخدام دالات التوقيت جعل الأجسام المُتحركة تبدأ بطيئةً وترفع من السرعة (الدالة ease-in)، أو تبدأ سريعةً وتخفّف من السرعة (الدالة ease-out)، ويُمكن من أجل التأثيرات الأكثر تعقيدًا استخدام دالّة التوقيت cubic-bezier.
</p>

<h2 id="-arc-">
	التقوّس (Arc)
</h2>

<p>
	<iframe height="480" style="border:none" width="100%" src="http://academy-examples.hsoub.com/examples/CSS-animation-series/Animation%20Principles%20for%20the%20Web/Principle%207%20Arc%20(1).html"></iframe>
</p>

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

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

<p>
	<iframe height="450" style="border:none" width="100%" src="http://academy-examples.hsoub.com/examples/CSS-animation-series/Animation%20Principles%20for%20the%20Web/Principle%207%20Arc%20(2).html"></iframe>
</p>

<p>
	تكون الطريقة الثّانية عبر تدوير العنصر نفسه، حيثُ بإمكاننا التعديل على مركز دوران الجسم عبر ضبط مبدأ التغيّر (transform origin) ليُصبح خارج جسم العنصر، فعندما ندوّر الجسم، فإنه سيدور في تقوّس.
</p>

<h2 id="-secondary-action-">
	الفعل/الحدث الثانوي (Secondary Action)
</h2>

<p>
	<iframe height="400" style="border:none" width="100%" src="http://academy-examples.hsoub.com/examples/CSS-animation-series/Animation%20Principles%20for%20the%20Web/Principle%208%20Secondary%20Action.html"></iframe>
</p>

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

<p>
	يُمكن رؤية هذا المبدأ على مواقع الإنترنت، عندما تبعد العناصر من نفسها لإفساح المجال للعنصر الجديد، كما يحدث عند سحب عنصر قائمة ووضعه في منتصف القائمة.
</p>

<h2 id="-timing-">
	التوقيت (Timing)
</h2>

<p>
	<iframe height="300" style="border:none" width="100%" src="http://academy-examples.hsoub.com/examples/CSS-animation-series/Animation%20Principles%20for%20the%20Web/Principle%209%20Timing.html"></iframe>
</p>

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

<p>
	إن التعديل وتسوية/ضبط الوقت في صفحات الويب بسيطٌ للغاية، فكل ما يتطلب فعله هو التعديل على قيمتي الخاصيتين animation-duration أو transition-duration.
</p>

<h2 id="-exaggeration-">
	المُبالغة (Exaggeration)
</h2>

<p>
	<iframe height="500" style="border:none" width="100%" src="http://academy-examples.hsoub.com/examples/CSS-animation-series/Animation%20Principles%20for%20the%20Web/Principle%2010%20Exaggeration.html"></iframe>
</p>

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

<p>
	وفي صفحات الويب، يُمكن للأجسام أنّ تتوسّع وتتقلّص بهدف التأكيد عليها وجذب الانتباه إليها، على سبيل المثال عند ملئ نموذج ما (form)، فيُمكن للقسم النشط أنّ يكبر بينما بقية الأقسام تنكمش أو تتلاشى (fade).
</p>

<h2 id="-solid-drawing-">
	الرسم المتين (Solid drawing)
</h2>

<p>
	<iframe height="400" style="border:none" width="100%" src="http://academy-examples.hsoub.com/examples/CSS-animation-series/Animation%20Principles%20for%20the%20Web/Principle%2011%20Solid%20drawing.html"></iframe>
</p>

<p>
	عند تحريك الأجسام في الأبعاد الثلاثة (three dimensions)، يجب أنّ يكون الاهتمام مُنصبًا على أنّ هذه الأجسام تتبع قواعد الرسم المنظوري، فالناس مُعتادة على العيش والتعامل مع عالم ثلاثيّ الأبعاد، ولذلك عندما لا يبدو على الأجسام كما لها أنّ تكون في الواقع، فستبدو للمُشاهد غريبةً وغير مقبولة.
</p>

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

<h2 id="-appeal-">
	عامل الجذب (Appeal)
</h2>

<p>
	<iframe height="350" style="border:none" width="100%" src="http://academy-examples.hsoub.com/examples/CSS-animation-series/Animation%20Principles%20for%20the%20Web/Principle%2012%20Appeal.html"></iframe>
</p>

<p>
	إن عامل الجذب هو خصائص ومُميّزات العمل الفني وكيف يُمكن له أنّ يجعل منا مُتصلين ذهنيًّا مع مقصد ونيّة الفنان، فهو كجاذبيّة المُمثّل (الكاريزما)، ففي النهاية الانتباه إلى التفاصيل واتحاد الحركات مع بعضها البعض تناغميًا تجعل من النتائج نتائج مُميّزة وذات ظهور خلاب.
</p>

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

<h2 id="-">
	استخدم التحريك
</h2>

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

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

<p>
	ترجمة – وبتصرّف– للمقال <a href="https://cssanimation.rocks/principles/" rel="external nofollow">Animation Principles for the Web</a>.
</p>
]]></description><guid isPermaLink="false">106</guid><pubDate>Wed, 24 Jun 2015 17:48:00 +0000</pubDate></item><item><title>&#x62A;&#x623;&#x62B;&#x64A;&#x631;&#x627;&#x62A; &#x62D;&#x631;&#x643;&#x64A;&#x629; &#x639;&#x644;&#x649; &#x639;&#x646;&#x627;&#x635;&#x631; &#x642;&#x648;&#x627;&#x626;&#x645; HTML &#x628;&#x627;&#x633;&#x62A;&#x62E;&#x62F;&#x627;&#x645; CSS</title><link>https://academy.hsoub.com/programming/css/%D8%AA%D8%A3%D8%AB%D9%8A%D8%B1%D8%A7%D8%AA-%D8%AD%D8%B1%D9%83%D9%8A%D8%A9-%D8%B9%D9%84%D9%89-%D8%B9%D9%86%D8%A7%D8%B5%D8%B1-%D9%82%D9%88%D8%A7%D8%A6%D9%85-html-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-css-r94/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2019_06/5d0a60eab1f7a_html.jpg.70e5eac5404873fb6ef2de379322030d.jpg" /></p>

<p>
	يُساهم إضافة بعض التحريك (animation) عندما تتغيّر أجزاء صفحة الويب، في مُساعدة المُستخدِم على إدراك ما الّذي يحدث في الصّفحة، فيُمكن للتحريك أنّ يَدل على وصول مُحتوى جديد، أو لفت نظره إلى المُحتوى الّذي هو طور الإزالة.
</p>

<p>
	ستتناول هذه المقالة كيف يُمكن للتحريك المُساعدة على تقديم مُحتوى جديد، وذلك عبر إظهار وإخفاء عناصر قائمة من القائمة الخاصّة بهم.
</p>

<p class="codepen" data-default-tab="result" data-height="261" data-slug-hash="WvjoXa" data-theme-id="0" data-user="01walid">
	See the Pen <a href="http://codepen.io/01walid/pen/WvjoXa/" rel="external nofollow">WvjoXa</a> by Walid (<a href="http://codepen.io/01walid" rel="external nofollow">@01walid</a>) on <a href="http://codepen.io" rel="external nofollow">CodePen</a>.
</p>
<script async src="https://assets.codepen.io/assets/embed/ei.js"></script><h2>
	تقديم/تحضير المُحتوى (Introducing content)
</h2>

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

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

<h2>
	إعداد صفحة الويب (Setting up the HTML)
</h2>

<p>
	سيتمّ كخطوة أولى استخدام قائمة وزر لإضافة عناصر جديدة إلى القائمة.
</p>

<pre class="html ipsCode prettyprint" data-pbcklang="html" data-pbcktabsize="">
&lt;ul id="list"&gt;
  &lt;li class="show"&gt;List item&lt;/li&gt;
  &lt;li class="show"&gt;List item&lt;/li&gt;
&lt;/ul&gt;
&lt;button id="add-to-list"&gt;Add a list item&lt;/button&gt;</pre>

<p>
	يجب الانتباه إلى بعض الأمور هنا، أوّلًا يجب استخدام <strong><em>IDs</em></strong> في صفحة <strong>HTML</strong>، على الرغم من أنّها لا تُستخدم في التنسيق (styling) عادةً، بما أنّها تُستخدم في تحديد عنصر بحدّ ذاته – على عكس الأصناف (classes) – ولكنّها من الأفضل استخدامها هنا بسبب استخدام جافاسكريبت.
</p>

<p>
	تملك العناصر الأوليّة الصنف “show”، حيثُ هو الصنف الّذي سيتمّ استخدامه فيما بعد في إضافة تأثير التحريك.
</p>

<h2>
	استخدام JavaScript مع عناصر القائمة
</h2>

<p>
	سيتمّ كتابة سطورًا من جافا سكريبت لاستكمال عرض المثال، وذلك لإضافة عنصر قائمة جديد إلى القائمة، ومن <strong><em>ثُمّ</em></strong> إضافة الصنف “show” ليتمكن التحريك من عمل عمله، يوجد في الحقيقة سببٌ في استخدام هذا الأسلوب، ففي حال إضافة عناصر القائمة في حالة الظهور مُباشرةً، عندها لن يكون هناك مُتسع من الوقت للتنقل (transition) ليعمل عمله.
</p>

<p>
	يُمكن الالتفاف حول الأمر عبر استخدام التحريك على العناصر <code>li</code>، ولكن ستُصعب هذه الطريقة من عمليّة التعديل عند إزالة العناصر.
</p>

<pre class="javascript ipsCode prettyprint" data-pbcklang="javascript" data-pbcktabsize="">
/*
 * Add items to a list - from cssanimation.rocks/list-items/
 */
document.getElementById('add-to-list').onclick = function() {
  var list = document.getElementById('list');
  var newLI = document.createElement('li');
  newLI.innerHTML = 'A new item';
  list.appendChild(newLI);
  setTimeout(function() {
    newLI.className = newLI.className + " show";
  }, 10);
}</pre>

<h2>
	عناصر القائمة بدون تحريك (No animation)
</h2>

<p>
	يُمكن كتابة بعضًا من <strong>CSS</strong> لإظهار عناصر القائمة، فقد تمّ استخدام الصنف <code>show</code> في ضبطهم على الظهور، ولذلك إزالة الصنف <code>show</code> يجب أنّ يخفيهم.
</p>

<pre class="css ipsCode prettyprint" data-pbcklang="css" data-pbcktabsize="">
li {
  list-style: none;
  background: #d1703c;
  color: #fff;
  height: 0;
  line-height: 2em;
  margin: 0;
  padding: 0 0.5em;
  overflow: hidden;
  width: 10em;
}

li.show {
  height: 2em;
  margin: 2px 0;
}</pre>

<p>
	تمّ في التنسيق السابق ضبط عناصر <code>li</code> لتبدو على شكر مُستطيل، وبدون النقاط الدائريّة (bullet points)، وبارتفاع (<code>height</code>) بالقيمة 0، وهامش بمثله، وضبط <code>overflow</code> إلى مخفي (hidden)، كل هذا من أجل أنّ تكون عناصر القائمة غير مرئيّة إلى حين تطبيق الصنف <code>show</code> عليها.
</p>

<p>
	يُعيّن الصنف <code>show</code> ارتفاعًا وهامشًا للعناصر، وباعتبار أنّه لم يتمّ تطبيق التحريك بعد، فيجب على هذه العناصر أنّ تظهر فجأةً (مُباشرةً وبدون أي تأثير) على الصّفحة.
</p>

<h3>
	إضافة تأثير التَّلاشِي (Fade)
</h3>

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

<p class="codepen" data-default-tab="result" data-height="268" data-slug-hash="MwmbGM" data-theme-id="0" data-user="01walid">
	See the Pen <a href="http://codepen.io/01walid/pen/MwmbGM/" rel="external nofollow">MwmbGM</a> by Walid (<a href="http://codepen.io/01walid" rel="external nofollow">@01walid</a>) on <a href="http://codepen.io" rel="external nofollow">CodePen</a>.
</p>
<script async src="https://assets.codepen.io/assets/embed/ei.js"></script><p>
	تمّ إنشاء أقصوصة منفصلة من <strong>CSS</strong> لإضافة التأثير، ولتطبيقها على القائمة، سيتمّ تطبيق الصنف <code>fade</code> على الحاوية المُحيطة بالقائمة.
</p>

<pre class="css ipsCode prettyprint" data-pbcklang="css" data-pbcktabsize="">
.fade li {
  transition: all 0.4s ease-out;
  opacity: 0;
  height: 2em;
}

.fade li.show {
  opacity: 1;
}</pre>

<h3>
	إضافة تأثير التّلاشي والانزلاق (Slide down &amp; Fade)
</h3>

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

<p class="codepen" data-default-tab="result" data-height="268" data-slug-hash="vOmyre" data-theme-id="0" data-user="01walid">
	See the Pen <a href="http://codepen.io/01walid/pen/vOmyre/" rel="external nofollow">vOmyre</a> by Walid (<a href="http://codepen.io/01walid" rel="external nofollow">@01walid</a>) on <a href="http://codepen.io" rel="external nofollow">CodePen</a>.
</p>
<script async src="https://assets.codepen.io/assets/embed/ei.js"></script><p>
	يكمن الاختلاف بين هذا المثال وبين المثال ذو الصنف <code>fade</code> السابق فقط في أنّ الارتفاع <code>height: 2em</code> قد تمّت إزالته، وباعتبار أنّ الصنف <code>show</code> يملك ارتفاعًا مضبوطًا (مورثًا من أقصوصة CSS الأولى في هذا الدرس)، فإنه سيحوّل الارتفاع بشكل آلي.
</p>

<pre class="css ipsCode prettyprint" data-pbcklang="css" data-pbcktabsize="">
.slide-fade li {
  transition: all 0.4s ease-out;
  opacity: 0;
}

.slide-fade li.show {
  opacity: 1;
}</pre>

<h3>
	التأرجح (Swinging in)
</h3>

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

<p class="codepen" data-default-tab="result" data-height="268" data-slug-hash="NqjbzE" data-theme-id="0" data-user="01walid">
	See the Pen <a href="http://codepen.io/01walid/pen/NqjbzE/" rel="external nofollow">NqjbzE</a> by Walid (<a href="http://codepen.io/01walid" rel="external nofollow">@01walid</a>) on <a href="http://codepen.io" rel="external nofollow">CodePen</a>.
</p>
<script async src="https://assets.codepen.io/assets/embed/ei.js"></script><p>
	يتمّ الإعداد عن طريق تعريف الحاوية <code>section</code>، والّتي بداخلها سيحدث التحرّك الثلاثي الأبعاد، ولعمل هذا المنظور يجب استخدام الخاصّيّة <code>perspective</code>.
</p>

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

<pre class="css ipsCode prettyprint" data-pbcklang="css" data-pbcktabsize="">
.swing {
  perspective: 100px;
}</pre>

<p>
	سيتمّ في الخطوة التّالية إعداد العناصر <code>li</code> للتحوّل (transform) في المكان، وسيتم استخدام الخاصّيّة <code>opacity</code> لإنشاء تأثير التلاشي كما تمّ من قبل، ولكن مع استخدام الخاصّيّة <code>transform</code> لتدوير عناصر <code>li</code> في مكانها.
</p>

<pre class="css ipsCode prettyprint" data-pbcklang="css" data-pbcktabsize="">
.swing li {
  opacity: 0;
  transform: rotateX(-90deg);
  transition: all 0.5s cubic-bezier(.36,-0.64,.34,1.76);
}

.swing li.show {
  opacity: 1;
  transform: none;
  transition: all 0.5s cubic-bezier(.36,-0.64,.34,1.76);
}</pre>

<p>
	تمّ البدء في المثال السابق مع عناصر القائمة <code>li</code> ومع دوران مُساوي إلى تسعين درجة، ولكن عند إضافة الصنف <code>show</code> سيتمّ ضبط الخاصّيّة <code>transform</code> إلى القيمة <code>none</code>، الأمر الّذي يسمح لها بالتنقل في المكان، ولإعطاء تأثير التأرجح تمّ استخدام دالة التوقيت <code>cubic-bezier</code>.
</p>

<h3>
	التأرجح من الجانب (Swinging from side)
</h3>

<p>
	يمكن تحسين التأثير السابق بهدف إنشاء تنسيقات مُختلفة وبسهولة، في المثال التّالي تتأرج عناصر القائمة من الناحية الجانبيّة.
</p>

<p class="codepen" data-default-tab="result" data-height="268" data-slug-hash="eNWBjY" data-theme-id="0" data-user="01walid">
	See the Pen <a href="http://codepen.io/01walid/pen/eNWBjY/" rel="external nofollow">eNWBjY</a> by Walid (<a href="http://codepen.io/01walid" rel="external nofollow">@01walid</a>) on <a href="http://codepen.io" rel="external nofollow">CodePen</a>.
</p>
<script async src="https://assets.codepen.io/assets/embed/ei.js"></script><p>
	ليتم إنشاء هذا التأثير كل ما يجب فعله هو تغيير محور الدوران.
</p>

<pre class="css ipsCode prettyprint" data-pbcklang="css" data-pbcktabsize="">
.swing li {
  opacity: 0;
  transform: rotateY(-90deg);
  transition: all 0.5s cubic-bezier(.36,-0.64,.34,1.76);
}</pre>

<p>
	ما تمّ عمله في الشيفرة السابقة هو فقط تغيير <code>rotateX</code> إلى <code>rotateY</code>.
</p>

<h2>
	سوابق الخاصيات واختبار المُتصفّحات (Prefixes and browser testing)
</h2>

<p>
	لا تتضمّن الشيفرة السابقة على أي من سوابق المتصفحّات (prefixes)، وذلك من أجل سهولة قراءة الشيفرة فقط، ولكن في الواقع العمليّ يُنصح في إضافة هذه السوابق لدعم المُتصفّحات الّتي تحتاج إلى السابقة <code>webkit</code> أو أيً من السوابق الأُخرى، أو يُمكن الاعتماد على <a href="https://github.com/postcss/autoprefixer" rel="external nofollow">Autoprefixer</a> في ذلك.
</p>

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

<p>
	ترجمة – وبتصرّف – للمقال <a href="https://cssanimation.rocks/list-items/" rel="external nofollow">Animating List Items</a>.
</p>
<style type="text/css">
#add-to-list li {
  list-style: none;
  background: #d1703c;
  color: #fff;
  height: 0;
  line-height: 2em;
  margin: 0;
  padding: 0 0.5em;
  overflow: hidden;
  width: 10em;
}

#add-to-list li.show {
  height: 2em;
  margin: 2px 0;
}

 .fade li {
  transition: all 0.4s ease-out;
  opacity: 0;
  height: 2em;
}

 .fade li.show {
  opacity: 1;
}

.fade li {
  transition: all 0.4s ease-out;
  opacity: 0;
  height: 2em;
}

.fade li.show {
  opacity: 1;
}</style>
<script>
document.getElementById('add-to-list').onclick = function() {
  var list = document.getElementById('list');
  var newLI = document.createElement('li');
  newLI.innerHTML = 'A new item';
  list.appendChild(newLI);
  setTimeout(function() {
    newLI.className = newLI.className + " show";
  }, 10);

document.getElementById('add-to-list-fade').onclick = function() {
  var list = document.getElementById('list-fade');
  var newLI = document.createElement('li');
  newLI.innerHTML = 'A new item';
  list.appendChild(newLI);
  setTimeout(function() {
    newLI.className = newLI.className + " show";
  }, 10);
}
</script>

<p><a href="https://academy.hsoub.com/uploads/monthly_2015_06/1.png.c2e28a930284ffcb024e4854ce8d132d.png" class="ipsAttachLink ipsAttachLink_image"><img data-fileid="2355" src="https://academy.hsoub.com/uploads/monthly_2015_06/1.thumb.png.967ea5f4cad65496cfe66060e388b609.png" class="ipsImage ipsImage_thumbnailed" alt="1.png"></a></p>
<p><a href="https://academy.hsoub.com/uploads/monthly_2015_06/2.png.5771b46350309889c38e476af4cce963.png" class="ipsAttachLink ipsAttachLink_image"><img data-fileid="2356" src="https://academy.hsoub.com/uploads/monthly_2015_06/2.thumb.png.6dc7eda74202a3782a9a60b3395bca91.png" class="ipsImage ipsImage_thumbnailed" alt="2.png"></a></p>]]></description><guid isPermaLink="false">94</guid><pubDate>Sat, 06 Jun 2015 18:42:00 +0000</pubDate></item><item><title>&#x625;&#x638;&#x647;&#x627;&#x631; &#x648;&#x625;&#x62E;&#x641;&#x627;&#x621; &#x627;&#x644;&#x645;&#x62D;&#x62A;&#x648;&#x649; &#x628;&#x627;&#x633;&#x62A;&#x62E;&#x62F;&#x627;&#x645; CSS3 &#x62F;&#x648;&#x646; &#x627;&#x644;&#x644;&#x62C;&#x648;&#x621; &#x625;&#x644;&#x649; Javascript</title><link>https://academy.hsoub.com/programming/css/%D8%A5%D8%B8%D9%87%D8%A7%D8%B1-%D9%88%D8%A5%D8%AE%D9%81%D8%A7%D8%A1-%D8%A7%D9%84%D9%85%D8%AD%D8%AA%D9%88%D9%89-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-css3-%D8%AF%D9%88%D9%86-%D8%A7%D9%84%D9%84%D8%AC%D9%88%D8%A1-%D8%A5%D9%84%D9%89-javascript-r88/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2017_06/5950f218cee9b_css3javascript.png.1f0575941fd2200cca70a668123df5d8.png" /></p>

<p>
	مواقع الويب الحديثة أصبحت أكثر ديناميكية مؤخرا، عبر استخدام Javascript لتزويد المستخدم بتحديثات مباشرة ومتحكمات أكثر سلاسة. أحد أكثر المميزات شيوعا هي إظهار وإخفاء المحتوى، سواءا كان على شكل تبويبات، مخفيا على جانب الصفحة، أو على شكل قائمة متعددة المستويات.
</p>

<p>
	عادة، هذه المميزات يتم تطبيقها عبر Javascript فحسب، ولكنك تستطيع القيام بنفس التأثيرات عبر CSS3 بدون اللجوء إلى Javascript. في هذه المقالة سنرى كيف يمكننا تحقيق ذلك، مع تضمين بعض الأمثلة.
</p>

<h2>
	المحتوى
</h2>

<ol>
<li>
		مثال بسيط
	</li>
	<li>
		حل حقيقي
	</li>
	<li>
		الإخفاء والإظهار عبر CSS
	</li>
	<li>
		تحسين القائمة
	</li>
	<li>
		دعم المتصفحات
	</li>
</ol>
<h2>
	مثال بسيط
</h2>

<p>
	هذا مثال بسيط يظهر كيف يمكن إخفاء وإظهار المحتوى عبر CSS:
</p>

<p>
	<iframe allowfullscreen="true" allowtransparency="true" frameborder="no" height="268" scrolling="no" src="https://codepen.io/assassinateur/embed/YXKgRz/?height=268&amp;theme-id=14314" style="width: 100%;">See the Pen &amp;amp;amp;amp;amp;amp;amp;lt;a data-cke-saved-href='http://codepen.io/assassinateur/pen/YXKgRz/' href='http://codepen.io/assassinateur/pen/YXKgRz/'&amp;amp;amp;amp;amp;amp;amp;gt;YXKgRz&amp;amp;amp;amp;amp;amp;amp;lt;/a&amp;amp;amp;amp;amp;amp;amp;gt; by Nadir (&amp;amp;amp;amp;amp;amp;amp;lt;a data-cke-saved-href='http://codepen.io/assassinateur' href='http://codepen.io/assassinateur'&amp;amp;amp;amp;amp;amp;amp;gt;@assassinateur&amp;amp;amp;amp;amp;amp;amp;lt;/a&amp;amp;amp;amp;amp;amp;amp;gt;) on &amp;amp;amp;amp;amp;amp;amp;lt;a data-cke-saved-href='http://codepen.io' href='http://codepen.io'&amp;amp;amp;amp;amp;amp;amp;gt;CodePen&amp;amp;amp;amp;amp;amp;amp;lt;/a&amp;amp;amp;amp;amp;amp;amp;gt;.</iframe>
</p>

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

<p>
	الآن بعد مشاهدتنا للمثال، لنلقي نظرة على ما استخدمنا والتقنيات الكامنة خلف ذلك، ونبني قائمة بينما نحن نقوم بذلك.
</p>

<h2>
	حل حقيقي
</h2>

<p>
	نستطيع استخدام الحل الذي سنطوره في إحدى الحالات التالية:
</p>

<ul>
<li>
		نريد أن تجعل محتوى معين يظهر ويختفي في مكان معين (مثل قوائم المحتوى في ويكيبيديا)
	</li>
	<li>
		لسبب ما، قد لا نريد استعمال جافاسكربت
	</li>
</ul>
<p>
	لنبدأ بمشاهدة حل يستخدم جافاسكربت؛ قسم المحتوى في <a href="http://ar.wikipedia.org/wiki/%D8%A7%D9%82%D8%AA%D8%B5%D8%A7%D8%AF" rel="external nofollow">مقالة ما في ويكيبديا </a>
</p>

<p>
	<iframe allowfullscreen="true" allowtransparency="true" frameborder="no" height="268" scrolling="no" src="https://codepen.io/assassinateur/embed/rVBbMR/?height=268&amp;theme-id=14314" style="width: 100%;">See the Pen &amp;amp;amp;amp;amp;amp;amp;lt;a data-cke-saved-href='http://codepen.io/assassinateur/pen/rVBbMR/' href='http://codepen.io/assassinateur/pen/rVBbMR/'&amp;amp;amp;amp;amp;amp;amp;gt;rVBbMR&amp;amp;amp;amp;amp;amp;amp;lt;/a&amp;amp;amp;amp;amp;amp;amp;gt; by Nadir (&amp;amp;amp;amp;amp;amp;amp;lt;a data-cke-saved-href='http://codepen.io/assassinateur' href='http://codepen.io/assassinateur'&amp;amp;amp;amp;amp;amp;amp;gt;@assassinateur&amp;amp;amp;amp;amp;amp;amp;lt;/a&amp;amp;amp;amp;amp;amp;amp;gt;) on &amp;amp;amp;amp;amp;amp;amp;lt;a data-cke-saved-href='http://codepen.io' href='http://codepen.io'&amp;amp;amp;amp;amp;amp;amp;gt;CodePen&amp;amp;amp;amp;amp;amp;amp;lt;/a&amp;amp;amp;amp;amp;amp;amp;gt;.</iframe>
</p>

<p>
	المثال السابق مأخوذ من صفحة ويكيبيديا (هو مجرد HTML رغم هذا)، يعمل الجدول عبر إخفاء المحتوى، وتغيير الكلمة من "أخفي" إلى "أظهر" ويتم هذا عبر جافاسكربت. يتم إضافة تسجيل مراقب للزر (Event Listener)، عندما يتم الضغط على الزر، يقوم jQuery بإضافة class جديد للصندوق، يتم أيضا إَضافة واحد لحاوي الروابط، كما يتم تغيير محتوى الزر من "أخفي" إلى "أظهر".
</p>

<h2>
	الإخفاء والإظهار عبر CSS
</h2>

<p>
	سنحاول إعادة صنع قائمة ويكيبيديا، ولكن عبر CSS فحسب، فسنفقد بعض المميزات، ولكننا سنكسب بعض الأمور في نفس الوقت.
</p>

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

<p>
	<iframe allowfullscreen="true" allowtransparency="true" frameborder="no" height="268" scrolling="no" src="https://codepen.io/assassinateur/embed/oXvOZb/?height=268&amp;theme-id=14314" style="width: 100%;">See the Pen &amp;amp;amp;amp;amp;amp;amp;lt;a data-cke-saved-href='http://codepen.io/assassinateur/pen/oXvOZb/' href='http://codepen.io/assassinateur/pen/oXvOZb/'&amp;amp;amp;amp;amp;amp;amp;gt;oXvOZb&amp;amp;amp;amp;amp;amp;amp;lt;/a&amp;amp;amp;amp;amp;amp;amp;gt; by Nadir (&amp;amp;amp;amp;amp;amp;amp;lt;a data-cke-saved-href='http://codepen.io/assassinateur' href='http://codepen.io/assassinateur'&amp;amp;amp;amp;amp;amp;amp;gt;@assassinateur&amp;amp;amp;amp;amp;amp;amp;lt;/a&amp;amp;amp;amp;amp;amp;amp;gt;) on &amp;amp;amp;amp;amp;amp;amp;lt;a data-cke-saved-href='http://codepen.io' href='http://codepen.io'&amp;amp;amp;amp;amp;amp;amp;gt;CodePen&amp;amp;amp;amp;amp;amp;amp;lt;/a&amp;amp;amp;amp;amp;amp;amp;gt;.</iframe>
</p>

<p>
	مثل قائمة ويكيبديا، نريد من قائمتنا أن تظهر مفتوحة بشكل افتراضي. نصنع class باسم <code>.show</code> و <code>.hide</code>. وبما أن القائمة ستكون مفتوحة، لا نريد من زر <code>.show</code> أن يظهر.
</p>

<pre class="css ipsCode prettyprint prettyprinted" data-pbcklang="css" data-pbcktabsize="" style="">
<span class="pun">.</span><span class="pln">show </span><span class="pun">{</span><span class="pln">
    display</span><span class="pun">:</span><span class="pln"> none</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	والآن نريد أن نجعل زر الإظهار 'يظهر' ونخفي زر 'الإخفاء' عندما يتم الضغط عليه، يمكننا تحقيق هذا عبر شبه الصنف <code>:focus</code> والذي يعمل عندما يتم الضغط على الرابط بواسطة الفأرة أو التركيز عليه بواسطة لوحة المفاتيح. سنستخدم المحدد "+" والذي يعني العنصر الذي يأتي مباشرة بعد العنصر الأول.
</p>

<pre class="css ipsCode prettyprint prettyprinted" data-pbcklang="css" data-pbcktabsize="" style="">
<span class="pln">a</span><span class="pun">.</span><span class="pln">hide</span><span class="pun">:</span><span class="pln">focus </span><span class="pun">+</span><span class="pln"> </span><span class="pun">.</span><span class="pln">show </span><span class="pun">{</span><span class="pln">
    display</span><span class="pun">:</span><span class="pln"> </span><span class="kwd">inline</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

a</span><span class="pun">.</span><span class="pln">hide</span><span class="pun">:</span><span class="pln">focus </span><span class="pun">{</span><span class="pln">
    display</span><span class="pun">:</span><span class="pln"> none</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	الآن، لنجعل الزر يعمل حقا! سوف نقوم بجعل القائمة <code>#menu</code> تختفي عندما يكون زر الإخفاء في حالة <code>:focus</code> بما أنّ القائمة لا تأتي مباشرة بعد الزر، سيكون علينا استخدام المحدد غير المباشر <code>~</code> من أجل تحديد القائمة.
</p>

<pre class="css ipsCode prettyprint prettyprinted" data-pbcklang="css" data-pbcktabsize="" style="">
<span class="pln">a</span><span class="pun">.</span><span class="pln">hide</span><span class="pun">:</span><span class="pln">focus </span><span class="pun">~</span><span class="pln"> </span><span class="com">#menu {</span><span class="pln">
    display</span><span class="pun">:</span><span class="pln">none</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	والآن، لتعديل بسيط أخير. نريد أن نخفي أزرار الإخفاء والإظهار في حال طباعة الصفحة، أسرع طريقة للقيام بالأمر هي عبر استخدام <code>media query</code> والتي تتفقد هل يتم طباعة الصفحة، وإن كان كذلك تقوم بإخفاء الأزرار.
</p>

<pre class="css ipsCode prettyprint prettyprinted" data-pbcklang="css" data-pbcktabsize="" style="">
<span class="lit">@media</span><span class="pln"> </span><span class="kwd">print</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  </span><span class="pun">.</span><span class="pln">hide</span><span class="pun">,</span><span class="pln"> </span><span class="pun">.</span><span class="pln">show  </span><span class="pun">{</span><span class="pln">
    display</span><span class="pun">:</span><span class="pln"> none</span><span class="pun">;</span><span class="pln">
    </span><span class="pun">}</span><span class="pln">
  </span><span class="pun">}</span></pre>

<p>
	حتى الآن، ما قمنا به يعطينا التأثير المطلوب الذي رأيناه في أول المقال.
</p>

<p>
	القائمة التي لدينا تقوم بنفس عمل قائمة ويكيبيديا تماما، عدى بعض التأثيرات الخفيفة التي سنصل لها بعد قليل. يجب التنويه على أننا لم نستخدم جافاسكربت فحسب، بل استخدمنا مقدارا ضئيلا جدا من CSS من أجل تحقيق هذا، مقارنة ب3 دوال في جافاسكربت وحوالي 20 سطرا من الكود.
</p>

<h2>
	تحسين القائمة
</h2>

<p>
	الآن بعدما قمنا بصنع التأثير إخفاء المحتوى، نريد أن نضيف له بعض التأثيرات البصرية، وسنستخدم CSS أيضا.
</p>

<h3>
	الاختفاء البطيء
</h3>

<p>
	بدلا من الإظهار والإخفاء السريع، سيكون من اللطيف لو اختفت القائمة بشكل بطيء، وسنقوم بهذا عبر transition في CSS. سوف نحدد الوضع الافتراضي للقائمة (وهي أن تظهر بشكل كامل) ثم نخفيها ببطيء.
</p>

<pre class="css ipsCode prettyprint prettyprinted" data-pbcklang="css" data-pbcktabsize="" style="">
<span class="com">#menu {</span><span class="pln">
  opacity</span><span class="pun">:</span><span class="pln"> </span><span class="lit">1</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

a</span><span class="pun">.</span><span class="pln">hide</span><span class="pun">:</span><span class="pln">focus </span><span class="pun">~</span><span class="pln"> </span><span class="com">#menu {</span><span class="pln">
  opacity</span><span class="pun">:</span><span class="pln"> </span><span class="lit">0</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	بدل أن نضع التأثير خصيصا للعنصر، نستطيع إَضافته لأي عنصر عبر وضعه في class مستقل
</p>

<pre class="css ipsCode prettyprint prettyprinted" data-pbcklang="css" data-pbcktabsize="" style="">
<span class="pun">.</span><span class="pln">tran1 </span><span class="pun">{</span><span class="pln">
  </span><span class="pun">-</span><span class="pln">o</span><span class="pun">-</span><span class="pln">transition</span><span class="pun">:</span><span class="pln"> all </span><span class="lit">1s</span><span class="pun">;</span><span class="pln">
  </span><span class="pun">-</span><span class="pln">moz</span><span class="pun">-</span><span class="pln">transition</span><span class="pun">:</span><span class="pln"> all </span><span class="lit">1s</span><span class="pun">;</span><span class="pln">
  </span><span class="pun">-</span><span class="pln">webkit</span><span class="pun">-</span><span class="pln">transition</span><span class="pun">:</span><span class="pln"> all </span><span class="lit">1s</span><span class="pun">;</span><span class="pln">
  transition</span><span class="pun">:</span><span class="pln"> all </span><span class="lit">1s</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	الآن، تستطيع إضافة التأثير لأي عنصر تريد وذلك عبر إضافة class فحسب.
</p>

<h2>
	النتيجة النهائية
</h2>

<p>
	بعد إَضافة بعض التحسينات البسيطة، هذه هي النتيجة النهائية
</p>

<p>
	<iframe allowfullscreen="true" allowtransparency="true" frameborder="no" height="268" scrolling="no" src="https://codepen.io/assassinateur/embed/pJzBWQ/?height=268&amp;theme-id=14314" style="width: 100%;">See the Pen &amp;amp;amp;amp;amp;amp;amp;lt;a data-cke-saved-href='http://codepen.io/assassinateur/pen/pJzBWQ/' href='http://codepen.io/assassinateur/pen/pJzBWQ/'&amp;amp;amp;amp;amp;amp;amp;gt;pJzBWQ&amp;amp;amp;amp;amp;amp;amp;lt;/a&amp;amp;amp;amp;amp;amp;amp;gt; by Nadir (&amp;amp;amp;amp;amp;amp;amp;lt;a data-cke-saved-href='http://codepen.io/assassinateur' href='http://codepen.io/assassinateur'&amp;amp;amp;amp;amp;amp;amp;gt;@assassinateur&amp;amp;amp;amp;amp;amp;amp;lt;/a&amp;amp;amp;amp;amp;amp;amp;gt;) on &amp;amp;amp;amp;amp;amp;amp;lt;a data-cke-saved-href='http://codepen.io' href='http://codepen.io'&amp;amp;amp;amp;amp;amp;amp;gt;CodePen&amp;amp;amp;amp;amp;amp;amp;lt;/a&amp;amp;amp;amp;amp;amp;amp;gt;.</iframe>
</p>

<p>
	ملاحظة: <em>حالما تضغط على شيء آخر، يعود كل شيء كما كان</em> وهذا هو التصرف الطبيعي لشبه الصنف <code>:focus</code> ولكنه ليس الأمر الذي نريده نحن. هذه المشكلة ليست موجودة في مثال ويكيبيديا بكل تأكيد، كما أن ويكيبيديا تستخدم الـcookies لتتذكر آخر حالة للقائمة حتى بعد تحديث الصفحة، وهو شيء لا نستطيع تحقيقه للأسف.
</p>

<h2>
	خاتمة
</h2>

<p>
	استطعنا القيام ببعض التأثيرات البصرية باستخدام CSS لوحدها عبر تعلم كيفية إخفاء وإظهار العناصر، هناك محددات واعدة أكثر ستظهر مستقبلا، وستتيح لنا التحكم أكثر وأكثر في العناصر وتحديدها بسهولة، احدى الخدع التي يمكن استخدامها هي استخدام checkbox بدل الروابط من أجل تغيير حالة الصندوق، ولكن كان هذا ليجعل الأمر أكثر تعقيدا.
</p>

<p>
	 
</p>

<p>
	حقوق الصورة البارزة محفوظة لـ <a href="http://www.freepik.com/free-vector/mobile-with-icons-background-in-flat-design_895765.htm" rel="external nofollow">Freepik</a>
</p>
]]></description><guid isPermaLink="false">88</guid><pubDate>Fri, 29 May 2015 18:46:00 +0000</pubDate></item><item><title>&#x645;&#x642;&#x62F;&#x645;&#x629; &#x625;&#x644;&#x649; &#x627;&#x644;&#x62A;&#x623;&#x62B;&#x64A;&#x631;&#x627;&#x62A; &#x627;&#x644;&#x631;&#x633;&#x648;&#x645;&#x64A;&#x629; &#x636;&#x645;&#x646; CSS</title><link>https://academy.hsoub.com/programming/css/%D9%85%D9%82%D8%AF%D9%85%D8%A9-%D8%A5%D9%84%D9%89-%D8%A7%D9%84%D8%AA%D8%A3%D8%AB%D9%8A%D8%B1%D8%A7%D8%AA-%D8%A7%D9%84%D8%B1%D8%B3%D9%88%D9%85%D9%8A%D8%A9-%D8%B6%D9%85%D9%86-css-r84/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2019_06/5d0a6087867e6_.jpg.bfa7cc4ce1b6a2465f1a97a720dca7e7.jpg" /></p>

<p dir="rtl">
	خلال العامين الأخيرين، قدَّمت CSS مجموعة جديدة من الخصائص التي تتيح إماكنية تطبيق تأثيرات مختلفة على الصور عبر متصفحات الويب. ومن خلال بضعة أسطر برمجية ودون الحاجة نهائيًا إلى برامج تحرير وتعديل الصور. بالتأكيد فإن هذا الموضوع سيلقى آذانًا صاغية عند الأشخاص الذين يتقنون كتابة الشيفرات البرمجية وليس لديهم نفس المهارة في التعامل مع برامج تحرير وتعديل الصور.
</p>

<p dir="rtl">
	من الأمثلة التي يمكن تطبيقها ضمن CSS هي "تأثير إكساء النص" حيث تظهر الكتابة وهي مكساة بغلاف (صورة) نقوم بتحديدها، أيضاً يمكن تطبيق تأثيرات مختلفة على ألوان الصور، تأثيرات مزج الصور مع عناصر أخرى، قص جزء من الصورة وفق أشكال مختلفة، وحتى قلب محتويات الصورة والعديد من التأثيرات الأخرى.
</p>

<p dir="rtl">
	إذاً، فإن CSS قد قطعت شوطًا طويلًا ضمن هذا المجال، خلال هذه المقالة سأقوم بعرض الخصائص التي تسمح بتطبيق التأثيرات الرسومية وهي تأثيرات "نماذج المزج" و"الفلاتر".
</p>

<h2 dir="rtl">
	مزج الألوان باستخدام نماذج المزج في CSS
</h2>

<p dir="rtl">
	إذا كنت مصمم ويب وقد استخدمت مسبقً برامج تحرير الرسومات مثل "Photoshop" أو "Illustrator" فلابد أنك قمت بالتعامل مع نماذج المزج أثناء عملك على هذه البرامج . حيث تعتبر نماذج المزج أحد أكثر التأثيرات استعمالً على الرسومات. عمليات المزج والتي تسمى أيضاً بتوابع المزج تتيح درجة تحكم عالية لتطبيق عمليات المزج المختلفة مثل عكس الألوان، خلطها ببعضها البعض، زيادة درجة إضاءتها، والعديد غير هذا.
</p>

<p dir="rtl">
	عندما نستخدم نماذج المزج فإن تأثيرً معينً سيتم تطبيقه على عنصر محدد يدعى بالمصدر "source" حيث سيتم دمجه مع الخلفية ليتم تشكيل الهدف "destination".
</p>

<p dir="rtl">
	هذه الخلفية "backdrop" تعرَّف ضمن CSS على أنها المحتوى الذي يقع خلف العنصر المطلوب وهي التي سيتم دمج العنصر معها. وبالتالي فإن عملية الدمج يقصد بها دمج العنصر المطلوب مع الخلفية التي يتموضع عليها.
</p>

<p dir="rtl">
	أي أنه من الناحية العملية عندما نقوم باستخدام نموذج المزج على عنصرين، فإنه فعلياً ستتم عملية المزج على المناطق التي تحتوي هذين العنصرين، على اعتبار أن كل عنصر سيتم مسبقاً دمجه مع خلفيته الخاصة.
</p>

<p dir="rtl">
	قبل الشروع بالحديث عن تفاصيل عمليات الدمج ونماذج المزج فمن المهم التذكير بأن CSS تتيح طريقة سهلة لتطبيق عملية الدمج تعرف باسم "دمج ألفا البسيط simple alpha compositing" وعملياً فإن خاصية الشفافية opacity هي التي تقوم به، حيث إن تغيير قيمة هذه الخاصية يجعل المتصفح يقوم بعملية دمج بحيث يمكن أن يظهر العنصر بدرجة شفافية معينة بالنسبة إلى الخلفية التي يقع عليها.
</p>

<p dir="rtl">
	اليوم تتيح CSS خاصيتين رئيسيتين هما: background-blend-mode والتي تقوم بمزج العناصر مع الخلفية المحددة. والخاصية mix-blend-mode ةالتي تسمح بمزج العناصر مع بعضها البعض، ويتم استخدام هاتين الخاصيتين عبر توفير 16 نموذج مزج كقيمة محددة لهما.
</p>

<h3 dir="rtl">
	مزج صور الخلفية باستخدام الخاصية background-blend-mode
</h3>

<p dir="rtl">
	إن الخاصية background-blend-mode وكما يعبر عنها اسمها، تقوم بتطبيق نموذج مزج معين على خلفية العنصر المحدد، هذه الخلفية إما أن تكون صورة أو لون. وبالتالي يجب أن نحدد لهذه الخاصية أي نموذج مزج يجب تطبيقه.
</p>

<p dir="rtl">
	في حال كان العنصر يملك أكثر من صورة واحدة كخلفية له، عندئذ بالإمكان تحديد أكثر من نموذج مزج، حيث يتم تطبيق النموذج الأول على الصورة الأولى، والنموذج الثاني على الصورة الثانية وهكذا ...
</p>

<p dir="rtl">
	على سبيل المثال:
</p>

<pre class="css ipsCode prettyprint" data-pbcklang="css" data-pbcktabsize="4">
background-image: url(first-image.png), url(second-image.png);
background-color: orange;
background-blend-mode: screen, multiply;</pre>

<p dir="rtl">
	ضمن هذا المثال فإن الخلفية second-image.png سيتم مزجها مع اللون المحدد كخلفية "البرتقالي" باستخدام نموذج المزج "multiply"، بعد ذلك يتم مزج الخلفية first-image.png مع نفس اللون "البرتقالي" باستخدام نموذج المزج screen . (تذكر بأن الخلفية الأولى هي التي سوف تظهر في حين تتوضع باقي الخلفيات تحتها).
</p>

<p dir="rtl">
	توفر CSS كما ذكرنا مسبقا 16 نموذج مزج وهي:
</p>

<ul>
<li dir="rtl">
		Normal: وهو النموذج الافتراضي وعمليا لايقوم بتطبيق أي تأثير.
	</li>
	<li>
		<pre class="css ipsCode prettyprint" data-pbcklang="css" data-pbcktabsize="4">
multiply, screen, overlay, darken, lighten, color-dodge, color-burn, hard-light, soft-light, difference, exclusion, hue, saturation, color and luminosity</pre>
	</li>
</ul>
<p dir="rtl">
	كل نموذج مزج من المجموعة السابقة يقوم بتطبيق تأثيرات مختلفة عن باقي النماذج. يكمن الجزء الأصعب في التحديد المسبق لأي نموذج مزج ينبغي استخدامه للحصول على النتيجة المطلوبة، فمن شبه المستحيل توقع النتيجة التي ستظهر عند تطبيق نماذج المزج على الصور.
</p>

<p dir="rtl">
	الصورة التالية تظهر نتيجة تطبيق كل نماذج المزج السابقة (كلٌ على حدى) على نفس الصورة حيث تمت عملية المزج مع اللون الأحمر، ملاحظة : ترتيب الصور بدءً من الصورة العلوية في أقصى اليسار مع نفس ترتيب توابع المزج التي تم ذكرها في الأعلى.
</p>

<p dir="rtl" style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2015_05/01.png.bfd10618b8b2636c3cd530c90efb98c6.png" data-fileid="2100" rel=""><img alt="01.thumb.png.3eccacb463b46bffd3cee76629a" class="ipsImage ipsImage_thumbnailed" data-fileid="2100" src="https://academy.hsoub.com/uploads/monthly_2015_05/01.thumb.png.3eccacb463b46bffd3cee76629a626f2.png"></a>
</p>

<p dir="rtl">
	عادةً، يتم اختيار نموذج المزج من خلال التجربة عبر تطبيق نماذج المزج على الصورة لتحديد التأثير المطلوب .
</p>

<p dir="rtl">
	كما يمكن الاحتفاظ بنماذج المزج ذات التأثيرات الشائعة على الصور لتطبيقها عند الحاجة. على سبيل المثال نموذج اللمعان والذي يسمح بإنشاء صور ذات تأثير تقليدي (قديم) وهذا مانجده مألوفاً ضمن مواقع الانترنت التي تعتمد صورة رئيسية مع عنوان باللون الأبيض كترويسة للصفحة وهو الأسلوب الذي انتشر على نطاق واسع خلال العام الماضي .
</p>

<p dir="rtl">
	ضمن مقال آخر كتبته -أي كاتبة المقال، سارة سويدان- منذ فترة وجيزة، قمت بإنشاء <a href="http://sarasoueidan.com/demos/css-blender/" rel="external nofollow">صفحة تفاعلية تسمح لك برفع صورك ومعانية التأثيرات المختلفة لنماذج المزج عليها</a>.
</p>

<p dir="rtl" style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2015_05/02.png.c6144ce0c67f9195164bf9fea27d5071.png" data-fileid="2101" rel=""><img alt="02.thumb.png.5422b3ea1eb033179edf9dc3c66" class="ipsImage ipsImage_thumbnailed" data-fileid="2101" src="https://academy.hsoub.com/uploads/monthly_2015_05/02.thumb.png.5422b3ea1eb033179edf9dc3c6690b11.png"></a>
</p>

<p dir="rtl">
	يمكنك من خلال التجربة وبعض المهارة الحصول على صور بتأثيرات غاية في الجمال، الصورة التالية تظهر نتيجة تطبيق نموذج المزج overlay على الصورة مع تدرج خطي من اللون الأخضر إلى الأحمر (من اليسار إلى اليمين)، أي تمت عملية الدمج بين التدرج اللوني مع الصورة الأصلية. يمكن مشاهدة هذا المثال عبر <a href="http://tympanus.net/codrops-playground/SaraSoueidan/lc3XhUii/editor" rel="external nofollow">هذا الرابط</a>.
</p>

<p dir="rtl" style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2015_05/03.png.da0ea8691d2ad4adc734e4c8bd9b92f6.png" data-fileid="2102" rel=""><img alt="03.thumb.png.a024a7f037c906adf31faea46c7" class="ipsImage ipsImage_thumbnailed" data-fileid="2102" src="https://academy.hsoub.com/uploads/monthly_2015_05/03.thumb.png.a024a7f037c906adf31faea46c74a0e8.png"></a>
</p>

<p dir="rtl">
	عموماً يمكن الحصول على تأثيرات رسومية عبر مزج العناصر مع بعضها البعض (وعدم الاكتفاء بعمليات المزج على الخلفية كما فعلنا حتى الآن). إن هذا الأمر مفيد عندما نرغب بعملية المزج على عنصر صورة &lt;img&gt; أي أنه ليس خلفية إنما عنصر ضمن الصفحة، وأيضاً لمزج النص مع صورة تتوضع خلفه، وفي هذه الحالات فإننا سنستخدم الخاصية الثانية وهي mix-blend-mode .
</p>

<h3 dir="rtl">
	مزج العناصر مع خلفياتها باستخدام الخاصية mix-blend-mode
</h3>

<p dir="rtl">
	واحدة من الاستعمالات الأكثر شيوعً لخاصية مزج العناصر فوق بعضها mix-blend-mode، هي ضمن الصفحات التي تحتوي على ترويسة (عادة قائمة التنقل) ثابتة الظهور أعلى الصفحة حتى عند النزول بشريط التمرير لأسفل، في هذه الحالة يتم تركيب عنصر الترويسة فوق العناصر الأخرى التي تصبح خلفه، استخدام آخر لهذه الخاصية عند تركيب نص ما فوق صورة كخلفية له، بل وحتى تركيب نص فوق نص آخر.
</p>

<p dir="rtl">
	بشكل مشابه للتعامل مع الخاصية background-blend-mode فإن الخاصية mix-blend-mode أيضاً تتعامل مع نفس مجموعة نماذج المزج الست عشرة التي تعرفنا إليها مسبقاً.
</p>

<p dir="rtl">
	الصورة التالية تظهر نص متموضع فوق عنصر صورة ومن ثم التأثير الناتج عن تطبيق توابع المزج المختلفة عبر الخاصية mix-blend-mode:
</p>

<p dir="rtl" style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2015_05/04-compressor.gif.5d59e645db854bb24886ddf911d1d7b1.gif" data-fileid="2116" rel=""><img alt="04-compressor.thumb.gif.72c12e94b987eb7a" class="ipsImage ipsImage_thumbnailed" data-fileid="2116" src="https://academy.hsoub.com/uploads/monthly_2015_05/04-compressor.thumb.gif.72c12e94b987eb7ae0a4982325f04d24.gif"></a>
</p>

<p dir="rtl">
	كمثال على تطبيق نماذج المزج بين العناصر، سنضع نص ما ضمن عنصر &lt;h1&gt; والذي بدوره يوجد ضمن فقرة &lt;div&gt; لها صورة كخلفية، ثم تطبيق نموذج المزج multiply حيث تكون الشيفرة البرمجية كالتالي :
</p>

<pre class="html ipsCode prettyprint" data-pbcklang="html" data-pbcktabsize="4">
&lt;div class=“wrapper”&gt;
    &lt;h1&gt;This is a blended heading&lt;/h1&gt;
&lt;/div&gt;</pre>

<pre class="css ipsCode prettyprint" data-pbcklang="css" data-pbcktabsize="4">
.wrapper {
  background-image: url(path/to/image.jpg);
  background-size: cover;
  /* ... */
}

h1 {
  mix-blend-mode: multiply;
  /* تنسيقات أخرى هنا */
}</pre>

<p dir="rtl">
	من الممكن أيضا كما ذكرنا مزج نص مع نص آخر، وهذا ماينتج عنه تأثير رائع بسبب الألوان الجديدة الناتجة، حيث يظهر في الصورة التالية نتائج عديدة تم الحصول عليها عبر تطبيق نماذج المزج المختلفة مع الخاصية mix-blend-mode.
</p>

<p dir="rtl" style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2015_05/05.png.f8c892ac2536c7bf5a9b6a44a2b658ea.png" data-fileid="2103" rel=""><img alt="05.thumb.png.0761214b9110213087cb6b18934" class="ipsImage ipsImage_thumbnailed" data-fileid="2103" src="https://academy.hsoub.com/uploads/monthly_2015_05/05.thumb.png.0761214b9110213087cb6b189345e496.png"></a>
</p>

<p dir="rtl">
	ضمن الصورة السابقة تم تحريك بعض العناصر عن مواضعها الأصلية لتتراكب فوق عناصر أخرى حتى يتاح لنا إمكانية تطبيق الخاصية mix-blend-mode.
</p>

<h3 dir="rtl">
	ملاحظات حول المزج
</h3>

<p dir="rtl">
	في بعض الأحيان، قد لانرغب أن تتم عملية المزج مع المحتوى الذي يقع خلف العنصر، مثلا أن تتم عملية المزج بين مجموعة من العناصر ولكن دون أن تشمل المحتويات في الخلفية بهذا الأمر، في هذه الحالة نقوم باستخدام خاصية العزل والتي تدعى isolation، حيث يصبح بالإمكان عزل مجموعة من العناصر مع بعضها وتطبيق نماذج المزج دون أن يتأثر أي شي لاينتمي لهذه المجموعة ولاحتى العناصر التي تتموضع خلفها.
</p>

<p dir="rtl">
	عند استخدام الخاصية background-blend-mode فمن غير المجدي استخدام الخاصية isolation وذلك لأن الخلفية لن تتراكب أساسً مع عناصر أخرى تقع خلفها (حيث إنها لن تظهر) وبالتالي فإننا نستخدم خاصية العزل isolation فقط مع الخاصية mix-blend-mode .
</p>

<p dir="rtl">
	يمكن أن تتعلم المزيد <a href="http://tympanus.net/codrops/css_reference/isolation/" rel="external nofollow">عن خاصية العزل isolation</a>. <strong>ملاحظة</strong>: تسمح الخاصية mix-blend-mode بمزج عناصر SVG.
</p>

<h3 dir="rtl">
	دعم متصفحات الويب
</h3>

<p dir="rtl">
	يومًا بعد يوم تتجه متصفات الانترنت لدعم نماذج المزج بشكل أكبر، على العموم يمكن <a href="http://caniuse.com/#feat=css-backgroundblendmode" rel="external nofollow">الاطلاع على المتصفحات التي تدعم الخاصية background-blend-mode</a><span style="font-family:courier new,courier,monospace;"> </span>و<a href="http://caniuse.com/#feat=css-mixblendmode" rel="external nofollow">المتصفحات التي تدعم الخاصية mix-blend-mode</a>. <span style="line-height: 1.6;">بشكل عام يمكن استخدام نماذج المزج مع تحديد سيناريو بديل للمتصفحات التي لاتوفر الدعم.</span>
</p>

<h2 dir="rtl">
	تعديل الصور باستخدام الفلاتر ضمن CSS
</h2>

<p dir="rtl">
	يقوم الفلتر بتطبيق تأثيرات محددة على الصورة عندما يتم عرضها على صفحة الويب، للتوضيح أكثر يمكن تصور الفلتر على أنه طبقة تتوضع أما عدسة الكاميرة وبالتالي مايتم مشاهدته عبر الكاميرة هي الصورة بعد تطبيق تأثير هذه الطبقة عليها، وبالتأكيد يتغير التأثير عندما يتغير الفلتر المستخدم. لتطبيق الفلتر ضمن CSS يتم استخدام الخاصية filter <a href="http://dev.w3.org/fxtf/filters/#FilterProperty" rel="external nofollow">والتي يمكن معرفة المزيد عنها</a>. تأثيرات الفلاتر تشمل تأثير الضباب، تأثير الظل، تأثير اللشفافية وغيره. حيث يتم تحديد دالّة الفلتر (filter function) المراد تطبيقها، يوجد 10 دوال فلتر وهي:
</p>

<pre class="css ipsCode prettyprint" data-pbcklang="css" data-pbcktabsize="4">
▪ blur()
▪ brightness()
▪ contrast()
▪ grayscale()
▪ hue-rotate()
▪ invert()
▪ opacity()
▪ saturate()
▪ sepia()
▪ drop-shadow()
▪ url()</pre>

<p dir="rtl">
	يتم تمرير قيمة ما إلى أحد الدوال السابقة لمعرفة درجة التأثير التي ستقوم هذه الدالة بتطبيقها، ضمن الفقرات التالية سنتعرف على جميع هذه الدوال وطريقة استخدامها والتأثير الناتج عنها.
</p>

<h3 dir="rtl">
	الدالة ()blur
</h3>

<p dir="rtl">
	يستخدم هذا التابع لتطبيق تأثير الضباب على الصورة، حيث تظهر بشكل ضبابي. يقوم هذا التابع بعمله وفق خوارزمية غاوص (أي تطبيق Gaussian Blur). ويتم تمرير وسيط له يحدد درجة الضبابية المراد تطبيقها، هذه القيمة يجب أن تكون عدد موجب حصرً وليس عدد سالب أو نسبة مئوية. في حال تمرير القيمة صفر 0 فلن يكون لهذا التابع أي تأثير، وكلما زادت القيمة تزداد درجة الضبابية المطبقة. أما واحدة قياس هذه القيمة فيمكن تحديدها بإحدى القيم : px, em  أو rem. مثال:
</p>

<pre class="css ipsCode prettyprint" data-pbcklang="css" data-pbcktabsize="4">
blur(.5em);
blur(7px);
blur(0);
filter: blur(); /* equivalent to blur(0); */</pre>

<p dir="rtl">
	النتيجة التالية تظهر عند تطبيق التابع blur مع تمرير القيمة 10px:
</p>

<p dir="rtl" style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2015_05/06.png.3271465d71f67bcfe22456c8db6bcb3c.png" data-fileid="2104" rel=""><img alt="06.thumb.png.e25935cb0510d158204e93f11a7" class="ipsImage ipsImage_thumbnailed" data-fileid="2104" src="https://academy.hsoub.com/uploads/monthly_2015_05/06.thumb.png.e25935cb0510d158204e93f11a7031ad.png"></a>
</p>

<h3 dir="rtl">
	الدالة ()brightness
</h3>

<p dir="rtl">
	يستخدم هذا التابع لتغيير درجة سطوع الصورة، إما زيادة أو نقصان، ويتم تمرير قيمة له لتحديد درجة السطوع المراد تطبيقه. هذه القيمة إما أن تكون نسبة مئوية أو رقم عشري (مثلاً الرقم 0.65 = 65%)، القيمة صفر 0 تؤدي إلى ظهور الصورة باللون الأسود تماماً. أما القيمة 100% فإنها تحافظ على الصورة بألوانها الطبيعية دون أي تغيير على درجة السطوع. وهكذا فكلما زادت القيمة الممررة للتابع brightness فستزداد درجة السطوع. يمكن تمرير قيمة أكبر من 100% للحصول على سطوع أكبر من الوضع الأصلي للصورة، وأي قيمة أصغر من 100% تؤدي إلى نقصان السطوع عن الوضع الأصلي. مثال:
</p>

<pre class="css ipsCode prettyprint" data-pbcklang="css" data-pbcktabsize="4">
brightness(150%);
brightness(0);
brightness(0.7);
brightness(0.01);
brightness(200%);
brightness(10%);</pre>

<p dir="rtl">
	النتيجة التالية تظهر عند تطبيق التابع brightness مع تمرير القيمة 200%:
</p>

<p dir="rtl" style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2015_05/07.png.01b9a1c239fdedd3fb66af9a1c9c2220.png" data-fileid="2105" rel=""><img alt="07.thumb.png.8f930be63b3648a9fb73dc50f2c" class="ipsImage ipsImage_thumbnailed" data-fileid="2105" src="https://academy.hsoub.com/uploads/monthly_2015_05/07.thumb.png.8f930be63b3648a9fb73dc50f2c91650.png"></a>
</p>

<h3 dir="rtl">
	الدالة ()constract
</h3>

<p dir="rtl">
	يستخدم هذا التابع لتغيير درجة التباين ضمن الصورة، حيث يقصد بالتباين زيادة الفروق اللونية بين المناطق الفاتحة والأخرى الغامقة في الصورة.
</p>

<p dir="rtl">
	بشكل مشابه للتابع brightness، يتم تمرير قيمة إلى تابع التباين constract (رقم أو نسبة مئوية) تحدد درجة التباين المراد تطبيقه. القيمة صفر 0 تؤدي إلى ظهور الصورة باللون الأسود تماماً، أما القيمة 100% فإنها تحافظ على الصورة بألوانها الطبيعية دون أي تغيير على درجة التباين. وهكذا فكلما زادت القيمة الممررة للتابع constract فستزداد درجة التباين. يمكن تمرير قيمة أكبر من 100% للحصول على تباين أكبر من الوضع الأصلي للصورة، وأي قيمة أصغر من 100% تؤدي إلى نقصان التباين عن الوضع الأصلي. مثال:
</p>

<pre class="css ipsCode prettyprint" data-pbcklang="css" data-pbcktabsize="4">
contrast(150%);
contrast(0);
contrast(0.7);
contrast(0.01);
contrast(200%);
contrast(10%);</pre>

<p dir="rtl">
	النتيجة التالية تظهر عند تطبيق التابع constract مع تمرير القيمة 200%:
</p>

<p dir="rtl" style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2015_05/08.png.3fce69affc6e6f03fd5907f73eb6fafe.png" data-fileid="2106" rel=""><img alt="08.thumb.png.ebb06a409e466fb948262edf753" class="ipsImage ipsImage_thumbnailed" data-fileid="2106" src="https://academy.hsoub.com/uploads/monthly_2015_05/08.thumb.png.ebb06a409e466fb948262edf7535c068.png"></a>
</p>

<h3 dir="rtl">
	الدالة ()grayscale
</h3>

<p dir="rtl">
	يستخدم هذا التابع لتحويل الصورة الملونة إلى صورة أبيض وأسود (وبشكل أدق تدرجات اللون الرمادي).
</p>

<p dir="rtl">
	يتم تمرير قيمة لهذا التابع على شكل نسبة مئوية أو رقم عشري، القيمة صفر 0 تحافظ على ألوان الصورة الأصلية دون أي تغيير، أما الفيمة 100% فإنها ستعطي صورة بتدرجات الرمادي دون أي ألوان أخرى، يتم اعتبار أي قيمة أكبر من 100% على أنها تساوي 100% ويتم تطبيق تأثيرها. عموماً إن تطبيق قيم ضمن المجال من 0 إلى 100% يؤدي إلى خسارة ألوان الصورة تدريجيً نحو تدرجات الرمادي كلما زادت القيمة المطبقة. مثال:
</p>

<pre class="css ipsCode prettyprint" data-pbcklang="css" data-pbcktabsize="4">
#further-resources:target {
animation: highlight .8s ease-out;
}

@keyframes highlight {
0% { background-color: #FFFF66; }
100% { background-color: #FFFFFF; }
}</pre>

<p dir="rtl">
	النتيجة التالية تظهر عند تطبيق التابع grayscale مع تمرير القيمة 100%:
</p>

<p dir="rtl" style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2015_05/09.png.79d2b118afd5f2deaf1c45bbd0bb7703.png" data-fileid="2107" rel=""><img alt="09.thumb.png.97b11592131ea22c5c503df646d" class="ipsImage ipsImage_thumbnailed" data-fileid="2107" src="https://academy.hsoub.com/uploads/monthly_2015_05/09.thumb.png.97b11592131ea22c5c503df646de2b95.png"></a>
</p>

<h3 dir="rtl">
	الدالة ()hue-rotate
</h3>

<p dir="rtl">
	يقوم هذا التابع بتدوير ألوان الصورة بمقدار زاوية تساوي القيمة الممررة له. أبسط طريقة لتوضيح مفهوم تدوير الألوان هي عبر عجلة الألوان. وهي عبارة عن قرص دائري الشكل يحتوي على جميع الألوان كل لون يقع ضمن درجة زاوية معينة على هذا القرص. فإن حددنا نقطة وهمية على القرص وقمنا بتدويره بدرجة ما، فسوف يتغير اللون عند النقطة المحددة.
</p>

<p dir="rtl">
	أسلوب عمل هذا التابع يكون عبر تحديد لون جميع النقاط ضمن الصورة الأصلية، ومن ثم تطبيق دوران على ألوان جميع هذه النقاط وبنفس الدرجة. وهذا ماينتج عنه صورة جديدة بألوان مختلفة كلياً عن الألوان الأصلية.
</p>

<p dir="rtl">
	القيمة الممررة لهذا التابع والتي تعبر عن درجة الدوران يجب أن تكون بين 0 و 360 , حيث إن القيمة صفر 0 لن تؤدي أي عملية دوران وبالتالي الحفاظ على الألوان كما هي، وهكذا كلما زادت القيمة تزداد معها درجة الدوران، وأي قيمة مغايرة للمجال من 0 إلى 360 يتم اعتبارها على أنها صفر 0. مثال النتيجة التالية تظهر عند تطبيق التابع hue-rotate مع تمرير القيمة 120deg:
</p>

<p dir="rtl" style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2015_05/10.png.070e5d5a5f6c6a9c747721917a228893.png" data-fileid="2108" rel=""><img alt="10.thumb.png.bf578111a4c96a770e8963cb435" class="ipsImage ipsImage_thumbnailed" data-fileid="2108" src="https://academy.hsoub.com/uploads/monthly_2015_05/10.thumb.png.bf578111a4c96a770e8963cb435ce5c6.png"></a>
</p>

<h3 dir="rtl">
	الدالة ()invert
</h3>

<p dir="rtl">
	يقوم هذا التابع بعكس ألوان الصورة بشكل كامل، حيث تظهر بشكل مماثل للصور الملتقطة عبر كاميرة تصوير فوتوغرافي قبل إجراء عملية التحميض عليها (صور المصدر). يتم تمرير قيمة لهذا التابع تحدد درجة عكس الألوان المراد تطبيقه، بشكل افتارضي فإنه يأخذ القيمة 100% وهذا يعني عكس الألوان بصورة كاملة، أما إن تم تمرير القيمة صفر 0 فستبقى الصورة كما هي دون حدوث أي تعديل عليها، وهكذا يزداد تأثير هذا التابع كلما زادت القيمة المحددة له ضمن المجال من 0 إلى 100%، مع إمكانية تمرير رقم عشري له عوضً عن النسبة المئوية. مثال:
</p>

<pre class="css ipsCode prettyprint" data-pbcklang="css" data-pbcktabsize="4">
invert(); /* equivalent to invert(100%) */
invert(0.24);
invert(60%);</pre>

<p dir="rtl">
	النتيجة التالية تظهر عند تطبيق التابع invert مع تمرير القيمة 100%:
</p>

<p dir="rtl" style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2015_05/11.png.7bed9707cb79c366cb8830b8802e1431.png" data-fileid="2109" rel=""><img alt="11.thumb.png.b463541aa8a941c8acc5129b876" class="ipsImage ipsImage_thumbnailed" data-fileid="2109" src="https://academy.hsoub.com/uploads/monthly_2015_05/11.thumb.png.b463541aa8a941c8acc5129b87611233.png"></a>
</p>

<h3 dir="rtl">
	الدالة ()opacity
</h3>

<p dir="rtl">
	يعمل هذا التابع بشكل مشابه لعمل الخاصية opacity ضمن CSS، حيث يقوم هذا التابع بتغيير درجة شفافية الصورة وفقً للقيمة الممررة له، القيمة 100% تحافظ على الصورة في حالتها الأصلية دون أي تأثير شفافية، في حين أن القيمة صفر 0 تجعل الصورة شفافة تمامً وبالتالي غير مرئية، وهكذا تتراوح درجة الشفافية بحسب القيمة المحددة للتابع ضمن المجال من 0 إلى 100% مع إمكانية تمرير رقم عشري له عوضً عن النسبة المئوية. مثال النتيجة التالية تظهر عند تطبيق التابع opacity مع تمرير القيمة 0.5:
</p>

<p dir="rtl" style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2015_05/12.png.da1888b7444686116b2c71dc7b4ea1c3.png" data-fileid="2110" rel=""><img alt="12.thumb.png.dd2542559adcb90f4ff6dd75f06" class="ipsImage ipsImage_thumbnailed" data-fileid="2110" src="https://academy.hsoub.com/uploads/monthly_2015_05/12.thumb.png.dd2542559adcb90f4ff6dd75f0673873.png"></a>
</p>

<h3 dir="rtl">
	الدالة ()saturate
</h3>

<p dir="rtl">
	يقوم هذا التابع بتغيير درجة إشباع اللون، عندما تكون بعض الصور بألوان باهتة ونريد زيادة إشباع ألوانها لإضافة بعض الحيوية عليها فإننا نستخدم هذا التابع والذي يضيف رونقً خاصً يجعل الصور أكثر جمالية، درجة إشباع الألوان يتم تحديدها عبر القيمة الممررة لهذا التابع، القيمة 0 تجعل الألوان باهتة جداً (أضعف حالات الإشباع اللوني)، أما القيمة 100% في تحافظ على الصورة مثل وضعها الأصلي دون أي تعديل، وبالتالي لزيادة درجة الإشباع اللوني يجب تمرير قيمة أكبر من 100%. مثال النتيجة التالية تظهر عند تطبيق التابع saturate مع تمرير القيمة 250%:
</p>

<p dir="rtl" style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2015_05/13.png.dbae9fa181d6034235a5b7a611c4d601.png" data-fileid="2111" rel=""><img alt="13.thumb.png.7526a09d650ae5013efe959b4d9" class="ipsImage ipsImage_thumbnailed" data-fileid="2111" src="https://academy.hsoub.com/uploads/monthly_2015_05/13.thumb.png.7526a09d650ae5013efe959b4d9baa83.png"></a>
</p>

<h3 dir="rtl">
	الدالة ()sepia
</h3>

<p dir="rtl">
	يقوم هذا التابع بجعل الصورة تبدو معتّقة وكأنها صورة فوتوغرافية قديمة وبرونق جميل وجذاب، حيث يقوم بإضافة تأثير اللون البني الداكن عليها، وقد انتشر هذا التأثير مؤخرً بشكل واسع بسبب تأثيره الجذاب. يتم تمرير قيمة لهذا التابع تتراوح بين 0 إلى 100%، مع إمكانية تمرير رقم عشري، القيمة صفر 0 لاينتج عنها أي تأثير على الصورة، في حين أن القيمة 100% تؤدي إلى تطبيق هذا التأثير بأقصى درجة ممكنة. مع ملاحظة أن جميع القيم الأكبر من 100% يتم اعتبارها مساوية للقيمة 100%. مثال النتيجة التالية تظهر عند تطبيق التابع sepia مع تمرير القيمة 100%:
</p>

<p dir="rtl" style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2015_05/14.png.611a7699c5d51027d59d36fc0781e990.png" data-fileid="2112" rel=""><img alt="14.thumb.png.08a3d74f7f2df1df21064f14b7b" class="ipsImage ipsImage_thumbnailed" data-fileid="2112" src="https://academy.hsoub.com/uploads/monthly_2015_05/14.thumb.png.08a3d74f7f2df1df21064f14b7b94a61.png"></a>
</p>

<h3 dir="rtl">
	الدالة ()drop-shadow
</h3>

<p dir="rtl">
	تقوم الخاصية box-shadow ضمن CSS بتطبيق ظل على شكل صندوق يحيط بالعنصر المحدد، حتى إن لم يكن هذا العنصر له شكل مستطيل (صندوق) فإن الظل المطبق سيكون على شكل مستطيل، مما قد يؤدي إلى نتائج غير مرغوب بها.
</p>

<p dir="rtl">
	في حالة استعمال الصور ذات الصيغة PNG والتي غالباً تحتوي على أجزاء شفافة وأخرى مرئية فمن المرغوب فيه تطبيق تأثير الظل على الأجزاء المرئية وليس على شكل صندوقي. وفي هذه الحالة نستخدم التابع ()drop-shadow كما هو موضح في الصورة التالية:
</p>

<p dir="rtl" style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2015_05/15.png.58aa4654617049394100124272273558.png" data-fileid="2113" rel=""><img alt="15.thumb.png.e23f7634a83c13c5fc0684cd46f" class="ipsImage ipsImage_thumbnailed" data-fileid="2113" src="https://academy.hsoub.com/uploads/monthly_2015_05/15.thumb.png.e23f7634a83c13c5fc0684cd46fdd876.png"></a>
</p>

<p dir="rtl">
	أما في حال تطبيق الخاصية box-shadow على نفس الصورة السابقة، عندها ستكون النتيجة كالتالي:
</p>

<p dir="rtl" style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2015_05/16.png.78eb03447e80611b824abb4cf47ac789.png" data-fileid="2114" rel=""><img alt="16.thumb.png.4b474ad5265a5fc200eae273855" class="ipsImage ipsImage_thumbnailed" data-fileid="2114" src="https://academy.hsoub.com/uploads/monthly_2015_05/16.thumb.png.4b474ad5265a5fc200eae2738551928d.png"></a>
</p>

<p dir="rtl">
	يتم تمرير قيم للتابع <span style="font-family:courier new,courier,monospace;">()drop-shadow</span> بشكل مماثل لطريقة القيم التي تأخذها الخاصية <span style="font-family:courier new,courier,monospace;">box-shadow</span>، في حال لم تكن على معرفة كاملة بأسلوب كتابة القيم الممررة للخاصية السابقة يمكنك قراءة هذه المقالة. <a href="http://tympanus.net/codrops/css_reference/box-shadow" rel="external nofollow" style="line-height: 22.3999996185303px;">http://tympanus.net/codrops/css_reference/box-shadow</a>
</p>

<pre class="css ipsCode prettyprint" data-pbcklang="css" data-pbcktabsize="4">
.png-img {
    filter: drop-shadow(10px 10px 3px rgba(0,0,0,0.3));
}</pre>

<h3 dir="rtl">
	الدالة ()url
</h3>

<p dir="rtl">
	تسمح الدالة url باستخدام فلتر معرّف ضمن مستند SVG وتطبيقه على العنصر المطلوب، أي بالإمكان عدم التقيد بالفلاتر (التوابع) العشرة التي تحدثنا عنها ضمن الفقرات السابقة، إنما يمكن إنشاء فلاتر خاصة ضمن ملف SVG ومن ثم تمرير معرف هذا الفلتر إلى التابع url. مثال:
</p>

<pre class="css ipsCode prettyprint" data-pbcklang="css" data-pbcktabsize="4">
/* filter from an external SVG file */
filter: url(myFilters.xml#effect);
/* or filter defined in the main page */
url(#myFilter);</pre>

<p dir="rtl">
	المثال التالي يوضح كيفية عمل فلتر الضباب ضمن ملف SVG:
</p>

<pre class="html ipsCode prettyprint" data-pbcklang="html" data-pbcktabsize="4">
&lt;svg height="0" xmlns="http://www.w3.org/2000/svg"&gt;
  &lt;filter id="myFilter" x="-5%" y="-5%" width="110%" height="110%"&gt;
    &lt;feGaussianBlur in="SourceGraphic" stdDeviation="8"/&gt;
  &lt;/filter&gt;
&lt;/svg&gt;</pre>

<p dir="rtl">
	إنشاء فلاتر SVG هو مجال واسع بحد ذاته، لذلك لن ندخل في تفاصيله ضمن هذه المقالة.
</p>

<h2 dir="rtl">
	تجربة مثال مباشر
</h2>

<p dir="rtl">
	يمكن مشاهدة <a href="http://codepen.io/SaraSoueidan/pen/7405c808441c8021bb6bc59baef72441" rel="external nofollow">مثال مباشر عن جميع الفلاتر التي تم مناقشتها</a> في هذه الدرس. مع ملاحظة أن الفلاتر المذكورة ماتزال غير مدعومة في بعض متصفحات الويب وقت كتابة هذه المقالة.
</p>

<h2 dir="rtl">
	تطبيق عدة فلاتر
</h2>

<p dir="rtl">
	يمكن تطبيق أكثر من فلتر على الصورة، حيث يتم ذكر الفلاتر المطلوية ومن ثم تطبيقها بحسب الترتيب التي ذُكرت به. مثال:
</p>

<pre class="css ipsCode prettyprint" data-pbcklang="css" data-pbcktabsize="4">
filter: sepia(1) brightness(150%) contrast(0.5);</pre>

<h2 dir="rtl">
	تحريك الفلاتر
</h2>

<p dir="rtl">
	الفكرة تكون من خلال تطبيق أكثر من فلتر واحد على الصورة، ثم تطبيق خاصية الحركة animation على خاصية الفلتر ضمن CSS، مما يؤدي إلى ظهور صورة تتغير الفلاتر المطبقة عليها بأسلوب انسيابي مما <a href="http://codepen.io/lbebber/pen/eBqdr/" rel="external nofollow">يولد أكثر من تأثير عليها وبرونق غاية في الجمال</a>.
</p>

<h2 dir="rtl">
	ترتيب العمليات الرسومية
</h2>

<p dir="rtl">
	يوجد العديد من العمليات والتوابع الرسومية الأخرى التي يمكن تطبيقها على الصورة، مثل قص جزء من الصورة، قلبها، أو تركيب قناع ما عليها، وغير ذلك ...
</p>

<p dir="rtl">
	النقطة التي يجدر الإشارة لها هي أهمية ترتيب هذه التوابع والعمليات بالشكل الصحيح، حيث إن المتصفح سيقوم بتطبيقها وفقً لترتيب ذكرها ضمن CSS، وبالتأكيد فإن تغيير الترتيب سيؤدي إلى تغيير النتيجة النهائية التي ستظهر.
</p>

<h2 dir="rtl">
	التفكير خارج الصندوق (الإلهام)
</h2>

<p dir="rtl">
	قام Dudley Story منذ فترة وجيزة بتطبيق مثال باستخدام نماذج المزج وتوابع القص لإنشاء صورة تعطي <a href="http://demosthenes.info/blog/1014/3D-Glasses-with-CSS-Blend-Modes" rel="external nofollow">تأثير الرؤية بواسطة نظارات الرؤية ثلاثية الأبعاد</a>.
</p>

<p dir="rtl" style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2015_05/17.png.00b236a9e1418ea1336eb97601443820.png" data-fileid="2115" rel=""><img alt="17.thumb.png.86473c0158a28bcc10d45030fad" class="ipsImage ipsImage_thumbnailed" data-fileid="2115" src="https://academy.hsoub.com/uploads/monthly_2015_05/17.thumb.png.86473c0158a28bcc10d45030fadf74a7.png"></a>
</p>

<h2 dir="rtl">
	الخاتمة
</h2>

<p dir="rtl">
	تعتبير نماذج المزج والفلاتر من الخصائص الرائعة التي تقدمها CSS لإنشاء التأثيرات الرسومية، كما يتم تطوير وتحديث هذه الخصائص وتوفير خصائص جديدة ضمن نفس المجال بغية سد الفجوة بين التصاميم المطبوعة وتصاميم صفحات الويب. وبالتالي فإننا نحن معشر مطوري ومصممي الويب تصبح لدينا القدرة للتحكم بشكل أكبر بالتأثيرات الرسومية دون الاستعانة برامج التحرير الرسومي. آمل أن تكون هذه المقالة قد حملت معلومات مفيدة، وشكراً للقراءة.
</p>

<p dir="rtl">
	ترجمة -وبشيءٍ من التصرّف- للمقال <a href="http://blogs.adobe.com/dreamweaver/2015/04/an-introduction-to-graphical-effects-in-css.html" rel="external nofollow">An Introduction To Graphical Effects in CSS</a> لصاحبته: <a href="http://sarasoueidan.com/" rel="external nofollow">سارة سويدان</a>.
</p>
]]></description><guid isPermaLink="false">84</guid><pubDate>Fri, 22 May 2015 17:42:00 +0000</pubDate></item><item><title>&#x627;&#x633;&#x62A;&#x62E;&#x62F;&#x627;&#x645; &#x627;&#x644;&#x645;&#x62D;&#x62F;&#x62F; target: &#x636;&#x645;&#x646; CSS &#x644;&#x625;&#x646;&#x634;&#x627;&#x621; &#x62A;&#x623;&#x62B;&#x64A;&#x631;&#x627;&#x62A; &#x648;&#x627;&#x62C;&#x647;&#x629; &#x627;&#x644;&#x645;&#x633;&#x62A;&#x62E;&#x62F;&#x645; UI &#x628;&#x62F;&#x648;&#x646; Javascript</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%85%D8%AD%D8%AF%D8%AF-target-%D8%B6%D9%85%D9%86-css-%D9%84%D8%A5%D9%86%D8%B4%D8%A7%D8%A1-%D8%AA%D8%A3%D8%AB%D9%8A%D8%B1%D8%A7%D8%AA-%D9%88%D8%A7%D8%AC%D9%87%D8%A9-%D8%A7%D9%84%D9%85%D8%B3%D8%AA%D8%AE%D8%AF%D9%85-ui-%D8%A8%D8%AF%D9%88%D9%86-javascript-r83/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2019_06/5d0a6056a1776_target.jpg.273a31bde9b44e04f2f2b7cf51f16917.jpg" /></p>

<p dir="rtl">
	في بعض الأحيان وعوضاً عن الانتقال إلى صفحة جديدة، فإن الروابط (الوسم <span style="font-family:courier new,courier,monospace;">&lt;a&gt;</span>) تنقلنا إلى فقرة أو عنصر آخر موجود ضمن نفس الصفحة، هذا الأسلوب هو المستخدم للتنقل ضمن مواقع الانترنت ذات الصفحة الواحدة.
</p>

<p dir="rtl">
	يستخدم المحدد <span style="font-family:courier new,courier,monospace;">target:</span> ضمن CSS لتحديد وتنسيق مظهر العنصر أو الفقرة الموجودة ضمن نفس الصفحة والمعرفة عبر الخاصية <span style="font-family:courier new,courier,monospace;">href</span> ضمن رابط ما. حيث يتم تطبيق هذه التنسيقات على الفقرة الهدف عند النقر على ذلك الرابط.
</p>

<p dir="rtl">
	على سبيل المثال، لو كان لدينا رابط يشير إلى فقرة لديها المعرّف "<span style="font-family:courier new,courier,monospace;">further-reading</span>"، أي بشكل مشابه للشِفرة التالية:<br>
	 
</p>

<pre class="html ipsCode prettyprint" data-pbcklang="html" data-pbcktabsize="4">
&lt;a href="#further-reading" title="Further reading resources" /&gt;
&lt;!– ... –&gt;
&lt;section id="further-resources" &gt;
  &lt;!— ... —&gt;
&lt;/section&gt;</pre>

<p dir="rtl">
	في هذه الحالة يمكن استخدام المحدد <span style="font-family:courier new,courier,monospace;">target:</span> لإضاءة الفقرة المحددة عند الضغط على الرابط المعني بها. عموماً فإن تقنية الإضاءة نقصد بها تطبيق خلفية صفراء ومن ثم تلاشي اللون الأصفر تدريجيً إلى لون الخلفية الأساسي.<br>
	 
</p>

<pre class="css ipsCode prettyprint" data-pbcklang="css" data-pbcktabsize="4">
#further-resources:target {
  animation: highlight .8s ease-out;
}

@keyframes highlight {
  0% { background-color: #FFFF66; }
  100% { background-color: #FFFFFF; }
}</pre>

<p dir="rtl">
	نستخدم الخاصية <span style="font-family:courier new,courier,monospace;">animation</span> ضمن CSS لتطبيق تنسيق ما بشكل متدرج، وبالتالي فإننا سنستعمل هذه الخاصية من أجل تطبيق فكرة الإضاءة وبالتالي تغيير لون الخلفية ضمن فترة زمنية كافية لملاحظتها من قبل القارئ.
</p>

<p dir="rtl">
	يمكن مشاهدة <a href="http://codepen.io/SaraSoueidan/pen/ogBWmL?editors=110" rel="external nofollow">هذا المثال</a>، يقوم المثال بتطبيق تنسيق معين على الفقرة المشار إليها عبر الرابط، يمكننا أيضاً تطبيق تأثيرات أخرى مثل زيادة حجم العناصر أو تغيير حالة ظهورها واختفائها والعديد غيره.
</p>

<p dir="rtl">
	مؤخراً قمت باستخدام هذه التقنية على موقعي الخاص، ضمن الترويسة الرئيسية في الصفحة، حيث أضفت رابط لعملية البحث وعند الضغط عليه يتم إظهار عنصر &lt;div&gt; كطبقة تغطي الصفحة بأكملها (تتراكب فوق محتوياتها) ويظهر ضمنها مربع البحث.
</p>

<pre class="html ipsCode prettyprint" data-pbcklang="html" data-pbcktabsize="4">
&lt;a href="#search"&gt;Search&lt;/a&gt;
&lt;!– ... –&gt;
&lt;div id="search"&gt;
  &lt;a href="#" class="overlay-close"&gt;Close&lt;/a&gt;
  &lt;h4&gt;Search articles archive.&lt;/h4&gt;
  &lt;!– ... –&gt;
&lt;/div&gt;</pre>

<p dir="rtl">
	عنصر التراكب &lt;div&gt; (طبقة البحث) بالبداية يكون غير ظاهر وذلك عبر إعطاء خاصية الشفافية opacity القيمة صفر 0، ولكي يبقى هذا العنصر ثابتاً في مكانه نقوم بإعطاء الخاصية position القيمة fixed. كما يجب أن لاتمنع هذه الطبقة المتراكبة عمل باقي المحتويات التي تغطيها ولذلك نعطي الخاصية pointer-events القيمة none.
</p>

<pre class="css ipsCode prettyprint" data-pbcklang="css" data-pbcktabsize="4">
#search-overlay {
  position: fixed;
  top: 1em;
  bottom: 1em;
  right: 1em;
  left: 1em;
  /* ... */
  opacity: 0;
  transition: opacity .3s ease-in-out;
  pointer-events: none;
}</pre>

<p dir="rtl">
	عند الضغط على أيقونة البحث, يتم تطبيق الخصائص الموجودة ضمن المحدد <span style="font-family:courier new,courier,monospace;">target:</span> للعنصر المشار إليه، وفي هذا المثال يتم إضهار طبقة البحث التي تغطي الصفحة وفيها مربع البحث، حيث تكون عملية الظهور بشكل انسيابي تدريجي عبر تطبيق الخاصية <span style="font-family:courier new,courier,monospace;">transition</span> على خاصية الشفافية <span style="font-family:courier new,courier,monospace;">opacity</span>.
</p>

<pre class="css ipsCode prettyprint" data-pbcklang="css" data-pbcktabsize="4">
#search-overlay:target {
  opacity: 1;
  pointer-events: auto;
}</pre>

<p dir="rtl">
	إلى هنا نكون قد انتهينا من نصف المهمة وهي إظهار طبقة البحث، وبقى لدينا تنفيذ آلية إخفاء هذه الطبقة عندما يرغب المستخدم بذلك. وبالتالي يجب أن تحتوي طبقة البحث على رابط إغلاق يعيد إظهار الصفحة كسابق عهدها، يمكن تطبيق هذا عبر إعطاء معرف <span style="font-family:courier new,courier,monospace;">ID</span> إلى الوسم <span style="font-family:courier new,courier,monospace;">body</span> أو <span style="font-family:courier new,courier,monospace;">html</span>، ومن ثم نحدد هذا المعرف كقيمة للخاصية <span style="font-family:courier new,courier,monospace;">href</span> التابعة لرابط إغلاق طبقة البحث. يمكن بأسلوب آخر إعطاء القيمة <span style="font-family:courier new,courier,monospace;">#</span> للخاصية <span style="font-family:courier new,courier,monospace;">href</span> السابقة ولكن هذا الأسلوب يؤدي إلى إضافة الرمز <span style="font-family:courier new,courier,monospace;">#</span> على عنوان الصفحة <span style="font-family:courier new,courier,monospace;">URL</span>.
</p>

<p dir="rtl">
	حالما يتم الضغط على رابط الإغلاق، نقوم بتغيير خصائص طبقة البحث لإخفائها عبر إعطاء الخاصية <span style="font-family:courier new,courier,monospace;">opacity</span> القيمة صفر <span style="font-family:courier new,courier,monospace;">0</span>. وهنا أيضاً يمكن تطبيق الخاصية <span style="font-family:courier new,courier,monospace;">transition</span> على الخاصية <span style="font-family:courier new,courier,monospace;">opacity</span> وذلك لجعل طبقة البحث تختفي بشكل تدريجي.
</p>

<pre class="css ipsCode prettyprint" data-pbcklang="css" data-pbcktabsize="4">
#search-overlay:target {
  opacity: 1;
  pointer-events: auto;
  transition: opacity .3s ease-in-out;
}</pre>

<p dir="rtl">
	يمكن تجربة <a href="http://codepen.io/SaraSoueidan/pen/d7f8907168d30003e3dc03dd87dcec2f?editors=110" rel="external nofollow">هذا المثال</a>، عموماً يمكن الاستفادة من تأثير الخاصية <span style="font-family:courier new,courier,monospace;">animation</span> على باقي الخصائص لتطبيقها بشكل متدرج، حيث نستطيع استخدامها لتغير حجم العنصر أثناء انبثاقه للحصول على تأثير الصندوق المنبثق، حيث يظهر في منتصف الصفحة بشكل واضح ومميز مع جعل باقي الصفحة تبدو بألوان باهتة. وبالتالي يمكن تطوير هذا الأمر أكثر للحصول على معرض صور كامل بأسلوب الصندوق المنبثق كما يظهر في <a href="http://tympanus.net/codrops/2011/12/26/css3-lightbox/" rel="external nofollow">هذا المثال</a> (المثال من عمل Manoela Ilic).
</p>

<p dir="rtl">
	مقالة أخرى تتحدث عن <a href="http://hacks.mozilla.org/2012/02/a-simple-image-gallery-using-only-css-and-the-target-selector/" rel="external nofollow">كيفية عمل معرض صور بأسلوب الصندوق المنبثق</a> وباستخدام المحدد <span style="font-family:courier new,courier,monospace;">target:</span> من تأليف Christian Heilmann، كما يوجد <a href="http://benschwarz.github.io/gallery-css/" rel="external nofollow">معارض صور أخرى مطبقة أيضا بواسطة CSS</a> عبر المحدد <span style="font-family:courier new,courier,monospace;">target:</span>.
</p>

<p dir="rtl">
	إلى هنا نأتي إلى نهاية هذه المقالة، أرجو أن تكون قد اتضحت الصورة حول استخدام المحدد <span style="font-family:courier new,courier,monospace;">selector:</span> مع بعض أشهر التطبيقات التي يتم استخدامه من أجلها.
</p>

<p dir="rtl">
	ترجمة -وبتصرّف- للمقال: <a href="http://blogs.adobe.com/dreamweaver/2015/01/using-the-css-target-selector-to-create-javascript-less-ui-effects.html" rel="external nofollow">Using The CSS :target Selector To Create JavaScript-less UI Effects</a> لصاحبته: <a href="http://sarasoueidan.com/" rel="external nofollow">سارة سويدان</a>.
</p>

<p><a href="https://academy.hsoub.com/uploads/monthly_2015_05/currentColor-components-compressor.gif.810872955862e7d70b06a447e90152cc.gif" class="ipsAttachLink ipsAttachLink_image"><img data-fileid="2089" src="https://academy.hsoub.com/uploads/monthly_2015_05/currentColor-components-compressor.thumb.gif.7de63bd5a7ceec5fc6797010996e3f31.gif" class="ipsImage ipsImage_thumbnailed" alt="currentColor-components-compressor.gif"></a></p>
<p><a href="https://academy.hsoub.com/uploads/monthly_2015_05/color-inheritacne.png.eda7c8ac72b783f27577016ff6b5d852.png" class="ipsAttachLink ipsAttachLink_image"><img data-fileid="2090" src="https://academy.hsoub.com/uploads/monthly_2015_05/color-inheritacne.thumb.png.bf14cb1d7fa7e0de5c2a39f1600fb143.png" class="ipsImage ipsImage_thumbnailed" alt="color-inheritacne.png"></a></p>]]></description><guid isPermaLink="false">83</guid><pubDate>Thu, 21 May 2015 16:13:00 +0000</pubDate></item><item><title>&#x62A;&#x648;&#x633;&#x64A;&#x639; &#x62A;&#x639;&#x627;&#x642;&#x628; &#x627;&#x644;&#x642;&#x64A;&#x645;&#x629; &#x627;&#x644;&#x644;&#x648;&#x646;&#x64A;&#x651;&#x629; &#x628;&#x627;&#x633;&#x62A;&#x62E;&#x62F;&#x627;&#x645;  currentColor &#x641;&#x64A; CSS</title><link>https://academy.hsoub.com/programming/css/%D8%AA%D9%88%D8%B3%D9%8A%D8%B9-%D8%AA%D8%B9%D8%A7%D9%82%D8%A8-%D8%A7%D9%84%D9%82%D9%8A%D9%85%D8%A9-%D8%A7%D9%84%D9%84%D9%88%D9%86%D9%8A%D9%91%D8%A9-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-currentcolor-%D9%81%D9%8A-css-r82/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2015_05/css-current-color.png.39b8743dac681fcf2e16788924e10581.png" /></p>

<div id="wmd-preview-section-4">
	<p>
		إنّ أي مطوّرٍ يَستخدم تقنيات Sass أو LESS، يعلم تمامًا ما هي المُتغيّرات (variables) وكيفيّة استخدامها في صفحات التنسيق CSS، ويَعلم أيضًا فائدتها وما يُمكن أنّ تُقدّم له، في المُقابل، ولمن لا يَستخدِم المُعالج المُسبق (preprocessor)، رُبّما يَسأل: لماذا كل هذه الجلبة حولها، ولماذا يتحدّث الجميع عنها، وفائدتها؟، وعليه سيتناول هذا المقال فائدة المُتغيّرات، والمُتغيّر currentColor بشكل خاصّ. 
	</p>
</div>

<div id="wmd-preview-section-5">
	<h2 id="ما-هي-فائدة-المتغيرات-في-css">
		ما فائدة المُتغيّرات في CSS؟
	</h2>

	<p>
		تأتي أهميّة المُتغيّرات في CSS في سماحها للمطوّر بكتابة شيفرة (كود) نظيفة، ومُرتّبة وغير مُكرّرة، وذلك عبر تكريس مبدأ “لا تُكرّر نفسك” (Don’t Repeat Yourself)، والمعروف بالاختصار DRY، وتتجلّى أهميتها في إدارة وصيانة المشاريع الكبيرة، والّتي تحتوي على قيم مُكرّرة هنا وهناك.
	</p>

	<p>
		يُشاع استخدام المُتغيّرات مع سمات الألوان (color themes) والّتي تجعل من إنشاء وإدارة توزّع الألوان في كامل مُستند CSS أسهل وأكثر مرونةً من أي وقتٍ مضى، فعلى سبيل المثال، يتطلّب توزيع الألوان عادةً إلى إعادة استخدام بعض قيم الألوان لخواصٍّ عدّة ومُختلفة في أرجاء ملفّ CSS، وعند الرغبة في تغيير اللّون الرئيسيّ للموقع، فسيُغيّر المُطوّر أو المُصمّم مضطرًا جميع القيم في صفحة التنسيق، ولكن مع استخدام مُتغيّرات CSS، يتمّ تعريف مُتغيّر ولمرّة واحدة، وليكن المُتغيّر يحمل الاسم “primary-color” مثلًا، وإسناد قيمة لونيّة له، ومن ثُمّ استخدام قيمة المُتغيّر في أي مكان في صفحة التنسيق، وعندما يُتطلّب تغيير هذا اللّون في وقتٍ لاحقٍ، فكل ما على المُطوّر فعله هو إسناد القيمة اللونيّة الجديدة إلى المُتغيّر، وعليه ستُحدّث قيمة المُتغيّر في جميع أرجاء صفحة التنسيق أوتوماتيكيًّا.
	</p>

	<p>
		لم تطرح CSS 2.1 مفهوم المُتغيّرات، (على الرغم من أنّ ذلك ليس دقيقًا تمامًا)، ولكن في عام 2014، قُدّم مفهوم <a href="http://dev.w3.org/csswg/css-variables/" rel="external nofollow">المُتغيّرات</a> في بيانات CSS، وبشكل مُشابه للمُتغيّرات المُقدّمة من المُعالجات المُسبقة (preprocessor)، وعلى ما يبدو أنّها <a href="http://www.sitepoint.com/css-variables-can-preprocessors-cant/" rel="external nofollow">تملك إمكانيات أكبر</a> مما تقدّمه مُتغيّرات المُعالجات المُسبقة المعروفة، حيثُ يُقبَل مُتغيّر CSS كقيمة من قبل جميع خاصيّات CSS.
	</p>

	<p>
		كما قدّمت CSS بالإضافة إلى المُتغيّرات قيمة مفتاحيّة، والّتي تُعتبر عمليًا أيضًا مُتغيّر وهي:currentColor.
	</p>
</div>

<div id="wmd-preview-section-6">
	<h2 id="المتغيرالكلمة-المفتاحية-currentcolor">
		المُتغيّر/الكلمة المفتاحيّة currentColor
	</h2>

	<p>
		تُشبه الكلمة المفتاحيّة currentColor مُتغيّر CSS، ماعدا أنّها تَملك تقييدًا مُهمًّا، فهي تُستخدم فقط كبديل للمُعطى/المُعامل &lt;color&gt;، فإن كانت الخاصيّة لا تقبل قيمة هذا المُعامل، فهي لن تَقبلcurrentColor قيمة لها.
	</p>

	<p>
		أمثلة على خواصّ تقبل استخدم currentColor كقيمة:
	</p>

	<pre class="css ipsCode prettyprint prettyprinted" data-pbcklang="css" data-pbcktabsize="" style="">
<span class="pln">box</span><span class="pun">-</span><span class="pln">shadow</span><span class="pun">:</span><span class="pln"> inset </span><span class="lit">2px</span><span class="pln"> </span><span class="lit">2px</span><span class="pln"> </span><span class="lit">3px</span><span class="pln"> currentColor</span><span class="pun">;</span><span class="pln">
background</span><span class="pun">-</span><span class="pln">color</span><span class="pun">:</span><span class="pln"> currentColor</span><span class="pun">;</span><span class="pln"> 
background</span><span class="pun">-</span><span class="pln">image</span><span class="pun">:</span><span class="pln"> linear</span><span class="pun">-</span><span class="pln">gradient</span><span class="pun">(</span><span class="pln">currentColor</span><span class="pun">,</span><span class="pln"> transparent</span><span class="pun">);</span></pre>

	<p>
		إن الاختلاف الآخر بين المُتغيّر currentColor وبين المُتغيّرات المعروفة، يَكمن في عدم المقدرة على إسناد قيمةٍ له بنفس طريقة إسناد القيم للمُتغيّرات كما جرت العادة، فإن قيمة currentColor يتمّ تحديدها بالقيمة المحسوبة لخاصيّة اللّون الّتي حاليًا تُستخدم/تُطبّق على العنصر، وهذا يعني أنّ قيمة currentColor تساوي قيمة خاصيّة اللّون الحاليّ، ومن هنا جاء الاسم currentColor (اللّون الحاليّ).
	</p>

	<p>
		يُظهر المثال السابق كيف تُعيّن/تَضبط الكلمة المفتاحيّة currentColor لون ظل الصندوق (box shadow) إلى أيّما كانت قيمة اللّون المعيّنة للعنصر div، وفي حال عدم ضبط أي لون له (الوسم div)، فسيتمّ استخدام اللّون المَوروث من أسلاف الـ div، وعند عدم امتلاك أيًا من هذه الأسلاف قيمة لونيّة، فإن مُعظم المُتصفّات ستُعين اللّون الأسود كقيمة بديلة.
	</p>

	<p>
		بعبارةٍ أُخرى، إن الكلمة المفتاحيّة تُستخدم لجعل خواصّ عنصر، أو العناصر الأبناء لعنصر، تَرث اللّون المُعيّن من قِبل المُعطى &lt;color&gt;، ولذلك فإنّها تتصرّف كما تفعل القيمة inherit في السّماح بوراثة قيمة اللّون والّتي ما كان له أنّ يُورّث إلى العنصر الابن بدونها.
	</p>

	<p>
		يعني هذا أيضًا أن الخاصيّات الّتي تَرث بالأصل قيمة color، لن تكون الكلمة المفتاحيّة currentColor بتلك الفائدة بالنسبة لها.
	</p>
</div>

<div id="wmd-preview-section-7">
	<h2 id="الخاصيات-والعناصر-التي-ترث-قيمة-color-بشكل-افتراضي">
		الخاصّيّات والعناصر الّتي ترِث قيمة color بشكل افتراضي
	</h2>

	<p>
		عندما يَملك عنصر قيمة لونيّة، سواءً كانت مُعيّنةً بشكل صريح أو وراثةً، فإن بعض العناصر الأماميّة (foreground) –وهي <a href="http://www.boogiejack.com/background_color.html" rel="external nofollow">عكس خلفيّة</a> (background) ويُقصد بها لون النصّ الظاهر للعيان- لهذا العنصر والّتي تقبل القيمة &lt;color&gt; ستَرث قيمة اللون بشكل افتراضيّ.
	</p>

	<p>
		فعلى سبيل المثال، إن حدود (borders) عنصر هي جزء من أماميّة (foreground) هذا العنصر، ولذلك حتّى مع عدم تحديد لون للحدود، فإنها ستأخذ نفس القيمة اللونيّة للخاصيّة color، وإن لم يَملك العنصر إي لونٍ فإن مُعظم المُتصفّحات عادةً ما ستستخدم اللون الأسود.
	</p>

	<p>
		ستكون لون الحدود زرقاء في المثال التّالي:
	</p>

	<pre class="css ipsCode prettyprint prettyprinted" data-pbcklang="css" data-pbcktabsize="" style="">
<span class="pun">.</span><span class="pln">parent </span><span class="pun">{</span><span class="pln">
    color</span><span class="pun">:</span><span class="pln"> blue</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

</span><span class="pun">.</span><span class="pln">child </span><span class="pun">{</span><span class="pln">
    border</span><span class="pun">:</span><span class="pln"> </span><span class="lit">5px</span><span class="pln"> solid</span><span class="pun">;</span><span class="pln"> </span><span class="com">/* لم يتمّ تعيين قيمة لونيّة للحدود */</span><span class="pln">
</span><span class="pun">}</span></pre>

	<p>
		العناصر الّتي تَرث قيمة color هي:
	</p>

	<ul>
<li>
			نصيّة العنصر، والّتي تُعنى بها خاصيّة color.
		</li>
		<li>
			إطار النصّ (<a href="https://developer.mozilla.org/en-US/docs/Web/CSS/outline" rel="external nofollow">text outline</a>).
		</li>
		<li>
			حدود العنصر (element border)
		</li>
		<li>
			ظل الصندوق (box shadow)
		</li>
		<li>
			نصّ الصورة البديل (alt)، وهو النصّ الّذي يُعرض عند عدم عرض الصورة لسببٍ ما.
		</li>
		<li>
			علامات التنقيط/الكرات الصغيرة الخاصّة بالقائمة (list item bullet) وحدودها (borders).
		</li>
		<li>
			حدود المسطرة الأفقيّة (hr) في بعض المُتصفّحات، مثل المُتصفّح كروم، ومع الانتباه أنّه لن يتأثّر لون المسطرة عند عدم وجود حدود.
		</li>
	</ul>
<p>
		عدم إسناد قيمة لونيّة لهذه العناصر (السابقة) بشكل صريح، سيجعلها يرثون قيمة color المحسوبة.
	</p>

	<p>
		يظهر المثال التّالي عمليًّا كيف تتأثر العناصر السابقة باللّون المُسند لجذع الصفحة (body)، وعليه فإن تغيير لون جذع الصفحة سيُغيّر من لون هذه العناصر جميعًا:
	</p>

	<pre class="css ipsCode prettyprint prettyprinted" data-pbcklang="css" data-pbcktabsize="" style="">
<span class="pln">body </span><span class="pun">{</span><span class="pln">
    color</span><span class="pun">:</span><span class="pln"> rgb</span><span class="pun">(</span><span class="lit">255</span><span class="pun">,</span><span class="pln"> </span><span class="lit">20</span><span class="pun">,</span><span class="pln"> </span><span class="lit">20</span><span class="pun">);</span><span class="pln">
    background</span><span class="pun">-</span><span class="pln">color</span><span class="pun">:</span><span class="pln"> white</span><span class="pun">;</span><span class="pln">
    height</span><span class="pun">:</span><span class="pln"> </span><span class="lit">100vh</span><span class="pun">;</span><span class="pln">
    padding</span><span class="pun">:</span><span class="pln"> </span><span class="lit">2em</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

hr </span><span class="pun">{</span><span class="pln">
    border</span><span class="pun">:</span><span class="pln"> </span><span class="lit">3px</span><span class="pln"> solid</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

div </span><span class="pun">{</span><span class="pln">
    padding</span><span class="pun">:</span><span class="pln"> </span><span class="lit">1em</span><span class="pun">;</span><span class="pln">
    width</span><span class="pun">:</span><span class="pln"> </span><span class="lit">200px</span><span class="pun">;</span><span class="pln">
    height</span><span class="pun">:</span><span class="pln"> </span><span class="lit">150px</span><span class="pun">;</span><span class="pln">
    border</span><span class="pun">:</span><span class="pln"> </span><span class="lit">5px</span><span class="pln"> solid</span><span class="pun">;</span><span class="pln">  
    box</span><span class="pun">-</span><span class="pln">shadow</span><span class="pun">:</span><span class="pln"> </span><span class="lit">5px</span><span class="pln"> </span><span class="lit">5px</span><span class="pln"> </span><span class="lit">5px</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

p </span><span class="pun">{</span><span class="pln">
    background</span><span class="pun">-</span><span class="pln">color</span><span class="pun">:</span><span class="pln"> currentColor</span><span class="pun">;</span><span class="pln">
    padding</span><span class="pun">:</span><span class="pln"> </span><span class="pun">.</span><span class="lit">5em</span><span class="pun">;</span><span class="pln">
    width</span><span class="pun">:</span><span class="pln"> </span><span class="lit">80</span><span class="pun">%;</span><span class="pln">
    margin</span><span class="pun">:</span><span class="pln"> </span><span class="lit">1em</span><span class="pln"> </span><span class="kwd">auto</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

li </span><span class="pun">{</span><span class="pln">
    border</span><span class="pun">:</span><span class="pln"> </span><span class="lit">1px</span><span class="pln"> solid
</span><span class="pun">}</span><span class="pln">

strong </span><span class="pun">{</span><span class="pln">
    outline</span><span class="pun">:</span><span class="pln"> </span><span class="lit">2px</span><span class="pln"> solid</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></pre>

	<p style="text-align: center;">
		<a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2015_05/color-inheritacne.png.eda7c8ac72b783f27577016ff6b5d852.png" rel="" data-fileid="2090"><img alt="color-inheritacne.thumb.png.bf14cb1d7fa7" class="ipsImage ipsImage_thumbnailed" data-fileid="2090" src="https://academy.hsoub.com/uploads/monthly_2015_05/color-inheritacne.thumb.png.bf14cb1d7fa7e0de5c2a39f1600fb143.png"></a>
	</p>

	<p>
		السؤال الّذي قد يُسأل الآن، إنّ كانت أغلب العناصر أو الخاصّيّات ترث قيمة color، إذًا ما فائدة currentColor؟
	</p>
</div>

<div id="wmd-preview-section-8">
	<h2 id="توسيع-وراثة-اللون-باستخدام-currentcolor">
		توسيع وراثة اللّون باستخدام currentColor
	</h2>

	<p>
		يوجد بعض الحالات الّتي يكون فيها جلب قيمة color واستخدامها أمرًا مُفيدًا للغاية، يتبيّن ذلك في استخدام currentColor مع الحالات الّتي لا تُطبق الوراثة، وهي <a href="https://css-tricks.com/css3-gradients/" rel="external nofollow">التدرجات اللّونيّة</a> (gradients)، فصور التدرجات في CSS، إن كانت التدرّجات الخطيّة أو التدرّجات النصف قطريّة، لا ترث قيم الألوان، ولكن باستخدام currentColor يُصبح بالإمكان استخدام التدرّج الخطّي كصورة خلفيّة:
	</p>

	<pre class="css ipsCode prettyprint prettyprinted" data-pbcklang="css" data-pbcktabsize="" style="">
<span class="pln">background</span><span class="pun">-</span><span class="pln">image</span><span class="pun">:</span><span class="pln"> linear</span><span class="pun">-</span><span class="pln">gradient</span><span class="pun">(</span><span class="pln">to bottom</span><span class="pun">,</span><span class="pln"> currentColor</span><span class="pun">,</span><span class="pln"> </span><span class="com">#fff);</span></pre>

	<p>
		تمّ أخذ هذا المبدأ إلى أبعد من ذلك، حيثُ تمّ عمل شيء يُشبه التحريك (animation) لخاصيّة color، فعندما تتغيّر قيمة الخاصيّة color، فإن جميع العناصر ستتأثّر وتُغيّر من لونها:
	</p>

	<p>
		مثال حيّ: <a href="http://codepen.io/scottkellum/pen/Fhxql" rel="external nofollow">http://codepen.io/scottkellum/pen/Fhxql</a>
	</p>

	<p>
		يُظهر المثال السابق بحق قوة هذه الميّزة الّتي تُقدّمها CSS، وخاصّةً في جزئيّة التحريك.
	</p>

	<p>
		ظهر مؤخرًا المزيد من الأمثلة التطبيقيّة لهذه الميّزة، وهو ما سيتمّ التركيز عليه في بقيّة المقال.
	</p>
</div>

<div id="wmd-preview-section-9">
	<h2 id="استخدامات-currentcolor-العملية">
		استخدامات currentColor العمليّة
	</h2>

	<p>
		تَكمن الفكرة الرّئيسيّة خلف currentColor في توسيع تسلسل أو تعاقب اللّون، وهو أمرٌ يستفاد منه في العديد من الحالات.
	</p>
</div>

<div id="wmd-preview-section-10">
	<h3 id="استخدام-currentcolor-في-قولبة-عناصر-واجهة-المستخدم-ui">
		استخدام currentColor في قَوْلَبة عناصر واجهة المُستخدِم (UI)
	</h3>

	<p>
		يُمكن استخدام currentColor في حالات تطبيقيّة عديدة، فعلى سبيل المثال يُمكن استخدامcurrentColor مع عناصر واجهة المُستخدِم لتنسيق صفحة ويب كاملة (أو تطبيق ويب كامل) مُباشرةً باستخدام المُتصفّح.
	</p>

	<p>
		يُظهر المثال التّالي عمليًا، وباستخدام أدوات المطوّرين (devtools) الخاصّة بالمُتصفّح ومنها من منتقي الألوان، كيف أنّ تغيير قيمة خاصيّة color، سيُغيّر من ألوان جميع عناصر واجهة المُستخدِم وذلك باستخدام المُتغيّر currentColor.
	</p>

	<p style="text-align: center;">
		<a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2015_05/currentColor-components-compressor.gif.810872955862e7d70b06a447e90152cc.gif" rel="" data-fileid="2089"><img alt="currentColor-components-compressor.thumb" class="ipsImage ipsImage_thumbnailed" data-fileid="2089" src="https://academy.hsoub.com/uploads/monthly_2015_05/currentColor-components-compressor.thumb.gif.7de63bd5a7ceec5fc6797010996e3f31.gif"></a>
	</p>
</div>

<div id="wmd-preview-section-11">
	<h3 id="استخدام-currentcolor-في-قولبة-وتنسيق-svg">
		استخدام currentColor في قَوْلَبة وتنسيق SVG
	</h3>

	<p>
		إنّ الرسوم المُتجهة القابلة للتوسّع (Scalable Vector Graphics) رائعة بلا شك، ولكنّها مع ذلك تأتي مع بعض القصور، عند استخدامها بطرقٍ مُعيّنة، مثلًا عند إعادة استخدام أجزاء من SVG باستخدام العنصر &lt;use&gt;.
	</p>

	<p>
		يُستفاد من العنصر &lt;use&gt; في إعادة استخدام أجزاء من SVG في أي مكان يُرغب في أنّ تظهر به هذه الأجزاء على الصفحة، ما يتمّ عمليًا عند استخدام عنصر SVG هو إنشاء نسخة حيّة من ذلك العنصر، فالأمر مُشابه لفكرة نسخ ولصق العناصر في أي مُحرّر رسومي، ما عدا أنّ هذه النسخة هي نسخة حيّة، أي أنّ خصائصها ستتغيّر عند تَغيّر النسخة الأصل.
	</p>

	<p>
		يُستخدَم العنصر &lt;use&gt; بشكل كبير عند إنشاء SVG <a href="https://css-tricks.com/css-sprites/" rel="external nofollow">sprites</a>، فيُمكن استخدام SVG يحتوي على جميع الرموز الصوريّة (الأيقونات) والّتي ستستخدم كـ sprite، ومن ثُمّ إدراج الأيقونات على حدى من ذلك الـ sprite وفي أي مكان على الصفحة، باستخدام &lt;use&gt;، ويُمكن الاستزادة حول هذا الموضوع عبر قراءة: <a href="http://24ways.org/2014/an-overview-of-svg-sprite-creation-techniques/" rel="external nofollow">طريقة إنشاء الـ sprites</a>.
	</p>

	<p>
		عند استخدام العنصر، فإن نسخة من محتواه ستُنسخ إلى <a href="http://www.html5rocks.com/en/tutorials/webcomponents/shadowdom/" rel="external nofollow">shadow DOM</a>، وهذا يعني أنّ هذا المُحتوى لا يُمكن اختياره وتنسيقه باستخدام CSS كما يتمّ عادةً عبر اختيار و تنسيق عناصر SVG، أو حتّى عناصر <a href="https://wiki.hsoub.com/HTML" rel="external">HTML </a>متمثلةً بالـ DOM الاعتيادي، هذا أحد الأسباب الّتي تجعل من تنسيق أيقونات SVG المُنشئة بهذه الطريقة ذو إمكانيات وقدرات محدودة.
	</p>

	<p>
		إن استخدام currentColor يَسمح بتخطّي هذه المحدوديّة، عن طريق السماح للّون المُعيّن في CSS بالتسرّب إلى محتويات SVG المُستعمل، وذلك بضبط currentColor كقيمة للخواصّ المُراد من قيمة اللّون أنّ تتسرّب إليها:
	</p>

	<pre class="html ipsCode prettyprint prettyprinted" data-pbcklang="html" data-pbcktabsize="" style="">
<span class="tag">&lt;svg</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"home-icon"</span><span class="tag">&gt;</span><span class="pln">
    </span><span class="tag">&lt;use</span><span class="pln"> </span><span class="atn">xlink:href</span><span class="pun">=</span><span class="atv">"#home"</span><span class="tag">&gt;&lt;/use&gt;</span><span class="pln">
</span><span class="tag">&lt;/svg&gt;</span><span class="pln">
وعلى فرض أنّ الأيقونة #home مُعرّفة كما في التّالي:

</span><span class="tag">&lt;symbol</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"home"</span><span class="tag">&gt;</span><span class="pln">
    </span><span class="tag">&lt;rect</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"bottom"</span><span class="pln"> </span><span class="atn">fill</span><span class="pun">=</span><span class="atv">"currentColor"</span><span class="pln"> ... </span><span class="tag">/&gt;</span><span class="pln">
    </span><span class="tag">&lt;polygon</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"roof"</span><span class="pln"> ... </span><span class="tag">/&gt;</span><span class="pln">
</span><span class="tag">&lt;/symbol&gt;</span></pre>

	<p>
		أصبح من المُمكن الآن تطبيق التنسيقات على الأيقونة وجعل اللون fill يتعاقب نزولًا إلى #roof(والذي لا يَملك الخصلة fill) وتوريث قيمة color إلى #bottom:
	</p>

	<pre class="css ipsCode prettyprint prettyprinted" data-pbcklang="css" data-pbcktabsize="" style="">
<span class="pun">.</span><span class="pln">home</span><span class="pun">-</span><span class="pln">icon </span><span class="pun">{</span><span class="pln">
    fill</span><span class="pun">:</span><span class="pln"> red</span><span class="pun">;</span><span class="pln">
    color</span><span class="pun">:</span><span class="pln"> white</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></pre>

	<p>
		سيتعاقب اللّون المملوء نزولًا من &lt;svg&gt; إلى &lt;use&gt;، وبعد ذلك إلى #roof، وستُستخدم قيمةcolor كقيمة لـ #bottom، وذلك فقط بسبب استخدام currentColor.
	</p>

	<p>
		يُستفاد من هذا الأسلوب عند الحاجة إلى إنشاء أيقونات عديدة، كلٍ منها ذو لونٍ مُختلف، فكل ما يجب عمله في هذه الحالة هو تغيير قيمة color و fill في ملفّ CSS، وهو ما يَستعرضه المثال الحيّ التّالي:
	</p>

	<p>
		<strong>مثال حيّ</strong>: <a href="http://codepen.io/FWeinb/pen/rGBsC" rel="external nofollow">http://codepen.io/FWeinb/pen/rGBsC</a>
	</p>

	<p>
		يُمكن استخدام currentColor على عناصر عدّة داخل SVG، ولكن هذا يَسمح فقط بتغيير لونين داخل SVG.
	</p>

	<p>
		وإن كانت الرغبة هي الحصول على تحكم أكبر على الألوان وتعيين المزيد من قيم الألوان لتتسرّب إلىSVG، فعندها يجب توفّر المزيد من المتغيّرات، وهنا بالضَّبط تأتي قيمة متغيّرات CSS المقدّمة في البيان (specification) الخاصّ بها، يُمكن القراءة أكثر عن هذا الأمر من خلال موضوع بعنوان: <a href="http://codepen.io/AmeliaBR/thoughts/customizable-svg-icons-css-variables" rel="external nofollow">تخصيص أيقونات SVG باستخدام متغيّرات CSS</a>
	</p>
</div>

<div id="wmd-preview-section-12">
	<h2 id="الختام">
		الخاتمة
	</h2>

	<p>
		تمّ التوضيح في المثال السابق كيفيّة استخدام currentColor في أماكن عدّة، ومن ثمّ تغيير الألوان المُراد تغييرها في مكان واحد فقط، ليُطبّق هذا التعديل على هذه الأماكن المُختلفة، بدلًا من إنشاء عدّة حالات من نفس اللّون ومن ثُمّ تغييرها جميعها عند الحاجة، وهذا من شأنه أنّ يُساعد المطوّر على كتابة ملفّ تنسيق CSS قصير ونظيف، وتقديم نوعًا من الآليّة في الإعداد، خاصّةً في حالات مثل عناصر ومكوّنات واجهة المُستخدِم UI.
	</p>

	<p>
		يَمتلك المطوّر أو المُصمم مع مُتغيّرات CSS القدرة على تعريف مجموعة من المُتغيّرات واستخدامها في حالات عديدة ومُختلفة، طالما أنّ المُتغيّرات الجديدة ستكون قيم صالحة مع أي خاصيّة من خواصّ CSS، وليس فقط تلك الّتي تقبل قيم المُعطى/المُعامل &lt;color&gt;، فالتعامل مع أيقونات SVG بالتأكيد سيُصبح أسهل، وكذلك الأمر مع صون المشاريع الكبيرة في إعدادها الأولي، وعند تنقيحها.
	</p>

	<p>
		ترجمة –وبتصرّف- للمقال <a href="http://blogs.adobe.com/dreamweaver/2015/02/extending-the-color-cascade-with-the-css-currentcolor-variable.html" rel="external nofollow">Extending the Color Cascade with the CSS currentColor Variable</a> لصاحبته <a href="http://twitter.com/SaraSoueidan" rel="external nofollow">سارة سويدان</a>
	</p>
</div>
]]></description><guid isPermaLink="false">82</guid><pubDate>Wed, 20 May 2015 18:23:00 +0000</pubDate></item><item><title>&#x645;&#x62F;&#x62E;&#x644; &#x625;&#x644;&#x649; &#x62A;&#x64E;&#x645;&#x648;&#x636;&#x64F;&#x639; &#x627;&#x644;&#x62E;&#x644;&#x641;&#x64A;&#x651;&#x629; Background Positioning &#x641;&#x64A; CSS</title><link>https://academy.hsoub.com/programming/css/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D8%AA%D9%8E%D9%85%D9%88%D8%B6%D9%8F%D8%B9-%D8%A7%D9%84%D8%AE%D9%84%D9%81%D9%8A%D9%91%D8%A9-background-positioning-%D9%81%D9%8A-css-r81/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2019_06/5d0a61ee767db_.jpg.3803d83d21469e589a6448a1cfb947f6.jpg" /></p>

<p id="مقدمة-في-تموضع-الخلفية-في-أوراق-الأنماط-المتتالية-background-positioning-in-css">
	<span style="font-size: 14px; line-height: 1.6;">تطبيق </span><strong style="font-size: 14px; line-height: 1.6;">صور الخلفيّة</strong><span style="font-size: 14px; line-height: 1.6;"> (background images) على العناصر هو أحد أكثر الميزات المُستخدمة في </span><strong style="font-size: 14px; line-height: 1.6;">CSS</strong><span style="font-size: 14px; line-height: 1.6;">، ولذلك يوجد العديد من الخصائص الّتي تَسمح بالتّحكم بخلفيّة العنصر وعلى أكثر من ناحية.</span>
</p>

<p>
	يُمكن أنّ يَملك العنصر أكثر من <strong>صورة خلفيّة</strong> واحدة، فيُمكن إسناد قيم الصّور كقائمة يُفصل فيما بينها الفاصلة، وذلك للخاصيّة <code>background-image</code>، أما الخاصّيّة <span style="font-family:courier new,courier,monospace;">background-position</span> فتُستخدم لتحديد مَوضع <strong>صورة الخلفيّة</strong>، وتَستحق هذه الأخيرة بعض التفحّص، وذلك بسبب أنّ قيمها المُحتملة تُنتج نتائج مُختلفة غير متوقّعة للمطوّر الّذي لم يتعمّق في تفاصيل <strong>CSS</strong>.
</p>

<p>
	سيتمّ استخدام <strong>صورة خلفيّة</strong> وحيدة طوال هذا المقال، بغرض تبسيط الشرح والشيفرة البرمجيّة، ولكن ما يَنطبق على صورة واحدة، يَنطبق على صور مُتعدّدة.
</p>

<p>
	تتمَوضع <strong>صورة خلفيّة</strong> داخل ما يُسمّى <strong>مجال تَمَوْضُع الخلفيّة</strong> (background positioning area) لعنصر، وهي كما يَدل اسمها، تُحدّد المنطقة الداخليّة الّتي ستتموضع بها الخلفيّة، وهي تملك نظام إحداثي يُستخدم لمُعالجة التَمَوْضُع.
</p>

<p>
	سيتمّ أوّلًا التطرّق إلى مفهوم نموذج الصندوق (CSS box model)، ورؤية تأثيره على تَمَوْضُع <strong>صور الخلفيّة</strong> داخل العنصر، وذلك قبل الدخول في مفهوم التَمَوْضُع.
</p>

<h2 id="مجالات-نموذج-الصندوق-css-box-model-areas">
	مجالات نموذج الصندوق (CSS Box Model Areas)
</h2>

<p>
	تَملك العناصر في <strong>CSS</strong> ثلاثة مجالات، يُطلق عليها صناديق، مُعرّفة على العنصر:
</p>

<ul>
<li>
		صندوق الحدود (border box)
	</li>
	<li>
		صندوق الحشو/الحشوة (padding box)
	</li>
	<li>
		صندوق المُحتوى (content box)
	</li>
</ul>
<p>
	صندوق الحدود هو المنطقة من العنصر الّتي تتضمّن كامل الأجزاء الداخليّة للعنصر بالإضافة إلى المنطقة أسفل تلك الحدود.
</p>

<p>
	أما صندوق الحشوة فهو المنطقة من العنصر، والّتي <strong>لا تتضمّن</strong> الحدود (borders)، و<strong>تتضمّن</strong> محتويات العنصر والحشوة المُحيطة، وتحدّد قيمة هذه الحشوة باستخدام الخاصيّة <code>padding</code>.
</p>

<p>
	صندوق المُحتوى هي المنطقة التي أنشأها محتوى العنصر، ولا تتضمّن الحشوة ولا الحدود.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2015_05/box-areas.png.db25b537c5051741b7d3899f67f5f8b2.png" rel="" data-fileid="2056"><img alt="box-areas.thumb.png.08424ec3be3acd7f7abe" class="ipsImage ipsImage_thumbnailed" data-fileid="2056" src="https://academy.hsoub.com/uploads/monthly_2015_05/box-areas.thumb.png.08424ec3be3acd7f7abe637500bdf5c2.png"></a>
</p>

<p>
	يوجد أيضًا مجال رابع يُدعى صندوق الهامش (margin box)، والّذي يتضمّن العنصر والهامش الخارجي، وتحدّد قيمة هذا الهامش بالخاصيّة <code>margin</code>.
</p>

<p>
	إضافة خلفيّة إلى عنصر، سواء كانت صورة أو لون مُصمت (solid color)، سيجعل من هذا الخلفيّة تُرسم ضمن مجال حشوة العنصر افتراضيًا، ويُمكن تعديل هذا السلوك عبر استخدام خاصيّة <code>background-origin</code>.
</p>

<p>
	ولكي يتمّ تحديد أين يجب بالضَّبط على <strong>صورة الخلفيّة</strong> أنّ تتموضع داخل مجال التَمَوْضُع (positioning area)، فإن المجال يحتاج نظامًا إحداثيًّا ليُستخدم في تفسير وترجمة قيم التَمَوْضُع.
</p>

<h2 id="نظام-إحداثيات-العنصر-elements-coordinate-system">
	نظام إحداثيَّات العنصر (Element’s Coordinate System)
</h2>

<p>
	يَملك كل عنصر بشكلٍ افتراضيٍّ نظامًا إحداثيًا مُنشئ نسبةً إلى ارتفاعه (height) وعرضه (width)، ويعود هذا الأمر إلى طبيعة نموذج صندوق العناصر في <strong>CSS</strong>، ويُستخدم هذا النّظام في توضيع العنصر نسبةً إلى باقي العناصر، وتوضيع أبناء العنصر نسبةً إلى العنصر نفسه.
</p>

<p>
	تَملك عناصر <strong>HTML</strong> نظام إحداثيَّات في <strong>CSS</strong>، ولكن لا تَملك عناصر <strong>SVG</strong> نظامًا مُماثلًا، بسبب أنها لا تُحكم بمفهوم نموذج الصندوق.
</p>

<p>
	يُعرّف مبدأ نظام الإحداثيَّات في <strong>CSS</strong> في أعلى يسار زاوية العنصر.
</p>

<p>
	يُحكم <strong>مجال تَمَوْضُع الخلفيّة</strong> (background positioning area) أيضًا من قبل نظام إحداثيَّات مُنشئ في هذا المجال، ويُستخدم في توضيع <strong>صورة الخلفية</strong> في هذا المجال، ويكون مبدأ هذا النّظام أعلى يسار زاوية مجال التَمَوْضُع.
</p>

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

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

<p>
	على سبيل المثال، وعلى فرض وجود <strong>صورة خلفيّة</strong> مطبّقة على عنصر وغير مكرّرة (ستُعرض الصّورة مرّة واحدة) فسيكون تَمَوْضُع <strong>صورة الخلفيّة</strong> داخل نظام الإحداثيَّات عند مبدأ نظام إحداثيَّات صندوق الحشوة، أي أنّ أعلى يسار زاوية الصّورة ستتموضع عند أعلى يسار زاوية صندوق الحشوة:
</p>

<pre class="css ipsCode prettyprint" data-pbcklang="css" data-pbcktabsize="">
.element {
  box-sizing: border-box;
  width: 100vw;
  min-height: 100vh;
  padding: 2em;
  border: 20px solid rgba(0,0,0,0.5);
  background-color: beige;
  background-image: url(http://cdns2.freepik.com/free-photo/foggy-pine-forest_426-19323742.jpg);
  background-repeat: no-repeat;
}

p {
  text-align: center;
  padding: .5em;
}

.element p {
  text-align: left;
  background-color: rgba(255, 255, 255, .4);
  line-height: 1.5;
  margin: 0;
}
</pre>

<p>
	يُمكن استخدام خاصيّة <code>background-position</code>، وذلك بهدف تغيير مَوضع الصّورة داخل نظام الإحداثيَّات.
</p>

<p>
	يُمكن أيضًا تغيير مجال تَمَوْضُع الخلفيّة لتغيير مبدأ الإحداثيات المُستخدم في توضيع الصّورة داخل مجال خلفيّة العنصر.
</p>

<h3 id="تغيير-مجال-تموضع-الخلفية-ونظام-الإحداثيات-باستخدام-background-origin">
	تغيير مجال تَمَوْضُع الخلفيّة ونظام الإحداثيّات باستخدام <code>background-origin</code>
</h3>

<p>
	تُستخدم الخاصّيّة <code>background-origin</code> لتغيير مبدأ نظام الإحداثيَّات المُستخدم لتوضيع <strong>صورة الخلفيّة</strong> في مجال تَمَوْضُع الخلفيّة.
</p>

<p>
	تَقبل الخاصّيّة <code>background-origin</code> واحدة من هذه القيم:
</p>

<ul>
<li>
		<code>padding-box</code> وهي القيمة الافتراضيّة.
	</li>
	<li>
		<code>content-box</code>
	</li>
	<li>
		<code>border-box</code>
	</li>
</ul>
<p>
	سيتغيّر مبدأ نظام الخلفيّة –وهو مبدأ نظام الإحداثيّات المُنشئ في هذا المجال-الموافق بناءً على مجال تَمَوْضُع الخلفيّة المُختار، وكذلك الأمر مع التَمَوْضُع الأوّلي والافتراضي لصورة الخلفيّة.
</p>

<p>
	تُظهر الأمثلة الحيّة التّالية الاختلاف عمليًا.
</p>

<pre class="css ipsCode prettyprint" data-pbcklang="css" data-pbcktabsize="">
.element {
  box-sizing: border-box;
  width: 100vw;
  height: 100vh;
  padding: 2em;
  border: 20px solid rgba(0,0,0,0.3);
  background-color: beige;
  background-image: url(http://cdns2.freepik.com/free-photo/foggy-pine-forest_426-19323742.jpg);
  background-repeat: no-repeat;
}

.element-2 {
  background-origin: content-box;
}

.element-3 {
  background-origin: border-box;
}

p {
  text-align: center;
  padding: .5em;
}

.element p {
  text-align: left;
  background-color: rgba(255, 255, 255, .4);
  line-height: 1.5;
  margin: 0;
}
</pre>

<p>
	سيتغيّر نظام الإحداثيَّات ليُغطّي كل مجال تَمَوْضُع خلفيّة مُعيّن باستخدام الخاصّيّة <code>background-origin</code>.
</p>

<p>
	يُمكن بعد ذلك تحديد مَوضع <strong>صورة الخلفيّة</strong> في هذا النّظام الإحداثي باستخدام الخاصّيّة <code>background-position</code>.
</p>

<p>
	لن يتمّ تغيير مجال تَمَوْضُع خلفيّة العنصر بعد الآن، وذلك بغرض تبسيط الأمثلة والشرح، ولذلك جميع الأمثلة هي على العنصر الّذي مجال الحشوة الخاصّة به هو المجال الّتي ستتموضع على أساسها الخلفيّة.
</p>

<h2 id="توضيع-صور-الخلفية-باستخدام-خاصية-background-position">
	توضيع صور الخلفيّة باستخدام خاصيّة <code>background-position</code>
</h2>

<p>
	توضّح سابقًا كيف أنّ صورة الخلفيّة تتموضّع افتراضيًّا (بدون إعداد مُسبق) عند أعلى يسار زاوية مجال التَمَوْضُع، يَكمن السبب في ذلك إلى حقيقة أنّ قيمة التَمَوْضُع الافتراضيّة للخاصيّة <code>background-position</code> هي <code>0% 0%</code>.
</p>

<p>
	يُقاس التَمَوْضُع وبشكل افتراضي بالقيمة المئويّة، حيثُ من المُمكن الإسناد إلى <code>background-position</code> إما قيمة مئويّة (percentage value) أو قيمة مُطلقة (absolute value)، والّتي تُحدّد إزاحة (offset) الصّورة من أحد الحوافّ (edges) الأربعة (top, right, bottom, left).
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2015_05/offset-edges-and-system.png.e85f82f0321ae0754c6683eafc511630.png" rel="" data-fileid="2058"><img alt="offset-edges-and-system.thumb.png.c89cfe" class="ipsImage ipsImage_thumbnailed" data-fileid="2058" src="https://academy.hsoub.com/uploads/monthly_2015_05/offset-edges-and-system.thumb.png.c89cfeba056c904a900497ba44e30d30.png"></a>
</p>

<p>
	يوجد خمس كلمات مفتاحيّة للإزاحة، بالإضافة إلى القيم المئويّة والمُطلقة، وهي:
</p>

<ul>
<li>
		<code>top</code>
	</li>
	<li>
		<code>right</code>
	</li>
	<li>
		<code>bottom</code>
	</li>
	<li>
		<code>left</code>
	</li>
	<li>
		<code>center</code>
	</li>
</ul>
<p>
	يُوصف (يُعيّن) التَمَوْضُع عبر:
</p>

<ul>
<li>
		تحديد قيمة إزاحة واحدة، سواءً كانت كلمة مفتاحيّة أو نسبة قيمة مئويّة أو طوليّة.
	</li>
	<li>
		تحديد قيمتي إزاحة، وذلك عبر الجمع بين قيمتين من القيم الثّلاث المُحتملة.
	</li>
	<li>
		<p>
			تحديد أربع قيم إزاحة، كلمة مفتاحيّة وقيمة عدديّة نسبيّة.
		</p>

		<pre class="css ipsCode prettyprint" data-pbcklang="css" data-pbcktabsize="4">
background-position: top left;
background-position: 50px 30%;
background-position: top 25%;
background-position: right 10px bottom 20px;
background-position: center center
background-position: 10px 20px;
background-position: 5em 2em;
background-position: 75% 50%;
</pre>
	</li>
</ul>
<p>
	إن تحديد قيمة وحيدة فقط، سيجعل من القيمة الثّانية هي <code>center</code>، وعند تحديد قيمتين، سيجعل الأولى تحدّد الإزاحة من الحافّة اليُسرى (التَمَوْضُع الأفقي)، والثّانية هي الإزاحة إلى الأسفل من الحافّة العلويّة (التَمَوْضُع العمودي).
</p>

<pre class="css ipsCode prettyprint" data-pbcklang="css" data-pbcktabsize="">
background-position: 10% 50%; /* 10% of the width to the right, and 50% down from the top */
background-position: top; /* equivalent to `top center` */
background-position: 50px; /* equivalent to `50px center` */</pre>

<p>
	يُمكن الخلط والمزج، أي الجمع بين قيم الأطوال مع القيم المئويّة ومع أو الكلمات المفتاحيّة، الجدير بالذكر هنا، أنّه يُمكن إسناد زوج من الكلمات المفتاحيّة بدون النظر إلى الترتيب، ولكن لا يُمكن الجمع بين كلمة مفتاحيّة وقيمة طوليّة أو قيمة مئويّة، وعليه فإن القيمة <code>center left</code> هي قيمة سليمة وصحيحة، بينما القيمة <code>50% left</code> ليست قيمة سليمة، بل من المُفترض أنّ تكون <code>left 50%</code>، فعندما يتمّ الجمع واستخدام كلمة مفتاحيّة وطول أو قيمة مئويّة، <strong><em>فإن القيمة الأولى دائمًا تعبّر عن الإزاحة الأفقيّة والقيمة الثانية تعبّر عن الإزاحة العموديّة</em></strong>.
</p>

<p>
	إن الجدير بالذكر هنا، أن الكلمات المفتاحيّة هي اختزال أو اختصارات للقيم المئويّة:
</p>

<ul>
<li>
		<code>top</code> مساوية للقيمة المئويّة <strong>0%</strong> من الحافّة العلويّة.
	</li>
	<li>
		<code>bottom</code> مساوية للقيمة المئويّة <strong>100%</strong> إزاحة من الحافّة العلويّة.
	</li>
	<li>
		<code>left</code> مساوية للقيمة المئويّة <strong>0%</strong> إزاحة من الحافّة اليساريّة.
	</li>
	<li>
		<code>right</code> مساوية للقيمة المئويّة <strong>100%</strong> إزاحة من الحافّة اليسارية.
	</li>
	<li>
		<code>center</code> مساوية للقيمة المئويّة <strong>50%</strong> إزاحة من في أي اتجاه تُطبّق عليه.
	</li>
</ul>
<p>
	إن آلية عمل كل قيمة والتفريق بينها لأمرٌ هامٌ، خاصّة مع وجود اختلاف جوهري في تعامل المُتصفّحات مع القيم المئويّة والقيم المُطلقة، وذلك في توضيع صور الخلفيّة.
</p>

<h3 id="آلية-عمل-قيم-التموضع-ذات-القيم-المطلقة">
	آليّة عمل قيم التَمَوْضُع ذات القيم المُطلقة
</h3>

<p>
	إن تعيين قيمة تَمَوْضُع باستخدام قيم مُطلقة، <strong><em>سيزيح أعلى يسار زاوية صورة الخلفيّة بالقيمة المُحدّدة</em></strong>، بمعنى آخر، ستُنقل الصّورة بحيثُ تتموضع زاويتها اليساريّة العلويّة عند الإزاحة المُحدّدة في قيمة <code>background-position</code>.
</p>

<p>
	يُقال إن الصّورة بألف كلمة، حيثُ يتوضّح في الصّورة التّالية مثالان للخاصيّة <code>background-position</code> وبالقيمة المُطلقة، وكيف يُفسر المُتصفّح هاتين القيمتين ليوضع صورة الخلفيّة، علمًا أنّ أبعاد العنصر في المثالين هي: <strong>100px X 80px</strong>.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2015_05/absolute-position-illustration.png.bfb40ab3c74c4105b02e9a42d4e9cde9.png" rel="" data-fileid="2055"><img alt="absolute-position-illustration.thumb.png" class="ipsImage ipsImage_thumbnailed" data-fileid="2055" src="https://academy.hsoub.com/uploads/monthly_2015_05/absolute-position-illustration.thumb.png.f76aec5a93b9843bda71b35ca8b710da.png"></a>
</p>

<p>
	يُمكن أنّ يكون التَمَوْضُع المُطلق مُمثّلًا بقيمة سالبة، وفي هذه الحالة ستنزاح الصّورة في الاتجاه المُعاكس من الحافّة.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2015_05/negative-absolute-offset-illustration.png.17f4b7fe58787d327977e4995e6a491e.png" rel="" data-fileid="2057"><img alt="negative-absolute-offset-illustration.th" class="ipsImage ipsImage_thumbnailed" data-fileid="2057" src="https://academy.hsoub.com/uploads/monthly_2015_05/negative-absolute-offset-illustration.thumb.png.4c0e76eb3a7bbf96208b79ba95ebc44a.png"></a>
</p>

<p>
	مثالٌ حيّ: <a href="http://codepen.io/SaraSoueidan/pen/bfc8b59ddbc9beb63eee9f26e2754ade" rel="external nofollow">http://codepen.io/SaraSoueidan/pen/bfc8b59ddbc9beb63eee9f26e2754ade</a>
</p>

<h3 id="آلية-عمل-قيم-التموضع-ذات-القيم-المئوية">
	آلية عمل قيم التَمَوْضُع ذات القيم المئويّة
</h3>

<p>
	تَنقل قيم الإزاحة الطوليّة المُطلقة زاوية العنصر اليساريّة العليا بالمسافة المُحدّدة، ولكن مع استخدام القيم المئويّة فالأمر مُختلف، فالقيمة <strong>X%</strong> <a href="http://www.almaany.com/ar/dict/ar-ar/%D8%AA%D8%B1%D8%B5%D9%81/" rel="external nofollow">ستُرصِف</a> (align) النقطة <strong>X%</strong> من الصّورة مع النقطة <strong>X%</strong> من حاوية الصّورة (the container)
</p>

<p>
	فعلى سبيل المثال، ستُرصِف القيمة المئويّة <strong>0% 0%</strong> النقطة ذات الإحداثيّات <strong>0% 0%</strong> من الصّورة مع النقطة <strong>0% 0%</strong> من نظام الإحداثيّات مجال تَمَوْضُع الخلفيّة، وستُرصِف قيمة التَمَوْضُع <strong>50% 75%</strong> النقطة ذات الإحداثيّات <strong>50% 75%</strong> من الصّورة (50% إلى اليمين و 75% إلى الأسفل) مع النقطة ذات الإحداثيّات <strong>50% 75%</strong> في مجال تَمَوْضُع الخلفيّة.
</p>

<p>
	يُطلب بعض التركيز لفهم الكلام النظريّ السابق، ولكن دائمًا ما لا يَتوضّح بالكلمات حتمًا سيتوضّح بالمرئيّات، كل ما يَهم من الأمر هو التركيز على أنّ الانزياح 50% هو نسبة إلى النقطة 50% من الصّورة وليس الزاوية العلويّة اليساريّة، وهنا مَرْبِطُ الفَرس والذي يُوضّح الاختلاف بين القيم المئويّة وقيم الأطوال المُطلقة.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2015_05/percentage-values-illustration.png.0dd5ea52994d5eba1ad2f29f1f545f3c.png" rel="" data-fileid="2059"><img alt="percentage-values-illustration.thumb.png" class="ipsImage ipsImage_thumbnailed" data-fileid="2059" src="https://academy.hsoub.com/uploads/monthly_2015_05/percentage-values-illustration.thumb.png.954692a3bc5ff53659a83497e3387a6b.png"></a>
</p>

<p>
	يُمكن تحديد قيم إزاحة مئويّة سالبة، كما هو الأمر مع القيم المُطلقة، الأمر الّذي من شأنه أنّ يَنقل <strong>صورة الخلفيّة</strong> بالقيمة المُحدّدة ولكن بالاتجاه المُعاكس لمحاور الإحداثيّات:
</p>

<p>
	تمّت عمليّة التَمَوْضُع في الأمثلة السابقة نسبةً إلى الحافتين العلويّة واليساريّة، ولكن في الحقيقة من المُمكن توضيع الصّور نسبةً إلى أيًا من الحوافّ الأربعة.
</p>

<h3 id="الإزاحة-نسبة-إلى-الحواف-الأربع">
	الإزاحة نسبةً إلى الحوافّ الأربع
</h3>

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

<p>
	إن الجمع بين الكلمات المفتاحيّة مع القيمة العدديّة باستخدام الصياغة (syntax) ذات الأربع قيم، يُمكّن المُطوّر من إزاحة صورة الخلفيّة من الحافّة اليمينيّة والحافّة السُفلى لمجال التَمَوْضُع.
</p>

<p>
	يتمّ استخدام صياغة هذا الأسلوب عبر تحديد اسم الحافّة متبوعًا بالقيمة المطلوبة، ويمكن أنّ تكون القيم على الشكلين: قيم مُطلقة أو قيم مئويّة، وذلك كما في الأمثلة التّالية:
</p>

<pre class="css ipsCode prettyprint" data-pbcklang="css" data-pbcktabsize="4">
background-position: top 1em right 3em; 
background-position: right 1em bottom 1em;
background-position: left 20px bottom 50px;
</pre>

<pre>
<span style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; line-height: 1.6;">يجب الانتباه إلى أنّ إغفال القيمة الرابعة يجعلها تُفرض على أنّها صفر.</span>
</pre>

<pre class="css ipsCode prettyprint" data-pbcklang="css" data-pbcktabsize="">
background-position: bottom 10px right 20px</pre>

<p>
	يوضّح المثال السابق كيف أنّ الإعداد أصبح أسهل بكثير عند الرغبة في إزاحة صورة نسبةً إلى الحافّة اليمينيّة والسُفلى بدلًا من حساب قيم الإزاحة نسبةً إلى الحافتين العلويّة واليُسرى.
</p>

<h2 id="المزيد-مع-خواص-الخلفية-في-css">
	المزيد مع خواصّ الخلفيّة في CSS
</h2>

<p>
	يُمكن استعمال أكثر من صورة على عنصر، ولكل <strong>صورة خلفيّة</strong> يُمكن تعيين قيمة تَمَوْضُع، على أنّ يتمّ الفصل فيما بينها باستخدام الفاصلة:
</p>

<pre class="css ipsCode prettyprint" data-pbcklang="css" data-pbcktabsize="">
.element {
    background-image: url(path/to/first/image.jpg), url(path/to/second/image.png);
    background-position: top left, 75% 80%;
}</pre>

<p>
	يوجد عامًّا تسع خاصِّيَّات تتحكم بتوزّع العناصر (layout)، والتَمَوْضُع، وقياس ورسم صور الخلفيّة، بما في ذلك خاصيّة <code>background</code>، وتقوم كل خاصيّة بعمل شيء واحد مُحدّد مع إمكانيّة الجمع والمزج فيما بينها لإعطاء المُطوّر تحكم كامل في كيفيّة تطبيق <strong>صور الخلفيّة</strong> على عناصر <strong>HTML</strong>.
</p>

<p>
	ظَهر مؤخرًا خاصيّة إضافيّة لخواصّ الخلفيّة الرئيسيّة، والّتي تسمح في تطبيق تأثيرات المزج (blending) على صور الخلفيّة وبشكل مُشابه لتأثيرات المزج المتوفّرة في مُحرّرات الصّور مثل فوتوشوب، من هذه الخواصّ الخاصّيّة <code>background-blend-mode</code>، ويُمكن الاستزادة حول الموضع بقراءة <a href="http://sarasoueidan.com/blog/compositing-and-blending-in-css/" rel="external nofollow">المزج في CSS</a>.
</p>

<h2 id="الختام">
	الخاتمة
</h2>

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

<p>
	ترجمة –وبتصرّف- للمقال <a href="http://blogs.adobe.com/dreamweaver/2015/03/a-primer-to-background-positioning-in-css.html" rel="external nofollow">A Primer To Background Positioning In CSS</a> لصاحبته <a href="http://twitter.com/SaraSoueidan" rel="external nofollow">سارة سويدان</a>.
</p>
]]></description><guid isPermaLink="false">81</guid><pubDate>Tue, 19 May 2015 06:52:00 +0000</pubDate></item><item><title>&#x62A;&#x639;&#x631;&#x651;&#x641; &#x639;&#x644;&#x649; &#x623;&#x633;&#x627;&#x633;&#x64A;&#x627;&#x62A; CSS</title><link>https://academy.hsoub.com/programming/css/%D8%AA%D8%B9%D8%B1%D9%91%D9%81-%D8%B9%D9%84%D9%89-%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A7%D8%AA-css-r70/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2015_04/css-basics.png.299e7b19ca26a3c49a09d46da9cd0979.png" /></p>
<p dir="rtl">
	بعد التعرّف على كيفية تشكيل المحتوى باستخدام HTML. <span style="line-height: 22.3999996185303px;">سيكون لِزامًا عليك -كمطور ويب- معرفة ماهية CSS (أوراق الأنماط المتتالية أو <strong>C</strong>ascading <strong>S</strong>tyle <strong>S</strong>heets بالانجليزية) وكيفية إدراج التصميم مع صفحات HTML. يُعتبر CSS </span>أحد التقنيات التي يجب التركيز عليها، إذ هي من سيحدد شكل موقع الويب وما يظهر للعيان.
</p>

<p dir="rtl">
	يُعتبر هذا الدرس مدخلا لأساسيات لغة التوصيف هذه، وستكون هيكلته كالتالي:
</p>

<ul dir="rtl">
	<li>
		<strong>ماهي لغة CSS؟</strong>
	</li>
	<li>
		<strong>تعريف قوانين التصميم</strong>
		<ul>
			<li>
				التعليقات مع CSS
			</li>
			<li>
				تجميع المنتقى
			</li>
		</ul>
	</li>
	<li>
		<strong>استخدام منتقى CSS متقدم</strong>
		<ul>
			<li>
				المنتقى العام
			</li>
			<li>
				المنتقى الفرعي
			</li>
			<li>
				المنتقى الابن
			</li>
			<li>
				المنتقى التسلسلي
			</li>
			<li>
				المنتقى الشقيق
			</li>
			<li>
				المحدّد Pseudo-classes
			</li>
			<li>
				العناصر Pseudo-elements
			</li>
		</ul>
	</li>
	<li>
		<strong>اختزال CSS</strong>
		<ul>
			<li>
				مقارنة القيم الفردية والمختزلة
			</li>
			<li>
				<span style="line-height: 22.3999996185303px;">اختزال القيم بخاصية واحدة</span>
			</li>
			<li>
				أيهما يجب اختياره الخاصية المفردة أم القيمة المختزلة؟
			</li>
			<li>
				مراجع الاختزال
			</li>
		</ul>
	</li>
	<li>
		<strong>إدراج CSS مع HTML</strong>
		<ul>
			<li>
				الإدراج الداخلي
			</li>
			<li>
				الإدراج المضمر
			</li>
			<li>
				الإدراج خارجي
			</li>
			<li>
				استيراد ملف التصميم
			</li>
		</ul>
	</li>
	<li>
		<strong>خاتمة</strong>
	</li>
	<li>
		<strong>أسئلة وتمارين</strong>
	</li>
</ul>

<h2>
	ماهي لغة CSS؟
</h2>

<p dir="rtl">
	تحدّد لغة HTML <strong>هيكلة</strong> الصفحة وتُخبر المتصفحات بوظيفة كل عنصر في الصفحة (مثل رابط لصفحة أخرى أو عنوانا رئيسياً) في حين تقدّم لغة CSS تعليمات للمتصفح حول كيفية <strong>عرض</strong> العناصر في الصفحة من حيث التصميم والمسافة والموضع. ولو افترضنا أن HTML تقوم على بناء هيكل المنزل فإن CSS تقوم بطلاء المنزل و تصميم الديكور الخاص به.
</p>

<p dir="rtl">
	يكون ذلك عن طريق مجموعة من التعليمات التي سنتعرف على كيفية سردها لاحقا. تحدد تلك التعليمات (أو القواعد) ما يجب تنسيقه وتصميمه على عناصر HTML. كما تحتوي تلك القواعد على خاصيات معينة (مثل الألوان وحجم الخطوط ونوع الخط) لعناصر HTML والتي تقوم بالتعديل عليها وتحديد القيم التي ستغير من شكل تلك العناصر. وباستخدام تقنية CSS يمكننا إيجاد على سبيل المثال جميع وسوم <span style="font-family:courier new,courier,monospace;">&lt;h2&gt;</span> ثم تلوينها جميعاً باللون الأخضر أو إيجاد جميع الأسماء الملحقة <span style="font-family:courier new,courier,monospace;">author-name</span> الموجودة في وسوم الفقرات &lt;p&gt; وتغيير لون الخلفية إلى اللون الأحمر وتغيير حجم النص إلى ضعفين الحجم العادي وإضافة مسافة بين النصوص بحجم <span style="font-family:courier new,courier,monospace;">10px</span>.
</p>

<p dir="rtl">
	لا تعتبر لغة CSS لغة برمجية فهي ليست مثل JavaScript وليست لغة هيكلة مثل لغة HTML، وبصراحة لا يمكن مقارنة هذه اللغة بأي تقنية أخرى. قبل عمليات تطوير الويب كانت بعض التقنيات تعرّف واجهة الموقع وتدمج بين البنية والشكل التقديمي. وهذا ليس بالشيء الذكي الذي يجب فعله في البيئة التي تتغير باستمرار وخاصة صفحات الويب ولهذا السبب تم اختراع لغة CSS.
</p>

<div class="banner-container ipsBox ipsPadding">
	<div class="inner-banner-container">
		<p class="banner-heading">
			دورة تطوير واجهات المستخدم
		</p>

		<p class="banner-subtitle">
			ابدأ عملك الحر بتطوير واجهات المواقع والمتاجر الإلكترونية فور انتهائك من الدورة
		</p>

		<div>
			<a class="ipsButton ipsButton_large ipsButton_primary ipsButton_important" href="https://academy.hsoub.com/learn/front-end-web-development/" rel="">اشترك الآن</a>
		</div>
	</div>

	<div class="banner-img">
		<img alt="دورة تطوير واجهات المستخدم" src="https://academy.hsoub.com/learn/assets/images/courses/front-end-web-development.png">
	</div>
</div>

<h2 dir="rtl">
	تعريف قوانين التصميم
</h2>

<p dir="rtl">
	دعونا نلقي نظرة على الكود في المثال التالي ثم سنقوم بشرحه تالياً:
</p>

<pre class="css ipsCode prettyprint" data-pbcklang="css" data-pbcktabsize="4">selector {
    property1: value;
    property2: value;
    property3: value;
}</pre>

<p dir="rtl">
	شرح المثال السابق كالتالي:
</p>

<ul dir="rtl">
	<li>
		يحدّد المنتقى (selector) عنصر HTML والذي سيتم تطبيق القاعدة عليه. يتم تحديد العنصر من خلال اختيار اسم العنصر مثل <span style="font-family:courier new,courier,monospace;">body</span> أو <span style="font-family:courier new,courier,monospace;">h1</span> أو من خلال اسم محدد <span style="font-family:courier new,courier,monospace;">class</span> ويتم ضع الاسم كلاحقة ضمن العنصر لاستدعاء التصميم.
	</li>
	<li>
		تحتوي الأقواس المنحنية بداخلها زوجاً من الخاصية والقيمة وتفصل بين كل خاصية وقيمة فاصلة منقوطة (<span style="font-family:courier new,courier,monospace;">;</span>). كما يتم الفصل بين الخاصية والقيمة بنقطتين (<span style="font-family:courier new,courier,monospace;">:</span>).
	</li>
	<li>
		تحدّد الخاصية ما يجب فعله للعنصر أو العناصر الذي قمت باختيارهم. وذلك يحتوي على تنوع كبير حيث تؤثر على لون العنصر ولون الخلفية والموضع والهوامش الخارجية والهوامش الداخلية ونوع الخط وغيرها الكثير.
	</li>
	<li>
		تحدّد القيمة الصفة النهائية التي تود تطبيقها على العنصر الذي اخترته. وتعتمد القيم على نوع الخاصية التي اخترها فمثلاً الخاصية <span style="font-family:courier new,courier,monospace;">color</span> تسمح باختيار الألوان ضمن الست عشرية مثل #336699 أو من خلال القيمة العامة للون RGB مثل <span style="font-family:courier new,courier,monospace;">(rgb(12,134,22</span> أو اسم اللون مثل <span style="font-family:courier new,courier,monospace;">red</span> أو <span style="font-family:courier new,courier,monospace;">green</span> أو <span style="font-family:courier new,courier,monospace;">blue</span>. بينما الخاصيات التي تؤثر على الموضع والهوامش والطول والعرض يمكن قياسها من خلال <span style="font-family:courier new,courier,monospace;">pixels</span> ،<span style="font-family:courier new,courier,monospace;">ems</span> أو <span style="font-family:courier new,courier,monospace;">percentages</span> (النسبة المئوية) أو <span style="font-family:courier new,courier,monospace;">centimeters</span> وغيرها.
	</li>
</ul>

<p dir="rtl">
	لنلقي نظرة على هذا المثال المحدّد:
</p>

<pre class="css ipsCode prettyprint" data-pbcklang="css" data-pbcktabsize="4">p {
    margin: 5px;
    font-family: Arial;
    color: blue;
}</pre>

<p dir="rtl">
	شرحاً للمثال السابق فإن القاعدة هي اختيار العنصر <span style="font-family:courier new,courier,monospace;">&lt;p&gt;</span> أي جميع الوسوم <span style="font-family:courier new,courier,monospace;">&lt;p&gt;</span> الموجودة في صفحة أو صفحات الويب HTML وسيتم تطبيق قاعدة CSS عليها. فقد قمنا بالتعديل على العنصر &lt;p&gt; في حيث الهوامش الخارجية هي <span style="font-family:courier new,courier,monospace;">5px</span> ونوع الخط هو <span style="font-family:courier new,courier,monospace;">Arial</span> ولون النص هو <span style="font-family:courier new,courier,monospace;">blue</span>.
</p>

<p dir="rtl">
	سنشرح لاحقاً بالتفصل كل خاصية والقيمة المناسبة لها لكن الآن الهدف هو تغطية أساسيات CSS.
</p>

<h3 dir="rtl">
	التعليقات في CSS
</h3>

<p dir="rtl">
	أحد الأمور الهامة الذي يجب أن تعرفها هي وضع تعليقات ضمن تصميم CSS. حيث يمكنك إدراج تعليق من خلال كتابة النص بين هذه الاشارات <span style="font-family:courier new,courier,monospace;">/* */</span> حيث يمكنك تمديد التعليقات إلى أسطر عديدة كما أن المتصفح سيتجاهل هذه الأسطر.
</p>

<pre class="css ipsCode prettyprint" data-pbcklang="css" data-pbcktabsize="4"><span style="line-height: 22.3999996185303px;">/* في هذه الكود أساسيات المنتقى */</span>
selector {
    property1: value;
    property2: value;
    property3: value;
}</pre>

<p dir="rtl">
	يمكنك أيضاً إدراج التعليقات بين أو ضمن مجموعة خاصيات. فمثلاً في الكود التالي قمنا بوضع الخاصية الثانية والثالثة ضمن تعليق وبما أنهم ضمن التعليق سيتجاهل المتصفح تلك التصاميم ولن يتم تطبيقها. تعتبر هذه الطريقة مفيدة جداً خاصة إذا كنت تفحص أي جزء تريد أن يتم تطبيقه. والجزء الذي لا تريده ضعه ضمن تعليق أفضل من حذفهم ثم احفظ شِفرة CSS وأعد تحميل صفحة HTML لمُعاينة النتيجة.
</p>

<pre class="css ipsCode prettyprint" data-pbcklang="css" data-pbcktabsize="4">selector {
    property1: value;
/*
    property2: value;
    property3: value;
*/
}</pre>

<p dir="rtl">
	تحتوي لغة CSS على نظام التعليق المتعدد الأسطر وهذا بخلاف بقية اللغات الأخرى أي أنها لا تحتوي على تعليق بسطر واحد. في حال أردت إدراج تعليق بسطر واحد فقط ضع بداية ونهاية التعليقات <span style="font-family:courier new,courier,monospace;">/*</span> و <span style="font-family:courier new,courier,monospace;">*/</span>.
</p>

<h3 dir="rtl">
	تجميع المنتقى
</h3>

<p dir="rtl">
	يمكنك أيضاً جمع أكثر من منتقى مختلف. نريد تعيين التصميم إلى <span style="font-family:courier new,courier,monospace;">&lt;h1&gt;</span> و<span style="font-family:courier new,courier,monospace;">&lt;p&gt;</span> فيمكنك كتابة التصميم كما في المثال التالي:
</p>

<pre class="css ipsCode prettyprint" data-pbcklang="css" data-pbcktabsize="4">h1 { color:red; }
p { color:red; }</pre>

<p dir="rtl">
	تعتبر استخدام هذه الطريقة غير مثالية عند تكرار المعلومات نفسها لكن يمكنك تقصيرها من خلال جمع أكثر من منتقى وتطبيق نفس التصميم على الجميع وذلك من خلال فصل كل منتقى عن الآخر بفاصلة. سيتم تطبيق التصميم في المثال التالي ضمن القوسين على جميع المنتقى الموجود:
</p>

<pre class="css ipsCode prettyprint" data-pbcklang="css" data-pbcktabsize="4">h1, p { color:red; }</pre>

<p dir="rtl">
	هناك العديد من المنتقى المختلف في كل مطابقة جزء مختلف في الترميز. الأنواع الثلاثة الأساسية والتي ستصادفك كثيراً هم:
</p>

<ul dir="rtl">
	<li>
		منتقى العنصر <span style="font-family:courier new,courier,monospace;">p</span> ويطابق على جميع العناصر الموجودة بالصفحة كما شرحنا سابقاً.
	</li>
	<li>
		الصنف <strong><span style="font-family:courier new,courier,monospace;">example.</span></strong> وهو يدل على اسم صنف (class)، ويتم تطبيق جميع القيم في التصميم للعنصر الذي يحمل هذا الصنف. فمثلاً في التصميم السابق للعنصر يمكن اضافة يمكن إضافة الصنف <span style="font-family:courier new,courier,monospace;">&lt;"p class="example&gt;</span> أو <span style="font-family:courier new,courier,monospace;">&lt;"li class="example&gt; </span>أو <span style="font-family:courier new,courier,monospace;">&lt;"div class="example&gt; </span>أو أي عنصر يحمل الصنف <strong><span style="font-family:courier new,courier,monospace;">example</span></strong>.
	</li>
	<li>
		المعرّف <span style="font-family:courier new,courier,monospace;"><strong>example#</strong></span> وهو يدل على اسم معرّف (ID) ويتم تطبيق جميع القيم في التصميم للعنصر الذي يحمل هذا الاسم. فمثلاً في التصميم السابق للعنصر يمكن إضافة الاسم المعرّف <br>
		&lt;"p id="example&gt; أو &lt;"li id="example&gt; أو &lt;"div id="example&gt; أو أي عنصر يحمل الاسم <span style="font-family:courier new,courier,monospace;"><strong>example</strong></span>. تذكّر بأن المعرّف <strong>ID</strong> لا يفحص أسماء العناصر كما يمكنك اختيار اسماً واحداً لكل عنصر في صفحات HTML.
	</li>
</ul>

<p dir="rtl">
	يمكنك مشاهدة ما قمنا بعمله في الأمثلة التالية. من الملاحظ أنه يمكنك مشاهدة الأمثلة التالية على المتصفح وأيضاً تصميم التحذير الملوّن باللون الأحمر على كلاً من القائمة وأيضاً الفقرة. (إن لم تظهر علامات القامة فهذا لأنك قمت بتلوين النص باللون الأبيض وبخلفيه بيضاء).
</p>

<ul dir="rtl">
	<li>
		<a href="https://dev.opera.com/articles/css-basics/example-selectors.html" rel="external nofollow">example-selectors.html</a>
	</li>
	<li>
		<a href="https://dev.opera.com/articles/css-basics/selectors.css" rel="external nofollow">selectors.css</a>
	</li>
</ul>

<p dir="rtl">
	يمكنك أيضاً دمج أكثر من منتقى لتحديد قواعد أخرى أكثر تخصيصاً:
</p>

<ul dir="rtl">
	<li>
		يطابق <span style="font-family:courier new,courier,monospace;">p.warning</span> جميع الفقرات التي تحتوي على الصنف <span style="font-family:courier new,courier,monospace;">warning</span>.
	</li>
	<li>
		يطابق <span style="font-family:courier new,courier,monospace;">div#example</span> جميع العناصر ضمن اللاحقة id والمعرّفة بكلمة <span style="font-family:courier new,courier,monospace;">example </span>ولكن فقط مع العنصر <span style="font-family:courier new,courier,monospace;">&lt;div&gt;</span>.
	</li>
	<li>
		يطابق <span style="font-family:courier new,courier,monospace;">p.info</span> جميع الفقرات التي تحتوي على المعرّف info وأيضاً يطابق <span style="font-family:courier new,courier,monospace;">li.highlight</span> القوائم المعرفّة بالكلمة <span style="font-family:courier new,courier,monospace;">highlight</span>.
	</li>
</ul>

<p dir="rtl">
	في المثال استخدمت تلك الطرق لتحديد الاختلاف بين التصاميم المختلفة للمعّرف <span style="font-family:courier new,courier,monospace;">warning</span>:
</p>

<ul dir="rtl">
	<li>
		<a href="https://dev.opera.com/articles/css-basics/example-specificselectors.html" rel="external nofollow">example-specificselectors.html</a>
	</li>
	<li>
		<a href="https://dev.opera.com/articles/css-basics/specificselectors.css" rel="external nofollow">specificselectors.css</a>
	</li>
</ul>

<h2 dir="rtl">
	استخدام منتقى CSS متقدم
</h2>

<p dir="rtl">
	في القسم السابق تحدثنا عن أساسيات CSS واستخدام أيضاً المنتقى والعناصر والمعرّف <span style="font-family:courier new,courier,monospace;">class</span> و<span style="font-family:courier new,courier,monospace;">id</span>. وبتلك الأنواع من المنتقى يمكنك إنجاز الكثير ولكن هذا ليس كل شيء. حيث يوجد أنواع أخرى من المنتقى والتي تسمح لك باختيار عنصر وتطبيق تصميم عليه بأكثر تخصيص:
</p>

<ul dir="rtl">
	<li>
		<strong>المنتقى العام:</strong> يمكن استخدام لاختيار جميع العناصر في الصفحة.
	</li>
	<li>
		<strong>المنتقى الفرعي:</strong> حيث يمكنك اختيار أسماء معينة وإضافتها على العنصر كلاحقة وتسمح لك بتطبيق تصميم على عنصر محدد الذي يحمل ذلك الاسم.
	</li>
	<li>
		<strong>المنتقى الابن:</strong> يمكنك استخدام هذا النوع في حال أردت اختيار عنصر محدّد والتي تعتبر كأبناء للعناصر الأصلية.
	</li>
	<li>
		<strong>المنتقى التسلسلي:</strong> يمكنك استخدام هذا النوع في حال اخترت عنصر محدّد والتي تنحدر بتسلسل ضمن تلك العناصر (ليست متسلسلة بشكل مباشر ولكنها متسلسلة كشجرة العائلة أيضاً يمكن استخدام هذا النوع)
	</li>
	<li>
		<strong>المنتقى الشقيق:</strong> يمكن استخدام هذا النوع في حال أردت اختيار عنصر محدّد والذي يتبع عنصر محدد آخر.
	</li>
	<li>
		<strong>المحدّد Pseudo-classes:</strong> تسمح بتصميم العناصر التي لا تعتمد على العناصر نفسها لكن على العوامل المقتصرة على فئة معينة مثل مجموعة روابط تشعبية (أي إذا كانت تلك الروابط تم تمرير مؤشر الماوس عليها أو تم زيارتها فعلاً).
	</li>
	<li>
		<strong>العناصر Pseudo-elements:</strong> تسمح لك بالتصميم على جزء من العناصر وليس جميع العناصر (أي الحرف الأول ضمن العنصر). كما تسمح أيضاً بإدراج محتوى قبل أو بعد عناصر محددة.
	</li>
</ul>

<p dir="rtl">
	ستطلع أيضاً على مراجع لبعض الأنواع المعقدة للمنتقى في نهاية هذا الدرس. لا تقلق في حال لم تفهمهم فوراً لأنك ستحصل على الكثير من المعلومات والخبرة في الحياة العملية من خلال تصميم المواقع. من الأفضل أن تبدأ باستخدام أول ثلاثة أنواع المنتقى ومع الوقت تستخدم البقية.
</p>

<h3 dir="rtl">
	المنتقى العام
</h3>

<p dir="rtl">
	ببساطة يحدد المنتقى العام كل عنصر في الصفحة ويُطبق التصميم عليه. على سبيل المثال: تقول القاعدة التالية بأنه يجب تقديم 1 بكسل بلون أسود كإطار لجميع العناصر في الصفحة.
</p>

<pre class="css ipsCode prettyprint" data-pbcklang="css" data-pbcktabsize="4">* {
    border: 1px solid #000000;
}</pre>

<h3 dir="rtl">
	المنتقى الفرعي
</h3>

<p dir="rtl">
	يسمح المنتقى الفرعي باختيار العناصر التي تعتمد على لواحقها. على سبيل المثال: يمكنك اختيار جميع وسوم <span style="font-family:courier new,courier,monospace;">&lt;img&gt;</span> والتي تحتوي اللاحقة <span style="font-family:courier new,courier,monospace;">alt</span> كما في المثال:
</p>

<pre class="css ipsCode prettyprint" data-pbcklang="css" data-pbcktabsize="4">img[alt] {
    border: 1px solid #000000;
}</pre>

<p dir="rtl">
	لاحظ الأقواس المربعة.
</p>

<p dir="rtl">
	يمكنك الاختيار بأن تضع حدودًا سوداء حول أي صورة والتي تحتوي على اللاحقة <span style="font-family:courier new,courier,monospace;">alt</span> باستخدام تلك الطريقة وأيضاً التعديل على الصور الأخرى ضمن الحدود الحمراء اللامعة وهي طريقة مفيدة في الاختبار.
</p>

<p dir="rtl">
	لكن أيضاً يمكننا اختيار قيمة اللاحقة لتطبيق عليها تصميم معين وهي طريقة مفيدة وفعالّة جداً. في المثال التالي سيتم تطبيق تصميم لجميع الصور والتي تحتوي اللاحقة <span style="font-family:courier new,courier,monospace;">src</span> مع القيمة <span style="font-family:courier new,courier,monospace;">alert.gif</span> كالتالي:
</p>

<pre class="css ipsCode prettyprint" data-pbcklang="css" data-pbcktabsize="4">img[src='alert.gif'] {
    border: 1px solid #000000;
}</pre>

<p dir="rtl">
	لا يمكنك الجزم بأن هذه الطريقة فعالّة بشكل كبير جداً إلا أنها مفيدة لعمليات تصحيح الأخطاء وأيضاً مهمة في القدرة على اختيار جزء معين من اللواحق مثل امتداد الملفات. أيضاً مع الإصدار الأخير تقدم CSS3 ثلاث طرق جديدة تتعامل مع أنواع اللواحق عوضاً عن التركيز على النصوص في قيم اللواحق، <a href="http://dev.opera.com/articles/view/css-3-attribute-selectors/" rel="external nofollow">يمكنك قراءة مقالة المبرمج </a><a href="http://dev.opera.com/articles/view/css-3-attribute-selectors/" rel="external nofollow">Christopher Schmitt حول المنتقى الفرعي في </a><a href="http://dev.opera.com/articles/view/css-3-attribute-selectors/" rel="external nofollow">CSS3</a>.
</p>

<h3 dir="rtl">
	المنتقى الإبن
</h3>

<p dir="rtl">
	يمكنك اختيار لمنتقى الابن لاختيار فقط العناصر التي تكون أبناء لعناصر أخرى محددة. على سبيل المثال، سيتم تطبيق التصميم على النص الموجود ضمن عنصر <span style="font-family:courier new,courier,monospace;">&lt;strong&gt;</span> وهو ابن للعنصر <span style="font-family:courier new,courier,monospace;">&lt;h3&gt;</span> إلي اللون الأزرق. أي فقط لذلك العنصر وليس لأي عنصر <span style="font-family:courier new,courier,monospace;">&lt;strong&gt;</span> آخر:
</p>

<pre class="css ipsCode prettyprint" data-pbcklang="css" data-pbcktabsize="4">h3 &gt; strong {
    color: blue;
}</pre>

<h3 dir="rtl">
	المنتقى التسلسلي
</h3>

<p dir="rtl">
	يشبه المنتقى التسلسلي بشكل كبير المنتقى الابن باستثناء أن المنتقى الابن يختار فقط العنصر الذي يليه مباشرة. بينما يمكنك اختيار أي عنصر في المنتقى التسلسلي ليس فقط الذي يليه مباشرة بل أي عنصر موجود لاحقاً. يمكنك مشاهدة المثال التالي مع وسوم HTML لفهم تماماً ما نقصد به:
</p>

<pre class="html ipsCode prettyprint" data-pbcklang="html" data-pbcktabsize="4">&lt;div&gt;
  &lt;em&gt;hello&lt;/em&gt;
  &lt;p&gt;In this paragraph I will say &lt;em&gt;goodbye&lt;/em&gt;.&lt;/p&gt;
&lt;/div&gt;</pre>

<p dir="rtl">
	في المثال السابق يعتبر العنصر <span style="font-family:courier new,courier,monospace;">&lt;div&gt;</span> الأب لجميع الوسوم الأخرى حيث أنه لديه إبنان وهما <span style="font-family:courier new,courier,monospace;">&lt;em&gt;</span> وأيضاً <span style="font-family:courier new,courier,monospace;">&lt;p&gt;</span>. والعنصر <span style="font-family:courier new,courier,monospace;">&lt;p&gt;</span> لديه إبن واحد فقط وهو <span style="font-family:courier new,courier,monospace;">&lt;em&gt;</span>.
</p>

<p dir="rtl">
	يمكنك اختيار المنتقى الابن لاختيار العنصر <span style="font-family:courier new,courier,monospace;">&lt;em&gt;</span> مباشرة داخل العنصر <span style="font-family:courier new,courier,monospace;">&lt;div&gt;</span> مثل:
</p>

<pre class="css ipsCode prettyprint" data-pbcklang="css" data-pbcktabsize="4">div &gt; em {
    ...
}</pre>

<p dir="rtl">
	يمكنك استخدام الطريقة التالية في حال أردت اختيار المنتقى التسلسلي كالتالي:
</p>

<pre class="css ipsCode prettyprint" data-pbcklang="css" data-pbcktabsize="4">div em {
    ...
}</pre>

<p dir="rtl">
	وفي هذه العملية سيتم تحديد كلاً من العنصرين <span style="font-family:courier new,courier,monospace;">&lt;em&gt;</span>.
</p>

<h3 dir="rtl">
	المنتقى الشقيق
</h3>

<p dir="rtl">
	يسمح لك هذا النوع من المنتقى باختيار عنصر محدد والذي يأتي مباشرة بعد عنصر محدد آخر وبنفس المستوى من تسلسل العناصر. فمثلاً اذا أردت اختيار جميع عناصر <span style="font-family:courier new,courier,monospace;">&lt;p&gt;</span> والتي تأتي مباشرة بعد جميع عناصر <span style="font-family:courier new,courier,monospace;">&lt;h2&gt;</span> فقط وليس <span style="font-family:courier new,courier,monospace;">&lt;p&gt;</span> بمفرده فيمكنك استخدام هذا النوع كالتالي:
</p>

<pre class="css ipsCode prettyprint" data-pbcklang="css" data-pbcktabsize="4">h2 + p {
    ...
}</pre>

<h3 dir="rtl">
	المحدّد Pseudo-classes
</h3>

<p dir="rtl">
	تستخدم تقنية Pseudo-classes لتصميم حالات متنوعة من العناصر وليس لعناصر محددة فقط. اشهر طريقة في استخدام هذا النوع النوع هو تطبيق تصميم على الروابط التشعبية. تشرح القائمة التالية الأنواع المختلفة من Pseudo-classes كما تشرح حالة الروابط التي يتم تطبيق التصميم عليها.
</p>

<ul>
	<li>
		<strong><span style="font-family:courier new,courier,monospace;">link:</span></strong> — التصميم الطبيعي والافتراضي لجميع الروابط في الصفحة.
	</li>
	<li>
		<strong><span style="font-family:courier new,courier,monospace;">visited:</span></strong> — وهي الروابط التي تم فتحها وزيارتها في المتصفح التي تستخدمه حالياً.
	</li>
	<li>
		<strong><span style="font-family:courier new,courier,monospace;">focus:</span></strong> — وهي الروابط (متضمنة حقول النماذج) التي تضغط عليها ولم تحرّر مؤشر الماوس منها.
	</li>
	<li>
		<strong><span style="font-family:courier new,courier,monospace;">hover:</span></strong> — وهي الروابط التي تمرّر مؤشر الماوس عليها.
	</li>
	<li>
		<strong><span style="font-family:courier new,courier,monospace;">active:</span></strong> — وهي الروابط التي تم النقر عليها.
	</li>
</ul>

<p dir="rtl">
	يشرح كود CSS في المثال التالي ما قمنا بشرحه مسبقاً. في المثال التالي، تكون جميع ألوان الروابط بشكل افتراضي (وهذا يشمل جميع المتصفحات) ملوّنة بللون الأزرق. وعند تمرمر مؤشر الماوس عليها أو النقر بمؤشر الماوس وبدون تحرير الزر سيختفي الخط السفلي لنص الروابط. كما ستحول لون الرابط إلى اللون الرمادي عند زيارة الرابط. وأخيراً بعد مشاهدة الرابط سيصبح نص الرابط غامقاً.
</p>

<pre class="css ipsCode prettyprint" data-pbcklang="css" data-pbcktabsize="4">a:link {
    color: blue;
}

a:visited {
    color: gray;
}

a:hover, a:focus {
    text-decoration: none;
}

a:active {
    font-weight: bold;
}</pre>

<p dir="rtl">
	كن حذراً في حال عدم ترتيب تلك القواعد بالتسلسل كما في المثال السابق، فلن تحصل على نتيجة كما تتوقع. وذلك بسبب قواعد التخصيص التي تحددها ملفات التصميم.
</p>

<p dir="rtl">
	يعتبر أيضاً <span style="font-family:courier new,courier,monospace;"><strong>focus:</strong></span> مفيد بسبب مرونة استخدامه مع النماذج. فمثلاً يمكنك التشديد على حقل الإدخال والذي تقوم بتعبئة البيانات فيه سيتغير لونه مباشرة كالتالي:
</p>

<pre class="css ipsCode prettyprint" data-pbcklang="css" data-pbcktabsize="4">input:focus {
    border: 2px solid black;
    background color: lightgray;
}</pre>

<p dir="rtl">
	سنشرح تالياً <span style="font-family:courier new,courier,monospace;"><strong>first-child:</strong></span> — حيث يقوم باختيار العنصر الابن مباشرة بعد عنصر الأب. سنقوم في المثال التالي باختيار أول عنصر من القائمة (سواء أكانت القائمة مرقّمة أو منقوطة) وجعله نصّاً غامقاً:
</p>

<pre class="css ipsCode prettyprint" data-pbcklang="css" data-pbcktabsize="4">li:first-child {
    font-weight: bold;
}</pre>

<p dir="rtl">
	وأخيراً وباختصار نذكر <span style="font-family:courier new,courier,monospace;"><strong>lang:</strong></span> pseudo-class والتي تقوم باختيار العناصر التي تحتوي على اللاحقة <span style="font-family:courier new,courier,monospace;">lang</span> أي اللغة كما في المثال التالي:
</p>

<pre class="html ipsCode prettyprint" data-pbcklang="html" data-pbcktabsize="4">&lt;p lang="en-US"&gt;
    A paragraph of American text, gee whiz!
&lt;p&gt;

يُمكن استهداف الفقرة أعلاه بالمنتقى التالي:

p:lang(en-US) {
    ...
}</pre>

<h3 dir="rtl">
	العناصر Pseudo-elements
</h3>

<p dir="rtl">
	تمتلك العناصر Pseudo elements هدفان أساسيان. <strong>أولاً</strong>: يمكنك اختيار هذا النوع لاختيار الحرف الأول أو السطر الأول من النص داخل العنصر المحدد. يمكنك استخدام القاعدة التالية في حال أردت إنشاء حرف كبير للحرف الأول من كل فقرة كالتالي:
</p>

<pre class="css ipsCode prettyprint" data-pbcklang="css" data-pbcktabsize="4">p:first-letter {
    font-weight: bold;
    font-size: 300%
    background-color: red;
}</pre>

<p dir="rtl">
	والآن أصبح الحرف الأول في بداية كل فقرة غامقاً وحجمه أكبر 300% من الحجم الطبيعي كما أن لون الخلفية أحمر.
</p>

<p dir="rtl">
	يمكنك استخدام الطريقة التالية لجعل السطر الأول من الفقرة غامق:
</p>

<pre class="css ipsCode prettyprint" data-pbcklang="css" data-pbcktabsize="4">p:first-line {
    font-weight: bold;
}</pre>

<p dir="rtl">
	<strong>الاستخدام الثاني</strong> للعنصر pseudo-elements هو إدراج محتوى من خلال CSS وذلك معقد جداً. يمكنك التحديد بأن المحتوى يجب أن يُدرج قبل أو بعد عنصر معين من خلال استخدام <span style="font-family:courier new,courier,monospace;"><strong>before:</strong></span> أو <span style="font-family:courier new,courier,monospace;"><strong>after:</strong></span> ثم يمكنك اختيار ما تريد إدراج قبل أو بعد العنصر المحدّد. ولتبسيط ذلك يمكنك مشاهدة المثال التالي وهو إضافة صور تزيينية بعد كل رابط في الصفحة:
</p>

<pre class="css ipsCode prettyprint" data-pbcklang="css" data-pbcktabsize="4">a:after {
    content: '' url(flower.gif);
}</pre>

<p dir="rtl">
	يمكنك أيضاً استخدام الدّالة <strong><span style="font-family:courier new,courier,monospace;">()attr</span></strong> لإدراج قيم معينة للواحق العناصر بعد عنصر معيّن. فمثلاً يمكنك إدراج الوجهة لكل رابط في الصفحة ضمن قوسين كالتالي:
</p>

<pre class="css ipsCode prettyprint" data-pbcklang="css" data-pbcktabsize="4">a:after {
    content: '(' attr(href) ')';
}</pre>

<p dir="rtl">
	تساعد هذه القواعد في طباعة ملفات التصميم حيث يمكنك الكتابة بسهولة على ملفات التصميم والتي يتم تطبيق التصميم مباشرةً في حال طبع المستخدم الصفحة. وتعتبر هذه الميّزة مفيدة لأنها تقوم بإخفاء القوائم في حال الطباعة لأن المستخدم لا يمكنه فعل ذلك يدوياً. وأيضاً تسمح تلك التقنية بتزويد المستخدمين برابط الصفحة كمرجع عند الطباعة.
</p>

<p dir="rtl">
	يمكنك أيضاً إدراج قيم عددية بعد تكرار العناصر (مثل قائمة غير منقّطة أو فقرات) باستخدام الدّالة <span style="font-family:courier new,courier,monospace;"><strong>()counter</strong></span> حيث يمكنك قراءة المزيد عنها في <a href="" rel="">مقالة عدّاد </a><a href="" rel="">CSS في موقع </a><a href="" rel="">dev.opera.com</a>.
</p>

<p dir="rtl">
	لا ينبغي عليك إدراج معلومات مهمة ضمن CSS أو المحتوى الذي من الممكن ألا يتوفر في بعض التقنيات المساعدة أو إذا لم يختار المستخدم صفحة التصميم لديك. القاعدة الأهم هي أن CSS للتصميم على الصفحات أما HTML لإدراج المحتوى.
</p>

<h2 dir="rtl">
	اختزال CSS
</h2>

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

<p dir="rtl">
	استخدمت سابقاً في هذا الدرس جزءاً من اختزال CSS لكنني لم أذكره وهو <strong><span style="font-family:courier new,courier,monospace;">border: 2px solid black</span></strong> وهذا في طبيعة الحال جزءاً مختصراً من قاعدة أطول كالتالي:
</p>

<pre class="css ipsCode prettyprint" data-pbcklang="css" data-pbcktabsize="4">border-width: 2px;
border-style: solid;
border-color: black;</pre>

<h3 dir="rtl">
	مقارنة القيم الفردية والمختزلة
</h3>

<p dir="rtl">
	شاهد هذا المثال الذي يشرح الهوامش الخارجية (يتم اختزال الهوامش الداخلية والحدود بنفس الطريقة):
</p>

<pre class="css ipsCode prettyprint" data-pbcklang="css" data-pbcktabsize="4">div.foo {
    margin-top: 1em;
    margin-right: 1.5em;
    margin-bottom: 2em;
    margin-left: 2.5em;
}</pre>

<p dir="rtl">
	وبهذه الطريقة يمكن اختزالها كالتالي:
</p>

<pre class="css ipsCode prettyprint" data-pbcklang="css" data-pbcktabsize="4">div.foo {
    margin: 1em 1.5em 2em 2.5em;
}</pre>

<h3 dir="rtl">
	اختزال القيم بخاصية واحدة
</h3>

<p dir="rtl">
	<span style="line-height: 22.3999996185303px;">يسمح الاختزال بدمج أربع قيم بخاصية واحدة، كما</span> يمكن أن يأخذ الاختزال أقل مع أربع قيم حسب القائمة التالية. يتم ترتيب النتيجة حسب رقم القيمة المطلوبة:
</p>

<ol dir="rtl">
	<li>
		تطبيق نفس القيمة لجميع الجوانب الأربعة مثل <span style="font-family:courier new,courier,monospace;"><strong>margin: 2px</strong></span>.
	</li>
	<li>
		يمكن تطبيق القيمة الأولى للجانب العلوي والسفلي أما الثانية فلليمين واليسار مثل: <span style="font-family:courier new,courier,monospace;"><strong>margin: 2px 5px</strong></span>.
	</li>
	<li>
		يمكن تطبيق القيمة الأولى والثالثة للقسم العلوي والسفلي بينما القيمة الثانية لقسم اليمين واليسار مثل: <strong><span style="font-family:courier new,courier,monospace;">margin: 2px 5px 1px</span></strong>.
	</li>
	<li>
		إذا كانت القيمة مفردة كما في رقم 1 فإنها على الترتيب من القسم العلوي فاليمين فالأسفل فاليسار.
	</li>
</ol>

<p dir="rtl">
	من الأفضل استخدام الطرق الأربع للاختزال في CSS وهذا أيضاً يطبّق على الهوامش الداخلية <span style="font-family:courier new,courier,monospace;">padding</span>.
</p>

<h3 dir="rtl">
	أيهما يجب اختياره الخاصية المفردة أم القيمة المختزلة؟
</h3>

<p dir="rtl">
	تستخدم خاصيات الهوامش <span style="font-family:courier new,courier,monospace;">margin</span> و<span style="font-family:courier new,courier,monospace;">padding</span> على نطاق واسع ولكن هناك بعض الحالات التي يتوجب عليك تجنّب استخدام القيم المختزلة أو استخدامهم بحذر كما في الحالات التالية:
</p>

<ul dir="rtl">
	<li>
		استخدام <span style="font-family:courier new,courier,monospace;">margin</span> واحد فقط: في هذه الحالة وعند اختيار خاصية واحدة تقوم تطبيقها.
	</li>
	<li>
		يتم تعديل ملف التصميم الذي كتبته من قبل خبراء: في هذه الحالة لن تحتاج إلى التعديل بنفسك فيمكن للخبراء حل هذه المشكلة.
	</li>
	<li>
		تحتاج لتغيير قيمة معينة على حساب التصميم العام: هذه الخاصية ضعيفة ومفتقرة للتصميم في صفحات الموقع وأيضاً هذه من الصعب التعامل معها.
	</li>
</ul>

<h3 dir="rtl">
	مراجع الاختزال
</h3>

<p dir="rtl">
	تم شرح مسبقاً الأنواع المختلفة لاختزال الحدود. ولكن نذكر نقطة أخرى بأنه يمكنك ضبط حدود لعنصر واحد بجميع أنواع خاصيات تصميم الحدود كما في المثال التالي:
</p>

<pre class="css ipsCode prettyprint" data-pbcklang="css" data-pbcktabsize="4">border-left-width: 2px;
border-left-style: solid;
border-left-color: black;</pre>

<p dir="rtl">
	تعمل الهوامش والحدود <span style="font-family:courier new,courier,monospace;">margin</span> ،<span style="font-family:courier new,courier,monospace;">padding</span> ،<span style="font-family:courier new,courier,monospace;">border</span> بنفس الطريقة كما تعلمنا في الفقرة السابقة.
</p>

<p dir="rtl">
	اختزال أنواع النص <span style="font-family:courier new,courier,monospace;">font</span>: حيث يمكنك تحديد حجم الخط ومدى غمقته وشكله وعائلة الخطوط التي ينتمي إليها كما في المثال التالي:
</p>

<pre class="css ipsCode prettyprint" data-pbcklang="css" data-pbcktabsize="4">font-weight: bold;
font-style: italic;
font-size: 1.5em;
line-height: 200%;
font-family: Georgia, 'Times New Roman', serif;</pre>

<p dir="rtl">
	لكن أيضاً يمكنك اختزال جميع ذلك بسطر واحد كالتالي:
</p>

<pre class="css ipsCode prettyprint" data-pbcklang="css" data-pbcktabsize="4">font: bold italic 1.5em/200% Georgia, 'Times New Roman', serif;</pre>

<p dir="rtl">
	اختزال الخلفية: حيث يمكنك تحديد لون الخلفية وصورة الخلفية ومكان الصورة وتكرار الصورة كما في المثال التالي:
</p>

<pre class="css ipsCode prettyprint" data-pbcklang="css" data-pbcktabsize="4">background-color: #000;
background-image: url(image.gif);
background-position: top left;
background-repeat: no-repeat;</pre>

<p dir="rtl">
	أيضاً يمكنك اختزال جميع ذلك بسطر واحد كالتالي:
</p>

<pre class="css ipsCode prettyprint" data-pbcklang="css" data-pbcktabsize="4">background: #000 url(image.gif) top left no-repeat;</pre>

<p dir="rtl">
	اختزال تصميم القوائم: أيضاً يمكنك تحديد نوع التسلسل للقائمة الغير مرقّمة والمكان والصورة كما في المثال التالي:
</p>

<pre class="css ipsCode prettyprint" data-pbcklang="css" data-pbcktabsize="4">list-style-type: circle;
list-style-position: inside;
list-style-image: url(bullet.gif);</pre>

<p dir="rtl">
	أيضاً يمكنك اختزال جميع ذلك بسطر واحد كالتالي:
</p>

<pre class="css ipsCode prettyprint" data-pbcklang="css" data-pbcktabsize="4">list-style: circle inside url(bullet.gif);</pre>

<p dir="rtl">
	لاحظ بأن أيضاً شكل اللون يمكن اختزاله من حيث نوعه وهو الوحدة الستة عشرية #000 وهو مختزل من شكله المطوّل وهو #000000. وكمثال أكثر تعقيداً مثل #6C9 وهو اختزال للشكل المطوّل #66CC99.
</p>

<h2 dir="rtl">
	إدراج CSS مع HTML
</h2>

<p dir="rtl">
	يوجد ثلاثة أنواع لإدراج CSS مع صفحات HTMLهم: <strong>الإدراج الداخلي</strong>، <strong>الإدراج المضمر</strong> و<strong>التصميم الخارجي</strong>. ينصح بشدّة استخدام النوع الثالث وهو استخدام الإدراج الخارجي (أي في ملف تصميم منفصل) ما لم يكن لديك سبباً لاستخدام أول نوعين.
</p>

<h3 dir="rtl">
	الإدراج الداخلي
</h3>

<p dir="rtl">
	يمكنك تطبيق التصميم على عنصر معيّن من خلال استخدام اللاحقة <span style="font-family:courier new,courier,monospace;">style</span> كما في المثال:
</p>

<pre class="css ipsCode prettyprint" data-pbcklang="css" data-pbcktabsize="4">&lt;p style="background:blue; color:white; padding:5px;"&gt;paragraph&lt;/p&gt;</pre>

<p dir="rtl">
	يمكنك إدراج جميع خاصيات التصميم CSS مع القيم الخاصة بهم (يجب فصل بعد كل خاصية وقيمة بإشارة الفاصلة المنقوطة) وبذلك يمكنك إدراج ماتريد من تصميم CSS. <a href="https://dev.opera.com/articles/css-basics/example-inline.html" rel="external nofollow">يمكنك مشاهدة مصدر هذا المثال</a>.
</p>

<p dir="rtl">
	يمكنك مشاهدة المثال عبر استخدام المتصفح كما ستلاحظ بأن الفقرة التي قمنا بتطبيق تصميم داخلي فيها أصبح النص باللون الأبيض وأيضاً خلفية النص أصبحت باللون الأزرق كما في <strong>الشكل 1</strong>.
</p>

<p dir="rtl" style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2015_04/figure-1.png.2c32a679f0a2d74a3f8aa25e929628af.png" rel="" data-fileid="1506" data-fileext="png"><img class="ipsImage ipsImage_thumbnailed" data-fileid="1506" alt="figure-1.png" src="https://academy.hsoub.com/uploads/monthly_2015_04/figure-1.thumb.png.bdb6818aedfa53523878ad3228f30890.png"></a>
</p>

<p dir="rtl" style="text-align: center;">
	<span style="color:#808080;"><strong>الشكل 1:</strong> يظهر المتصفح Chrome الفقرة التي تم تطبيق الإدراج الداخلي عليها وهي مختلفة عن باقي الفقرات</span>
</p>

<p dir="rtl">
	أحد مزايا الإدراج الداخلي بأنه يتم إجبار المتصفح على تطبيق تلك التصميمات حتى ولو كانت هذه الفقرة مخصصة بتصميم مضمر أي داخل وسم <span style="font-family:courier new,courier,monospace;">&lt;head&gt;</span> في الصفحة كما سيتم تجاوز أي تصميمات أخرى وتطبيق الإدراج الداخلي للعنصر.
</p>

<p dir="rtl">
	تعتبر أكبر مشكلة في الإدراج الداخلي أن التعديل على تصميم العنصر أكثر صعوبة مما تتوقع لأن جوهر لغة CSS هي تطبيق تصميمات منفصلة وبعيدة عن بنية صفحة HTML. بالإضافة إلى أن مسألة التعديل بهذه الطريقة لاتمنحك جميع مزايا وخصائص CSS وهي الإنسابية وذلك يعني بأن تبدع في التصميم بشكل منفصل عن بنية صفحة HTML ثم إدراج ذلك التصميم على صفحات HTML والتي سيقوم المتصفح بتطبيقها دفعة واحدة وبمرونة أكثر.
</p>

<h3 dir="rtl">
	الإدراج المضمر
</h3>

<p dir="rtl">
	تقع التصميمات المضمرة ضمن الوسم <span style="font-family:courier new,courier,monospace;">&lt;head&gt;</span> في صفحة HTML وبداخل وسم التصميم <span style="font-family:courier new,courier,monospace;">&lt;style&gt; </span>كما في المثال التالي:
</p>

<pre class="html ipsCode prettyprint" data-pbcklang="html" data-pbcktabsize="4">&lt;style type="text/css" media="screen"&gt;
  p {
      color: white;
      background: blue;
      padding: 5px;
  }
&lt;/style&gt;</pre>

<p dir="rtl">
	عند فتح الرابط السابق على المتصفح فسوف تشاهد بأن التصميم تم تطبيقه على جميع الفقرات في الصفحة كما في الصورة <strong>الشكل 2 </strong>كما يمكنك مشاهدة مصدر الصفحة ومشاهدة التصميم الذي قمنا باستخدامه وهو بداخل وسم head كما ذكرنا سابقاً.
</p>

<p dir="rtl" style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2015_04/figure-2.png.57a56d100a441967fac71dd7b57ee8aa.png" rel="" data-fileid="1507" data-fileext="png"><img class="ipsImage ipsImage_thumbnailed" data-fileid="1507" alt="figure-2.png" src="https://academy.hsoub.com/uploads/monthly_2015_04/figure-2.thumb.png.a2ddae547041bbf9afb90c15cccc19f2.png"></a>
</p>

<p dir="rtl" style="text-align: center;">
	<span style="color:#808080;"><strong>الشكل 2</strong>: يظهر متصفح Chrome جميع التصميم التي تم تطبيقها على جميع الفقرات ضمن وسم head</span>
</p>

<p dir="rtl">
	الميزة من استخدام الإدراج المضمر وهي أنه لا تحتاج إلى إدراج تصميم لكل فقرة أو عنصر وبدلاً من ذلك يمكنك إدراج تصميم واحد لجميع العناصر أو الفقرات. وهذا يعني بأنك في حال أردت التعديل على التصميم مستقبلاً فيمكنك التوجّه لمكان واحد للتعديل. حتى مع هذه الطريقة فهناك محدودية في استخدام التصميم لأن هذا التصميم محصوراً ضمن صفحة واحدة. لكن ماذا لو أردت التعديل على جميع الفقرات في الموقع؟ ستحتاج إلى استخدام صفحات الإدراج الخارجية.
</p>

<h3 dir="rtl">
	صفحات الإدراج الخارجية
</h3>

<p dir="rtl">
	نعني بصفحات الإدراج الخارجية أي وضع جميع تعريفات التصميم CSS في ملف خارجي وحفظه في ملف منفصل بامتداد <span style="font-family:courier new,courier,monospace;"><strong>css.</strong></span> ثم تطبيق جميع هذه التصميمات على جميع صفحات HTML باستخدام الوسم <span style="font-family:courier new,courier,monospace;">&lt;link&gt;</span> داخل الوسم <span style="font-family:courier new,courier,monospace;">&lt;head&gt;</span>. لاحظ بأن الوسم <span style="font-family:courier new,courier,monospace;">&lt;head&gt;</span> يحتوي بداخله على الوسم <span style="font-family:courier new,courier,monospace;">&lt;link&gt;</span> والذي يمكنك إرفاق رابط ملف تصميم CSS خارجي وبعد ذلك سيتم تطبيق جميع التصاميم بدل إرفاقه مباشرة. لنأخذ نظرة على كيفية عمل الوسم <span style="font-family:courier new,courier,monospace;">&lt;link&gt;</span>:
</p>

<pre class="html ipsCode prettyprint" data-pbcklang="html" data-pbcktabsize="4">&lt;link rel="stylesheet" href="styles.css" type="text/css" media="screen"&gt;</pre>

<p dir="rtl">
	استخدمنا مع الوسم <span style="font-family:courier new,courier,monospace;">&lt;link&gt;</span> في المثال السابق اللاحقة <span style="font-family:courier new,courier,monospace;">href</span> وهي لتحديد مكان ملف التصميم كما استخدم نوع <span style="font-family:courier new,courier,monospace;">media</span> أي الوسائط بالقيمة <span style="font-family:courier new,courier,monospace;">screen</span> (لأننا في هذه الحالة لا نريد أن تكون الطباعة بنفس شكل الصفحة) كما أننا قمنا بتعريف النوع بأنه نص من نوع CSS وأيضاً الصفحة هي <strong><span style="font-family:courier new,courier,monospace;">stylesheet</span></strong> أي صفحة تصميم خارجية لأنه لا يكفي فقط إدراج رابط التصميم بل يجب تعريفه أيضاً.
</p>

<p dir="rtl" style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2015_04/figure-3.png.eae550176a0153251bbb7d91637c8948.png" rel="" data-fileid="1508" data-fileext="png"><img class="ipsImage ipsImage_thumbnailed" data-fileid="1508" alt="figure-3.png" src="https://academy.hsoub.com/uploads/monthly_2015_04/figure-3.thumb.png.8acbe87016bcaa9e2a5f07264f7a95e2.png"></a>
</p>

<p dir="rtl" style="text-align: center;">
	<span style="color:#808080;"><strong>الشكل 3:</strong> يظهر المتصفح Chrome جميع التصاميم التي تم تطبيقها في الصفحة وهي متصلة بملف تصميم خارجي باستخدام &lt;link&gt;</span>
</p>

<p dir="rtl">
	باختصار, أفضل طريقة لاستخدام التصاميم هي استخدام النوع الأخير ملف تصميم خارجي لأنه يوفّر الجهد والوقت وأيضاً سهولة التعديل على جميع تصميم الموقع من خلال ملف واحد. أيضاً عند استخدام ملف واحد لجميع صفحات الموقع عندها سيقوم المتصفح بتحميل ملف واحد للتصميم وحفظه كملف مؤقت وتطبيقه على جميع صفحات الموقع وبكلمات أخرى تحميل أقل للموقع.
</p>

<h3 dir="rtl">
	استيراد ملف التصميم
</h3>

<p dir="rtl">
	بصراحة هناك طريقة أخرى لاستيراد ملف تصميم خارجي إلى صفحات HTML وذلك من خلال استخدام خاصية <span style="font-family:courier new,courier,monospace;">import@</span> في الإدراج المضمر بنفس الطريقة كما شرحنا سابقاً شاهد المثال التالي:
</p>

<pre class="html ipsCode prettyprint" data-pbcklang="html" data-pbcktabsize="4">&lt;style type="text/css" media="screen"&gt;
  @import url(styles.css);
  /* باقي تعليمات الأنماط يمكن وضعها هنا */
&lt;/style&gt;</pre>

<p dir="rtl">
	أحياناً ستشاهد حالة <span style="font-family:courier new,courier,monospace;">import@</span> بدون أقواس لكنها تفعل الشيء نفسه. أيضاً هناك شيء يجب أن تكون حذراً بأن حالة <span style="font-family:courier new,courier,monospace;">import@</span> يجب أن تكون في السطر الأول في الإدراج المضمر. وأخيراً يمكنك تخصيص ملفات التصميم المستوردة والتي سيتم تطبيق أنواع الوسائط المختلفة عليها وذلك بإدراج نوع الوسائط (media) في آخر الحالة شاهد المثال التالي:
</p>

<pre class="html ipsCode prettyprint" data-pbcklang="html" data-pbcktabsize="4">&lt;style type="text/css"&gt;
  @import url(styles.css) screen;
  /* باقي تعليمات الأنماط يمكن وضعها هنا */
&lt;/style&gt;</pre>

<p dir="rtl">
	ربما ستسأل لماذا يجب عليّ استخدام نوع آخر لاستيراد ملف الإدراج الخارجي وتطبيقه على صفحات HTML؟ طبعاً يوجد القليل من المحاسن والمساوئ للخاصية <span style="font-family:courier new,courier,monospace;">import@</span> وعلى الرغم من أنها قليلة إلا أن الطريقة الشائعة والأفضل هي استيراد ملف الإدراج الخارجي من خلال <span style="font-family:courier new,courier,monospace;">&lt;link&gt;</span>.
</p>

<ul dir="rtl">
	<li>
		لا تعرف الإصدارات القديمة من المتصفحات الخاصية <span style="font-family:courier new,courier,monospace;">import@</span> مطلقاً (مثل متصفح Netscape 4 وما قبل وأيضاً IE4 وما قبل)، من حسن الحظ أنه لم يعد لهذه المتصفحات وجود تقريبا، لكن وجب التنويه.
	</li>
	<li>
		يمكن استخدام الخاصية <span style="font-family:courier new,courier,monospace;">import@</span> لإخفاء بعض التصميمات والتي من المحتمل أن تستخدم بطريقة خاطئة من قبل المتصفحات القديمة. يمكنك أيضاً استخدام التصميمات الحديثة واستيرادها من خلال <span style="font-family:courier new,courier,monospace;">import@</span> واستخدام بعض التصميمات الأساسية التي لا تتعارض مع المتصفحات القديمة. وطبعاً نادراً ما تقوم باستخدام هذه الحالات لنُدرة المتصفحات القديمة هذه.
	</li>
	<li>
		يمكنك -جدلا- القول بأن استخدام تعليمات <span style="font-family:courier new,courier,monospace;">import@</span> متعددة ينتُج عنه شِفرة برمجية أقل من استعمال عناصر <span style="font-family:courier new,courier,monospace;">&lt;link&gt;</span> متعددة، لكن فارق الحجم هنا مُهملٌ جدا لا يقتضي اعتباره.
	</li>
</ul>

<h2 dir="rtl">
	خاتمة
</h2>

<p dir="rtl">
	تعلمنا في هذا الدرس بعضًا من تطبيقات CSS مع صفحات HTML، بجميع أنواع التضمين، كالإدراج الداخلي حيث يمكنك استخدام لاحقة <span style="font-family:courier new,courier,monospace;">style</span> بداخل العنصر وأيضاً الإدراج المضمر حيث يمكنك إدراج التصميم داخل وسم <span style="font-family:courier new,courier,monospace;">&lt;style&gt;</span> ضمن الوسم الرئيسي <span style="font-family:courier new,courier,monospace;">&lt;head&gt;</span> وأخيرًا الإدراج الخارجي بملف مستقل. كما تعلمنا استيراد ملف الإدراج الخارجي من خلال استخدام الوسم <span style="font-family:courier new,courier,monospace;">&lt;link&gt;</span> (وهي الطريقة الأكثر شيوعاً هذه الأيام) أو باستخدام الخاصية <span style="font-family:courier new,courier,monospace;">import@</span>.
</p>

<h2 dir="rtl">
	أسئلة وتمارين
</h2>

<ul dir="rtl">
	<li>
		ماهي المحاسن والمساوئ عند استخدام الإدراج الداخلي وكيف يمكن تطبيقه على العنصر؟
	</li>
	<li>
		ماهي بنية تعليمات CSS؟ اشرح التركيبة والمكونات المختلفة.
	</li>
	<li>
		لنفترض أن لديك مجموعة من شِفرات التصميم. ماذا تحتاج أن تفعل لجعلهم ضمن ملف تصميم خارجي منفصل؟
	</li>
	<li>
		بماذا يطابق هذا المنتقى ul#nav؟
	</li>
	<li>
		ماهي المزايا أو المحاسن من تجميع المنتقى ؟
	</li>
	<li>
		كيف تعرّف أوراق CSS المخصصة للطباعة؟
	</li>
</ul>

<p>
	ترجمة -وبتصرّف- للمقال: <a href="https://dev.opera.com/articles/css-basics/" rel="external nofollow">CSS Basics</a> لصاحبه <a href="http://christianheilmann.com/" rel="external nofollow">Christian Heilmann</a>.
</p>
]]></description><guid isPermaLink="false">70</guid><pubDate>Mon, 27 Apr 2015 11:42:00 +0000</pubDate></item><item><title>&#x627;&#x644;&#x62F;&#x644;&#x64A;&#x644; &#x627;&#x644;&#x639;&#x645;&#x644;&#x64A; &#x644;&#x638;&#x644;&#x627;&#x644; &#x627;&#x644;&#x62E;&#x637;&#x648;&#x637; (text shadow) &#x641;&#x64A; CSS</title><link>https://academy.hsoub.com/programming/css/%D8%A7%D9%84%D8%AF%D9%84%D9%8A%D9%84-%D8%A7%D9%84%D8%B9%D9%85%D9%84%D9%8A-%D9%84%D8%B8%D9%84%D8%A7%D9%84-%D8%A7%D9%84%D8%AE%D8%B7%D9%88%D8%B7-text-shadow-%D9%81%D9%8A-css-r49/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2015_03/text-shadow-css_480x300.png.e7e11e10f2677c774466e215ae69dd12.png" /></p>

<p>سنتناول في هذه المقالة بقليلٍ من التفصيل شرح خاصّيّة هامّة من خواصّ أوراق الأنماط المُتتالية CSS وهي "ظلال النصّ" <span style="font-family:'courier new', courier, monospace;">text-shadows</span>، وتجدرُ الإشارة إلى أنه يوجد خاصّيّة مُشابهة لهذه الخاصّيّة وهي "ظلّ الصندوق" <span style="font-family:'courier new', courier, monospace;">box-shadow</span>، والخاصّيّتان مُعرفتان في وحدتين مختلفتين في المعايير القياسية لـ W3C على الرُغم من أنها مُتطابقتان إلى حدٍ كبير.</p><p>سيكون من السهل تعلّم خاصّيّة "ظلّ النصّ" عند توفر معرفة مُسبقة بخاصّيّة "ظلّ الصندوق"، ولكن قبل كل شيء لكي يُفهم الفرق بينهُما، يجب القراءة قليلًا عن الجانب النظري من الموضوع، ودعم المُتصفحات لهذه الخاصّيّة، ومن ثُمّ التطبيق مع الأمثلة العملية.</p><h2>دعمُ المتصفحات</h2><p>تدعمُ مُعظم المُتصفحات الحديثة الخاصّيّتان "ظلّ النصّ" و"ظلّ الصندوق" كما هو موضّح في الشكل التالي:</p><p style="text-align:center;"><a class="ipsAttachLink ipsAttachLink_image" rel="external nofollow" href="https://academy.hsoub.com/uploads/monthly_2015_03/browser-support-text-shadow.png.8fc67f050edd490ab0b35733bd776489.png"><img data-fileid="797" class="ipsImage ipsImage_thumbnailed" alt="browser-support-text-shadow.thumb.png.22" src="https://academy.hsoub.com/uploads/monthly_2015_03/browser-support-text-shadow.thumb.png.2216fe6dcfbce3a8e427ec54376aea0e.png"></a></p><p>يدعم المُتصفح Opera mini خاصّيّة "ظلّ النصّ" بشكل جزئيّ حيث لايَظهر تأثير الغشاوة blur على النصّ، وتُحاكي الإصدارات السابقة للإصدار العاشر من IE لخاصّيّة "ظلّ النصّ" باستخدام مُرشّحات filters غير معياريّة non-standard مثل مُرشّح <span style="font-family:'courier new', courier, monospace;">dropshadow</span>.</p><h2>الفرقُ بين "ظلّ النصّ" text-shadow و"ظلّ الصندوق" box-shadow</h2><p style="text-align:center;"><a class="ipsAttachLink ipsAttachLink_image" rel="external nofollow" href="https://academy.hsoub.com/uploads/monthly_2015_03/text-shadows.png.697cd69281ea62ec5d0083d3339e2b65.png"><img data-fileid="807" class="ipsImage ipsImage_thumbnailed" alt="text-shadows.thumb.png.259f2857a6774ae37" src="https://academy.hsoub.com/uploads/monthly_2015_03/text-shadows.thumb.png.259f2857a6774ae370d21a3b135f1a89.png"></a></p><p>طريقة كتابة الشيفرة الخاصّة بـ "ظلّ الصندوق" هي كالتالي:</p><pre class="css ipsCode prettyprint">box-shadow: none|h-shadow v-shadow blur spread color |inset|initial|inherit;</pre><p>أمّا طريقة كتابة الشيفرة البرمجية لـ "ظلّ النصّ" فهي كالتالي:</p><pre class="css ipsCode prettyprint">text-shadow: h-shadow v-shadow blur color|none|initial|inherit;</pre><p>تعملُ الخاصّيّتان بأسلوب مُماثل مع بعض الاستثناءات، حيثُ لا يُمكن إنشاء ظلّ داخليّ للنصِّ كما في خاصِّيَّة "ظلّ الصندوق"، كما لا يُمكن التحكم بمقدار التوسّع spread في "ظلّ النصّ"، ولكن يُمكن إنشاء أكثر من ظلّ لتُعرض فوق بعضها البعض بطريقة مُماثلة لـ "ظل الصندوق" كما سوف نوضّح بالأمثلة.</p><p>يُوضّح الشكل التالي الاختلاف بين المفاهيم الأربعة التي سوف نعمل عليها.</p><p style="text-align:center;"><a class="ipsAttachLink ipsAttachLink_image" rel="external nofollow" href="https://academy.hsoub.com/uploads/monthly_2015_03/box-shadow.png.8741c5cb18f895f27784e34d8480840e.png"><img data-fileid="796" class="ipsImage ipsImage_thumbnailed" alt="box-shadow.thumb.png.2500219b08d3c3ca2f9" src="https://academy.hsoub.com/uploads/monthly_2015_03/box-shadow.thumb.png.2500219b08d3c3ca2f99f0ff4b34d41f.png"></a></p><h2>الجانب العمليّ لخاصّيّة "ظلّ النصّ"</h2><h3>الألوان والإزاحة</h3><p>تُحرّكُ قيمُ الإزاحة الموجبة الظلّ بالاتجاه الأيمن والأسفل، وتُحرّكُ القيمُ السالبة الظلّ بالاتجاه المُعاكس أيّ نحو اليسار والأعلى.</p><p>تحديدُ لون الظلّ هو أمرٌ إختياريّ، وسيأخذ الظلّ لون العنصر الأب في حال عَدم تحديد لون مُحددٍ له، ويُنصح دائمًا بتحديد اللون وذلك لأن المُتصفّحات سوف تُظهر لون الظلّ بشكل مُختلف فيما بينها.</p><p>في الأمثلة التالية سوف نُحدّد الإزاحة الأُفقيّة والعموديّة مع ألوان مُخصّصة</p><pre class="css ipsCode prettyprint">text-shadow:10px 10px;
text-shadow:-5px -5px; color:blue;
text-shadow:-1px -1px white; color:blue; background:#888;
text-shadow:1px 1px rgba(255,255,255, 0.5); color:blue; background:#eee;
</pre><p style="text-align:center;"><span style="line-height:1.6;"><a class="ipsAttachLink ipsAttachLink_image" rel="external nofollow" href="https://academy.hsoub.com/uploads/monthly_2015_03/color-and-offsets.png.9d1c249cd8c0212dec3534bbc233d225.png"><img data-fileid="798" class="ipsImage ipsImage_thumbnailed" alt="color-and-offsets.thumb.png.29037511674c" src="https://academy.hsoub.com/uploads/monthly_2015_03/color-and-offsets.thumb.png.29037511674c1788524c2e3e98f35132.png"></a></span></p><h3>الغشاوة blur</h3><p>المُعامل الخاصّ بالغشاوة هو مُعاملٌ اختياريّ، وقيمته تُحدد مدى انتشار الغشاوة لحواف الظلّ، ويجب أن تكون قيمتُه موجبة، حيث القيمة صفر تعني بدون غشاوة، أي أنّ حواف الظلّ ستكون حادّة.</p><pre class="css ipsCode prettyprint">/*blur*/
.example1 {
  text-shadow:5px 5px 3px darkred; color:red;
}
.example2 {
  text-shadow:4px -4px 10px red; color:azure;  background:#333;
}
.example3 {
  text-shadow:0px 0px 4px ;
}
.parent-of-example3 {
  color:red;
}
.example4 {
  text-shadow:0px 0px 4px ;
}
.parent-of-example4 {
  color:lightgray; background:#333;
}</pre><p style="text-align:center;"><a class="ipsAttachLink ipsAttachLink_image" rel="external nofollow" href="https://academy.hsoub.com/uploads/monthly_2015_03/blur.png.d21967fc69b660d5338af3b8689fad23.png"><img data-fileid="795" class="ipsImage ipsImage_thumbnailed" alt="blur.thumb.png.f7209a5c198277fdbc77d0903" src="https://academy.hsoub.com/uploads/monthly_2015_03/blur.thumb.png.f7209a5c198277fdbc77d090345a59f3.png"></a></p><p>استخدمنا في المثال الأول والثاني غشاوة مُختلفة، حيثُ الأول 3px والثاني 10px، ولم نُحدد لون العنصر بشكل مُباشر في المثال الثالث والرابع بل على العنصر الأب.</p><h3>التوسّع والانكماش Expansion and contraction</h3><p>سوف يتم إضافة إمكانية تحديد التوسّع spread لخاصّيّة "ظلّ النصّ" في الإصدار الرابع من `أوراق الأنماط المُتتالية` CSS4، ولكن IE10 يدعم هذه الخاصّيّة مُنذ الآن، ولذلك في الأمثلة سوف يظهر تأثير هذا المُعامل parameter -وهو الرابع للخاصّيّة <span style="font-family:'courier new', courier, monospace;">text-shadow-</span> على المُتصفح IE10 وIE11.</p><p>تزيد القيّم الموجبة من توسّع الظلّ وتُقلّص القيّمُ السالبة من توسّع الظل، وتُستخدم القيمة صفر لإضافة حدود خارجية للنصّ.</p><pre class="css ipsCode prettyprint">text-shadow:5px 5px 0px 3px lightgreen; color:green;
text-shadow:8px 8px 2px -3px darkgreen; color:green; font-weight:900;
text-shadow:0 0 0 3px rgba(128, 255, 0, 0.75); color:green;  background:#333;

</pre><p style="text-align:center;"><span style="line-height:1.6;"><a class="ipsAttachLink ipsAttachLink_image" rel="external nofollow" href="https://academy.hsoub.com/uploads/monthly_2015_03/Expansion-and-contraction.png.f2af74890a9c68ec73ee4d615a091ffb.png"><img data-fileid="800" class="ipsImage ipsImage_thumbnailed" alt="Expansion-and-contraction.thumb.png.1581" src="https://academy.hsoub.com/uploads/monthly_2015_03/Expansion-and-contraction.thumb.png.15814c9de210b5f2a9b8f4c03bce3465.png"></a></span></p><h3>الظلّ المُتعدد Multiple shadow</h3><p>تُمكنك خاصّيّة "ظل الصندوق" من إنشاء أكثر من ظلّ لنفس النصّ، وذلك عبر كتابة قيمة كل ظلّ والفصل بينها بالفاصلة (,)</p><pre class="css ipsCode prettyprint">/*Multiple shadow*/
.example1 {
  text-shadow: 0 0 0 3px white, 0 0 0 4px gray; color:magenta;
}
.example2 {
  text-shadow: 3px 3px 4px 2px rgba(255,255,255,0.35),
               6px -6px 4px 2px rgba(255,255,255,0.25),
               -3px -3px 4px 6px rgba(255,0,255,0.15);
}
.example3 {
  text-shadow: 0 0 0 3px white,
               0 0 2px 6px magenta, 
               0 0 1px 9px white, 
               0 0 6px 12px magenta;
        color: magenta;
}
.example4 {
  text-shadow: 0 0 2px #fff,
               0 0 4px 2px rgba(255,255,255,0.5),
               0 0 6px 6px #f0f, 
               0 0 4px 7px #fff, 
               0 0 3px 15px #222, 
               -4px 0 2px 9px #f0f, 
               4px 0 2px 9px #f0f, 
               0 -4px 2px 9px #f0f, 
               0 4px 2px 9px #f0f;
        color: white;
}
.example5 {
  text-shadow: 0 -3px 3px 15px white, 0 1px 2px 9px;
        color: magenta;
}
</pre><p style="text-align:center;"><span style="line-height:1.6;"><a class="ipsAttachLink ipsAttachLink_image" rel="external nofollow" href="https://academy.hsoub.com/uploads/monthly_2015_03/Multiple-shadow.png.e9e0cc0568c62dc23cf1298cd8035d3f.png"><img data-fileid="804" class="ipsImage ipsImage_thumbnailed" alt="Multiple-shadow.thumb.png.0a889ae2d424c9" src="https://academy.hsoub.com/uploads/monthly_2015_03/Multiple-shadow.thumb.png.0a889ae2d424c9068ce089eba738cb1f.png"></a></span></p><h3>مُحاكات التوسّع Emulating expansion</h3><p>أشرت سابقًا إلى أنّ إمكانية عمل التوسّع spread للنصّ مُتوفرة فقط في الإصدار الرابع من CSS، ولكن يُمكن عمل مُحاكات لها في الإصدار الثالث.</p><pre class="css ipsCode prettyprint">text-shadow: 0px 0px 0px 4px magenta;
/* الشيفرة السابقة مُشابهة للشيفرة التالية */
text-shadow: 0px 2px magenta,
             2px 0px magenta,
             -2px 0px magenta,
             0px -2px magenta,
             -1.4px -1.4px magenta,
             1.4px 1.4px magenta,
             1.4px -1.4px magenta,
             -1.4px 1.4px magenta;
</pre><p style="text-align:center;"><span style="line-height:1.6;"><a class="ipsAttachLink ipsAttachLink_image" rel="external nofollow" href="https://academy.hsoub.com/uploads/monthly_2015_03/Emulating-expansion.png.38d949f2afa7ddba6f79fc884c964a60.png"><img data-fileid="799" class="ipsImage ipsImage_thumbnailed" alt="Emulating-expansion.thumb.png.74839e34c1" src="https://academy.hsoub.com/uploads/monthly_2015_03/Emulating-expansion.thumb.png.74839e34c1c1d84a94e7cbd33fe798f0.png"></a></span></p><p>كما هو مُبيّن في المثالين السابقين أنّ المُحاكات ليست مثاليّة من ناحية المظهر ودقّة الحواف الخاصة بالظلّ، وكما تختلفُ سرعة المُتصفح في عرض المثالين السابقين.</p><h2>أمثلة إضافية</h2><h3>ظلّ مزدوج</h3><p style="text-align:center;"><a class="ipsAttachLink ipsAttachLink_image" rel="external nofollow" href="https://academy.hsoub.com/uploads/monthly_2015_03/Twin-shadow.png.89710defbb1c23b79a962ada4422687d.png"><img data-fileid="808" class="ipsImage ipsImage_thumbnailed" alt="Twin-shadow.thumb.png.239f5e7203ea4112ed" src="https://academy.hsoub.com/uploads/monthly_2015_03/Twin-shadow.thumb.png.239f5e7203ea4112ed89a5274f4fc0e5.png"></a></p><pre class="css ipsCode prettyprint">/*Twin shadow*/
.twin {
  text-shadow: 0 0 2px 2px white, 
               2px 0 2px 5px #222, 
               3px 0 3px 6px #933, 
               5px 0 2px 14px #222, 
               6px 0 5px 16px #533;
  background-color: #222;
  color: white;
}
</pre><h3><span style="line-height:1.6;">تأثير Letter-press</span></h3><p style="text-align:center;"><a class="ipsAttachLink ipsAttachLink_image" rel="external nofollow" href="https://academy.hsoub.com/uploads/monthly_2015_03/Letter-press.png.72b71a4b81feec32cd9f755883359f9b.png"><img data-fileid="803" class="ipsImage ipsImage_thumbnailed" alt="Letter-press.thumb.png.436e3d5a627d0e997" src="https://academy.hsoub.com/uploads/monthly_2015_03/Letter-press.thumb.png.436e3d5a627d0e997e5ff0b6f84368aa.png"></a></p><pre class="css ipsCode prettyprint">/*Letter-press*/
.le-pr {
  text-shadow: 0px 2px 3px #555;
  background-color:#333;
}</pre><h3>قوس قزح</h3><p style="text-align:center;"><a class="ipsAttachLink ipsAttachLink_image" rel="external nofollow" href="https://academy.hsoub.com/uploads/monthly_2015_03/Rainbow.png.cb6bbe2b2784a804097311f5cad0bfbc.png"><img data-fileid="805" class="ipsImage ipsImage_thumbnailed" alt="Rainbow.thumb.png.12e014f7634bc7ea209070" src="https://academy.hsoub.com/uploads/monthly_2015_03/Rainbow.thumb.png.12e014f7634bc7ea2090703689b9d880.png"></a></p><pre class="css ipsCode prettyprint">/*Rainbow*/ /*IE*/
.rainbow {
  text-shadow: 0 0 2px 3px yellow, 
               0 0 2px 6px orange, 
               0 0 2px 9px red, 
               0 0 2px 12px lime, 
               0 0 2px 15px blue, 
               0 0 2px 18px violet;
}</pre><h3>ثلاثي الأبعاد</h3><p style="text-align:center;"><a class="ipsAttachLink ipsAttachLink_image" rel="external nofollow" href="https://academy.hsoub.com/uploads/monthly_2015_03/3D.png.082dfc020bd3219ade8e982cffe8bcfa.png"><img data-fileid="794" class="ipsImage ipsImage_thumbnailed" alt="3D.thumb.png.cdf74be3782a1c0c38f6e23f87f" src="https://academy.hsoub.com/uploads/monthly_2015_03/3D.thumb.png.cdf74be3782a1c0c38f6e23f87f92741.png"></a></p><pre class="css ipsCode prettyprint">/*3D*/
.threed {
  text-shadow: 0 0 1px #999, 
               1px 1px 1px #888, 
               2px 2px 1px #777, 
               3px 3px 1px #666, 
               4px 4px 1px #555, 
               5px 5px 1px #444;
  background-color:#333;
  color:white;
}</pre><h3>تأثير Retro</h3><p style="text-align:center;"><a class="ipsAttachLink ipsAttachLink_image" rel="external nofollow" href="https://academy.hsoub.com/uploads/monthly_2015_03/Retro.png.8f2c026a547651d78f782a7f60c5b1b3.png"><img data-fileid="806" class="ipsImage ipsImage_thumbnailed" alt="Retro.thumb.png.d3ffa6ec08900e4bae55019c" src="https://academy.hsoub.com/uploads/monthly_2015_03/Retro.thumb.png.d3ffa6ec08900e4bae55019cf6aabe58.png"></a></p><pre class="css ipsCode prettyprint">/*Retro / Vintage effect*/
 .retro {
   text-shadow: 2px 2px #fff, 
                3px 3px #666;
 }</pre><h3>الحرف الأول باستخدام "شبه الصنف" pseudo-class المُسمى "الحرف الأول" first-letter</h3><p style="text-align:center;"><a class="ipsAttachLink ipsAttachLink_image" rel="external nofollow" href="https://academy.hsoub.com/uploads/monthly_2015_03/First-letter-only_shadow.png.053d710877c872a0cb33b667eb07ab13.png"><img data-fileid="801" class="ipsImage ipsImage_thumbnailed" alt="First-letter-only_shadow.thumb.png.f1096" src="https://academy.hsoub.com/uploads/monthly_2015_03/First-letter-only_shadow.thumb.png.f10962455af164bf6a6df5b2a81bd302.png"></a></p><p> </p><pre class="css ipsCode prettyprint">/*First-letter-only shadow */
 .text { 
   text-shadow: 0 0 5px; 
 }
 .text::first-letter { 
   color:azure; 
   text-shadow: 0 0 5px, 
                0 0px 6px 3px blue, 
                0 -2px 6px 6px cyan, 
                0 -4px 9px 9px lightblue ; 
 }</pre><h3>التوهج</h3><p style="text-align:center;"><a class="ipsAttachLink ipsAttachLink_image" rel="external nofollow" href="https://academy.hsoub.com/uploads/monthly_2015_03/flame.png.8481110d30475c24069fd791c5777550.png"><img data-fileid="802" class="ipsImage ipsImage_thumbnailed" alt="flame.thumb.png.143cc853a9a3a5e4f23c0bed" src="https://academy.hsoub.com/uploads/monthly_2015_03/flame.thumb.png.143cc853a9a3a5e4f23c0bedba509054.png"></a></p><pre class="css ipsCode prettyprint">.flame {
  text-shadow: 0 0 2px #eee, 
               0 0 4px 2px #fff, 
               0 -2px 4px 2px #ff3, 
               2px -4px 6px 4px #fd3, 
               -2px -6px 11px 6px #f80, 
               2px -8px 18px 8px #f20;
  background-color:#222;
  color:white;
}
</pre><p>ترجمة -وبتصرّف- للدّرس <a rel="external nofollow" href="http://www.script-tutorials.com/practice-with-text-shadows/">Practice with Text Shadows</a></p>
]]></description><guid isPermaLink="false">49</guid><pubDate>Wed, 25 Mar 2015 07:14:00 +0000</pubDate></item><item><title>&#x623;&#x633;&#x627;&#x633;&#x64A;&#x651;&#x627;&#x62A; &#x627;&#x644;&#x62A;&#x64E;&#x645;&#x64E;&#x648;&#x652;&#x636;&#x64F;&#x639; &#x639;&#x644;&#x649; &#x635;&#x641;&#x62D;&#x627;&#x62A; &#x627;&#x644;&#x648;&#x64A;&#x628; (CSS Positioning 101)</title><link>https://academy.hsoub.com/programming/css/%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D9%91%D8%A7%D8%AA-%D8%A7%D9%84%D8%AA%D9%8E%D9%85%D9%8E%D9%88%D9%92%D8%B6%D9%8F%D8%B9-%D8%B9%D9%84%D9%89-%D8%B5%D9%81%D8%AD%D8%A7%D8%AA-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-css-positioning-101-r46/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2015_03/css-positioning_480x300.png.0754ff4f86af64b14efb8868c927c3a0.png" /></p>

<p><span style="font-size:14px;line-height:1.6;">إنّ أي مُطوّر أو مُصمّم يُحب كتابة الشيفرة البرمجية، ستكون تقسيمات الصفحة layouts المُعتمدة على </span><span style="font-size:14px;line-height:1.6;">أوراق الأنماط المُتتالية</span><span style="font-size:14px;line-height:1.6;"> هي صميم وجوهر عمله. فيما قد تكون هذه المقالة مُراجعة للبعض، أو حتّى تصحيح بعض المفاهيم للبعض الآخر، سيتمّ تناول خاصّيّة التَمَوْضُع </span><span style="font-size:14px;line-height:1.6;">position</span><span style="font-size:14px;line-height:1.6;">، وكيفيّة استخدامها في تصميم تقسيمات صفحة layouts مُسايرة ومُتوافقة مع المعايير القياسيّة، ولا تعتمد على الجداول.</span></p><p>يُساء فهمُ خاصّيّة التَمَوْضُع، ممّا يؤدي في بعض الأحيان عند تصحيح علّة مُعينة في شيفرةٍ ما من المُمْكن أنّ يتمّ استخدام قيم مُختلفة بأسلوب التجربة والخطأ للخاصّيّة <span style="font-family:'courier new', courier, monospace;">position</span> لمُحددٍ ما حتّى يتمّ الحصول على القيمة المطلوبة. إنّ هذه الطريقة المُملّة قد تفي بالغرض، ولكن من المُفترض على المُطوّر معرفة بالتحديد لماذا القيمة <span style="font-family:'courier new', courier, monospace;">position: relative</span> قد استطاعت إصلاح مُشكلة ما في تقسيم الصفحة دون قيمة أُخرى. هدف هذا الشرح هو تعلّم دلالات قيمة الخاصّيّة <span style="font-family:'courier new', courier, monospace;">position</span> وتأثيرها على الصفحة، وبالأخصّ، كيف سوف تؤثّر هذه القيم على بقية أجزاء الصفحة (markup).</p><p>يُقدم بَيان specification أوراق الأنماط المُتتالية خمس خواصٍّ وهي:</p><ul><li>ساكن: <span style="font-family:'courier new', courier, monospace;">static</span></li><li>نسبيّ: <span style="font-family:'courier new', courier, monospace;">relative</span></li><li>كامل أو مُطلق: <span style="font-family:'courier new', courier, monospace;">absolute</span></li><li>ثابت: <span style="font-family:'courier new', courier, monospace;">fixed</span></li><li>مَوروث: <span style="font-family:'courier new', courier, monospace;">inherit</span></li></ul><p>كما تمّ إضافة قيم جديدة ولكنها مازالت في مرحلة <a rel="external nofollow" href="http://dev.w3.org/csswg/css-position-3/#position-property">"مسودة عمل"</a>.</p><p>يُستفاد من كل خاصّيّة لغرضٍ مُعينٍ، لذلك فَهمُ الغرض من كلٍ منها هو الطريق الأمثل لاحتراف تقسيمات الصفحة المُعتمدة على CSS.</p><h3>الخطوات الأولى مع أليّة عمل خواصّ التَمَوْضُع</h3><p>سيتمّ العودة إلى الأساسيّات لفهم الأمور بشكلٍ صحيحٍ. في CSS وبطبيعة الحال، يتمّ العمل ضمن حدود وقواعد ما يهم هُنا هو ما يُدعى بـ "التدفّق الطبيعيّ" <a rel="external nofollow" href="http://www.w3.org/TR/CSS21/visuren.html#normal-flow">normal flow</a>.</p><p>في العودة إلى بيان مُنظمة رابطة الشبكة العالميّة W3C سيكون تعريف التدفّق الطبيعيّ بالشكل التّالي:</p><blockquote><blockquote class="ipsQuote" data-cite="اقتباس" data-ipsquote=""><p>Boxes in the normal flow belong to a formatting context, which may be block or inline, but not both simultaneously. Block boxes participate in a block formatting context. Inline boxes participate in an inline formatting context.</p></blockquote><p> </p><blockquote class="ipsQuote" data-cite="اقتباس" data-ipsquote=""><p>الصناديق في التدفّق الطبيعيّ تَنتمي إلى سياق التنسيق والّذي قد يكون ضمنيّ على نفس السطر inline أو على كامل السطر block، ولكن ليس كلاهما في نفس الوقت. حيثُ أنّ الصناديق الّتي تُعرض على كامل السطر تُشارك في سياق التنسيق بهذا الشكل، والصناديق الّتي تُعرض بشكل ضمنيّ تُشارك في سياق التنسيق بهذا الشكل.</p></blockquote></blockquote><p>يُمكن اعتبار الصندوق المَذكور في البيان السابق كالصندوق الخشبي، والتدفّق الطّبيعيّ كما لو أنّه قانون كما هو قانون الجاذبيّة، التدفّق الطّبيعيّ للمُستند يُعبر عن اصطفاف العناصر فوق بعضها البعض تدريجيًّا من الأعلى إلى الأسفل، لكي تَظهر بالشّكل المُفترض لها أنّ تظهر عليه. يُمكن تشبيه التدفّق الطّبيعيّ بصناديق (مُكعبات) الأحرف الأبجديّة الّتي يُبنى منها ذلك البرج الضخم -الّذي يبنيه الأطفال بشكل مُتسلسل للأحرف- حيثُ أنّ هذه الصناديق الخشبيّة مُقيّدة بفعل الجاذبيّة الأرضيّة، ولا يُمكن إعطائها خصائص تُعارض قانون الجاذبيّة. في الجهة المُقابلة تتبع العناصر بعضها البعض في ترتيب عناصر الصفحة الخاصّة بمُستند HTML. ولكن من المُمكن إعطاء هذه العناصر خصائص لتُعرض بشكلٍ مخالفٍ لترتيبها الطبيعيّ.</p><h2>الخاصيّتان <span style="font-family:'courier new', courier, monospace;line-height:11.1999998092651px;">static </span>و<span style="font-family:'courier new', courier, monospace;line-height:11.1999998092651px;"> relative</span></h2><p>تشبه خاصِّيَّات التَمَوْضُع "ساكن" <span style="font-family:'courier new', courier, monospace;">static</span> و "نسبيّ" <span style="font-family:'courier new', courier, monospace;">relative</span> سلوك صناديق الأبجديّة، حيثُ أنّها تصطفّ فوق بعضها البعض كما هو مُتوقعٌ لها. مع الانتباه إلى أنّ الخاصّيّة <span style="font-family:'courier new', courier, monospace;">static</span> هي القيمة الافتراضيّة للخاصّيّة <span style="font-family:'courier new', courier, monospace;">position</span> لأي عنصر. وعندما يكون هناك ثلاثة عناصر تحمل الخاصّيّة <span style="font-family:'courier new', courier, monospace;">static</span> فإنّها سوف تصطفّ فوق بعضها البعض. في المثال التّالي يوجد ثلاثة عناصر جميعها تحمل القيمة <span style="font-family:'courier new', courier, monospace;">static</span>.</p><pre class="css ipsCode prettyprint">#box_1 { 
  position: static;
  width: 200px;
  height: 200px;
  background: #ee3e64;
}
#box_2 { 
  position: static;
  width: 200px;
  height: 200px;
  background: #44accf;
}
#box_3 { 
  position: static;
  width: 200px;
  height: 200px;
  background: #b7d84b;
}</pre><p style="text-align:center;"><a class="ipsAttachLink ipsAttachLink_image" rel="external nofollow" href="https://academy.hsoub.com/uploads/monthly_2015_03/css-positioning-static.png.f829c4bf9c2edc71ec65ada466e4855c.png"><img data-fileid="743" class="ipsImage ipsImage_thumbnailed" alt="css-positioning-static.thumb.png.911d893" src="https://academy.hsoub.com/uploads/monthly_2015_03/css-positioning-static.thumb.png.911d893bcd50f178c522934a6b4f198b.png"></a></p><p>يُلاحظ من المثال السابق كيف أنّ هذه الصناديق تصطفّ فوق بعضها البعض. هذه الفكرة على بساطتها تعتبر أساسيات بناء الكتل block building ومن المُهم جدًا إدراكُها.</p><p>يُمكن استخدام القيمة <span style="font-family:'courier new', courier, monospace;">static</span> لإنشاء تقسيمات صفحة مُبسّطة بعمود واحد single-column، حيثُ كل عنصر يتموضع فوق العنصر الّذي يليه. وعند الرغبة في نقل هذه العناصر فيما بينها باستخدام خواصّ الإزاحة <span style="font-family:'courier new', courier, monospace;">offset</span> مثل: الأعلى <span style="font-family:'courier new', courier, monospace;">top</span>، اليمين <span style="font-family:'courier new', courier, monospace;">right</span>، الأسفل <span style="font-family:'courier new', courier, monospace;">bottom</span>، اليسار <span style="font-family:'courier new', courier, monospace;">left</span> ستكون النتائج غير مُرضيةٍ أبدًا، حيثُ لا تؤثر هذه الخواصّ على عنصر ساكن <span style="font-family:'courier new', courier, monospace;">static</span> (أي يقوم بتجاهلها). كما لا يستطيع العنصر الساكن إنشاء نسق إحداثيَّات جديد للعنصر الابن. ولكن ما هو نسق الإحداثيَّات، هذا ما سيتمّ توضيحه باستخدام القيمة نسبيّ <span style="font-family:'courier new', courier, monospace;">relative</span>.</p><p>تتصرّف العناصر المُتموضعة بشكل نسبيّ <span style="font-family:'courier new', courier, monospace;">relative</span> كما هي العناصر المُتموضعة بشكل ساكن <span style="font-family:'courier new', courier, monospace;">static</span>، حيثُ تتوافق فيما بينها بشكل مُتناسق، من دون أنّ تسبب أي مشاكل. قد يبدو الأمر غريبًا، ولكن عند تطبيق القيمة <span style="font-family:'courier new', courier, monospace;">relative</span> على المثال السابق ستكون النتائج مُشابهة للمثال السابق:</p><pre class="css ipsCode prettyprint">#box_1 { 
  position: relative;
  width: 200px;
  height: 200px;
  background: #ee3e64;
}
#box_2 { 
  position: relative;
  width: 200px;
  height: 200px;
  background: #44accf;
}
#box_3 { 
  position: relative;
  width: 200px;
  height: 200px;
  background: #b7d84b;
}</pre><p style="text-align:center;"><a class="ipsAttachLink ipsAttachLink_image" rel="external nofollow" href="https://academy.hsoub.com/uploads/monthly_2015_03/css-positioning-relative.png.1bcf89bf83981361b0f51ecb96cee84e.png"><img data-fileid="742" class="ipsImage ipsImage_thumbnailed" alt="css-positioning-relative.thumb.png.4e207" src="https://academy.hsoub.com/uploads/monthly_2015_03/css-positioning-relative.thumb.png.4e207e81206f4acc4781454c1e318d98.png"></a></p><p>يُبرهن المثال السابق كيف أنّ العناصر المُتموضعة بشكل نسبيّ relatively تسلك سلوك العناصر المُتموضعة بشكل ساكن statically. لكن ما هو غير واضح أنّ هذه العناصر الّتي تحمل القيمة <span style="font-family:'courier new', courier, monospace;">relative</span> تختلف بمَيْزة هامة جدًا عن العناصر الّتي تحمل القيمة <span style="font-family:'courier new', courier, monospace;">static</span>.</p><p>يكمُن الاختلاف الأوَّليّ في أنّ العناصر المُتموضعة بشكل نسبيّ من المُمكن تعديل مَوضعها باستخدام خاصِّيَّات الإزاحة: <span style="font-family:'courier new', courier, monospace;">top</span> و <span style="font-family:'courier new', courier, monospace;">right</span> و <span style="font-family:'courier new', courier, monospace;">bottom</span> و <span style="font-family:'courier new', courier, monospace;">left</span>. سيتمّ استخدام المثال السابق، ولكن بإضافة تَمَوْضُع الإزاحة على الصندوق الثاني “<span style="font-family:'courier new', courier, monospace;">box_2</span>”:</p><pre class="css ipsCode prettyprint">#box_2 { 
  position: relative;
  left: 200px;
  width: 200px;
  height: 200px;
  background: #44accf;
}</pre><p style="text-align:center;"><a class="ipsAttachLink ipsAttachLink_image" rel="external nofollow" href="https://academy.hsoub.com/uploads/monthly_2015_03/css-positioning-offset-top.png.d7c46bbaf38aa6a99e4c85c5bbaad2f2.png"><img data-fileid="739" class="ipsImage ipsImage_thumbnailed" alt="css-positioning-offset-top.thumb.png.e21" src="https://academy.hsoub.com/uploads/monthly_2015_03/css-positioning-offset-top.thumb.png.e21cc5015a27427f75245384f7a954dc.png"></a></p><p>يُظهر المثال السابق التَمَوْضُع النسبيّ بشكلٍ عمليٍّ. حيثُ أنّ الصناديق الثّلاثة مُتموضعة فوق بعضها ماعدا الصندوق الثّاني فقد تمّ دفعه <span style="font-family:'courier new', courier, monospace;">200px</span> من اليسار. في هذا المثال قد تمّ كسر قانون الجاذبية بناءً على رغبتنا. ومازال الصندوق الأزرق ينتمي إلى التدفّق العام الخاصّ بمُستند HTML، حيثُ أنّ الصندوق الأخضر يأتي أسفل الصندوق الأزرق على الرغم من أنّ الصندوق الأزرق ليس فوقه بشكل مُباشر. عند استخدام خاصِّيَّات الإزاحة لنقل عنصر مُتموضع بشكلٍ نسبيٍّ، فإن ذلك لا يؤثّر على العنصر أو العناصر التّالية، حيثُ أن الصندوق الأخضر مازال مُتموضعًا كما لو كان الصندوق الأزرق غير مُزَاح. وهو أمرٌ لا ينطبق على التشبيه الخاصّ بصناديق الأبجديّة.</p><p>يُعتبر إنشاء نسق إحداثيَّات للعنصر الابن مَيْزةً أُخرى من ميزات خاصيّة التَمَوْضُع النسبيّ. حيثُ يُمثل هذا النسق نقطةً مرجعيّةً لخاصِّيَّات الإزاحة. سيتمّ العودة إلى المثال السابق لتوضيح هذه الفكرة، حيثُ أنّ الصندوق الأزرق لا يتموضع داخل أيًا من العناصر، لذلك نسق الإحداثيَّات المُستخدم لإزاحة نفسه <span style="font-family:'courier new', courier, monospace;">200px</span> من جهة اليسار يعود إلى المُستند نفسه. ولو تمّ وضع الصندوق الثّاني داخل الصندوق الأول، سيتمّ الحصول على نتائج مُختلفة، حيثُ أنّ الصندوق الثّاني سيتموضع نِسْبَة إلى نسق الإحداثيّات من الصندوق الأول (الأحمر). في المثال التّالي سيتمّ التعديل على مُستند HTML دون التعديل على التنسيق CSS، وذلك بنقل الصندوق الثّاني داخل الصندوق الأول:</p><pre class="html ipsCode prettyprint">&lt;div id="box_1"&gt;
  &lt;div id="box_2"&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/css-positioning-relative-example-d.png.1c67f17776b355e95b7fc51f4d68202f.png"><img data-fileid="741" class="ipsImage ipsImage_thumbnailed" alt="css-positioning-relative-example-d.thumb" src="https://academy.hsoub.com/uploads/monthly_2015_03/css-positioning-relative-example-d.thumb.png.95c93b0e04b5f685e1893a23edea5b8d.png"></a></p><p>يُظهر المثال السابق ترميز مُستند HTML الجديد. وبسبب نسق الإحداثيّات الجديد، يقيس الصندوق الأزرق إزاحته 200px من جهة اليسار نسبةً إلى المكان الّذي كان سيكون عليه الصندوق الأزرق لو لم يكن مُتموضعا بشكلٍ نسبيٍّ.</p><h2>القيمة <span style="font-family:'courier new', courier, monospace;">Absolute</span></h2><p>تُمثّل القيمة <span style="font-family:'courier new', courier, monospace;">absolute</span> درجة عالية من الأهمية وأكثر من سابقتها <span style="font-family:'courier new', courier, monospace;">relative</span>، حيثُ التخصيص هو ما يُميز هذه القيمة. يُسحب العنصر المُتموضع بشكلٍ نسبيٍّ من التدفّق الطّبيعيّ، وذلك عكس ما يتمّ في العناصر الّتي تحمل القيمة <span style="font-family:'courier new', courier, monospace;">relative</span> و <span style="font-family:'courier new', courier, monospace;">static</span>. ويمكن التحكم بالعنصر بطريقةٍ مرنة عندما يتمّ سحبه من التدفّق الطّبيعيّ، حيثُ يُمكن وضعه في أي مكان من دون أنّ يؤثّر أو يتأثّر بباقي العناصر المُنتمية إلى هذا التدفّق. يُمكن التفكير بهذه العناصر كما لو أنّ لها على الجهة الخلفية قطعة كبيرة من مشبك <a rel="external nofollow" href="https://ar.wikipedia.org/wiki/%D9%81%D9%8A%D9%84%D9%83%D8%B1%D9%88">velcro</a>، حيثُ يُمكن إلصاق هذه العناصر في أي مكان حسب الرغبة والحاجة. تَستجيب العناصر المُتموضعة بشكل مُطلق (كامل) absolutely إلى خاصِّيَّات الإزاحة. حيثُ يُمكن تحديد القيم <span style="font-family:'courier new', courier, monospace;">top: 100px</span> و <span style="font-family:'courier new', courier, monospace;">left: 200px</span> للعنصر ليتوضع العنصر بالضَّبط <span style="font-family:'courier new', courier, monospace;">100px</span> من الجهة العلوية و<span style="font-family:'courier new', courier, monospace;">200px</span> من الجهة اليُسرى للمُستند. سيتمّ التوضيح بالمثال التّالي وباستخدام أربعة صناديق:</p><pre class="html ipsCode prettyprint">#box_1 { 
  position: absolute;
  top: 0;
  left: 0;
  width: 200px;
  height: 200px;
  background: #ee3e64;
}
#box_2 { 
  position: absolute;
  top: 0;
  right: 0;
  width: 200px;
  height: 200px;
  background: #44accf;
}
#box_3 { 
  position: absolute;
  bottom: 0;
  left: 0;
  width: 200px;
  height: 200px;
  background: #b7d84b;
}
#box_4 { 
  position: absolute;
  bottom: 0;
  right: 0;
  width: 200px;
  height: 200px;
  background: #ebde52;
}
</pre><p style="text-align:center;"><a class="ipsAttachLink ipsAttachLink_image" rel="external nofollow" href="https://academy.hsoub.com/uploads/monthly_2015_03/css-positioning-position-absolute-example-e.png.9406364e23e3e028b99f0b1b07aa2062.png"><img data-fileid="740" class="ipsImage ipsImage_thumbnailed" alt="css-positioning-position-absolute-exampl" src="https://academy.hsoub.com/uploads/monthly_2015_03/css-positioning-position-absolute-example-e.thumb.png.d4a0c3988518f9d9e29952f5aaee4dea.png"></a></p><p>يُظهر المثال السابق أربعة صناديق تتموضع في زَوايا المُتصفّح الأربع، وذلك بسبب أنّ كل صندوق يحمل القيمة <span style="font-family:'courier new', courier, monospace;">absolute</span> للخاصيّة <span style="font-family:'courier new', courier, monospace;">position</span>، بكلماتٍ أُخرى تمّ إلصاق هذه الصناديق في كل زاوية من زوايا نافذة المُتصفّح. ستبقى هذه الصناديق بالزاوية الخاصّة بها عند تغيير حجم المُتصفّح. وإنّ تصغير حجم المُتصفّح بحيثُ تتداخل أو تتشابك هذه الصناديق مع بعضها لن يُحدث أي تفاعل فيما بينها على الإِطْلاق، أي لن يزيح أحدها الآخر، وكأنّ كل صندوق في طبقةٍ مُختلفة، وذلك لأنّ هذه الصناديق قد أصبحت خارج التدفّق الطبيعيّ للمُستند.</p><p>تُنشئ العناصر المُنسّقة بالقيمة <span style="font-family:'courier new', courier, monospace;">absolute</span> نسق إحداثيَّات جديد للعناصر الأبناء الخاصّة بها. المثال التّالي يوضّح كيف أنّ الصناديق البرتقاليّة الصغيرة تتموضع داخل الصناديق الآباء الخاصّة بها، وإحداثيّات الإزاحة مُرتبطة بالعناصر الآباء لا بنافذة المُتصفّح.</p><pre class="html ipsCode prettyprint">&lt;div id="box_1" class="box"&gt;
  &lt;div class="orange"&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div id="box_2" class="box"&gt;
  &lt;div class="orange"&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div id="box_3" class="box"&gt;
  &lt;div class="orange"&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div id="box_4" class="box"&gt;
  &lt;div class="orange"&gt;&lt;/div&gt;
&lt;/div&gt;}
.box { position: absolute; width: 200px; height: 200px; }
#box_1 { background: #ee3e64; top: 0; left: 0; }
#box_2 { background: #44accf; top: 0; right: 0; }
#box_3 { background: #b7d84b; bottom: 0; left: 0; }
#box_4 { background: #ebde52; bottom: 0; right: 0; }
.orange { background: #f95b34; position: absolute; top: 39%; left: 41%; width: 40px; height: 40px; }
</pre><p style="text-align:center;"><a class="ipsAttachLink ipsAttachLink_image" rel="external nofollow" href="https://academy.hsoub.com/uploads/monthly_2015_03/css-positioning-example-f.png.f202a53fc5b6e9b5effa408824b3b1d2.png"><img data-fileid="731" class="ipsImage ipsImage_thumbnailed" alt="css-positioning-example-f.thumb.png.aed7" src="https://academy.hsoub.com/uploads/monthly_2015_03/css-positioning-example-f.thumb.png.aed71d50107af72a7788bc4be51de55b.png"></a></p><p>تُقدم القيمة <span style="font-family:'courier new', courier, monospace;">absolute</span> خصائص مُميّزة عند استخدام قيم الإزاحة معها، حيثُ سيُصبح من المُمْكن تَمْديد العنصر من دون تحديد أيًا من أبعاد العَرض <span style="font-family:'courier new', courier, monospace;">width</span> أو الارتفاع <span style="font-family:'courier new', courier, monospace;">height</span>، والّتي ستكون مُختلفة بناءً على حجم نافذة المُتصفح أو قياس الشاشة. وعليه فإنّ العنصر الابن سيكون مُقيّدًا بالعنصر الأب الخاصّ به، أو المُستند نفسه. المثال التّالي سيُوضح الفكرة:</p><pre class="css ipsCode prettyprint">a { 
  position: absolute; 
  top: 10px;
  right: 10px;
  bottom: 10px;
  left: 10px; 
  background: #44accf; 
}
#box_b { 
  position: absolute; 
  top: 20px;
  right: 20px; 
  bottom: 20px; 
  left: 20px; 
  background: #ff9c34;
}</pre><p style="text-align:center;"><a class="ipsAttachLink ipsAttachLink_image" rel="external nofollow" href="https://academy.hsoub.com/uploads/monthly_2015_03/css-positioning-example-g.png.173091cbc2bc89b14301fbc090f3e656.png"><img data-fileid="734" class="ipsImage ipsImage_thumbnailed" alt="css-positioning-example-g.thumb.png.2b0d" src="https://academy.hsoub.com/uploads/monthly_2015_03/css-positioning-example-g.thumb.png.2b0df0c247f8ab2b4e8091f29fb8c97b.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/css-positioning-example-g-2.png.2949c3d5a3f971e38019001df9188685.png"><img data-fileid="732" class="ipsImage ipsImage_thumbnailed" alt="css-positioning-example-g-2.thumb.png.41" src="https://academy.hsoub.com/uploads/monthly_2015_03/css-positioning-example-g-2.thumb.png.416ed49cf3ea8001b6b9572268f86cba.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/css-positioning-example-g-3.png.9643811f5751795a991659b1a05c1363.png"><img data-fileid="733" class="ipsImage ipsImage_thumbnailed" alt="css-positioning-example-g-3.thumb.png.dc" src="https://academy.hsoub.com/uploads/monthly_2015_03/css-positioning-example-g-3.thumb.png.dcc52ba1fd6d014a9c1c288c0cceb30f.png"></a></p><p>يُوضّح المثال السابق كيف أنّ العناصر قد أصبحت أكثر مُرونة fluid، حيثُ يَتغيّر حجمها مع تَغيّر حجم الصفحة. ويوضّح المثال التّالي كيفيّة إنشاء صفحة بعمودين وبارتفاع الصفحة بالكامل.</p><pre class="css ipsCode prettyprint">#box_1 { 
  position: absolute;
  top: 0;
  right: 20%; 
  bottom: 0;
  left: 0;
  background: #ee3e64;
}
#box_2 { 
  position: absolute; 
  top: 0; 
  right: 0; 
  bottom: 0; 
  left: 80%; 
  background: #b7d84b;
}
</pre><p style="text-align:center;"><a class="ipsAttachLink ipsAttachLink_image" rel="external nofollow" href="https://academy.hsoub.com/uploads/monthly_2015_03/css-positioning-two-column-example-h.png.34f050ac972de216a1825a2307534c38.png"><img data-fileid="744" class="ipsImage ipsImage_thumbnailed" alt="css-positioning-two-column-example-h.thu" src="https://academy.hsoub.com/uploads/monthly_2015_03/css-positioning-two-column-example-h.thumb.png.56db00977d2e55744c0f441321763522.png"></a></p><p>يُظهر المثال السابق تقسيم صفحة بعمودين، والّذي يُوضّح ما يُمكن عمله باستخدام القيمة <span style="font-family:'courier new', courier, monospace;">absolute</span>. أخذًا بعين الاعتبار أنّ هذا الأسوب ليس أفضل طريقة في إنشاء تقسيم صفحة بعمودين. يُمكن استخدام بعض الحِيَل في إيجاد تطبيقات عمليّة لهذه الخاصّيّة. على سبيل المثال:</p><pre class="css ipsCode prettyprint">#box_1 { 
  width: 200px;
  height: 200px;
  background: #ee3e64;
}
#box_2 { 
  position: absolute;
  left: 100px;
  width: 200px;
  height: 200px;
  background: #44accf;
}
</pre><p style="text-align:center;"><a class="ipsAttachLink ipsAttachLink_image" rel="external nofollow" href="https://academy.hsoub.com/uploads/monthly_2015_03/css-positioning-example-h2.png.5ddeef14423fcaabcbcb98149b12974b.png"><img data-fileid="735" class="ipsImage ipsImage_thumbnailed" alt="css-positioning-example-h2.thumb.png.48c" src="https://academy.hsoub.com/uploads/monthly_2015_03/css-positioning-example-h2.thumb.png.48c86e39c9043a9b0db8b151865e6216.png"></a></p><p>عند التركيز في المثال السابق والصندوق الثّاني بالتحديد، سيتمّ مُلاحظة كيفيّة استخدام قيمة إزاحة واحدة left: 100px;، وهذا ما يَسمح للصندوق الثّاني في الحفاظ على حافته العلوية في مكانها مع مقدرته على الانتقال 100px من جهة اليسار، ولكن عند تطبيق قيمة إزاحة ثانية إلى الجهة العلوية، سيتمّ سحب الصندوق الأزرق إلى أعلى المُستند:</p><pre class="css ipsCode prettyprint">#box_2 { 
  position: absolute;
  top: 0;
  left: 100px;
  width: 200px;
  height: 200px;
  background: #44accf;
}
</pre><p style="text-align:center;"><a class="ipsAttachLink ipsAttachLink_image" rel="external nofollow" href="https://academy.hsoub.com/uploads/monthly_2015_03/css-positioning-example-h3.png.835c9c67dd81be79312e9dd88868981b.png"><img data-fileid="736" class="ipsImage ipsImage_thumbnailed" alt="css-positioning-example-h3.thumb.png.cab" src="https://academy.hsoub.com/uploads/monthly_2015_03/css-positioning-example-h3.thumb.png.cabc35796cda07b61bc7c44b584b06b1.png"></a></p><h2>القيمة ثابت <span style="font-family:'courier new', courier, monospace;">Fixed</span></h2><p>يُشارك العنصر الّذي يحمل التنسيق <span style="font-family:'courier new', courier, monospace;">position: fixed</span> جميع الأحكام والقواعد الّتي يحملها العنصر المُتموضع بشكل مُطلق absolutely، حيثُ أنّ العنصر يُسحب من التدفّق الطّبيعيّ للمُستند. ويكمُن الاختلاف في أنّ العنصر الثّابت <span style="font-family:'courier new', courier, monospace;">fixed</span> يتمَوضع نسبة إلى المُستند، وليس إلى عنصر أب مُعيّن. كما لا يتأثر العنصر الثابت بالتدرّج، فيبقى في مجال الرؤية مهما تمّ النزول أو الصعود في الصفحة.</p><pre class="css ipsCode prettyprint">#box_2 {
  position: fixed; 
  top: 0; 
  left: 0; 
  right: 0; 
}
</pre><p style="text-align:center;"><a class="ipsAttachLink ipsAttachLink_image" rel="external nofollow" href="https://academy.hsoub.com/uploads/monthly_2015_03/css-positioning-fixed.png.6a6a801ace9d9343a12ad0d73373c1fe.png"><img data-fileid="738" class="ipsImage ipsImage_thumbnailed" alt="css-positioning-fixed.thumb.png.29666d20" src="https://academy.hsoub.com/uploads/monthly_2015_03/css-positioning-fixed.thumb.png.29666d208308180c49e74dbf01dafe0a.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/css-positioning-fixed-ar.gif.4203a02d06c28f614a05d550fdcff3e9.gif"><img data-fileid="737" class="ipsImage ipsImage_thumbnailed" alt="css-positioning-fixed-ar.thumb.gif.0daa3" src="https://academy.hsoub.com/uploads/monthly_2015_03/css-positioning-fixed-ar.thumb.gif.0daa36f775bf91760c172b479d047cdd.gif"></a></p><p>يُظهر المثال السابق شريطًا عُلويًّا يحتوي على نصّ، وذلك كعنصر fixed، من المُلاحظ عدم تحرك هذا الشريط عند التدرّج في الصفحة. أيضًا من المُلاحظ أنّ خاصِّيَّات الإزاحة <span style="font-family:'courier new', courier, monospace;">left</span> و<span style="font-family:'courier new', courier, monospace;">right</span> تحمل القيمة صفر. باعتبار أنّ القيمة fixed تنتهج سلوكًا مشابهًا لسلوك القيمة <span style="font-family:'courier new', courier, monospace;">absolute</span>، فمن المُمكن أنّ يتمّ تمديد عرض العنصر ليتناسب مع مجال الرؤية عند تثبيت العنصر أعلى الصفحة باستخدام <span style="font-family:'courier new', courier, monospace;">top: 0;</span>.</p><h2>القيمة <span style="font-family:'courier new', courier, monospace;">Inherit</span></h2><p>تمّ في بداية المقالة الإشارة إلى وجود خَمس قيم مُتوفّرة للخاصيّة <span style="font-family:'courier new', courier, monospace;">position</span>. القيمة الخامسة هي مَوروث <span style="font-family:'courier new', courier, monospace;">inherit</span> والأقل أهميّة. تعمل هذه القيمة كما يدلّ الاسم الخاصّ بها، حيثُ أنّ العنصر يرث القيمة الخاصّة بالعنصر الأب. علمًا أنّه في الأساس، عناصر الخاصّيّة <span style="font-family:'courier new', courier, monospace;">position</span> لا ترث قيمتها من العنصر الأب الخاصّ بها، وتكون القيمة <span style="font-family:'courier new', courier, monospace;">static</span> هي القيمة الافتراضيّة.</p><h2>الفرق بين <span style="font-family:'courier new', courier, monospace;">relative</span> و<span style="font-family:'courier new', courier, monospace;">absolute</span></h2><p>يُظهر هذا التشبيه الفرق بين التنسيقين "نسبيّ" و "مُطلق".</p><p>يُزاح دائمًا العنصر الّذي يحمل التنسيق "نسبيّ" نسبةً إلى موضعه الأصليّ في التدفّق الطّبيعيّ، بمعنى أنّ هذا العنصر يتحرك نسبة إلى المكان الّذي كان سيكون عليه في الظروف العاديّة. وهذا الانتقال لا يؤثّر على تقسيم الصفحة أو العناصر المُحيطة، أي كأنّ هذا العنصر قد أصبح شبحًا قد ترك جسمه خلفه. هذا الجسم له عرض وارتفاع ويؤثّر على محيطه ولكنه غير ظاهر. ويستطيع الصندوق الشبح التحرك ولكنه مازال مُرتبطًا بجسمه القديم، بمعنى أنّ موقعه الحاليّ يُقاس بناءً على موقعه القديم.</p><p>أمّا العنصر الّذي يحمل التنسيق "مُطلق" فهو لا يؤثّر على محيطه أبدًا، وذلك لأنّه قد تمّ سحبه من التدفّق الطّبيعيّ. وبذلك فهو أيضًا شبح ولكنه لم يترك جسمه خلفه كما فعل الشبح النسبيّ. وبالنسبة للعناصر المُحيطة فإنّ هذا العنصر غير موجود.</p><p>يحصل الشبح المُطلق على موضعه بعد النظر عبر جميع الآباء الخاصّة به حتّى يجد واحدًا منها يتموضع إما بشكلٍ "نسبيّ" أو "مُطلق" ليكون نسق إحداثيَّات لهذا العنصر. وعندما لا يجد هذا الشبح أيًا من الآباء يتموضع بشكلٍ "نسبيّ" أو "مُطلق"، ستكون نقطته المرجعيّة هي المُستند العام.</p><h3>تطبيقٌ عمليّ</h3><p>سيتمّ تَوظيف الشرح السابق في مثالٍ عمليّ يجعل من الأمور أكثر وضوحًا لهذه الخاصِّيَّات. المثال هو للتوضيح فقط، ولا يُعتبر تطبيقًا مثاليًا لاستخدامه في الواقع العمليّ.</p><pre class="html ipsCode prettyprint">&lt;div id="container"&gt;
    &lt;div id="nav"&gt;
      &lt;a href="#"&gt;Link&lt;/a&gt;
      &lt;a href="#"&gt;Link&lt;/a&gt;
      &lt;a href="#"&gt;Link&lt;/a&gt;
      &lt;a href="#"&gt;Link&lt;/a&gt;
      &lt;a href="#"&gt;Link&lt;/a&gt;
    &lt;/div&gt;
    &lt;div id="content"&gt;
      &lt;div id="callout"&gt;
        &lt;p&gt;...&lt;/p&gt;
      &lt;/div&gt;
      &lt;p&gt;...&lt;/p&gt;
      &lt;p&gt;...&lt;/p&gt;
      &lt;p&gt;...&lt;/p&gt;
      &lt;p&gt;...&lt;/p&gt;
      &lt;p&gt;...&lt;/p&gt;
      &lt;p&gt;...&lt;/p&gt;
      &lt;p&gt;...&lt;/p&gt;
      &lt;p&gt;...&lt;/p&gt;
      &lt;p&gt;...&lt;/p&gt;
    &lt;/div&gt;
    &lt;div id="footer"&gt;
      &lt;p&gt;Copyright © 2015 - webtuts Web Sites&lt;/p&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/css-positioning-big-example.png.b1fce552783eb3d46a7fbe48fbc5123b.png"><img data-fileid="730" class="ipsImage ipsImage_thumbnailed" alt="css-positioning-big-example.thumb.png.5e" src="https://academy.hsoub.com/uploads/monthly_2015_03/css-positioning-big-example.thumb.png.5e1301aac009c2a08fbc136528bf827c.png"></a></p><p>تُظهر الصورة السابقة تقسيم صفحة شائع الاستخدام في الكثير من المواقع، شريط تنقل علوي navigation، المحتوى content، ذيل الصفحة footer. سيتمّ مُناقشة كل عنصر، وخاصيّة التَمَوْضُع الخاصّة به، ولماذا تمّ اختيار كلٍ منها.</p><p>سيتمّ استخدام <span style="font-family:'courier new', courier, monospace;">#container</span> لجعل بقية العناصر مُتمركزة في المُنتصف. العنصر <span style="font-family:'courier new', courier, monospace;">#nav</span> سيكون العنصر الأول داخل العنصر <span style="font-family:'courier new', courier, monospace;">#container</span>. لم يتمّ تخصيص العنصر <span style="font-family:'courier new', courier, monospace;">#nav</span> بالخاصيّة <span style="font-family:'courier new', courier, monospace;">position</span>، لذلك ستكون القيمة <span style="font-family:'courier new', courier, monospace;">static</span> هي المُعَيَّنة. وستفي القيمة الافتراضيّة بالغرض على اعتبار أنّه لن يتمّ إزاحة هذا العنصر، أو استخدامه في إنشاء نسق إحداثيَّات جديد. على الجهة الأُخرى سيتمّ تخصيص العنصر التّالي وهو <span style="font-family:'courier new', courier, monospace;">#content</span> بخاصيّة التَمَوْضُع <span style="font-family:'courier new', courier, monospace;">position</span> بالقيمة <span style="font-family:'courier new', courier, monospace;">relative</span>.</p><p>لا تؤثر قيمة التَمَوْضُع <span style="font-family:'courier new', courier, monospace;">position</span> على العنصر <span style="font-family:'courier new', courier, monospace;">#content</span> عند عدم استخدام أيًا من قيم الإزاحة، ولكن قد تمّ تخصيصها بالتنسيق <span style="font-family:'courier new', courier, monospace;">position: relative;</span> لتُكوّن نقطة الإحداثيَّات للعنصر <span style="font-family:'courier new', courier, monospace;">#callout</span>. كما تمّ تنسيق العنصر <span style="font-family:'courier new', courier, monospace;">#callout</span> بالتنسيق <span style="font-family:'courier new', courier, monospace;">position: absolute</span>. أخذًا بعين الاعتبار أنّ العنصر الأب وهو <span style="font-family:'courier new', courier, monospace;">#content</span> الخاصّ بهذا العنصر قد تمّ تنسيقه بشكل نسبيّ <span style="font-family:'courier new', courier, monospace;">relative</span>، فإنّ خاصِّيَّات الإزاحة المُطبقة على العنصر <span style="font-family:'courier new', courier, monospace;">#callout</span> ستكون مُعتمدة على الإحداثيَّات المُنشأة من قبل العنصر الأب <span style="font-family:'courier new', courier, monospace;">#content</span>. كما تمّ تخصيص العنصر <span style="font-family:'courier new', courier, monospace;">#callout</span> بإزاحته <span style="font-family:'courier new', courier, monospace;">-80px</span> إلى جهة اليمين بهدف سحبه خارج العنصر الأب. علاوةً على ذلك، تمّ تخصيص العنصر <span style="font-family:'courier new', courier, monospace;">#callout</span> بإزاحته من الجهتين العلويّة والسفليّة بالقيمة <span style="font-family:'courier new', courier, monospace;">100px</span>، وبذلك سيحافظ هذا العنصر على ارتفاع شبه كامل منقوصًا <span style="font-family:'courier new', courier, monospace;">200px</span> مهما كان حجم الصفحة.</p><p>لا يؤثّر العنصر <span style="font-family:'courier new', courier, monospace;">#callout</span> على باقي العناصر بما أنّ له القيمة <span style="font-family:'courier new', courier, monospace;">absolute</span>، ولذلك يجب إضافة بعض الحشو <span style="font-family:'courier new', courier, monospace;">padding </span>للعنصر <span style="font-family:'courier new', courier, monospace;">#content</span> وذلك كي لا تختفي الفَقْرات <span style="font-family:'courier new', courier, monospace;">paragraphs</span> أسفل العنصر <span style="font-family:'courier new', courier, monospace;">#callout</span>. كما سيتمّ تخصيص ذيل الصفحة بخاصيّة التَمَوْضُع مع القيمة <span style="font-family:'courier new', courier, monospace;">fixed</span> مما يجعله ثابت ضمن مجال الرؤية <span style="font-family:'courier new', courier, monospace;">viewport</span> عند التدرّج في الصفحة نزولًا أو صعودًا. كما سيتمّ إضافة حشو إلى العنصر <span style="font-family:'courier new', courier, monospace;">#content</span> ومن الناحية السفلية وبقيمة <span style="font-family:'courier new', courier, monospace;">60px</span> وذلك لعدم اختفاء الفقرة الأخيرة تحت ذيل الصفحة.</p><h2>الخاتمة</h2><p>تُعتبر خواصّ التَمَوْضُع من المواضيع الّتي لا بُد على أي مُطوّر الإلمام بها بشكل مُعمّق، وذلك كي لا يتمّ الاعتماد على أسلوب التجربة والخطأ trial and error في التعامل مع هذه الخاصّيّة. يعطي فهم هذه الخاصّيّة احترافيّة عالية للمُطوّر ويزيد من إنتاجيّته عن باقي المُطوّرين الّذين يعتمدون على أسلوب التجربة والخطأ.</p><p>ترجمة -وبتصرّف- للمقال <a rel="external nofollow" href="http://alistapart.com/article/css-positioning-101">CSS Positioning 101</a> لصاحبه <a rel="external nofollow" href="https://twitter.com/motherfuton">Noah Stokes</a></p>
]]></description><guid isPermaLink="false">46</guid><pubDate>Sun, 22 Mar 2015 08:43:00 +0000</pubDate></item><item><title>&#x625;&#x646;&#x634;&#x627;&#x621; &#x62F;&#x644;&#x64A;&#x644; &#x627;&#x644;&#x623;&#x646;&#x645;&#x627;&#x637; Style Guides &#x644;&#x645;&#x648;&#x642;&#x639; &#x623;&#x648; &#x62A;&#x637;&#x628;&#x64A;&#x642; &#x648;&#x64A;&#x628;</title><link>https://academy.hsoub.com/programming/css/%D8%A5%D9%86%D8%B4%D8%A7%D8%A1-%D8%AF%D9%84%D9%8A%D9%84-%D8%A7%D9%84%D8%A3%D9%86%D9%85%D8%A7%D8%B7-style-guides-%D9%84%D9%85%D9%88%D9%82%D8%B9-%D8%A3%D9%88-%D8%AA%D8%B7%D8%A8%D9%8A%D9%82-%D9%88%D9%8A%D8%A8-r44/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2015_03/css-style-guide.png.62c684599caa51ebf90aa1228f0cdffa.png" /></p>

<p dir="rtl">لعدة سنوات مضت، كنت أعمل على تطبيق كبير ومعقد. كان مشروعًا عتيقًا نوعا ما: مصممون ومطورون كُثُر أتوا وذهبوا، وكل واحدٍ منهم قام بإضافة جزء جديد إلى التطبيق مترامي الأطراف. عندما التحقت بالفريق، كانت الـ CSS كبيرة، والأنماط كانت متنوعة، وأخذت جهدًا كبيرًا لاكتشاف أي شيء له فائدة من استخدامه.</p><p dir="rtl">خلال هذا كله، اكتشفت دليل الأنماط– طريقة للتحكم بالترميز(markup) والـ CSS سواء خرج عن السيطرة أو كبُر وتضخّم. في هذه الفترة، رأيت كيف أن دليل الأنماط يُحافظ على وقت التطوير، ويجعل التواصل أفضل مع مبرمجي الواجهات (front end)، ويحافظ على ثبات التصميم والشيفرة معًا في كل جزء من الموقع. كانت عبارة عن ثورة، وفي هذه المقالة، سأعرض لك كيف تقوم ببناء دليل الأنماط وطريقة صيانته.</p><h2 dir="rtl">ما هو دليل الأنماط؟</h2><p dir="rtl">بالنسبة لي، دليل الأنماط هو المستند الذي تعيش فيه الشيفرة، والذي يفصل كل العناصر المختلفة والوحدات البرمجية (modules) لموقعك أو تطبيقك. بالرغم من استخدامه في توحيد شيفرة الواجهات إلا أنه يستخدم لتوثيق ما يتم عرضه في الموقع، من نمط الرأس وألواح الألوان، المستخدمة في إنشاء الموقع. هذه الطريقة، تعتبر مكان تجمُّع لأعضاء الفريق – من مالِكِي المنتج والمنتجين إلى المصممين والمطورين-لنرجع إليه جميعا عند تغيير الموقع أو إعادة صياغته. عدة شركات تقوم بوضع الدليل مباشرة، وحزمة شركة Starbucks تعتبر أشهر حزمة معروفة، مع ذلك توجد حزم أخرى.</p><p dir="rtl" style="text-align:center;"><a class="ipsAttachLink ipsAttachLink_image" rel="external nofollow" href="https://academy.hsoub.com/uploads/monthly_2015_03/Starbuck-style-guide.png.35999c8c1fffefcc3bff86d36eface72.png"><img data-fileid="729" class="ipsImage ipsImage_thumbnailed" alt="Starbuck-style-guide.thumb.png.29a35ff3a" src="https://academy.hsoub.com/uploads/monthly_2015_03/Starbuck-style-guide.thumb.png.29a35ff3a94c4164d2279605632b7988.png"></a><span style="line-height:11.1999998092651px;">صورة توضح دليل الأنماط لشركة </span><span style="line-height:11.1999998092651px;">Starbucks</span></p><p dir="rtl">أود التنويه إلى أن ما أسميه دليل الأنماط، قد يعطيه البعض اسم مكتبة النماذج (patterns library). بعض القوالب أرجعها إلى استخدام المصطلح دليل الأنماط، لكن مصطلح مكتبة النماذج (patterns library) بدأ يكتسب شعبية.</p><p dir="rtl">عندما بدأت الوظيفة، أول شيء بدأت به هو معالجة مشكلة دليل الأنماط. إنشاء الدليل كان على الأرجح أعظم شيء نافع عملته أثناء عملي: أجبرني ذلك على استعراض كل سطر من أسطر الـ CSS وقراءتها، وتلخيصها، وفهم طريقة استخدامها، ومن ثم توثيقها لنفسي، وللفريق، وكمرجع للمستقبل. بالإضافة إلى تحديد التناقضات والأخطاء من خلال التأمل التطويل في الـ CSS، وإذا لم أفهم كيفية استخدام أجزاء محددة من الشيفرة، علَّقت على الدليل بسؤال "من هو الشخص الذي يستطيع أن يساعدني”.</p><h2 dir="rtl">لماذا يجب أن تستخدم دليل الأنماط؟</h2><p dir="rtl">كما أن فريقك ينمو ويتغير مع الوقت، فإن دليل الأنماط سيساعدك بطرق عدة. أولاً، إنشاء الدليل سيأخذ بعض الوقت منك في البداية، ولكن ستجد أنه يقلل وقت بناء الأجزاء والصفحات الجديدة، لأن أي شخص ينضم لمشروع سابق يستطيع أن يرجع إلى الدليل ليتعرف على الأنماط المستخدمة فعليا.</p><p dir="rtl" style="text-align:center;"><a class="ipsAttachLink ipsAttachLink_image" rel="external nofollow" href="https://academy.hsoub.com/uploads/monthly_2015_03/South-Tees-style-guide.png.7be4a6443ed50fe4dded03a603eccc6f.png"><img data-fileid="724" class="ipsImage ipsImage_thumbnailed" alt="South-Tees-style-guide.thumb.png.a00650b" src="https://academy.hsoub.com/uploads/monthly_2015_03/South-Tees-style-guide.thumb.png.a00650b67f8ecae58c511858107dd5cb.png"></a></p><p dir="rtl" style="text-align:center;">تخيل بَدأ بناء الصفحة بمعلومات مثل هذه من دليل مستشفى South Tees،صندوق المنحة هذا سيتم إنجازه خلال ثوانٍ.</p><p dir="rtl">ثانيًا، الدليل يساعد على أن تكون الـ CSS قياسية(standard)، ويحافظ عليها صغيرة وسريعة أثناء التحميل. باستخدام الدليل كقائمة لجرد الوحدات البرمجية (modules) والشيفرة، فإن كلا من المصممين والمبرمجين يستطيعون رؤية ما إذا كان هناك تغيير جديد في التصميمات عن القياسات التي بُدِأ بها، ويقررون كفريق ما إذا كان هذا التغيير ذا قيمة لكي يتم توسعة قاعدة الشيفرة وإذا كان هذا الشيء مكتوب مُسبقًا فسيتم استيعابه بسهولة. إذا لم تمتلك أي دليل، فكل هذه التسهيلات مستحيلة، فحسب الخبراء فإن هذا سيعني إعادة كتابة النمط الجديد-والنتيجة ستكون ملف الـ CSS مملوء بالتكرار.</p><p dir="rtl">ثالثًا، تسهيل صيانة التصميم والمحافظة على ثباته، فالمصمم سيهتم بجزء واحد كمرجع لمكونات الموقع كاملًا ويتأكد من ظهور الموقع مُتماسكا في كل أجزائه. هذا سيساعد وبشكل خاص الفرق الأكبر والمشاريع التي على مستوى الشركات عندما يكون لديها فريق داخلي من المصممين يعملون على الموقع. وعند صيانة تماسك التصميم، فإن قاعدة الشيفرة ستبقى أصغر.</p><p style="text-align:center;"><a class="ipsAttachLink ipsAttachLink_image" rel="external nofollow" href="https://academy.hsoub.com/uploads/monthly_2015_03/yelp-buttons.png.b42877dacc1f4aff07a9d109ed38428e.png"><img data-fileid="727" class="ipsImage ipsImage_thumbnailed" alt="yelp-buttons.thumb.png.3625d56f80e245a42" src="https://academy.hsoub.com/uploads/monthly_2015_03/yelp-buttons.thumb.png.3625d56f80e245a4269f4e95080db3c6.png"></a>شركة Yelp حددت بوضوح كيف يتم استخدام الأزرار، المحافظة على ثبات نمط الزِّر في الموقع.</p><p dir="rtl">رابعاً، سيصبح التواصل أسهل. عندما قمتُ ببناء صفحاتٍ لمشروع كبير وأعطيتها للمصمم، استَخدم لغة الفئات(classes) المختلفة في الدليل ليسأل عن التغييرات. هذا يعني أننا لن نواجه أي ارتباك أو تشويش في أي جزء في حال قمنا بالمراجعة والتحسين. ومن فوائدها أيضا أنها تعطي لأعضاء الفريق كلمات مشتركة، مثل أسماء الوحدات البرمجية(modules)، للتحدث عن التصاميم بينما هم يكتبون الشيفرة.</p><p dir="rtl">الفائدة الأخيرة التي وجدتها من استخدام دليل الأنماط أنك ستحتاج الدليل الخاص بك لتجتاز اختبار ضمان الجودة بسرعة. قد لا يتطابق الدليل مع الصفحات الجديدة، ولكن قد يلفت انتباهك إلى المشاكل التي تواجهك عند اختلاف المتصفحات. بمعالجة هذه المشاكل مبكرا، ستتجنبها في الاختبار الأخير.</p><h2 dir="rtl">خطوات بناء دليلك</h2><p dir="rtl">سنتحدث في الجزء التّالي عن كيفية بناء الدليل الخاص بك. فعندما تعمل على مشروع ليس فيه دليل فإنه يتحتّم عليك أن تنشئ واحدًا.</p><h3 dir="rtl">جمِّع أساسيات موقعك</h3><p dir="rtl">ابدأ الدليل ببعض أساسيات الموقع. العناصر الأساسية قد تتضمن لوح الألوان، أو نظام التصميم الشبكي (grid system)، أو حتى أنواع الأنماط الأساسية في الصفحة كالترويسة والجسم والنص: أي شيء ترى أنه من أساسيات بناء الصفحة. الجزء الأساسي في الموقع هو دليل اللون، لذا بدأتُ بذلك وذهبت من هناك. أنشأت صفحة الـ HTML بالترميز (markup)، وربطتها بتطبيق الـ CSS، لذا أي تغيير في الـ CSS سينعكس تلقائيًّا على دليل الأنماط.</p><p dir="rtl">عندما تنظر إلى دليل الأنماط الذي أنشَأَته شركة Yelp، فستجد كيف أنها بدأت بالأساسيات: تنسيق الخطوط، الشبكة، والألوان، ويتم إضافة نماذج أكثر كلما مرت من شخص لآخر.</p><p dir="rtl" style="text-align:center;"><a class="ipsAttachLink ipsAttachLink_image" rel="external nofollow" href="https://academy.hsoub.com/uploads/monthly_2015_03/yelp-style-guide.png.fbf1ab514d7c36872f1058d6210eff5e.png"><img data-fileid="728" class="ipsImage ipsImage_thumbnailed" alt="yelp-style-guide.thumb.png.ceddfc618ec8a" src="https://academy.hsoub.com/uploads/monthly_2015_03/yelp-style-guide.thumb.png.ceddfc618ec8a0aed6f4c8c8cec3a8ce.png"></a>دليل شركة Yelp.</p><h3 dir="rtl">إضافة نماذج أكثر</h3><p dir="rtl">النموذج عبارة عن مجموعة مستقلة من الترميز(markup) والنمط لصناعة بعض الكائنات (objects) الأساسية لموقعك، كأن تستدعي الصندوق المستخدم بشكل متكرر، أو الأزرار، أو طريقة سرد قائمة أفقية من الروابط. لقد عمِلت على توثيق كل الاختلافات الممكنة لنمط الزر والرابط. لذا تقدم وأضف الترميز(markup) المناسب الذي تحتاجه لكل عنصر في دليلك.</p><p dir="rtl">مثال، الزر في دليل شركة (Editorially)، تم كتابة شيفرته كالآتي:</p><pre class="html ipsCode prettyprint">&lt;label for="btn" class="btn" href="#"&gt;.btn &lt;input type="submit" name="btn" value=".btn" /&gt;&lt;/label&gt;.</pre><p dir="rtl">وبسبب ربط الـ CSS بالتطبيق نفسه، فإن الـ CSS سيعرض دليل الأنماط كما هو. وبتغيير نمط الـ <span style="font-family:'courier new', courier, monospace;">.btn</span>، فإن سيتغير تبعًا لهذا التغيير بسبب الترابط بينهما.</p><p dir="rtl">استمر بإضافة النماذج كما تراها أنت في كل جزء من الموقع، وقد تستخدم تنسيقًا مُخصّصًا أكثر وأكثر، أو نموذج كائن الوسائط(media-object)، أو نموذج القائمة العمودية.</p><p dir="rtl">إليكم مثالًا آخر من مستشفى South Tees، يعرض بعض نماذج ما يسمونه ميزة الكُتل (feature blocks).</p><p dir="rtl" style="text-align:center;"><a class="ipsAttachLink ipsAttachLink_image" rel="external nofollow" href="https://academy.hsoub.com/uploads/monthly_2015_03/southtees.png.dc53ca0265fef57fc8fff9f213fffb3e.png"><img data-fileid="725" class="ipsImage ipsImage_thumbnailed" alt="southtees.thumb.png.c666e7496630824b7d36" src="https://academy.hsoub.com/uploads/monthly_2015_03/southtees.thumb.png.c666e7496630824b7d36d310d87c4469.png"></a></p><p dir="rtl" style="text-align:center;">مستشفى South Tees</p><p dir="rtl">هذا كذلك وقت مناسب لسؤال فريقك ما الذي يمكن إضافته إلى دليل الأنماط الخاص بنا. شارك السؤال معهم واسمح لهم بإلقاء نظرة، وستتمنى مساعدتهم لك بإضافة كل النماذج والوحدات البرمجية(modules) التي تحتاجها. لا تنس بأن تُطلِع الفريق على الدليل الجديد، لأنه سيكون مصدرًا ومرجعًا لأيّ عضو في الفريق.</p><h3 dir="rtl">تفاعل المستند</h3><p dir="rtl">أضف بعض التفاعل إلى موقعك، مثل القوائم المنسدلة، والوحدات البرمجية(modules)، أو حتى أداة التلميحات(tooltips) والتي تعمل على إظهار نص صغير-يعطي معلومات إضافية للمستخدم-عند تمرير المؤشر فوق عنصر معين في المستند. فكل هذا لا يسمح للفريق برؤية الأشياء الثابتة فقط ولكن المتحركة منها كذلك. لذا عندما تنظر إلى الدليل وتمرر المؤشر أو تضغط فوق العناصر، فإنها ستتفاعل وكأنها ظاهرة على موقعك وليست على الدليل فقط.</p><p dir="rtl" style="text-align:center;"><a class="ipsAttachLink ipsAttachLink_image" rel="external nofollow" href="https://academy.hsoub.com/uploads/monthly_2015_03/ed-tooltips.png.b48c73efb9197cd2080f2e792d24bddb.png"><img data-fileid="723" class="ipsImage ipsImage_thumbnailed" alt="ed-tooltips.thumb.png.b3220f03f11694f1bd" src="https://academy.hsoub.com/uploads/monthly_2015_03/ed-tooltips.thumb.png.b3220f03f11694f1bd128f3b431fe080.png"></a>أداة التلميحات(tooltips) في دليل شركة Editorially.</p><h3 dir="rtl">تسهيل عملية الصيانة</h3><p dir="rtl">إذا كان عليك بذل جهد إضافيّ لتحديث نمط التنسيق الخاص بك لدى إدخالك لتحديثات على طريقة عرض الموقع، فإن احتمال أن يبقى هذا الدّليل مُحدّثا صغير جدّا. ولهذا نقوم بربط الدّليل إلى نفس الـ CSS المُستخدم في التّطبيق، وعليه فإنّنا لن نُضطرّ إلى تعديل هذا الدّليل يدويّا كل مرّة.</p><p dir="rtl">قد يصعب جعل تحديث الدّليل أولويّة لكن صيانة الدّليل هي مهمة في غاية الأهمّيّة. وبناءً على السّرعة التي يتّم إدخال تعديلات فيها على التّطبيق أو على الموقع فإنه يجب عليك أن تُحدّث الدّليل بشكل دوري أيضًا، سواءً كانت التّحديثات تتمّ بشكل أسبوعيّ أو شهري. لمّا تقوم بإدخال تعديلات على موقعك فاجعل من مهمّة تعديل الدّليل جزءًا لا يتجزّأ من هذه العملية.</p><h3 dir="rtl">كرر العودة لدليلك</h3><p dir="rtl">عندما يكون الجزء الأساسي من مكونات موقعك أو تطبيقك مضمَّنًا في دليلك، فإنه بإمكانك استخدام أدوات كثيرة لجعلها تبدو بشكل أفضل. بعد بناء دليل الأنماط فإن زملائي في العمل لفتوا انتباهي إلى الأداة الرائعة التي صنعتها مجموعة "Filament" وتسمى هذا الأداة بـ "<a rel="external nofollow" href="https://github.com/filamentgroup/X-rayHTML">X-rayHTML</a>" وهي عبارة عن مكتبة جافاسكربت صغيرة تساعدك في كتابة التوثيق. X-rayHTML تأخذ الكائن المُنَسَّق في صفحتك وتولد له كتلة (block) متناسقة وجميلة وتضع هذه الشيفرة أسفل العنصر، بدون أي تدخل منك. وبإمكانك إضافة الأداة "<a rel="external nofollow" href="http://prismjs.com/">prism.js</a>" والتي تعمل على تظليل النص في الدليل، وتلوين الشيفرة لتسهل عملية قراءتها، فمثلا تعطي رسائل الخطأ الون الأحمر ورسائل النجاح باللون الأخضر وهكذا.</p><p dir="rtl" style="text-align:center;"><a class="ipsAttachLink ipsAttachLink_image" rel="external nofollow" href="https://academy.hsoub.com/uploads/monthly_2015_03/styleguide-06-Aug-messages.png.f73d3b052b7f40926e90300b686cdc05.png"><img data-fileid="726" class="ipsImage ipsImage_thumbnailed" alt="styleguide-06-Aug-messages.thumb.png.eb2" src="https://academy.hsoub.com/uploads/monthly_2015_03/styleguide-06-Aug-messages.thumb.png.eb21cc38a287651c2042c8246d77d0fc.png"></a>نظرة على محرر دليل الأنماط بعد استخدام أداة الـ X-rayHTML في العمل.</p><p dir="rtl">هناك أدوات أخرى تستطيع استخدامها ليكون دليلك أكثر تنظيمًا. مثل <a rel="external nofollow" href="https://github.com/kneath/kss">KSS</a> و <a rel="external nofollow" href="http://trulia.github.io/hologram/">Hologram</a>. كلاهما تستخدم التعليقات أو إطار العمل YAML-المعتمد على الـ CSS-أو غيرها من مصادر التوثيق وتدمجها مع أشياء أخرى مثل لغة الـ Ruby لإنشاء دليل الأنماط تلقائيًا. قد تحتاج هذه الأدوات إلى بعض الجهد لتعديل ملف الـ CSS بالتعليقات أو بمكونات الـ YAML المناسبة لمحتويات دليل الأنماط، ولكن إذا رغبت في اختصار الكثير من الوقت، فهذه الأدوات تجعل عملية الصيانة سهلة. إضافة إلى ذلك فمجموعة " A List Apart" وضعت مكتبة نموذج (pattern library) خاص بها على موقع GitHub وخصصت لها <a rel="external nofollow" href="http://alistapart.com/blog/post/getting-started-with-pattern-libraries">مقالًا على مدونتها</a>.</p><h2 dir="rtl">استخدام الدليل</h2><p dir="rtl">بعد أن انتهيت من إنشاء الدليل، ماذا الآن؟ كيف ستجعل الناس يستخدمونه؟ أول خطوة هي أن تتحدث عن دليلك الجديد. إذا انضم عضو جديد إلى الفريق، اشرح له الدليل، وبهذه الطريقة ستقدم الدليل بشكل كامل لمطوري الواجهات (front end) بكلا جانبي التطوير المرئي وجانب الشيفرة.</p><p dir="rtl">مع استمرار تكرار الرجوع إلى الموقع أو التطبيق، فإنك لن تنتهي من دليل الأنماط الخاص بك من حيث التعديل والإضافة والتوسعة. ولكن إذا قمت بتوثيق العمل بشكل مبكر، وعرضته على زملائك في الفريق وحصلت منهم على الردود والآراء، فهذا سيساعدك جدًّا. إذا قام الفريق كله ببناء الدليل فهذا أيضا سيجعله يبدو كأنه دليل الفريق ككل-واجعل كل واحد منهم يقضي بعض الوقت في صيانته واستخدامه بشكل منتظم.</p><p dir="rtl">يمكنك تنزيل دليل شركة Editorially من <a rel="external nofollow" href="https://github.com/Editorially/styleguide">GitHub</a> أو <a rel="external nofollow" href="http://editorially.github.io/styleguide/">من هنا</a>، اطلع عليه واعرف كيف يمكنك أن تنشئ دليل نمط تستطيع أن تعمل عليه مع بقية أعضاء الفريق.</p><p dir="rtl">هل أنت مقتنع؟ هل ترغب في الحصول على دليل نمط لموقعك أو لتطبيقك؟ سيكون تتويجًا جيدا للمجهود الكبير: حدد الوقت، واجمع الفريق، وابدأ ببناء الدليل-وتوِّج العمل بتوثيق يسهِّل مناقشة وتطوير موقعك.</p><p dir="rtl"> </p><p dir="rtl">ترجمة -وبتصرّف- للمقال <a rel="external nofollow" href="http://alistapart.com/article/creating-style-guides">Creating Style Guides</a> لصاحبته Susan Robertson.</p>
]]></description><guid isPermaLink="false">44</guid><pubDate>Thu, 19 Mar 2015 07:52:00 +0000</pubDate></item></channel></rss>
