<?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/5/?d=2</link><description>&#x627;&#x644;&#x628;&#x631;&#x645;&#x62C;&#x629;: CSS</description><language>ar</language><item><title>&#x62F;&#x644;&#x64A;&#x644; Airbnb &#x644;&#x62A;&#x646;&#x633;&#x64A;&#x642; &#x634;&#x64A;&#x641;&#x631;&#x629; &#x645;&#x644;&#x641;&#x627;&#x62A; CSS/SASS</title><link>https://academy.hsoub.com/programming/css/%D8%AF%D9%84%D9%8A%D9%84-airbnb-%D9%84%D8%AA%D9%86%D8%B3%D9%8A%D9%82-%D8%B4%D9%8A%D9%81%D8%B1%D8%A9-%D9%85%D9%84%D9%81%D8%A7%D8%AA-csssass-r883/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2020_05/A-mostly-reasonable-approach-to-CSS-and-Sass.jpg.37b36df237805be28976a7c95432ad47.jpg" /></p>

<p>
	<em>المنهجية الأكثر منطقية لتنسيق شيفرة ملفات CSS وSASS</em>
</p>

<h2>
	المصطلحات
</h2>

<h3>
	التصريح عن قاعدة
</h3>

<p>
	التصريح عن قاعدة (rule declaration): هو الاسم المختار لمحدّد معين (أو لمجموعة من المحددات) مع مجموعة من الخاصيات المصاحبة. إليك مثالًا لتوضيح الأمر:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_7058_6" style="">
<span class="pun">.</span><span class="pln">listing </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">18px</span><span class="pun">;</span><span class="pln">
  line</span><span class="pun">-</span><span class="pln">height</span><span class="pun">:</span><span class="pln"> </span><span class="lit">1.2</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></pre>

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

<p>
	إن المحددات التي رأينها عند التصريح عن قاعدة، هي الجزء الّذي سيُحدد طريقة تنسيق العناصر في شجرة DOM، وذلك بحسب الخاصيات المعرّفة في المحدّد. يمكن أن تُطابقُ المحددات عناصر HTML، أو صنف العنصر (class)، أو معرّف العنصر (ID)، أو أي سِمة من سماته. وهذه بعض الأمثلة عن المحدّدات:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_7058_8" style="">
<span class="pun">.</span><span class="kwd">my</span><span class="pun">-</span><span class="pln">element</span><span class="pun">-</span><span class="kwd">class</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  </span><span class="com">/* ... */</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

</span><span class="pun">[</span><span class="pln">aria</span><span class="pun">-</span><span class="pln">hidden</span><span class="pun">]</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  </span><span class="com">/* ... */</span><span class="pln">
</span><span class="pun">}</span></pre>

<h3>
	الخاصيات
</h3>

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

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_7058_11" style="">
<span class="com">/* بعض المحددات */</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  background</span><span class="pun">:</span><span class="pln"> </span><span class="com">#f1f1f1;</span><span class="pln">
  color</span><span class="pun">:</span><span class="pln"> </span><span class="com">#333;</span><span class="pln">
</span><span class="pun">}</span></pre>

<h2>
	ملفات CSS
</h2>

<h3>
	التنسيق
</h3>

<ul>
<li>
		استخدم الزر (<code>tabs</code>) بمقدار مسافتين (وتسمى أيضًا Soft-Tab نظرًا لأن زر Tab الإفتراضي يكون ثمان مسافات).
	</li>
	<li>
		يفضل استخدام الشرطة العادية (وهي <code>-</code>) بدل تسمية الأصناف بأسلوب سنام الجمل (camelCasing).
		<ul>
<li>
				لا بأس باستخدام الشرطات السفلية والتسمية بأسلوب PascalCasing (وهي طريقة مشابهة لطريقة سنام الجمل إلا أنه يجب أن يكون أول حرف كبير) إن كنت تستخدم BEM ( والّتي سنتطرق إليها لاحقًا في هذا الدليل).
			</li>
		</ul>
</li>
	<li>
		لا تستخدم مُحدِّدات المُعرِّفات (ID).
	</li>
	<li>
		عند استخدام محددات متعددة في تصريح واحد لقاعدة ما، امنح كل مُحدّد سطر خاص به.
	</li>
	<li>
		ضع مسافة قبل قوس الافتتاح <code>{</code> عند التصريح عن قاعدة.
	</li>
	<li>
		ضع مسافة بعد <code>:</code> وليس قبله في الخاصيات.
	</li>
	<li>
		ضع أقواس الإغلاق <code>}</code> عند التصريح عن قاعدة في سطر جديد.
	</li>
	<li>
		ضع أسطر فارغة بين تصريحات القواعد.
	</li>
</ul>
<p>
	<strong>طريقة تنسيق سيئة</strong>
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_7058_13" style="">
<span class="pun">.</span><span class="pln">avatar</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="lit">50</span><span class="pun">%;</span><span class="pln">
    border</span><span class="pun">:</span><span class="lit">2px</span><span class="pln"> solid white</span><span class="pun">;</span><span class="pln"> </span><span class="pun">}</span><span class="pln">
</span><span class="pun">.</span><span class="kwd">no</span><span class="pun">,</span><span class="pln"> </span><span class="pun">.</span><span class="pln">nope</span><span class="pun">,</span><span class="pln"> </span><span class="pun">.</span><span class="pln">not_good </span><span class="pun">{</span><span class="pln">
    </span><span class="com">// ...</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
</span><span class="com">#lol-no {</span><span class="pln">
  </span><span class="com">// ...</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	<strong>طريقة تنسيق جيدة</strong>
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_7058_15" style="">
<span class="pun">.</span><span class="pln">avatar </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">
  border</span><span class="pun">:</span><span class="pln"> </span><span class="lit">2px</span><span class="pln"> solid white</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

</span><span class="pun">.</span><span class="pln">one</span><span class="pun">,</span><span class="pln">
</span><span class="pun">.</span><span class="pln">selector</span><span class="pun">,</span><span class="pln">
</span><span class="pun">.</span><span class="pln">per</span><span class="pun">-</span><span class="pln">line </span><span class="pun">{</span><span class="pln">
  </span><span class="com">// ...</span><span class="pln">
</span><span class="pun">}</span></pre>

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

<ul>
<li>
		يفضلُ استخدام التعليقات السطرية (وهي <code>//</code> في Sass-land) للتعليقات الكتلية.
	</li>
	<li>
		يفضلُ أن تضع التعليق بسطر خاص به. تجنب التعليقات في نهاية السطر.
	</li>
	<li>
		اكتب تعليقات تفصيلية للشيفرة البرمجية التي لا تشرح نفسها بنفسها:
		<ul>
<li>
				استخدام الخاصية z-index.
			</li>
			<li>
				استخدام المميزات التوافقية أو بعض الخدع المخصصة للمتصفحات.
			</li>
		</ul>
</li>
</ul>
<h3>
	OOCSS و BEM
</h3>

<p>
	نشجع على استخدام مزيج من OOCSS و BEM وذلك للأسباب التالية:
</p>

<ul>
<li>
		يساعدنا هذا المزيج في إنشاء علاقات واضحة وصارمة بين ملفات التنسيق CSS وملفات HTML.
	</li>
	<li>
		ينشئ مكونات قابلة لإعادة الاستخدام والتركيب.
	</li>
	<li>
		يسمح بتقليل التداخل والتخصيص.
	</li>
	<li>
		يساعد في زيادة قابلية تطوير ملفات التنسيق.
	</li>
</ul>
<p>
	<strong>OOCSS</strong>
</p>

<p>
	(اختصارًا "Object Oriented CSS") وهي التنسيق كائني التوجه لملفات التنسيق، هو نهج لكتابة تنسيق CSS يشجعك على التفكير بملفات التنسيق على أنها مجموعة من "الكائنات": أي أنها قابلة لإعادة استخدام أجزاءٍ منها، وقابلة للتكرار، ويمكن استخدامها بشكل مستقل عبر موقع الوِب.
</p>

<p>
	لمزيد من المعلومات يمكنك الاطلاع على:
</p>

<ul>
<li>
		توثيق نيكول سوليفان (Nicole Sullivan's)‏ <a href="https://github.com/stubbornella/oocss/wiki" rel="external nofollow">OOCSS wiki</a>.
	</li>
	<li>
		مقال مدخل إلى OOCSS‏ (<a href="http://www.smashingmagazine.com/2011/12/12/an-introduction-to-object-oriented-css-oocss/" rel="external nofollow">Introduction to OOCSS</a>).
	</li>
</ul>
<p>
	<strong>BEM</strong>
</p>

<p>
	(اختصارًا Block-Element-Modifier) معدلّ عنصر الكتلة وهو عبارة عن اصطلاح تسمية للأصناف في HTML و CSS. طوّر في الأصل من خلال شركة Yandex ووضعوا في حسبانهم الشيفرات البرمجية الكبيرة وقابلية التطوّر والتوسع للشيفرة، ويمكن اعتبارها بمثابة مجموعة قوية من المبادئ التوجيهية لتطبيق OOCSS. لمزيد من المعلومات يمكنك الاطلاع على:
</p>

<ul>
<li>
		خدع CSS <a href="https://academy.hsoub.com/programming/css/%D8%AF%D9%84%D9%8A%D9%84%D9%83-%D8%A5%D9%84%D9%89-%D9%85%D9%86%D9%87%D8%AC%D9%8A%D8%A9-bem-r688/" rel="">دليلك إلى منهجية BEM - CSS</a>
	</li>
	<li>
		مدخل إلى BEM‏ (<a href="http://csswizardry.com/2013/01/mindbemding-getting-your-head-round-bem-syntax/" rel="external nofollow">introduction to BEM</a>).
	</li>
</ul>
<p>
	نوصي بالتنويع بأشكال BEM مع "كتل" مسماة بأسلوب PascalCased، والّتي تعمل بطريقة جيدة خصيصًا عند دمجها مع المكونات (مثلما يحدث في React). لا تزال تُستخدم الشُرط السفلية والشرطات للمعدلات وسلالتهم (من سيرثُ منهم).
</p>

<p>
	<strong>مثال</strong>
</p>

<pre class="ipsCode prettyprint lang-javascript prettyprinted" id="ips_uid_7058_20" style="">
<span class="com">// ListingCard.jsx</span><span class="pln">
</span><span class="kwd">function</span><span class="pln"> </span><span class="typ">ListingCard</span><span class="pun">()</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">return</span><span class="pln"> </span><span class="pun">(</span><span class="pln">
    </span><span class="pun">&lt;</span><span class="pln">article </span><span class="kwd">class</span><span class="pun">=</span><span class="str">"ListingCard ListingCard--featured"</span><span class="pun">&gt;</span><span class="pln">

      </span><span class="pun">&lt;</span><span class="pln">h1 </span><span class="kwd">class</span><span class="pun">=</span><span class="str">"ListingCard__title"</span><span class="pun">&gt;</span><span class="typ">Adorable</span><span class="pln"> </span><span class="lit">2BR</span><span class="pln"> in the sunny </span><span class="typ">Mission</span><span class="pun">&lt;/</span><span class="pln">h1</span><span class="pun">&gt;</span><span class="pln">

      </span><span class="pun">&lt;</span><span class="pln">div </span><span class="kwd">class</span><span class="pun">=</span><span class="str">"ListingCard__content"</span><span class="pun">&gt;</span><span class="pln">
        </span><span class="pun">&lt;</span><span class="pln">p</span><span class="pun">&gt;</span><span class="typ">Vestibulum</span><span class="pln"> id ligula porta felis euismod semper</span><span class="pun">.&lt;/</span><span class="pln">p</span><span class="pun">&gt;</span><span class="pln">
      </span><span class="pun">&lt;/</span><span class="pln">div</span><span class="pun">&gt;</span><span class="pln">

    </span><span class="pun">&lt;/</span><span class="pln">article</span><span class="pun">&gt;</span><span class="pln">
  </span><span class="pun">);</span><span class="pln">
</span><span class="pun">}</span></pre>

<pre class="ipsCode prettyprint lang-javascript prettyprinted" id="ips_uid_7058_22" style="">
<span class="com">/* ListingCard.css */</span><span class="pln">
</span><span class="pun">.</span><span class="typ">ListingCard</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="typ">ListingCard</span><span class="pun">--</span><span class="pln">featured </span><span class="pun">{</span><span class="pln"> </span><span class="pun">}</span><span class="pln">
</span><span class="pun">.</span><span class="typ">ListingCard__title</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="typ">ListingCard__content</span><span class="pln"> </span><span class="pun">{</span><span class="pln"> </span><span class="pun">}</span></pre>

<ul>
<li>
		<code>‎.ListingCard</code>: وهي عبارة عن "كتلة" وتمثل مكون عالي المستوى.
	</li>
	<li>
		<code>‎.ListingCard__title</code>: عبارة عن "عنصر" وتمثل سلالة <code>‎.ListingCard</code> التي تساعد في تكوين الكتلة ككلّ.
	</li>
	<li>
		<code>‎.ListingCard--featured</code>: وهو عبارة عن "معدلّ" ويمثل الحالات أو التشكيلات المتختلفة لكتلة <code>‎.ListingCard</code>.
	</li>
</ul>
<h3>
	محددات المعرفات
</h3>

<p>
	في حين أنه من الممكن تحديد العناصر حسب المعرّف في CSS، إلا أن هذه المحددات تعدّ أسلوبًا مضادًا للنمط (anti-pattern). تقدم محدّدات المعرّفات مستوى عاليًا من <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/Specificity" rel="external nofollow">التخصيص</a> غير ضروري للتصريح عن قاعدة، بل ولن يمكننا إعادة استخدام هذه المحدّدات.
</p>

<p>
	لمزيد من المعلومات حول هذا الموضوع، أحيلك لهذه المقالة <a href="http://csswizardry.com/2014/07/hacks-for-dealing-with-specificity/" rel="external nofollow">CSS Wizardry's article</a> والّتي تتحدث عن طريقة التعامل مع التخصيص.
</p>

<h3>
	خطاف الجافاسكربت
</h3>

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

<p>
	نوصي بإنشاء أصناف مخصصة للربط مع جافاسكربت مسبوقة بـ <code>‎.js-‎</code>:
</p>

<h3>
	الحدود
</h3>

<p>
	استخدم <code>0</code> بدلًا من <code>none</code> لتحديد أن النمط ليس له حدود.
</p>

<p>
	<strong>الطريقة السيئة</strong>
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_7058_24" style="">
<span class="pun">.</span><span class="pln">foo </span><span class="pun">{</span><span class="pln">
  border</span><span class="pun">:</span><span class="pln"> none</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	<strong>الطريقة الجيدة</strong>
</p>

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

<h2>
	ملفات SASS
</h2>

<h3>
	الصياغة
</h3>

<ul>
<li>
		استخدم الصيغة <code>‎.scss</code>، ولا تستخدم أبدًا الصيغة <code>‎.sass</code> الأصلي
	</li>
	<li>
		رتب شيفرة ملفات CSS العادية وعمليات التضمين <code>‎@include</code> بطريقة منطقي (انظر أدناه)
	</li>
</ul>
<h3>
	ترتيب طريقة التصريح عن الخاصيات
</h3>

<ul>
<li>
		التصريح عن خاصية
	</li>
</ul>
<p>
	أدرج جميع التصاريح القياسية للخاصيات، وأي شيء آخر ما عدا عمليات التضمين <code>‎@include</code> أو المحددات المتشعّية.
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_7058_35" style="">
<span class="pun">.</span><span class="pln">btn</span><span class="pun">-</span><span class="pln">green </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">
  font</span><span class="pun">-</span><span class="pln">weight</span><span class="pun">:</span><span class="pln"> bold</span><span class="pun">;</span><span class="pln">
  </span><span class="com">// ...</span><span class="pln">
</span><span class="pun">}</span></pre>

<ul>
<li>
		تصريح عن عملية تضمين <code>‎@include</code>
	</li>
</ul>
<p>
	إن تجميع ووضع جميع عمليات التضمين <code>‎@include</code> في نهاية المحدّد سيسهل قراءة المحدد بالكامل.
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_7058_33" style="">
<span class="pun">.</span><span class="pln">btn</span><span class="pun">-</span><span class="pln">green </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">
  font</span><span class="pun">-</span><span class="pln">weight</span><span class="pun">:</span><span class="pln"> bold</span><span class="pun">;</span><span class="pln">
  </span><span class="lit">@include</span><span class="pln"> transition</span><span class="pun">(</span><span class="pln">background </span><span class="lit">0.5s</span><span class="pln"> ease</span><span class="pun">);</span><span class="pln">
  </span><span class="com">// ...</span><span class="pln">
</span><span class="pun">}</span></pre>

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

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_7058_31" style="">
<span class="pun">.</span><span class="pln">btn </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">
  font</span><span class="pun">-</span><span class="pln">weight</span><span class="pun">:</span><span class="pln"> bold</span><span class="pun">;</span><span class="pln">
  </span><span class="lit">@include</span><span class="pln"> transition</span><span class="pun">(</span><span class="pln">background </span><span class="lit">0.5s</span><span class="pln"> ease</span><span class="pun">);</span><span class="pln">

  </span><span class="pun">.</span><span class="pln">icon </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">10px</span><span class="pun">;</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">
</span><span class="pun">}</span></pre>

<h3>
	المتغيرات
</h3>

<p>
	يفضل استخدام أسماء المتغيرات التي تحتوي على شرطة عادية (مثل: <code>‎$my-variable</code>) بدلًا من أسماء متغيرات مثل أسلوب تسمية سنام الجمل (camelCased) -تكبير أول حرف من كلّ كلمة في اسم المتغير عدا أول كلمة- أو أسلوب snake_cased -جميع حروف اسم المتغير صغيرة-. لا مشكلة بإضافة شرطة سفلية لأسماء المتغيرات الّتي نود استخدامها فقط داخل نفس الملف(هكذا: <code>‎$_my-variable</code>).
</p>

<h3>
	المخاليط
</h3>

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

<h3>
	توسعة المحدّدات المُركّبة
</h3>

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

<h3>
	المحددات المتشعّبة
</h3>

<p>
	** لا تنشئ محددات متشعّبة بعمق يزيد عن ثلاثة مستويات!**
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_7058_28" style="">
<span class="pun">.</span><span class="pln">page</span><span class="pun">-</span><span class="pln">container </span><span class="pun">{</span><span class="pln">
  </span><span class="pun">.</span><span class="pln">content </span><span class="pun">{</span><span class="pln">
    </span><span class="pun">.</span><span class="pln">profile </span><span class="pun">{</span><span class="pln">
      </span><span class="com">// STOP!</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></pre>

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

<ul>
<li>
		مقترن بشدة بملفات HTML (وهذا يعدّ نقطة ضعف في التنسيق) -<em>أو</em>
	</li>
	<li>
		محدد للغاية (وهذا يعدّ نقطة قوة في التنسيق) -<em>أو</em>
	</li>
	<li>
		غير قابل لإعادة الاستخدام.
	</li>
</ul>
<p>
	مرة أخرى: <strong>لا تستخدم نهائيًا محددات المعرّفات المتشعبة</strong>!
</p>

<p>
	في حال وجب عليك استخدام محدّد المعرّف في البداية (ويجب أن تحاول بأقصى جهدك أن تتجنبه)، فلا يجب أن تكون متشعّبة أبدًا. وإن وقعت بهذه المشكلة، فعاود النظر في الشيفرة البرمجية أو أسأل نفسك لما كلّ هذا التخصيص الشديد؟ وإن أردت كتابة ملفات HTML وCSS ذات بنية جيدة، فيجب عليك <strong>ألا تستخدم محدّدات المعرّفات المتشعبة نهائيًا</strong>.
</p>

<p>
	ترجمة -وبتصرف- <a href="https://github.com/airbnb/css" rel="external nofollow">لدليل Airbnb لتنسيق ملفات CSS وSASS‏ (Airbnb CSS / Sass Styleguide)</a> الموجود على موقع GitHub
</p>
]]></description><guid isPermaLink="false">883</guid><pubDate>Tue, 19 May 2020 13:59:47 +0000</pubDate></item><item><title>&#x627;&#x644;&#x62F;&#x644;&#x64A;&#x644; &#x627;&#x644;&#x634;&#x627;&#x645;&#x644; &#x644;&#x634;&#x631;&#x62D; &#x627;&#x644;&#x646;&#x642;&#x627;&#x637; &#x627;&#x644;&#x62D;&#x62F;&#x64A;&#x629; &#x644;&#x635;&#x641;&#x62D;&#x627;&#x62A; &#x627;&#x644;&#x648;&#x64A;&#x628; &#x627;&#x644;&#x645;&#x62A;&#x62C;&#x627;&#x648;&#x628;&#x629;</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%B4%D8%A7%D9%85%D9%84-%D9%84%D8%B4%D8%B1%D8%AD-%D8%A7%D9%84%D9%86%D9%82%D8%A7%D8%B7-%D8%A7%D9%84%D8%AD%D8%AF%D9%8A%D8%A9-%D9%84%D8%B5%D9%81%D8%AD%D8%A7%D8%AA-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-%D8%A7%D9%84%D9%85%D8%AA%D8%AC%D8%A7%D9%88%D8%A8%D8%A9-r861/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2020_04/1--Overview-of-Responsive-Web-Design-Breakpoints.jpg.a9d6fa50e234ad464de1750300b7b2ae.jpg" /></p>

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

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

<h2>
	ما النقاط الحدية لصفحات الويب المتجاوبة؟
</h2>

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

<p>
	سيتغير في مثال استعلام الوسائط التالي تصميم الصفحة من العرض الأساسي 960 بكسل عندما تُعرض على شاشة 768 بكسل:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_1771_6" style="">
<span class="pun">}(</span><span class="pln">media only screen </span><span class="kwd">and</span><span class="pln"> </span><span class="pun">(</span><span class="pln">max</span><span class="pun">-</span><span class="pln">width</span><span class="pun">:</span><span class="pln"> </span><span class="lit">768px</span><span class="pun">@</span><span class="pln">

</span><span class="com">/* هنا تكتب تعليمات CSS */</span><span class="pln">
</span><span class="pun">{</span></pre>

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

<h2>
	النقاط الحدية القياسية
</h2>

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

<p>
	رغم أن تلك الممارسة قابلة للنقاش، إلا أننا سنترك ذلك النقاش لوقت لاحق، ونصب تركيزنا في الاستعلامات التالية التي تمثل تلك القيم القياسية.
</p>

<h3>
	الاستعلام الخاص بأجهزة الجوال
</h3>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_1771_8" style="">
<span class="lit">@media</span><span class="pln"> only 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">device</span><span class="pun">-</span><span class="pln">width </span><span class="pun">:</span><span class="pln"> </span><span class="lit">320px</span><span class="pun">)</span><span class="pln"> </span><span class="kwd">and</span><span class="pln"> </span><span class="pun">(</span><span class="pln">max</span><span class="pun">-</span><span class="pln">device</span><span class="pun">-</span><span class="pln">width </span><span class="pun">:</span><span class="pln"> </span><span class="lit">480px</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">

</span><span class="com">/* هنا تكتب تعليمات CSS */</span><span class="pln">

</span><span class="pun">}</span></pre>

<h3>
	الاستعلام الخاص بالأجهزة اللوحية
</h3>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_1771_10" style="">
<span class="lit">@media</span><span class="pln"> only 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">device</span><span class="pun">-</span><span class="pln">width </span><span class="pun">:</span><span class="pln"> </span><span class="lit">768px</span><span class="pun">)</span><span class="pln"> </span><span class="kwd">and</span><span class="pln"> </span><span class="pun">(</span><span class="pln">max</span><span class="pun">-</span><span class="pln">device</span><span class="pun">-</span><span class="pln">width </span><span class="pun">:</span><span class="pln"> </span><span class="lit">1024px</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">

</span><span class="com">/* هنا تكتب تعليمات CSS */</span><span class="pln">
</span><span class="pun">}</span></pre>

<h2>
	تفاصيل إضافية
</h2>

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

<h3>
	الوضع الرأسي للجوال
</h3>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_1771_12" style="">
<span class="lit">@media</span><span class="pln"> only screen </span><span class="kwd">and</span><span class="pln"> </span><span class="pun">(</span><span class="pln">max</span><span class="pun">-</span><span class="pln">device</span><span class="pun">-</span><span class="pln">width </span><span class="pun">:</span><span class="pln"> </span><span class="lit">320px</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">

</span><span class="com">/* هنا تكتب تعليمات CSS */</span><span class="pln">

</span><span class="pun">}</span></pre>

<h3>
	الوضع الأفقي للجوال
</h3>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_1771_14" style="">
<span class="lit">@media</span><span class="pln"> only 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">device</span><span class="pun">-</span><span class="pln">width </span><span class="pun">:</span><span class="pln"> </span><span class="lit">321px</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">

</span><span class="com">/* هنا تكتب تعليمات CSS */</span><span class="pln">

</span><span class="pun">}</span></pre>

<h3>
	الوضع الرأسي للجهاز اللوحي
</h3>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_1771_16" style="">
<span class="lit">@media</span><span class="pln"> only 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">device</span><span class="pun">-</span><span class="pln">width </span><span class="pun">:</span><span class="pln"> </span><span class="lit">768px</span><span class="pun">)</span><span class="pln"> </span><span class="kwd">and</span><span class="pln"> </span><span class="pun">(</span><span class="pln">max</span><span class="pun">-</span><span class="pln">device</span><span class="pun">-</span><span class="pln">width </span><span class="pun">:</span><span class="pln"> </span><span class="lit">1024px</span><span class="pun">)</span><span class="pln"> </span><span class="kwd">and</span><span class="pln"> </span><span class="pun">(</span><span class="pln">orientation </span><span class="pun">:</span><span class="pln"> portrait</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">

</span><span class="com">/* هنا تكتب تعليمات CSS */</span><span class="pln">
</span><span class="pun">}</span></pre>

<h3>
	الوضع الأفقي للجهاز اللوحي
</h3>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_1771_18" style="">
<span class="lit">@media</span><span class="pln"> only 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">device</span><span class="pun">-</span><span class="pln">width </span><span class="pun">:</span><span class="pln"> </span><span class="lit">768px</span><span class="pun">)</span><span class="pln"> </span><span class="kwd">and</span><span class="pln"> </span><span class="pun">(</span><span class="pln">max</span><span class="pun">-</span><span class="pln">device</span><span class="pun">-</span><span class="pln">width </span><span class="pun">:</span><span class="pln"> </span><span class="lit">1024px</span><span class="pun">)</span><span class="pln"> </span><span class="kwd">and</span><span class="pln"> </span><span class="pun">(</span><span class="pln">orientation </span><span class="pun">:</span><span class="pln"> landscape</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">

</span><span class="com">/* هنا تكتب تعليمات CSS */</span><span class="pln">

</span><span class="pun">}</span></pre>

<h2>
	إنشاء نقاط حدية مخصصة
</h2>

<h3>
	لماذا ننشئ نقاط حدية مخصصة؟
</h3>

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

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

<h3>
	كيف تنشئ نقطة حدية مخصصة
</h3>

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

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

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_1771_22" style="">
<span class="lit">@media</span><span class="pln"> only screen </span><span class="kwd">and</span><span class="pln"> </span><span class="pun">(</span><span class="pln">max</span><span class="pun">-</span><span class="pln">device</span><span class="pun">-</span><span class="pln">width </span><span class="pun">:</span><span class="pln"> </span><span class="lit">355px</span><span class="pun">){</span><span class="pln">

</span><span class="com">/* CSS هنا تكتب تعليمات */</span><span class="pln">

</span><span class="pun">}</span></pre>

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

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

<p>
	لنتخيل أن المشكلة تبدأ بالظهور عند عرض 340 بكسل وتستمر حتى 355 بكسل، هذا هو مجال الخلل. الاستعلام المخصص سيكون كالتالي:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_1771_24" style="">
<span class="lit">@media</span><span class="pln"> only 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">device</span><span class="pun">-</span><span class="pln">width </span><span class="pun">:</span><span class="pln"> </span><span class="lit">340px</span><span class="pun">)</span><span class="pln"> </span><span class="kwd">and</span><span class="pln"> </span><span class="pun">(</span><span class="pln">max</span><span class="pun">-</span><span class="pln">device</span><span class="pun">-</span><span class="pln">width </span><span class="pun">:</span><span class="pln"> </span><span class="lit">355px</span><span class="pun">)</span><span class="pln"> </span><span class="kwd">and</span><span class="pln"> </span><span class="pun">(</span><span class="pln">orientation </span><span class="pun">:</span><span class="pln"> portrait</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">

</span><span class="com">/* هنا تكتب تعليمات CSS */</span><span class="pln">

</span><span class="pun">}</span></pre>

<h3>
	هل يجب الاعتماد في النقاط الحدية على نوع الجهاز أم مخطط الصفحة؟
</h3>

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

<p>
	بما أنه من الصعب إيجاد أجهزة بمقاسات عرض قريبة من تلك النقطة قرر المطور تجاهلها وحسب. هل كان ذلك قرارًا حكيما؟ <strong>لا!</strong>.
</p>

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

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

<h3>
	لم سيجعلك هذا تبدو محترفًا في تصميم المواقع المتجاوبة؟
</h3>

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

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

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

<h3>
	كيف تخصص نقطة حدية مثالية؟
</h3>

<h4>
	أولاً: تأكد من تثبيت إضافة المتصفح المناسبة
</h4>

<p>
	إضافات مثل <a data-ss1618065264="1" href="https://chrome.google.com/webstore/detail/window-resizer/kkelicaakdanhinjdeammmilcgefonfh" rel="external nofollow">Resize Window</a> لمتصفح كروم مناسبة لمهام كالتي ذكرناها، لأنها ستظهر أبعاد النافذة الحالية أسفل يمين الشاشة عندما تغيّر قياس النافذة.
</p>

<h4>
	ثانيًا: تأمّل في القيم بين النقاط الحدِّية الحسيّة
</h4>

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

<h4>
	ثالثًا: أنشئ استعلامات الوسائط بنفسك
</h4>

<p>
	استعمل ببساطة أبعاد العرض التى سجلتها سابقًا لكتابة استعلامات وسائط شبيهة بالمُدرجة أعلاه وستكون قد انتهيت!
</p>

<h2>
	ماذا اغتنمت
</h2>

<ol>
<li>
		النقاط الحدِّية هي حيث يصل عرض نافذة موقعك لمقاس معين لينتقل إلى تصميم متناسب مع ذلك العرض.
	</li>
	<li>
		النقاط الحدِّية القياسية هي الخاصة بالجوال والجهاز اللوحي بالإضافة إلى اختلاف اتجاه عرضهما.
	</li>
	<li>
		من المهم دائمًا اختبار موقعك على أبعاد غير معتادة لتعزيز تماسك موقعك وتجربة الزوار.
	</li>
	<li>
		تأكد أن النقاط الحدِّية المخصصة لا تتعارض مع النقاط القياسية.
	</li>
	<li>
		التصميم المتفاعل هو محاولة للتحضير للمستقبل، لذا فإن قضاء وقت طويل في التركيز على الأجهزة الحالية ليست ممارسة جيدة.
	</li>
	<li>
		الحرص على جودة التصميم باختلاف أبعاد العرض سيجعلك تبدو محترفًا بالنسبة للعملاء.
	</li>
</ol>
<p>
	ترجمة - وبتصرّف - للمقال <a data-ss1618065264="1" href="https://1stwebdesigner.com/responsive-design-breakpoints/" rel="external nofollow">The Ultimate Overview of Responsive Web Design Breakpoints</a> من إعداد فريق موقع 1stwebdesigner.
</p>
]]></description><guid isPermaLink="false">861</guid><pubDate>Sun, 05 Apr 2020 18:00:00 +0000</pubDate></item><item><title>&#x645;&#x642;&#x62F;&#x645;&#x629; &#x641;&#x64A; &#x62A;&#x635;&#x645;&#x64A;&#x645; &#x627;&#x644;&#x648;&#x64A;&#x628; &#x627;&#x644;&#x645;&#x62A;&#x62C;&#x627;&#x648;&#x628;: &#x627;&#x644;&#x639;&#x646;&#x627;&#x635;&#x631; &#x627;&#x644;&#x632;&#x627;&#x626;&#x641;&#x629; &#x648;&#x627;&#x633;&#x62A;&#x639;&#x644;&#x627;&#x645;&#x627;&#x62A; &#x627;&#x644;&#x648;&#x633;&#x627;&#x626;&#x637; &#x648;&#x63A;&#x64A;&#x631;&#x647;&#x627;</title><link>https://academy.hsoub.com/programming/css/%D9%85%D9%82%D8%AF%D9%85%D8%A9-%D9%81%D9%8A-%D8%AA%D8%B5%D9%85%D9%8A%D9%85-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-%D8%A7%D9%84%D9%85%D8%AA%D8%AC%D8%A7%D9%88%D8%A8-%D8%A7%D9%84%D8%B9%D9%86%D8%A7%D8%B5%D8%B1-%D8%A7%D9%84%D8%B2%D8%A7%D8%A6%D9%81%D8%A9-%D9%88%D8%A7%D8%B3%D8%AA%D8%B9%D9%84%D8%A7%D9%85%D8%A7%D8%AA-%D8%A7%D9%84%D9%88%D8%B3%D8%A7%D8%A6%D8%B7-%D9%88%D8%BA%D9%8A%D8%B1%D9%87%D8%A7-r787/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2020_01/5e1cd1353e51f_---------.jpg.d515ec71a99e3df637404b998d5cb5d4.jpg" /></p>

<p>
	سيُزار موقعك الإلكتروني هذه الأيام من مجموعةٍ واسعةٍ من الأجهزة: أجهزة الحواسيب المكتبيّة ذات الشاشات الكبيرة وأجهزة الحواسيب المحمولة متوسطة الحجم والأجهزة اللوحيّة والهواتف الذكيّة وغيرها.
</p>

<p>
	يتوجب على موقعك من أجل تحقيق تجربة المستخدم المثلى كمطوّر واجهة أماميّة (front-end engineer) ضبط تخطيط الصفحة (layout) استجابةً لهذه الأجهزة المختلفة (على سبيل المثال، دقّة الشاشة وأبعادها المتنوعة). يُشار إلى عملية الاستجابة لشكل جهاز المستخدم باسم (ربما توقعت ذلك) تصميم الويب المتجاوب (RWD).
</p>

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

<p>
	<strong>يُمضي بعض مصممي الويب أيامًا في معالجة المشكلات الصغيرة لمستخدمي متصفح Internet Explorer ويتركون مستخدمي الأجهزة المحمولة لديهم كزوار درجة ثانية. وهذا نهج فاشل.</strong>
</p>

<p>
	<a href="http://mashable.com/2012/12/11/responsive-web-design/" rel="external nofollow">أطلق Mashable على عام 2013 عام تصميم الويب المتجاوب</a>. لماذا ا؟ لأن أكثر من 30 ٪ من «حركة مرور البيانات» (traffic) الخاصّة بهم تأتي من الأجهزة المحمولة. إنّهم يتوقعون أن يصل هذا العدد إلى 50٪ بحلول نهاية العام. في الويب بشكل عام، <a href="http://mashable.com/2013/08/20/mobile-web-traffic/" rel="external nofollow">جاءت 17.4٪ من حركة مرور بيانات الويب من الهواتف الذكيّة في عام 2013</a>. يمثل استخدام Internet Explorer في الوقت نفسه على سبيل المثال 12٪ فقط من إجمالي حركة مرور بيانات المستعرض، بانخفاض وقدره 4٪ تقريبًا عن مثل هذا الوقت من العام الماضي (وفقًا لـ <a href="http://www.w3schools.com/browsers/browsers_stats.asp" rel="external nofollow">W3Schools</a>). إذا كنت تعمل على التحسين لمتصفح معين، بدلًا من مستخدمي الهواتف الذكيّة العالميين، فأنت تضيع في التفاصيل. يمكن أن يُشكّل هذا في بعض الحالات الفرق بين النجاح والفشل - التصميم المتجاوب له آثار على معدلات التحويل (conversion rates) وتحسين ظهور الموقع في محركات البحث (SEO) ومعدلات الارتداد (bounce rates) وغيرها.
</p>

<h2>
	نهج تصميم الويب المتجاوب
</h2>

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

<p>
	أنت لا تريد في الوقت نفسه إعادة كتابة موقعك بالكامل من أجل كل حجم من عشرات الأحجام المختلفة للشاشة التي قد يُعرض عليها - فهذه الطريقة ببساطة غير مُمكنة. إنّ الحل البديل هو استعمال عناصر تصميم متجاوبة مرنة تستخدم نفس شيفرة الـ HTML للتكيّف مع حجم شاشة المستخدم.
