<?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/6/?d=2</link><description>&#x627;&#x644;&#x628;&#x631;&#x645;&#x62C;&#x629;: CSS</description><language>ar</language><item><title>&#x627;&#x644;&#x627;&#x646;&#x62A;&#x642;&#x627;&#x644;&#x627;&#x62A; &#x648;&#x62C;&#x627;&#x641;&#x627;&#x633;&#x643;&#x631;&#x628;&#x62A;</title><link>https://academy.hsoub.com/programming/css/%D8%A7%D9%84%D8%A7%D9%86%D8%AA%D9%82%D8%A7%D9%84%D8%A7%D8%AA-%D9%88%D8%AC%D8%A7%D9%81%D8%A7%D8%B3%D9%83%D8%B1%D8%A8%D8%AA-r684/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2019_06/5cf518be12f05_.jpg.06c90094fcf774f482d64866756f3660.jpg" /></p>

<p>
	استخدمنا في المقالات السابقة الخاصية <a href="https://wiki.hsoub.com/CSS/transition" rel="external">transition</a> للقيام بالتحريك بين حالتين، حالة عدم التحويم (non-hover state) وحالة التحويم (hover state).
</p>

<p>
	تحدُث تلك الانتقالات عند التحويم (تمرير مؤشر الفأرة) فوق العنصر. بيْد أنّ هذه ليست الطريقة الوحيدة لبدء التحريك، سنغطي في هذه المقالة طريقتين لفعل ذلك عبر استخدام <a href="https://wiki.hsoub.com/JavaScript" rel="external">JavaScript</a>.
</p>

<p>
	هذه المقالة جزء من سلسلة من المقالات <a href="https://academy.hsoub.com/tags/%D8%A7%D9%84%D8%AA%D8%AD%D8%B1%D9%8A%D9%83%20%D9%81%D9%8A%20css/" rel="">حول التحريك في CSS</a>:
</p>

<ul>
<li>
		<a href="https://academy.hsoub.com/programming/css/%D9%85%D8%A7-%D9%87%D9%8A-%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85%D8%A7%D8%AA-%D8%A7%D9%84%D8%AD%D8%B1%D9%83%D8%A7%D8%AA%D8%9F-r674/" rel="">ما هي استخدامات الحركات؟</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D8%AA%D8%AC%D9%87%D9%8A%D8%B2-%D8%A8%D9%8A%D8%A6%D8%A9-%D8%A7%D9%84%D8%B9%D9%85%D9%84-%D9%84%D8%A5%D9%86%D8%B4%D8%A7%D8%A1-%D8%A7%D9%84%D8%AD%D8%B1%D9%83%D8%A7%D8%AA-r675/" rel="">تجهيز بيئة العمل لإنشاء الحركات</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D8%A7%D9%84%D8%A7%D9%86%D8%AA%D9%82%D8%A7%D9%84%D8%A7%D8%AA-%D8%A7%D9%84%D8%AA%D9%86%D9%82%D9%84-%D8%A8%D9%8A%D9%86-%D8%A7%D9%84%D8%AD%D8%A7%D9%84%D8%A7%D8%AA-r676/" rel="">مدخل إلى الانتقالات: التنقل بين الحالات</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D8%A7%D9%84%D8%AD%D8%B1%D9%83%D8%A7%D8%AA-%D9%85%D9%81%D9%87%D9%88%D9%85-%D8%A7%D9%84%D8%AD%D8%B1%D9%83%D8%A9-r677/" rel="">مدخل إلى الحركات: مفهوم الحركة</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D8%AA%D8%B7%D8%A8%D9%8A%D9%82-%D8%B9%D9%85%D9%84%D9%8A-%D8%A7%D9%84%D8%A7%D9%86%D8%AA%D9%82%D8%A7%D9%84%D8%A7%D8%AA-r678/" rel="">تطبيق عملي: الانتقالات</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D8%AE%D8%A7%D8%B5%D9%8A%D8%A7%D8%AA-%D8%A7%D9%84%D8%A7%D9%86%D8%AA%D9%82%D8%A7%D9%84%D8%A7%D8%AA-r681/" rel="">خاصيات الانتقالات</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D8%AF%D9%88%D8%A7%D9%84-%D8%A7%D9%84%D8%AA%D9%88%D9%82%D9%8A%D8%AA-r682/" rel="">دوال التوقيت</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D8%A7%D9%84%D8%A7%D9%86%D8%AA%D9%82%D8%A7%D9%84%D8%A7%D8%AA-%D8%A7%D9%84%D9%85%D8%AA%D8%B9%D8%AF%D8%AF%D8%A9-r683/" rel="">الانتقالات المتعددة</a>
	</li>
	<li>
		الانتقالات وجافاسكربت
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D8%AA%D8%B7%D8%A8%D9%8A%D9%82-%D8%B9%D9%85%D9%84%D9%8A-%D8%A7%D9%84%D8%AA%D8%AD%D8%B1%D9%8A%D9%83%D8%A7%D8%AA-r685/" rel="">تطبيق عملي: التحريكات</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D8%AE%D8%A7%D8%B5%D9%8A%D8%A7%D8%AA-%D8%A7%D9%84%D8%AD%D8%B1%D9%83%D8%A7%D8%AA-r693/" rel="">خاصيات الحركات</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D8%AA%D8%B7%D8%A8%D9%8A%D9%82-%D8%B9%D9%85%D9%84%D9%8A-%D8%A7%D9%84%D8%A5%D8%B7%D8%A7%D8%B1%D8%A7%D8%AA-%D8%A7%D9%84%D9%85%D9%81%D8%AA%D8%A7%D8%AD%D9%8A%D8%A9-r694/" rel="">تطبيق عملي: الإطارات المفتاحية</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D8%A7%D9%84%D8%AD%D8%B1%D9%83%D8%A7%D8%AA-%D8%A7%D9%84%D9%85%D8%AA%D8%B9%D8%AF%D8%AF%D8%A9-%D8%A7%D9%84%D9%85%D8%AA%D8%B2%D8%A7%D9%85%D9%86%D8%A9-r696/" rel="">الحركات المتعددة المتزامنة</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D9%85%D9%88%D8%AC%D8%B2-%D8%A7%D9%84%D8%AD%D8%B1%D9%83%D8%A7%D8%AA-r697/" rel="">موجز الحركات</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D8%B1%D9%88%D8%A7%D9%8A%D8%A9-%D8%A7%D9%84%D9%82%D8%B5%D8%B5-%D8%B9%D8%A8%D8%B1-%D8%A7%D9%84%D8%AD%D8%B1%D9%83%D8%A7%D8%AA-r698/" rel="">رواية القصص عبر الحركات</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D8%AD%D8%B1%D8%A8-%D8%A7%D9%84%D9%86%D8%AC%D9%88%D9%85-star-war-r704/" rel="">حرب النجوم</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D8%A5%D8%B8%D9%87%D8%A7%D8%B1-%D8%A7%D9%84%D9%85%D8%AD%D8%AA%D9%88%D9%89-%D8%A3%D8%AB%D9%86%D8%A7%D8%A1-%D8%A7%D9%84%D8%AA%D9%85%D8%B1%D9%8A%D8%B1-r705/" rel="">إظهار المحتوى أثناء التمرير</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D8%B3%D9%87%D9%88%D9%84%D8%A9-%D8%A7%D9%84%D9%88%D8%B5%D9%88%D9%84-r706/" rel="">سهولة الوصول</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D9%86%D9%87%D8%A7%D9%8A%D8%A9-%D8%A7%D9%84%D8%B1%D8%AD%D9%84%D8%A9-r707/" rel="">نهاية الرحلة</a>
	</li>
</ul>
<h2 id="-">
	إضافة أو إزالة الأصناف
</h2>

<p>
	أهم ما يميّز الانتقالات هي قدرتها على التحريك بين حالتين، لذا يمكننا إنشاء تلك الحالات على هيئة أصناف (classes) منفصلة ثم نضيف أو نزيل تلك الأصناف باستخدام <a href="https://wiki.hsoub.com/JavaScript" rel="external">JavaScript</a>.
</p>

<figure style="text-align: center;"><img alt="js-triggered-button-min.gif" class="ipsImage ipsImage_thumbnailed" data-fileid="29898" data-unique="hlj6vxj1z" src="https://academy.hsoub.com/uploads/monthly_2019_06/js-triggered-button-min.gif.c4b441553769c57dd72b2f13f3f36455.gif"><figcaption>
		المصدر: <a href="http://codepen.io/donovanh/pen/YPbxqa" rel="external nofollow">http://codepen.io/donovanh/pen/YPbxqa</a>
	</figcaption></figure><p>
	يتألف هذا المثال من زر ومحتوى مُتضمَّن في عنصر <a href="https://wiki.hsoub.com/HTML/div" rel="external">div</a>. في البداية سيكون لحاوية المحتوى صنف <code>hide</code>. في <a href="https://wiki.hsoub.com/CSS" rel="external">CSS</a>، الصنف <code>hide</code> له الخاصية opacity: 0;<code>‎</code>.
</p>

<p>
	لدينا أيضًا صنف ثانٍ في <a href="https://wiki.hsoub.com/CSS" rel="external">CSS</a> يُسمى <code>show</code>. هذه الصنف لديه عتامة (<a href="https://wiki.hsoub.com/CSS/opacity" rel="external">opacity</a>) مساوية للقيمة <code>1</code>.
</p>

<p>
	عند النقر فوق الزر، يتراوح صنف العنصر <a href="https://wiki.hsoub.com/HTML/div" rel="external">div</a> بين <code>hide</code> و<code>show</code>. ولأجل تحريكه، فنحن نطبق عملية انتقال على العنصر <a href="https://wiki.hsoub.com/HTML/div" rel="external">div</a> أيضًا.
</p>

<p>
	يمكنك مطالعة هذا <a href="http://codepen.io/donovanh/pen/YPbxqa" rel="external nofollow">على CodePen</a>.
</p>

<p>
	إذا كنت ترغب في التعمق أكثر في الموضوع، فأنصحك بقراءة المقال <a href="http://webdesign.tutsplus.com/tutorials/adding-appeal-to-your-animations-on-the-web--cms-23649" rel="external nofollow">Adding Appeal to Your Animations on the Web</a>.
</p>

<p>
	في نهاية هذا الدرس، سنتعلم كيفية إجراء الانتقالات والتحريكات أثناء التمرير (scrolling).
</p>

<h2 id="-">
	التحكم في الانتقالات عبر جافاسكربت
</h2>

<p>
	يمكننا القيام بأكثر من إضافة أو إزالة الأصناف. فيمكننا باستخدام <a href="https://wiki.hsoub.com/JavaScript" rel="external">JavaScript</a>، ضبط خاصيات <a href="https://wiki.hsoub.com/CSS" rel="external">CSS</a> مباشرة على النحو التالي:
</p>

<pre class="ipsCode prettyprint lang-javascript prettyprinted" id="ips_uid_5506_7" style="">
<span class="pln">element</span><span class="pun">.</span><span class="pln">style</span><span class="pun">.</span><span class="pln">transition </span><span class="pun">=</span><span class="pln"> </span><span class="pun">`</span><span class="pln">opacity </span><span class="lit">1s</span><span class="pln"> ease</span><span class="pun">-</span><span class="pln">out</span><span class="pun">`;</span></pre>

<p>
	في هذه الحالة، يمثل <code>element</code> عنصرًا حددناه. على سبيل المثال، إذا كان لعنصر ما المُعرّف <code>js-show</code>، فيمكنك تطبيق الانتقال عليه باستخدام <code>getElementById</code>:
</p>

<pre class="ipsCode prettyprint lang-javascript prettyprinted" id="ips_uid_5506_13" style="">
<span class="pln">document</span><span class="pun">.</span><span class="pln">getElementById</span><span class="pun">(`</span><span class="pln">js</span><span class="pun">-</span><span class="pln">show</span><span class="pun">`).</span><span class="pln">style</span><span class="pun">.</span><span class="pln">transition </span><span class="pun">=</span><span class="pln"> </span><span class="pun">`</span><span class="pln">opacity </span><span class="lit">1s</span><span class="pln"> ease</span><span class="pun">-</span><span class="pln">out</span><span class="pun">`;</span></pre>

<p>
	عندما تفعل ذلك، يجب ألا تنسَ تضمين بادئات المتصفحات (vendor prefixes) أيضًا. سيُكتب ما سبق على النحو التالي:
</p>

<pre class="ipsCode prettyprint lang-javascript prettyprinted" id="ips_uid_5506_11" style="">
<span class="pln">document</span><span class="pun">.</span><span class="pln">getElementById</span><span class="pun">(`</span><span class="pln">js</span><span class="pun">-</span><span class="pln">show</span><span class="pun">`).</span><span class="pln">style</span><span class="pun">.</span><span class="pln">webkitTransition </span><span class="pun">=</span><span class="pln"> </span><span class="pun">`</span><span class="pln">opacity </span><span class="lit">1s</span><span class="pln"> ease</span><span class="pun">-</span><span class="pln">out</span><span class="pun">`;</span><span class="pln">
document</span><span class="pun">.</span><span class="pln">getElementById</span><span class="pun">(`</span><span class="pln">js</span><span class="pun">-</span><span class="pln">show</span><span class="pun">`).</span><span class="pln">style</span><span class="pun">.</span><span class="pln">transition </span><span class="pun">=</span><span class="pln"> </span><span class="pun">`</span><span class="pln">opacity </span><span class="lit">1s</span><span class="pln"> ease</span><span class="pun">-</span><span class="pln">out</span><span class="pun">`;</span></pre>

<p>
	في هذا المثال، ستُطبّق <code>webkitTransition</code> على كل المتصفحات ذات البادئة <code>-webkit-</code> في <a href="https://wiki.hsoub.com/CSS" rel="external">CSS</a>.
</p>

<h2 id="-">
	ملخص
</h2>

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

<figure style="text-align: center;"><img alt="ab.png" class="ipsImage ipsImage_thumbnailed" data-fileid="29897" data-unique="3f75z1sx9" src="https://academy.hsoub.com/uploads/monthly_2019_06/ab.png.0fd59c08d17a7831cb160c2bf1f393b1.png"><figcaption>
		نقل عنصر من حالة إلى أخرى
	</figcaption></figure><p>
	وقد تعلمنا في ثنيّات الطريق عدَّة خاصيات، مثل: المدة (duration) والتأخير (delay) ودوال التوقيت (timing functions).
</p>

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

<p>
	وأخيرًا، في هذه المقالة توّجنا ما سبق بتعلم كيفية تطبيق هذه الانتقالات باستخدام <a href="https://wiki.hsoub.com/JavaScript" rel="external">JavaScript</a>.
</p>

<p>
	الانتقالات ليست سوى جزء بسيط من التحريك في <a href="https://wiki.hsoub.com/CSS" rel="external">CSS</a>. سنغطي في المقالات اللاحقة الخاصية <a href="https://wiki.hsoub.com/CSS/animation" rel="external">animation</a>.
</p>

<h2 id="-">
	تمرين
</h2>

<p>
	قبل أن ننتقل إلى الخاصية <a href="https://wiki.hsoub.com/CSS/animation" rel="external">animation</a>، خذ بعض الوقت للتفكير في كيفية استخدام الانتقالات.
</p>

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

<h2 id="-">
	المصادر
</h2>

<ul>
<li>
		ترجمة وبتصرف للفصل transitions and javascript من كتاب <a href="https://cssanimation.rocks/css-animation-101" rel="external nofollow">CSS Animation 101</a> لمؤلفه Donovan Hutchinson.
	</li>
</ul>
<h2 id="-">
	اقرأ أيضًا
</h2>

<ul>
<li>
		المقالة التالية: <a href="https://academy.hsoub.com/programming/css/%D8%AA%D8%B7%D8%A8%D9%8A%D9%82-%D8%B9%D9%85%D9%84%D9%8A-%D8%A7%D9%84%D8%AA%D8%AD%D8%B1%D9%8A%D9%83%D8%A7%D8%AA-r685/" rel="">تطبيق عملي: التحريكات</a>
	</li>
	<li>
		المقالة السابقة: <a href="https://academy.hsoub.com/programming/css/%D8%A7%D9%84%D8%A7%D9%86%D8%AA%D9%82%D8%A7%D9%84%D8%A7%D8%AA-%D8%A7%D9%84%D9%85%D8%AA%D8%B9%D8%AF%D8%AF%D8%A9-r683/" rel="">الانتقالات المتعددة</a>
	</li>
	<li>
		النسخة العربية الكاملة من كتاب: <a href="https://academy.hsoub.com/files/14-%D8%A7%D9%84%D8%AA%D8%AD%D8%B1%D9%8A%D9%83-%D8%B9%D8%A8%D8%B1-css/" rel="">التحريك عبر CSS</a>
	</li>
</ul>
]]></description><guid isPermaLink="false">684</guid><pubDate>Sat, 15 Jun 2019 18:03:00 +0000</pubDate></item><item><title>&#x627;&#x644;&#x627;&#x646;&#x62A;&#x642;&#x627;&#x644;&#x627;&#x62A; &#x627;&#x644;&#x645;&#x62A;&#x639;&#x62F;&#x62F;&#x629;</title><link>https://academy.hsoub.com/programming/css/%D8%A7%D9%84%D8%A7%D9%86%D8%AA%D9%82%D8%A7%D9%84%D8%A7%D8%AA-%D8%A7%D9%84%D9%85%D8%AA%D8%B9%D8%AF%D8%AF%D8%A9-r683/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2019_06/5cf515398c462_.jpg.94d51cb4ca14ae0fe15aaaa070396cfe.jpg" /></p>

<p>
	لقد ناقشنا في المقالات السابقة كيف يخلق الانتقال (transition) الحركة عبر الانتقال من حالة إلى أخرى. في هذه المقالة سنرى ما يحدث عندما نطبق عملية انتقال واحدة على عنصر واحد تحدث له عدة تغييرات، وكيفية استخدام عدة انتقالات معًا لتحسين التحريكات.
</p>

<p>
	هذه المقالة جزء من سلسلة من المقالات <a href="https://academy.hsoub.com/tags/%D8%A7%D9%84%D8%AA%D8%AD%D8%B1%D9%8A%D9%83%20%D9%81%D9%8A%20css/" rel="">حول التحريك في CSS</a>:
</p>

<ul>
<li>
		<a href="https://academy.hsoub.com/programming/css/%D9%85%D8%A7-%D9%87%D9%8A-%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85%D8%A7%D8%AA-%D8%A7%D9%84%D8%AD%D8%B1%D9%83%D8%A7%D8%AA%D8%9F-r674/" rel="">ما هي استخدامات الحركات؟</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D8%AA%D8%AC%D9%87%D9%8A%D8%B2-%D8%A8%D9%8A%D8%A6%D8%A9-%D8%A7%D9%84%D8%B9%D9%85%D9%84-%D9%84%D8%A5%D9%86%D8%B4%D8%A7%D8%A1-%D8%A7%D9%84%D8%AD%D8%B1%D9%83%D8%A7%D8%AA-r675/" rel="">تجهيز بيئة العمل لإنشاء الحركات</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D8%A7%D9%84%D8%A7%D9%86%D8%AA%D9%82%D8%A7%D9%84%D8%A7%D8%AA-%D8%A7%D9%84%D8%AA%D9%86%D9%82%D9%84-%D8%A8%D9%8A%D9%86-%D8%A7%D9%84%D8%AD%D8%A7%D9%84%D8%A7%D8%AA-r676/" rel="">مدخل إلى الانتقالات: التنقل بين الحالات</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D8%A7%D9%84%D8%AD%D8%B1%D9%83%D8%A7%D8%AA-%D9%85%D9%81%D9%87%D9%88%D9%85-%D8%A7%D9%84%D8%AD%D8%B1%D9%83%D8%A9-r677/" rel="">مدخل إلى الحركات: مفهوم الحركة</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D8%AA%D8%B7%D8%A8%D9%8A%D9%82-%D8%B9%D9%85%D9%84%D9%8A-%D8%A7%D9%84%D8%A7%D9%86%D8%AA%D9%82%D8%A7%D9%84%D8%A7%D8%AA-r678/" rel="">تطبيق عملي: الانتقالات</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D8%AE%D8%A7%D8%B5%D9%8A%D8%A7%D8%AA-%D8%A7%D9%84%D8%A7%D9%86%D8%AA%D9%82%D8%A7%D9%84%D8%A7%D8%AA-r681/" rel="">خاصيات الانتقالات</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D8%AF%D9%88%D8%A7%D9%84-%D8%A7%D9%84%D8%AA%D9%88%D9%82%D9%8A%D8%AA-r682/" rel="">دوال التوقيت</a>
	</li>
	<li>
		الانتقالات المتعددة
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D8%A7%D9%84%D8%A7%D9%86%D8%AA%D9%82%D8%A7%D9%84%D8%A7%D8%AA-%D9%88%D8%AC%D8%A7%D9%81%D8%A7%D8%B3%D9%83%D8%B1%D8%A8%D8%AA-r684/" rel="">الانتقالات وجافاسكربت</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D8%AA%D8%B7%D8%A8%D9%8A%D9%82-%D8%B9%D9%85%D9%84%D9%8A-%D8%A7%D9%84%D8%AA%D8%AD%D8%B1%D9%8A%D9%83%D8%A7%D8%AA-r685/" rel="">تطبيق عملي: التحريكات</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D8%AE%D8%A7%D8%B5%D9%8A%D8%A7%D8%AA-%D8%A7%D9%84%D8%AD%D8%B1%D9%83%D8%A7%D8%AA-r693/" rel="">خاصيات الحركات</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D8%AA%D8%B7%D8%A8%D9%8A%D9%82-%D8%B9%D9%85%D9%84%D9%8A-%D8%A7%D9%84%D8%A5%D8%B7%D8%A7%D8%B1%D8%A7%D8%AA-%D8%A7%D9%84%D9%85%D9%81%D8%AA%D8%A7%D8%AD%D9%8A%D8%A9-r694/" rel="">تطبيق عملي: الإطارات المفتاحية</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D8%A7%D9%84%D8%AD%D8%B1%D9%83%D8%A7%D8%AA-%D8%A7%D9%84%D9%85%D8%AA%D8%B9%D8%AF%D8%AF%D8%A9-%D8%A7%D9%84%D9%85%D8%AA%D8%B2%D8%A7%D9%85%D9%86%D8%A9-r696/" rel="">الحركات المتعددة المتزامنة</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D9%85%D9%88%D8%AC%D8%B2-%D8%A7%D9%84%D8%AD%D8%B1%D9%83%D8%A7%D8%AA-r697/" rel="">موجز الحركات</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D8%B1%D9%88%D8%A7%D9%8A%D8%A9-%D8%A7%D9%84%D9%82%D8%B5%D8%B5-%D8%B9%D8%A8%D8%B1-%D8%A7%D9%84%D8%AD%D8%B1%D9%83%D8%A7%D8%AA-r698/" rel="">رواية القصص عبر الحركات</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D8%AD%D8%B1%D8%A8-%D8%A7%D9%84%D9%86%D8%AC%D9%88%D9%85-star-war-r704/" rel="">حرب النجوم</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D8%A5%D8%B8%D9%87%D8%A7%D8%B1-%D8%A7%D9%84%D9%85%D8%AD%D8%AA%D9%88%D9%89-%D8%A3%D8%AB%D9%86%D8%A7%D8%A1-%D8%A7%D9%84%D8%AA%D9%85%D8%B1%D9%8A%D8%B1-r705/" rel="">إظهار المحتوى أثناء التمرير</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D8%B3%D9%87%D9%88%D9%84%D8%A9-%D8%A7%D9%84%D9%88%D8%B5%D9%88%D9%84-r706/" rel="">سهولة الوصول</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D9%86%D9%87%D8%A7%D9%8A%D8%A9-%D8%A7%D9%84%D8%B1%D8%AD%D9%84%D8%A9-r707/" rel="">نهاية الرحلة</a>
	</li>
</ul>
<h2 id="-">
	المثال الأول: زر فني
</h2>

<p>
	رأينا في المقالات السابقة تأثيرًا بسيطًا للتحويم على الأزرار (button hover)، يمكننا دمج عدة انتقالات على نفس الزر للحصول على تأثير أكثر تعقيدًا.
</p>

<figure style="text-align: center;"><img alt="multiple-button-min.gif" class="ipsImage ipsImage_thumbnailed" data-fileid="29896" data-unique="eyj1zci4f" src="https://academy.hsoub.com/uploads/monthly_2019_06/multiple-button-min.gif.b785e476c7b87cc7b232f17a77f55d80.gif"><figcaption>
		المصدر: <a href="http://codepen.io/donovanh/pen/YPMGpJ" rel="external nofollow">http://codepen.io/donovanh/pen/YPMGpJ</a>
	</figcaption></figure><p>
	في <a href="http://codepen.io/donovanh/pen/YPMGpJ" rel="external nofollow">هذا المثال</a>، يجمع تأثير التحويم بين عدة تغييرات للحالة، ولكنها مُحدّدة جميعًا عبر انتقال واحد:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_9790_7" style="">
<span class="pln">transition</span><span class="pun">:</span><span class="pln"> transform </span><span class="lit">0.4s</span><span class="pln"> cubic</span><span class="pun">-</span><span class="pln">bezier</span><span class="pun">(.</span><span class="lit">72</span><span class="pun">,-</span><span class="lit">0.61</span><span class="pun">,.</span><span class="lit">25</span><span class="pun">,</span><span class="lit">1.51</span><span class="pun">);</span></pre>

<p>
	إليك كيف يعمل هذا المثال. يتألف الزر من أيقونتين ونصّين. في الحالة الأولية (حالة غير التحويم non-hover state) يوضع النص "Follow me" وأيقونة Twitter داخل الزر. نضع الرمز @ والنص "cssanimation" خارج الزر على النحو التالي:
</p>

<figure style="text-align: center;"><img alt="button-element-positioning.png" class="ipsImage ipsImage_thumbnailed" data-fileid="29893" data-unique="46vu6q8z0" src="https://academy.hsoub.com/uploads/monthly_2019_06/button-element-positioning.png.0d9c3d1f38adf200faefeefa0d3d6988.png"></figure><p>
	ثم نضيف حالة تحويم، حيث يتم وضع العناصر الموجودة خارج الزر داخله، كما يلي:
</p>

<figure style="text-align: center;"><img alt="button-element-positioning2.png" class="ipsImage ipsImage_thumbnailed" data-fileid="29894" data-unique="kx9pdhem8" src="https://academy.hsoub.com/uploads/monthly_2019_06/button-element-positioning2.png.c6e8eea230d25b91c93643d026345368.png"></figure><p>
	يمكننا فعل هذا باستخدام انتقالات <a href="https://wiki.hsoub.com/CSS" rel="external">CSS</a>. على سبيل المثال، يُحدَّد موضع أيقونة Twitter باستخدام التموضع المطلق (absolute positioning). عند إعداد الأيقونة، يمكن تحديد موضعها في المكان الذي نريد باستخدام القيم <code>left</code> و <code>top</code>:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_9790_9" style="">
<span class="pun">.</span><span class="pln">icon </span><span class="pun">{</span><span class="pln">
  position</span><span class="pun">:</span><span class="pln"> absolute</span><span class="pun">;</span><span class="pln">
  left</span><span class="pun">:</span><span class="pln"> </span><span class="lit">0.75em</span><span class="pun">;</span><span class="pln">
  top</span><span class="pun">:</span><span class="pln"> </span><span class="lit">0.75em</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	ثم نضيف حالة تحويم للزر، ونضع أيقونة Twitter خارج الزر عبر الخاصية <a href="https://wiki.hsoub.com/CSS/transform" rel="external"><code>transform</code></a>:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_9790_11" style="">
<span class="pln">a</span><span class="pun">:</span><span class="pln">hover </span><span class="pun">.</span><span class="pln">icon </span><span class="pun">{</span><span class="pln">
  transform</span><span class="pun">:</span><span class="pln"> translateY</span><span class="pun">(</span><span class="lit">3em</span><span class="pun">);</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	إضافة <code>overflow: hidden</code> إلى الحاوية (container) يعني أنّ العناصر الموجودة خارج الزر لن تظهر.
</p>

<p>
	في غياب الانتقال ستختفي الأيقونة فجأة. نظرًا لأنّ كل عنصر من العناصر الموجودة داخل الزر من النوع <a href="https://wiki.hsoub.com/HTML/span" rel="external">span</a>، فيمكننا تطبيق الانتقال عليها جميعًا دفعة واحدة:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_9790_13" style="">
<span class="pln">span </span><span class="pun">{</span><span class="pln">
  transition</span><span class="pun">:</span><span class="pln"> transform </span><span class="lit">0.4s</span><span class="pln"> cubic</span><span class="pun">-</span><span class="pln">bezier</span><span class="pun">(.</span><span class="lit">72</span><span class="pun">,-</span><span class="lit">0.61</span><span class="pun">,.</span><span class="lit">25</span><span class="pun">,</span><span class="lit">1.51</span><span class="pun">);</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	هذا يعني أنه سيحدث انتقال كل عناصر <a href="https://wiki.hsoub.com/HTML/span" rel="external">span</a> إذا تغيرت حالتها، مثلًا، عند التحويم عليها. يتم تطبيق نفس الحيلة على الأجزاء الأخرى من الزر.
</p>

<p>
	يمكنك مشاهدة <a href="http://codepen.io/donovanh/pen/YPMGpJ" rel="external nofollow">هذا المثال بالكامل على CodePen</a>.
</p>

<h2 id="-">
	المثال الثاني: كشف الخلفية
</h2>

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

<figure style="text-align: center;"><img alt="cat-min.gif" class="ipsImage ipsImage_thumbnailed" data-fileid="29895" data-unique="ltms5kjc3" src="https://academy.hsoub.com/uploads/monthly_2019_06/cat-min.gif.b0971c16f83657de2e8c54817cfdec31.gif"><figcaption>
		المصدر: <a href="http://codepen.io/donovanh/pen/LEvjJg" rel="external nofollow">http://codepen.io/donovanh/pen/LEvjJg</a>
	</figcaption></figure><p>
	الحالة الأولية (حالة غير التحويم) للبطاقة تُظهر عنوانًا، ولكنّ عتامة (<a href="https://wiki.hsoub.com/CSS/opacity" rel="external">opacity</a>) نص الفقرة تساوي الصفر. عند التحويم، نقوم بتغيير ذلك إلى القيمة <code>1</code> لإظهار النص، مع تغيير ارتفاع حاوية النص.
</p>

<p>
	في غياب الانتقال، <a href="http://codepen.io/donovanh/pen/PwgKLw?editors=110" rel="external nofollow">سيبدو هكذا</a>. عندما نمرّر مؤشر الفأرة (نحوّم) فوق البطاقة، فسيكون التغيير مفاجئًا.
</p>

<p>
	مع إضافة انتقالين، سيتغيّر الانطباع تمامًا. <a href="http://codepen.io/donovanh/pen/LEvjJg" rel="external nofollow">وها هي النتيجة</a>.
</p>

<p>
	يبدو الانتقال الأول (المكتوب بالصياغة المختزلة هذه المرة) كما يلي:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_9790_15" style="">
<span class="pln">transition</span><span class="pun">:</span><span class="pln"> all </span><span class="lit">0.5s</span><span class="pln"> cubic</span><span class="pun">-</span><span class="pln">bezier</span><span class="pun">(.</span><span class="lit">48</span><span class="pun">,-</span><span class="lit">0.28</span><span class="pun">,.</span><span class="lit">41</span><span class="pun">,</span><span class="lit">1.4</span><span class="pun">);</span></pre>

<p>
	يخبر هذا المتصفحَ بأنّ عليه تحريك جميع الخاصيات على مدى 0.5 ثانية، مع استخدام انتقال <code>cubic-bezier</code> لجعله يرتد. وفي هذه الحالة، فهو يؤثر على ارتفاع حاوية النص.
</p>

<p>
	الانتقال الثاني يجعل النص يتحرك. سنستخدم هنا دالة التوقيت <code>ease-out</code>:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_9790_17" style="">
<span class="pln">transition</span><span class="pun">:</span><span class="pln"> all </span><span class="lit">0.4s</span><span class="pln"> ease</span><span class="pun">-</span><span class="kwd">out</span><span class="pun">;</span></pre>

<p>
	يمكننا تحقيق الكثير من التأثيرات من خلال تغيير الحالات في وضع التحويم. في هذا المثال، يُعطَى لارتفاع العنصر <a href="https://wiki.hsoub.com/HTML/div" rel="external">div</a> ذو الصنف <code>info</code> وللفقرة الموجودة داخله عندما يكونان في الحالة <code>‎.card: hover</code>.
</p>

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

<p>
	يمكنك <a href="http://codepen.io/donovanh/pen/LEvjJg" rel="external nofollow">مشاهدة هذا المثال على CodePen</a>.
</p>

<h2 id="-">
	انتقالات متعددة على عنصر واحد
</h2>

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

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

<p>
	يمكننا تحقيق ذلك من خلال الجمع بين عدة انتقالات في نفس التعليمة، حيث يتم فصل الانتقالات بفواصل.
</p>

<p>
	مثلًا:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_9790_19" style="">
<span class="pln">transition</span><span class="pun">:</span><span class="pln"> background </span><span class="lit">1s</span><span class="pln"> ease</span><span class="pun">-</span><span class="kwd">out</span><span class="pun">,</span><span class="pln"> border </span><span class="lit">0.5s</span><span class="pln"> linear</span><span class="pun">;</span></pre>

<p>
	ينطبق الانتقال الأول هنا على الخلفية فقط، أما الثاني (بعد الفاصلة) فينطبق فقط على الحدود. هذا يعني أنّ حالة التحويم التي تغيّر الخلفية ستستغرق ثانية واحدة، فيما سيستغرق انتقال الحدود 0.5 ثانية.
</p>

<h2 id="-">
	تمرين
</h2>

<p>
	في هذه المقالة درسنا كيف يمكن التعامل مع عدة تأثيرات عبر انتقال واحد، وكيف يمكن استخدام عدة انتقالات معًا. يجدر بك إلقاء نظرة على الأمثلة في CodePen:
</p>

<ul>
<li>
		مثال 1: <a href="http://codepen.io/donovanh/pen/YPMGpJ" rel="external nofollow"> زر فني</a>
	</li>
	<li>
		مثال 2: <a href="http://codepen.io/donovanh/pen/LEvjJg" rel="external nofollow">بطاقة Cat Hover</a>
	</li>
</ul>
<p>
	هل يمكنك استخدام هذه الأنواع من الانتقالات في مشروع تعمل عليه حاليًا؟
</p>

<p>
	لقد غطينا الكثير حتى الآن. سوف نلقي في المقالة التالية نظرة على كيفية تطبيق هذه الانتقالات باستخدام <a href="https://wiki.hsoub.com/JavaScript" rel="external">JavaScript</a>.
</p>

<h2 id="-">
	المصادر
</h2>

<ul>
<li>
		ترجمة وبتصرف للفصل multiple transitions من كتاب <a href="https://cssanimation.rocks/css-animation-101" rel="external nofollow">CSS Animation 101</a> لمؤلفه Donovan Hutchinson.
	</li>
</ul>
<h2 id="-">
	اقرأ أيضا
</h2>

<ul>
<li>
		المقالة التالية: <a href="https://academy.hsoub.com/programming/css/%D8%A7%D9%84%D8%A7%D9%86%D8%AA%D9%82%D8%A7%D9%84%D8%A7%D8%AA-%D9%88%D8%AC%D8%A7%D9%81%D8%A7%D8%B3%D9%83%D8%B1%D8%A8%D8%AA-r684/" rel="">الانتقالات وجافاسكربت</a>
	</li>
	<li>
		المقالة السابقة: <a href="https://academy.hsoub.com/programming/css/%D8%AF%D9%88%D8%A7%D9%84-%D8%A7%D9%84%D8%AA%D9%88%D9%82%D9%8A%D8%AA-r682/" rel="">دوال التوقيت</a>
	</li>
	<li>
		النسخة العربية الكاملة من كتاب: <a href="https://academy.hsoub.com/files/14-%D8%A7%D9%84%D8%AA%D8%AD%D8%B1%D9%8A%D9%83-%D8%B9%D8%A8%D8%B1-css/" rel="">التحريك عبر CSS</a>
	</li>
</ul>
]]></description><guid isPermaLink="false">683</guid><pubDate>Wed, 12 Jun 2019 18:02:00 +0000</pubDate></item><item><title>&#x62F;&#x648;&#x627;&#x644; &#x627;&#x644;&#x62A;&#x648;&#x642;&#x64A;&#x62A;</title><link>https://academy.hsoub.com/programming/css/%D8%AF%D9%88%D8%A7%D9%84-%D8%A7%D9%84%D8%AA%D9%88%D9%82%D9%8A%D8%AA-r682/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2019_06/5cf50d19b7463_.jpg.ffd039672a51512ad7a3a513fd97fcb5.jpg" /></p>

<p>
	<a href="https://wiki.hsoub.com/CSS/timing-function" rel="external">دالة التوقيت</a> (timing function) تتحكم في وتيرة وسرعة التغيرات التي تحدث إبّان الانتقال (transition). باستخدام دوال التوقيت، يمكن جعل الانتقالات أكثر حيوية.
</p>

<p>
	هذه المقالة جزء من سلسلة من المقالات <a href="https://academy.hsoub.com/tags/%D8%A7%D9%84%D8%AA%D8%AD%D8%B1%D9%8A%D9%83%20%D9%81%D9%8A%20css/" rel="">حول التحريك في CSS</a>:
</p>

<ul>
<li>
		<a href="https://academy.hsoub.com/programming/css/%D9%85%D8%A7-%D9%87%D9%8A-%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85%D8%A7%D8%AA-%D8%A7%D9%84%D8%AD%D8%B1%D9%83%D8%A7%D8%AA%D8%9F-r674/" rel="">ما هي استخدامات الحركات؟</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D8%AA%D8%AC%D9%87%D9%8A%D8%B2-%D8%A8%D9%8A%D8%A6%D8%A9-%D8%A7%D9%84%D8%B9%D9%85%D9%84-%D9%84%D8%A5%D9%86%D8%B4%D8%A7%D8%A1-%D8%A7%D9%84%D8%AD%D8%B1%D9%83%D8%A7%D8%AA-r675/" rel="">تجهيز بيئة العمل لإنشاء الحركات</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D8%A7%D9%84%D8%A7%D9%86%D8%AA%D9%82%D8%A7%D9%84%D8%A7%D8%AA-%D8%A7%D9%84%D8%AA%D9%86%D9%82%D9%84-%D8%A8%D9%8A%D9%86-%D8%A7%D9%84%D8%AD%D8%A7%D9%84%D8%A7%D8%AA-r676/" rel="">مدخل إلى الانتقالات: التنقل بين الحالات</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D8%A7%D9%84%D8%AD%D8%B1%D9%83%D8%A7%D8%AA-%D9%85%D9%81%D9%87%D9%88%D9%85-%D8%A7%D9%84%D8%AD%D8%B1%D9%83%D8%A9-r677/" rel="">مدخل إلى الحركات: مفهوم الحركة</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D8%AA%D8%B7%D8%A8%D9%8A%D9%82-%D8%B9%D9%85%D9%84%D9%8A-%D8%A7%D9%84%D8%A7%D9%86%D8%AA%D9%82%D8%A7%D9%84%D8%A7%D8%AA-r678/" rel="">تطبيق عملي: الانتقالات</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D8%AE%D8%A7%D8%B5%D9%8A%D8%A7%D8%AA-%D8%A7%D9%84%D8%A7%D9%86%D8%AA%D9%82%D8%A7%D9%84%D8%A7%D8%AA-r681/" rel="">خاصيات الانتقالات</a>
	</li>
	<li>
		دوال التوقيت
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D8%A7%D9%84%D8%A7%D9%86%D8%AA%D9%82%D8%A7%D9%84%D8%A7%D8%AA-%D8%A7%D9%84%D9%85%D8%AA%D8%B9%D8%AF%D8%AF%D8%A9-r683/" rel="">الانتقالات المتعددة</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D8%A7%D9%84%D8%A7%D9%86%D8%AA%D9%82%D8%A7%D9%84%D8%A7%D8%AA-%D9%88%D8%AC%D8%A7%D9%81%D8%A7%D8%B3%D9%83%D8%B1%D8%A8%D8%AA-r684/" rel="">الانتقالات وجافاسكربت</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D8%AA%D8%B7%D8%A8%D9%8A%D9%82-%D8%B9%D9%85%D9%84%D9%8A-%D8%A7%D9%84%D8%AA%D8%AD%D8%B1%D9%8A%D9%83%D8%A7%D8%AA-r685/" rel="">تطبيق عملي: التحريكات</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D8%AE%D8%A7%D8%B5%D9%8A%D8%A7%D8%AA-%D8%A7%D9%84%D8%AD%D8%B1%D9%83%D8%A7%D8%AA-r693/" rel="">خاصيات الحركات</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D8%AA%D8%B7%D8%A8%D9%8A%D9%82-%D8%B9%D9%85%D9%84%D9%8A-%D8%A7%D9%84%D8%A5%D8%B7%D8%A7%D8%B1%D8%A7%D8%AA-%D8%A7%D9%84%D9%85%D9%81%D8%AA%D8%A7%D8%AD%D9%8A%D8%A9-r694/" rel="">تطبيق عملي: الإطارات المفتاحية</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D8%A7%D9%84%D8%AD%D8%B1%D9%83%D8%A7%D8%AA-%D8%A7%D9%84%D9%85%D8%AA%D8%B9%D8%AF%D8%AF%D8%A9-%D8%A7%D9%84%D9%85%D8%AA%D8%B2%D8%A7%D9%85%D9%86%D8%A9-r696/" rel="">الحركات المتعددة المتزامنة</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D9%85%D9%88%D8%AC%D8%B2-%D8%A7%D9%84%D8%AD%D8%B1%D9%83%D8%A7%D8%AA-r697/" rel="">موجز الحركات</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D8%B1%D9%88%D8%A7%D9%8A%D8%A9-%D8%A7%D9%84%D9%82%D8%B5%D8%B5-%D8%B9%D8%A8%D8%B1-%D8%A7%D9%84%D8%AD%D8%B1%D9%83%D8%A7%D8%AA-r698/" rel="">رواية القصص عبر الحركات</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D8%AD%D8%B1%D8%A8-%D8%A7%D9%84%D9%86%D8%AC%D9%88%D9%85-star-war-r704/" rel="">حرب النجوم</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D8%A5%D8%B8%D9%87%D8%A7%D8%B1-%D8%A7%D9%84%D9%85%D8%AD%D8%AA%D9%88%D9%89-%D8%A3%D8%AB%D9%86%D8%A7%D8%A1-%D8%A7%D9%84%D8%AA%D9%85%D8%B1%D9%8A%D8%B1-r705/" rel="">إظهار المحتوى أثناء التمرير</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D8%B3%D9%87%D9%88%D9%84%D8%A9-%D8%A7%D9%84%D9%88%D8%B5%D9%88%D9%84-r706/" rel="">سهولة الوصول</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D9%86%D9%87%D8%A7%D9%8A%D8%A9-%D8%A7%D9%84%D8%B1%D8%AD%D9%84%D8%A9-r707/" rel="">نهاية الرحلة</a>
	</li>
</ul>
<p>
	فيما يلي <a href="https://codepen.io/donovanh/pen/vMPgmd" rel="external nofollow">مثال للانتقال باستخدام دالة توقيت خطية</a>، إذ تتحرك جيئةً وذهابًا بوتيرة ثابتة.
</p>

<p>
	قارن هذا بهذا <a href="https://codepen.io/donovanh/pen/Zbjbrx" rel="external nofollow">المثال الذي يستخدم دوال التوقيت المسماة cubic-bezier</a>. سترى فرقًا كبيرًا في وتيرة الحركة.
</p>

<p>
	في هذا المثال، سنستخدم دالة <a href="https://ar.wikipedia.org/wiki/%D9%85%D9%86%D8%AD%D9%86%D9%89_%D8%A8%D9%8A%D8%B2%D9%8A%D9%87" rel="external nofollow">cubic-bezier</a> مخصصة:
</p>

<figure style="text-align: center;"><img alt="demo-min.gif" class="ipsImage ipsImage_thumbnailed" data-fileid="29886" data-unique="swfe8ppm9" src="https://academy.hsoub.com/uploads/monthly_2019_06/demo-min.gif.ea5618eb622937dc1e1ab7e917181161.gif"><figcaption>
		دالة توقيت cubic-bezier
	</figcaption></figure><p>
	تجعل مقاربة <code>cubic-bezier</code> في هذا المثال التحريكات تتراجع إلى الوراء قليلاً قبل التحول بسرعة إلى الحالة الثانية، حيث تتجاوزها فعليًا، ثم تعود إليها.
</p>

<p>
	أمثلة <a href="https://wiki.hsoub.com/CSS" rel="external">CSS</a> التي أعطيناها في البداية، وحالة التحويم (hover state) في كل الأمثلة تعتمد على دالة التوقيت.
</p>

<p>
	سنلقي نظرة على كل تلك الدوال، ونتعرف على كيفية تأثيرها على الطريقة التي تتحرك بها العناصر.
</p>

<p>
	إذا كنت ترغب بالتجريب على هذه الأمثلة، فقد أعددت <a href="http://codepen.io/donovanh/pen/GgaRNv" rel="external nofollow">مشروعًا على CodePen</a> يمكنك الدخول إليه والتعديل عليه.
</p>

<h2 id="linear">
	Linear
</h2>

<figure style="text-align: center;"><img alt="linear-example-min.gif" class="ipsImage ipsImage_thumbnailed" data-fileid="29890" data-unique="0obsiroli" src="https://academy.hsoub.com/uploads/monthly_2019_06/linear-example-min.gif.8006962db86a52f8f6a8179ff250c0d1.gif"><figcaption>
		دالة التسارع الخطي Linear
	</figcaption></figure><p>
	يتغير التسارع الخطي (linear transition) بمعدل ثابت من البداية إلى النهاية. ونظرًا لعدم وجود منحنى في الانتقال، فهو لا يتسارع أو يتباطأ. يمكن أن يكون هذا مفيدًا إن كنت تريد إنشاء تحريك يحتاج إلى حركة ثابتة، مثل مشهد خلفية نافذة قطار متحرك، أو الدوران الثابت.
</p>

<h2 id="ease-in">
	Ease-in
</h2>

<figure style="text-align: center;"><img alt="ease-in-min.gif" class="ipsImage ipsImage_thumbnailed" data-fileid="29887" data-unique="azq8i0zom" src="https://academy.hsoub.com/uploads/monthly_2019_06/ease-in-min.gif.7f6e0da152653952946a8e501f1ce4f7.gif"><figcaption>
		التسارع المتباطئ عند الانطلاق ease-in
	</figcaption></figure><p>
	تبدأ دالة التسارع المتباطئ عند الانطلاق (ease-in timing function) ببطء وتتسارع في نهاية الانتقال. بشكل مشابه لكرة تتدحرج من أعلى التل، حيث تبدأ ببطئ، وتنتهي بسرعة كبيرة في الأسفل.
</p>

<h2 id="ease-out">
	Ease-out
</h2>

<figure style="text-align: center;"><img alt="ease-out-min.gif" class="ipsImage ipsImage_thumbnailed" data-fileid="29889" data-unique="2lhyq1qbc" src="https://academy.hsoub.com/uploads/monthly_2019_06/ease-out-min.gif.7dd05eab87ab20b0be6d89182d7ab5f2.gif"><figcaption>
		التسارع المتباطئ عند التوقف ease-out
	</figcaption></figure><p>
	دالة التسارع المتباطئ عند التوقف (ease-out timing function) تتصرف بشكل معاكس لدالة التسريع الداخلي. إذ تبدأ بسرعة، ثم تتباطئ في نهاية الانتقال. هذا مفيد في الحالات التي تحتاج فيها إلى إعطاء الزائر شعورًا بأنّ شيئًا ما يندفع من خارج الشاشة ثم يبطئ للتوقف.
</p>

<h2 id="ease-in-out">
	Ease-in-out
</h2>

<figure style="text-align: center;"><img alt="ease-in-out-min.gif" class="ipsImage ipsImage_thumbnailed" data-fileid="29888" data-unique="1b346yg9h" src="https://academy.hsoub.com/uploads/monthly_2019_06/ease-in-out-min.gif.67c85152fe25b76f470ce234312192e9.gif"><figcaption>
		دالة التسارع المتباطئ عند الانطلاق والتوقف Ease-in-out
	</figcaption></figure><p>
	دالة التسارع المتباطئ عند الانطلاق والتوقف (ease-in-out timing function)، هي مزيج من دالتي التسريع الداخلي والخارجي. إذ تبدأ ببطء، وتتسارع خلال الجزء الأوسط من الانتقال، ثم تتباطأ عند النهاية. يمكن أن تمثّل سيارة تبدأ من حالة توقف تام، ثم تتسارع، ثم تبطئ قبل التوقف. كما قد تكون مفيدة لإنشاء تحريك يمثل عملية التحميل.
</p>

<h2 id="cubic-bezier">
	Cubic-bezier
</h2>

<figure style="text-align: center;"><img alt="cubic-bezier-min.gif" class="ipsImage ipsImage_thumbnailed" data-fileid="29885" data-unique="b0n9e12dt" src="https://academy.hsoub.com/uploads/monthly_2019_06/cubic-bezier-min.gif.5087a259f8129a91dbc9a4fc6720670b.gif"><figcaption>
		دالة التسارع المخصص Cubic-bezier
	</figcaption></figure><p>
	جميع دوال التوقيت التي رأيناها حتى الآن هي أمثلة لمنحنى cubic bezier. وهو منحنى يصف "شكل" دالة التوقيت. وهكذا، فإنّ تحديد دالة توقيت <code>cubic-bezier</code> يكافئ إنشاء دالة توقيت خاصة بنا.
</p>

<p>
	تتألف دوال توقيت <code>cubic-bezier</code> من 4 قيم، تمثل إحداثيتين (co-ordinates).
</p>

<p>
	صياغة cubic-bezier قد تبدو على الشكل التالي:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_7483_6" style="">
<span class="pln">transition</span><span class="pun">-</span><span class="pln">timing</span><span class="pun">-</span><span class="kwd">function</span><span class="pun">:</span><span class="pln"> cubic</span><span class="pun">-</span><span class="pln">bezier</span><span class="pun">(</span><span class="lit">1</span><span class="pun">,-</span><span class="lit">0.49</span><span class="pun">,.</span><span class="lit">13</span><span class="pun">,</span><span class="lit">1.09</span><span class="pun">);</span></pre>

<p>
	الإحداثيتان هنا هما (‎1, -0.49) و (‎.13, 1.09). على الرسم البياني تبدو كما يلي:
</p>

<figure style="text-align: center;"><img alt="cubic-bezier-graph.png" class="ipsImage ipsImage_thumbnailed" data-fileid="29884" data-unique="qz67n8eo2" src="https://academy.hsoub.com/uploads/monthly_2019_06/cubic-bezier-graph.png.45d4dd3b683a7009e2b00d75f8d39fd7.png"><figcaption>
		المصدر: <a href="http://cubic-bezier.com/#1,-0.49,.13,1.09" rel="external nofollow">http://cubic-bezier.com/#1,-0.49,.13,1.09</a>
	</figcaption></figure><p>
	بدلاً من إنشاء المنحنيات يدويًا، فأنا أستخدم <a href="http://cubic-bezier.com/" rel="external nofollow">موقع cubic-bezier.com</a>. سيمكّنك هذا الموقع من إنشاء بعض التأثيرات الرائعة.
</p>

<p>
	تصبح منحنيات cubic-bezier ممتعة عند استخدام قيم أكبر من 1، إذ من الممكن إنشاء انتقالات تتخطى الحدود وترتد.
</p>

<h2 id="steps">
	Steps
</h2>

<figure style="text-align: center;"><img alt="steps-min.gif" class="ipsImage ipsImage_thumbnailed" data-fileid="29891" data-unique="igqbxxvqi" src="https://academy.hsoub.com/uploads/monthly_2019_06/steps-min.gif.43c8798987e2acc0cb45984baad20bab.gif"><figcaption>
		دالة الانتقال الخطوي Steps
	</figcaption></figure><p>
	في حين تعتمد معظم <a href="https://wiki.hsoub.com/CSS/timing-function" rel="external">دوال التوقيت</a> على المنحنيات، فإنّ الدالة <code>steps</code> تُقسّم عملية الانتقال إلى مجموعة من المراحل، وتقفز من مرحلة إلى التي تليها. ‎على سبيل المثال، إذا حددت القيمة <code>steps(4)‎</code>، فإنّ مدة الانتقال ستقُسّم إلى 4 قفزات منفصلة (انظر الصورة أعلاه).
</p>

<p style="text-align: center;">
	<img alt="steps.png" class="ipsImage ipsImage_thumbnailed" data-fileid="29892" data-unique="849o600rs" src="https://academy.hsoub.com/uploads/monthly_2019_06/steps.png.20ae8cc47a81191326314f58c6c9c342.png"></p>

<p>
	هذا مفيد للتحريكات المفاجئة. على سبيل المثال، دوّار التحميل (loading spinner)، أو شخصية متحركة للعبة فيديو. من خلال تعيين موضع الخلفية في بداية سلسلة الإطارات (frames)، يمكن استخدام دالة التوقيت <code>steps</code> للقفز من إطار لآخر، وإحداث شعور بالحركة.
</p>

<p>
	لمشاهدة مثال على ذلك، شاهد التحريك <a href="https://cssanimation.rocks/twitter-fave/" rel="external nofollow">Twitter fave button</a>.
</p>

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

<p>
	يمكننا تحديد الخيار المناسب عند تحديد الخطوات:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_7483_8" style="">
<span class="pln">transition</span><span class="pun">:</span><span class="pln"> all </span><span class="lit">2s</span><span class="pln"> steps</span><span class="pun">(</span><span class="lit">10</span><span class="pun">,</span><span class="pln"> start</span><span class="pun">);</span><span class="pln">
transition</span><span class="pun">:</span><span class="pln"> all </span><span class="lit">2s</span><span class="pln"> steps</span><span class="pun">(</span><span class="lit">10</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">end</span><span class="pun">);</span></pre>

<h2 id="-">
	تمرين
</h2>

<p>
	تتمة <a href="https://academy.hsoub.com/programming/css/%D8%AE%D8%A7%D8%B5%D9%8A%D8%A7%D8%AA-%D8%A7%D9%84%D8%A7%D9%86%D8%AA%D9%82%D8%A7%D9%84%D8%A7%D8%AA-r681/" rel="">للتمرين السابق</a>: حاول تغيير قيمة <code>transition-timing-function</code>، وشاهد كيف يغير ذلك الطريقة التي يظهر بها الانتقال.
</p>

<p>
	يمكنك أيضًا محاولة تغيير القيم في <a href="http://codepen.io/donovanh/pen/GgaRNv" rel="external nofollow">هذا المثال التوضيحي</a>. من الناحية الفنية، فهي تحريك (animation) وليست انتقالًا (transition)، لكنّ دالة التوقيت تنطبق بنفس الطريقة.
</p>

<h2 id="-">
	المصادر
</h2>

<ul>
<li>
		ترجمة وبتصرف للفصل timing functions من كتاب <a href="https://cssanimation.rocks/css-animation-101" rel="external nofollow">CSS Animation 101</a> لمؤلفه Donovan Hutchinson.
	</li>
</ul>
<h2 id="-">
	اقرأ أيضًا
</h2>

<ul>
<li>
		المقالة التالية: <a href="https://academy.hsoub.com/programming/css/%D8%A7%D9%84%D8%A7%D9%86%D8%AA%D9%82%D8%A7%D9%84%D8%A7%D8%AA-%D8%A7%D9%84%D9%85%D8%AA%D8%B9%D8%AF%D8%AF%D8%A9-r683/" rel="">الانتقالات المتعددة</a>
	</li>
	<li>
		المقالة السابقة: <a href="https://academy.hsoub.com/programming/css/%D8%AE%D8%A7%D8%B5%D9%8A%D8%A7%D8%AA-%D8%A7%D9%84%D8%A7%D9%86%D8%AA%D9%82%D8%A7%D9%84%D8%A7%D8%AA-r681/" rel="">خاصيات الانتقالات</a>
	</li>
	<li>
		النسخة العربية الكاملة من كتاب: <a href="https://academy.hsoub.com/files/14-%D8%A7%D9%84%D8%AA%D8%AD%D8%B1%D9%8A%D9%83-%D8%B9%D8%A8%D8%B1-css/" rel="">التحريك عبر CSS</a>
	</li>
</ul>
]]></description><guid isPermaLink="false">682</guid><pubDate>Sat, 08 Jun 2019 18:03:00 +0000</pubDate></item><item><title>&#x62E;&#x627;&#x635;&#x64A;&#x627;&#x62A; &#x627;&#x644;&#x627;&#x646;&#x62A;&#x642;&#x627;&#x644;&#x627;&#x62A;</title><link>https://academy.hsoub.com/programming/css/%D8%AE%D8%A7%D8%B5%D9%8A%D8%A7%D8%AA-%D8%A7%D9%84%D8%A7%D9%86%D8%AA%D9%82%D8%A7%D9%84%D8%A7%D8%AA-r681/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2019_06/5cf5098e61063_.jpg.96f8a4004e5ee5b1e5be4d0801158d45.jpg" /></p>

<p>
	تعلّمنا في المقالة الماضية كيفية عمل الخاصية <a href="https://wiki.hsoub.com/CSS/transition" rel="external">transition</a>، وسنلقي في هذه المقالة نظرة على خاصيات الانتقالات.
</p>

<p>
	هذه المقالة جزء من سلسلة من المقالات <a href="https://academy.hsoub.com/tags/%D8%A7%D9%84%D8%AA%D8%AD%D8%B1%D9%8A%D9%83%20%D9%81%D9%8A%20css/" rel="">حول التحريك في CSS</a>:
</p>

<ul>
<li>
		<a href="https://academy.hsoub.com/programming/css/%D9%85%D8%A7-%D9%87%D9%8A-%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85%D8%A7%D8%AA-%D8%A7%D9%84%D8%AD%D8%B1%D9%83%D8%A7%D8%AA%D8%9F-r674/" rel="">ما هي استخدامات الحركات؟</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D8%AA%D8%AC%D9%87%D9%8A%D8%B2-%D8%A8%D9%8A%D8%A6%D8%A9-%D8%A7%D9%84%D8%B9%D9%85%D9%84-%D9%84%D8%A5%D9%86%D8%B4%D8%A7%D8%A1-%D8%A7%D9%84%D8%AD%D8%B1%D9%83%D8%A7%D8%AA-r675/" rel="">تجهيز بيئة العمل لإنشاء الحركات</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D8%A7%D9%84%D8%A7%D9%86%D8%AA%D9%82%D8%A7%D9%84%D8%A7%D8%AA-%D8%A7%D9%84%D8%AA%D9%86%D9%82%D9%84-%D8%A8%D9%8A%D9%86-%D8%A7%D9%84%D8%AD%D8%A7%D9%84%D8%A7%D8%AA-r676/" rel="">مدخل إلى الانتقالات: التنقل بين الحالات</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D8%A7%D9%84%D8%AD%D8%B1%D9%83%D8%A7%D8%AA-%D9%85%D9%81%D9%87%D9%88%D9%85-%D8%A7%D9%84%D8%AD%D8%B1%D9%83%D8%A9-r677/" rel="">مدخل إلى الحركات: مفهوم الحركة</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D8%AA%D8%B7%D8%A8%D9%8A%D9%82-%D8%B9%D9%85%D9%84%D9%8A-%D8%A7%D9%84%D8%A7%D9%86%D8%AA%D9%82%D8%A7%D9%84%D8%A7%D8%AA-r678/" rel="">تطبيق عملي: الانتقالات</a>
	</li>
	<li>
		خاصيات الانتقالات
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D8%AF%D9%88%D8%A7%D9%84-%D8%A7%D9%84%D8%AA%D9%88%D9%82%D9%8A%D8%AA-r682/" rel="">دوال التوقيت</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D8%A7%D9%84%D8%A7%D9%86%D8%AA%D9%82%D8%A7%D9%84%D8%A7%D8%AA-%D8%A7%D9%84%D9%85%D8%AA%D8%B9%D8%AF%D8%AF%D8%A9-r683/" rel="">الانتقالات المتعددة</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D8%A7%D9%84%D8%A7%D9%86%D8%AA%D9%82%D8%A7%D9%84%D8%A7%D8%AA-%D9%88%D8%AC%D8%A7%D9%81%D8%A7%D8%B3%D9%83%D8%B1%D8%A8%D8%AA-r684/" rel="">الانتقالات وجافاسكربت</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D8%AA%D8%B7%D8%A8%D9%8A%D9%82-%D8%B9%D9%85%D9%84%D9%8A-%D8%A7%D9%84%D8%AA%D8%AD%D8%B1%D9%8A%D9%83%D8%A7%D8%AA-r685/" rel="">تطبيق عملي: التحريكات</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D8%AE%D8%A7%D8%B5%D9%8A%D8%A7%D8%AA-%D8%A7%D9%84%D8%AD%D8%B1%D9%83%D8%A7%D8%AA-r693/" rel="">خاصيات الحركات</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D8%AA%D8%B7%D8%A8%D9%8A%D9%82-%D8%B9%D9%85%D9%84%D9%8A-%D8%A7%D9%84%D8%A5%D8%B7%D8%A7%D8%B1%D8%A7%D8%AA-%D8%A7%D9%84%D9%85%D9%81%D8%AA%D8%A7%D8%AD%D9%8A%D8%A9-r694/" rel="">تطبيق عملي: الإطارات المفتاحية</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D8%A7%D9%84%D8%AD%D8%B1%D9%83%D8%A7%D8%AA-%D8%A7%D9%84%D9%85%D8%AA%D8%B9%D8%AF%D8%AF%D8%A9-%D8%A7%D9%84%D9%85%D8%AA%D8%B2%D8%A7%D9%85%D9%86%D8%A9-r696/" rel="">الحركات المتعددة المتزامنة</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D9%85%D9%88%D8%AC%D8%B2-%D8%A7%D9%84%D8%AD%D8%B1%D9%83%D8%A7%D8%AA-r697/" rel="">موجز الحركات</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D8%B1%D9%88%D8%A7%D9%8A%D8%A9-%D8%A7%D9%84%D9%82%D8%B5%D8%B5-%D8%B9%D8%A8%D8%B1-%D8%A7%D9%84%D8%AD%D8%B1%D9%83%D8%A7%D8%AA-r698/" rel="">رواية القصص عبر الحركات</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D8%AD%D8%B1%D8%A8-%D8%A7%D9%84%D9%86%D8%AC%D9%88%D9%85-star-war-r704/" rel="">حرب النجوم</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D8%A5%D8%B8%D9%87%D8%A7%D8%B1-%D8%A7%D9%84%D9%85%D8%AD%D8%AA%D9%88%D9%89-%D8%A3%D8%AB%D9%86%D8%A7%D8%A1-%D8%A7%D9%84%D8%AA%D9%85%D8%B1%D9%8A%D8%B1-r705/" rel="">إظهار المحتوى أثناء التمرير</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D8%B3%D9%87%D9%88%D9%84%D8%A9-%D8%A7%D9%84%D9%88%D8%B5%D9%88%D9%84-r706/" rel="">سهولة الوصول</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D9%86%D9%87%D8%A7%D9%8A%D8%A9-%D8%A7%D9%84%D8%B1%D8%AD%D9%84%D8%A9-r707/" rel="">نهاية الرحلة</a>
	</li>
</ul>
<h2 id="-">
	الصياغة المختزلة مقابل الصياغة المطولة
</h2>

<p>
	عند كتابة شيفرة <a href="https://wiki.hsoub.com/CSS" rel="external">CSS</a>، يمكننا في كثير من الأحيان اختزال عدة خاصيات في خاصية واحدة مختزلة. على سبيل المثال، الصياغة المختزلة للخاصية <a href="https://wiki.hsoub.com/CSS/padding" rel="external">padding</a> تُكتب على النحو التالي:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_2333_17" style="">
<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">20px</span><span class="pln"> </span><span class="lit">15px</span><span class="pln"> </span><span class="lit">25px</span><span class="pun">;</span></pre>

<p>
	وهذا يكافئ:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_2333_19" style="">
<span class="pln">padding</span><span class="pun">-</span><span class="pln">top</span><span class="pun">:</span><span class="pln"> </span><span class="lit">10px</span><span class="pun">;</span><span class="pln">
padding</span><span class="pun">-</span><span class="pln">right</span><span class="pun">:</span><span class="pln"> </span><span class="lit">20px</span><span class="pun">;</span><span class="pln">
padding</span><span class="pun">-</span><span class="pln">bottom</span><span class="pun">:</span><span class="pln"> </span><span class="lit">15px</span><span class="pun">;</span><span class="pln">
padding</span><span class="pun">-</span><span class="pln">left</span><span class="pun">:</span><span class="pln"> </span><span class="lit">25px</span><span class="pun">;</span></pre>

<p>
	يمكننا بالطريقة نفسها كتابة الخاصية <a href="https://wiki.hsoub.com/CSS/transition" rel="external">transition</a> بشكل مختزل:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_2333_22" style="">
<span class="pln">transition</span><span class="pun">:</span><span class="pln"> all </span><span class="lit">0.5s</span><span class="pln"> </span><span class="lit">1s</span><span class="pln"> linear</span><span class="pun">;</span></pre>

<p>
	وهذا هو الشكل العام:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_2333_24" style="">
<span class="pln">transition</span><span class="pun">:</span><span class="pln"> </span><span class="pun">[</span><span class="kwd">property</span><span class="pun">]</span><span class="pln"> </span><span class="pun">[</span><span class="pln">duration</span><span class="pun">]</span><span class="pln"> </span><span class="pun">[</span><span class="pln">delay</span><span class="pun">]</span><span class="pln"> </span><span class="pun">[</span><span class="pln">timing</span><span class="pun">-</span><span class="kwd">function</span><span class="pun">];</span></pre>

<p>
	يمكن كتابة كل واحدة من هذه الخاصيات بشكل منفرد:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_2333_26" style="">
<span class="pln">transition</span><span class="pun">-</span><span class="kwd">property</span><span class="pun">:</span><span class="pln"> all</span><span class="pun">;</span><span class="pln">
transition</span><span class="pun">-</span><span class="pln">duration</span><span class="pun">:</span><span class="pln"> </span><span class="lit">0.5s</span><span class="pun">;</span><span class="pln">
transition</span><span class="pun">-</span><span class="pln">delay</span><span class="pun">:</span><span class="pln"> </span><span class="lit">1s</span><span class="pun">;</span><span class="pln">
transition</span><span class="pun">-</span><span class="pln">timing</span><span class="pun">-</span><span class="kwd">function</span><span class="pun">:</span><span class="pln"> linear</span><span class="pun">;</span></pre>

<p>
	لنلق نظرة على هذه الخاصيات.
</p>

<h3 id="-transition-property-">
	الخاصية <code>transition-property</code>
</h3>

<p>
	عادةً ما ترد في بداية الصياغة المختزلة، وتمثلُ الخاصيةَ التي سيقوم المتصفح بتحريكها. لتغيير الخلفية على سبيل المثال، يمكن استخدام القيمة <code>background</code>. من الممكن أيضًا استخدام القيمة <code>all</code>، والتي تمثل جميع خاصيات <a href="https://wiki.hsoub.com/CSS" rel="external">CSS</a> التي ينطبق عليها الانتقال.
</p>

<h3 id="-transition-duration-">
	الخاصية <code>transition-duration</code>
</h3>

<p>
	تمثل قيمةُ الخاصية <code>transition-duration</code> المدةَ التي يستغرقها الانتقال. فترة انتقال تساوي <code>3s</code> (ثلاث ثوانٍ) ستكون أطول بثلاث مرات من فترة انتقال تساوي <code>1000ms</code>.
</p>

<h3 id="-transition-delay-">
	الخاصية <code>transition-delay</code>
</h3>

<p>
	تخبر الخاصية <code>transition-delay</code> المتصفح بالانتظار قبل تطبيق الانتقال. هذه قيمة زمنية، ويمكن تحديدها بالثانية أو الميلي ثانية(ms). على سبيل المثال، <code>3s</code> تكافئ ثلاث ثوان، و<code>100ms</code> تكافئ مئة ميلي ثانية. بشكل مكافئ، يمكنك كتابة تلك القيمة على شكل <code>0.1s</code>. الأمر متروك لك.
</p>

<h3 id="-transition-timing-function-">
	الخاصية <code>transition-timing-function</code>
</h3>

<p>
	تستخدِم كل من الانتقالات (transitions) والتحريكات (animations) <a href="https://wiki.hsoub.com/CSS/timing-function" rel="external">دوال التوقيت</a> (timing functions). تحتاج دوال التوقيت إلى فقرة خاصة بها، لذا سنؤجل الحديث عنها إلى المقالة التالية. لكن بإيجاز، دوال التوقيت تعطي للتحريكات حيوية.
</p>

<h2 id="-">
	الأشياء التي لا يطبّق الانتقال عليها
</h2>

<p>
	رغم أنه يمكن استخدام الانتقالات على الخاصيات <code>size</code> و <a href="https://wiki.hsoub.com/CSS/color" rel="external"><code>colour</code></a> و <a href="https://wiki.hsoub.com/CSS/border" rel="external">border</a> و <a href="https://wiki.hsoub.com/CSS/background-position" rel="external">background-position</a> وغيرها، إلا أنّ هناك بعض الخاصيات التي لا يمكن تطبيق الانتقال عليها. فمثلًا، لا يمكن تطبيق الانتقال على عائلة الخطوط <a href="https://wiki.hsoub.com/CSS/font-family" rel="external">font-family</a>، لأنّ هذا يعني أنّ على المتصفح إنشاء <a href="https://wiki.hsoub.com/CSS/@keyframes" rel="external">إطارات مفتاحية</a> (keyframes) بين صورتين مختلفتين تمامًا من الخطوط.
</p>

<p>
	صور الخلفية المُنشأة باستخدام <a href="https://wiki.hsoub.com/CSS" rel="external">CSS</a>، مثل التدرجات (generated gradients)، لا يمكن تطبيق التحريك على خاصياتها. لأنّ ذلك يعني أنّ المتصفح سيكون عليه استبدال صورة الخلفية بكل <a href="https://wiki.hsoub.com/CSS/@keyframes" rel="external">الإطارات المفتاحية</a> للتحريك، لذلك فهو غير مدعوم.
</p>

<p>
	لكن يمكن تحريك خاصيات من قبيل <a href="https://wiki.hsoub.com/CSS/opacity" rel="external">opacity</a> و <a href="https://wiki.hsoub.com/CSS/background-position" rel="external">background-position</a>. وعن طريق تحريك صور الخلفية أو إخفائها، يمكنك إنشاء تأثيرات جذابة.
</p>

<p>
	يمكنك مشاهدة <a href="http://cssanimation.rocks/baymax/" rel="external nofollow">مثال Baymax</a>، حيث يتم تحريك صورة الخلفية لإنشاء حركة.
</p>

<p>
	 
</p>

<figure><img alt="baymax-min.gif" class="ipsImage ipsImage_thumbnailed" data-fileid="29882" data-unique="lfcnd9ov1" src="https://academy.hsoub.com/uploads/monthly_2019_06/baymax-min.gif.b6ac92958a7e021b14a82587790290c7.gif"><figcaption>
		المصدر: <a href="http://%5BCSS%5D(https://wiki.hsoub.com/CSS)animation.rocks/baymax" rel="external nofollow">http://[CSS](https://wiki.hsoub.com/CSS)animation.rocks/baymax</a>
	</figcaption></figure><p>
	 
</p>

<p>
	يتم استخدام تأثير مماثل لإحداث <a href="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/" rel="">تأثير اللمعان على الأزرار</a>، حيث يتم تحريك تدرج الخلفية في مقدمة الزر.
</p>

<figure><img alt="sheen-min.gif" class="ipsImage ipsImage_thumbnailed" data-fileid="29883" data-unique="1u9sju7zv" src="https://academy.hsoub.com/uploads/monthly_2019_06/sheen-min.gif.44e2036e623bb36e98d218564dec1d94.gif"><figcaption>
		المصدر: <a href="https://%5BCSS%5D(https://wiki.hsoub.com/CSS)animation.rocks/pseudo-elements/" rel="external nofollow">https://[CSS](https://wiki.hsoub.com/CSS)animation.rocks/pseudo-elements/</a>
	</figcaption></figure><h2 id="-">
	تمرين
</h2>

<p>
	لقد أنشأت <a href="http://codepen.io/donovanh/pen/NPYNGa?editors=110" rel="external nofollow">مثالًا على Codepen</a> لتجربة الانتقالات.
</p>

<p>
	المثال يقوم بالانتقال من شكل الماس (diamond shape) إلى شكل الدائرة. حاول تغيير بعض الخاصيات لمعرفة ما سيحدث.
</p>

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

<h2 id="-">
	المصادر
</h2>

<ul>
<li>
		ترجمة وبتصرف للفصل transitions-properties من كتاب <a href="https://cssanimation.rocks/css-animation-101" rel="external nofollow">CSS Animation 101</a> لمؤلفه Donovan Hutchinson.
	</li>
</ul>
<h2 id="-">
	اقرأ أيضًا
</h2>

<ul>
<li>
		المقالة التالية: <a href="https://academy.hsoub.com/programming/css/%D8%AF%D9%88%D8%A7%D9%84-%D8%A7%D9%84%D8%AA%D9%88%D9%82%D9%8A%D8%AA-r682/" rel="">دوال التوقيت</a>
	</li>
	<li>
		المقال السابقة: <a href="https://academy.hsoub.com/programming/css/%D8%AA%D8%B7%D8%A8%D9%8A%D9%82-%D8%B9%D9%85%D9%84%D9%8A-%D8%A7%D9%84%D8%A7%D9%86%D8%AA%D9%82%D8%A7%D9%84%D8%A7%D8%AA-r678/" rel="">تطبيق عملي: الانتقالات</a>
	</li>
	<li>
		النسخة العربية الكاملة من كتاب: <a href="https://academy.hsoub.com/files/14-%D8%A7%D9%84%D8%AA%D8%AD%D8%B1%D9%8A%D9%83-%D8%B9%D8%A8%D8%B1-css/" rel="">التحريك عبر CSS</a>
	</li>
</ul>
]]></description><guid isPermaLink="false">681</guid><pubDate>Wed, 05 Jun 2019 18:09:00 +0000</pubDate></item><item><title>&#x62A;&#x637;&#x628;&#x64A;&#x642; &#x639;&#x645;&#x644;&#x64A;: &#x627;&#x644;&#x627;&#x646;&#x62A;&#x642;&#x627;&#x644;&#x627;&#x62A;</title><link>https://academy.hsoub.com/programming/css/%D8%AA%D8%B7%D8%A8%D9%8A%D9%82-%D8%B9%D9%85%D9%84%D9%8A-%D8%A7%D9%84%D8%A7%D9%86%D8%AA%D9%82%D8%A7%D9%84%D8%A7%D8%AA-r678/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2019_05/5ce1d1048ff47__.jpg.b5627be2adcdee9000bed90fe7823f1a.jpg" /></p>

<p>
	الآن وبعد أن قدمنا الخاصيتين <a href="https://wiki.hsoub.com/CSS/transition" rel="external">transition</a> و <a href="https://wiki.hsoub.com/CSS/animation" rel="external">animation</a>، فقد حان الوقت للتعمق أكثر في الانتقالات (transitions)، ومطالعة بعض الأمثلة.
</p>

<p>
	هذه المقالة جزء من سلسلة من المقالات حول التحريك في CSS:
</p>

<ul>
<li>
		<a href="https://academy.hsoub.com/programming/css/%D9%85%D8%A7-%D9%87%D9%8A-%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85%D8%A7%D8%AA-%D8%A7%D9%84%D8%AD%D8%B1%D9%83%D8%A7%D8%AA%D8%9F-r674/" rel="">ما هي استخدامات الحركات؟</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D8%AA%D8%AC%D9%87%D9%8A%D8%B2-%D8%A8%D9%8A%D8%A6%D8%A9-%D8%A7%D9%84%D8%B9%D9%85%D9%84-%D9%84%D8%A5%D9%86%D8%B4%D8%A7%D8%A1-%D8%A7%D9%84%D8%AD%D8%B1%D9%83%D8%A7%D8%AA-r675/" rel="">تجهيز بيئة العمل لإنشاء الحركات</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D8%A7%D9%84%D8%A7%D9%86%D8%AA%D9%82%D8%A7%D9%84%D8%A7%D8%AA-%D8%A7%D9%84%D8%AA%D9%86%D9%82%D9%84-%D8%A8%D9%8A%D9%86-%D8%A7%D9%84%D8%AD%D8%A7%D9%84%D8%A7%D8%AA-r676/" rel="">مدخل إلى الانتقالات: التنقل بين الحالات</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D8%A7%D9%84%D8%AD%D8%B1%D9%83%D8%A7%D8%AA-%D9%85%D9%81%D9%87%D9%88%D9%85-%D8%A7%D9%84%D8%AD%D8%B1%D9%83%D8%A9-r677/" rel="">مدخل إلى الحركات: مفهوم الحركة</a>
	</li>
	<li>
		تطبيق عملي: الانتقالات
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D8%AE%D8%A7%D8%B5%D9%8A%D8%A7%D8%AA-%D8%A7%D9%84%D8%A7%D9%86%D8%AA%D9%82%D8%A7%D9%84%D8%A7%D8%AA-r681/" rel="">خاصيات الانتقالات</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D8%AF%D9%88%D8%A7%D9%84-%D8%A7%D9%84%D8%AA%D9%88%D9%82%D9%8A%D8%AA-r682/" rel="">دوال التوقيت</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D8%A7%D9%84%D8%A7%D9%86%D8%AA%D9%82%D8%A7%D9%84%D8%A7%D8%AA-%D8%A7%D9%84%D9%85%D8%AA%D8%B9%D8%AF%D8%AF%D8%A9-r683/" rel="">الانتقالات المتعددة</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D8%A7%D9%84%D8%A7%D9%86%D8%AA%D9%82%D8%A7%D9%84%D8%A7%D8%AA-%D9%88%D8%AC%D8%A7%D9%81%D8%A7%D8%B3%D9%83%D8%B1%D8%A8%D8%AA-r684/" rel="">الانتقالات وجافاسكربت</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D8%AA%D8%B7%D8%A8%D9%8A%D9%82-%D8%B9%D9%85%D9%84%D9%8A-%D8%A7%D9%84%D8%AA%D8%AD%D8%B1%D9%8A%D9%83%D8%A7%D8%AA-r685/" rel="">تطبيق عملي: التحريكات</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D8%AE%D8%A7%D8%B5%D9%8A%D8%A7%D8%AA-%D8%A7%D9%84%D8%AD%D8%B1%D9%83%D8%A7%D8%AA-r693/" rel="">خاصيات الحركات</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D8%AA%D8%B7%D8%A8%D9%8A%D9%82-%D8%B9%D9%85%D9%84%D9%8A-%D8%A7%D9%84%D8%A5%D8%B7%D8%A7%D8%B1%D8%A7%D8%AA-%D8%A7%D9%84%D9%85%D9%81%D8%AA%D8%A7%D8%AD%D9%8A%D8%A9-r694/" rel="">تطبيق عملي: الإطارات المفتاحية</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D8%A7%D9%84%D8%AD%D8%B1%D9%83%D8%A7%D8%AA-%D8%A7%D9%84%D9%85%D8%AA%D8%B9%D8%AF%D8%AF%D8%A9-%D8%A7%D9%84%D9%85%D8%AA%D8%B2%D8%A7%D9%85%D9%86%D8%A9-r696/" rel="">الحركات المتعددة المتزامنة</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D9%85%D9%88%D8%AC%D8%B2-%D8%A7%D9%84%D8%AD%D8%B1%D9%83%D8%A7%D8%AA-r697/" rel="">موجز الحركات</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D8%B1%D9%88%D8%A7%D9%8A%D8%A9-%D8%A7%D9%84%D9%82%D8%B5%D8%B5-%D8%B9%D8%A8%D8%B1-%D8%A7%D9%84%D8%AD%D8%B1%D9%83%D8%A7%D8%AA-r698/" rel="">رواية القصص عبر الحركات</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D8%AD%D8%B1%D8%A8-%D8%A7%D9%84%D9%86%D8%AC%D9%88%D9%85-star-war-r704/" rel="">حرب النجوم</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D8%A5%D8%B8%D9%87%D8%A7%D8%B1-%D8%A7%D9%84%D9%85%D8%AD%D8%AA%D9%88%D9%89-%D8%A3%D8%AB%D9%86%D8%A7%D8%A1-%D8%A7%D9%84%D8%AA%D9%85%D8%B1%D9%8A%D8%B1-r705/" rel="">إظهار المحتوى أثناء التمرير</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D8%B3%D9%87%D9%88%D9%84%D8%A9-%D8%A7%D9%84%D9%88%D8%B5%D9%88%D9%84-r706/" rel="">سهولة الوصول</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D9%86%D9%87%D8%A7%D9%8A%D8%A9-%D8%A7%D9%84%D8%B1%D8%AD%D9%84%D8%A9-r707/" rel="">نهاية الرحلة</a>
	</li>
</ul>
<h2 id="-">
	الانتقالات
</h2>

<p>
	تحدث الانتقالات في المتصفح عندما يتحوّل عنصر من حالة إلى أخرى. يرسم المتصفح <a href="https://wiki.hsoub.com/CSS/@keyframes" rel="external">الإطارات المفتاحية</a> (keyframes) بين الحالة الابتدائية والحالة النهائية لإنشاء شعور بالحركة.
</p>

<p>
	الخاصية <a href="https://wiki.hsoub.com/CSS/transition" rel="external">transition</a> هي خاصية من خاصيات <a href="https://wiki.hsoub.com/CSS" rel="external">CSS</a>. مثلها مثل الخاصيات <a href="https://wiki.hsoub.com/CSS/height" rel="external">height</a> أو <a href="https://wiki.hsoub.com/CSS/width" rel="external">width</a> أو <a href="https://wiki.hsoub.com/CSS/border" rel="external">border</a>.
</p>

<p>
	يمكننا برمجة الانتقالات في <a href="https://wiki.hsoub.com/CSS" rel="external">CSS</a> على النحو التالي:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_4816_11" style="">
<span class="pln">transition</span><span class="pun">:</span><span class="pln"> background </span><span class="lit">0.5s</span><span class="pln"> linear</span><span class="pun">;</span></pre>

<p>
	في هذه الحالة، نقول للمتصفح أنّ أيّ انتقال لخاصية الخلفية (background) سيستغرق نصف ثانية، إضافة إلى استخدام دالة التوقيت "الخطي" (linear).
</p>

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

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_4816_13" style="">
<span class="pln">button </span><span class="pun">{</span><span class="pln">
  background</span><span class="pun">:</span><span class="pln"> white</span><span class="pun">;</span><span class="pln">
  transition</span><span class="pun">:</span><span class="pln"> background </span><span class="lit">0.5s</span><span class="pln"> linear</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

button</span><span class="pun">:</span><span class="pln">hover </span><span class="pun">{</span><span class="pln">
  background</span><span class="pun">:</span><span class="pln"> green</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	لاحظ الخاصية <code>transition</code> في المحدد <code>button</code>، والتي تقول للمتصفح أن يطبّق الانتقال على أي تغيير في الحالة، مثل التغيير الذي يحدث عن التحويم (hover)، وكذلك عند العودة إلى الحالة الأصلية بعد التحويم.
</p>

<p>
	إذا طبَّقنا الخاصية <a href="https://wiki.hsoub.com/CSS/transition" rel="external">transition</a> على حالة التحويم (hover) وحسب، فلن يتم الانتقال إلا إلى حالة التحويم، ولكن ليس عند العودة للحالة الأولى.
</p>

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

<h2 id="-">
	مثال: انتقال الزر
</h2>

<p>
	<a href="http://codepen.io/donovanh/pen/MYQdZd" rel="external nofollow"><img alt="تأثير تحويم الزر" class="ipsImage ipsImage_thumbnailed" data-fileid="29545" data-unique="8zeh47w0b" src="https://academy.hsoub.com/uploads/monthly_2019_05/button-min.gif.70172f6b7c78c8cfb94f98b92f147c11.gif" style="width: 343px; height: auto;"></a>
</p>

<p>
	إليك <a href="http://codepen.io/donovanh/pen/MYQdZd" rel="external nofollow">مثالًا في CodePen</a> يوضح تأثير التحويم (hover effect). في CodePen، يمكنك إجراء تغييرات على <a href="https://wiki.hsoub.com/HTML" rel="external">HTML</a> و <a href="https://wiki.hsoub.com/CSS" rel="external">CSS</a> ورؤية النتائج مباشرة.
</p>

<p>
	الشيء المهم الذي ينبغي التركيز عليه هو الخاصيات التي تبدأ بالبادئة <code>transition-‎</code>.
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_4816_18" style="">
<span class="pln">transition</span><span class="pun">-</span><span class="kwd">property</span><span class="pun">:</span><span class="pln"> all</span><span class="pun">;</span><span class="pln">
transition</span><span class="pun">-</span><span class="pln">duration</span><span class="pun">:</span><span class="pln"> </span><span class="lit">0.4s</span><span class="pun">;</span><span class="pln">
transition</span><span class="pun">-</span><span class="pln">timing</span><span class="pun">-</span><span class="kwd">function</span><span class="pun">:</span><span class="pln"> ease</span><span class="pun">-</span><span class="kwd">out</span><span class="pun">;</span></pre>

<p>
	تخبر هذه الشيفرة المتصفح بنوع الحركة التي ينبغي إنشاؤها عند الانتقال من حالة عدم التحويم (non-hover state)، إلى حالة التحويم (hover state). كما تُخبر المتصفح بالتحريك (الانتقال) التدريجي لكل الخصائص (الألوان والحجم والموضع) على مدار 0.4 ثانية.
</p>

<p>
	حاول تغيير بعض هذه القيم. على سبيل المثال، قم بتغيير "0.4s" إلى قيمة أطول، مثل "2s" (ثانيتين). كيف يبدو التحريك؟ يمكنك كذلك تغيير الخاصية من <code>all</code> إلى <code>background</code>.
</p>

<p>
	لإنشاء تأثير ممتع، حاول تغيير قيمة <code>transition-timing-function</code> من <code>ease-out</code> إلى:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_4816_20" style="">
<span class="pln">transition</span><span class="pun">-</span><span class="pln">timing</span><span class="pun">-</span><span class="kwd">function</span><span class="pun">:</span><span class="pln"> cubic</span><span class="pun">-</span><span class="pln">bezier</span><span class="pun">(.</span><span class="lit">59</span><span class="pun">,-</span><span class="lit">0.26</span><span class="pun">,.</span><span class="lit">33</span><span class="pun">,</span><span class="lit">1.42</span><span class="pun">)</span></pre>

<p>
	دالة التوقيت cubic bezier تضفي على الحركة متعة وجاذبية. سنعود لدوال التوقيت بمزيد من التفاصيل في المقالات التالية.
</p>

<h2 id="-">
	البادئات وتوافق المتصفحات
</h2>

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

<p>
	أحب استخدام بادئ تلقائي Autoprefixer (وهو خيار متاح في Codepen، لتفعيله اضغط على أيقونة الإعدادات "cog" في قسم CSS)، ويمكن تفعيلها باستخدام أدوات البناء، مثل Grunt أو <a href="https://academy.hsoub.com/programming/workflow/%D8%AF%D9%84%D9%8A%D9%84%D9%83-%D8%A7%D9%84%D8%B4%D8%A7%D9%85%D9%84-%D8%A5%D9%84%D9%89-%D8%A3%D8%AF%D8%A7%D8%A9-%D8%A7%D9%84%D8%A8%D9%86%D8%A7%D8%A1-gulp-r663/" rel="">Gulp</a>. بالمقابل، يمكنك كتابتها يدويًا على النحو التالي:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_4816_22" style="">
<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"> </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"> </span><span class="pun">...;</span><span class="pln">
transition</span><span class="pun">:</span><span class="pln"> </span><span class="pun">...;</span></pre>

<h2 id="-">
	تمرين
</h2>

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

<p>
	لمزيد من الإلهام، تحقَّق من تنسيق التحويم على <a href="http://codepen.io/nxtonic/pen/gbZNKJ" rel="external nofollow">هذا الرابط</a>. هناك الكثير من الأمثلة الرائعة لاستلهام الأفكار.
</p>

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

<h2 id="-">
	المصادر
</h2>

<ul>
<li>
		ترجمة وبتصرف للفصل transitions in action من كتاب <a href="https://cssanimation.rocks/css-animation-101" rel="external nofollow">CSS Animation 101</a> لمؤلفه Donovan Hutchinson.
	</li>
</ul>
<h2 id="-">
	اقرأ أيضًا
</h2>

<ul>
<li>
		المقالة التالية: <a href="https://academy.hsoub.com/programming/css/%D8%AE%D8%A7%D8%B5%D9%8A%D8%A7%D8%AA-%D8%A7%D9%84%D8%A7%D9%86%D8%AA%D9%82%D8%A7%D9%84%D8%A7%D8%AA-r681/" rel="">خاصيات الانتقالات</a>
	</li>
	<li>
		المقال السابقة: <a href="https://academy.hsoub.com/programming/css/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D8%A7%D9%84%D8%AD%D8%B1%D9%83%D8%A7%D8%AA-%D9%85%D9%81%D9%87%D9%88%D9%85-%D8%A7%D9%84%D8%AD%D8%B1%D9%83%D8%A9-r677/" rel="">مدخل إلى الحركات: مفهوم الحركة</a>
	</li>
	<li>
		النسخة العربية الكاملة من كتاب: <a href="https://academy.hsoub.com/files/14-%D8%A7%D9%84%D8%AA%D8%AD%D8%B1%D9%8A%D9%83-%D8%B9%D8%A8%D8%B1-css/" rel="">التحريك عبر CSS</a>
	</li>
</ul>
]]></description><guid isPermaLink="false">678</guid><pubDate>Sat, 01 Jun 2019 13:05:00 +0000</pubDate></item><item><title>&#x645;&#x62F;&#x62E;&#x644; &#x625;&#x644;&#x649; &#x627;&#x644;&#x62D;&#x631;&#x643;&#x627;&#x62A;: &#x645;&#x641;&#x647;&#x648;&#x645; &#x627;&#x644;&#x62D;&#x631;&#x643;&#x629;</title><link>https://academy.hsoub.com/programming/css/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D8%A7%D9%84%D8%AD%D8%B1%D9%83%D8%A7%D8%AA-%D9%85%D9%81%D9%87%D9%88%D9%85-%D8%A7%D9%84%D8%AD%D8%B1%D9%83%D8%A9-r677/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2019_07/5d1b59d1a33ac_.jpg.cbab7a842541f6ce7f12b9be1b6056ce.jpg" /></p>

<p>
	لقد ناقشنا في المقالات السابقة <a href="https://academy.hsoub.com/programming/css/%D9%85%D8%A7-%D9%87%D9%8A-%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85%D8%A7%D8%AA-%D8%A7%D9%84%D8%AA%D8%AD%D8%B1%D9%8A%D9%83%D8%9F-r674/" rel="">استخدامات وفوائد التحريك</a> (Animation)، ووجدنا بعض مصادر الإلهام، وألقينا نظرة على <a href="https://academy.hsoub.com/programming/css/%D8%AA%D8%AC%D9%87%D9%8A%D8%B2-%D8%A8%D9%8A%D8%A6%D8%A7%D8%AA-%D8%A7%D9%84%D8%B9%D9%85%D9%84-%D9%84%D8%A5%D9%86%D8%B4%D8%A7%D8%A1-%D8%A7%D9%84%D8%AA%D8%AD%D8%B1%D9%8A%D9%83%D8%A7%D8%AA-r675/" rel="">الأدوات والمواقع</a> التي قد تكون مفيدة في التطوير، وتعرّفنا على <a href="https://academy.hsoub.com/programming/css/%D8%A7%D9%84%D8%AA%D9%86%D9%82%D9%84-%D8%A8%D9%8A%D9%86-%D8%A7%D9%84%D8%AD%D8%A7%D9%84%D8%A7%D8%AA-r676/" rel="">كيفية تطبيق حركة عبر نقل عنصر من حالة إلى أخرى</a> (transitions).
</p>

<p>
	هذه المقالة جزء من سلسلة من المقالات حول التحريك في CSS:
</p>

<ul>
<li>
		<a href="https://academy.hsoub.com/programming/css/%D9%85%D8%A7-%D9%87%D9%8A-%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85%D8%A7%D8%AA-%D8%A7%D9%84%D8%AD%D8%B1%D9%83%D8%A7%D8%AA%D8%9F-r674/" rel="">ما هي استخدامات الحركات؟</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D8%AA%D8%AC%D9%87%D9%8A%D8%B2-%D8%A8%D9%8A%D8%A6%D8%A9-%D8%A7%D9%84%D8%B9%D9%85%D9%84-%D9%84%D8%A5%D9%86%D8%B4%D8%A7%D8%A1-%D8%A7%D9%84%D8%AD%D8%B1%D9%83%D8%A7%D8%AA-r675/" rel="">تجهيز بيئة العمل لإنشاء الحركات</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D8%A7%D9%84%D8%A7%D9%86%D8%AA%D9%82%D8%A7%D9%84%D8%A7%D8%AA-%D8%A7%D9%84%D8%AA%D9%86%D9%82%D9%84-%D8%A8%D9%8A%D9%86-%D8%A7%D9%84%D8%AD%D8%A7%D9%84%D8%A7%D8%AA-r676/" rel="">مدخل إلى الانتقالات: التنقل بين الحالات</a>
	</li>
	<li>
		مدخل إلى الحركات: مفهوم الحركة
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D8%AA%D8%B7%D8%A8%D9%8A%D9%82-%D8%B9%D9%85%D9%84%D9%8A-%D8%A7%D9%84%D8%A7%D9%86%D8%AA%D9%82%D8%A7%D9%84%D8%A7%D8%AA-r678/" rel="">تطبيق عملي: الانتقالات</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D8%AE%D8%A7%D8%B5%D9%8A%D8%A7%D8%AA-%D8%A7%D9%84%D8%A7%D9%86%D8%AA%D9%82%D8%A7%D9%84%D8%A7%D8%AA-r681/" rel="">خاصيات الانتقالات</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D8%AF%D9%88%D8%A7%D9%84-%D8%A7%D9%84%D8%AA%D9%88%D9%82%D9%8A%D8%AA-r682/" rel="">دوال التوقيت</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D8%A7%D9%84%D8%A7%D9%86%D8%AA%D9%82%D8%A7%D9%84%D8%A7%D8%AA-%D8%A7%D9%84%D9%85%D8%AA%D8%B9%D8%AF%D8%AF%D8%A9-r683/" rel="">الانتقالات المتعددة</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D8%A7%D9%84%D8%A7%D9%86%D8%AA%D9%82%D8%A7%D9%84%D8%A7%D8%AA-%D9%88%D8%AC%D8%A7%D9%81%D8%A7%D8%B3%D9%83%D8%B1%D8%A8%D8%AA-r684/" rel="">الانتقالات وجافاسكربت</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D8%AA%D8%B7%D8%A8%D9%8A%D9%82-%D8%B9%D9%85%D9%84%D9%8A-%D8%A7%D9%84%D8%AA%D8%AD%D8%B1%D9%8A%D9%83%D8%A7%D8%AA-r685/" rel="">تطبيق عملي: التحريكات</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D8%AE%D8%A7%D8%B5%D9%8A%D8%A7%D8%AA-%D8%A7%D9%84%D8%AD%D8%B1%D9%83%D8%A7%D8%AA-r693/" rel="">خاصيات الحركات</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D8%AA%D8%B7%D8%A8%D9%8A%D9%82-%D8%B9%D9%85%D9%84%D9%8A-%D8%A7%D9%84%D8%A5%D8%B7%D8%A7%D8%B1%D8%A7%D8%AA-%D8%A7%D9%84%D9%85%D9%81%D8%AA%D8%A7%D8%AD%D9%8A%D8%A9-r694/" rel="">تطبيق عملي: الإطارات المفتاحية</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D8%A7%D9%84%D8%AD%D8%B1%D9%83%D8%A7%D8%AA-%D8%A7%D9%84%D9%85%D8%AA%D8%B9%D8%AF%D8%AF%D8%A9-%D8%A7%D9%84%D9%85%D8%AA%D8%B2%D8%A7%D9%85%D9%86%D8%A9-r696/" rel="">الحركات المتعددة المتزامنة</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D9%85%D9%88%D8%AC%D8%B2-%D8%A7%D9%84%D8%AD%D8%B1%D9%83%D8%A7%D8%AA-r697/" rel="">موجز الحركات</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D8%B1%D9%88%D8%A7%D9%8A%D8%A9-%D8%A7%D9%84%D9%82%D8%B5%D8%B5-%D8%B9%D8%A8%D8%B1-%D8%A7%D9%84%D8%AD%D8%B1%D9%83%D8%A7%D8%AA-r698/" rel="">رواية القصص عبر الحركات</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D8%AD%D8%B1%D8%A8-%D8%A7%D9%84%D9%86%D8%AC%D9%88%D9%85-star-war-r704/" rel="">حرب النجوم</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D8%A5%D8%B8%D9%87%D8%A7%D8%B1-%D8%A7%D9%84%D9%85%D8%AD%D8%AA%D9%88%D9%89-%D8%A3%D8%AB%D9%86%D8%A7%D8%A1-%D8%A7%D9%84%D8%AA%D9%85%D8%B1%D9%8A%D8%B1-r705/" rel="">إظهار المحتوى أثناء التمرير</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D8%B3%D9%87%D9%88%D9%84%D8%A9-%D8%A7%D9%84%D9%88%D8%B5%D9%88%D9%84-r706/" rel="">سهولة الوصول</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D9%86%D9%87%D8%A7%D9%8A%D8%A9-%D8%A7%D9%84%D8%B1%D8%AD%D9%84%D8%A9-r707/" rel="">نهاية الرحلة</a>
	</li>
</ul>
<p>
	في هذه الفقرة ستتعرّف على الخاصية <a href="https://wiki.hsoub.com/CSS/animation" rel="external">animation</a>.
</p>

<h2 id="-">
	التحريك في المتصفح
</h2>

<p>
	الانتقال (Transition) والتحريك (animation) متشابهان. فكلاهما يأخذ شكل خاصية <a href="https://wiki.hsoub.com/CSS" rel="external">CSS</a>، ويحدث خلال مدة معيّنة، إضافة إلى خصائص أخرى للتحكم في كيفية إنشاء المتصفح للحركة.
</p>

<p>
	في حين أنّ الانتقالات تدور حول جعل التغيير من الحالة "A" إلى الحالة "B" يبدوا سلسًا، فإنّ التحريكات هي وسيلة لوصف مراحل متعددة من الحركة.
</p>

<p style="text-align: center;">
	<img alt="التحريكات: من A إلى B إلى C" class="ipsImage ipsImage_thumbnailed" data-fileid="29542" data-unique="qi3fjy0t2" src="https://academy.hsoub.com/uploads/monthly_2019_05/ABC.png.05f72ab44e649bc6cbafd3d08028df0c.png" style="width: 573px; height: auto;"></p>

<p>
	التحريكات مفيدة لإنجاز الحركات المعقدة في المتصفح. في المثال أعلاه، هناك 3 حالات (A و B و C). الانتقال سينتقل من A إلى C وحسب، في حين تسمح لنا التحريكات بتحديد مرحلة وسطية B، بحيث يتم المرور على كل الخطوات الثلاث.
</p>

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

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

<h2 id="-">
	أمثلة
</h2>

<p>
	تعد حركة الزر "Save" التي نراها في Codepen مثالًا جيدًا على التحريكات.
</p>

<p style="text-align: center;">
	<a href="http://codepen.io/donovanh/pen/KwEQdQ" rel="external nofollow"><img alt="زر الحفظ على CodePen‏" class="ipsImage ipsImage_thumbnailed" data-fileid="29544" data-unique="i9i9ng9jy" src="https://academy.hsoub.com/uploads/monthly_2019_05/save_button-min.gif.91c5ea9672881f11fe82430557f4f28f.gif" style="width: 237px; height: auto;"></a>
</p>

<p>
	هذه الحركة تساعد الناس على ملاحظة الزر وتذكر ضرورة حفظ عملهم.
</p>

<p>
	يتكون التأثير من سلسلة من <a href="https://wiki.hsoub.com/CSS/@keyframes" rel="external">الإطارات المفتاحية</a> (keyframes) التي تخبر المتصفح أن يهُزّ الزر من اليسار إلى اليمين. سنتعمّق أكثر في هذا الموضوع في فقرة <a href="%D8%B1%D8%A7%D8%A8%D8%B7" rel="">الإطارات المفتاحية بشكل عملي</a> .
</p>

<p>
	يمكننا أن نفعل الكثير من الأشياء عبر تحريك ونقل الإطارات المفتاحية عبر <a href="https://wiki.hsoub.com/CSS" rel="external">CSS</a>. هذا مثال آخر ثلاثي الأبعاد:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" href="http://codepen.io/donovanh/full/HGqjp/" rel="external nofollow"><img alt="Mac Plus تم إنشاؤه باستخدام CSS" class="ipsImage ipsImage_thumbnailed" data-fileid="29543" data-unique="i9wq2zje5" src="https://academy.hsoub.com/uploads/monthly_2019_05/macplus.thumb.png.5f65fc90cd1051976fa188a9e87c7213.png" style="width: 573px; height: auto;"></a>
</p>

<p>
	المثال CSS Mac Plus <a href="http://codepen.io/donovanh/full/HGqjp/" rel="external nofollow">متوفر على موقع CodePen</a>، وهذا <a href="https://cssanimation.rocks/macplus/" rel="external nofollow">دليل مفصل</a> لكيفية تصميمه.
</p>

<h2 id="-">
	الانتقال أم التحريك؟
</h2>

<p>
	تحدث الانتقالات عندما ينقل المتصفح عنصرًا من حالة إلى أخرى (من A إلى B) مما يوحي بحدوث حركة. يتم تطبيق ذلك عادةً نتيجة لحدث ما، مثل التحويم (hovering) فوق عنصر ما، أو إضافة صنف أو إزالته باستخدام <a href="https://wiki.hsoub.com/JavaScript" rel="external">JavaScript</a>.
</p>

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

<p>
	سنعود للخاصية <a href="https://wiki.hsoub.com/CSS/animation" rel="external">animation</a> لاحقًا.
</p>

<h2 id="-">
	تمرين
</h2>

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

<p>
	إذا قمت بتنزيل ملفي <a href="https://wiki.hsoub.com/HTML" rel="external">HTML</a> و <a href="https://wiki.hsoub.com/CSS" rel="external">CSS</a> الابتدائيَين، فقم بإلقاء نظرة على الخاصية 'animation'. على عكس الانتقالات، تحتاج التحريكات إلى جزء ثانٍ يسمى <a href="https://wiki.hsoub.com/CSS/@keyframes" rel="external">الإطارات المفتاحية</a> (keyframes). حاول تغيير بعض القيم وشاهد ما يحدث.
</p>

<h2 id="-">
	المصادر
</h2>

<ul>
<li>
		ترجمة وبتصرف للفصل animations من كتاب <a href="https://cssanimation.rocks/css-animation-101" rel="external nofollow">CSS Animation 101</a> لمؤلفه Donovan Hutchinson.
	</li>
</ul>
<h2 id="-">
	اقرأ أيضًا
</h2>

<ul>
<li>
		المقالة التالية: <a href="https://academy.hsoub.com/programming/css/%D8%AA%D8%B7%D8%A8%D9%8A%D9%82-%D8%B9%D9%85%D9%84%D9%8A-%D8%A7%D9%84%D8%A7%D9%86%D8%AA%D9%82%D8%A7%D9%84%D8%A7%D8%AA-r678/" rel="">تطبيق عملي: الانتقالات</a>
	</li>
	<li>
		المقال السابقة: <a href="https://academy.hsoub.com/programming/css/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D8%A7%D9%84%D8%A7%D9%86%D8%AA%D9%82%D8%A7%D9%84%D8%A7%D8%AA-%D8%A7%D9%84%D8%AA%D9%86%D9%82%D9%84-%D8%A8%D9%8A%D9%86-%D8%A7%D9%84%D8%AD%D8%A7%D9%84%D8%A7%D8%AA-r676/" rel="">مدخل إلى الانتقالات: التنقل بين الحالات</a>
	</li>
	<li>
		النسخة العربية الكاملة من كتاب:<a href="https://academy.hsoub.com/files/14-%D8%A7%D9%84%D8%AA%D8%AD%D8%B1%D9%8A%D9%83-%D8%B9%D8%A8%D8%B1-css/" rel=""> التحريك عبر CSS</a>
	</li>
</ul>
]]></description><guid isPermaLink="false">677</guid><pubDate>Wed, 29 May 2019 13:03:00 +0000</pubDate></item><item><title>&#x645;&#x62F;&#x62E;&#x644; &#x625;&#x644;&#x649; &#x627;&#x644;&#x627;&#x646;&#x62A;&#x642;&#x627;&#x644;&#x627;&#x62A;: &#x627;&#x644;&#x62A;&#x646;&#x642;&#x644; &#x628;&#x64A;&#x646; &#x627;&#x644;&#x62D;&#x627;&#x644;&#x627;&#x62A;</title><link>https://academy.hsoub.com/programming/css/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D8%A7%D9%84%D8%A7%D9%86%D8%AA%D9%82%D8%A7%D9%84%D8%A7%D8%AA-%D8%A7%D9%84%D8%AA%D9%86%D9%82%D9%84-%D8%A8%D9%8A%D9%86-%D8%A7%D9%84%D8%AD%D8%A7%D9%84%D8%A7%D8%AA-r676/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2019_07/5d1b594b04a33_.jpg.af3ad3bc20c3e07494f0b65b3d44f4d0.jpg" /></p>

<p>
	سنلقي في هذه الفقرة نظرة على خاصية الانتقال <a href="https://wiki.hsoub.com/CSS/transition" rel="external">transition</a>.
</p>

<p>
	هذه المقالة جزء من سلسلة من المقالات حول التحريك في CSS:
</p>

<ul>
<li>
		<a href="https://academy.hsoub.com/programming/css/%D9%85%D8%A7-%D9%87%D9%8A-%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85%D8%A7%D8%AA-%D8%A7%D9%84%D8%AD%D8%B1%D9%83%D8%A7%D8%AA%D8%9F-r674/" rel="">ما هي استخدامات الحركات؟</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D8%AA%D8%AC%D9%87%D9%8A%D8%B2-%D8%A8%D9%8A%D8%A6%D8%A9-%D8%A7%D9%84%D8%B9%D9%85%D9%84-%D9%84%D8%A5%D9%86%D8%B4%D8%A7%D8%A1-%D8%A7%D9%84%D8%AD%D8%B1%D9%83%D8%A7%D8%AA-r675/" rel="">تجهيز بيئة العمل لإنشاء الحركات</a>
	</li>
	<li>
		مدخل إلى الانتقالات: التنقل بين الحالات
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D8%A7%D9%84%D8%AD%D8%B1%D9%83%D8%A7%D8%AA-%D9%85%D9%81%D9%87%D9%88%D9%85-%D8%A7%D9%84%D8%AD%D8%B1%D9%83%D8%A9-r677/" rel="">مدخل إلى الحركات: مفهوم الحركة</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D8%AA%D8%B7%D8%A8%D9%8A%D9%82-%D8%B9%D9%85%D9%84%D9%8A-%D8%A7%D9%84%D8%A7%D9%86%D8%AA%D9%82%D8%A7%D9%84%D8%A7%D8%AA-r678/" rel="">تطبيق عملي: الانتقالات</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D8%AE%D8%A7%D8%B5%D9%8A%D8%A7%D8%AA-%D8%A7%D9%84%D8%A7%D9%86%D8%AA%D9%82%D8%A7%D9%84%D8%A7%D8%AA-r681/" rel="">خاصيات الانتقالات</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D8%AF%D9%88%D8%A7%D9%84-%D8%A7%D9%84%D8%AA%D9%88%D9%82%D9%8A%D8%AA-r682/" rel="">دوال التوقيت</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D8%A7%D9%84%D8%A7%D9%86%D8%AA%D9%82%D8%A7%D9%84%D8%A7%D8%AA-%D8%A7%D9%84%D9%85%D8%AA%D8%B9%D8%AF%D8%AF%D8%A9-r683/" rel="">الانتقالات المتعددة</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D8%A7%D9%84%D8%A7%D9%86%D8%AA%D9%82%D8%A7%D9%84%D8%A7%D8%AA-%D9%88%D8%AC%D8%A7%D9%81%D8%A7%D8%B3%D9%83%D8%B1%D8%A8%D8%AA-r684/" rel="">الانتقالات وجافاسكربت</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D8%AA%D8%B7%D8%A8%D9%8A%D9%82-%D8%B9%D9%85%D9%84%D9%8A-%D8%A7%D9%84%D8%AA%D8%AD%D8%B1%D9%8A%D9%83%D8%A7%D8%AA-r685/" rel="">تطبيق عملي: التحريكات</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D8%AE%D8%A7%D8%B5%D9%8A%D8%A7%D8%AA-%D8%A7%D9%84%D8%AD%D8%B1%D9%83%D8%A7%D8%AA-r693/" rel="">خاصيات الحركات</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D8%AA%D8%B7%D8%A8%D9%8A%D9%82-%D8%B9%D9%85%D9%84%D9%8A-%D8%A7%D9%84%D8%A5%D8%B7%D8%A7%D8%B1%D8%A7%D8%AA-%D8%A7%D9%84%D9%85%D9%81%D8%AA%D8%A7%D8%AD%D9%8A%D8%A9-r694/" rel="">تطبيق عملي: الإطارات المفتاحية</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D8%A7%D9%84%D8%AD%D8%B1%D9%83%D8%A7%D8%AA-%D8%A7%D9%84%D9%85%D8%AA%D8%B9%D8%AF%D8%AF%D8%A9-%D8%A7%D9%84%D9%85%D8%AA%D8%B2%D8%A7%D9%85%D9%86%D8%A9-r696/" rel="">الحركات المتعددة المتزامنة</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D9%85%D9%88%D8%AC%D8%B2-%D8%A7%D9%84%D8%AD%D8%B1%D9%83%D8%A7%D8%AA-r697/" rel="">موجز الحركات</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D8%B1%D9%88%D8%A7%D9%8A%D8%A9-%D8%A7%D9%84%D9%82%D8%B5%D8%B5-%D8%B9%D8%A8%D8%B1-%D8%A7%D9%84%D8%AD%D8%B1%D9%83%D8%A7%D8%AA-r698/" rel="">رواية القصص عبر الحركات</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D8%AD%D8%B1%D8%A8-%D8%A7%D9%84%D9%86%D8%AC%D9%88%D9%85-star-war-r704/" rel="">حرب النجوم</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D8%A5%D8%B8%D9%87%D8%A7%D8%B1-%D8%A7%D9%84%D9%85%D8%AD%D8%AA%D9%88%D9%89-%D8%A3%D8%AB%D9%86%D8%A7%D8%A1-%D8%A7%D9%84%D8%AA%D9%85%D8%B1%D9%8A%D8%B1-r705/" rel="">إظهار المحتوى أثناء التمرير</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D8%B3%D9%87%D9%88%D9%84%D8%A9-%D8%A7%D9%84%D9%88%D8%B5%D9%88%D9%84-r706/" rel="">سهولة الوصول</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D9%86%D9%87%D8%A7%D9%8A%D8%A9-%D8%A7%D9%84%D8%B1%D8%AD%D9%84%D8%A9-r707/" rel="">نهاية الرحلة</a>
	</li>
</ul>
<p>
	كانت المتصفحات فيما مضى بسيطة للغاية. فقبل وقت غير بعيد، لم تكن قادرة حتى على عرض الصور، أو التعامل إلا مع حفنة من الخطوط. ثم جاءت <a href="https://wiki.hsoub.com/CSS" rel="external">CSS</a>، ومنحتنا القدرة على التحكم في شكل ومظهر صفحات الويب.
</p>

<p>
	التحريك (Animation) في المتصفحات ليس جديدًا. فقد وفرت لنا بعض مكتبات <a href="https://wiki.hsoub.com/JavaScript" rel="external">JavaScript</a> مثل Flash و Canvas وغيرها طرقًا للتحريك، ولكن صارت <a href="https://wiki.hsoub.com/CSS" rel="external">CSS</a>، في الآونة الأخيرة، خيارًا إضافيًا.
</p>

<h2 id="-">
	الانتقالات
</h2>

<p>
	إحدى الطرق التي تتيحها <a href="https://wiki.hsoub.com/CSS" rel="external">CSS</a> للتحكم في التحريك في المتصفح هي باستخدام الخاصية 'transition'. بلغة المتصفحات، فإنّ الانتقال (transition) يعني حركة من حالة إلى أخرى.
</p>

<p style="text-align: center;">
	<img alt="الانتقال: من A إلى B" class="ipsImage ipsImage_thumbnailed" data-fileid="29540" data-unique="cq9on471e" src="https://academy.hsoub.com/uploads/monthly_2019_05/5ce029594fb1f_TransitionsAtoB.png.29778938efdf5d38760401de1774ac44.png" style="width: 573px; height: auto;"></p>

<p>
	عندما نطبق عملية الانتقال على عنصر ما، فإننا نخبر المتصفح بأننا نريده أن ينقل، أو يحسب تلقائيًا، التغيير بين الحالات.
</p>

<p style="text-align: center;">
	<a href="http://codepen.io/donovanh/pen/RNdxqw" rel="external nofollow"><img alt="الانتقال المتحرك من A إلى B" class="ipsImage ipsImage_thumbnailed" data-fileid="29539" data-unique="vevi1atng" src="https://academy.hsoub.com/uploads/monthly_2019_05/5ce02958b62a0_AnimatedtransitionfromAtoB.png.802edba4a2d3e0ed7950f4ae33423832.png" style="width: 573px; height: auto;"></a>
</p>

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

<p style="text-align: center;">
	<a href="http://codepen.io/donovanh/pen/MYQdZd" rel="external nofollow"><img alt="زر متحرك" class="ipsImage ipsImage_thumbnailed" data-fileid="29538" data-unique="hdnewhw70" src="https://academy.hsoub.com/uploads/monthly_2019_05/5ce0295825048_Animatedbutton.png.d2bd6ec6c6f674522c7348f34a56f1c4.png" style="width: 573px; height: auto;"></a>
</p>

<h2 id="-">
	خصائص الانتقال
</h2>

<p>
	عندما نستخدم الانتقال على عنصر ما، فهناك الكثير من الخصائص التي يمكن أن تتحكم في كيفية الانتقال. يمكننا أن نجعله بطيئًا أو سريعًا، أو نؤخره، بل ويمكننا أن نتحكم في وتيرة التغيير باستخدام دوال التوقيت (timing functions). سوف نتطرق إلى ما يعنيه هذا في <a href="%D8%B1%D8%A7%D8%A8%D8%B7" rel="">المقالة التالية</a>.
</p>

<p>
	مثال آخر على الانتقالات المركبة:
</p>

<p style="text-align: center;">
	<a href="http://codepen.io/suez/pen/XJGOyL" rel="external nofollow"><img alt="المزيد من الانتقالات" class="ipsImage ipsImage_thumbnailed" data-fileid="29541" data-unique="g7cskgnse" src="https://academy.hsoub.com/uploads/monthly_2019_05/transitions-min.gif.dd1fe25e9439cf44ddcd2ac0d213a45b.gif" style="width: 402px; height: auto;"></a>
</p>

<p>
	سنناقش قريبًا كيفية استخدام الانتقالات للقيام بمثل هذه التحريكات.
</p>

<h2 id="-">
	مختصر القول
</h2>

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

<h2 id="-">
	تمرين
</h2>

<p>
	كيف تبدو بيئة العمل خاصتك؟ قم بإلقاء نظرة على الشيفرة، وابحث عن الخاصية 'transition' في شيفرة <a href="https://wiki.hsoub.com/CSS" rel="external">CSS</a>. هل يمكنك تخمين ما تفعله؟
</p>

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

<p>
	سنلقي في المقالة التالية نظرة عامة على الخاصية 'animation'، وكيف تختلف عن الخاصية 'transition'.
</p>

<h2 id="-">
	المصادر
</h2>

<ul>
<li>
		ترجمة وبتصرف للفصل transitions من كتاب <a href="https://cssanimation.rocks/css-animation-101" rel="external nofollow">CSS Animation 101</a> لمؤلفه Donovan Hutchinson.
	</li>
</ul>
<h2 id="-">
	اقرأ أيضًا
</h2>

<ul>
<li>
		المقالة التالية: <a href="https://academy.hsoub.com/programming/css/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D8%A7%D9%84%D8%AD%D8%B1%D9%83%D8%A7%D8%AA-%D9%85%D9%81%D9%87%D9%88%D9%85-%D8%A7%D9%84%D8%AD%D8%B1%D9%83%D8%A9-r677/" rel="">مدخل إلى الحركات: مفهوم الحركة</a>
	</li>
	<li>
		المقالة السابقة: <a href="https://academy.hsoub.com/programming/css/%D8%AA%D8%AC%D9%87%D9%8A%D8%B2-%D8%A8%D9%8A%D8%A6%D8%A9-%D8%A7%D9%84%D8%B9%D9%85%D9%84-%D9%84%D8%A5%D9%86%D8%B4%D8%A7%D8%A1-%D8%A7%D9%84%D8%AD%D8%B1%D9%83%D8%A7%D8%AA-r675/" rel="">تجهيز بيئة العمل لإنشاء الحركات</a>
	</li>
	<li>
		النسخة العربية الكاملة من كتاب:<a href="https://academy.hsoub.com/files/14-%D8%A7%D9%84%D8%AA%D8%AD%D8%B1%D9%8A%D9%83-%D8%B9%D8%A8%D8%B1-css/" rel=""> التحريك عبر CSS</a>
	</li>
</ul>
]]></description><guid isPermaLink="false">676</guid><pubDate>Sat, 25 May 2019 18:03:00 +0000</pubDate></item><item><title>&#x62A;&#x62C;&#x647;&#x64A;&#x632; &#x628;&#x64A;&#x626;&#x629; &#x627;&#x644;&#x639;&#x645;&#x644; &#x644;&#x625;&#x646;&#x634;&#x627;&#x621; &#x627;&#x644;&#x62D;&#x631;&#x643;&#x627;&#x62A; &#x639;&#x628;&#x631; CSS</title><link>https://academy.hsoub.com/programming/css/%D8%AA%D8%AC%D9%87%D9%8A%D8%B2-%D8%A8%D9%8A%D8%A6%D8%A9-%D8%A7%D9%84%D8%B9%D9%85%D9%84-%D9%84%D8%A5%D9%86%D8%B4%D8%A7%D8%A1-%D8%A7%D9%84%D8%AD%D8%B1%D9%83%D8%A7%D8%AA-%D8%B9%D8%A8%D8%B1-css-r675/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2019_07/5d1b596e876b1_.jpg.06afd889dc8f5c579e91c998defd5e27.jpg" /></p>

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

	<p>
		"الناس لا يتعلمون المشي باتباع القواعد. بل يتعلمونه بالممارسة، والسقوط ثم النهوض". ريتشارد برانسون
	</p>
</blockquote>

<p>
	سنتعلم في هذه الفقرة كيفية إنشاء تحريكات <a href="https://wiki.hsoub.com/CSS" rel="external">CSS</a> ‏(CSS animations) ومشاهدتها في المتصفح. ولكن قبل البدء في كتابة الشيفرة، من الجيد أن نحدد سير العمل.
</p>

<p>
	هذه المقالة جزء من <a href="https://academy.hsoub.com/tags/%D8%A7%D9%84%D8%AA%D8%AD%D8%B1%D9%8A%D9%83%20%D9%81%D9%8A%20css/" rel="">سلسلة من المقالات حول التحريك في CSS</a>:
</p>

<ul>
<li>
		<a href="https://academy.hsoub.com/programming/css/%D9%85%D8%A7-%D9%87%D9%8A-%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85%D8%A7%D8%AA-%D8%A7%D9%84%D8%AD%D8%B1%D9%83%D8%A7%D8%AA%D8%9F-r674/" rel="">ما هي استخدامات الحركات؟</a>
	</li>
	<li>
		تجهيز بيئة العمل لإنشاء الحركات
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D8%A7%D9%84%D8%A7%D9%86%D8%AA%D9%82%D8%A7%D9%84%D8%A7%D8%AA-%D8%A7%D9%84%D8%AA%D9%86%D9%82%D9%84-%D8%A8%D9%8A%D9%86-%D8%A7%D9%84%D8%AD%D8%A7%D9%84%D8%A7%D8%AA-r676/" rel="">مدخل إلى الانتقالات: التنقل بين الحالات</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D8%A7%D9%84%D8%AD%D8%B1%D9%83%D8%A7%D8%AA-%D9%85%D9%81%D9%87%D9%88%D9%85-%D8%A7%D9%84%D8%AD%D8%B1%D9%83%D8%A9-r677/" rel="">مدخل إلى الحركات: مفهوم الحركة</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D8%AA%D8%B7%D8%A8%D9%8A%D9%82-%D8%B9%D9%85%D9%84%D9%8A-%D8%A7%D9%84%D8%A7%D9%86%D8%AA%D9%82%D8%A7%D9%84%D8%A7%D8%AA-r678/" rel="">تطبيق عملي: الانتقالات</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D8%AE%D8%A7%D8%B5%D9%8A%D8%A7%D8%AA-%D8%A7%D9%84%D8%A7%D9%86%D8%AA%D9%82%D8%A7%D9%84%D8%A7%D8%AA-r681/" rel="">خاصيات الانتقالات</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D8%AF%D9%88%D8%A7%D9%84-%D8%A7%D9%84%D8%AA%D9%88%D9%82%D9%8A%D8%AA-r682/" rel="">دوال التوقيت</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D8%A7%D9%84%D8%A7%D9%86%D8%AA%D9%82%D8%A7%D9%84%D8%A7%D8%AA-%D8%A7%D9%84%D9%85%D8%AA%D8%B9%D8%AF%D8%AF%D8%A9-r683/" rel="">الانتقالات المتعددة</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D8%A7%D9%84%D8%A7%D9%86%D8%AA%D9%82%D8%A7%D9%84%D8%A7%D8%AA-%D9%88%D8%AC%D8%A7%D9%81%D8%A7%D8%B3%D9%83%D8%B1%D8%A8%D8%AA-r684/" rel="">الانتقالات وجافاسكربت</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D8%AA%D8%B7%D8%A8%D9%8A%D9%82-%D8%B9%D9%85%D9%84%D9%8A-%D8%A7%D9%84%D8%AA%D8%AD%D8%B1%D9%8A%D9%83%D8%A7%D8%AA-r685/" rel="">تطبيق عملي: التحريكات</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D8%AE%D8%A7%D8%B5%D9%8A%D8%A7%D8%AA-%D8%A7%D9%84%D8%AD%D8%B1%D9%83%D8%A7%D8%AA-r693/" rel="">خاصيات الحركات</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D8%AA%D8%B7%D8%A8%D9%8A%D9%82-%D8%B9%D9%85%D9%84%D9%8A-%D8%A7%D9%84%D8%A5%D8%B7%D8%A7%D8%B1%D8%A7%D8%AA-%D8%A7%D9%84%D9%85%D9%81%D8%AA%D8%A7%D8%AD%D9%8A%D8%A9-r694/" rel="">تطبيق عملي: الإطارات المفتاحية</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D8%A7%D9%84%D8%AD%D8%B1%D9%83%D8%A7%D8%AA-%D8%A7%D9%84%D9%85%D8%AA%D8%B9%D8%AF%D8%AF%D8%A9-%D8%A7%D9%84%D9%85%D8%AA%D8%B2%D8%A7%D9%85%D9%86%D8%A9-r696/" rel="">الحركات المتعددة المتزامنة</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D9%85%D9%88%D8%AC%D8%B2-%D8%A7%D9%84%D8%AD%D8%B1%D9%83%D8%A7%D8%AA-r697/" rel="">موجز الحركات</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D8%B1%D9%88%D8%A7%D9%8A%D8%A9-%D8%A7%D9%84%D9%82%D8%B5%D8%B5-%D8%B9%D8%A8%D8%B1-%D8%A7%D9%84%D8%AD%D8%B1%D9%83%D8%A7%D8%AA-r698/" rel="">رواية القصص عبر الحركات</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D8%AD%D8%B1%D8%A8-%D8%A7%D9%84%D9%86%D8%AC%D9%88%D9%85-star-war-r704/" rel="">حرب النجوم</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D8%A5%D8%B8%D9%87%D8%A7%D8%B1-%D8%A7%D9%84%D9%85%D8%AD%D8%AA%D9%88%D9%89-%D8%A3%D8%AB%D9%86%D8%A7%D8%A1-%D8%A7%D9%84%D8%AA%D9%85%D8%B1%D9%8A%D8%B1-r705/" rel="">إظهار المحتوى أثناء التمرير</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D8%B3%D9%87%D9%88%D9%84%D8%A9-%D8%A7%D9%84%D9%88%D8%B5%D9%88%D9%84-r706/" rel="">سهولة الوصول</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D9%86%D9%87%D8%A7%D9%8A%D8%A9-%D8%A7%D9%84%D8%B1%D8%AD%D9%84%D8%A9-r707/" rel="">نهاية الرحلة</a>
	</li>
</ul>
<p>
	هناك طريقتان للتطوير: التطوير في المتصفح، والتطوير المحلي (offline).
</p>

<h2 id="-">
	التطوير في المتصفح
</h2>

<p>
	إنّ أبسط طريقة للقيام بالتجارب الصغيرة هي التطوير عبر الإنترنت. الموقع الذي أستخدمه غالبًا هو <a href="https://codepen.io" rel="external nofollow">CodePen</a>. موقع <a href="http://jsfiddle.net/" rel="external nofollow">JS Fiddle</a> يُعد خيارًا ممتازًا أيضًا.
</p>

<p>
	في بقية هذا الدرس، سأستخدم <a href="https://codepen.io" rel="external nofollow">CodePen</a> لكتابة الأمثلة، لذا فمن المهم أن تكون على دراية بطريقة عمله.
</p>

<p>
	<a href="https://codepen.io" rel="external nofollow">CodePen</a> عبارة عن منصة برمجية، والتي يمكنك أن تجري عليها تغييرات على شيفرة <a href="https://wiki.hsoub.com/HTML" rel="external">HTML</a> و <a href="https://wiki.hsoub.com/CSS" rel="external">CSS</a> و <a href="https://wiki.hsoub.com/JavaScript" rel="external">JavaScript</a>، ورؤية النتائج على الفور. تنقسم الشاشة إلى أربعة أقسام، قسم المعاينة، وأقسام <a href="https://wiki.hsoub.com/HTML" rel="external">HTML</a> و <a href="https://wiki.hsoub.com/CSS" rel="external">CSS</a> و <a href="https://wiki.hsoub.com/JavaScript" rel="external">JavaScript</a>. يوجد داخل كل قسم خيارات تسمح لك بإعداد اللغات (<a href="https://wiki.hsoub.com/Sass" rel="external">Sass</a> بدلًا من <a href="https://wiki.hsoub.com/CSS" rel="external">CSS</a> على سبيل المثال) وغيرها من الأشياء المفيدة.
</p>

<h2 id="-">
	التطوير المحلي
</h2>

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

<h3 id="-html-css">
	الخيار الأبسط: إنشاء ملفّي HTML و CSS
</h3>

<p>
	الخيار الأبسط هو إنشاء ملف <a href="https://wiki.hsoub.com/HTML" rel="external">HTML</a> ‏(filename.html) وربطه بملف <a href="https://wiki.hsoub.com/CSS" rel="external">CSS</a> ‏(filename.css)<span style="display: none;"> </span>. هذه طريقة مقبولة، لكن يمكن أن تكون بطيئة، حيث سيكون عليك التنقل كثيرًا بين المتصفح والمحرر.
</p>

<p>
	لقد قمت بإنشاء مجموعة من ملفات <a href="https://wiki.hsoub.com/HTML" rel="external">HTML</a> و <a href="https://wiki.hsoub.com/CSS" rel="external">CSS</a>، يمكنك نسخها واستخدامها لبدء العمل. قم بتنزيلها من <a href="https://github.com/cssanimation/starter/archive/master.zip" rel="external nofollow">هنا</a>.
</p>

<p style="text-align: center;">
	<img alt="Starting files.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="29537" data-unique="0hr1mj9ou" src="https://academy.hsoub.com/uploads/monthly_2019_05/5ce023a481c70_Startingfiles.jpg.fe5075de92a9e496fda47febc08c3780.jpg"></p>

<h3 id="dreamweaver-macaw-muse-coda-sublime">
	Dreamweaver / Macaw / Muse / Coda / Sublime
</h3>

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

<p>
	أنا شخصيًا أوصي بالعمل مباشرة على الشيفرة. سيساعدك فهم طريقة عمل <a href="https://wiki.hsoub.com/CSS" rel="external">CSS</a> على إصلاح المشاكل، أو إنشاء تأثيرات لا يمكن أن توفرها الأدوات البصرية.
</p>

<h3 id="-gulp">
	أداة البناء Gulp
</h3>

<p>
	إذا كنت معتادًا على Github و Node ومعالجة الشيفرات، فقد ترغب في إعداد بيئة تطوير على جهازك.
</p>

<p>
	أنا أحب أداة <a href="https://academy.hsoub.com/programming/workflow/%D8%AF%D9%84%D9%8A%D9%84%D9%83-%D8%A7%D9%84%D8%B4%D8%A7%D9%85%D9%84-%D8%A5%D9%84%D9%89-%D8%A3%D8%AF%D8%A7%D8%A9-%D8%A7%D9%84%D8%A8%D9%86%D8%A7%D8%A1-gulp-r663/" rel="">Gulp</a>. فكونُها تعتمد على Node، يجعلها سريعة جدًا. يمكن تجميع الوحدات لتحويل <a href="https://wiki.hsoub.com/Sass" rel="external">Sass</a> إلى <a href="https://wiki.hsoub.com/CSS" rel="external">CSS</a> والإصلاح التلقائي لدعم المتصفح، والمزامنة مع المتصفحات بحيث لا تحتاج إلى تحديث المتصفح في كل مرة تحدّث الشيفرة.
</p>

<p>
	إذا سبق واستخدمت Grunt، أو أدوات البناء الأخرى، فسيكون سير العمل مألوفًا.
</p>

<p>
	لقد قمت بإنشاء <a href="https://github.com/cssanimation/gulp-sass-starter" rel="external nofollow">مستودع Github</a> لجعل التطوير المحلي أسرع. إذا كنت متعودًا استخدامَ Git، فزُر صفحة المستودع، وطالع <a href="https://github.com/cssanimation/gulp-sass-starter/blob/master/README.md" rel="external nofollow">الملف readme</a> الذي يحتوي إرشادات الإعداد.
</p>

<p>
	يمكنك تحسينه ومشاركته إذا رغبت في ذلك.
</p>

<h2 id="-">
	مختصر القول
</h2>

<p>
	أثناء تعلُّمك للتحريك في <a href="https://wiki.hsoub.com/CSS" rel="external">CSS</a>، لا تتردد في التعديل على الشيفرة وتجربة أمور جديدة. قد ترغب في استضافة الشيفرة بنفسك، أو قد تُفضِّل استخدام CodePen، الأمر يعود لك. تأكد من أنه يمكنك تحويل الأفكار إلى شيفرة بسلاسة.
</p>

<h2 id="-">
	تمرين
</h2>

<p>
	سجّل في <a href="https://cssanimation.rocks/css-animation-101/Codepen.io" rel="external nofollow">CodePen</a>. أضف بعض شيفرات <a href="https://wiki.hsoub.com/HTML" rel="external">HTML</a> و <a href="https://wiki.hsoub.com/CSS" rel="external">CSS</a>، وانظر بنفسك كيف تتغير النتائج على الفور. من الجيد أيضًا مطالعة بعض أمثلة CodePen على الصفحة الرئيسية، وتعلم كيفية عملها.
</p>

<p>
	اختياري: إذا كنت ترغب في تجربة التطوير المحلي، فقم بتنزيل ملفات البدء المحلية:
</p>

<ul>
<li>
		الخيار الأساسي: <a href="https://github.com/cssanimation/starter/archive/master.zip" rel="external nofollow">ملفات HTML و CSS لبدء المشروع</a>
	</li>
	<li>
		متقدم: <a href="https://github.com/cssanimation/gulp-sass-starter" rel="external nofollow">ملفات البدء Gulp &amp; Sass</a>
	</li>
</ul>
<h2 id="-">
	المصادر
</h2>

<ul>
<li>
		ترجمة وبتصرف للفصل creative-environments من كتاب <a href="https://cssanimation.rocks/css-animation-101" rel="external nofollow">CSS Animation 101</a> لمؤلفه Donovan Hutchinson.
	</li>
</ul>
<h2 id="-">
	اقرأ أيضًا
</h2>

<ul>
<li>
		المقالة التالية: <a href="https://academy.hsoub.com/programming/css/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D8%A7%D9%84%D8%A7%D9%86%D8%AA%D9%82%D8%A7%D9%84%D8%A7%D8%AA-%D8%A7%D9%84%D8%AA%D9%86%D9%82%D9%84-%D8%A8%D9%8A%D9%86-%D8%A7%D9%84%D8%AD%D8%A7%D9%84%D8%A7%D8%AA-r676/" rel="">مدخل إلى الانتقالات: التنقل بين الحالات</a>
	</li>
	<li>
		المقالة السابقة: <a href="https://academy.hsoub.com/programming/css/%D9%85%D8%A7-%D9%87%D9%8A-%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85%D8%A7%D8%AA-%D8%A7%D9%84%D8%AD%D8%B1%D9%83%D8%A7%D8%AA%D8%9F-r674/" rel="">ما هي استخدامات الحركات؟</a>
	</li>
	<li>
		النسخة العربية الكاملة من كتاب: <a href="https://academy.hsoub.com/files/14-%D8%A7%D9%84%D8%AA%D8%AD%D8%B1%D9%8A%D9%83-%D8%B9%D8%A8%D8%B1-css/" rel="">التحريك عبر CSS</a>
	</li>
</ul>
]]></description><guid isPermaLink="false">675</guid><pubDate>Wed, 22 May 2019 18:02:00 +0000</pubDate></item><item><title>&#x645;&#x627; &#x647;&#x64A; &#x627;&#x633;&#x62A;&#x62E;&#x62F;&#x627;&#x645;&#x627;&#x62A; &#x627;&#x644;&#x62D;&#x631;&#x643;&#x627;&#x62A;&#x61F;</title><link>https://academy.hsoub.com/programming/css/%D9%85%D8%A7-%D9%87%D9%8A-%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85%D8%A7%D8%AA-%D8%A7%D9%84%D8%AD%D8%B1%D9%83%D8%A7%D8%AA%D8%9F-r674/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2019_07/5d1b5356cee1a_.jpg.2ed78b168a2e46ea0742fe4eb5324399.jpg" /></p>

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

	<p>
		"يتمحور التحريك إلى خلق شعور بالحياة". براد بيرد
	</p>
</blockquote>

<p>
	هذه المقالة جزء من <a href="https://academy.hsoub.com/tags/%D8%A7%D9%84%D8%AA%D8%AD%D8%B1%D9%8A%D9%83%20%D9%81%D9%8A%20css/" rel="">سلسلة من المقالات حول التحريك في CSS</a>:
</p>

<ul>
<li>
		ما هي استخدامات الحركات؟
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D8%AA%D8%AC%D9%87%D9%8A%D8%B2-%D8%A8%D9%8A%D8%A6%D8%A9-%D8%A7%D9%84%D8%B9%D9%85%D9%84-%D9%84%D8%A5%D9%86%D8%B4%D8%A7%D8%A1-%D8%A7%D9%84%D8%AD%D8%B1%D9%83%D8%A7%D8%AA-r675/" rel="">تجهيز بيئة العمل لإنشاء الحركات</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D8%A7%D9%84%D8%A7%D9%86%D8%AA%D9%82%D8%A7%D9%84%D8%A7%D8%AA-%D8%A7%D9%84%D8%AA%D9%86%D9%82%D9%84-%D8%A8%D9%8A%D9%86-%D8%A7%D9%84%D8%AD%D8%A7%D9%84%D8%A7%D8%AA-r676/" rel="">مدخل إلى الانتقالات: التنقل بين الحالات</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D8%A7%D9%84%D8%AD%D8%B1%D9%83%D8%A7%D8%AA-%D9%85%D9%81%D9%87%D9%88%D9%85-%D8%A7%D9%84%D8%AD%D8%B1%D9%83%D8%A9-r677/" rel="">مدخل إلى الحركات: مفهوم الحركة</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D8%AA%D8%B7%D8%A8%D9%8A%D9%82-%D8%B9%D9%85%D9%84%D9%8A-%D8%A7%D9%84%D8%A7%D9%86%D8%AA%D9%82%D8%A7%D9%84%D8%A7%D8%AA-r678/" rel="">تطبيق عملي: الانتقالات</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D8%AE%D8%A7%D8%B5%D9%8A%D8%A7%D8%AA-%D8%A7%D9%84%D8%A7%D9%86%D8%AA%D9%82%D8%A7%D9%84%D8%A7%D8%AA-r681/" rel="">خاصيات الانتقالات</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D8%AF%D9%88%D8%A7%D9%84-%D8%A7%D9%84%D8%AA%D9%88%D9%82%D9%8A%D8%AA-r682/" rel="">دوال التوقيت</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D8%A7%D9%84%D8%A7%D9%86%D8%AA%D9%82%D8%A7%D9%84%D8%A7%D8%AA-%D8%A7%D9%84%D9%85%D8%AA%D8%B9%D8%AF%D8%AF%D8%A9-r683/" rel="">الانتقالات المتعددة</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D8%A7%D9%84%D8%A7%D9%86%D8%AA%D9%82%D8%A7%D9%84%D8%A7%D8%AA-%D9%88%D8%AC%D8%A7%D9%81%D8%A7%D8%B3%D9%83%D8%B1%D8%A8%D8%AA-r684/" rel="">الانتقالات وجافاسكربت</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D8%AA%D8%B7%D8%A8%D9%8A%D9%82-%D8%B9%D9%85%D9%84%D9%8A-%D8%A7%D9%84%D8%AA%D8%AD%D8%B1%D9%8A%D9%83%D8%A7%D8%AA-r685/" rel="">تطبيق عملي: التحريكات</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D8%AE%D8%A7%D8%B5%D9%8A%D8%A7%D8%AA-%D8%A7%D9%84%D8%AD%D8%B1%D9%83%D8%A7%D8%AA-r693/" rel="">خاصيات الحركات</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D8%AA%D8%B7%D8%A8%D9%8A%D9%82-%D8%B9%D9%85%D9%84%D9%8A-%D8%A7%D9%84%D8%A5%D8%B7%D8%A7%D8%B1%D8%A7%D8%AA-%D8%A7%D9%84%D9%85%D9%81%D8%AA%D8%A7%D8%AD%D9%8A%D8%A9-r694/" rel="">تطبيق عملي: الإطارات المفتاحية</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D8%A7%D9%84%D8%AD%D8%B1%D9%83%D8%A7%D8%AA-%D8%A7%D9%84%D9%85%D8%AA%D8%B9%D8%AF%D8%AF%D8%A9-%D8%A7%D9%84%D9%85%D8%AA%D8%B2%D8%A7%D9%85%D9%86%D8%A9-r696/" rel="">الحركات المتعددة المتزامنة</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D9%85%D9%88%D8%AC%D8%B2-%D8%A7%D9%84%D8%AD%D8%B1%D9%83%D8%A7%D8%AA-r697/" rel="">موجز الحركات</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D8%B1%D9%88%D8%A7%D9%8A%D8%A9-%D8%A7%D9%84%D9%82%D8%B5%D8%B5-%D8%B9%D8%A8%D8%B1-%D8%A7%D9%84%D8%AD%D8%B1%D9%83%D8%A7%D8%AA-r698/" rel="">رواية القصص عبر الحركات</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D8%AD%D8%B1%D8%A8-%D8%A7%D9%84%D9%86%D8%AC%D9%88%D9%85-star-war-r704/" rel="">حرب النجوم</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D8%A5%D8%B8%D9%87%D8%A7%D8%B1-%D8%A7%D9%84%D9%85%D8%AD%D8%AA%D9%88%D9%89-%D8%A3%D8%AB%D9%86%D8%A7%D8%A1-%D8%A7%D9%84%D8%AA%D9%85%D8%B1%D9%8A%D8%B1-r705/" rel="">إظهار المحتوى أثناء التمرير</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D8%B3%D9%87%D9%88%D9%84%D8%A9-%D8%A7%D9%84%D9%88%D8%B5%D9%88%D9%84-r706/" rel="">سهولة الوصول</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D9%86%D9%87%D8%A7%D9%8A%D8%A9-%D8%A7%D9%84%D8%B1%D8%AD%D9%84%D8%A9-r707/" rel="">نهاية الرحلة</a>
	</li>
</ul>
<p>
	قبل الدخول في الجانب الفني من التحريك (Animation) في CSS، سنناقش سبب القيام بالتحريك في المقام الأول.
</p>

<h2 id="-">
	أبلغُ من الكلمات
</h2>

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

<p>
	إدراج الحركة في التصميمات يجعلها أكثر كفاءة في إيصال المعلومة. الصور المتحركة أبلغ من الكلمات الملفوظة أو المكتوبة.
</p>

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

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

<h2 id="-">
	ما المقصود بالتحريك في مجال تطوير المواقع؟
</h2>

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

<p>
	يمكن أن يكون التحريك معبرًا، كما يحدث عندما يتململ زر الحفظ في CodePen ليذكرنا بضرورة حفظ عملنا:
</p>

<p style="text-align: center;">
	<a href="http://codepen.io/donovanh/pen/KwEQdQ" rel="external nofollow"><img alt='زر "Save" متحرك' class="ipsImage ipsImage_thumbnailed" data-fileid="29534" data-unique="8378f9e0l" src="https://academy.hsoub.com/uploads/monthly_2019_05/save_button-min.gif.1163e4863831c19deb90465060201ccb.gif" style="width: 237px; height: auto;"></a>
</p>

<p>
	نحن ماهرون في رصد الحركة. لذلك، فإنّ إضافة القليل من الحركة إلى عناصر الصفحة يمكن أن يضفي على الصفحة الحيوية.
</p>

<p>
	يمكننا أيضًا استخدام التحريك لتقديم المحتوى على الصفحة:
</p>

<p style="text-align: center;">
	<a href="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/" rel=""><img alt="عناصر قائمة متحركة" class="ipsImage ipsImage_thumbnailed" data-fileid="29532" data-unique="2qkbxzuwk" src="https://academy.hsoub.com/uploads/monthly_2019_05/list_item-min.gif.38cd04c9f6c9134bd525f577763010f6.gif" style="width: 365px; height: auto;"></a>
</p>

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

<p>
	يمكننا استخدام التحريك لرواية قصة:
</p>

<p style="text-align: center;">
	<a href="http://hop.ie/portal" rel="external nofollow"><img alt="تحريك Portal" class="ipsImage ipsImage_thumbnailed" data-fileid="29533" data-unique="0pygpkgdo" src="https://academy.hsoub.com/uploads/monthly_2019_05/portal-min.gif.11069822ae0c2de42476f844244d7c3a.gif" style="width: 402px; height: auto;"></a>
</p>

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

<h2 id="-">
	مع القوة العظيمة تأتي المسؤولية
</h2>

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

<p>
	قد يعني هذا الاكتفاء بتحريك عنصر صغير فقط على صفحتك. فالأفضل ما قل ودل كما قيل.
</p>

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

<h2 id="-">
	مصدر إلهام
</h2>

<p>
	التحريك له تاريخ طويل وغني. كتبت مؤخرًا منشورًا حول مبادئ التحريك على الويب بعنوان <a href="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/" rel="">مبادئ التحريك في صفحات الويب باستخدام CSS</a>. المبادئ مستمدة من كتاب ديزني (1981) <a href="http://en.wikipedia.org/wiki/12_basic_principles_of_animation" rel="external nofollow">Illusion of Life: Disney Animation</a>.
</p>

<p>
	إذا كنت ترغب في التعمق في موضوع التحريك، فابحث عن مقاطع الفيديو التي تخص <a href="https://www.youtube.com/watch?v=loCiTO8qEMI" rel="external nofollow">Animator’s Survival Kit videos</a>. يوتيوب مليء بمصادر الإلهام والأفكار.
</p>

<p>
	للحصول على أمثلة متميزة وإبداعية، خصص بعض الوقت لتصفح <a href="http://hoverstat.es/" rel="external nofollow">Hover States</a>. يعرض هذا الموقع جميع أنواع الأمثلة المبدعة للتحريك على الشبكة. موقع <a href="Dribbble.com" rel="">Dribbble.com</a> مفيد أيضًا.
</p>

<p>
	على سبيل المثال، إليك مثالًا رائعًا من Dribbble يعرض مبادئ التصميم الخاصة بجوجل (<a href="https://dribbble.com/shots/1621920-Google-Material-Design-Free-AE-Project-File" rel="external nofollow">Google’s Material Design principles</a>. البحث عن "animation" هو أحد الطرق الجيدة للعثور على أفكار ملهمة.
</p>

<p>
	أتحقق كذلك بانتظام من مستجدات موقع <a href="https://codepen.io/" rel="external nofollow">CodePen</a>. فهو مصدر رائع لصور وأمثلة التحريك.
</p>

<h2 id="-">
	ملخص
</h2>

<ul>
<li>
		التحريك تقنية نافعة ومفيدة للغاية
	</li>
	<li>
		إذا استُخدِم بشكل صحيح، يمكن أن يكون أداةً مفيدةً في التصميم
	</li>
	<li>
		استخدمه لجذب الانتباه أو توصيل المعلومات
	</li>
	<li>
		لا تبالغ فيه
	</li>
	<li>
		إذا كنت تريد أن تتميز، فالتحريك قد يساعدك على ذلك
	</li>
</ul>
<h2 id="-">
	تمرين
</h2>

<p>
	فكّر في عملك ومشاريعك، وكيف يمكن أن يساعدك التحريك.
</p>

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

<p>
	أخيرًا، ألق نظرة على مواقع مثل <a href="http://hoverstat.es" rel="external nofollow">Hover States</a> و <a href="Dribbble" rel="">Little Big Details</a> و <a href="https://dribbble.com/" rel="external nofollow">Dribbble</a>. هذه المواقع ستساعدك كلما تحيّرت وأُغلِق عليك.
</p>

<h2 id="-">
	المصادر
</h2>

<ul>
<li>
		ترجمة وبتصرف للفصل why animate من كتاب <a href="https://cssanimation.rocks/css-animation-101" rel="external nofollow">CSS Animation 101</a> لمؤلفه Donovan Hutchinson.
	</li>
</ul>
<h2>
	اقرأ أيضًا
</h2>

<ul>
<li>
		المقالة التالية: <a href="https://academy.hsoub.com/programming/css/%D8%AA%D8%AC%D9%87%D9%8A%D8%B2-%D8%A8%D9%8A%D8%A6%D8%A9-%D8%A7%D9%84%D8%B9%D9%85%D9%84-%D9%84%D8%A5%D9%86%D8%B4%D8%A7%D8%A1-%D8%A7%D9%84%D8%AD%D8%B1%D9%83%D8%A7%D8%AA-r675/" rel="">تجهيز بيئة العمل لإنشاء الحركات</a>
	</li>
	<li>
		النسخة العربية الكاملة من كتاب:<a href="https://academy.hsoub.com/files/14-%D8%A7%D9%84%D8%AA%D8%AD%D8%B1%D9%8A%D9%83-%D8%B9%D8%A8%D8%B1-css/" rel=""> التحريك عبر CSS </a>
	</li>
</ul>
]]></description><guid isPermaLink="false">674</guid><pubDate>Sat, 18 May 2019 18:00:00 +0000</pubDate></item><item><title>&#x623;&#x641;&#x636;&#x644; 25 &#x645;&#x643;&#x62A;&#x628;&#x629; &#x62A;&#x62D;&#x631;&#x64A;&#x643; &#x641;&#x64A; CSS</title><link>https://academy.hsoub.com/programming/css/%D8%A3%D9%81%D8%B6%D9%84-25-%D9%85%D9%83%D8%AA%D8%A8%D8%A9-%D8%AA%D8%AD%D8%B1%D9%8A%D9%83-%D9%81%D9%8A-css-r657/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2019_01/css.png.5268fbeb4844f067d182044b59655032.png" /></p>

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

<p>
	إن لمكاتب التحريك في CSS العديد من الأنماط styles  والتي تستخدم تأثيرات خاصة بها (يمكن الإطلاع على المزيد في <a href="https://line25.com/articles/css-effects-tutorials" rel="external nofollow">CSS effects</a>)، وبالتالي مهما كان النمط الذي تبحث عنه سواء بسيط وسهل، أو ممتع مؤثر ستجد مكتبة مفيد لك.
</p>

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

<h2>
	Hexa
</h2>

<p>
	تعتبر <a href="https://github.com/amine1107/Hexa" rel="external nofollow">Hexa</a> مكتبة مذهلة للتحريك، بسيطة وخفيفة الحجم. يمكن استخدام مؤثرات التحريك التي تقدمها لإحياء عناصر صفحة الويب من نصوص، صور، أيقونات وبقية العناصر الأخرى.
</p>

<p>
	<img alt="2 (1).jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="28790" data-unique="bg5ej91a9" src="https://academy.hsoub.com/uploads/monthly_2019_01/5c4efc09d0178_2(1).jpg.215ee57615e44199195a544a907c3030.jpg"></p>

<h2>
	Vivify
</h2>

<p>
	إن <a href="http://vivify.mkcreative.cz/%20" rel="external nofollow">Vivify</a> هي مكتبة تحريك CSS مجانية تستطيع من خلالها إضافة المؤثرات إلى الأزرار، الصور وغيرها، وتحوي على العديد من المؤثرات التي يمكن الاختيار فيما بينها مثل الكرة، النبض، الاصطدام من اليمين واليسار، الاهتزاز، الانفلات، القفز، التلاشي، الدوران الشاقولي، السحب، الطي...
</p>

<p>
	<img alt="3.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="28791" data-unique="qm7fctoje" src="https://academy.hsoub.com/uploads/monthly_2019_01/3.jpg.34a99e23d379b2d28e498808e2733ba2.jpg"></p>

<h2>
	Tachyons-animate
</h2>

<p>
	تعتبر <a href="https://github.com/anater/tachyons-animate%20" rel="external nofollow">Tachyons-animate</a> مجموعة من صفوف CSS ذات الهدف المحدد وهو تنسيق الحركة باستخدام CSS.
</p>

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

<p>
	<img alt="4.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="28792" data-unique="oe44w7kag" src="https://academy.hsoub.com/uploads/monthly_2019_01/4.jpg.cf9fe97912bb227fac60d25d79967ad9.jpg"></p>

<h2>
	‏Infinite – useful CSS animations
</h2>

<p>
	تعتبر <a href="https://github.com/tilomitra/infinite%20" rel="external nofollow">Infinite-useful CSS animations</a> مجموعة صغيرة من عناصر التحريك المفيدة للغاية والتي يمكن استخدامها لتوليد عناصر نابضة بطريقة التحكم بشفافية ومقدار التوسع  في العناصر، إنشاء رسوم متحركة للتنبيه، تدوير العناصر وغيرها.
</p>

<p>
	<img alt="5.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="28793" data-unique="c12wzow3b" src="https://academy.hsoub.com/uploads/monthly_2019_01/5.jpg.5c4bc6e38cc8c6c0e79fd45925b965ed.jpg"></p>

<h2>
	Motion UI
</h2>

<p>
	تعتبر <a href="https://github.com/zurb/motion-ui%20" rel="external nofollow">Motion UI</a> مكتبة Sass قوية تفيد في إنشاء التحريكات والانتقالات، وقد أوجدت هذه المكتبة بالأساس كمكون ضمني في Foundation لتصميم البرامج، ولكن يمكن استخدامها كمكتبة منفصلة الآن، حيث يمكن استخدامها في إضافة تأثيرات السرعة، الانزلاق، تغيير الحجم وغيرها..
</p>

<h2>
	<img alt="6.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="28794" data-unique="qk8pvfcii" src="https://academy.hsoub.com/uploads/monthly_2019_01/6.jpg.80cce85361860cfdd7da74bd027db473.jpg">
</h2>

<h2>
	DynCSS
</h2>

<p>
	إن <a href="https://github.com/vzaccaria/DynCSS" rel="external nofollow">DynCSS</a> هي مكتبة عظيمة تستخدم في التحريك والتي تقوم بتفسير الـ CSS الخاص بك من أجل إنشاء قواعد dyn بسيطة وديناميكية تبث الحياة في موقعك.
</p>

<p>
	<img alt="7.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="28795" data-unique="2tg6m5qt4" src="https://academy.hsoub.com/uploads/monthly_2019_01/7.jpg.a8e07684554a2e939cb093bed80713a5.jpg"></p>

<h2>
	All animation
</h2>

<p>
	تعتبر <a href="http://all-animation.github.io/%20" rel="external nofollow">All animation.css</a> أداة تحوي العديد من عناصر التحريك الممتعة لجعل مشروعك أكثر تفاعلية وجاذبية بالنسبة للمستخدم، وهي عبارة عن عدة مؤثرات وعناصر تحريك ممكن استخدامها لإضافة تأثيرات ‏‎3D‎‏ وغيرها.
</p>

<p>
	<img alt="8.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="28796" data-unique="onur4jslx" src="https://academy.hsoub.com/uploads/monthly_2019_01/8.jpg.d1845bdccff84f5420c19e3b1b8f3bb7.jpg"></p>

<h2>
	Animate.CSS
</h2>

<p>
	إن <a href="https://daneden.github.io/animate.css/" rel="external nofollow">Animate.CSS</a> هي مكتبة تحريك أخرى تعمل على جميع المتصفحات وتُستخدم لإضافة مؤثرات مثل الاهتزاز، ‏الاضطراب، النبض، التأرجح، التمايل..‏
</p>

<h2>
	<img alt="9.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="28797" data-unique="i5ev13lg7" src="https://academy.hsoub.com/uploads/monthly_2019_01/9.jpg.ac71af7f5591a8104135832ebfe5ae76.jpg">
</h2>

<h2>
	Hover.CSS
</h2>

<p>
	تعتبر <a href="http://ianlunn.github.io/Hover/" rel="external nofollow">Hover.CSS</a> مجموعة CSS3 خاصة بتأثيرات التأرجح hover effects وتُستخدم على الروابط ، الأزرار، الشعارات، SVG، الصور وغيرها من العناصر. كما أنها متوفرة كـ CSS، Sass، و LESS.
</p>

<p>
	<img alt="10.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="28798" data-unique="v80n8wyxm" src="https://academy.hsoub.com/uploads/monthly_2019_01/10.jpg.6536dfcdd0193d5f22736888f9753deb.jpg"></p>

<h2>
	Effect.CSS
</h2>

<p>
	تعتبر مكتبة <a href="https://github.com/h5bp/Effeckt.css%20" rel="external nofollow">Effect.CSS</a> مكتبة CSS تُستخدم لإضاف انتقالات حساسة للموقع بهدف تحسين تجربة المستخدمين، حيث تقوم بإنشاء انتقالات CSS وتحريكات للأزرار، القوائم، الانتقالات بين الصفحات، العناوين، التلميحات، علامات التبويب، الإطارات وغيرها...
</p>

<p>
	<img alt="11.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="28799" data-unique="emj49hhj0" src="https://academy.hsoub.com/uploads/monthly_2019_01/11.jpg.90828f0344c65247bf497b7ecfd9cd1e.jpg"></p>

<h2>
	‎Magic CSS
</h2>

<p>
	تحوي <a href="https://github.com/miniMAC/magic%20" rel="external nofollow">Magic CSS</a> على عناصر تحريك CSS3 بمؤثرات خاصة تضفي روحًا خاصة للموقع مثل المؤثرات السحرية، المؤثؤات الساكنة، المناظير، الدوران، التحجيم، الانزلاق..
</p>

<p>
	<img alt="12.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="28800" data-unique="qcgif7go5" src="https://academy.hsoub.com/uploads/monthly_2019_01/12.jpg.8c8ae9050e762dcd29e650740caf22b6.jpg"></p>

<h2>
	CSSHAKE
</h2>

<p>
	إن <a href="https://github.com/elrumordelaluz/csshake/" rel="external nofollow">CSSHAKE</a> هي مجموعة من صفوف CSS لتحريك عناصر الصفحة DOM، وتثبيت هذه المكتبة سهل للغاية حيث يمكن تنزيل ملفات منفصلة لكل تأثير تحريك، توسيع، أو تصغير.
</p>

<p>
	<img alt="13.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="28801" data-unique="zer3jzvcs" src="https://academy.hsoub.com/uploads/monthly_2019_01/13.jpg.48c2ce26813a0246bea921ed6b5a4279.jpg"></p>

<h2>
	Repaintless CSS
</h2>

<p>
	تعتبر <a href="http://szynszyliszys.github.io/repaintless/" rel="external nofollow">Repaintless CSS</a> مكتبة  CSS خاصة بالتحريك خفيفة الحجم تحوي عشرات المؤثرات التي تجعل الموقع أكثر فاعلية بدون التأثير على سرعته، حيث يمكنك إضافة مؤثرات الانزلاق بكل سهولة.
</p>

<p>
	<img alt="14.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="28802" data-unique="miql7s8fd" src="https://academy.hsoub.com/uploads/monthly_2019_01/14.jpg.0d9784721983ea726ed1edb68822de5e.jpg"></p>

<h2>
	Tuesday
</h2>

<p>
	إن <a href="https://github.com/shakrmedia/tuesday" rel="external nofollow">Tuesday</a> هي مكتبة CSS منفصلة تستخدم لإضافة تأثيرات الدخول والخروج مثل التمدد والتقلص، الهبوط، نزول المطر، المفصلات.
</p>

<p>
	<img alt="15.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="28803" data-unique="pbvvdl3xr" src="https://academy.hsoub.com/uploads/monthly_2019_01/15.jpg.430dd623555338eeeefd7ab8a252c014.jpg"></p>

<h2>
	Obnoxious
</h2>

<p>
	تحوي <a href="https://github.com/tholman/obnoxious.css" rel="external nofollow">Obnoxious</a> تأثيرات ممتعة ولكن قد لاتناسب جميع المواقع ولكن بالتأكيد في حال استخدامها ستجعل موقعك يبرز بين المواقع الأخرى.
</p>

<p>
	من هذه المؤثرات الاهتزاز، زيادة الحجم، الطي، الالتواء...
</p>

<p>
	<img alt="16.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="28804" data-unique="t2k9ob96x" src="https://academy.hsoub.com/uploads/monthly_2019_01/16.jpg.879f22109332d083a7be85bf96c9150b.jpg"></p>

<h2>
	Flutter – CSS Image Hover Effects &amp; Lightbox
</h2>

<p>
	تحوي مكتبة <a href="https://codecanyon.net/item/flutter-css-image-hover-effects-lightbox/19326566?ref=webdesigndev&amp;clickthrough_id=1399487199&amp;redirect_back=true" rel="external nofollow">Flutter</a> على 12 مؤثر تحريك خاص بالتأرجح hover فوق الصور، أنظمة الأعمدة الثنائية أو الثلاثية، بالإضافة إلى 4 أنواع من الإضاءة وغيرها.
</p>

<p>
	<img alt="17.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="28805" data-unique="nb7zjfhlv" src="https://academy.hsoub.com/uploads/monthly_2019_01/17.jpg.a730781b437980ae5b7c7e73ffa6ef9f.jpg"></p>

<h2>
	Skloading – CSS3 Animations
</h2>

<p>
	تعتبر <a href="https://codecanyon.net/item/skloading-css3-animations/17282844?ref=webdesigndev" rel="external nofollow">Skloading</a> مكتبة تحريك CSS3 بتصميم قابل للتخصيص بشكل كامل حيث يمكنك تحميل واستخدام هذه التحريكات الخاصة بهذه المجموعة ضمن مشروعك.
</p>

<p>
	<img alt="18.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="28806" data-unique="bi6lvfif9" src="https://academy.hsoub.com/uploads/monthly_2019_01/18.jpg.b345881d0e4c2500346d8880cc57eaf8.jpg"></p>

<h2>
	Viavi CSS3 Scroll Effects
</h2>

<p>
	يمكنك من خلال <a href="https://codecanyon.net/item/viavi-css3-scroll-effects/14234524?ref=webdesigndev%5C" rel="external nofollow">Viavi</a>تجربة مجموعة المغازل ‏spinners‏ والمحملات ‏loaders‏ التي يمكن استخدامها لجذب انتباه ‏المستخدم، وهي تصميمات مُتجاوبة بشكل كامل كما أنها تتكيف بشكل رائع مع أي حجم للشاشة.
</p>

<p>
	<img alt="19.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="28808" data-unique="c89sl6a0d" src="https://academy.hsoub.com/uploads/monthly_2019_01/19.jpg.e0e9dac05168e8bc45f7a9e21fcece83.jpg"></p>

<h2>
	CSS Bubbles and Tooltips
</h2>

<p>
	إن هذه المكتبة ( يمكن الإطلاع على المزيد من خلال <a href="https://codecanyon.net/item/css-bubbles-and-tooltips/13578680?ref=webdesigndev" rel="external nofollow">CSS Bubbles and Tooltips</a>) تقدم لك التلميحات والفقاعات في CSS والتي ستساعدك في حفظ الوقت، حيث ستجد مجموعة من أشكال الملاحظات جاهزة على شكل مربع أو غيوم أو فقاعات على شكل قلب وكذلك تلمحيات للموقع، النصوص، الواجهات، الشرائط والأزرار.
</p>

<p>
	<img alt="20.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="28807" data-unique="9t4rokl37" src="https://academy.hsoub.com/uploads/monthly_2019_01/20.jpg.47c283c434f44b837ebaf914013846ff.jpg"></p>

<h2>
	‎ Animatia – CSS Image Hover Effects
</h2>

<p>
	إن <a href="https://codecanyon.net/item/animatia-css-image-hover-effects/11711217?ref=webdesigndev" rel="external nofollow">Animatia</a> هي مكتبة خاصة بتأثيرات التأرجح hover التي تحدث للصور أو عناصر CSS أخرى مثل الأزرار وغيرها.
</p>

<p>
	<img class="ipsImage ipsImage_thumbnailed" data-fileid="28809" data-unique="juvpftcp7" src="https://academy.hsoub.com/uploads/monthly_2019_01/21.jpg.095eefc21a62044410ffd8912dfe8e41.jpg" alt="21.jpg"></p>

<p>
	 
</p>

<h2>
	CSS Box and Text Shadows
</h2>

<p>
	يمكنك تنزيل صناديق CSS و ظلال النصوص (للإطلاع <a href="https://codecanyon.net/item/css-box-and-text-shadows/11574696?ref=webdesigndev" rel="external nofollow">CSS Box and Text Shadows</a>) واستخدامها مباشرة في موقعك وهي عبارة عن مجموعة فيها 40 تأثير ظلال يمكن تطبيقها على النصوص، الأزرار، الصور وغيرها.
</p>

<p>
	<img alt="22.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="28811" data-unique="0ij34zscm" src="https://academy.hsoub.com/uploads/monthly_2019_01/22.jpg.e1743a5102bb2f24c81a31f49c018563.jpg"></p>

<h2>
	HoverMe
</h2>

<p>
	تعد <a href="https://codecanyon.net/item/hoverme-a-css3-animation-packages/18956936?ref=webdesigndev" rel="external nofollow">HoverMe</a> مجموعة رائعة من عناصر تحريك CSS3 التي تحوي 4 صور أزرار، 10 أزرار تحميل، و 8 تحريكات متقدمة وغيرها.
</p>

<p>
	<img alt="23.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="28812" data-unique="b9nkdfu9j" src="https://academy.hsoub.com/uploads/monthly_2019_01/23.jpg.3f096b3b844fd332fa64b318d0cf80c5.jpg"></p>

<h2>
	‎Wickedcss
</h2>

<p>
	إن <a href="http://kristofferandreasen.github.io/wickedCSS/" rel="external nofollow">Wickedcss</a> هي مكتبة تحريك CSS3 تمنحك المتعة في التعامل معها فهي تحوي العديد من المؤثرات مثل التقافز pound، الانزلاق، النبض، دقات القلب، الدوران
</p>

<h2>
	<img alt="24.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="28813" data-unique="f2lu65jqb" src="https://academy.hsoub.com/uploads/monthly_2019_01/24.jpg.270323cc3ca35fc8ea8b1e9095257c73.jpg">
</h2>

<h2>
	Woah
</h2>

<p>
	إن مكتبة <a href="https://github.com/joerez/Woah.css%20" rel="external nofollow">Woah</a> هي لمطوري الويب غريبي الأطوار، حيث يمكن استخدامها لإضافة تحريكات مميزة لأي عنصر من عناصر صفحة الويب.
</p>

<p>
	<img alt="25 (1).jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="28814" data-unique="nw20mhjtz" src="https://academy.hsoub.com/uploads/monthly_2019_01/5c4f08a02d7ef_25(1).jpg.1e982481992a7596004a72d078a37be4.jpg"></p>

<h2>
	Motion CSS
</h2>

<p>
	تعتبر <a href="https://github.com/pavlyukpetr/motion-css" rel="external nofollow">Motion CSS</a> مكتبة تحريك ممتعة وسهلة التثبيت فلا تحتاج لاستخدامها سوى إلى ربطها مع ملف CSS ثم يمكنك استخدام صفوف محددة لأي عنصر من عناصر الصفحة لتحريكه.
</p>

<p>
	<img alt="26.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="28815" data-unique="hv5fmh6se" src="https://academy.hsoub.com/uploads/monthly_2019_01/26.jpg.fc4f5d5e7dde8127297b9a71f9161cda.jpg"></p>

<p>
	ترجمة -وبتصرّف- للمقال  <a href="https://line25.com/articles/best-css-animation-libraries" rel="external nofollow">25 Best CSS Animation Libraries</a> لصاحبه Iggy مصمم موقع Line25
</p>
]]></description><guid isPermaLink="false">657</guid><pubDate>Thu, 14 Feb 2019 09:08:01 +0000</pubDate></item><item><title>&#x62A;&#x62D;&#x631;&#x64A;&#x643; &#x648;&#x627;&#x646;&#x62A;&#x642;&#x627;&#x644; &#x627;&#x644;&#x639;&#x646;&#x627;&#x635;&#x631; &#x641;&#x64A; CSS3 (&#x627;&#x644;&#x62A;&#x62D;&#x631;&#x64A;&#x643;)</title><link>https://academy.hsoub.com/programming/css/%D8%AA%D8%AD%D8%B1%D9%8A%D9%83-%D9%88%D8%A7%D9%86%D8%AA%D9%82%D8%A7%D9%84-%D8%A7%D9%84%D8%B9%D9%86%D8%A7%D8%B5%D8%B1-%D9%81%D9%8A-css3-%D8%A7%D9%84%D8%AA%D8%AD%D8%B1%D9%8A%D9%83-r642/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2019_06/5d0a61186d9aa_().jpg.6de29aeef01d9db7e3b72b72e8ef97ec.jpg" /></p>

<p>
	تحدثنا في <a href="https://academy.hsoub.com/programming/css/%D8%AA%D8%AD%D8%B1%D9%8A%D9%83-%D9%88%D8%A7%D9%86%D8%AA%D9%82%D8%A7%D9%84-%D8%A7%D9%84%D8%B9%D9%86%D8%A7%D8%B5%D8%B1-%D9%81%D9%8A-css3-%D8%A7%D9%84%D8%A7%D9%86%D8%AA%D9%82%D8%A7%D9%84-r640/" rel="">الدرس السابق</a> عن انتقال وتحول العناصر باستخدام CSS3، وفي هذا الدرس سنتحدث عن التّحريك:
</p>

<h3>
	التحريك Animation
</h3>

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

<h3>
	تحديد إطارات العمل الرئيسية Keyframes
</h3>

<p>
	للبدء بعملية التحريك باستخدام CSS3 يجب أولًا تحديد عدة نقاط أساسية يمر بها العنصر بشكل إجباري، ولتنفيذ ذلك نستخدم القاعدة @keyframes والتي تتضمن اسم التحريك animation name ونقاط التحريك الأساسية وخصائصهم المساهمة في تحريك العنصر.
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_8251_7" style="">
<span class="lit">@keyframes</span><span class="pln"> slide </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><span class="pln">
    left</span><span class="pun">:</span><span class="pln"> </span><span class="lit">0</span><span class="pun">;</span><span class="pln">
    top</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><span class="pln">
  </span><span class="lit">50</span><span class="pun">%</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
    left</span><span class="pun">:</span><span class="pln"> </span><span class="lit">244px</span><span class="pun">;</span><span class="pln">
    top</span><span class="pun">:</span><span class="pln"> </span><span class="lit">100px</span><span class="pun">;</span><span class="pln">
  </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">
    left</span><span class="pun">:</span><span class="pln"> </span><span class="lit">488px</span><span class="pun">;</span><span class="pln">
    top</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><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	<strong>ملاحظة</strong>: لابد من استخدام البادئات التي تدعم المتصفحات vendor prefixing مع القاعدة keyframe، كما هو الحال في جميع خصائص الانتقالات والتحريك، حيث سيكون شكل البادئات بالشكل التالي:
</p>

<ul>
<li>
		@-moz-keyframes
	</li>
	<li>
		@-webkit-keyframes
	</li>
	<li>
		@-o-keyframes
	</li>
</ul>
<p>
	نلاحظ أنه تمّ تعريف عنصر الحركة animation بالإسم slide وذكر اسمه مباشرة بعد اسم القاعدة keyframes@ كما تم تحديد الإطارات المختلفة لهذا التحريك من خلال تحديد عدة نقاط أساسية ضمن الإطار هي النسب المئوية ابتداءًا بالقيمة 0% إلى القيمة 100% مع ذكر 50% كقيمة وسطية، أما الكلمات المفتاحية From وto فتُستخدم للتبديل بين مكاني الـ %0 و %100 كما نريد. كما أنه يمكن استخدام نقاط متوسطة إلى جانب النقطة الموجودة عند الـ %50. وقد تم إدراج خصائص العنصر الذي نقوم بتحريكه كقائمة داخل كل نقطة من نقاط التحريك كما فعلنا في المثال السابق حيث اعتبرنا أن left و top هي الخصائص.
</p>

<p>
	وتتم عملية التحريك animation من خلال تطبيق الانتقال transition بين النقاط الأساسية التي حددنا في الأعلى من خلال النسب المئيوة ولكن لأكثر من مرة (في هذه الحالة نطبق انتقال أول بين 0% و50% ثم آخر إلى 100%)
</p>

<p>
	سنقوم بتطبيق التحريك على الكرة الخضراء والتي يتم بناؤها في html:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_8251_9" style="">
<span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"stage"</span><span class="tag">&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">"ball"</span><span class="tag">&gt;&lt;/figure&gt;</span><span class="pln">
</span><span class="tag">&lt;/div&gt;</span></pre>

<p>
	والنّتيجة كما في الشّكل التّالي:
</p>

<p style="text-align: center;">
	<img alt="08.gif" class="ipsImage ipsImage_thumbnailed" data-fileid="28131" data-unique="ueiqygdiz" src="https://academy.hsoub.com/uploads/monthly_2018_09/08.gif.9a113b10c1103d2c704afb609dcf2e69.gif"></p>

<p>
	وسنشرح الآن بالتفصل طريقة إضافة خصائص العناصر للوصول إلى عملية التحريك السابقة.
</p>

<h3>
	خاصية الاسم Animation Name
</h3>

<p>
	الآن بعد أن حددنا الإطار الأساسي للتحريك، نحتاج إلى إسناد هذا التّحريك المعرف للعنصر، ولفعل ذلك نستخدم الخّاصية animation-name التي تقوم على تعريف القاعدة keyframe@ كقيمة لهذه الخاصية، مع العلم أن هذا التّعريف يتم على العنصر الذي نريد تطبيق الحركة عليه.
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_8251_13" style="">
<span class="pun">.</span><span class="pln">stage</span><span class="pun">:</span><span class="pln">hover </span><span class="pun">.</span><span class="pln">ball </span><span class="pun">{</span><span class="pln">
  animation</span><span class="pun">-</span><span class="pln">name</span><span class="pun">:</span><span class="pln"> slide</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	نلاحظ أننا أسندنا الإطار الرّئيسي لعملية التّحريك slide الّذي عرفنّاه في الأعلى إلى كلا الصّفّين المحددين لرسم الكرة stage و ball<br>
	ولكن تحديد قيمة animation-name فقط ليس كافٍ بل يجب تحديد خاصية animation-duration مع قيمتها لإخبار المتصفح الوقت الذي يحتاجه لإنهاء الحركة animation.
</p>

<h3>
	مدة التحريك animation duration، تابع التوقيت Timing Function والتأخير Delay
</h3>

<p>
	عندما نقوم بالتصريح عن الخاصية animation-name لعنصر ما فإن طريقة التّحريك ستكون مشابهة بشكل كبير للانتقال transition، حيث يحتاج لإكمال تعريفه إلى خصائص تحديد الفترة الزّمنية، تابع التوقيت، والتأخر الممكن أن يحصل.
</p>

<p>
	لبدء عملية التّحريك نحتاج إلى تعريف الخاصية  animation-duration والّتي تشبه خاصية الفترة الزّمنية المستخدمة في الانتقالات transition حيث نحدد هذه الفترة باستخدام الثّانية او أجزاء الثّانية.
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_8251_15" style="">
<span class="pun">.</span><span class="pln">stage</span><span class="pun">:</span><span class="pln">hover </span><span class="pun">.</span><span class="pln">ball </span><span class="pun">{</span><span class="pln">
  animation</span><span class="pun">-</span><span class="pln">name</span><span class="pun">:</span><span class="pln"> slide</span><span class="pun">;</span><span class="pln">
  animation</span><span class="pun">-</span><span class="pln">duration</span><span class="pun">:</span><span class="pln"> </span><span class="lit">2s</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	كما يمكن تحديد تابع التّوقيت animation-timing-function وقيمة التّأخير animation-delay  على التّتالي. وتشبه هذه الخصائص مثيلاتها من الخصائص المستخدمة في الانتقالات، إن قيمة هذه الخّاصيات تعمل بشكل مشابه لعملها في الانتقالات transitions.
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_8251_17" style="">
<span class="pun">.</span><span class="pln">stage</span><span class="pun">:</span><span class="pln">hover </span><span class="pun">.</span><span class="pln">ball </span><span class="pun">{</span><span class="pln">
  animation</span><span class="pun">-</span><span class="pln">name</span><span class="pun">:</span><span class="pln"> slide</span><span class="pun">;</span><span class="pln">
  animation</span><span class="pun">-</span><span class="pln">duration</span><span class="pun">:</span><span class="pln"> </span><span class="lit">2s</span><span class="pun">;</span><span class="pln">
  animation</span><span class="pun">-</span><span class="pln">timing</span><span class="pun">-</span><span class="kwd">function</span><span class="pun">:</span><span class="pln"> ease</span><span class="pun">-</span><span class="kwd">in</span><span class="pun">-</span><span class="kwd">out</span><span class="pun">;</span><span class="pln">
  animation</span><span class="pun">-</span><span class="pln">delay</span><span class="pun">:</span><span class="pln"> </span><span class="pun">.</span><span class="lit">5s</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	في المثال القادم تقوم خاصية التحريك على جعل الكرة ترتد مرة خلال الحركة نحو اليسار، وهذا التصرف يحدث فقط في حال تم تمرير المؤشر فوق stage.<br>
	أولًا نبين الكرة من خلال التعليمات:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_8251_20" style="">
<span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"stage"</span><span class="tag">&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">"ball"</span><span class="tag">&gt;&lt;/figure&gt;</span><span class="pln">
</span><span class="tag">&lt;/div&gt;</span></pre>

<p>
	أما تعليمات التحريك في CSS3 فهي:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_8251_22" style="">
<span class="lit">@keyframes</span><span class="pln"> slide </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><span class="pln">
    left</span><span class="pun">:</span><span class="pln"> </span><span class="lit">0</span><span class="pun">;</span><span class="pln">
    top</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><span class="pln">
  </span><span class="lit">50</span><span class="pun">%</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
    left</span><span class="pun">:</span><span class="pln"> </span><span class="lit">244px</span><span class="pun">;</span><span class="pln">
    top</span><span class="pun">:</span><span class="pln"> </span><span class="lit">100px</span><span class="pun">;</span><span class="pln">
  </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">
    left</span><span class="pun">:</span><span class="pln"> </span><span class="lit">488px</span><span class="pun">;</span><span class="pln">
    top</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><span class="pln">
</span><span class="pun">}</span><span class="pln">
</span><span class="pun">.</span><span class="pln">stage </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">
  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><span class="pln">ball </span><span class="pun">{</span><span class="pln">
    height</span><span class="pun">:</span><span class="pln"> </span><span class="lit">50px</span><span class="pun">;</span><span class="pln">
    position</span><span class="pun">:</span><span class="pln"> absolute</span><span class="pun">;</span><span class="pln">
    width</span><span class="pun">:</span><span class="pln"> </span><span class="lit">50px</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
</span><span class="pun">.</span><span class="pln">stage</span><span class="pun">:</span><span class="pln">hover </span><span class="pun">.</span><span class="pln">ball </span><span class="pun">{</span><span class="pln">
  animation</span><span class="pun">-</span><span class="pln">name</span><span class="pun">:</span><span class="pln"> slide</span><span class="pun">;</span><span class="pln">
  animation</span><span class="pun">-</span><span class="pln">duration</span><span class="pun">:</span><span class="pln"> </span><span class="lit">2s</span><span class="pun">;</span><span class="pln">
  animation</span><span class="pun">-</span><span class="pln">timing</span><span class="pun">-</span><span class="kwd">function</span><span class="pun">:</span><span class="pln"> ease</span><span class="pun">-</span><span class="kwd">in</span><span class="pun">-</span><span class="kwd">out</span><span class="pun">;</span><span class="pln">
  animation</span><span class="pun">-</span><span class="pln">delay</span><span class="pun">:</span><span class="pln"> </span><span class="pun">.</span><span class="lit">5s</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	ونتيجة هذه التعليمات تظهر حركة الكرة بالشكل
</p>

<p style="text-align: center;">
	<img alt="09.gif" class="ipsImage ipsImage_thumbnailed" data-fileid="28133" data-unique="h8viwuxjw" src="https://academy.hsoub.com/uploads/monthly_2018_09/09.gif.49ac4effe35bc64e54c53595bfdd06ea.gif"></p>

<h3>
	تخصيص التحريك:
</h3>

<p>
	يتيح التّحريك إمكانية تخصيص الطّريقة التي يتصرف فيها العنصر، مثلًا، عدد مرات تكرار التّحريك والجّهة التي ينتهي إليها التحريك.
</p>

<h3>
	تكرار التحريك:
</h3>

<p>
	افتراضيًا يتم تنفيذ التحريك المعرّف مرة واحدة فقط من بدايته لنهايته، ولجعل هذا التّحريك يعيد نفسه عددًا من المرات نستخدم خاصية animation-iteration-count، حيث أن القيمة المعطاة لهذه الخّاصية ممكن أن تكون عدد صحيح محدد أو infinite والتي تعني استمرار التنفيذ عدد لانهائي من المرات.
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_8251_24" style="">
<span class="pun">.</span><span class="pln">stage</span><span class="pun">:</span><span class="pln">hover </span><span class="pun">.</span><span class="pln">ball </span><span class="pun">{</span><span class="pln">
  animation</span><span class="pun">-</span><span class="pln">name</span><span class="pun">:</span><span class="pln"> slide</span><span class="pun">;</span><span class="pln">
  animation</span><span class="pun">-</span><span class="pln">duration</span><span class="pun">:</span><span class="pln"> </span><span class="lit">2s</span><span class="pun">;</span><span class="pln">
  animation</span><span class="pun">-</span><span class="pln">timing</span><span class="pun">-</span><span class="kwd">function</span><span class="pun">:</span><span class="pln"> ease</span><span class="pun">-</span><span class="kwd">in</span><span class="pun">-</span><span class="kwd">out</span><span class="pun">;</span><span class="pln">
  animation</span><span class="pun">-</span><span class="pln">delay</span><span class="pun">:</span><span class="pln"> </span><span class="pun">.</span><span class="lit">5s</span><span class="pun">;</span><span class="pln">
  animation</span><span class="pun">-</span><span class="pln">iteration</span><span class="pun">-</span><span class="pln">count</span><span class="pun">:</span><span class="pln"> infinite</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	نلاحظ أننا وضعنا قيمة التّكرار لانهاية وبالتّالي سيتم التّكرار بشكل دائم.
</p>

<p style="text-align: center;">
	<img alt="10.gif" class="ipsImage ipsImage_thumbnailed" data-fileid="28134" data-unique="0i7tef4vg" src="https://academy.hsoub.com/uploads/monthly_2018_09/10.gif.30a61eb4573d9b1241bb7500666231a5.gif"></p>

<h3>
	اتجاه التحريك:
</h3>

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

<ul>
<li>
		Normal: والتي تقوم بتشغيل التحريك كما هو محدد من البداية للنهاية
	</li>
	<li>
		Reverse: وتقوم بتشغيل التحريك عكس المعرف من خلال القاعدة @keyframes أي ستكون البداية من 100% ثم تعمل بالعكس وصولًا إلى نقطة التعريف 0%
	</li>
	<li>
		Alternate: وتقوم بتشغيل التحريك نحو الأمام أي من النقطة 0% إلى النقطة 100% ثم العودة إلى الخلف من النقطة 100% إلى 0% ويمكن تحديد عدد مرات تكرار هذه الطريقة من خلال الخاصية animation-iteration-count التي يمكن أن تكون عدد صحيح من المرّات ويبدأ العد من الرقم 1.<br>
		ولكن هذه الخاصية ستعمل بالعكس عند تشغيل أي تابع في خاصية animation-timing-function أي في حال استخدمنا ease-in فسيكون اتجاه الحركة من 0% إلى 100% أمّا إذا استخدمنا ease-out فعندها سيكون التحريك من 100% إلى 0%.
	</li>
	<li>
		Alternate-reverse: تجمع بين alternate و reverse حيث يكون اتجاه الحركة عند تنفيذ التحريك هي بالعكس أي من 100% إلى 0% ثم العودة مرة أخرى 100%.
		<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_8251_26" style="">
<span class="pun">.</span><span class="pln">stage</span><span class="pun">:</span><span class="pln">hover </span><span class="pun">.</span><span class="pln">ball </span><span class="pun">{</span><span class="pln">
  animation</span><span class="pun">-</span><span class="pln">name</span><span class="pun">:</span><span class="pln"> slide</span><span class="pun">;</span><span class="pln">
  animation</span><span class="pun">-</span><span class="pln">duration</span><span class="pun">:</span><span class="pln"> </span><span class="lit">2s</span><span class="pun">;</span><span class="pln">
  animation</span><span class="pun">-</span><span class="pln">timing</span><span class="pun">-</span><span class="kwd">function</span><span class="pun">:</span><span class="pln"> ease</span><span class="pun">-</span><span class="kwd">in</span><span class="pun">-</span><span class="kwd">out</span><span class="pun">;</span><span class="pln">
  animation</span><span class="pun">-</span><span class="pln">delay</span><span class="pun">:</span><span class="pln"> </span><span class="pun">.</span><span class="lit">5s</span><span class="pun">;</span><span class="pln">
  animation</span><span class="pun">-</span><span class="pln">iteration</span><span class="pun">-</span><span class="pln">count</span><span class="pun">:</span><span class="pln"> infinite</span><span class="pun">;</span><span class="pln">
  animation</span><span class="pun">-</span><span class="pln">direction</span><span class="pun">:</span><span class="pln"> alternate</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></pre>

		<p style="text-align: center;">
			بناءً على التعليمات السابقة سيتم التحريك من البداية نحو النهاية بحسب قيمة خاصية الاتجاه alternate وسيتم التكرار عدد لانهائي من المرات، أما شكل تابع الحركة فهو ease-in-out<br><img alt="11.gif" class="ipsImage ipsImage_thumbnailed" data-fileid="28135" data-unique="2meo4ldiy" src="https://academy.hsoub.com/uploads/monthly_2018_09/11.gif.febea30b5744cfc76a482f8d614ce1f9.gif"></p>
	</li>
</ul>
<h3>
	حالة تحريك العنصر:
</h3>

<p>
	إن خاصية animation-play-state تتيح تشغيل وإيقاف التّحريك باستخدام القيم running وpaused بالتتالي، حيث أن طريقة عمل هذه الخاصية أنه عندما نشغل عنصر حركة وهو بحالة ايقاف paused، فإنه سيستمر من الحالة الحالية بدلًا من أن يبدأ من البداية من جديد.<br>
	في هذا المثال، خاصية animation-play-state ستضبط عند paused، عند تفعيل حالة الحركة لدى الدائرة بالضغط عليها سنلاحظ كيف يتوقف عنصر التحريك حتى نقوم بتحرير المؤشر.
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_8251_28" style="">
<span class="pun">.</span><span class="pln">stage</span><span class="pun">:</span><span class="pln">hover </span><span class="pun">.</span><span class="pln">ball </span><span class="pun">{</span><span class="pln">
  animation</span><span class="pun">-</span><span class="pln">name</span><span class="pun">:</span><span class="pln"> slide</span><span class="pun">;</span><span class="pln">
  animation</span><span class="pun">-</span><span class="pln">duration</span><span class="pun">:</span><span class="pln"> </span><span class="lit">2s</span><span class="pun">;</span><span class="pln">
  animation</span><span class="pun">-</span><span class="pln">timing</span><span class="pun">-</span><span class="kwd">function</span><span class="pun">:</span><span class="pln"> ease</span><span class="pun">-</span><span class="kwd">in</span><span class="pun">-</span><span class="kwd">out</span><span class="pun">;</span><span class="pln">
  animation</span><span class="pun">-</span><span class="pln">delay</span><span class="pun">:</span><span class="pln"> </span><span class="pun">.</span><span class="lit">5s</span><span class="pun">;</span><span class="pln">
  animation</span><span class="pun">-</span><span class="pln">iteration</span><span class="pun">-</span><span class="pln">count</span><span class="pun">:</span><span class="pln"> infinite</span><span class="pun">;</span><span class="pln">
  animation</span><span class="pun">-</span><span class="pln">direction</span><span class="pun">:</span><span class="pln"> alternate</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
</span><span class="pun">.</span><span class="pln">stage</span><span class="pun">:</span><span class="pln">active </span><span class="pun">.</span><span class="pln">ball </span><span class="pun">{</span><span class="pln">
  animation</span><span class="pun">-</span><span class="pln">play</span><span class="pun">-</span><span class="pln">state</span><span class="pun">:</span><span class="pln"> paused</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	وتظهر النتيجة كما في الشكل:
</p>

<p style="text-align: center;">
	<img alt="12.gif" class="ipsImage ipsImage_thumbnailed" data-fileid="28136" data-unique="si3ple9ry" src="https://academy.hsoub.com/uploads/monthly_2018_09/12.gif.c82207b4c0274fdb039dd9607cbcbf32.gif"></p>

<h3>
	خاصية Fill Mode:
</h3>

<p>
	تحدد خاصية animation-fill-mode هيئة العنصر قبل وبعد تشغيل التحريك.إن هذه الخاصية تقبل القيم:
</p>

<ul>
<li>
		none أي لا يتم تطبيق أي تغيير على العنصر قبل أو بعد تشغيل التحريك.
	</li>
	<li>
		forwards ستحتفظ بالهيئة المحددة للعنصر بآخر إطار keyframe كان داخله العنصر وبالتالي سنلاحظ أن هذه الحالة تتأثر بقيم خصائص أخرى، هي خاصية اتجاه الحركة animation-direction وعدد مرات التكرار animation-iteration-count.
	</li>
	<li>
		backwards ستطبق الهيئات عند أول إطار رئيسي مباشرة عند تعريف هذه الخاصية قبل بدء تنفيذ التحريك. وهذا يتضمن تطبيق هذا الشكل في أي وقت قد يكون تم ضبطه من خلال خاصية التأخير. مع العلم أن هذه القيمة تتأثر بخاصية الاتجاه animation-direction.
	</li>
	<li>
		both تجمع بين القيمتين forwards و backwards معًا.
		<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_8251_30" style="">
<span class="pun">.</span><span class="pln">stage</span><span class="pun">:</span><span class="pln">hover </span><span class="pun">.</span><span class="pln">ball </span><span class="pun">{</span><span class="pln">
  animation</span><span class="pun">-</span><span class="pln">name</span><span class="pun">:</span><span class="pln"> slide</span><span class="pun">;</span><span class="pln">
  animation</span><span class="pun">-</span><span class="pln">duration</span><span class="pun">:</span><span class="pln"> </span><span class="lit">2s</span><span class="pun">;</span><span class="pln">
  animation</span><span class="pun">-</span><span class="pln">timing</span><span class="pun">-</span><span class="kwd">function</span><span class="pun">:</span><span class="pln"> ease</span><span class="pun">-</span><span class="kwd">in</span><span class="pun">-</span><span class="kwd">out</span><span class="pun">;</span><span class="pln">
  animation</span><span class="pun">-</span><span class="pln">delay</span><span class="pun">:</span><span class="pln"> </span><span class="pun">.</span><span class="lit">5s</span><span class="pun">;</span><span class="pln">
  animation</span><span class="pun">-</span><span class="pln">fill</span><span class="pun">-</span><span class="pln">mode</span><span class="pun">:</span><span class="pln"> forwards</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
</span><span class="pun">.</span><span class="pln">stage</span><span class="pun">:</span><span class="pln">active </span><span class="pun">.</span><span class="pln">ball </span><span class="pun">{</span><span class="pln">
  animation</span><span class="pun">-</span><span class="pln">play</span><span class="pun">-</span><span class="pln">state</span><span class="pun">:</span><span class="pln"> paused</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></pre>

		<p>
			وسيظهر شكل حركة الدّائرة هكذا:
		</p>
	</li>
</ul>
<p style="text-align: center;">
	<img alt="13.gif" class="ipsImage ipsImage_thumbnailed" data-fileid="28137" data-unique="vmq9k7zg1" src="https://academy.hsoub.com/uploads/monthly_2018_09/13.gif.5cb8a4d5fe7ba2a80664430c0f6e70b0.gif"></p>

<h3>
	اختزال تعليمات التحريك:
</h3>

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

<ol>
<li>
		animation-name
	</li>
	<li>
		animation-duration
	</li>
	<li>
		animation-timing-function
	</li>
	<li>
		animation-delay
	</li>
	<li>
		animation-iteration-count
	</li>
	<li>
		animation-direction
	</li>
	<li>
		animation-fill-mode
	</li>
	<li>
		animation-play-state
	</li>
</ol>
<p>
	حيث يمكن اختزال التعليمات في الأمثلة السابقة إلى الشكل:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_8251_32" style="">
<span class="pun">.</span><span class="pln">stage</span><span class="pun">:</span><span class="pln">hover </span><span class="pun">.</span><span class="pln">ball </span><span class="pun">{</span><span class="pln">
  animation</span><span class="pun">:</span><span class="pln"> slide </span><span class="lit">2s</span><span class="pln"> ease</span><span class="pun">-</span><span class="kwd">in</span><span class="pun">-</span><span class="kwd">out</span><span class="pln"> </span><span class="pun">.</span><span class="lit">5s</span><span class="pln"> infinite alternate</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
</span><span class="pun">.</span><span class="pln">stage</span><span class="pun">:</span><span class="pln">active </span><span class="pun">.</span><span class="pln">ball </span><span class="pun">{</span><span class="pln">
  animation</span><span class="pun">-</span><span class="pln">play</span><span class="pun">-</span><span class="pln">state</span><span class="pun">:</span><span class="pln"> paused</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	وكما نلاحظ أنه لايتم الفصل بين قيم الخصائص بفاصلة أبدًا.
</p>

<p>
	 
</p>

<p>
	ترجمة-بتصرف- لمقال: <a href="https://learn.shayhowe.com/advanced-html-css/transitions-animations/" rel="external nofollow">Transition &amp; Animation</a>
</p>
]]></description><guid isPermaLink="false">642</guid><pubDate>Thu, 20 Sep 2018 18:42:00 +0000</pubDate></item><item><title>&#x62A;&#x62D;&#x631;&#x64A;&#x643; &#x648;&#x627;&#x646;&#x62A;&#x642;&#x627;&#x644; &#x627;&#x644;&#x639;&#x646;&#x627;&#x635;&#x631; &#x641;&#x64A; CSS3 (&#x627;&#x644;&#x627;&#x646;&#x62A;&#x642;&#x627;&#x644;)</title><link>https://academy.hsoub.com/programming/css/%D8%AA%D8%AD%D8%B1%D9%8A%D9%83-%D9%88%D8%A7%D9%86%D8%AA%D9%82%D8%A7%D9%84-%D8%A7%D9%84%D8%B9%D9%86%D8%A7%D8%B5%D8%B1-%D9%81%D9%8A-css3-%D8%A7%D9%84%D8%A7%D9%86%D8%AA%D9%82%D8%A7%D9%84-r640/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2019_06/5d0a612c31bc8_().jpg.74f5a18738b5c8e4c9b937f13ec6a643.jpg" /></p>

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

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

<p>
	طريقة عمل انتقال العناصر transitions هي من خلال تغيير طريقة ظهور أو هيئة العنصر نفسه عند وقوع حدث معين مثل النقر على العنصر أو مرور المؤشر عليه مثلًا أي هو تغير حالة العنصر إلى حالة أخرى، أما طريقة التحريك Animation فهي تغيير مكان العنصر أو هيئته لأكثر من مرة ويتم من خلال اختيار مجموعة من النقاط الممكنة ضمن الإطار الرئيسي للصفحة ويتم تغيير مظهر أو حالة العنصر.
</p>

<h3>
	الانتقالات Transition:
</h3>

<p>
	كما ذكرنا سابقًا يتم تنفيذ عملية الانتقال للعنصر من خلال تغيير حالة العنصر، حيث يجب تعريف كل حالة والتصميم style الذي سيُطبق على العنصر في هذه الحالة، وأسهل طريقة لتحديد الحالة التي يقع فيها العنصر الآن والتصميم الذي يجب أن يأخذه من خلال استخدام صفوف اللاحقة pseudo-classes وهي :target - :active - :focus - :hover ويوجد أربع خصائص مرتبطة بالانتقال transition بشكل عام وهي transition-property، transition-duration، transition-timing-function و transition-delay مع ملاحظة أنه يمكن استخدام البعض منها فقط لبناء عملية الانتقال.
</p>

<p>
	سنستعرض في المثال التالي طريقة الانتقال الّتي ستتم لمدة ثانية واحدة من خلال تغيير لون خلفية المربع المرسوم عند تمرير المؤشر فوقه:
</p>

<p>
	نبني المربع ككتلة div من خلال تعليمة html
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_2212_6" style="">
<span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"box"</span><span class="tag">&gt;</span><span class="pln">Box</span><span class="tag">&lt;/div&gt;</span></pre>

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

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_2212_8" style="">
<span class="pun">.</span><span class="pln">box </span><span class="pun">{</span><span class="pln">
  background</span><span class="pun">:</span><span class="pln"> </span><span class="com">#2db34a;</span><span class="pln">
  transition</span><span class="pun">-</span><span class="kwd">property</span><span class="pun">:</span><span class="pln"> background</span><span class="pun">;</span><span class="pln">
  transition</span><span class="pun">-</span><span class="pln">duration</span><span class="pun">:</span><span class="pln"> </span><span class="lit">1s</span><span class="pun">;</span><span class="pln">
  transition</span><span class="pun">-</span><span class="pln">timing</span><span class="pun">-</span><span class="kwd">function</span><span class="pun">:</span><span class="pln"> linear</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
</span><span class="pun">.</span><span class="pln">box</span><span class="pun">:</span><span class="pln">hover </span><span class="pun">{</span><span class="pln">
  background</span><span class="pun">:</span><span class="pln"> </span><span class="com">#ff7b29;</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	حيث يظهر المربع باللون الأخضر وعند تمرير المؤشر فوقه يتغير لون خلفية المربع وتم تحديد ذلك من خلال الخاصية transition-property لمدة ثانية واحدة فقط وتم تخصيص الزمن من خلال الخاصية transition-duration
</p>

<p>
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="28071" href="https://academy.hsoub.com/uploads/monthly_2018_09/01.gif.bc88e78dd5768ae538973afa5ab37f01.gif" rel=""><img alt="01.gif" class="ipsImage ipsImage_thumbnailed" data-fileid="28071" src="https://academy.hsoub.com/uploads/monthly_2018_09/01.gif.bc88e78dd5768ae538973afa5ab37f01.gif"></a>
</p>

<p>
	ويمكن معاينة المثال بشكل مباشر من <a href="https://codepen.io/shayhowe/pen/aCwcK" rel="external nofollow">الرابط</a>.
</p>

<p>
	ومن الأفضل كتابة التعليمات من خلال إضافة  vendor prefixes والتي تعمل على تأمين دعم كافة المتصفحات
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_9512_8" style="">
<span class="pun">.</span><span class="pln">box </span><span class="pun">{</span><span class="pln">
    background</span><span class="pun">:</span><span class="pln"> </span><span class="com">#2db34a;</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="kwd">property</span><span class="pun">:</span><span class="pln"> background</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="kwd">property</span><span class="pun">:</span><span class="pln"> background</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="kwd">property</span><span class="pun">:</span><span class="pln"> background</span><span class="pun">;</span><span class="pln">
            transition</span><span class="pun">-</span><span class="kwd">property</span><span class="pun">:</span><span class="pln"> background</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">duration</span><span class="pun">:</span><span class="pln"> </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">duration</span><span class="pun">:</span><span class="pln"> </span><span class="lit">1s</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">duration</span><span class="pun">:</span><span class="pln"> </span><span class="lit">1s</span><span class="pun">;</span><span class="pln">
            transition</span><span class="pun">-</span><span class="pln">duration</span><span class="pun">:</span><span class="pln"> </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">timing</span><span class="pun">-</span><span class="kwd">function</span><span class="pun">:</span><span class="pln"> linear</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">timing</span><span class="pun">-</span><span class="kwd">function</span><span class="pun">:</span><span class="pln"> linear</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">timing</span><span class="pun">-</span><span class="kwd">function</span><span class="pun">:</span><span class="pln"> linear</span><span class="pun">;</span><span class="pln">
            transition</span><span class="pun">-</span><span class="pln">timing</span><span class="pun">-</span><span class="kwd">function</span><span class="pun">:</span><span class="pln"> linear</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
</span><span class="pun">.</span><span class="pln">box</span><span class="pun">:</span><span class="pln">hover </span><span class="pun">{</span><span class="pln">
  background</span><span class="pun">:</span><span class="pln"> </span><span class="com">#ff7b29;</span><span class="pln">
</span><span class="pun">}</span></pre>

<h3>
	خاصية transition-property
</h3>

<p>
	تحدد خاصية transition-property خصائص العنصر التي سوف يتم تعديلها تزامنًا مع تنفيذ خصائص الانتقال الأخرى، ولايتم تغييير قيمة أي خاصية أخرى للعنصر غير مذكورة ضمن هذه الخاصية.
</p>

<p>
	في المثال السابق تم تغير قيمة background التابعة للعنصر لأنها ذكرت كقيمة للـ transition-property خلال زمن قدرة ثانية واحدة، في حين أن الخصائص الأخرى للعنصر ستبقى محافظة على قيمتها ولن تتأثر بالقيم المعطاة للـ transition-duration وtransition-timing-functionفي حال كنا نريد تغيير قيمة أكثر من خاصية عند تطبيق الانتقال يمكن إدراجها في الخاصية نفسها transition-property مع وضع فواصل فيما بينها.
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_5264_6" style="">
<span class="pun">.</span><span class="pln">box </span><span class="pun">{</span><span class="pln">
    background</span><span class="pun">:</span><span class="pln"> </span><span class="com">#2db34a;</span><span class="pln">
    border</span><span class="pun">-</span><span class="pln">radius</span><span class="pun">:</span><span class="pln"> </span><span class="lit">6px</span><span class="pln">
    transition</span><span class="pun">-</span><span class="kwd">property</span><span class="pun">:</span><span class="pln"> background</span><span class="pun">,</span><span class="pln"> border</span><span class="pun">-</span><span class="pln">radius</span><span class="pun">;</span><span class="pln">
    transition</span><span class="pun">-</span><span class="pln">duration</span><span class="pun">:</span><span class="pln"> </span><span class="lit">1s</span><span class="pun">;</span><span class="pln">
    transition</span><span class="pun">-</span><span class="pln">timing</span><span class="pun">-</span><span class="kwd">function</span><span class="pun">:</span><span class="pln"> linear</span><span class="pun">;</span><span class="pln">
     </span><span class="pun">}</span><span class="pln">
  </span><span class="pun">.</span><span class="pln">box</span><span class="pun">:</span><span class="pln">hover </span><span class="pun">{</span><span class="pln">
    background</span><span class="pun">:</span><span class="pln"> </span><span class="com">#ff7b29;</span><span class="pln">
    border</span><span class="pun">-</span><span class="pln">radius</span><span class="pun">:</span><span class="pln"> </span><span class="lit">50</span><span class="pun">%;</span><span class="pln">
     </span><span class="pun">}</span></pre>

<p>
	نلاحظ أن الخصائص التي نريد تغييرها عند الانتقال هيَّ background و border-radius وتم تحديد الانتقال بـ .box:hover حيث يتم تنفيذها كما في الّشكل:<br><img alt="02.gif" class="ipsImage ipsImage_thumbnailed" data-fileid="28072" data-unique="w6w0quo6x" src="https://academy.hsoub.com/uploads/monthly_2018_09/02.gif.3a0631eed86c735cd8464fa5db9b9d0c.gif"></p>

<h3>
	خصائص العنصر القابلة للانتقال
</h3>

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

<p>
	أهم الخصائص التي يمكن تطبيق الانتقال عليها:
</p>

<table style="width:100%;"><tbody><tr>
<td>
				<ul>
<li>
						<code>background-color</code>
					</li>
					<li>
						<code>background-position</code>
					</li>
					<li>
						<code>border-color</code>
					</li>
					<li>
						<code>border-width</code>
					</li>
					<li>
						<code>border-spacing</code>
					</li>
					<li>
						<code>bottom</code>
					</li>
					<li>
						<code>clip</code>
					</li>
					<li>
						<code>color</code>
					</li>
					<li>
						<code>crop</code>
					</li>
					<li>
						<code>font-size</code>
					</li>
					<li>
						<code>height</code>
					</li>
					<li>
						<code>left</code>
					</li>
					<li>
						<code>letter-spacing</code>
					</li>
					<li>
						<code>line-height</code>
					</li>
					<li>
						<code>margin</code>
					</li>
					<li>
						<code>max-height</code>
					</li>
					<li>
						<code>max-width</code>
					</li>
				</ul>
</td>
			<td>
				<ul>
<li>
						<code>min-height</code>
					</li>
					<li>
						<code>min-width</code>
					</li>
					<li>
						<code>opacity</code>
					</li>
					<li>
						<code>outline-color</code>
					</li>
					<li>
						<code>outline-offset</code>
					</li>
					<li>
						<code>outline-width</code>
					</li>
					<li>
						<code>padding</code>
					</li>
					<li>
						<code>right</code>
					</li>
					<li>
						<code>text-indent</code>
					</li>
					<li>
						<code>text-shadow</code>
					</li>
					<li>
						<code>top</code>
					</li>
					<li>
						<code>vertical-align</code>
					</li>
					<li>
						<code>visibility</code>
					</li>
					<li>
						<code>width</code>
					</li>
					<li>
						<code>word-spacing</code>
					</li>
					<li>
						<code>z-index</code>
					</li>
				</ul>
</td>
		</tr></tbody></table>
<p>
	 
</p>

<h3>
	خاصية transition-duration
</h3>

<p>
	يتم تعيين المدة الزمنية التي تتم فيها عملية الانتقال باستخدام خاصية transition-duration وتحديد قيمتها من خلال استخدام وحدات الزمن العامة بما في ذلك الثانية (s) والميلي ثانية (ms) كما يمكن أن تكون القيمة عبارة عن كسور مثل أجزاء من الثانية (0.2s).
</p>

<p>
	عندما يُطبق الانتقال على أكثر من خاصية للعنصر يمكن أن يتم تطبيق قيمة فترة زمنية محددة لكل خاصية، أي كما تحتوي خاصية transition-property على أكثر من قيمة يمكن أن تحتوي خاصية transition-duration أيضًا على أكثر من قيمة، وكل خاصية تأخذ المدة الزمنية حسب ترتيب قيم الخصائص (في المثال الذي سنستعرضه ستكون الفترة الزمنية 0.2s تابعة لخاصية background، أما خاصية border-radius فستكون لمدة ثانية واحدة) ويمكن أيضًا أن نُعطي مدة زمنية واحدة لجميع الخصائص المراد تغييرها.
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_3446_6" style="">
<span class="pun">.</span><span class="pln">box </span><span class="pun">{</span><span class="pln">
  background</span><span class="pun">:</span><span class="pln"> </span><span class="com">#2db34a;</span><span class="pln">
  border</span><span class="pun">-</span><span class="pln">radius</span><span class="pun">:</span><span class="pln"> </span><span class="lit">6px</span><span class="pun">;</span><span class="pln">
  transition</span><span class="pun">-</span><span class="kwd">property</span><span class="pun">:</span><span class="pln"> background</span><span class="pun">,</span><span class="pln"> border</span><span class="pun">-</span><span class="pln">radius</span><span class="pun">;</span><span class="pln">
  transition</span><span class="pun">-</span><span class="pln">duration</span><span class="pun">:</span><span class="pln"> </span><span class="pun">.</span><span class="lit">2s</span><span class="pun">,</span><span class="pln"> </span><span class="lit">1s</span><span class="pun">;</span><span class="pln">
  transition</span><span class="pun">-</span><span class="pln">timing</span><span class="pun">-</span><span class="kwd">function</span><span class="pun">:</span><span class="pln"> linear</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
</span><span class="pun">.</span><span class="pln">box</span><span class="pun">:</span><span class="pln">hover </span><span class="pun">{</span><span class="pln">
  background</span><span class="pun">:</span><span class="pln"> </span><span class="com">#ff7b29;</span><span class="pln">
  border</span><span class="pun">-</span><span class="pln">radius</span><span class="pun">:</span><span class="pln"> </span><span class="lit">50</span><span class="pun">%;</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	والنتيجة تكون واضحة كما في الصورة:<br><img alt="03.gif" class="ipsImage ipsImage_thumbnailed" data-fileid="28073" data-unique="2l9hvreq0" src="https://academy.hsoub.com/uploads/monthly_2018_09/03.gif.364ad426dd3001533c25ac6bf0db07b1.gif"></p>

<h3>
	خاصية سرعة الانتقال Transition Timing
</h3>

<p>
	تُستخدم خاصية transition-timing-function لضبط سرعة الانتقال. حيث يمكننا تحديد المدة الزمنية من خلال الخاصية transition-duration. ويمكن إعطاء خاصية transition-timing-function عدة قيم هي:
</p>

<ul>
<li>
		<strong>liner</strong>: عند إعطاء الخاصية المذكورة هذه القيمة فإن الانتقال بسرعة ثابتة خلال المدة الزمنية المحددة.
	</li>
	<li>
		<strong>ease-in</strong>: تعني هذه القيمة أن الانتقال يبدأ ببطئ ويستمر بالتسارع طول فترة الانتقال.
	</li>
	<li>
		<strong>ease-out</strong>: تعني أن الانتقال يبدأ بسرعة ويستمر بالتباطؤ طوال فترة الانتقال.
	</li>
	<li>
		<strong>ease-in-out</strong>: الانتقال يبدأ ببطئ ويستمر بالتسارع حتى يصل إلى الوسط عندها يبدأ بالتباطؤ مرة أخرى حتى انتهاء المدة المحددة للانتقال.
	</li>
</ul>
<p>
	إن تابع الانتقال يُحدّد كتابع رياضي ل<a href="http://www.roblaplaca.com/examples/bezierBuilder/" rel="external nofollow">منحنى مكعب بيزيير</a>، هذه التوابع الزمنية هي تابعة لمنحنى بيزيير ويمكن رسمها من خلال القيم (x1, y1, x2, y2) بالإضافة إلى قيمتَي نقطة البداية ونقطة النّهاية، أو من خلال الخطوات المحددة بشكل مميز، من خلال عدد الخطوات واتجاه الحركة.
</p>

<p>
	عندما يمتلك الانتقال عدة خصائص فإنه يتم تحديد عدة توابع لطريقة الانتقال، ففي مثالنا خاصية background كان تابعها هو linear أما خاصية border-radius فإن تابع الانتقال الخاص بها هو ease-in
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_3446_9" style="">
<span class="pun">.</span><span class="pln">box </span><span class="pun">{</span><span class="pln">
  background</span><span class="pun">:</span><span class="pln"> </span><span class="com">#2db34a;</span><span class="pln">
  border</span><span class="pun">-</span><span class="pln">radius</span><span class="pun">:</span><span class="pln"> </span><span class="lit">6px</span><span class="pun">;</span><span class="pln">
  transition</span><span class="pun">-</span><span class="kwd">property</span><span class="pun">:</span><span class="pln"> background</span><span class="pun">,</span><span class="pln"> border</span><span class="pun">-</span><span class="pln">radius</span><span class="pun">;</span><span class="pln">
  transition</span><span class="pun">-</span><span class="pln">duration</span><span class="pun">:</span><span class="pln"> </span><span class="pun">.</span><span class="lit">2s</span><span class="pun">,</span><span class="pln"> </span><span class="lit">1s</span><span class="pun">;</span><span class="pln">
  transition</span><span class="pun">-</span><span class="pln">timing</span><span class="pun">-</span><span class="kwd">function</span><span class="pun">:</span><span class="pln"> linear</span><span class="pun">,</span><span class="pln"> ease</span><span class="pun">-</span><span class="kwd">in</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
</span><span class="pun">.</span><span class="pln">box</span><span class="pun">:</span><span class="pln">hover </span><span class="pun">{</span><span class="pln">
  background</span><span class="pun">:</span><span class="pln"> </span><span class="com">#ff7b29;</span><span class="pln">
  border</span><span class="pun">-</span><span class="pln">radius</span><span class="pun">:</span><span class="pln"> </span><span class="lit">50</span><span class="pun">%;</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	كما هو واضح في الصورة، أو يمكن رؤية المعاينة المباشرة <a href="https://codepen.io/shayhowe/pen/qzGpr" rel="external nofollow">من هنا</a>.
</p>

<p>
	<img alt="04.gif" class="ipsImage ipsImage_thumbnailed" data-fileid="28074" data-unique="67gv2kc4g" src="https://academy.hsoub.com/uploads/monthly_2018_09/04.gif.b833c4ea698a3d15bcc52ee9643ed980.gif"></p>

<h3>
	التأخير في الانتقال Transition Delay
</h3>

<p>
	يمكن أيضًا تعريف خاصية transition-delay بأنها تتحكم بتأخير تحول العنصر، فمن خلالها يتم تحديد الزمن الذي سيتم تأخير تحول العنصر بمقداره، ويحدد بالثواني أو الملي.
</p>

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

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_4176_7" style="">
<span class="pun">.</span><span class="pln">box </span><span class="pun">{</span><span class="pln">
  background</span><span class="pun">:</span><span class="pln"> </span><span class="com">#2db34a;</span><span class="pln">
  border</span><span class="pun">-</span><span class="pln">radius</span><span class="pun">:</span><span class="pln"> </span><span class="lit">6px</span><span class="pln">
  transition</span><span class="pun">-</span><span class="kwd">property</span><span class="pun">:</span><span class="pln"> background</span><span class="pun">,</span><span class="pln"> border</span><span class="pun">-</span><span class="pln">radius</span><span class="pun">;</span><span class="pln">
  transition</span><span class="pun">-</span><span class="pln">duration</span><span class="pun">:</span><span class="pln"> </span><span class="pun">.</span><span class="lit">2s</span><span class="pun">,</span><span class="pln"> </span><span class="lit">1s</span><span class="pun">;</span><span class="pln">
  transition</span><span class="pun">-</span><span class="pln">timing</span><span class="pun">-</span><span class="kwd">function</span><span class="pun">:</span><span class="pln"> linear</span><span class="pun">,</span><span class="pln"> ease</span><span class="pun">-</span><span class="kwd">in</span><span class="pun">;</span><span class="pln">
  transition</span><span class="pun">-</span><span class="pln">delay</span><span class="pun">:</span><span class="pln"> </span><span class="lit">0s</span><span class="pun">,</span><span class="pln"> </span><span class="lit">1s</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
</span><span class="pun">.</span><span class="pln">box</span><span class="pun">:</span><span class="pln">hover </span><span class="pun">{</span><span class="pln">
  background</span><span class="pun">:</span><span class="pln"> </span><span class="com">#ff7b29;</span><span class="pln">
  border</span><span class="pun">-</span><span class="pln">radius</span><span class="pun">:</span><span class="pln"> </span><span class="lit">50</span><span class="pun">%;</span><span class="pln">
</span><span class="pun">}</span></pre>

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

<p>
	<img alt="05.gif" class="ipsImage ipsImage_thumbnailed" data-fileid="28075" data-unique="hkvp0680m" src="https://academy.hsoub.com/uploads/monthly_2018_09/05.gif.241ae0fce973b3babe142d979092f4c4.gif"></p>

<h3>
	اختزال تعليمات الانتقال
</h3>

<p>
	من الممكن أن يصبح ملف التعليمات كبيرًا جدًا في حال أضفنا تعليمات الانتقال بشكل فردي، وسيكون الوضع أسوأ لو أضفنا البادئات الخاصة بدعم المتصفحات vendor prefixes.
</p>

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

<p>
	ويتم ذلك من خلال استخدام الخاصية transition فقط ونكتب فيها قيم الخصائص بالتّرتيب التّالي:
</p>

<ol>
<li>
		transition-property
	</li>
	<li>
		transition-duration
	</li>
	<li>
		transition-timing-function
	</li>
	<li>
		transition-delay
	</li>
</ol>
<p>
	ولا يتم وضع فاصلة بين هذه القيم إلا إذا كنت تريد تعريف أكثر من انتقال.
</p>

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

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_4176_9" style="">
<span class="pun">.</span><span class="pln">box </span><span class="pun">{</span><span class="pln">
  background</span><span class="pun">:</span><span class="pln"> </span><span class="com">#2db34a;</span><span class="pln">
  border</span><span class="pun">-</span><span class="pln">radius</span><span class="pun">:</span><span class="pln"> </span><span class="lit">6px</span><span class="pun">;</span><span class="pln">
  transition</span><span class="pun">:</span><span class="pln"> background </span><span class="pun">.</span><span class="lit">2s</span><span class="pln"> linear</span><span class="pun">,</span><span class="pln"> border</span><span class="pun">-</span><span class="pln">radius </span><span class="lit">1s</span><span class="pln"> ease</span><span class="pun">-</span><span class="kwd">in</span><span class="pln"> </span><span class="lit">1s</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
</span><span class="pun">.</span><span class="pln">box</span><span class="pun">:</span><span class="pln">hover </span><span class="pun">{</span><span class="pln">
  color</span><span class="pun">:</span><span class="pln"> </span><span class="com">#ff7b29;</span><span class="pln">
  border</span><span class="pun">-</span><span class="pln">radius</span><span class="pun">:</span><span class="pln"> </span><span class="lit">50</span><span class="pun">%;</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	 
</p>

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

<p>
	أولًا نبني الزر من خلال html
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_9376_6" style="">
<span class="tag">&lt;button&gt;</span><span class="pln">Awesome Button</span><span class="tag">&lt;/button&gt;</span></pre>

<p>
	ومن ثم نضيف تعليمات الانتقال على الزر من خلال CSS
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_9376_8" style="">
<span class="pln">button </span><span class="pun">{</span><span class="pln">
  border</span><span class="pun">:</span><span class="pln"> </span><span class="lit">0</span><span class="pun">;</span><span class="pln">
  background</span><span class="pun">:</span><span class="pln"> </span><span class="com">#0087cc;</span><span class="pln">
  border</span><span class="pun">-</span><span class="pln">radius</span><span class="pun">:</span><span class="pln"> </span><span class="lit">4px</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">0</span><span class="pln"> </span><span class="lit">5px</span><span class="pln"> </span><span class="lit">0</span><span class="pln"> </span><span class="com">#006599;</span><span class="pln">
  color</span><span class="pun">:</span><span class="pln"> </span><span class="com">#fff;</span><span class="pln">
  cursor</span><span class="pun">:</span><span class="pln"> pointer</span><span class="pun">;</span><span class="pln">
  font</span><span class="pun">:</span><span class="pln"> inherit</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="pun">;</span><span class="pln">
  outline</span><span class="pun">:</span><span class="pln"> </span><span class="lit">0</span><span class="pun">;</span><span class="pln">
  padding</span><span class="pun">:</span><span class="pln"> </span><span class="lit">12px</span><span class="pln"> </span><span class="lit">20px</span><span class="pun">;</span><span class="pln">
  transition</span><span class="pun">:</span><span class="pln"> all </span><span class="pun">.</span><span class="lit">1s</span><span class="pln"> linear</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
button</span><span class="pun">:</span><span class="pln">active </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">0</span><span class="pln"> </span><span class="lit">2px</span><span class="pln"> </span><span class="lit">0</span><span class="pln"> </span><span class="com">#006599;</span><span class="pln">
  transform</span><span class="pun">:</span><span class="pln"> translateY</span><span class="pun">(</span><span class="lit">3px</span><span class="pun">);</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	وتظهر المعاينة كمافي الصورة:
</p>

<p>
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="28076" href="https://academy.hsoub.com/uploads/monthly_2018_09/06.gif.245eb35d958c9ac8aa55d3d5408adb44.gif" rel=""><img alt="06.gif" class="ipsImage ipsImage_thumbnailed" data-fileid="28076" src="https://academy.hsoub.com/uploads/monthly_2018_09/06.gif.245eb35d958c9ac8aa55d3d5408adb44.gif"></a>
</p>

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

<p>
	أولًا نكتب تعليمات بناء بطاقة الصورة من خلال html
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_9376_10" style="">
<span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"card-container"</span><span class="tag">&gt;</span><span class="pln">
  </span><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"card"</span><span class="tag">&gt;</span><span class="pln">
    </span><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"side"</span><span class="tag">&gt;&lt;img</span><span class="pln"> </span><span class="atn">src</span><span class="pun">=</span><span class="atv">"https://academy.hsoub.com/uploads/monthly_2016_01/SiteLogo-346x108.png.dd3bdd5dfa0e4a7099ebc51f8484032e.png"</span><span class="pln"> </span><span class="atn">alt</span><span class="pun">=</span><span class="atv">"أكاديمية حسوب"</span><span class="tag">&gt;&lt;/div&gt;</span><span class="pln">
    </span><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"side back"</span><span class="tag">&gt;</span><span class="pln">أكاديمية حسوب</span><span class="tag">&lt;/div&gt;</span><span class="pln">
  </span><span class="tag">&lt;/div&gt;</span><span class="pln">
</span><span class="tag">&lt;/div&gt;</span></pre>

<p>
	ثم نبدأ بكتابة تعليمات تحريك البطاقة وقلبها إلى الجزء الآخر من خلال CSS3
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_9376_14" style="">
<span class="pun">.</span><span class="pln">card</span><span class="pun">-</span><span class="pln">container </span><span class="pun">{</span><span class="pln">
  height</span><span class="pun">:</span><span class="pln"> </span><span class="lit">108px</span><span class="pun">;</span><span class="pln">
  perspective</span><span class="pun">:</span><span class="pln"> </span><span class="lit">600</span><span class="pun">;</span><span class="pln">
  position</span><span class="pun">:</span><span class="pln"> relative</span><span class="pun">;</span><span class="pln">
  width</span><span class="pun">:</span><span class="pln"> </span><span class="lit">346px</span><span class="pun">;</span><span class="pln">
  background</span><span class="pun">:</span><span class="pln"> </span><span class="com">#444;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
</span><span class="pun">.</span><span class="pln">card </span><span class="pun">{</span><span class="pln">
  height</span><span class="pun">:</span><span class="pln"> </span><span class="lit">100</span><span class="pun">%;</span><span class="pln">
  position</span><span class="pun">:</span><span class="pln"> absolute</span><span class="pun">;</span><span class="pln">
  transform</span><span class="pun">-</span><span class="pln">style</span><span class="pun">:</span><span class="pln"> preserve</span><span class="pun">-</span><span class="lit">3d</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="pln"> ease</span><span class="pun">-</span><span class="kwd">in</span><span class="pun">-</span><span class="kwd">out</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">card</span><span class="pun">:</span><span class="pln">hover </span><span class="pun">{</span><span class="pln">
  transform</span><span class="pun">:</span><span class="pln"> rotateY</span><span class="pun">(</span><span class="lit">180deg</span><span class="pun">);</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
</span><span class="pun">.</span><span class="pln">card </span><span class="pun">.</span><span class="pln">side </span><span class="pun">{</span><span class="pln">
  backface</span><span class="pun">-</span><span class="pln">visibility</span><span class="pun">:</span><span class="pln"> hidden</span><span class="pun">;</span><span class="pln">
  height</span><span class="pun">:</span><span class="pln"> </span><span class="lit">100</span><span class="pun">%;</span><span class="pln">
  position</span><span class="pun">:</span><span class="pln"> absolute</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">card </span><span class="pun">.</span><span class="pln">back </span><span class="pun">{</span><span class="pln">
  transform</span><span class="pun">:</span><span class="pln"> rotateY</span><span class="pun">(</span><span class="lit">180deg</span><span class="pun">);</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	حيث تُقلب البطاقة إلى الوجه الآخر عند مرور المؤشر فوقها، ويمكن رؤية المعاينة من <a href="https://codepen.io/tarek-89/full/gdQYqK/" rel="external nofollow">الرابط المباشر</a>
</p>

<p>
	 
</p>

<p>
	ترجمة-بتصرف- لمقال: <a href="https://learn.shayhowe.com/advanced-html-css/transitions-animations/" rel="external nofollow">Transition &amp; Animation</a>
</p>
]]></description><guid isPermaLink="false">640</guid><pubDate>Tue, 18 Sep 2018 09:31:00 +0000</pubDate></item><item><title>&#x627;&#x644;&#x623;&#x634;&#x643;&#x627;&#x644; Shapes &#x641;&#x64A; CSS</title><link>https://academy.hsoub.com/programming/css/%D8%A7%D9%84%D8%A3%D8%B4%D9%83%D8%A7%D9%84-shapes-%D9%81%D9%8A-css-r610/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2018_03/21.png.ebeff1e073cac8d44699a9e497193bb1.png" /></p>

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

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="26714" href="https://academy.hsoub.com/uploads/monthly_2018_01/01.jpg.d333ff9774eeba01865d5c9f11c5c9bb.jpg" rel=""><img alt="01.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="26714" data-unique="zpqojja4i" src="https://academy.hsoub.com/uploads/monthly_2018_01/01.thumb.jpg.9e38a021885194094a30b38be8abb147.jpg"></a>
</p>

<h2 id="دعم-المتصفحات">
	دعم المتصفحات
</h2>

<p>
	إن المتصفحات التي تدعم الأشكال CSS Shapes Module 1 بالنسبة لنسخة الحاسب حتى نهاية عام 2017 كانت Chrome، Firefox، Opera و (Safari(WebKit، بينما لايقدم متصفح Internet Explorer هذا الدعم. ويختلف الأمر بالنسبة لنسخة المتصفحات الخاصة بالموبايل حيث أن متصفح Safari هو فقط من يدعم خاصية الأشكال. ومع ذلك فقد وصلت تقنية الأشكال في CSS المرحلة الأولى منها إلى أن جميع المتصفحات تتعرف على طريقة كتابة تعريف الأشكال Syntax الخاصة بها وتخصيصها وبالتالي تعتبر برمجة الأشكال مستقرة جدًا ولن يكون الوقت طويلًا حتى يتم تنفيذها بشكل كامل على جميع المتصفحات.<br>
	إن المرحلة الأولى من تطوير الأشكال في CSS يركز على الخصائص التي تغير من طريقة انسياب المحتوى حول الشكل أي أنها تركز على خاصية shape-outside بالإضافة إلى الخصائص الأخرى المتعلقة بها. ومن المتوقع أن استخدام هذه الميزة الجديدة في الأشكال عند CSS ودمجها مع الميزات الأخرى المتطورة مثل الإخفاء والقص <a href="https://www.w3.org/TR/css-masking/" rel="external nofollow">Clipping and Masking</a>، طريقة معالجة العنصر قبل عرضه <a href="https://www.w3.org/TR/filter-effects-1/" rel="external nofollow">CSS Filters</a>، و مزج وتركيب العناصر معًا <a href="https://drafts.fxtf.org/compositing-1/" rel="external nofollow">Compositing and Blending</a> سيسمح لنا ببناء الأشكال وتصميمها بشكل احترافي متطور من دون الحاجة إلى المحررات المستخدمة في التصميم كالفوتوشوب و InDesign.<br>
	سيركّز بناء الأشكال في CSS مستقبلًا على طريقة التفاف المحتوى داخل الشكل نفسه أيضًا. فعلى سبيل المثال، من السهل اليوم بناء المعين باستخدام CSS حيث يتوجب علينا فقط تدوير العنصر بزاوية 24 درجة ثم تدوير المحتوى داخله وبالتالي يعود المحتوى ليتوضع أفقيًا ضمن الصفحة. ولكن المعين لن يكون هو الأب الحاوي container للمحتوى، وبالتالي سيبقى المحتوى مستطيل الشكل. ولحل هذه المشكلة يمكن استخدام الخاصية shape-inside والتي تقوم بجعل المحتوى يأخذ شكل معين داخل التصميم أيضًا.
</p>

<p style="text-align: center;">
	<img alt="02.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="26715" data-unique="0vpnkjska" src="https://academy.hsoub.com/uploads/monthly_2018_01/02.jpg.10be57b86344c2d740282e6916a37095.jpg"></p>

<h2 id="بناء-شكل-باستخدام-css">
	بناء شكل باستخدام CSS
</h2>

<p>
	يمكن تطبيق شكل على أي عنصر element من خلال استخدام خاصية الأشكال shape property. حيث نمرر خاصية الشكل كتابع shape function يمرر مجموعة من المعاملات parameters التي تعرف الشكل الذي نريد تطبيقه مثل نقطة المركز ونصف القطر إذا كان الشكل دائرة أو مجموعة من النقاط على المحيط إذا كان الشكل مضلعًا.
</p>

<p style="text-align: center;">
	<img alt="03.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="26716" data-unique="gs9hi0uqh" src="https://academy.hsoub.com/uploads/monthly_2018_01/03.jpg.1ac76596e1a34dca21f7374794fc319b.jpg"></p>

<p>
	من الأشكال التي يمكن بناؤها باستخدام التوابع التالية
</p>

<ul>
<li>
		<code>()circle</code>
	</li>
	<li>
		<code>()ellipse</code>
	</li>
	<li>
		<code>()inset</code>
	</li>
	<li>
		<code>()polygon</code>
	</li>
</ul>
<p>
	حيث يعرف كل شكل من خلال مجموعة من النقاط. فبعض التوابع تمرر هذه النقاط كمعاملات، وبعضها الآخر يمرر نقطة واحدة ومقدار الإزاحات ولكن في النهاية جميعها ترسم الأشكال من خلال مجموعة من النقاط. حيث سنقوم بتعريف هذه المتحولات الممررة عند بنائنا للأشكال في المثال القادم من خلال هذه التوابع. كما يمكن تعريف الشكل من خلال استخراجه من صوة باستخدام قناة ألفا وذلك عند تمرير الصورة لخاصية الشكل حيث سيقوم المتصفح باستخراج الشكل بالاعتماد على shape-image-threshold. يُعرف أي شكل من خلال البكسلات التي تحوي قيمة ألفا أكبر من القيمة البدائية كما أن الصورة يجب أن تكون متوافقة مع <a href="https://caniuse.com/#feat=cors" rel="external nofollow">شروط CORS</a> وبالتالي في هذه الحالة إذا لم يتم إظهار الصورة في الصفحة لأي سبب (مثل أن تكون غير موجودة أو محذوفة) عندها ستيم إظهار شكل الإطار الخاص بها.<br>
	خصائص الشكل shape proprties التي تقبل أن تمرر التوابع التي ذُكرت في الأعلى كقيمة لها هي:
</p>

<ul>
<li>
		shape-outside: تقوم هذه الخاصية بتخصيص طريقة التفاف المحتوى حول الشكل من الخارج.
	</li>
	<li>
		shape-inside: تقوم هذه الخاصية بتخصيص طريقة التفاف المحتوى داخل الشكل.
	</li>
</ul>
<p>
	كما يمكن استخدام خاصية shape-outside بالتزامن مع استخدام خاصية shape-margin من أجل إضافة هامش حول الشكل الذي نخصص طريقة انسياب المحتوى حوله وبالتالي بناء فراغ صغير بين المحتوى والشكل. وبنفس الطريقة يمكن استخدام خاصية shape-padding مع خاصية shape-inside من أجل إضافة هامش داخلي بين المحتوى داخل الشكل وحدود الشكل. باستخدام خصائص الشكل وتوابعه يمكن تعريف الشكل كعنصر element من خلال إضافة سطر واحد من تعليمات CSS.
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_3870_13" style="">
<span class="pun">.</span><span class="pln">element </span><span class="pun">{</span><span class="pln">
	shape</span><span class="pun">-</span><span class="pln">outside</span><span class="pun">:</span><span class="pln"> circle</span><span class="pun">();</span><span class="pln"> </span><span class="com">/* content will flow around the circle defined on the element */</span><span class="pln">
</span><span class="pun">}</span></pre>

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

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_3870_15" style="">
<span class="pun">.</span><span class="pln">element </span><span class="pun">{</span><span class="pln">
	shape</span><span class="pun">-</span><span class="pln">outside</span><span class="pun">:</span><span class="pln"> url</span><span class="pun">(</span><span class="pln">path</span><span class="pun">/</span><span class="pln">to</span><span class="pun">/</span><span class="pln">image</span><span class="pun">-</span><span class="kwd">with</span><span class="pun">-</span><span class="pln">shape</span><span class="pun">.</span><span class="pln">png</span><span class="pun">);</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	ولكن عند تطبيق هذا السطر من تعليمات CSS على الشكل لن يظهر الشكل المطلوب إلا إذا تحقق الشرطين التاليين:
</p>

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

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_3870_17" style="">
<span class="pun">.</span><span class="pln">element </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">
	height</span><span class="pun">:</span><span class="pln"> </span><span class="lit">10em</span><span class="pun">;</span><span class="pln">
	width</span><span class="pun">:</span><span class="pln"> </span><span class="lit">15em</span><span class="pun">;</span><span class="pln">
	shape</span><span class="pun">-</span><span class="pln">outside</span><span class="pun">:</span><span class="pln"> circle</span><span class="pun">();</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	مع العلم أن إضافة هذه الأبعاد لا تؤثر على طريقة استجابة الشكل نفسه. وبما أن كل شكل يتم تعريفه بواسطة مجموعة من النقاط التي يتم وضعها باستخدام زوج من الإحداثيات فإن تغيير إحداثيات نقطة ما سيؤثر بشكل مباشر على الشكل الذي تم إنشاؤه. فمثلًا يمكننا إنشاء مضلع مسدس الشكل من خلال استخدام تابع <code>()polygon</code> حيث يتكون الشكل من ست نقاط ولكن عند تغيير إحداثيات إحدى النقاط الأفقية (النقطة الملونة باللون البرتقالي) عندها سيتغير الشكل الناتج إلى شكل آخر وبالتالي سيؤثر على طريقة تدفق المحتوى داخل الشكل وخارجه.
</p>

<p style="text-align: center;">
	<img alt="04.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="26717" data-unique="jz0snsyif" src="https://academy.hsoub.com/uploads/monthly_2018_01/04.jpg.9eb296c9ac7b61d5afb7fb4b4b555ae6.jpg"></p>

<h2 id="المربع-المرجعي-للأشكال">
	المربع المرجعي للأشكال
</h2>

<p>
	يتم تعريف وبناء أي شكل يُرسم باستخدام CSS داخل ما يسمى بالمربع المرجعي الذي يستعمل لرسم الشكل على العنصر. يمتلك أي عنصر ارتفاع وعرض بالإضافة إلى مربع هامش الذي يحدد المسافة بين العنصر وباقي العناصر في الصفحة margin-box، مربع المحتوى content-box، مربع الهامش الداخلي الذي يحدد المسافة بين المحتوى وحدود الشكل padding-box، مربع الحدود border-box.
</p>

<p style="text-align: center;">
	<img alt="05.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="26718" data-unique="2yuttlb0j" src="https://academy.hsoub.com/uploads/monthly_2018_01/05.jpg.3c82deb98584c5a3ee2de2646d925402.jpg"></p>

<p>
	حيث تُستخدم إحدى هذه المربعات كمرجع لرسم الشكل على العنصر. افتراضيًا يُستخدم مربع الهامش margin-box كنقطة البداية الأساسية لأي عنصر وبالتالي إذا أردنا تطبيق الشكل على العنصر سيتم أولًا إزاحة الشكل إلى الأسفل ثم تمديده من أسفل زاوية الهامش إلى باقي مربع الهامش margin-box. كما يمكن استخدام قيمة مربع أخرى كمرجع بالإضافة إلى مربع الهامش ويتم ذلك من خلال تمرير اسم المربع بجانب تابع الشكل <code>()circle</code> إلى خاصية الشكل المُستخدمة shape-outside.
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_3870_19" style="">
<span class="pln">shape</span><span class="pun">-</span><span class="pln">outside</span><span class="pun">:</span><span class="pln"> circle</span><span class="pun">(</span><span class="lit">250px</span><span class="pln"> at </span><span class="lit">50</span><span class="pun">%</span><span class="pln"> </span><span class="lit">50</span><span class="pun">%)</span><span class="pln"> padding</span><span class="pun">-</span><span class="pln">box</span><span class="pun">;</span></pre>

<p>
	الكلمة المفتاحية padding-box هي التي خصصت بأن الشكل سيتم تطبيقه على العنصر بالنسبة إلى منطقة الهامش الداخلية للعنصر، أما تابع <code>()circle</code> فعرّف الشكل الدائري المراد رسمه من خلال ذكر حجمه ومكان توضعه.
</p>

<h2 id="تعريف-الأشكال-باستخدام-التوابع">
	تعريف الأشكال باستخدام التوابع
</h2>

<p>
	سنبدأ بمثال عن طريقة التفاف النص حول صورة شخصية لمستخدم دائرية الشكل مثل تلك الصور المستخدمة في الصفحات التعريفية عن الأشخاص
</p>

<p style="text-align: center;">
	<img alt="06.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="26719" data-unique="8n06dgymi" src="https://academy.hsoub.com/uploads/monthly_2018_01/06.jpg.ee4ff873dc90ed19f09cd6da9f7339e3.jpg"></p>

<p>
	حيث ستكون التعليمات في ملف HTML لبناء الصورة وكتابة المحتوى
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_3870_25" style="">
<span class="tag">&lt;img</span><span class="pln"> </span><span class="atn">src</span><span class="pun">=</span><span class="atv">"http://api.randomuser.me/0.3.2/portraits/men/7.jpg"</span><span class="pln"> </span><span class="atn">alt</span><span class="pun">=</span><span class="atv">"profile image"</span><span class="pln"> </span><span class="tag">/&gt;</span><span class="pln">

</span><span class="tag">&lt;p&gt;</span><span class="pln">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Harum itaque nam blanditiis eveniet enim eligendi quae adipisci?</span><span class="tag">&lt;/p&gt;</span><span class="pln">

</span><span class="tag">&lt;p&gt;</span><span class="pln">Assumenda blanditiis voluptas tempore porro quibusdam beatae deleniti quod asperiores sapiente dolorem error! Quo nam quasi soluta reprehenderit laudantium optio ipsam ducimus consequatur enim fuga quibusdam mollitia nesciunt modi.</span><span class="tag">&lt;/p&gt;</span></pre>

<p>
	أما ضمن ملف CSS فسنستخدم تابع <code>()circle</code> من أجل تطبيق الشكل الدائري على الصورة الشخصية التي وضعناها في ملف HTML. سنستخدم من أجل تدوير الصورة الخاصية border-radius حيث لا تمتلك هذه الخاصية أي تأثير على طريقة انسياب المحتوى داخل أو حول الصورة التي نطبق عليها الشكل. وبمعنى آخر لا تمتلك هذه الخاصية التأثير على منطقة المحتوى content area المتواجدة داخل العنصر element الذي قمنا ببنائه ولا على المحتوى الخارجي حول العنصر، وإنما يكون تأثيرها فقط على شكل الحدود الخاصة بالعنصر وخلفيته إن وُجدت. أي سيبقى المحتوى داخل العنصر مستطيل الشكل والمحتوى الموجود خارج العنصر سينظر ويتعامل مع العنصر نفسه كما لوكان مستطيل الشكل. أي أننا نقوم باستخدام الخاصية border-radius من أجل جعل الصورة فقط دائرية الشكل.
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_3870_27" style="">
<span class="pln">img </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">
	width</span><span class="pun">:</span><span class="pln"> </span><span class="lit">150px</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">radius</span><span class="pun">:</span><span class="pln"> </span><span class="lit">50</span><span class="pun">%;</span><span class="pln">
	margin</span><span class="pun">-</span><span class="pln">right</span><span class="pun">:</span><span class="pln"> </span><span class="lit">15px</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></pre>

<p style="text-align: center;">
	<img alt="07.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="26720" data-unique="davojl18m" src="https://academy.hsoub.com/uploads/monthly_2018_01/07.jpg.2561f9e3933d3389a84443de9cf06a20.jpg"></p>

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

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_3870_29" style="">
<span class="pln">img </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">
	width</span><span class="pun">:</span><span class="pln"> </span><span class="lit">150px</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">radius</span><span class="pun">:</span><span class="pln"> </span><span class="lit">50</span><span class="pun">%;</span><span class="pln">

	shape</span><span class="pun">-</span><span class="pln">outside</span><span class="pun">:</span><span class="pln"> circle</span><span class="pun">();</span><span class="pln">
	shape</span><span class="pun">-</span><span class="pln">margin</span><span class="pun">:</span><span class="pln"> </span><span class="lit">15px</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></pre>

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

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_3870_31" style="">
<span class="pln">circle</span><span class="pun">()</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> circle</span><span class="pun">(</span><span class="pln"> </span><span class="pun">[&lt;</span><span class="pln">shape</span><span class="pun">-</span><span class="pln">radius</span><span class="pun">&gt;]?</span><span class="pln"> </span><span class="pun">[</span><span class="pln">at </span><span class="str">&lt;position&gt;</span><span class="pun">]?</span><span class="pln"> </span><span class="pun">)</span></pre>

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

<ul>
<li>
		خاصية closest-side: وهي الخاصية الافتراضية وتعني رسم نصف القطر وصولًا إلى أقرب ضلع من أضلاع المستطيل.
	</li>
	<li>
		خاصية furthest-side: وتعني أن المتصفح سيرسم نصف القطر وصولًا إلى أبعد ضلع من أضلاع المستطيل
	</li>
</ul>
<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="26721" href="https://academy.hsoub.com/uploads/monthly_2018_01/08.jpg.4b591c6596f1c655aab159afa31d0bfb.jpg" rel=""><img alt="08.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="26721" data-unique="m0zznb5cq" src="https://academy.hsoub.com/uploads/monthly_2018_01/08.thumb.jpg.d1f15559d2ae1d8a918f4c6e3a33fb48.jpg"></a>
</p>

<p>
	يمكن تحديد هذه الخاصية وتمريرها كمعامل لتابع رسم الدائرة عند خاصية shape-outside
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_3870_35" style="">
<span class="pln">shape</span><span class="pun">-</span><span class="pln">outside</span><span class="pun">:</span><span class="pln"> circle</span><span class="pun">(</span><span class="pln">farthest</span><span class="pun">-</span><span class="pln">side at </span><span class="lit">25</span><span class="pun">%</span><span class="pln"> </span><span class="lit">25</span><span class="pun">%);</span><span class="pln"> </span><span class="com">/* defines a circle whose radius is half the length of the longest side, positioned at the point of coordinates 25% 25% on the element’s coordinate system*/</span><span class="pln">

shape</span><span class="pun">-</span><span class="pln">inside</span><span class="pun">:</span><span class="pln"> circle</span><span class="pun">(</span><span class="lit">250px</span><span class="pln"> at </span><span class="lit">500px</span><span class="pln"> </span><span class="lit">300px</span><span class="pun">);</span><span class="pln"> </span><span class="com">/* defines a circle whose center is positioned at 500px horizontally and 300px vertically, with a radius of 250px */</span></pre>

<p>
	يعمل تابع رسم الإهليلج (القطع الناقص) <code>()ellipse</code> فهو يعمل بنفس الطريقة التي يعمل فيها تابع <code>()circle</code> وبنفس القيم ماعدا أنه بدلًا من تمرير تابع واحد لنصف القطر يجب تمرير اثنين أحدهما من أجل طول نصف القطر على محور الإحداثيات X والآخر لنصف القطر على محور الإحداثيات Y
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_3870_37" style="">
<span class="pln">ellipse</span><span class="pun">()</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> ellipse</span><span class="pun">(</span><span class="pln"> </span><span class="pun">[&lt;</span><span class="pln">shape</span><span class="pun">-</span><span class="pln">radius</span><span class="pun">&gt;{</span><span class="lit">2</span><span class="pun">}]?</span><span class="pln"> </span><span class="pun">[</span><span class="pln">at </span><span class="str">&lt;position&gt;</span><span class="pun">]?</span><span class="pln"> </span><span class="pun">)</span></pre>

<p>
	في حيث أن تابع <code>()inset</code> يُستخدم لرسم شكل مستطيل مدور الزوايا ويمكن أن نجعل المحتوى ينساب حول هذه الزوايا بشكل دائري أيضًا.
</p>

<p style="text-align: center;">
	<img alt="09.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="26722" data-unique="y2kz2dbfd" src="https://academy.hsoub.com/uploads/monthly_2018_01/09.jpg.270e165b8cb0bcbd8cdaddb819543c67.jpg"></p>

<p>
	ونمرر لتابع <code>()inset</code>:
</p>

<ul>
<li>
		أربع قيم إزاحة تحدد قيمة إزاحة الحواف بالنسبة لصندوق المرجع نحو داخل العنصر.
	</li>
	<li>
		معامل اختياري وهو قيمة تدوير الزوايا round حيث يتم تحديد القيمة من خلال border-radius بنفس طريقة استخدامها في تدوير الدائرة التي شرحناها سابقًا، ولكن هنا يجب تمرير أربع قيم.
	</li>
</ul>
<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_3870_39" style="">
<span class="pln">inset</span><span class="pun">()</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> inset</span><span class="pun">(</span><span class="pln"> offset</span><span class="pun">{</span><span class="lit">1</span><span class="pun">,</span><span class="lit">4</span><span class="pun">}</span><span class="pln"> </span><span class="pun">[</span><span class="pln">round </span><span class="pun">&lt;</span><span class="pln">border</span><span class="pun">-</span><span class="pln">radius</span><span class="pun">&gt;]?</span><span class="pln"> </span><span class="pun">)</span></pre>

<p>
	من خلال التعليمات التالية سنقوم برسم مستطيل دائري الزاويا على عنصر عائم floated element
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_3870_41" style="">
<span class="pun">.</span><span class="pln">element </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">
	width</span><span class="pun">:</span><span class="pln"> </span><span class="lit">250px</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">
	shape</span><span class="pun">-</span><span class="pln">outside</span><span class="pun">:</span><span class="pln"> inset</span><span class="pun">(</span><span class="lit">0px</span><span class="pln"> round </span><span class="lit">100px</span><span class="pun">)</span><span class="pln"> border</span><span class="pun">-</span><span class="pln">box</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	تابع الأشكال الأخير الذي سنتحدث عنه هو <code>()polygon</code> الذي يعرف مجموعة معقدة من الأشكال الهندسية من خلال تحديد عدد من النقاط المعرفة بإحداثياتها الديكارتية (point(x,y والتي من خلالها يتحدد موقع النقطة ديكارتيًا على المتصفح. في المثال التالي نشاهد صورة عائمة في يمين الصورة وتغطي ارتفاع كامل مساحة العرض المتاحة لها، ونريد أن نظهر النص الذي على يسارها بشكل انسيابي حول الساعة الرملية الموجودة داخل الصورة ولذلك سنستخدم تابع <code>()polygon</code> من أجل تعريف هذا الشكل غير المنتظم على الصورة.
</p>

<p style="text-align: center;">
	<img alt="10.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="26723" data-unique="108rm5buo" src="https://academy.hsoub.com/uploads/monthly_2018_01/10.jpg.2d601174582ecfa2bc106ac9d5cff756.jpg"></p>

<p>
	تعليمات CSS التي ستقوم بهذه العملية هي
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_3870_43" style="">
<span class="pln">img</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">
	height</span><span class="pun">:</span><span class="pln"> </span><span class="lit">100vh</span><span class="pun">;</span><span class="pln">
	width</span><span class="pun">:</span><span class="pln"> calc</span><span class="pun">(</span><span class="lit">100vh</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> </span><span class="lit">100vh</span><span class="pun">/</span><span class="lit">4</span><span class="pun">);</span><span class="pln">
	shape</span><span class="pun">-</span><span class="pln">outside</span><span class="pun">:</span><span class="pln"> polygon</span><span class="pun">(</span><span class="lit">40</span><span class="pun">%</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> </span><span class="lit">100</span><span class="pun">%</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> </span><span class="lit">100</span><span class="pun">%</span><span class="pln"> </span><span class="lit">100</span><span class="pun">%,</span><span class="pln"> </span><span class="lit">40</span><span class="pun">%</span><span class="pln"> </span><span class="lit">100</span><span class="pun">%,</span><span class="pln"> </span><span class="lit">45</span><span class="pun">%</span><span class="pln"> </span><span class="lit">60</span><span class="pun">%,</span><span class="pln"> </span><span class="lit">45</span><span class="pun">%</span><span class="pln"> </span><span class="lit">40</span><span class="pun">%);</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	يمكن تعيين إحداثيات النقط التي تعرف الشكل من خلال وحدات الطول أو من خلال النسب المئوية التي استخدمتها. ستُنتج التعليمات السابقة الشكل الذي شاهدناه في الأعلى حيث أنها لا تؤثر على باقي أجزاء الصورة الموجودة خارج الشكل المرسوم كما نلاحظ، لأن تطبيق شكل العنصر فقط يؤثر على منطقة تدفق المحتوى من دون أن يغيّر أي شيء في الخلفيات والحدود.<br>
	ومن أجل إظهار شكل المضلع الذي رسمناه فإننا بحاجة إلى قص أجزاء من الصورة خارج الشكل وذلك من خلال استخدام خاصية clip-path الموجودة في نموذج الإخفاء <a href="https://www.w3.org/TR/css-masking-1/" rel="external nofollow">CSS Masking Module</a>. تقوم خاصية clip-path على أخذ نفس شكل التابع المستخدم والقيم الممررة له. وبالتالي إذا استخدامنا نفس الشكل المضلع الذي مررناه للخاصية shape-outside فإن هذه الخاصية ستعمل على قص كل أجزاء الصورة خارج الشكل المحدد
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_3870_45" style="">
<span class="pln">img</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">
	height</span><span class="pun">:</span><span class="pln"> </span><span class="lit">100vh</span><span class="pun">;</span><span class="pln">
	width</span><span class="pun">:</span><span class="pln"> calc</span><span class="pun">(</span><span class="lit">100vh</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> </span><span class="lit">100vh</span><span class="pun">/</span><span class="lit">4</span><span class="pun">);</span><span class="pln">
	shape</span><span class="pun">-</span><span class="pln">outside</span><span class="pun">:</span><span class="pln"> polygon</span><span class="pun">(</span><span class="lit">40</span><span class="pun">%</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> </span><span class="lit">100</span><span class="pun">%</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> </span><span class="lit">100</span><span class="pun">%</span><span class="pln"> </span><span class="lit">100</span><span class="pun">%,</span><span class="pln"> </span><span class="lit">40</span><span class="pun">%</span><span class="pln"> </span><span class="lit">100</span><span class="pun">%,</span><span class="pln"> </span><span class="lit">45</span><span class="pun">%</span><span class="pln"> </span><span class="lit">60</span><span class="pun">%,</span><span class="pln"> </span><span class="lit">45</span><span class="pun">%</span><span class="pln"> </span><span class="lit">40</span><span class="pun">%);</span><span class="pln">
	</span><span class="com">/* clip the image to the defined shape */</span><span class="pln">
	clip</span><span class="pun">-</span><span class="pln">path</span><span class="pun">:</span><span class="pln"> polygon</span><span class="pun">(</span><span class="lit">40</span><span class="pun">%</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> </span><span class="lit">100</span><span class="pun">%</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> </span><span class="lit">100</span><span class="pun">%</span><span class="pln"> </span><span class="lit">100</span><span class="pun">%,</span><span class="pln"> </span><span class="lit">40</span><span class="pun">%</span><span class="pln"> </span><span class="lit">100</span><span class="pun">%,</span><span class="pln"> </span><span class="lit">45</span><span class="pun">%</span><span class="pln"> </span><span class="lit">60</span><span class="pun">%,</span><span class="pln"> </span><span class="lit">45</span><span class="pun">%</span><span class="pln"> </span><span class="lit">40</span><span class="pun">%);</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	وستكون النتيجة النهائية لهذه التعليمات كما في صورة
</p>

<p style="text-align: center;">
	<img alt="11.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="26724" data-unique="nn9vxlj44" src="https://academy.hsoub.com/uploads/monthly_2018_01/11.jpg.bc7ded37105d02c3a4356090728d4adb.jpg"></p>

<p>
	في الوقت الحالي يتم دعم خاصية clip-path من خلال إضافة بادئة إليها أولًا، مثلًا ستعمل هذه الخاصية مع Chrome إذا أضفنا لها -webkit-. إن خاصية clip-path هي أفضل إضافة مع خصائص الأشكال الأخرى لأنها تساعد في إظهار الأشكال المُنشأة من خلال قص أي جز من العناصر خارج الشكل. تابع<code>()polygon</code> يأخذ أيضًا خيارًا آخر هو إما nonzero أو evenodd والتي تحدد كيفية التعامل مع المناطق داخل الشكل المضلع التي تتقاطع مع نفسها ولمعرفة المزيد عن هذه الخصائص يمكن الإطلاع على <a href="https://www.w3.org/TR/SVG/painting.html#FillRuleProperty" rel="external nofollow">SVG fill-rule</a>
</p>

<h2 id="تعريف-شكل-باستخدام-صورة">
	تعريف شكل باستخدام صورة
</h2>

<p>
	لتعريف شكل باستخدام صورة نحتاج إلى صورة من نمط ألفا والتي يمكن للمتصفح أن يحللها. يُعرّف الشكل بأنه مجموعة من البكسلات التي تمتلك قيمة ألفا أكبر من القيمة الحدّية والتي هي افتراضيًا القيمة 0 (أي شفافة تمامًا) أو يمكن تحديد قيمتها صراحة من خلال الخاصية shape-image-threshold.وبالتالي سيتم استخدام أي بكسل ليس شفافًا كجزء من الشكل المُعرّف من قبل الصورة. في مراحل قادمة من تعريف أشكال CSS قد يتم استخدام بيانات الإضاءة من الصورة بدلًا من استخدام بيانات ألفا. وفي حال حدوث هذا فإن خاصية shape-imgae-threshold سيتم توسيعها لتستخدم مع الإضاءة أو ألفا. الآن سنقوم باستخدام الصورة التالية من أجل تعريف شكل على عنصر ومن ثم تحديد طريقة التفاف النص حول الشكل:
</p>

<p style="text-align: center;">
	<img alt="12.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="26725" data-unique="rcs06esws" src="https://academy.hsoub.com/uploads/monthly_2018_01/12.jpg.8b675dd1cfdb3c6d8f66265633f80901.jpg"></p>

<p>
	باستخدام الخاصية shape-outside قيمة<code>()url</code> التي تشير إلى الصورة نستطيع جعل المحتوى ينساب حول العنصر الذي يحمل شكل الورقة.
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_3870_47" style="">
<span class="pun">.</span><span class="pln">leaf</span><span class="pun">-</span><span class="pln">shaped</span><span class="pun">-</span><span class="pln">element </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">
	width</span><span class="pun">:</span><span class="pln"> </span><span class="lit">400px</span><span class="pun">;</span><span class="pln">
	height</span><span class="pun">:</span><span class="pln"> </span><span class="lit">400px</span><span class="pun">;</span><span class="pln">
	shape</span><span class="pun">-</span><span class="pln">outside</span><span class="pun">:</span><span class="pln"> url</span><span class="pun">(</span><span class="pln">leaf</span><span class="pun">.</span><span class="pln">png</span><span class="pun">);</span><span class="pln">
	shape</span><span class="pun">-</span><span class="pln">margin</span><span class="pun">:</span><span class="pln"> </span><span class="lit">15px</span><span class="pun">;</span><span class="pln">
	shape</span><span class="pun">-</span><span class="pln">image</span><span class="pun">-</span><span class="pln">threshold</span><span class="pun">:</span><span class="pln"> </span><span class="lit">0.5</span><span class="pun">;</span><span class="pln">
	background</span><span class="pun">:</span><span class="pln"> </span><span class="com">#009966 url(path/to/background-image.jpg);</span><span class="pln">
	mask</span><span class="pun">-</span><span class="pln">image</span><span class="pun">:</span><span class="pln"> url</span><span class="pun">(</span><span class="pln">leaf</span><span class="pun">.</span><span class="pln">png</span><span class="pun">);</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	<br>
	وبالطبع في حال أردنا تطبيق الصورة كخلفية في العنصر فإنه يجب قص الصورة الموجودة خارج الشكل من خلال الخاصية mask-image حيث أنه لايمكن استخدام خاصية clip-path مع الصور صاحبة القيمة ألفا، والنتيجة ستكون بالشكل التالي
</p>

<p style="text-align: center;">
	<img alt="13.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="26726" data-unique="mevyoia3j" src="https://academy.hsoub.com/uploads/monthly_2018_01/13.jpg.d1bead38dda12451fb95f731e5301a29.jpg"></p>

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

<h2 id="تفاعل-الأشكال-في-css-مع-التصميم-المُتجاوب">
	تفاعل الأشكال في CSS مع التصميم المُتجاوب
</h2>

<p>
	هل تستطيع الأشكال المبنية باستخدام CSS تتناسب مع التصميم المتجاوب؟ التخصيص الحالي لخاصية shape-outside تستطيع العمل مع التصميم المتجاوب وذلك لأنه يسمح بتحديد أبعاد العنصر من خلال النسب المئوية أو أحد وحدات الطول، ويمكن تحديد نقاط الشكل الممررة كمعاملات لتابع الشكل. وهذا يعني أن خاصية العنصر shape-outside ستكون متجاوبة responsive بشكل كامل ولكن خاصية shape-inside ليست متجاوبة responsive إلى الآن ولكن سيتم إدخالها في المرحلة الثانية حتى يتم حل بعض الحدود.
</p>

<h2 id="الأدوات-المستخدمة-لبناء-أشكال-css">
	الأدوات المستخدمة لبناء أشكال CSS
</h2>

<p>
	إن بناء الأشكال المعقدة بالاعتماد على تابع Shape يعد مهمة شاقة خصوصًا عند بناء العديد من الأشكال المضلعة المعقدة من خلال تمرير الإحداثيات الديكارتية لعدة نقاط من الشكل باستخدام التابع <code>()polygon</code> ولكن لحسن الحظ فإن Adobe وفرّت العديد من الأدوات التفاعلية التي تقوم بهذا العمل بشكل أسهل. هنا يوجد <a href="http://betravis.github.io/shape-tools/" rel="external nofollow">عدة أدوات</a> تسمح لنا ببناء الأشكال المضلعة من خلال الرسم ثم تتولى الأداة توليد تابع الأشكال الخاص بها. ولكن يوجد بعض المحدوديات في هذه البرامج إذا أردنا رسم الشكل بالاعتماد على صورة محددة لأنه لايوجد طريقة لإدخال الصورة إلى الأدوات ومن ثم إنشاء الشكل من خلالها. الأداة الأكثر تطورًا في هذا المجال لرسم الأشكال التفاعلية المتطورة بناها فريق تطوير الويب التابع لمنصة Adobe وتم وضعها كإضافة <a href="http://brackets.io/" rel="external nofollow">لمحرر brackets</a> المجاني الخاص بالشركة.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="26727" href="https://academy.hsoub.com/uploads/monthly_2018_01/14.gif.e50e858755842bb4eb460c8c1030a9f3.gif" rel=""><img alt="14.gif" class="ipsImage ipsImage_thumbnailed" data-fileid="26727" data-unique="l5wxbrkkc" src="https://academy.hsoub.com/uploads/monthly_2018_01/14.thumb.gif.b8e9f85d1e807efce658607b3fef3d6d.gif"></a>
</p>

<h2 id="مستقبل-الحالات-المبعدة-من-المعالجة-في-css">
	مستقبل الحالات المبعدة من المعالجة في CSS
</h2>

<p>
	لبناء أي شكل في CSS يجب أن يكون خاضعًا لعدد من المواصفات المحددة، فمثلًا لا يمكن تعريف الخاصيتين shape-inside و shape-outside إلا لأشكال مخصصة ولكن الحالات المقصاة هذه سيتم تعريف خصائص تسمح بالتفاف المحتوى حول العناصر مهما كان شكلها حتى لو لم تكن عائمة في المرحلة التالية من تطوير الأشكال في CSS وسيصبح بالإمكان التفاف النص على كامل الشكل من اتجاهات مختلفة كما في المثال الموضح بالصورة
</p>

<p style="text-align: center;">
	<img alt="15.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="26728" data-unique="3xogboynr" src="https://academy.hsoub.com/uploads/monthly_2018_01/15.jpg.2d32ac709fe821089e30d87aa3321220.jpg"></p>

<p>
	ترجمة –وبتصرّف- للمقال <a href="http://alistapart.com/article/css-shapes-101" rel="external nofollow">CSS Shapes 101</a> لصاحبته Sara soueidan
</p>
]]></description><guid isPermaLink="false">610</guid><pubDate>Wed, 21 Mar 2018 07:04:01 +0000</pubDate></item><item><title>&#x625;&#x639;&#x627;&#x62F;&#x629; &#x62A;&#x635;&#x645;&#x64A;&#x645; &#x627;&#x644;&#x623;&#x634;&#x643;&#x627;&#x644; &#x641;&#x64A; CSS</title><link>https://academy.hsoub.com/programming/css/%D8%A5%D8%B9%D8%A7%D8%AF%D8%A9-%D8%AA%D8%B5%D9%85%D9%8A%D9%85-%D8%A7%D9%84%D8%A3%D8%B4%D9%83%D8%A7%D9%84-%D9%81%D9%8A-css-r606/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2018_01/5a65ac8d8fbb9_14(1).png.32ccec1e338c8f066dc8f39340c964fa.png" /></p>

<p>
	قمنا مؤخرًا بتحديث تصميم صفحة "<a href="https://aneventapart.com/who-attends" rel="external nofollow">?Why Should You Attend</a>" التي كانت ماتزال تحتفظ بالتصميم القديم للموقع وقد احتجنا إلى أن نوائمها مع باقي الموقع. وعندما بدأنا العمل عليها قررنا أن نحسّن تصميم هذه الصفحة بأحدث التقنيات المستخدمة في التصميم حاليًا ألا وهي: الأشكال العائمة غير المستطيلة non-rectangular float shapes وميزة الكشف المباشر من قبل المتصفح عن قدرته على تطبيق تعليمات css وهذا مايعرف بـ feature queries. ولكن ليكن واضحًا بأننا لم نقم ببناء هذا المثال المتطور من دون أن يزودنا Mike Pick صاحب <a href="https://monkeydo.biz/" rel="external nofollow">Monkey Do</a> بالتصميم حيث أدركنا بأن رؤيته تتوافق بشكل جميل مع ميزات CSS الحديثة وقد كنا سعداء جدًا بالنتائج التي حصلنا عليها من خلال هذه التقنيات الحديثة لذلك أردنا مشاركتها معكم.
</p>

<h2>
	تصميم الفقاعات styling bubbles
</h2>

<p>
	هنا يوجد بعض المقتطفات من تصميمنا الأولي (التصميم النهائي لم يتم إنشاؤه كبطاقة صور لذلك لايمكنني عرض الشكل النهائي ولكن هذا الشكل قريب جدًا).
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="26607" href="https://academy.hsoub.com/uploads/monthly_2018_01/5a65a7567875c_01(1).jpg.a85289fbe4f5296343dbf3c3b51331ac.jpg" rel=""><img alt="01 (1).jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="26607" data-unique="k7q1onqme" src="https://academy.hsoub.com/uploads/monthly_2018_01/5a65a7568b07c_01(1).thumb.jpg.75ba9f3be324b82655cebd6611d6c46a.jpg"></a>
</p>

<p>
	مايهمني في هذا المثال هو طريقة استخدام الصور الدائرية، التي كنا نشير إليها باسم "الكُوّة portholes"  ولكن بعد التفكير أفضل تسميتها بـ "الفقاعات". عندما بدأت التحضير لتنفيذها من خلال التعليمات البرمجية عدت بالتفكير إلى ما قالته جين سيمون عن الاتجاه الفني الحقيقي في الويب. وبالتحديد كنت أفكر حول <a href="https://www.w3.org/TR/css-shapes-1/" rel="external nofollow">الأشكال في CSS</a> وكيف يمكن أن أكون قادرًا على استخدامهم بحيث تكون أسطر الكتابة مرتبة حول محيط الدائرة بشكل انسيابي.
</p>

<p style="text-align: center;">
	<img alt="02 (1).jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="26608" data-unique="ldux8sjw2" src="https://academy.hsoub.com/uploads/monthly_2018_01/5a65a758759d5_02(1).jpg.7175b7d5b4469020c6cd33136e6b7d49.jpg"></p>

<p>
	تقوم طريقة بناء هذا التنسيق على دمج مجموعة من التقنيات المستخدمة في التعامل مع الأشكال في CSS وهي <a href="https://meyerweb.com/eric/css/edge/raggedfloat/demo.html" rel="external nofollow">Ragged Float</a> وفكرتها تقسيم الصورة المنحنية إلى مجموعة من الشرائط مستطيلة الشكل ثم عرضها بالتسلسل لتظهر الشكل النهائي المنحني.
</p>

<p style="text-align: center;">
	<img alt="03 (1).JPG" class="ipsImage ipsImage_thumbnailed" data-fileid="26609" data-unique="vqt8fgglp" src="https://academy.hsoub.com/uploads/monthly_2018_01/5a65a75923513_03(1).JPG.5bd78d94e2f0533c7ce6dc09d042836e.JPG"></p>

<p>
	 و Sliced Sandbags التي تقوم على مبدأ بسيط هو بناء مجموعة من div التي تتوضع فوق الصورة الأساسية وبالتالي هذه الأقسام لاتكون الصورة الحقيقية التي سيتوضع النص حولها وإنما عبارة عن مجموعة من تعليمات php. الآن نمتلك الأشكال العائمة float shapes حيث يمكننا أن نعرّف دائرة أو مضلع ثم نقوم بتوصيف كيفية انسياب النص حول الشكل. أعلم ستقول بأنك لم تسمع أبدًا عن دعم هذه الأشكال في المتصفحات، بالتأكيد هذا صحيح حيث أن المتصفحات التي تدعمها إلى الآن هي WebKit/Blink family—Chrome, Safari, and Opera ولكن ذلك لايشكل عائقًا أمام هذه التقنية لأن المتصفحات التي لاتدعم الأشكال العائمة float shapes ستنفذ الطريقة القديمة boxy float في التعامل مع هذه الأشكال وذلك من خلال عرضها كألبوم صور.
</p>

<p>
	من أجل إضافة فقاعة سيكون الشكل الأساسي لتعليمات CSS هو:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_2682_11" style="">
<span class="pln">img</span><span class="pun">.</span><span class="pln">bubble</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">40px</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="pln">
    shape</span><span class="pun">-</span><span class="pln">outside</span><span class="pun">:</span><span class="pln"> circle</span><span class="pun">(</span><span class="lit">150px</span><span class="pln"> at </span><span class="lit">130px</span><span class="pln"> </span><span class="lit">130px</span><span class="pun">);</span><span class="pln">
    </span><span class="pun">}</span><span class="pln">
img</span><span class="pun">.</span><span class="pln">bubble</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="lit">0</span><span class="pln"> </span><span class="lit">40px</span><span class="pun">;</span><span class="pln">
    shape</span><span class="pun">-</span><span class="pln">outside</span><span class="pun">:</span><span class="pln"> circle</span><span class="pun">(</span><span class="lit">150px</span><span class="pln"> at </span><span class="lit">170px</span><span class="pln"> </span><span class="lit">130px</span><span class="pun">);</span><span class="pln">
    </span><span class="pun">}</span></pre>

<p>
	وبالمناسبة هذه الصور الفقاعة هي عبارة عن صور مربعة أبعادها 260px سوف يتم عرضها على سطح المكتب بهذا الحجم ولكن عند تصغير العرض إلى مساحات أصغر سيتم تحجيمها بنسبة 30% لتتناسب مع العرض الجديد.
</p>

<h2>
	طريقة توضع الشكل
</h2>

<p>
	لنفهم طريقة إعداد شكل الفقاعة النهائي سنقوم بحساب عدد بكسلات توضع الصورة، أولًا أبعاد الصورة الفقاعة هو 260×260 بكسل ونقوم بإضافة 40 بكسل عند الهامش الأيمن للصورة وبالتالي يتشكل لدينا مربع يحوي الصورة وأبعاده هي 300 بكسل بالعرض و 260 بكسل بالطول وتشغل الصورة الأساسية القسم اليساري من هذا المربع. إذًا وعند القيام بحساب بسيط نجد مركز الدائرة هو عند النقطة 130px 130px ونصف قطر الصورة الدائرية الفقاعة هو 130 بكسل ونمدد المحيط الخارجي للفقاعة 20 بكسل فيصبح نصف قطر الدائرة النهائي هو 150 بكسل.
</p>

<p style="text-align: center;">
	<img alt="04 (1).jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="26610" data-unique="gek9k6xzh" src="https://academy.hsoub.com/uploads/monthly_2018_01/5a65a75a1c3c3_04(1).jpg.9cd083292bbdb0e8bb6df949c4ef5b21.jpg"></p>

<p>
	 وبنفس الطريقة نبني الفقاعات الموجودة على الجانب الأيمن، حيث تنزاح نقطة المركز إلى 170px 130px لأننا أضفنا 40 بكسل كهامش أيسر للصورة، وستشرح الصورة كيفية توضع مركز كل دائرة
</p>

<p style="text-align: center;">
	<img alt="05 (1).jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="26611" data-unique="9zvvw8w92" src="https://academy.hsoub.com/uploads/monthly_2018_01/5a65a75c4badd_05(1).jpg.a228c84fa8642931ae5470f885864a1d.jpg"></p>

<p>
	من أجل كل صورة سنلاحظ مايلي:
</p>

<ul>
<li>
		الصندوق الأزرق الفاتح يُظهِر العنصر نفسه المعرف بالصف img.
	</li>
	<li>
		المربع البرتقالي الفاتح هو منطقة الهامش الأساسية وعرضها 40 بكسل.
	</li>
	<li>
		الدائرة البنفسجية والتي تمّ تعريفها في تعليمات css بالمعرف shape-outside.
	</li>
	<li>
		بالإمكان ملاحظة كيفية انسياب النص إلى المنطقة البرتقالية حيث يصل إلى أعلى الدائرة البنفسجية وهذا هو تأثير خاصية shape-outside.
	</li>
	<li>
		المناطق خارج هامش الشكل يكون طريقة عرض النص فيها عادي.
	</li>
	<li>
		نلاحظ أن الدائرة البنفسجية تمتد خارج منطقة الهامش وذلك لأنه باستخدام خاصية shape-outside يتم قص الدائرة بحسب الأبعاد المعطاة بغض النظر عن مربع الهامش، لذلك فإنه إذا قمنا بزيادة نصف قطر الدائرة مثلًا 400 بكسل فهذا يعني أن الصورة ستغطي نصف الصفحة مع أن التصميم الأساسي للنص سيبقى حول حواف هامش الصورة العائمة كما لو أنه لايوجد أي شكل على الإطلاق.
	</li>
</ul>
<h2>
	استجابة الأشكال Being Responsive
</h2>

<p>
	حتى الآن طريقة التصميم جيدة فالنص ينساب حول الشكل العائم بطريقة سلسلة في  متصفحات chrome /safari / opera ويتعامل مع الأشكال كما لو أنها مربع شكل عادي في Firefox /Edge وستبقى هذه طريقة تعامل المتصفحات مع الأشكال جيدة طالما أنه لم يتم تصغيير نافذة المتصفح وتتسبب في التفاف النص بين الفقاعات ولكن بالطبع يمكن حدوث ذلك
</p>

<p style="text-align: center;">
	<img alt="06.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="26612" data-unique="07y8abhhq" src="https://academy.hsoub.com/uploads/monthly_2018_01/06.jpg.85515f598acc14fec927be76102e9658.jpg"></p>

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

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_2682_13" style="">
<span class="pun">.</span><span class="pln">complex</span><span class="pun">-</span><span class="pln">content div</span><span class="pun">:</span><span class="pln">nth</span><span class="pun">-</span><span class="pln">child</span><span class="pun">(</span><span class="pln">even</span><span class="pun">):</span><span class="kwd">not</span><span class="pun">(:</span><span class="kwd">last</span><span class="pun">-</span><span class="pln">child</span><span class="pun">)</span><span class="pln"> p </span><span class="pun">{</span><span class="pln">
    margin</span><span class="pun">-</span><span class="pln">right</span><span class="pun">:</span><span class="pln"> </span><span class="lit">20</span><span class="pun">%;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
</span><span class="pun">.</span><span class="pln">complex</span><span class="pun">-</span><span class="pln">content div</span><span class="pun">:</span><span class="pln">nth</span><span class="pun">-</span><span class="pln">child</span><span class="pun">(</span><span class="pln">odd</span><span class="pun">):</span><span class="kwd">not</span><span class="pun">(:</span><span class="kwd">last</span><span class="pun">-</span><span class="pln">child</span><span class="pun">)</span><span class="pln"> p </span><span class="pun">{</span><span class="pln">
    margin</span><span class="pun">-</span><span class="pln">left</span><span class="pun">:</span><span class="pln"> </span><span class="lit">20</span><span class="pun">%;</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	أي أنه من كل الكتل div الأبناء زوجية الأرقام (وليست الابن الأخير) نضيف 20% كهامش على المحتوى ونقوم بنفس الأمر من أجل الكتل الأبناء أصحاب الأرقام الفردية. بإضافة هذه التعليمات الجديدة سيظهر شكل النصوص عند تصغيير نافذة المتصفح بشكل جيد في Chrome حيث سيتم التفاف النص على طول الفقاعة وسيتم إدخال النصوص إلى داخل هوامش الصورة بقيم معقولة
</p>

<p style="text-align: center;">
	<img alt="07.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="26613" data-unique="6gq0hjdpr" src="https://academy.hsoub.com/uploads/monthly_2018_01/07.jpg.4fc32246fcc11687bb23f04a589486d8.jpg"></p>

<p>
	ولكن في متصفح firefox الذي لايزال يمتلك النظام القديم boxy float في التعامل مع الصور لن يكون هناك التفاف في النص ودفع إلى الداخل وإنما سيتم إظهار شريط التمرير على طول الصفحة
</p>

<p style="text-align: center;">
	<img alt="08.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="26614" data-unique="h72rdwz5h" src="https://academy.hsoub.com/uploads/monthly_2018_01/08.jpg.c43a2c93a1486fa1b87e2ac50ea4806c.jpg"></p>

<p>
	ومن جهة أخرى فإن زيادة قيمة الهامش من أجل اصطفاف السطور كما في firefox (الهامش كان بنسبة 33%) لامعنى له في الأشكال العائمة float shape في chrome وذلك لأن النص لن يصل أبداً حتى النصف السفلي من الدوائر.
</p>

<h2>
	دعم ميزة Querying feature
</h2>

<p>
	تشغيل ميزة feature query يتم من خلال إضافة سطر supports@ إلى التعليمات حيث نستطيع من خلال هذه الطريقة معرفة المتصفحات التي لاتدعم الأشكال العائمة التي أضفناها فتقوم تعليمة support@ بتعديل الهوامش إلى 33% كما أنها تقلل هذه الهوامش في حال كانت المتصفحات تستطيع التعامل مع هذه الأشكال، ويتم هذا من خلال إضافة تعليمات:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_2682_15" style="">
<span class="pun">.</span><span class="pln">complex</span><span class="pun">-</span><span class="pln">content div</span><span class="pun">:</span><span class="pln">nth</span><span class="pun">-</span><span class="pln">child</span><span class="pun">(</span><span class="pln">even</span><span class="pun">):</span><span class="kwd">not</span><span class="pun">(:</span><span class="kwd">last</span><span class="pun">-</span><span class="pln">child</span><span class="pun">)</span><span class="pln"> p </span><span class="pun">{</span><span class="pln">
    margin</span><span class="pun">-</span><span class="pln">right</span><span class="pun">:</span><span class="pln"> </span><span class="lit">33</span><span class="pun">%;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
</span><span class="pun">.</span><span class="pln">complex</span><span class="pun">-</span><span class="pln">content div</span><span class="pun">:</span><span class="pln">nth</span><span class="pun">-</span><span class="pln">child</span><span class="pun">(</span><span class="pln">odd</span><span class="pun">):</span><span class="kwd">not</span><span class="pun">(:</span><span class="kwd">last</span><span class="pun">-</span><span class="pln">child</span><span class="pun">)</span><span class="pln"> p </span><span class="pun">{</span><span class="pln">
    margin</span><span class="pun">-</span><span class="pln">left</span><span class="pun">:</span><span class="pln"> </span><span class="lit">33</span><span class="pun">%;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

</span><span class="lit">@supports</span><span class="pln"> </span><span class="pun">(</span><span class="pln">shape</span><span class="pun">-</span><span class="pln">outside</span><span class="pun">:</span><span class="pln"> circle</span><span class="pun">())</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
    </span><span class="pun">.</span><span class="pln">complex</span><span class="pun">-</span><span class="pln">content div</span><span class="pun">:</span><span class="pln">nth</span><span class="pun">-</span><span class="pln">child</span><span class="pun">(</span><span class="pln">even</span><span class="pun">):</span><span class="kwd">not</span><span class="pun">(:</span><span class="kwd">last</span><span class="pun">-</span><span class="pln">child</span><span class="pun">)</span><span class="pln"> p </span><span class="pun">{</span><span class="pln">
        margin</span><span class="pun">-</span><span class="pln">right</span><span class="pun">:</span><span class="pln"> </span><span class="lit">20</span><span class="pun">%;</span><span class="pln">
    </span><span class="pun">}</span><span class="pln">
    </span><span class="pun">.</span><span class="pln">complex</span><span class="pun">-</span><span class="pln">content div</span><span class="pun">:</span><span class="pln">nth</span><span class="pun">-</span><span class="pln">child</span><span class="pun">(</span><span class="pln">odd</span><span class="pun">):</span><span class="kwd">not</span><span class="pun">(:</span><span class="kwd">last</span><span class="pun">-</span><span class="pln">child</span><span class="pun">)</span><span class="pln"> p </span><span class="pun">{</span><span class="pln">
        margin</span><span class="pun">-</span><span class="pln">left</span><span class="pun">:</span><span class="pln"> </span><span class="lit">20</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 style="text-align: center;">
	<span style="color:#7f8c8d;">في الفيديو الأول طريقة العرض في متصفح chrome</span>
</p>

<p style="text-align: center;">
	<a data-fileid="26616" href="https://academy.hsoub.com/applications/core/interface/file/attachment.php?id=26616" rel="">تحميل الفيديو الأول</a>
</p>

<p style="text-align: center;">
	<span style="color:#7f8c8d;">والفيديو الثاني يظهر طريقة العرض في متصفح firefox الذي لايدعم الأشكال العائمة</span>
</p>

<p style="text-align: center;">
	<a data-fileid="26615" href="https://academy.hsoub.com/applications/core/interface/file/attachment.php?id=26615" rel="">تحميل الفيديو الثاني</a>
</p>

<p>
	بالأخير إنها نعمة وجود ميزة مثل feature queries تسمح للمتصفحات مثل firefox و MS Edge الحصول على دعم لإظهار الأشكال العائمة. ومع أنه لايوجد تحسينات قريبة للمتصفحات ولكن يتم العمل بشكل دائم على إدخال التحسينات على CSS نفسها بحيث سيصبح شعارها قريبًا "صمم وانسى"، كما يمكن القول بأن التعديل الأساسي في CSS هو طريقة التعامل مع الأشكال وتحسين عمليه استجابتها من دول وجود الدعم الكافي في المتصفحات لها.
</p>

<p>
	 
</p>

<p>
	ترجمة –وبتصرّف- للمقال<a href="http://alistapart.com/article/redesign-with-css-shapes" rel="external nofollow"> A Redesign with CSS Shapes</a> لصاحبه Eric Meyer
</p>
]]></description><guid isPermaLink="false">606</guid><pubDate>Sat, 03 Feb 2018 11:14:06 +0000</pubDate></item><item><title>&#x646;&#x628;&#x630;&#x629; &#x639;&#x646; &#x627;&#x644;&#x637;&#x631;&#x642; &#x627;&#x644;&#x62C;&#x62F;&#x64A;&#x62F;&#x629; &#x641;&#x64A; &#x62A;&#x635;&#x645;&#x64A;&#x645; &#x635;&#x641;&#x62D;&#x627;&#x62A; CSS</title><link>https://academy.hsoub.com/programming/css/%D9%86%D8%A8%D8%B0%D8%A9-%D8%B9%D9%86-%D8%A7%D9%84%D8%B7%D8%B1%D9%82-%D8%A7%D9%84%D8%AC%D8%AF%D9%8A%D8%AF%D8%A9-%D9%81%D9%8A-%D8%AA%D8%B5%D9%85%D9%8A%D9%85-%D8%B5%D9%81%D8%AD%D8%A7%D8%AA-css-r605/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2018_01/5a6590a832979_07(1).png.e4e4bfc5c0b014d923926b7110329bd4.png" /></p>

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

<p>
	سنبدأ أولًا بتطبيق مثال نقوم فيه ببناء ثلاثة أعمدة ضمن الشبكة، من خلال بناء div يحمل اسم الصف example ونضيف فيه قائمة غير مرقمة ul اسم الصف الخاص بها cards ونضيف بداخلها عناصر من خلال الوسم li كل عنصر هو عبارة عن بطاقة card من البطاقات التي سننظم عرضها بمخطط شبكي grid layout على الشاشة
</p>

<p style="text-align: center;">
	<img alt="01.JPG" class="ipsImage ipsImage_thumbnailed" data-fileid="26602" data-unique="03otq6h1t" src="https://academy.hsoub.com/uploads/monthly_2018_01/01.JPG.68c4c678b16fc498c5af160d405908fe.JPG"></p>

<p style="text-align: center;">
	(<a href="https://github.com/abookapart/new-css-layout-code/blob/master/chapter3/grid-basics.html" rel="external nofollow">كود المثال على GitHub</a>)
</p>

<p>
	لوضع البطاقات الخمسة ضمن الشبكة السابقة سنضيف مجموعة من تعليمات css للصف cards الذي يحوي البطاقات الخمسة:
</p>

<ul>
<li>
		نضيف خاصية الشبكة لطريقة عرض الحاوية container من خلال التعليمة display:grid.
	</li>
	<li>
		لبناء ثلاثة أعمدة متساوية في العرض نضيف الخاصية grid-template-columns، وهنا سنستعرض وحدة جديدة يمكن استخدامها عند إنشاء الشبكة تسمى وحدة الطول المرن flexible-length unit ونشير إليها بـ fr حيث تمثل أجزاء الفراغ الموجود في الحاوية.
	</li>
</ul>
<p>
	في هذا المثال سنقسم الفراغ إلى ثلاثة أعمدة متساوية لذلك نضع 3 أجزاء fr قيمة كل واحد منها 1 والتي تعني تقسيم الفراغ إلى ثلاثة أجزاء متساوية.
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_5051_14" style="">
<span class="pun">.</span><span class="pln">cards </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="pun">-</span><span class="lit">10px</span><span class="pun">;</span><span class="pln">
	display</span><span class="pun">:</span><span class="pln"> grid</span><span class="pun">;</span><span class="pln">
	grid</span><span class="pun">-</span><span class="kwd">template</span><span class="pun">-</span><span class="pln">columns</span><span class="pun">:</span><span class="pln"> </span><span class="lit">1fr</span><span class="pln"> </span><span class="lit">1fr</span><span class="pln"> </span><span class="lit">1fr</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></pre>

<p style="text-align: center;">
	(<a href="https://github.com/abookapart/new-css-layout-code/blob/master/chapter3/grid-basics-gaps.html" rel="external nofollow">كود المثال على GitHub</a>)
</p>

<p>
	وهذا كل مانحتاجه للحصول على ابن للحاوية يظهر بشكل شبكي، فعلى عكس طريقة بناء flexbox لانحتاج هنا إلى أي قواعد أخرى لإضافتها لخلايا الأبناء المكونة للشبكة حيث تقوم جميع الخلايا بوراثة كل خصائص الأب مباشرة. كما نرى فالعناصر ضمن الشبكة تشكل تصميم متماسك لايحتاج إلى أي تعديلات في عرضهم وبذلك نكون قد وجدنا حلًا لأحد المشاكل التي كانت تظهر لدينا في تصميم flexbox grid باستخدام الخصائص المعرفة للشبكة. الآن في حال أردنا إضافة فجوات بين العناصر المرنة داخل الشبكة في المثال السابق يمكن إضافة هوامش بين العناصر ولكن نحتاج أيضا لإضافة هوامش سلبية لحاوية الشبكة من أجل تصحيح الهوامش على اليمين واليسار غير المرغوب بها. في التصميم الشبكي لـ CSS يوجد خاصية تسمى grid-gap يمكن إضافتها من أجل إعطاء هوامش للعناصر داخل الشبكة. وهي تعبر عن خاصيتين في داخلها هما grid-columns-gap و grid-row-gap التي يمكن أيضًا إعطاؤهما قيم بشكل فردي في حال أردنا الهوامش بين الأعمدة والأسطر مختلفة.
</p>

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

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_5051_16" style="">
<span class="pun">.</span><span class="pln">cards </span><span class="pun">{</span><span class="pln">
	display</span><span class="pun">:</span><span class="pln"> grid</span><span class="pun">;</span><span class="pln">
	grid</span><span class="pun">-</span><span class="kwd">template</span><span class="pun">-</span><span class="pln">columns</span><span class="pun">:</span><span class="pln"> </span><span class="lit">1fr</span><span class="pln"> </span><span class="lit">1fr</span><span class="pln"> </span><span class="lit">1fr</span><span class="pun">;</span><span class="pln">
	grid</span><span class="pun">-</span><span class="pln">gap</span><span class="pun">:</span><span class="pln"> </span><span class="lit">20px</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	<strong>ملاحظة:</strong> بمجرد  طباعة الكتاب الذي تم اقتباس هذا المقال منه، قامت إحدى مجموعات العمل على CSS بتغيير اسم الخصائص المتعلقة بـ grid-gap حيث سيتم تغيير اسم خاصية grid-column-gap إلى column-gap وخاصية grid-row-gap  إلى row-gap أما خاصية grid-gap التي تجمع بين الخاصيتين السابقتين ستتغير إلى gap.
</p>

<p>
	بالإضافة إلى أنه سيتم تغيير تعريف الخصائص التي تحدد  أبعاد مخطط المربع الإظهار box alignment وبالتالي يمكن دعم وجود فجوات داخل flexbox كما في الشبكة. ولأن المتصفحات قد تم تحميلها بهذه الخصائص، لذلك سيتم تغيير اسم الخصائص ذات الشكل grid-* إلى الشكل الجديد بالمستقبل القريب.
</p>

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

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_5051_19" style="">
<span class="pun">.</span><span class="pln">cards </span><span class="pun">{</span><span class="pln">
	display</span><span class="pun">:</span><span class="pln"> grid</span><span class="pun">;</span><span class="pln">
	grid</span><span class="pun">-</span><span class="kwd">template</span><span class="pun">-</span><span class="pln">columns</span><span class="pun">:</span><span class="pln"> </span><span class="lit">1fr</span><span class="pln"> </span><span class="lit">1fr</span><span class="pln"> </span><span class="lit">1fr</span><span class="pun">;</span><span class="pln">
	grid</span><span class="pun">-</span><span class="pln">gap</span><span class="pun">:</span><span class="pln"> </span><span class="lit">20px</span><span class="pun">;</span><span class="pln">
	gap</span><span class="pun">:</span><span class="pln"> </span><span class="lit">20px</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></pre>

<h2>
	طريقة توضع العناصر حول الشبكة
</h2>

<p>
	نستطيع الوصول إلى مستويات أكثر تطورًا في طريقة توزيع العناصر ضمن الشبكة مما كان مسموحًا في flexbox من خلال الاستفادة من ميزات الشبكة ثنائية الأبعاد وطريقة توضع العناصر داخلها. الطريقة الأكثر الأساسية هي استخدام أرقام الأسطر.  حيث أنه تم ترقيم أسطر وأعمدة الشبكة ورقم البداية هو 1، حيث أن بداية الترقيم تكون حسب اتجاه الكتابة في المستند فعندما يكون العمل داخل الصفحة باللغة الانجلزية مثلًا أي توضع الكتابة من اليسار إلى اليمين LTR عندها العمود رقم 1 هو العمود الموجود في الجهة اليسرى والسطر رقم 1 هو السطر الموجود في الأعلى. أما عندما تكون الكتابة من اليمين إلى اليسار RTL كما في اللغة العربية عندها سيكون العمود رقم 1 هو العمود الموجود في يمين الشبكة. كما ستكون أقصى زاوية في الشبكة (الزاوية اليمينة في اللغات التي يكون اتجاه الكتابة فيها LTR والزاوية اليسارية في اللغات التي اتجاهها RTL) ممثلة بالرقم 1- .
</p>

<p>
	لتوضيح هذه الطريقة سنقوم إضافة اسم صف إلى كل عنصر li داخل مستند Html يمثل رقم البطاقة card1, card2… ثم داخل ملف css سنغير خصائص كل صف لتصبح بالشكل.
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_5051_21" style="">
<span class="pun">.</span><span class="pln">cards </span><span class="pun">{</span><span class="pln">
	display</span><span class="pun">:</span><span class="pln"> grid</span><span class="pun">;</span><span class="pln">
	grid</span><span class="pun">-</span><span class="kwd">template</span><span class="pun">-</span><span class="pln">columns</span><span class="pun">:</span><span class="pln"> </span><span class="lit">1fr</span><span class="pln"> </span><span class="lit">1fr</span><span class="pln"> </span><span class="lit">1fr</span><span class="pun">;</span><span class="pln">
	grid</span><span class="pun">-</span><span class="pln">gap</span><span class="pun">:</span><span class="pln"> </span><span class="lit">20px</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
</span><span class="pun">.</span><span class="pln">card1 </span><span class="pun">{</span><span class="pln">
	grid</span><span class="pun">-</span><span class="pln">column</span><span class="pun">:</span><span class="pln"> </span><span class="lit">1</span><span class="pln"> </span><span class="pun">/</span><span class="pln"> </span><span class="lit">3</span><span class="pun">;</span><span class="pln">
	grid</span><span class="pun">-</span><span class="pln">row</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">
</span><span class="pun">.</span><span class="pln">card2 </span><span class="pun">{</span><span class="pln">
	grid</span><span class="pun">-</span><span class="pln">column</span><span class="pun">:</span><span class="pln"> </span><span class="lit">3</span><span class="pun">;</span><span class="pln">
	grid</span><span class="pun">-</span><span class="pln">row</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">
</span><span class="pun">.</span><span class="pln">card3 </span><span class="pun">{</span><span class="pln">
	grid</span><span class="pun">-</span><span class="pln">column</span><span class="pun">:</span><span class="pln"> </span><span class="lit">1</span><span class="pun">;</span><span class="pln">
	grid</span><span class="pun">-</span><span class="pln">row</span><span class="pun">:</span><span class="pln"> </span><span class="lit">2</span><span class="pln"> </span><span class="pun">/</span><span class="pln"> </span><span class="lit">4</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
</span><span class="pun">.</span><span class="pln">card4 </span><span class="pun">{</span><span class="pln">
	grid</span><span class="pun">-</span><span class="pln">column</span><span class="pun">:</span><span class="pln"> </span><span class="lit">2</span><span class="pln"> </span><span class="pun">/</span><span class="pln"> </span><span class="lit">4</span><span class="pun">;</span><span class="pln">
	grid</span><span class="pun">-</span><span class="pln">row</span><span class="pun">:</span><span class="pln"> </span><span class="lit">2</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
</span><span class="pun">.</span><span class="pln">card5 </span><span class="pun">{</span><span class="pln">
	grid</span><span class="pun">-</span><span class="pln">column</span><span class="pun">:</span><span class="pln"> </span><span class="lit">2</span><span class="pln"> </span><span class="pun">/</span><span class="pln"> </span><span class="lit">4</span><span class="pun">;</span><span class="pln">
	grid</span><span class="pun">-</span><span class="pln">row</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></pre>

<p style="text-align: center;">
	(<a href="https://github.com/abookapart/new-css-layout-code/blob/master/chapter3/grid-basics-lines.html" rel="external nofollow">كود المثال على GitHub</a>)
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="26603" href="https://academy.hsoub.com/uploads/monthly_2018_01/02.JPG.7050f84543542ab996e32d1bc6217a92.JPG" rel=""><img alt="02.JPG" class="ipsImage ipsImage_thumbnailed" data-fileid="26603" data-unique="nhm2yk98m" src="https://academy.hsoub.com/uploads/monthly_2018_01/02.thumb.JPG.ecbd108d7d5a020d99aa80631d8c787d.JPG"></a>
</p>

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

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="26604" href="https://academy.hsoub.com/uploads/monthly_2018_01/03.JPG.6b8e23f03cef0b25bdc4b0a0953ccde8.JPG" rel=""><img alt="03.JPG" class="ipsImage ipsImage_thumbnailed" data-fileid="26604" data-unique="g9hmt29sv" src="https://academy.hsoub.com/uploads/monthly_2018_01/03.thumb.JPG.c60752d8b289823d94faf44cd6e1df07.JPG"></a>
</p>

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

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_5051_24" style="">
<span class="pun">.</span><span class="pln">card1 </span><span class="pun">{</span><span class="pln"> grid</span><span class="pun">-</span><span class="pln">area</span><span class="pun">:</span><span class="pln"> a</span><span class="pun">;</span><span class="pln"> </span><span class="pun">}</span><span class="pln">
</span><span class="pun">.</span><span class="pln">card2 </span><span class="pun">{</span><span class="pln"> grid</span><span class="pun">-</span><span class="pln">area</span><span class="pun">:</span><span class="pln"> b</span><span class="pun">;</span><span class="pln"> </span><span class="pun">}</span><span class="pln">
</span><span class="pun">.</span><span class="pln">card3 </span><span class="pun">{</span><span class="pln"> grid</span><span class="pun">-</span><span class="pln">area</span><span class="pun">:</span><span class="pln"> c</span><span class="pun">;</span><span class="pln"> </span><span class="pun">}</span><span class="pln">
</span><span class="pun">.</span><span class="pln">card4 </span><span class="pun">{</span><span class="pln"> grid</span><span class="pun">-</span><span class="pln">area</span><span class="pun">:</span><span class="pln"> d</span><span class="pun">;</span><span class="pln"> </span><span class="pun">}</span><span class="pln">
</span><span class="pun">.</span><span class="pln">card5 </span><span class="pun">{</span><span class="pln"> grid</span><span class="pun">-</span><span class="pln">area</span><span class="pun">:</span><span class="pln"> e</span><span class="pun">;</span><span class="pln"> </span><span class="pun">}</span></pre>

<p>
	ثم نضيف الخاصية grid-template-areas إلى الحاوية للشبكة cards بحيث توصف القيمة المعطاة لهذه الخاصية كيفية توضع العناصر ضمن المخطط فمثلا في حال وصفنا التوضع بالشكل.
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_5051_26" style="">
<span class="pun">.</span><span class="pln">cards </span><span class="pun">{</span><span class="pln">
	display</span><span class="pun">:</span><span class="pln"> grid</span><span class="pun">;</span><span class="pln">
	grid</span><span class="pun">-</span><span class="kwd">template</span><span class="pun">-</span><span class="pln">columns</span><span class="pun">:</span><span class="pln"> </span><span class="lit">1fr</span><span class="pln"> </span><span class="lit">1fr</span><span class="pln"> </span><span class="lit">1fr</span><span class="pun">;</span><span class="pln">
	grid</span><span class="pun">-</span><span class="pln">gap</span><span class="pun">:</span><span class="pln"> </span><span class="lit">20px</span><span class="pun">;</span><span class="pln">
	grid</span><span class="pun">-</span><span class="kwd">template</span><span class="pun">-</span><span class="pln">areas</span><span class="pun">:</span><span class="pln">
		</span><span class="str">"a a b"</span><span class="pln">
		</span><span class="str">"c d d"</span><span class="pln">
		</span><span class="str">"c e e"</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></pre>

<p style="text-align: center;">
	(<a href="https://github.com/abookapart/new-css-layout-code/blob/master/chapter3/grid-basics-areas.html" rel="external nofollow">كود المثال على GitHub</a>)
</p>

<p>
	سيظهر لدينا ترتيب البطاقات ضمن الشبكة بالشكل.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="26606" href="https://academy.hsoub.com/uploads/monthly_2018_01/04.JPG.500740f3d0be58ea92750629c694daff.JPG" rel=""><img alt="04.JPG" class="ipsImage ipsImage_thumbnailed" data-fileid="26606" data-unique="v9ykxxx3w" src="https://academy.hsoub.com/uploads/monthly_2018_01/04.thumb.JPG.2e59216a8d3deb3e15917e82e1b0bad7.JPG"></a>
</p>

<p>
	ولكن هناك بعض الملاحظات من المهم تذكرها حول خاصية grid-template-areas وهي:
</p>

<ul>
<li>
		في حال أردنا أن نمدد البطاقة على مساحة أكثر من خلية نقوم بتكرار اسم المنطقة، مثلًا تمتد البطاقة الأولى card1 على مساحة عمودين لذلك قمنا بتكرار المنطقة a مرتين حيث أن شكل المنطقة هو مستطيل (لا نستطيع إلى الآن بناء منطقة على شكل حرف L).
	</li>
	<li>
		لترك مساحات فارغة يتوجب علينا ترك مكان الخلية فارغًا، ويتم ذلك من خلال استخدام محرف النقطة "." مثلًا إذا استبدلنا أول c بنقطة عندها ستبقى خلية فارغة في المخطط.
	</li>
</ul>
<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_5051_29" style="">
<span class="pun">.</span><span class="pln">cards </span><span class="pun">{</span><span class="pln">
	display</span><span class="pun">:</span><span class="pln"> grid</span><span class="pun">;</span><span class="pln">
	grid</span><span class="pun">-</span><span class="kwd">template</span><span class="pun">-</span><span class="pln">columns</span><span class="pun">:</span><span class="pln"> </span><span class="lit">1fr</span><span class="pln"> </span><span class="lit">1fr</span><span class="pln"> </span><span class="lit">1fr</span><span class="pun">;</span><span class="pln">
	grid</span><span class="pun">-</span><span class="pln">gap</span><span class="pun">:</span><span class="pln"> </span><span class="lit">20px</span><span class="pun">;</span><span class="pln">
	grid</span><span class="pun">-</span><span class="kwd">template</span><span class="pun">-</span><span class="pln">areas</span><span class="pun">:</span><span class="pln">
		</span><span class="str">"a a b"</span><span class="pln">
		</span><span class="str">". d d"</span><span class="pln">
		</span><span class="str">"c e e"</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></pre>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="26605" href="https://academy.hsoub.com/uploads/monthly_2018_01/05.JPG.f5434891e701ba9e90a9404ba33471d6.JPG" rel=""><img alt="05.JPG" class="ipsImage ipsImage_thumbnailed" data-fileid="26605" data-unique="ivw3ut1w5" src="https://academy.hsoub.com/uploads/monthly_2018_01/05.thumb.JPG.afddda37496b4f16aca8485a2ffd71b7.JPG"></a>
</p>

<p>
	يمكنك تسمية المناطق بأكثر من محرف في حال كان عدد الأسطر كبير مثلًا كما أنه يمكن أن تمثل الخلية الفارغة بأكثر من نقطة ".." بشرط ألا يفصل بين المحارف أي فراغ. 
</p>

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

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

<p>
	ترجمة للمقال <a href="https://alistapart.com/article/the-new-css-layout-excerpt" rel="external nofollow">The New CSS Layout, An Excerpt</a>  للكاتبة Rachel Andrew
</p>
]]></description><guid isPermaLink="false">605</guid><pubDate>Sat, 03 Feb 2018 11:26:20 +0000</pubDate></item><item><title>&#x627;&#x644;&#x639;&#x644;&#x627;&#x642;&#x629; &#x628;&#x64A;&#x646; &#x627;&#x644;&#x62E;&#x637;&#x627;&#x637;&#x629; &#x627;&#x644;&#x634;&#x628;&#x643;&#x64A;&#x629; Grid Layout &#x648;&#x628;&#x64A;&#x646; &#x637;&#x631;&#x642; &#x627;&#x644;&#x62A;&#x62E;&#x637;&#x64A;&#x637; &#x627;&#x644;&#x623;&#x62E;&#x631;&#x649;</title><link>https://academy.hsoub.com/programming/css/%D8%A7%D9%84%D8%B9%D9%84%D8%A7%D9%82%D8%A9-%D8%A8%D9%8A%D9%86-%D8%A7%D9%84%D8%AE%D8%B7%D8%A7%D8%B7%D8%A9-%D8%A7%D9%84%D8%B4%D8%A8%D9%83%D9%8A%D8%A9-grid-layout-%D9%88%D8%A8%D9%8A%D9%86-%D8%B7%D8%B1%D9%82-%D8%A7%D9%84%D8%AA%D8%AE%D8%B7%D9%8A%D8%B7-%D8%A7%D9%84%D8%A3%D8%AE%D8%B1%D9%89-r619/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2018_02/5a81abe2424a2_14-2(1).png.d53fd4cd1558d0ed22b47d7f9cdd1d99.png" /></p>

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

<h2>
	Grid و flexbox
</h2>

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

<h2 id="الخطاطة-أحاديّة-البعدvs--الخطاطة-ثنائية-البعد">
	الخطاطة أحاديّة البعد vs الخطاطة ثنائية البعد
</h2>

<p>
	سنستخدم مثال بسيط يمكن أن يُوضّح الفرق بين الخطاطة أحادية البعد أو ثنائية الأبعاد.<br>
	في المثال الأول، سنستخدم flexbox لنَظم مجموعة من المربّعات. سيكون لدينا خمسة أبناء في الوعاء container، وسنُعيّن للخاصيّةflex قيمًا بحيث يمكنها أن تنبسط وتنقبض في حدود هامش 200 بكسل. كما سنحدّد للخاصّية <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/flex-wrap" rel="external nofollow">flex-wrap</a> القيمةwrap ، بحيث إذا صارت المساحة في الوعاء أضيق من أن تستوعب المرونة الأساسيّة flex basis، فسيتمّ وضع العناصر في صفّ جديد.
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_5763_7" style="">
<span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"wrapper"</span><span class="tag">&gt;</span><span class="pln">
  </span><span class="tag">&lt;div&gt;</span><span class="pln">One</span><span class="tag">&lt;/div&gt;</span><span class="pln">
  </span><span class="tag">&lt;div&gt;</span><span class="pln">Two</span><span class="tag">&lt;/div&gt;</span><span class="pln">
  </span><span class="tag">&lt;div&gt;</span><span class="pln">Three</span><span class="tag">&lt;/div&gt;</span><span class="pln">
  </span><span class="tag">&lt;div&gt;</span><span class="pln">Four</span><span class="tag">&lt;/div&gt;</span><span class="pln">
  </span><span class="tag">&lt;div&gt;</span><span class="pln">Five</span><span class="tag">&lt;/div&gt;</span><span class="pln">
</span><span class="tag">&lt;/div&gt;</span></pre>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_5763_9" style="">
<span class="pun">.</span><span class="pln">wrapper </span><span class="pun">{</span><span class="pln">
  display</span><span class="pun">:</span><span class="pln"> flex</span><span class="pun">;</span><span class="pln">
  flex</span><span class="pun">-</span><span class="pln">wrap</span><span class="pun">:</span><span class="pln"> wrap</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
</span><span class="pun">.</span><span class="pln">wrapper </span><span class="pun">&gt;</span><span class="pln"> div </span><span class="pun">{</span><span class="pln">
  flex</span><span class="pun">:</span><span class="pln"> </span><span class="lit">1</span><span class="pln"> </span><span class="lit">1</span><span class="pln"> </span><span class="lit">200px</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></pre>

<p style="text-align: center;">
	<img alt="a01.png" class="ipsImage ipsImage_thumbnailed" data-fileid="26993" data-unique="efga8wu88" src="https://academy.hsoub.com/uploads/monthly_2018_02/a01.png.88315c8f32805a65b922b39751677788.png"></p>

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

<h2 id="نفس-الخطاطة-لكن-مع-شبكات-css">
	نفس الخطاطة لكن مع شبكات CSS
</h2>

<p>
	في هذا المثال، سنُنشئ نفس الخطاطة باستخدام الشّبكة. هذه المرة لدينا ثلاثة مدارج للأعمدة column tracks. لسنا بحاجة لوضع أي شيء للعناصر نفسها. حيث سينتظمون تلقائيا واحد في كل خلية من الشّبكة التي تم إنشاؤها. وكما هو واضح فقد بقيت في شبكة صارمة strict grid، حيث يصطفّون في صفوف وأعمدة. ومع وجود خمسة عناصر، فستكون هناك فجوة في نهاية الصف 2.
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_5763_11" style="">
<span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"wrapper"</span><span class="tag">&gt;</span><span class="pln">
  </span><span class="tag">&lt;div&gt;</span><span class="pln">One</span><span class="tag">&lt;/div&gt;</span><span class="pln">
  </span><span class="tag">&lt;div&gt;</span><span class="pln">Two</span><span class="tag">&lt;/div&gt;</span><span class="pln">
  </span><span class="tag">&lt;div&gt;</span><span class="pln">Three</span><span class="tag">&lt;/div&gt;</span><span class="pln">
  </span><span class="tag">&lt;div&gt;</span><span class="pln">Four</span><span class="tag">&lt;/div&gt;</span><span class="pln">
  </span><span class="tag">&lt;div&gt;</span><span class="pln">Five</span><span class="tag">&lt;/div&gt;</span><span class="pln">
</span><span class="tag">&lt;/div&gt;</span></pre>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_5763_13" style="">
<span class="pun">.</span><span class="pln">wrapper </span><span class="pun">{</span><span class="pln">
  display</span><span class="pun">:</span><span class="pln"> grid</span><span class="pun">;</span><span class="pln">
  grid</span><span class="pun">-</span><span class="kwd">template</span><span class="pun">-</span><span class="pln">columns</span><span class="pun">:</span><span class="pln"> repeat</span><span class="pun">(</span><span class="lit">3</span><span class="pun">،</span><span class="pln"> </span><span class="lit">1fr</span><span class="pun">);</span><span class="pln">
</span><span class="pun">}</span></pre>

<p style="text-align: center;">
	<img alt="a02.png" class="ipsImage ipsImage_thumbnailed" data-fileid="26994" data-unique="z2dx6qosl" src="https://academy.hsoub.com/uploads/monthly_2018_02/a02.png.3f7b97eb66c9b18e9ee453cb41cbd0ec.png"></p>

<p>
	سؤال بسيط يجب أن تسأله عند المفاضلة بين الشّبكة و flexbox وهو:
</p>

<ul>
<li>
		هل أنا بحاجة فقط لضبط الخطاطة على صعيد الصّفوف وحدها أو الأعمدة وحدها – استخدم إذًا flexbox
	</li>
	<li>
		هل أحتاج لضبط الخطاطة على صعيد الصفوف والأعمدة معًا – استخدم إذًا الشّبكة
	</li>
</ul>
<h2 id="محتوى-خارجيّ-أم-خطاطة-داخليّة؟">
	محتوى خارجيّ أم خطاطة داخليّة؟
</h2>

<p>
	بالإضافة إلى مسألة التفريق بين البعد الواحد والأبعاد الثّنائية، هناك طريقة أخرى لتقرّر ما إذا كان عليك استخدام flexbox أو الشّبكة لأجل التخطيط. يتكيّف flexbox مع حجم المحتوى. فمن الحالات المثالية لاستخدام flexbox هي عندما يكون لديك مجموعة من العناصر التي تريد توزيعها بالتساوي في الوعاء. بحيث يتمّ تحديد المساحة التي سيشغلها كل عنصر على حسب حجم المحتوى. وإذا انتظمت العناصر في سطر جديد، فستتوزع على أساس أحجامها والمساحة المتاحة في ذلك السّطر.<br>
	الشّبكة تعمل في الاتجاه الداخلي للخطاطة layout in، فعند استخدام خطاطة CSS الشّبكيّة يتمّ إنشاء خطاطة ثم توضع العناصر فيها، وفي حال استخدام قواعد auto-placement ستوضع العناصر في خلايا الشّبكة وفقا للشّبكة الصارمة strict grid. هناك إمكانيّة لإنشاء مدارج tracks تتكيّف مع حجم المحتوى، ولكنّها ستغيّر أيضا كامل المدرج.<br>
	إذا كنت تستخدم flexbox وتشعر أنّك تفتقد بعض المرونة، فربّما عليك استخدام خطاطة CSS الشّبكيّة. على سبيل المثال إذا حدّدت عرض width عنصر مرن (flex item) بنسبة مئوية لجعله يصطف مع العناصر الأخرى في الصّف الأعلى. في هذه الحالة، فمن المحتمل أن يكون استخدام الشّبكة خيارًا أفضل لك.
</p>

<h2 id="محاذاة-المربّع-box-alignment">
	محاذاة المربّع Box alignment
</h2>

<p>
	لعلّ من أكثر سمات flexbox إثارة هي أنه مكّننا لأول مرة من التحكم في المحاذاة بشكل صحيح. فقد جعل من السهل توسيط مربع على الصفحة. ويمكن للعناصر المرنة الامتداد على كامل ارتفاع الوعاء، وهذا يعني أنّه صار من الممكن الحصول على أعمدة متساوية الارتفاع. وهي أشياء كنّا نريد القيام به منذ فترة طويلة جدا، كما أنها جاءت مرفقة بجميع أنواع الحيل لمساعدتنا على خلق التأثير البصري الذي نريد.<br>
	خصائص المحاذاة المحدّدة في المواصفات القياسيّة specification لـ flexbox قد تمّ إضافتها إلى مواصفات قياسيّة جديدة تسمّى <a href="https://drafts.csswg.org/css-align/" rel="external nofollow">Box Alignment Level 3</a> . وهذا يعني أنّه يمكن استخدامها في مواصفات قياسيّة أخرى، بما في ذلك الخُطاطة الشّبكيّة. وفي المستقبل، قد تنطبق أيضًا على أساليب التخطيط الأخرى. إليك الآن مثالًا بسيطًا لمقارنة flexbox والشّبكة.<br>
	في المثال الأول، والذي يستخدم flexbox، لدينا وعاء يحتوي ثلاثة عناصر. تمّ تعيين خاصيّة <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/min-height" rel="external nofollow">min-height</a> للغلاف<code>wrapper</code> ، لتحديد ارتفاع الوعاء المرن <code>flex container</code>. سنعطي أيضا للخاصيّة <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/align-items" rel="external nofollow">align-items</a> الخاصّة بالوعاء المرن القيمة <code>flex-end</code>، وبالتالي فإن العناصر سوف تصطفّ في نهاية الوعاء. كما أنّنا أيضا سنحدد الخاصية <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/align-self" rel="external nofollow">align-self</a> لـ <code>box1</code> حتّى تستبدل السّلوك الافتراضي وتمتد على كامل ارتفاع الوعاء وعلى <code>box2</code> حتّى يصطفّ في بداية الوعاء المرن.
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_5763_15" style="">
<span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"wrapper"</span><span class="tag">&gt;</span><span class="pln">
  </span><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"box1"</span><span class="tag">&gt;</span><span class="pln">One</span><span class="tag">&lt;/div&gt;</span><span class="pln">
  </span><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"box2"</span><span class="tag">&gt;</span><span class="pln">Two</span><span class="tag">&lt;/div&gt;</span><span class="pln">
  </span><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"box3"</span><span class="tag">&gt;</span><span class="pln">Three</span><span class="tag">&lt;/div&gt;</span><span class="pln">
</span><span class="tag">&lt;/div&gt;</span></pre>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_5763_17" style="">
<span class="pun">.</span><span class="pln">wrapper </span><span class="pun">{</span><span class="pln">
  display</span><span class="pun">:</span><span class="pln"> flex</span><span class="pun">;</span><span class="pln">
  align</span><span class="pun">-</span><span class="pln">items</span><span class="pun">:</span><span class="pln"> flex</span><span class="pun">-</span><span class="kwd">end</span><span class="pun">;</span><span class="pln">
  min</span><span class="pun">-</span><span class="pln">height</span><span class="pun">:</span><span class="pln"> </span><span class="lit">200px</span><span class="pun">;</span><span class="pln"> 
</span><span class="pun">}</span><span class="pln">
</span><span class="pun">.</span><span class="pln">box1 </span><span class="pun">{</span><span class="pln">
  align</span><span class="pun">-</span><span class="kwd">self</span><span class="pun">:</span><span class="pln"> stretch</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
</span><span class="pun">.</span><span class="pln">box2 </span><span class="pun">{</span><span class="pln">
  align</span><span class="pun">-</span><span class="kwd">self</span><span class="pun">:</span><span class="pln"> flex</span><span class="pun">-</span><span class="pln">start</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></pre>

<p style="text-align: center;">
	<img alt="a03.png" class="ipsImage ipsImage_thumbnailed" data-fileid="26995" data-unique="1e41chjna" src="https://academy.hsoub.com/uploads/monthly_2018_02/a03.png.c7d3bf2d65b7641d534bfeeb5ac07ba9.png"></p>

<h2 id="المحاذاة-في-شبكات-css">
	المحاذاة في شبكات CSS
</h2>

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

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_5763_19" style="">
<span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"wrapper"</span><span class="tag">&gt;</span><span class="pln">
  </span><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"box1"</span><span class="tag">&gt;</span><span class="pln">One</span><span class="tag">&lt;/div&gt;</span><span class="pln">
  </span><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"box2"</span><span class="tag">&gt;</span><span class="pln">Two</span><span class="tag">&lt;/div&gt;</span><span class="pln">
  </span><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"box3"</span><span class="tag">&gt;</span><span class="pln">Three</span><span class="tag">&lt;/div&gt;</span><span class="pln">
</span><span class="tag">&lt;/div&gt;</span></pre>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_5763_21" style="">
<span class="pun">.</span><span class="pln">wrapper </span><span class="pun">{</span><span class="pln">
  display</span><span class="pun">:</span><span class="pln"> grid</span><span class="pun">;</span><span class="pln">
  grid</span><span class="pun">-</span><span class="kwd">template</span><span class="pun">-</span><span class="pln">columns</span><span class="pun">:</span><span class="pln"> repeat</span><span class="pun">(</span><span class="lit">3</span><span class="pun">،</span><span class="lit">1fr</span><span class="pun">);</span><span class="pln">
  align</span><span class="pun">-</span><span class="pln">items</span><span class="pun">:</span><span class="pln"> </span><span class="kwd">end</span><span class="pun">;</span><span class="pln">
  grid</span><span class="pun">-</span><span class="kwd">auto</span><span class="pun">-</span><span class="pln">rows</span><span class="pun">:</span><span class="pln"> </span><span class="lit">200px</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
</span><span class="pun">.</span><span class="pln">box1 </span><span class="pun">{</span><span class="pln">
  align</span><span class="pun">-</span><span class="kwd">self</span><span class="pun">:</span><span class="pln"> stretch</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
</span><span class="pun">.</span><span class="pln">box2 </span><span class="pun">{</span><span class="pln">
  align</span><span class="pun">-</span><span class="kwd">self</span><span class="pun">:</span><span class="pln"> start</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></pre>

<p style="text-align: center;">
	<img alt="a04.png" class="ipsImage ipsImage_thumbnailed" data-fileid="26996" data-unique="mcfwrhkid" src="https://academy.hsoub.com/uploads/monthly_2018_02/a04.png.e3ceec5d2a078dd3aa2003ab954bed7d.png"></p>

<h2 id="الوحدة-fr-و-flex-basis">
	الوحدة fr و flex-basis
</h2>

<p>
	لقد رأينا سابقا كيف نستخدم الوحدة<code>fr</code> لأجل تخصيص نسبة من المساحة المتوفرة في وعاء الشّبكة لأجل مدرج الشّبكة grid tracks. عندما تُستخدم الوحدة <code>fr</code> مع الدالّة <code><a href="https://developer.mozilla.org/en-US/docs/Web/CSSin/mmax" rel="external nofollow">()minmax</a> </code> فيمكن أن تعطينا سلوكًا مشابهًا جدًا للخاصيةflex في flexbox وفي الوقت نفسه تُمكّننا من إنشاء خطاطة في بعدين.<br>
	لو عدنا إلى المثال الذي أوضحنا فيه الفرق بين الخطاطات أحادية وثنائيّة الأبعاد، فيمكنك أن ترى أن هناك فرقا في الطريقة التي تتكيّف وتتجاوب بها الخطاطتان. فمع الخطاطة المرنة، إذا غيّرنا حجم النافذة توسيعًا وتصغيرًا، سيتكيّف flexbox بشكل جيد بتعديل عدد العناصر في كل صف وفقا للمساحة المتاحة. إن كان لدينا ما يكفي من المساحة فكل العناصر الخمسة ستنتظم في صف واحد، أمّا إن كان الوعاء ضيّقًا فقد لا نجد مساحة لأكثر من واحد.<br>
	على سبيل المقارنة، النسخة الشبكيّة دائما ما يكون لديها ثلاثة مدارج للأعمدة column tracks. والمدارج نفسها سوف تنبسط وتنقبض، ولكن ستكون هناك دائما ثلاثة أعمدة كما طلبنا عند تعريف الشّبكة.
</p>

<h2 id="الملء-التلقائي-لمدارج-الشّبكة-auto-filling-grid-tracks">
	الملء التلقائي لمدارج الشّبكة Auto-filling grid tracks
</h2>

<p>
	يمكننا خلق تأثير مماثل لـ flexbox، دون التفريط في إمكانيّة الحفاظ على المحتوى مرتبًا في صفوف وأعمدة صارمة، من خلال إنشاء تسلسل المدارج track listing باستخدام العبارةrepeat وخاصّيتي auto-fill و auto-fit.<br>
	في المثال التالي، سنستخدم auto-fill بدلًا من استخدام الأعداد الصحيحة في العبارة repeat وسنحدّد تسلسل المدارج track listing بـ 200 بكسل. وهذا يعني أن الشّبكة سوف تنشئ أكبر عدد من مدارج الأعمدة ذات 200 بكسل التي يمكن احتواؤها في الوعاء.
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_5763_23" style="">
<span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"wrapper"</span><span class="tag">&gt;</span><span class="pln">
  </span><span class="tag">&lt;div&gt;</span><span class="pln">One</span><span class="tag">&lt;/div&gt;</span><span class="pln">
  </span><span class="tag">&lt;div&gt;</span><span class="pln">Two</span><span class="tag">&lt;/div&gt;</span><span class="pln">
  </span><span class="tag">&lt;div&gt;</span><span class="pln">Three</span><span class="tag">&lt;/div&gt;</span><span class="pln">
</span><span class="tag">&lt;/div&gt;</span></pre>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_5763_25" style="">
<span class="pun">.</span><span class="pln">wrapper </span><span class="pun">{</span><span class="pln">
  display</span><span class="pun">:</span><span class="pln"> grid</span><span class="pun">;</span><span class="pln">
  grid</span><span class="pun">-</span><span class="kwd">template</span><span class="pun">-</span><span class="pln">columns</span><span class="pun">:</span><span class="pln"> repeat</span><span class="pun">(</span><span class="kwd">auto</span><span class="pun">-</span><span class="pln">fill</span><span class="pun">،</span><span class="pln"> </span><span class="lit">200px</span><span class="pun">);</span><span class="pln">
</span><span class="pun">}</span></pre>

<p style="text-align: center;">
	<img alt="a05.png" class="ipsImage ipsImage_thumbnailed" data-fileid="26997" data-unique="ebvaangdm" src="https://academy.hsoub.com/uploads/monthly_2018_02/a05.png.3bc9f6c253c789e332bf53c5f6509603.png"></p>

<h2 id="عدد-مرن-من-المدارج">
	عدد مرن من المدارج
</h2>

<p>
	الأمر هنا مختلف بعض الشيء عن flexbox. ففي مثال flexbox، كانت العناصر أكبر من 200 بكسل قبل التغليف wrapping. يمكننا تحقيق نفس الشّيء في الشّبكة من خلال الجمع بين <code>auto-fill</code> و <code><a href="https://developer.mozilla.org/en-US/docs/Web/CSSin/mmax" rel="external nofollow">()minmax</a></code> . في المثال التالي، سنُنشئ مدارج تُملأ تلقائيا بواسطة <code>minmax</code>. هدفنا أن نجعل الحدّ الأدنى لحجم المدارج لا يقلّ عن 200 بكسل، سنعيّن الحد الأقصى عند1fr . وبمجرّد أن يخمّن المتصفح كم “200 بكسل” سوف يتّسع لها الوعاء، مع احتساب فجوات الشبكة، فسوف يعتبر الحدّ الأقصى المحدّد 1fr كتعليمات لتوزيع المساحة المتبقية بين العناصر.
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_5763_27" style="">
<span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"wrapper"</span><span class="tag">&gt;</span><span class="pln">
  </span><span class="tag">&lt;div&gt;</span><span class="pln">One</span><span class="tag">&lt;/div&gt;</span><span class="pln">
  </span><span class="tag">&lt;div&gt;</span><span class="pln">Two</span><span class="tag">&lt;/div&gt;</span><span class="pln">
  </span><span class="tag">&lt;div&gt;</span><span class="pln">Three</span><span class="tag">&lt;/div&gt;</span><span class="pln">
</span><span class="tag">&lt;/div&gt;</span></pre>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_5763_29" style="">
<span class="pun">.</span><span class="pln">wrapper </span><span class="pun">{</span><span class="pln">
  display</span><span class="pun">:</span><span class="pln"> grid</span><span class="pun">;</span><span class="pln">
  grid</span><span class="pun">-</span><span class="kwd">template</span><span class="pun">-</span><span class="pln">columns</span><span class="pun">:</span><span class="pln"> repeat</span><span class="pun">(</span><span class="kwd">auto</span><span class="pun">-</span><span class="pln">fill</span><span class="pun">،</span><span class="pln"> minmax</span><span class="pun">(</span><span class="lit">200px</span><span class="pun">،</span><span class="pln"> </span><span class="lit">1fr</span><span class="pun">));</span><span class="pln">
</span><span class="pun">}</span></pre>

<p style="text-align: center;">
	<img alt="a06.png" class="ipsImage ipsImage_thumbnailed" data-fileid="26998" data-unique="j6ztlck7n" src="https://academy.hsoub.com/uploads/monthly_2018_02/a06.png.cd3b39e39c307caa3c52909394587e15.png"></p>

<p>
	لدينا الآن القدرة على إنشاء شبكة بعدد مرن من المدارج المرنة (flexible number of flexible tracks)، ولكن مع محاذاة العناصر التي وُضعت في الشّبكة في الصفوف والأعمدة.
</p>

<h2 id="الشّبكة-والعناصر-مُطلقة-التموضِع-grid-and-absolutely-positioned-elements">
	الشّبكة والعناصر مُطلقة التموضِع Grid and absolutely positioned elements
</h2>

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

<h2 id="وعاء-الشبكة-ككتلة-احتواء">
	وعاء الشبكة ككتلة احتواء
</h2>

<p>
	لجعل وعاء الشّبكة كتلة احتواء نحتاج إلى إعطاء القيمة relative للخاصيةposition الخاصّة بالوعاء، بالضّبط كما تفعل عادة لصنع كتلة احتواء لأيّ من العناصر الأخرى مُطلقة التموضع absolutely positioned. بعد فعل ذلك، إن حدّدنا لعنصر من الِشبكة <code>position: absolute</code> فإنه سيأخذ نفس الحجم الذي تأخذه كتلة الاحتواء الخاصّة بوعاء الشّبكة، أمّا في حال كان لهذا العنصر الخاصيّة <code>grid position</code>، فسيأخذ حيّز الشّبكة التي وُضع فيها.<br>
	في المثال أدناه لدينا غلاف يحتوي أربعة عناصر. العنصر الثالث مطلق التموضع وأيضا موضوع على الشّبكة باستخدام<code>line-based</code> placement. وعاء الشّبكة لديه <code>position: relative</code> وكذلك سياق التموضع <code>positioning context</code> لذلك العنصر.
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_5763_31" style="">
<span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"wrapper"</span><span class="tag">&gt;</span><span class="pln">
  </span><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"box1"</span><span class="tag">&gt;</span><span class="pln">One</span><span class="tag">&lt;/div&gt;</span><span class="pln">
  </span><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"box2"</span><span class="tag">&gt;</span><span class="pln">Two</span><span class="tag">&lt;/div&gt;</span><span class="pln">
  </span><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"box3"</span><span class="tag">&gt;</span><span class="pln">
   This block is absolutely positioned. In this example the grid container is the containing block and so the absolute positioning offset values are calculated in from the outer edges of the area it has been placed into.
  </span><span class="tag">&lt;/div&gt;</span><span class="pln">
  </span><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"box4"</span><span class="tag">&gt;</span><span class="pln">Four</span><span class="tag">&lt;/div&gt;</span><span class="pln">
</span><span class="tag">&lt;/div&gt;</span></pre>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_5763_33" style="">
<span class="pun">.</span><span class="pln">wrapper </span><span class="pun">{</span><span class="pln">
  display</span><span class="pun">:</span><span class="pln"> grid</span><span class="pun">;</span><span class="pln">
  grid</span><span class="pun">-</span><span class="kwd">template</span><span class="pun">-</span><span class="pln">columns</span><span class="pun">:</span><span class="pln"> repeat</span><span class="pun">(</span><span class="lit">4</span><span class="pun">،</span><span class="lit">1fr</span><span class="pun">);</span><span class="pln">
  grid</span><span class="pun">-</span><span class="kwd">auto</span><span class="pun">-</span><span class="pln">rows</span><span class="pun">:</span><span class="pln"> </span><span class="lit">200px</span><span class="pun">;</span><span class="pln">
  grid</span><span class="pun">-</span><span class="pln">gap</span><span class="pun">:</span><span class="pln"> </span><span class="lit">20px</span><span class="pun">;</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><span class="pln">box3 </span><span class="pun">{</span><span class="pln">
  grid</span><span class="pun">-</span><span class="pln">column</span><span class="pun">-</span><span class="pln">start</span><span class="pun">:</span><span class="pln"> </span><span class="lit">2</span><span class="pun">;</span><span class="pln">
  grid</span><span class="pun">-</span><span class="pln">column</span><span class="pun">-</span><span class="kwd">end</span><span class="pun">:</span><span class="pln"> </span><span class="lit">4</span><span class="pun">;</span><span class="pln">
  grid</span><span class="pun">-</span><span class="pln">row</span><span class="pun">-</span><span class="pln">start</span><span class="pun">:</span><span class="pln"> </span><span class="lit">1</span><span class="pun">;</span><span class="pln">
  grid</span><span class="pun">-</span><span class="pln">row</span><span class="pun">-</span><span class="kwd">end</span><span class="pun">:</span><span class="pln"> </span><span class="lit">3</span><span class="pun">;</span><span class="pln">
  position</span><span class="pun">:</span><span class="pln"> absolute</span><span class="pun">;</span><span class="pln">
  top</span><span class="pun">:</span><span class="pln"> </span><span class="lit">40px</span><span class="pun">;</span><span class="pln">
  left</span><span class="pun">:</span><span class="pln"> </span><span class="lit">40px</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></pre>

<p style="text-align: center;">
	<img alt="a07.png" class="ipsImage ipsImage_thumbnailed" data-fileid="26999" data-unique="3rc3ezh0g" src="https://academy.hsoub.com/uploads/monthly_2018_02/a07.png.999342155d17f16ae6e9e61300d715d3.png"></p>

<p>
	يمكنك أن ترى أن العنصر قد أخذ حيّزًا من الصّف الثاني وحتى الرابع، ثمّ بدأ بعد السّطر 1. مع تحديد احداثيّته باستخدام الخصائص<code>top</code> و <code>left</code>. كما تمّ إخراجه من الانسياب<code>flow</code> كما هي عادة العناصر مطلقة التموضع كما تضعهم قواعد<code>autoplacement</code> في نفس المساحة. كما لم يتمّ إنشاء صفّ جديد حتّى يمتد العنصر إلى سطر الصّف 3. إن أزلت <code>position: absolute</code> من قواعد .box3 يمكنك أن ترى كيف سيُعرض بدون تحديد الموضع.
</p>

<h2 id="وعاء-الشّبكة-كأبٍ-a-grid-container-as-parent">
	وعاء الشّبكة كأبٍ A grid container as parent
</h2>

<p>
	إذا كان لدى الابن مُطلَق التّموضع وعاء شبكيّ grid container كأبٍ ولكنّ ذلك الوعاء لا يخلق سياق تموضع positioning context جديد، فهذا يعني أنه قد أُخرج من الانسيابflow كما في المثال السابق. سياق التموضع positioning context سيكون كالسياق الذي أنشأه العنصر كما هو شائع في أساليب التخطيط الأخرى. في حالتنا، إذا أزلنا <code>position: relative</code> من الغلاف أعلاه، سياق التموضع سيكون من viewport ، كما هو موضح في هذه الصورة.
</p>

<p style="text-align: center;">
	<img alt="a08.png" class="ipsImage ipsImage_thumbnailed" data-fileid="27000" data-unique="f4p4ki1sc" src="https://academy.hsoub.com/uploads/monthly_2018_02/a08.png.3f0a6ab6ccf01272413c73a89a927f3d.png"></p>

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

<h2 id="مع-حيّز-الشّبكة-كأب-with-a-grid-area-as-the-parent">
	مع حيّز الشّبكة كأب With a grid area as the parent
</h2>

<p>
	إذا وٌضع العنصر مطلق التموضع داخل حيّز الشّبكة فيمكنك حينها إنشاء سياق تموضع على الحيّز. في المثال أدناه لدينا شبكة كما قبل ولكن هذه المرة سنُدرج عنصرا داخل .box3 في الشّبكة. سنعيَن القيمةrelative للخاصيّةposition الخاصة بـ .box3 ثم سنحدّد موضع العنصر الفرعي بواسطة خصائص الإزاحة offset properties. في هذه الحالة، سياق التّموضع سيكون هو حيّز الشّبكة.
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_5763_35" style="">
<span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"wrapper"</span><span class="tag">&gt;</span><span class="pln">
  </span><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"box1"</span><span class="tag">&gt;</span><span class="pln">One</span><span class="tag">&lt;/div&gt;</span><span class="pln">
  </span><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"box2"</span><span class="tag">&gt;</span><span class="pln">Two</span><span class="tag">&lt;/div&gt;</span><span class="pln">
  </span><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"box3"</span><span class="tag">&gt;</span><span class="pln">Three
    </span><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"abspos"</span><span class="tag">&gt;</span><span class="pln">
     This block is absolutely positioned. In this example the grid area is the containing block and so the absolute positioning offset values are calculated in from the outer edges of the grid area.
    </span><span class="tag">&lt;/div&gt;</span><span class="pln">
  </span><span class="tag">&lt;/div&gt;</span><span class="pln">
  </span><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"box4"</span><span class="tag">&gt;</span><span class="pln">Four</span><span class="tag">&lt;/div&gt;</span><span class="pln">
</span><span class="tag">&lt;/div&gt;</span></pre>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_5763_37" style="">
<span class="pun">.</span><span class="pln">wrapper </span><span class="pun">{</span><span class="pln">
  display</span><span class="pun">:</span><span class="pln"> grid</span><span class="pun">;</span><span class="pln">
  grid</span><span class="pun">-</span><span class="kwd">template</span><span class="pun">-</span><span class="pln">columns</span><span class="pun">:</span><span class="pln"> repeat</span><span class="pun">(</span><span class="lit">4</span><span class="pun">،</span><span class="lit">1fr</span><span class="pun">);</span><span class="pln">
  grid</span><span class="pun">-</span><span class="kwd">auto</span><span class="pun">-</span><span class="pln">rows</span><span class="pun">:</span><span class="pln"> </span><span class="lit">200px</span><span class="pun">;</span><span class="pln">
  grid</span><span class="pun">-</span><span class="pln">gap</span><span class="pun">:</span><span class="pln"> </span><span class="lit">20px</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
</span><span class="pun">.</span><span class="pln">box3 </span><span class="pun">{</span><span class="pln">
  grid</span><span class="pun">-</span><span class="pln">column</span><span class="pun">-</span><span class="pln">start</span><span class="pun">:</span><span class="pln"> </span><span class="lit">2</span><span class="pun">;</span><span class="pln">
  grid</span><span class="pun">-</span><span class="pln">column</span><span class="pun">-</span><span class="kwd">end</span><span class="pun">:</span><span class="pln"> </span><span class="lit">4</span><span class="pun">;</span><span class="pln">
  grid</span><span class="pun">-</span><span class="pln">row</span><span class="pun">-</span><span class="pln">start</span><span class="pun">:</span><span class="pln"> </span><span class="lit">1</span><span class="pun">;</span><span class="pln">
  grid</span><span class="pun">-</span><span class="pln">row</span><span class="pun">-</span><span class="kwd">end</span><span class="pun">:</span><span class="pln"> </span><span class="lit">3</span><span class="pun">;</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><span class="pln">abspos </span><span class="pun">{</span><span class="pln">
  position</span><span class="pun">:</span><span class="pln"> absolute</span><span class="pun">;</span><span class="pln">
  top</span><span class="pun">:</span><span class="pln"> </span><span class="lit">40px</span><span class="pun">;</span><span class="pln">
  left</span><span class="pun">:</span><span class="pln"> </span><span class="lit">40px</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"> rgba</span><span class="pun">(</span><span class="lit">255</span><span class="pun">،</span><span class="lit">255</span><span class="pun">،</span><span class="lit">255</span><span class="pun">،.</span><span class="lit">5</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 rgba</span><span class="pun">(</span><span class="lit">0</span><span class="pun">،</span><span class="lit">0</span><span class="pun">،</span><span class="lit">0</span><span class="pun">،</span><span class="lit">0.5</span><span class="pun">);</span><span class="pln">
  color</span><span class="pun">:</span><span class="pln"> </span><span class="com">#000;</span><span class="pln">
  padding</span><span class="pun">:</span><span class="pln"> </span><span class="lit">10px</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></pre>

<p style="text-align: center;">
	<img alt="a09.png" class="ipsImage ipsImage_thumbnailed" data-fileid="27002" data-unique="3xr59idti" src="https://academy.hsoub.com/uploads/monthly_2018_02/a09.png.2d939f60686c752d3873c06c2810b7aa.png"></p>

<h2 id="الشّبكة-و--display-contents">
	الشّبكة و display: contents
</h2>

<p>
	سنقوم بإطلالة أخيرة على إحدى المواصفات القياسيّة للتّخطيط والتي تستحقّ التنويه وهي التفاعل بين خطاطة CSS الشّبكيّة و<code>display: contents</code>. قيمة<code>contents</code> للخاصية<code>display</code> هي قيمة جديدة موضّحة في المواصفات القياسيّة (<a href="https://drafts.csswg.org/css-display/#box-generation" rel="external nofollow">Display specification</a> ) كما يلي:<br>
	"إنّ العنصر نفسه لا يولّد أية مربّعات، ولكنّ بإمكان أبنائه وأشباه العناصر pseudo-elements توليد المربّعات كالمعتاد. ولغرض توليد المربعات والتخطيط، يجب أن يعامل العنصر كما لو أنه قد تم استبداله بأبنائه وبأشباه العناصر في شجرة وثيقة"<br>
	إذا حدّدت لعنصر ما <code>display: contents</code> فإنّ المربع الذي سينشئه سيختفي، أمّا مربّعات الأبناء فستظهر كما لو أنها قد ارتفعت لمستوى أعلى. وهذا يعني أن أبناء عناصر الشّبكة يمكن أن يصبحوا بدورهم عناصر للشّبكة. إن بدا هذا غريبا فإليك مثالًا بسيطًا. في الوسوم التالية، لدينا شبكة بحيث سيشمل أوّل عناصرها جميع مدارج الأعمدة الثلاث. كما تحتوي ثلاثة عناصر متداخلة. وبما أنّ هؤلاء العناصر ليسوا أبناءً مباشرين، فإنهم لن يصبحوا جزءا من الخطاطة الشّبكيّة لذك فالخاصّيةdisplay ستكون خطاطة عادية regular block layout.
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_5763_39" style="">
<span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"wrapper"</span><span class="tag">&gt;</span><span class="pln">
  </span><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"box box1"</span><span class="tag">&gt;</span><span class="pln">
    </span><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"nested"</span><span class="tag">&gt;</span><span class="pln">a</span><span class="tag">&lt;/div&gt;</span><span class="pln">
    </span><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"nested"</span><span class="tag">&gt;</span><span class="pln">b</span><span class="tag">&lt;/div&gt;</span><span class="pln">
    </span><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"nested"</span><span class="tag">&gt;</span><span class="pln">c</span><span class="tag">&lt;/div&gt;</span><span class="pln">
  </span><span class="tag">&lt;/div&gt;</span><span class="pln">
  </span><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"box box2"</span><span class="tag">&gt;</span><span class="pln">Two</span><span class="tag">&lt;/div&gt;</span><span class="pln">
  </span><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"box box3"</span><span class="tag">&gt;</span><span class="pln">Three</span><span class="tag">&lt;/div&gt;</span><span class="pln">
  </span><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"box box4"</span><span class="tag">&gt;</span><span class="pln">Four</span><span class="tag">&lt;/div&gt;</span><span class="pln">
  </span><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"box box5"</span><span class="tag">&gt;</span><span class="pln">Five</span><span class="tag">&lt;/div&gt;</span><span class="pln">
</span><span class="tag">&lt;/div&gt;</span></pre>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_5763_41" style="">
<span class="pun">.</span><span class="pln">wrapper </span><span class="pun">{</span><span class="pln">
  display</span><span class="pun">:</span><span class="pln"> grid</span><span class="pun">;</span><span class="pln">
  grid</span><span class="pun">-</span><span class="kwd">template</span><span class="pun">-</span><span class="pln">columns</span><span class="pun">:</span><span class="pln"> repeat</span><span class="pun">(</span><span class="lit">3</span><span class="pun">،</span><span class="pln"> </span><span class="lit">1fr</span><span class="pun">);</span><span class="pln">
  grid</span><span class="pun">-</span><span class="kwd">auto</span><span class="pun">-</span><span class="pln">rows</span><span class="pun">:</span><span class="pln"> minmax</span><span class="pun">(</span><span class="lit">100px</span><span class="pun">،</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><span class="pln">box1 </span><span class="pun">{</span><span class="pln">
  grid</span><span class="pun">-</span><span class="pln">column</span><span class="pun">-</span><span class="pln">start</span><span class="pun">:</span><span class="pln"> </span><span class="lit">1</span><span class="pun">;</span><span class="pln">
  grid</span><span class="pun">-</span><span class="pln">column</span><span class="pun">-</span><span class="kwd">end</span><span class="pun">:</span><span class="pln"> </span><span class="lit">4</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></pre>

<p style="text-align: center;">
	<img alt="a10.png" class="ipsImage ipsImage_thumbnailed" data-fileid="27003" data-unique="wmm1vrt57" src="https://academy.hsoub.com/uploads/monthly_2018_02/a10.png.032d9b25a24a1d66a56c6499b8a8da5e.png"></p>

<p>
	إذا أضفنا <code>display: contents</code> إلى قواعد<code>box1</code>، فإنّ المربع الخاصّ بذلك العنصر سيختفي والعناصر الفرعية ستصبح الآن عناصر للشّبكة وستنساب وفق قواعدauto-placement .
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_5763_43" style="">
<span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"wrapper"</span><span class="tag">&gt;</span><span class="pln">
  </span><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"box box1"</span><span class="tag">&gt;</span><span class="pln">
    </span><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"nested"</span><span class="tag">&gt;</span><span class="pln">a</span><span class="tag">&lt;/div&gt;</span><span class="pln">
    </span><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"nested"</span><span class="tag">&gt;</span><span class="pln">b</span><span class="tag">&lt;/div&gt;</span><span class="pln">
    </span><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"nested"</span><span class="tag">&gt;</span><span class="pln">c</span><span class="tag">&lt;/div&gt;</span><span class="pln">
  </span><span class="tag">&lt;/div&gt;</span><span class="pln">
  </span><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"box box2"</span><span class="tag">&gt;</span><span class="pln">Two</span><span class="tag">&lt;/div&gt;</span><span class="pln">
  </span><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"box box3"</span><span class="tag">&gt;</span><span class="pln">Three</span><span class="tag">&lt;/div&gt;</span><span class="pln">
  </span><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"box box4"</span><span class="tag">&gt;</span><span class="pln">Four</span><span class="tag">&lt;/div&gt;</span><span class="pln">
  </span><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"box box5"</span><span class="tag">&gt;</span><span class="pln">Five</span><span class="tag">&lt;/div&gt;</span><span class="pln">
</span><span class="tag">&lt;/div&gt;</span></pre>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_5763_45" style="">
<span class="pun">.</span><span class="pln">wrapper </span><span class="pun">{</span><span class="pln">
  display</span><span class="pun">:</span><span class="pln"> grid</span><span class="pun">;</span><span class="pln">
  grid</span><span class="pun">-</span><span class="kwd">template</span><span class="pun">-</span><span class="pln">columns</span><span class="pun">:</span><span class="pln"> repeat</span><span class="pun">(</span><span class="lit">3</span><span class="pun">،</span><span class="pln"> </span><span class="lit">1fr</span><span class="pun">);</span><span class="pln">
  grid</span><span class="pun">-</span><span class="kwd">auto</span><span class="pun">-</span><span class="pln">rows</span><span class="pun">:</span><span class="pln"> minmax</span><span class="pun">(</span><span class="lit">100px</span><span class="pun">،</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><span class="pln">box1 </span><span class="pun">{</span><span class="pln">
  grid</span><span class="pun">-</span><span class="pln">column</span><span class="pun">-</span><span class="pln">start</span><span class="pun">:</span><span class="pln"> </span><span class="lit">1</span><span class="pun">;</span><span class="pln">
  grid</span><span class="pun">-</span><span class="pln">column</span><span class="pun">-</span><span class="kwd">end</span><span class="pun">:</span><span class="pln"> </span><span class="lit">4</span><span class="pun">;</span><span class="pln">
  display</span><span class="pun">:</span><span class="pln"> contents</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></pre>

<p style="text-align: center;">
	<img alt="a11.png" class="ipsImage ipsImage_thumbnailed" data-fileid="27004" data-unique="e5v09b32r" src="https://academy.hsoub.com/uploads/monthly_2018_02/a11.png.d669dc68b9187f09f6be675ae611db60.png"></p>

<p>
	يمكن أن تكون هذه طريقة لجعل العناصر الفرعيّة في الشّبكة تتصرّف كأنها جزء من الشّبكة، وهذا قد يساعدنا على الالتفاف على بعض المشاكل والتي سيتم حلها بواسطة subgrids بمُجرّد تقديمها. يمكنك أيضا استخدام <code>display: contents</code> بطريقة مماثلة مع flexbox لتمكين العناصر الفرعيّة من أن تصبح عناصر مرنة.<br>
	كما رأينا خلال هذا الدليل، خطاطة CSS الشّبكيّة هي مجرّد أداة واحدة من الأدوات المتاحة لك. لا تتردّد في دمجها مع الطرق الأخرى للتّخطيط لتحصل على التأثيرات التي تصبو إليها.<br>
	ترجمة -وبتصرّف- للمقال <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Grid_Layout/Relationship_of_Grid_Layout" rel="external nofollow">Relationship of grid layout to other layout methods</a> لأصحابه المساهمين (kan199041, VladPavel15, mfluehr, NouranMahmoud, bgates, Pickles-Spill, jarrodn, AleshaOleg, teoli, rachelandrew)
</p>

<p>
	حقوق الصورة البارزة محفوظة لـ <a href="https://www.freepik.com/free-vector/abstract-background-in-blue-tones_994565.htm" rel="external nofollow">Freepik</a>
</p>
]]></description><guid isPermaLink="false">619</guid><pubDate>Wed, 14 Feb 2018 15:07:00 +0000</pubDate></item><item><title>&#x643;&#x64A;&#x641;&#x64A;&#x629; &#x625;&#x646;&#x634;&#x627;&#x621; &#x62C;&#x62F;&#x648;&#x644; &#x623;&#x646;&#x64A;&#x642; &#x628;&#x640; HTML &#x648; CSS</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-%D8%AC%D8%AF%D9%88%D9%84-%D8%A3%D9%86%D9%8A%D9%82-%D8%A8%D9%80-html-%D9%88-css-r615/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2018_02/5a72f1b7d5d35_07-2(1).png.0fd870e930d8189da980f138ee555b1e.png" /></p>

<p>
	جميعنا – نحن مصمّمي المواقع –تعلّمنا أن نبقى بعيدًا عن الخُطاطات layouts المستندة على الجداول. لهذا غالبًا ما ننساها ونهملها إلى أن نجد أنفسنا محتاجين إليها. هذا الدرس سيأخذك خطوة بخطوة لإنشاء جدول بيانات أنيق وسلس يحتوي مقارنة بين مميّزات عدة درّاجات نارية من طرازHarley Davidson . سنقوم ببناء الجدول حصرًا بـ HTML ثمّ سنصقله بـ CSS لإنشاء جدول HTML جميل وواضح.<br>
	الجدول سيقارن ميزات ثلاثة نماذج من الدراجات النارية من طراز Harley Davidson Sportster. سيتمّ بناء الجدول بـ HTML ثمّ سنُنسّقه بـ CSS لجعل البيانات واضحة.
</p>

<h2>
	مشاهدة الجدول النّهائي
</h2>

<p style="text-align: center;">
	<img alt="01 (3).jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="26882" data-unique="tcfknxoa4" src="https://academy.hsoub.com/uploads/monthly_2018_02/5a72efb910881_01(3).jpg.55fd5ab44c1afac81216c0b253b82d90.jpg" style=""></p>

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

<p style="text-align: center;">
	<img alt="02 (3).png" class="ipsImage ipsImage_thumbnailed" data-fileid="26883" data-unique="ambk3fkbw" src="https://academy.hsoub.com/uploads/monthly_2018_02/5a72efba587c3_02(3).png.b2ba095b847562cbdfde9c8ff78a6127.png" style=""></p>

<p>
	الملفّ عبارة عن HTML عاديّ. حيث يبدأ بـ <code>DOCTYPE</code>، عنوان الصفحة ورابط لـ CSS. يبدأ محتوى الصفحة بـ <code>&lt;H1&gt;</code>، والذي سيتم لاحقا تحويله إلى شعار HD، بعد ذلك سنضيف وعاء <code>div</code> لمساعدتنا على توسيط المحتوى.
</p>

<p style="text-align: center;">
	<img alt="03 (4).png" class="ipsImage ipsImage_thumbnailed" data-fileid="26884" data-unique="bird8migc" src="https://academy.hsoub.com/uploads/monthly_2018_02/5a72efbbad75b_03(4).png.27fafac94dc75ff431c1b46a8ede694b.png" style=""></p>

<p>
	بعد ذلك سندرج <code>&lt;table&gt;</code> متبوعًا بـ <code>&lt;THEAD&gt;</code> لتحديد العناوين والتّرويسات headings في جدولنا. يحتوي <code>&lt;THEAD&gt;</code> على صفّين، أحدهما يتضمّن صور الدرّاجات والآخر يتضمّن عناوين كل نموذج في وسم <code>&lt;H2&gt;</code>. الجدول يحتوي ثلاثة أعمدة، ولكن الخلايا الأولى في الترويسة فارغة لذلك سنضيف الحرف الرّابط <code>&amp;nbsp;</code>. لمساعدتنا على تنسيق الجدول وتحسين مقروئية البيانات وفي نفس الوقت سنضيف في الكود أصنافًا classes إلى الخلايا.
</p>

<p style="text-align: center;">
	<img alt="04 (3).png" class="ipsImage ipsImage_thumbnailed" data-fileid="26885" data-unique="3elw4peie" src="https://academy.hsoub.com/uploads/monthly_2018_02/5a72efc1983f2_04(3).png.4d1200bd07c56267725ecfbcd611dca8.png" style=""></p>

<p>
	بعد إغلاق <code>&lt;THEAD&gt;</code> يبدأ <code>&lt;TBODY&gt;</code>. وبينما تُستخدم <code>&lt;th&gt;</code> داخل <code>&lt;THEAD&gt;</code>، فإنّ <code>&lt;td&gt;</code> تستخدم داخل <code>&lt;TBODY&gt;</code>. كل سلسة من الخلايا مُتضمَّنة داخل صفّ واحد، وصفوفنا تساعدنا في تحديد الأعمدة. كما ستتم إضافة كافّة صفوف البيانات لإنهاء HTML.
</p>

<h2>
	<a id="HTML___27" rel=""></a>HTML النّهائي
</h2>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_2951_9" style="">
<span class="dec">&lt;!DOCTYPE html&gt;</span><span class="pln">
</span><span class="tag">&lt;html&gt;</span><span class="pln">
</span><span class="tag">&lt;head&gt;</span><span class="pln">
</span><span class="tag">&lt;meta</span><span class="pln"> </span><span class="atn">charset</span><span class="pun">=</span><span class="atv">"utf-8"</span><span class="pln"> </span><span class="tag">/&gt;</span><span class="pln">
</span><span class="tag">&lt;title&gt;</span><span class="pln">Harley Davidson Sportster Motorcycle Model Comparison</span><span class="tag">&lt;/title&gt;</span><span class="pln">

</span><span class="tag">&lt;link</span><span class="pln"> </span><span class="atn">href</span><span class="pun">=</span><span class="atv">"style.css"</span><span class="pln"> </span><span class="atn">rel</span><span class="pun">=</span><span class="atv">"stylesheet"</span><span class="pln"> </span><span class="tag">/&gt;</span><span class="pln">

</span><span class="tag">&lt;/head&gt;</span><span class="pln">

</span><span class="tag">&lt;body&gt;</span><span class="pln">

</span><span class="tag">&lt;h1&gt;</span><span class="pln">Harley Davidson Motorcycles</span><span class="tag">&lt;/h1&gt;</span><span class="pln">

</span><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;table&gt;</span><span class="pln">
        </span><span class="tag">&lt;thead&gt;</span><span class="pln">
            </span><span class="tag">&lt;tr&gt;</span><span class="pln">
                </span><span class="tag">&lt;th&gt;</span><span class="pln"> </span><span class="tag">&lt;/th&gt;</span><span class="pln">
                </span><span class="tag">&lt;th</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"iron"</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/iron.jpg"</span><span class="pln"> </span><span class="atn">alt</span><span class="pun">=</span><span class="atv">"Harley Davidson Iron 883"</span><span class="pln"> </span><span class="tag">/&gt;&lt;/th&gt;</span><span class="pln">
                </span><span class="tag">&lt;th</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"nightster"</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/nightster.jpg"</span><span class="pln"> </span><span class="atn">alt</span><span class="pun">=</span><span class="atv">"Harley Davidson Nightster"</span><span class="pln"> </span><span class="tag">/&gt;&lt;/th&gt;</span><span class="pln">
                </span><span class="tag">&lt;th</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"fortyeight"</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/forty-eight.jpg"</span><span class="pln"> </span><span class="atn">alt</span><span class="pun">=</span><span class="atv">"Harley Davidson Forty-Eight"</span><span class="pln"> </span><span class="tag">/&gt;&lt;/th&gt;</span><span class="pln">
            </span><span class="tag">&lt;/tr&gt;</span><span class="pln">
            </span><span class="tag">&lt;tr&gt;</span><span class="pln">
                </span><span class="tag">&lt;th&gt;</span><span class="pln"> </span><span class="tag">&lt;/th&gt;</span><span class="pln">
                </span><span class="tag">&lt;th</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"iron"</span><span class="tag">&gt;&lt;h2&gt;</span><span class="pln">Iron 883</span><span class="tag">&lt;/h2&gt;&lt;/th&gt;</span><span class="pln">
                </span><span class="tag">&lt;th</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"nightster"</span><span class="tag">&gt;&lt;h2&gt;</span><span class="pln">Nightster</span><span class="tag">&lt;/h2&gt;&lt;/th&gt;</span><span class="pln">
                </span><span class="tag">&lt;th</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"fortyeight"</span><span class="tag">&gt;&lt;h2&gt;</span><span class="pln">Forty-Eight</span><span class="tag">&lt;/h2&gt;&lt;/th&gt;</span><span class="pln">
            </span><span class="tag">&lt;/tr&gt;</span><span class="pln">
        </span><span class="tag">&lt;/thead&gt;</span><span class="pln">
        
        </span><span class="tag">&lt;tbody&gt;</span><span class="pln">
            </span><span class="tag">&lt;tr&gt;</span><span class="pln">
                </span><span class="tag">&lt;td</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"feature"</span><span class="tag">&gt;</span><span class="pln">Engine</span><span class="tag">&lt;/td&gt;</span><span class="pln">
                </span><span class="tag">&lt;td</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"iron"</span><span class="tag">&gt;</span><span class="pln">883cc</span><span class="tag">&lt;/td&gt;</span><span class="pln">
                </span><span class="tag">&lt;td</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"nightster"</span><span class="tag">&gt;</span><span class="pln">1202cc</span><span class="tag">&lt;/td&gt;</span><span class="pln">
                </span><span class="tag">&lt;td</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"fortyeight"</span><span class="tag">&gt;</span><span class="pln">1202cc</span><span class="tag">&lt;/td&gt;</span><span class="pln">
            </span><span class="tag">&lt;/tr&gt;</span><span class="pln">
            
            </span><span class="tag">&lt;tr&gt;</span><span class="pln">
                </span><span class="tag">&lt;td</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"feature"</span><span class="tag">&gt;</span><span class="pln">Torque</span><span class="tag">&lt;/td&gt;</span><span class="pln">
                </span><span class="tag">&lt;td</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"iron"</span><span class="tag">&gt;</span><span class="pln">70Nm</span><span class="tag">&lt;/td&gt;</span><span class="pln">
                </span><span class="tag">&lt;td</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"nightster"</span><span class="tag">&gt;</span><span class="pln">98Nm</span><span class="tag">&lt;/td&gt;</span><span class="pln">
                </span><span class="tag">&lt;td</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"fortyeight"</span><span class="tag">&gt;</span><span class="pln">98Nm</span><span class="tag">&lt;/td&gt;</span><span class="pln">
            </span><span class="tag">&lt;/tr&gt;</span><span class="pln">
            
            </span><span class="tag">&lt;tr&gt;</span><span class="pln">
                </span><span class="tag">&lt;td</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"feature"</span><span class="tag">&gt;</span><span class="pln">Exhaust</span><span class="tag">&lt;/td&gt;</span><span class="pln">
                </span><span class="tag">&lt;td</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"iron"</span><span class="tag">&gt;</span><span class="pln">Chrome, staggered shorty exhaust with dual mufflers</span><span class="tag">&lt;/td&gt;</span><span class="pln">
                </span><span class="tag">&lt;td</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"nightster"</span><span class="tag">&gt;</span><span class="pln">Chrome, slash-cut ex-haust with dual mufflers</span><span class="tag">&lt;/td&gt;</span><span class="pln">
                </span><span class="tag">&lt;td</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"fortyeight"</span><span class="tag">&gt;</span><span class="pln">Chrome, staggered shorty exhaust with dual slash-cut mufflers</span><span class="tag">&lt;/td&gt;</span><span class="pln">
            </span><span class="tag">&lt;/tr&gt;</span><span class="pln">
            
            </span><span class="tag">&lt;tr&gt;</span><span class="pln">
                </span><span class="tag">&lt;td</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"feature"</span><span class="tag">&gt;</span><span class="pln">Wheels</span><span class="tag">&lt;/td&gt;</span><span class="pln">
                </span><span class="tag">&lt;td</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"iron"</span><span class="tag">&gt;</span><span class="pln">Black, 13-Spoke Cast Alumi-num</span><span class="tag">&lt;/td&gt;</span><span class="pln">
                </span><span class="tag">&lt;td</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"nightster"</span><span class="tag">&gt;</span><span class="pln">Black, Laced Steel</span><span class="tag">&lt;/td&gt;</span><span class="pln">
                </span><span class="tag">&lt;td</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"fortyeight"</span><span class="tag">&gt;</span><span class="pln">Black, Laced Steel</span><span class="tag">&lt;/td&gt;</span><span class="pln">
            </span><span class="tag">&lt;/tr&gt;</span><span class="pln">
            
            </span><span class="tag">&lt;tr&gt;</span><span class="pln">
                </span><span class="tag">&lt;td</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"feature"</span><span class="tag">&gt;</span><span class="pln">Ground Clearance</span><span class="tag">&lt;/td&gt;</span><span class="pln">
                </span><span class="tag">&lt;td</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"iron"</span><span class="tag">&gt;</span><span class="pln">120mm</span><span class="tag">&lt;/td&gt;</span><span class="pln">
                </span><span class="tag">&lt;td</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"nightster"</span><span class="tag">&gt;</span><span class="pln">130mm</span><span class="tag">&lt;/td&gt;</span><span class="pln">
                </span><span class="tag">&lt;td</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"fortyeight"</span><span class="tag">&gt;</span><span class="pln">100mm</span><span class="tag">&lt;/td&gt;</span><span class="pln">
            </span><span class="tag">&lt;/tr&gt;</span><span class="pln">
            
            </span><span class="tag">&lt;tr&gt;</span><span class="pln">
                </span><span class="tag">&lt;td</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"feature"</span><span class="tag">&gt;</span><span class="pln">Price</span><span class="tag">&lt;/td&gt;</span><span class="pln">
                </span><span class="tag">&lt;td</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"iron"</span><span class="tag">&gt;</span><span class="pln">£6,699</span><span class="tag">&lt;/td&gt;</span><span class="pln">
                </span><span class="tag">&lt;td</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"nightster"</span><span class="tag">&gt;</span><span class="pln">£8,099</span><span class="tag">&lt;/td&gt;</span><span class="pln">
                </span><span class="tag">&lt;td</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"fortyeight"</span><span class="tag">&gt;</span><span class="pln">£8,849</span><span class="tag">&lt;/td&gt;</span><span class="pln">
            </span><span class="tag">&lt;/tr&gt;</span><span class="pln">
        </span><span class="tag">&lt;/tbody&gt;</span><span class="pln">
    
    </span><span class="tag">&lt;/table&gt;</span><span class="pln">

</span><span class="tag">&lt;/div&gt;</span><span class="pln">

</span><span class="tag">&lt;/body&gt;</span><span class="pln">
</span><span class="tag">&lt;/html&gt;</span></pre>

<p style="text-align: center;">
	<img alt="05 (3).png" class="ipsImage ipsImage_thumbnailed" data-fileid="26886" data-unique="0z29pg775" src="https://academy.hsoub.com/uploads/monthly_2018_02/5a72efc2bc77f_05(3).png.a66eca7232551820c01f07e6b23fc46b.png" style=""></p>

<p>
	يبدأ CSS بإزالة وتعويض تنسيق المتصفّح الافتراضي، ثم يقوم بتعيين التنسيق الكلّي للصّفحة. بعد ذلك نضيف صورة الخلفية إلى جسم الصّفحة. أمّا خصائص الخط العّام فستكون16px Georgia رمادي.
</p>

<p style="text-align: center;">
	<img alt="06 (4).png" class="ipsImage ipsImage_thumbnailed" data-fileid="26878" data-unique="clswncitc" src="https://academy.hsoub.com/uploads/monthly_2018_02/5a72efb273dbb_06(4).png.5d90d8b7f156a035166e605c0053a7b6.png" style=""></p>

<p>
	بعد ذلك سيتمّ تحويل <code>&lt;H1&gt;</code> إلى شعار Harley Davidson باستخدام تقنية استبدال الصورة، ثم سنضع الوعاء <code>div</code> في وسط الصفحة. تُستخدم صورة الخلفية النّمطية للملء. وبعدها سنحدّد قيم الخاصّية box-shadow لـ CSS3 لمحاكاة تأثير الظّل المُنسدل في فوتوشوب.
</p>

<p style="text-align: center;">
	<img alt="07 (3).png" class="ipsImage ipsImage_thumbnailed" data-fileid="26879" data-unique="fvz7x866j" src="https://academy.hsoub.com/uploads/monthly_2018_02/5a72efb4010da_07(3).png.2528ae3d56cd781532c11d668e3acdd5.png" style=""></p>

<p>
	افتراضيًا سيعرض الجدول فجوات صغيرة بين خلايا الجدول. التصميم الذي نبتغي يتطلّب هامشًا بين الأعمدة ولكن دون ثغرات بين الصّفوف. تسمح لنا الخاصيّة border-spacing بضبط التباعد على المحورين Y و X. ستتمّ إضافة الهامش الداخلي Padding, كما سيتمّ توسيط النص في جميع العناصر <code>&lt;th&gt;</code> و <code>&lt;td&gt;</code>، ثم سنستثني الخلايا ذات الصّنف “feature”، حيث سنحاذي النصّوص فيها إلى اليسار. كما ستُمنح هذه الخلايا عرضًاwidth محدّدًا لتغيير تناسب الجدول لجعل ذلك العمود الأكبر من بين بقيّة الأعمدة.
</p>

<p style="text-align: center;">
	<img alt="08 (2).png" class="ipsImage ipsImage_thumbnailed" data-fileid="26880" data-unique="fiuihettl" src="https://academy.hsoub.com/uploads/monthly_2018_02/5a72efb59cf91_08(2).png.be2c2b1b6cfecedf47a1e2a0bb4fd707.png" style=""></p>

<p>
	أعطينا لكلّ الأصناف “iron”، “nightster” و “fortyeight” خلفيّة بيضاء شفّافة باستخدام RGBa. كان بإمكاننا أن نستخدم صنفًا واحدًا لجميع هذه الخلايا، ولكنّ الأصناف المعيّنة ستساعدنا على التنقل في بيانات الجدول في الكود البرمجي. لأجل إضافة لمسة أخيرة على الجدول، سنضيف نفس الملء الشفّاف إلى صفوف الجدول، ولكن فقط عندما يطوف عليها مؤشّر الفأرة. هذا التأثير البسيط يعزّز سهولة استخدام الجدول، ممّا يساعد المستخدم على مطالعة ومقارنة البيانات.
</p>

<h2>
	<a id="CSS__133" rel=""></a>CSS الكامل
</h2>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_2951_7" style="">
<span class="pln">body</span><span class="pun">,</span><span class="pln"> div</span><span class="pun">,</span><span class="pln"> h1</span><span class="pun">,</span><span class="pln"> h2</span><span class="pun">,</span><span class="pln"> h3</span><span class="pun">,</span><span class="pln"> h4</span><span class="pun">,</span><span class="pln"> h5</span><span class="pun">,</span><span class="pln"> h6</span><span class="pun">,</span><span class="pln"> p</span><span class="pun">,</span><span class="pln"> ul</span><span class="pun">,</span><span class="pln"> ol</span><span class="pun">,</span><span class="pln"> li</span><span class="pun">,</span><span class="pln"> dl</span><span class="pun">,</span><span class="pln"> dt</span><span class="pun">,</span><span class="pln"> dd</span><span class="pun">,</span><span class="pln"> img</span><span class="pun">,</span><span class="pln"> form</span><span class="pun">,</span><span class="pln"> fieldset</span><span class="pun">,</span><span class="pln"> input</span><span class="pun">,</span><span class="pln"> textarea</span><span class="pun">,</span><span class="pln"> blockquote</span><span class="pun">,</span><span class="pln"> table</span><span class="pun">,</span><span class="pln"> tr</span><span class="pun">,</span><span class="pln"> td</span><span class="pun">,</span><span class="pln"> th </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="pun">;</span><span class="pln"> padding</span><span class="pun">:</span><span class="pln"> </span><span class="lit">0</span><span class="pun">;</span><span class="pln"> border</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><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">#000 url(images/bg.jpg) center top fixed no-repeat;</span><span class="pln">
    font</span><span class="pun">:</span><span class="pln"> </span><span class="lit">16px</span><span class="pln"> </span><span class="typ">Georgia</span><span class="pun">,</span><span class="pln"> </span><span class="typ">Serif</span><span class="pun">;</span><span class="pln"> color</span><span class="pun">:</span><span class="pln"> </span><span class="com">#ccc;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

h1 </span><span class="pun">{</span><span class="pln">
    width</span><span class="pun">:</span><span class="pln"> </span><span class="lit">168px</span><span class="pun">;</span><span class="pln"> height</span><span class="pun">:</span><span class="pln"> </span><span class="lit">130px</span><span class="pun">;</span><span class="pln"> margin</span><span class="pun">:</span><span class="pln"> </span><span class="lit">30px</span><span class="pln"> </span><span class="kwd">auto</span><span class="pun">;</span><span class="pln"> position</span><span class="pun">:</span><span class="pln"> relative</span><span class="pun">;</span><span class="pln">
    background</span><span class="pun">:</span><span class="pln"> url</span><span class="pun">(</span><span class="pln">images</span><span class="pun">/</span><span class="pln">harley</span><span class="pun">-</span><span class="pln">davidson</span><span class="pun">.</span><span class="pln">png</span><span class="pun">);</span><span class="pln"> text</span><span class="pun">-</span><span class="pln">indent</span><span class="pun">:</span><span class="pln"> </span><span class="pun">-</span><span class="lit">9999px</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

</span><span class="com">#container {</span><span class="pln">
    width</span><span class="pun">:</span><span class="pln"> </span><span class="lit">940px</span><span class="pun">;</span><span class="pln"> margin</span><span class="pun">:</span><span class="pln"> </span><span class="pun">-</span><span class="lit">115px</span><span class="pln"> </span><span class="kwd">auto</span><span class="pun">;</span><span class="pln"> padding</span><span class="pun">:</span><span class="pln"> </span><span class="lit">110px</span><span class="pln"> </span><span class="lit">10px</span><span class="pln"> </span><span class="lit">50px</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"> url</span><span class="pun">(</span><span class="pln">images</span><span class="pun">/</span><span class="pln">bg</span><span class="pun">-</span><span class="pln">pattern</span><span class="pun">.</span><span class="pln">png</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">0px</span><span class="pln"> </span><span class="lit">15px</span><span class="pln"> </span><span class="com">#000;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

table </span><span class="pun">{</span><span class="pln">
    border</span><span class="pun">-</span><span class="pln">spacing</span><span class="pun">:</span><span class="pln"> </span><span class="lit">10px</span><span class="pln"> </span><span class="lit">0px</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

th</span><span class="pun">,</span><span class="pln"> td </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"> padding</span><span class="pun">:</span><span class="pln"> </span><span class="lit">10px</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

</span><span class="pun">.</span><span class="pln">feature </span><span class="pun">{</span><span class="pln">
    width</span><span class="pun">:</span><span class="pln"> </span><span class="lit">183px</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"> right</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">24px</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"> normal</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">
</span><span class="pun">}</span><span class="pln">

</span><span class="pun">.</span><span class="pln">iron</span><span class="pun">,</span><span class="pln"> </span><span class="pun">.</span><span class="pln">nightster</span><span class="pun">,</span><span class="pln"> </span><span class="pun">.</span><span class="pln">fortyeight </span><span class="pun">{</span><span class="pln">
    background</span><span class="pun">:</span><span class="pln"> rgba</span><span class="pun">(</span><span class="lit">255</span><span class="pun">,</span><span class="lit">255</span><span class="pun">,</span><span class="lit">255</span><span class="pun">,</span><span class="lit">0.05</span><span class="pun">);</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

h2 </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">24px</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"> normal</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">
</span><span class="pun">}</span><span class="pln">

tr</span><span class="pun">:</span><span class="pln">hover </span><span class="pun">{</span><span class="pln">
    background</span><span class="pun">:</span><span class="pln"> rgba</span><span class="pun">(</span><span class="lit">255</span><span class="pun">,</span><span class="lit">255</span><span class="pun">,</span><span class="lit">255</span><span class="pun">,</span><span class="lit">0.05</span><span class="pun">);</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
    thead tr</span><span class="pun">:</span><span class="pln">hover </span><span class="pun">{</span><span class="pln">
        background</span><span class="pun">:</span><span class="pln"> none</span><span class="pun">;</span><span class="pln">
    </span><span class="pun">}</span></pre>

<h2>
	<a id="_HTML__CSS__186" rel=""></a>جدول HTML / CSS النهائي
</h2>

<p style="text-align: center;">
	<img alt="09.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="26881" data-unique="zgevz15d8" src="https://academy.hsoub.com/uploads/monthly_2018_02/09.jpg.47b3f4849c0f9c41f1a5bd83f8104b74.jpg" style=""></p>

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

<p>
	ترجمة -وبتصرّف- للمقال <a href="https://line25.com/tutorials/how-to-create-a-slick-features-table-in-html-css" rel="external nofollow">How To Create a Slick Features Table in HTML &amp; CSS</a> لصاحبه iggy
</p>
]]></description><guid isPermaLink="false">615</guid><pubDate>Wed, 07 Feb 2018 11:00:00 +0000</pubDate></item><item><title>&#x627;&#x644;&#x62A;&#x646;&#x628;&#x64A;&#x647; &#x639;&#x644;&#x649; &#x635;&#x62D;&#x629; &#x627;&#x644;&#x628;&#x64A;&#x627;&#x646;&#x627;&#x62A; &#x623;&#x648; &#x639;&#x62F;&#x645;&#x647;&#x627; &#x628;&#x648;&#x627;&#x633;&#x637;&#x629; CSS</title><link>https://academy.hsoub.com/programming/css/%D8%A7%D9%84%D8%AA%D9%86%D8%A8%D9%8A%D9%87-%D8%B9%D9%84%D9%89-%D8%B5%D8%AD%D8%A9-%D8%A7%D9%84%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA-%D8%A3%D9%88-%D8%B9%D8%AF%D9%85%D9%87%D8%A7-%D8%A8%D9%88%D8%A7%D8%B3%D8%B7%D8%A9-css-r556/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2017_11/59fde33b3f40a_05-2(1).png.7a80e22e3acae2bedd8fce83f1ded142.png" /></p>

<p>
	تقدّم المواصفات الجديدة في CSS3 محدّدين Selector مفيدين للغاية هما <code>:valid</code> و <code>:invalid</code> وهي أصناف زائفة pseudo-class يمكن استخدامها مع عناصر الإدخال الخاصة بالاستمارات. لنفترض أن لديك عنصر إدخال تتحقّق من خلاله فيما إذا كان ما أدخله المستخدم صحيحًا أم خاطئًا. لإجراء عملية التحقق ستحتاج إلى إضافة خاصية HTML5 <code>required</code> إلى الوسم الخاص بعنصر الإدخال، وبهذا يمكن الاستفادة من المحدّدين <code>:valid/:invalid</code> لتغيير لون حقل الإدخال ليعرف المستخدم من خلال ذلك أنّ ما أدخله صحيح أو خاطئ. فعلى سبيل المثال يتحول مربع الإدخال إلى اللون الأخضر عندما تكون العبارة صحيحة، وكما يلي:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_2672_7" style="">
<span class="pln">input</span><span class="pun">:</span><span class="pln">required </span><span class="pun">{</span><span class="pln">
    background</span><span class="pun">:</span><span class="pln"> </span><span class="com">#AAA;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
input</span><span class="pun">:</span><span class="pln">valid </span><span class="pun">{</span><span class="pln">
    background</span><span class="pun">:</span><span class="pln"> </span><span class="com">#0A0;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
input</span><span class="pun">:</span><span class="pln">invalid </span><span class="pun">{</span><span class="pln">
    background</span><span class="pun">:</span><span class="pln"> </span><span class="com">#A00;</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	سننشئ في هذا الدرس استمارة بنمط Material وسننبّه المستخدم على صحة البيانات المدخلة في الاستمارة من خلال الصنفين الزائفين <code>:valid</code> و <code>:invalid</code>. تتألف الاستمارة من مربع نصّي وحيد وقد أحطنا عنصري <code>input[type="text"]</code> و<code>label</code> بعنصر <code>div</code> يحمل المحدّد <code>.form-control</code> من <a href="https://academy.hsoub.com/programming/css/bootstrap/" rel="">إطار عمل Bootstrap</a>. لدينا أيضًا شريط سيتغير لونه بين الأخضر والأحمر للدلالة على صحة المعلومات المدخلة من عدمها.
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_2672_7" style="">
<code class="hljs xml"><span class="hljs-tag"><span class="tag">&lt;</span><span class="hljs-title"><span class="tag">div</span></span><span class="pln"> </span><span class="hljs-attribute"><span class="atn">class</span></span><span class="pun">=</span><span class="hljs-value"><span class="atv">"form-control"</span></span><span class="tag">&gt;</span></span><span class="pln">
    </span><span class="hljs-tag"><span class="tag">&lt;</span><span class="hljs-title"><span class="tag">input</span></span><span class="pln"> </span><span class="hljs-attribute"><span class="atn">type</span></span><span class="pun">=</span><span class="hljs-value"><span class="atv">"text"</span></span><span class="pln"> </span><span class="hljs-attribute"><span class="atn">required</span></span><span class="pln"> </span><span class="tag">/&gt;</span></span><span class="pln">
    </span><span class="hljs-tag"><span class="tag">&lt;</span><span class="hljs-title"><span class="tag">span</span></span><span class="pln"> </span><span class="hljs-attribute"><span class="atn">class</span></span><span class="pun">=</span><span class="hljs-value"><span class="atv">"bar"</span></span><span class="tag">&gt;</span></span><span class="hljs-tag"><span class="tag">&lt;/</span><span class="hljs-title"><span class="tag">span</span></span><span class="tag">&gt;</span></span><span class="pln">
    </span><span class="hljs-tag"><span class="tag">&lt;</span><span class="hljs-title"><span class="tag">label</span></span><span class="pln"> </span><span class="hljs-attribute"><span class="atn">for</span></span><span class="pun">=</span><span class="hljs-value"><span class="atv">"First Name"</span></span><span class="tag">&gt;</span></span><span class="pln">First Name</span><span class="hljs-tag"><span class="tag">&lt;/</span><span class="hljs-title"><span class="tag">label</span></span><span class="tag">&gt;</span></span><span class="pln">
</span><span class="hljs-tag"><span class="tag">&lt;/</span><span class="hljs-title"><span class="tag">div</span></span><span class="tag">&gt;</span></span></code></pre>

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

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_2672_7" style="">
<code class="hljs css"><span class="hljs-class"><span class="pun">.</span><span class="pln">form</span><span class="pun">-</span><span class="pln">control</span></span><span class="pln"> </span><span class="hljs-rules"><span class="pun">{</span><span class="pln">
  </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">position</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln">relative</span></span></span><span class="pun">;</span><span class="pln">
  </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">margin</span><span class="pun">-</span><span class="pln">top</span></span><span class="pun">:</span><span class="hljs-value"><span class="hljs-number"><span class="lit">40</span></span><span class="lit">px</span></span></span><span class="pun">;</span><span class="pln">
  </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">width</span></span><span class="pun">:</span><span class="hljs-value"><span class="hljs-number"><span class="lit">400</span></span><span class="lit">px</span></span></span><span class="pun">;</span><span class="pln">
</span><span class="hljs-rule"><span class="pun">}</span></span></span><span class="pln">
</span><span class="hljs-tag"><span class="pln">input</span></span><span class="pln"> </span><span class="hljs-rules"><span class="pun">{</span><span class="pln">
  </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">border</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln">none</span></span></span><span class="pun">;</span><span class="pln">
  </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">border</span><span class="pun">-</span><span class="pln">bottom</span></span><span class="pun">:</span><span class="hljs-value"><span class="hljs-number"><span class="lit">3</span></span><span class="lit">px</span><span class="pln"> solid </span><span class="hljs-hexcolor"><span class="com">#34495e</span></span></span></span><span class="com">;</span><span class="pln">
  </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">padding</span></span><span class="pun">:</span><span class="hljs-value"><span class="hljs-number"><span class="lit">10</span></span><span class="lit">px</span><span class="pln"> </span><span class="hljs-number"><span class="lit">0</span></span></span></span><span class="pun">;</span><span class="pln">
  </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">width</span></span><span class="pun">:</span><span class="hljs-value"><span class="hljs-number"><span class="lit">400</span></span><span class="lit">px</span></span></span><span class="pun">;</span><span class="pln">
  </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">display</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln">block</span></span></span><span class="pun">;</span><span class="pln">
  </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">font</span><span class="pun">-</span><span class="pln">size</span></span><span class="pun">:</span><span class="hljs-value"><span class="hljs-number"><span class="lit">16</span></span><span class="lit">px</span></span></span><span class="pun">;</span><span class="pln">
</span><span class="hljs-rule"><span class="pun">}</span></span></span></code></pre>

<p>
	سيؤدي العنصر <code>label</code> دور ماسك مكان placeholder، لذا سنجعل موقعه مطلقًا مع تعيين المسافة اليسرى والعلوية المناسبة، ليبدو العنصر بهيئة ماسك مكان اعتيادي.
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_2672_7" style="">
<code class="hljs css"><span class="hljs-tag"><span class="pln">label</span></span><span class="pln"> </span><span class="hljs-rules"><span class="pun">{</span><span class="pln">
  </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">position</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln">absolute</span></span></span><span class="pun">;</span><span class="pln">
  </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">top</span></span><span class="pun">:</span><span class="hljs-value"><span class="hljs-number"><span class="lit">8</span></span><span class="lit">px</span></span></span><span class="pun">;</span><span class="pln">
  </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">left</span></span><span class="pun">:</span><span class="hljs-value"><span class="hljs-number"><span class="lit">5</span></span><span class="lit">px</span></span></span><span class="pun">;</span><span class="pln">
  </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">font</span><span class="pun">-</span><span class="pln">size</span></span><span class="pun">:</span><span class="hljs-value"><span class="hljs-number"><span class="lit">16</span></span><span class="lit">px</span></span></span><span class="pun">;</span><span class="pln">
  </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">color</span></span><span class="pun">:</span><span class="hljs-value"><span class="hljs-hexcolor"><span class="pun">#</span><span class="lit">333</span></span></span></span><span class="pun">;</span><span class="pln">
  </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">transistion</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> </span><span class="hljs-number"><span class="lit">0.3</span></span><span class="lit">s</span><span class="pln"> ease all</span></span></span><span class="pun">;</span><span class="pln">
  </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pun">-</span><span class="pln">webkit</span><span class="pun">-</span><span class="pln">transition</span></span><span class="pun">:</span><span class="hljs-value"><span class="hljs-number"><span class="lit">0.3</span></span><span class="lit">s</span><span class="pln"> ease all</span></span></span><span class="pun">;</span><span class="pln">
</span><span class="hljs-rule"><span class="pun">}</span></span></span></code></pre>

<p>
	والآن عندما يضغط المستخدم أو يجعل التركيز على مربّع النص سنقوم بإلغاء الحدّ السفلي، وسنغير موقع ماسك المكان ليصبح فوق مربع النص ليبدو كـ label.
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_2672_7" style="">
<code class="hljs css"><span class="hljs-tag"><span class="pln">input</span></span><span class="hljs-pseudo"><span class="pun">:</span><span class="pln">focus</span></span><span class="hljs-rules"><span class="pun">{</span><span class="pln">
  </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">border</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln">none</span></span></span><span class="pun">;</span><span class="pln">
  </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">outline</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln">none</span></span></span><span class="pun">;</span><span class="pln">
</span><span class="hljs-rule"><span class="pun">}</span></span></span>
</code></pre>

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

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_2672_7" style="">
<code class="hljs css"><span class="hljs-tag"><span class="pln">input</span></span><span class="hljs-pseudo"><span class="pun">:</span><span class="pln">focus</span></span><span class="pln"> </span><span class="pun">~</span><span class="pln"> </span><span class="hljs-tag"><span class="pln">label</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-class"><span class="pun">.</span><span class="pln">form</span><span class="pun">-</span><span class="pln">control</span></span><span class="pln"> </span><span class="hljs-tag"><span class="pln">input</span></span><span class="hljs-pseudo"><span class="pun">:</span><span class="pln">valid</span></span><span class="pln"> </span><span class="pun">~</span><span class="pln"> </span><span class="hljs-tag"><span class="pln">label</span></span><span class="pln">  </span><span class="hljs-rules"><span class="pun">{</span><span class="pln">
  </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">top</span></span><span class="pun">:</span><span class="hljs-value"><span class="pun">-</span><span class="hljs-number"><span class="lit">10</span></span><span class="lit">px</span></span></span><span class="pun">;</span><span class="pln">
  </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">font</span><span class="pun">-</span><span class="pln">size</span></span><span class="pun">:</span><span class="hljs-value"><span class="hljs-number"><span class="lit">12</span></span><span class="lit">px</span></span></span><span class="pun">;</span><span class="pln">
  </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">left</span></span><span class="pun">:</span><span class="hljs-value"><span class="hljs-number"><span class="lit">2</span></span><span class="lit">px</span></span></span><span class="pun">;</span><span class="pln">
  </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">color</span></span><span class="pun">:</span><span class="hljs-value"><span class="hljs-hexcolor"><span class="pun">#</span><span class="lit">111</span></span></span></span><span class="pun">;</span><span class="pln">
</span><span class="hljs-rule"><span class="pun">}</span></span></span></code></pre>

<p>
	لن يظهر المحدّد <code>.bar</code> بصورة تلقائية، بمعنى أن عرضه سيكون صفرًا، وإن قمنا بالتركيز على مربع النص فإن عرض المحدّد <code>.bar</code> سيزداد. كما ستلاحظ فقد حدّدنا العرض ضمن الصنفين الكاذبين (<code>:after</code> و <code>:before</code>) حيث سيزداد العرض 50% لكل عنصر زائف، بمعنى أن الزيادة الكلية ستكون 100%، وهكذا سنحصل على تأثير توسّع جميل.
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_2672_7" style="">
<code class="hljs css"><span class="hljs-class"><span class="pun">.</span><span class="pln">bar</span></span><span class="hljs-pseudo"><span class="pun">:</span><span class="pln">before</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-class"><span class="pun">.</span><span class="pln">bar</span></span><span class="hljs-pseudo"><span class="pun">:</span><span class="pln">after</span></span><span class="pln">     </span><span class="hljs-rules"><span class="pun">{</span><span class="pln">
  </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">content</span></span><span class="pun">:</span><span class="hljs-value"><span class="hljs-string"><span class="str">''</span></span></span></span><span class="pun">;</span><span class="pln">
  </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">height</span></span><span class="pun">:</span><span class="hljs-value"><span class="hljs-number"><span class="lit">3</span></span><span class="lit">px</span></span></span><span class="pun">;</span><span class="pln"> 
  </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">width</span></span><span class="pun">:</span><span class="hljs-value"><span class="hljs-number"><span class="lit">0</span></span></span></span><span class="pun">;</span><span class="pln">
  </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">bottom</span></span><span class="pun">:</span><span class="hljs-value"><span class="hljs-number"><span class="lit">1</span></span><span class="lit">px</span></span></span><span class="pun">;</span><span class="pln"> 
  </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">position</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln">absolute</span></span></span><span class="pun">;</span><span class="pln">
  </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">transition</span></span><span class="pun">:</span><span class="hljs-value"><span class="hljs-number"><span class="lit">0.2</span></span><span class="lit">s</span><span class="pln"> ease all</span></span></span><span class="pun">;</span><span class="pln"> 
  </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pun">-</span><span class="pln">moz</span><span class="pun">-</span><span class="pln">transition</span></span><span class="pun">:</span><span class="hljs-value"><span class="hljs-number"><span class="lit">0.2</span></span><span class="lit">s</span><span class="pln"> ease all</span></span></span><span class="pun">;</span><span class="pln"> 
  </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pun">-</span><span class="pln">webkit</span><span class="pun">-</span><span class="pln">transition</span></span><span class="pun">:</span><span class="hljs-value"><span class="hljs-number"><span class="lit">0.2</span></span><span class="lit">s</span><span class="pln"> ease all</span></span></span><span class="pun">;</span><span class="pln">
</span><span class="hljs-rule"><span class="pun">}</span></span></span><span class="pln">

</span><span class="hljs-class"><span class="pun">.</span><span class="pln">bar</span></span><span class="hljs-pseudo"><span class="pun">:</span><span class="pln">before</span></span><span class="pln"> </span><span class="hljs-rules"><span class="pun">{</span><span class="pln">
  </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">left</span></span><span class="pun">:</span><span class="hljs-value"><span class="hljs-number"><span class="lit">50</span></span><span class="pun">%</span></span></span><span class="pun">;</span><span class="pln">
</span><span class="hljs-rule"><span class="pun">}</span></span></span><span class="pln">

</span><span class="hljs-class"><span class="pun">.</span><span class="pln">bar</span></span><span class="hljs-pseudo"><span class="pun">:</span><span class="pln">after</span></span><span class="pln"> </span><span class="hljs-rules"><span class="pun">{</span><span class="pln">
  </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">right</span></span><span class="pun">:</span><span class="hljs-value"><span class="hljs-number"><span class="lit">50</span></span><span class="pun">%</span></span></span><span class="pun">;</span><span class="pln"> 
</span><span class="hljs-rule"><span class="pun">}</span></span></span><span class="pln">


</span><span class="hljs-tag"><span class="pln">input</span></span><span class="hljs-pseudo"><span class="pun">:</span><span class="pln">focus</span></span><span class="pln"> </span><span class="pun">~</span><span class="pln"> </span><span class="hljs-class"><span class="pun">.</span><span class="pln">bar</span></span><span class="hljs-pseudo"><span class="pun">:</span><span class="pln">before</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-tag"><span class="pln">input</span></span><span class="hljs-pseudo"><span class="pun">:</span><span class="pln">focus</span></span><span class="pln"> </span><span class="pun">~</span><span class="pln"> </span><span class="hljs-class"><span class="pun">.</span><span class="pln">bar</span></span><span class="hljs-pseudo"><span class="pun">:</span><span class="pln">after</span></span><span class="pln"> </span><span class="hljs-rules"><span class="pun">{</span><span class="pln">
  </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">width</span></span><span class="pun">:</span><span class="hljs-value"><span class="hljs-number"><span class="lit">50</span></span><span class="pun">%</span></span></span><span class="pun">;</span><span class="pln">
</span><span class="hljs-rule"><span class="pun">}</span></span></span>
</code></pre>

<p>
	سنغيّر الآن لون خلفية الشريط حسب صحة أو عدم صحة البيانات المدخلة، وذلك باستخدام الصنفين الزائفين <code>:valid</code> و <code>:invalid</code>.
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_2672_7" style="">
<code class="hljs css"><span class="hljs-tag"><span class="pln">input</span></span><span class="hljs-pseudo"><span class="pun">:</span><span class="pln">valid</span></span><span class="pln"> </span><span class="pun">~</span><span class="pln"> </span><span class="hljs-class"><span class="pun">.</span><span class="pln">bar</span></span><span class="hljs-pseudo"><span class="pun">:</span><span class="pln">before</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-tag"><span class="pln">input</span></span><span class="hljs-pseudo"><span class="pun">:</span><span class="pln">valid</span></span><span class="pln"> </span><span class="pun">~</span><span class="pln"> </span><span class="hljs-class"><span class="pun">.</span><span class="pln">bar</span></span><span class="hljs-pseudo"><span class="pun">:</span><span class="pln">after</span></span><span class="hljs-rules"><span class="pun">{</span><span class="pln">
  </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">background</span></span><span class="pun">:</span><span class="hljs-value"><span class="hljs-hexcolor"><span class="pun">#</span><span class="lit">2ecc71</span></span></span></span><span class="pun">;</span><span class="pln">
</span><span class="hljs-rule"><span class="pun">}</span></span></span><span class="pln">

</span><span class="hljs-tag"><span class="pln">input</span></span><span class="hljs-pseudo"><span class="pun">:</span><span class="pln">invalid</span></span><span class="pln"> </span><span class="pun">~</span><span class="pln"> </span><span class="hljs-class"><span class="pun">.</span><span class="pln">bar</span></span><span class="hljs-pseudo"><span class="pun">:</span><span class="pln">before</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-tag"><span class="pln">input</span></span><span class="hljs-pseudo"><span class="pun">:</span><span class="pln">invalid</span></span><span class="pln"> </span><span class="pun">~</span><span class="pln"> </span><span class="hljs-class"><span class="pun">.</span><span class="pln">bar</span></span><span class="hljs-pseudo"><span class="pun">:</span><span class="pln">after</span></span><span class="hljs-rules"><span class="pun">{</span><span class="pln">
  </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">background</span></span><span class="pun">:</span><span class="hljs-value"><span class="hljs-hexcolor"><span class="pun">#</span><span class="pln">e74c3c</span></span></span></span><span class="pun">;</span><span class="pln">
</span><span class="hljs-rule"><span class="pun">}</span></span></span>
</code></pre>

<p>
	تعمل هذه الطريقة على متصفحات (+Chrome(10 و (+Firefox(4 و (+Safari(5 و (+Opera(10 و (+IE(10، ولكن لا تعمل على الإصدار التاسع وما دونه من متصفح IE. وجدير بالذكر أنّه لن يتم التحقّق من صحة البيانات بأي شكل من الأشكال، ويمكن استخدام هذه الطريقة في مجال تجربة المستخدم فقط.
</p>

<p>
	ترجمة - وبتصرّف - للمقال <a href="https://coderexample.com/form-validation-in-pure-css/" rel="external nofollow">Form validation in pure css</a> لصاحبه Arkaprava Majumder.
</p>
]]></description><guid isPermaLink="false">556</guid><pubDate>Sat, 04 Nov 2017 15:56:45 +0000</pubDate></item><item><title>&#x627;&#x644;&#x62F;&#x644;&#x64A;&#x644; &#x627;&#x644;&#x633;&#x631;&#x64A;&#x639; &#x625;&#x644;&#x649; &#x644;&#x63A;&#x629; &#x627;&#x644;&#x62A;&#x646;&#x633;&#x64A;&#x642; 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%B3%D8%B1%D9%8A%D8%B9-%D8%A5%D9%84%D9%89-%D9%84%D8%BA%D8%A9-%D8%A7%D9%84%D8%AA%D9%86%D8%B3%D9%8A%D9%82-css-r551/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2017_11/27.png.45905abfc72c654df244b4e9a2f0512d.png" /></p>
<p>
	تعتمد صفحات الويب على HTML التي تُحدد محتوى الصفحة.تعدّ CSS لغة منفصلة عن HTML ودورها هو تحديد الشكل والمظهر الخاص بصفحة الويب. الشفرة الخاصّة بـ CSS عبارة عن قواعد ساكنة. كل قاعدة تأخذ مُحدِدًا Selector أو أكثر، وتُرجع قيم لمجموعة من الخصائص الشكلية. تُطبَّق هذه الخصائص بعد ذلك على عناصر صفحة الويب المشار إليها بواسطة المحددات.<br>
	<strong>ملاحظة</strong>: لتعلم CSS بطريقة صحيحة، ولأن مخرجات هذه اللغة عبارة عن نتائج مرئية، يجب عليك ممارسة كل ما تتعلمه وننصحك بتطبيقه على موقع <a href="http://dabblet.com/" rel="external nofollow">dabblet</a>. الهدف الرئيسي من هذا المقال التركيز على كيفية الكتابة الصحيحة مع بعض النصائح.<br>
	سنتناول في هذا المقال العناوين التالية:
</p>

<ol>
	<li>
		التعليقات.
	</li>
	<li>
		المحددات.
	</li>
	<li>
		الخصائص.
	</li>
	<li>
		طريقة استخدام CSS في الصفحة.
	</li>
	<li>
		الأولوية أم التتالي.
	</li>
	<li>
		استعلامات الميديا.
	</li>
	<li>
		التوافقية.
	</li>
</ol>

<h2>
	التعليقات
</h2>

<p>
	توجد طريقة واحدة لكتابة التعليقات في ملف <a href="https://wiki.hsoub.com/CSS" rel="external">CSS </a>وهي كتابة التعليقات بين الرمزين /* */.
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_2655_7" style=""><span class="com">/* التعليقات تُتكتب هنا
ولا يوجد نمط لكتابة التعليق في سطر واحد سوى هذه الطريقة */</span></pre>

<h2>
	المحددات
</h2>

<p>
	يُستخدم المحدد في استهداف عنصر في صفحة، ويُكتَب بالطريقة التالية:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_2655_7" style=""><code class="hljs css"><span class="hljs-tag"><span class="pln">selector</span></span><span class="pln"> </span><span class="hljs-rules"><span class="pun">{</span><span class="pln"> </span><span class="hljs-rule"><span class="hljs-attribute"><span class="kwd">property</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> value</span></span></span><span class="pun">;</span><span class="pln"> 
</span><span class="hljs-comment"><span class="com">/*  خصائص أخرى*/</span></span><span class="pln"> </span><span class="hljs-rule"><span class="pun">}</span></span></span></code></pre>

<p>
	لنفترض وجود العنصر التالي من نوع div في صحة ويب:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_2655_7" style=""><code class="hljs delphi"><span class="tag">&lt;</span><span class="hljs-keyword"><span class="tag">div</span></span><span class="pln"> </span><span class="hljs-keyword"><span class="atn">class</span></span><span class="pun">=</span><span class="hljs-string"><span class="atv">'class1 class2'</span></span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="hljs-string"><span class="atv">'anID'</span></span><span class="pln"> </span><span class="atn">attr</span><span class="pun">=</span><span class="hljs-string"><span class="atv">'value'</span></span><span class="pln"> </span><span class="atn">otherAttr</span><span class="pun">=</span><span class="hljs-string"><span class="atv">'en-us foo bar'</span></span><span class="pln"> </span><span class="tag">/&gt;</span></code></pre>

<p>
	تستطيع تطبيق قاعدة CSS على هذا العنصر باستخدام أحد أسماء الأصناف Classes التي ينتمي إليها في الصفحة:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_2655_7" style=""><code class="hljs css"><span class="hljs-class"><span class="pun">.</span><span class="pln">class1</span></span><span class="pln"> </span><span class="hljs-rules"><span class="pun">{</span><span class="pln"> </span><span class="hljs-rule"><span class="pun">}</span></span></span></code></pre>

<p>
	أو باستخدام جميع أسماء الأصناف المطبَّقة عليه:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_2655_7" style=""><code class="hljs avrasm"><span class="hljs-preprocessor"><span class="pun">.</span><span class="pln">class</span></span><span class="pln">1</span><span class="hljs-preprocessor"><span class="pun">.</span><span class="pln">class</span></span><span class="pln">2 </span><span class="pun">{</span><span class="pln"> </span><span class="pun">}</span></code></pre>

<p>
	أو باستخدام نوع العنصر:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_2655_7" style=""><code class="hljs erlang"><span class="hljs-keyword"><span class="pln">div</span></span><span class="pln"> </span><span class="hljs-tuple"><span class="pun">{</span><span class="pln"> </span><span class="pun">}</span></span></code></pre>

<p>
	أو باستخدام الرقم الخاص بالعنصر:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_2655_7" style=""><code class="hljs css"><span class="hljs-id"><span class="com">#anID</span></span><span class="com"> </span><span class="hljs-rules"><span class="com">{ </span><span class="hljs-rule"><span class="com">}</span></span></span></code></pre>

<p>
	نستطيع تحدد العنصر من الصفحة في حال وجود صفة Attribute باسم معين:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_2655_7" style=""><code class="hljs css"><span class="hljs-attr_selector"><span class="pun">[</span><span class="pln">attr</span><span class="pun">]</span></span><span class="pln"> </span><span class="hljs-rules"><span class="pun">{</span><span class="pln"> </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">font</span><span class="pun">-</span><span class="pln">size</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln">smaller</span></span></span><span class="pun">;</span><span class="pln"> </span><span class="hljs-rule"><span class="pun">}</span></span></span></code></pre>

<p>
	أو في حالة وجود صفة بقيمة معينة:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_2655_7" style=""><code class="hljs css"><span class="hljs-attr_selector"><span class="pun">[</span><span class="pln">attr</span><span class="pun">=</span><span class="str">'value'</span><span class="pun">]</span></span><span class="pln"> </span><span class="hljs-rules"><span class="pun">{</span><span class="pln"> </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">font</span><span class="pun">-</span><span class="pln">size</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln">smaller</span></span></span><span class="pun">;</span><span class="pln"> </span><span class="hljs-rule"><span class="pun">}</span></span></span></code></pre>

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

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_2655_7" style=""><code class="hljs css"><span class="hljs-attr_selector"><span class="pun">[</span><span class="pln">attr</span><span class="pun">^=</span><span class="str">'val'</span><span class="pun">]</span></span><span class="pln"> </span><span class="hljs-rules"><span class="pun">{</span><span class="pln"> </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">font</span><span class="pun">-</span><span class="pln">size</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln">smaller</span></span></span><span class="pun">;</span><span class="pln"> </span><span class="hljs-rule"><span class="pun">}</span></span></span></code></pre>

<p>
	أما إن كان الشرط يتعلّق بقيمة معينة تنتهي بها الصفة:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_2655_7" style=""><code class="hljs css"><span class="hljs-attr_selector"><span class="pun">[</span><span class="pln">attr$</span><span class="pun">=</span><span class="str">'ue'</span><span class="pun">]</span></span><span class="pln"> </span><span class="hljs-rules"><span class="pun">{</span><span class="pln"> </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">font</span><span class="pun">-</span><span class="pln">size</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln">smaller</span></span></span><span class="pun">;</span><span class="pln"> </span><span class="hljs-rule"><span class="pun">}</span></span></span></code></pre>

<p>
	نستطيع تحديد العنصر في حالة احتواء الصفة على قيمة معينة ضمن قائمة قيم منفصلة عن بعضها بمسافة فارغة (يوافق الشرط أدناه العناصر التي لديها صفة otherAttr تساوي “foo” أو “foo bar” أو “foo bar far” …إلخ):
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_2655_7" style=""><code class="hljs json"><span class="pun">[</span><span class="pln">otherAttr</span><span class="pun">~=</span><span class="str">'foo'</span><span class="pun">]</span><span class="pln"> </span><span class="pun">{</span><span class="pln"> </span><span class="pun">}</span></code></pre>

<p>
	أو تحديد العنصر في حالة احتواء الصفة على قيمة معينة ضمن قائمة قيم منفصلة عن بعضها برمز – كما في المثال التالي:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_2655_7" style=""><code class="hljs css"><span class="hljs-attr_selector"><span class="pun">[</span><span class="pln">otherAttr</span><span class="pun">|=</span><span class="str">'en'</span><span class="pun">]</span></span><span class="pln"> </span><span class="hljs-rules"><span class="pun">{</span><span class="pln"> </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">font</span><span class="pun">-</span><span class="pln">size</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln">smaller</span></span></span><span class="pun">;</span><span class="pln"> </span><span class="hljs-rule"><span class="pun">}</span></span></span></code></pre>

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

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_2655_7" style=""><code class="hljs axapta"><span class="hljs-keyword"><span class="pln">div</span></span><span class="pun">.</span><span class="pln">some</span><span class="pun">-</span><span class="hljs-class"><span class="hljs-keyword"><span class="kwd">class</span></span><span class="pun">[</span><span class="hljs-title"><span class="pln">attr</span></span><span class="pln">$</span><span class="pun">=</span><span class="str">'</span><span class="hljs-title"><span class="str">ue</span></span><span class="str">'</span><span class="pun">]</span><span class="pln"> </span><span class="pun">{</span></span><span class="pln"> </span><span class="pun">}</span></code></pre>

<p>
	من الممكن أيضا أن تقوم بتحديد عنصر يكون تابعا (ابن) لعنصر آخر:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_2655_7" style=""><code class="hljs applescript"><span class="hljs-keyword"><span class="pln">div</span></span><span class="pun">.</span><span class="hljs-keyword"><span class="pln">some</span></span><span class="pun">-</span><span class="pln">parent </span><span class="pun">&gt;</span><span class="pln"> </span><span class="pun">.</span><span class="hljs-type"><span class="kwd">class</span></span><span class="pun">-</span><span class="hljs-property"><span class="pln">name</span></span><span class="pln"> </span><span class="pun">{</span><span class="pln"> </span><span class="pun">}</span></code></pre>

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

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_2655_7" style=""><code class="hljs applescript"><span class="hljs-keyword"><span class="pln">div</span></span><span class="pun">.</span><span class="hljs-keyword"><span class="pln">some</span></span><span class="pun">-</span><span class="pln">parent </span><span class="pun">.</span><span class="hljs-type"><span class="kwd">class</span></span><span class="pun">-</span><span class="hljs-property"><span class="pln">name</span></span><span class="pln"> </span><span class="pun">{</span><span class="pln"> </span><span class="pun">}</span></code></pre>

<p>
	يختلف المُحدد التالي عن المُحدد السابق لوجود مسافة فاصلة بين الأسماء:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_2655_7" style=""><code class="hljs applescript"><span class="hljs-keyword"><span class="pln">div</span></span><span class="pun">.</span><span class="hljs-keyword"><span class="pln">some</span></span><span class="pun">-</span><span class="pln">parent</span><span class="pun">.</span><span class="hljs-type"><span class="kwd">class</span></span><span class="pun">-</span><span class="hljs-property"><span class="pln">name</span></span><span class="pln"> </span><span class="pun">{</span><span class="pln"> </span><span class="pun">}</span></code></pre>

<p>
	نستطيع تحديد العنصر بناءً على عنصر آخر مجاور له باستخدام الطريقة التالية:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_2655_7" style=""><code class="hljs lasso"><span class="hljs-built_in"><span class="pun">.</span></span><span class="pln">i</span><span class="hljs-attribute"><span class="pun">-</span><span class="pln">am</span></span><span class="hljs-attribute"><span class="pun">-</span><span class="pln">just</span></span><span class="hljs-attribute"><span class="pun">-</span><span class="pln">before</span></span><span class="pln"> </span><span class="hljs-subst"><span class="pun">+</span></span><span class="pln"> </span><span class="hljs-built_in"><span class="pun">.</span></span><span class="kwd">this</span><span class="hljs-attribute"><span class="pun">-</span><span class="pln">element</span></span><span class="pln"> </span><span class="pun">{</span><span class="pln"> </span><span class="pun">}</span></code></pre>

<p>
	أو بناءً على أي عنصر يسبق العنصر الذي نريده:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_2655_7" style=""><code class="hljs lasso"><span class="hljs-built_in"><span class="pun">.</span></span><span class="pln">i</span><span class="hljs-attribute"><span class="pun">-</span><span class="pln">am</span></span><span class="hljs-attribute"><span class="pun">-</span><span class="pln">any</span></span><span class="hljs-attribute"><span class="pun">-</span><span class="pln">element</span></span><span class="hljs-attribute"><span class="pun">-</span><span class="pln">before</span></span><span class="pln"> </span><span class="pun">~</span><span class="pln"> </span><span class="hljs-built_in"><span class="pun">.</span></span><span class="kwd">this</span><span class="hljs-attribute"><span class="pun">-</span><span class="pln">element</span></span><span class="pln"> </span><span class="pun">{</span><span class="pln"> </span><span class="pun">}</span></code></pre>

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

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_2655_7" style=""><code class="hljs css"><span class="hljs-tag"><span class="pln">selector</span></span><span class="hljs-pseudo"><span class="pun">:</span><span class="pln">hover</span></span><span class="pln"> </span><span class="hljs-rules"><span class="pun">{</span><span class="pln"> </span><span class="hljs-rule"><span class="pun">}</span></span></span></code></pre>

<p>
	أو رابط تمت زيارته:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_2655_7" style=""><code class="hljs css"><span class="hljs-tag"><span class="pln">selector</span></span><span class="hljs-pseudo"><span class="pun">:</span><span class="pln">visited</span></span><span class="pln"> </span><span class="hljs-rules"><span class="pun">{</span><span class="pln"> </span><span class="hljs-rule"><span class="pun">}</span></span></span></code></pre>

<p>
	أو لم تتم زيارته:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_2655_7" style=""><code class="hljs css"><span class="hljs-tag"><span class="pln">selected</span></span><span class="hljs-pseudo"><span class="pun">:</span><span class="pln">link</span></span><span class="pln"> </span><span class="hljs-rules"><span class="pun">{</span><span class="pln"> </span><span class="hljs-rule"><span class="pun">}</span></span></span></code></pre>

<p>
	أو عنصر في حالة التركيز:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_2655_7" style=""><code class="hljs css"><span class="hljs-tag"><span class="pln">selected</span></span><span class="hljs-pseudo"><span class="pun">:</span><span class="pln">focus</span></span><span class="pln"> </span><span class="hljs-rules"><span class="pun">{</span><span class="pln"> </span><span class="hljs-rule"><span class="pun">}</span></span></span></code></pre>

<p>
	لتحديد أول عنصر تابع لعنصر:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_2655_7" style=""><code class="hljs css"><span class="hljs-tag"><span class="pln">selector</span></span><span class="hljs-pseudo"><span class="pun">:</span><span class="pln">first</span><span class="pun">-</span><span class="pln">child</span></span><span class="pln"> </span><span class="hljs-rules"><span class="pun">{</span><span class="hljs-rule"><span class="pun">}</span></span></span></code></pre>

<p>
	لتحديد آخر عنصر تابع لعنصر:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_2655_7" style=""><code class="hljs css"><span class="hljs-tag"><span class="pln">selector</span></span><span class="hljs-pseudo"><span class="pun">:</span><span class="kwd">last</span><span class="pun">-</span><span class="pln">child</span></span><span class="pln"> </span><span class="hljs-rules"><span class="pun">{</span><span class="hljs-rule"><span class="pun">}</span></span></span></code></pre>

<p>
	نستطيع تنسيق أجزاء محددة من العنصر باستخدام العناصر الزائدة Pseudo elements، فمثلا، نستخدم before لإضافة محتوى قبل محتوى عنصر معين:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_2655_7" style=""><code class="hljs css"><span class="hljs-tag"><span class="pln">selector</span></span><span class="hljs-pseudo"><span class="pun">::</span><span class="pln">before</span></span><span class="pln"> </span><span class="hljs-rules"><span class="pun">{</span><span class="hljs-rule"><span class="pun">}</span></span></span></code></pre>

<p>
	وafter لإضافة محتوى بعد محتوى عنصر معين:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_2655_7" style=""><code class="hljs css"><span class="hljs-tag"><span class="pln">selector</span></span><span class="hljs-pseudo"><span class="pun">::</span><span class="pln">after</span></span><span class="pln"> </span><span class="hljs-rules"><span class="pun">{</span><span class="hljs-rule"><span class="pun">}</span></span></span></code></pre>

<p>
	في أماكن معينة، يُستخدم رمز * كحرف “بدل” لاختيار كافة العناصر.
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_2655_7" style=""><code class="hljs css"><span class="pun">*</span><span class="pln"> </span><span class="hljs-rules"><span class="pun">{</span><span class="pln"> </span><span class="hljs-rule"><span class="pun">}</span></span></span><span class="pln"> </span><span class="hljs-comment"><span class="com">/* كل العناصر */</span></span><span class="pln">
</span><span class="hljs-class"><span class="pun">.</span><span class="pln">parent</span></span><span class="pln"> </span><span class="pun">*</span><span class="pln"> </span><span class="hljs-rules"><span class="pun">{</span><span class="pln"> </span><span class="hljs-rule"><span class="pun">}</span></span></span><span class="pln"> </span><span class="hljs-comment"><span class="com">/* كل التابعين */</span></span><span class="pln">
</span><span class="hljs-class"><span class="pun">.</span><span class="pln">parent</span></span><span class="pln"> </span><span class="pun">&gt;</span><span class="pln"> </span><span class="pun">*</span><span class="pln"> </span><span class="hljs-rules"><span class="pun">{</span><span class="pln"> </span><span class="hljs-rule"><span class="pun">}</span></span></span><span class="pln"> </span><span class="hljs-comment"><span class="com">/* كل الأبناء */</span></span></code></pre>

<h2 id="الخصائص">
	الخصائص
</h2>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_2655_7" style=""><code class="hljs oxygene"><span class="hljs-keyword"><span class="pln">selector</span></span><span class="pln"> </span><span class="hljs-comment"><span class="pun">{</span></span></code></pre>

<p>
	وحدات الطول إما مطلقة أو نسبية.<br>
	الوحدات النسبية:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_2655_7" style=""><code class="hljs scss"><span class="pln">    </span><span class="hljs-attribute"><span class="pln">width</span></span><span class="hljs-value"><span class="pun">:</span><span class="pln"> </span><span class="hljs-number"><span class="lit">50</span></span><span class="pun">%;</span></span><span class="pln">     </span><span class="hljs-comment"><span class="com">/* نسبة من عرض العنصر الأب */</span></span><span class="pln">
    </span><span class="hljs-attribute"><span class="pln">font</span><span class="pun">-</span><span class="pln">size</span></span><span class="hljs-value"><span class="pun">:</span><span class="pln"> </span><span class="hljs-number"><span class="lit">2</span></span><span class="lit">em</span><span class="pun">;</span></span><span class="pln">   </span><span class="hljs-comment"><span class="com">/* مضاعفة حجم الخط الخاص بالعنصر نفسه*/</span></span><span class="pln">
    </span><span class="hljs-attribute"><span class="pln">font</span><span class="pun">-</span><span class="pln">size</span></span><span class="hljs-value"><span class="pun">:</span><span class="pln"> </span><span class="hljs-number"><span class="lit">2</span></span><span class="lit">rem</span><span class="pun">;</span></span><span class="pln">  </span><span class="hljs-comment"><span class="com">/* مضاعفة حجم الخط حسب حجم الخط الخاص بالعنصر الأب */</span></span><span class="pln">
    </span><span class="hljs-attribute"><span class="pln">font</span><span class="pun">-</span><span class="pln">size</span></span><span class="hljs-value"><span class="pun">:</span><span class="pln"> </span><span class="hljs-number"><span class="lit">2</span></span><span class="lit">vw</span><span class="pun">;</span></span><span class="pln">       </span><span class="hljs-comment"><span class="com">/* مضاعفة حجم الخط بالنسبة ل 1% من عرض المساحة المرئية للمستخدم*/</span></span><span class="pln">
    </span><span class="hljs-attribute"><span class="pln">font</span><span class="pun">-</span><span class="pln">size</span></span><span class="hljs-value"><span class="pun">:</span><span class="pln"> </span><span class="hljs-number"><span class="lit">2</span></span><span class="lit">vh</span><span class="pun">;</span></span><span class="pln">   </span><span class="hljs-comment"><span class="com">/* من الارتفاع*/</span></span><span class="pln">
    </span><span class="hljs-attribute"><span class="pln">font</span><span class="pun">-</span><span class="pln">size</span></span><span class="hljs-value"><span class="pun">:</span><span class="pln"> </span><span class="hljs-number"><span class="lit">2</span></span><span class="lit">vmin</span><span class="pun">;</span></span><span class="pln"> </span><span class="hljs-comment"><span class="com">/* مضاعفة حجم الخط لأصغر قيمة من الارتفاع أو العرض*/</span></span><span class="pln">
    </span><span class="hljs-attribute"><span class="pln">font</span><span class="pun">-</span><span class="pln">size</span></span><span class="hljs-value"><span class="pun">:</span><span class="pln"> </span><span class="hljs-number"><span class="lit">2</span></span><span class="lit">vmax</span><span class="pun">;</span></span><span class="pln"> </span><span class="hljs-comment"><span class="com">/* لاكبر قيمة */</span></span></code></pre>

<p>
	القيم المطلقة:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_2655_7" style=""><code class="hljs scss"><span class="pln">    </span><span class="hljs-attribute"><span class="pln">width</span></span><span class="hljs-value"><span class="pun">:</span><span class="pln"> </span><span class="hljs-number"><span class="lit">200</span></span><span class="lit">px</span><span class="pun">;</span></span><span class="pln">     </span><span class="hljs-comment"><span class="com">/* بكسل */</span></span><span class="pln">
    </span><span class="hljs-attribute"><span class="pln">font</span><span class="pun">-</span><span class="pln">size</span></span><span class="hljs-value"><span class="pun">:</span><span class="pln"> </span><span class="hljs-number"><span class="lit">20</span></span><span class="lit">pt</span><span class="pun">;</span></span><span class="pln">  </span><span class="hljs-comment"><span class="com">/* نقطة */</span></span><span class="pln">
    </span><span class="hljs-attribute"><span class="pln">width</span></span><span class="hljs-value"><span class="pun">:</span><span class="pln"> </span><span class="hljs-number"><span class="lit">5</span></span><span class="lit">cm</span><span class="pun">;</span></span><span class="pln">       </span><span class="hljs-comment"><span class="com">/* سنتميتر */</span></span><span class="pln">
    </span><span class="hljs-attribute"><span class="pln">min</span><span class="pun">-</span><span class="pln">width</span></span><span class="hljs-value"><span class="pun">:</span><span class="pln"> </span><span class="hljs-number"><span class="lit">50</span></span><span class="lit">mm</span><span class="pun">;</span></span><span class="pln">  </span><span class="hljs-comment"><span class="com">/* مليميتر */</span></span><span class="pln">
    </span><span class="hljs-attribute"><span class="pln">max</span><span class="pun">-</span><span class="pln">width</span></span><span class="hljs-value"><span class="pun">:</span><span class="pln"> </span><span class="hljs-number"><span class="lit">5</span></span><span class="lit">in</span><span class="pun">;</span></span><span class="pln">   </span><span class="hljs-comment"><span class="com">/* إنش */</span></span></code></pre>

<p>
	الألوان:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_2655_7" style=""><code class="hljs scss"><span class="pln">    </span><span class="hljs-attribute"><span class="pln">color</span></span><span class="hljs-value"><span class="pun">:</span><span class="pln"> </span><span class="hljs-hexcolor"><span class="com">#F6E</span></span><span class="com">;</span></span><span class="com">      </span><span class="hljs-comment"><span class="com">/* صيغة سداسية قصيرة */</span></span><span class="pln">
    </span><span class="hljs-attribute"><span class="pln">color</span></span><span class="hljs-value"><span class="pun">:</span><span class="pln"> </span><span class="hljs-hexcolor"><span class="com">#FF66EE</span></span><span class="com">;</span></span><span class="com">   </span><span class="hljs-comment"><span class="com">/* صيغة سداسية طويلة */</span></span><span class="pln">
    </span><span class="hljs-attribute"><span class="pln">color</span></span><span class="hljs-value"><span class="pun">:</span><span class="pln"> tomato</span><span class="pun">;</span></span><span class="pln">    </span><span class="hljs-comment"><span class="com">/* حسب الاسم */</span></span><span class="pln">
    </span><span class="hljs-attribute"><span class="pln">color</span></span><span class="hljs-value"><span class="pun">:</span><span class="pln"> rgb</span><span class="pun">(</span><span class="hljs-number"><span class="lit">255</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-number"><span class="lit">255</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-number"><span class="lit">255</span></span><span class="pun">);</span></span><span class="pln">   </span><span class="hljs-comment"><span class="com">/* كقيم  rgb */</span></span><span class="pln">
    </span><span class="hljs-attribute"><span class="pln">color</span></span><span class="hljs-value"><span class="pun">:</span><span class="pln"> rgb</span><span class="pun">(</span><span class="hljs-number"><span class="lit">10</span></span><span class="pun">%,</span><span class="pln"> </span><span class="hljs-number"><span class="lit">20</span></span><span class="pun">%,</span><span class="pln"> </span><span class="hljs-number"><span class="lit">50</span></span><span class="pun">%);</span></span><span class="pln">   </span><span class="hljs-comment"><span class="com">/* كنسبة  rgb */</span></span><span class="pln">
    </span><span class="hljs-attribute"><span class="pln">color</span></span><span class="hljs-value"><span class="pun">:</span><span class="pln"> rgba</span><span class="pun">(</span><span class="hljs-number"><span class="lit">255</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-number"><span class="lit">0</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-number"><span class="lit">0</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-number"><span class="lit">0.3</span></span><span class="pun">);</span></span><span class="pln"> </span><span class="hljs-comment"><span class="com">/*  كقيم rgba */</span></span><span class="pln">
    </span><span class="hljs-attribute"><span class="pln">color</span></span><span class="hljs-value"><span class="pun">:</span><span class="pln"> transparent</span><span class="pun">;</span></span><span class="pln">          </span><span class="hljs-comment"><span class="com">/* الشفافية صفر*/</span></span><span class="pln">
    </span><span class="hljs-attribute"><span class="pln">color</span></span><span class="hljs-value"><span class="pun">:</span><span class="pln"> hsl</span><span class="pun">(</span><span class="hljs-number"><span class="lit">0</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-number"><span class="lit">100</span></span><span class="pun">%,</span><span class="pln"> </span><span class="hljs-number"><span class="lit">50</span></span><span class="pun">%);</span></span><span class="pln">    </span><span class="hljs-comment"><span class="com">/* كنسب  hsl */</span></span><span class="pln">
    </span><span class="hljs-attribute"><span class="pln">color</span></span><span class="hljs-value"><span class="pun">:</span><span class="pln"> hsla</span><span class="pun">(</span><span class="hljs-number"><span class="lit">0</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-number"><span class="lit">100</span></span><span class="pun">%,</span><span class="pln"> </span><span class="hljs-number"><span class="lit">50</span></span><span class="pun">%,</span><span class="pln"> </span><span class="hljs-number"><span class="lit">0.3</span></span><span class="pun">);</span></span><span class="pln"> </span><span class="hljs-comment"><span class="com">/* كنسب  hsla */</span></span></code></pre>

<p>
	الحدود:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_2655_7" style=""><code class="hljs scss"><span class="pln">    </span><span class="hljs-attribute"><span class="pln">border</span><span class="pun">-</span><span class="pln">width</span></span><span class="hljs-value"><span class="pun">:</span><span class="hljs-number"><span class="lit">5</span></span><span class="lit">px</span><span class="pun">;</span></span><span class="pln">
    </span><span class="hljs-attribute"><span class="pln">border</span><span class="pun">-</span><span class="pln">style</span></span><span class="hljs-value"><span class="pun">:</span><span class="pln">solid</span><span class="pun">;</span></span><span class="pln">
    </span><span class="hljs-attribute"><span class="pln">border</span><span class="pun">-</span><span class="pln">color</span></span><span class="hljs-value"><span class="pun">:</span><span class="pln">red</span><span class="pun">;</span></span><span class="pln">     
    </span><span class="hljs-attribute"><span class="pln">border</span></span><span class="hljs-value"><span class="pun">:</span><span class="pln"> </span><span class="hljs-number"><span class="lit">5</span></span><span class="lit">px</span><span class="pln"> solid red</span><span class="pun">;</span></span><span class="pln"> </span><span class="hljs-comment"><span class="com">/* اختصار القواعد السابقة في قاعدة واحدة  */</span></span><span class="pln">
    </span><span class="hljs-attribute"><span class="pln">border</span><span class="pun">-</span><span class="pln">radius</span></span><span class="hljs-value"><span class="pun">:</span><span class="hljs-number"><span class="lit">20</span></span><span class="lit">px</span><span class="pun">;</span></span><span class="pln">    </span><span class="hljs-comment"><span class="com">/* خاصية ابتداء من css3 */</span></span><span class="pln">    </span></code></pre>

<p>
	الصور:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_2655_7" style=""><code class="hljs http"><span class="pln">    </span><span class="hljs-attribute"><span class="pln">background</span><span class="pun">-</span><span class="pln">image</span></span><span class="pun">:</span><span class="pln"> </span><span class="hljs-string"><span class="pln">url</span><span class="pun">(</span><span class="str">/img-path/</span><span class="pln">img</span><span class="pun">.</span><span class="pln">jpg</span><span class="pun">);</span><span class="pln"> </span></span></code></pre>

<p>
	الخطوط:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_2655_7" style=""><code class="hljs http"><span class="pln">    </span><span class="hljs-attribute"><span class="pln">font</span><span class="pun">-</span><span class="pln">family</span></span><span class="pun">:</span><span class="pln"> </span><span class="hljs-string"><span class="typ">Arial</span><span class="pun">;</span></span></code></pre>

<p>
	إذا كان اسم الخط به مسافات فيجب وضع الاسم بين علامتي تنصيص:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_2655_7" style=""><code class="hljs scss"><span class="pln">    </span><span class="hljs-attribute"><span class="pln">font</span><span class="pun">-</span><span class="pln">family</span></span><span class="hljs-value"><span class="pun">:</span><span class="pln"> </span><span class="hljs-string"><span class="str">"Courier New"</span></span><span class="pun">;</span></span></code></pre>

<p>
	في نسرُد لائحة من الخطوط وإن لم يجد المتصفح الخط، يستخدم نوع الخط التالي:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_2655_7" style=""><code class="hljs scss"><span class="pln">    </span><span class="hljs-attribute"><span class="pln">font</span><span class="pun">-</span><span class="pln">family</span></span><span class="hljs-value"><span class="pun">:</span><span class="pln"> </span><span class="hljs-string"><span class="str">"Courier New"</span></span><span class="pun">,</span><span class="pln"> </span><span class="typ">Trebuchet</span><span class="pun">,</span><span class="pln"> </span><span class="typ">Arial</span><span class="pun">,</span><span class="pln"> sans</span><span class="pun">-</span><span class="pln">serif</span><span class="pun">;</span></span><span class="pln">
</span><span class="pun">}</span></code></pre>

<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 id="طريقة-استخدام-css-في-الصفحة">
	طريقة استخدام CSS في الصفحة
</h2>

<p>
	توجد ثلاث طرق لإجراء عملية تنسيق صفحة الويب وهي كالتالي:<br>
	1- تضمين اسم الملف بالامتداد .css داخل العنصر head في بداية صفحة html كالتالي (وهي الطريقة المُوصى بها):
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_2655_7" style=""><code class="hljs rust"><span class="tag">&lt;link</span><span class="pln"> </span><span class="atn">rel</span><span class="pun">=</span><span class="hljs-string"><span class="atv">'stylesheet'</span></span><span class="pln"> </span><span class="hljs-keyword"><span class="atn">type</span></span><span class="pun">=</span><span class="hljs-string"><span class="atv">'text/css'</span></span><span class="pln"> </span><span class="atn">href</span><span class="pun">=</span><span class="hljs-string"><span class="atv">'path/to/style.css'</span></span><span class="tag">&gt;</span></code></pre>

<p>
	2- كتابة قواعد css مباشرة في ملف الصفحة:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_2655_7" style=""><code class="hljs xml"><span class="pln">    </span><span class="hljs-tag"><span class="tag">&lt;</span><span class="hljs-title"><span class="tag">style</span></span><span class="tag">&gt;</span></span><span class="css"><span class="pln">
        </span><span class="hljs-tag"><span class="pln">a</span></span><span class="pln"> </span><span class="hljs-rules"><span class="pun">{</span><span class="pln"> </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">color</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> purple</span></span></span><span class="pun">;</span><span class="pln"> </span><span class="hljs-rule"><span class="pun">}</span></span></span><span class="pln">
    </span></span><span class="hljs-tag"><span class="tag">&lt;/</span><span class="hljs-title"><span class="tag">style</span></span><span class="tag">&gt;</span></span></code></pre>

<p>
	3- تنسيق العنصر بطريقة مباشرة:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_2655_7" style=""><code class="hljs xml"><span class="hljs-tag"><span class="tag">&lt;</span><span class="hljs-title"><span class="tag">div</span></span><span class="pln"> </span><span class="hljs-attribute"><span class="atn">style</span></span><span class="pun">=</span><span class="hljs-value"><span class="atv">"</span><span class="pln">border</span><span class="pun">:</span><span class="pln"> </span><span class="lit">1px</span><span class="pln"> solid red</span><span class="pun">;</span><span class="atv">"</span></span><span class="tag">&gt;</span></span><span class="pln">
</span><span class="hljs-tag"><span class="tag">&lt;/</span><span class="hljs-title"><span class="tag">div</span></span><span class="tag">&gt;</span></span><span class="pln">      </span></code></pre>

<h2 id="الأولوية-أم-التتالي">
	الأولوية أم التتالي
</h2>

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

<h2 id="استعلامات-الوسائط-media-queris">
	استعلامات الوسائط Media queris
</h2>

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

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_2655_7" style=""><code class="hljs css"><span class="hljs-tag"><span class="pln">h1</span></span><span class="pln"> </span><span class="hljs-rules"><span class="pun">{</span><span class="pln">
  </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">font</span><span class="pun">-</span><span class="pln">size</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> </span><span class="hljs-number"><span class="lit">2</span></span><span class="lit">em</span></span></span><span class="pun">;</span><span class="pln">
  </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">color</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> white</span></span></span><span class="pun">;</span><span class="pln">
  </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">background</span><span class="pun">-</span><span class="pln">color</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> black</span></span></span><span class="pun">;</span><span class="pln">
</span><span class="hljs-rule"><span class="pun">}</span></span></span></code></pre>

<p>
	يعدّل استعلام الوسيط التالي القاعدة السابقة عند الطباعة:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_2655_7" style=""><code class="hljs css"><span class="hljs-at_rule"><span class="lit">@</span><span class="hljs-keyword"><span class="lit">media</span></span><span class="pln"> </span><span class="kwd">print</span><span class="pln"> </span></span><span class="pun">{</span><span class="pln">
  </span><span class="hljs-tag"><span class="pln">h1</span></span><span class="pln"> </span><span class="hljs-rules"><span class="pun">{</span><span class="pln">
    </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">color</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> black</span></span></span><span class="pun">;</span><span class="pln">
    </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">background</span><span class="pun">-</span><span class="pln">color</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> white</span></span></span><span class="pun">;</span><span class="pln">
  </span><span class="hljs-rule"><span class="pun">}</span></span></span><span class="pln">
</span><span class="pun">}</span></code></pre>

<p>
	يجعل استعلام الوسيط التالي حجم الخط أكبر في شاشة بعرض 480 بكسل على الأقل:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_2655_7" style=""><code class="hljs css"><span class="hljs-at_rule"><span class="lit">@</span><span class="hljs-keyword"><span class="lit">media</span></span><span class="pln"> screen </span><span class="kwd">and</span><span class="pln"> </span><span class="pun">(</span><span class="pln">min</span><span class="pun">-</span><span class="pln">width</span><span class="pun">:</span><span class="pln"> </span><span class="hljs-number"><span class="lit">480</span></span><span class="lit">px</span><span class="pun">)</span><span class="pln"> </span></span><span class="pun">{</span><span class="pln">
  </span><span class="hljs-tag"><span class="pln">h1</span></span><span class="pln"> </span><span class="hljs-rules"><span class="pun">{</span><span class="pln">
    </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">font</span><span class="pun">-</span><span class="pln">size</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> </span><span class="hljs-number"><span class="lit">3</span></span><span class="lit">em</span></span></span><span class="pun">;</span><span class="pln">
    </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">font</span><span class="pun">-</span><span class="pln">weight</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> normal</span></span></span><span class="pun">;</span><span class="pln">
  </span><span class="hljs-rule"><span class="pun">}</span></span></span><span class="pln">
</span><span class="pun">}</span></code></pre>

<p>
	تحتوي استعلامات الوسائط على الخصائص التالية:
</p>

<p>
	width, height, device-width, device-height, orientation, aspect-ratio, device-aspect-ratio, color,color-index, monochrome, resolution, scan, grid.<br>
	من الممكن أن يسبق أغلب الخصائص السابقة خاصيتي min- و max-.<br>
	خاصية الدقة Resolution غير مدعومة على الأجهزة القديمة، وبدلا من ذلك استخدم خاصية device-pixel-ratio.<br>
	تحاول كثير من أجهزة الجوال والأجهزة اللوحية عرض الصفحة كما لو كانت على سطح المكتب العادي إلا إذا قمت بإضافة الصفة viewport بالشكل التالي:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_2655_7" style=""><code class="hljs xml"><span class="hljs-tag"><span class="tag">&lt;</span><span class="hljs-title"><span class="tag">head</span></span><span class="tag">&gt;</span></span><span class="pln">
  </span><span class="hljs-tag"><span class="tag">&lt;</span><span class="hljs-title"><span class="tag">meta</span></span><span class="pln"> </span><span class="hljs-attribute"><span class="atn">name</span></span><span class="pun">=</span><span class="hljs-value"><span class="atv">"viewport"</span></span><span class="pln"> </span><span class="hljs-attribute"><span class="atn">content</span></span><span class="pun">=</span><span class="hljs-value"><span class="atv">"width=device-width; initial-scale=1.0"</span></span><span class="tag">&gt;</span></span><span class="pln">
</span><span class="hljs-tag"><span class="tag">&lt;/</span><span class="hljs-title"><span class="tag">head</span></span><span class="tag">&gt;</span></span></code></pre>

<h2 id="التوافقية">
	التوافقية
</h2>

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

<p>
	ترجمة – بتصرّف – للمقال <a href="https://learnxinyminutes.com/docs/css/" rel="external nofollow">Learn X in Y minutes Where X=CSS</a>.
</p>
]]></description><guid isPermaLink="false">551</guid><pubDate>Fri, 27 Oct 2017 11:04:00 +0000</pubDate></item><item><title>&#x62A;&#x623;&#x62B;&#x64A;&#x631; &#x627;&#x644;&#x627;&#x646;&#x62A;&#x642;&#x627;&#x644; &#x641;&#x64A; &#x645;&#x634;&#x647;&#x62F; &#x641;&#x636;&#x627;&#x626;&#x64A;</title><link>https://academy.hsoub.com/programming/css/%D8%AA%D8%A3%D8%AB%D9%8A%D8%B1-%D8%A7%D9%84%D8%A7%D9%86%D8%AA%D9%82%D8%A7%D9%84-%D9%81%D9%8A-%D9%85%D8%B4%D9%87%D8%AF-%D9%81%D8%B6%D8%A7%D8%A6%D9%8A-r545/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2017_10/59e067b302ff5_main(5).jpg.c893676ec04f3ba9f7f7ea3dcc5d1274.jpg" /></p>

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

<h2 id="الانتقالات-أم-الحركات">
	الانتقالات أم الحركات
</h2>

<p>
	الانتقالات (transitions) رائعة للانتقال بسلاسة من حالة إلى أخرى (والعودة إلى الحالة الأصلية مجددًا) في المتصفح، وقد تبدو أنها بديلٌ أبسط من الحركات (animation) التي تستعمل <code>keyframes</code> و <code>animation</code>، لكن لكلٍ ميزاتها وفوائدها.<br>
	فمثلًا، لن تستفيد من الانتقالات إذا كنت تريد حدوث حركة عند تحميل الصفحة، أو إذا أردتَ أن تستمر الحركة طوال الوقت؛ أما إذا كانت لديك حالتين وأردتَ التحريك بينهما بسهولة فستستفيد حينئذٍ من الانتقالات. إذا كنتَ مهتمًا بالفروقات بين الانتقالات والحركات فأنصحك بمراجعة <a href="https://cssanimation.rocks/transition-vs-animation/" rel="external nofollow">هذه المقالة</a>.<br>
	سنبني في هذا الدرس مشهدًا من الفضاء وسنضيف إليه تأثير مرور الفأرة فوقه لعرض بعض المعلومات الإضافية عن الكوكب، وسنفِّكر بحالتَي العناصر وما هي الخاصيات التي سنستخدمها للحصول على انتقال سلس وجميل. يمكنك الاطلاع على <a href="https://codepen.io/donovanh/full/qmNgXW/" rel="external nofollow">المثال الكامل</a> لأخذ فكرة عن ما سنفعله.<br>
	 
</p>

<p>
	<iframe allowfullscreen="true" allowtransparency="true" frameborder="no" height="600" scrolling="no" src="https://codepen.io/donovanh/embed/qmNgXW/?height=600&amp;theme-id=dark&amp;default-tab=css,result&amp;embed-version=2" style="width: 100%;" title="Planet hover effect part 3: with transition">See the Pen &amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;a data-cke-saved-href=&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;#39;https://codepen.io/donovanh/pen/qmNgXW/&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;#39; href=&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;#39;https://codepen.io/donovanh/pen/qmNgXW/&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;#39;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;Planet hover effect part 3: with transition&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;/a&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt; by Donovan Hutchinson (&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;a data-cke-saved-href=&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;#39;https://codepen.io/donovanh&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;#39; href=&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;#39;https://codepen.io/donovanh&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;#39;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;@donovanh&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;/a&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;) on &amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;a data-cke-saved-href=&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;#39;https://codepen.io&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;#39; href=&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;#39;https://codepen.io&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;#39;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;CodePen&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;/a&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;.</iframe>
</p>

<h2 id="ضبط-الحالتين">
	ضبط الحالتين
</h2>

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

<h3 id="حالة-البداية">
	حالة البداية
</h3>

<p>
	سيكون كوكب الأرض في منتصف المشهد بدايةً، وسيدور القمر حوله.<br>
	شيفرة HTML تتضمن عنصر article الذي نضع فيه عنصرَي <code>earth</code> و <code>moon</code>، لاحظ أنَّ عنصر <code>moon</code> موجود داخل حاوية باسم <code>moon-container</code> لأنها ستساعدنا بموضع القمر لاحقًا.
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_7794_8" style="">
<span class="tag">&lt;article</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"earth-demo"</span><span class="tag">&gt;</span><span class="pln">
  </span><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"earth"</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">"https://cssanimation.rocks/images/random/earth.png"</span><span class="tag">&gt;</span><span class="pln">
  </span><span class="tag">&lt;/div&gt;</span><span class="pln">
  </span><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"moon-container"</span><span class="tag">&gt;</span><span class="pln">
    </span><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"moon"</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">"https://cssanimation.rocks/images/random/moon.png"</span><span class="tag">&gt;</span><span class="pln">
    </span><span class="tag">&lt;/div&gt;</span><span class="pln">
  </span><span class="tag">&lt;/div&gt;</span><span class="pln">
</span><span class="tag">&lt;/article&gt;</span></pre>

<p>
	هذه هي أنماط CSS التي سنستخدمها، سنجعل موضع العنصر <code>earth</code> مساويًا للقيمة <code>absolute</code> وسنستخدم الدالة <code>calc</code> لتوسيط الأرض رأسيًا وأفقيًا.
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_7794_10" style="">
<span class="pun">.</span><span class="pln">earth </span><span class="pun">{</span><span class="pln">
  position</span><span class="pun">:</span><span class="pln"> absolute</span><span class="pun">;</span><span class="pln">
    top</span><span class="pun">:</span><span class="pln"> calc</span><span class="pun">(</span><span class="lit">50</span><span class="pun">%</span><span class="pln"> </span><span class="pun">-</span><span class="pln"> </span><span class="lit">100px</span><span class="pun">);</span><span class="pln">
    left</span><span class="pun">:</span><span class="pln"> calc</span><span class="pun">(</span><span class="lit">50</span><span class="pun">%</span><span class="pln"> </span><span class="pun">-</span><span class="pln"> </span><span class="lit">100px</span><span class="pun">);</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	وسنُحدِّد موضع الصورة ونعطيها طولًا وعرضًا:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_7794_12" style="">
<span class="pun">.</span><span class="pln">earth img </span><span class="pun">{</span><span class="pln">
  height</span><span class="pun">:</span><span class="pln"> </span><span class="lit">200px</span><span class="pun">;</span><span class="pln">
  position</span><span class="pun">:</span><span class="pln"> absolute</span><span class="pun">;</span><span class="pln">
    top</span><span class="pun">:</span><span class="pln"> </span><span class="lit">0</span><span class="pun">;</span><span class="pln">
    left</span><span class="pun">:</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">200px</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	وسنفعل المثل تقريبًا للقمر، إذ سنبدأ بوضع الحاوية في منتصف الشاشة:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_7794_14" style="">
<span class="pun">.</span><span class="pln">moon</span><span class="pun">-</span><span class="pln">container </span><span class="pun">{</span><span class="pln">
  position</span><span class="pun">:</span><span class="pln"> absolute</span><span class="pun">;</span><span class="pln">
    top</span><span class="pun">:</span><span class="pln"> calc</span><span class="pun">(</span><span class="lit">50</span><span class="pun">%</span><span class="pln"> </span><span class="pun">-</span><span class="pln"> </span><span class="lit">25px</span><span class="pun">);</span><span class="pln">
    left</span><span class="pun">:</span><span class="pln"> calc</span><span class="pun">(</span><span class="lit">50</span><span class="pun">%</span><span class="pln"> </span><span class="pun">-</span><span class="pln"> </span><span class="lit">25px</span><span class="pun">);</span><span class="pln">
</span><span class="pun">}</span></pre>

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

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_7794_16" style="">
<span class="pun">.</span><span class="pln">moon </span><span class="pun">{</span><span class="pln">
  animation</span><span class="pun">:</span><span class="pln"> spin </span><span class="lit">20s</span><span class="pln"> linear infinite</span><span class="pun">;</span><span class="pln">
  background</span><span class="pun">:</span><span class="pln"> none</span><span class="pun">;</span><span class="pln">
  height</span><span class="pun">:</span><span class="pln"> </span><span class="lit">50px</span><span class="pun">;</span><span class="pln">
  pointer</span><span class="pun">-</span><span class="pln">events</span><span class="pun">:</span><span class="pln"> none</span><span class="pun">;</span><span class="pln">
  transform</span><span class="pun">-</span><span class="pln">origin</span><span class="pun">:</span><span class="pln"> </span><span class="lit">25px</span><span class="pun">;</span><span class="pln">
  width</span><span class="pun">:</span><span class="pln"> </span><span class="lit">50px</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></pre>

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

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_7794_18" style="">
<span class="pun">.</span><span class="pln">moon img </span><span class="pun">{</span><span class="pln">
  height</span><span class="pun">:</span><span class="pln"> </span><span class="lit">50px</span><span class="pun">;</span><span class="pln">
  transform</span><span class="pun">:</span><span class="pln"> translateX</span><span class="pun">(-</span><span class="lit">160px</span><span class="pun">)</span><span class="pln"> translateY</span><span class="pun">(-</span><span class="lit">160px</span><span class="pun">);</span><span class="pln">
  width</span><span class="pun">:</span><span class="pln"> </span><span class="lit">50px</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	هذا يعني أنَّ عنصر <code>moon</code> سيدور فوق الأرض، لكن الصورة ستدور حول الأرض.<br>
	لنضف الآن حواف مدورة للعنصر لكي تظهر حواف الأرض والقمر بدقة وسنستعمل الخاصية <code>box-shadow</code> لإعطائهما توهجًا أزرقًا:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_7794_20" style="">
<span class="pun">.</span><span class="pln">earth img</span><span class="pun">,</span><span class="pln"> </span><span class="pun">.</span><span class="pln">moon img </span><span class="pun">{</span><span class="pln">
  border</span><span class="pun">-</span><span class="pln">radius</span><span class="pun">:</span><span class="pln"> </span><span class="lit">50</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">0</span><span class="pln"> </span><span class="lit">0</span><span class="pln"> </span><span class="lit">12em</span><span class="pln"> </span><span class="lit">1em</span><span class="pln"> rgba</span><span class="pun">(</span><span class="lit">110</span><span class="pun">,</span><span class="pln"> </span><span class="lit">140</span><span class="pun">,</span><span class="pln"> </span><span class="lit">200</span><span class="pun">,</span><span class="pln"> </span><span class="pun">.</span><span class="lit">6</span><span class="pun">);</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	في النهاية، سنُعرِّف الحركة <code>spin</code> لتدوير القمر، وهذه الحركة بسيطة، إذ سندوِّر القمر حول المحور Z بزاوية 360 درجة.
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_7794_22" style="">
<span class="lit">@keyframes</span><span class="pln"> spin </span><span class="pun">{</span><span class="pln">
  to </span><span class="pun">{</span><span class="pln">
    transform</span><span class="pun">:</span><span class="pln"> rotateZ</span><span class="pun">(</span><span class="lit">360deg</span><span class="pun">);</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	هذا هو <a href="https://codepen.io/donovanh/pen/aWZPeP" rel="external nofollow">ناتج</a> هذه المرحلة:
</p>

<p>
	<iframe allowfullscreen="true" allowtransparency="true" frameborder="no" height="600" scrolling="no" src="https://codepen.io/donovanh/embed/aWZPeP/?height=600&amp;theme-id=dark&amp;default-tab=css,result&amp;embed-version=2" style="width: 100%;" title="Planet hover effect part 1: initial stage">See the Pen &amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;a data-cke-saved-href=&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;#39;https://codepen.io/donovanh/pen/aWZPeP/&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;#39; href=&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;#39;https://codepen.io/donovanh/pen/aWZPeP/&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;#39;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;Planet hover effect part 1: initial stage&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;/a&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt; by Donovan Hutchinson (&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;a data-cke-saved-href=&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;#39;https://codepen.io/donovanh&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;#39; href=&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;#39;https://codepen.io/donovanh&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;#39;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;@donovanh&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;/a&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;) on &amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;a data-cke-saved-href=&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;#39;https://codepen.io&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;#39; href=&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;#39;https://codepen.io&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;#39;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;CodePen&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;/a&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;.</iframe>
</p>

<h3 id="عرض-المزيد-من-المعلومات">
	عرض المزيد من المعلومات
</h3>

<p>
	نريد أن نظهر معلومات مفيدة حول كوكب الأرض عند مرور الفأرة فوقه، ربما ستساعد هذه المعلومات الفضائيين في معرفة بعض الأمور الأساسية عن كوكبنا قبل أن يزورونا :-) .<br>
	علينا قبل ضبط حالة <code>hover</code> أن نضيف هذه المعلومات، وسنبدأ بإضافة عنصر <code>div</code> ذي المعرِّف <code>more-info</code> الذي يحتوي على بعض النصوص:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_7794_24" style="">
<span class="tag">&lt;article</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"earth-demo"</span><span class="tag">&gt;</span><span class="pln">
  </span><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"earth"</span><span class="tag">&gt;</span><span class="pln">
    </span><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"more-info"</span><span class="tag">&gt;</span><span class="pln">
      </span><span class="tag">&lt;h1&gt;</span><span class="pln">Earth</span><span class="tag">&lt;/h1&gt;</span><span class="pln">
      </span><span class="tag">&lt;ul&gt;</span><span class="pln">
        </span><span class="tag">&lt;li&gt;</span><span class="pln">Third planet from the Sun</span><span class="tag">&lt;/li&gt;</span><span class="pln">
        </span><span class="tag">&lt;li&gt;</span><span class="pln">Atmosphere: 21% oxygen</span><span class="tag">&lt;/li&gt;</span><span class="pln">
        </span><span class="tag">&lt;li&gt;</span><span class="pln">Liquid water on surface</span><span class="tag">&lt;/li&gt;</span><span class="pln">
        </span><span class="tag">&lt;li&gt;</span><span class="pln">Only planet that has life (that we know of)</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><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">"https://cssanimation.rocks/images/random/earth.png"</span><span class="tag">&gt;</span><span class="pln">
  </span><span class="tag">&lt;/div&gt;</span><span class="pln">
  </span><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"moon-container"</span><span class="tag">&gt;</span><span class="pln">
    </span><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"moon"</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">"https://cssanimation.rocks/images/random/moon.png"</span><span class="tag">&gt;</span><span class="pln">
    </span><span class="tag">&lt;/div&gt;</span><span class="pln">
  </span><span class="tag">&lt;/div&gt;</span><span class="pln">
</span><span class="tag">&lt;/article&gt;</span></pre>

<p>
	أضفنا هذه المعلومات داخل حاوية <code>earth</code> لأننا نريد جعلها جزءًا من التأثير، أي عند مرور الفأرة فوق النص فسيبقى على الشاشة.<br>
	سنضيف بعض أنماط CSS إلى عنصر <code>more-info</code>:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_7794_26" style="">
<span class="pun">.</span><span class="pln">earth </span><span class="pun">.</span><span class="pln">more</span><span class="pun">-</span><span class="pln">info </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">to bottom</span><span class="pun">,</span><span class="pln"> rgba</span><span class="pun">(</span><span class="lit">10</span><span class="pun">,</span><span class="lit">10</span><span class="pun">,</span><span class="lit">10</span><span class="pun">,</span><span class="lit">1</span><span class="pun">),</span><span class="pln"> black</span><span class="pun">);</span><span class="pln">
  border</span><span class="pun">-</span><span class="pln">radius</span><span class="pun">:</span><span class="pln"> </span><span class="lit">1em</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">
  opacity</span><span class="pun">:</span><span class="pln"> </span><span class="lit">0</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">
  transform</span><span class="pun">-</span><span class="pln">origin</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="pun">;</span><span class="pln">
  transform</span><span class="pun">:</span><span class="pln"> scale</span><span class="pun">(.</span><span class="lit">8</span><span class="pun">);</span><span class="pln">
  width</span><span class="pun">:</span><span class="pln"> </span><span class="lit">400px</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

</span><span class="pun">.</span><span class="pln">earth </span><span class="pun">.</span><span class="pln">more</span><span class="pun">-</span><span class="pln">info h1 </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="pun">;</span><span class="pln">
  text</span><span class="pun">-</span><span class="pln">align</span><span class="pun">:</span><span class="pln"> right</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	ضبطنا هنا لون الخلفية والحواف المنحنية والحاشية وعرض العنصر، وغيّرنا قياسه قليلًا باستخدام <code>transform</code> وضبطنا <code>transform-origin</code> إلى الزاوية العليا اليسرى لكي يتغيّر قياسه بدءًا من تلك النقطة.<br>
	خاصية <code>opacity</code> للعنصر <code>more-info</code> تساوي الصفر أي أنَّ العنصر شفاف تمامًا ولن يكون مرئيًا، وقد نضيف الخاصية <code>visibility</code> لكي نضمن أنَّ المحتوى لا يتداخل مع بقية العناصر، لكننا لن نفعل ذلك في مثالنا هذا.
</p>

<h3 id="إنشاء-انتقال-للخاصيات-المطلوبة">
	إنشاء انتقال للخاصيات المطلوبة
</h3>

<p>
	عندما نضبط تأثير الانتقال فمن المهم أن نأخذ الأداء بالحسبان، فبعض الخاصيات مثل الارتفاع والحاشية (padding) وحجم الخط و <code>background-position</code> لن يكون أداؤها جيدًا إذا أجرينا تأثير الانتقال عليها، والسبب وراء ذلك هو أنَّها تجعل المتصفح يُعيد حساب الكثير من التفاصيل في تخطيط الصفحة عندما تتغير.<br>
	لذا من الأفضل استخدام الخاصيتين <code>opacity</code> و <code>transform</code> عند إجراء حركات لأن أداءها جيد ولا تسبب «تعليق» في المتصفح.<br>
	سنستخدم في هذا المثال الخاصيتين <code>opacity</code> و <code>transform</code> إذ سيُصغَّر العنصر <code>more-info</code> قليلًا باستخدام <code>transform</code> وكان شفافًا تمامًا (قيمة <code>opacity</code> تساوي الصفر).<br>
	أما في حالة <code>hover</code> فسنغيّر شفافية العنصر <code>more-info</code> لكي يصبح مرئيًا وسنزيح الكوكب إلى الجانب.
</p>

<h3 id="حالة-مرور-الفأرة-فوق-العناصر">
	حالة مرور الفأرة فوق العناصر
</h3>

<p>
	لنبدأ بضبط حالة <code>‎.earth:hover</code>، إذا كنتَ ستستخدم Sass فيمكنك اختصار الكثير من الشيفرات التي سنكتبها، لكنني سأستخدم CSS في هذا الدرس.<br>
	لنحرِّك الكوكب جانبًا بادئ الأمر:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_7794_28" style="">
<span class="pun">.</span><span class="pln">earth</span><span class="pun">:</span><span class="pln">hover img </span><span class="pun">{</span><span class="pln"> transform</span><span class="pun">:</span><span class="pln"> translateX</span><span class="pun">(-</span><span class="lit">75px</span><span class="pun">)</span><span class="pln"> translateY</span><span class="pun">(-</span><span class="lit">75px</span><span class="pun">)</span><span class="pln"> scale</span><span class="pun">(.</span><span class="lit">5</span><span class="pun">);</span><span class="pln"> </span><span class="pun">}</span></pre>

<p>
	خاصية <code>transform</code> السابقة ستدفع الكوكب إلى اليسار بمقدار 75 بكسل وستصغره إلى 50% من حجمه.<br>
	لنقم بشيءٍ مشابه إلى القمر:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_7794_30" style="">
<span class="pun">.</span><span class="pln">earth</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">moon</span><span class="pun">-</span><span class="pln">container </span><span class="pun">{</span><span class="pln"> transform</span><span class="pun">:</span><span class="pln"> translateX</span><span class="pun">(-</span><span class="lit">75px</span><span class="pun">)</span><span class="pln"> translateY</span><span class="pun">(-</span><span class="lit">75px</span><span class="pun">)</span><span class="pln"> scale</span><span class="pun">(.</span><span class="lit">5</span><span class="pun">);</span><span class="pln"> </span><span class="pun">}</span><span class="pln">
</span><span class="pun">.</span><span class="pln">earth</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">moon</span><span class="pun">-</span><span class="pln">container img </span><span class="pun">{</span><span class="pln"> transform</span><span class="pun">:</span><span class="pln"> translateX</span><span class="pun">(-</span><span class="lit">140px</span><span class="pun">)</span><span class="pln"> translateY</span><span class="pun">(-</span><span class="lit">140px</span><span class="pun">);</span><span class="pln"> </span><span class="pun">}</span></pre>

<p>
	نفّذنا خدعةً هنا إلى صورة القمر ألا وهي استخدام <code>transform</code> لتقريبه إلى الأرض. لنُظهِر الآن العنصر <code>more-info</code>:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_7794_32" style="">
<span class="pun">.</span><span class="pln">earth</span><span class="pun">:</span><span class="pln">hover </span><span class="pun">.</span><span class="pln">more</span><span class="pun">-</span><span class="pln">info </span><span class="pun">{</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"> transform</span><span class="pun">:</span><span class="pln"> none</span><span class="pun">;</span><span class="pln"> </span><span class="pun">}</span></pre>

<p>
	ضبطنا الشفافية إلى 1 وهذا يعني أنَّ العنصر أصبح ظاهرًا، وضبطنا الخاصية <code>transform</code> إلى <code>none</code> وهذا يعني أنَّ العنصر سيعود إلى حجمه الطبيعي.<br>
	هذه هي <a href="https://codepen.io/donovanh/pen/bWezpR" rel="external nofollow">النتيجة الحالية</a>، مرر الفأرة فوق الكوكب لتشاهد مربع المعلومات.
</p>

<p>
	<iframe allowfullscreen="true" allowtransparency="true" frameborder="no" height="600" scrolling="no" src="https://codepen.io/donovanh/embed/bWezpR/?height=600&amp;theme-id=dark&amp;default-tab=css,result&amp;embed-version=2" style="width: 100%;" title="Planet hover effect part 2: basic hover effect">See the Pen &amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;a data-cke-saved-href=&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;#39;https://codepen.io/donovanh/pen/bWezpR/&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;#39; href=&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;#39;https://codepen.io/donovanh/pen/bWezpR/&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;#39;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;Planet hover effect part 2: basic hover effect&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;/a&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt; by Donovan Hutchinson (&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;a data-cke-saved-href=&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;#39;https://codepen.io/donovanh&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;#39; href=&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;#39;https://codepen.io/donovanh&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;#39;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;@donovanh&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;/a&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;) on &amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;a data-cke-saved-href=&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;#39;https://codepen.io&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;#39; href=&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;#39;https://codepen.io&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;#39;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;CodePen&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;/a&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;.</iframe>
</p>

<h2 id="تطبيق-تأثير-الانتقال">
	تطبيق تأثير الانتقال
</h2>

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

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_7794_34" style="">
<span class="pun">.</span><span class="pln">earth</span><span class="pun">-</span><span class="pln">demo </span><span class="pun">*</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  transition</span><span class="pun">:</span><span class="pln"> all </span><span class="lit">4s</span><span class="pln"> cubic</span><span class="pun">-</span><span class="pln">bezier</span><span class="pun">(</span><span class="lit">0</span><span class="pun">,</span><span class="lit">1.5</span><span class="pun">,.</span><span class="lit">3</span><span class="pun">,</span><span class="lit">1</span><span class="pun">);</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	لنشرح القاعدة السابقة بالتفصيل. تُطبَّق القاعدة السابقة على كل العناصر الموجودة داخل عنصر <code>earth-demo</code> (وذلك باستخدام رمز النجمة <code>*</code>).<br>
	ثم سنطبِّق تأثير الانتقال <code>transition</code> لجميع الخاصيات بمدة 4 ثواني وباستخدام دالة التوقيت <code>cubic-bezier</code>، وهذه الدالة ستبدأ بسرعة ثم تتباطأ حتى النهاية، وفي النهاية ستتخطى القيم المُحدَّدة في الحالة <code>hover</code> ثم ستعود إلى القيم التي ضبطناها.<br>
	وقبل أن ننظر إلى النتيجة النهائية، فدعنا نضيف تأخيرًا بسيطًا إلى عناصر القائمة، فمن الجميل أن تظهر عناصر القائمة تلو بعضها بتأثيرٍ حركيٍ جميل. يمكننا فعل ذلك باستخدام الخاصية <code>transition-delay</code>.
</p>

<h3 id="تأخير-تأثير-الانتقال">
	تأخير تأثير الانتقال
</h3>

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

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_7794_36" style="">
<span class="pun">.</span><span class="pln">earth</span><span class="pun">-</span><span class="pln">demo h1</span><span class="pun">,</span><span class="pln"> li </span><span class="pun">{</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>
	وعندما يبدأ الحدث <code>hover</code> فسنُظهرهم جميعًا:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_7794_38" style="">
<span class="pun">.</span><span class="pln">earth</span><span class="pun">-</span><span class="pln">demo</span><span class="pun">:</span><span class="pln">hover h1</span><span class="pun">,</span><span class="pln"> li </span><span class="pun">{</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>
	علينا الآن تأثير ظهور عناصر القائمة الأربعة، وذلك باستخدام المُحدِّد <code>nth-child</code>:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_7794_40" style="">
<span class="pun">.</span><span class="pln">earth</span><span class="pun">-</span><span class="pln">demo</span><span class="pun">:</span><span class="pln">hover li</span><span class="pun">:</span><span class="pln">nth</span><span class="pun">-</span><span class="pln">child</span><span class="pun">(</span><span class="lit">1</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  transition</span><span class="pun">-</span><span class="pln">delay</span><span class="pun">:</span><span class="pln"> </span><span class="lit">0s</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

</span><span class="pun">.</span><span class="pln">earth</span><span class="pun">-</span><span class="pln">demo</span><span class="pun">:</span><span class="pln">hover li</span><span class="pun">:</span><span class="pln">nth</span><span class="pun">-</span><span class="pln">child</span><span class="pun">(</span><span class="lit">2</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  transition</span><span class="pun">-</span><span class="pln">delay</span><span class="pun">:</span><span class="pln"> </span><span class="lit">0.2s</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

</span><span class="pun">.</span><span class="pln">earth</span><span class="pun">-</span><span class="pln">demo</span><span class="pun">:</span><span class="pln">hover li</span><span class="pun">:</span><span class="pln">nth</span><span class="pun">-</span><span class="pln">child</span><span class="pun">(</span><span class="lit">3</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  transition</span><span class="pun">-</span><span class="pln">delay</span><span class="pun">:</span><span class="pln"> </span><span class="lit">0.4s</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

</span><span class="pun">.</span><span class="pln">earth</span><span class="pun">-</span><span class="pln">demo</span><span class="pun">:</span><span class="pln">hover li</span><span class="pun">:</span><span class="pln">nth</span><span class="pun">-</span><span class="pln">child</span><span class="pun">(</span><span class="lit">4</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  transition</span><span class="pun">-</span><span class="pln">delay</span><span class="pun">:</span><span class="pln"> </span><span class="lit">0.6s</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	الشيفرة السابقة ستُضيف تأخيرًا إلى كل عنصرٍ من عناصر القائمة، ولأننا استخدمنا المُحدِّد <code>*</code> فيما سبق فهذا يعني أنَّ كل عنصر من هذه العناصر سيُطبَّق عليه تأثير الانتقال، وكل ما علينا تحديده هو زمن التأخير.<br>
	هذه هي <a href="https://codepen.io/donovanh/full/qmNgXW/" rel="external nofollow">النتيجة النهائية</a>:
</p>

<p>
	<iframe allowfullscreen="true" allowtransparency="true" frameborder="no" height="600" scrolling="no" src="https://codepen.io/donovanh/embed/qmNgXW/?height=600&amp;theme-id=dark&amp;default-tab=result&amp;embed-version=2" style="width: 100%;" title="Planet hover effect part 3: with transition">See the Pen &amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;a data-cke-saved-href=&amp;amp;amp;amp;amp;amp;amp;amp;#39;https://codepen.io/donovanh/pen/qmNgXW/&amp;amp;amp;amp;amp;amp;amp;amp;#39; href=&amp;amp;amp;amp;amp;amp;amp;amp;#39;https://codepen.io/donovanh/pen/qmNgXW/&amp;amp;amp;amp;amp;amp;amp;amp;#39;&amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;Planet hover effect part 3: with transition&amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;/a&amp;amp;amp;amp;amp;amp;amp;amp;amp;gt; by Donovan Hutchinson (&amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;a data-cke-saved-href=&amp;amp;amp;amp;amp;amp;amp;amp;#39;https://codepen.io/donovanh&amp;amp;amp;amp;amp;amp;amp;amp;#39; href=&amp;amp;amp;amp;amp;amp;amp;amp;#39;https://codepen.io/donovanh&amp;amp;amp;amp;amp;amp;amp;amp;#39;&amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;@donovanh&amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;/a&amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;) on &amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;a data-cke-saved-href=&amp;amp;amp;amp;amp;amp;amp;amp;#39;https://codepen.io&amp;amp;amp;amp;amp;amp;amp;amp;#39; href=&amp;amp;amp;amp;amp;amp;amp;amp;#39;https://codepen.io&amp;amp;amp;amp;amp;amp;amp;amp;#39;&amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;CodePen&amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;/a&amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;.</iframe>
</p>

<p>
	لقد فعلناها! حركة معقدة نسبيًا أنجزناها باستخدام خاصية <code>transition</code> وحيدة.<br>
	تعلمنا في هذا الدرس كيف نخطط ونبني مثالًا متكاملًا يستخدم الانتقالات لإنشاء حركات معقدة، وحرصنا أن تكون الانتقالات سلسلة وتبدو بشكلٍ جميل.
</p>

<h2 id="الخلاصة">
	الخلاصة
</h2>

<p>
	الخدع البسيطة التي نقوم بها عبر الحركات والانتقالات هي التي تجعل موقعنا مميزًا وجميلًا<br>
	ترجمة –وبتصرّف– للمقال <a href="https://cssanimation.rocks/space-transitions/" rel="external nofollow">Transitions in space</a> لصاحبه Donovan Hutchinson
</p>
]]></description><guid isPermaLink="false">545</guid><pubDate>Fri, 13 Oct 2017 08:19:57 +0000</pubDate></item></channel></rss>