</p>

<p>
	يكمن الحل من وجهة نظر تقنيّة في هذا الدليل للتصميم المتجاوب: في استخدام <a href="https://wiki.hsoub.com/CSS/@media" rel="external">استعلامات وسائط CSS</a> و<a href="https://wiki.hsoub.com/CSS#.D8.A7.D9.84.D8.B9.D9.86.D8.A7.D8.B5.D8.B1_.D8.A7.D9.84.D8.B2.D8.A7.D8.A6.D9.81.D8.A9" rel="external">العناصر الزائفة</a> وضبط تخطيطات الشبكة المرنة، وأدوات أخرى للتكيُّف ديناميكيًا مع دقّة معيّنة.
</p>

<h2>
	استعلامات الوسائط في التصميم المتجاوب
</h2>

<p>
	ظهرت أنواع الوسائط للمرة الأولى في <a href="http://www.w3.org/TR/REC-html40/" rel="external nofollow">HTML4</a> و <a href="http://www.w3.org/TR/CSS2/" rel="external nofollow">CSS2.1</a>، مما أتاح وضع ملف CSS منفصل للشاشة و آخر للطباعة. وبهذه الطريقة، أصبح بالإمكان تعيين أنماط منفصلة لعرض الصفحة على الحاسوب بشكل مقابل للنسخة المطبوعة.
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_2859_6" style="">
<span class="tag">&lt;link</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="atn">type</span><span class="pun">=</span><span class="atv">"text/css"</span><span class="pln"> </span><span class="atn">href</span><span class="pun">=</span><span class="atv">"screen.css"</span><span class="pln"> </span><span class="atn">media</span><span class="pun">=</span><span class="atv">"screen"</span><span class="tag">&gt;</span><span class="pln">
</span><span class="tag">&lt;link</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="atn">type</span><span class="pun">=</span><span class="atv">"text/css"</span><span class="pln"> </span><span class="atn">href</span><span class="pun">=</span><span class="atv">"print.css"</span><span class="pln"> </span><span class="atn">media</span><span class="pun">=</span><span class="atv">"print"</span><span class="tag">&gt;</span></pre>

<p>
	أو
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_2859_8" style="">
<span class="lit">@media</span><span class="pln"> screen </span><span class="pun">{</span><span class="pln">
</span><span class="pun">*</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  background</span><span class="pun">:</span><span class="pln"> silver
</span><span class="pun">}</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	يمكنك في <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/CSS3" rel="external nofollow">CSS3</a> تحديد تنسيق الصفحة وتخطيطها اعتمادًا على عرض الصفحة. ولأن عرض الصفحة يرتبط بحجم جهاز المستخدم، فإنّ هذه الإمكانية تتيح لك بالتالي تحديد تخطيطات مختلفة للأجهزة المختلفة. ملاحظة: <a href="http://caniuse.com/css-mediaqueries" rel="external nofollow">تُدعم استعلامات الوسائط من قبل جميع المتصفحات الرئيسية</a> إنّ هذا التعريف ممكن من خلال إعداد الخصائص الأساسية: <code>max-widt</code> و<code>device-width</code> و<code>orientation</code> و<code>color</code> وهناك تعريفات أخرى ممكنة كذلك، ولكن في هذه الحالة فإنّ أهم الأشياء التي يجب وضعها في الحسبان هو الحد الأدنى من الدقّة («العرض» (width)) وإعدادات الاتجاه (أفقي أو عمودي).
</p>

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

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_2859_10" style="">
<span class="tag">&lt;link</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="atn">media</span><span class="pun">=</span><span class="atv">"screen and (max-device-width: 480px)"</span><span class="pln"> </span><span class="atn">href</span><span class="pun">=</span><span class="atv">"main_1.css"</span><span class="pln"> </span><span class="tag">/&gt;</span></pre>

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

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_2859_12" style="">
<span class="lit">@media</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="lit">480px</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
div </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">float</span><span class="pun">:</span><span class="pln"> left</span><span class="pun">;</span><span class="pln">
  background</span><span class="pun">:</span><span class="pln"> red</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></pre>

<h2>
	التكبير الذكيّ (smart zoom)
</h2>

<p>
	تَستخدم متصفحات الهاتف المحمول ما يسمى «التكبير الذكي» (smart zoom) لتزويد المستخدمين بتجربة قراءة "ممتازة". يُستخدم التكبير الذكيّ في الأساس لتقليل حجم الصفحة بشكل متناسب. وهذا يمكن أن يظهر بطريقتين: (1) التكبير الذي يبدؤه المستخدم (على سبيل المثال، النقر مرتين على شاشة iPhone للتكبير على موقع الويب الحالي)، و(2) عرض نسخة مكبّرة منذ البداية من صفحة الويب عند التحميل. نظرًا لأنه يمكننا فقط استخدام استعلامات الوسائط المتجاوبة لحل أي من المشكلات التي قد يستهدفها التكبير / التصغير الذكيّ، فمن المستحسن في كثير من الأحيان (أو حتى الضروري) تعطيل التكبير والتأكّد من أنّ محتوى صفحتك يملأ المتصفح دائمًا:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_2859_14" style="">
<span class="tag">&lt;meta</span><span class="pln"> </span><span class="atn">name</span><span class="pun">=</span><span class="atv">"viewport"</span><span class="pln"> </span><span class="atn">content</span><span class="pun">=</span><span class="atv">"width=device-width, initial-scale=1"</span><span class="pln"> </span><span class="tag">/&gt;</span></pre>

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

<p>
	يمكننا إضافة إلى ذلك تعطيل التكبير / التصغير بالكامل باستخدام <code>user-scalable=false</code>.
</p>

<h2>
	عرض الصفحة (page widths)
</h2>

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

<p>
	لا يوجد لسوء الحظ معيار محدّد يمكن اعتماده لعرض الصفحة (page width)، ولكن غالبًا ما يتم استخدام قيم التجاوب التالية:
</p>

<ul>
<li>
		320 بكسل
	</li>
	<li>
		480 بكسل
	</li>
	<li>
		600 بكسل
	</li>
	<li>
		768 بكسل
	</li>
	<li>
		900 بكسل
	</li>
	<li>
		1024 بكسل
	</li>
	<li>
		1200 بكسل
	</li>
</ul>
<p>
	يوجد مع ذلك عددًا من تعريفات العرض المختلفة. يحتوي على سبيل المثال عرض <a href="https://responsivedesign.is/resources/boilerplates/320-and-up/" rel="external nofollow">320 وما فوق</a> على خمس زيادات افتراضية لاستعلام الوسائط في CSS3 وهي:480، 600، 768، 992، 1382 بكسل. يمكنني أن أعدّد عشرة أساليب أخرى على الأقل إضافة إلى المثال الوارد في هذا الدليل لتطوير الويب المتجاوب.
</p>

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

<h2>
	العناصر الزائفة (Psuedo-Elements)
</h2>

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

<p>
	يمكنك من جهة أخرى أيضًا أن تكون مبدعًا باستخدام عناصر CSS الزائفة (محددات (selectors))، مثل <code>‎:before</code> و<code>‎:aft</code>.
</p>

<p>
	ملاحظة: مرّةّ أخرى، <a href="http://caniuse.com/#feat=css-gencontent" rel="external nofollow">تُدعم العناصر الزائفة من قبل جميع المتصفحات الرئيسية</a>.
</p>

<p>
	تُستخدم العناصر الزائفة لتطبيق أنماط محدّدة على أجزاء محدّدة لعنصر HTML، أو لتحديد مجموعة فرعيّة معيّنة من العناصر. يتيح لك على سبيل المثال العنصر الزائف <code>:first-line</code> تحديد الأنماط المطبّقة فقط على السطر الأول لمحدّد معين (على سبيل المثال، <code>p:first-line</code> سيُطبّق على السطر الأول من كل عناصر الفقرة <code>p</code>).
</p>

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

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

<p>
	سيكون لدينا على الهاتف الذكيّ فقط أيقونة، بينما سيكون على الحاسوب اللوحيّ الأيقونة نفسها مرفقةً بعبارة "User name"، سنُضيف أخيرًا للأجهزة المكتبيّة أيضًا رسالة توضيحيّة قصيرة ("Insert your user name").
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_2859_16" style="">
<span class="pun">.</span><span class="pln">username</span><span class="pun">:</span><span class="pln">after </span><span class="pun">{</span><span class="pln">
content</span><span class="pun">:</span><span class="str">"Insert your user name"</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
</span><span class="lit">@media</span><span class="pln"> screen </span><span class="kwd">and</span><span class="pln"> </span><span class="pun">(</span><span class="pln">max</span><span class="pun">-</span><span class="pln">width</span><span class="pun">:</span><span class="pln"> </span><span class="lit">1024px</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
</span><span class="pun">.</span><span class="pln">username</span><span class="pun">:</span><span class="pln">before </span><span class="pun">{</span><span class="pln">
  content</span><span class="pun">:</span><span class="str">"User name"</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="lit">@media</span><span class="pln"> screen </span><span class="kwd">and</span><span class="pln"> </span><span class="pun">(</span><span class="pln">max</span><span class="pun">-</span><span class="pln">width</span><span class="pun">:</span><span class="pln"> </span><span class="lit">480px</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
</span><span class="pun">.</span><span class="pln">username</span><span class="pun">:</span><span class="pln">before </span><span class="pun">{</span><span class="pln">
  content</span><span class="pun">:</span><span class="str">""</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	يمكننا إنجاز ما يلي اعتمادًا فقط على العناصر الزائفة التالية<code>:before</code> و<code>:after:</code>:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="33345" href="https://academy.hsoub.com/uploads/monthly_2020_01/01.jpg.e54f43a05dd017a184edc57c8d010f45.jpg" rel=""><img alt="01.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="33345" data-unique="data-unique" src="https://academy.hsoub.com/uploads/monthly_2020_01/01.thumb.jpg.02e7666ce99a3882704a5fa565c138cb.jpg"></a>
</p>

<p>
	لمعرفة المزيد عن سحر العناصر الزائفة، يوجد لدى Chris Coyier " <a href="http://css-tricks.com/pseudo-element-roundup/" rel="external nofollow">وصف تفصيلي</a> جيد عن حيل CSS)(CSS-Tricks.
</p>

<h2>
	إذًا، من أين أبدأ؟
</h2>

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

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

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="33346" href="https://academy.hsoub.com/uploads/monthly_2020_01/02.jpg.2c81ac8921c48c814bfaeab251faa632.jpg" rel=""><img alt="02.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="33346" data-unique="data-unique" src="https://academy.hsoub.com/uploads/monthly_2020_01/02.jpg.2c81ac8921c48c814bfaeab251faa632.jpg"></a>
</p>

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

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_2859_18" style="">
<span class="lit">@media</span><span class="pln"> screen </span><span class="kwd">and</span><span class="pln"> </span><span class="pun">(</span><span class="pln">max</span><span class="pun">-</span><span class="pln">width</span><span class="pun">:</span><span class="pln"> </span><span class="lit">1200px</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
</span><span class="pun">.</span><span class="pln">menu </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">

</span><span class="lit">@media</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="lit">1200px</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
</span><span class="pun">.</span><span class="pln">menu </span><span class="pun">{</span><span class="pln">
  width</span><span class="pun">:</span><span class="pln"> </span><span class="lit">30</span><span class="pun">%;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
</span><span class="pun">}</span></pre>

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

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

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

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

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

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="33347" href="https://academy.hsoub.com/uploads/monthly_2020_01/03.jpg.ecd96502b674b9249020d5048dcdd92c.jpg" rel=""><img alt="03.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="33347" data-unique="data-unique" src="https://academy.hsoub.com/uploads/monthly_2020_01/03.jpg.ecd96502b674b9249020d5048dcdd92c.jpg"></a>
</p>

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

<h2>
	عناصر تصميم متجاوبة أخرى
</h2>

<p>
	يتوجب تذكّر سلوك جميع عناصر الصفحة عند استخدام استعلامات الوسائط وليس فقط العناصر المستهدفة -لا سيما عند استخدام «الشبكات المرنة» (fluid grids)- وفي هذه الحالة (وعلى عكس الأبعاد الثابتة) ستُملئ الصفحة بالكامل في أي وقت، وسيكبر ويصغر حجم المحتوى بما يتناسب معها.
</p>

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

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_2859_20" style="">
<span class="pln">img </span><span class="pun">{</span><span class="pln">
max</span><span class="pun">-</span><span class="pln">width</span><span class="pun">:</span><span class="pln"> </span><span class="lit">100</span><span class="pun">%</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	يجب التعامل مع العناصر الأخرى بطرق مماثلة. فمثلًا يُعدّ استخدام <a href="http://css-tricks.com/examples/IconFont" rel="external nofollow">IconFonts</a>حلًّا رائعًا للأيقونات في تصميم الويب المتجاوب.
</p>

<h2>
	نبذة عن أنظمة الشبكات المرنة
</h2>

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

<p>
	على الرغم من أن أنظمة fluid grids هذه ترتبط ارتباطًا وثيقًا بما ناقشناه هنا، إلا أنّها في الحقيقة كيان منفصل بالكامل يتطلب تعليمًا إضافيًا للمناقشة التفصيليّة. لذلك سأذكر هنا فقط بعضًا من الأُطر الرئيسيّة التي تدعم مثل هذا النهج: <a href="http://getbootstrap.com/2.3.2/" rel="external nofollow">Bootstrap</a> و <a href="http://unsemantic.com/" rel="external nofollow">Unsemantic</a> و <a href="http://www.brackets.io/" rel="external nofollow">Brackets</a>.
</p>

<h2>
	الخلاصة
</h2>

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

<p>
	ترجمة وبتصرف للمقال <a href="https://www.toptal.com/front-end/introduction-to-responsive-web-design-pseudo-elements-media-queries" rel="external nofollow">Introduction to Responsive Web Design: Pseudo-Elements, Media Queries, and More</a> لصاحبه <a href="https://www.toptal.com/resume/tomislav-krnic" rel="external nofollow">Tomislav Krnic</a>.
</p>
]]></description><guid isPermaLink="false">787</guid><pubDate>Sat, 25 Jan 2020 18:04:01 +0000</pubDate></item><item><title>&#x62A;&#x62D;&#x631;&#x64A;&#x643; &#x634;&#x62E;&#x635;&#x64A;&#x629; &#x628;&#x64A;&#x645;&#x627;&#x643;&#x633; &#x639;&#x628;&#x631; CSS</title><link>https://academy.hsoub.com/programming/css/%D8%AA%D8%AD%D8%B1%D9%8A%D9%83-%D8%B4%D8%AE%D8%B5%D9%8A%D8%A9-%D8%A8%D9%8A%D9%85%D8%A7%D9%83%D8%B3-%D8%B9%D8%A8%D8%B1-css-r750/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2019_10/5d9849121bdcc_.jpg.5faa4c7663133c0d021578ef8d6c9221.jpg" /></p>

<p>
	لنستخدم CSS لرسم شخصية بيماكس (Baymax) من فيلم Big Hero 6.
</p>

<p>
	<a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2019_10/5d984914c76d2_.jpg.af3cec845af442295087d72110b0a5fc.jpg" data-fileid="32049" rel=""><img class="ipsImage ipsImage_thumbnailed" data-fileid="32049" data-unique="h7o4lcdlw" src="https://academy.hsoub.com/uploads/monthly_2019_10/5d984914dbff5_.thumb.jpg.01f9962d6a0edd17301d70e2b1c11346.jpg" alt="تحريك شخصية بيماكس.jpg"></a>
</p>

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

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2019_10/pic01.JPG.ab7071f8d009d0f67dc267d0e558a2a0.JPG" data-fileid="32044" rel=""><img class="ipsImage ipsImage_thumbnailed" data-fileid="32044" data-unique="data-unique" src="https://academy.hsoub.com/uploads/monthly_2019_10/pic01.JPG.ab7071f8d009d0f67dc267d0e558a2a0.JPG" alt="pic01.JPG"></a>
</p>

<p>
	<a href="https://codepen.io/donovanh/full/ZYaMjw/" rel="external nofollow">تجربة حية</a>.
</p>

<h2>
	عنصر واحد
</h2>

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

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

<h2>
	التصميم
</h2>

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

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_2996_10" style="">
<span class="pln">body </span><span class="pun">{</span><span class="pln">
  background</span><span class="pun">:</span><span class="pln"> radial</span><span class="pun">-</span><span class="pln">gradient</span><span class="pun">(</span><span class="pln">circle at center</span><span class="pun">,</span><span class="pln"> </span><span class="com">#fff, #fff 50%, #aaa);</span><span class="pln">
  background</span><span class="pun">-</span><span class="pln">size</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">
  background</span><span class="pun">-</span><span class="pln">repeat</span><span class="pun">:</span><span class="pln"> </span><span class="kwd">no</span><span class="pun">-</span><span class="pln">repeat</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">
</span><span class="pun">}</span></pre>

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

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_2996_12" style="">
<span class="pun">.</span><span class="pln">baymax </span><span class="pun">{</span><span class="pln">
  border</span><span class="pun">-</span><span class="pln">bottom</span><span class="pun">:</span><span class="pln"> </span><span class="lit">1.5em</span><span class="pln"> solid </span><span class="com">#000;</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">50</span><span class="pun">%;</span><span class="pln">
  left</span><span class="pun">:</span><span class="pln"> </span><span class="lit">50</span><span class="pun">%;</span><span class="pln">
  width</span><span class="pun">:</span><span class="pln"> </span><span class="lit">50</span><span class="pun">%;</span><span class="pln">
  transform</span><span class="pun">:</span><span class="pln"> translate</span><span class="pun">(-</span><span class="lit">50</span><span class="pun">%,</span><span class="pln"> </span><span class="pun">-</span><span class="lit">40</span><span class="pun">%);</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	تقوم الخاصية الأولى بتعيين إطار سفلي أسود بعرض 1.5em. ثمَّ يتموضع الخط باستخدام الموضع المطلق، فيندفع إلى الأسفل 50% ويتحرك من اليسار 50%. قيم الـ 50% هي بالنسبة إلى حجم العنصر الحاوي (body).
</p>

<p>
	المشكلة التي نواجهها الآن هي أنَّ العنصر يبدأ من منتصف طول وعرض الشاشة. إنَّه خارج المركز.
</p>

<p>
	لموازنة ذلك، نستخدم تحويلًا لسحب العنصر 50% يسارًا من عرضه، وإلى الأعلى 40% من عرضه.
</p>

<p>
	عند هذه المرحلة يصبح الفم في المركز على هذا النحو:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2019_10/pic02.JPG.436b53b06d257848f32442490a00ae05.JPG" data-fileid="32045" rel=""><img class="ipsImage ipsImage_thumbnailed" data-fileid="32045" data-unique="data-unique" src="https://academy.hsoub.com/uploads/monthly_2019_10/pic02.JPG.436b53b06d257848f32442490a00ae05.JPG" alt="pic02.JPG"></a>
</p>

<p>
	 
</p>

<h2>
	إضافة العينين
</h2>

<p>
	سنستخدم العناصر الزائفة <code>before</code> و<code>after</code> لإضافة العينين إلى الوجه. لن يحتاج هذا إلى أي عنصر HTML إضافي وتتم معالجته بالكامل باستخدام CSS.
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_2996_14" style="">
<span class="pun">.</span><span class="pln">baymax</span><span class="pun">::</span><span class="pln">before </span><span class="pun">{</span><span class="pln">
  background</span><span class="pun">:</span><span class="pln"> </span><span class="com">#000;</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">
  content</span><span class="pun">:</span><span class="pln"> </span><span class="str">""</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">12em</span><span class="pun">;</span><span class="pln">
  height</span><span class="pun">:</span><span class="pln"> </span><span class="lit">12em</span><span class="pun">;</span><span class="pln">
  left</span><span class="pun">:</span><span class="pln"> </span><span class="pun">-</span><span class="lit">9em</span><span class="pun">;</span><span class="pln">
  top</span><span class="pun">:</span><span class="pln"> </span><span class="pun">-</span><span class="lit">6em</span><span class="pun">;</span><span class="pln">
  transform</span><span class="pun">:</span><span class="pln"> skewX</span><span class="pun">(-</span><span class="lit">4deg</span><span class="pun">);</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

</span><span class="pun">.</span><span class="pln">baymax</span><span class="pun">::</span><span class="pln">after </span><span class="pun">{</span><span class="pln">
  background</span><span class="pun">:</span><span class="pln"> </span><span class="com">#000;</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">
  content</span><span class="pun">:</span><span class="pln"> </span><span class="str">""</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">12em</span><span class="pun">;</span><span class="pln">
  height</span><span class="pun">:</span><span class="pln"> </span><span class="lit">12em</span><span class="pun">;</span><span class="pln">
  right</span><span class="pun">:</span><span class="pln"> </span><span class="pun">-</span><span class="lit">9em</span><span class="pun">;</span><span class="pln">
  top</span><span class="pun">:</span><span class="pln"> </span><span class="pun">-</span><span class="lit">6em</span><span class="pun">;</span><span class="pln">
  transform</span><span class="pun">:</span><span class="pln"> skewX</span><span class="pun">(</span><span class="lit">4deg</span><span class="pun">);</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	كل من هذه العناصر الزائفة لها خلفية سوداء، وحواف دائرية -<code>border-radius: 50%;</code> لجعلها دائرية. كلّ منها متموضع في نهاية الفم، وأخيرًا لها تحوّل <code>skew</code> لجعلها تبدو كأنَّها مائلة قليلًا للخلف. ستظهر النتيجة كما يلي:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2019_10/pic03.JPG.91c4a35213c1dc53dbd08a5bbd16e07c.JPG" data-fileid="32046" rel=""><img class="ipsImage ipsImage_thumbnailed" data-fileid="32046" data-unique="data-unique" src="https://academy.hsoub.com/uploads/monthly_2019_10/pic03.JPG.91c4a35213c1dc53dbd08a5bbd16e07c.JPG" alt="pic03.JPG"></a>
</p>

<p>
	 
</p>

<h2>
	البطارية منخفضة
</h2>

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

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

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_2996_16" style="">
<span class="pun">.</span><span class="pln">baymax</span><span class="pun">::</span><span class="pln">before </span><span class="pun">{</span><span class="pln">
  background</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"> </span><span class="com">#efefef, #efefef 50%, #000 50%, #000);</span><span class="pln">
  background</span><span class="pun">-</span><span class="pln">position</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">100</span><span class="pun">%;</span><span class="pln">
  background</span><span class="pun">-</span><span class="pln">size</span><span class="pun">:</span><span class="pln"> </span><span class="lit">200</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="pln">
</span><span class="pun">}</span><span class="pln">

</span><span class="pun">.</span><span class="pln">baymax</span><span class="pun">::</span><span class="pln">after </span><span class="pun">{</span><span class="pln">
  background</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"> </span><span class="com">#efefef, #efefef 50%, #000 50%, #000);</span><span class="pln">
  background</span><span class="pun">-</span><span class="pln">position</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">100</span><span class="pun">%;</span><span class="pln">
  background</span><span class="pun">-</span><span class="pln">size</span><span class="pun">:</span><span class="pln"> </span><span class="lit">200</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="pln">
</span><span class="pun">}</span></pre>

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

<p>
	مع وجود تدرّجات للخلفية في مكانين، يمكننا أن نضيف حركة <code>keyframes</code> للتحكم في حركة الجفون.
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_2996_18" style="">
<span class="lit">@keyframes</span><span class="pln"> blink </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">50</span><span class="pun">%</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
    background</span><span class="pun">-</span><span class="pln">position</span><span class="pun">:</span><span class="pln"> </span><span class="lit">0</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="lit">85</span><span class="pun">%,</span><span class="pln"> </span><span class="lit">95</span><span class="pun">%</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
    background</span><span class="pun">-</span><span class="pln">position</span><span class="pun">:</span><span class="pln"> </span><span class="lit">0</span><span class="pln"> </span><span class="lit">75</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">
    background</span><span class="pun">-</span><span class="pln">position</span><span class="pun">:</span><span class="pln"> </span><span class="lit">0</span><span class="pln"> </span><span class="lit">100</span><span class="pun">%;</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	قاعدة <code>keyframes</code> في الحركات هي طريقة لوصف سلسلة من الإطارات، باستخدام النسبة المئوية. تعود النسبة المئوية لمدى استمرار الحركة، لذا فإنَّ النسبة المئوية 50% منتصف الطريق عبر الحركة.
</p>

<p>
	بهذه الطريقة يمكننا ضبط الخلفية للبقاء مستيقظين حتى منتصف الحركة، ثمَّ بين الإطار 50% والإطار85%، تتحرك للأسفل، وثمَّ تستقر في نهاية الحركة.
</p>

<p>
	الخطوة التالية هي إخبار العناصر الزائفة أن تستخدم إطارات الحركة هذه. أضف خاصية <code>animation</code> للأنماط الحالية.
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_2996_20" style="">
<span class="pun">.</span><span class="pln">baymax</span><span class="pun">::</span><span class="pln">before </span><span class="pun">{</span><span class="pln">
  animation</span><span class="pun">:</span><span class="pln"> blink </span><span class="lit">6s</span><span class="pln"> infinite</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">baymax</span><span class="pun">::</span><span class="pln">after </span><span class="pun">{</span><span class="pln">
  animation</span><span class="pun">:</span><span class="pln"> blink </span><span class="lit">6s</span><span class="pln"> </span><span class="lit">0.1s</span><span class="pln"> infinite</span><span class="pun">;</span><span class="pln">
  </span><span class="pun">...</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	أخبرنا المتصفح هنا أن يستخدم حركة <code>blink</code> على كل عنصر. وضبطنا مدة الحركة إلى 6 ثواني وستستمر بشكلٍ لا نهائي.
</p>

<p>
	خاصية واحدة إضافية في المثال الثاني: تخبر المدة <code>0.1s</code> بعد <code>6s</code> المتصفح أن تتأخر الحركة لـ0.1 ثانية. يخلق هذا تأثير إغلاق العين الثانية بتأخيرٍ عن الأولى. وذلك يضيف التأثير المتدلي والمتعب ويجعلها تبدو أكثر واقعيةً. يجب أن تظهر النتيجة النهائية كما في الصورة:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2019_10/pic04.JPG.68e551de18cd272d922fa052c5f8ac7a.JPG" data-fileid="32047" rel=""><img class="ipsImage ipsImage_thumbnailed" data-fileid="32047" data-unique="data-unique" src="https://academy.hsoub.com/uploads/monthly_2019_10/pic04.JPG.68e551de18cd272d922fa052c5f8ac7a.JPG" alt="pic04.JPG"></a>
</p>

<p>
	 
</p>

<p>
	يمكنك مشاهدة <a href="https://codepen.io/donovanh/full/ZYaMjw/" rel="external nofollow">تجربة حية</a>.
</p>

<h2>
	المتصفحات
</h2>

<p>
	حذفت في أمثلة الشفرة أيّ بادئات معتادة <code>webkit-</code> و<code>moz-</code>. لكن خاصيّات <code>transform</code> و<code>animation</code> يجب أن تكون مسبوقة، وأنصحك باستخدام شيء ما مثل Autoprefixer لهذا.
</p>

<h2>
	نسخة gif قابلة للمشاركة
</h2>

<p>
	إليك نسخة gif متحركة يمكنك مشاركتها على الإنترنت بسهولة:
</p>

<p style="text-align: center;">
	<img class="ipsImage ipsImage_thumbnailed" data-fileid="32048" data-unique="72qjd6ild" src="https://academy.hsoub.com/uploads/monthly_2019_10/pic05.gif.755910531a8eea8b847324c52acb2a5d.gif" alt="pic05.gif"></p>

<p>
	ترجمة -وبتصرف- للمقال <a href="https://cssanimation.rocks/baymax/" rel="external nofollow">Baymax in CSS</a>
</p>
]]></description><guid isPermaLink="false">750</guid><pubDate>Sat, 05 Oct 2019 07:41:48 +0000</pubDate></item><item><title>&#x62A;&#x635;&#x645;&#x64A;&#x645; &#x647;&#x64A;&#x626;&#x629; &#x62C;&#x647;&#x627;&#x632; Mac Plus &#x628;&#x627;&#x633;&#x62A;&#x62E;&#x62F;&#x627;&#x645; CSS</title><link>https://academy.hsoub.com/programming/css/%D8%AA%D8%B5%D9%85%D9%8A%D9%85-%D9%87%D9%8A%D8%A6%D8%A9-%D8%AC%D9%87%D8%A7%D8%B2-mac-plus-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-css-r726/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2019_08/5d4a9018d6218_.jpg.9c0a4cb45f3e356950735aa7b8cb6982.jpg" /></p>

<p>
	سنُأحاول في هذا المنشور الإشادة بجهاز حاسوب Mac Plus الجميل من خلال إنشائه باستخدام CSS.
</p>

<h2 id="-">
	عن تصميم الجهاز
</h2>

<p>
	دعنا نبني (تقريبًا) جهاز حاسوب. ليس فقط أي حاسوب قديم، ولكن حاسوبًا كان بالنسبة للكثير منا مقدمة في عالم Apple. كانت بداية إطلالة جهاز Macintosh Plus (الاسم المختصرMr. T) لأول مرة في عام 1986 بحزم 1 ميغابايت من ذاكرة الوصول العشوائي ومعالج بسرعة 8 ميجاهرتز؛ وبصرف النظر عن كل هذه القوة، فقد كان تصميمه لطيفًا للغاية، مما جعله أكثر متعة في الاستخدام.
</p>

<p style="text-align: center;">
	<img alt="mac.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="30969" data-unique="6m83tad7h" src="https://academy.hsoub.com/uploads/monthly_2019_08/mac.jpg.bd4257817ae3e50457becf15a8a46766.jpg"></p>

<p>
	في هذا المشروع، سننشئ نموذجًا ثلاثة الأبعاد 3D لجهاز Macintosh Plus وعرضه في بيئة ثلاثية الأبعاد. وسنجعله يتحرك على الشاشة باستخدام حركات الإطار المفتاحي CSS Keyframe animation، لإظهار التأثير ثلاثي الأبعاد بشكل أفضل.
</p>

<h2 id="-css-">
	لماذا نستخدم CSS؟
</h2>

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

<p>
	ينتج ملفات ذات أحجام أصغر من أحجام ملفات الصور عند إنشاء مشاهد باستخدام CSS؛ ففي هذا المثال، يُضغط CSS على 4 كيلوبايت فقط و HTML أقل من 1 كيلوبايت. بينما ستكون الصورة المكافِئة لنفس التنسيق بحجم 100 كيلو بايت أو أكثر.
</p>

<h2 id="-">
	العرض التوضيحي والشِّيفرة المصدرية
</h2>

<p>
	اطلع على تصميم <a href="https://cssanimation.rocks/mac/" rel="external nofollow">CSS Mac Plus</a> ويمكنك تحميل <a href="https://github.com/donovanh/mac/archive/master.zip" rel="external nofollow">الشيفرة المصدرية الكاملة من هنا،</a> ويمكنك عرض <a href="https://github.com/donovanh/mac/blob/master/stylesheets/screen.css" rel="external nofollow">ملف CSS الكامل على GitHub.</a>.
</p>

<h2 id="-">
	البادئات
</h2>

<p>
	قمنا بحذف أي بادئات CSS من شيفرة المثال لتسهيل القراءة. عند العمل على ذلك بنفسك، تأكد من تضمين بادئات للمتصفحات إن لزم، مثل webkit و moz و ms و o.
</p>

<h2 id="-">
	إعداد المرحلة الأولى
</h2>

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

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_8642_6" 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;&lt;/div&gt;</span></pre>

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

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="30964" href="https://academy.hsoub.com/uploads/monthly_2019_08/01-perspective.png.b254aabb3db8774c5cd08c4a7b767fa1.png" rel=""><img alt="01-perspective.png" class="ipsImage ipsImage_thumbnailed" data-fileid="30964" data-unique="wybf82f92" src="https://academy.hsoub.com/uploads/monthly_2019_08/01-perspective.thumb.png.f59c9200577d609acdf33139f8014fad.png"></a>
</p>

<div>
	<h3 id="-">
		جربها بنفسك
	</h3>

	<p>
		إن كنت ترغب في البدء، فابحث عن ملف screen.css في المسار examples/01-Perspectiv في ملفات المشروع. ستتمكن من تحديث قيمة الخاصية perspective ومعرفة تأثيرها من خلال فتح ملف index.html من نفس المجلد في متصفحك. الخاصية perspective-origin تُحدِّد الموضع الذي ينظر منه المستخدم إلى العنصر، يتيح لك تغيير قيمة هذه الخاصية، أن تنظر إلى المشهد من الأعلى أو من الأسفل أو من الجانب. في هذا المثال قمنا بضبط قيمتها على 1600 pixel، وشيفرة CSS تبدو كالتالي:
	</p>

	<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_8642_8" style="">
<span class="pun">.</span><span class="pln">stage </span><span class="pun">{</span><span class="pln">
  perspective</span><span class="pun">:</span><span class="pln"> </span><span class="lit">1600px</span><span class="pun">;</span><span class="pln">
  perspective</span><span class="pun">-</span><span class="pln">origin</span><span class="pun">:</span><span class="pln"> </span><span class="lit">50</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>
		يحتوي مجلد stylesheets في ملف المشروع المضغوط على قواعد CSS الكاملة لإعداد الخصائص الأخرى المختلفة للمشهد، بما في ذلك الخلفية والعرض والارتفاع.
	</p>

	<h2 id="-">
		تصميم الهيكل
	</h2>

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

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

	<p>
		إذا كنت ترغب في الإطلاع على شيفرة HTML الكاملة، فيمكنك العثور عليه في ملفات المشروع داخل ملف index.html.
	</p>

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

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

	<p>
		يمكن أن تبدو الخاصية transform كالتالي:
	</p>

	<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_8642_10" style="">
<span class="pun">.</span><span class="pln">example </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">45deg</span><span class="pun">)</span><span class="pln"> translateZ</span><span class="pun">(-</span><span class="lit">100px</span><span class="pun">);</span><span class="pln">
</span><span class="pun">}</span></pre>

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

	<p>
		يجب أن يبدو الشكل شيء مثل هذا:
	</p>

	<p style="text-align: center;">
		<a class="ipsAttachLink ipsAttachLink_image" data-fileid="30965" href="https://academy.hsoub.com/uploads/monthly_2019_08/02-Transforms.png.8ff2f884486e0845f601de147cb6a61d.png" rel=""><img alt="02-Transforms.png" class="ipsImage ipsImage_thumbnailed" data-fileid="30965" data-unique="e3x19x8lr" src="https://academy.hsoub.com/uploads/monthly_2019_08/02-Transforms.thumb.png.3886f20c49977ff9fb7a5363cd1b44b7.png"></a>
	</p>

	<p>
		يوجد مثال على تحويلات CSS في مجلد examples/02-Transforms ضمن ملفات المشروع، هناك عنصرين متَموضعين في المثال ويمكنك تغيير موضعهما من خلال تعديل محتوى الملف 02-Transforms/css/screen.css.
	</p>

	<h3 id="-transform-origin-">
		الخاصية <code>transform-origin</code>
	</h3>

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

	<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_8642_12" style="">
<span class="pun">.</span><span class="kwd">default</span><span class="pun">-</span><span class="pln">origin </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">50</span><span class="pun">%</span><span class="pln"> </span><span class="lit">50</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>
		قد احتفظنا بالوضع الافتراضي في مثالنا، لكن الأمر يستحق أن ننوه لوجود الخاصية.
	</p>

	<h2 id="-">
		إنشاء الصناديق
	</h2>

	<p>
		يمكننا استخدام بعض التحويلات لإعداد الجسم الرئيسي للجهاز. ويمكن أن تكون شيفرة HTML كالتالي:
	</p>

	<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_8642_14" 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;div</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"positioning animated"</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">"mac"</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">"back"</span><span class="tag">&gt;&lt;/figure&gt;</span><span class="pln">
      </span><span class="tag">&lt;figure</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"left"</span><span class="tag">&gt;&lt;/figure&gt;</span><span class="pln">
      </span><span class="tag">&lt;figure</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"right"</span><span class="tag">&gt;&lt;/figure&gt;</span><span class="pln">
      </span><span class="tag">&lt;figure</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"top"</span><span class="tag">&gt;&lt;/figure&gt;</span><span class="pln">
      </span><span class="tag">&lt;figure</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"base-front"</span><span class="tag">&gt;&lt;/figure&gt;</span><span class="pln">
      </span><span class="tag">&lt;figure</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"base-left"</span><span class="tag">&gt;&lt;/figure&gt;</span><span class="pln">
      </span><span class="tag">&lt;figure</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"base-right"</span><span class="tag">&gt;&lt;/figure&gt;</span><span class="pln">
      </span><span class="tag">&lt;figure</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"base-back"</span><span class="tag">&gt;&lt;/figure&gt;</span><span class="pln">
      </span><span class="tag">&lt;figure</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"front"</span><span class="tag">&gt;&lt;/figure&gt;</span><span class="pln">
      </span><span class="tag">&lt;figure</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"shadow"</span><span class="tag">&gt;&lt;/figure&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>
		في هذه المرحلة، يوجد حاوية سنستخدمها لوضع الجهاز في الصفحة. داخلها سيكون جهاز mac نفسه. يتكون الصندوقان من عناصر <a href="https://wiki.hsoub.com/HTML/figure" rel="external"><code>&lt;figure&gt;</code></a> ، تمثل هذه العناصر الجوانب العلوية والأمامية والخلفية للمربعين.
	</p>

	<p>
		هناك أيضًا عنصر <code>figure</code> لتمثيل الظل. يمكنك العثور على هذا المثال في المجلد examples/03-Boxes.
	</p>

	<p>
		ستبدو النتيجة كالتالي:
	</p>

	<p style="text-align: center;">
		<a class="ipsAttachLink ipsAttachLink_image" data-fileid="30966" href="https://academy.hsoub.com/uploads/monthly_2019_08/04-Boxes.png.db0ae18be199cd54cd1704b970574e0b.png" rel=""><img alt="04-Boxes.png" class="ipsImage ipsImage_thumbnailed" data-fileid="30966" data-unique="yfvmg7euw" src="https://academy.hsoub.com/uploads/monthly_2019_08/04-Boxes.thumb.png.5194d3d5750007361283792d324765c7.png"></a>
	</p>

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

	<p>
		شِيفرة CSS تشبه التالي:
	</p>

	<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_8642_16" style="">
<span class="pun">.</span><span class="pln">front </span><span class="pun">{</span><span class="pln">
  height</span><span class="pun">:</span><span class="pln"> </span><span class="lit">11.5em</span><span class="pun">;</span><span class="pln">
  width</span><span class="pun">:</span><span class="pln"> </span><span class="lit">9.6em</span><span class="pun">;</span><span class="pln">
  background</span><span class="pun">:</span><span class="pln"> </span><span class="com">#e0e0e0;</span><span class="pln">
  transform</span><span class="pun">:</span><span class="pln"> rotateX</span><span class="pun">(</span><span class="lit">5deg</span><span class="pun">)</span><span class="pln"> translateZ</span><span class="pun">(</span><span class="lit">5.43em</span><span class="pun">);</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
</span><span class="pun">.</span><span class="pln">back </span><span class="pun">{</span><span class="pln">
  height</span><span class="pun">:</span><span class="pln"> </span><span class="lit">11.5em</span><span class="pun">;</span><span class="pln">
  width</span><span class="pun">:</span><span class="pln"> </span><span class="lit">9.6em</span><span class="pun">;</span><span class="pln">
  background</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">top</span><span class="pun">,</span><span class="pln"> </span><span class="com">#f2f2f2, #e6e6e6 0.25em, #c2c2c2);</span><span class="pln">
  transform</span><span class="pun">:</span><span class="pln"> rotateX</span><span class="pun">(</span><span class="lit">5deg</span><span class="pun">)</span><span class="pln"> translateZ</span><span class="pun">(-</span><span class="lit">5.45em</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">top </span><span class="pun">{</span><span class="pln">
  height</span><span class="pun">:</span><span class="pln"> </span><span class="lit">10.95em</span><span class="pun">;</span><span class="pln">
  width</span><span class="pun">:</span><span class="pln"> </span><span class="lit">9.6em</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"> </span><span class="com">#ebf0dc;</span><span class="pln">
  background</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">left</span><span class="pun">,</span><span class="pln"> </span><span class="com">#fafafa, #d9d9d9 0.25em, #d9d9d9 9.35em, #fafafa);</span><span class="pln">
  transform</span><span class="pun">:</span><span class="pln"> rotateX</span><span class="pun">(</span><span class="lit">5deg</span><span class="pun">)</span><span class="pln"> rotateX</span><span class="pun">(</span><span class="lit">90deg</span><span class="pun">)</span><span class="pln"> translateZ</span><span class="pun">(</span><span class="lit">5.45em</span><span class="pun">);</span><span class="pln">
</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">
  height</span><span class="pun">:</span><span class="pln"> </span><span class="lit">11.5em</span><span class="pun">;</span><span class="pln">
  width</span><span class="pun">:</span><span class="pln"> </span><span class="lit">10.9em</span><span class="pun">;</span><span class="pln">
  background</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">top</span><span class="pun">,</span><span class="pln"> </span><span class="com">#ffffff, #e0e0e0 0.25em, #b3b3b3);</span><span class="pln">
  transform</span><span class="pun">:</span><span class="pln"> rotateX</span><span class="pun">(</span><span class="lit">5deg</span><span class="pun">)</span><span class="pln"> rotateY</span><span class="pun">(-</span><span class="lit">90deg</span><span class="pun">)</span><span class="pln"> translateZ</span><span class="pun">(</span><span class="lit">5.45em</span><span class="pun">);</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
</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">11.5em</span><span class="pun">;</span><span class="pln">
  width</span><span class="pun">:</span><span class="pln"> </span><span class="lit">10.9em</span><span class="pun">;</span><span class="pln">
  background</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">top</span><span class="pun">,</span><span class="pln"> </span><span class="com">#ffffff, #e0e0e0 0.25em, #b3b3b3);</span><span class="pln">
  transform</span><span class="pun">:</span><span class="pln"> rotateX</span><span class="pun">(</span><span class="lit">5deg</span><span class="pun">)</span><span class="pln"> rotateY</span><span class="pun">(</span><span class="lit">90deg</span><span class="pun">)</span><span class="pln"> translateZ</span><span class="pun">(</span><span class="lit">4.14em</span><span class="pun">);</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
</span><span class="pun">.</span><span class="kwd">base</span><span class="pun">-</span><span class="pln">front </span><span class="pun">{</span><span class="pln">
  height</span><span class="pun">:</span><span class="pln"> </span><span class="lit">2.1em</span><span class="pun">;</span><span class="pln">
  width</span><span class="pun">:</span><span class="pln"> </span><span class="lit">9.6em</span><span class="pun">;</span><span class="pln">
  background</span><span class="pun">:</span><span class="pln"> </span><span class="com">#c2c2c2;</span><span class="pln">
  transform</span><span class="pun">:</span><span class="pln"> translateY</span><span class="pun">(</span><span class="lit">10.7em</span><span class="pun">)</span><span class="pln"> translateZ</span><span class="pun">(</span><span class="lit">5em</span><span class="pun">);</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
</span><span class="pun">.</span><span class="kwd">base</span><span class="pun">-</span><span class="pln">back </span><span class="pun">{</span><span class="pln">
  height</span><span class="pun">:</span><span class="pln"> </span><span class="lit">2.1em</span><span class="pun">;</span><span class="pln">
  width</span><span class="pun">:</span><span class="pln"> </span><span class="lit">9.6em</span><span class="pun">;</span><span class="pln">
  background</span><span class="pun">:</span><span class="pln"> </span><span class="com">#b3b3b3;</span><span class="pln">
  transform</span><span class="pun">:</span><span class="pln"> translateY</span><span class="pun">(</span><span class="lit">10.7em</span><span class="pun">)</span><span class="pln"> translateZ</span><span class="pun">(-</span><span class="lit">5em</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="kwd">base</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">2.1em</span><span class="pun">;</span><span class="pln">
  width</span><span class="pun">:</span><span class="pln"> </span><span class="lit">10em</span><span class="pun">;</span><span class="pln">
  background</span><span class="pun">:</span><span class="pln"> </span><span class="com">#b3b3b3;</span><span class="pln">
  transform</span><span class="pun">:</span><span class="pln"> translateY</span><span class="pun">(</span><span class="lit">10.7em</span><span class="pun">)</span><span class="pln"> rotateY</span><span class="pun">(-</span><span class="lit">90deg</span><span class="pun">)</span><span class="pln"> translateZ</span><span class="pun">(</span><span class="lit">4.99em</span><span class="pun">);</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
</span><span class="pun">.</span><span class="kwd">base</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">2.1em</span><span class="pun">;</span><span class="pln">
  width</span><span class="pun">:</span><span class="pln"> </span><span class="lit">10em</span><span class="pun">;</span><span class="pln">
  background</span><span class="pun">:</span><span class="pln"> </span><span class="com">#b3b3b3;</span><span class="pln">
  transform</span><span class="pun">:</span><span class="pln"> translateY</span><span class="pun">(</span><span class="lit">10.7em</span><span class="pun">)</span><span class="pln"> rotateY</span><span class="pun">(</span><span class="lit">90deg</span><span class="pun">)</span><span class="pln"> translateZ</span><span class="pun">(</span><span class="lit">4.58em</span><span class="pun">);</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
</span><span class="pun">.</span><span class="pln">shadow </span><span class="pun">{</span><span class="pln">
  width</span><span class="pun">:</span><span class="pln"> </span><span class="lit">10em</span><span class="pun">;</span><span class="pln">
  height</span><span class="pun">:</span><span class="pln"> </span><span class="lit">11em</span><span class="pun">;</span><span class="pln">
  background</span><span class="pun">:</span><span class="pln"> transparent</span><span class="pun">;</span><span class="pln">
  transform</span><span class="pun">:</span><span class="pln"> rotateX</span><span class="pun">(</span><span class="lit">90deg</span><span class="pun">)</span><span class="pln"> translateZ</span><span class="pun">(-</span><span class="lit">7.4em</span><span class="pun">)</span><span class="pln"> translateX</span><span class="pun">(</span><span class="lit">20em</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="pun">-</span><span class="lit">20.2em</span><span class="pln"> </span><span class="lit">0</span><span class="pln"> </span><span class="lit">1.8em</span><span class="pln"> rgba</span><span class="pun">(</span><span class="lit">100</span><span class="pun">,</span><span class="pln"> </span><span class="lit">90</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.4</span><span class="pun">);</span><span class="pln">
</span><span class="pun">}</span></pre>

	<p>
		تم إعطاء كل عناصر <code>figure</code> عرضًا وارتفاعًا، بالإضافة إلى تدرج أو لون خلفية CSS ثم تتَموضع باستخدام خاصية <code>transform</code> (التحويل). مثلًا، يتم تدوير الجانب الأيسر بمقدار 90 درجة قبل نقله إلى الخلف بنصف عرض الجهاز.
	</p>

	<p>
		يُنقل عنصر <code>figure</code> الأمامي للأمام، على طول المحور Z بنصف طول الجهاز ويُدوَّر الظهر 180 درجة قبل نقله مرة أخرى.
	</p>

	<p>
		بالنسبة لأجزاء المربع العلوي، يُدوّر كل عنصر من عناصر <code>figure</code> بمقدار 5 درجات حول المحور X. هذا يعني أن الجزء الأساسي من Macintosh Plus مائل إلى الخلف.
	</p>

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

	<h2 id="-">
		الحَوَاف
	</h2>

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

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

	<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_8642_18" style="">
<span class="tag">&lt;figure</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"front"</span><span class="tag">&gt;</span><span class="pln">
  </span><span class="tag">&lt;span</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"bezel-top"</span><span class="tag">&gt;&lt;/span&gt;</span><span class="pln">
  </span><span class="tag">&lt;span</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"bezel-left"</span><span class="tag">&gt;&lt;/span&gt;</span><span class="pln">
  </span><span class="tag">&lt;span</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"bezel-right"</span><span class="tag">&gt;&lt;/span&gt;</span><span class="pln">
  </span><span class="tag">&lt;span</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"bezel-bottom"</span><span class="tag">&gt;&lt;/span&gt;</span><span class="pln">
</span><span class="tag">&lt;/figure&gt;</span></pre>

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

	<p style="text-align: center;">
		<a class="ipsAttachLink ipsAttachLink_image" data-fileid="30967" href="https://academy.hsoub.com/uploads/monthly_2019_08/04b-Bezels.png.9c2664270f3878cdf71c2bce28fd16dd.png" rel=""><img alt="04b-Bezels.png" class="ipsImage ipsImage_thumbnailed" data-fileid="30967" data-unique="vq010rvt3" src="https://academy.hsoub.com/uploads/monthly_2019_08/04b-Bezels.thumb.png.8201719dac653075c102f10bee09ca15.png"></a>
	</p>

	<p>
		يمكنك العثور على هذا المثال في المجلد examples/04-Bezels.
	</p>

	<p>
		شِيفرة CSS التالية تستخدم حيلة بخاصية <a href="https://wiki.hsoub.com/CSS/border-width" rel="external">border-width</a> (عرض الحدود) لإنشاء حواف منحدرة.
	</p>

	<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_8642_20" style="">
<span class="pun">.</span><span class="pln">front </span><span class="pun">.</span><span class="pln">bezel</span><span class="pun">-</span><span class="pln">top </span><span class="pun">{</span><span class="pln">
  border</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="pln"> solid </span><span class="com">#f2f2f2;</span><span class="pln">
  border</span><span class="pun">-</span><span class="pln">right</span><span class="pun">:</span><span class="pln"> </span><span class="lit">0.5em</span><span class="pln"> solid transparent</span><span class="pun">;</span><span class="pln">
  border</span><span class="pun">-</span><span class="pln">left</span><span class="pun">:</span><span class="pln"> </span><span class="lit">0.5em</span><span class="pln"> solid transparent</span><span class="pun">;</span><span class="pln">
  width</span><span class="pun">:</span><span class="pln"> </span><span class="lit">8.6em</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
</span><span class="pun">.</span><span class="pln">front </span><span class="pun">.</span><span class="pln">bezel</span><span class="pun">-</span><span class="pln">left </span><span class="pun">{</span><span class="pln">
  border</span><span class="pun">-</span><span class="pln">top</span><span class="pun">:</span><span class="pln"> </span><span class="lit">0.5em</span><span class="pln"> solid </span><span class="com">#d9d9d9;</span><span class="pln">
  border</span><span class="pun">-</span><span class="pln">right</span><span class="pun">:</span><span class="pln"> </span><span class="lit">0.75em</span><span class="pln"> solid transparent</span><span class="pun">;</span><span class="pln">
  border</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="pln"> solid transparent</span><span class="pun">;</span><span class="pln">
  width</span><span class="pun">:</span><span class="pln"> </span><span class="lit">10em</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">90deg</span><span class="pun">)</span><span class="pln"> translateX</span><span class="pun">(-</span><span class="lit">5.5em</span><span class="pun">)</span><span class="pln"> translateY</span><span class="pun">(-</span><span class="lit">5.5em</span><span class="pun">);</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
</span><span class="pun">.</span><span class="pln">front </span><span class="pun">.</span><span class="pln">bezel</span><span class="pun">-</span><span class="pln">right </span><span class="pun">{</span><span class="pln">
  border</span><span class="pun">-</span><span class="pln">top</span><span class="pun">:</span><span class="pln"> </span><span class="lit">0.5em</span><span class="pln"> solid </span><span class="com">#d4d4d4;</span><span class="pln">
  border</span><span class="pun">-</span><span class="pln">right</span><span class="pun">:</span><span class="pln"> </span><span class="lit">0.75em</span><span class="pln"> solid transparent</span><span class="pun">;</span><span class="pln">
  border</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="pln"> solid transparent</span><span class="pun">;</span><span class="pln">
  width</span><span class="pun">:</span><span class="pln"> </span><span class="lit">10em</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">90deg</span><span class="pun">)</span><span class="pln"> translateX</span><span class="pun">(</span><span class="lit">5.5em</span><span class="pun">)</span><span class="pln"> translateY</span><span class="pun">(-</span><span class="lit">3.62em</span><span class="pun">);</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
</span><span class="pun">.</span><span class="pln">front </span><span class="pun">.</span><span class="pln">bezel</span><span class="pun">-</span><span class="pln">bottom </span><span class="pun">{</span><span class="pln">
  border</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="pln"> solid </span><span class="com">#cccccc;</span><span class="pln">
  border</span><span class="pun">-</span><span class="pln">right</span><span class="pun">:</span><span class="pln"> </span><span class="lit">0.5em</span><span class="pln"> solid transparent</span><span class="pun">;</span><span class="pln">
  border</span><span class="pun">-</span><span class="pln">left</span><span class="pun">:</span><span class="pln"> </span><span class="lit">0.5em</span><span class="pln"> solid transparent</span><span class="pun">;</span><span class="pln">
  width</span><span class="pun">:</span><span class="pln"> </span><span class="lit">8.65em</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">180deg</span><span class="pun">)</span><span class="pln"> translateY</span><span class="pun">(-</span><span class="lit">10.76em</span><span class="pun">);</span><span class="pln">
</span><span class="pun">}</span></pre>

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

	<p>
		يتم تطبيق هذه التقنية على كل الحواف، مما يؤدي إلى ظهور الحواف منحدرةً.
	</p>

	<p>
		تُطبق التحويلات على الحواف أيضًا لجعلها تتناوب وتتموضع في جانب عنصر figure الأمامي.
	</p>

	<h2 id="-">
		المزيد من التفاصيل
	</h2>

	<p>
		مع وجود المربعات الرئيسية لِنمط حاسوبنا، يمكننا إضافة العديد من التفاصيل التي تجعله يبدو وكأنه جهاز Macintosh Plus، مثل الشاشة والرمز ومحرك الأقراص.
	</p>

	<p>
		يحتوي عنصر figure الأمامي لِ HTML على التالي:
	</p>

	<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_8642_22" style="">
<span class="tag">&lt;figure</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"front"</span><span class="tag">&gt;</span><span class="pln">
  </span><span class="tag">&lt;span</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"bezel-top"</span><span class="tag">&gt;&lt;/span&gt;</span><span class="pln">
  </span><span class="tag">&lt;span</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"bezel-left"</span><span class="tag">&gt;&lt;/span&gt;</span><span class="pln">
  </span><span class="tag">&lt;span</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"bezel-right"</span><span class="tag">&gt;&lt;/span&gt;</span><span class="pln">
  </span><span class="tag">&lt;span</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"bezel-bottom"</span><span class="tag">&gt;&lt;/span&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">"screen-container"</span><span class="tag">&gt;</span><span class="pln">
    </span><span class="tag">&lt;span</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"screen"</span><span class="tag">&gt;</span><span class="pln">
      </span><span class="tag">&lt;p&gt;</span><span class="pln">hello, Dave</span><span class="tag">&lt;/p&gt;</span><span class="pln">
      </span><span class="tag">&lt;span</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"sheen"</span><span class="tag">&gt;&lt;/span&gt;</span><span class="pln">
    </span><span class="tag">&lt;/span&gt;</span><span class="pln">
  </span><span class="tag">&lt;/figure&gt;</span><span class="pln">
  </span><span class="tag">&lt;figure</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"logo"</span><span class="tag">&gt;</span><span class="pln">
    </span><span class="tag">&lt;span</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"image"</span><span class="tag">&gt;&lt;/span&gt;</span><span class="pln">
    </span><span class="tag">&lt;span</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"text"</span><span class="tag">&gt;</span><span class="pln">Macintosh Plus</span><span class="tag">&lt;/span&gt;</span><span class="pln">
  </span><span class="tag">&lt;/figure&gt;</span><span class="pln">
  </span><span class="tag">&lt;figure</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"floppy"</span><span class="tag">&gt;&lt;/figure&gt;</span><span class="pln">
</span><span class="tag">&lt;/figure&gt;</span></pre>

	<p>
		يمكنك العثور على هذا المثال في المجلد examples/05-Completed.
	</p>

	<h3 id="-">
		الشاشة
	</h3>

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

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

	<h3 id="-">
		الشعار
	</h3>

	<p>
		يتكون الشعار من جزأين، صورة وبعض النصوص، يحتوي امتداد الصورة على صورة خلفية لشعار Apple القديم الملون، ويتم وضع النص بجانبه. يمكن العثور على شِيفرة CSS لهذا في الملفات المصدرية.
	</p>

	<p>
		لإنشاء الشكل الصحيح، يتم إضافة خط مضمن. تستخدم CSS لهذا القاعدة <a href="https://wiki.hsoub.com/CSS/gradient" rel="external"><code>‎@font-face</code></a> (واجهة الخط). هناك العديد من الطرق للقيام بذلك، لكن ربما من الأسهل استخدام خدمة مثل خدمة <a href="http://www.fontsquirrel.com/tools/webfont-generator" rel="external nofollow">Font Squirrel’s @font-face generator</a> لإنشاء شِيفرة CSS التالية:
	</p>

	<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_8642_24" style="">
<span class="lit">@font</span><span class="pun">-</span><span class="pln">face </span><span class="pun">{</span><span class="pln">
  font</span><span class="pun">-</span><span class="pln">family</span><span class="pun">:</span><span class="pln"> </span><span class="str">"apple_garamondregular"</span><span class="pun">;</span><span class="pln">
  src</span><span class="pun">:</span><span class="pln"> url</span><span class="pun">(</span><span class="str">"../fonts/apple_garamond-webfont.eot"</span><span class="pun">);</span><span class="pln">
  src</span><span class="pun">:</span><span class="pln"> url</span><span class="pun">(</span><span class="str">"../fonts/apple_garamond-webfont.eot?#iefix"</span><span class="pun">)</span><span class="pln"> format</span><span class="pun">(</span><span class="str">"embedded-opentype"</span><span class="pun">),</span><span class="pln"> url</span><span class="pun">(</span><span class="str">"../fonts/apple_garamond-webfont.woff"</span><span class="pun">)</span><span class="pln"> format</span><span class="pun">(</span><span class="str">"woff"</span><span class="pun">),</span><span class="pln"> url</span><span class="pun">(</span><span class="str">"../fonts/apple_garamond-webfont.ttf"</span><span class="pun">)</span><span class="pln"> format</span><span class="pun">(</span><span class="str">"truetype"</span><span class="pun">),</span><span class="pln"> url</span><span class="pun">(</span><span class="str">"../fonts/apple_garamond-webfont.svg#apple_garamondregular"</span><span class="pun">)</span><span class="pln"> format</span><span class="pun">(</span><span class="str">"svg"</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">
  font</span><span class="pun">-</span><span class="pln">style</span><span class="pun">:</span><span class="pln"> normal</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></pre>

	<p>
		يساعدنا Font Squirrel عن طريق إنشاء الملفات المختلفة (eot ، woff ، إلخ) التي يمكن وضعها بعد ذلك في المشروع واستدعائها داخل قاعدة <code>font-face@</code> في شيفرة CSS كما هو موضح.
	</p>

	<p>
		والنتيجة هي الخط الذي يطابق الأصلي كثيرًا.
	</p>

	<h3 id="-">
		القرص المرن
	</h3>

	<p>
		محرك الأقراص المرنة (Floppy drive) هو عنصر أحادي، ويستخدم حدود CSS لجعله يبدو كما لو كان مضبوطًا في الواجهة. تبدو شيفرة CSS التي تحدث التأثير كما يلي:
	</p>

	<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_8642_26" style="">
<span class="pun">.</span><span class="pln">floppy </span><span class="pun">{</span><span class="pln">
  height</span><span class="pun">:</span><span class="pln"> </span><span class="lit">0.2em</span><span class="pun">;</span><span class="pln">
  width</span><span class="pun">:</span><span class="pln"> </span><span class="lit">2.8em</span><span class="pun">;</span><span class="pln">
  transform</span><span class="pun">:</span><span class="pln"> translate3d</span><span class="pun">(</span><span class="lit">4.8em</span><span class="pun">,</span><span class="pln"> </span><span class="lit">8.9em</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">#555555;</span><span class="pln">
  border</span><span class="pun">-</span><span class="pln">top</span><span class="pun">:</span><span class="pln"> </span><span class="lit">0.1em</span><span class="pln"> solid </span><span class="com">#cccccc;</span><span class="pln">
  border</span><span class="pun">-</span><span class="pln">right</span><span class="pun">:</span><span class="pln"> </span><span class="lit">0.3em</span><span class="pln"> solid </span><span class="com">#e6e6e6;</span><span class="pln">
  border</span><span class="pun">-</span><span class="pln">bottom</span><span class="pun">:</span><span class="pln"> </span><span class="lit">0.1em</span><span class="pln"> solid </span><span class="com">#f2f2f2;</span><span class="pln">
  border</span><span class="pun">-</span><span class="pln">left</span><span class="pun">:</span><span class="pln"> </span><span class="lit">0.3em</span><span class="pln"> solid </span><span class="com">#e6e6e6;</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">0.25em</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></pre>

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

	<h2 id="-">
		دمج القطع معًا
	</h2>

	<p>
		عند دمج جميع القطع معًا سيكون الشكل الناتج كالتالي
	</p>

	<p style="text-align: center;">
		<a class="ipsAttachLink ipsAttachLink_image" data-fileid="30968" href="https://academy.hsoub.com/uploads/monthly_2019_08/05-Completed.png.150de0a589c6b4742434c83127f17456.png" rel=""><img alt="05-Completed.png" class="ipsImage ipsImage_thumbnailed" data-fileid="30968" data-unique="trqkecrls" src="https://academy.hsoub.com/uploads/monthly_2019_08/05-Completed.thumb.png.0d80d4a367934ff55b5142e8a985379d.png"></a>
	</p>

	<h2 id="-">
		إضافة الحركات
	</h2>

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

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

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

	<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_8642_28" style="">
<span class="lit">@keyframes</span><span class="pln"> back</span><span class="pun">-</span><span class="kwd">and</span><span class="pun">-</span><span class="pln">forth </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">
    transform</span><span class="pun">:</span><span class="pln"> rotateY</span><span class="pun">(</span><span class="lit">40deg</span><span class="pun">);</span><span class="pln">
  </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">50</span><span class="pun">%</span><span class="pln"> </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">40deg</span><span class="pun">);</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">
  </span><span class="lit">90</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">
    transform</span><span class="pun">:</span><span class="pln"> rotateY</span><span class="pun">(</span><span class="lit">40deg</span><span class="pun">);</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">
</span><span class="pun">}</span></pre>

	<p>
		في المثال السابق، تُسمى الحركة "back-and-forth" ، وتتكون من ثلاث خطوات، تبدأ بالدوران بزاوية 40 درجة، ثم عند نسبة 40٪ ، يتم تدويرها إلى 40 درجة بالإتجاه المعاكس، تبقى في هذه الدورة حتى النسبة 50٪ ، ثم تعود إلى الموضع الأصلي عند النسبة 90 ٪.
	</p>

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

	<h3 id="-">
		تطبيق الحركات
	</h3>

	<p>
		لتطبيق هذه الحركة بواسطة CSS نستخدم الخاصية <a href="https://wiki.hsoub.com/CSS/animation" rel="external"><code>animation</code></a> وهي تبدو كالتالي:
	</p>

	<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_8642_30" style="">
<span class="pln">animation</span><span class="pun">:</span><span class="pln"> back</span><span class="pun">-</span><span class="kwd">and</span><span class="pun">-</span><span class="pln">forth </span><span class="lit">14s</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"> infinite</span><span class="pun">;</span></pre>

	<p>
		تُدمَج عدة أشياء بسطر واحد هنا. تشير الشيفرة السابقة إلى أن اسم الحركة هو "back-and-forth"، ومُدتها 14 ثانية، وتكرر لانهائيًا، وسرعة تغييرها هو القيمة المحجوزة ease-in-out أي ستبدأ الحركة ببطء، ثم تتسارع، ثم ستنتهي ببطء.
	</p>

	<p>
		بتطبيق هذه الحركة على الحاوية ذات الصنف "positioning"، ينتج التالي:
	</p>
	<iframe allowfullscreen="true" allowpaymentrequest="true" allowtransparency="true" class="cp_embed_iframe " frameborder="0" height="680" id="cp_embed_HGqjp" name="cp_embed_1" scrolling="no" style="width: 100%; overflow:hidden; display:block;" title="CodePen Embed" src="https://codepen.io/donovanh/embed/HGqjp?height=680&amp;type=result&amp;href=HGqjp&amp;user=donovanh&amp;safe=true&amp;slug-hash=HGqjp&amp;default-tab=result&amp;animations=run&amp;name=cp_embed_1"></iframe>

	<h2 id="-">
		ماذا تعلمنا؟
	</h2>

	<p>
		بإنشاء كائن ثلاثي الأبعاد باستخدام CSS وتحريكه، غطَّينا بعض التقنيات وقمنا بضبط الخاصيتين <code>perspective</code> و <code>perspective-origin</code>، واستفدنا من الخاصية <code>transform</code> لتدوير العناصر وتحريكها وتحديد موضعها، وأضفنا تدرجات من خلال نوع البيانات <code>&lt;gradient&gt;</code> لإعطاء تأثير ثلاثي أبعاد أكثر واقعيةً، واستخدمنا بعض حيل CSS الحدودية لإعطاء شعور بالعمق، وأخيرًا استخدمنا إطارات مفتاحية وحركات CSS لإعطاء حياة للمشهد.
	</p>

	<h3 id="-">
		توافقية المتصفح
	</h3>

	<p>
		لا يمكن لجميع المتصفحات التعامل مع التحويلات (CSS transforms) سيصارع Internet Explorer في ذلك، ولكن هناك أمل في أن يصل الدعم إلى <a href="http://caniuse.com/transforms3d" rel="external nofollow">الإصدار11 منه</a>. جميع الاصدارات الحديثة من Chrome وSafari وFirefox ستنجح في التعامل مع الإنتقالات.
	</p>

	<p>
		توفر مكتبة <a href="http://modernizr.com/" rel="external nofollow">Modernizr</a> مجموعة من أدوات JavaScript للكشف عن إمكانيات المتصفح ويمكن استخدامها لإظهار محتوى بديل في الحالات التي يتعذر فيها على المتصفح دعم خاصيات CSS معينة. في شيفرة مثالنا، ستجد أننا استفدنا من Modernizr للكشف عن وجود تحوُّلات ثلاثية الأبعاد، في الحالات التي لا وجود لها، تُعرض صورة بدلاً من ذلك.
	</p>

	<h2 id="-">
		التقدُم للأمام
	</h2>

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

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

	<p>
		ترجمة -وبتصرف- للمقال <a href="https://cssanimation.rocks/macplus/" rel="external nofollow">Mac Plus CSS</a> من موقع <a href="https://cssanimation.rocks" rel="external nofollow">cssanimation</a>
	</p>
</div>
]]></description><guid isPermaLink="false">726</guid><pubDate>Wed, 07 Aug 2019 08:47:24 +0000</pubDate></item><item><title>&#x62A;&#x623;&#x62B;&#x64A;&#x631; &#x62A;&#x62F;&#x648;&#x64A;&#x631; CSS &#x631;&#x627;&#x626;&#x639; &#x628;&#x627;&#x633;&#x62A;&#x62E;&#x62F;&#x627;&#x645; &#x62D;&#x631;&#x643;&#x627;&#x62A; Webkit</title><link>https://academy.hsoub.com/programming/css/%D8%AA%D8%A3%D8%AB%D9%8A%D8%B1-%D8%AA%D8%AF%D9%88%D9%8A%D8%B1-css-%D8%B1%D8%A7%D8%A6%D8%B9-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D8%AD%D8%B1%D9%83%D8%A7%D8%AA-webkit-r725/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2019_08/5d4a903573b62_CSS.jpg.6e7e5b8daa5b3f415819c43b2b1be39a.jpg" /></p>

<p>
	يعد WebKit مُحرِّك متصفح ويب (web browser engine) يستخدمه كلٌّ من Safari، و Mail، و App Store، وغيرها من التطبيقات والمتصفحات التي تعمل على macOS، و iOS، ولينكس. ويعرض Webkit صفحات الويب التي تحتوي على تعليمات مكتوبة بِشيفرات Javascript و HTML و XML، ويدير أيضًا تاريخ الصفحات التي تمت زيارتها مؤخرًا.
</p>

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

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

<p style="text-align: center;">
	<img alt="demo.png" class="ipsImage ipsImage_thumbnailed" data-fileid="30953" data-unique="3ov8oph3t" src="https://academy.hsoub.com/uploads/monthly_2019_08/demo.png.8046e24726974988010fd426d28c76d7.png"></p>

<p>
	اضغط <a href="https://line25.com/wp-content/uploads/2010/webkit-flip/demo/index.html" rel="external nofollow">هنا</a> لعرض التجربة الحية.
</p>

<p>
	<em>يُتطلب متصفح Safari لتجريب تأثير انعكاس Webkit المتحرك.</em>
</p>

<p style="text-align: center;">
	<img alt="transition.png" class="ipsImage ipsImage_thumbnailed" data-fileid="30956" data-unique="oikv90i7z" src="https://academy.hsoub.com/uploads/monthly_2019_08/transition.png.deb79083b8602d359b1232c00631917a.png"></p>

<p style="text-align: center;">
	<img alt="flipped.png" class="ipsImage ipsImage_thumbnailed" data-fileid="30954" data-unique="pxh52nevp" src="https://academy.hsoub.com/uploads/monthly_2019_08/flipped.png.43fb7fb48f7b57ed8434bf9c6f5491c1.png"></p>

<p>
	يوضح المثال المذكور كيف يمكن استخدام تأثير التقليب لإظهار البيانات في كلا الوجهين من خلال قلب البطاقة. قم بتمرير مؤشر الفأرة فوق بطاقتي Optimus Prime و Megatron الرابِحتين في الأعلى لمشاهدة النتيجة.
</p>

<p>
	الآن، دعنا نلقي نظرةً على كيفية صنع حركة التقليب هذه.
</p>

<h2 id="-html">
	شيفرة HTML
</h2>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_905_7" style="">
<span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"transformers-rule"</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">"container megatron"</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">"face front"</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">"face 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><span class="pln">
</span><span class="tag">&lt;/div&gt;</span></pre>

<dl></dl>
<p>
	شيفرة HTML بسيطة للغاية، وتتكون بشكل أساسي من مجموعة حاويات
</p>

<div>
	تشكل كل بطاقة.
	<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_905_9" style="">
<span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"face front"</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">"megatron.png"</span><span class="pln"> </span><span class="atn">alt</span><span class="pun">=</span><span class="atv">"Megatron CSS flip effect"</span><span class="pln"> </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">"face back"</span><span class="tag">&gt;</span><span class="pln">
	</span><span class="tag">&lt;h2&gt;</span><span class="pln">Megatron</span><span class="tag">&lt;/h2&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">"decepticons.png"</span><span class="pln"> </span><span class="atn">alt</span><span class="pun">=</span><span class="atv">"Decepticons logo CSS flip effect"</span><span class="pln"> </span><span class="tag">/&gt;</span><span class="pln">
	</span><span class="tag">&lt;p&gt;</span><span class="pln">Megatron is the primary antagonist and leader of the evil Decepticons.</span><span class="tag">&lt;/p&gt;</span><span class="pln">
	
	</span><span class="tag">&lt;dl&gt;</span><span class="pln">
		</span><span class="tag">&lt;dt&gt;</span><span class="pln">Skill</span><span class="tag">&lt;/dt&gt;</span><span class="pln">
		</span><span class="tag">&lt;dd&gt;</span><span class="pln">7</span><span class="tag">&lt;/dd&gt;</span><span class="pln">
		
		</span><span class="tag">&lt;dt&gt;</span><span class="pln">Power</span><span class="tag">&lt;/dt&gt;</span><span class="pln">
		</span><span class="tag">&lt;dd&gt;</span><span class="pln">8</span><span class="tag">&lt;/dd&gt;</span><span class="pln">
		
		</span><span class="tag">&lt;dt&gt;</span><span class="pln">Agility</span><span class="tag">&lt;/dt&gt;</span><span class="pln">
		</span><span class="tag">&lt;dd&gt;</span><span class="pln">5</span><span class="tag">&lt;/dd&gt;</span><span class="pln">
		
		</span><span class="tag">&lt;dt&gt;</span><span class="pln">Bravery</span><span class="tag">&lt;/dt&gt;</span><span class="pln">
		</span><span class="tag">&lt;dd&gt;</span><span class="pln">7</span><span class="tag">&lt;/dd&gt;</span><span class="pln">
		
		</span><span class="tag">&lt;dt&gt;</span><span class="pln">Speed</span><span class="tag">&lt;/dt&gt;</span><span class="pln">
		</span><span class="tag">&lt;dd&gt;</span><span class="pln">4</span><span class="tag">&lt;/dd&gt;</span><span class="pln">
	</span><span class="tag">&lt;/dl&gt;</span><span class="pln">
</span><span class="tag">&lt;/div&gt;</span></pre>

	<p>
		يُقسَّم الوجه الأمامي والخلفي للبطاقات إلى حاويتين فرعيتين ويوضع بداخلهما المحتوى المناسب. يوجد في الوجه الأمامي صورة واحدة، في حين يوضع في الوجه الخلفي المواصفات الكاملة لشخصية البطاقة. نستخدم عدة عناصر ِلوصف موجز الشخصية، فعنصر <code>&lt;h2&gt;</code> يستخدم لإضافة عنوان و <code>&lt;p&gt;</code> لإضافة فقرة و <code>&lt;img&gt;</code> لعرض صورة، ثم تُدرج الأهداف المسجلة للشخصية في قائمة تعريف من خلال عنصر <code>&lt;dl&gt;</code>.
	</p>

	<h2 id="-css">
		شِيفرة CSS
	</h2>

	<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_905_11" style="">
<span class="pun">.</span><span class="pln">megatron </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"> 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">30px</span><span class="pun">;</span><span class="pln"> left</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">megatron </span><span class="pun">.</span><span class="pln">front </span><span class="pun">{</span><span class="pln">
		
	</span><span class="pun">}</span><span class="pln">
	</span><span class="pun">.</span><span class="pln">megatron </span><span class="pun">.</span><span class="pln">back </span><span class="pun">{</span><span class="pln">
		width</span><span class="pun">:</span><span class="pln"> </span><span class="lit">284px</span><span class="pun">;</span><span class="pln"> height</span><span class="pun">:</span><span class="pln"> </span><span class="lit">372px</span><span class="pun">;</span><span class="pln"> padding</span><span class="pun">:</span><span class="pln"> </span><span class="lit">20px</span><span class="pun">;</span><span class="pln">
		background</span><span class="pun">:</span><span class="pln"> </span><span class="com">#a3a3a3 url(texture.png); </span><span class="pln">
	</span><span class="pun">}</span><span class="pln">
		</span><span class="pun">.</span><span class="pln">megatron </span><span class="pun">.</span><span class="pln">back h2 </span><span class="pun">{</span><span class="pln">
			width</span><span class="pun">:</span><span class="pln"> </span><span class="lit">287px</span><span class="pun">;</span><span class="pln"> height</span><span class="pun">:</span><span class="pln"> </span><span class="lit">42px</span><span class="pun">;</span><span class="pln"> margin</span><span class="pun">:</span><span class="pln"> </span><span class="lit">0</span><span class="pln"> </span><span class="kwd">auto</span><span class="pln"> </span><span class="lit">20px</span><span class="pln"> </span><span class="kwd">auto</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">megatron</span><span class="pun">-</span><span class="pln">title</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="pun">.</span><span class="pln">megatron img </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">
		</span><span class="pun">}</span><span class="pln">
		</span><span class="pun">.</span><span class="pln">megatron p </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">185px</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">20px</span><span class="pln"> </span><span class="lit">0</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">17px</span><span class="pun">;</span><span class="pln"> line</span><span class="pun">-</span><span class="pln">height</span><span class="pun">:</span><span class="pln"> </span><span class="lit">28px</span><span class="pun">;</span><span class="pln"> color</span><span class="pun">:</span><span class="pln"> </span><span class="com">#4c4c4c; </span><span class="pln">
		</span><span class="pun">}</span></pre>

	<p>
		تُعطَى خلفية البطاقة أولاً بُنية رمادية متكررة، ثم نبدأ بتصميم عناصر HTML. يُستبدل العنصر &lt;h2&gt; بصورة بنفس نصه مع بعض تأثيرات Photoshop المضافة. يتم تعيين حجم الخط واللون لعناصر الفقرة ثم نُموضعهم جنبًا إلى جنب مع شعارَي Autobots و Decepticons.
	</p>

	<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_905_13" style="">
<span class="pun">.</span><span class="pln">megatron dl </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">30px</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"> bold</span><span class="pun">;</span><span class="pln"> 
	line</span><span class="pun">-</span><span class="pln">height</span><span class="pun">:</span><span class="pln"> </span><span class="lit">40px</span><span class="pun">;</span><span class="pln"> color</span><span class="pun">:</span><span class="pln"> </span><span class="com">#717171;</span><span class="pln">
	width</span><span class="pun">:</span><span class="pln"> </span><span class="lit">264px</span><span class="pun">;</span><span class="pln"> padding</span><span class="pun">:</span><span class="pln"> </span><span class="lit">5px</span><span class="pln"> </span><span class="lit">10px</span><span class="pun">;</span><span class="pln"> overflow</span><span class="pun">:</span><span class="pln"> hidden</span><span class="pun">;</span><span class="pln"> 
	background</span><span class="pun">:</span><span class="pln"> </span><span class="com">#cfcfcf url(gradient.png) repeat-y;</span><span class="pln">
	</span><span class="pun">-</span><span class="pln">webkit</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">1px</span><span class="pln"> </span><span class="lit">5px</span><span class="pln"> </span><span class="com">#888;</span><span class="pln">
	text</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">1px</span><span class="pln"> </span><span class="lit">1px</span><span class="pln"> </span><span class="com">#f5f5f5;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
	</span><span class="pun">.</span><span class="pln">megatron dl dt </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"> clear</span><span class="pun">:</span><span class="pln"> both</span><span class="pun">;</span><span class="pln">
	</span><span class="pun">}</span><span class="pln">
	</span><span class="pun">.</span><span class="pln">megatron dl dd </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">
	</span><span class="pun">}</span></pre>

	<p>
		لِعرض مواصفات الشخصية جنبًا إلى جنب، يوضع عنوان التعريف
	</p>

	<p>
		لجعل كل شيء يعمل على ما يرام؛ نستخدم مجموعة من حركات <code>webkit</code> مع خصائص التقليب في الشيفرة. ابتداءً من الجزء العلوي، يتم إعطاء الحاويات الخاصية <code>‎</code>-webkit-perspective مسندةً للقيمة 1000 لإضافة شيئٍ من الواقعية لحركة التقليب، بينما يبدو كل شيء غير ذلك مسطحًا قليلًا. ثم نضيف الخاصيتين <code>;‎-webkit-transform-style: preserve-3d</code> و <code>;‎-webkit-transition: 0.5s</code> لحاوية البطاقة؛ حيث يضمن نمط التحويل ثلاثي الأبعاد (preserve-3d) ببساطة أن العناصر الفرعية تتبع الحركة ثلاثية الأبعاد بدلًا من أن تبقى مسطحة، وأن قيمة الانتقال البالغة 0.5 ثانية تحدد سرعة التأثير الكلي.
	</p>

	<p>
		 
	</p>

	<dl>
<dt>
			على اليسار ووصف التعريف (dd) يوضع على اليمين. يُعطَى عنصر قائمة التعريف (العنصر
		</dt>
		<dt>
			) خلفية متدرجة وتَصميم نص مناسب، يورَّثان لِلعنصرين <code>&lt;dt&gt;</code> و &lt;dd&gt;.
		</dt>
		<dt>
			<h2>
				الحركة مع webkit
			</h2>

			<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_905_18" style="">
<span class="pun">.</span><span class="pln">container </span><span class="pun">{</span><span class="pln">
	width</span><span class="pun">:</span><span class="pln"> </span><span class="lit">324px</span><span class="pun">;</span><span class="pln"> height</span><span class="pun">:</span><span class="pln"> </span><span class="lit">412px</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">perspective</span><span class="pun">:</span><span class="pln"> </span><span class="lit">1000</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">
	width</span><span class="pun">:</span><span class="pln"> </span><span class="lit">324px</span><span class="pun">;</span><span class="pln"> height</span><span class="pun">:</span><span class="pln"> </span><span class="lit">412px</span><span class="pun">;</span><span class="pln">
	border</span><span class="pun">:</span><span class="pln"> </span><span class="lit">8px</span><span class="pln"> solid </span><span class="com">#fff;	</span><span class="pln">
	</span><span class="pun">-</span><span class="pln">webkit</span><span class="pun">-</span><span class="pln">transform</span><span class="pun">-</span><span class="pln">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">
	</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"> </span><span class="lit">0.5s</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></pre>
		</dt>
	</dl>
<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_905_24" style="">
<span class="pun">.</span><span class="pln">container</span><span class="pun">:</span><span class="pln">hover </span><span class="pun">.</span><span class="pln">card </span><span class="pun">{</span><span class="pln">
	</span><span class="pun">-</span><span class="pln">webkit</span><span class="pun">-</span><span class="pln">transform</span><span class="pun">:</span><span class="pln"> 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">face </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">
</span><span class="pun">-</span><span class="pln">webkit</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">
</span><span class="pun">}</span></pre>

	<p>
		عند تحريك مؤشر الفأرة على البطاقة يضاف تحويل webkit بتدوير <code>(rotateY(180deg</code> قيمته 180deg، والتي تقوم بتدوير الكائن 180 درجة حول المحور Y. الخاصية <code>‎-webkit-backface-visibility: hidden;‎</code> هي خاصية أخرى ممتازة لِ webkit، تُستخدم على وجه كل بطاقة. هذا يضمن أن الجانب الآخر من البطاقة لم يعد مرئيًا، وبدون هذا، سينقلب الكائن إلى صورة معكوسة بدلاً من عرض الجانب الآخر.
	</p>

	<h2 id="-html-">
		شيفرة HTML الكاملة
	</h2>

	<p style="text-align: center;">
		<a class="ipsAttachLink ipsAttachLink_image" data-fileid="30955" href="https://academy.hsoub.com/uploads/monthly_2019_08/html.png.9c5c423a231afbf427b6077762501159.png" rel=""><img alt="html.png" class="ipsImage ipsImage_thumbnailed" data-fileid="30955" data-unique="0wx77833l" src="https://academy.hsoub.com/uploads/monthly_2019_08/html.thumb.png.6d6565de95630f58cf466b4d7a31baaa.png"></a>
	</p>

	<h2 id="-css-">
		شِيفرة CSS الكاملة
	</h2>

	<p style="text-align: center;">
		<a class="ipsAttachLink ipsAttachLink_image" data-fileid="30951" href="https://academy.hsoub.com/uploads/monthly_2019_08/css.png.c2081d3ae3c5e157ec92dbd449eb5f73.png" rel=""><img alt="css.png" class="ipsImage ipsImage_thumbnailed" data-fileid="30951" data-unique="u6mytjj91" src="https://academy.hsoub.com/uploads/monthly_2019_08/css.thumb.png.3388d2e28bf039731a6031d51b99e75c.png"></a>
	</p>

	<p style="text-align: center;">
		<img alt="demo (1).png" class="ipsImage ipsImage_thumbnailed" data-fileid="30952" data-unique="6gxidljns" src="https://academy.hsoub.com/uploads/monthly_2019_08/5d47097c4ebee_demo(1).png.baca6a603c8c29c5e2cf69a7f14b9179.png"></p>

	<p>
		اضغط <a href="https://line25.com/wp-content/uploads/2010/webkit-flip/demo/index.html" rel="external nofollow">هنا</a> لعرض التجربة الحية.
	</p>

	<p>
		ترجمة -وبتصرف- للمقال <a href="https://line25.com/articles/super-cool-css-flip-effect-with-webkit-animation" rel="external nofollow">Super Cool CSS Flip Effect with Webkit Animation </a> من  موقع line25.
	</p>

	<dl></dl>
</div>
]]></description><guid isPermaLink="false">725</guid><pubDate>Mon, 05 Aug 2019 18:01:00 +0000</pubDate></item><item><title>&#x62A;&#x62C;&#x645;&#x64A;&#x639;&#x629; &#x645;&#x646; 10 &#x62A;&#x646;&#x633;&#x64A;&#x642;&#x627;&#x62A; CSS &#x644;&#x623;&#x632;&#x631;&#x627;&#x631; &#xAB;&#x627;&#x644;&#x62F;&#x639;&#x648;&#x629; &#x625;&#x644;&#x649; &#x625;&#x62C;&#x631;&#x627;&#x621;&#xBB; (Call to action)</title><link>https://academy.hsoub.com/programming/css/%D8%AA%D8%AC%D9%85%D9%8A%D8%B9%D8%A9-%D9%85%D9%86-10-%D8%AA%D9%86%D8%B3%D9%8A%D9%82%D8%A7%D8%AA-css-%D9%84%D8%A3%D8%B2%D8%B1%D8%A7%D8%B1-%C2%AB%D8%A7%D9%84%D8%AF%D8%B9%D9%88%D8%A9-%D8%A5%D9%84%D9%89-%D8%A5%D8%AC%D8%B1%D8%A7%D8%A1%C2%BB-call-to-action-r721/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2019_07/5d3ea76b0659c_10CSS.jpg.1f17ad540e11e96603066a1c6f932ac4.jpg" /></p>

<p>
	يجب أن يحتوي كل موقع ويب و <a href="https://academy.hsoub.com/tags/landing%20page%20101/" rel="">صفحة هبوط</a> على زر «دعوة إلى إجراء» (Call to action، ويختصر إلى CTA) واضح. هذا يشجع المستخدِم على النقر على الحدث وتنفيذه، سواء كان ذلك لإجراء عملية شراء، أو بدء تجربة، أو إنشاء حساب.
</p>

<p>
	لا توجد طريقة واحدة مفضلة لتصميم CTA ويمكنك استخدام العديد من الأنماط المختلفة، من التدرجات الكبيرة إلى <a href="https://1stwebdesigner.com/use-ghost-buttons/" rel="external nofollow">الأزرار الطيفية</a>، وكل شيء في الوسط. لكن هناك عوامل أخرى تؤثر أيضًا على سهولة الاستخدام مثل اللون والحجم والموضع. اخترنا في هذا المقال 10 تصاميم CTA ممتازة وكلها مصممة باستخدام CSS خالص. إذا كنت تبحث عن تحفيز لإنشاء تصاميم CTA، يلزمك البحث عن شيء في هذه المجموعة.
</p>

<h2>
	1- الزر العائم Floating Button
</h2>

<p>
	<iframe allowfullscreen="true" allowpaymentrequest="true" allowtransparency="true" class="cp_embed_iframe " frameborder="0" height="450" id="cp_embed_WbdNee" name="cp_embed_1" scrolling="no" src="https://codepen.io/adam2326/embed/preview/WbdNee?height=450&amp;theme-id=0&amp;slug-hash=WbdNee&amp;default-tab=result&amp;user=adam2326&amp;embed-version=2&amp;preview=true&amp;name=cp_embed_1" style="width: 100%; overflow:hidden; display:block;" title="CodePen Embed"></iframe>
</p>

<p>
	إليك أحد أكثر الأساليب الفريدة الغير شائعة على الويب. يمكن أن يصبح هذا الزر العائم عنصرًا أساسيًا لصفحات الهبوط التي تنسجم جيدًا مع التصميم. يستخدم ظل إسقاط CSS3 مع حركات مكررة لإنشاء التأثير العائم. كل هذا يعمل عبر CSS مما يجعل نسخه ونقله لمشروعك أسهل. بالتأكيد، تأثير التحويم (hover) باهت بعض الشيء، إلا أن تصميم الزر الفعلي نفسه عوض هذا البهتان. بالإضافة إلى أنه يمكنك دائمًا توسيع تأثير التحويم ليشمل <a href="https://academy.hsoub.com/programming/css/%D8%AA%D8%A3%D8%AB%D9%8A%D8%B1%D8%A7%D8%AA-%D8%A7%D9%84%D8%A7%D9%86%D8%AA%D9%82%D8%A7%D9%84-%D9%88%D8%A7%D9%84%D8%AD%D8%B1%D9%83%D8%A9-%D9%81%D9%8A-css-r517/" rel="">حركات CSS3 أخرى</a> إذا كنت ترغب في التفكير خارج الصندوق.
</p>

<h2>
	2- زر CTA الأخضر المدوَّر
</h2>

<p>
	<iframe allowfullscreen="true" allowpaymentrequest="true" allowtransparency="true" class="cp_embed_iframe " frameborder="0" height="450" id="cp_embed_oXOyYB" name="cp_embed_2" scrolling="no" src="https://codepen.io/tomhodgins/embed/preview/oXOyYB?height=450&amp;theme-id=0&amp;slug-hash=oXOyYB&amp;default-tab=result&amp;user=tomhodgins&amp;embed-version=2&amp;preview=true&amp;name=cp_embed_2" style="width: 100%; overflow:hidden; display:block;" title="CodePen Embed"></iframe>
</p>

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

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

<h2>
	3- الزر المصمم عبر التصميم الماديّ (Material Button)
</h2>

<p>
	<iframe allowfullscreen="true" allowpaymentrequest="true" allowtransparency="true" class="cp_embed_iframe " frameborder="0" height="450" id="cp_embed_xbojLg" name="cp_embed_3" scrolling="no" src="https://codepen.io/jonbrennecke/embed/preview/xbojLg?height=450&amp;theme-id=0&amp;slug-hash=xbojLg&amp;default-tab=result&amp;user=jonbrennecke&amp;embed-version=2&amp;preview=true&amp;name=cp_embed_3" style="width: 100%; overflow:hidden; display:block;" title="CodePen Embed"></iframe>
</p>

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

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

<h2>
	4- أزرار إجراء الحدث الملونة
</h2>

<p>
	<iframe allowfullscreen="true" allowpaymentrequest="true" allowtransparency="true" class="cp_embed_iframe " frameborder="0" height="450" id="cp_embed_bpKxA" name="cp_embed_4" scrolling="no" src="https://codepen.io/rohan10/embed/preview/bpKxA?height=450&amp;theme-id=0&amp;slug-hash=bpKxA&amp;default-tab=result&amp;user=rohan10&amp;embed-version=2&amp;preview=true&amp;name=cp_embed_4" style="width: 100%; overflow:hidden; display:block;" title="CodePen Embed"></iframe>
</p>

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

<h2>
	5- زر التفاعل الصغير
</h2>

<p>
	<iframe allowfullscreen="true" allowpaymentrequest="true" allowtransparency="true" class="cp_embed_iframe " frameborder="0" height="450" id="cp_embed_VjzjjR" name="cp_embed_5" scrolling="no" src="https://codepen.io/philhoyt/embed/preview/VjzjjR?height=450&amp;theme-id=0&amp;slug-hash=VjzjjR&amp;default-tab=result&amp;user=philhoyt&amp;embed-version=2&amp;preview=true&amp;name=cp_embed_5" style="width: 100%; overflow:hidden; display:block;" title="CodePen Embed"></iframe>
</p>

<p>
	إذا كنت تحب تأثيرات الحركة للأزرار، يمكنك إلقاء نظرة على هذه الأزرار الدقيقة التي صممها Phil Hoyt. فقد استُخدم فيها Font Awesome مع حركات CSS مخصصة لأيقونات الأسهم. عند تحويم الفأرة فوق أي زر، تختفي تسمية الزر وتبرز بدلًا منها أيقونته.
</p>

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

<h2>
	6- الأزرار المحددة
</h2>

<p>
	<iframe allowfullscreen="true" allowpaymentrequest="true" allowtransparency="true" class="cp_embed_iframe " frameborder="0" height="450" id="cp_embed_xOXRKk" name="cp_embed_6" scrolling="no" src="https://codepen.io/bloom-dan/embed/preview/xOXRKk?height=450&amp;theme-id=0&amp;slug-hash=xOXRKk&amp;default-tab=result&amp;user=bloom-dan&amp;embed-version=2&amp;preview=true&amp;name=cp_embed_6" style="width: 100%; overflow:hidden; display:block;" title="CodePen Embed"></iframe>
</p>

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

<p>
	يستخدم كل زر دالة التحويل <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/transform-function/translate" rel="external nofollow">CSS translate</a> مع ألوان مخصصة للخلفية لإنشاء تأثير الحدود. إنها تقنية معقدة إلى حد ما، ولكنها أفضل طريقة لتأثيرات حدود CSS على اعتبار أن حدود CSS العادية لن تعمل بنفس الشكل.
</p>

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

<h2>
	7- أنماط التدرج
</h2>

<p>
	<iframe allowfullscreen="true" allowpaymentrequest="true" allowtransparency="true" class="cp_embed_iframe " frameborder="0" height="450" id="cp_embed_bBoud" name="cp_embed_7" scrolling="no" src="https://codepen.io/tumanova/embed/preview/bBoud?height=450&amp;theme-id=0&amp;slug-hash=bBoud&amp;default-tab=result&amp;user=tumanova&amp;embed-version=2&amp;preview=true&amp;name=cp_embed_7" style="width: 100%; overflow:hidden; display:block;" title="CodePen Embed"></iframe>
</p>

<p>
	لن تتفوق أزرار التدرج الكلاسيكي هذه عن غيرها أبدًا؛ إلا أنها تستخدم بشكل بارز في إطارات العمل الكبيرة مثل Bootstrap. باستخدام هذه الأزرار المتدرجة، يمكنك بسهولة تحديث التحويم والنقر على جميع الحركات مع الحفاظ على تنسيق الألوان. تستخدم أنماط التدريج <a href="https://1stwebdesigner.com/learning-less/" rel="external nofollow">LESS CSS</a> الذي يجعل من الأسهل تغميق الألوان المتدرجة باستخدام النسب المئوية بدلاً من الشيفرات السداسية للألوان (hex codes)
</p>

<p>
	يفضل البعض أزرار التدرج لأنها تتحد مع التصميم. وهذه بالتأكيد ليست الأنماط التدرجية الوحيدة التي ستجدها، لذا راجع موقع <a href="https://codepen.io/tag/gradient%20button/" rel="external nofollow">CodePen gradient button</a> إن كنت تبحث عن المزيد.
</p>

<h3>
	8- YouTube CTA
</h3>

<p>
	<iframe allowfullscreen="true" allowpaymentrequest="true" allowtransparency="true" class="cp_embed_iframe " frameborder="0" height="450" id="cp_embed_YGXoda" name="cp_embed_8" scrolling="no" src="https://codepen.io/CodeBoomer/embed/preview/YGXoda?height=450&amp;theme-id=0&amp;slug-hash=YGXoda&amp;default-tab=result&amp;user=CodeBoomer&amp;embed-version=2&amp;preview=true&amp;name=cp_embed_8" style="width: 100%; overflow:hidden; display:block;" title="CodePen Embed"></iframe>
</p>

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

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

<h2>
	9- الأزرار المطوية للأسفل
</h2>

<p>
	<iframe allowfullscreen="true" allowpaymentrequest="true" allowtransparency="true" class="cp_embed_iframe __web-inspector-hide-shortcut__" frameborder="0" height="450" id="cp_embed_LxprWr" name="cp_embed_9" scrolling="no" src="https://codepen.io/amckinnis/embed/preview/LxprWr?height=450&amp;theme-id=0&amp;slug-hash=LxprWr&amp;default-tab=result&amp;user=amckinnis&amp;embed-version=2&amp;preview=true&amp;name=cp_embed_9" style="width: 100%; overflow:hidden; display:block;" title="CodePen Embed"></iframe>
</p>

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

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

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

<h2>
	10- تحويم CSS الخالص
</h2>

<p>
	<iframe allowfullscreen="true" allowpaymentrequest="true" allowtransparency="true" class="cp_embed_iframe " frameborder="0" height="450" id="cp_embed_pbLGZW" name="cp_embed_10" scrolling="no" src="https://codepen.io/CTNieves/embed/preview/pbLGZW?height=450&amp;theme-id=0&amp;slug-hash=pbLGZW&amp;default-tab=result&amp;user=CTNieves&amp;embed-version=2&amp;preview=true&amp;name=cp_embed_10" style="width: 100%; overflow:hidden; display:block;" title="CodePen Embed"></iframe>
</p>

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

<h2>
	11- CTA النابض
</h2>

<p>
	<iframe allowfullscreen="true" allowpaymentrequest="true" allowtransparency="true" class="cp_embed_iframe " frameborder="0" height="450" id="cp_embed_PPrmxv" name="cp_embed_11" scrolling="no" src="https://codepen.io/whitley40/embed/preview/PPrmxv?height=450&amp;theme-id=0&amp;slug-hash=PPrmxv&amp;default-tab=result&amp;user=whitley40&amp;embed-version=2&amp;preview=true&amp;name=cp_embed_11" style="width: 100%; overflow:hidden; display:block;" title="CodePen Embed"></iframe>
</p>

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

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

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

<p>
	ترجمة -وبتصرف- للمقال <a href="https://1stwebdesigner.com/10-pure-css-call-action-button-sets/" rel="external nofollow">10 Pure CSS Call-To-Action Button Collections</a> لصاحبه Jake Rocheleau
</p>
]]></description><guid isPermaLink="false">721</guid><pubDate>Mon, 29 Jul 2019 07:59:46 +0000</pubDate></item><item><title>&#x646;&#x647;&#x627;&#x64A;&#x629; &#x627;&#x644;&#x631;&#x62D;&#x644;&#x629;</title><link>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/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2019_07/5d1b46d7ac523_.jpg.52e308e2949ca52e135ed85358de906d.jpg" /></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>

<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>
		<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>
		نهاية الرحلة
	</li>
</ul>
<h2 id="-css">
	ملخص التحريك في CSS
</h2>

<p>
	لقد أعددت <a data-fileid="30573" href="https://academy.hsoub.com/applications/core/interface/file/attachment.php?id=30573" rel="">ملخصًا عن الانتقالات والحركات (بصيغة PDF)</a> يلخص خاصياتها. وقد صممته ليناسب صفحة واحدة بحجم A4.
</p>

<h2 id="-">
	أدوات مساعدة لإنشاء الحركات
</h2>

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

<h3 id="-animate-css">
	الإطار Animate.css
</h3>

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

<h3 id="-hover-css">
	الإطار Hover.css
</h3>

<p>
	يعد الإطار <a href="http://ianlunn.github.io/Hover/" rel="external nofollow">Hover.css</a> بديلاً جيدًا عن Animate.css، إذ يوفر مجموعة كبيرة من الحركات الجاهزة لتطبيقها على الروابط أو الأزرار أو الشعارات أو أي عنصر من عناصر <a href="https://wiki.hsoub.com/HTML" rel="external">HTML</a>.
</p>

<h2 id="-">
	أدوات أخرى
</h2>

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

<h3 id="-gsap">
	منصة GSAP
</h3>

<p>
	<a href="http://greensock.com/gsap" rel="external nofollow">منصة GSAP</a> (Greensock Animation)‎ هي طريقة قائمة على <a href="https://wiki.hsoub.com/JavaScript" rel="external">JavaScript</a> لإنشاء حركات متقدمة، وتوفر تحكمًا دقيقًا، وأداءً رائعًا. هذه الأداة تتطلّب بعض الوقت لتعلمها، لكنها مفيدة ونافعة.
</p>

<h3 id="-snabbt-js">
	الإطار Snabbt.js
</h3>

<p>
	الإطار <a href="http://daniel-lundin.github.io/snabbt.js/" rel="external nofollow">Snabbt</a> هو وسيلة قوية وفعّالة لإنشاء حركات معقدة باستخدام <a href="https://wiki.hsoub.com/CSS/timing-function" rel="external">دوال توقيت</a> مخصصة. إذ ينشئ مصفوفات تحويل (transform matrices) ليستخدمها المتصفح في تحريك الحركات، لهذا يتميز بأداء جيد جدًا.
</p>

<h3 id="-css-animate">
	الإطار CSS Animate
</h3>

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

<h3 id="-cubic-bezier-com">
	موقع Cubic-bezier.com
</h3>

<p>
	عندما ترغب في إضفاء الحيوية على <a href="https://wiki.hsoub.com/CSS/timing-function" rel="external">دوال التوقيت</a>، فإنّ موقع <a href="Cubic-bezier.com" rel="">Cubic-bezier.com</a> هو الأداة الأفضل لذلك. إذ يساعد على تخصيص <a href="https://wiki.hsoub.com/CSS/timing-function" rel="external">دوال التوقيت</a>. وقد تم تصميم أداة مشابهة في أدوات المطور في المتصفح Chrome.
</p>

<h2 id="-">
	ماذا بعد؟!
</h2>

<p>
	السؤال الذي قد يساورك الآن هو: «ماذا أفعل للانتقال إلى مستوى متقدم في مجال التحريك؟»
</p>

<p>
	اقتراحي لك هو البحث عن التحديات. ابحث عن الإلهام في مواقع مثل <a href="Dribbble.com" rel="">Dribbble.com</a> أو <a href="CodePen.io" rel="">CodePen.io</a>. استوحي الأفكار من المنتجات الشهيرة (كثيرًا ما أعيد تصميم تصميمات Apple) أو الأفلام أو البرامج التلفزيونية. هل يمكن محاكاتها والاستفادة منها في تصميم المواقع؟ هل ستكون لغة <a href="https://wiki.hsoub.com/CSS" rel="external">CSS</a> هي الطريقة الأنسب للقيام بذلك؟ اسأل نفسك وابحث عن الإجابات بحثًا دقيقًا، فالبحث هو عماد التَعلُّم.
</p>

<p>
	توفر أيضًا <a href="https://academy.hsoub.com/programming/css/" rel="">أكاديمية حسوب</a> الكثير من المحتوى حول مختلف تقنيات <a href="https://wiki.hsoub.com/CSS" rel="external">CSS</a>، بما فيها تقنيات التحريك. جمعت لك جميع الدروس التطبيقية المتعلقة بالحركات وإنشائها تجدها في <a href="https://academy.hsoub.com/programming/css/%D8%A7%D9%84%D9%85%D8%B1%D8%AC%D8%B9-%D8%A7%D9%84%D8%B4%D8%A7%D9%85%D9%84-%D8%A5%D9%84%D9%89-%D8%A7%D9%84%D8%AA%D8%AD%D8%B1%D9%8A%D9%83-%D8%B9%D8%A8%D8%B1-css-r692/" rel="">هذا المقال الشامل</a> الذي يتحدث عن التحريك في CSS يزودك بجميع المقالات والدروس النظرية والتطبيقية المتوافرة في الأكاديمية.
</p>

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

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

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

<ul>
<li>
		ترجمة وبتصرف للفصل now you know css animation من كتاب <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="%D8%B1%D8%A7%D8%A8%D8%B7%20%D8%A7%D9%84%D9%85%D9%82%D8%A7%D9%84" rel="">قابلية الوصول</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D8%A7%D9%84%D9%85%D8%B1%D8%AC%D8%B9-%D8%A7%D9%84%D8%B4%D8%A7%D9%85%D9%84-%D8%A5%D9%84%D9%89-%D8%A7%D9%84%D8%AA%D8%AD%D8%B1%D9%8A%D9%83-%D8%B9%D8%A8%D8%B1-css-r692/" rel="">المرجع الشامل إلى التحريك عبر CSS</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">707</guid><pubDate>Wed, 24 Jul 2019 13:00:00 +0000</pubDate></item><item><title>&#x633;&#x647;&#x648;&#x644;&#x629; &#x627;&#x644;&#x648;&#x635;&#x648;&#x644;</title><link>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/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2019_07/5d1b11c96c914_.jpg.422304260605dde68234b4c36463bc77.jpg" /></p>

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

<p>
	هناك العديد من الطرق التي يمكن أن تساعد بها الحركات في عرض المحتوى، لكنها قد تكون مصدر إزعاج ومشاكل في بعض الأحيان.
</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>
		<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>
		سهولة الوصول
	</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/JavaScript" rel="external">JavaScript</a> دائمًا (أي لا تكون مفعَّلة على جميع المتصفحات). يمكننا استخدام أدوات مثل <a href="http://modernizr.com/" rel="external nofollow">Modernizr </a> لتجاوز مثل هذه المشكلات.
</p>

<p>
	نستخدم الحركات لإضفاء معانِي معيّنة على تصميماتنا. عند تصميم الحركات، ضع في حساباتك أنّ بعض الأشخاص لن يتمكنوا من رؤيتها. فربما يستخدمون قارئ الشاشة (screen reader)، أو أنَّ إعدادات متصفحاتهم تمنع عمل الحركات بالشكل المطلوب. تأكد من توفر المعلومات المهمة حتى في حال لم تعمل الحركة.
</p>

<p>
	كما أنّ <a href="http://www.punkchip.com/autoplay-is-bad-for-all-users/" rel="external nofollow">التشغيل الفيديو تلقائيًّا قد يكون مصدر إزعاج لبعض المستخدمين</a>، ويمكن أن تؤدي الحركات التي تعمل تلقائيًا إلى تشتيت الانتباه عن بعض محتويات الصفحة. حاول حصر استخدام الحركات في المواقف التي تريد من زوّاك أن يركِّزوا على محتوى معين. قد يعني هذا أيضًا تحديد المدة التي تستغرقها الحركة، أو التأكد من توقفها حتى يركِّز الزائر على محتويات أخرى.
</p>

<h2 id="-">
	إتاحة التحكم
</h2>

<p>
	<a href="http://www.w3.org/TR/2008/REC-WCAG20-20081211/#time-limits-pause" rel="external nofollow">توصي منظمة W3C</a> بأن يكون لأي محتوى يومض (blinking)، أو يُمرَّر، أو يُحدَّث تلقائيًا لمدة تزيد عن 5 ثوانٍ وسيلة لإيقاف الحركة مؤقتًا، أو إزالتها. يُعد استخدام الخاصية <a href="https://wiki.hsoub.com/CSS/animation-play-state" rel="external">animation-play-stat</a> إحدى طرق إيقاف الحركة عند الحاجة، كما هو <a href="http://codepen.io/donovanh/pen/LEwedW" rel="external nofollow">موضح هنا عند التمرير</a>.
</p>

<h2 id="-">
	إتاحة مدخلات بديلة
</h2>

<p>
	يستخدم نسبة كبيرة من زوار موقعك الهواتف التي لا تحوي مؤشر (فأرة)، ولا توجد بها حالة حومان (hover state)، لذا من المهم أخذ هذا في الحسبان عند التصميم. أحد الخيارات التي أستخدمها غالبًا هو رصد النقرة (tap) وإضافة الصنف "active" إلى العنصر المنقور. بعد ذلك أُضيف الانتقالات أو الحركات إلى الحالات '‎:hover' و '‎.active'.
</p>

<h2 id="-">
	الارتباك
</h2>

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

<h2 id="-">
	لا تزعجني
</h2>

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

<p>
	عندما قدمت Apple نظام التشغيل iOS7، وهو نظام تشغيل مُحدَّث لهواتفها، أدخلت فيه الكثير من الحركات. <a href="http://reverttosaved.com/2013/09/28/why-ios-7-is-making-some-users-sick/" rel="external nofollow">بعضها كان مزعجًا</a>. وقد كافح بعض الأشخاص، مثلي، للقراءة في السيارة أو الحافلة، لأنّ الحركة كانت مربكة، وآخرون عجزوا عن لعب ألعاب فيديو معينة لأكثر من بضع دقائق.
</p>

<p>
	سبب حدوث ذلك يرجع إلى الطريقة التي يعمل بها <a href="https://www.youtube.com/watch?v=dSHnGO9qGsE" rel="external nofollow">نظامنا الدهليزي</a>. لدينا 3 أنابيب في آذاننا تساعدنا على تحديد مكان رأسنا في الفضاء ثلاثي الأبعاد. من الممكن أن نخدع عقولنا ونوهمها بأننا نتحرك، بيْد أنّ المشكلة هي أنه عندما لا يحسّ النظام الدهليزي بتلك الحركة، وسنشعر آنذاك بالدوار والارتباك.
</p>

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

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

<p>
	يُعد موقع <a href="http://vestibular.org/understanding-vestibular-disorder" rel="external nofollow">Vestibular.org</a> نقطة انطلاق ممتازة للتعمق أكثر في هذا الموضوع.
</p>

<h2 id="-">
	تسهيل الوصول للجميع
</h2>

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

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

<p>
	إذا كانت وظيفتك تتضمن تصميم أو بناء واجهات لاستخدامها من قِبل الناس، فخصص بعض الوقت لقراءة <a href="http://www.nngroup.com/articles/animation-usability/" rel="external nofollow">NNGroup’s Animation for Attention and Comprehension</a>. فكر في الكيفية التي قد يستخدم بها الناس موقعك، وما المشاكل التي قد يواجهونها إذا لم يتمكنوا من رؤية الحركات.
</p>

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

<ul>
<li>
		ترجمة وبتصرف للفصل accessibility من كتاب <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%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>
	<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/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">706</guid><pubDate>Sat, 20 Jul 2019 18:00:00 +0000</pubDate></item><item><title>&#x625;&#x638;&#x647;&#x627;&#x631; &#x627;&#x644;&#x645;&#x62D;&#x62A;&#x648;&#x649; &#x623;&#x62B;&#x646;&#x627;&#x621; &#x627;&#x644;&#x62A;&#x645;&#x631;&#x64A;&#x631;</title><link>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/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2019_07/5d1b0608ee83c_.jpg.7761081fe0d85711e4af50255e19586a.jpg" /></p>

<p>
	من الاستخدامات الشائعة للحركات تحريك العناصر عند تمرير (scrolling) لأسفل الصفحة، لذلك سنتعلم في هذه المقالة كيفية القيام بذلك.
</p>

<p>
	إليك <a href="http://codepen.io/donovanh/pen/gbVMjm" rel="external nofollow">المثال التوضيحي</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>
		<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>
		إظهار المحتوى أثناء التمرير
	</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="-wow-js">
	الإطار Wow.js
</h2>

<p>
	تعرض العديد من المواقع حركات مخصصة عند تمرير الصفحة إلى نقاط معينة. يمكن أن تبدأ بتشغيل مقطع فيديو، أو تشغيل <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> معقدة، أو جعل بعض العناصر تظهر بالتدريج للفت الانتباه إليها.
</p>

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

<p>
	هناك العديد من خيارات <a href="https://wiki.hsoub.com/JavaScript" rel="external">JavaScript</a> التي يمكن أن تضيف أصنافًا، وأحد أفضل هذه الخيارات الإطار <a href="http://mynameismatthieu.com/WOW/" rel="external nofollow">Wow.js</a>. سنستخدمه لإنشاء مثال بسيط يظهر فيه المحتوى تدريجيًا أثناء التمرير.
</p>

<p style="text-align: center;">
	<img alt="scroll-min.gif" class="ipsImage ipsImage_thumbnailed" data-fileid="30567" data-unique="cpsz4euvm" src="https://academy.hsoub.com/uploads/monthly_2019_07/scroll-min.gif.2709130a703e6ea6d2b7c52c95c4c637.gif"></p>

<h3 id="-wow-js">
	استخدام Wow.js
</h3>

<p>
	استخدام Wow.js يستلزم خطوتين. الخطوة الأولى هي <a href="https://raw.githubusercontent.com/matthieua/WOW/master/dist/wow.min.js" rel="external nofollow">تنزيل إضافة JavaScript</a>. ضع الملف <code>wow.min.js</code> بعد تنزيله في مجلد JavaScript الخاص بالمشروع. الخطوة التالية هي الإشارة إلى هذا الملف من داخل شيفرة HTML:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_1751_7" style="">
<span class="tag">&lt;script</span><span class="pln"> </span><span class="atn">src</span><span class="pun">=</span><span class="atv">"javascripts/wow.min.js"</span><span class="tag">&gt;&lt;/script&gt;</span></pre>

<p>
	(بافتراض أن المجلد يسمى <code>javascripts</code> - غيّره إلى الاسم المناسب)
</p>

<p>
	بعد ذلك، سنستدعي <a href="https://wiki.hsoub.com/JavaScript" rel="external">JavaScript</a> باستخدام هذه التعليمة (الصقها بعد الشيفرة السابقة):
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_1751_9" style="">
<span class="tag">&lt;script&gt;</span><span class="pln">
 </span><span class="kwd">new</span><span class="pln"> WOW</span><span class="pun">().</span><span class="pln">init</span><span class="pun">();</span><span class="pln">
</span><span class="tag">&lt;/script&gt;</span></pre>

<p>
	يمكننا الآن إضافة الصنف "wow" إلى المحتوى، وسوف يكتفل الإطار Wow.js بتحديد ما إذا أصبح المحتوى مرئيًّا على النافذة أم لا لإظهاره بحركة لافتة.
</p>

<h3 id="-wow-">
	إضافة أصناف "wow"
</h3>

<p>
	إن أردت تحريك عنصر معيّن عند التمرير، فأضف إليه الصنفَ <code>wow</code>:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_1751_11" style="">
<span class="tag">&lt;p</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"wow"</span><span class="tag">&gt;</span><span class="pln">...</span><span class="tag">&lt;/p&gt;</span></pre>

<p>
	هذا يعني أنه عندما يظهر العنصر في نافذة المتصفح أثناء التمرير للأسف ويصبح مرئيًّا، تضيف Wow.js الصنّف <code>animated</code> إلى المحتوى على النحو التالي:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_1751_13" style="">
<span class="tag">&lt;p</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"wow animated"</span><span class="tag">&gt;</span><span class="pln">...</span><span class="tag">&lt;/p&gt;</span></pre>

<p>
	إن أضفنا حركة مخصصة على العناصر <code>p.animated</code> (أي العناصر <code>p</code> ذات الصنف <code>animated</code>)، فلن تعمل الحركة إلا عند إضافة هذا الصنف.
</p>

<h2 id="-">
	الإخفاء والعرض
</h2>

<p>
	في مثالنا، سنخفي جميع العناصر ذات الصنف <code>wow</code>، وسنعرضها عندما يُضاف لها الصنف <code>animated</code>. أولاً، سنخفيها عبر الشيفرة التالية:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_1751_15" style="">
<span class="pun">.</span><span class="pln">wow </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">
  transition</span><span class="pun">:</span><span class="pln"> all </span><span class="lit">0.5s</span><span class="pln"> </span><span class="lit">0.5s</span><span class="pln"> ease</span><span class="pun">-</span><span class="kwd">out</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></pre>

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

<p>
	تحدد الشيفرة التالية كيف سيبدو العنصر عندما يُضاف إليه الصنف <code>animated</code>:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_1751_17" style="">
<span class="pun">.</span><span class="pln">animated </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">
</span><span class="pun">}</span></pre>

<p>
	صارت العناصر الآن تظهر ظهورًا تدريجيًّا في أثناء تمرير المستخدم الصفحة إلى الأسفل. <a href="http://codepen.io/donovanh/pen/gbVMjm" rel="external nofollow">شاهد ذلك في المثال الحي</a>.
</p>

<h2 id="-animate-css">
	استخدام Animate.css
</h2>

<p>
	صُمِّم الإطار Wow.js ليتكامل مع إطار العمل <a href="http://daneden.github.io/animate.css/" rel="external nofollow">Animate.css</a>. لم أستخدمه في المثال حتى الآن لأني أفضِّل أن تفهم كيفية إنشاء الانتقالات بنفسك، لكن هناك بعض الانتقالات الممتازة الجاهزة التي يرفرها لنا الإطار Animate.css.
</p>

<p>
	في <a href="http://codepen.io/donovanh/pen/xbvOQK" rel="external nofollow">هذا المثال</a>، استعملت Animate.css. لاحظ أنَّه لا توجد أيَّة حركات أو انتقالات في شيفرة <a href="https://wiki.hsoub.com/CSS" rel="external">CSS</a>. بدلاً من ذلك، أضفت صنفًا إلى شيفرة <a href="https://wiki.hsoub.com/HTML" rel="external">HTML</a> لإخبار Animate.css بالحركة الواجب تطبيقها:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_1751_19" style="">
<span class="tag">&lt;section</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"image wow bounceInUp"</span><span class="tag">&gt;</span></pre>

<p>
	يشير الصنف <code>bounceInUp</code> إلى أحد الحركات المضمّنة في Animate.css. إن اخترت "cog" في قسم <a href="https://wiki.hsoub.com/CSS" rel="external">CSS</a> في المثال، فسترى أنني أشرت إلى إطار العمل Animate.css ضمن ملفات <a href="https://wiki.hsoub.com/CSS" rel="external">CSS</a> الخارجية.
</p>

<h2 id="-modernizr">
	استخدام Modernizr
</h2>

<p>
	من الجيد عمومًا الاحتياط من المواقف التي نخفي فيها المحتوى ثمَّ نظهره باستخدام <a href="https://wiki.hsoub.com/JavaScript" rel="external">JavaScript</a>. فبعض المستخدمين لا يشغّلون <a href="https://wiki.hsoub.com/JavaScript" rel="external">JavaScript</a> لسبب أو لآخر. يمكن استخدام سكربت مثل <a href="http://modernizr.com/" rel="external nofollow">Modernizr</a> للتعامل مع هذه المشكلة. سيضيف صنفًا <code>js</code> إلى جسم الصفحة (body)، ويُمكننا بعد ذلك استخدامه في تنسيقاتنا.
</p>

<p>
	لقد أضفت Modernizr في <a href="http://codepen.io/donovanh/pen/gbVMjm" rel="external nofollow">هذا المثال</a> فاطلع عليه بتفحُّص.
</p>

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

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

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

<ul>
<li>
		ترجمة وبتصرف للفصل revealing content on scroll من كتاب <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%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/%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/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">705</guid><pubDate>Wed, 17 Jul 2019 13:06:00 +0000</pubDate></item><item><title>&#x62D;&#x631;&#x628; &#x627;&#x644;&#x646;&#x62C;&#x648;&#x645; (Star War)</title><link>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/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2019_07/5d1afbb9c4cfe_.jpg.090802c63ceec7139580454986a5b697.jpg" /></p>

<p>
	سنطبق ما تعلّمناه في المقالات السابقة، وسنصنع تحريكًا متجِهيًّا (SVG) مرحًا. سنبني عنوان فيلم حرب النجوم من إعلان "The Force Awakens".
</p>

<figure style="text-align: center;"><img alt="starwars-min.gif" class="ipsImage ipsImage_thumbnailed" data-fileid="30563" data-unique="8wor0jl2k" src="https://academy.hsoub.com/uploads/monthly_2019_07/starwars-min.gif.39b55edab412d084465fcd69df210382.gif"><figcaption>
		المصدر: <a href="https://www.youtube.com/watch?v=ngElkyQ6Rhs" rel="external nofollow">https://www.youtube.com/watch?v=ngElkyQ6Rhs</a>
	</figcaption></figure><p>
	يجمع هذا المثال بين التحريك وبين بعض خاصيات <a href="https://wiki.hsoub.com/CSS" rel="external">CSS</a> الأخرى، خصوصًا الخاصية <a href="https://wiki.hsoub.com/CSS/transform" rel="external"><code>transform</code></a> ودوال تحويلها <code>scale</code> و <code>translate</code> و <code>rotate</code>.
</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>: هذه المقالة جزء من سلسلة من المقالات <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>
		<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>
		حرب النجوم
	</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="-transform-">
	<code>transform</code>: ليست من خاصيات الحركات
</h2>

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

<h2 id="-transform-scale-translatez-rotatey-">
	الخاصية <code>transform</code> ودوالها‏ <code>scale()‎</code> و <code>translateZ()‎</code> و <code>rotateY()‎</code>
</h2>

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

<p>
	في هذا المثال، سنستخدم <code>scale</code> و <code>translateZ</code> معًا لخلق شعور بأنّ الكلمات تطير في الفضاء. بعد ذلك، سنستخدم <code>rotateY</code> لتدوير أحرف سطر الوصف. سيتطلب الدوران حول المحور Y قيام المتصفح بالرسم ثلاثي الأبعاد.
</p>

<h2 id="svg-html-css">
	SVG و HTML و CSS
</h2>

<p>
	استعدادًا لهذا المثال، قمت بإنشاء ملفين من النوع <a href="https://academy.hsoub.com/design/illustration/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%A5%D9%86%D8%B4%D8%A7%D8%A1-%D8%A3%D8%B4%D9%83%D8%A7%D9%84-%D8%A8%D8%B3%D9%8A%D8%B7%D8%A9-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-svg-r382/" rel="">SVG</a> لأجل الجزئين <a href="https://cssanimation.rocks/demo/starwars/images/star.svg" rel="external nofollow">Star</a> و <a href="https://cssanimation.rocks/demo/starwars/images/wars.svg" rel="external nofollow">Wars</a> من الشعار. لا تتردد في تحميلهما واستخدامهما.
</p>

<p>
	إليك شيفرة <a href="https://wiki.hsoub.com/HTML" rel="external">HTML</a> الخاصة بالمثال:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_582_6" style="">
<span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"starwars-demo"</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">"//cssanimation.rocks/demo/starwars/images/star.svg"</span><span class="pln"> </span><span class="atn">alt</span><span class="pun">=</span><span class="atv">"Star"</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"star"</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">"//cssanimation.rocks/demo/starwars/images/wars.svg"</span><span class="pln"> </span><span class="atn">alt</span><span class="pun">=</span><span class="atv">"Wars"</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"wars"</span><span class="tag">&gt;</span><span class="pln">
  </span><span class="tag">&lt;h2</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"byline"</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"byline"</span><span class="tag">&gt;</span><span class="pln">The Force Awakens</span><span class="tag">&lt;/h2&gt;</span><span class="pln">
</span><span class="tag">&lt;/div&gt;</span></pre>

<p>
	لقد استخدمنا <a href="https://cssanimation.rocks/demo/starwars/images/bg.jpg" rel="external nofollow">صورة ثابتة للنجوم</a> في الخلفية. لم أتمكن من العثور على الخط الذي استُخدِم في الإعلان الأصلي، لذلك استخدمت الخط "Lato". استخدمت التموضع المطلق (absolute positioning) لوضع المحتوى في منتصف الشاشة. سنحصل في البداية على الصورة التالية:
</p>

<p style="text-align: center;">
	<img alt="starwars.png" class="ipsImage ipsImage_thumbnailed" data-fileid="30564" data-unique="e5yiigzfy" src="https://academy.hsoub.com/uploads/monthly_2019_07/starwars.png.a1a19ea9dd1470f8e4d6266c8ebada01.png"></p>

<h2 id="-star-wars">
	تحريك الكلمتين Star و Wars
</h2>

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

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_582_8" style="">
<span class="lit">@keyframes</span><span class="pln"> star </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">
    opacity</span><span class="pun">:</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">1.5</span><span class="pun">)</span><span class="pln"> translateY</span><span class="pun">(-</span><span class="lit">0.75em</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">
    opacity</span><span class="pun">:</span><span class="pln"> </span><span class="lit">1</span><span class="pun">;</span><span class="pln">

  </span><span class="lit">89</span><span class="pun">%</span><span class="pln"> </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"> scale</span><span class="pun">(</span><span class="lit">1</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">
    opacity</span><span class="pun">:</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"> translateZ</span><span class="pun">(-</span><span class="lit">1000em</span><span class="pun">);</span><span class="pln">

</span><span class="pun">}</span></pre>

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

<p>
	يبدأ التحويل عن طريق تحديد الحجم عند القيمة <code>1.5</code>. هذا يعني أنّ الحجم الأولي للنص سيكون أكبر بنسبة 150٪ من الحجم العادي. عند النقطة 89٪، سنعيّن الخاصية <a href="https://wiki.hsoub.com/CSS/transform" rel="external"><code>transform</code></a> عند القيمة scale(1)<code>‎</code>. هذا يعني أنه بين اللحظتين 0٪ و 89٪، سينتقل الحجم من 150٪ إلى 100٪.
</p>

<p>
	التحويل <code>transformZ</code> الأخير يؤدي إلى تكبير الكلمتين بسرعة.
</p>

<p>
	بشكل مماثل، يمكننا تطبيق <a href="https://wiki.hsoub.com/CSS/@keyframes" rel="external">الإطارات المفتاحية</a> على الكلمة "Star":
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_582_10" style="">
<span class="pun">.</span><span class="pln">star </span><span class="pun">{</span><span class="pln">
  animation</span><span class="pun">:</span><span class="pln"> star </span><span class="lit">10s</span><span class="pln"> ease</span><span class="pun">-</span><span class="kwd">out</span><span class="pln"> infinite</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	تم استخدام مجموعة مماثلة من <a href="https://wiki.hsoub.com/CSS/@keyframes" rel="external">الإطارات المفتاحية</a> مع الكلمة "Wars".
</p>

<h2 id="-">
	لنجعلها ثلاثية الأبعاد
</h2>

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

<p>
	يمكننا فعل ذلك عن طريق إضافة الشيفرة التالية إلى العنصر <a href="https://wiki.hsoub.com/HTML/div" rel="external">div</a> ذي الصنف <code>‎</code>.starwars-demo:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_582_14" style="">
<span class="pun">.</span><span class="pln">starwars</span><span class="pun">-</span><span class="pln">demo </span><span class="pun">{</span><span class="pln">
  perspective</span><span class="pun">:</span><span class="pln"> </span><span class="lit">800px</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"> preserve3d</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	تخبر هاتان الخاصيتان المتصفحَ بأنّ أبناء الحاوية (container`s children) ينبغي أن يتموضعوا وفق شكل ثلاثي الأبعاد، بدلًا من وضعهم في مستوى مسطح. يمكنك أن تجد المزيد من التفاصيل عن هذه الخاصية في موقع <a href="https://css-tricks.com/almanac/properties/t/transform-style/" rel="external nofollow">CSS Tricks</a>.
</p>

<p>
	ثانياً، تخبر الخاصية <a href="https://wiki.hsoub.com/CSS/perspective" rel="external"><code>persective</code></a> المتصفحَ بمدى «عمق» المشهد. في هذا المثال، جعلناها تساوي <code>800px</code>. تخلق القيم الأصغر تأثيرات «متطرفة» لأنّ المشهد سيكون أقصر.
</p>

<p>
	سننسق الآن سطر الوصف.
</p>

<h2 id="-the-force-awakens-">
	تحريك الشعار "The Force Awakens"
</h2>

<p>
	تدور أحرف الشعار "The Force Awakens" في مكانها. يمكننا خلق هذا التأثير باستخدام التحويل <code>rotateY</code>. في هذا المثال، قمنا بوضع كل حرف داخل عنصر من النوع <a href="https://wiki.hsoub.com/HTML/span" rel="external"><code>span</code></a> حتى نتمكن من تطبيق التحريك على كل حرف على حدة.
</p>

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

<p>
	سنُطبِّق التحريك على كل حرف على حدة.
</p>

<p>
	أولًا، <a href="https://wiki.hsoub.com/CSS/@keyframes" rel="external">الإطارات المفتاحية</a>:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_582_16" style="">
<span class="lit">@keyframes</span><span class="pln"> spin</span><span class="pun">-</span><span class="pln">letters </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">10</span><span class="pun">%</span><span class="pln"> </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">
    transform</span><span class="pun">:</span><span class="pln"> rotateY</span><span class="pun">(</span><span class="lit">90deg</span><span class="pun">);</span><span class="pln">

  </span><span class="lit">30</span><span class="pun">%</span><span class="pln"> </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">

  </span><span class="lit">70</span><span class="pun">%,</span><span class="pln"> </span><span class="lit">86</span><span class="pun">%</span><span class="pln"> </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">0</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">

  </span><span class="lit">95</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">
    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>
	في البداية، تكون الحروف مُدوّرة بزاوية 90 درجة، ثم بزاوية 70٪ خلال التحريك، إذ يتم تحريكها لمواجهة المشاهد.
</p>

<p>
	يمكننا تطبيق مجموعة <a href="https://wiki.hsoub.com/CSS/@keyframes" rel="external">الإطارات المفتاحية</a> هذه على كل عناصر <a href="https://wiki.hsoub.com/HTML/span" rel="external"><code>span</code></a> على النحو التالي:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_582_20" style="">
<span class="pun">.</span><span class="pln">byline span </span><span class="pun">{</span><span class="pln">
  animation</span><span class="pun">:</span><span class="pln"> spin</span><span class="pun">-</span><span class="pln">letters </span><span class="lit">10s</span><span class="pln"> linear infinite</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"><code>span</code></a> التي تحتوي الحروف سوف تظهر تدريجيًا وتدور ببطء في مكانها، قبل أن تتلاشى في نهاية التحريك.
</p>

<p>
	بجمع كل ذلك معًا، سنحصل على المشهد التالي:
</p>

<figure style="text-align: center;"><img alt="css-starwars-min.gif" class="ipsImage ipsImage_thumbnailed" data-fileid="30562" data-unique="jjtd2cun3" src="https://academy.hsoub.com/uploads/monthly_2019_07/css-starwars-min.gif.28bf21bae6a37d383735c5f697d56d4b.gif"><figcaption>
		المصدر: <a href="http://codepen.io/donovanh/pen/pJzwEw?editors=110" rel="external nofollow">http://codepen.io/donovanh/pen/pJzwEw?editors=110</a>
	</figcaption></figure><h2 id="-">
	تمرين
</h2>

<p>
	إذا كان لديك الوقت، أشجعك على إلقاء نظرة على قسم CSS في <a href="http://codepen.io/donovanh/pen/pJzwEw?editors=110" rel="external nofollow">نسخة CodePen</a>.
</p>

<p>
	قد تلاحظ وجود بعض استعلامات الوسائط <a href="https://wiki.hsoub.com/CSS/@media" rel="external">media</a> في CSS. نستخدم هذه الاستعلامات لتحجيم المثال في الأجهزة الصغيرة. حاول تغيير بعض إطارات التحريك المفتاحية، أو قيم الخاصية <a href="https://wiki.hsoub.com/CSS/transform" rel="external">transform</a> لمعرفة ما سيحدث.
</p>

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

<ul>
<li>
		ترجمة وبتصرف للفصل star wars من كتاب <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%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%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/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">704</guid><pubDate>Sat, 13 Jul 2019 18:04:00 +0000</pubDate></item><item><title>&#x631;&#x648;&#x627;&#x64A;&#x629; &#x627;&#x644;&#x642;&#x635;&#x635; &#x639;&#x628;&#x631; &#x627;&#x644;&#x62D;&#x631;&#x643;&#x627;&#x62A;</title><link>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/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2019_06/5d0f7ef74b49e_.jpg.d8019f3431e411d0f80279c63e14eb63.jpg" /></p>

<p>
	تحدثنا في المقالات الماضية عن الخاصيتين <a href="https://wiki.hsoub.com/CSS/transition" rel="external"><code>transition</code></a> و <a href="https://wiki.hsoub.com/CSS/animation" rel="external"><code>animation</code></a>. سندمجها مع هذه المقالة في عملية التحريك لخلق تأثير التحويم (hover effect).
</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>
		<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>
		رواية القصص عبر الحركات
	</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>
	تُفضّل العديد من المواقع عرض صورة كبيرة تجذب الانتباه في أعلى الصفحة الرئيسية. تسمى أحيانًا الصورة الرئيسية، أو الصورة البطلة (hero image)، وعادةً ما تسع كاملَ عرض الصفحة.
</p>

<p>
	من الأمثلة الجيدة التي وجدتها مؤخرًا هي صفحة الهبوط الخاصة بموقع إطار العمل Fabric، إذ توضِّح عبر حركة بسيطة في <a href="https://wiki.hsoub.com/CSS" rel="external">CSS</a> وظيفة Fabric كإطار عمل تركيبي (modular).
</p>

<figure style="text-align: center;"><img alt="fabric-min.gif" class="ipsImage ipsImage_thumbnailed" data-fileid="30326" data-unique="6exumok00" src="https://academy.hsoub.com/uploads/monthly_2019_06/fabric-min.gif.a2abcfbf2afbc1063824b407ed933e78.gif"><figcaption>
		المصدر: <a href="https://get.fabric.io/" rel="external nofollow">https://get.fabric.io/</a> 
	</figcaption></figure><p>
	مثال آخر جيد نجده في الصفحة الرئيسية لموقع Mailchimp إذ تحكي الصورة الرئيسية قصةً توضح كيفية إنشاء رسائل البريد الإلكتروني.
</p>

<figure style="text-align: center;"><img alt="mailchimp-min.gif" class="ipsImage ipsImage_thumbnailed" data-fileid="30327" data-unique="yjyy9ojpo" src="https://academy.hsoub.com/uploads/monthly_2019_06/mailchimp-min.gif.e01876ae4d09647b08d65f2f82b284c3.gif"><figcaption>
		المصدر: <a href="http://mailchimp.com" rel="external nofollow">http://mailchimp.com</a> 
	</figcaption></figure><p>
	نجد في هذين المثالين وغيرهما من الأمثلة أنَّه جرى استخدام الحركات لتمثيل خدمات الموقع ببساطة.
</p>

<h2 id="-">
	مثال: تمرير الخلفية
</h2>

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

<figure style="text-align: center;"><img alt="screen-min.gif" class="ipsImage ipsImage_thumbnailed" data-fileid="30329" data-unique="r01unppry" src="https://academy.hsoub.com/uploads/monthly_2019_06/screen-min.gif.bdb3f8a4bf435a88529945ff9eee19e0.gif"><figcaption>
		المصدر: <a href="http://codepen.io/donovanh/pen/LEwedW?editors=110" rel="external nofollow">http://codepen.io/donovanh/pen/LEwedW?editors=110</a> 
	</figcaption></figure><p>
	لإضفاء طابع التفاعلية، تتوقف الحركة مؤقتًا، وتظهر رسالة عندما يحوم مؤشر الفأرة فوق الشاشة. وقد قمت باستخدام كل من الحركات والانتقالات لتحقيق هذا التأثير.
</p>

<p>
	يمكنك الاطلاع على هذا المثال من <a href="http://codepen.io/donovanh/pen/LEwedW?editors=110" rel="external nofollow">هنا</a>.
</p>

<h3 id="-1-">
	الجزء 1: تحريك الخلفية
</h3>

<p>
	لإعداد هذا المثال، سنبدأ بعنصر <a href="https://wiki.hsoub.com/HTML" rel="external">HTML</a> حاوي:
</p>

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

<p>
	يمكننا أن نجعل العنصر <code>screen</code> يبدو وكأنه شاشة أو iPad باستخدام التنسيقات التالية:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_7445_8" style="">
<span class="pun">.</span><span class="pln">screen </span><span class="pun">{</span><span class="pln">
  background</span><span class="pun">:</span><span class="pln"> </span><span class="com">#e25865 url(//cssanimation.rocks/screen/images/screen_bg.png) no-repeat top center;</span><span class="pln">
  background</span><span class="pun">-</span><span class="pln">size</span><span class="pun">:</span><span class="pln"> </span><span class="lit">100</span><span class="pun">%</span><span class="pln"> </span><span class="kwd">auto</span><span class="pun">;</span><span class="pln">
  border</span><span class="pun">:</span><span class="pln"> </span><span class="lit">2em</span><span class="pln"> solid </span><span class="com">#fff;</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">
  width</span><span class="pun">:</span><span class="pln"> </span><span class="lit">40em</span><span class="pun">;</span><span class="pln">
  height</span><span class="pun">:</span><span class="pln"> </span><span class="lit">30em</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	لقد أعددنا بعض التنسيقات التي تحدد الحجم والحدود، <a href="https://cssanimation.rocks/screen/images/screen_bg.png" rel="external nofollow">وتعيّن صورة الخلفية</a>.
</p>

<p>
	يعتمد التأثير الذي نريد إنشاءه على تحريك صورة الخلفية. صورة الخلفية أطول من الشاشة، وقيمة خاصيتها <a href="https://wiki.hsoub.com/CSS/background-size" rel="external">background-size</a> تساوي <code>‎100% auto</code>. هذا يعني أنّ الخلفية ستُناسب عرض الحاوية، ولكنها ستكون أطول منها.
</p>

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

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_7445_10" style="">
<span class="lit">@keyframes</span><span class="pln"> scroll </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">10</span><span class="pun">%</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
    background</span><span class="pun">-</span><span class="pln">position</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">
  </span><span class="pun">}</span><span class="pln">
  </span><span class="lit">20</span><span class="pun">%,</span><span class="pln"> </span><span class="lit">30</span><span class="pun">%</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
    background</span><span class="pun">-</span><span class="pln">position</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">22em</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="lit">60</span><span class="pun">%</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
    background</span><span class="pun">-</span><span class="pln">position</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">44em</span><span class="pun">;</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">
  </span><span class="lit">90</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">
    background</span><span class="pun">-</span><span class="pln">position</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">
  </span><span class="pun">}</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	الخاصية التي نحركها هي <a href="https://wiki.hsoub.com/CSS/background-position" rel="external"><code>background-position</code></a>. يمكننا عبر هذه الخاصية تحريك الخلفية لأعلى ولأسفل. إذا تبدأ من الموضع <code>0 0</code>، ما يعني أنّ المسافة من اليسار، ومن الأعلى ستُساويان الصفر.
</p>

<p>
	في الإطارات التالية، جعلنا الخلفية تتحرك إلى أعلى بمقدار <code>‎</code>22em، ثم <code>‎</code>44em لأعلى، ثم العودة إلى أعلى الصفحة. سنستخدم الخاصية <a href="https://wiki.hsoub.com/CSS/animation" rel="external"><code>animation</code></a> لتطبيق هذا على العنصر <code>screen</code>.
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_7445_12" style="">
<span class="pun">.</span><span class="pln">screen </span><span class="pun">{</span><span class="pln">
  animation</span><span class="pun">:</span><span class="pln"> scroll </span><span class="lit">5s</span><span class="pln"> infinite cubic</span><span class="pun">-</span><span class="pln">bezier</span><span class="pun">(.</span><span class="lit">52</span><span class="pun">,-</span><span class="lit">0.39</span><span class="pun">,.</span><span class="lit">3</span><span class="pun">,</span><span class="lit">1.43</span><span class="pun">);</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	في المثال أعلاه طبقنا مجموعة من <a href="https://wiki.hsoub.com/CSS/@keyframes" rel="external">الإطارات المفتاحية</a> التي تسمى <code>scroll</code>، وطلبنا منها أن تستمر 5 ثوان، وتتكرر باستمرار، وتستخدم <a href="https://wiki.hsoub.com/CSS/timing-function" rel="external">دالة توقيت</a> cubic-bezier. في هذه الحالة، تعطي الدالة cubic-bezier للحركة اهتزازًا، وستبدو الحركة بدونها أقل واقعية.
</p>

<p>
	يمكنك أن تجد دالةَ cubic-bezier المستخدمة في المثالِ في الموقع <a href="http://cubic-bezier.com/#.52,-0.39,.3,1.43" rel="external nofollow"> cubic-bezier.com</a>. إذا لم تزر هذا الموقع حتى الآن، فإني أوصي به بشدة!
</p>

<h3 id="-2-">
	الجزء 2: إضافة انتقال التحويم
</h3>

<p>
	من المستحسن إيقاف أو تجميد الحركة عند انتهائها، أو عندما تريد أن يركز القارئ على محتوى آخر. التحريك المستمر يمكن أن يتسبب في تشتيت القارئ، لذلك دعنا نستفيد من الخاصية <a href="https://wiki.hsoub.com/CSS/animation-play-state" rel="external"><code>animation-play-state</code></a> لإيقاف الحركة مؤقتًا عند التحويم على العنصر.
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_7445_18" style="">
<span class="pun">.</span><span class="pln">screen</span><span class="pun">:</span><span class="pln">hover </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>
	هذا يعني أنه عندما يحوم مؤشر الفأٍرة فوق موضع الحركة، سيتوقف مؤقتًا. وعندما يبتعد المؤشر، سوف تُستأنف الحركة وتعود الخاصية <a href="https://wiki.hsoub.com/CSS/animation-play-state" rel="external"><code>animation-play-state</code></a> لقيمتها الافتراضية <code>playing</code>.
</p>

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

<h3 id="-3-">
	الجزء 3: إضافة رسالة
</h3>

<p>
	يمكننا أن نضيف المزيد ونعرض رسالة خاصة بالانتقال عندما يُحوِّم المستخدم فوق العنصر. للقيام بذلك سنحتاج إلى كتابة بعض شيفرات <a href="https://wiki.hsoub.com/HTML" rel="external">HTML</a>:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_7445_20" style="">
<span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"screen"</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">"message"</span><span class="tag">&gt;</span><span class="pln">Hover message!</span><span class="tag">&lt;/div&gt;</span><span class="pln">
</span><span class="tag">&lt;/div&gt;</span></pre>

<p>
	في قسم <a href="http://codepen.io/donovanh/pen/LEwedW?editors=110" rel="external nofollow">CSS من CodePen</a>، وضعنا هذه الرسالة في منتصف العنصر <code>screen</code>، وجعلناها غير مرئية.
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_7445_22" style="">
<span class="pun">.</span><span class="pln">message </span><span class="pun">{</span><span class="pln">
  </span><span class="com">/*... positioning styles ...*/</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">
  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><span class="pln">
</span><span class="pun">}</span></pre>

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

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_7445_28" style="">
<span class="pun">.</span><span class="pln">screen</span><span class="pun">:</span><span class="pln">hover </span><span class="pun">.</span><span class="pln">message </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">
</span><span class="pun">}</span></pre>

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

<figure style="text-align: center;"><img alt="screen-hover-min.gif" class="ipsImage ipsImage_thumbnailed" data-fileid="30328" data-unique="foto2fyrl" src="https://academy.hsoub.com/uploads/monthly_2019_06/screen-hover-min.gif.ba045eb7a8aa792fa48acfe84b549424.gif"><figcaption>
		المصدر: <a href="http://codepen.io/donovanh/pen/LEwedW?editors=110" rel="external nofollow">http://codepen.io/donovanh/pen/LEwedW?editors=110</a>
	</figcaption></figure><h2 id="-">
	ملخص
</h2>

<p>
	في هذه المقالة، قمنا بدمج الحركة والانتقال معًا لإنشاء تأثير يمكن أن يكون مفيدًا في تصميم صفحات الهبوط، أو قصص المنتجات أو إخبار الزائر الغرض من موقعك أو كيفية استخدامه. استخدمنا الخاصية <a href="https://wiki.hsoub.com/CSS/animation-play-state" rel="external"><code>animation-play-state</code></a> للتأكد من توقف الحركة عندما نريد.
</p>

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

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

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

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

<ul>
<li>
		ترجمة وبتصرف للفصل storytelling من كتاب <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%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/%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/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">698</guid><pubDate>Wed, 10 Jul 2019 13:04:00 +0000</pubDate></item><item><title>&#x645;&#x648;&#x62C;&#x632; &#x627;&#x644;&#x62D;&#x631;&#x643;&#x627;&#x62A;</title><link>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/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2019_06/5d0f7ebf4a29e_.jpg.542045531891f560efb19a4078e538c4.jpg" /></p>

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

<p>
	عندما بدأت تعلم إنشاء الحركات في <a href="https://wiki.hsoub.com/CSS" rel="external">CSS</a>، لم تكن مفاهيم التحريك و<a href="https://wiki.hsoub.com/CSS/@keyframes" rel="external">الإطارات المفتاحية</a> (keyframes) واضحة لي. إذا شعرتَ أنّ مفاهيم التحريك غير واضحة حتى الآن، فلا تقلق. استمر في الدراسة والتعلم والتجريب، وستتضح شيئًا فشيئًا حيل ومفاهيم التحريكات في <a href="https://wiki.hsoub.com/HTML" rel="external">HTML</a> و <a href="https://wiki.hsoub.com/CSS" rel="external">CSS</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>
		<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>
		موجز الحركات
	</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>
	سنلخّص في هذه المقالة ما تعلمناه في المقالات السابقة. لكن سنعود أولًا إلى التمرين الذي رأيناه في المقالة الماضية.
</p>

<h2 id="-">
	تمرين: إشارات المرور
</h2>

<p>
	يُفترض أن يكون التمرين سهلًا. طبعًا على افتراض أنك تعرف كيف تحلّه. لقد أنشأت نسخة محدّثة من <a href="http://codepen.io/donovanh/pen/ogRRdR?editors=010" rel="external nofollow">مثال إشارات المرور وفق نموذج المملكة المتحدة</a>، إذ غيَّرت التسلسل هذه المرة لإزالة مرحلة "الأحمر + البرتقالي" ليوافق نظام إشارات المرور الأمريكية.
</p>

<p>
	يمكنك الاطلاع عليه من <a href="http://codepen.io/donovanh/pen/vEqbdw?editors=010" rel="external nofollow">هنا</a>. لقد جعلت نظام الألوان يطابق شكل إشارات المرور الأمريكية.
</p>

<h2 id="-">
	موجز: الحركات
</h2>

<p>
	في هذا القسم، سنلقي نظرة على الخاصية <a href="https://wiki.hsoub.com/CSS/animation" rel="external"><code>animation</code></a>، وكيف تعمل مع <a href="https://wiki.hsoub.com/CSS/@keyframes" rel="external">الإطارات المفتاحية</a> (keyframes).
</p>

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

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

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

<p>
	افتراضيًا، تحدث الحركات من البداية إلى النهاية، ثم تقفز إلى حالتها الافتراضية. يمكننا تجميد الحركة في حالتها النهائية بإعطاء الخاصية <a href="https://wiki.hsoub.com/CSS/animation-direction" rel="external"><code>animation-direction</code></a> القيمةَ <code>forwards</code>.
</p>

<p>
	تستخدم الحركات <a href="https://wiki.hsoub.com/CSS/timing-function" rel="external">دوال التوقيت</a> مثلها مثل الانتقالات. بيْد أنّ دوال التوقيت تنطبق على كل إطار رئيسي على حدة، وليس على كامل مجموعة الإطارات المفتاحية. يمكنك أيضًا تحديد قيمة <a href="https://wiki.hsoub.com/CSS/animation-timing-function" rel="external"><code>animation-timing-function</code></a> داخل الإطار المفتاحي لتتحكم بشكل أدق في الحركة.
</p>

<p>
	أخيرًا، يمكن صياغة الحركات بشكل مختصر كما هو الحال مع الانتقالات:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_3665_8" style="">
<span class="pln">animation</span><span class="pun">:</span><span class="pln"> keyframe</span><span class="pun">-</span><span class="pln">name </span><span class="lit">2s</span><span class="pln"> forwards linear</span><span class="pun">;</span></pre>

<h3 id="-">
	الإطارات المفتاحية
</h3>

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

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

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

<p>
	أخيرًا، من الممكن حذف الإطار المفتاحي <code>‎0%</code>، وسوف يفترض المتصفح حينها أنّ تنسيق العنصر هو الحالة الابتدائية. على سبيل المثال، لجعل عنصر ما يتلاشى (fade away)، لا يلزم بالضرورة أن تكون قيمة عتَامته (opacity) مساوية لـ <code>1</code> في البداية (على افتراض أنّ العنصر مرئي):
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_3665_10" style="">
<span class="lit">@keyframes</span><span class="pln"> name </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">
    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><span class="pln">
</span><span class="pun">}</span></pre>

<h2 id="-">
	تجميع الحركة
</h2>

<p>
	عندما نريد استخدام الحركة، سيكون لدينا دائمًا الجزءان التاليان:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_3665_12" style="">
<span class="pun">.</span><span class="pln">element </span><span class="pun">{</span><span class="pln">
  animation</span><span class="pun">:</span><span class="pln"> keyframe</span><span class="pun">-</span><span class="pln">name </span><span class="pun">...</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
</span><span class="lit">@keyframes</span><span class="pln"> keyframe</span><span class="pun">-</span><span class="pln">name </span><span class="pun">{</span><span class="pln">
  </span><span class="pun">...</span><span class="pln">
</span><span class="pun">}</span></pre>

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

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

<p>
	ألق نظرة على <a href="http://codepen.io/collection/AxKOdY/" rel="external nofollow">أمثلة Principles of Animation for the Web</a>. كل تلك الأمثلة مصنوعة حصرًا باستخدام <a href="https://wiki.hsoub.com/HTML" rel="external">HTML</a> و <a href="https://wiki.hsoub.com/CSS" rel="external">CSS</a>، وذلك باستخدام إطارات الحركة المفتاحية. حاول أن تنسخها، وقُم بالتجريب والتعديل عليها.
</p>

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

<ul>
<li>
		ترجمة وبتصرف للفصل animation recap من كتاب <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%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%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/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">697</guid><pubDate>Sat, 06 Jul 2019 18:07:00 +0000</pubDate></item><item><title>&#x627;&#x644;&#x645;&#x631;&#x62C;&#x639; &#x627;&#x644;&#x634;&#x627;&#x645;&#x644; &#x625;&#x644;&#x649; &#x627;&#x644;&#x62A;&#x62D;&#x631;&#x64A;&#x643; &#x639;&#x628;&#x631; CSS</title><link>https://academy.hsoub.com/programming/css/%D8%A7%D9%84%D9%85%D8%B1%D8%AC%D8%B9-%D8%A7%D9%84%D8%B4%D8%A7%D9%85%D9%84-%D8%A5%D9%84%D9%89-%D8%A7%D9%84%D8%AA%D8%AD%D8%B1%D9%8A%D9%83-%D8%B9%D8%A8%D8%B1-css-r692/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2019_06/5d12142243694_.jpg.44a013bbb6f00f9aafcf42af749ca10b.jpg" /></p>

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

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

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

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

<h2>
	جدول المحتويات
</h2>

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

<ul>
<li>
		<a href="#%D9%85%D8%A7-%D9%87%D9%8A-%D8%A3%D9%87%D9%85%D9%8A%D8%A9-%D8%A7%D9%84%D8%AD%D8%B1%D9%83%D8%A7%D8%AA%D8%9F" rel="">ما هي أهمية الحركات؟</a>
	</li>
	<li>
		<a href="#%D8%B8%D9%87%D9%88%D8%B1-%D8%A7%D9%84%D8%AD%D8%B1%D9%83%D8%A7%D8%AA-%D9%81%D9%8A-%D8%A7%D9%84%D9%88%D9%8A%D8%A8" rel="">ظهور الحركات في الويب</a>
	</li>
	<li>
		<a href="#%D8%A3%D8%B1%D9%8A%D8%AF-%D8%AA%D8%B9%D9%84%D9%85-%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%8C-%D9%81%D9%85%D9%86-%D8%A3%D9%8A%D9%86-%D8%A3%D8%A8%D8%AF%D8%A3%D8%9F" rel="">أريد تعلم إنشاء الحركات، فمن أين أبدأ؟</a>
	</li>
	<li>
		<a href="#%D8%AF%D8%B1%D9%88%D8%B3-%D9%86%D8%B8%D8%B1%D9%8A%D8%A9%3A-%D9%85%D8%A8%D8%A7%D8%AF%D8%A6-%D8%A7%D9%84%D8%AD%D8%B1%D9%83%D8%A7%D8%AA-%D9%88%D8%A7%D9%84%D8%AA%D8%AD%D8%B1%D9%8A%D9%83" rel="">دروس نظرية: مبادئ الحركات والتحريك</a>
	</li>
	<li>
		<a href="#%D8%AF%D8%B1%D9%88%D8%B3-%D8%AA%D8%B7%D8%A8%D9%8A%D9%82%D9%8A%D8%A9-%D8%B9%D9%85%D9%84%D9%8A%D8%A9" rel="">دروس تطبيقية عملية</a>
	</li>
</ul>
<h2 id="ما-هي-أهمية-الحركات؟">
	ما هي أهمية الحركات؟
</h2>

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

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

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

<p>
	إذا نظرت حولك عمومًا أو أمعنت النظر في الطبيعية خصوصًا، ستجد أنَّ الحركة في كل مكان وهي سمة الطبيعية الأساسية، فكلمة «حيوية» هي <a href="https://www.almaany.com/ar/dict/ar-ar/%D8%AD%D9%8A%D9%88%D9%8A%D8%A9/" rel="external nofollow">مصدر صناعي من «حياة» ويراد بها الفاعلية والنشاط</a>. وتركبية جسم الإنسان وعدد مفاصله تؤكد أهمية الحركة التي تمثِّل سمة أساسية فيه.
</p>

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

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

<p>
	فمثل التحريك كَمَثل أي فنٍّ سواءً كان الشعر أو الرسم أو غيرهما من الفنون، وأصبح في عصرنا هذا علمًا يُدرّس وعملًا يُنجَز. هل خطر في ذهنك الآن أفلام الرسوم المتحركة؟ تمامًا، فهذا ما قصدته. لابد أنَّك تعرف ديزني وشخصيتها المشهورة ميكي ماوس والمحقق كونان وشهرة سلاسل <a href="https://ar.wikipedia.org/wiki/%D9%85%D8%A7%D9%86%D8%BA%D8%A7" rel="external nofollow">المانغا</a> اليابانية (أي القصص المصورة) وتطورها إلى رسوم متحركة (<a href="https://ar.wikipedia.org/wiki/%D8%A3%D9%86%D9%85%D9%8A" rel="external nofollow">أنمي</a>)؛ فكل ذلك أساسه الحركة والتحريك وإبداع الإنسان في توظيف الحركة في شتى المجالات.
</p>

<p>
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="30509" href="https://academy.hsoub.com/uploads/monthly_2019_06/5d12142b0fdaa_.jpg.59191dd0223e2d7c281d0034b9bb5f02.jpg" rel=""><img alt="المرجع الشامل إلى التحريك.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="30509" data-unique="0ho9tf6hk" src="https://academy.hsoub.com/uploads/monthly_2019_06/5d12142b25ab6_.thumb.jpg.31c128dc187a094d9688fa11b5aa96f0.jpg"></a>
</p>

<h2 id="ظهور-الحركات-في-الويب">
	ظهور الحركات في الويب
</h2>

<p>
	إن كنت من جيل الثمانينات والتسعينات، فلابد أنَّك زرت الكثير من المواقع التي كانت تستعمل حركات شتى مثل بطاقات لامعة أو نجوم مشعة أو قطط راقصة أو غيرها من الأشكال والتي كنت أراها مزعجة لي في بعض الأحيان؛ فلا أحب الاستعمال الزائد للحركة كثيرًا وكنت أهرب من المنتديات التي تفرط في استعمالها. أغلب ذلك كان يجري عبر تقنية Flash (الفلاش) التي أحدث ثورة في الحركات والتحريك آنذاك (بعد الصور المتحركة GIF). على أي حال، كانت ذلك يُسبِّب بطئيًا كبيرًا في تحميل الموقع مما يؤثر سلبًا عليه.
</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://wiki.hsoub.com/JavaScript" rel="external">جافاسكربت</a> وصور SVG دون أن تؤثر على الأداء تأثيرًا ملحوظًا أو سلبيًّا. وبالتالي، دخلت الحركة إلى أغلب عناصر الصفحة بأدق تفاصيلها. فلم يعد الغرض منها إضفاء الحيوية والمتعة للمستخدم فقط، بل تحسين تجربة وواجهة المستخدم أيضًا (UX/UI) مما يجعل الموقع أفضل وأسهل للاستخدام خصوصًا إذا كان موقع الويب (أو تطبيق الويب) تفاعليًّا مع المستخدم.
</p>

<h2 id="أريد-تعلم-إنشاء-الحركات،-فمن-أين-أبدأ؟">
	أريد تعلم إنشاء الحركات، فمن أين أبدأ؟
</h2>

<p>
	حسنًا، إن اقتنعت بضرورة وأهمية الحركات في صفحات الويب، فقد تتساءل: من أين أبدأ وهل يوجد مرجع يشرح لي التحريك شرحًا كافيًا ووافيًا؟ أجيبك، نعم يوجد وبالعربية أيضًا.
</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> والتي تأخذك خطوة بخطوة لإنشاء حركات احترافية وإضافتها إلى موقعك. هذه السلسلة هي ترجمة لفصول كتاب CSS Animation 101.
</p>

<p>
	ستغطي هذه المقالات المواضيع التالية:
</p>

<ul>
<li>
		<strong>أولًا</strong>: ما هي الحركات؟ سنحاول أن نفهم سبب استخدام الحركات. سنقدم أيضًا الخاصيتين <a href="https://wiki.hsoub.com/CSS/transition" rel="external"><code>transition</code></a> و <a href="https://wiki.hsoub.com/CSS/animation" rel="external"><code>animation</code></a>، إضافة إلى بعض مصادر الإلهام.
	</li>
	<li>
		<strong>ثم</strong>: سنتحدث بتفصِيل عن الخاصية <code>transition</code>. ونتعلم كيفية عمل الانتقالات، والخاصيات التي تُمكّننا من التحكم في الحركة.
	</li>
	<li>
		<strong>بعد ذلك</strong>: سنركز على الخاصية <code>animation</code>، ونتعلم كيفية إنشاء الإطارات المفتاحية التي تتيح لنا فعل أشياء تتجاوز إمكانيات الانتقالات البسيطة.
	</li>
	<li>
		<strong>أخيرًا</strong>: سنجمع كل ما تعلمناه في الفصول السابقة. سندرس بعض الأمثلة المتقدمة التي تستخدم كلا الخاصيتين، ونتعلم الرابط بين الحركات وسهولة الوصول (accessibility)، ونشارك بعض مصادر <a href="https://wiki.hsoub.com/CSS" rel="external">CSS</a> المفيدة التي يمكنك تطبيقها في مشاريعك، وأدوات <a href="https://wiki.hsoub.com/JavaScript" rel="external">JavaScript</a> التي يمكن استخدامها لإنشاء تأثيرات أكثر تقدمًا.
	</li>
</ul>
<p>
	بعد قراءتك هذه السلسلة، ستفهم مبادئ التحريك في <a href="https://wiki.hsoub.com/CSS" rel="external">CSS</a> فهمًا جيدًا، بالإضافة إلى الأدوات اللازمة لإنشاء الحركات وإضافتها إلى مشاريعك. تجمع مقالات هذه السلسلة بين الأمثلة النظرية والعملية. سوف تتعلم كيفية إعداد بيئة العمل الخاصة بك، وستطالع الكثير من الأمثلة العملية عن الحركات في ثنيّات الطريق.
</p>

<h2 id="دروس-نظرية:-مبادئ-الحركات-والتحريك">
	دروس نظرية: مبادئ الحركات والتحريك
</h2>

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

<h3 id="ما-هي-استخدامات-الحركات؟">
	<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="">1. ما هي استخدامات الحركات؟</a>
</h3>

<p class="response_image">
	<a class="ipsAttachLink ipsAttachLink_image" 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=""><img alt="ماهي استخدامات الحركات.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="30575" data-unique="nwyn56xgi" src="https://academy.hsoub.com/uploads/monthly_2019_07/5d1b6d826b679_.thumb.jpg.0732352ad9cde2e4c9a6a1deeff5bf22.jpg"></a>
</p>

<p class="response_descrip">
	هذه المقالة هي أول مقالة في السلسلة وتناقش سبب إضافة الحركات وتبنيها في مواقع الويب وكيف يمكن أن يستفيد منها مصممو مواقع الويب.
</p>

<h3 id="تجهيز-بيئة-العمل-لإنشاء-الحركات">
	<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="">2. تجهيز بيئة العمل لإنشاء الحركات</a>
</h3>

<p class="response_image">
	<a class="ipsAttachLink ipsAttachLink_image" 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=""><img alt="تجهيز بيئات العمل.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="30559" data-unique="b3zgj2qsx" src="https://academy.hsoub.com/uploads/monthly_2019_07/5d19bc31e4907_.thumb.jpg.3d2ef01ddcb9ac27ebfc5a34206a1d60.jpg"></a>
</p>

<p class="response_descrip">
	ستتعلم في هذه المقالة كيفية تجهيز بيئة العمل لديك لإنشاء الحركات عبر CSS وتشغليها إضافةً إلى تحديد سير العمل. سيكون العمل إمَّا باستعمال المتصفح نفسه (سيكون الاعتماد غالبًا على CodePen) أو بتجهيز بيئة تطوير محلية. سيتطرق المقال إلى أداة البناء Gulp لأتمتة بعض العلميات الروتينية.
</p>

<h3 id="مدخل-إلى-الانتقالات:-التنقل-بين-الحالات">
	<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="">3. مدخل إلى الإنتقالات: التنقل بين الحالات</a>
</h3>

<p class="response_image">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="30560" 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=""><img alt="مدخل إلى الانتقالات.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="30560" data-unique="q2o921rzr" src="https://academy.hsoub.com/uploads/monthly_2019_07/5d19bd095f12f_.thumb.jpg.65c15007d374c5ecbedd694c8c9f9ea6.jpg"></a>
</p>

<p class="response_descrip">
	تشرح هذه المقالة كيف يجري تحريك عنصر عبر توضيح مبدأ تحويل إحدى خصائصه وصفاته ونقلها تدريجيًّا بزمن محدَّد لتوليد شعور بالحركة. ستلقي هذه المقالة أيضًا نظرة تفصيلية على خاصية التحويل <a href="https://wiki.hsoub.com/CSS/transition" rel="external"><code>transition</code></a> في <a href="https://wiki.hsoub.com/CSS" rel="external">CSS</a> وكيفية استعمالها في ذلك الغرض مع أمثلة عملية.
</p>

<h3 id="مدخل-إلى-الحركات:-مفهوم-الحركة">
	<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="">4. مدخل إلى الحركات: مفهوم الحركة</a>
</h3>

<p class="response_image">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="30561" 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=""><img alt="مدخل إلى الحركات.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="30561" data-unique="l1o38k5iq" src="https://academy.hsoub.com/uploads/monthly_2019_07/5d19bdb1ee5df_.thumb.jpg.795377934fbd48e9c56550dd809be105.jpg"></a>
</p>

<p class="response_descrip">
	يشرح هذا المقال أولًا الفرق بين الإنتقال والحركة ويوضح كيف يُنفِّذ المتصفح حركة ما على عنصر. يعرِّفك هنا على خاصية الحركة <a href="https://wiki.hsoub.com/CSS/animation" rel="external"><code>animation</code></a> في CSS شقيقة خاصية التحويل <a href="https://wiki.hsoub.com/CSS/transition" rel="external"><code>transition</code></a> وكيفية استعمالها لإنشاء الحركات. يعرض أيضًا مثالين عمليَّين ويحللهما لفهم كيف تجري الحركة. يشرح أخيرًا متى تُستخدَم الحركة ومتى يُستخدَم الانتقال.
</p>

<h3 id="تطبيق-عملي:-الانتقالات">
	<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="">5. تطبيق عملي: الانتقالات</a>
</h3>

<p class="response_image">
	<a class="ipsAttachLink ipsAttachLink_image" 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=""><img alt="تطبيق عملي: الانتقالات.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="30576" data-unique="9tvolykrg" src="https://academy.hsoub.com/uploads/monthly_2019_07/5d1b6ed9b53ed_.thumb.jpg.4311cb51bde7e68d86fbd864afe2c7a0.jpg"></a>
</p>

<p class="response_descrip">
	تتعمق هذه المقالة في استعمال الخاصية <a href="https://wiki.hsoub.com/CSS/transition" rel="external"><code>transition</code></a> وتعرض مثالًا عمليًّا عن تطبيقها على زر لتغيير حالته أثناء تحويم مؤشر الفأرة فوقه. تناقش المقالة أيضًا موضوع دعم هذه الخاصية عبر مختلف المتصفحات.
</p>

<h3 id="خاصيات-الانتقالات">
	<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="">6. خاصيات الانتقالات</a>
</h3>

<p class="response_image">
	<a class="ipsAttachLink ipsAttachLink_image" 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=""><img alt="خاصيات الانتقالات.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="30577" data-unique="2bb4wr1za" src="https://academy.hsoub.com/uploads/monthly_2019_07/5d1b6eea6a996_.thumb.jpg.78b42128a789052c01fad127bd1ecaef.jpg"></a>
</p>

<p class="response_descrip">
	تشرح هذه المقالة جميع خاصيات الانتقالات المرتبطة بالخاصية <a href="https://wiki.hsoub.com/CSS/transition" rel="external"><code>transition</code></a> مع عرض بعض الأمثلة. أي أنها ستعرض الصياغة المختزلة والصياغة التفصيلية المطوَّلة لها. ستتطرق أخيرًا إلى شرح موضوع مهم يتعلق بالأشياء التي لا يطبَّق الانتقال عليها.
</p>

<h3 id="دوال-التوقيت">
	<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="">7. دوال التوقيت</a>
</h3>

<p class="response_image">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="30578" href="https://academy.hsoub.com/uploads/monthly_2019_07/5d1b6efd14c1b_.jpg.9a8ccbfccc988708d9f935276c4e1464.jpg" rel=""><img alt="دوال التوقيت.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="30578" data-unique="krct71or1" src="https://academy.hsoub.com/uploads/monthly_2019_07/5d1b6efd38ae2_.thumb.jpg.9ecffc6a1ef4fa8cf204100dc97bced8.jpg"></a>
</p>

<p class="response_descrip">
	تتحدث هذه المقالة عن <a href="https://wiki.hsoub.com/CSS/timing-function" rel="external">دوال التوقيت</a> (timing function) وكيفية استعمالها مع الانتقالات المطبقة على العناصر، وتشرح أشهر أنواع دوال التوقيت المستعملة حاليًّا مع عرض صور وأمثلة توضيحية تساعد على فهمها.
</p>

<h3 id="الانتقالات-المتعددة">
	<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="">8. الانتقالات المتعددة</a>
</h3>

<p class="response_image">
	<a class="ipsAttachLink ipsAttachLink_image" 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=""><img alt="الانتقالات المتعددة.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="30579" data-unique="4crnwkub3" src="https://academy.hsoub.com/uploads/monthly_2019_07/5d1b6f0e16eeb_.thumb.jpg.1304fc98c6332dca8cff91c48c465e32.jpg"></a>
</p>

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

<h3 id="الانتقالات-وجافاسكربت">
	<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="">9. الانتقالات وجافاسكربت</a>
</h3>

<p class="response_image">
	<a class="ipsAttachLink ipsAttachLink_image" 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=""><img alt="الانتقالات وجافاسكربت.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="30580" data-unique="nshphq8gn" src="https://academy.hsoub.com/uploads/monthly_2019_07/5d1b6f1d0c5ff_.thumb.jpg.4e934994c2adc8d67cf19fbb1bc207f0.jpg"></a>
</p>

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

<h3 id="تطبيق-عملي:-التحريكات">
	<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="">10. تطبيق عملي: التحريكات</a>
</h3>

<p class="response_image">
	<a class="ipsAttachLink ipsAttachLink_image" 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=""><img alt="تطبيق عملي: التحريكات.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="30581" data-unique="myey0oe5v" src="https://academy.hsoub.com/uploads/monthly_2019_07/5d1b6f367e45c_.thumb.jpg.c81c581bee20733a7c6bc0e56c9b0b04.jpg"></a>
</p>

<p class="response_descrip">
	ستلقي هذه المقالة نظرة أعمق على الخاصية <a href="https://wiki.hsoub.com/CSS/animation" rel="external"><code>animation</code></a> شيقية الخاصية <a href="https://wiki.hsoub.com/CSS/transition" rel="external"><code>transition</code></a> والمكملة لها في توليد الحركات مع ذكر عدة تطبيقات عملية عليها. سيجري أيضًا شرح الإطارات المفتاحية (keyframes) وارتباطها الوثيق بتلك الخاصية وكونها أساس الحركة.
</p>

<h3 id="خاصيات-الحركات">
	<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="">11. خاصيات الحركات</a>
</h3>

<p class="response_image">
	<a class="ipsAttachLink ipsAttachLink_image" 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=""><img alt="خاصيات الحركات.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="30582" data-unique="e66n1pap1" src="https://academy.hsoub.com/uploads/monthly_2019_07/5d1b6f4abe117_.thumb.jpg.30a3f5fc19813168ee9fae9333f4c929.jpg"></a>
</p>

<p class="response_descrip">
	تشرح هذة المقالة الصياغة المختزلة والصياغة التفصيلية المطوَّلة للخاصية <a href="https://wiki.hsoub.com/CSS/animation" rel="external"><code>animation</code></a> وتشرح بعدها الخاصيات المرتبطة بها ووظيفة كل منها. تتطرق أخيرًا إلى كيفية استخدام دوال التوقيت ضمن الإطارات المفتاحية.
</p>

<h3 id="تطبيق-عملي:-الإطارات-المفتاحية">
	<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="">12. تطبيق عملي: الإطارات المفتاحية</a>
</h3>

<p class="response_image">
	<a class="ipsAttachLink ipsAttachLink_image" 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=""><img alt="تطبيق عملي: الإطارات المفتاحية.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="30583" data-unique="zj69pwg85" src="https://academy.hsoub.com/uploads/monthly_2019_07/5d1b6f5892b85_.thumb.jpg.0753e0539c9476405aec170bc33f1205.jpg"></a>
</p>

<p class="response_descrip">
	تلقي هذه المقالة نظرة أعمق على الإطارات المفتاحية (keyframes) وصياغتها وكيفية استعمالها مع الحركات لتحريك العناصر تحريكًا مخصَّصًا. سيجري شرح كل ذلك شرحًا تفصيليًّا عبر تطبيق عملي لتحريك زر حركة مُخصَّصة.
</p>

<h3 id="الحركات-المتعددة-المتزامنة">
	<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="">13. الحركات المتعددة المتزامنة</a>
</h3>

<p class="response_image">
	<a class="ipsAttachLink ipsAttachLink_image" 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=""><img alt="الحركات المتعددة المتزامنة.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="30584" data-unique="gkw85tm50" src="https://academy.hsoub.com/uploads/monthly_2019_07/5d1b6f6a77bd9_.thumb.jpg.ae4828987a0d019322b1047b55168ad4.jpg"></a>
</p>

<p class="response_descrip">
	تتحدث هذه المقالة عن كيفية استخدام عدة مجموعات من الإطارات المفتاحية (keyframes) لإنشاء حركة معقدة مؤلفة من عدة حركات تعمل بشكل متزامن مع بعضها بعضًا. المثال العملي في هذا الدرس هو إنشاء إشارة مرور.
</p>

<h3 id="موجز-الحركات">
	<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="">14. موجز الحركات</a>
</h3>

<p class="response_image">
	<a class="ipsAttachLink ipsAttachLink_image" 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=""><img alt="موجز الحركات.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="30585" data-unique="mclkiubpw" src="https://academy.hsoub.com/uploads/monthly_2019_07/5d1b6f7ae7adc_.thumb.jpg.ec6bc91d6105b8187c8b126b84faa2c2.jpg"></a>
</p>

<p class="response_descrip">
	نتوقف هنا في هذه المقالة للالتقاط الأنفاس وأخذ استراحة بسيطة يجري فيها مراجعة وتلخص كل ما تعلمته مسبقًا في المقالات السابقة عن الحركات والانتقالات وتطبيقها لتحريك العناصر في CSS.
</p>

<h3 id="رواية-القصص-عبر-الحركات">
	<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="">15. رواية القصص عبر الحركات</a>
</h3>

<p class="response_image">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="30586" href="https://academy.hsoub.com/uploads/monthly_2019_07/5d1b6f872baca_.jpg.798eb30fd05edc714a43b1b4ad9aa909.jpg" rel=""><img alt="رواية القصص عبر الحركات.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="30586" data-unique="n2cjpvies" src="https://academy.hsoub.com/uploads/monthly_2019_07/5d1b6f874cae0_.thumb.jpg.2f441e6903b0ad545a5f0325c16ef37d.jpg"></a>
</p>

<p class="response_descrip">
	تطبِّق هذه المقالة كل ما تعلمته مسبقًا لإنشاء حركات هادفة مفيدة، إذ تشرح مفهوم الصورة الرئيسية المستعملة بكثرة في الصفحات الرئيسية للموقع وصفحات الهبوط والتي تحكي هدف الوقع أو تُعلِّم كيفية استخدامه.
</p>

<h3 id="حرب-النجوم-(Star-War)">
	<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="">16. حرب النجوم (Star War)</a>
</h3>

<p class="response_image">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="30566" 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=""><img alt="حرب النجوم.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="30566" data-unique="tywti1f7y" src="https://academy.hsoub.com/uploads/monthly_2019_07/5d1afd8a92117_.thumb.jpg.23965786e83e07d30d1600cd6131a2d4.jpg"></a>
</p>

<p class="response_descrip">
	سنطبق في هذه المقالة كل ما تعلمته في المقالات السابقة لصنع حركة متجِهيًّة (SVG) مرحة، وذلك بالعمل على تحريك عنوان فيلم حرب النجوم من إعلان "The Force Awakens" ليظهر وكأنه ثلاثي الأبعاد. في أثناء ذلك، سيجري شرح الخاصية transform ودوالها‏ scale()‎ و translateZ()‎ و rotateY()‎.
</p>

<h3 id="إظهار-المحتوى-أثناء-التمرير">
	<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="">17. إظهار المحتوى أثناء التمرير</a>
</h3>

<p class="response_image">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="30568" 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=""><img alt="إظهار المحتوى أثناء التمرير.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="30568" data-unique="pqzirg125" src="https://academy.hsoub.com/uploads/monthly_2019_07/5d1b0610eee8b_.thumb.jpg.5efc332ba18a18d7f92df0b2e25bd458.jpg"></a>
</p>

<p class="response_descrip">
	سوف تتعلم في هذه المقالة كيفية إظهار العناصر عند تمرير (scrolling) إليها وعرضها على نافذة المتصح مع إضافة حركة إليها. يعرض لتحقيق ذلك إطاري عمل هما: Wow.js و Animate.css مع عدم نسيان الدعم الذي يوفره Modernizr احتياطًا من أولائك المستخدمين الذين لا يشغّلون JavaScript لسبب ما.
</p>

<h3 id="سهولة-الوصول">
	<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="">18. سهولة الوصول</a>
</h3>

<p class="response_image">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="30569" 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=""><img alt="سهولة الوصول.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="30569" data-unique="ya8myl493" src="https://academy.hsoub.com/uploads/monthly_2019_07/5d1b11d1be72b_.thumb.jpg.377c8ebf31f922e8ef240a9f902c003e.jpg"></a>
</p>

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

<h3 id="نهاية-الرحلة">
	<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="">19. نهاية الرحلة</a>
</h3>

<p class="response_image">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="30574" 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=""><img alt="نهاية الرحلة.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="30574" data-unique="opbsuva3a" src="https://academy.hsoub.com/uploads/monthly_2019_07/5d1b47d084748_.thumb.jpg.2cbcbbe276e7dedabe5b05ef162cffc6.jpg"></a>
</p>

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

<h2 id="دروس-تطبيقية-عملية">
	دروس تطبيقية عملية
</h2>
<style type="text/css">
@media screen and (min-width: 650px) {
.response_image {
    width: 33%;
    display: inline-block;
    vertical-align: top;
    margin-top: 0px;
}

.response_descrip {
    width: 64%;
    display: inline-block;
    margin-right: 10px;
    vertical-align: top;
    margin-top: 0px;
}
}</style>
<p>
	تحوي الأكاديمية على مقالات عدة تتحدث عن الحركات في <a href="https://wiki.hsoub.com/CSS" rel="external">CSS</a> بمستويات متفاوتة ومواضيع متنوعة تصب جميعها في موضوع واحد ألا وهو «التحريك في CSS»، لذا جمعت لك جميع هذه المقالات لسهولة الوصول إليها من مكان واحد ولتكون لك مرجعًا تستعين به في المستقبل.
</p>

<h3 id="مبادئ-التحريك-في-صفحات-الويب-باستخدام-CSS">
	<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>
</h3>

<p class="response_image">
	<a class="ipsAttachLink ipsAttachLink_image" 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=""><img alt="مبادئ التحريك في صفحات الويب.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="30298" data-unique="9fsselsdw" src="https://academy.hsoub.com/uploads/monthly_2019_06/5d0a4fa1a36db_.thumb.jpg.dea902374810cb6f1ba75155d40dff4a.jpg" style="width: 100%; height: auto;"></a>
</p>

<p class="response_descrip">
	تشرح هذه المقالة المبادئ الاثنا عشر لأساسيات التحريك عبر CSS - المنشورة بكتاب عنوانه:  "وهم الحياة: الرسوم المُتحركة في ديزني" - وتناقش كيف لها أنّ تُطبَّق في صناعة صفحات الويب مع أمثلة توضيحيّة وإتاحة الوصول إلى مصدر شيفرة HTML و CSS الخاصّة بهذه الأمثلة.
</p>

<h3 id="تأثيرات-حركية-على-عناصر-قوائم-HTML-باستخدام-CSS">
	<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="">تأثيرات حركية على عناصر قوائم HTML باستخدام CSS</a>
</h3>

<p class="response_image">
	<a class="ipsAttachLink ipsAttachLink_image" 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="تأثيرات حركية على عناصر قوائم html.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="30294" data-unique="fa7s6n41u" src="https://academy.hsoub.com/uploads/monthly_2019_06/5d0a4f95d35a4_html.thumb.jpg.17ca3f71dc963a0116f39ec2efae2644.jpg" style="width: 100%; height: auto;"></a>
</p>

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

<h3 id="تحريك-شبه-العناصر-(pseudo-elements)-في-CSS">
	<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="">تحريك شبه العناصر (pseudo-elements) في CSS</a>
</h3>

<p class="response_image">
	<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=""><img alt="shiny.png" class="ipsImage ipsImage_thumbnailed" data-fileid="30267" data-unique="1q1kiohge" src="https://academy.hsoub.com/uploads/monthly_2019_06/shiny.png.754873c545757ede6d550ef2cf321787.png" style="width: 100%; height: auto;"></a>
</p>

<p class="response_descrip">
	ستتعرف في هذه المقالة على كيفية استخدام عنصر زائف (pseudo-element) لإضافة تأثير بصري على زر في CSS. يشرح أولًا ماهية شبه العناصر (أو العناصر الزائفة) وفائدتها وكيفية الاستفادة منها في إنشاء الحركات، ثم ينتقل إلى كيفية توظيفها في إنشاء زر برَّاق عبر الحركات.
</p>

<h3 id="تحريك-زر-تفضيل-التغريدة-الخاص-بتويتر-باستخدام-CSS-فقط">
	<a href="https://academy.hsoub.com/programming/css/%D8%AA%D8%AD%D8%B1%D9%8A%D9%83-%D8%B2%D8%B1-%D8%AA%D9%81%D8%B6%D9%8A%D9%84-%D8%A7%D9%84%D8%AA%D8%BA%D8%B1%D9%8A%D8%AF%D8%A9-%D8%A7%D9%84%D8%AE%D8%A7%D8%B5-%D8%A8%D8%AA%D9%88%D9%8A%D8%AA%D8%B1-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-css-%D9%81%D9%82%D8%B7-r117/" rel="">تحريك زر تفضيل التغريدة الخاص بتويتر باستخدام CSS فقط</a>
</h3>

<p class="response_image">
	<a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/programming/css/%D8%AA%D8%AD%D8%B1%D9%8A%D9%83-%D8%B2%D8%B1-%D8%AA%D9%81%D8%B6%D9%8A%D9%84-%D8%A7%D9%84%D8%AA%D8%BA%D8%B1%D9%8A%D8%AF%D8%A9-%D8%A7%D9%84%D8%AE%D8%A7%D8%B5-%D8%A8%D8%AA%D9%88%D9%8A%D8%AA%D8%B1-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-css-%D9%81%D9%82%D8%B7-r117/" rel=""><img alt="تحريك زر تفضيل التغريدة.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="30295" data-unique="hrs3pv433" src="https://academy.hsoub.com/uploads/monthly_2019_06/5d0a4f98a9d71_.thumb.jpg.5e9c6a4013a7767b6d82efc7b99200d7.jpg" style="width: 100%; height: auto;"></a>
</p>

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

<h3 id="تنبيهات-مؤقتة-باستخدام-CSS">
	<a href="https://academy.hsoub.com/programming/css/%D8%AA%D9%86%D8%A8%D9%8A%D9%87%D8%A7%D8%AA-%D9%85%D9%86%D8%A8%D8%AB%D9%82%D8%A9-%D9%88%D9%85%D9%88%D9%82%D9%88%D8%AA%D8%A9-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D8%AD%D8%B1%D9%83%D9%8A%D8%A7%D8%AA-css-r152/" rel="">تنبيهات مؤقتة باستخدام CSS</a>
</h3>

<p class="response_image">
	<a href="https://academy.hsoub.com/programming/css/%D8%AA%D9%86%D8%A8%D9%8A%D9%87%D8%A7%D8%AA-%D9%85%D9%86%D8%A8%D8%AB%D9%82%D8%A9-%D9%88%D9%85%D9%88%D9%82%D9%88%D8%AA%D8%A9-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D8%AD%D8%B1%D9%83%D9%8A%D8%A7%D8%AA-css-r152/" rel=""><img alt="css-timed-notification.png" class="ipsImage ipsImage_thumbnailed" data-fileid="30260" data-unique="rx9lav9yi" src="https://academy.hsoub.com/uploads/monthly_2019_06/css-timed-notification.png.670ffc7a42e3242e1f0ec595e46af8b5.png" style="width: 100%; height: auto;"></a>
</p>

<p class="response_descrip">
	ستتعلم في هذه المقالة البسيطة كيفية عمل تنبيهات مؤقتة بحركة جميلة باستخدام CSS فقط حتى تخطر المستخدم بوجود شيء جديد. ما سيجري تطبيقه هو إظهار تنبيه بسيط أو عبارة ما أسفل الشاشة لمدة معينة، ثم إخفاؤها. وسنضيف شريط تقدم (progress bar) لنعرف كم تبقى من الوقت حتى يختفي التنبيه.
</p>

<h3 id="كيفية-إنشاء-قائمة-متحركة-من-نوع-off-canvas-في-CSS">
	<a href="https://academy.hsoub.com/programming/css/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%A5%D9%86%D8%B4%D8%A7%D8%A1-%D9%82%D8%A7%D8%A6%D9%85%D8%A9-%D9%85%D8%AA%D8%AD%D8%B1%D9%83%D8%A9-%D9%85%D9%86-%D9%86%D9%88%D8%B9-off-canvas-%D9%81%D9%8A-css-r192/" rel="">كيفية إنشاء قائمة متحركة من نوع off-canvas في CSS</a>
</h3>

<p class="response_image">
	<a href="https://academy.hsoub.com/programming/css/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%A5%D9%86%D8%B4%D8%A7%D8%A1-%D9%82%D8%A7%D8%A6%D9%85%D8%A9-%D9%85%D8%AA%D8%AD%D8%B1%D9%83%D8%A9-%D9%85%D9%86-%D9%86%D9%88%D8%B9-off-canvas-%D9%81%D9%8A-css-r192/" rel=""><img alt="off-canvas-menu.png" class="ipsImage ipsImage_thumbnailed" data-fileid="30266" data-unique="lb1ev972d" src="https://academy.hsoub.com/uploads/monthly_2019_06/off-canvas-menu.png.78755fd51f409fd687b74f4e742d14d7.png" style="width: 100%; height: auto;"></a>
</p>

<p class="response_descrip">
	يشرح هذا المقال كيفية إنشاء قائمة تنقل من النوع الذي يكون خارج الشاشة (off-canvas)، إذ ستتعلم ببناء شيء شبيه بهذه المعاينة (انظر إلى Demo2) بحيث تكون الأيقونة التي تفتح القائمة موجودة في أعلى يسار الشاشة والحد (border) يكون اسمك من جهة اليسار.
</p>

<h3 id="تأثير-الانتقال-في-مشهد-فضائي">
	<a href="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/" rel="">تأثير الانتقال في مشهد فضائي</a>
</h3>

<p class="response_image">
	<a href="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/" rel=""><img alt="59e067b302ff5_main(5).jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="30258" data-unique="ko5jrsd7q" src="https://academy.hsoub.com/uploads/monthly_2019_06/59e067b302ff5_main(5).jpg.875333d12b424aab52c85d336c610fea.jpg" style="width: 100%; height: auto;"></a>
</p>

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

<h3 id="كيف-تنشئ-ساعة-ذات-عقارب-باستخدام-تحريكات-CSS-و-JavaScript">
	<a href="https://academy.hsoub.com/programming/css/%D9%83%D9%8A%D9%81-%D8%AA%D9%86%D8%B4%D8%A6-%D8%B3%D8%A7%D8%B9%D8%A9-%D8%B0%D8%A7%D8%AA-%D8%B9%D9%82%D8%A7%D8%B1%D8%A8-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D8%AA%D8%AD%D8%B1%D9%8A%D9%83%D8%A7%D8%AA-css-%D9%88-javascript-r502/" rel="">كيف تنشئ ساعة ذات عقارب باستخدام تحريكات CSS و JavaScript</a>
</h3>

<p class="response_image">
	<a href="https://academy.hsoub.com/programming/css/%D9%83%D9%8A%D9%81-%D8%AA%D9%86%D8%B4%D8%A6-%D8%B3%D8%A7%D8%B9%D8%A9-%D8%B0%D8%A7%D8%AA-%D8%B9%D9%82%D8%A7%D8%B1%D8%A8-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D8%AA%D8%AD%D8%B1%D9%8A%D9%83%D8%A7%D8%AA-css-%D9%88-javascript-r502/" rel=""><img alt="main2.pngfa89742b9283530bd287b10c334e3ce3.png" class="ipsImage ipsImage_thumbnailed" data-fileid="30265" data-unique="qktcbrnas" src="https://academy.hsoub.com/uploads/monthly_2019_06/main2.pngfa89742b9283530bd287b10c334e3ce3.png.d07abb9a49b48a2804d091a6053034de.png" style="width: 100%; height: auto;"></a>
</p>

<p class="response_descrip">
	يشرح هذا الدرس طريقة إنشاء ساعة متحركة باستخدام تأثيرات CSS و JavaScript. أساس إنشاء هذه الساعة سيكون باستخدام HTML و CSS وخلفية SVG إضافةً إلى بعض أسطر JavaScript. ستستعمل أيضًا التحريكات Animations والانتقالات Transitions في CSS، وسنعتمد على JavaScript لضبط التوقيت الابتدائي.
</p>

<h3 id="تحريك-وانتقال-العناصر-في-CSS3-(الانتقال)">
	<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="">تحريك وانتقال العناصر في CSS3 (الانتقال)</a>
</h3>

<p class="response_image">
	<a class="ipsAttachLink ipsAttachLink_image" 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=""><img alt="تحريك وانتقال العناصر (الانتقال).jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="30296" data-unique="732b1xv5u" src="https://academy.hsoub.com/uploads/monthly_2019_06/5d0a4f9c07a59_().thumb.jpg.068fc8149293df1800a3add353e01a50.jpg" style="width: 100%; height: auto;"></a>
</p>

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

<h3 id="تحريك-وانتقال-العناصر-في-CSS3-(التحريك)">
	<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%AA%D8%AD%D8%B1%D9%8A%D9%83-r642/" rel="">تحريك وانتقال العناصر في CSS3 (التحريك)</a>
</h3>

<p class="response_image">
	<a class="ipsAttachLink ipsAttachLink_image" 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%AA%D8%AD%D8%B1%D9%8A%D9%83-r642/" rel=""><img alt="تحريك وانتقال العناصر (التحريك).jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="30297" data-unique="k4dszvo7l" src="https://academy.hsoub.com/uploads/monthly_2019_06/5d0a4f9ead15e_().thumb.jpg.0dc303c2f0ba87ddcd82ca0f4091296e.jpg" style="width: 100%; height: auto;"></a>
</p>

<p class="response_descrip">
	يكمل هذا المقال شرح مفهوم تحريك العناصر وتطبيق التأثيرات البصرية عبر الحركات (الخاصية <a href="https://wiki.hsoub.com/CSS/animation" rel="external"><code>animation</code></a>) في CSS ويوضح كيفية تحريك العنصر بين عدة حالات مع أمثلة عملية. المواضيع التي يتحدث المقال عنها أيضًا هي الإطارات المفتاحية، ومدة الحركة ودوال التوقيت، وتأخير تشغيل الحركة، واتجاه الحركة وحالتها، وتخصيص الحركات، وكيفية تطبيق حركة بتعليمة واحدة مختزلة.
</p>

<h3 id="تأثير-الانتقال-والحركة-في-CSS">
	<a href="https://academy.hsoub.com/programming/css/%D8%AA%D8%A3%D8%AB%D9%8A%D8%B1%D8%A7%D8%AA-%D8%A7%D9%84%D8%A7%D9%86%D8%AA%D9%82%D8%A7%D9%84-%D9%88%D8%A7%D9%84%D8%AD%D8%B1%D9%83%D8%A9-%D9%81%D9%8A-css-r517/" rel="">تأثير الانتقال والحركة في CSS</a>
</h3>

<p class="response_image">
	<a href="https://academy.hsoub.com/programming/css/%D8%AA%D8%A3%D8%AB%D9%8A%D8%B1%D8%A7%D8%AA-%D8%A7%D9%84%D8%A7%D9%86%D8%AA%D9%82%D8%A7%D9%84-%D9%88%D8%A7%D9%84%D8%AD%D8%B1%D9%83%D8%A9-%D9%81%D9%8A-css-r517/" rel=""><img alt="598870d4be6c0_main5(1).png" class="ipsImage ipsImage_thumbnailed" data-fileid="30259" data-unique="ftxujrqy7" src="https://academy.hsoub.com/uploads/monthly_2019_06/598870d4be6c0_main5(1).png.5d85e1222b5f91ba6bba208cabc05c57.png" style="width: 100%; height: auto;"></a>
</p>

<p class="response_descrip">
	يُعرِّفك هذا المقال على تأثيرات الانتقالات (Transitions) والحركات (Animations) في CSS3 بالإضافة إلى الحديث عن دعم المتصفحات لها، والخصائص التي تسمح بتطبيق تأثيرات الانتقال عليها، ومدة وتوقيت تأثير الانتقال، والإطارات المفتاحية في الحركات، ودوال التوقيت، وأزمنة الحركات، وتكرار واتجاه وحالة الحركة، وغيرها.
</p>

<h3 id="أفضل-25-مكتبة-تحريك-في-CSS">
	<a href="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/" rel="">أفضل 25 مكتبة تحريك في CSS</a>
</h3>

<p class="response_image">
	<a class="ipsAttachLink ipsAttachLink_image" href="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/" rel=""><img alt="css.png" class="ipsImage ipsImage_thumbnailed" data-fileid="30261" data-unique="9o2q1uaqu" src="https://academy.hsoub.com/uploads/monthly_2019_06/css.thumb.png.510833998fba83013c5e5c83bf3aae10.png" style="width: 100%; height: auto;"></a>
</p>

<p class="response_descrip">
	يعرض لك <span style="display: none;"> </span>هذا المقال أفضل مكاتب التحريك في ‏CSS، والتي تساعدك في حفظ وقتك عند تصميم ‏موقع الويب الخاص بك من خلال استخدامك لهذه المكاتب التي تضفي بعض الديناميكية والتفاعل إلى ‏عملك، إذ تحوي هذه المكتبات على العديد من الحركات والمؤثرات لأي نوع من أنواع عناصر صفحات الويب كالنصوص، الصور، الإطارات، الأزرار، والبطاقات والعديد غيرها.
</p>

<h3 id="تأثيرات-إبداعية-لإضافة-وإزالة-عناصر-قائمة-باستخدام-تحريكات-CSS">
	<a href="https://academy.hsoub.com/programming/css/%D8%AA%D8%A3%D8%AB%D9%8A%D8%B1%D8%A7%D8%AA-%D8%A5%D8%A8%D8%AF%D8%A7%D8%B9%D9%8A%D8%A9-%D9%84%D8%A5%D8%B6%D8%A7%D9%81%D8%A9-%D9%88%D8%A5%D8%B2%D8%A7%D9%84%D8%A9-%D8%B9%D9%86%D8%A7%D8%B5%D8%B1-%D9%82%D8%A7%D8%A6%D9%85%D8%A9-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D8%AA%D8%AD%D8%B1%D9%8A%D9%83%D8%A7%D8%AA-css3-r233/" rel="">تأثيرات إبداعية لإضافة وإزالة عناصر قائمة باستخدام تحريكات CSS</a>
</h3>

<p class="response_image">
	<a href="https://academy.hsoub.com/programming/css/%D8%AA%D8%A3%D8%AB%D9%8A%D8%B1%D8%A7%D8%AA-%D8%A5%D8%A8%D8%AF%D8%A7%D8%B9%D9%8A%D8%A9-%D9%84%D8%A5%D8%B6%D8%A7%D9%81%D8%A9-%D9%88%D8%A5%D8%B2%D8%A7%D9%84%D8%A9-%D8%B9%D9%86%D8%A7%D8%B5%D8%B1-%D9%82%D8%A7%D8%A6%D9%85%D8%A9-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D8%AA%D8%AD%D8%B1%D9%8A%D9%83%D8%A7%D8%AA-css3-r233/" rel=""><img alt="css3-list-animation-effect.png" class="ipsImage ipsImage_thumbnailed" data-fileid="30262" data-unique="uoi6z7yra" src="https://academy.hsoub.com/uploads/monthly_2019_06/css3-list-animation-effect.png.8af90f55d58ca7384262dfdeecf5bac8.png" style="width: 100%; height: auto;"></a>
</p>

<p class="response_descrip">
	يشرح هذا المقال استخدام الحركات (animations) والانتقالات (transitions) في CSS3 لإعطاء تأثيرات عند إضافة أو إزالة عناصر من قائمة بالإستعانة بتقنية التخزين المحلي للمتصفح، إذ من الضروري أن يكون للانتقالات والحركات هدف واضح ومحدّد، ألا وهو تحسين تجربة المستخدم.
</p>

<h3 id="كيفية-إنشاء-قائمة-تنقل-دائرية-باستخدام-CSS-Transforms">
	<a href="https://academy.hsoub.com/programming/css/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%A5%D9%86%D8%B4%D8%A7%D8%A1-%D9%82%D8%A7%D8%A6%D9%85%D8%A9-%D8%AA%D9%86%D9%82%D9%84-%D8%AF%D8%A7%D8%A6%D8%B1%D9%8A%D8%A9-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-css-transforms-r214/" rel="">كيفية إنشاء قائمة تنقل دائرية باستخدام CSS Transforms</a>
</h3>

<p class="response_image">
	<a href="https://academy.hsoub.com/programming/css/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%A5%D9%86%D8%B4%D8%A7%D8%A1-%D9%82%D8%A7%D8%A6%D9%85%D8%A9-%D8%AA%D9%86%D9%82%D9%84-%D8%AF%D8%A7%D8%A6%D8%B1%D9%8A%D8%A9-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-css-transforms-r214/" rel=""><img alt="circular-menu-css.png" class="ipsImage ipsImage_thumbnailed" data-fileid="30271" data-unique="s1lfrnugj" src="https://academy.hsoub.com/uploads/monthly_2019_06/circular-menu-css.png.bc46b2f204cccdb3f9cc444cebdd6c3a.png" style="width: 100%; height: auto;"></a>
</p>

<p class="response_descrip">
	يعلمك هذا المقال كيفية إنشاء قائمة تنقل (navigation) دائرية الشكل باستخدام الانتقالات في CSS. يراعي المقال شرح ذلك خطوة بخطوة بالإضافة إلى الحسابات والمنطق البسيط وراء هذه الطريقة حتى يتسنى لك فهم كيفية عمل هذه القائمة المميزة. 
</p>

<h3 id="استخدام-المحدد-target:-ضمن-CSS-لإنشاء-تأثيرات-واجهة-المستخدم-UI-بدون-JavaScript">
	<a href="https://academy.hsoub.com/programming/css/%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D8%A7%D9%84%D9%85%D8%AD%D8%AF%D8%AF-target-%D8%B6%D9%85%D9%86-css-%D9%84%D8%A5%D9%86%D8%B4%D8%A7%D8%A1-%D8%AA%D8%A3%D8%AB%D9%8A%D8%B1%D8%A7%D8%AA-%D9%88%D8%A7%D8%AC%D9%87%D8%A9-%D8%A7%D9%84%D9%85%D8%B3%D8%AA%D8%AE%D8%AF%D9%85-ui-%D8%A8%D8%AF%D9%88%D9%86-javascript-r83/" rel="">استخدام المحدد target: ضمن CSS لإنشاء تأثيرات واجهة المستخدم UI بدون JavaScript</a>
</h3>

<p class="response_image">
	<a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/programming/css/%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D8%A7%D9%84%D9%85%D8%AD%D8%AF%D8%AF-target-%D8%B6%D9%85%D9%86-css-%D9%84%D8%A5%D9%86%D8%B4%D8%A7%D8%A1-%D8%AA%D8%A3%D8%AB%D9%8A%D8%B1%D8%A7%D8%AA-%D9%88%D8%A7%D8%AC%D9%87%D8%A9-%D8%A7%D9%84%D9%85%D8%B3%D8%AA%D8%AE%D8%AF%D9%85-ui-%D8%A8%D8%AF%D9%88%D9%86-javascript-r83/" rel=""><img alt="استخدام المحدد target.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="30292" data-unique="4c3wx8e0q" src="https://academy.hsoub.com/uploads/monthly_2019_06/5d0a4f901f418_target.thumb.jpg.c410768ef4d801f12553718725581653.jpg" style="width: 100%; height: auto;"></a>
</p>

<p class="response_descrip">
	يشرح هذا المقال كيفية استخدام المحدد target: ضمن CSS لتحديد وتنسيق مظهر العنصر أو الفقرة الموجودة ضمن نفس الصفحة والمعرفة عبر الخاصية href ضمن رابط ما، إذ يتم تطبيق هذه التنسيقات على العنصر الهدف عند النقر على ذلك الرابط بدون اللجوء لاستخدام JavaScript. يشرح المقال أيضًا كيفية استعمال الخاصية <a href="https://wiki.hsoub.com/CSS/animation" rel="external"><code>animation</code></a> لتطبيق تنسيق ما بشكل متدرج.
</p>
]]></description><guid isPermaLink="false">692</guid><pubDate>Wed, 03 Jul 2019 13:39:00 +0000</pubDate></item><item><title>&#x627;&#x644;&#x62D;&#x631;&#x643;&#x627;&#x62A; &#x627;&#x644;&#x645;&#x62A;&#x639;&#x62F;&#x62F;&#x629; &#x627;&#x644;&#x645;&#x62A;&#x632;&#x627;&#x645;&#x646;&#x629;</title><link>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/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2019_06/5d0f7e8cbdd18_.jpg.c694d57ab1229a8242647dd4fb9661ed.jpg" /></p>

<p>
	سنتحدث في هذه المقالة عن كيفية استخدام عدة مجموعات من <a href="https://wiki.hsoub.com/CSS/@keyframes" rel="external">الإطارات المفتاحية</a> (keyframes) تعمل بشكل متزامن لتوليد حركة معقدة مؤلفة من عدة حركات.
</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>
		<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>
		الحركات المتعددة المتزامنة
	</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>
	في بعض الأحيان، قد نرغب في مزامنة عدة حركات، بشكل يكون لكل حركة توقيتها الخاص. من الأمثلة الجيدة على هذا إشارة المرور.
</p>

<p>
	لدينا هنا نموذج بسيط لإشارة المرور (في المملكة المتحدة):
</p>

<figure style="text-align: center;"><img alt="traffic-lights-min.gif" class="ipsImage ipsImage_thumbnailed" data-fileid="30324" data-unique="b1kqzbdb3" src="https://academy.hsoub.com/uploads/monthly_2019_06/traffic-lights-min.gif.9db434fa6c85d7994de32e93672388dc.gif"><figcaption>
		المصدر: <a href="http://codepen.io/donovanh/pen/ogRRdR?editors=010" rel="external nofollow">http://codepen.io/donovanh/pen/ogRRdR?editors=010</a> 
	</figcaption></figure><p>
	لدينا ثلاثة مصابيح، وكل منها يضيء وينطفئ بنمط خاص به. يمكننا إنشاء هذا عن طريق إعطاء كل مصباح حركةً خاصَّةً به.
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_5953_6" style="">
<span class="pun">.</span><span class="pln">red </span><span class="pun">{</span><span class="pln">
  animation</span><span class="pun">:</span><span class="pln"> red </span><span class="lit">10s</span><span class="pln"> linear infinite</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
</span><span class="pun">.</span><span class="pln">amber </span><span class="pun">{</span><span class="pln">
  animation</span><span class="pun">:</span><span class="pln"> amber </span><span class="lit">10s</span><span class="pln"> linear infinite</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
</span><span class="pun">.</span><span class="pln">green </span><span class="pun">{</span><span class="pln">
  animation</span><span class="pun">:</span><span class="pln"> green </span><span class="lit">10s</span><span class="pln"> linear infinite</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></pre>

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

<p>
	أثناء إنشاء هذا المثال، وجدت أنه من المفيد النظر إلى المصابيح كشبكة (grid). تحدث الحركات من اليسار إلى اليمين، إذ أنّ كل مصباح سيكون إما في حالة انطفاء أو إضاءة في كل لحظة.
</p>

<figure><img alt="traffic-light-grid.png" class="ipsImage ipsImage_thumbnailed" data-fileid="30323" data-unique="h16sv6fut" src="https://academy.hsoub.com/uploads/monthly_2019_06/traffic-light-grid.png.0b5977d362f75937766fbf4b848e5780.png"><figcaption>
		مخطط يوضح زمن تشغيل وإطفاء كل ضوء من أضواء إشارة المرور.
	</figcaption></figure><p>
	تنقسم الشبكة إلى 5 أعمدة. هذا يعني أنه يمكننا التعامل مع "أخماس" كل منها تستغرق ‎20% من مدة الحركة، وإنشاء مجموعات <a href="https://wiki.hsoub.com/CSS/@keyframes" rel="external">الإطارات المفتاحية</a> من تلك الأخماس.
</p>

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

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_5953_8" style="">
<span class="lit">@keyframes</span><span class="pln"> red </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">
    background</span><span class="pun">:</span><span class="pln"> black</span><span class="pun">;</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">
  </span><span class="lit">2</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><span class="pln">
    background</span><span class="pun">-</span><span class="pln">color</span><span class="pun">:</span><span class="pln"> red</span><span class="pun">;</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">
  </span><span class="lit">42</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">
    background</span><span class="pun">:</span><span class="pln"> black</span><span class="pun">;</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">
</span><span class="pun">}</span></pre>

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

<p>
	مع إضاءة المصباح الأحمر، يُنتظر أن يضيء المصباح البرتقالي على الشبكة.
</p>

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

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_5953_10" style="">
<span class="lit">@keyframes</span><span class="pln"> amber </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">20</span><span class="pun">%</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
    background</span><span class="pun">:</span><span class="pln"> black</span><span class="pun">;</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">
  </span><span class="lit">22</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><span class="pln">
    background</span><span class="pun">:</span><span class="pln"> </span><span class="com">#FF7E00;</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">
  </span><span class="lit">42</span><span class="pun">%,</span><span class="pln"> </span><span class="lit">80</span><span class="pun">%</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
    background</span><span class="pun">:</span><span class="pln"> black</span><span class="pun">;</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">
  </span><span class="lit">82</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">
    background</span><span class="pun">:</span><span class="pln"> </span><span class="com">#FF7E00;</span><span class="pln">
  </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_5953_12" style="">
<span class="lit">@keyframes</span><span class="pln"> green </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">40</span><span class="pun">%</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
    background</span><span class="pun">:</span><span class="pln"> black</span><span class="pun">;</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">
  </span><span class="lit">42</span><span class="pun">%,</span><span class="pln"> </span><span class="lit">80</span><span class="pun">%</span><span class="pln"> </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><span class="pln">
  </span><span class="lit">82</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">
    background</span><span class="pun">:</span><span class="pln"> black</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="http://codepen.io/donovanh/pen/ogRRdR?editors=010" rel="external nofollow">من هنا</a>.
</p>

<h2 id="-">
	مراجع أخرى
</h2>

<p>
	لمعرفة المزيد عن صياغة <a href="https://wiki.hsoub.com/CSS/@keyframes" rel="external">الإطارات المفتاحية</a>، راجع المقال «<a href="https://academy.hsoub.com/programming/css/%D8%B5%D9%8A%D8%A7%D8%BA%D8%A9-%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-%D9%84%D9%84%D8%AD%D8%B1%D9%83%D8%A7%D8%AA-r695/" rel="">صياغة الإطارات المفتاحية للحركات</a>».
</p>

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

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

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

<ul>
<li>
		ترجمة وبتصرف للفصل multiple 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/%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%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/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">696</guid><pubDate>Wed, 03 Jul 2019 13:09:00 +0000</pubDate></item><item><title>&#x635;&#x64A;&#x627;&#x63A;&#x629; &#x627;&#x644;&#x625;&#x637;&#x627;&#x631;&#x627;&#x62A; &#x627;&#x644;&#x645;&#x641;&#x62A;&#x627;&#x62D;&#x64A;&#x629; &#x644;&#x644;&#x62D;&#x631;&#x643;&#x627;&#x62A;</title><link>https://academy.hsoub.com/programming/css/%D8%B5%D9%8A%D8%A7%D8%BA%D8%A9-%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-%D9%84%D9%84%D8%AD%D8%B1%D9%83%D8%A7%D8%AA-r695/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2019_06/5d1770cbbeee0_.jpg.33152f640e6087ebbcde6d27732b48d6.jpg" /></p>

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

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_4340_6" style="">
<span class="pun">@-</span><span class="pln">webkit</span><span class="pun">-</span><span class="pln">keyframes NAME</span><span class="pun">-</span><span class="pln">YOUR</span><span class="pun">-</span><span class="pln">ANIMATION </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"> 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><span class="pln">
  </span><span class="lit">100</span><span class="pun">%</span><span class="pln"> </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"> </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">keyframes NAME</span><span class="pun">-</span><span class="pln">YOUR</span><span class="pun">-</span><span class="pln">ANIMATION </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"> 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><span class="pln">
  </span><span class="lit">100</span><span class="pun">%</span><span class="pln"> </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"> </span><span class="pun">}</span><span class="pln">
</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">keyframes NAME</span><span class="pun">-</span><span class="pln">YOUR</span><span class="pun">-</span><span class="pln">ANIMATION </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"> 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><span class="pln">
  </span><span class="lit">100</span><span class="pun">%</span><span class="pln"> </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"> </span><span class="pun">}</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
</span><span class="lit">@keyframes</span><span class="pln"> NAME</span><span class="pun">-</span><span class="pln">YOUR</span><span class="pun">-</span><span class="pln">ANIMATION </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"> 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><span class="pln">
  </span><span class="lit">100</span><span class="pun">%</span><span class="pln"> </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"> </span><span class="pun">}</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

</span><span class="com">#box {</span><span class="pln">
  </span><span class="pun">-</span><span class="pln">webkit</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">YOUR</span><span class="pun">-</span><span class="pln">ANIMATION </span><span class="lit">5s</span><span class="pln"> infinite</span><span class="pun">;</span><span class="pln"> </span><span class="com">/* Safari 4+ */</span><span class="pln">
  </span><span class="pun">-</span><span class="pln">moz</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">YOUR</span><span class="pun">-</span><span class="pln">ANIMATION </span><span class="lit">5s</span><span class="pln"> infinite</span><span class="pun">;</span><span class="pln"> </span><span class="com">/* Fx 5+ */</span><span class="pln">
  </span><span class="pun">-</span><span class="pln">o</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">YOUR</span><span class="pun">-</span><span class="pln">ANIMATION </span><span class="lit">5s</span><span class="pln"> infinite</span><span class="pun">;</span><span class="pln"> </span><span class="com">/* Opera 12+ */</span><span class="pln">
  animation</span><span class="pun">:</span><span class="pln">         NAME</span><span class="pun">-</span><span class="pln">YOUR</span><span class="pun">-</span><span class="pln">ANIMATION </span><span class="lit">5s</span><span class="pln"> infinite</span><span class="pun">;</span><span class="pln"> </span><span class="com">/* IE 10+, Fx 29+ */</span><span class="pln">
</span><span class="pun">}</span></pre>

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

<h2 id="-">
	الخطوات المتعددة
</h2>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_4340_8" style="">
<span class="lit">@keyframes</span><span class="pln"> fontbulger </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">
    font</span><span class="pun">-</span><span class="pln">size</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="lit">30</span><span class="pun">%</span><span class="pln"> </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">15px</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">
    font</span><span class="pun">-</span><span class="pln">size</span><span class="pun">:</span><span class="pln"> </span><span class="lit">12px</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="com">#box {</span><span class="pln">
   animation</span><span class="pun">:</span><span class="pln"> fontbulger </span><span class="lit">2s</span><span class="pln"> infinite</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	إن كان للحركة خاصيتي البداية والنهاية نفسهما، فيمكنك صياغة ذلك بوضع فاصلة بين القيمتين <code>0%</code> و <code>‏100%</code>‏:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_4340_10" style="">
<span class="lit">@keyframes</span><span class="pln"> fontbulger </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="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">10px</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">
    font</span><span class="pun">-</span><span class="pln">size</span><span class="pun">:</span><span class="pln"> </span><span class="lit">12px</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://wiki.hsoub.com/CSS/animation-direction" rel="external">animation-direction</a> القيمة <code>alternate</code>.
</p>

<h2 id="-">
	استدعاء إطارات الحركة المفتاحية عبر خاصيات منفصلة
</h2>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_4340_14" style="">
<span class="pun">.</span><span class="pln">box </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"> bounce</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">4s</span><span class="pun">;</span><span class="pln"> </span><span class="com">/* Xms :أو */</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"> </span><span class="lit">10</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="com">/* normal :أو */</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">out</span><span class="pun">;</span><span class="pln"> </span><span class="com">/* ease, ease-in, ease-in-out, linear, cubic-bezier(x1, y1, x2, y2) :أو */</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="com">/* backwards, both, none :أو */</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="lit">2s</span><span class="pun">;</span><span class="pln"> </span><span class="com">/* Xms :أو */</span><span class="pln">
</span><span class="pun">}</span></pre>

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

<p>
	في الصياغة المختصرة، ضع فاصلة بين كل القيم. لا يهم ترتيب القيم إلا في حال استخدام كل من المدة (duration) والتأخير (delay)، إذ يجب أن يكونا بهذا الترتيب. في المثال أدناه: <code>1s</code> = المدة، <code>2s</code> = التأخير، <code>3</code> = التكرار.
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_4340_16" style="">
<span class="pln">animation</span><span class="pun">:</span><span class="pln"> test </span><span class="lit">1s</span><span class="pln"> </span><span class="lit">2s</span><span class="pln"> </span><span class="lit">3</span><span class="pln"> alternate backwards</span></pre>

<h2 id="-transform-animation-">
	الجمع بين الخاصيتين <code>transform</code> و <code>animation</code>
</h2>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_4340_18" style="">
<span class="lit">@keyframes</span><span class="pln"> infinite</span><span class="pun">-</span><span class="pln">spinning </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">from</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
    transform</span><span class="pun">:</span><span class="pln"> rotate</span><span class="pun">(</span><span class="lit">0deg</span><span class="pun">);</span><span class="pln">
  </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"> rotate</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>

<h2 id="-">
	الحركات المتعددة
</h2>

<p>
	يمكنك الفصل بين القيم بفواصل للتصريح بحركات متعددة على مُحدّد (selector) معيّن:
</p>

<pre class="ipsCode">
<span class="hljs-selector-class">.animate-this</span> {
   <span class="hljs-attribute">animation</span>: 
      first-animation <span class="hljs-number">2s</span> infinite, 
      another-animation <span class="hljs-number">1s</span>;
}
</pre>

<h2 id="-steps-">
	الدالة‏ Steps()<code>‎</code>
</h2>

<p>
	تتحكم الدالة Steps()<code>‎</code> بعدد <a href="https://wiki.hsoub.com/CSS/@keyframes" rel="external">الإطارات المفتاحية</a> (keyframes) التي ستُصَيَّر في الإطار الزمني للحركة. في المثال التالي:
</p>

<pre class="ipsCode">
@<span class="hljs-keyword">keyframes</span> move {
  <span class="hljs-selector-tag">from</span> { <span class="hljs-attribute">top</span>: <span class="hljs-number">0</span>; <span class="hljs-attribute">left</span>: <span class="hljs-number">0</span>; }
  <span class="hljs-selector-tag">to</span>   { <span class="hljs-attribute">top</span>: <span class="hljs-number">100px</span>; <span class="hljs-attribute">left</span>: <span class="hljs-number">100px</span>; }
}
</pre>

<p>
	إذا استخدمت Steps(10)<code>‎</code> في الخاصية <a href="https://wiki.hsoub.com/CSS/animation" rel="external">animation</a>، فلن تُعرَض إلا 10 <a href="https://wiki.hsoub.com/CSS/@keyframes" rel="external">إطارات مفتاحية</a> في الوقت المخصص.
</p>

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

<p>
	يمكن أن يكون هذا مناسبًا للحركات التي تعتمد على تمرير الصور (spritesheet animation)، مثل <a href="http://jsfiddle.net/simurai/CGmCe/light/" rel="external nofollow">هذا المثال</a>.
</p>

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

<p>
	جلبنا بيانات دعم المتصفحات المعروضة هنا من الموقع <a href="http://caniuse.com/#feat=css-animation" rel="external nofollow">Caniuse</a>، يمكنك أن تجد تفاصيل أكثر عليه. يشير الرقم الموجود إلى جوار اسم المتصفح إلى أنّ ذلك المتصفح يدعم الميزة منذ ذلك الإصدار وما فوق.
</p>

<p>
	<img alt="support.png" class="ipsImage ipsImage_thumbnailed" data-fileid="30322" data-unique="ivi7lgln5" src="https://academy.hsoub.com/uploads/monthly_2019_06/support.png.86150d97e003c09b657fa29688fb82ed.png"></p>

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

<ul>
<li>
		ترجمة وبتصرف للمقالة <a href="https://css-tricks.com/snippets/css/keyframe-animation-syntax" rel="external nofollow">Keyframe Animation Syntax</a> لصاحبها Chris Coyier.
	</li>
</ul>
]]></description><guid isPermaLink="false">695</guid><pubDate>Sat, 29 Jun 2019 13:00:00 +0000</pubDate></item><item><title>&#x62A;&#x637;&#x628;&#x64A;&#x642; &#x639;&#x645;&#x644;&#x64A;: &#x627;&#x644;&#x625;&#x637;&#x627;&#x631;&#x627;&#x62A; &#x627;&#x644;&#x645;&#x641;&#x62A;&#x627;&#x62D;&#x64A;&#x629;</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%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/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2019_06/5d0e8143edd16_.jpg.58d97494fe341d3e508c2bdb79828ae1.jpg" /></p>

<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%AD%D8%B1%D9%83%D8%A7%D8%AA-r693/" rel="">المقالة السابقة</a> على خاصيات الحركات، ورأينا كيف أنَّها تعتمد على <a href="https://wiki.hsoub.com/CSS/@keyframes" rel="external">الإطارات المفتاحية</a> (keyframes). سنلقي في هذه المقالة نظرة أعمق على <a href="https://wiki.hsoub.com/CSS/@keyframes" rel="external">الإطارات المفتاحية</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>
		<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>
		تطبيق عملي: الإطارات المفتاحية
	</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>. الأول، هو صياغة بديلة قد تراها في بعض الشيفرات، وتستخدم الكلمات <code>from</code> و <code>to</code>.
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_7607_6" style="">
<span class="lit">@keyframes</span><span class="pln"> name </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">from</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">
  to </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></pre>

<p>
	هذه الطريقة البسيطة يمكن أن تكون بديلًا عن كتابة <code>‏0%</code> و <code>‏100%</code>، وقد تكون أسهل للفهم، ومناسبة للحركات البسيطة.
</p>

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

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

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_7607_8" style="">
<span class="lit">@keyframes</span><span class="pln"> name </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">20</span><span class="pun">%</span><span class="pln"> </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><span class="pln">
  </span><span class="lit">100</span><span class="pun">%</span><span class="pln"> </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">
  </span><span class="pun">}</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	في هذا المثال، سيبدأ العنصر بتعتيمٍ (<a href="https://wiki.hsoub.com/CSS/opacity" rel="external">opacity</a>) يساوي <code>0</code>، وسيظل غير مرئي حتى انقضاء 20٪ من توقيت الحركة، ثم ستبدأ قيمة العتامة بالتحرُّك تُجاه القيمة <code>1</code>.
</p>

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

<h2 id="-save">
	مثال: تأثير اهتزاز الزر Save
</h2>

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

<figure style="text-align: center;"><img alt="save_button-min.gif" class="ipsImage ipsImage_thumbnailed" data-fileid="30318" data-unique="aux7eryvt" src="https://academy.hsoub.com/uploads/monthly_2019_06/save_button-min.gif.277172d0ac028a0b291129c2e7ccfe65.gif"><figcaption>
		المصدر: <a href="http://codepen.io/donovanh/pen/KwEQdQ" rel="external nofollow">http://codepen.io/donovanh/pen/KwEQdQ</a>
	</figcaption></figure><p>
	قبل إضافة أي حركة، فقد نسّقتُ الزر لجعله يبدو مثل زر CodePen. حيث جعلت له حدًّا برتقاليًا في الأعلى، وتدرّجًا داكنًا، وجلعت لون النص فيه أبيضًا. وقد استخدمت التموضع المطلق (absolute positioning) في المثال للتأكد من أنّ الزر سيكون في منتصف الشاشة.
</p>

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

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_7607_14" style="">
<span class="pln">button </span><span class="pun">{</span><span class="pln">
  animation</span><span class="pun">:</span><span class="pln"> wiggle </span><span class="lit">2s</span><span class="pln"> linear infinite</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	في هذه الحالة، سنطبّق مجموعة من <a href="https://wiki.hsoub.com/CSS/@keyframes" rel="external">الإطارات المفتاحية</a> تحمل الاسم <code>wiggle</code>، وستمتد الحركة لمدة ثانيتين باستخدام <a href="https://wiki.hsoub.com/CSS/timing-function" rel="external">دالة التوقيت</a> <code>linear</code>. كما سنستخدم أيضًا قيمة جديدة، وهي <code>infinite</code>.
</p>

<p>
	القيمة <code>infinite</code> هنا تخص الخاصية <a href="https://wiki.hsoub.com/CSS/animation-iteration-count" rel="external">animation-iteration-count</a>. افتراضيًا، ستتكرر الحركة مرة واحدة فقط، ولكن يمكننا أن نجعلها تتكرر عددًا محددًا من المرات أو تتكرر إلى الأبد. في مثالنا هذا، سوف تتكرر الحركة عددًا غير محدود من المرات.
</p>

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

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_7607_17" style="">
<span class="lit">@keyframes</span><span class="pln"> wiggle </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">7</span><span class="pun">%</span><span class="pln"> </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">0</span><span class="pun">);</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">
  </span><span class="lit">15</span><span class="pun">%</span><span class="pln"> </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">15deg</span><span class="pun">);</span><span class="pln">
  </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">
    transform</span><span class="pun">:</span><span class="pln"> rotateZ</span><span class="pun">(</span><span class="lit">10deg</span><span class="pun">);</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">
  </span><span class="lit">25</span><span class="pun">%</span><span class="pln"> </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">10deg</span><span class="pun">);</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">
  </span><span class="lit">30</span><span class="pun">%</span><span class="pln"> </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">6deg</span><span class="pun">);</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">
  </span><span class="lit">35</span><span class="pun">%</span><span class="pln"> </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">4deg</span><span class="pun">);</span><span class="pln">
  </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="pun">{</span><span class="pln">
    transform</span><span class="pun">:</span><span class="pln"> rotateZ</span><span class="pun">(</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>
	لقد أعطينا المتصفح سلسلة من النقاط المرحلية (waypoints) ليُحرِّك العنصر بينها. يُدوَّر الزر "Save" عند كل نقطة على المحور z. تبدأ الزوايا واسعةً، ثم تصغُر خلال الحركة.
</p>

<p>
	إليك كيف تميل الحركة الزر للخلف وللأمام مع مرور الوقت:
</p>

<figure style="text-align: center;"><a class="ipsAttachLink ipsAttachLink_image" data-fileid="30319" href="https://academy.hsoub.com/uploads/monthly_2019_06/wiggle-min.gif.abf00a5b38c1d6e294929dc82b99e60a.gif" rel=""><img alt="wiggle-min.gif" class="ipsImage ipsImage_thumbnailed" data-fileid="30319" data-unique="ld6lki92k" src="https://academy.hsoub.com/uploads/monthly_2019_06/wiggle-min.thumb.gif.7cc9a2d70d34b4ea65ed61e874f23157.gif"></a>

	<figcaption>
		المصدر: <a href="http://codepen.io/donovanh/pen/pvXJqp" rel="external nofollow">http://codepen.io/donovanh/pen/pvXJqp</a>
	</figcaption></figure><p>
	يمكننا أن نرى أنّ المتصفح ينشئ الخطوات الفاصلة بين <a href="https://wiki.hsoub.com/CSS/@keyframes" rel="external">الإطارات المفتاحية</a>. وبدون الاعتماد على <a href="https://wiki.hsoub.com/CSS/timing-function" rel="external">دوال التوقيت</a> المعقدة، نجحت هذه الحركة في إضافة الكثير من التميز إلى الزر.
</p>

<p>
	يمكنك مطالعة <a href="http://codepen.io/donovanh/pen/KwEQdQ" rel="external nofollow">مثال زر "Save" على CodePen</a>.
</p>

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

<p>
	لقد أنشأت <a href="http://codepen.io/donovanh/pen/azgjMz?editors=010" rel="external nofollow">مشروع CodePen جديد يتضمن عنصرًا متحركًا واحدًا</a>. حيث يستخدم <code>animation-timing-function</code> داخل الإطارات المفتاحية، مع سلسلة من الإطارات المفتاحية التي تخلق حركة معقدة نسبيًا.
</p>

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

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

<ul>
<li>
		ترجمة وبتصرف للفصل keyframes 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%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/%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/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">694</guid><pubDate>Wed, 26 Jun 2019 08:02:00 +0000</pubDate></item><item><title>&#x62E;&#x627;&#x635;&#x64A;&#x627;&#x62A; &#x627;&#x644;&#x62D;&#x631;&#x643;&#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%AD%D8%B1%D9%83%D8%A7%D8%AA-r693/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2019_06/5d0f7df96b490_.jpg.044915c85bcdd5c9e2ff8522b24cead0.jpg" /></p>

<p>
	قبل إعطاء المزيد من أمثلة التحريك، دعونا نلقي نظرة على خاصيات التحريك أولًا.
</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>
		<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>
		خاصيات الحركات
	</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>
	على غرار الخاصية <code><a href="https://wiki.hsoub.com/CSS/transition" rel="external">transition</a></code>، يمكن كتابة الخاصية <code><a href="https://wiki.hsoub.com/CSS/animation" rel="external">animation</a></code> باستخدام الصياغة المختزلة، أو يمكن تحديد أي من هذه الخاصيات بشكل منفرد.
</p>

<h2 id="-animation-delay-">
	الخاصية <code>animation-delay</code>
</h2>

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

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

<p>
	من الممكن إعطاء هذه الخاصية قيمة سالبة، مثل <code>‎</code>-1s. سيؤدي ذلك إلى بدء الحركة كما لو أنّه قد مرّت ثانية من الزمن سلفًا.
</p>

<h2 id="-animation-direction-">
	الخاصية <code>animation-direction</code>
</h2>

<p>
	الحركات عادة ما تبدأ من 0٪ وتنتهي عند 100٪، حيث تمثل 0٪ نقطة بداية الحركة، وتمثل 100٪ نقطة النهاية. تأخذ الخاصية <a href="https://wiki.hsoub.com/CSS/animation-direction" rel="external">animation-direction</a> القيم <code>normal</code> و <code>reverse</code> و <code>alternate</code> و <code>alternate-reverse</code> ، وتُستخدم للتحكم في اتجاه الحركة.
</p>

<p>
	تؤدي القيمة <code>reverse</code> إلى جعل الحركة تحدث (وتدور) بشكل معكوس، أي من 100٪ إلى 0٪، بينما تجعل القيمة <code>alternate</code> الحركةَ تحدث من 0٪ إلى 100٪، وتعود مرة أخرى إلى 0٪.
</p>

<h2 id="-animation-duration-">
	الخاصية <code>animation-duration</code>
</h2>

<p>
	تمثل هذه الخاصية طول الحركة. على غرار <a href="https://wiki.hsoub.com/CSS/transition-duration" rel="external">transition-duration</a>، تأخذ هذه الخاصية قيمة مثل <code>1s</code>، التي تمثل ثانية واحدة، أو <code>200ms</code>، التي تمثل مئتي ميلي ثانية.
</p>

<h2 id="-animation-fill-mode-">
	الخاصية <code>animation-fill-mode</code>
</h2>

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

<p>
	يؤدي استخدام القيمة <code>forwards</code> إلى جعل الحركة تنتهي وتتوقف عند الإطار الرئيسي الأخير. فيما تعود القيمة <code>backwards</code> إلى الإطار الرئيسي الأول عندما تنتهي الحركة.
</p>

<p>
	يمكنك مطالعة <a href="http://hop.ie/" rel="external nofollow">هذا المثال على Hop.ie</a>. تحدث الحركة مرة واحدة، وتنتهي عند الإطار الأخير. وذلك بسبب استخدام القيمة <code>forwards</code>.
</p>

<h2 id="-animation-iteration-count-">
	الخاصية <code>animation-iteration-count</code>
</h2>

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

<h2 id="-animation-name-">
	الخاصية <code>animation-name</code>
</h2>

<p>
	تشير الخاصية <a href="https://wiki.hsoub.com/CSS/animation-name" rel="external">animation-name</a> إلى الإطارات المفتاحية المرتبطة بالحركة. على سبيل المثال، إذا تم تعيين <code>animation-name</code> عند القيمة <code>foo</code>، فسيتم استخدام مجموعة الإطارات المفتاحية ذات الاسم <code>foo</code> المُعرّفة على النحو التالي:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_7129_11" style="">
<span class="lit">@keyframes</span><span class="pln"> foo </span><span class="pun">{</span><span class="pln">
  </span><span class="pun">...</span><span class="pln">
</span><span class="pun">}</span></pre>

<h2 id="-animation-play-state-">
	الخاصية <code>animation-play-state</code>
</h2>

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

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

<p>
	تأخذ هذه الخاصية نفس القيمة التي تأخذها الخاصية <a href="https://wiki.hsoub.com/CSS/transition-timing-function" rel="external">transition-timing-function</a>، ولكن مع اختلاف طفيف. فبينما تنطبق دوال التوقيت، مثل <code>ease-out</code>، على عملية الانتقال (transition) بأكملها، تنطبق دالة التوقيت الخاصة بالتحريك (animation) بين الإطارات المفتاحية.
</p>

<p>
	هذا يعني أنّ الإطارات المفتاحية التالية ستشهد بداية سريعة للحركة ثم تتباطأ الحركة مع الاقتراب من 50٪، ثم تُسرَّع من جديد قبل أن تتباطأ مع الاقتراب من 100٪.
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_7129_14" style="">
<span class="lit">@keyframes</span><span class="pln"> foo </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="com">/* ease-out التحريك يبدأ بسرعة ثم تجعله الدالة 
    % يتباطأ مع الاقتراب من 50   */</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">
    </span><span class="com">/* مجددا يبدأ بسرعة ثم يتباطأ مع الاقتراب من %100 */</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">
    </span><span class="com">/* النهاية*/</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">
</span><span class="pun">}</span></pre>

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

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

<h2 id="-">
	استخدام دوال التوقيت ضمن الإطارات المفتاحية
</h2>

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

<p>
	هذا يعني أنه إذا أردت تحديد أربع <a href="https://wiki.hsoub.com/CSS/@keyframes" rel="external">إطارات مفتاحية</a>، فستطُبّق دالة التوقيت على كلٍّ منها. فمثلًا، سوف تبطِّئ دالة التوقيت <code>ease-out</code> الحركة عند الاقتراب من نهاية كل إطار مفتاحي.
</p>

<p>
	لهذا السبب، عادةً ما يُفضل استخدام دالة التوقيت <code>linear</code>، والتحكم في السرعة على أساس كل إطار على حدة:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_7129_18" style="">
<span class="lit">@keyframes</span><span class="pln"> </span><span class="kwd">my</span><span class="pun">-</span><span class="pln">animation </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">
  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"> linear</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">
  </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">out</span><span class="pun">;</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	في هذه الحالة، سيكون النصف الأول من الحركة خطيًا، بينما يستخدم النصف الثاني دالة التوقيت <code>ease-out</code>.
</p>

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

<p>
	لقد أنشأت <a href="http://codepen.io/donovanh/pen/MYMJRd?editors=010" rel="external nofollow">مثالًا توضيحيًّا على CodePen</a>. الخاصيات مُدرجة في <a href="https://wiki.hsoub.com/CSS" rel="external">CSS</a>. حاول تغيير بعض هذه الخاصيات لمعرفة ما سيحدث.
</p>

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

<ul>
<li>
		ترجمة وبتصرف للفصل animation 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%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%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/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">693</guid><pubDate>Sat, 22 Jun 2019 18:03:00 +0000</pubDate></item><item><title>&#x62A;&#x637;&#x628;&#x64A;&#x642; &#x639;&#x645;&#x644;&#x64A;: &#x627;&#x644;&#x62A;&#x62D;&#x631;&#x64A;&#x643;&#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%AA%D8%AD%D8%B1%D9%8A%D9%83%D8%A7%D8%AA-r685/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2019_06/5cf51d315adcd_.jpg.f702061041d63c33bde5a00f7adff5ea.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>.
</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>
		<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>
		تطبيق عملي: التحريكات
	</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 style="text-align: center;">
	<img alt="abc.png" class="ipsImage ipsImage_thumbnailed" data-fileid="29899" data-unique="ejx5xzwpm" src="https://academy.hsoub.com/uploads/monthly_2019_06/abc.png.421da5595b5f5de9a13fdf221f4ef74d.png"></p>

<h2 id="-">
	علاقة تكاملية
</h2>

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

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_7852_15" style="">
<span class="pun">.</span><span class="pln">element </span><span class="pun">{</span><span class="pln">
  animation</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="lit">@keyframes</span><span class="pln"> animation</span><span class="pun">-</span><span class="pln">name </span><span class="pun">{</span><span class="pln">
  </span><span class="com">/* تُكتَب هنا النقاط المرجعية لهذا الإطار المفتاحي */</span><span class="pln">
</span><span class="pun">}</span></pre>

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

<h2 id="-animation-">
	الخاصية <code>animation</code>
</h2>

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

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_7852_9" style="">
<span class="pln">animation</span><span class="pun">:</span><span class="pln"> change</span><span class="pun">-</span><span class="pln">background </span><span class="lit">4s</span><span class="pln"> linear infinite</span><span class="pun">;</span></pre>

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

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_7852_11" style="">
<span class="pln">animation</span><span class="pun">-</span><span class="pln">name</span><span class="pun">:</span><span class="pln"> change</span><span class="pun">-</span><span class="pln">background</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">4s</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"> linear</span><span class="pun">;</span><span class="pln">
animation</span><span class="pun">-</span><span class="pln">repeat</span><span class="pun">:</span><span class="pln"> infinite</span><span class="pun">;</span></pre>

<p>
	القيم المعطاة لـ <a href="https://wiki.hsoub.com/CSS/transition" rel="external">transition</a> هي عبارة عن خاصيات (properties)، مثل <code>background</code> أو <code>all</code>، أما الخاصية <a href="https://wiki.hsoub.com/CSS/animation" rel="external">animation</a> فتُعطى اسم مجموعة <a href="https://wiki.hsoub.com/CSS/@keyframes" rel="external">الإطارات المفتاحية</a> التي تؤلف تسلسل الحركة.
</p>

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

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

<p>
	مجموعة <a href="https://wiki.hsoub.com/CSS/@keyframes" rel="external">الإطارات المفتاحية</a> <code>keyframes</code> في <a href="https://wiki.hsoub.com/CSS" rel="external">CSS</a> هي عبارة عن سلسلة من النقاط المرجعية على طول مسار التحريك. ويُكتب كل إطار مفتاحي كنسبة مئوية.
</p>

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

<p style="text-align: center;">
	<img alt="change-background-min.gif" class="ipsImage ipsImage_thumbnailed" data-fileid="29900" data-unique="w6462ekni" src="https://academy.hsoub.com/uploads/monthly_2019_06/change-background-min.gif.85981e14fde2cb37fcfcd2af0a5180a8.gif"></p>

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

<p>
	"البدء بخلفية زرقاء، ثم خلفية برتقالية في منتصف الطريق، ثم الانتهاء بخلفية خضراء"
</p>

<p>
	أو إذا أردنا أن نكون أكثر دقة، فيمكننا استخدام النسب المئوية لشرح توقيت التغييرات:
</p>

<p>
	"عند قطع 0٪ من الطريق (البداية)، فإنّ الخلفية ستكون زرقاء، ثم عند الوصول إلى نسبة 50٪ من الوقت، فستصير الخلفية برتقالية، وعند الوصول إلى نسبة 100٪، ستصير الخلفية خضراء"
</p>

<p>
	يمكننا تلخيص ذلك على النحو التالي:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_7852_13" style="">
<span class="lit">0</span><span class="pun">%</span><span class="pln"> </span><span class="typ">Blue</span><span class="pln">
</span><span class="lit">50</span><span class="pun">%</span><span class="pln"> </span><span class="typ">Green</span><span class="pln">
</span><span class="lit">100</span><span class="pun">%</span><span class="pln"> </span><span class="typ">Orange</span></pre>

<p>
	من خلال تحديد هذه النسب المئوية، فقد أنشأنا سلسلة من "النقاط المرجعية" التي ينبغي أن تمر بها التحريكات. كل ما نحتاج إليه الآن هو إخبار المتصفح بأنّ هذه النسب هي في الواقع إطارات مفتاحية <code>keyframes</code>، مع إعطاء التحريك اسمًا. والنتيجة هي هذه:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_7852_19" style="">
<span class="lit">@keyframes</span><span class="pln"> change</span><span class="pun">-</span><span class="pln">background </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">
    background</span><span class="pun">:</span><span class="pln"> blue</span><span class="pun">;</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">
  </span><span class="lit">50</span><span class="pun">%</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
    background</span><span class="pun">:</span><span class="pln"> orange</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">
    background</span><span class="pun">:</span><span class="pln"> green</span><span class="pun">;</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	لقد سمّينا عملية التحريك <code>change-background</code>. سنستخدمها لاحقًا عندما نريد تطبيق <a href="https://wiki.hsoub.com/CSS/@keyframes" rel="external">الإطارات المفتاحية</a> على عنصر ما.
</p>

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

<figure style="text-align: center;"><img alt="simple-keyframes-min.gif" class="ipsImage ipsImage_thumbnailed" data-fileid="29902" data-unique="5p4qrsmet" src="https://academy.hsoub.com/uploads/monthly_2019_06/simple-keyframes-min.gif.676038ab8a02ca618b239eabecf1dd87.gif"><figcaption>
		المصدر <a href="http://codepen.io/donovanh/pen/WbqNwd?editors=110" rel="external nofollow">http://codepen.io/donovanh/pen/WbqNwd?editors=110</a>
	</figcaption></figure><p>
	أثناء حدوث الحركة، ينشئ المتصفح الإطارات المفتاحية الوسطية اللازمة للانتقال من كل لون من ألوان الخلفية إلى اللون التالي. بإخبار المتصفح أننا أردنا أن يبدأ العنصر <a href="https://wiki.hsoub.com/HTML/div" rel="external">div</a> بلون معيّن، وأنّ عليه أن يأخذ لونًا آخر في منتصف الطريق، ثم ينتهي بلون ثالث، فإنّ المتصفح يتولى إنشاء التحريكات اللازمة بين كل نقطة من تلك النقاط.
</p>

<p>
	يمكنك مراجعة هذا المثال <a href="http://codepen.io/donovanh/pen/WbqNwd?editors=110" rel="external nofollow">على CodePen</a>.
</p>

<p>
	لقد ذكرت في وقت سابق إمكانية استخدام الخاصية <a href="https://wiki.hsoub.com/CSS/animation-direction" rel="external">animation-direction</a> كخيار بديل لإنشاء التحريك. إليك كيف يبدو ذلك:
</p>

<p style="text-align: center;">
	<img alt="simple-keyframes-alternating-min.gif" class="ipsImage ipsImage_thumbnailed" data-fileid="29901" data-unique="603bugmp4" src="https://academy.hsoub.com/uploads/monthly_2019_06/simple-keyframes-alternating-min.gif.d2fc0b098087695b79800b6c7fb77b50.gif"></p>

<p>
	في هذه الحالة، قمت بتغيير قيمة الخاصية <a href="https://wiki.hsoub.com/CSS/animation-direction" rel="external">animation-direction</a> إلى <code>alternate</code>. يمكنك الاطلاع على ذلك في <a href="http://codepen.io/donovanh/pen/NPZqej" rel="external nofollow">موقع CodePen</a>.
</p>

<h2 id="-">
	البادئات
</h2>

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

<p>
	في CodePen، يمكنك استخدام خيار "Autoprefixer" الموجود ضمن إعدادات <a href="https://wiki.hsoub.com/CSS" rel="external">CSS</a>. بالنسبة للتطوير المحلي، فأنا أستخدم أداة Autoprefixer الخاصة بأداة <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>. (يشرح القسم «تحسين دعم المتصفحات لخاصيات CSS وشيفرة JavaScript» في المقال <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> كيفية أتمتة هذه العملية تلقائيًا.) أداة <a href="http://leaverou.github.io/prefixfree/" rel="external nofollow">Prefix Free</a> هي بديل جيد أيضًا.
</p>

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

<p>
	افتح <a href="http://codepen.io/donovanh/pen/WbqNwd?editors=110" rel="external nofollow">مثال الإطارات المفتاحية هذا</a>، وحاول تغيير الشيفرة. قم بالتجريب عليه، وحاول تعطيله، ثم إصلاحه. وإن ابتكرت تحريكات خاصة بك، فأخبرنا في التعليقات.
</p>

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

<ul>
<li>
		ترجمة وبتصرف للفصل animations 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%AD%D8%B1%D9%83%D8%A7%D8%AA-r693/" 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/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">685</guid><pubDate>Wed, 19 Jun 2019 18:02:00 +0000</pubDate></item><item><title>&#x62F;&#x644;&#x64A;&#x644;&#x643; &#x625;&#x644;&#x649; &#x645;&#x646;&#x647;&#x62C;&#x64A;&#x629; BEM</title><link>https://academy.hsoub.com/programming/css/%D8%AF%D9%84%D9%8A%D9%84%D9%83-%D8%A5%D9%84%D9%89-%D9%85%D9%86%D9%87%D8%AC%D9%8A%D8%A9-bem-r688/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2019_06/5cfe21e42495f_BEM.png.b8b831dfd6409ffb290de2504978c4ff.png" /></p>

<p>
	هذا المقال تمت كتابته بتعاون بين Joe Richardson و Robin Rendle ومجموعة من فريق موقع CSS-Tricks. أراد Joe إضافة مقال بخصوص <a href="https://en.bem.info/" rel="external nofollow">BEM</a> التي أحببناها وكان لدى كل منا أفكارًا وآراءً حولها، لذلك قررنا أن نتعاون سويًا لكتابة هذا المقال.
</p>

<p>
	تُعدُّ منهجية BEM (وهي اختصار لهذه الكلمات معًا Block و Element و Modifier) مصطلح تسمية شائع يستخدم من أجل الأصناف في HTML و CSS <a href="https://css-tricks.com/bem-101/" rel="external nofollow">تم تطويره</a> بواسطة فريق في Yandex؛ هدفها هو مساعدة المطورين في فهم العلاقة بين HTML و CSS في مشروع معين بشكل أفضل.
</p>

<p>
	فيما يلي مثال حول ما يكتبه مطور CSS في نمط BEM:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_3509_6" style="">
<span class="com">/* مكون كتلة */</span><span class="pln">
</span><span class="pun">.</span><span class="pln">btn </span><span class="pun">{}</span><span class="pln">

</span><span class="com">/* عنصر يعتمد على كتلة */</span><span class="pln"> 
</span><span class="pun">.</span><span class="pln">btn__price </span><span class="pun">{}</span><span class="pln">

</span><span class="com">/* مُعدِّل يعدِّل تنسيق الكتلة */</span><span class="pln">
</span><span class="pun">.</span><span class="pln">btn</span><span class="pun">--</span><span class="pln">orange </span><span class="pun">{}</span><span class="pln"> 
</span><span class="pun">.</span><span class="pln">btn</span><span class="pun">--</span><span class="pln">big </span><span class="pun">{}</span></pre>

<p>
	في شيفرة CSS السابقة، الكتلة (Block) عبارة عن عنصر جديد في أعلى مستوى من التجريد (top-level abstraction) على سبيل المثال زر: <code>‎.btn{}‎</code>. يجب اعتبار الجملة البرمجية هذه بمثابة أحد الأبوين، إذ يمكن وضع العناصر الأبناء (elements) في الداخل ويتم الإشارة إليها بواسطة شرطتين سفليتين يتبع اسم الكتلة أو الحاوية البرمجية تلك مثل <code>‎.btn__price{}‎</code>. أخيرًا، يمكن للمُعدلات (modifiers) معالجة الحاوية البرمجية (Block) بحيث يمكننا تمييز أو تصميم ذلك المكون المحدد دون إحداث تغييرات على بقية الحاويات البرمجية الأخرى يتم ذلك عن طريق إلحاق شرطتين باسم الحاوية البرمجية Block تمامًا مثل <code>btn--orange</code>.
</p>

<p>
	تبدو الشيفرة كما في المثال التالي:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_3509_8" style="">
<span class="tag">&lt;a</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"btn btn--big btn--orange"</span><span class="pln"> </span><span class="atn">href</span><span class="pun">=</span><span class="atv">"http://css-tricks.com"</span><span class="tag">&gt;</span><span class="pln">
  </span><span class="tag">&lt;span</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"btn__price"</span><span class="tag">&gt;</span><span class="pln">$9.99</span><span class="tag">&lt;/span&gt;</span><span class="pln">
  </span><span class="tag">&lt;span</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"btn__text"</span><span class="tag">&gt;</span><span class="pln">Subscribe</span><span class="tag">&lt;/span&gt;</span><span class="pln">
</span><span class="tag">&lt;/a&gt;</span></pre>

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

<p>
	<iframe allowfullscreen="true" allowpaymentrequest="true" allowtransparency="true" class="cp_embed_iframe " frameborder="0" height="268" id="cp_embed_226a65c8f7d64615aabd45048d1d3b6d" name="cp_embed_1" scrolling="no" src="https://codepen.io/css-tricks/embed/226a65c8f7d64615aabd45048d1d3b6d?height=268&amp;theme-id=1&amp;slug-hash=226a65c8f7d64615aabd45048d1d3b6d&amp;default-tab=result&amp;user=css-tricks&amp;name=cp_embed_1" style="width: 100%; overflow: hidden; display: block; height: 100%; min-height: 350px;" title="CodePen Embed"></iframe>
</p>

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

<h2 id="-bem-">
	لماذا علينا أخذ BEM في الحسبان؟
</h2>

<ol>
<li>
		إذا كنا نريد إنشاء تصميم جديد لعنصر معين، يمكننا أولًا النظر في الحاويات البرمجية لمعرفة أي المُعدِّلات، والعناصرالفرعية موجودة بالفعل. ربما ندرك أننا لسنا بحاجة لكتابة أي تعبير CSS برمجي آخر لأن هناك معدّل موجود مسبقًا يفي بالغرض.
	</li>
	<li>
		إذا كنا نقرأ الوسوم بدلاً من تعابير CSS البرمجية، يجب أن نكون قادرين على الحصول بسرعة على فكرة حول العنصر الذي يعتمد على عنصر آخر؛ في المثال السابق، يمكننا رؤية أن العنصر <code>‎.btn__price</code> يعتمد على العنصر <code>‎.btn</code>، حتى لو لم نكن على دراية بعمل أي من تلك العناصر.
	</li>
	<li>
		يمكن للمصممين والمطورين تسمية العناصر لتسهيل الاتصال بين فريق المطورين بمعنى آخر، يوفر BEM لكل مطور في المشروع تسمية صيغة إعلانية للعناصر يمكنه مشاركتها بحيث تكون في نفس الصفحة.
	</li>
</ol>
<p>
	حدد <a href="http://csswizardry.com/2015/03/more-transparent-ui-code-with-namespaces" rel="external nofollow">Harry Roberts</a> فائدة رئيسية أخرى لاستخدام صيغة برمجية مثل BEM حين كتب التالي عن تحسين ثقة المطور:
</p>

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

<p>
	وبالمثل، يناقش <a href="http://philipwalton.com/articles/side-effects-in-css/" rel="external nofollow">Philip Walton</a> حل لهذه المشكلة وهو إلتزام عدد كاف من المطورين بمبادئ BEM:
</p>

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

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

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

<p>
	دعونا نلقي نظرة على بعض المشاكل مع BEM.
</p>

<h2 id="-bem-css">
	مشاكل مع <del>BEM</del>‏ CSS
</h2>

<p>
	لن يقوم أحد بمعاقبتك بالطبع إذا خرجت عن قواعد BEM. لا يزال بإمكانك كتابة محدد CSS كالتالي:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_3509_26" style="">
<span class="pun">.</span><span class="pln">nav </span><span class="pun">.</span><span class="pln">nav__listItem </span><span class="pun">.</span><span class="pln">btn</span><span class="pun">--</span><span class="pln">orange </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"> green</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></pre>

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

<p>
	يجب ألا تَبطل كتلةٌ (مثل <code>‎.nav</code>) عمل كتلة أخرى أو معدل آخر (مثل <code>‎</code>.btn --orange) وإلا فإن هذا سيجعل من المستحيل تقريبًا قراءة ملف HTML وفهم عمل هذا العنصر. في هذه العملية، نحن ملزمون الى حد كبير أن نكون أهلًا لثقة مطور آخر في البرنامج، هذا ينطبق على HTML أيضًا.
</p>

<p>
	ماذا تتوقع إذا رأيت الشيفرة التالية؟
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_3509_14" style="">
<span class="tag">&lt;a</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"btn"</span><span class="pln"> </span><span class="atn">href</span><span class="pun">=</span><span class="atv">"http://css-tricks.com"</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">"nav__listItem"</span><span class="tag">&gt;</span><span class="pln">Item 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">"nav__listItem"</span><span class="tag">&gt;</span><span class="pln">Item two</span><span class="tag">&lt;/div&gt;</span><span class="pln">
</span><span class="tag">&lt;/a&gt;</span></pre>

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

<ol>
<li>
		عدم استخدام المُعدلات في الحاويات البرمجية block غير المترابطة.
	</li>
	<li>
		تجنب صنع عناصر رئيسية غير ضرورية عندما يكون العنصر الفرعي موجودًا بشكل جيد بدون أي مشاكل.
	</li>
</ol>
<h3 id="-bem">
	المزيد من الأمثلة العملية على BEM
</h3>

<ul>
<li>
		قائمة قابلة للطي:
	</li>
</ul>
<p>
	<iframe allowfullscreen="true" allowpaymentrequest="true" allowtransparency="true" class="cp_embed_iframe " frameborder="0" height="563" id="cp_embed_EaJEBZ" name="cp_embed_2" scrolling="no" src="https://codepen.io/css-tricks/embed/EaJEBZ?height=563&amp;theme-id=1&amp;slug-hash=EaJEBZ&amp;default-tab=css&amp;user=css-tricks&amp;name=cp_embed_2" style="width: 100%; overflow: hidden; display: block; height: 100%; min-height: 350px;" title="CodePen Embed"></iframe>
</p>

<p>
	في هذا المثال، هناك حاوية برمجية block واحدة وعنصران ومُعدِّل واحد. يمكننا هنا إنشاء مُعدِّل مثل <code>‎.accordion__copy-open</code> يتيح لنا معرفة أنه يجب ألا نستخدمه في حاوية برمجية block أو عنصر آخر.
</p>

<ul>
<li>
		قائمة تنقل:
	</li>
</ul>
<p>
	<iframe allowfullscreen="true" allowpaymentrequest="true" allowtransparency="true" class="cp_embed_iframe " frameborder="0" height="440" id="cp_embed_RNOMzJ" name="cp_embed_3" scrolling="no" src="https://codepen.io/css-tricks/embed/RNOMzJ?height=440&amp;theme-id=1&amp;slug-hash=RNOMzJ&amp;default-tab=css&amp;user=css-tricks&amp;name=cp_embed_3" style="width: 100%; overflow: hidden; display: block; height: 100%; min-height: 350px;" title="CodePen Embed"></iframe>
</p>

<p>
	يحتوي هذا المثال على كتلة block واحدة و 6 عناصر ومُعدِّل واحد. من الجيد تمامًا إنشاء حاويات برمجية blocks بدون معدلات على الإطلاق. يمكن للمطور في مرحلة ما في المستقبل أن يربط هذه الحاوية بمعدلات جديدة طالما بقيت ثابتة.
</p>

<h2 id="-bem">
	عيوب BEM
</h2>

<p>
	ربما لا تحب استخدام شرطة مزدوجة. حسنًا، استخدم شيئًا آخر فريدًا تستخدمه باستمرار. هنا رأي آخر:
</p>

<p>
	<img class="ipsImage ipsImage_thumbnailed" data-fileid="29997" data-unique="9ws2bhkd2" src="https://academy.hsoub.com/uploads/monthly_2019_06/01.png.d34d4bb5d7aad9acef2e3d3d33e9f726.png" alt="01.png"></p>

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

<p>
	<img class="ipsImage ipsImage_thumbnailed" data-fileid="29998" data-unique="636bunsln" src="https://academy.hsoub.com/uploads/monthly_2019_06/02.png.d405176312f4aa5c167e45622787d09c.png" alt="02.png"></p>

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

<p>
	في منهجية <a href="http://smacss.com/" rel="external nofollow">SMACSS</a>، من المحتمل أن تجد اسم صنف CSS متكون من ثلاثة أحرف. تتبع المُعدِّلات بعدئذٍ اسم الوحدة النمطية باستخدام شرطة:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_3509_16" style="">
<span class="com">/* مثال عن وحدة */</span><span class="pln">
</span><span class="pun">.</span><span class="pln">btn </span><span class="pun">{</span><span class="pln"> </span><span class="pun">}</span><span class="pln">

</span><span class="com">/* btn معدِّل الصنف */</span><span class="pln">
</span><span class="pun">.</span><span class="pln">btn</span><span class="pun">-</span><span class="pln">primary </span><span class="pun">{</span><span class="pln"> </span><span class="pun">}</span><span class="pln">

</span><span class="com">/* مع حالة Btn الوحدة */</span><span class="pln">
</span><span class="pun">.</span><span class="pln">btn</span><span class="pun">.</span><span class="kwd">is</span><span class="pun">-</span><span class="pln">collapsed </span><span class="pun">{</span><span class="pln"> </span><span class="pun">}</span></pre>

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

<p>
	في <a href="http://oocss.org/" rel="external nofollow">OOCSS</a>، الحاويات البرمجية هي عامة بالغالب.
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_3509_20" style="">
<span class="com">/* مثال عن وحدة */</span><span class="pln">
</span><span class="pun">.</span><span class="pln">mod </span><span class="pun">{</span><span class="pln"> </span><span class="pun">}</span><span class="pln">

</span><span class="com">/* جزء من الوحدة */</span><span class="pln">
</span><span class="pun">.</span><span class="pln">inner </span><span class="pun">{</span><span class="pln"> </span><span class="pun">}</span><span class="pln">

</span><span class="com">/* Talk الوحدة */</span><span class="pln">
</span><span class="pun">.</span><span class="pln">talk </span><span class="pun">{</span><span class="pln"> </span><span class="pun">}</span><span class="pln">

</span><span class="com">/* تغيير جزء داخل الوحدة */</span><span class="pln">
</span><span class="pun">.</span><span class="pln">talk </span><span class="pun">.</span><span class="pln">inner </span><span class="pun">{</span><span class="pln"> </span><span class="pun">}</span></pre>

<p>
	لذلك، يمكنك استخدام أصناف متعددة في HTML للحالات المختلفة. لم يتم تسمية الجزء الداخلي مثل التابع له، لذلك فهو أقل وضوحًا ولكنه قابل لإعادة استخدامه. ستقوم BEM بعمل <code>‎.mod__inner</code> و <code>‎.mod--talk</code> و <code>mod-talk__inner.</code>.
</p>

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

<h2 id="bem-sass">
	BEM و Sass
</h2>

<p>
	لأولئك الذين يستخدمون Sass ويستمتعون بتشعيب (nesting) العناصر كوسيلة لتحديد النطاقات لتنسيقات، لازال بإمكانك أن تكون المسؤول عن الصيغة المتشعبة ولكن يمكنك الحصول على CSS غير متشعب، باستخدام <code>‎@at-root</code>:
</p>

<p>
	ملف Scss:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_3509_22" style="">
<span class="pun">.</span><span class="pln">block </span><span class="pun">{</span><span class="pln">
  </span><span class="lit">@at</span><span class="pun">-</span><span class="pln">root </span><span class="com">#{&amp;}__element {</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">
  </span><span class="lit">@at</span><span class="pun">-</span><span class="pln">root </span><span class="com">#{&amp;}--modifier {</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	يولد ملف CSS التالي:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_3509_24" style="">
<span class="pun">.</span><span class="pln">block </span><span class="pun">{</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
</span><span class="pun">.</span><span class="pln">block__element </span><span class="pun">{</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
</span><span class="pun">.</span><span class="pln">block</span><span class="pun">--</span><span class="pln">modifier </span><span class="pun">{</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	ويمكنك الحصول على ملخص كما تريد! تحقق من منشئ BEM الذي يخص <a href="https://github.com/danielguillan/bem-constructor" rel="external nofollow">Danield Guillan</a> أو <a href="http://codepen.io/andersschmidt/post/expressive-bem-with-sass-a-different-approach" rel="external nofollow">Anders Schmidt Hansen</a> من أجل <a href="https://codepen.io/andersschmidt/post/expressive-bem-with-sass-a-different-approach" rel="external nofollow">BEM التعبيرية</a>.
</p>

<h2 id="-">
	الخلاصة
</h2>

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

<p>
	بشكل عام، أود أن أفكر في BEM كإجابة على سؤال نيكولاس غالاغر:
</p>

<p>
	<img class="ipsImage ipsImage_thumbnailed" data-fileid="29999" data-unique="2fnljmjis" src="https://academy.hsoub.com/uploads/monthly_2019_06/03.png.47d635b5a33065026a4c8ec2ac0c6bc8.png" alt="03.png"></p>

<p>
	ترجمة -وبتصرف- للمقال <a href="https://css-tricks.com/bem-101/" rel="external nofollow">BEM 101</a> لصاحبها Robin Rendle.
</p>
]]></description><guid isPermaLink="false">688</guid><pubDate>Mon, 10 Jun 2019 09:25:29 +0000</pubDate></item></channel></rss>
