<?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/7/?d=2</link><description>&#x627;&#x644;&#x628;&#x631;&#x645;&#x62C;&#x629;: CSS</description><language>ar</language><item><title>&#x627;&#x644;&#x645;&#x641;&#x627;&#x647;&#x64A;&#x645; &#x627;&#x644;&#x623;&#x633;&#x627;&#x633;&#x64A;&#x651;&#x629; &#x644;&#x646;&#x638;&#x627;&#x645; &#x627;&#x644;&#x62A;&#x62E;&#x637;&#x64A;&#x637; &#x627;&#x644;&#x634;&#x628;&#x643;&#x64A; Grid layout &#x641;&#x64A; CSS: &#x62E;&#x637;&#x648;&#x637; &#x627;&#x644;&#x634;&#x628;&#x643;&#x629; &#x648;&#x627;&#x644;&#x62E;&#x644;&#x627;&#x64A;&#x627;</title><link>https://academy.hsoub.com/programming/css/%D8%A7%D9%84%D9%85%D9%81%D8%A7%D9%87%D9%8A%D9%85-%D8%A7%D9%84%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D9%91%D8%A9-%D9%84%D9%86%D8%B8%D8%A7%D9%85-%D8%A7%D9%84%D8%AA%D8%AE%D8%B7%D9%8A%D8%B7-%D8%A7%D9%84%D8%B4%D8%A8%D9%83%D9%8A-grid-layout-%D9%81%D9%8A-css-%D8%AE%D8%B7%D9%88%D8%B7-%D8%A7%D9%84%D8%B4%D8%A8%D9%83%D8%A9-%D9%88%D8%A7%D9%84%D8%AE%D9%84%D8%A7%D9%8A%D8%A7-r528/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2017_09/59b0e28223e3d_main(20).png.1b9432a2befd6781688a756a5ee1f1e2.png" /></p>

<p>
	تعرّفنا في <a href="https://academy.hsoub.com/programming/css/%D9%85%D9%81%D8%A7%D9%87%D9%8A%D9%85-%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A9-%D9%81%D9%8A-%D8%A7%D9%84%D8%AA%D8%B9%D8%A7%D9%85%D9%84-%D9%85%D8%B9-%D8%AA%D8%AE%D8%B7%D9%8A%D8%B7-%D8%A7%D9%84%D8%B4%D8%A8%D9%83%D8%A9-grid-layout-r527/" rel="">الجزء الأول </a>من هذا الدرس على ما يقدّمه نظام التخطيط الشبكي Grid layout في CSS وقدّمنا ماهيّة الشبكة Grid ومساراتها Tracks. نكمل في هذا الجزء المفاهيم الأساسيّة لنظام التخطيط الشبكي.
</p>

<h2 id="خطوط-الشبكة-grid-lines">
	خطوط الشبكة Grid Lines
</h2>

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

<p style="text-align: center;">
	<img alt="01_grid_lines.png" class="ipsImage ipsImage_thumbnailed" data-fileid="24946" data-unique="k2vgch6vh" src="https://academy.hsoub.com/uploads/monthly_2017_09/01_grid_lines.png.b5552e576d4abc4e3088bfaf0d4c5439.png"></p>

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

<h2 id="وضع-العناصر-وفق-الخطوط">
	وضع العناصر وفق الخطوط
</h2>

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

<p>
	في المثال التالي وضعنا العنصرين الأوليْن على ثلاثة مسارات أعمدة Column track، وذلك باستخدام الخصائص <code>grid-row-start</code> ،<code>grid-row-end</code> <code>grid-column-start</code> و<code>grid-column-end</code>. بالعمل من اليسار إلى اليمين،
</p>

<p>
	يوضَع العنصر الأول (<code>box1</code>) على خط العمود 1، ويمتد إلى خط العمود 4 الذي يوجد في حالتنا أقصى يمين الشبكة. يبدأ هذا العنصُر في خط الصف 1 (في الأعلى) وينتهي في خط الصف 3؛ وبالتالي يمتد على اثنين من مسارات الصفوف Row tracks.
</p>

<p>
	يبدأ العنصر الثاني (<code>box2</code>) على خط عمود الشبكة 1، ويمتد على مسار واحد. هذا هو الوضع المبدئي، لذا لسنا بحاجة إلى تحديد خط النهاية. كما أنه يمتد على اثنين من مسارات الصفوف ابتداءً من خط الصف 3 إلى خط الصف 5. والعناصر الأخرى تضع نفسها في المساحات الفارغة على الشبكة.
</p>

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

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_5657_10" style="">
<span class="pun">.</span><span class="pln">wrapper </span><span class="pun">{</span><span class="pln"> 
    display</span><span class="pun">:</span><span class="pln"> grid</span><span class="pun">;</span><span class="pln"> 
    grid</span><span class="pun">-</span><span class="kwd">template</span><span class="pun">-</span><span class="pln">columns</span><span class="pun">:</span><span class="pln"> repeat</span><span class="pun">(</span><span class="lit">3</span><span class="pun">,</span><span class="pln"> </span><span class="lit">1fr</span><span class="pun">);</span><span class="pln"> 
    grid</span><span class="pun">-</span><span class="kwd">auto</span><span class="pun">-</span><span class="pln">rows</span><span class="pun">:</span><span class="pln"> </span><span class="lit">100px</span><span class="pun">;</span><span class="pln"> 
</span><span class="pun">}</span><span class="pln"> 
</span><span class="pun">.</span><span class="pln">box1 </span><span class="pun">{</span><span class="pln"> 
    grid</span><span class="pun">-</span><span class="pln">column</span><span class="pun">-</span><span class="pln">start</span><span class="pun">:</span><span class="pln"> </span><span class="lit">1</span><span class="pun">;</span><span class="pln"> 
    grid</span><span class="pun">-</span><span class="pln">column</span><span class="pun">-</span><span class="kwd">end</span><span class="pun">:</span><span class="pln"> </span><span class="lit">4</span><span class="pun">;</span><span class="pln"> 
    grid</span><span class="pun">-</span><span class="pln">row</span><span class="pun">-</span><span class="pln">start</span><span class="pun">:</span><span class="pln"> </span><span class="lit">1</span><span class="pun">;</span><span class="pln"> 
    grid</span><span class="pun">-</span><span class="pln">row</span><span class="pun">-</span><span class="kwd">end</span><span class="pun">:</span><span class="pln"> </span><span class="lit">3</span><span class="pun">;</span><span class="pln"> 
</span><span class="pun">}</span><span class="pln"> 
</span><span class="pun">.</span><span class="pln">box2 </span><span class="pun">{</span><span class="pln"> 
    grid</span><span class="pun">-</span><span class="pln">column</span><span class="pun">-</span><span class="pln">start</span><span class="pun">:</span><span class="pln"> </span><span class="lit">1</span><span class="pun">;</span><span class="pln"> 
    grid</span><span class="pun">-</span><span class="pln">row</span><span class="pun">-</span><span class="pln">start</span><span class="pun">:</span><span class="pln"> </span><span class="lit">3</span><span class="pun">;</span><span class="pln"> 
    grid</span><span class="pun">-</span><span class="pln">row</span><span class="pun">-</span><span class="kwd">end</span><span class="pun">:</span><span class="pln"> </span><span class="lit">5</span><span class="pun">;</span><span class="pln"> 
</span><span class="pun">}</span></pre>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="24947" href="https://academy.hsoub.com/uploads/monthly_2017_09/02_positioning_against_lines.png.eff6636df7118a0926b924c0231f11c7.png" rel=""><img alt="02_positioning_against_lines.png" class="ipsImage ipsImage_thumbnailed" data-fileid="24947" data-unique="x8osxdjtu" src="https://academy.hsoub.com/uploads/monthly_2017_09/02_positioning_against_lines.thumb.png.fe5d9593f2761f8e46182402fbbea67b.png"></a>
</p>

<p>
	لا تنس أنه يمكنك استخدام <a href="https://developer.mozilla.org/en-US/docs/Tools/Page_Inspector/How_to/Examine_grid_layouts" rel="external nofollow">Grid Inspector</a> في أدوات مطوري فايرفوكس لترى كيف توضع العناصر على خطوط الشبكة.
</p>

<h2 id="خلايا-الشبكة-grid-cells">
	خلايا الشبكة Grid Cells
</h2>

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

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

<p style="text-align: center;">
	<img alt="03_grid_cells.png" class="ipsImage ipsImage_thumbnailed" data-fileid="24948" data-unique="v136t3dfw" src="https://academy.hsoub.com/uploads/monthly_2017_09/03_grid_cells.png.7e5a1af8d4f2a512de591f8a09ed492d.png"></p>

<h2 id="مناطق-الشبكة-grid-areas">
	مناطق الشبكة Grid areas
</h2>

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

<p style="text-align: center;">
	<img alt="04_grid_areas.png" class="ipsImage ipsImage_thumbnailed" data-fileid="24949" data-unique="nu2kb3hoy" src="https://academy.hsoub.com/uploads/monthly_2017_09/04_grid_areas.png.9d89e5ff917af28a66365b3b9a7c364d.png"></p>

<h2 id="المزاريب-gutters">
	المزاريب Gutters
</h2>

<p>
	يمكن إنشاء المزاريب أو الأزقة بين خلايا الشبكة باستخدام الخاصيّتين <code>grid-column-gap</code> و<code>grid-row-gap</code>، أو بالخاصيّة المختصرة <code>grid-gap</code>. في المثال التالي أنشأنا فجوة gap بقياس 10 بكسل بين الأعمدة و <code>1em</code> بين الصفوف.
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_5657_12" style="">
<span class="pun">.</span><span class="pln">wrapper </span><span class="pun">{</span><span class="pln">
   display</span><span class="pun">:</span><span class="pln"> grid</span><span class="pun">;</span><span class="pln">
   grid</span><span class="pun">-</span><span class="kwd">template</span><span class="pun">-</span><span class="pln">columns</span><span class="pun">:</span><span class="pln"> repeat</span><span class="pun">(</span><span class="lit">3</span><span class="pun">,</span><span class="pln"> </span><span class="lit">1fr</span><span class="pun">);</span><span class="pln">
   grid</span><span class="pun">-</span><span class="pln">column</span><span class="pun">-</span><span class="pln">gap</span><span class="pun">:</span><span class="pln"> </span><span class="lit">10px</span><span class="pun">;</span><span class="pln">
   grid</span><span class="pun">-</span><span class="pln">row</span><span class="pun">-</span><span class="pln">gap</span><span class="pun">:</span><span class="pln"> </span><span class="lit">1em</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></pre>

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

<p style="text-align: center;">
	<img alt="05_grid_gutters.png" class="ipsImage ipsImage_thumbnailed" data-fileid="24941" data-unique="2jiqf9k36" src="https://academy.hsoub.com/uploads/monthly_2017_09/05_grid_gutters.png.ab4a2e2b5e434266ff5b5f9ae0454963.png"></p>

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

<h2 id="الشبكات-المتداخلة-nesting-grids">
	الشبكات المتداخلة Nesting grids
</h2>

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

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

<p style="text-align: center;">
	<img alt="06_subitems.png" class="ipsImage ipsImage_thumbnailed" data-fileid="24942" data-unique="ninoied83" src="https://academy.hsoub.com/uploads/monthly_2017_09/06_subitems.png.cad66c5dca58cd53d252ae7d3d4eba78.png"></p>

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

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_5657_18" style="">
<span class="pun">.</span><span class="pln">box1 </span><span class="pun">{</span><span class="pln">
   grid</span><span class="pun">-</span><span class="pln">column</span><span class="pun">-</span><span class="pln">start</span><span class="pun">:</span><span class="pln"> </span><span class="lit">1</span><span class="pun">;</span><span class="pln">
   grid</span><span class="pun">-</span><span class="pln">column</span><span class="pun">-</span><span class="kwd">end</span><span class="pun">:</span><span class="pln"> </span><span class="lit">4</span><span class="pun">;</span><span class="pln">
   grid</span><span class="pun">-</span><span class="pln">row</span><span class="pun">-</span><span class="pln">start</span><span class="pun">:</span><span class="pln"> </span><span class="lit">1</span><span class="pun">;</span><span class="pln">
   grid</span><span class="pun">-</span><span class="pln">row</span><span class="pun">-</span><span class="kwd">end</span><span class="pun">:</span><span class="pln"> </span><span class="lit">3</span><span class="pun">;</span><span class="pln">
   display</span><span class="pun">:</span><span class="pln"> grid</span><span class="pun">;</span><span class="pln">
   grid</span><span class="pun">-</span><span class="kwd">template</span><span class="pun">-</span><span class="pln">columns</span><span class="pun">:</span><span class="pln"> repeat</span><span class="pun">(</span><span class="lit">3</span><span class="pun">,</span><span class="pln"> </span><span class="lit">1fr</span><span class="pun">);</span><span class="pln">
</span><span class="pun">}</span></pre>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="24943" href="https://academy.hsoub.com/uploads/monthly_2017_09/07_nested_grids.png.70f00f15ed152141465a9be493a54e95.png" rel=""><img alt="07_nested_grids.png" class="ipsImage ipsImage_thumbnailed" data-fileid="24943" data-unique="ur5rpnlm0" src="https://academy.hsoub.com/uploads/monthly_2017_09/07_nested_grids.thumb.png.87d8635f2ea1609d7a67c698e5d084f6.png"></a>
</p>

<p>
	في هذه الحالة الشبكة المتداخلة ليس لها علاقة بالشبكة الأم parent. كما ترون في المثال أن grid-gap لم ترث من الشبكة الأم وخطوط في الشبكة المتداخلة لم يتم محاذاتها مع الخطوط في الشبكة الأم.
</p>

<h2 id="وضع-العناصر-في-طبقات-باستخدام-z-index">
	وضع العناصر في طبقات باستخدام z-index
</h2>

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

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_5657_20" style="">
<span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"wrapper"</span><span class="tag">&gt;</span><span class="pln">
   </span><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"box box1"</span><span class="tag">&gt;</span><span class="pln">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">"box box2"</span><span class="tag">&gt;</span><span class="pln">Two</span><span class="tag">&lt;/div&gt;</span><span class="pln">
   </span><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"box box3"</span><span class="tag">&gt;</span><span class="pln">Three</span><span class="tag">&lt;/div&gt;</span><span class="pln">
   </span><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"box box4"</span><span class="tag">&gt;</span><span class="pln">Four</span><span class="tag">&lt;/div&gt;</span><span class="pln">
   </span><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"box box5"</span><span class="tag">&gt;</span><span class="pln">Five</span><span class="tag">&lt;/div&gt;</span><span class="pln">
</span><span class="tag">&lt;/div&gt;</span></pre>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_5657_22" style="">
<span class="pun">.</span><span class="pln">wrapper </span><span class="pun">{</span><span class="pln">
   display</span><span class="pun">:</span><span class="pln"> grid</span><span class="pun">;</span><span class="pln">
   grid</span><span class="pun">-</span><span class="kwd">template</span><span class="pun">-</span><span class="pln">columns</span><span class="pun">:</span><span class="pln"> repeat</span><span class="pun">(</span><span class="lit">3</span><span class="pun">,</span><span class="pln"> </span><span class="lit">1fr</span><span class="pun">);</span><span class="pln">
   grid</span><span class="pun">-</span><span class="kwd">auto</span><span class="pun">-</span><span class="pln">rows</span><span class="pun">:</span><span class="pln"> </span><span class="lit">100px</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
</span><span class="pun">.</span><span class="pln">box1 </span><span class="pun">{</span><span class="pln">
   grid</span><span class="pun">-</span><span class="pln">column</span><span class="pun">-</span><span class="pln">start</span><span class="pun">:</span><span class="pln"> </span><span class="lit">1</span><span class="pun">;</span><span class="pln">
   grid</span><span class="pun">-</span><span class="pln">column</span><span class="pun">-</span><span class="kwd">end</span><span class="pun">:</span><span class="pln"> </span><span class="lit">4</span><span class="pun">;</span><span class="pln">
   grid</span><span class="pun">-</span><span class="pln">row</span><span class="pun">-</span><span class="pln">start</span><span class="pun">:</span><span class="pln"> </span><span class="lit">1</span><span class="pun">;</span><span class="pln">
   grid</span><span class="pun">-</span><span class="pln">row</span><span class="pun">-</span><span class="kwd">end</span><span class="pun">:</span><span class="pln"> </span><span class="lit">3</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
</span><span class="pun">.</span><span class="pln">box2 </span><span class="pun">{</span><span class="pln">
   grid</span><span class="pun">-</span><span class="pln">column</span><span class="pun">-</span><span class="pln">start</span><span class="pun">:</span><span class="pln"> </span><span class="lit">1</span><span class="pun">;</span><span class="pln">
   grid</span><span class="pun">-</span><span class="pln">row</span><span class="pun">-</span><span class="pln">start</span><span class="pun">:</span><span class="pln"> </span><span class="lit">2</span><span class="pun">;</span><span class="pln">
   grid</span><span class="pun">-</span><span class="pln">row</span><span class="pun">-</span><span class="kwd">end</span><span class="pun">:</span><span class="pln"> </span><span class="lit">4</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></pre>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="24944" href="https://academy.hsoub.com/uploads/monthly_2017_09/08_overlapped_items.png.36374449966166ec0c0875b5901b5f05.png" rel=""><img alt="08_overlapped_items.png" class="ipsImage ipsImage_thumbnailed" data-fileid="24944" data-unique="q85i7434n" src="https://academy.hsoub.com/uploads/monthly_2017_09/08_overlapped_items.thumb.png.5317e649acc6ac23de97e3c899650b05.png"></a>
</p>

<p>
	العنصر <code>box2</code> الآن متداخل مع العنصر <code>box1</code>. يظهر العنصر <code>box2</code> فوق العنصر <code>box1</code> لأن<code>box2</code> يأتي بعد <code>box1</code>في ترتيب العناصر.
</p>

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

<p>
	يمكننا التحكم في ترتيب العناصر التي تتراكب باستخدام خاصية <code>z-index</code> تمامًا كما هو الحال مع تموضع العناصر. إذا أعطينا قيمة أقل للخاصيّة <code>z-index</code> في <code>box2</code> من <code>box1</code> فسيُعرَض تحت <code>box1</code>.
</p>

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

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_5657_26" style="">
<span class="pun">.</span><span class="pln">box1 </span><span class="pun">{</span><span class="pln">
   grid</span><span class="pun">-</span><span class="pln">column</span><span class="pun">-</span><span class="pln">start</span><span class="pun">:</span><span class="pln"> </span><span class="lit">1</span><span class="pun">;</span><span class="pln">
   grid</span><span class="pun">-</span><span class="pln">column</span><span class="pun">-</span><span class="kwd">end</span><span class="pun">:</span><span class="pln"> </span><span class="lit">4</span><span class="pun">;</span><span class="pln">
   grid</span><span class="pun">-</span><span class="pln">row</span><span class="pun">-</span><span class="pln">start</span><span class="pun">:</span><span class="pln"> </span><span class="lit">1</span><span class="pun">;</span><span class="pln">
   grid</span><span class="pun">-</span><span class="pln">row</span><span class="pun">-</span><span class="kwd">end</span><span class="pun">:</span><span class="pln"> </span><span class="lit">3</span><span class="pun">;</span><span class="pln">
   z</span><span class="pun">-</span><span class="pln">index</span><span class="pun">:</span><span class="pln"> </span><span class="lit">2</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
</span><span class="pun">.</span><span class="pln">box2 </span><span class="pun">{</span><span class="pln">
   grid</span><span class="pun">-</span><span class="pln">column</span><span class="pun">-</span><span class="pln">start</span><span class="pun">:</span><span class="pln"> </span><span class="lit">1</span><span class="pun">;</span><span class="pln">
   grid</span><span class="pun">-</span><span class="pln">row</span><span class="pun">-</span><span class="pln">start</span><span class="pun">:</span><span class="pln"> </span><span class="lit">2</span><span class="pun">;</span><span class="pln">
   grid</span><span class="pun">-</span><span class="pln">row</span><span class="pun">-</span><span class="kwd">end</span><span class="pun">:</span><span class="pln"> </span><span class="lit">4</span><span class="pun">;</span><span class="pln">
   z</span><span class="pun">-</span><span class="pln">index</span><span class="pun">:</span><span class="pln"> </span><span class="lit">1</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></pre>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="24945" href="https://academy.hsoub.com/uploads/monthly_2017_09/09_using_zindex.png.8d4bbddc3f1cd29e8b62d643790c3fce.png" rel=""><img alt="09_using_zindex.png" class="ipsImage ipsImage_thumbnailed" data-fileid="24945" data-unique="7yjf249mk" src="https://academy.hsoub.com/uploads/monthly_2017_09/09_using_zindex.thumb.png.3ce4146f617ef07f7c8b4b355a9a8520.png"></a>
</p>

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

<p>
	ترجمة - بتصرّف - للمقال <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Grid_Layout/Basic_Concepts_of_Grid_Layout" rel="external nofollow">Basic concepts of grid layout</a> الذي اشترك في كتابته <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Grid_Layout/Basic_Concepts_of_Grid_Layout%24history" rel="external nofollow">مساهمو موزيللا Mozilla contributors</a>.
</p>
]]></description><guid isPermaLink="false">528</guid><pubDate>Fri, 08 Sep 2017 06:07:01 +0000</pubDate></item><item><title>&#x645;&#x641;&#x627;&#x647;&#x64A;&#x645; &#x623;&#x633;&#x627;&#x633;&#x64A;&#x629; &#x641;&#x64A; &#x627;&#x644;&#x62A;&#x639;&#x627;&#x645;&#x644; &#x645;&#x639; &#x62A;&#x62E;&#x637;&#x64A;&#x637; &#x627;&#x644;&#x634;&#x628;&#x643;&#x629; Grid Layout</title><link>https://academy.hsoub.com/programming/css/%D9%85%D9%81%D8%A7%D9%87%D9%8A%D9%85-%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A9-%D9%81%D9%8A-%D8%A7%D9%84%D8%AA%D8%B9%D8%A7%D9%85%D9%84-%D9%85%D8%B9-%D8%AA%D8%AE%D8%B7%D9%8A%D8%B7-%D8%A7%D9%84%D8%B4%D8%A8%D9%83%D8%A9-grid-layout-r527/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2017_09/59ad45db91eb0_main(16).png.d5ba93ea8cb746e148020dd6775b8da3.png" /></p>

<p id="مفاهيم-أساسية-في-التعامل-مع-تخطيط-الشبكة-grid-layout">
	يضيف التخطيط الشبكي Grid layout في CSS نظامَ شبكةٍ ثنائي الأبعاد إلى الأنماط لاستخدامه في تخطيط مساحة رئيسية لصفحة ويب أو عناصر صغيرة في واجهة المستخدم.
</p>

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

<h2 id="ماهي-الشبكة-grid">
	ماهي الشبكة Grid؟
</h2>

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

<p>
	لدى نظام التخطيط الشبكي الميزات التالية:
</p>

<ul>
<li>
		<strong>قياسات مسار Track ثابتة وقياسات مرنة</strong>: يمكنك إنشاء شبكة بقياس وحجم مسارات ثابت Fixed track sizes - باستخدام وحدة القياس بكسل Pixel مثلًا، ويمكنك إنشاء شبكة باستخدام قياسات مرنة اعتمادًا على النسبة المئوية أو باستخدام وحدة <code>fr</code> الجديدة المصممة لهذا الغرض.
	</li>
	<li>
		<strong>تموضع العنصر</strong>: يمكنك وضع العناصر في موقع دقيق على الشبكة باستخدام أرقام الأسطر، الأسماء أو عن طريق استهداف منطقة من الشبكة. تحوي الشبكة أيضًا على خوارزمية للتحكم في وضع العناصر التي لم يُحدَّد موضعها بصراحة على الشبكة.
	</li>
	<li>
		<strong>إنشاء مسارات إضافية للاحتفاظ بالمحتوى</strong>: يمكنك تعريف شبكة على نحو صريح عن طريق تخطيط الشبكة ولكن نظام تخطيط الشبكة يتعامل أيضًا مع المحتوى المضاف خارج الشبكة المعلن عنها، بإضافة صفوف وأعمدة إضافية حسب الحاجة.<br>
		تُضمَّن ميزات مثل “<strong>إضافة أعمدة ما دام في العنصر الحاوي Container مساحة لاستقبالها</strong>” في نظام تخطيط الشبكة.
	</li>
	<li>
		التحكم بالمحاذاة Alignment: تحتوي الشبكة على ميزات المحاذاة للتحكم في كيفية محاذاة العناصر مرة واحدة في مساحة الشبكة، وكيف تُحاذى الشبكة بالكامل.
	</li>
	<li>
		<strong>التحكم في المحتوى المتداخل Overlapping Content</strong>: يمكن وضع أكثر من عنصر واحد في خلية الشبكة، أو يمكن أن تتداخل المناطق جزئيًا. ويمكن بعدها التحكم في هذه الطبقات باستخدام الخاصيّة <code>z-index</code>.
	</li>
</ul>
<p>
	تخطيط الشبكة نظام تخصيص قوي وعندما تُدمَج مع أجزاء أخرى من CSS مثل <a href="https://academy.hsoub.com/programming/css/%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A7%D8%AA-flexbox-%D9%81%D9%8A-css-%D9%85%D8%B9-%D8%A3%D9%85%D8%AB%D9%84%D8%A9-%D8%B9%D9%85%D9%84%D9%8A%D8%A9-r183/" rel="">Flexbox</a>، يمكن أن تساعدك على إنشاء تخطيطات كان من المستحيل في السابق بناؤها في CSS. كل ذلك يبدأ من خلال إنشاء شبكة ضمن حاوية شبكة.
</p>

<h3 id="حاوية-الشبكة-grid-container">
	حاوية الشبكة Grid Container
</h3>

<p>
	تُنشَأ حاوية شبكة بتعيين الخاصيّة <code>display</code> بالقيمة <code>grid</code> أو <code>inline-grid</code> على عنصر. وبمجرد فعل ذلك تصبح جميع العناصر المتفرّعة مباشرة عن العنصر المذكور عناصر شبكة.
</p>

<p>
	لدينا في المثال أدناه عنصر <code>div</code> يُطبَّق عليه الصنف <code>wrapper</code>. يحوي هذا العنصر بداخله خمسة عناصر أبناء.
</p>

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

<p>
	لنجعل جميع العناصر التي يُطبَّق عليها الصنف <code>.wrapper</code> حاوية شبكة، بإعطائه الخاصيّة <code>display: grid</code>:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_9052_7" style="">
<span class="pun">.</span><span class="pln">wrapper </span><span class="pun">{</span><span class="pln">
  display</span><span class="pun">:</span><span class="pln"> grid</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></pre>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="24920" href="https://academy.hsoub.com/uploads/monthly_2017_09/01_wrapper_display_grid.png.10dc43f099852cc39a8b35de1c3c2abf.png" rel=""><img alt="01_wrapper_display_grid.png" class="ipsImage ipsImage_thumbnailed" data-fileid="24920" data-unique="3abzv62ic" src="https://academy.hsoub.com/uploads/monthly_2017_09/01_wrapper_display_grid.thumb.png.f9a6c4a0ae05e02c8cb9566dab795528.png"></a>
</p>

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

<p>
	عند هذه النقطة، قد تجد أنه من المفيد العمل على إصدار فايرفوكس للمطورين، والذي يتيح <a href="https://developer.mozilla.org/en-US/docs/Tools/Page_Inspector/How_to/Examine_grid_layouts" rel="external nofollow">أداة Grid Inspector</a> في أدوات مطور الويب. إذا عرضت هذا المثال في فايرفوكس وتفحصت الشبكة التي أنشأتها في المثال فستشاهد رمزًا صغيرًا بجوار قيمة الشبكة. عند النقر عليه فإن المتصفّح سيرسُم شبكة على العنصر في الصفحة.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="24921" href="https://academy.hsoub.com/uploads/monthly_2017_09/02_grid_inspector.png.99d5f479e1a3fa103c5a97982a02a8fe.png" rel=""><img alt="02_grid_inspector.png" class="ipsImage ipsImage_thumbnailed" data-fileid="24921" data-unique="026m2c7ys" src="https://academy.hsoub.com/uploads/monthly_2017_09/02_grid_inspector.thumb.png.bf911d46e1a806a287a4192114bbb63d.png"></a>
</p>

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

<h2 id="مسارات-الشبكة-grid-tracks">
	مسارات الشبكة Grid Tracks
</h2>

<p>
	تُعرَّف الصفوف (الأسطر) والأعمدة على الشبكة باستخدام الخصائص <code>grid-template-rows</code> و<code>grid-template-columns</code> التي تحدد مسارات الشبكة.
</p>

<p>
	مسار الشبكة Grid track هو المسافة أو البعد بين أي خطَّيْن متجاوريْن على الشبكة. في الصورة أدناه يمكنك أن ترى مسارًا محدّدًا باللون الأخضر: هذا هو مسار الصف الأول في الشبكة.
</p>

<p style="text-align: center;">
	<img alt="03_first_row_track.png" class="ipsImage ipsImage_thumbnailed" data-fileid="24922" data-unique="voegzifi2" src="https://academy.hsoub.com/uploads/monthly_2017_09/03_first_row_track.png.78f00411a9c5b33104b74a42b78ee12c.png"></p>

<p>
	لنضف مسارًا إلى مثالنا السابق عن طريق إضافة الخاصية <code>grid-template-columns</code> ثم نحدّد قياس مسارات الأعمدة Column tracks.
</p>

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

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

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

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="24916" href="https://academy.hsoub.com/uploads/monthly_2017_09/04_grid_template_columns.png.f34d598f329126878b3fe86bb5ef055d.png" rel=""><img alt="04_grid_template_columns.png" class="ipsImage ipsImage_thumbnailed" data-fileid="24916" data-unique="l7tjuu9dp" src="https://academy.hsoub.com/uploads/monthly_2017_09/04_grid_template_columns.thumb.png.c21c37a4fbeba84b1061718e8c6bb774.png"></a>
</p>

<h3 id="وحدة-القياس-fr">
	وحدة القياس fr
</h3>

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

<p>
	يُنشئ المثال التالي ثلاثة مسارات متساوية العرض تزداد وتتقلص وفقًا للمساحة المتاحة.
</p>

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

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

<p style="text-align: center;">
	<img alt="05_using_fr_unit.png" class="ipsImage ipsImage_thumbnailed" data-fileid="24917" data-unique="wk4rs1xof" src="https://academy.hsoub.com/uploads/monthly_2017_09/05_using_fr_unit.png.cf67f89368a4fbff7d8cff59b162d3a0.png"></p>

<p>
	في المثال التالي، عرّفنا شبكة من مسار بقياس <code>2fr</code> ثم مسارين بقياس <code>1fr</code>. تُقسَّم المساحة المتاحة إلى أربعة. يُعطَى جزآن للمسار الأول وجزء واحد لكل من المسارَيْن الآخريْن.
</p>

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

<p>
	في المثال الأخير، سوف نمزج بين استخدام وحدة القياس الثابتة pixel مع وحدات الأجزاء fr.
</p>

<p>
	المسار الأول هو 500 بكسل. تُؤخذ قيمة هذا العرض الثابت من المساحة المتاحة. وتُقسَّم المساحة المتبقية إلى ثلاثة أجزاء وتُخَصص بالتناسب مع اثنين من المسارات المرنة <code>fr</code>.
</p>

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

<h3 id="إنشاء-مسارات-باستخدام-التعليمة-repeat">
	إنشاء مسارات باستخدام التعليمة ()repeat
</h3>

<p>
	لإنشاء شبكات كبيرة مع الكثير من المسارات يمكن استخدام التعليمة <code>()repeat</code> لتكرار عناصر المسارات أو أجزاء منها.
</p>

<p>
	يمكن أن تُكتَب الشبكة التاليّة:
</p>

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

<p>
	بالطريقة أدناه:
</p>

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

<p>
	يمكن تطبيق التعليمة <code>()repeat</code> على جزء من عناصر المسار. ننشئ في المثال التالي شبكة بمسار ابتدائي على 20 بكسل، ثم ننشئ الجزء الموالي من الشبكة بتكرار مسار ذي قياس <code>1fr</code> ست مرات ثم ننشئ في الأخير مسارا قياسه 20 بكسل.
</p>

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

<p>
	يمكن استخدام التعليمة <code>()repeat</code> لإنشاء نمط من المسارات المتكرّرة. ننشئ في المثال التالي شبكة من عشرة مسارات وذلك بتكرار النمط “<strong>مسار بقياس <code>1fr</code> يليه مسار بقياس <code>2fr</code></strong>” خمس مرات.
</p>

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

<h3 id="الشبكة-الضمنية-implicit-والشبكة-الصريحة-explicit">
	الشبكة الضمنية Implicit والشبكة الصريحة Explicit
</h3>

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

<p>
	تتكون الشبكة الصريحة من الصفوف والأعمدة التي نحددها باستخدام <code>grid-template-rows</code> و<code>grid-template-columns</code>. إن أضفت محتوى خارج الشبكة المحدَّدة تلك، أو إن احتجت لمسارات جديدة في الشبكة نظرا لكميّة المحتوى؛ فإن الشبكة ستُنشئ الصفوف والأعمدة في الشبكة الضمنية. تأخذ هذه المسارات مبدئيًّا قياسا تلقائيا Auto-sized، لذا سيعتمد القياس على المحتوى الموجود بها.
</p>

<p>
	يمكنك أيضا تعيين قياس محدد للمسارات التي تُنشَأ في الشبكة الضمنية باستخدام خاصتيْ <code>grid-auto-rows</code> و<code>grid-auto-columns</code>. في المثال التالي، استخدمنا <code>grid-auto-rows</code> لضمان أن المسارات التي تُنشَأ في الشبكة الضمنية ذات ارتفاع 200 بكسل.
</p>

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

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

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="24918" href="https://academy.hsoub.com/uploads/monthly_2017_09/06_implicit_explicit_grid.png.f9387b6cef0aefc15914a68c2165f078.png" rel=""><img alt="06_implicit_explicit_grid.png" class="ipsImage ipsImage_thumbnailed" data-fileid="24918" data-unique="4o4ec2j22" src="https://academy.hsoub.com/uploads/monthly_2017_09/06_implicit_explicit_grid.thumb.png.49a0be791d1276acff3dcc636d75461d.png"></a>
</p>

<h3 id="قياس-المسارات-و-minmax">
	قياس المسارات و ()minmax
</h3>

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

<p>
	الحل هو استخدام الدّالة <code>()minmax</code>. في المثال التالي استخدمنا الدّالة <code>()minmax</code> قيمةً للخاصيّة <code>grid-auto-rows</code>. ستُنشَأ الصفوف تلقائيا بحد أدنى يبلغ 100 بكسل طولًا، وحد أقصى تلقائي <code>auto</code>. يعني استخدام <code>auto</code> أن الحجم سوف يبدو في حجم المحتوى ويمتد لإعطاء مساحة لأطول محتوى في خلية موجودة في هذا الصف.
</p>

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

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_9052_39" style="">
<span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"wrapper"</span><span class="tag">&gt;</span><span class="pln">
   </span><span class="tag">&lt;div&gt;</span><span class="pln">One</span><span class="tag">&lt;/div&gt;</span><span class="pln">
   </span><span class="tag">&lt;div&gt;</span><span class="pln">Two
   </span><span class="tag">&lt;p&gt;</span><span class="pln">I have some more content in.</span><span class="tag">&lt;/p&gt;</span><span class="pln">

</span><span class="tag">&lt;p&gt;</span><span class="pln">This makes me taller than 100 pixels.</span><span class="tag">&lt;/p&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">Three</span><span class="tag">&lt;/div&gt;</span><span class="pln">
   </span><span class="tag">&lt;div&gt;</span><span class="pln">Four</span><span class="tag">&lt;/div&gt;</span><span class="pln">
   </span><span class="tag">&lt;div&gt;</span><span class="pln">Five</span><span class="tag">&lt;/div&gt;</span><span class="pln">
</span><span class="tag">&lt;/div&gt;</span></pre>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="24919" href="https://academy.hsoub.com/uploads/monthly_2017_09/07_minmax_use_grid_tracks.png.3f7b19eb99795881df3e44ea4efe699f.png" rel=""><img alt="07_minmax_use_grid_tracks.png" class="ipsImage ipsImage_thumbnailed" data-fileid="24919" data-unique="elszy69ro" src="https://academy.hsoub.com/uploads/monthly_2017_09/07_minmax_use_grid_tracks.thumb.png.da96bac253f571bc81b8d4a680d5edf1.png"></a>
</p>

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

<p>
	ترجمة - بتصرّف - للمقال <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Grid_Layout/Basic_Concepts_of_Grid_Layout" rel="external nofollow">Basic concepts of grid layout</a> الذي اشترك في كتابته <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Grid_Layout/Basic_Concepts_of_Grid_Layout%24history" rel="external nofollow">مساهمو موزيللا Mozilla contributors</a>.
</p>

<p>
	حقوق الصورة الصورة البارزة محفوظة لـ <a href="http://www.freepik.com/free-vector/dynamic-abstract-geometrical-grid-background-vector-graphic-from-curved-angular-striped-grid_1260678.htm" rel="external nofollow">Freepik</a>
</p>
]]></description><guid isPermaLink="false">527</guid><pubDate>Tue, 05 Sep 2017 06:21:02 +0000</pubDate></item><item><title>&#x643;&#x64A;&#x641; &#x62A;&#x62A;&#x62D;&#x642;&#x651;&#x642; &#x645;&#x646; &#x627;&#x644;&#x62E;&#x635;&#x627;&#x626;&#x635; &#x627;&#x644;&#x645;&#x62F;&#x639;&#x648;&#x645;&#x629; &#x641;&#x64A; &#x627;&#x644;&#x645;&#x62A;&#x635;&#x641;&#x62D;&#x627;&#x62A;</title><link>https://academy.hsoub.com/programming/css/%D9%83%D9%8A%D9%81-%D8%AA%D8%AA%D8%AD%D9%82%D9%91%D9%82-%D9%85%D9%86-%D8%A7%D9%84%D8%AE%D8%B5%D8%A7%D8%A6%D8%B5-%D8%A7%D9%84%D9%85%D8%AF%D8%B9%D9%88%D9%85%D8%A9-%D9%81%D9%8A-%D8%A7%D9%84%D9%85%D8%AA%D8%B5%D9%81%D8%AD%D8%A7%D8%AA-r520/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2017_08/main.png.6179fb12593dfbd6dc0c9f2c7c7ef212.png" /></p>

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

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

<p>
	يوجد عدد من الممارسات الجيدة التي تتيح للموقع الإلكتروني أن يعمل على نحو جيّد في جميع المتصفحات. ينصح عادة بتوفير الدعم التراجعي Fallback support عند استخدام خصائص <a href="https://academy.hsoub.com/programming/css/" rel="">CSS 3</a> وذلك لدعم المتصفحات القديمة، وهناك تقنيات أخرى مثل الـ Shivs و Polyfills وهي عبارة عن ملحقات <a href="https://academy.hsoub.com/programming/javascript/" rel="">JavasScript</a> صغيرة تضيف الدعم لعدد من المزايا المطلوبة التي لا تدعمها المتصفحات القديمة مبدئيًّا.
</p>

<h2 id="html-shiv">
	HTML Shiv
</h2>

<p>
	أحد أشهر الملحقات التي تقدّم الدعم التراجعي هو HTML5 Shivs، وقد <a href="http://paulirish.com/2011/the-history-of-the-html5-shiv/" rel="external nofollow">أنشأ Remy Sharp هذا الملحق</a> لإتاحة استخدام عناصر <a href="https://academy.hsoub.com/programming/html5/" rel="">HTML 5</a> في Internet Explorer 8 وما قبله، ولا يكتفي هذا الملحق بتوفير الدعم لعناصر HTML5 فقط، بل يتجاوز ذلك إلى إمكانية تنسيقها بواسطة CSS.
</p>

<p>
	يجب تنزيل آخر إصدار من هذا الملحق من Google حيث يحتفظ Remy بآخر الإصدارات، ثم ضيافتها على الخادوم الخاص بك. وللحصول على أفضل أداء يفضّل الإشارة إلى ملف JavaScript الخاص بالإضافة في بداية الصفحة ضمن الوسم <code>&lt;head&gt;</code>، مباشرة بعد الإشارة إلى ملفات CSS. كذلك يجب وضع شفرة جلب الإضافة ضمن تعليق مشروط لتضمن تنزيل الملفات في الإصدار الثامن من Internet Explorer وما دونه.
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_7193_15" style="">
<span class="com">&lt;!--[if lt IE 9]&gt;
  &lt;script src="html5shiv.js"&gt;&lt;/script&gt;
&lt;![endif]--&gt;</span></pre>

<p>
	وبعد إنشاء عناصر HTML5 الجديدة في مستوى Block باستخدام HTML5 Shiv يجب تحديد وتحديث تلك العناصر بواسطة التصريح <code>display:block</code>.
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_7193_13" style="">
<span class="pln">article</span><span class="pun">,</span><span class="pln">
aside</span><span class="pun">,</span><span class="pln">
details</span><span class="pun">,</span><span class="pln">
figcaption</span><span class="pun">,</span><span class="pln">
figure</span><span class="pun">,</span><span class="pln">
footer</span><span class="pun">,</span><span class="pln">
header</span><span class="pun">,</span><span class="pln">
hgroup</span><span class="pun">,</span><span class="pln">
nav</span><span class="pun">,</span><span class="pln">
section</span><span class="pun">,</span><span class="pln">
summary </span><span class="pun">{</span><span class="pln">
  display</span><span class="pun">:</span><span class="pln"> block</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	لا يعرّف الإصداران الثامن والتاسع من Internet Explorer أنماط بعض عناصر HTML5 بطريقة صحيحة في مستوى Inline-block، لذا تجب إضافة التصريح <code>display: inline-block</code> إلى هذه العناصر.
</p>

<p>
	بهذا يمكنك استخدام أي عنصر من عناصر HTML5 في جميع إصدارات Internet Explorer.
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_7193_11" style="">
<span class="pln">audio</span><span class="pun">,</span><span class="pln">
canvas</span><span class="pun">,</span><span class="pln">
video </span><span class="pun">{</span><span class="pln">
  display</span><span class="pun">:</span><span class="pln"> </span><span class="kwd">inline</span><span class="pun">-</span><span class="pln">block</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></pre>

<h4 id="ما-الفرق-بين-shiv-و-shim">
	ما الفرق بين Shiv و Shim
</h4>

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

<h2 id="الكشف-عن-المزايا-المتاحة-في-المتصفح">
	الكشف عن المزايا المتاحة في المتصفح
</h2>

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

<p>
	توفّر مكتبة Modernizr وسيلة للكشف عن ميزات المتصفح من خلال كتابة شفرات CSS و JavaScript مشروطة بالاستناد إلى دعم المتصفح لخاصّية معينة أم لا. فعلى سبيل المثال، إن كان أحد المتصفحات يدعم خاصّية الأركان الدائرية فستقوم Moderinzr بإضافة الصنف <code>borderradius</code> إلى عنصر <code>html</code>. أما إن كان المتصفح لا يدعم هذه الخاصّية، تقوم مكتبة Modernizr بإضافة الصنف <code>no-borderradius</code> إلى عنصر <code>html</code>.
</p>

<h3 id="تنزيل-مكتبة-modernizr">
	تنزيل مكتبة Modernizr
</h3>

<p>
	لتشغيل مكتبة Modernizr في موقعك توجّه إلى <a href="http://modernizr.com/download/" rel="external nofollow">صفحة التنزيل</a> الخاصة بالمكتبة حيث يمكنك اختيار الخصائص التي ترغب في الكشف عنها. بعد تنزيل المكتبة ارفعها إلى الخادوم الخاص بك ثم أشر إلى الملف ضمن الوسم <code>head</code> في صفحة HTML مباشرة بعد آخر إشارة لملفات الأنماط.
</p>

<p>
	من الجدير بالذكر أنّه يمكن تخصيص Modernizr لتتضمن HTML5 Shiv، وبهذا لا حاجة للإشارة إليها في بداية Modernizr.
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_7193_17" style="">
<span class="tag">&lt;script</span><span class="pln"> </span><span class="atn">src</span><span class="pun">=</span><span class="atv">"modernizr.js"</span><span class="tag">&gt;&lt;/script&gt;</span></pre>

<h3 id="التطبيق-الشرطي-لأنماط-css">
	التطبيق الشرطي لأنماط CSS
</h3>

<p>
	بمجرد أن تبدأ مكتبة Modernizr بالعمل يصبح بالإمكان تطبيق أنماط CSS بالاعتماد على وجود أو عدم وجود خصائص معينة في المتصفح الذي يعرض الموقع الإلكتروني. تستطيع Modernizr الكشف عن معظم الخصائص والقيم التي تقدّمها CSS3 ويمكنك التعرّف عليها من خلال <a href="http://modernizr.com/docs/#features-css" rel="external nofollow">توثيقات المكتبة</a> على شبكة الإنترنت.
</p>

<p>
	يجدر الانتباه إلى أنّه قد يكون من غير الضروري الكشف عن الخصائص المتعلقة ببعض الأنماط، فعلى سبيل المثال عندم <a href="https://academy.hsoub.com/programming/css/%D8%A7%D9%84%D8%AA%D8%B9%D8%A7%D9%85%D9%84-%D9%85%D8%B9-%D8%A7%D9%84%D8%A3%D9%84%D9%88%D8%A7%D9%86-%D9%81%D9%8A-css-r255/" rel="">استخدام قيمة لون</a> بصيغة <code>RGBa</code> يمكن تقديم دعم تراجعي لهذه القيمة من خلال توفير قيمة اللون بصيغة <code>hexadecimal</code> دون الحاجة إلى اللجوء لتقنية الكشف عن الخصائص. عندما تقرّر استخدام تقنية الكشف عن الخصائص من الضروري أن تحافظ على تنظيم الشفرات وأن تراعي مسألة الأداء. تجنّب قدر الإمكان تكرار الشفرة لأكثر من مرة أو إنشاء <a href="https://academy.hsoub.com/programming/general/http-%D9%84%D9%86%D9%86%D8%B7%D9%84%D9%82-%D8%B4%D8%B1%D8%AD-%D8%A7%D9%84%D8%AA%D8%AE%D8%A7%D8%B7%D8%A8-%D8%A8%D9%8A%D9%86-%D8%A7%D9%84%D8%B9%D9%85%D9%8A%D9%84-%D9%88%D8%A7%D9%84%D8%AE%D8%A7%D8%AF%D9%88%D9%85-r74/" rel="">طلبات HTTP</a> إضافية.
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_7193_19" style="">
<span class="pln">button </span><span class="pun">{</span><span class="pln">
  border</span><span class="pun">:</span><span class="pln"> </span><span class="lit">0</span><span class="pun">;</span><span class="pln">
  color</span><span class="pun">:</span><span class="pln"> </span><span class="com">#fff;</span><span class="pln">
  cursor</span><span class="pun">:</span><span class="pln"> pointer</span><span class="pun">;</span><span class="pln">
  font</span><span class="pun">-</span><span class="pln">size</span><span class="pun">:</span><span class="pln"> </span><span class="lit">14px</span><span class="pun">;</span><span class="pln">
  font</span><span class="pun">-</span><span class="pln">weight</span><span class="pun">:</span><span class="pln"> </span><span class="lit">600</span><span class="pun">;</span><span class="pln">
  margin</span><span class="pun">:</span><span class="pln"> </span><span class="lit">0</span><span class="pun">;</span><span class="pln">
  outline</span><span class="pun">:</span><span class="pln"> </span><span class="lit">0</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

</span><span class="com">/* With CSS Gradient Styles */</span><span class="pln">

</span><span class="pun">.</span><span class="pln">cssgradients button </span><span class="pun">{</span><span class="pln">
  border</span><span class="pun">:</span><span class="pln"> </span><span class="lit">1px</span><span class="pln"> solid </span><span class="com">#0080c2;</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="lit">00a2f5</span><span class="pun">,</span><span class="pln"> </span><span class="com">#0087cc);</span><span class="pln">
  border</span><span class="pun">-</span><span class="pln">radius</span><span class="pun">:</span><span class="pln"> </span><span class="lit">6px</span><span class="pun">;</span><span class="pln">
  padding</span><span class="pun">:</span><span class="pln"> </span><span class="lit">15px</span><span class="pln"> </span><span class="lit">30px</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
</span><span class="pun">.</span><span class="pln">cssgradients button</span><span class="pun">:</span><span class="pln">hover </span><span class="pun">{</span><span class="pln">
  background</span><span class="pun">:</span><span class="pln"> linear</span><span class="pun">-</span><span class="pln">gradient</span><span class="pun">(#</span><span class="lit">1ab1ff</span><span class="pun">,</span><span class="pln"> </span><span class="com">#009beb);</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
</span><span class="pun">.</span><span class="pln">cssgradients button</span><span class="pun">:</span><span class="pln">active </span><span class="pun">{</span><span class="pln">
  box</span><span class="pun">-</span><span class="pln">shadow</span><span class="pun">:</span><span class="pln"> inset </span><span class="lit">0</span><span class="pln"> </span><span class="lit">1px</span><span class="pln"> </span><span class="lit">10px</span><span class="pln"> rgba</span><span class="pun">(</span><span class="lit">255</span><span class="pun">,</span><span class="pln"> </span><span class="lit">255</span><span class="pun">,</span><span class="pln"> </span><span class="lit">255</span><span class="pun">,</span><span class="pln"> </span><span class="pun">.</span><span class="lit">5</span><span class="pun">);</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

</span><span class="com">/* Without CSS Gradient Styles */</span><span class="pln">

</span><span class="pun">.</span><span class="kwd">no</span><span class="pun">-</span><span class="pln">cssgradients button </span><span class="pun">{</span><span class="pln">
  background</span><span class="pun">:</span><span class="pln"> transparent url</span><span class="pun">(</span><span class="str">"button.png"</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="kwd">no</span><span class="pun">-</span><span class="pln">repeat</span><span class="pun">;</span><span class="pln">
  padding</span><span class="pun">:</span><span class="pln"> </span><span class="lit">16px</span><span class="pln"> </span><span class="lit">31px</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">cssgradients button</span><span class="pun">:</span><span class="pln">hover </span><span class="pun">{</span><span class="pln">
  background</span><span class="pun">-</span><span class="pln">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">49px</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">cssgradients button</span><span class="pun">:</span><span class="pln">active </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">98px</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></pre>

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

<p>
	عند العمل مع تقنية الكشف عن خصائص CSS3 يكون من الصعب تخمين مظهر عنصر معين في المتصفحات التي لا تدعم الخصائص الجديدة، ولحسن الحظ هناك أداة تدعى <a href="http://davatron5000.github.com/deCSS3/" rel="external nofollow">deCSS3</a> تعمل على تعطيل جميع خصائص CSS3 في الصفحة ما يسمح لك بالتعرف على مظهر موقعك الإلكتروني عندما لا تُستخدَم CSS3، إضافة إلى اختبار الأنماط المشروطة المستخدمة في الموقع. لتحصل على فكرة سريعة عن الخصائص والميزات التي يدعمها متصفّح معين،زر الموقع <a href="http://haz.io/" rel="external nofollow">haz.io</a> باستخدام ذلك المتصفح.
</p>

<h2 id="التنزيل-الشرطي-للملفات">
	التنزيل الشرطي للملفات
</h2>

<p>
	إضافة إلى التنزيل الشرطي للأنماط، تقدّم مكتبة Modernizr وسيلة لاستخدام تقنية الكشف عن الخصائص في JavaScript، حيث يصبح بالإمكان تنزيل ملفات الـ Polyfills وغيرها من الملفات بالاستناد إلى وجود خاصية معينة والاستعانة بمكتبة <a href="https://academy.hsoub.com/programming/javascript/jquery/" rel="">jQuery</a> وتابع <code>getScript</code> الخاص بهذه المكتبة.
</p>

<p>
	يمكن استخدام مكتبة Modernizr في العبارات الشرطية وذلك لتشغيل شفرات متنوعة اعتمادًا على تحقق الشرط أو عدمه. في المثال التالي تتحقّق Modernizr من دعم المتصفح لخاصية التخزين المحلي Local storage. إن كانت هذه الخاصّية متوفرة في المتصفح، يُنزَّل الملف <code>storage.js</code> باستخدام jQuery وتابع <code>getScript</code>، أما إن كانت هذه الخاصّية غير مدعومة في المتصفح فيُستعان بـ jQuery لتنزيل ملف <code>storage-polyfills.js</code> وبواسطة التابع ذاته.
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_7193_21" style="">
<span class="pln">$</span><span class="pun">(</span><span class="pln">document</span><span class="pun">).</span><span class="pln">ready</span><span class="pun">(</span><span class="kwd">function</span><span class="pun">()</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="typ">Modernizr</span><span class="pun">.</span><span class="pln">localstorage</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
    </span><span class="com">// التخزين المحلّي متوفّر</span><span class="pln">
    jQuery</span><span class="pun">.</span><span class="pln">getScript</span><span class="pun">(</span><span class="str">'storage.js'</span><span class="pun">);</span><span class="pln">
  </span><span class="pun">}</span><span class="pln"> </span><span class="kwd">else</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
    </span><span class="com">// التخزين المحلّي غير متوفّر</span><span class="pln">
    jQuery</span><span class="pun">.</span><span class="pln">getScript</span><span class="pun">(</span><span class="str">'storage-polyfill.js'</span><span class="pun">);</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">
</span><span class="pun">});</span></pre>

<h3 id="التنزيل-الشرطي-بالاستناد-إلى-استعلام-الوسيط-media-query">
	التنزيل الشرطي بالاستناد إلى استعلام الوسيط Media Query
</h3>

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

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_7193_23" style="">
<span class="pln">$</span><span class="pun">(</span><span class="pln">document</span><span class="pun">).</span><span class="pln">ready</span><span class="pun">(</span><span class="kwd">function</span><span class="pun">()</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="typ">Modernizr</span><span class="pun">.</span><span class="pln">mq</span><span class="pun">(</span><span class="str">'screen and (min-width: 640px)'</span><span class="pun">))</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
    jQuery</span><span class="pun">.</span><span class="pln">getScript</span><span class="pun">(</span><span class="str">'tabs.js'</span><span class="pun">);</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">
</span><span class="pun">});</span></pre>

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

<h3 id="التشغيل-الشرطي-للشفرات">
	التشغيل الشرطي للشفرات
</h3>

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

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_7193_25" style="">
<span class="pln">$</span><span class="pun">(</span><span class="pln">document</span><span class="pun">).</span><span class="pln">ready</span><span class="pun">(</span><span class="kwd">function</span><span class="pun">()</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="typ">Modernizr</span><span class="pun">.</span><span class="pln">mq</span><span class="pun">(</span><span class="str">'screen and (max-width: 400px)'</span><span class="pun">))</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
    $</span><span class="pun">(</span><span class="str">'.size'</span><span class="pun">).</span><span class="pln">text</span><span class="pun">(</span><span class="str">'small'</span><span class="pun">);</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">
</span><span class="pun">});</span></pre>

<p>
	يوضح المثال السابق على نحو مبسط طريقة تنفيذ شفرة JavaScript بالاستناد إلى شرط وضعته Modernizr. إن كان عرض الشاشة عند تنزيل الصفحة أكبر من 800 بكسل فلن يحدث شيء. ولكن إن كان عرض الشاشة أصغر من هذا الرقم تُبْدَل ‘large’ بكلمة ‘small’.
</p>

<h2 id="html5-و-css3-polyfills">
	HTML5 و CSS3 Polyfills
</h2>

<p>
	تتوفّر في الوقت الحاضر polyfills لمختلف مزايا HTML5 وCSS3 تقريبًا، وقد وفّر الفريق المسؤول عن تطوير Modernizr <a href="https://github.com/Modernizr/Modernizr/wiki/HTML5-Cross-browser-Polyfills" rel="external nofollow">قائمة مفصّلة</a> بالـ polyfills المتوفّرة، والتي يمكن استخدامها حسب الحاجة.
</p>

<p>
	كذلك وضع نفس الفريق <a href="http://html5please.com/" rel="external nofollow">قائمة</a> بجميع ميزات HTML5 و CSS3 الجديدة إضافة إلى تعليمات استخدام هذه الميزات بصورة صحيحة. يجب الانتباه إلى أنّه لا تحتاج جميع هذه الميزات إلى الـ Polyfills، إذ يمكن الاستفادة من بعضها مباشرة أو من خلال الدعم التراجعي.
</p>

<h2 id="اختبار-الموقع-في-متصفحات-مختلفة">
	اختبار الموقع في متصفحات مختلفة
</h2>

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

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

<p style="text-align: center;">
	<img alt="01_vms_ie.png" class="ipsImage ipsImage_thumbnailed" data-fileid="24570" data-unique="1izlzx5cd" src="https://academy.hsoub.com/uploads/monthly_2017_08/01_vms_ie.png.01ae2db3d3d50f2c3fbf92d0d7a7c608.png"></p>

<p>
	يظهر في الصورة أعلاه برنامج <a href="https://academy.hsoub.com/tags/virtualbox/#elSearch_main" rel="">VirtualBox</a> يعمل على نظام Mac OS X مع المتصفح Internet Explorer من الإصدار السادس إلى التاسع.
</p>

<p>
	تقدّم Microsoft مجموعة من الحواسيب الافتراضية Virtual PCs التي يمكن استخدامها في عملية الاختبار، ولكن يمكن لعملية الإعداد أن تكون مرهقة وصعبة. لحسن الحظ قام Greg Thornton ببناء أداة <a href="http://xdissent.github.com/ievms/" rel="external nofollow">تُؤَتْمِت</a> عملية تنصيب الآلات الافتراضية. تستغرق عملية التنصيب بعض الوقت وذلك لتنزيل جميع الآلات الافتراضية المتوفرة، وستحتاج كذلك إلى مساحة كبيرة على القرص الصلب، ولكن يمكن تثبيت الآلات الافتراضية التي تحتاج إليها فقط، وبالنظر إلى وتيرة استخدامك لهذه الآلات الافتراضية، قد يكون من الأفضل تنصيبها على قرص صلب خارجي.
</p>

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

<p style="text-align: center;">
	<img alt="02_ie7_inside_vm.png" class="ipsImage ipsImage_thumbnailed" data-fileid="24571" data-unique="afo0j9fgw" src="https://academy.hsoub.com/uploads/monthly_2017_08/02_ie7_inside_vm.png.51d8ecef8bd75c6f845560a2d7f4e677.png"></p>

<p>
	يظهر في الصورة أعلاه الإصدار السابع من Internet Explorer يعمل في آلة افتراضية مع استخدام أداة Firebug Lite لتنقيح الشفرة البرمجية.
</p>

<p>
	ترجمة - وبتصرّف - للمقال <a href="http://learn.shayhowe.com/advanced-html-css/feature-support-polyfills/" rel="external nofollow">Feature Support &amp; Polyfills</a> لصاحبه Shay Howe.
</p>
]]></description><guid isPermaLink="false">520</guid><pubDate>Fri, 18 Aug 2017 05:51:55 +0000</pubDate></item><item><title>&#x643;&#x64A;&#x641; &#x62A;&#x646;&#x638;&#x651;&#x645; &#x634;&#x641;&#x631;&#x629; CSS &#x644;&#x62A;&#x62C;&#x631;&#x628;&#x629; &#x62A;&#x637;&#x648;&#x64A;&#x631; &#x623;&#x641;&#x636;&#x644; &#x648;&#x623;&#x62F;&#x627;&#x621; &#x623;&#x62D;&#x633;&#x646;</title><link>https://academy.hsoub.com/programming/css/%D9%83%D9%8A%D9%81-%D8%AA%D9%86%D8%B8%D9%91%D9%85-%D8%B4%D9%81%D8%B1%D8%A9-css-%D9%84%D8%AA%D8%AC%D8%B1%D8%A8%D8%A9-%D8%AA%D8%B7%D9%88%D9%8A%D8%B1-%D8%A3%D9%81%D8%B6%D9%84-%D9%88%D8%A3%D8%AF%D8%A7%D8%A1-%D8%A3%D8%AD%D8%B3%D9%86-r518/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2017_08/main.png.d8190cf472df42ea08005491256b70b2.png" /></p>

<p>
	إن قدرتك على كتابة شفرة HTML وCSS مع فهم عميق لما تكتبه يعني امتلاكك لمهارة كبيرة ومتميّزة، وعند ازدياد حجم شفرات الموقع الإلكتروني وكذلك عدد زوّاره، تظهر الحاجة إلى مجموعة جديدة من المهارات المهمّة والضرورية لتوفير الوقت أثناء التطوير ولتحسين <a href="https://academy.hsoub.com/design/user-experience/" rel="">تجربة المستخدم</a>؛ لذا فإن معرفة أساسيات تحسين أداء الموقع الإلكتروني وتنظيمه قد يساعد كثيرًا في هذا الصدد.
</p>

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

<h2 id="إستراتيجية-وبنية-الشفرة-الأساسية">
	إستراتيجية وبنية الشفرة الأساسية
</h2>

<p>
	تتمثّل أول خطوة في طريق تحسين أداء الموقع الإلكتروني وتنظيمه في تحديد إستراتيجة وبنية جيدة للشفرة الأساسية، وذلك من خلال ترتيب مجلدات المشروع بصورة جيدة، وتحديد <a href="https://academy.hsoub.com/tags/design%20pattern/#elSearch_main" rel="">أنماط التصميم Design patterns</a>، وإيجاد السبل اللازمة لإعادة استخدام الشفرة الشائعة.
</p>

<h3 id="بنية-الأنماط-styles">
	بنية الأنماط Styles
</h3>

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

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_1646_22" style="">
<span class="pln">    </span><span class="com"># Base</span><span class="pln">
      </span><span class="pun">–</span><span class="pln"> normalize</span><span class="pun">.</span><span class="pln">css
      </span><span class="pun">–</span><span class="pln"> layout</span><span class="pun">.</span><span class="pln">css
      </span><span class="pun">–</span><span class="pln"> typography</span><span class="pun">.</span><span class="pln">css

    </span><span class="com"># Components</span><span class="pln">
      </span><span class="pun">–</span><span class="pln"> alerts</span><span class="pun">.</span><span class="pln">css
      </span><span class="pun">–</span><span class="pln"> buttons</span><span class="pun">.</span><span class="pln">css
      </span><span class="pun">–</span><span class="pln"> forms</span><span class="pun">.</span><span class="pln">css
      </span><span class="pun">–</span><span class="pln"> list</span><span class="pun">.</span><span class="pln">css
      </span><span class="pun">–</span><span class="pln"> nav</span><span class="pun">.</span><span class="pln">css
      </span><span class="pun">–</span><span class="pln"> tables</span><span class="pun">.</span><span class="pln">css

    </span><span class="com"># Modules</span><span class="pln">
      </span><span class="pun">–</span><span class="pln"> aside</span><span class="pun">.</span><span class="pln">css
      </span><span class="pun">–</span><span class="pln"> footer</span><span class="pun">.</span><span class="pln">css
      </span><span class="pun">–</span><span class="pln"> header</span><span class="pun">.</span><span class="pln">css</span></pre>

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

<p>
	يتضمن المجلد <code>base</code> الأنماط الشائعة والمتغيّراات المستخدمة في أرجاء الموقع الإلكتروني كالأنماط المتعلقة بمخطط الصفحات و<a href="https://academy.hsoub.com/programming/css/%D8%AA%D9%86%D8%B3%D9%8A%D9%82-%D9%86%D8%B5%D9%88%D8%B5-%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-r251/" rel="">تنسيق النصوص</a> على سبيل المثال. أما المجلد <code>components</code> (المكوّنات) فيتضمن الأنماط الخاصة بعناصر واجهة الاستخدام والتي يمكن تقسيمها إلى مكونات مختلفة مثل التنبيهات والأيقونات. أخيرًا، يتضمن المجلد <code>modules</code> (الوحدات) الأنماط الخاصة بأقسام الصفحة المختلفة، والتي تُحدَّد حسب طبيعة المشروع واحتياجاته.
</p>

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

<p>
	إن ترتيب الأنماط بهذه الأسلوب ليس أمر مستحدثًا، وقد ورد ذكره سابقًا في عدد من منهجيات <a href="https://academy.hsoub.com/programming/css/" rel="">CSS</a> مثل CSS كائنية التوجه Object Oriented CSS أو OOCSS اختصارًا، وبنية CSS القابلة للتجميع والتوسع Scalable and Modular Architecture for CSS أو SMACSS اختصارًا. لكل واحدة من هذه المنهجيات آراؤها الخاصة حول بنية الملفات وكذلك حول طريقة استخدام الأنماط.
</p>

<h3 id="css-كائنية-التوجه">
	CSS كائنية التوجه
</h3>

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

<ul>
<li>
		فصل البنية عن القشرة،
	</li>
	<li>
		فصل المحتوى عن الحاوي.
	</li>
</ul>
<p>
	المقصود <strong>بفصل البنية عن القشرة</strong> هو تجريد مخطط العنصر من السمة العامة للموقع الإلكتروني. بمعنى أنّه يجب أن تكون بنية الوحدة شفافة، وتسمح بتوارث الأنماط الأخرى وعرضها دون أي تضارب. ويتطلب هذا بنية رصينة <a href="https://academy.hsoub.com/programming/css/%D8%B1%D8%B5%D9%81-%D8%A7%D9%84%D8%B9%D9%86%D8%A7%D8%B5%D8%B1-layout-%D9%81%D9%8A-css-r264/" rel="">للمخطّطات</a> و<a href="https://academy.hsoub.com/programming/css/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D8%B4%D8%A8%D9%83%D8%A7%D8%AA-css-%D8%A7%D9%84%D8%B9%D8%B5%D8%B1%D9%8A%D8%A9-css-grids-r301/" rel="">الشبكات</a> إلى جانب وحدات متقنة الصنع.
</p>

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

<h6 id="html" style="text-align: left;">
	<em><strong>HTML</strong></em>
</h6>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_1646_8" style="">
<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">"alert alert-error"</span><span class="tag">&gt;</span><span class="pln">
      </span><span class="tag">&lt;p</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"msg"</span><span class="tag">&gt;</span><span class="pln">...</span><span class="tag">&lt;/p&gt;</span><span class="pln">
    </span><span class="tag">&lt;/div&gt;</span></pre>

<h6 id="css" style="text-align: left;">
	<em><strong>CSS</strong></em>
</h6>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_1646_10" style="">
<span class="pln">    </span><span class="pun">.</span><span class="pln">alert </span><span class="pun">{...}</span><span class="pln">
    </span><span class="pun">.</span><span class="pln">alert</span><span class="pun">-</span><span class="pln">error </span><span class="pun">{...}</span><span class="pln">
    </span><span class="pun">.</span><span class="pln">msg </span><span class="pun">{...}</span></pre>

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

<h3 id="بنية-css-القابلة-للتجميع-والتوسع">
	بنية CSS القابلة للتجميع والتوسع
</h3>

<p>
	المنهجية الثانية في تنظيم شفرة CSS هي المنهجية التي طوّرها Jonathan Snook تحت اسم بنية CSS القابلة للتجميع والتوسع. تدعو هذه المنهجية إلى تقسيم الأنماط إلى خمسة فئات رئيسية، هي:
</p>

<ul>
<li>
		الأساس Base،
	</li>
	<li>
		المخطط Layout،
	</li>
	<li>
		الوحدة Module،
	</li>
	<li>
		الحالة State،
	</li>
	<li>
		السمة Theme.
	</li>
</ul>
<p>
	تضمّ فئة <strong>الأساس</strong> الأنماط الأساسية للعناصر التي تغطي الأمور العامة والمبدئية، ثم تأتي بعدها فئة <strong>المخطط</strong> لتحديد الأحجام المختلفة للعناصر إلى جانب أنماط الشبكة مانحة إياها المخطط الرئيسي. أما أنماط <strong>الوحدة</strong> فهي أنماط مخصصة بصورة أكبر وهي موجّهة إلى أجزاء محددة من الصفحة، كروابط التنقّل في الموقع (navigation) أو الأنماط المميزة الأخرى، ثم تأتي بعدها أنماط <strong>الحالة</strong> التي تستخدم لزيادة أو تعديل أنماط أخرى في حال تضمنت الوحدة المعنية حالات مختلفة، كلسان تبويب مفعّل مثلًا. وأخيرًا، يمكن إضافة فئة <strong>السمة</strong> والتي تتضمن أنماط تستند إلى المظهر الخارجي للوحدات المختلفة.
</p>

<h6 id="html-1" style="text-align: left;">
	<em><strong>HTML</strong></em>
</h6>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_1646_12" style="">
<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">"alert is-error"</span><span class="tag">&gt;</span><span class="pln">
      </span><span class="tag">&lt;p&gt;</span><span class="pln">...</span><span class="tag">&lt;/p&gt;</span><span class="pln">
    </span><span class="tag">&lt;/div&gt;</span></pre>

<h6 id="css-1" style="text-align: left;">
	<em><strong>CSS</strong></em>
</h6>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_1646_14" style="">
<span class="pln">    </span><span class="pun">.</span><span class="pln">alert </span><span class="pun">{...}</span><span class="pln">
    </span><span class="pun">.</span><span class="pln">alert</span><span class="pun">.</span><span class="kwd">is</span><span class="pun">-</span><span class="pln">error </span><span class="pun">{...}</span><span class="pln">
    </span><span class="pun">.</span><span class="pln">alert p </span><span class="pun">{...}</span><span class="pln">
    </span><span class="pun">.</span><span class="pln">alert</span><span class="pun">.</span><span class="kwd">is</span><span class="pun">-</span><span class="pln">error p </span><span class="pun">{...}</span></pre>

<p>
	في المثال السابق يكون الصنف <code>alert</code> ضمن فئة الوحدة في حين أن الصنف <code>is-error</code> يكون ضمن فئة الحالة. بعد ذلك تُتوارث الأصناف من هذه الفئات حسب الحاجة.
</p>

<h3 id="أي-منهجية-ستختار">
	أي منهجية ستختار؟
</h3>

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

<h2 id="تحسين-الأداء-بواسطة-المحددات-selectors">
	تحسين الأداء بواسطة المحدّدات Selectors
</h2>

<p>
	عدم الاهتمام ب<a href="https://academy.hsoub.com/programming/css/%D8%A7%D9%84%D9%85%D8%AD%D8%AF%D8%AF%D8%A7%D8%AA-selectors-%D9%81%D9%8A-css-r249/" rel="">المحدّدات</a> من الأمور التي يُبتلى بها الكثير من المطوّرين، حيث ينصبّ جلّ الاهتمام في الغالب على الخصائص والقيم التابعة لها، فما دامت الأنماط مطبّقة على العنصر الصحيح فإن كل شيء يبدو على ما يرام. ولكن هذا افتراض خاطئ تمامًا، فلطريقة تحديد العناصر في CSS أثرٌ كبير على الأداء، بما في ذلك سرعة عرض الصفحات ومدى فعالية الأنماط في البنية العامة للموقع.
</p>

<h3 id="اجعل-المحددات-قصيرة-قدر-الإمكان">
	اجعل المحدّدات قصيرة قدر الإمكان
</h3>

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

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_1646_16" style="">
<span class="pln">    </span><span class="com">/* سيء */</span><span class="pln">
    header nav ul li a </span><span class="pun">{...}</span><span class="pln">

    </span><span class="com">/* جيد */</span><span class="pln">
    </span><span class="pun">.</span><span class="pln">primary</span><span class="pun">-</span><span class="pln">link </span><span class="pun">{...}</span><span class="pln">

    </span><span class="com">/* سيء */</span><span class="pln">
    button strong span </span><span class="pun">{...}</span><span class="pln">
    button strong span </span><span class="pun">.</span><span class="pln">callout </span><span class="pun">{...}</span><span class="pln">

    </span><span class="com">/* جيد */</span><span class="pln">
    button span </span><span class="pun">{...}</span><span class="pln">
    button </span><span class="pun">.</span><span class="pln">callout </span><span class="pun">{...}</span></pre>

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

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

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

<h3 id="استخدم-الأصناف-classes-دائما">
	استخدم الأصناف Classes دائمًا
</h3>

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

<p>
	تُصيَّر المحدّدات من اليمين إلى اليسار؛ لذا فمن الضروري أن تعتني جيّدًا بـ <strong>المحدّد الرئيسي Key selector</strong> وهو المحدد الأخير ضمن قائمة المحدّدات من الجهة اليمنى، وهو محدّد مهمّ للغاية؛ لأنّه يحدّد العنصر الأول الذي سيعثر عليه المتصفح أثناء بحثه ضمن الصفحة، وسيؤدي عدم الاعتناء بالمحدد الرئيسي إلى دخول المتصفح في فوضى عارمة.
</p>

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

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_1646_18" style="">
<span class="pln">    </span><span class="com">/* سيء */</span><span class="pln">
    </span><span class="com">#container header nav {...}</span><span class="pln">

    </span><span class="com">/* جيد */</span><span class="pln">
    </span><span class="pun">.</span><span class="pln">primary</span><span class="pun">-</span><span class="pln">nav </span><span class="pun">{...}</span><span class="pln">

    </span><span class="com">/* سيء */</span><span class="pln">
    article</span><span class="pun">.</span><span class="pln">feat</span><span class="pun">-</span><span class="pln">post </span><span class="pun">{...}</span><span class="pln">

    </span><span class="com">/* جيد */</span><span class="pln">
    </span><span class="pun">.</span><span class="pln">feat</span><span class="pun">-</span><span class="pln">post </span><span class="pun">{...}</span></pre>

<p>
	يجدر بك كذلك الابتعاد عن استخدام محدّدات المعرّفات ID selectors قدر الإمكان؛ ذلك لأنّها محدّدات مخصّصة جدًّا ولا تسمح بإعادة استخدامها في أي مكان آخر، ويسعني القول إنّ استخدام المعرّف لا يختلف كثيرًا عن استخدام <code>!important</code>.
</p>

<h2 id="الشفرة-القابلة-لإعادة-الاستخدام">
	الشفرة القابلة لإعادة الاستخدام
</h2>

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

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

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_1646_20" style="">
<span class="pln">    </span><span class="com">/* سيء */</span><span class="pln">
    </span><span class="pun">.</span><span class="pln">news </span><span class="pun">{</span><span class="pln">
      background</span><span class="pun">:</span><span class="pln"> </span><span class="com">#eee;</span><span class="pln">
      border</span><span class="pun">-</span><span class="pln">radius</span><span class="pun">:</span><span class="pln"> </span><span class="lit">5px</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"> inset </span><span class="lit">0</span><span class="pln"> </span><span class="lit">1px</span><span class="pln"> </span><span class="lit">2px</span><span class="pln"> rgba</span><span class="pun">(</span><span class="lit">0</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">0</span><span class="pun">,</span><span class="pln"> </span><span class="pun">.</span><span class="lit">25</span><span class="pun">);</span><span class="pln">
    </span><span class="pun">}</span><span class="pln">
    </span><span class="pun">.</span><span class="pln">social </span><span class="pun">{</span><span class="pln">
      background</span><span class="pun">:</span><span class="pln"> </span><span class="com">#eee;</span><span class="pln">
      border</span><span class="pun">-</span><span class="pln">radius</span><span class="pun">:</span><span class="pln"> </span><span class="lit">5px</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"> inset </span><span class="lit">0</span><span class="pln"> </span><span class="lit">1px</span><span class="pln"> </span><span class="lit">2px</span><span class="pln"> rgba</span><span class="pun">(</span><span class="lit">0</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">0</span><span class="pun">,</span><span class="pln"> </span><span class="pun">.</span><span class="lit">25</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">news</span><span class="pun">,</span><span class="pln">
    </span><span class="pun">.</span><span class="pln">social </span><span class="pun">{</span><span class="pln">
      background</span><span class="pun">:</span><span class="pln"> </span><span class="com">#eee;</span><span class="pln">
      border</span><span class="pun">-</span><span class="pln">radius</span><span class="pun">:</span><span class="pln"> </span><span class="lit">5px</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"> inset </span><span class="lit">0</span><span class="pln"> </span><span class="lit">1px</span><span class="pln"> </span><span class="lit">2px</span><span class="pln"> rgba</span><span class="pun">(</span><span class="lit">0</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">0</span><span class="pun">,</span><span class="pln"> </span><span class="pun">.</span><span class="lit">25</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">modal </span><span class="pun">{</span><span class="pln">
      background</span><span class="pun">:</span><span class="pln"> </span><span class="com">#eee;</span><span class="pln">
      border</span><span class="pun">-</span><span class="pln">radius</span><span class="pun">:</span><span class="pln"> </span><span class="lit">5px</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"> inset </span><span class="lit">0</span><span class="pln"> </span><span class="lit">1px</span><span class="pln"> </span><span class="lit">2px</span><span class="pln"> rgba</span><span class="pun">(</span><span class="lit">0</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">0</span><span class="pun">,</span><span class="pln"> </span><span class="pun">.</span><span class="lit">25</span><span class="pun">);</span><span class="pln">
    </span><span class="pun">}</span></pre>

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

<p>
	الخطوة المواليّة لتنظيم شفرة CSS هي معرفة <a href="https://academy.hsoub.com/programming/general/%D8%AE%D8%B7%D9%88%D8%A7%D8%AA-%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D9%91%D8%A9-%D9%84%D8%AA%D8%AD%D8%B3%D9%8A%D9%86-%D8%A3%D8%AF%D8%A7%D8%A1-%D8%A7%D9%84%D9%85%D9%88%D8%A7%D9%82%D8%B9-r519/" rel="">أساسيّات تحسين أداء الموقع</a>.
</p>

<p>
	ترجمة - وبتصرّف - للمقال <a href="http://learn.shayhowe.com/advanced-html-css/performance-organization" rel="external nofollow">Performance &amp; Organization</a> لصاحبه Shay Howe.<br>
	حقوق الصورة البارزة محفوظة لـ <a href="http://www.freepik.com/free-vector/man-designing-a-web_1013994.htm" rel="external nofollow">Freepik</a>
</p>
]]></description><guid isPermaLink="false">518</guid><pubDate>Fri, 11 Aug 2017 15:10:33 +0000</pubDate></item><item><title>&#x62A;&#x623;&#x62B;&#x64A;&#x631;&#x627;&#x62A; &#x627;&#x644;&#x627;&#x646;&#x62A;&#x642;&#x627;&#x644; &#x648;&#x627;&#x644;&#x62D;&#x631;&#x643;&#x629; &#x641;&#x64A; CSS</title><link>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/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2017_08/598870d4be6c0_main5(1).png.74b63c2fb147f72e8960c154c1a04779.png" /></p>

<p>
	كانت القدرة على التحكم بتأثيرات الانتقال Transitions والحركة Animations من إحدى الميزات التي أتت بها <a href="https://academy.hsoub.com/programming/css/" rel="">CSS3</a>، وقد كان مطورو الواجهات الأمامية بحاجة كبيرة إلى مثل هذه الميزة لتصميم هذه التأثيرات باستخدام HTML و CSS فقط دون الحاجة إلى استخدام <a href="https://academy.hsoub.com/programming/javascript/" rel="">Javascript</a> أو Flash، وقد تحققت رغبتهم أخيرًا وبعد سنوات عديدة.
</p>

<p>
	تتيح تأثيرات الانتقال في CSS3 تغيير مظهر أو سلوك العنصر عندما تتغير حالته، كأن يُمرَّر مؤشر الفأرة فوق العنصر hover، أو عند التركيز focus أو التنشيط active أو استهداف العنصر.
</p>

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

<h2 id="تأثيرات-الانتقال">
	تأثيرات الانتقال
</h2>

<p>
	مثلما ذكرنا سابقًا، فإنّه ولكي يحدث تأثير الانتقال يجب أن يحدث تغير في حالة العنصر، كذلك يجب تعريف أنماط مختلفة لكل حالة من هذه الحالات. وأسهل طريقة لتحديد الأنماط لمختلف الحالات هي استخدام أشباه الأصناف التالية: <code>:hover</code>، <code>:focus</code>، <code>:active</code> ،<code>:target</code>.
</p>

<p>
	هناك أربعة خصائص مرتبطة بتأثيرات الانتقال وهي: <code>transition-property</code>، <code>transition-duration</code>، <code>transition-timing-function</code>، و <code>transition-delay</code>. ليست جميع هذه الخصائص مطلوبة لإنتاج تأثيرات الحركة، ولكن الخصائص الثلاثة الأولى هي الأكثر استخدامًا.
</p>

<p>
	في المثال التالي سيتغير لون خلفية <code>background</code> الصندوق خلال ثانية واحدة وبطريقة تدريجية خطّية <code>linear</code>.
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_8323_9" style="">
<code class="hljs css"><span class="pln">    </span><span class="hljs-class"><span class="pun">.</span><span class="pln">box</span></span><span class="pln"> </span><span class="hljs-rules"><span class="pun">{</span><span class="pln">
      </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">background</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> </span><span class="hljs-hexcolor"><span class="com">#2db34a</span></span></span></span><span class="com">;</span><span class="pln">
      </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">transition</span><span class="pun">-</span><span class="kwd">property</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> background</span></span></span><span class="pun">;</span><span class="pln">
      </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">transition</span><span class="pun">-</span><span class="pln">duration</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> </span><span class="hljs-number"><span class="lit">1</span></span><span class="lit">s</span></span></span><span class="pun">;</span><span class="pln">
      </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">transition</span><span class="pun">-</span><span class="pln">timing</span><span class="pun">-</span><span class="kwd">function</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> linear</span></span></span><span class="pun">;</span><span class="pln">
    </span><span class="hljs-rule"><span class="pun">}</span></span></span><span class="pln">
    </span><span class="hljs-class"><span class="pun">.</span><span class="pln">box</span></span><span class="hljs-pseudo"><span class="pun">:</span><span class="pln">hover</span></span><span class="pln"> </span><span class="hljs-rules"><span class="pun">{</span><span class="pln">
      </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">background</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> </span><span class="hljs-hexcolor"><span class="com">#ff7b29</span></span></span></span><span class="com">;</span><span class="pln">
    </span><span class="hljs-rule"><span class="pun">}</span></span></span></code></pre>

<h3 id="سوابق-المتصفحات-vendor-prefixes">
	سوابق المتصفحات Vendor Prefixes
</h3>

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

<p>
	ولغرض التوضيح فقط، فإن الشفرة السابقة ستكون هكذا:
</p>

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

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

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

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

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

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

<h3 id="الخصائص-التي-تسمح-بتطبيق-تأثيرات-الانتقال-عليها">
	الخصائص التي تسمح بتطبيق تأثيرات الانتقال عليها
</h3>

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

<ul>
<li>
		<code>background-color</code>
	</li>
	<li>
		<code>background-position</code>
	</li>
	<li>
		<code>border-color</code>
	</li>
	<li>
		<code>border-width</code>
	</li>
	<li>
		<code>border-spacing</code>
	</li>
	<li>
		<code>bottom</code>
	</li>
	<li>
		<code>clip</code>
	</li>
	<li>
		<code>color</code>
	</li>
	<li>
		<code>crop</code>
	</li>
	<li>
		<code>font-size</code>
	</li>
	<li>
		<code>font-weight</code>
	</li>
	<li>
		<code>height</code>
	</li>
	<li>
		<code>left</code>
	</li>
	<li>
		<code>letter-spacing</code>
	</li>
	<li>
		<code>line-height</code>
	</li>
	<li>
		<code>margin</code>
	</li>
	<li>
		<code>max-height</code>
	</li>
	<li>
		<code>max-width</code>
	</li>
	<li>
		<code>min-height</code>
	</li>
	<li>
		<code>min-width</code>
	</li>
	<li>
		<code>opacity</code>
	</li>
	<li>
		<code>outline-color</code>
	</li>
	<li>
		<code>outline-offset</code>
	</li>
	<li>
		<code>outline-width</code>
	</li>
	<li>
		<code>padding</code>
	</li>
	<li>
		<code>right</code>
	</li>
	<li>
		<code>text-indent</code>
	</li>
	<li>
		<code>text-shadow</code>
	</li>
	<li>
		<code>top</code>
	</li>
	<li>
		<code>vertical-align</code>
	</li>
	<li>
		<code>visibility</code>
	</li>
	<li>
		<code>width</code>
	</li>
	<li>
		<code>word-spacing</code>
	</li>
	<li>
		<code>z-index</code>
	</li>
</ul>
<h3 id="مدة-تأثير-الانتقال">
	مدة تأثير الانتقال
</h3>

<p>
	يمكن تعيين المدة التي يستغرقها تأثير الانتقال من خلال خاصية <code>transition-duration</code>، ويمكن استخدام وحدات توقيت عامة وهي الثانية (<code>s</code>) والمللي ثانية (<code>ms</code>)، ويمكن استخدام الأعداد العشرية في تعيين هذه القيمة، فمثلًا يمكن استخدام الصيغة التالية: <code>.2s</code>.
</p>

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

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

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

<h3 id="توقيت-تأثير-الانتقال">
	توقيت تأثير الانتقال
</h3>

<p>
	تُستخدَم خاصّية <code>transition-timing-function</code> لتعيين سرعة تأثير الانتقال، ويمكن لهذا التأثير أن يمتلك سرعات مختلفة ضمن مدة زمنية واحدة وذلك بعد تعيين المدة من خلال خاصية <code>transition-duration</code>. وهناك قيم مفتاحية شائعة تُستخدَم مع هذه الخاصية مثل <code>linear</code>، <code>ease-in</code>، <code>ease-out</code> و <code>ease-in-out</code>.
</p>

<p>
	عند استخدام قيمة <code>linear</code> فإن الحركة تكون بسرعة ثابتة من حالة إلى أخرى، أما عند استخدام القيمة <code>ease-in</code> فإن الحركة تبدأ ببطء وتتسارع تدريجيًا مع مرور الوقت، وعند استخدام القيمة <code>ease-out</code> فإن الحركة تبدأ بسرعة وتتباطئ تدريجيًا مع مرور الوقت. أما عند استخدام القيمة <code>ease-in-out</code> فإن الحركة تبدأ بطيئة ثم تتسارع في الوسط لتعود إلى التباطؤ قبل الوصول إلى نهاية المدة المحددة للتأثير.
</p>

<p>
	تمتلك كل دالة توقيت <a href="http://www.roblaplaca.com/examples/bezierBuilder/" rel="external nofollow">منحنى بيزيه مكعبي Cubic-Bezier curve</a> يمكن تعيين قيمه بدقّة بواسطة القيمة <code>cubic-bezier(x1, y1, x2, y2)</code> إضافة إلى قيم أخرى هي <code>step-start</code> و <code>step-stop</code> إلى جانب قيمة فريدة تحدّد من خلال <code>steps(number_of_steps, direction)</code>.
</p>

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

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

<h3 id="تأخير-تأثير-الانتقال">
	تأخير تأثير الانتقال
</h3>

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

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

<h2 id="الصيغة-المختصرة-لتأثيرات-الانتقال">
	الصيغة المختصرة لتأثيرات الانتقال
</h2>

<p>
	قد يصبح التصريح عن خصائص الانتقال واحدة تلو الأخرى أمرًا مجهدًا، خصوصًا مع استخدام سوابق المتصفحات، ولحسن الحظّ يمكن اختصار العملية من خلال استخدام الخاصية <code>transition</code> والتي تدعم جميع الخصائص والقيم السابقة. فباستخدام قيمة <code>transition</code> لوحدها، يمكنك تعريف كل خصائص تأثيرات الانتقال وبالترتيب التالي: <code>transition-property</code>, <code>transition-duration</code>, <code>transition-timing-function</code>, وأخيرًا <code>transition-delay</code>. ولا حاجة لاستخدام الفواصل عند تعريف قيم هذه الخصائص إلا إذا كنت تعرّف تأثيرات انتقال متعددة.
</p>

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

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

<h3 id="تطبيق-تأثيرات-الانتقال-على-أيقونة">
	تطبيق تأثيرات الانتقال على أيقونة
</h3>

<h6 id="html">
	HTML
</h6>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_8323_9" style="">
<code class="hljs xml"><span class="pln">   </span><span class="hljs-tag"><span class="tag">&lt;</span><span class="hljs-title"><span class="tag">button</span></span><span class="tag">&gt;</span></span><span class="pln">Awesome Button</span><span class="hljs-tag"><span class="tag">&lt;/</span><span class="hljs-title"><span class="tag">button</span></span><span class="tag">&gt;</span></span></code></pre>

<h6 id="css">
	CSS
</h6>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_8323_9" style="">
<code class="hljs css"><span class="pln">   </span><span class="hljs-tag"><span class="pln">button</span></span><span class="pln"> </span><span class="hljs-rules"><span class="pun">{</span><span class="pln">
      </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">border</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> </span><span class="hljs-number"><span class="lit">0</span></span></span></span><span class="pun">;</span><span class="pln">
      </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">background</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> </span><span class="hljs-hexcolor"><span class="com">#0087cc</span></span></span></span><span class="com">;</span><span class="pln">
      </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">border</span><span class="pun">-</span><span class="pln">radius</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> </span><span class="hljs-number"><span class="lit">4</span></span><span class="lit">px</span></span></span><span class="pun">;</span><span class="pln">
      </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">box</span><span class="pun">-</span><span class="pln">shadow</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> </span><span class="hljs-number"><span class="lit">0</span></span><span class="pln"> </span><span class="hljs-number"><span class="lit">5</span></span><span class="lit">px</span><span class="pln"> </span><span class="hljs-number"><span class="lit">0</span></span><span class="pln"> </span><span class="hljs-hexcolor"><span class="com">#006599</span></span></span></span><span class="com">;</span><span class="pln">
      </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">color</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> </span><span class="hljs-hexcolor"><span class="com">#fff</span></span></span></span><span class="com">;</span><span class="pln">
      </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">cursor</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> pointer</span></span></span><span class="pun">;</span><span class="pln">
      </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">font</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> inherit</span></span></span><span class="pun">;</span><span class="pln">
      </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">margin</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> </span><span class="hljs-number"><span class="lit">0</span></span></span></span><span class="pun">;</span><span class="pln">
      </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">outline</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> </span><span class="hljs-number"><span class="lit">0</span></span></span></span><span class="pun">;</span><span class="pln">
      </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">padding</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> </span><span class="hljs-number"><span class="lit">12</span></span><span class="lit">px</span><span class="pln"> </span><span class="hljs-number"><span class="lit">20</span></span><span class="lit">px</span></span></span><span class="pun">;</span><span class="pln">
      </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">transition</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> all </span><span class="pun">.</span><span class="hljs-number"><span class="lit">1</span></span><span class="lit">s</span><span class="pln"> linear</span></span></span><span class="pun">;</span><span class="pln">
    </span><span class="hljs-rule"><span class="pun">}</span></span></span><span class="pln">
    </span><span class="hljs-tag"><span class="pln">button</span></span><span class="hljs-pseudo"><span class="pun">:</span><span class="pln">active</span></span><span class="pln"> </span><span class="hljs-rules"><span class="pun">{</span><span class="pln">
      </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">box</span><span class="pun">-</span><span class="pln">shadow</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> </span><span class="hljs-number"><span class="lit">0</span></span><span class="pln"> </span><span class="hljs-number"><span class="lit">2</span></span><span class="lit">px</span><span class="pln"> </span><span class="hljs-number"><span class="lit">0</span></span><span class="pln"> </span><span class="hljs-hexcolor"><span class="com">#006599</span></span></span></span><span class="com">;</span><span class="pln">
      </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">transform</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> </span><span class="hljs-function"><span class="pln">translateY</span><span class="pun">(</span><span class="hljs-number"><span class="lit">3</span></span><span class="lit">px</span><span class="pun">)</span></span></span></span><span class="pun">;</span><span class="pln">
    </span><span class="hljs-rule"><span class="pun">}</span></span></span>
</code></pre>

<p>
	<a href="http://codepen.io/shayhowe/pen/Bocnt" rel="external nofollow">(تجربة حية)</a>
</p>

<h3 id="بطاقة-متقلبة">
	بطاقة متقلّبة
</h3>

<h6 id="html-1">
	HTML
</h6>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_8323_9" style="">
<code class="hljs r"><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="hljs-string"><span class="atv">"card-container"</span></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="hljs-string"><span class="atv">"card"</span></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="hljs-string"><span class="atv">"side"</span></span><span class="tag">&gt;</span><span class="hljs-keyword"><span class="pln">...</span></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="hljs-string"><span class="atv">"side back"</span></span><span class="tag">&gt;</span><span class="hljs-keyword"><span class="pln">...</span></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></code></pre>

<h6 id="css-1">
	CSS
</h6>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_8323_9" style="">
<code class="hljs css"><span class="pln">    </span><span class="hljs-class"><span class="pun">.</span><span class="pln">card</span><span class="pun">-</span><span class="pln">container</span></span><span class="pln"> </span><span class="hljs-rules"><span class="pun">{</span><span class="pln">
      </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">height</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> </span><span class="hljs-number"><span class="lit">150</span></span><span class="lit">px</span></span></span><span class="pun">;</span><span class="pln">
      </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">perspective</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> </span><span class="hljs-number"><span class="lit">600</span></span></span></span><span class="pun">;</span><span class="pln">
      </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">position</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> relative</span></span></span><span class="pun">;</span><span class="pln">
      </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">width</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> </span><span class="hljs-number"><span class="lit">150</span></span><span class="lit">px</span></span></span><span class="pun">;</span><span class="pln">
    </span><span class="hljs-rule"><span class="pun">}</span></span></span><span class="pln">
    </span><span class="hljs-class"><span class="pun">.</span><span class="pln">card</span></span><span class="pln"> </span><span class="hljs-rules"><span class="pun">{</span><span class="pln">
      </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">height</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> </span><span class="hljs-number"><span class="lit">100</span></span><span class="pun">%</span></span></span><span class="pun">;</span><span class="pln">
      </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">position</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> absolute</span></span></span><span class="pun">;</span><span class="pln">
      </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">transform</span><span class="pun">-</span><span class="pln">style</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> preserve</span><span class="pun">-</span><span class="hljs-number"><span class="lit">3</span></span><span class="lit">d</span></span></span><span class="pun">;</span><span class="pln">
      </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">transition</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> all </span><span class="hljs-number"><span class="lit">1</span></span><span class="lit">s</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></span><span class="pun">;</span><span class="pln">
      </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">width</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> </span><span class="hljs-number"><span class="lit">100</span></span><span class="pun">%</span></span></span><span class="pun">;</span><span class="pln">
    </span><span class="hljs-rule"><span class="pun">}</span></span></span><span class="pln">
    </span><span class="hljs-class"><span class="pun">.</span><span class="pln">card</span></span><span class="hljs-pseudo"><span class="pun">:</span><span class="pln">hover</span></span><span class="pln"> </span><span class="hljs-rules"><span class="pun">{</span><span class="pln">
      </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">transform</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> </span><span class="hljs-function"><span class="pln">rotateY</span><span class="pun">(</span><span class="hljs-number"><span class="lit">180</span></span><span class="lit">deg</span><span class="pun">)</span></span></span></span><span class="pun">;</span><span class="pln">
    </span><span class="hljs-rule"><span class="pun">}</span></span></span><span class="pln">
    </span><span class="hljs-class"><span class="pun">.</span><span class="pln">card</span></span><span class="pln"> </span><span class="hljs-class"><span class="pun">.</span><span class="pln">side</span></span><span class="pln"> </span><span class="hljs-rules"><span class="pun">{</span><span class="pln">
      </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">backface</span><span class="pun">-</span><span class="pln">visibility</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> hidden</span></span></span><span class="pun">;</span><span class="pln">
      </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">height</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> </span><span class="hljs-number"><span class="lit">100</span></span><span class="pun">%</span></span></span><span class="pun">;</span><span class="pln">
      </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">position</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> absolute</span></span></span><span class="pun">;</span><span class="pln">
      </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">width</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> </span><span class="hljs-number"><span class="lit">100</span></span><span class="pun">%</span></span></span><span class="pun">;</span><span class="pln">
    </span><span class="hljs-rule"><span class="pun">}</span></span></span><span class="pln">
    </span><span class="hljs-class"><span class="pun">.</span><span class="pln">card</span></span><span class="pln"> </span><span class="hljs-class"><span class="pun">.</span><span class="pln">back</span></span><span class="pln"> </span><span class="hljs-rules"><span class="pun">{</span><span class="pln">
      </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">transform</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> </span><span class="hljs-function"><span class="pln">rotateY</span><span class="pun">(</span><span class="hljs-number"><span class="lit">180</span></span><span class="lit">deg</span><span class="pun">)</span></span></span></span><span class="pun">;</span><span class="pln">
    </span><span class="hljs-rule"><span class="pun">}</span></span></span>
</code></pre>

<p>
	<a href="http://codepen.io/shayhowe/pen/Fvjnf" rel="external nofollow">(تجربة حية)</a>
</p>

<h2 id="تأثيرات-الحركة">
	تأثيرات الحركة
</h2>

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

<h3 id="مفاتيح-تأثيرات-الحركة">
	مفاتيح تأثيرات الحركة
</h3>

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

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_8323_9" style="">
<code class="hljs css"><span class="pln">    </span><span class="hljs-at_rule"><span class="lit">@</span><span class="hljs-keyword"><span class="lit">keyframes</span></span><span class="pln"> slide </span></span><span class="pun">{</span><span class="pln">
      </span><span class="lit">0</span><span class="pun">%</span><span class="pln"> </span><span class="hljs-rules"><span class="pun">{</span><span class="pln">
        </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">left</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> </span><span class="hljs-number"><span class="lit">0</span></span></span></span><span class="pun">;</span><span class="pln">
        </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">top</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> </span><span class="hljs-number"><span class="lit">0</span></span></span></span><span class="pun">;</span><span class="pln">
      </span><span class="hljs-rule"><span class="pun">}</span></span></span><span class="pln">
      </span><span class="lit">50</span><span class="pun">%</span><span class="pln"> </span><span class="hljs-rules"><span class="pun">{</span><span class="pln">
        </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">left</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> </span><span class="hljs-number"><span class="lit">244</span></span><span class="lit">px</span></span></span><span class="pun">;</span><span class="pln">
        </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">top</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> </span><span class="hljs-number"><span class="lit">100</span></span><span class="lit">px</span></span></span><span class="pun">;</span><span class="pln">
      </span><span class="hljs-rule"><span class="pun">}</span></span></span><span class="pln">
      </span><span class="lit">100</span><span class="pun">%</span><span class="pln"> </span><span class="hljs-rules"><span class="pun">{</span><span class="pln">
        </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">left</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> </span><span class="hljs-number"><span class="lit">488</span></span><span class="lit">px</span></span></span><span class="pun">;</span><span class="pln">
        </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">top</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> </span><span class="hljs-number"><span class="lit">0</span></span></span></span><span class="pun">;</span><span class="pln">
      </span><span class="hljs-rule"><span class="pun">}</span></span></span><span class="pln">
    </span><span class="pun">}</span></code></pre>

<h4 id="إضافة-سوابق-المتصفحات-إلى-قاعدة-keyframe">
	إضافة سوابق المتصفحات إلى قاعدة keyframe
</h4>

<p>
	تجب إضافة سوابق المتصفحات إلى قاعدة <code>@keyframes</code> كما هو الحال مع خصائص تأثيرات الانتقال والحركة، وكما يلي:
</p>

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

<p>
	من الضروري الانتباه إلى أنّه يمكن تحريك خاصّيّة واحدة فقط كما هو الحال مع تأثيرات الانتقال. فعلى سبيل المثال إن كنت ترغب في تحريك عنصر من الأعلى إلى الأسفل، فإن التحريك من <code>top:0;</code> إلى <code>bottom: 0;</code> لن يجدي نفعًا، لأن الحركة يمكن تطبيقها على خاصية واحدة فقط، وليس من خاصّية إلى أخرى؛ لذا من أجل تحريك العنصر من الأعلى إلى الأسفل يجب التحريك من <code>top: 0;</code> إلى <code>top: 100%;</code>.
</p>

<p>
	<a href="http://codepen.io/shayhowe/pen/hIpFr" rel="external nofollow">(تجربة حية)</a>.
</p>

<h3 id="اسم-تأثير-الحركة">
	اسم تأثير الحركة
</h3>

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

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_8323_9" style="">
<code class="hljs css"><span class="pln">    </span><span class="hljs-class"><span class="pun">.</span><span class="pln">stage</span></span><span class="hljs-pseudo"><span class="pun">:</span><span class="pln">hover</span></span><span class="pln"> </span><span class="hljs-class"><span class="pun">.</span><span class="pln">ball</span></span><span class="pln"> </span><span class="hljs-rules"><span class="pun">{</span><span class="pln">
      </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">animation</span><span class="pun">-</span><span class="pln">name</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> slide</span></span></span><span class="pun">;</span><span class="pln">
    </span><span class="hljs-rule"><span class="pun">}</span></span></span>
</code></pre>

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

<h3 id="مدة-تأثير-الحركة-دالة-التوقيت-وتأخير-الحركة">
	مدة تأثير الحركة، دالة التوقيت، وتأخير الحركة
</h3>

<p>
	بعد أن تُعيّن قيمة خاصّية <code>animation-name</code> ستسلك تأثيرات الحركة نفس سلوك تأثيرات الانتقال، إذ يمكن تعيين مدّة التأثير وتعريف دالة التوقيت وتأخير التأثير حسب الرغبة. وليبدأ تأثير الحركة بالعمل فإنه بحاجة إلى تعيين مدّة التأثير من خلال خاصية <code>animation-duration</code>، وكما هو الحال مع تأثيرات الانتقال، يمكن لقيمة هذه الخاصّية أن تكون بالثانية أو بالمللي ثانية.
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_8323_9" style="">
<code class="hljs css"><span class="pln">    </span><span class="hljs-class"><span class="pun">.</span><span class="pln">stage</span></span><span class="hljs-pseudo"><span class="pun">:</span><span class="pln">hover</span></span><span class="pln"> </span><span class="hljs-class"><span class="pun">.</span><span class="pln">ball</span></span><span class="pln"> </span><span class="hljs-rules"><span class="pun">{</span><span class="pln">
      </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">animation</span><span class="pun">-</span><span class="pln">name</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> slide</span></span></span><span class="pun">;</span><span class="pln">
      </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">animation</span><span class="pun">-</span><span class="pln">duration</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> </span><span class="hljs-number"><span class="lit">2</span></span><span class="lit">s</span></span></span><span class="pun">;</span><span class="pln">
    </span><span class="hljs-rule"><span class="pun">}</span></span></span>
</code></pre>

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

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

<p>
	في المثال التالي سترتدّ الكرة (العنصر<code>&lt;figure&gt;</code> مع النمط <code>ball</code>) أثناء تحرّكها إلى جهة اليسار، ويمكن مشاهدة الحركة من خلال تمرير مؤشر الفأرة فوق العنصر <code>&lt;div&gt;</code> ذي النمط <code>stage</code>.
</p>

<h6 id="html-2">
	HTML
</h6>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_8323_9" style="">
<code class="hljs xml"><span class="pln">    </span><span class="hljs-tag"><span class="tag">&lt;</span><span class="hljs-title"><span class="tag">div</span></span><span class="pln"> </span><span class="hljs-attribute"><span class="atn">class</span></span><span class="pun">=</span><span class="hljs-value"><span class="atv">"stage"</span></span><span class="tag">&gt;</span></span><span class="pln">
      </span><span class="hljs-tag"><span class="tag">&lt;</span><span class="hljs-title"><span class="tag">figure</span></span><span class="pln"> </span><span class="hljs-attribute"><span class="atn">class</span></span><span class="pun">=</span><span class="hljs-value"><span class="atv">"ball"</span></span><span class="tag">&gt;</span></span><span class="hljs-tag"><span class="tag">&lt;/</span><span class="hljs-title"><span class="tag">figure</span></span><span class="tag">&gt;</span></span><span class="pln">
    </span><span class="hljs-tag"><span class="tag">&lt;/</span><span class="hljs-title"><span class="tag">div</span></span><span class="tag">&gt;</span></span></code></pre>

<h6 id="css-2">
	CSS
</h6>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_8323_9" style="">
<code class="hljs css"><span class="pln">      </span><span class="lit">0</span><span class="pun">%</span><span class="pln"> </span><span class="hljs-rules"><span class="pun">{</span><span class="pln">
        </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">left</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> </span><span class="hljs-number"><span class="lit">0</span></span></span></span><span class="pun">;</span><span class="pln">
        </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">top</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> </span><span class="hljs-number"><span class="lit">0</span></span></span></span><span class="pun">;</span><span class="pln">
      </span><span class="hljs-rule"><span class="pun">}</span></span></span><span class="pln">
      </span><span class="lit">50</span><span class="pun">%</span><span class="pln"> </span><span class="hljs-rules"><span class="pun">{</span><span class="pln">
        </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">left</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> </span><span class="hljs-number"><span class="lit">244</span></span><span class="lit">px</span></span></span><span class="pun">;</span><span class="pln">
        </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">top</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> </span><span class="hljs-number"><span class="lit">100</span></span><span class="lit">px</span></span></span><span class="pun">;</span><span class="pln">
      </span><span class="hljs-rule"><span class="pun">}</span></span></span><span class="pln">
      </span><span class="lit">100</span><span class="pun">%</span><span class="pln"> </span><span class="hljs-rules"><span class="pun">{</span><span class="pln">
        </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">left</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> </span><span class="hljs-number"><span class="lit">488</span></span><span class="lit">px</span></span></span><span class="pun">;</span><span class="pln">
        </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">top</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> </span><span class="hljs-number"><span class="lit">0</span></span></span></span><span class="pun">;</span><span class="pln">
      </span><span class="hljs-rule"><span class="pun">}</span></span></span><span class="pln">
    </span><span class="pun">}</span><span class="pln">
    </span><span class="hljs-class"><span class="pun">.</span><span class="pln">stage</span></span><span class="pln"> </span><span class="hljs-rules"><span class="pun">{</span><span class="pln">
      </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">height</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> </span><span class="hljs-number"><span class="lit">150</span></span><span class="lit">px</span></span></span><span class="pun">;</span><span class="pln">
      </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">position</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> relative</span></span></span><span class="pun">;</span><span class="pln">
    </span><span class="hljs-rule"><span class="pun">}</span></span></span><span class="pln">
    </span><span class="hljs-class"><span class="pun">.</span><span class="pln">ball</span></span><span class="pln"> </span><span class="hljs-rules"><span class="pun">{</span><span class="pln">
        </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">height</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> </span><span class="hljs-number"><span class="lit">50</span></span><span class="lit">px</span></span></span><span class="pun">;</span><span class="pln">
        </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">position</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> absolute</span></span></span><span class="pun">;</span><span class="pln">
        </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">width</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> </span><span class="hljs-number"><span class="lit">50</span></span><span class="lit">px</span></span></span><span class="pun">;</span><span class="pln">
    </span><span class="hljs-rule"><span class="pun">}</span></span></span><span class="pln">
    </span><span class="hljs-class"><span class="pun">.</span><span class="pln">stage</span></span><span class="hljs-pseudo"><span class="pun">:</span><span class="pln">hover</span></span><span class="pln"> </span><span class="hljs-class"><span class="pun">.</span><span class="pln">ball</span></span><span class="pln"> </span><span class="hljs-rules"><span class="pun">{</span><span class="pln">
      </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">animation</span><span class="pun">-</span><span class="pln">name</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> slide</span></span></span><span class="pun">;</span><span class="pln">
      </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">animation</span><span class="pun">-</span><span class="pln">duration</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> </span><span class="hljs-number"><span class="lit">2</span></span><span class="lit">s</span></span></span><span class="pun">;</span><span class="pln">
      </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">animation</span><span class="pun">-</span><span class="pln">timing</span><span class="pun">-</span><span class="kwd">function</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> ease</span><span class="pun">-</span><span class="kwd">in</span><span class="pun">-</span><span class="kwd">out</span></span></span><span class="pun">;</span><span class="pln">
      </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">animation</span><span class="pun">-</span><span class="pln">delay</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> </span><span class="pun">.</span><span class="hljs-number"><span class="lit">5</span></span><span class="lit">s</span></span></span><span class="pun">;</span><span class="pln">
    </span><span class="hljs-rule"><span class="pun">}</span></span></span>
</code></pre>

<p>
	<a href="http://codepen.io/shayhowe/pen/hIpFr" rel="external nofollow">(تجربة حية)</a>
</p>

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

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

<h3 id="تكرار-تأثير-الحركة">
	تكرار تأثير الحركة
</h3>

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

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

<p>
	<a href="http://codepen.io/shayhowe/pen/xvbqF" rel="external nofollow">(تجربة حية)</a>
</p>

<h3 id="اتجاه-تأثير-الحركة">
	اتجاه تأثير الحركة
</h3>

<p>
	وإلى جانب القدرة على تعيين عدد مرات تكرار تأثير الحركة، يمكن كذلك تعيين اتجاه انتهاء التأثير باستخدام الخاصية <code>animation-direction</code>، وتأخذ هذه الخاصية القيم: <code>normal</code>، <code>reverse</code>، <code>alternate</code> و <code>alternate-reverse</code>.
</p>

<p>
	استخدام القيمة <code>normal</code> يعني أن الحركة ستسير بشكل طبيعي من البداية إلى النهاية، أما القيمة <code>reverse</code> فتعني أن الحركة ستسير بعكس الطريقة المصرّح عنها في قاعدة <code>@keyframes</code>، أي ستبدأ الحركة من <code>100%</code> وتنتهي بـ <code>0%</code>.
</p>

<p>
	عند استخدام القيمة <code>alternate</code> فإن الحركة ستسير جيئة وذهابًا، أي ستبدأ الحركة من <code>0%</code> لتتّجه إلى <code>100%</code> ثم تعود من هذه القيمة إلى <code>0%</code> مرة أخرى. يمكن تحديد عدد مرّات تكرار الحركة بالاتجاه الأمامي والخلفي وذلك باستخدام الخاصّية <code>animation-iteration-count</code>، حيث يبدأ العدّ من الرقم <code>1</code> فتبدأ الحركة من القيمة <code>0%</code> وصولًا إلا <code>100%</code> وتكتمل الدورة الأولى، بعد ذلك نعود من القيمة <code>100%</code> إلى <code>0%</code> فتضاف دورة أخرى إلى العدّاد، وبهذا نحصل على دورتين بالمجمل. تعمل القيمة <code>alternate</code> كذلك على قلب دوال التوقيت عند بدء الحركة بشكل عكسي، فإن كان تأثير الحركة يستخدم القيمة <code>ease-in</code> عند التحرك من <code>0%</code> إلى <code>100%</code> فإنّه سيستخدم القيمة <code>ease-out</code> عند الانتقال من <code>100%</code> إلى <code>0%</code>.
</p>

<p>
	أخيرًا، تدمج القيمة <code>alternate-reverse</code> القيمتين <code>alternate</code> و <code>reverse</code>، وتكون الحركة بالاتجاه الخلفي ثم بالاتجاه الأمامي، أي تبدأ الحركة من <code>100%</code> باتجاه <code>0%</code> لتعود مرّة أخرى إلى <code>100%</code>.
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_8323_9" style="">
<code class="hljs css"><span class="pln">    </span><span class="hljs-class"><span class="pun">.</span><span class="pln">stage</span></span><span class="hljs-pseudo"><span class="pun">:</span><span class="pln">hover</span></span><span class="pln"> </span><span class="hljs-class"><span class="pun">.</span><span class="pln">ball</span></span><span class="pln"> </span><span class="hljs-rules"><span class="pun">{</span><span class="pln">
      </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">animation</span><span class="pun">-</span><span class="pln">name</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> slide</span></span></span><span class="pun">;</span><span class="pln">
      </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">animation</span><span class="pun">-</span><span class="pln">duration</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> </span><span class="hljs-number"><span class="lit">2</span></span><span class="lit">s</span></span></span><span class="pun">;</span><span class="pln">
      </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">animation</span><span class="pun">-</span><span class="pln">timing</span><span class="pun">-</span><span class="kwd">function</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> ease</span><span class="pun">-</span><span class="kwd">in</span><span class="pun">-</span><span class="kwd">out</span></span></span><span class="pun">;</span><span class="pln">
      </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">animation</span><span class="pun">-</span><span class="pln">delay</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> </span><span class="pun">.</span><span class="hljs-number"><span class="lit">5</span></span><span class="lit">s</span></span></span><span class="pun">;</span><span class="pln">
      </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">animation</span><span class="pun">-</span><span class="pln">iteration</span><span class="pun">-</span><span class="pln">count</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> infinite</span></span></span><span class="pun">;</span><span class="pln">
      </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">animation</span><span class="pun">-</span><span class="pln">direction</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> alternate</span></span></span><span class="pun">;</span><span class="pln">
    </span><span class="hljs-rule"><span class="pun">}</span></span></span></code></pre>

<p>
	<a href="http://codepen.io/shayhowe/pen/xpigK" rel="external nofollow">(تجربة حية)</a>
</p>

<h3 id="حالة-تأثير-الحركة">
	حالة تأثير الحركة
</h3>

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

<p>
	في المثال التالي تم تعيين قيمة <code>paused</code> للخاصّية <code>animation-play-state</code> وذلك عند النقر على العنصر
</p>

<div>
	ذي النمط <code>stage</code>. لاحظ كيف أن الحركة ستبقى متوقّفة بصورة مؤقتة إلى حين إفلات زر الفأرة.
</div>

<p>
	 
</p>

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

<p>
	<a href="http://codepen.io/shayhowe/pen/ogJjm" rel="external nofollow">(تجربة حية)</a>
</p>

<h3 id="نمط-التعبئة-الخاص-بتأثير-الحركة">
	نمط التعبئة الخاصّ بتأثير الحركة
</h3>

<p>
	تعرّف الخاصّية <code>animation-fill-mode</code> النمط الذي سيطبّق على العنصر قبل أو بعد أو قبل وبعد عمل تأثير الحركة، ولهذه الخاصّية أربع قيم هي: <code>none</code>, <code>forwards</code>, <code>backwards</code>, و <code>both</code>.
</p>

<p>
	عند استخدام القيمة <code>none</code> لن يتم تطبيق أي نمط على العنصر قبل أو بعد تطبيق تأثير الحركة.
</p>

<p>
	القيمة <code>forwards</code> ستحافظ على الأنماط المعرّفة في المفتاح الحركي الأخير، ولكن يجب الانتباه إلى أن هذه الأنماط قد تتأثّر بقيم الخاصّيتين <code>animation-direction</code> و <code>animation-iteration-count</code> فتتغيّر نقطة انتهاء تأثير الحركة.
</p>

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

<p>
	وأخيرًا، فإنّ القيمة <code>both</code> تجمع في عملها بين عمل القيمتين السابقتين.
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_8323_9" style="">
<code class="hljs css"><span class="pln">    </span><span class="hljs-class"><span class="pun">.</span><span class="pln">stage</span></span><span class="hljs-pseudo"><span class="pun">:</span><span class="pln">hover</span></span><span class="pln"> </span><span class="hljs-class"><span class="pun">.</span><span class="pln">ball</span></span><span class="pln"> </span><span class="hljs-rules"><span class="pun">{</span><span class="pln">
      </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">animation</span><span class="pun">-</span><span class="pln">name</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> slide</span></span></span><span class="pun">;</span><span class="pln">
      </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">animation</span><span class="pun">-</span><span class="pln">duration</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> </span><span class="hljs-number"><span class="lit">2</span></span><span class="lit">s</span></span></span><span class="pun">;</span><span class="pln">
      </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">animation</span><span class="pun">-</span><span class="pln">timing</span><span class="pun">-</span><span class="kwd">function</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> ease</span><span class="pun">-</span><span class="kwd">in</span><span class="pun">-</span><span class="kwd">out</span></span></span><span class="pun">;</span><span class="pln">
      </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">animation</span><span class="pun">-</span><span class="pln">delay</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> </span><span class="pun">.</span><span class="hljs-number"><span class="lit">5</span></span><span class="lit">s</span></span></span><span class="pun">;</span><span class="pln">
      </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">animation</span><span class="pun">-</span><span class="pln">fill</span><span class="pun">-</span><span class="pln">mode</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> forwards</span></span></span><span class="pun">;</span><span class="pln">
    </span><span class="hljs-rule"><span class="pun">}</span></span></span><span class="pln">
    </span><span class="hljs-class"><span class="pun">.</span><span class="pln">stage</span></span><span class="hljs-pseudo"><span class="pun">:</span><span class="pln">active</span></span><span class="pln"> </span><span class="hljs-class"><span class="pun">.</span><span class="pln">ball</span></span><span class="pln"> </span><span class="hljs-rules"><span class="pun">{</span><span class="pln">
      </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">animation</span><span class="pun">-</span><span class="pln">play</span><span class="pun">-</span><span class="pln">state</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> paused</span></span></span><span class="pun">;</span><span class="pln">
    </span><span class="hljs-rule"><span class="pun">}</span></span></span></code></pre>

<p>
	<a href="http://codepen.io/shayhowe/pen/xEgoL" rel="external nofollow">(تجربة حية)</a>
</p>

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

<p>
	كما هو الحال مع تأثيرات الانتقال، هناك صيغة مختصرة لتعريف تأثيرات الحركة، ويتم ذلك من خلال استخدام الخاصية <code>animation</code> بدلًا من تعريف القيم واحدة تلو الأخرى. وتأخذ القيم التابعة لهذه الخاصية الترتيب التالي: <code>animation-name</code>, <code>animation-duration</code>, <code>animation-timing-function</code>, <code>animation-delay</code>, <code>animation-iteration-count</code>, <code>animation-direction</code>, <code>animation-fill-mode</code>, وأخيرًا <code>animation-play-state</code>.
</p>

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

<p>
	<a href="http://codepen.io/shayhowe/pen/gDmka" rel="external nofollow">(تجربة حية)</a>
</p>

<p class="codepen" data-default-tab="css,result" data-embed-version="2" data-height="265" data-pen-title="Animation Fill Mode" data-slug-hash="xEgoL" data-theme-id="light" data-user="shayhowe">
	 
</p>

<p>
	ترجمة - وبتصرّف - للمقال <a href="http://learn.shayhowe.com/advanced-html-css/transitions-animations/" rel="external nofollow">Transitions &amp; Animations</a> لصاحبه Shay Howe.
</p>
]]></description><guid isPermaLink="false">517</guid><pubDate>Mon, 07 Aug 2017 13:58:25 +0000</pubDate></item><item><title>&#x643;&#x64A;&#x641; &#x62A;&#x646;&#x634;&#x626; &#x633;&#x627;&#x639;&#x629; &#x630;&#x627;&#x62A; &#x639;&#x642;&#x627;&#x631;&#x628; &#x628;&#x627;&#x633;&#x62A;&#x62E;&#x62F;&#x627;&#x645; &#x62A;&#x62D;&#x631;&#x64A;&#x643;&#x627;&#x62A; CSS &#x648; JavaScript</title><link>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/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2017_06/main2.png.fa89742b9283530bd287b10c334e3ce3.png" /></p>

<p>
	سنستعمل في هذا الدرس تحريكات CSS بسيطة إضافةً إلى بعض شفرات JavaScript لإنشاء ساعة متحركة.<br>
	سنُنشِئ هذه الساعة باستخدام HTML و CSS وخلفية <a href="https://academy.hsoub.com/tags/svg/" rel="">SVG</a> إضافةً إلى بعض أسطر JavaScript. سنستعمل <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="">التحريكات Animations أو الانتقالات Transitions في CSS</a>، وسنعتمد على JavaScript لضبط التوقيت الابتدائي.
</p>

<p style="text-align: center;">
	<img alt="main2.png" class="ipsImage ipsImage_thumbnailed" data-fileid="23736" data-unique="35n4r8uia" src="https://academy.hsoub.com/uploads/monthly_2017_06/main2.png.f3c68376d68c9877113108eb41108575.png"></p>

<p>
	<strong>ملحوظة:</strong> يتضمّن <a data-fileid="23737" href="https://academy.hsoub.com/applications/core/interface/file/attachment.php?id=23737" rel="">الملف المرفق</a> شفرة الأمثلة المذكورة في هذا الدرس.
</p>

<h2 id="شفرات-html">
	شفرات HTML
</h2>

<p>
	سنبدأ بإضافة بعض شفرات HTML. فكَّرتُ بداية الأمر باستخدام ثلاثة عناصر لكل عقرب من عقارب الساعة، ومن ثم وضعتُ تلك العناصر ضمن حاوية؛ وصحيحٌ أننا نستطيع استخدام العناصر الثلاثة بمفردها مع تحريكات CSS لكننا سنحتاج إلى الحاويات (Containers) لوضع العقارب في مكانها المناسب وتحريكها.
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_8078_7" style="">
<span class="tag">&lt;article</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"clock"</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">"hours-container"</span><span class="tag">&gt;</span><span class="pln">
    </span><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"hours"</span><span class="tag">&gt;&lt;/div&gt;</span><span class="pln">
  </span><span class="tag">&lt;/div&gt;</span><span class="pln">
  </span><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"minutes-container"</span><span class="tag">&gt;</span><span class="pln">
    </span><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"minutes"</span><span class="tag">&gt;&lt;/div&gt;</span><span class="pln">
  </span><span class="tag">&lt;/div&gt;</span><span class="pln">
  </span><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"seconds-container"</span><span class="tag">&gt;</span><span class="pln">
    </span><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"seconds"</span><span class="tag">&gt;&lt;/div&gt;</span><span class="pln">
  </span><span class="tag">&lt;/div&gt;</span><span class="pln">
</span><span class="tag">&lt;/article&gt;</span></pre>

<p>
	لن نستخدم الشفرة أعلاه الآن، لكننا سنكتبها خطوة خطوة. بالنسبة للتنسيقات فسنعتمد على ملف التنسيقات <code>assets/clocks.css</code> في المرفق مع شرح العناصر الأساسية فيه.
</p>

<p>
	إن أردتَ رؤية النتيجة التي نريد الوصول إليها بنهاية الدرس فتمكنك معاينة المستند <code>examples/1.html</code> الموجود في الملف المرفق.
</p>

<h2 id="واجهة-الساعة">
	واجهة الساعة
</h2>

<p>
	نستخدم الشفرة التالية في ملف التنسيقات لإعطاء الساعة شكلها الدائري.
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_8078_7" style="">
<code class="hljs css"><span class="hljs-class"><span class="pun">.</span><span class="pln">clock</span></span><span class="pln"> </span><span class="hljs-rules"><span class="pun">{</span><span class="pln">
  </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">border</span><span class="pun">-</span><span class="pln">radius</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> </span><span class="hljs-number"><span class="lit">50</span></span><span class="pun">%</span></span></span><span class="pun">;</span><span class="pln">
  </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">background</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> </span><span class="hljs-hexcolor"><span class="com">#fff</span></span><span class="com"> </span><span class="hljs-function"><span class="com">url(ios_clock.svg)</span></span><span class="com"> no-repeat center</span></span></span><span class="com">;</span><span class="pln">
  </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">background</span><span class="pun">-</span><span class="pln">size</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> </span><span class="hljs-number"><span class="lit">88</span></span><span class="pun">%</span></span></span><span class="pun">;</span><span class="pln">
  </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">height</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> </span><span class="hljs-number"><span class="lit">20</span></span><span class="lit">em</span></span></span><span class="pun">;</span><span class="pln">
  </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">padding</span><span class="pun">-</span><span class="pln">bottom</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> </span><span class="hljs-number"><span class="lit">31</span></span><span class="pun">%</span></span></span><span class="pun">;</span><span class="pln">
  </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">position</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> relative</span></span></span><span class="pun">;</span><span class="pln">
  </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">width</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> </span><span class="hljs-number"><span class="lit">20</span></span><span class="lit">em</span></span></span><span class="pun">;</span><span class="pln">
</span><span class="hljs-rule"><span class="pun">}</span></span></span><span class="pln">

</span><span class="hljs-class"><span class="pun">.</span><span class="pln">clock</span></span><span class="hljs-class"><span class="pun">.</span><span class="pln">simple</span></span><span class="hljs-pseudo"><span class="pun">:</span><span class="pln">after</span></span><span class="pln"> </span><span class="hljs-rules"><span class="pun">{</span><span class="pln">
  </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">background</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> </span><span class="hljs-hexcolor"><span class="com">#000</span></span></span></span><span class="com">;</span><span class="pln">
  </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">border</span><span class="pun">-</span><span class="pln">radius</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> </span><span class="hljs-number"><span class="lit">50</span></span><span class="pun">%</span></span></span><span class="pun">;</span><span class="pln">
  </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">content</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> </span><span class="hljs-string"><span class="str">""</span></span></span></span><span class="pun">;</span><span class="pln">
  </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">position</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> absolute</span></span></span><span class="pun">;</span><span class="pln">
  </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">left</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> </span><span class="hljs-number"><span class="lit">50</span></span><span class="pun">%</span></span></span><span class="pun">;</span><span class="pln">
  </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">top</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> </span><span class="hljs-number"><span class="lit">50</span></span><span class="pun">%</span></span></span><span class="pun">;</span><span class="pln">
  </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">transform</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> </span><span class="hljs-function"><span class="pln">translate</span><span class="pun">(-</span><span class="hljs-number"><span class="lit">50</span></span><span class="pun">%,</span><span class="pln"> </span><span class="pun">-</span><span class="hljs-number"><span class="lit">50</span></span><span class="pun">%)</span></span></span></span><span class="pun">;</span><span class="pln">
  </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">width</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> </span><span class="hljs-number"><span class="lit">5</span></span><span class="pun">%</span></span></span><span class="pun">;</span><span class="pln">
  </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">height</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> </span><span class="hljs-number"><span class="lit">5</span></span><span class="pun">%</span></span></span><span class="pun">;</span><span class="pln">
  </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">z</span><span class="pun">-</span><span class="pln">index</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> </span><span class="hljs-number"><span class="lit">10</span></span></span></span><span class="pun">;</span><span class="pln">
</span><span class="hljs-rule"><span class="pun">}</span></span></span></code></pre>

<p>
	أضفنا أيضًا دائرةً سوادء اللون في المنتصف وجعلناها «أعلى» من غيرها (عبر <a href="https://academy.hsoub.com/programming/css/%D8%AA%D8%AD%D8%AF%D9%8A%D8%AF-%D9%85%D9%88%D8%A7%D9%82%D8%B9-%D8%A7%D9%84%D8%B9%D9%86%D8%A7%D8%B5%D8%B1-%D9%81%D9%8A-css-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-fixed-%D9%88-sticky-r408/#%D8%AA%D8%B1%D8%AA%D9%8A%D8%A8-%D8%A7%D9%84%D8%B9%D9%86%D8%A7%D8%B5%D8%B1-%D9%81%D9%88%D9%82-%D8%A8%D8%B9%D8%B6%D9%87%D8%A7-%D8%B9%D8%A8%D8%B1-z-index" rel="">خاصية <code>z-index</code></a>) لكي تقع عقارب الساعة خلفها.
</p>

<p>
	نضع المحتوى التالي في ملف HTML:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_8078_7" style="">
<code class="hljs xml"><span class="hljs-tag"><span class="tag">&lt;</span><span class="hljs-title"><span class="tag">link</span></span><span class="pln"> </span><span class="hljs-attribute"><span class="atn">rel</span></span><span class="pun">=</span><span class="hljs-value"><span class="atv">"stylesheet"</span></span><span class="pln"> </span><span class="hljs-attribute"><span class="atn">href</span></span><span class="pun">=</span><span class="hljs-value"><span class="atv">"assets/clocks.css"</span></span><span class="tag">&gt;</span></span><span class="pln">

</span><span class="hljs-tag"><span class="tag">&lt;</span><span class="hljs-title"><span class="tag">div</span></span><span class="pln"> </span><span class="hljs-attribute"><span class="atn">class</span></span><span class="pun">=</span><span class="hljs-value"><span class="atv">"demo-container clocks single"</span></span><span class="tag">&gt;</span></span><span class="pln">
    </span><span class="hljs-tag"><span class="tag">&lt;</span><span class="hljs-title"><span class="tag">article</span></span><span class="pln"> </span><span class="hljs-attribute"><span class="atn">class</span></span><span class="pun">=</span><span class="hljs-value"><span class="atv">"clock simple show"</span></span><span class="tag">&gt;</span></span><span class="hljs-tag"><span class="tag">&lt;/</span><span class="hljs-title"><span class="tag">article</span></span><span class="tag">&gt;</span></span><span class="pln">
</span><span class="hljs-tag"><span class="tag">&lt;/</span><span class="hljs-title"><span class="tag">div</span></span><span class="tag">&gt;</span></span>
</code></pre>

<p>
	إن فتحت الملف الناتج عن هذه الخطوة (<code>examples\2.html</code>) في المتصفح، والذي يحوي شفرة HTML التي تحصلنا عليها لحدّ الساعة، فستجد أنه يرسم شكل الساعة ولكن من دون عقارب.
</p>

<p>
	تضبط الشفرة التاليّة في ملف CSS موضع الحاويات قبل إضافة العقارب:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_8078_7" style="">
<code class="hljs css"><span class="hljs-class"><span class="pun">.</span><span class="pln">minutes</span><span class="pun">-</span><span class="pln">container</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-class"><span class="pun">.</span><span class="pln">hours</span><span class="pun">-</span><span class="pln">container</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-class"><span class="pun">.</span><span class="pln">seconds</span><span class="pun">-</span><span class="pln">container</span></span><span class="pln"> </span><span class="hljs-rules"><span class="pun">{</span><span class="pln">
  </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">position</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> absolute</span></span></span><span class="pun">;</span><span class="pln">
  </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">top</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> </span><span class="hljs-number"><span class="lit">0</span></span></span></span><span class="pun">;</span><span class="pln">
  </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">right</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> </span><span class="hljs-number"><span class="lit">0</span></span></span></span><span class="pun">;</span><span class="pln">
  </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">bottom</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> </span><span class="hljs-number"><span class="lit">0</span></span></span></span><span class="pun">;</span><span class="pln">
  </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">left</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> </span><span class="hljs-number"><span class="lit">0</span></span></span></span><span class="pun">;</span><span class="pln">
</span><span class="hljs-rule"><span class="pun">}</span></span></span></code></pre>

<h2 id="عقرب-الساعات">
	عقرب الساعات
</h2>

<p>
	نضيف الحاويّة الخاصّة بعقرب الساعات، والعنصر الخاص بالعقرب نفسه إلى ملف HTML:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_8078_7" style="">
<code class="hljs applescript"><span class="tag">&lt;link</span><span class="pln"> </span><span class="atn">rel</span><span class="pun">=</span><span class="hljs-string"><span class="atv">"stylesheet"</span></span><span class="pln"> </span><span class="atn">href</span><span class="pun">=</span><span class="hljs-string"><span class="atv">"assets/clocks.css"</span></span><span class="tag">&gt;</span><span class="pln">

</span><span class="tag">&lt;</span><span class="hljs-keyword"><span class="tag">div</span></span><span class="pln"> </span><span class="hljs-type"><span class="atn">class</span></span><span class="pun">=</span><span class="hljs-string"><span class="atv">"demo-container clocks single"</span></span><span class="tag">&gt;</span><span class="pln">
    </span><span class="tag">&lt;article</span><span class="pln"> </span><span class="hljs-type"><span class="atn">class</span></span><span class="pun">=</span><span class="hljs-string"><span class="atv">"clock simple show"</span></span><span class="tag">&gt;</span><span class="pln">
        </span><span class="tag">&lt;</span><span class="hljs-keyword"><span class="tag">div</span></span><span class="pln"> </span><span class="hljs-type"><span class="atn">class</span></span><span class="pun">=</span><span class="hljs-string"><span class="atv">"hours-container"</span></span><span class="tag">&gt;</span><span class="pln">
            </span><span class="tag">&lt;</span><span class="hljs-keyword"><span class="tag">div</span></span><span class="pln"> </span><span class="hljs-type"><span class="atn">class</span></span><span class="pun">=</span><span class="hljs-string"><span class="atv">"hours"</span></span><span class="tag">&gt;&lt;/</span><span class="hljs-keyword"><span class="tag">div</span></span><span class="tag">&gt;</span><span class="pln">
        </span><span class="tag">&lt;/</span><span class="hljs-keyword"><span class="tag">div</span></span><span class="tag">&gt;</span><span class="pln">
    </span><span class="tag">&lt;/article&gt;</span><span class="pln">
</span><span class="tag">&lt;/</span><span class="hljs-keyword"><span class="tag">div</span></span><span class="tag">&gt;</span></code></pre>

<p>
	نحصُل على الملف <code>examples/3.html</code>.
</p>

<p>
	إن نظرت في ملف تنسيقات CSS فستجد أننا نستعمل القيمة <code>absolute</code> للخاصية <code>position</code> لجعل مكان العقرب مطلقًا.
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_8078_7" style="">
<code class="hljs css"><span class="hljs-class"><span class="pun">.</span><span class="pln">hours</span></span><span class="pln"> </span><span class="hljs-rules"><span class="pun">{</span><span class="pln">
  </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">background</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> </span><span class="hljs-hexcolor"><span class="com">#000</span></span></span></span><span class="com">;</span><span class="pln">
  </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">height</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> </span><span class="hljs-number"><span class="lit">20</span></span><span class="pun">%</span></span></span><span class="pun">;</span><span class="pln">
  </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">left</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> </span><span class="hljs-number"><span class="lit">48.75</span></span><span class="pun">%</span></span></span><span class="pun">;</span><span class="pln">
  </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">position</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> absolute</span></span></span><span class="pun">;</span><span class="pln">
  </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">top</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> </span><span class="hljs-number"><span class="lit">30</span></span><span class="pun">%</span></span></span><span class="pun">;</span><span class="pln">
  </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">transform</span><span class="pun">-</span><span class="pln">origin</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> </span><span class="hljs-number"><span class="lit">50</span></span><span class="pun">%</span><span class="pln"> </span><span class="hljs-number"><span class="lit">100</span></span><span class="pun">%</span></span></span><span class="pun">;</span><span class="pln">
  </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">width</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> </span><span class="hljs-number"><span class="lit">2.5</span></span><span class="pun">%</span></span></span><span class="pun">;</span><span class="pln">
</span><span class="hljs-rule"><span class="pun">}</span></span></span></code></pre>

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

<h2 id="عقرب-الدقائق">
	عقرب الدقائق
</h2>

<p>
	وهو يشبه عقرب الساعات، لكنه أطول وأضيق. نضيفه أولا إلى ملف HTML:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_8078_7" style="">
<code class="hljs applescript"><span class="tag">&lt;link</span><span class="pln"> </span><span class="atn">rel</span><span class="pun">=</span><span class="hljs-string"><span class="atv">"stylesheet"</span></span><span class="pln"> </span><span class="atn">href</span><span class="pun">=</span><span class="hljs-string"><span class="atv">"assets/clocks.css"</span></span><span class="tag">&gt;</span><span class="pln">

</span><span class="tag">&lt;</span><span class="hljs-keyword"><span class="tag">div</span></span><span class="pln"> </span><span class="hljs-type"><span class="atn">class</span></span><span class="pun">=</span><span class="hljs-string"><span class="atv">"demo-container clocks single"</span></span><span class="tag">&gt;</span><span class="pln">
    </span><span class="tag">&lt;article</span><span class="pln"> </span><span class="hljs-type"><span class="atn">class</span></span><span class="pun">=</span><span class="hljs-string"><span class="atv">"clock simple show"</span></span><span class="tag">&gt;</span><span class="pln">
        </span><span class="tag">&lt;</span><span class="hljs-keyword"><span class="tag">div</span></span><span class="pln"> </span><span class="hljs-type"><span class="atn">class</span></span><span class="pun">=</span><span class="hljs-string"><span class="atv">"hours-container"</span></span><span class="tag">&gt;</span><span class="pln">
            </span><span class="tag">&lt;</span><span class="hljs-keyword"><span class="tag">div</span></span><span class="pln"> </span><span class="hljs-type"><span class="atn">class</span></span><span class="pun">=</span><span class="hljs-string"><span class="atv">"hours angled"</span></span><span class="tag">&gt;&lt;/</span><span class="hljs-keyword"><span class="tag">div</span></span><span class="tag">&gt;</span><span class="pln">
        </span><span class="tag">&lt;/</span><span class="hljs-keyword"><span class="tag">div</span></span><span class="tag">&gt;</span><span class="pln">
        </span><span class="tag">&lt;</span><span class="hljs-keyword"><span class="tag">div</span></span><span class="pln"> </span><span class="hljs-type"><span class="atn">class</span></span><span class="pun">=</span><span class="hljs-string"><span class="atv">"minutes-container"</span></span><span class="pln"> </span><span class="atn">style</span><span class="pun">=</span><span class="hljs-string"><span class="atv">"</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="atv">"</span></span><span class="tag">&gt;</span><span class="pln">
            </span><span class="tag">&lt;</span><span class="hljs-keyword"><span class="tag">div</span></span><span class="pln"> </span><span class="hljs-type"><span class="atn">class</span></span><span class="pun">=</span><span class="hljs-string"><span class="atv">"minutes"</span></span><span class="tag">&gt;&lt;/</span><span class="hljs-keyword"><span class="tag">div</span></span><span class="tag">&gt;</span><span class="pln">
        </span><span class="tag">&lt;/</span><span class="hljs-keyword"><span class="tag">div</span></span><span class="tag">&gt;</span><span class="pln">
    </span><span class="tag">&lt;/article&gt;</span><span class="pln">
</span><span class="tag">&lt;/</span><span class="hljs-keyword"><span class="tag">div</span></span><span class="tag">&gt;</span></code></pre>

<p>
	نحصُل على المستند <code>examples/4.html</code>. يُنسَّق الصنف في CSS على النحو التالي:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_8078_7" style="">
<code class="hljs css"><span class="hljs-class"><span class="pun">.</span><span class="pln">minutes</span></span><span class="pln"> </span><span class="hljs-rules"><span class="pun">{</span><span class="pln">
  </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">background</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> </span><span class="hljs-hexcolor"><span class="com">#000</span></span></span></span><span class="com">;</span><span class="pln">
  </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">height</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> </span><span class="hljs-number"><span class="lit">40</span></span><span class="pun">%</span></span></span><span class="pun">;</span><span class="pln">
  </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">left</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> </span><span class="hljs-number"><span class="lit">49</span></span><span class="pun">%</span></span></span><span class="pun">;</span><span class="pln">
  </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">position</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> absolute</span></span></span><span class="pun">;</span><span class="pln">
  </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">top</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> </span><span class="hljs-number"><span class="lit">10</span></span><span class="pun">%</span></span></span><span class="pun">;</span><span class="pln">
  </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">transform</span><span class="pun">-</span><span class="pln">origin</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> </span><span class="hljs-number"><span class="lit">50</span></span><span class="pun">%</span><span class="pln"> </span><span class="hljs-number"><span class="lit">100</span></span><span class="pun">%</span></span></span><span class="pun">;</span><span class="pln">
  </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">width</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> </span><span class="hljs-number"><span class="lit">2</span></span><span class="pun">%</span></span></span><span class="pun">;</span><span class="pln">
</span><span class="hljs-rule"><span class="pun">}</span></span></span></code></pre>

<h2 id="عقرب-الثواني">
	عقرب الثواني
</h2>

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

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_8078_7" style="">
<code class="hljs applescript"><span class="tag">&lt;link</span><span class="pln"> </span><span class="atn">rel</span><span class="pun">=</span><span class="hljs-string"><span class="atv">"stylesheet"</span></span><span class="pln"> </span><span class="atn">href</span><span class="pun">=</span><span class="hljs-string"><span class="atv">"assets/clocks.css"</span></span><span class="tag">&gt;</span><span class="pln">

</span><span class="tag">&lt;</span><span class="hljs-keyword"><span class="tag">div</span></span><span class="pln"> </span><span class="hljs-type"><span class="atn">class</span></span><span class="pun">=</span><span class="hljs-string"><span class="atv">"demo-container clocks single"</span></span><span class="tag">&gt;</span><span class="pln">
    </span><span class="tag">&lt;article</span><span class="pln"> </span><span class="hljs-type"><span class="atn">class</span></span><span class="pun">=</span><span class="hljs-string"><span class="atv">"clock simple show"</span></span><span class="tag">&gt;</span><span class="pln">
        </span><span class="tag">&lt;</span><span class="hljs-keyword"><span class="tag">div</span></span><span class="pln"> </span><span class="hljs-type"><span class="atn">class</span></span><span class="pun">=</span><span class="hljs-string"><span class="atv">"hours-container"</span></span><span class="tag">&gt;</span><span class="pln">
            </span><span class="tag">&lt;</span><span class="hljs-keyword"><span class="tag">div</span></span><span class="pln"> </span><span class="hljs-type"><span class="atn">class</span></span><span class="pun">=</span><span class="hljs-string"><span class="atv">"hours angled"</span></span><span class="tag">&gt;&lt;/</span><span class="hljs-keyword"><span class="tag">div</span></span><span class="tag">&gt;</span><span class="pln">
        </span><span class="tag">&lt;/</span><span class="hljs-keyword"><span class="tag">div</span></span><span class="tag">&gt;</span><span class="pln">
        </span><span class="tag">&lt;</span><span class="hljs-keyword"><span class="tag">div</span></span><span class="pln"> </span><span class="hljs-type"><span class="atn">class</span></span><span class="pun">=</span><span class="hljs-string"><span class="atv">"minutes-container"</span></span><span class="pln"> </span><span class="atn">style</span><span class="pun">=</span><span class="hljs-string"><span class="atv">"</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="atv">"</span></span><span class="tag">&gt;</span><span class="pln">
            </span><span class="tag">&lt;</span><span class="hljs-keyword"><span class="tag">div</span></span><span class="pln"> </span><span class="hljs-type"><span class="atn">class</span></span><span class="pun">=</span><span class="hljs-string"><span class="atv">"minutes angled"</span></span><span class="tag">&gt;&lt;/</span><span class="hljs-keyword"><span class="tag">div</span></span><span class="tag">&gt;</span><span class="pln">
        </span><span class="tag">&lt;/</span><span class="hljs-keyword"><span class="tag">div</span></span><span class="tag">&gt;</span><span class="pln">
        </span><span class="tag">&lt;</span><span class="hljs-keyword"><span class="tag">div</span></span><span class="pln"> </span><span class="hljs-type"><span class="atn">class</span></span><span class="pun">=</span><span class="hljs-string"><span class="atv">"seconds-container"</span></span><span class="tag">&gt;</span><span class="pln">
            </span><span class="tag">&lt;</span><span class="hljs-keyword"><span class="tag">div</span></span><span class="pln"> </span><span class="hljs-type"><span class="atn">class</span></span><span class="pun">=</span><span class="hljs-string"><span class="atv">"seconds"</span></span><span class="tag">&gt;&lt;/</span><span class="hljs-keyword"><span class="tag">div</span></span><span class="tag">&gt;</span><span class="pln">
        </span><span class="tag">&lt;/</span><span class="hljs-keyword"><span class="tag">div</span></span><span class="tag">&gt;</span><span class="pln">
    </span><span class="tag">&lt;/article&gt;</span><span class="pln">
</span><span class="tag">&lt;/</span><span class="hljs-keyword"><span class="tag">div</span></span><span class="tag">&gt;</span></code></pre>

<p>
	لتنسيق طول عقرب الثواني وضيقه ضبطنا قيمة الخاصية <code>transform-origin</code> إلى <code>80%</code>، مما يبقي <code>20%</code> من العقرب ممتدةً بعيدًا عن المنتصف.
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_8078_7" style="">
<code class="hljs css"><span class="hljs-class"><span class="pun">.</span><span class="pln">seconds</span></span><span class="pln"> </span><span class="hljs-rules"><span class="pun">{</span><span class="pln">
  </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">background</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> </span><span class="hljs-hexcolor"><span class="com">#000</span></span></span></span><span class="com">;</span><span class="pln">
  </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">height</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> </span><span class="hljs-number"><span class="lit">45</span></span><span class="pun">%</span></span></span><span class="pun">;</span><span class="pln">
  </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">left</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> </span><span class="hljs-number"><span class="lit">49.5</span></span><span class="pun">%</span></span></span><span class="pun">;</span><span class="pln">
  </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">position</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> absolute</span></span></span><span class="pun">;</span><span class="pln">
  </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">top</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> </span><span class="hljs-number"><span class="lit">14</span></span><span class="pun">%</span></span></span><span class="pun">;</span><span class="pln">
  </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">transform</span><span class="pun">-</span><span class="pln">origin</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> </span><span class="hljs-number"><span class="lit">50</span></span><span class="pun">%</span><span class="pln"> </span><span class="hljs-number"><span class="lit">80</span></span><span class="pun">%</span></span></span><span class="pun">;</span><span class="pln">
  </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">width</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> </span><span class="hljs-number"><span class="lit">1</span></span><span class="pun">%</span></span></span><span class="pun">;</span><span class="pln">
  </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">z</span><span class="pun">-</span><span class="pln">index</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> </span><span class="hljs-number"><span class="lit">8</span></span></span></span><span class="pun">;</span><span class="pln">
</span><span class="hljs-rule"><span class="pun">}</span></span></span></code></pre>

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

<h2 id="الحركة">
	الحركة
</h2>

<p>
	تنتقل عقارب بعض أنواع الساعات كل ثانية محدثةً صوتًا، وأخرى تتحرك عقاربها بسلاسة. لنفعل كلا الأمرين ولنبدأ بتحريك العقارب بسلاسة أولًا. استخدمنا في كلتا الحالتين <a href="https://academy.hsoub.com/programming/css/%D8%AA%D8%AD%D8%B1%D9%8A%D9%83-%D8%B4%D8%A8%D9%87-%D8%A7%D9%84%D8%B9%D9%86%D8%A7%D8%B5%D8%B1-pseudo-lements-%D9%81%D9%8A-css-r145#%D8%A5%D8%B6%D8%A7%D9%81%D8%A9-%D8%A7%D9%84%D8%AA%D8%AD%D8%B1%D9%8A%D9%83" rel="">التعليمة <code>keyframes</code></a> لتحريك العقارب 360 درجة:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_8078_7" style="">
<code class="hljs css"><span class="hljs-at_rule"><span class="lit">@</span><span class="hljs-keyword"><span class="lit">keyframes</span></span><span class="pln"> rotate </span></span><span class="pun">{</span><span class="pln">
  </span><span class="lit">100</span><span class="pun">%</span><span class="pln"> </span><span class="hljs-rules"><span class="pun">{</span><span class="pln">
    </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">transform</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> </span><span class="hljs-function"><span class="pln">rotateZ</span><span class="pun">(</span><span class="hljs-number"><span class="lit">360</span></span><span class="lit">deg</span><span class="pun">)</span></span></span></span><span class="pun">;</span><span class="pln">
  </span><span class="hljs-rule"><span class="pun">}</span></span></span><span class="pln">
</span><span class="pun">}</span></code></pre>

<h3 id="عقرب-الساعات-يتحرك-بخطوات-متصلة">
	عقرب الساعات يتحرك بخطوات متصلة
</h3>

<p>
	ستطلب الشِفرة السابقة من العنصر أن يدور 360 درجة إذا استخدمنا الخاصية <code>animation</code> في صنف CSS المطبّق على عنصر HTML. يتيح استخدام دالة الزمن <code>linear</code> أن تكون الحركة خطيّةً وسلسةً:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_8078_7" style="">
<code class="hljs css"><span class="hljs-class"><span class="pun">.</span><span class="pln">hours</span><span class="pun">-</span><span class="pln">container</span></span><span class="pln"> </span><span class="hljs-rules"><span class="pun">{</span><span class="pln">
  </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">animation</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> rotate </span><span class="hljs-number"><span class="lit">43200</span></span><span class="lit">s</span><span class="pln"> infinite linear</span></span></span><span class="pun">;</span><span class="pln">
</span><span class="hljs-rule"><span class="pun">}</span></span></span><span class="pln">
</span><span class="hljs-class"><span class="pun">.</span><span class="pln">minutes</span><span class="pun">-</span><span class="pln">container</span></span><span class="pln"> </span><span class="hljs-rules"><span class="pun">{</span><span class="pln">
  </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">animation</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> rotate </span><span class="hljs-number"><span class="lit">3600</span></span><span class="lit">s</span><span class="pln"> infinite linear</span></span></span><span class="pun">;</span><span class="pln">
</span><span class="hljs-rule"><span class="pun">}</span></span></span><span class="pln">
</span><span class="hljs-class"><span class="pun">.</span><span class="pln">seconds</span><span class="pun">-</span><span class="pln">container</span></span><span class="pln"> </span><span class="hljs-rules"><span class="pun">{</span><span class="pln">
  </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">animation</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> rotate </span><span class="hljs-number"><span class="lit">60</span></span><span class="lit">s</span><span class="pln"> infinite linear</span></span></span><span class="pun">;</span><span class="pln">
</span><span class="hljs-rule"><span class="pun">}</span></span></span></code></pre>

<p>
	سندوِّر عقرب الساعات <code>hours</code> مرةً كل 12 ساعة (أي <code>43200</code> ثانية)، وسيدور عقرب الدقائق دورةً كاملةً كل ساعة (<code>3600</code> ثانية)، أما عقرب الثواني فيكمل دورته كل دقيقة (<code>60</code> ثانية).
</p>

<p>
	ينتُج لدينا مستند <code>examples/6.html</code>والذي يحوي شفرة HTML التالية:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_8078_7" style="">
<code class="hljs applescript"><span class="tag">&lt;link</span><span class="pln"> </span><span class="atn">rel</span><span class="pun">=</span><span class="hljs-string"><span class="atv">"stylesheet"</span></span><span class="pln"> </span><span class="atn">href</span><span class="pun">=</span><span class="hljs-string"><span class="atv">"assets/clocks.css"</span></span><span class="tag">&gt;</span><span class="pln">

</span><span class="tag">&lt;</span><span class="hljs-keyword"><span class="tag">div</span></span><span class="pln"> </span><span class="hljs-type"><span class="atn">class</span></span><span class="pun">=</span><span class="hljs-string"><span class="atv">"demo-container clocks single linear"</span></span><span class="tag">&gt;</span><span class="pln">
    </span><span class="tag">&lt;article</span><span class="pln"> </span><span class="hljs-type"><span class="atn">class</span></span><span class="pun">=</span><span class="hljs-string"><span class="atv">"clock simple show"</span></span><span class="tag">&gt;</span><span class="pln">
        </span><span class="tag">&lt;</span><span class="hljs-keyword"><span class="tag">div</span></span><span class="pln"> </span><span class="hljs-type"><span class="atn">class</span></span><span class="pun">=</span><span class="hljs-string"><span class="atv">"hours-container"</span></span><span class="tag">&gt;</span><span class="pln">
            </span><span class="tag">&lt;</span><span class="hljs-keyword"><span class="tag">div</span></span><span class="pln"> </span><span class="hljs-type"><span class="atn">class</span></span><span class="pun">=</span><span class="hljs-string"><span class="atv">"hours angled"</span></span><span class="tag">&gt;&lt;/</span><span class="hljs-keyword"><span class="tag">div</span></span><span class="tag">&gt;</span><span class="pln">
        </span><span class="tag">&lt;/</span><span class="hljs-keyword"><span class="tag">div</span></span><span class="tag">&gt;</span><span class="pln">
        </span><span class="tag">&lt;</span><span class="hljs-keyword"><span class="tag">div</span></span><span class="pln"> </span><span class="hljs-type"><span class="atn">class</span></span><span class="pun">=</span><span class="hljs-string"><span class="atv">"minutes-container"</span></span><span class="pln"> </span><span class="atn">style</span><span class="pun">=</span><span class="hljs-string"><span class="atv">"</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="atv">"</span></span><span class="tag">&gt;</span><span class="pln">
            </span><span class="tag">&lt;</span><span class="hljs-keyword"><span class="tag">div</span></span><span class="pln"> </span><span class="hljs-type"><span class="atn">class</span></span><span class="pun">=</span><span class="hljs-string"><span class="atv">"minutes angled"</span></span><span class="tag">&gt;&lt;/</span><span class="hljs-keyword"><span class="tag">div</span></span><span class="tag">&gt;</span><span class="pln">
        </span><span class="tag">&lt;/</span><span class="hljs-keyword"><span class="tag">div</span></span><span class="tag">&gt;</span><span class="pln">
        </span><span class="tag">&lt;</span><span class="hljs-keyword"><span class="tag">div</span></span><span class="pln"> </span><span class="hljs-type"><span class="atn">class</span></span><span class="pun">=</span><span class="hljs-string"><span class="atv">"seconds-container"</span></span><span class="tag">&gt;</span><span class="pln">
            </span><span class="tag">&lt;</span><span class="hljs-keyword"><span class="tag">div</span></span><span class="pln"> </span><span class="hljs-type"><span class="atn">class</span></span><span class="pun">=</span><span class="hljs-string"><span class="atv">"seconds"</span></span><span class="tag">&gt;&lt;/</span><span class="hljs-keyword"><span class="tag">div</span></span><span class="tag">&gt;</span><span class="pln">
        </span><span class="tag">&lt;/</span><span class="hljs-keyword"><span class="tag">div</span></span><span class="tag">&gt;</span><span class="pln">
    </span><span class="tag">&lt;/article&gt;</span><span class="pln">
</span><span class="tag">&lt;/</span><span class="hljs-keyword"><span class="tag">div</span></span><span class="tag">&gt;</span></code></pre>

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

<h3 id="عقرب-الثواني-يتحرك-بخطوات-منفصلة">
	عقرب الثواني يتحرك بخطوات منفصلة
</h3>

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

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_8078_7" style="">
<code class="hljs css"><span class="hljs-class"><span class="pun">.</span><span class="pln">minutes</span><span class="pun">-</span><span class="pln">container</span></span><span class="pln"> </span><span class="hljs-rules"><span class="pun">{</span><span class="pln">
  </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">animation</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> rotate </span><span class="hljs-number"><span class="lit">3600</span></span><span class="lit">s</span><span class="pln"> infinite </span><span class="hljs-function"><span class="pln">steps</span><span class="pun">(</span><span class="hljs-number"><span class="lit">60</span></span><span class="pun">)</span></span></span></span><span class="pun">;</span><span class="pln">
</span><span class="hljs-rule"><span class="pun">}</span></span></span><span class="pln">
</span><span class="hljs-class"><span class="pun">.</span><span class="pln">seconds</span><span class="pun">-</span><span class="pln">container</span></span><span class="pln"> </span><span class="hljs-rules"><span class="pun">{</span><span class="pln">
  </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">animation</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> rotate </span><span class="hljs-number"><span class="lit">60</span></span><span class="lit">s</span><span class="pln"> infinite </span><span class="hljs-function"><span class="pln">steps</span><span class="pun">(</span><span class="hljs-number"><span class="lit">60</span></span><span class="pun">)</span></span></span></span><span class="pun">;</span><span class="pln">
</span><span class="hljs-rule"><span class="pun">}</span></span></span></code></pre>

<p>
	ونعدّل ملف HTML لنحصُل على مستند <code>examples/7.html</code> ذي المحتوى التالي (لاحظ استخدام الصنف <code>steps</code> مكان الصنف <code>linear</code>):
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_8078_7" style="">
<code class="hljs applescript"><span class="tag">&lt;link</span><span class="pln"> </span><span class="atn">rel</span><span class="pun">=</span><span class="hljs-string"><span class="atv">"stylesheet"</span></span><span class="pln"> </span><span class="atn">href</span><span class="pun">=</span><span class="hljs-string"><span class="atv">"assets/clocks.css"</span></span><span class="tag">&gt;</span><span class="pln">

</span><span class="tag">&lt;</span><span class="hljs-keyword"><span class="tag">div</span></span><span class="pln"> </span><span class="hljs-type"><span class="atn">class</span></span><span class="pun">=</span><span class="hljs-string"><span class="atv">"demo-container clocks single steps"</span></span><span class="tag">&gt;</span><span class="pln">
    </span><span class="tag">&lt;article</span><span class="pln"> </span><span class="hljs-type"><span class="atn">class</span></span><span class="pun">=</span><span class="hljs-string"><span class="atv">"clock simple show"</span></span><span class="tag">&gt;</span><span class="pln">
        </span><span class="tag">&lt;</span><span class="hljs-keyword"><span class="tag">div</span></span><span class="pln"> </span><span class="hljs-type"><span class="atn">class</span></span><span class="pun">=</span><span class="hljs-string"><span class="atv">"hours-container"</span></span><span class="tag">&gt;</span><span class="pln">
            </span><span class="tag">&lt;</span><span class="hljs-keyword"><span class="tag">div</span></span><span class="pln"> </span><span class="hljs-type"><span class="atn">class</span></span><span class="pun">=</span><span class="hljs-string"><span class="atv">"hours angled"</span></span><span class="tag">&gt;&lt;/</span><span class="hljs-keyword"><span class="tag">div</span></span><span class="tag">&gt;</span><span class="pln">
        </span><span class="tag">&lt;/</span><span class="hljs-keyword"><span class="tag">div</span></span><span class="tag">&gt;</span><span class="pln">
        </span><span class="tag">&lt;</span><span class="hljs-keyword"><span class="tag">div</span></span><span class="pln"> </span><span class="hljs-type"><span class="atn">class</span></span><span class="pun">=</span><span class="hljs-string"><span class="atv">"minutes-container"</span></span><span class="pln"> </span><span class="atn">style</span><span class="pun">=</span><span class="hljs-string"><span class="atv">"</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="atv">"</span></span><span class="tag">&gt;</span><span class="pln">
            </span><span class="tag">&lt;</span><span class="hljs-keyword"><span class="tag">div</span></span><span class="pln"> </span><span class="hljs-type"><span class="atn">class</span></span><span class="pun">=</span><span class="hljs-string"><span class="atv">"minutes angled"</span></span><span class="tag">&gt;&lt;/</span><span class="hljs-keyword"><span class="tag">div</span></span><span class="tag">&gt;</span><span class="pln">
        </span><span class="tag">&lt;/</span><span class="hljs-keyword"><span class="tag">div</span></span><span class="tag">&gt;</span><span class="pln">
        </span><span class="tag">&lt;</span><span class="hljs-keyword"><span class="tag">div</span></span><span class="pln"> </span><span class="hljs-type"><span class="atn">class</span></span><span class="pun">=</span><span class="hljs-string"><span class="atv">"seconds-container"</span></span><span class="tag">&gt;</span><span class="pln">
            </span><span class="tag">&lt;</span><span class="hljs-keyword"><span class="tag">div</span></span><span class="pln"> </span><span class="hljs-type"><span class="atn">class</span></span><span class="pun">=</span><span class="hljs-string"><span class="atv">"seconds"</span></span><span class="tag">&gt;&lt;/</span><span class="hljs-keyword"><span class="tag">div</span></span><span class="tag">&gt;</span><span class="pln">
        </span><span class="tag">&lt;/</span><span class="hljs-keyword"><span class="tag">div</span></span><span class="tag">&gt;</span><span class="pln">
    </span><span class="tag">&lt;/article&gt;</span><span class="pln">
</span><span class="tag">&lt;/</span><span class="hljs-keyword"><span class="tag">div</span></span><span class="tag">&gt;</span></code></pre>

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

<h2 id="إظهار-الوقت-الصحيح">
	إظهار الوقت الصحيح
</h2>

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

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_8078_7" style="">
<code class="hljs javascript"><span class="hljs-comment"><span class="com">/*
 * البدء بالوقت المضبوط في جهاز المستخدم
 * From: cssanimation.rocks/clocks
 */</span></span><span class="pln">
</span><span class="hljs-function"><span class="hljs-keyword"><span class="kwd">function</span></span><span class="pln"> </span><span class="hljs-title"><span class="pln">initLocalClocks</span></span><span class="hljs-params"><span class="pun">()</span></span><span class="pln"> </span><span class="pun">{</span></span><span class="pln">
  </span><span class="hljs-comment"><span class="com">// Get the local time using JS</span></span><span class="pln">
  </span><span class="hljs-keyword"><span class="kwd">var</span></span><span class="pln"> date </span><span class="pun">=</span><span class="pln"> </span><span class="hljs-keyword"><span class="kwd">new</span></span><span class="pln"> </span><span class="hljs-built_in"><span class="typ">Date</span></span><span class="pun">;</span><span class="pln">
  </span><span class="hljs-keyword"><span class="kwd">var</span></span><span class="pln"> seconds </span><span class="pun">=</span><span class="pln"> date</span><span class="pun">.</span><span class="pln">getSeconds</span><span class="pun">();</span><span class="pln">
  </span><span class="hljs-keyword"><span class="kwd">var</span></span><span class="pln"> minutes </span><span class="pun">=</span><span class="pln"> date</span><span class="pun">.</span><span class="pln">getMinutes</span><span class="pun">();</span><span class="pln">
  </span><span class="hljs-keyword"><span class="kwd">var</span></span><span class="pln"> hours </span><span class="pun">=</span><span class="pln"> date</span><span class="pun">.</span><span class="pln">getHours</span><span class="pun">();</span><span class="pln">

  </span><span class="hljs-comment"><span class="com">// إنشاء كائن لعقارب الساعة لثلاثة: الساعات، الدقائق والثواني</span></span><span class="pln">
  </span><span class="hljs-keyword"><span class="kwd">var</span></span><span class="pln"> hands </span><span class="pun">=</span><span class="pln"> </span><span class="pun">[</span><span class="pln">
    </span><span class="pun">{</span><span class="pln">
      hand</span><span class="pun">:</span><span class="pln"> </span><span class="hljs-string"><span class="str">'hours'</span></span><span class="pun">,</span><span class="pln">
      angle</span><span class="pun">:</span><span class="pln"> </span><span class="pun">(</span><span class="pln">hours </span><span class="pun">*</span><span class="pln"> </span><span class="hljs-number"><span class="lit">30</span></span><span class="pun">)</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> </span><span class="pun">(</span><span class="pln">minutes </span><span class="pun">/</span><span class="pln"> </span><span class="hljs-number"><span class="lit">2</span></span><span class="pun">)</span><span class="pln">
    </span><span class="pun">},</span><span class="pln">
    </span><span class="pun">{</span><span class="pln">
      hand</span><span class="pun">:</span><span class="pln"> </span><span class="hljs-string"><span class="str">'minutes'</span></span><span class="pun">,</span><span class="pln">
      angle</span><span class="pun">:</span><span class="pln"> </span><span class="pun">(</span><span class="pln">minutes </span><span class="pun">*</span><span class="pln"> </span><span class="hljs-number"><span class="lit">6</span></span><span class="pun">)</span><span class="pln">
    </span><span class="pun">},</span><span class="pln">
    </span><span class="pun">{</span><span class="pln">
      hand</span><span class="pun">:</span><span class="pln"> </span><span class="hljs-string"><span class="str">'seconds'</span></span><span class="pun">,</span><span class="pln">
      angle</span><span class="pun">:</span><span class="pln"> </span><span class="pun">(</span><span class="pln">seconds </span><span class="pun">*</span><span class="pln"> </span><span class="hljs-number"><span class="lit">6</span></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="hljs-comment"><span class="com">//  ضبط زوايا العقارب</span></span><span class="pln">
  </span><span class="hljs-keyword"><span class="kwd">for</span></span><span class="pln"> </span><span class="pun">(</span><span class="hljs-keyword"><span class="kwd">var</span></span><span class="pln"> j </span><span class="pun">=</span><span class="pln"> </span><span class="hljs-number"><span class="lit">0</span></span><span class="pun">;</span><span class="pln"> j </span><span class="pun">&lt;</span><span class="pln"> hands</span><span class="pun">.</span><span class="pln">length</span><span class="pun">;</span><span class="pln"> j</span><span class="pun">++)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
    </span><span class="hljs-keyword"><span class="kwd">var</span></span><span class="pln"> elements </span><span class="pun">=</span><span class="pln"> document</span><span class="pun">.</span><span class="pln">querySelectorAll</span><span class="pun">(</span><span class="hljs-string"><span class="str">'.'</span></span><span class="pln"> </span><span class="pun">+</span><span class="pln"> hands</span><span class="pun">[</span><span class="pln">j</span><span class="pun">].</span><span class="pln">hand</span><span class="pun">);</span><span class="pln">
    </span><span class="hljs-keyword"><span class="kwd">for</span></span><span class="pln"> </span><span class="pun">(</span><span class="hljs-keyword"><span class="kwd">var</span></span><span class="pln"> k </span><span class="pun">=</span><span class="pln"> </span><span class="hljs-number"><span class="lit">0</span></span><span class="pun">;</span><span class="pln"> k </span><span class="pun">&lt;</span><span class="pln"> elements</span><span class="pun">.</span><span class="pln">length</span><span class="pun">;</span><span class="pln"> k</span><span class="pun">++)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
        elements</span><span class="pun">[</span><span class="pln">k</span><span class="pun">].</span><span class="pln">style</span><span class="pun">.</span><span class="pln">webkitTransform </span><span class="pun">=</span><span class="pln"> </span><span class="hljs-string"><span class="str">'rotateZ('</span></span><span class="pun">+</span><span class="pln"> hands</span><span class="pun">[</span><span class="pln">j</span><span class="pun">].</span><span class="pln">angle </span><span class="pun">+</span><span class="hljs-string"><span class="str">'deg)'</span></span><span class="pun">;</span><span class="pln">
        elements</span><span class="pun">[</span><span class="pln">k</span><span class="pun">].</span><span class="pln">style</span><span class="pun">.</span><span class="pln">transform </span><span class="pun">=</span><span class="pln"> </span><span class="hljs-string"><span class="str">'rotateZ('</span></span><span class="pun">+</span><span class="pln"> hands</span><span class="pun">[</span><span class="pln">j</span><span class="pun">].</span><span class="pln">angle </span><span class="pun">+</span><span class="hljs-string"><span class="str">'deg)'</span></span><span class="pun">;</span><span class="pln">
        </span><span class="hljs-comment"><span class="com">// إذا تعلق الأمر بعقرب الدقائق فإننا نحفظ الثواني لحساب موضع عقرب الدقائق في ما بعد</span></span><span class="pln">
                </span><span class="hljs-keyword"><span class="kwd">if</span></span><span class="pln"> </span><span class="pun">(</span><span class="pln">hands</span><span class="pun">[</span><span class="pln">j</span><span class="pun">].</span><span class="pln">hand </span><span class="pun">===</span><span class="pln"> </span><span class="hljs-string"><span class="str">'minutes'</span></span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
          elements</span><span class="pun">[</span><span class="pln">k</span><span class="pun">].</span><span class="pln">parentNode</span><span class="pun">.</span><span class="pln">setAttribute</span><span class="pun">(</span><span class="hljs-string"><span class="str">'data-second-angle'</span></span><span class="pun">,</span><span class="pln"> hands</span><span class="pun">[</span><span class="pln">j </span><span class="pun">+</span><span class="pln"> </span><span class="hljs-number"><span class="lit">1</span></span><span class="pun">].</span><span class="pln">angle</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">
</span><span class="pun">}</span></code></pre>

<p>
	هذه الدالة تحوِّل الوقت الحالي (الساعات والدقائق والثواني) إلى الزاوية الموافقة له لكل عقربٍ من عقارب الساعة، ومن ثم ستُطبِّق الزاوية الصحيحة لكل عقرب على حدة باستخدام القيمة <code>rotateZ</code> على الخاصية <code>style.transform</code>.<br>
	نضيف إلى مستند HTML قيما مبدئيّة للخاصيّتين <code>style.transform</code> و<code>data-second-angle</code> (التي تحفظ الثواني لحساب موضع عقرب الدقائق). بدون هذه القيم لن تجد شفرة جافاسكربت السابقة العناصر لتنفيذ التعليمات عليها.
</p>

<p>
	نحصُل في ختام هذه الخطوة على المستند <code>examples/8.html</code> (الذي يستدعي ملف جافاسكريبت <code>clocks.js</code> حيث توجد دوال جافاسكربت السابقة).
</p>

<p>
	سيعمل ما سبق في أغلبية المتصفحات دون مشاكل، عدا متصفح Safari الذي علينا استعمال سابقة (prefix) خاصة معه، ولهذا السبب سنستعمل الخاصية <code>style.webkitTrasform</code> أيضًا.
</p>

<h2 id="مزامنة-حركة-عقرب-الثواني-والدقائق">
	مزامنة حركة عقرب الثواني والدقائق
</h2>

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

<p style="text-align: center;">
	<br><img alt="01-twelve-compressor.gif" class="ipsImage ipsImage_thumbnailed" data-fileid="23735" data-unique="f1y6drcjl" src="https://academy.hsoub.com/uploads/monthly_2017_06/01-twelve-compressor.gif.7032b97fc110efcaee891022a7fa342d.gif"></p>

<p>
	عندما تُرسَم الساعة على الشاشة لأوّل مرة، فيجب تحريك عقرب الدقائق بعد أقل من دقيقة واحدة، ولفعل ذلك علينا حساب متى ستنتهي أوّل دقيقة ومن ثم تحريك العقرب يدويًا. ولمّا كنّا نستعمل JavaScript لضبط الحركة الأوليّة، فسنستمر باستخدامها عبر تحريك العقرب بمقدار ست درجات كل دقيقة باستخدام الدالة <code>setInterval</code>.<br>
	وقبل تحريك عقرب الدقائق، علينا حساب كم تبقى من الدقيقة الحالية. ربما لاحظتَ هذه الأسطر في الشِفرة السابقة:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_8078_7" style="">
<code class="hljs mel"><span class="hljs-keyword"><span class="kwd">if</span></span><span class="pln"> </span><span class="pun">(</span><span class="pln">hands</span><span class="pun">[</span><span class="pln">j</span><span class="pun">].</span><span class="pln">hand </span><span class="pun">===</span><span class="pln"> </span><span class="hljs-string"><span class="str">'minutes'</span></span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  elements</span><span class="pun">[</span><span class="pln">k</span><span class="pun">].</span><span class="pln">parentNode</span><span class="pun">.</span><span class="pln">setAttribute</span><span class="pun">(</span><span class="hljs-string"><span class="str">'data-second-angle'</span></span><span class="pun">,</span><span class="pln"> hands</span><span class="pun">[</span><span class="pln">j </span><span class="pun">+</span><span class="pln"> </span><span class="hljs-number"><span class="lit">1</span></span><span class="pun">].</span><span class="hljs-keyword"><span class="pln">angle</span></span><span class="pun">);</span><span class="pln">
</span><span class="pun">}</span></code></pre>

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

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_8078_7" style="">
<code class="hljs javascript"><span class="hljs-comment"><span class="com">/*
ضبط المدة المتبقية من الدقيقة عند ظهور الساعة لأول مرة، ثم تحريك العقرب كل دقيقة بعد انتهاء الدقيقة التي ظهرت فيها الساعة على الصفحة.
 */</span></span><span class="pln">
</span><span class="hljs-function"><span class="hljs-keyword"><span class="kwd">function</span></span><span class="pln"> </span><span class="hljs-title"><span class="pln">setUpMinuteHands</span></span><span class="hljs-params"><span class="pun">()</span></span><span class="pln"> </span><span class="pun">{</span></span><span class="pln">
  </span><span class="hljs-comment"><span class="com">// إيجاد القدر المتبقي من الدقيقة عند ظهور الساعة</span></span><span class="pln">
  </span><span class="hljs-keyword"><span class="kwd">var</span></span><span class="pln"> containers </span><span class="pun">=</span><span class="pln"> document</span><span class="pun">.</span><span class="pln">querySelectorAll</span><span class="pun">(</span><span class="hljs-string"><span class="str">'.minutes-container'</span></span><span class="pun">);</span><span class="pln">
  </span><span class="hljs-keyword"><span class="kwd">var</span></span><span class="pln"> secondAngle </span><span class="pun">=</span><span class="pln"> containers</span><span class="pun">[</span><span class="hljs-number"><span class="lit">0</span></span><span class="pun">].</span><span class="pln">getAttribute</span><span class="pun">(</span><span class="hljs-string"><span class="str">"data-second-angle"</span></span><span class="pun">);</span><span class="pln">
  </span><span class="hljs-keyword"><span class="kwd">if</span></span><span class="pln"> </span><span class="pun">(</span><span class="pln">secondAngle </span><span class="pun">&gt;</span><span class="pln"> </span><span class="hljs-number"><span class="lit">0</span></span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
    </span><span class="hljs-comment"><span class="com">// ضبط عدّاد ينتهي مع الدقيقة الحالية من أجر تحريك عقرب الدقائق</span></span><span class="pln">

    </span><span class="hljs-keyword"><span class="kwd">var</span></span><span class="pln"> delay </span><span class="pun">=</span><span class="pln"> </span><span class="pun">(((</span><span class="hljs-number"><span class="lit">360</span></span><span class="pln"> </span><span class="pun">-</span><span class="pln"> secondAngle</span><span class="pun">)</span><span class="pln"> </span><span class="pun">/</span><span class="pln"> </span><span class="hljs-number"><span class="lit">6</span></span><span class="pun">)</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> </span><span class="hljs-number"><span class="lit">0.1</span></span><span class="pun">)</span><span class="pln"> </span><span class="pun">*</span><span class="pln"> </span><span class="hljs-number"><span class="lit">1000</span></span><span class="pun">;</span><span class="pln">
    setTimeout</span><span class="pun">(</span><span class="hljs-function"><span class="hljs-keyword"><span class="kwd">function</span></span><span class="hljs-params"><span class="pun">()</span></span><span class="pln"> </span><span class="pun">{</span></span><span class="pln">
      moveMinuteHands</span><span class="pun">(</span><span class="pln">containers</span><span class="pun">);</span><span class="pln">
    </span><span class="pun">},</span><span class="pln"> delay</span><span class="pun">);</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

</span><span class="hljs-comment"><span class="com">/*
 * تدوير العقرب بالنسبة للدقيقة الأولى
 */</span></span><span class="pln">
</span><span class="hljs-function"><span class="hljs-keyword"><span class="kwd">function</span></span><span class="pln"> </span><span class="hljs-title"><span class="pln">moveMinuteHands</span></span><span class="hljs-params"><span class="pun">(</span><span class="pln">containers</span><span class="pun">)</span></span><span class="pln"> </span><span class="pun">{</span></span><span class="pln">
  </span><span class="hljs-keyword"><span class="kwd">for</span></span><span class="pln"> </span><span class="pun">(</span><span class="hljs-keyword"><span class="kwd">var</span></span><span class="pln"> i </span><span class="pun">=</span><span class="pln"> </span><span class="hljs-number"><span class="lit">0</span></span><span class="pun">;</span><span class="pln"> i </span><span class="pun">&lt;</span><span class="pln"> containers</span><span class="pun">.</span><span class="pln">length</span><span class="pun">;</span><span class="pln"> i</span><span class="pun">++)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
    containers</span><span class="pun">[</span><span class="pln">i</span><span class="pun">].</span><span class="pln">style</span><span class="pun">.</span><span class="pln">webkitTransform </span><span class="pun">=</span><span class="pln"> </span><span class="hljs-string"><span class="str">'rotateZ(6deg)'</span></span><span class="pun">;</span><span class="pln">
    containers</span><span class="pun">[</span><span class="pln">i</span><span class="pun">].</span><span class="pln">style</span><span class="pun">.</span><span class="pln">transform </span><span class="pun">=</span><span class="pln"> </span><span class="hljs-string"><span class="str">'rotateZ(6deg)'</span></span><span class="pun">;</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">
  </span><span class="hljs-comment"><span class="com">// الاستمرار بعد الدقيقة الأولى في تدوير عقرب الدقائق كل 60 ثانية</span></span><span class="pln">
  setInterval</span><span class="pun">(</span><span class="hljs-function"><span class="hljs-keyword"><span class="kwd">function</span></span><span class="hljs-params"><span class="pun">()</span></span><span class="pln"> </span><span class="pun">{</span></span><span class="pln">
    </span><span class="hljs-keyword"><span class="kwd">for</span></span><span class="pln"> </span><span class="pun">(</span><span class="hljs-keyword"><span class="kwd">var</span></span><span class="pln"> i </span><span class="pun">=</span><span class="pln"> </span><span class="hljs-number"><span class="lit">0</span></span><span class="pun">;</span><span class="pln"> i </span><span class="pun">&lt;</span><span class="pln"> containers</span><span class="pun">.</span><span class="pln">length</span><span class="pun">;</span><span class="pln"> i</span><span class="pun">++)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
      </span><span class="hljs-keyword"><span class="kwd">if</span></span><span class="pln"> </span><span class="pun">(</span><span class="pln">containers</span><span class="pun">[</span><span class="pln">i</span><span class="pun">].</span><span class="pln">angle </span><span class="pun">===</span><span class="pln"> </span><span class="hljs-literal"><span class="kwd">undefined</span></span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
        containers</span><span class="pun">[</span><span class="pln">i</span><span class="pun">].</span><span class="pln">angle </span><span class="pun">=</span><span class="pln"> </span><span class="hljs-number"><span class="lit">12</span></span><span class="pun">;</span><span class="pln">
      </span><span class="pun">}</span><span class="pln"> </span><span class="hljs-keyword"><span class="kwd">else</span></span><span class="pln"> </span><span class="pun">{</span><span class="pln">
        containers</span><span class="pun">[</span><span class="pln">i</span><span class="pun">].</span><span class="pln">angle </span><span class="pun">+=</span><span class="pln"> </span><span class="hljs-number"><span class="lit">6</span></span><span class="pun">;</span><span class="pln">
      </span><span class="pun">}</span><span class="pln">
      containers</span><span class="pun">[</span><span class="pln">i</span><span class="pun">].</span><span class="pln">style</span><span class="pun">.</span><span class="pln">webkitTransform </span><span class="pun">=</span><span class="pln"> </span><span class="hljs-string"><span class="str">'rotateZ('</span></span><span class="pun">+</span><span class="pln"> containers</span><span class="pun">[</span><span class="pln">i</span><span class="pun">].</span><span class="pln">angle </span><span class="pun">+</span><span class="hljs-string"><span class="str">'deg)'</span></span><span class="pun">;</span><span class="pln">
      containers</span><span class="pun">[</span><span class="pln">i</span><span class="pun">].</span><span class="pln">style</span><span class="pun">.</span><span class="pln">transform </span><span class="pun">=</span><span class="pln"> </span><span class="hljs-string"><span class="str">'rotateZ('</span></span><span class="pun">+</span><span class="pln"> containers</span><span class="pun">[</span><span class="pln">i</span><span class="pun">].</span><span class="pln">angle </span><span class="pun">+</span><span class="hljs-string"><span class="str">'deg)'</span></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="hljs-number"><span class="lit">60000</span></span><span class="pun">);</span><span class="pln">
</span><span class="pun">}</span></code></pre>

<h2 id="إضافة-ارتداد-للعقارب">
	إضافة ارتداد للعقارب
</h2>

<p>
	علينا حذف خاصية الحركة في CSS لاستخدامنا JavaScript لضبط مختلف جوانب الحركة؛ لكن بدلًا من حذفها فقط، سنضع بدلًا منها انتقالًا (transition)؛ وهذه فرصةٌ ملائمةٌ لإضافة خصائص أخرى للحركة.
</p>

<p>
	عندما نضبط زاويةً جديدةً في JavaScript للعقرب، فسيُطبّق انتقالٌ (transition) في CSS الذي سيخبر المتصفح عن الحركة، وهذا يعني أنَّ شِفرة JavaScript ستتعامل مع تغيرات بسيطة في الزاوية وسيتكفّل المتصفح بعملية التحريك.<br>
	قبل فعل ذلك، علينا تحديث الشِفرة لاستخدام JavaScript لتحريك عقرب الثواني أيضًا، حيث سنستخدم الشِفرة الآتية لتحريك حاوية عقرب الثواني ستين مرة في الدقيقة:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_8078_7" style="">
<code class="hljs javascript"><span class="hljs-comment"><span class="com">/*
 * تحريك حاويات الثواني
 */</span></span><span class="pln">
</span><span class="hljs-function"><span class="hljs-keyword"><span class="kwd">function</span></span><span class="pln"> </span><span class="hljs-title"><span class="pln">moveSecondHands</span></span><span class="hljs-params"><span class="pun">()</span></span><span class="pln"> </span><span class="pun">{</span></span><span class="pln">
  </span><span class="hljs-keyword"><span class="kwd">var</span></span><span class="pln"> containers </span><span class="pun">=</span><span class="pln"> document</span><span class="pun">.</span><span class="pln">querySelectorAll</span><span class="pun">(</span><span class="hljs-string"><span class="str">'.seconds-container'</span></span><span class="pun">);</span><span class="pln">
  setInterval</span><span class="pun">(</span><span class="hljs-function"><span class="hljs-keyword"><span class="kwd">function</span></span><span class="hljs-params"><span class="pun">()</span></span><span class="pln"> </span><span class="pun">{</span></span><span class="pln">
    </span><span class="hljs-keyword"><span class="kwd">for</span></span><span class="pln"> </span><span class="pun">(</span><span class="hljs-keyword"><span class="kwd">var</span></span><span class="pln"> i </span><span class="pun">=</span><span class="pln"> </span><span class="hljs-number"><span class="lit">0</span></span><span class="pun">;</span><span class="pln"> i </span><span class="pun">&lt;</span><span class="pln"> containers</span><span class="pun">.</span><span class="pln">length</span><span class="pun">;</span><span class="pln"> i</span><span class="pun">++)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
      </span><span class="hljs-keyword"><span class="kwd">if</span></span><span class="pln"> </span><span class="pun">(</span><span class="pln">containers</span><span class="pun">[</span><span class="pln">i</span><span class="pun">].</span><span class="pln">angle </span><span class="pun">===</span><span class="pln"> </span><span class="hljs-literal"><span class="kwd">undefined</span></span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
        containers</span><span class="pun">[</span><span class="pln">i</span><span class="pun">].</span><span class="pln">angle </span><span class="pun">=</span><span class="pln"> </span><span class="hljs-number"><span class="lit">6</span></span><span class="pun">;</span><span class="pln">
      </span><span class="pun">}</span><span class="pln"> </span><span class="hljs-keyword"><span class="kwd">else</span></span><span class="pln"> </span><span class="pun">{</span><span class="pln">
        containers</span><span class="pun">[</span><span class="pln">i</span><span class="pun">].</span><span class="pln">angle </span><span class="pun">+=</span><span class="pln"> </span><span class="hljs-number"><span class="lit">6</span></span><span class="pun">;</span><span class="pln">
      </span><span class="pun">}</span><span class="pln">
      containers</span><span class="pun">[</span><span class="pln">i</span><span class="pun">].</span><span class="pln">style</span><span class="pun">.</span><span class="pln">webkitTransform </span><span class="pun">=</span><span class="pln"> </span><span class="hljs-string"><span class="str">'rotateZ('</span></span><span class="pun">+</span><span class="pln"> containers</span><span class="pun">[</span><span class="pln">i</span><span class="pun">].</span><span class="pln">angle </span><span class="pun">+</span><span class="hljs-string"><span class="str">'deg)'</span></span><span class="pun">;</span><span class="pln">
      containers</span><span class="pun">[</span><span class="pln">i</span><span class="pun">].</span><span class="pln">style</span><span class="pun">.</span><span class="pln">transform </span><span class="pun">=</span><span class="pln"> </span><span class="hljs-string"><span class="str">'rotateZ('</span></span><span class="pun">+</span><span class="pln"> containers</span><span class="pun">[</span><span class="pln">i</span><span class="pun">].</span><span class="pln">angle </span><span class="pun">+</span><span class="hljs-string"><span class="str">'deg)'</span></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="hljs-number"><span class="lit">1000</span></span><span class="pun">);</span><span class="pln">
</span><span class="pun">}</span></code></pre>

<p>
	بعد أن أصبحت حركة عقارب الثواني والدقائق مدارةً من JavaScript، فعلينا تحديث شِفرة CSS لنستبدل الخاصية <code>transitions</code> بالخاصية <code>animation</code>:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_8078_7" style="">
<code class="hljs css"><span class="hljs-class"><span class="pun">.</span><span class="pln">minutes</span><span class="pun">-</span><span class="pln">container</span></span><span class="pln"> </span><span class="hljs-rules"><span class="pun">{</span><span class="pln">
  </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">transition</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> transform </span><span class="hljs-number"><span class="lit">0.3</span></span><span class="lit">s</span><span class="pln"> </span><span class="hljs-function"><span class="pln">cubic</span><span class="pun">-</span><span class="pln">bezier</span><span class="pun">(.</span><span class="hljs-number"><span class="lit">4</span></span><span class="pun">,</span><span class="hljs-number"><span class="lit">2.08</span></span><span class="pun">,.</span><span class="hljs-number"><span class="lit">55</span></span><span class="pun">,.</span><span class="hljs-number"><span class="lit">44</span></span><span class="pun">)</span></span></span></span><span class="pun">;</span><span class="pln">
</span><span class="hljs-rule"><span class="pun">}</span></span></span><span class="pln">
</span><span class="hljs-class"><span class="pun">.</span><span class="pln">seconds</span><span class="pun">-</span><span class="pln">container</span></span><span class="pln"> </span><span class="hljs-rules"><span class="pun">{</span><span class="pln">
  </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">transition</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> transform </span><span class="hljs-number"><span class="lit">0.2</span></span><span class="lit">s</span><span class="pln"> </span><span class="hljs-function"><span class="pln">cubic</span><span class="pun">-</span><span class="pln">bezier</span><span class="pun">(.</span><span class="hljs-number"><span class="lit">4</span></span><span class="pun">,</span><span class="hljs-number"><span class="lit">2.08</span></span><span class="pun">,.</span><span class="hljs-number"><span class="lit">55</span></span><span class="pun">,.</span><span class="hljs-number"><span class="lit">44</span></span><span class="pun">)</span></span></span></span><span class="pun">;</span><span class="pln">
</span><span class="hljs-rule"><span class="pun">}</span></span></span></code></pre>

<p>
	هذه الانتقال الذي طبّقناه على خاصية <code>transform</code> يستعمل دالة التوقيت <code>cubic-bezier</code>، وهذه الدالة ستعطي العقرب حركةً ارتداديةً إلى الخلف قبل الدوران باتجاه عقارب الساعة.
</p>

<p>
	يمكنك تجربة التأثيرات المضافة في هذه الفقرة بمعاينة الملف <code>examples/9.html</code>.
</p>

<h2 id="محاكاة-الساعة-الموجودة-في-نظام-ios-7">
	محاكاة الساعة الموجودة في نظام iOS 7
</h2>

<p>
	أنا أحد معجبي بساطة الساعة المستعملة في نظام iOS 7؛ وبإعادة تنسيق العقارب وبإضافة صورة خلفية مع الأرقام، فسنتمكن بسهولة من إنشاء مثل هذه الساعة، كما في المثال <code>examples/10.html</code>.
</p>

<p>
	هذا التصميم مبنيٌ على تصميم ساعة <a href="https://www.youtube.com/watch?v=IvIvKiDWDks" rel="external nofollow">Swiss railway clock</a> الشهيرة، يمكننا تعديل ساعتنا لتشبهها عبر تغيير الأنماط المستعملة واستعمال صورة خلفية جديدة، كما في المثال <code>examples/11.html</code>.
</p>

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

<p>
	يمكن للمتصفحات الحديثة التعامل مع الانتقالات والحركات في CSS بما في ذلك متصفح IE 10+‎، والإصدارات الحديثة من متصفحَي Chrome و Firefox اللذين يدعمانهما دون سابقة (prefix)، أما Safari فعلينا استعمال السابقة <code>‎-webkit</code> معه.
</p>

<p>
	رأينا في هذا الدرس كيفية إنشاء ساعة والتحكم في عقاربها باستخدام تأثيرات CSS وتنفيذ تعليمات جافاسكريبت. يمكنك الاستفادة من الأمثلة المذكورة في الدرس لإنشاء ساعات مخصّصة لأغراضك. إن كنت تفكّر ساعات بمناطق زمنيّة مختلفة مثل تلك التي نراها في الفنادق فيمكنك الاستعانة بمكتبتي <a href="http://momentjs.com/" rel="external nofollow">Moment.js</a> و<a href="http://momentjs.com/timezone/" rel="external nofollow">Moment.js Timezone</a>.
</p>

<p>
	ترجمة –وبتصرّف– للمقال <a href="https://cssanimation.rocks/clocks/" rel="external nofollow">Clocks </a>لصاحبه Donovan Hutchinson.
</p>

<p>
	حقوق الصورة البارزة محفوظة لـ <a href="http://www.freepik.com/free-vector/minimalist-clock_722588.htm" rel="external nofollow">Freepik</a>
</p>
]]></description><guid isPermaLink="false">502</guid><pubDate>Thu, 22 Jun 2017 14:08:00 +0000</pubDate></item><item><title>&#x623;&#x645;&#x62B;&#x644;&#x629; &#x646;&#x645;&#x648;&#x630;&#x62C;&#x64A;&#x629; &#x644;&#x627;&#x633;&#x62A;&#x62E;&#x62F;&#x627;&#x645; flexbox &#x641;&#x64A; CSS3</title><link>https://academy.hsoub.com/programming/css/%D8%A3%D9%85%D8%AB%D9%84%D8%A9-%D9%86%D9%85%D9%88%D8%B0%D8%AC%D9%8A%D8%A9-%D9%84%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-flexbox-%D9%81%D9%8A-css3-r471/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2017_04/main.png.c43886e041e45aab11826213fb7dc6a7.png" /></p>

<p id="أمثلة-نموذجية-لاستخدام-flexbox-في-css3">
	سنستعرض في هذا الدرس أمثلةً عن مختلف حالات استعمال flexbox في CSS3، سنجعل الشرح مختصرًا قدر الإمكان وستُوضَّح الفكرة عبر قراءة الشيفرة؛ لذا تمعّن فيها كثيرًا، وانظر إلى ناتجها (لا تغفل أهميّة تجربتها عندك).
</p>

<p style="text-align: center;">
	<img alt="main.png" class="ipsImage ipsImage_thumbnailed" data-fileid="22753" data-unique="qcd4mm08o" src="https://academy.hsoub.com/uploads/monthly_2017_04/main.png.39b7eb83c5bdc8426b52fba6ce486643.png"></p>

<p>
	<br>
	لمزيدٍ من المعلومات حول flexbox، فانظر درس «<a href="https://academy.hsoub.com/programming/css/%D8%AA%D8%B9%D8%B1%D9%81-%D8%B9%D9%84%D9%89-css-flexbox-%D9%88%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A7%D8%AA-%D8%A7%D8%B3%D8%AA%D8%B9%D9%85%D8%A7%D9%84%D9%87-%D9%84%D9%87%D9%8A%D9%83%D9%84%D8%A9-%D8%B5%D9%81%D8%AD%D8%A7%D8%AA-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-r118/" rel="">تعرف على CSS Flexbox وأساسيات استعماله لهيكلة صفحات الويب</a>».
</p>

<h2 id="إنشاء-حاوية-flex">
	إنشاء حاوية flex
</h2>

<p>
	أول خطوة لإنشاء تخطيط صفحة يعتمد على flexbox هو إنشاء حاوية flex، وذلك بضبط الخاصية <code>display</code> إلى <code>flex</code>؛ يجدر بالذكر أنَّك ما زلت تحتاج إلى استخدام السابقة <code>‎-webkit</code> في متصفح Safari:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_6132_7">
<span class="pun">.</span><span class="pln">flexcontainer </span><span class="pun">{</span><span class="pln">
   display</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">flex</span><span class="pun">;</span><span class="pln">
   display</span><span class="pun">:</span><span class="pln"> flex</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></pre>

<h2 id="ترتيب-عناصر-flex-في-صف">
	ترتيب عناصر flex في صف
</h2>

<p>
	عناصر flex هي العناصر الأبناء لحاوية flex، والتي يمكن وضعها على المحور الرئيسي والمحور العمودي عليه. افتراضيًا، المحور الرئيسي هو المحور الأفقي، لذا ستوضع العناصر في صف (row)، يمكنك قلب المحور الرئيسي بضبط الخاصية <code>flex-direction</code> إلى <code>column</code>، حيث أنها مضبوطةٌ افتراضيًا إلى <code>row</code>:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_6132_7">
<code class="hljs css"><span class="hljs-comment"><span class="com">/* ضبط الحاوية */</span></span><span class="pln">
</span><span class="hljs-class"><span class="pun">.</span><span class="pln">flexcontainer</span></span><span class="pln"> </span><span class="hljs-rules"><span class="pun">{</span><span class="pln">
   </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">display</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> </span><span class="pun">-</span><span class="pln">webkit</span><span class="pun">-</span><span class="pln">flex</span></span></span><span class="pun">;</span><span class="pln">
   </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">display</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> flex</span></span></span><span class="pun">;</span><span class="pln">
   </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pun">-</span><span class="pln">webkit</span><span class="pun">-</span><span class="pln">flex</span><span class="pun">-</span><span class="pln">direction</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> row</span></span></span><span class="pun">;</span><span class="pln">
   </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">flex</span><span class="pun">-</span><span class="pln">direction</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> row</span></span></span><span class="pun">;</span><span class="pln">
</span><span class="hljs-rule"><span class="pun">}</span></span></span></code></pre>

<p style="text-align: center;">
	<img alt="1.png" class="ipsImage ipsImage_thumbnailed" data-fileid="22738" data-unique="e0mnyu9m2" src="https://academy.hsoub.com/uploads/monthly_2017_04/1.png.9b9ef4896e3588cf7b079911400267b9.png"></p>

<h2 id="ترتيب-عناصر-flex-على-شكل-عمود">
	ترتيب عناصر flex على شكل عمود
</h2>

<p>
	يمكننا ترتيب عناصر flex على شكل عمود بضبط الخاصية <code>flex-dirextion</code> إلى <code>column</code>.
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_6132_7">
<code class="hljs css"><span class="hljs-class"><span class="pun">.</span><span class="pln">flexcontainer</span></span><span class="pln"> </span><span class="hljs-rules"><span class="pun">{</span><span class="pln">
   </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">display</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> </span><span class="pun">-</span><span class="pln">webkit</span><span class="pun">-</span><span class="pln">flex</span></span></span><span class="pun">;</span><span class="pln">
   </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">display</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> flex</span></span></span><span class="pun">;</span><span class="pln">
   </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pun">-</span><span class="pln">webkit</span><span class="pun">-</span><span class="pln">flex</span><span class="pun">-</span><span class="pln">direction</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> column</span></span></span><span class="pun">;</span><span class="pln">
   </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">flex</span><span class="pun">-</span><span class="pln">direction</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> column</span></span></span><span class="pun">;</span><span class="pln">
</span><span class="hljs-rule"><span class="pun">}</span></span></span></code></pre>

<p style="text-align: center;">
	<img alt="2.png" class="ipsImage ipsImage_thumbnailed" data-fileid="22739" data-unique="gewyx2gvi" src="https://academy.hsoub.com/uploads/monthly_2017_04/2.png.c5bbf936d617ca7e885bc270b60d8ade.png"></p>

<h2 id="تحريك-عناصر-flex-إلى-الأعلى">
	تحريك عناصر flex إلى الأعلى
</h2>

<p>
	كيفية نقل لعناصر flex إلى الأعلى (top) يعتمد على اتجاه المحور الرئيسي. فإن كان رأسيًا (vertical) فيمكنك ضبط <code>justify-content</code> وإذا كان أفقيًا فاضبط <code>align-items</code>.
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_6132_7">
<code class="hljs css"><span class="hljs-class"><span class="pun">.</span><span class="pln">flexcontainer</span></span><span class="pln"> </span><span class="hljs-rules"><span class="pun">{</span><span class="pln">
   </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pun">-</span><span class="pln">webkit</span><span class="pun">-</span><span class="pln">flex</span><span class="pun">-</span><span class="pln">direction</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> column</span></span></span><span class="pun">;</span><span class="pln">
   </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">flex</span><span class="pun">-</span><span class="pln">direction</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> column</span></span></span><span class="pun">;</span><span class="pln">
   </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pun">-</span><span class="pln">webkit</span><span class="pun">-</span><span class="pln">justify</span><span class="pun">-</span><span class="pln">content</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> flex</span><span class="pun">-</span><span class="pln">start</span></span></span><span class="pun">;</span><span class="pln">
   </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">justify</span><span class="pun">-</span><span class="pln">content</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> flex</span><span class="pun">-</span><span class="pln">start</span></span></span><span class="pun">;</span><span class="pln">
</span><span class="hljs-rule"><span class="pun">}</span></span></span></code></pre>

<p style="text-align: center;">
	<img alt="3.png" class="ipsImage ipsImage_thumbnailed" data-fileid="22740" data-unique="28jcq4ros" src="https://academy.hsoub.com/uploads/monthly_2017_04/3.png.6e3e5b5d429d7659791db68b71ab2c49.png"></p>

<p>
	أما الشيفرة الآتية:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_6132_7">
<code class="hljs css"><span class="hljs-class"><span class="pun">.</span><span class="pln">flexcontainer</span></span><span class="pln"> </span><span class="hljs-rules"><span class="pun">{</span><span class="pln">
   </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">display</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> </span><span class="pun">-</span><span class="pln">webkit</span><span class="pun">-</span><span class="pln">flex</span></span></span><span class="pun">;</span><span class="pln">
   </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">display</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> flex</span></span></span><span class="pun">;</span><span class="pln">
   </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pun">-</span><span class="pln">webkit</span><span class="pun">-</span><span class="pln">flex</span><span class="pun">-</span><span class="pln">direction</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> row</span></span></span><span class="pun">;</span><span class="pln"> 
   </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">flex</span><span class="pun">-</span><span class="pln">direction</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> row</span></span></span><span class="pun">;</span><span class="pln">
   </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pun">-</span><span class="pln">webkit</span><span class="pun">-</span><span class="pln">align</span><span class="pun">-</span><span class="pln">items</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> flex</span><span class="pun">-</span><span class="pln">start</span></span></span><span class="pun">;</span><span class="pln">
   </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">align</span><span class="pun">-</span><span class="pln">items</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> flex</span><span class="pun">-</span><span class="pln">start</span></span></span><span class="pun">;</span><span class="pln">
</span><span class="hljs-rule"><span class="pun">}</span></span></span></code></pre>

<p>
	فتُنتِج:
</p>

<p style="text-align: center;">
	<img alt="4.png" class="ipsImage ipsImage_thumbnailed" data-fileid="22741" data-unique="cgdb8s6rg" src="https://academy.hsoub.com/uploads/monthly_2017_04/4.png.d1671fda9941f41a4e39d171be35aee4.png"></p>

<h2 id="تحريك-عناصر-flex-إلى-بداية-الحاوية">
	تحريك عناصر flex إلى بداية الحاوية
</h2>

<p>
	تحريك العناصر إلى يمين أو يسار الحاوية يعتمد على أمرين، أولهما هو المحور الرئيسي، فلو كانت الخاصية <code>flex-direction</code> مضبوطةً إلى <code>row</code> فاستعمل حينها الخاصية <code>justify-content</code>، وإن كانت مضبوطةٌ إلى <code>column</code> فاستعمل <code>align-items</code>؛ وثانيهما هو اتجاه الصفحة، فلو استعملتَ القيمة <code>flex-start</code> (كما في أمثلتنا) وكان اتجاه صفحتك من اليسار إلى اليمين فستتحرك العناصر إلى اليسار، أما لو كان اتجاه صفحتك من اليمين إلى اليسار فستتحرك العناصر إلى اليمين.
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_6132_7">
<code class="hljs css"><span class="hljs-class"><span class="pun">.</span><span class="pln">flexcontainer</span></span><span class="pln"> </span><span class="hljs-rules"><span class="pun">{</span><span class="pln">
   </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">display</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> </span><span class="pun">-</span><span class="pln">webkit</span><span class="pun">-</span><span class="pln">flex</span></span></span><span class="pun">;</span><span class="pln">
   </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">display</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> flex</span></span></span><span class="pun">;</span><span class="pln">
   </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pun">-</span><span class="pln">webkit</span><span class="pun">-</span><span class="pln">flex</span><span class="pun">-</span><span class="pln">direction</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> row</span></span></span><span class="pun">;</span><span class="pln"> 
   </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">flex</span><span class="pun">-</span><span class="pln">direction</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> row</span></span></span><span class="pun">;</span><span class="pln">
   </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pun">-</span><span class="pln">webkit</span><span class="pun">-</span><span class="pln">justify</span><span class="pun">-</span><span class="pln">content</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> flex</span><span class="pun">-</span><span class="pln">start</span></span></span><span class="pun">;</span><span class="pln">
   </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">justify</span><span class="pun">-</span><span class="pln">content</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> flex</span><span class="pun">-</span><span class="pln">start</span></span></span><span class="pun">;</span><span class="pln">
</span><span class="hljs-rule"><span class="pun">}</span></span></span></code></pre>

<p style="text-align: center;">
	<img alt="5.png" class="ipsImage ipsImage_thumbnailed" data-fileid="22742" data-unique="jnv3g7ycc" src="https://academy.hsoub.com/uploads/monthly_2017_04/5.png.150b7c67df8379d3e0e2598e41fe518e.png"></p>

<p>
	أما الشيفرة:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_6132_7">
<code class="hljs css"><span class="hljs-class"><span class="pun">.</span><span class="pln">flexcontainer</span></span><span class="pln"> </span><span class="hljs-rules"><span class="pun">{</span><span class="pln">
   </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">display</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> </span><span class="pun">-</span><span class="pln">webkit</span><span class="pun">-</span><span class="pln">flex</span></span></span><span class="pun">;</span><span class="pln">
   </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">display</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> flex</span></span></span><span class="pun">;</span><span class="pln">
   </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pun">-</span><span class="pln">webkit</span><span class="pun">-</span><span class="pln">flex</span><span class="pun">-</span><span class="pln">direction</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> column</span></span></span><span class="pun">;</span><span class="pln"> 
   </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">flex</span><span class="pun">-</span><span class="pln">direction</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> column</span></span></span><span class="pun">;</span><span class="pln">
   </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pun">-</span><span class="pln">webkit</span><span class="pun">-</span><span class="pln">align</span><span class="pun">-</span><span class="pln">items</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> flex</span><span class="pun">-</span><span class="pln">start</span></span></span><span class="pun">;</span><span class="pln">
   </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">align</span><span class="pun">-</span><span class="pln">items</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> flex</span><span class="pun">-</span><span class="pln">start</span></span></span><span class="pun">;</span><span class="pln">
</span><span class="hljs-rule"><span class="pun">}</span></span></span></code></pre>

<p>
	فتنتج:
</p>

<p style="text-align: center;">
	<img alt="6.png" class="ipsImage ipsImage_thumbnailed" data-fileid="22743" data-unique="emzexou53" src="https://academy.hsoub.com/uploads/monthly_2017_04/6.png.b4d61df9af833f2ce44f02d0ab9d575c.png"></p>

<h2 id="تحريك-عناصر-flex-إلى-نهاية-الحاوية">
	تحريك عناصر flex إلى نهاية الحاوية
</h2>

<p>
	وكما ذكرنا في القسم السابق، ستتحرك العناصر إلى اليمين عند استخدام القيمة <code>flex-end</code> في حال كانت الصفحة من اليسار إلى اليمين، وستتحرك إلى اليسار عندما تكون الصفحة من اليمين إلى اليسار.
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_6132_7">
<code class="hljs css"><span class="pln"> </span><span class="hljs-class"><span class="pun">.</span><span class="pln">flexcontainer</span></span><span class="pln"> </span><span class="hljs-rules"><span class="pun">{</span><span class="pln">
   </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">display</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> </span><span class="pun">-</span><span class="pln">webkit</span><span class="pun">-</span><span class="pln">flex</span></span></span><span class="pun">;</span><span class="pln">
   </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">display</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> flex</span></span></span><span class="pun">;</span><span class="pln">
   </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pun">-</span><span class="pln">webkit</span><span class="pun">-</span><span class="pln">flex</span><span class="pun">-</span><span class="pln">direction</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> row</span></span></span><span class="pun">;</span><span class="pln">
   </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">flex</span><span class="pun">-</span><span class="pln">direction</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> row</span></span></span><span class="pun">;</span><span class="pln">
   </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pun">-</span><span class="pln">webkit</span><span class="pun">-</span><span class="pln">justify</span><span class="pun">-</span><span class="pln">content</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> flex</span><span class="pun">-</span><span class="kwd">end</span></span></span><span class="pun">;</span><span class="pln">
   </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">justify</span><span class="pun">-</span><span class="pln">content</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> flex</span><span class="pun">-</span><span class="kwd">end</span></span></span><span class="pun">;</span><span class="pln">
</span><span class="hljs-rule"><span class="pun">}</span></span></span></code></pre>

<p style="text-align: center;">
	<img alt="7.png" class="ipsImage ipsImage_thumbnailed" data-fileid="22744" data-unique="c91edlg0f" src="https://academy.hsoub.com/uploads/monthly_2017_04/7.png.bd7b48e6312db2fef7d7ecc48943fa63.png"></p>

<p>
	أما الشيفرة:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_6132_7">
<code class="hljs css"><span class="hljs-class"><span class="pun">.</span><span class="pln">flexcontainer</span></span><span class="pln"> </span><span class="hljs-rules"><span class="pun">{</span><span class="pln">
   </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">display</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> </span><span class="pun">-</span><span class="pln">webkit</span><span class="pun">-</span><span class="pln">flex</span></span></span><span class="pun">;</span><span class="pln">
   </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">display</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> flex</span></span></span><span class="pun">;</span><span class="pln">
   </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pun">-</span><span class="pln">webkit</span><span class="pun">-</span><span class="pln">flex</span><span class="pun">-</span><span class="pln">direction</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> column</span></span></span><span class="pun">;</span><span class="pln">
   </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">flex</span><span class="pun">-</span><span class="pln">direction</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> column</span></span></span><span class="pun">;</span><span class="pln">
   </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pun">-</span><span class="pln">webkit</span><span class="pun">-</span><span class="pln">align</span><span class="pun">-</span><span class="pln">items</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> flex</span><span class="pun">-</span><span class="kwd">end</span></span></span><span class="pun">;</span><span class="pln">
   </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">align</span><span class="pun">-</span><span class="pln">items</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> flex</span><span class="pun">-</span><span class="kwd">end</span></span></span><span class="pun">;</span><span class="pln">
</span><span class="hljs-rule"><span class="pun">}</span></span></span></code></pre>

<p>
	فتنتج:
</p>

<p style="text-align: center;">
	<img alt="8.png" class="ipsImage ipsImage_thumbnailed" data-fileid="22745" data-unique="7ettosij0" src="https://academy.hsoub.com/uploads/monthly_2017_04/8.png.affb2c823eb2d8f5428275de7980746c.png"></p>

<h2 id="توسيط-العناصر">
	توسيط العناصر
</h2>

<p>
	التوسيط الأفقي والرأسي للعناصر الموجودة في حاوية flex هو أمرٌ هيّن، فكل ما علينا فعله هو ضبط القيمة <code>center</code> إلى الخاصية <code>justify-content</code> و <code>align-items</code>. لا اختلاف فيما لو كانت الخاصية <code>flex-direction</code> مضبوطةً إلى <code>row</code> أو <code>column</code>.
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_6132_7">
<code class="hljs css"><span class="hljs-class"><span class="pun">.</span><span class="pln">flexcontainer</span></span><span class="pln"> </span><span class="hljs-rules"><span class="pun">{</span><span class="pln">
   </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">display</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> </span><span class="pun">-</span><span class="pln">webkit</span><span class="pun">-</span><span class="pln">flex</span></span></span><span class="pun">;</span><span class="pln">
   </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">display</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> flex</span></span></span><span class="pun">;</span><span class="pln">
   </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pun">-</span><span class="pln">webkit</span><span class="pun">-</span><span class="pln">flex</span><span class="pun">-</span><span class="pln">direction</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> row </span><span class="hljs-comment"><span class="com">/* works with row or column */</span></span><span class="pln">
   flex</span><span class="pun">-</span><span class="pln">direction</span><span class="pun">:</span><span class="pln"> row</span></span></span><span class="pun">;</span><span class="pln">
   </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pun">-</span><span class="pln">webkit</span><span class="pun">-</span><span class="pln">align</span><span class="pun">-</span><span class="pln">items</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> center</span></span></span><span class="pun">;</span><span class="pln">
   </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">align</span><span class="pun">-</span><span class="pln">items</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> center</span></span></span><span class="pun">;</span><span class="pln">
   </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pun">-</span><span class="pln">webkit</span><span class="pun">-</span><span class="pln">justify</span><span class="pun">-</span><span class="pln">content</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> center</span></span></span><span class="pun">;</span><span class="pln">
   </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">justify</span><span class="pun">-</span><span class="pln">content</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> center</span></span></span><span class="pun">;</span><span class="pln">
</span><span class="hljs-rule"><span class="pun">}</span></span></span></code></pre>

<p style="text-align: center;">
	<img alt="9.png" class="ipsImage ipsImage_thumbnailed" data-fileid="22746" data-unique="jo4j4pae4" src="https://academy.hsoub.com/uploads/monthly_2017_04/9.png.fe715b451e5d4256eb5a145b9999fae4.png"></p>

<p>
	والعناصر المرتبة عموديًا:
</p>

<p style="text-align: center;">
	<img alt="10.png" class="ipsImage ipsImage_thumbnailed" data-fileid="22747" data-unique="cgxjmdzdp" src="https://academy.hsoub.com/uploads/monthly_2017_04/10.png.9a10a435e56bcd9f1901e0d2403dbd5e.png"></p>

<h2 id="تكبير-عنصر-flex-عددا-معينا-من-المرات">
	تكبير عنصر flex عددًا معيّنًا من المرات
</h2>

<p>
	يمكنك أن تُحدِّد كيف يكبر أو يصغر حجم عنصر flex نسبةً إلى عناصر flex الأخرى الموجودة في الحاوية. يمكنك فعل ذلك بضبط الخاصية <code>flex</code> لكل عنصر تريد تكبيره أو تصغيره:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_6132_7">
<code class="hljs css"><span class="hljs-class"><span class="pun">.</span><span class="pln">bigitem</span></span><span class="pln"> </span><span class="hljs-rules"><span class="pun">{</span><span class="pln">
   </span><span class="hljs-comment"><span class="com">/* This will be twice as big as the small item. */</span></span><span class="pln">
   </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pun">-</span><span class="pln">webkit</span><span class="pun">-</span><span class="pln">flex</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> </span><span class="hljs-number"><span class="lit">2</span></span><span class="pln"> </span><span class="hljs-number"><span class="lit">0</span></span><span class="pln"> </span><span class="hljs-number"><span class="lit">0</span></span></span></span><span class="pun">;</span><span class="pln"> 
   </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">flex</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> </span><span class="hljs-number"><span class="lit">2</span></span><span class="pln"> </span><span class="hljs-number"><span class="lit">0</span></span><span class="pln"> </span><span class="hljs-number"><span class="lit">0</span></span></span></span><span class="pun">;</span><span class="pln"> 
</span><span class="hljs-rule"><span class="pun">}</span></span></span><span class="pln">
</span><span class="hljs-class"><span class="pun">.</span><span class="pln">smallitem</span></span><span class="pln"> </span><span class="hljs-rules"><span class="pun">{</span><span class="pln">
   </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pun">-</span><span class="pln">webkit</span><span class="pun">-</span><span class="pln">flex</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> </span><span class="hljs-number"><span class="lit">1</span></span><span class="pln"> </span><span class="hljs-number"><span class="lit">0</span></span><span class="pln"> </span><span class="hljs-number"><span class="lit">0</span></span></span></span><span class="pun">;</span><span class="pln">
   </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">flex</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> </span><span class="hljs-number"><span class="lit">1</span></span><span class="pln"> </span><span class="hljs-number"><span class="lit">0</span></span><span class="pln"> </span><span class="hljs-number"><span class="lit">0</span></span></span></span><span class="pun">;</span><span class="pln">
</span><span class="hljs-rule"><span class="pun">}</span></span></span></code></pre>

<p style="text-align: center;">
	<img alt="11.png" class="ipsImage ipsImage_thumbnailed" data-fileid="22748" data-unique="caj0jldza" src="https://academy.hsoub.com/uploads/monthly_2017_04/11.png.8739c43fe10aaa75853b8933c6530010.png"></p>

<h2 id="التفاف-عناصر-flex-لتصبح-عدة-أسطر">
	التفاف عناصر flex لتصبح عدِّة أسطر
</h2>

<p>
	دعم المتصفحات لالتفاف (wrapping) عناصر flex ما يزال محدودًا إلى متصفحات webkit و IE11، فللأسف لا يدعم firefox هذه الميزة بعد.
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_6132_7">
<code class="hljs css"><span class="hljs-comment"><span class="com">/* On the flex container */</span></span><span class="pln">
</span><span class="hljs-class"><span class="pun">.</span><span class="pln">flexcontainer</span></span><span class="pln"> </span><span class="hljs-rules"><span class="pun">{</span><span class="pln">
   </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">display</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> </span><span class="pun">-</span><span class="pln">webkit</span><span class="pun">-</span><span class="pln">flex</span></span></span><span class="pun">;</span><span class="pln">
   </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">display</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> flex</span></span></span><span class="pun">;</span><span class="pln">
   </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pun">-</span><span class="pln">webkit</span><span class="pun">-</span><span class="pln">align</span><span class="pun">-</span><span class="pln">items</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> center</span></span></span><span class="pun">;</span><span class="pln">
   </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">align</span><span class="pun">-</span><span class="pln">items</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> center</span></span></span><span class="pun">;</span><span class="pln">
   </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pun">-</span><span class="pln">webkit</span><span class="pun">-</span><span class="pln">justify</span><span class="pun">-</span><span class="pln">content</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> center</span></span></span><span class="pun">;</span><span class="pln">
   </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">justify</span><span class="pun">-</span><span class="pln">content</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> center</span></span></span><span class="pun">;</span><span class="pln">
   </span><span class="hljs-comment"><span class="com">/* You can set flex-wrap and flex-direction individually */</span></span><span class="pln">
   </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pun">-</span><span class="pln">webkit</span><span class="pun">-</span><span class="pln">flex</span><span class="pun">-</span><span class="pln">direction</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> row</span></span></span><span class="pun">;</span><span class="pln">
   </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">flex</span><span class="pun">-</span><span class="pln">direction</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> row</span></span></span><span class="pun">;</span><span class="pln">
   </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pun">-</span><span class="pln">webkit</span><span class="pun">-</span><span class="pln">flex</span><span class="pun">-</span><span class="pln">wrap</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> wrap</span></span></span><span class="pun">;</span><span class="pln">
   </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">flex</span><span class="pun">-</span><span class="pln">wrap</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> wrap</span></span></span><span class="pun">;</span><span class="pln">
   </span><span class="hljs-comment"><span class="com">/* Or do it all in one line with flex flow */</span></span><span class="pln">
   </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pun">-</span><span class="pln">webkit</span><span class="pun">-</span><span class="pln">flex</span><span class="pun">-</span><span class="pln">flow</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> row wrap</span></span></span><span class="pun">;</span><span class="pln">
   </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">flex</span><span class="pun">-</span><span class="pln">flow</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> row wrap</span></span></span><span class="pun">;</span><span class="pln">
   </span><span class="hljs-comment"><span class="com">/* tweak the where items line up on the row */</span></span><span class="pln">
   </span><span class="hljs-comment"><span class="com">/* valid values are: flex-start, flex-end, space-between, space-around, stretch */</span></span><span class="pln">
   </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pun">-</span><span class="pln">webkit</span><span class="pun">-</span><span class="pln">align</span><span class="pun">-</span><span class="pln">content</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> flex</span><span class="pun">-</span><span class="kwd">end</span></span></span><span class="pun">;</span><span class="pln">
   </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">align</span><span class="pun">-</span><span class="pln">content</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> flex</span><span class="pun">-</span><span class="kwd">end</span></span></span><span class="pun">;</span><span class="pln">
</span><span class="hljs-rule"><span class="pun">}</span></span></span></code></pre>

<p style="text-align: center;">
	<img alt="12.png" class="ipsImage ipsImage_thumbnailed" data-fileid="22749" data-unique="kgcqd5xmc" src="https://academy.hsoub.com/uploads/monthly_2017_04/12.png.93fe369d621ef06c5f17fa12c366d792.png"></p>

<h2 id="التفاف-عناصر-flex-لتشكل-عدة-أعمدة">
	التفاف عناصر flex لتُشكِّل عدة أعمدة
</h2>

<p>
	لاحظ إسناد القيمة <code>column wrap</code> إلى الخاصية <code>flex-flow</code> في الشيفرة الآتية:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_6132_7">
<code class="hljs css"><span class="hljs-class"><span class="pun">.</span><span class="pln">flexcontainer</span></span><span class="pln"> </span><span class="hljs-rules"><span class="pun">{</span><span class="pln">
   </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">display</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> </span><span class="pun">-</span><span class="pln">webkit</span><span class="pun">-</span><span class="pln">flex</span></span></span><span class="pun">;</span><span class="pln">
   </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">display</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> flex</span></span></span><span class="pun">;</span><span class="pln">
   </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pun">-</span><span class="pln">webkit</span><span class="pun">-</span><span class="pln">align</span><span class="pun">-</span><span class="pln">items</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> center</span></span></span><span class="pun">;</span><span class="pln">
   </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">align</span><span class="pun">-</span><span class="pln">items</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> center</span></span></span><span class="pun">;</span><span class="pln">
   </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pun">-</span><span class="pln">webkit</span><span class="pun">-</span><span class="pln">justify</span><span class="pun">-</span><span class="pln">content</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> center</span></span></span><span class="pun">;</span><span class="pln">
   </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">justify</span><span class="pun">-</span><span class="pln">content</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> center</span></span></span><span class="pun">;</span><span class="pln">
   </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pun">-</span><span class="pln">webkit</span><span class="pun">-</span><span class="pln">flex</span><span class="pun">-</span><span class="pln">flow</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> column wrap</span></span></span><span class="pun">;</span><span class="pln">
   </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">flex</span><span class="pun">-</span><span class="pln">flow</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> column wrap</span></span></span><span class="pun">;</span><span class="pln">
   </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pun">-</span><span class="pln">webkit</span><span class="pun">-</span><span class="pln">align</span><span class="pun">-</span><span class="pln">content</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> stretch</span></span></span><span class="pun">;</span><span class="pln">
   </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">align</span><span class="pun">-</span><span class="pln">content</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> stretch</span></span></span><span class="pun">;</span><span class="pln">
</span><span class="hljs-rule"><span class="pun">}</span></span></span></code></pre>

<p style="text-align: center;">
	<img alt="13.png" class="ipsImage ipsImage_thumbnailed" data-fileid="22750" data-unique="2utv4sgyp" src="https://academy.hsoub.com/uploads/monthly_2017_04/13.png.7c37d09eafaf612afae2e8d48e67e938.png"></p>

<h2 id="إزالة-المسافة-بين-عناصر-flex-التي-تشكل-أسطرا-وأعمدة">
	إزالة المسافة بين عناصر flex التي تشكل أسطرًا وأعمدةً
</h2>

<p>
	تسمَح لك الخاصية <code>align-content</code> بضبط قيم للتحكم بكيفية توزيع المسافة بين الأسطر أو الأعمدة. الخيارات المتاحة لك هي <code>flex-start</code> و <code>flex-end</code> و <code>space-between</code> و <code>space-around</code> و <code>stretch</code>. فلإزالة المسافة بين الأعمدة الملتفة اضبط الخاصية <code>align-content</code> إلى <code>center</code>:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_6132_7">
<code class="hljs css"><span class="hljs-class"><span class="pun">.</span><span class="pln">flexcontainer</span></span><span class="pln"> </span><span class="hljs-rules"><span class="pun">{</span><span class="pln">
   </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">display</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> </span><span class="pun">-</span><span class="pln">webkit</span><span class="pun">-</span><span class="pln">flex</span></span></span><span class="pun">;</span><span class="pln">
   </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">display</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> flex</span></span></span><span class="pun">;</span><span class="pln">
   </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pun">-</span><span class="pln">webkit</span><span class="pun">-</span><span class="pln">align</span><span class="pun">-</span><span class="pln">items</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> center</span></span></span><span class="pun">;</span><span class="pln">
   </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">align</span><span class="pun">-</span><span class="pln">items</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> center</span></span></span><span class="pun">;</span><span class="pln">
   </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pun">-</span><span class="pln">webkit</span><span class="pun">-</span><span class="pln">justify</span><span class="pun">-</span><span class="pln">content</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> center</span></span></span><span class="pun">;</span><span class="pln">
   </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">justify</span><span class="pun">-</span><span class="pln">content</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> center</span></span></span><span class="pun">;</span><span class="pln">
   </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pun">-</span><span class="pln">webkit</span><span class="pun">-</span><span class="pln">flex</span><span class="pun">-</span><span class="pln">flow</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> column wrap</span></span></span><span class="pun">;</span><span class="pln">
   </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">flex</span><span class="pun">-</span><span class="pln">flow</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> column wrap</span></span></span><span class="pun">;</span><span class="pln">
   </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pun">-</span><span class="pln">webkit</span><span class="pun">-</span><span class="pln">align</span><span class="pun">-</span><span class="pln">content</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> center</span></span></span><span class="pun">;</span><span class="pln">
   </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">align</span><span class="pun">-</span><span class="pln">content</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> center</span></span></span><span class="pun">;</span><span class="pln">

</span><span class="hljs-rule"><span class="pun">}</span></span></span></code></pre>

<p style="text-align: center;">
	<img alt="14.png" class="ipsImage ipsImage_thumbnailed" data-fileid="22751" data-unique="b8krl93gs" src="https://academy.hsoub.com/uploads/monthly_2017_04/14.png.ffecff0409f7efa07b71ec390fab3d58.png"></p>

<h2 id="تثبيت-أحد-العناصر-إلى-أحد-أطراف-حاوية-flex">
	تثبيت أحد العناصر إلى أحد أطراف حاوية flex
</h2>

<p>
	يمكنك التحكم بقيمة <code>align-items</code> لمختلف العناصر الموجودة في حاوية flex عبر الخاصية <code>align-self</code>. يمكنك أيضًا ضبط هوامش (margins) بقيم معيّنة لتحريك العناصر إلى الأعلى أو الأسفل أو إلى اليمين أو اليسار؛ فلو كانت عندك حاوية تُرتَّب فيها العناصر على شكل عمود، وأردتَ نقل أحد العناصر إلى يسار الحاوية، فاضبط الخاصية <code>margin-right</code> إلى <code>auto</code>:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_6132_7">
<code class="hljs css"><span class="hljs-comment"><span class="com">/* On the flex item to pin */</span></span><span class="pln">
</span><span class="hljs-class"><span class="pun">.</span><span class="pln">left</span></span><span class="pln"> </span><span class="hljs-rules"><span class="pun">{</span><span class="pln">
   </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pun">-</span><span class="pln">webkit</span><span class="pun">-</span><span class="pln">align</span><span class="pun">-</span><span class="kwd">self</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> flex</span><span class="pun">-</span><span class="pln">start</span></span></span><span class="pun">;</span><span class="pln">
   </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">align</span><span class="pun">-</span><span class="kwd">self</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> flex</span><span class="pun">-</span><span class="pln">start</span></span></span><span class="pun">;</span><span class="pln">
</span><span class="hljs-rule"><span class="pun">}</span></span></span><span class="pln">

</span><span class="hljs-class"><span class="pun">.</span><span class="pln">right</span></span><span class="pln"> </span><span class="hljs-rules"><span class="pun">{</span><span class="pln">
   </span><span class="hljs-rule"><span class="hljs-attribute"><span class="pln">margin</span><span class="pun">-</span><span class="pln">left</span></span><span class="pun">:</span><span class="hljs-value"><span class="pln"> </span><span class="kwd">auto</span></span></span><span class="pun">;</span><span class="pln">
</span><span class="hljs-rule"><span class="pun">}</span></span></span></code></pre>

<p style="text-align: center;">
	<img alt="15.png" class="ipsImage ipsImage_thumbnailed" data-fileid="22752" data-unique="o0mt79183" src="https://academy.hsoub.com/uploads/monthly_2017_04/15.png.ab0c033985411949d3830481cfb993a9.png"></p>

<p>
	ترجمة -وبتصرّف- للمقال The <a href="http://www.sketchingwithcss.com/samplechapter/cheatsheet.html" rel="external nofollow">Ultimate Flexbox Cheat Sheet</a> لصاحبه Sean Fioritto
</p>
]]></description><guid isPermaLink="false">471</guid><pubDate>Mon, 17 Apr 2017 20:13:48 +0000</pubDate></item><item><title>&#x62A;&#x62D;&#x62F;&#x64A;&#x62F; &#x645;&#x648;&#x627;&#x642;&#x639; &#x627;&#x644;&#x639;&#x646;&#x627;&#x635;&#x631; &#x641;&#x64A; CSS &#x628;&#x627;&#x633;&#x62A;&#x62E;&#x62F;&#x627;&#x645; fixed &#x648; sticky</title><link>https://academy.hsoub.com/programming/css/%D8%AA%D8%AD%D8%AF%D9%8A%D8%AF-%D9%85%D9%88%D8%A7%D9%82%D8%B9-%D8%A7%D9%84%D8%B9%D9%86%D8%A7%D8%B5%D8%B1-%D9%81%D9%8A-css-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-fixed-%D9%88-sticky-r408/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2017_01/css-positioning.png.7f7694da30aa9929de95d845bde1cd6b.png" /></p>
<p id="تحديد-مواقع-العناصر-في-css-باستخدام-fixed-و-sticky">
	رأينا في <a href="https://academy.hsoub.com/programming/css/%D8%AA%D8%AD%D8%AF%D9%8A%D8%AF-%D9%85%D9%88%D8%A7%D9%82%D8%B9-%D8%A7%D9%84%D8%B9%D9%86%D8%A7%D8%B5%D8%B1-%D9%81%D9%8A-css-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-static-%D9%88-relative-%D9%88-absolute-r406/" rel="">الدرس السابق</a> أكثر ثلاثة أنماط شيوعًا لتحديد مواقع العناصر في صفحات HTML عبر CSS، وهي static و relative و absolute. سننظر في هذا الدرس إلى <code>fixed</code> و <code>sticky</code>، ثم سنناقش طريقة ترتيب العناصر فوق بعضها عبر <code>z-index</code>.
</p>

<p style="text-align: center;">
	<img alt="css-positioning.png" class="ipsImage ipsImage_thumbnailed" data-fileid="20785" data-unique="l8nux92x8" src="https://academy.hsoub.com/uploads/monthly_2017_01/css-positioning.png.cb55c1d22f471eb022bc8360e22b6f85.png">
</p>

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

<p>
	هنالك قاعدة <code>background-attachment: fixed</code> تُطبَّق على صور الخلفية، وأيضًا توجد قاعدة <code>position: fixed</code> التي تُطبَّق على العناصر؛ حيث تسمح بأن يكون موقع العنصر ثابتًا نسبةً إلى الصفحة، مما يسمح بتمرير بقية العناصر مع بقاء العنصر في مكانه. ويُطبَّق ذلك عادةً على حاويات، فمن الأمثلة الشائعة هي الترويسات والتذييلات الثابتة. وكما عند ضبط العناصر ذات القاعدة <code>position: absolute</code>، ستُصبِح جميع العناصر ذات القاعدة <code>position: static</code> تحت أيّة محتوى له القاعدة <code>position: fixed</code>.<br>
	هذه شيفرة HTML لعنصر ثابت يظهر على يسار الصفحة:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_4574_9"><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"fixed-pull-tab"</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">"red-tab.png"</span><span class="pln"> </span><span class="atn">style</span><span class="pun">=</span><span class="atv">"</span><span class="kwd">float</span><span class="pun">:</span><span class="pln"> right</span><span class="atv">"</span><span class="pln"> </span><span class="atn">alt</span><span class="pun">=</span><span class="atv">"LEVI’S"</span><span class="tag">&gt;</span><span class="pln">
    </span><span class="tag">&lt;p&gt;</span><span class="pln">This is an example of an element with </span><span class="tag">&lt;code&gt;</span><span class="pln">position: fixed;</span><span class="tag">&lt;/code&gt;</span><span class="pln"> 
applied to it, for this blog’s article on the CSS property.
</span><span class="tag">&lt;/div&gt;</span></pre>

<p>
	استخدمتُ الخاصية <code>box-shadow</code> في CSS على الصورة لكي أوضِّح أنَّ الحاوية موجودة في «طبقة» تعلو بقية المستند:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_4574_11"><span class="pln">div</span><span class="com">#fixed-pull-tab {</span><span class="pln">
    width</span><span class="pun">:</span><span class="pln"> </span><span class="lit">300px</span><span class="pun">;</span><span class="pln">
    border</span><span class="pun">:</span><span class="pln"> </span><span class="lit">1px</span><span class="pln"> solid </span><span class="com">#000;</span><span class="pln">
    padding</span><span class="pun">-</span><span class="pln">left</span><span class="pun">:</span><span class="pln"> </span><span class="lit">1em</span><span class="pun">;</span><span class="pln">
    background</span><span class="pun">-</span><span class="pln">color</span><span class="pun">:</span><span class="pln"> rgba</span><span class="pun">(</span><span class="lit">255</span><span class="pun">,</span><span class="pln"> </span><span class="lit">255</span><span class="pun">,</span><span class="pln"> </span><span class="lit">37</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0.7</span><span class="pun">);</span><span class="pln">
    position</span><span class="pun">:</span><span class="pln"> </span><span class="kwd">fixed</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">265px</span><span class="pun">;</span><span class="pln">
    top</span><span class="pun">:</span><span class="pln"> </span><span class="lit">200px</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
div</span><span class="com">#fixed-pull-tab p { </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">70px</span><span class="pun">;</span><span class="pln"> 
</span><span class="pun">}</span><span class="pln">
div</span><span class="com">#fixed-pull-tab img { </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">4px</span><span class="pln"> </span><span class="lit">4px</span><span class="pln"> </span><span class="lit">4px</span><span class="pln"> rgba</span><span class="pun">(</span><span class="lit">0</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">0</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0.33</span><span class="pun">);</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
div</span><span class="com">#fixed-pull-tab:hover { </span><span class="pln">
    left</span><span class="pun">:</span><span class="pln"> </span><span class="lit">0</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></pre>

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

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

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

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

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

<h3 id="حالة-خاصة-العناصر-الثابتة-الموجودة-داخل-حاوية">
	حالة خاصة: العناصر الثابتة الموجودة داخل حاوية
</h3>

<p>
	في الحالات العادية، سيُزال العنصر المُطبَّق عليه القاعدة <code>position: fixed</code> من المستند، وأيّة معلومات تُحدِّد مكانه نسبةً إلى العنصر <code>&lt;body&gt;</code> ستصبح غير متاحة.<br>
	لكن، من الممكن وضع عنصر مُطبَّق عليه القاعدة <code>position: fixed</code> داخل عنصر آخر ومنسوبًا إليه، وذلك إذا أُجري CSS transform عليه. فلو كانت لدينا الشيفرة الآتية:
</p>

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

<p>
	يمكن أن يصبح العنصر الداخلي «ثابتًا» بالنسبة إلى العنصر الأب باستخدام شيفرة CSS الآتية (دون السابقات الخاصة بالمتصفحات، لغرض وضوح الشيفرة):
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_4574_15"><span class="pln">#container { 
    transform: translateZ(0);
}
#fixed {
    position: fixed;
}</span></pre>

<p>
	هذه «الميزة» الغربية هي جزء من مواصفات CSS، وهي مدعومة في جميع المتصفحات الحديثة التي جربتها (باستثناء IE 11)، وحسب معلوماتي، أول من اكتشف ذلك هو Eric Meyer، وأتوقع أنَّ هذه الميزة نادرة الاستخدام (أغلبية المطورين يفضلون استخدام <code>absolute</code> مع <code>relative</code>) لكن لا ضير من معرفة هذه المعلومة.
</p>

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

<p>
	مرت فترةٌ أصبحت فيها العناصر «الثابتة ديناميكيًا» هي ميزة التصميم الأساسية في الموقع، فإذا مرّرتَ إلى الأسفل فسيتحرك كل شيءٍ كما هو متوقع، لكن عندما يبلغ عنصرٌ معيّن (عادةً يكون شريط القائمة، أو إعلان في بعض الأحيان) أعلى الصفحة فسيثبت مكانه، بينما ستستمر بقية عناصر المستند بالتمرير أدناه؛ وعند التمرير إلى الأعلى فسيربط العنصر نفسه مرةً أخرى بالمستند.<br>
	هذا السلوك (الذي هو دمجٌ بين <code>position: static</code> و <code>position: fixed</code>) كان يُضاف إلى الصفحة باستخدام jQuery (عبر إحدى الإضافات الكثيرة الموجودة لهذا الغرض). وكالعديد من الميزات المشهورة، سينتهي بهذا الأمر إلى أن يصبح جزءًا من المواصفة الرسمية، مما يعني أننا سنتمكن من فعل ذلك باستخدام CSS بمفردها، دون إطارات عمل، أو سكربتات، أو غير ذلك… لكن في هذه الحالة، كانت (وما زالت) عملية التحويل إلى مواصفة مليئةً بالمشاكل.
</p>

<h3 id="كيف-كان-يفترض-لهذه-الميزة-أن-تعمل">
	كيف كان يُفتَرض لهذه الميزة أن تعمل
</h3>

<p>
	كنّا نكتب هذه الميزة كقيمة جديدة: <code>position: sticky</code>، وذلك مع استخدامٍ ذكيٍ للخاصية <code>top</code> (وهي ترمز عند استخدامها مع <code>sticky</code> إلى المسافة من أعلى العنصر body<code>الذي بعدها سيصبح العنصر «ثابتًا» عند التمرير؛ البدائل هي الخاصيات</code>left<code>و</code>bottom<code>و</code>right` للتمرير في تلك الاتجاهات)، وكان ذلك كافيًا لتغطية طيفٍ واسعٍ من حالات الاستخدام؛ وبهذا ستصبح طريقة الاستخدام سهلةً جدًا:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_4574_17"><span class="com">#stickytest {</span><span class="pln">
    position</span><span class="pun">:</span><span class="pln"> sticky</span><span class="pun">;</span><span class="pln">
    top</span><span class="pun">:</span><span class="pln"> </span><span class="lit">0px</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	وعند تطبيق ما سبق على صورة (مثلًا)، فستبدو الشيفرة كما يلي:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_4574_19"><span class="tag">&lt;img</span><span class="pln"> </span><span class="atn">src</span><span class="pun">=</span><span class="atv">"geckofoot.jpg"</span><span class="pln"> </span><span class="atn">alt</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"stickytest"</span><span class="tag">&gt;</span><span class="pln">
</span><span class="tag">&lt;p&gt;</span><span class="pln">Lorem ipsum…</span></pre>

<p>
	ملاحظة: افتراضنا أنَّ الصفحة تحتوي على محتوى بعد العنصر لكي يصبح العنصر <code>‎#stickytest</code> في أعلى نافذة المتصفح، وإذا لم تكن تحتوي الصفحة على عناصر أخرى، فلن يصل العنصر إلى المكان اللازم لكي «يثبت» مكانه. أنصحك بتعبئة الصفحة بكثير من النصوص لغرض التجربة.<br>
	إذا جربتَ الشيفرة السابقة على نسخةٍ حديثةٍ من متصفح Firefox، فيجب أن تعمل عملًا صحيحًا. لكن عند الانتقال إلى بقية المتصفحات، فسنجد أمورًا عجيبة!<br>
	1. متصفح Safari 6.1+‎ (على الحاسوب وعلى الهاتف) يدعم القيمة <code>sticky</code> عبر سابقة (prefix) خاصة به. صحيحٌ أنَّ من غير الشائع أن تُطبَّق السابقة على القيمة، وليس على الخاصية.<br>
	2. هنالك أمرٌ بسيطٌ عليك الانتباه إليه ألا وهو أنَّ خاصية <code>sticky</code> في Safari تعمل إذا كانت العناصر لها القاعدة <code>display: block</code>، لذا يجب تعديل مثال الصورة السابق ليصبح:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_4574_21"><span class="com">#stickytest {</span><span class="pln">
    display</span><span class="pun">:</span><span class="pln"> block</span><span class="pun">;</span><span class="pln">
    position</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">sticky</span><span class="pun">;</span><span class="pln">
    position</span><span class="pun">:</span><span class="pln"> sticky</span><span class="pun">;</span><span class="pln">
    top</span><span class="pun">:</span><span class="pln"> </span><span class="lit">0px</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	بالإضافة إلى:
</p>

<ul>
	<li>
		وضع عنصر <code>sticky</code> داخل حاوية لها القاعدة <code>overflow: hidden</code> سيؤدي إلى عدم تطبيق سلوك <code>sticky</code>.
	</li>
	<li>
		رسميًا، يجب أن يعمل <code>sticky</code> مع <code>display: table</code>، بما في ذلك خلايا الجدول، وهذا مفيدٌ عند التنقل في الجداول الطويلة مع إبقاء عناوين الأعمدة ظاهرةً. لكن للأسف لم تُطبَّق هذه الميزة في المتصفح.
	</li>
</ul>

<h3 id="متصفح-chrome-ينسحب-من-السباق">
	متصفح Chrome ينسحب من السباق
</h3>

<p>
	ربما تجد في الويب بعض الصفحات التي تُصّر أنَّ متصفح Chrome يدعم القاعدة <code>position: sticky</code> كخيارٍ اختباري، وكان هذا صحيحًا… إلى أن أُلغي هذا الخيار تمامًا في Chrome 37. شعر فريق تطوير Google أنَّ إبقاء <code>position: sticky</code> هو تحدٍ لهم في مسعاهم في تحسين سرعة العرض في المتصفح، لهذا ألغيت هذه الميزة. وهذا يعني أنَّ علينا العودة إلى الطرق الالتفافية لإنشاء هذا السلوك في متصفح Chrome و Internet Explorer (الذي لم يدعم القيمة الجديدة قط).<br>
	لحسن الحظ، هنالك بعض الخيارات المتاحة أمامنا: فلدى Filament Group حلٌّ يعتمد على jQuery، بالإضافة إلى غيره من الحلول. أفضِّل -شخصيًا- استخدام stickyfill من تطوير Oleg Korsunsky، والذي يمكن أن يعمل مع أو بدون jQuery.<br>
	المثال الموجود في صفحة StickFill يُضيف سلوك sticky كفئة CSS، لكن من المرجَّح أن تُطبِّق ذلك على عنصرٍ وحيد، وإنشاء مُحدِّد يعتمد على المُعرِّف <code>id</code> هو أمرٌ منطقي. وفي هذا المثال، سأضيف إلى السكربت الموجود أسفل الصفحة السطرَ الآتي:
</p>

<pre class="ipsCode prettyprint lang-javascript prettyprinted" id="ips_uid_4574_23"><span class="typ">Stickyfill</span><span class="pun">.</span><span class="pln">add</span><span class="pun">(</span><span class="pln">document</span><span class="pun">.</span><span class="pln">getElementById</span><span class="pun">(</span><span class="str">'stickytest'</span><span class="pun">));</span></pre>

<p>
	لاحظ أنَّ قيم <code>top</code> و <code>left</code> و <code>bottom</code> و <code>right</code> للعنصر مُقاسةٌ من العنصر <code>body</code>، وهذا يتضمن أيّة هوامش موجودة للعنصر <code>body</code>.
</p>

<h3 id="أبق-الأمر-بسيطا">
	أبقِ الأمر بسيطًا
</h3>

<p>
	صحيحٌ أنَّ <code>position: sticky</code> لها العديد من الميزات، لكن تسهل إساءة استخدامها. ولتفادي الكوارث التي تتعلق بواجهة المستخدم فسأنصحك باتباع ما يلي:<br>
	- نظريًا، يمكن استخدام <code>position: sticky</code> لإبقاء العناصر ثابتةً داخل أيّ حاوية قابلة للتمرير، كما في هذا المثال؛ لكن رجاءً لا تستخدمها في أكثر من مكان في الصفحة، فلا نحتاج إلى ذلك! (إضافةً إلى أنَّ جميع الحلول الالتفافية المتوافرة لقاعدة <code>position: sticky</code> ستفشل في توفير هذه الميزة، وسيعمل المثال السابق في حاويةٍ في الصفحة لأنها تلك الحاوية عبارة عن عنصر <code>iframe</code>).<br>
	- كن حذرًا للغاية عند استخدام <code>position: sticky</code> على شاشات الهاتف المحمول: فكل شيءٍ سيثبت مكانه سيأخذ مساحةً كبيرةً من الشاشة، مما يقلّل من المساحة الباقية لعرض محتواك. يجب أن تضبط العنصر ليكون ثابتًا <code>sticky</code> إذا كان ذلك ضروريًا جدًا أو كان مفيدًا للغاية، وليس لأنه «يبدو بشكلٍ جميل». تذكّر أنَّه من الأسهل للمستخدمين أن يُمرِّروا في الصفحة باللمس أعلى أو أسفل الشاشة، لذا لا تقف بطريقهم!<br>
	لضمان استخدام <code>sticky</code> استخدامًا حكيمًا، فاكتب قاعدة <code>‎@media</code> التي تبطل تأثير <code>position: sticky</code> على الشاشات الصغيرة:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_4574_25"><span class="lit">@media</span><span class="pln"> all </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">600px</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
    </span><span class="com">#stickytest {</span><span class="pln">
        position</span><span class="pun">:</span><span class="pln"> </span><span class="kwd">static</span><span class="pln"> </span><span class="pun">!</span><span class="pln">important</span><span class="pun">;</span><span class="pln">
    </span><span class="pun">}</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	ما سبق سيُعيد العنصر إلى مكانه الطبيعي في المستند إذا كان عرض الشاشة 600 بكسل أو أقل. ستحتاج إلى كتابة قاعدة مشابهة في JavaScript باستخدام <code>matchMedia</code> إذا كنتَ تستعمل حلًا التفافيًا. أعد كتابة السكربت أعلاه إلى شيءٍ شبيهٍ بما يلي:
</p>

<pre class="ipsCode prettyprint lang-javascript prettyprinted" id="ips_uid_4574_27"><span class="kwd">var</span><span class="pln"> sticky </span><span class="pun">=</span><span class="pln"> document</span><span class="pun">.</span><span class="pln">getElementById</span><span class="pun">(</span><span class="str">'stickytest'</span><span class="pun">);</span><span class="pln">
</span><span class="kwd">var</span><span class="pln"> screencheck </span><span class="pun">=</span><span class="pln"> window</span><span class="pun">.</span><span class="pln">matchMedia</span><span class="pun">(</span><span class="str">"(max-width: 600px)"</span><span class="pun">);</span><span class="pln">
</span><span class="typ">Stickyfill</span><span class="pun">.</span><span class="pln">add</span><span class="pun">(</span><span class="pln">sticky</span><span class="pun">);</span><span class="pln">
</span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">screencheck</span><span class="pun">.</span><span class="pln">matches</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
    </span><span class="typ">Stickyfill</span><span class="pun">.</span><span class="pln">remove</span><span class="pun">(</span><span class="pln">sticky</span><span class="pun">);</span><span class="pln">
</span><span class="pun">}</span></pre>

<ul>
	<li>
		كقاعدة عامة، يجب أن تكون العناصر «الثابتة» هي نقطة لانقطاع المحتوى، فلا «تُثبِّت» العناصر في منتصف قطعة من المحتوى، مما يجعل النص يظهر أعلى وأسفل العنصر الثابت، وهذا أمرٌ يُشتِّت القارئ كثيرًا، ويُصعِّب من قراءة النص.
	</li>
	<li>
		وشبيهًا بما سبق، حاول أن تتفادى تثبيت العناصر التي تقسم جزءًا من محتوى نصي، مما يجبر المستخدم على التمرير بسرعة أبطأ لقراءة السطر بأكمله.
	</li>
	<li>
		احرص أنَّ لا تحتل العناصر الثابتة أكثر من الحد الأدنى المتوقع لنافذة المتصفح، فلو كانت أطول من حاويتها فلن يتمكن المستخدمون من رؤية كامل محتواها ولن يستطيعوا أيضًا قراءة بقية المحتوى الموجود في الصفحة.
	</li>
	<li>
		إضافةً إلى ما سبق، ربما تريد أن تُشير إلى أنَّ المحتوى تحت العنصر الثابت سيكون مخفيًا، وربما تستعمل تأثير الشفافية مثلًا عندما يُثبَّت العنصر، كتأثير عدم الوضوح على المحتوى خلف شريط الانتقال.<br>
		فكرة أخرى هي تطبيق القاعدة <code>position: sticky</code> على سلسلة من العناصر، مما يجعلها تظهر بعضها تلو بعض عند نقاط مُحدِّدة أثناء التمرير. وعلى الرغم من أنَّ هذه الطريقة قد تكون فعالة، لكن يُحتَمَل أن تُربِك المستخدمين، لذا نفِّذها بعد أخذ الحيطة.<br>
		للأسف، لا يوجد حدث باسم <code>stuck</code> في JavaScript للتبليغ أنَّ أحد العناصر قد أصبح بموضعٍ ثابتٍ. لكن يمكنك الآن اختبار ذلك يدويًا (بعض الطرائق الالتفافية تستخدم فئة <code>class</code> خاصة بالعناصر الثابتة للتعويض عن عدم وجود الحدث <code>stuck</code>).
	</li>
</ul>

<h2 id="ترتيب-العناصر-فوق-بعضها-عبر-z-index">
	ترتيب العناصر فوق بعضها عبر z-index
</h2>

<p>
	عندما توضع العناصر في الصفحة بمكانٍ مطلق (<code>absolute</code>) فيمكن أن تتداخل وتغطي على المحتوى العادي، وعلى بقية العناصر التي لها القاعدة <code>position: absolute</code> أيضًا. لكن عندما يحدث ذلك، فكيف سيُحدِّد المتصفح ما هو العنصر الذي يجب أن يكون في الأعلى؟<br>
	افتراضيًا، يُحدِّد المتصفح ترتيب العناصر فوق بعضها عبر ترتيب ورودها في الشيفرة. أفضل طريقة لتصور ذلك هي تخيل مجموعة أوراق لعب، وبعض أوراقها موزعةٌ على الطاولة، وتلك الأوراق هي المحتوى العادي للصفحة بما في ذلك العناصر ذات القيمة <code>static</code> و <code>relative</code> و <code>fixed</code>. وإذا تداخلت مع أوراقٍ أخرى موضوعة مسبقًا على الطاولة (وتلك هي العناصر ذات القيمة <code>absolute</code>)، فسيتم ترتيب الأوراق بناءً على ترتيب سحبها (أي أنَّ العناصر الحديثة ستظهر فوق العناصر الأقدم…). ففي مثالنا في الدرس السابق [أضف رابط درس 34676-CSS-Positioning-static-relative-absolute]، ظهرت الصور بترتيبٍ معيّن في الشيفرة، فعندما تداخلت الصور كانت صورة إسخيلوس في أسفل المجموعة، ثم أفلاطون فوقها، وفي الأعلى صورة ألكيبيادس. أسهل طريقة لإنشاء «طبقات» لعناصر ذات القاعدة <code>position: absolute</code> هي تغيير ترتيب ورودها في الشيفرة، فمثلًا لو غيرنا الشيفرة إلى:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_4574_29"><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"greek-figures"</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">"plato-bust.jpg"</span><span class="pln"> </span><span class="atn">alt</span><span class="pun">=</span><span class="atv">"Plato"</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"plato"</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">"aeschylus-bust.jpg"</span><span class="pln"> </span><span class="atn">alt</span><span class="pun">=</span><span class="atv">"Aeschylus"</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"aeschylus"</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">"alcibiades-bust.jpg"</span><span class="pln"> </span><span class="atn">alt</span><span class="pun">=</span><span class="atv">"Alcibiades"</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"alcibiades"</span><span class="tag">&gt;</span><span class="pln">
</span><span class="tag">&lt;/div&gt;</span></pre>

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

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="jpg" data-fileid="20786" href="https://academy.hsoub.com/uploads/monthly_2017_01/1-absolute-layout-2x.jpg.8062fb1bd4e11a38148d16146e101ce0.jpg" rel=""><img alt="1-absolute-layout-2x.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="20786" data-unique="o6fv0cio1" style="" src="https://academy.hsoub.com/uploads/monthly_2017_01/1-absolute-layout-2x.thumb.jpg.3e9c579b357ab18237920801aed625fa.jpg"></a>
</p>

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

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_4574_31"><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"greek-figures"</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">"aeschylus-bust.jpg"</span><span class="pln"> </span><span class="atn">alt</span><span class="pun">=</span><span class="atv">"Aeschylus"</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"aeschylus"</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">"plato-bust.jpg"</span><span class="pln"> </span><span class="atn">alt</span><span class="pun">=</span><span class="atv">"Plato"</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"plato"</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">"alcibiades-bust.jpg"</span><span class="pln"> </span><span class="atn">alt</span><span class="pun">=</span><span class="atv">"Alcibiades"</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"alcibiades"</span><span class="tag">&gt;</span><span class="pln">
</span><span class="tag">&lt;/div&gt;</span></pre>

<p>
	إذا أردنا إعادة ترتيب العناصر، لكننا لا نريد تعديل الشيفرة، فيمكننا إضافة الخاصية <code>z-index</code> إلى أنماط CSS التي تتحكم في الصور:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_4574_33"><span class="pln">body p </span><span class="pun">{</span><span class="pln">
    text</span><span class="pun">-</span><span class="pln">align</span><span class="pun">:</span><span class="pln"> justify</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln"> 
div</span><span class="com">#greek-figures {</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">
    width</span><span class="pun">:</span><span class="pln"> </span><span class="lit">250px</span><span class="pun">;</span><span class="pln">
    height</span><span class="pun">:</span><span class="pln"> </span><span class="lit">450px</span><span class="pun">;</span><span class="pln">
    margin</span><span class="pun">-</span><span class="pln">left</span><span class="pun">:</span><span class="pln"> </span><span class="lit">2em</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
div</span><span class="com">#greek-figures img { </span><span class="pln">
    height</span><span class="pun">:</span><span class="pln"> </span><span class="lit">150px</span><span class="pun">;</span><span class="pln">
    width</span><span class="pun">:</span><span class="pln"> </span><span class="lit">150px</span><span class="pun">;</span><span class="pln">
    position</span><span class="pun">:</span><span class="pln"> absolute</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
img</span><span class="com">#aeschylus { </span><span class="pln">
    z</span><span class="pun">-</span><span class="pln">index</span><span class="pun">:</span><span class="pln"> </span><span class="lit">2</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
img</span><span class="com">#plato {</span><span class="pln">
    top</span><span class="pun">:</span><span class="pln"> </span><span class="lit">155px</span><span class="pun">;</span><span class="pln">
    right</span><span class="pun">:</span><span class="pln"> </span><span class="lit">15px</span><span class="pun">;</span><span class="pln">
    z</span><span class="pun">-</span><span class="pln">index</span><span class="pun">:</span><span class="pln"> </span><span class="lit">1</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
img</span><span class="com">#alcibiades {</span><span class="pln">
    top</span><span class="pun">:</span><span class="pln"> </span><span class="lit">290px</span><span class="pun">;</span><span class="pln">
    z</span><span class="pun">-</span><span class="pln">index</span><span class="pun">:</span><span class="pln"> </span><span class="lit">2</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	الشيفرة السابقة ستؤدي إلى إظهار نفس نتيجة المثال الأول، لكن بدون الحاجة إلى تغيير شيفرة HTML.<br>
	تُعتَبَر قيمة الخاصية <code>z-index</code> للعنصر <code>body</code> هي <code>0</code>، وأيّة قيمة موجبة للخاصية <code>z-index</code> لأي عنصر آخر ستجعله يظهر فوق العنصر <code>&lt;body&gt;</code>. العناصر ذات الخاصية <code>z-index</code> والمسند إليها قيمةٌ سالبةٌ ستكون أسفله. انتبه أنَّه لو كان للعنصر <code>body</code> لون خلفية (عبر خاصية <code>background-color</code>) فستختفي تلك العناصر تحته.
</p>

<h3 id="ما-هو-أعلى-رقم-يمكن-إسناده-للخاصية-z-index">
	ما هو أعلى رقم يمكن إسناده للخاصية z-index
</h3>

<p>
	<a href="http://softwareas.com/whats-the-maximum-z-index" rel="external nofollow">القيمة العظمى للخاصية z-index هي 2147483647</a> في المتصفحات الحديثة. من المستحيل أن يكون لديك أكثر من مليارَي عنصر مكدس فوق بعضه في الصفحة، لذا لا تحاول استخدام هذا الرقم عند كتابة شيفرات CSS.<br>
	ترجمة –وبتصرّف– لكل من:<br>
	<a href="http://thenewcode.com/237/CSS-Positioning-fixed" rel="external nofollow">CSS Positioning: fixed</a><br>
	<a href="http://thenewcode.com/1052/position-sticky-scroll-to-top-then-fixed-in-pure-CSS" rel="external nofollow">position sticky: scroll-to-top-then-fixed in pure CSS</a><br>
	<a href="http://thenewcode.com/136/Stacking-order-and-z-index" rel="external nofollow">Stacking order and z-index</a>
</p>

<p>
	لصاحبها Dudley Storey
</p>
]]></description><guid isPermaLink="false">408</guid><pubDate>Sun, 22 Jan 2017 11:06:00 +0000</pubDate></item><item><title>&#x62A;&#x62D;&#x62F;&#x64A;&#x62F; &#x645;&#x648;&#x627;&#x642;&#x639; &#x627;&#x644;&#x639;&#x646;&#x627;&#x635;&#x631; &#x641;&#x64A; CSS &#x628;&#x627;&#x633;&#x62A;&#x62E;&#x62F;&#x627;&#x645; static &#x648; relative &#x648; absolute</title><link>https://academy.hsoub.com/programming/css/%D8%AA%D8%AD%D8%AF%D9%8A%D8%AF-%D9%85%D9%88%D8%A7%D9%82%D8%B9-%D8%A7%D9%84%D8%B9%D9%86%D8%A7%D8%B5%D8%B1-%D9%81%D9%8A-css-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-static-%D9%88-relative-%D9%88-absolute-r406/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2020_06/5eeaf11b51096_----CSS--static--relative--absolute.jpg.7f31de8fc31d1db363af29c5b753e55f.jpg" /></p>

<p id="تحديد-مواقع-العناصر-في-css-باستخدام-static-و-relative-و-absolute">
	يهرع الكثير من المبتدئين إلى طرائق تحديد مواقع العناصر في CSS معتقدين أنها ستحل لهم جميع المشاكل التي يواجهونها في تخطيط الصفحة، لكن هذا ليس صحيحًا بالمطلق: هنالك جوانب أخرى في CSS مسؤولةٌ عن تخطيط الصفحة. وصحيحٌ أنَّ طرائق تحديد المواقع العناصر لها دورٌ لتلعبه في تخطيط الصفحة، لكن من الأحسن أن تعرف كيف ومتى عليك استخدام مختلف أنماط تحديد المواقع، عوضًا عن محاولة تجريبها لربما «حلّت» لك مشكلتك!
</p>

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

<p style="text-align: center;">
	<img alt="1-static-layout-example.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="20751" data-unique="roo5kee8n" src="https://academy.hsoub.com/uploads/monthly_2017_01/1-static-layout-example.jpg.62d4d48694ec2d13aa2f72e5cfd559c8.jpg" style=""></p>

<p>
	<br>
	افتراضيًا، يملك كل عنصر في صفحتك القاعدة <code>position: static</code> مطبقةً عليه، ولهذا السبب لن نحتاج إلى التصريح عن هذه الطريقة، إلا إذا كان ذلك ضروريًا لإلغاء تأثير خاصية <code>position</code> أخرى قد ورثها العنصر من غيره.<br>
	الكلمة <code>static</code> لا تعني أنَّ العنصر سيبقى في مكانه في الصفحة، وفي الواقع أرى أنَّ هذه الكلمة غير دقيقة وكان يجب استخدام كلمة أخرى (مثل <code>fluid</code>) بدلًا عنها. طريقة تحديد مواقع العناصر الافتراضية تعني أنَّ العناصر لن تتداخل وتظهر فوق بعضها، أي أنَّ كل عنصر «سيدفع» العناصر الأخرى بعيدًا عنه، مستجيبًا إلى قياس ودقة والنسبة بين طول وعرض الجهاز الذي يعرض صفحة الويب.<br>
	لنأخذ مثالًا بسيطًا لمحتوى صفحة:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_4771_7">
<span class="tag">&lt;p&gt;&lt;img</span><span class="pln"> </span><span class="atn">src</span><span class="pun">=</span><span class="atv">"assets/images/pericles.jpg"</span><span class="pln"> </span><span class="atn">style</span><span class="pun">=</span><span class="atv">"</span><span class="kwd">float</span><span class="pun">:</span><span class="pln"> left</span><span class="pun">;</span><span class="atv">"</span><span class="pln"> 
</span><span class="atn">alt</span><span class="pun">=</span><span class="atv">"Bust of Pericles"</span><span class="tag">&gt;</span><span class="pln">
Pericles was a prominent statesman, orator, and naval general of Athens 
during the city-states's </span><span class="tag">&lt;q&gt;</span><span class="pln">Golden Age</span><span class="tag">&lt;/q&gt;</span><span class="pln">, from 448BCE until his death 
in 429.  Pericles was a promoter of the arts (particularly plays), 
architecture (it was under his patronage that the Parthenon was built), 
and the principles of democracy, but he was also an instigator of war:
Pericles is widely held to be responsible for maneuvering Athens 
into the disastrous Peloponnesian  War with Sparta.</span><span class="tag">&lt;/p&gt;</span></pre>

<p>
	حجز كل عنصرٍ –في المثال السابق– مساحةً خاصةً به، فلن تظهر الصورة فوق النص، وسيبتعد النص قليلًا عن الصورة. تغيير قياس نافذة المتصفح سيُسبِّب بتضييق عرض الصفحة، وستلتف أسطر الفقرة حول الصورة وستدفع أي محتوى أدناها إلى الأسفل. وهذا جيد، لأنَّ الصفحة ستتأقلم مع أيّ قياس للشاشة وأي نسبة عرض إلى ارتفاع وأي دقة، ولن تظهر أيّة عناصر فوق بعضها.<br>
	لاحظ أنَّ قاعدة «لا شيء سيتداخل، وكل شيء سينساب حول بقية العناصر» هي المبدأ الرئيسي لطريقة <code>position: static</code> إلا أنَّ هنالك بعض الاستثناءات. فمثلًا سيظهر النص فوق صورة الخلفية، ويمكن أن نلغي انسيابية العناصر بتحديد عرض ثابت على عناصر <code>div</code> الحاوية لبقية العناصر، ويمكن أن تتداخل العناصر أو تُزاح من الصفحة إذا طبقنا هامشًا (margin) سلبيًا عليها. لكن في الحالة العامة ستُطبَّق قاعدة static كما هي.<br>
	العناصر المُطبَّق عليها القاعدة <code>position: static</code> –سواءً بتصريحنا بذلك، أو افتراضيًا– لا يمكن أن تملك الخاصيات التي سنتحدث عنها في الأقسام التالية (وهي <code>top</code> و <code>left</code> و <code>bottom</code> و <code>right</code>). العناصر التي لها القيمة <code>static</code> للخاصية <code>position</code> يمكن أن تُحرَّك فقط بتعديل قيم الخاصيتَين <code>margin</code> أو <code>padding</code>، أو عبر تعديل موقعها في شيفرة HTML. وهذا أمرٌ مقبولٌ بين المطورين وبسيطٌ وسهل التطبيق في أغلبية التصاميم.
</p>

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

<p style="text-align: center;">
	<img alt="2-relative-layout-example.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="20752" data-unique="r3cdb2ulw" src="https://academy.hsoub.com/uploads/monthly_2017_01/2-relative-layout-example.jpg.3df61861a729d742651730e95be62e07.jpg" style=""></p>

<p>
	<br>
	من المهم ملاحظة أنَّ تطبيق القاعدة <code>position: relative</code> على أحد العناصر لن يُغيّر شيئًا بمفردها، فسيبقى العنصر يسلك سلوك العناصر ذات القيمة <code>static</code> لخاصية <code>position</code> (كما في القسم السابق). لكن القيمة <code>relative</code> قد أعطتنا وصولًا إلى الخاصيات <code>top</code> و <code>left</code> و <code>bottom</code> و <code>right</code>. فعند تطبيق القاعدة <code>position: relative</code> بالإضافة إلى إحدى الخاصيات السابقة، فسيحدث أمران:
</p>

<ol>
<li>
		سيَخرُجُ العنصر من مكانه في المستند، لكن ستبقى المساحة الفارغة المحجوزة له باقيةً (كما لو كان <code>static</code>).
	</li>
	<li>
		سيُزاح العنصر بمقدارٍ مساوٍ للقيم المنسدة إلى الخاصيات <code>top</code> و <code>left</code> و <code>bottom</code> و <code>right</code>، نسبةً إلى موقعه الأصلي (<code>static</code>).
	</li>
</ol>
<p>
	ما يزال بالإمكان تطبيق الخاصية <code>float</code> على العناصر ذات القاعدة <code>position: relative</code>.<br>
	سنُعدِّل في المثال السابق ليصبح كما يلي:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_4771_9">
<span class="tag">&lt;p&gt;&lt;img</span><span class="pln"> </span><span class="atn">src</span><span class="pun">=</span><span class="atv">"assets/images/pericles.jpg"</span><span class="pln"> 
</span><span class="atn">style</span><span class="pun">=</span><span class="atv">"</span><span class="pln">position</span><span class="pun">:</span><span class="pln"> relative</span><span class="pun">;</span><span class="pln"> top</span><span class="pun">:</span><span class="pln"> </span><span class="lit">2em</span><span class="pun">;</span><span class="pln"> right</span><span class="pun">:</span><span class="pln"> </span><span class="lit">4em</span><span class="pun">;</span><span class="atv">"</span><span class="pln"> 
</span><span class="atn">alt</span><span class="pun">=</span><span class="atv">"Bust of Pericles"</span><span class="tag">&gt;</span><span class="pln">
Pericles was a prominent statesman, orator, and naval general of Athens 
during the city-states's </span><span class="tag">&lt;q&gt;</span><span class="pln">Golden Age</span><span class="tag">&lt;/q&gt;</span><span class="pln">, from 448BCE until his death 
in 429.  Pericles was a promoter of the arts (particularly plays), 
architecture (it was under his patronage that the Parthenon was built), 
and the principles of democracy, but he was also an instigator of war:
Pericles is widely held to be responsible for maneuvering Athens 
into the disastrous Peloponnesian  War with Sparta.</span><span class="tag">&lt;/p&gt;</span></pre>

<p>
	كما لاحظت، ستُزاح الصورة بمقدار <code>2em</code> إلى الأسفل انطلاقًا من أعلى موقعها الأصلي، و <code>4em</code> من اليمين. لاحظ كيف بقيت المساحة محجوزةً للعنصر الأصلي، وكيف يتلف النص حولها، وأنَّ الصورة ستتداخل مع بعض الأسطر النصية.<br>
	ربما أسهل طريقة لكي تفهم فيها <code>position: relative</code> هي أنَّ تتخيل أنَّها تستخدم «لإزاحة» العناصر لكنك لا ترغب بالتأثير على تخطيط بقية الصفحة. وذلك لأنَّ المساحة المعطاة إلى العنصر الأصلي ما تزال موجودةً. إذ يمكنك بكل سهولة إعطاء قيم إلى خاصيات <code>top</code> و <code>left</code> و <code>bottom</code> و <code>right</code> (يمكن أيضًا استخدام القيم السلبية) دون أن تقلق من تأثير ذلك على بقية عناصر الصفحة.
</p>

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

<p style="text-align: center;">
	<img alt="3-absolute-layout-example.png" class="ipsImage ipsImage_thumbnailed" data-fileid="20753" data-unique="tjkqnwwr1" src="https://academy.hsoub.com/uploads/monthly_2017_01/3-absolute-layout-example.png.26dbf7ed925ede94bdbeb7306b8d4c12.png" style=""></p>

<p>
	<br>
	المطورون الذين يملكون المعلومات الكافية في CSS لكي يقعوا في مشاكل، مع المصممين المهووسين بأن تكون تصاميمهم دقيقة جدًا، سيجنحون إلى استخدام <code>position: absolute</code> استخدامًا مفرطًا؛ ويجادلون قائلين «بإمكاننا وضع أي شيء في صفحة الويب في المكان الذي نريده». لكنهم للأسف يغفلون عدِّة نقط مهمة، وسيقعون حتمًا في حالتين اللتين ستؤديان إلى حدوث «متاهة» مقعدة في الصفحة.<br>
	لكن دعنا أولًا نرى ماذا تفعل قاعدة <code>position: absolute</code> بصفحتنا. ستصبح الشيفرة كما يلي:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_4771_11">
<span class="tag">&lt;p&gt;&lt;img</span><span class="pln"> </span><span class="atn">src</span><span class="pun">=</span><span class="atv">"assets/images/pericles.jpg"</span><span class="pln"> 
</span><span class="atn">style</span><span class="pun">=</span><span class="atv">"</span><span class="pln">absolute</span><span class="pun">;</span><span class="pln"> top</span><span class="pun">:</span><span class="pln"> </span><span class="lit">0</span><span class="pun">;</span><span class="pln"> left</span><span class="pun">:</span><span class="pln"> </span><span class="lit">30px</span><span class="pun">;</span><span class="atv">"</span><span class="pln"> </span><span class="atn">alt</span><span class="pun">=</span><span class="atv">"Bust of Pericles"</span><span class="tag">&gt;</span><span class="pln">
Pericles was a prominent statesman, orator, and naval general of Athens 
during the city-states's </span><span class="tag">&lt;q&gt;</span><span class="pln">Golden Age</span><span class="tag">&lt;/q&gt;</span><span class="pln">, from 448BCE until his death 
in 429.  Pericles was a promoter of the arts (particularly plays), 
architecture (it was under his patronage that the Parthenon was built), 
and the principles of democracy, but he was also an instigator of war:
Pericles is widely held to be responsible for maneuvering Athens 
into the disastrous Peloponnesian  War with Sparta.</span><span class="tag">&lt;/p&gt;</span></pre>

<p>
	عند تطبيق قاعدة <code>position: absolute</code>، فستفقد الخاصتان <code>float</code> و <code>margin</code> تأثيرهما، لذا أزلتُهما. تؤدي القيمة <code>absolute</code> إلى نزع الصورة من مكانها في المستند تمامًا، أي ستؤخذ وتُرفَع إلى أعلى المستند الذي سيظهر تحتها. باختصار: ستسلك صفحة الويب سلوكًا مشابهًا لسلوكها كما لو أنَّ الصورة غير موجودة من الأساس.<br>
	لماذا إذًا يستعمل الكثيرون <code>position: absolute</code>؟ لأنَّنا نستطيع تحديد موضع العنصر –عند استخدام <code>absolute</code>– انطلاقًا من الزاوية العليا اليسرى للعنصر الحاوي لها، وهو العنصر <code>body</code> في حالتنا.<br>
	قد تبدو لك <code>position: absolute</code> جذابةً، حيث يبدو أنَّها تعدك بوضع العناصر في مكانها بدقة شديدة. وهذا مغرٍ جدًا للمصممين التقليديين الذين يصممون تصاميم لسطح المكتب أو للطباعة، والمعتادين على التحكم بمكان كل شيء في صفحات A4، والذي لا يرون داعٍ للتصميمات المتجاوبة. لكنهم يرفضون أن يلاحظوا بضع نقاط:
</p>

<ol>
<li>
		صفحات الويب ليست كالورق ذي القياس المعياري. فالشاشات والمتصفحات والأجهزة تملك أحجام ونسب ودقة مختلفة. واستخدام <code>absolute</code> لوضع العناصر في الصفحة يعني افتراض مجموعة من المتغيرات عن جهاز المستخدم، مما يؤثِّر سلبًا في مرونة الويب.
	</li>
	<li>
		بعد أن تُطبِّق <code>position: absolute</code> على أحد العناصر، فستجد نفسك تُطبِّق نفس القاعدة على كل العناصر الأخرى. وذلك لأنَّ <code>position: absolute</code> سينتزع العنصر من المستند، ويجب علينا تعديل موضع بقية العناصر للتأقلم مع ذلك ولضمان عدم تداخل العناصر التي لا تريدها أن تتداخل. وهذا سيؤدي إلى إنشاء قواعد CSS معقدة والتي لن تعمل كما يجب عند إضافة محتوى جديد إلى الصفحة (أكرِّر أنَّ الويب ليس صفحةً مطبوعةً، حيث تُعدَّل المحتويات وتُضاف إضافات بين الحين والآخر، ويجب أن يكون تصميمك مرنًا كفايةً للاستجابة إلى تلك التعديلات). واستخدام <code>position: absolute</code> يجعل التعديلات على الصفحة تأخذ وقتًا طويلًا وجهدًا كبيرًا.
	</li>
</ol>
<p>
	لماذا نستخدم إذًا <code>position: absolute</code> من الأساس؟ حسنًا، إذا استخدمنا <code>absolute</code> استخدامًا حكيمًا، فيمكن أن نستفيد منها لتداخل العناصر المنفصلة التي كانت لتُدمَج في صورةٍ وحيدةٍ.<br>
	على سبيل المثال، لنقل أنَّك تريد الإضافة على المقالة السابقة ووضع صور أخرى من العصر الذهبي لأثينا. أي لديك عدِّة صور (إسخيلوس وأفلاطون وألكيبيادس)، وتريد أن تضعها على الجانب الأيمن لمستندك، وتريدها أن تتداخل مع بعضها.<br>
	أحد الحلول هي تعديل الصور باستخدام فوتوشوب، بدمجها مع بعضها في صورةٍ وحيدة، لكن هذا سيمنعك من تعديل ترتيبها ومحاذاتها والتباعد بينها لاحقًا، وعليك حينها العودة إلى ملف فوتوشوب لإجراء تعديلاتك ثم إعادة التصدير ورفع الصورة من جديد. لكن بدلًا من كل ما سبق، لنحاول الإبقاء على الصور معزولةً ونضعها داخل عنصر <code>&lt;div&gt;</code>. شيفرة HTML هي:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_4771_13">
<span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"greek-figures"</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">"aeschylus-bust.jpg"</span><span class="pln"> </span><span class="atn">alt</span><span class="pun">=</span><span class="atv">"Marble bust of Aeschylus"</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"aeschylus"</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">"plato-bust.jpg"</span><span class="pln"> </span><span class="atn">alt</span><span class="pun">=</span><span class="atv">"Marble bust of Plato"</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"plato"</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">"alcibiades-bust.jpg"</span><span class="pln"> </span><span class="atn">alt</span><span class="pun">=</span><span class="atv">"Marble bust of Alcibiades"</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"alcibiades"</span><span class="tag">&gt;</span><span class="pln">
</span><span class="tag">&lt;/div&gt;</span></pre>

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

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_4771_15">
<span class="pln">div</span><span class="com">#greek-figures {</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">
div</span><span class="com">#greek-figures img {</span><span class="pln">
    height</span><span class="pun">:</span><span class="pln"> </span><span class="lit">150px</span><span class="pun">;</span><span class="pln">
    width</span><span class="pun">:</span><span class="pln"> </span><span class="lit">150px</span><span class="pun">;</span><span class="pln">
    position</span><span class="pun">:</span><span class="pln"> absolute</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	إذا حاولتَ عرض الصفحة الآن، فستجد أنَّ عنصر <code>&lt;div&gt;</code> قد تضائل، وظهرت صورةٌ وحيدةٌ فقط وهي خارجة عن مكانها. هل لديك أيِّة فكرة عن السبب؟<br>
	…[تريّث قليلًا وفكِّر بالسبب قبل إكمال القراءة]…<br>
	الجواب: لقد طُبِّقَت القاعدة <code>position: absolute</code> على الصورة، لذا تم انتزاعها من مكانها في الصفحة، ولم تعد تستطيع «دفع» العناصر التي حولها. أما عنصر div بعد وضع الخاصية <code>float</code> له فسيحاول تحديد عرضه عبر محتوياته التي بداخله؛ لكن المحتوى (أي الصور) لها القيمة <code>absolute</code>، فلن تُحتَسَب، والصور هي المحتوى الوحيد الموجود في العنصر <code>&lt;div&gt;</code>، أي أنَّ العنصر <code>&lt;div&gt;</code> ليس له عرض! في النهاية، ستحاول كل صورة أن تضع نفسها داخل عنصر <code>&lt;div&gt;</code> في الزاوية العليا اليسرى، وهذا يعني أنَّ الصور ستتكدس فوق بعضها. لاحظ أنَّ آخر صورة داخل العنصر <code>div</code> ستكون في الأعلى (وسنتحدث عن هذا الأمر في درسٍ لاحق). لنحاول الآن حلّ المشاكل السابقة بتعديل CSS:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_4771_17">
<span class="pln">body p </span><span class="pun">{</span><span class="pln">
    text</span><span class="pun">-</span><span class="pln">align</span><span class="pun">:</span><span class="pln"> justify</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
div</span><span class="com">#greek-figures {</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">
    width</span><span class="pun">:</span><span class="pln"> </span><span class="lit">250px</span><span class="pun">;</span><span class="pln">
    height</span><span class="pun">:</span><span class="pln"> </span><span class="lit">450px</span><span class="pun">;</span><span class="pln">
    margin</span><span class="pun">-</span><span class="pln">left</span><span class="pun">:</span><span class="pln"> </span><span class="lit">2em</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
div</span><span class="com">#greek-figures img { </span><span class="pln">
    height</span><span class="pun">:</span><span class="pln"> </span><span class="lit">150px</span><span class="pun">;</span><span class="pln">
    width</span><span class="pun">:</span><span class="pln"> </span><span class="lit">150px</span><span class="pun">;</span><span class="pln">
    position</span><span class="pun">:</span><span class="pln"> absolute</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
img</span><span class="com">#plato {</span><span class="pln">
    top</span><span class="pun">:</span><span class="pln"> </span><span class="lit">155px</span><span class="pun">;</span><span class="pln">
    right</span><span class="pun">:</span><span class="pln"> </span><span class="lit">15px</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
img</span><span class="com">#alcibiades { </span><span class="pln">
    top</span><span class="pun">:</span><span class="pln"> </span><span class="lit">290px</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	(وفرنا خاصية <code>height</code> لعنصر <code>div</code> لأنَّ الصور التي موضعها <code>absolute</code> لن تساهم في توفير ارتفاع للعنصر؛ وبدون ارتفاع فلن تجد الأسطر النصية شيئًا لتلتف حوله. أضفنا بقية الخاصيات مثل <code>text-align</code> والهوامش لإظهار الصفحة بشكل جميل).<br>
	سيعمل ما سبق كما ينبغي، لكنك ستتكشف شيئًا غريبًا. إذا عدَّلتَ الخاصية <code>right</code> لصورة أفلاطون إلى <code>left</code>، فلن تحصل على ما كنتَ تتوقعه.<br>
	فبدلًا من قياس الموضع من الحاوية، فستُنسَب الصورة نفسها إلى أكبر حاوية وهي العنصر <code>&lt;body&gt;</code>. يمكننا الالتفاف على هذه المشكلة بإضافة قاعدة في أنماط CSS:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_4771_19">
<span class="pln">div</span><span class="com">#greek-figures {</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">
    width</span><span class="pun">:</span><span class="pln"> </span><span class="lit">250px</span><span class="pun">;</span><span class="pln">
    height</span><span class="pun">:</span><span class="pln"> </span><span class="lit">450px</span><span class="pun">;</span><span class="pln">
    margin</span><span class="pun">-</span><span class="pln">left</span><span class="pun">:</span><span class="pln"> </span><span class="lit">2em</span><span class="pun">;</span><span class="pln">
    position</span><span class="pun">:</span><span class="pln"> relative</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	وستكون النتيجة النهائية هي:
</p>

<p style="text-align: center;">
	<img alt="4-absolute-layout-example2.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="20754" data-unique="6q0b3yqnc" src="https://academy.hsoub.com/uploads/monthly_2017_01/4-absolute-layout-example2.jpg.69839f2360541440ccc92046e006ce21.jpg" style=""></p>

<p>
	<br>
	إذا كان العنصر الذي له القيمة <code>absolute</code> للخاصية <code>position</code> موجودًا ضمن عنصرٍ آخر تُطبَّق عليه القاعدة <code>position: relative</code>، فستُقاس إحداثيات العنصر انطلاقًا من الزاوية العليا اليسرى للحاوية التي يقع فيها؛ وإلا فستُقاس الإحداثيات انطلاقًا من الزاوية العليا اليسرى من العنصر <code>body</code>.<br>
	عمومًا، إذا كنتَ تُصرّ على استخدام <code>position: absolute</code> فأنصحك بوضع عدِّة عناصر (التي لها القاعدة <code>position: absolute</code>) في «حاوية» (إما عنصر <code>&lt;div&gt;</code> عادي أو حتى <code>&lt;canvas&gt;</code>). مما يسمح لك بنقلها مع العناصر الموجودة داخلها دون مشاكل.<br>
	ترجمة -وبتصرّف- للمقالات
</p>

<ul>
<li>
		<a href="http://thenewcode.com/133/CSS-Positioning-static-the-default" rel="external nofollow">CSS Positioning: static, the default</a>
	</li>
	<li>
		<a href="http://thenewcode.com/134/CSS-Positioning-relative-the-underappreciated" rel="external nofollow">CSS Positioning: relative, the underappreciated</a>
	</li>
	<li>
		<a href="http://thenewcode.com/135/CSS-Positioning-absolute-the-overused" rel="external nofollow">CSS Positioning: absolute, the overused</a>
	</li>
</ul>
<p>
	لصاحبها Dudley Storey
</p>
]]></description><guid isPermaLink="false">406</guid><pubDate>Sun, 15 Jan 2017 13:04:00 +0000</pubDate></item><item><title>&#x62A;&#x642;&#x646;&#x64A;&#x627;&#x62A; &#x643;&#x62A;&#x627;&#x628;&#x629; &#x634;&#x64A;&#x641;&#x631;&#x627;&#x62A; CSS &#x627;&#x62D;&#x62A;&#x631;&#x627;&#x641;&#x64A;&#x629; &#x648;&#x633;&#x647;&#x644;&#x629; &#x627;&#x644;&#x635;&#x651;&#x64A;&#x627;&#x646;&#x629;</title><link>https://academy.hsoub.com/programming/css/%D8%AA%D9%82%D9%86%D9%8A%D8%A7%D8%AA-%D9%83%D8%AA%D8%A7%D8%A8%D8%A9-%D8%B4%D9%8A%D9%81%D8%B1%D8%A7%D8%AA-css-%D8%A7%D8%AD%D8%AA%D8%B1%D8%A7%D9%81%D9%8A%D8%A9-%D9%88%D8%B3%D9%87%D9%84%D8%A9-%D8%A7%D9%84%D8%B5%D9%91%D9%8A%D8%A7%D9%86%D8%A9-r428/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2017_02/css-coding-techniques.png.1d48061f0f4599bb45c3937a6f1966d8.png" /></p>

<p id="تقنيات-كتابة-شيفرات-css-احترافية-وسهلة-الصيانة">
	رأيتُ في الآونة الأخيرة الكثير من الأشخاص يشقون طريقهم بصعوبة في CSS، انطلاقًا من المبتدئين إلى المبرمجين المحترفين؛ بعضهم لا يحب طريقة عمل CSS، ويرون أنَّ استبدال لغة أخرى بلغة CSS هو أمرٌ حسن، وكانت هذه هي نقطة انطلاق مفسرات CSS (مثل Sass و Less)؛ وبعضهم الآخر يستخدم إطارات العمل على أمل أنَّ ذلك سيجعلهم يكتبون شيفرات أقل (ورأينا في درس «<a href="https://academy.hsoub.com/programming/css/%D9%87%D9%84-%D9%81%D8%B9%D9%84%D9%8B%D8%A7-%D8%AA%D8%AD%D8%AA%D8%A7%D8%AC-%D8%A5%D9%84%D9%89-%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D8%A5%D8%B7%D8%A7%D8%B1-%D8%B9%D9%85%D9%84-css-%D9%84%D8%A8%D9%86%D8%A7%D8%A1-%D9%88%D8%A7%D8%AC%D9%87%D8%A9-%D9%85%D9%88%D9%82%D8%B9%D9%83-%D8%A3%D9%88-%D8%AA%D8%B7%D8%A8%D9%8A%D9%82%D9%83%D8%9F-r427/" rel="">ربما لا تحتاج إلى إطار عمل للغة CSS</a> » أنَّ ذلك ليس صحيحًا)؛ بينما تخلى بعض المطورين عن استخدام CSS تمامًا وبدؤوا باستعمال JavaScript بدلًا عنها.<br>
	لكنك لا تحتاج دومًا إلى استخدام مُفسِّر CSS في مشاريعك، ولستَ بحاجةٍ إلى استعمال إطار عمل كبير كنقطة بداية لمشروعك، ومن المؤكد أنَّ فكرة استعمال JavaScript لغير غرضها الأصلي هي فكرةٌ سيئة.<br>
	سنطالع في هذا الدرس بعض التلميحات والنصائح لكيفية أفضل لكتابة شيفرات CSS سهلة الصيانة، لذا ستصبح ملفات الأنماط أقصر، وفيها قواعد أقل، وستشعر أنَّ CSS أصبحت أداةً مفيدةً واستخدامها مريح بدلًا من أن تفكر في عواقب استعمالها!
</p>

<p style="text-align: center;">
	<img alt="css-coding-techniques.png" class="ipsImage ipsImage_thumbnailed" data-fileid="21848" data-unique="d6u46n0p7" src="https://academy.hsoub.com/uploads/monthly_2017_02/css-coding-techniques.png.c567e08952f297c1289efc3f27439876.png" style=""></p>

<h2 id="إنشاء-محددات-غير-مخصصة">
	إنشاء محددات غير مخصصة
</h2>

<p>
	تعتمد لغة CSS على التصريح عن «محددات» (selectors) التي تضع فيها القواعد التنسيقية التي تريد تطبيقها على العناصر الموجودة في شجرة DOM. وهنالك بعض القواعد التي لها أولوية على القواعد الأخرى، كتلك التي عُرِّفَت داخل الخاصية <code>style</code> في العنصر نفسه.<br>
	على سبيل المثال، إذا كانت لدينا شيفرة HTML و CSS الآتية:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_1094_8">
<span class="tag">&lt;button</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"button-warning"</span><span class="tag">&gt;</span></pre>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_1094_10">
<span class="pun">.</span><span class="pln">button</span><span class="pun">-</span><span class="pln">warning </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">

button</span><span class="pun">,</span><span class="pln"> input</span><span class="pun">[</span><span class="pln">type</span><span class="pun">=</span><span class="pln">submit</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"> gray</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	بغض النظر عن أنَّ القاعدة <code>‎.button-warning</code> قد عرِّفَت قبل قاعدة <code>button, input[type=submit]</code>، لكن لخاصية <code>background</code> فيها أولوية على خاصية <code>background</code> المُعرَّفة في قاعدة <code>button, input[type=submit]</code>. لكن لماذا؟ ما هو المعيار الذي تتبعه لغة CSS لتقرر ما هي القواعد التي لها أولوية على غيرها؟<br>
	الجواب هو «التحديد»، فبعض المحددات تُعتبَر أنَّها مخصصة أكثر من غيرها: فمثلًا المُحدِّد <code>‎#id</code> له أولوية على محدد <code>‎.class</code>.<br>
	ماذا يحدث لو استخدمنا مُحدِّد أكثر تخصيصًا مما يلزم؟ ماذا لو أردنا لاحقًا تجاوز تلك القواعد، سنحتاج حينها إلى مُحدِّد أكثر تخصيصًا. ماذا لو أردنا بعد ذلك أن نتجاوز تلك القيم… نعم سنحتاج إلى مُحدِّد أكثر تخصيصًا، وهكذا حتى تصبح المحددات أطول وأعقد وسينتهي بها المطاف لتمسي صعبة الصيانة والتطوير.<br>
	لذا عليك عند كتابة المُحدِّدات أن تسأل نفسك: هل هذا هو أقل مُحدِّد تخصيصًا الذي يعمل عملًا صحيحًا هنا؟<br>
	جميع قواعد التحديد مُعرَّفة بشكلٍ رسمي في مواصفة «<a href="https://www.w3.org/TR/selectors/#specificity" rel="external nofollow">W3C CSS Selectors</a>»، وستجد في تلك الصفحة جميع التفاصيل المتعلقة بمُحدِّدات CSS. إذا أردتَ مقالةً سهلة الفهم فاطلع على <a href="https://www.smashingmagazine.com/2007/07/css-specificity-things-you-should-know/" rel="external nofollow">هذه المقالة</a>.
</p>

<h2 id="لا-تعالج-المشاكل-بإضافة-قواعد-جديدة">
	لا تعالج المشاكل بإضافة قواعد جديدة
</h2>

<p>
	لنتخيل هذا الموقف الذي يتكرر كثيرًا: هنالك علّة في شيفرة CSS وعرفتَ أنَّ أحد عناصر DOM مُنسَّقٌ تنسيقًا خاطئًا، وأدركتَ أنَّ السبب هو وراثته (inherit) لخاصيةٍ لا يجب أن يرثها.<br>
	رجاءً لا تضف شيفرة CSS جديدة لحل المشكلة، فبفعلك لذلك ستصبح الشيفرات عندك كثيرة، وسيصبح تحديد العلل المستقبلية أصعب.<br>
	فبدلًا من ذلك، توقف، واستخدام أدوات المطوِّر في متصفحك لتفحص العنصر ومعرفة ما الذي يرثه من خاصيات، ومعرفة ما هي القاعدة التي تُطبَّق على العنصر والتي لا تريدها، ثم تعديل تلك القاعدة لكي لا تؤدي إلى تلك النتيجة.<br>
	يمكنك إظهار الأنماط التي يرثها أحد العناصر في متصفح Firefox بالضغط بالزر الأيمن على العنصر ثم اختيار «Inspect element».
</p>

<p style="text-align: center;">
	<img alt="1-image00.png" class="ipsImage ipsImage_thumbnailed" data-fileid="21846" data-unique="ipueb4f6j" src="https://academy.hsoub.com/uploads/monthly_2017_02/1-image00.png.5a26db84f44793903cd9ed26cdbd7029.png" style=""></p>

<p>
	انظر إلى الخاصيات الموروثة، ولاحظ كيف سترى جميع القواعد المُطبَّقة على العنصر، وبالترتيب الذي طُبِّقَت فيه. أي أنَّ القواعد الموجودة في الأعلى هي القواعد الأكثر تحديدًا ولها أولولية على القواعد التي تليها. يمكنك أن ترى وجود خط يمر ببعض الخاصيات، وهذا يعني أنَّ هنالك قاعدة أكثر تخصيصًا أدت إلى تجاوز هذه القاعدة.<br>
	يمكنك –إضافةً إلى رؤية القواعد المُطبَّقة على العنصر– أن تُفعِّل أو تلغي تفعيل بعض الخاصيات أو أن تجري تعديلات حية على قيمها ثم تلاحظ النتائج، وهذا مفيدٌ جدًا عند محاولة إصلاح العلل.<br>
	قد يتضمن الحل اللازم تطبيقه لإصلاح العلة تعديلًا في إحدى القواعد، أو تغييرًا لقاعدةٍ ما في مكانٍ آخر في صفحة الأنماط؛ وقد يتطلب إصلاح العلة إضافةَ قاعدةٍ جديدةٍ… لكن المهم أن تعلم ما هو الإجراء الصحيح الذي عليك اتخاذه لإصلاح المشكلة.<br>
	أقترح عليك أيضًا أن تنظر في إعادة هيكلة الشيفرات (code refactoring)، فصحيحٌ أنَّ CSS ليست لغةً برمجيةً، إلا أنَّها «شيفرات» وعليك أن تأخذ بعين الاعتبار نفس الأمور التي تفعلها مع شيفرات JavaScript أو بايثون: يجب أن تكون الشيفرات مرتبةً وسهلة القراءة ويمكن إعادة هيكلتها عند الحاجة.
</p>

<h2 id="لا-تستخدم-important">
	لا تستخدم ‎‎!important
</h2>

<p>
	هذه النصيحة مضمّنة في القسم السابق، إلا أنني فضَّلتُ ذكرها بمفردها لأهميتها: لا تستخدم <code>‎!important</code> في شيفرة CSS!<br>
	الكلمة المحجوزة <code>‎!important</code> هي ميزة في CSS تسمح لك بتجاوز الترتيب الافتراضي للأولويات، وهي تستعمل عادةً إن استعجلت إصلاح علّة لكنك لا تملك وقتًا أو ليست عندك رغبة في إصلاحها بمعرفة مسببها الأصلي… من الشائع أيضًا استعمال الكلمة المحجوزة <code>‎!important</code> عندما تَستخدم إطار عمل CSS ذو قواعد مخصصة جدًا، ومن الصعب تجاوز تلك القيم.<br>
	عندما تُضيف <code>‎!important</code> إلى خاصيةٍ ما، فسيتجاهل المتصفح جميع القواعد التي لها أولوية عليها (أي أنَّ القاعدة «أكثر تخصيصًا»)، وستجد نفسك في ورطة عندما تستعمل <code>‎!important</code> لتجاوز قاعدة أخرى قد اُستخدمَت فيها <code>‎!important</code> أيضًا.<br>
	الاستعمال المشروع الوحيد للكلمة <code>‎!important</code> هو عند استخدامك لأدوات التطوير لمحاولة حل مشكلة ما، فعليك في بعض الأحيان أن تعرف ما هي القيم اللازم ضبطها لإصلاح العلة، واستخدام <code>‎!important</code> في أدوات التطوير وتعديل قواعد CSS تعديلًا حيًا سيسمح لك بمعرفة تلك القيم مع تجاهل القيم الموروثة.<br>
	بعد أن تعرف ما هي القيم الصحيحة، فعد إلى الشيفرة وانظر ما هي القواعد التي تتضمن تلك الخاصيات، وعدِّلها كما ينبغي.
</p>

<h2 id="لا-تجعل-px-و-هي-كل-ما-تستخدمه-من-الواحدات">
	لا تجعل <code>px</code> و <code>%</code> هي كل ما تستخدمه من الواحدات
</h2>

<p>
	التعامل مع <code>px</code> (البسكلات) و <code>%</code> (النسب المئوية) أصبح بدهيًا، لذا سنشرح بعض الواحدات الأقل شهرةً.
</p>

<h3 id="em-و-rem">
	<code>em</code> و <code>rem</code>
</h3>

<p>
	من أشهر الواحدات النسبية هي <code>em</code>، حيث يكافئ <code>1em</code> قياس الخط التابع لذلك العنصر.<br>
	لتكن لدينا شيفرة HTML الآتية:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_1094_12">
<span class="tag">&lt;article&gt;</span><span class="pln">
  </span><span class="tag">&lt;h1&gt;</span><span class="pln">Title</span><span class="tag">&lt;/h1&gt;</span><span class="pln">
  </span><span class="tag">&lt;p&gt;</span><span class="pln">One Ring to bring them all and in the darkness bind the.</span><span class="tag">&lt;/p&gt;</span><span class="pln">
</span><span class="tag">&lt;/article&gt;</span></pre>

<p>
	وسنستخدم قاعدة CSS وحيدة:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_1094_14">
<span class="pln">article </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">1.25em</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	تُطبِّق أغلبية المتصفحات قياسًا بمقدار 16 بكسل إلى العنصر الجذر (root element) افتراضيًا (بالمناسبة، يمكن تعديل هذه القيمة من المستخدم، وهذه ميزةٌ رائعةٌ تُسهِّل من قابلية الوصول). أي ستُعرَض نصوص العنصر <code>article</code> بخاصية <code>font-size</code> ذات القيمة 20 بكسل (أي <code>16 * 1.25</code>).<br>
	لكن ماذا عن العنصر <code>h1</code>؟ لفهم ما الذي يحدث تمامًا فسنضيف قاعدة CSS أخرى إلى صفحة الأنماط:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_1094_16">
<span class="pln">h1 </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">1.25em</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	صحيحٌ أنَّ قيمة الخاصية <code>font-size</code> هي <code>1.25em</code> أيضًا، أي نفس قياس العنصر <code>article</code>، لكن علينا أن نأخذ بعين الاعتبار أنَّ الخاصية <code>em</code> هي خاصية تجميعية، أي لو كان العنصر <code>h1</code> ابنًا (child) مباشرًا للعنصر <code>body</code> على سبيل المثال، فستكون قيمة الخاصية <code>font-size</code> هي 20 بكسل (أي <code>16 * 1.25</code>)؛ لكن عنصر <code>h1</code> في مثالنا موجودٌ داخل عنصرٍ (العنصر <code>article</code> هنا) له قيمةٌ للخاصية <code>font-size</code> تختلف عن العنصر الجذر، ففي هذه الحالة قياس الخط هو 1.25 مضروبًا بقيمة الخاصية <code>font-size</code> التي يرثها العنصر <code>h1</code>، أي سيكون قياس الخط النهائي للعنصر <code>h1</code> الموجود داخل العنصر <code>article</code> هو 25 بكسل (أي <code>16 * 1.25 * 1.25</code>).
</p>

<p style="text-align: center;">
	<img alt="2-image01.png" class="ipsImage ipsImage_thumbnailed" data-fileid="21847" data-unique="njtlu8j83" src="https://academy.hsoub.com/uploads/monthly_2017_02/2-image01.png.6cb870881edcbbeea85f517090fa480f.png" style=""></p>

<p>
	الواحدة <code>em</code> متعددة الاستخدامات وتجعل من السهل تغيير جميع القياسات في الصفحة (حتى لو غيرناها ديناميكيًا)، ولا تُستعمَل فقط على قيمة الخاصية <code>font-size</code> وإنما يمكن توظيفها في الخاصيات الأخرى مثل <code>line-height</code> أو <code>width</code>.
</p>

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

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_1094_18">
<span class="pln">article </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">1.25em</span><span class="pun">;</span><span class="pln"> </span><span class="pun">}</span><span class="pln">
h1 </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">1.25rem</span><span class="pun">;</span><span class="pln"> </span><span class="pun">}</span></pre>

<p>
	ستملك جميع عناصر <code>h1</code> الخاصية <code>font-size</code> بقيمة 20 بكسل (بافتراض أنَّ قياس العنصر الجذر هو <code>16px</code>)، بعض النظر إن كان العنصر <code>h1</code> داخل عنصر <code>article</code> أم لا.
</p>

<h3 id="vw-و-vh">
	<code>vw</code> و <code>vh</code>
</h3>

<p>
	واحدات <code>vm</code> و <code>vh</code> تُمثِّل نسبة من أبعاد «إطار العرض» (viewport)، حيث <code>1vw</code> هي 1% من عرض «إطار العرض»، بينما <code>1vh</code> هي 1% من ارتفاع «إطار العرض».<br>
	هذه الواحدات مفيدة للغاية، وخصوصًا عندما تريد إنشاء عنصر يأخذ كامل الشاشة (مثل الخلفيات الغامقة للأقسام).
</p>

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

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

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

<p>
	تحدثنا عن هذا من قبل في درسٍ سابقٍ عن إطارات عمل CSS «<a href="https://academy.hsoub.com/programming/css/%D9%87%D9%84-%D9%81%D8%B9%D9%84%D9%8B%D8%A7-%D8%AA%D8%AD%D8%AA%D8%A7%D8%AC-%D8%A5%D9%84%D9%89-%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D8%A5%D8%B7%D8%A7%D8%B1-%D8%B9%D9%85%D9%84-css-%D9%84%D8%A8%D9%86%D8%A7%D8%A1-%D9%88%D8%A7%D8%AC%D9%87%D8%A9-%D9%85%D9%88%D9%82%D8%B9%D9%83-%D8%A3%D9%88-%D8%AA%D8%B7%D8%A8%D9%8A%D9%82%D9%83%D8%9F-r427/" rel="">ربما لا تحتاج إلى إطار عمل للغة أضفCSS</a>» ، لكن لا ضير من التذكير أنَّ flexbox سيُبسِّط عملية إنشاء تخطيطات الصفحات أو لمحاذاة العناصر. إذا كان flexbox جديدًا عليك فانظر إلى <a href="https://academy.hsoub.com/programming/css/%D8%AA%D8%B9%D8%B1%D9%81-%D8%B9%D9%84%D9%89-css-flexbox-%D9%88%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A7%D8%AA-%D8%A7%D8%B3%D8%AA%D8%B9%D9%85%D8%A7%D9%84%D9%87-%D9%84%D9%87%D9%8A%D9%83%D9%84%D8%A9-%D8%B5%D9%81%D8%AD%D8%A7%D8%AA-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-r118/" rel="">هذا الدرس التمهيدي</a>.<br>
	أجيب بنعم على السؤال البدهي الذي سيخطر ببالك: «هل يمكن استخدام flexbox في الوقت الراهن؟». <a href="http://caniuse.com/#search=flexbox" rel="external nofollow">دعم flexbox في المتصفحات تجاوز نسبة 94%</a>، لذا يمكنك استخدامه حالًا إلا إن كنتَ تريد دعم المتصفحات القديمة. لذا يمكنك التوقف عن كتابة عناصر <code>div</code> الكثيرة ذات الخاصية <code>float</code> والتي يصعب اكتشاف الأخطاء فيها وصيانتها.<br>
	راقب أيضًا التطويرات في مجال تنسيق تخطيط الصفحة وخصوصًا <code><a href="https://hacks.mozilla.org/2015/09/the-future-of-layout-with-css-grid-layouts/" rel="external nofollow">Grid</a> </code>، الذي سيُسهِّل كثيرًا من إنشاء تخطيط الصفحة.
</p>

<h2 id="عند-استخدام-مفسر-css">
	عند استخدام مُفسِّر CSS…
</h2>

<p>
	مفسِّرات CSS مثل Sass أو Less مشهورة جدًا في عالم تطوير الواجهات الأمامية لصفحات الويب، وهي أدواتٌ مفيدةٌ جدًا وتسمح لنا (عند استخدامها استخدامًا صحيحًا) أن نعمل بكفاءة كبيرة مع CSS.
</p>

<h3 id="لا-تسرف-في-تشعب-المحددات">
	لا تسرف في تشعّب المُحدِّدات
</h3>

<p>
	إحدى الميزات الشائعة في مُفسِّرات CSS هي تشعّب المحددات (selector nesting)، فمثلًا هذه شيفرة Less:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_1094_20">
<span class="pln">a </span><span class="pun">{</span><span class="pln">
  text</span><span class="pun">-</span><span class="pln">decoration</span><span class="pun">:</span><span class="pln"> none</span><span class="pun">;</span><span class="pln">
  color</span><span class="pun">:</span><span class="pln"> blue</span><span class="pun">;</span><span class="pln">

  </span><span class="pun">&amp;.</span><span class="pln">important </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="pun">}</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	ستُحوَّل إلى قواعد CSS الآتية:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_1094_22">
<span class="pln">a </span><span class="pun">{</span><span class="pln">
  text</span><span class="pun">-</span><span class="pln">decoration</span><span class="pun">:</span><span class="pln"> none</span><span class="pun">;</span><span class="pln">
  color</span><span class="pun">:</span><span class="pln"> blue</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

a</span><span class="pun">.</span><span class="pln">important </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="pun">}</span></pre>

<p>
	تسمح هذه الميزة لنا بكتابة شيفرات أقل، وتجميع القواعد التي تؤثر على العناصر التي تأتي مع بعضها (عمومًا) في شجرة DOM، وهذه الميزة تساعدك في اكتشاف العلل وإصلاحها.<br>
	لكن من الشائع أيضًا الإفراط في استخدام هذه الميزة مما يجعلك تعيد كتابة شجرة DOM بكاملها في محددات CSS، لذا إذا كانت لدينا شيفرة HTML الآتية:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_1094_24">
<span class="tag">&lt;article</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"post"</span><span class="tag">&gt;</span><span class="pln">
  </span><span class="tag">&lt;header&gt;</span><span class="pln">
    </span><span class="com">&lt;!-- … --&gt;</span><span class="pln">
    </span><span class="tag">&lt;p&gt;</span><span class="pln">Tags: </span><span class="tag">&lt;a</span><span class="pln"> </span><span class="atn">href</span><span class="pun">=</span><span class="atv">"..."</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"tag"</span><span class="tag">&gt;</span><span class="pln">irrelevant</span><span class="tag">&lt;/a&gt;&lt;/p&gt;</span><span class="pln">
  </span><span class="tag">&lt;/header&gt;</span><span class="pln">
  </span><span class="com">&lt;!-- … --&gt;</span><span class="pln">
</span><span class="tag">&lt;/article&gt;</span></pre>

<p>
	فقد تجد ما يلي في شيفرة CSS:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_1094_26">
<span class="pln">article</span><span class="pun">.</span><span class="pln">post </span><span class="pun">{</span><span class="pln">
  </span><span class="com">// ... ستُذكَر القواعد الأخرى هنا</span><span class="pln">
  header </span><span class="pun">{</span><span class="pln">
    </span><span class="com">// ...</span><span class="pln">
    p </span><span class="pun">{</span><span class="pln">
      </span><span class="com">// ...</span><span class="pln">
      a</span><span class="pun">.</span><span class="pln">tag </span><span class="pun">{</span><span class="pln">
        background</span><span class="pun">:</span><span class="pln"> </span><span class="com">#ff0;</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">
</span><span class="pun">}</span></pre>

<p>
	الجانب السلبي الرئيسي لهذا هو أنَّ مُحدِّدات CSS الناتجة هي مُحدِّدات مخصصة جدًا، وشرحنا من قبل أنَّ علينا تفادي استخدامها. هنالك سلبيات أخرى للاستخدام المفرط للتشعّب، والتي ذُكِرَت في <a href="http://belenalbeza.com/the-dangers-of-nesting-abuse-in-css-compilers/" rel="external nofollow">هذا الدرس</a>.<br>
	باختصار: لا تجعل تشعّب مُحدِّدات CSS في مفسرات CSS يولِّد قواعد لن تفكر في كتابتها يدويًا دون مُفسِّر.
</p>

<h3 id="استخدام-include-أو-استخدام-extend">
	استخدام include أو استخدام extend؟
</h3>

<p>
	ميزة أخرى مفيدة لمُفسِّرات CSS تدعى «mixins»، وهي مجموعة من قواعد CSS القابلة لإعادة الاستخدام، فمثلًا لنقل أننا نريد تنسيق الأزرار (buttons)، وأغلبية الأزرار لها نفس خاصيات CSS الأساسية؛ لذا يمكننا إنشاء mixin كما يلي في Less:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_1094_28">
<span class="pun">.</span><span class="pln">button</span><span class="pun">-</span><span class="kwd">base</span><span class="pun">()</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  padding</span><span class="pun">:</span><span class="pln"> </span><span class="lit">1em</span><span class="pun">;</span><span class="pln">
  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>

<p>
	ثم إنشاء قاعدة كالآتية:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_1094_30">
<span class="pun">.</span><span class="pln">button</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">button</span><span class="pun">-</span><span class="kwd">base</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></pre>

<p>
	والتي ستولِّد شيفرة CSS:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_1094_32">
<span class="pun">.</span><span class="pln">button</span><span class="pun">-</span><span class="pln">primary </span><span class="pun">{</span><span class="pln">
  padding</span><span class="pun">:</span><span class="pln"> </span><span class="lit">1em</span><span class="pun">;</span><span class="pln">
  border</span><span class="pun">:</span><span class="pln"> </span><span class="lit">0</span><span class="pun">;</span><span class="pln">
  background</span><span class="pun">:</span><span class="pln"> blue</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	كما ترى، من المفيد جدًا إعادة هيكلة (واستخدام) الشيفرات المكررة.<br>
	وإلى جانب «تضمين» (including) بُنية mixin، هنالك خيارٌ آخر هو «توسعة» (extending) أو «وراثة» تلك البنية (يختلف المصطلح المستعمل اعتمادًا على الأداة المستخدمة). والتي ستَدمِج عدة مُحدِّدات في نفس القاعدة.<br>
	لنشاهد مثالًا عمليًا عن توسعة بنية mixin السابقة (أي <code>‎.button-base</code>):
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_1094_34">
<span class="pun">.</span><span class="pln">button</span><span class="pun">-</span><span class="pln">primary </span><span class="pun">{</span><span class="pln">
  </span><span class="pun">&amp;:</span><span class="pln">extend</span><span class="pun">(.</span><span class="pln">button</span><span class="pun">-</span><span class="kwd">base</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="pun">.</span><span class="pln">button</span><span class="pun">-</span><span class="pln">danger </span><span class="pun">{</span><span class="pln">
  </span><span class="pun">&amp;:</span><span class="pln">extend</span><span class="pun">(.</span><span class="pln">button</span><span class="pun">-</span><span class="kwd">base</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></pre>

<p>
	والتي ستحوّل إلى شيفرة CSS الآتية:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_1094_36">
<span class="pun">.</span><span class="pln">button</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">button</span><span class="pun">-</span><span class="pln">danger </span><span class="pun">{</span><span class="pln">
  padding</span><span class="pun">:</span><span class="pln"> </span><span class="lit">1em</span><span class="pun">;</span><span class="pln">
  border</span><span class="pun">:</span><span class="pln"> </span><span class="lit">0</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

</span><span class="pun">.</span><span class="pln">button</span><span class="pun">-</span><span class="pln">primary </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="pun">.</span><span class="pln">button</span><span class="pun">-</span><span class="pln">danger </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></pre>

<p>
	بعض المقالات والدروس الموجودة على الويب تخبرنا أن نستخدم طريقة «include» فقط، والأخرى تطلب منا استخدام طريقة «extend» فقط؛ لكن الواقع هو أنَّ كلا الطريقتين ستنتجان شيفرات CSS مختلفة، وليس من الخطأ استخدام أي واحدة منهما، لكن قد يُفضَّل استخدام إحداهما على الأخرى في بعض الحالات.<br>
	كيف تختار بينهما؟ أكرِّر أنَّ قاعدة «هل ستكتب هذه الشيفرة يدويًا» تنطبق هنا.
</p>

<h2 id="الخلاصة">
	الخلاصة
</h2>

<p>
	أرجو أن يؤثر هذا الدرس عليك ويجعل طريقة كتابتك لشيفرات CSS أفضل؛ تذكَّر ما قلتُ لك سابقًا: CSS هي شيفرات، ويجب أن تعاملها بنفس طريقة معاملتك لبقية الشيفرات. فإن أعطيتها الاهتمام اللازم فسترد لك الجميل :-) .<br>
	ترجمة -وبتصرّف- للمقال <a href="https://hacks.mozilla.org/2016/05/css-coding-techniques/" rel="external nofollow">CSS coding techniques</a> لصاحبه Belén Albeza
</p>
]]></description><guid isPermaLink="false">428</guid><pubDate>Tue, 13 Dec 2016 09:43:00 +0000</pubDate></item><item><title>&#x647;&#x644; &#x641;&#x639;&#x644;&#x64B;&#x627; &#x62A;&#x62D;&#x62A;&#x627;&#x62C; &#x625;&#x644;&#x649; &#x627;&#x633;&#x62A;&#x62E;&#x62F;&#x627;&#x645; &#x625;&#x637;&#x627;&#x631; &#x639;&#x645;&#x644; CSS &#x644;&#x628;&#x646;&#x627;&#x621; &#x648;&#x627;&#x62C;&#x647;&#x629; &#x645;&#x648;&#x642;&#x639;&#x643; &#x623;&#x648; &#x62A;&#x637;&#x628;&#x64A;&#x642;&#x643;&#x61F;</title><link>https://academy.hsoub.com/programming/css/%D9%87%D9%84-%D9%81%D8%B9%D9%84%D9%8B%D8%A7-%D8%AA%D8%AD%D8%AA%D8%A7%D8%AC-%D8%A5%D9%84%D9%89-%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D8%A5%D8%B7%D8%A7%D8%B1-%D8%B9%D9%85%D9%84-css-%D9%84%D8%A8%D9%86%D8%A7%D8%A1-%D9%88%D8%A7%D8%AC%D9%87%D8%A9-%D9%85%D9%88%D9%82%D8%B9%D9%83-%D8%A3%D9%88-%D8%AA%D8%B7%D8%A8%D9%8A%D9%82%D9%83%D8%9F-r427/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2017_02/css-frameworks.png.cb698dfd0523291a7e1fa517dc7d6f88.png" /></p>
<p id="هل-فعلا-تحتاج-إلى-استخدام-إطار-عمل-css-لبناء-واجهة-موقعك-أو-تطبيقك">
	مضت فترةٌ لا بأس بها على ظهور <a href="https://academy.hsoub.com/programming/general/%D8%A5%D8%B7%D8%A7%D8%B1-%D8%B9%D9%85%D9%84-framework/" rel="">إطارات العمل</a>، وازدادت شهرتها في مجال تطوير واجهات المواقع. توفِّر تلك الإطارات مقتطفاتٍ من الشيفرات التي تستطيع نسخها ولصقها في موقعك لبناء تخطيط الصفحة وواجهة المستخدم.<br>
	ربما قرأت مقالاتٍ كثيرة عن كيفية الاستفادة من تلك الإطارات في مشاريعك، لكنني هنا لأفعل العكس: أنوهك لبعض السلبيات التي قد تجلبها إطارات العمل إلى مواقعك أو تطبيقات الويب التي تبرمجها؛ وكيف تستطيع أن تتفاداها أو تقلل من تأثيرها.
</p>

<p style="text-align: center;">
	<img alt="css-frameworks.png" class="ipsImage ipsImage_thumbnailed" data-fileid="21845" data-unique="4a4vvwesy" style="" src="https://academy.hsoub.com/uploads/monthly_2017_02/css-frameworks.png.494b5d43ef8d5f30ef8ce09077cd7068.png">
</p>

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

<ol>
	<li>
		السرعة: أغلبية الأشخاص يعتقدون أنهم سيطورون الموقع بشكلٍ أسرع. وربما يكون هذا صحيحًا في المراحل الأولى للمشروع؛ لكنه سيشكِّل حِملًا على عاتقك (سنتعرف لاحقًا لماذا).
	</li>
	<li>
		يعتقد بعض الأشخاص أنَّه من المستحسن أن يستعملوا إطار عمل، خصوصًا أولاءك الذين يبدؤون تطوير واجهات الويب لتوِّهم. ويدعم هذا الاعتقاد تضمين إطارات العمل في الورشات التدريبية أو في متطلبات الوظائف.
	</li>
	<li>
		التصميم: هنالك الكثير من المطورين الذين يرغبون بإطلاق مشاريعهم لكن لا يتوفر لديهم مصمِّم، لذا يلجؤون إلى إطارات العمل، التي توفِّر تصميمًا أساسيًا يستطيع المطورون الاعتماد عليه واستخدامه. وعلى الرغم من الفائدة العظيمة وراء ذلك، إلا أنَّ موقعك أو تطبيقك سينتهي به المطاف ليبدو كغيره من المواقع الحديثة الموجودة على الإنترنت، لكن قد ترى أنَّ ذلك لا يؤثر على مشروعك، فالأمر عائدٌ إليك في النهاية.
	</li>
</ol>

<h2 id="السلبيات">
	السلبيات
</h2>

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

<h3 id="شيفرات-html-لا-تحمل-بعدا-دلاليا-unsemantic-html-code">
	شيفرات HTML لا تحمل بُعدًا دلاليًا (Unsemantic HTML code)
</h3>

<p>
	هذه المشكلة ليس مقتصرةً على إطارات العمل، لكنني أراها متفشيةً كثيرًا في أشهرها.<br>
	على سبيل المثال، ربما تقرأ في توثيق إطار العمل الذي يتحدث عن تنسيق الأزرار، وتجد قطعةً من الشيفرات تخبرك كيف تستخدم صنفًا (class) من أصناف CSS للأزرار المُعطَّلة (disabled) بدلًا من إضافة خاصية <code>disabled</code> إلى عنصر <code>&lt;button&gt;</code> نفسه.<br>
	وهنالك أمثلةٌ كثيرةٌ تستعمل عناصر <code>&lt;div&gt;</code> أو <code>&lt;span&gt;</code> في أماكن يُفضَّل أن يُستعمَل فيها عنصرٌ هيكليٌ مثل <code>&lt;article&gt;</code> أو <code>&lt;date&gt;</code>. ودعنا لا نتحدث عن وجود عنصر <code>&lt;div&gt;</code> داخل عنصر <code>&lt;div&gt;</code> داخل عنصر <code>&lt;div&gt;</code>…
</p>

<h3 id="محددات-دقيقة-جدا">
	مُحدِّدات دقيقة جدًا
</h3>

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

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_8370_7"><span class="pun">.</span><span class="pln">table</span><span class="pun">-</span><span class="pln">responsive </span><span class="pun">&gt;</span><span class="pln"> </span><span class="pun">.</span><span class="pln">table</span><span class="pun">-</span><span class="pln">bordered </span><span class="pun">&gt;</span><span class="pln"> thead </span><span class="pun">&gt;</span><span class="pln"> tr </span><span class="pun">&gt;</span><span class="pln"> th</span><span class="pun">:</span><span class="pln">first</span><span class="pun">-</span><span class="pln">child</span></pre>

<p>
	ماذا يحدث لو حاولت تجاوز بعض خاصيات <code>&lt;th&gt;</code>؟ ستحتاج إلى إنشاء مُحدَّد أكثر دقةً وتخصيصًا! لا يمكنك استعمال قاعدة CSS كالآتية:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_8370_9"><span class="pln">th</span><span class="pun">.</span><span class="pln">important</span><span class="pun">-</span><span class="pln">heading </span><span class="pun">{</span><span class="pln"> color</span><span class="pun">:</span><span class="pln"> </span><span class="com">#000; }</span></pre>

<p>
	وإنما عليك إنشاء قاعدة مثل هذه:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_8370_11"><span class="pun">.</span><span class="pln">table</span><span class="pun">-</span><span class="pln">responsive </span><span class="pun">&gt;</span><span class="pln"> </span><span class="pun">.</span><span class="pln">table</span><span class="pun">-</span><span class="pln">bordered </span><span class="pun">&gt;</span><span class="pln"> thead </span><span class="pun">&gt;</span><span class="pln"> tr </span><span class="pun">&gt;</span><span class="pln"> th</span><span class="pun">:</span><span class="pln">first</span><span class="pun">-</span><span class="pln">child</span><span class="pun">.</span><span class="pln">important</span><span class="pun">-</span><span class="pln">heading </span><span class="pun">{</span><span class="pln">
  color</span><span class="pun">:</span><span class="pln"> </span><span class="com">#000;</span><span class="pln">
</span><span class="pun">}</span></pre>

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

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_8370_13"><span class="pln">th</span><span class="pun">.</span><span class="pln">important</span><span class="pun">-</span><span class="pln">heading </span><span class="pun">{</span><span class="pln"> color</span><span class="pun">:</span><span class="pln"> </span><span class="com">#000; !important }</span></pre>

<p>
	والتي تزيد من تعقيد الأمر بشكل أكبر.
</p>

<h3 id="قواعد-لا-تحتاج-لها">
	قواعد لا تحتاج لها
</h3>

<p>
	إذا ضمَّنتَ إطار العمل بأكمله بدلًا من استخدامك لأجزاءٍ تحتاج لها منه، فسينتهي بك المطاف بقواعد CSS لا تستعملها.<br>
	ربما تتعامل مع هذه الحالة بمساعدة أدوات لمعالجة الشيفرات لإزالة القواعد غير المستخدمة، لكن عندما تبدأ بإضافة أو إزالة الأصناف (classes) ديناميكيًا باستخدام JavaScript، فلن تكون متأكدًا 100% أنَّك لن تحتاج إلى تلك الشيفرات.<br>
	قواعد CSS غير المستخدمة تجعل ملفاتك كبيرةً، مما يُشكِّل مشكلةً للهواتف النقالة التي تتصل بالإنترنت عبر الشبكة الخلوية بدلًا من Wi-Fi. لكنك علاوةً على ذلك، ستجعل كمية الشيفرات في مشروعك كبيرةً مما يُصعِّب عملية الصيانة وتتبع الأخطاء.
</p>

<h3 id="اتخذ-قرارك">
	اتخذ قرارك
</h3>

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

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_8370_15"><span class="tag">&lt;span</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">“label</span><span class="pln"> </span><span class="atn">label-warning</span><span class="pln">”</span><span class="tag">&gt;</span><span class="pln">Out of stock</span><span class="tag">&lt;/span&gt;</span></pre>

<p>
	أرى أنَّ أسماء الأصناف مكررة، لأنني أفضِّل استخدام الأصناف التي أجدها ضروريةً فقط. إذا كنتُ صاحب الشيفرة السابقة، فسأستخدم الصنف <code>label-warning</code> فقط.<br>
	ماذا لو كنتَ معجبًا بإحدى طرق الهيكلة في CSS التي لا يستعملها إطار عملك؟
</p>

<h2 id="بدائل-إطارات-العمل">
	بدائل إطارات العمل
</h2>

<p>
	كتابة شيفرات HTML و CSS يدويًا! إذا لم تحب الشيفرات التي يُنتِجها إطار العمل، فلِمَ لا تكتب الشيفرات الخاصة بك. إذا كانت القواعد التي يوفرها إطار العمل تجعلك لا تعمل بكفاءة، فيجدر بك كتابة قواعدك الخاصة.<br>
	إذا كنتَ تحتاج إلى شبكة (grid)، فيمكنك أن تستعمل Flexbox، التي تُسهِّل إنشاء تخطيط للصفحة مقارنةً مع استعمال عناصر <code>&lt;div&gt;</code> عائمة (float). إذا لم تكن تعرف كيفية التعامل مع Flexbox، فألق نظرة على هذا <a href="https://academy.hsoub.com/programming/css/%D8%AA%D8%B9%D8%B1%D9%81-%D8%B9%D9%84%D9%89-css-flexbox-%D9%88%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A7%D8%AA-%D8%A7%D8%B3%D8%AA%D8%B9%D9%85%D8%A7%D9%84%D9%87-%D9%84%D9%87%D9%8A%D9%83%D9%84%D8%A9-%D8%B5%D9%81%D8%AD%D8%A7%D8%AA-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-r118/" rel="">هذا الدرس</a>. وإذا أردتَ أن تعرف كيف ستبدو الشيفرة، فانظر إلى المثال الآتي:<br>
	شيفرة HTML
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_8370_17"><span class="tag">&lt;header</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"main-header"</span><span class="tag">&gt;</span><span class="pln">Header</span><span class="tag">&lt;/header&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">"row"</span><span class="tag">&gt;</span><span class="pln">
  </span><span class="tag">&lt;aside</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"primary-sidebar"</span><span class="tag">&gt;</span><span class="pln">Sidebar (left)</span><span class="tag">&lt;/aside&gt;</span><span class="pln">
  </span><span class="tag">&lt;main</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"content"</span><span class="tag">&gt;</span><span class="pln">Main content goes here</span><span class="tag">&lt;/main&gt;</span><span class="pln">
  </span><span class="tag">&lt;aside</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"secondary-sidebar"</span><span class="tag">&gt;</span><span class="pln">Sidebar (right)</span><span class="tag">&lt;/aside&gt;</span><span class="pln">
</span><span class="tag">&lt;/div&gt;</span><span class="pln">
</span><span class="tag">&lt;footer</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"main-footer"</span><span class="tag">&gt;</span><span class="pln">Footer</span><span class="tag">&lt;/footer&gt;</span></pre>

<p>
	شيفرة CSS
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_8370_19"><span class="pun">*</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  padding</span><span class="pun">:</span><span class="pln"> </span><span class="lit">0</span><span class="pun">;</span><span class="pln">
  margin</span><span class="pun">:</span><span class="pln"> </span><span class="lit">0</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

body </span><span class="pun">{</span><span class="pln">
  font</span><span class="pun">-</span><span class="pln">size</span><span class="pun">:</span><span class="pln"> </span><span class="lit">1.2em</span><span class="pun">;</span><span class="pln">
  display</span><span class="pun">:</span><span class="pln"> flex</span><span class="pun">;</span><span class="pln">
  flex</span><span class="pun">-</span><span class="pln">direction</span><span class="pun">:</span><span class="pln"> column</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">
  text</span><span class="pun">-</span><span class="pln">align</span><span class="pun">:</span><span class="pln"> center</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

</span><span class="pun">.</span><span class="pln">row </span><span class="pun">{</span><span class="pln">
  flex</span><span class="pun">:</span><span class="pln"> </span><span class="lit">1</span><span class="pln"> </span><span class="lit">1</span><span class="pln"> </span><span class="kwd">auto</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">
  display</span><span class="pun">:</span><span class="pln"> flex</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

</span><span class="pun">.</span><span class="pln">main</span><span class="pun">-</span><span class="pln">header </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">
  flex</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="kwd">auto</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">



</span><span class="pun">.</span><span class="pln">main</span><span class="pun">-</span><span class="pln">footer </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">
  flex</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="kwd">auto</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

</span><span class="pun">.</span><span class="pln">primary</span><span class="pun">-</span><span class="pln">sidebar</span><span class="pun">,</span><span class="pln"> </span><span class="pun">.</span><span class="pln">secondary</span><span class="pun">-</span><span class="pln">sidebar </span><span class="pun">{</span><span class="pln">
  background</span><span class="pun">:</span><span class="pln"> turquoise</span><span class="pun">;</span><span class="pln">
  flex</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="kwd">auto</span><span class="pun">;</span><span class="pln">
  width</span><span class="pun">:</span><span class="pln"> </span><span class="lit">20</span><span class="pun">%;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

</span><span class="pun">.</span><span class="pln">content </span><span class="pun">{</span><span class="pln">
  flex</span><span class="pun">:</span><span class="pln"> </span><span class="lit">1</span><span class="pln"> </span><span class="lit">1</span><span class="pln"> </span><span class="kwd">auto</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">400px</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	سيكون لدينا <a href="https://hacks.mozilla.org/2015/09/the-future-of-layout-with-css-grid-layouts/" rel="external nofollow">Grid</a> في المستقبل القريب، والتي ستُسهِّل إنشاء الشّبكات، ولن تشعر أنَّك بحاجة إلى استعمال شبكة أخرى قط.<br>
	ملاحظة: لكي ترى <a href="http://gridbyexample.com/browsers/" rel="external nofollow">الناتج على متصفحك</a>، فجرِّب <a href="https://nightly.mozilla.org/" rel="external nofollow">النسخة الليلية من Firefox</a> أو آخر نسخة من متصفح <a href="https://www.mozilla.org/en-US/firefox/developer/" rel="external nofollow">Firefox Developer Edition</a>. أما لكي تُشاهد هذه الأمثلة في نسخة Firefox أخرى، فعليك تفعيل الراية <code>layout.css.grid.enabled</code> بالذهاب إلى <code>about:config</code>.<br>
	شيفرة HTML
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_8370_21"><span class="tag">&lt;header</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"main-header"</span><span class="tag">&gt;</span><span class="pln">Header</span><span class="tag">&lt;/header&gt;</span><span class="pln">
</span><span class="tag">&lt;main</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"content"</span><span class="tag">&gt;</span><span class="pln">Main content goes here</span><span class="tag">&lt;/main&gt;</span><span class="pln">
</span><span class="tag">&lt;aside</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"primary-sidebar"</span><span class="tag">&gt;</span><span class="pln">Sidebar (left)</span><span class="tag">&lt;/aside&gt;</span><span class="pln">
</span><span class="tag">&lt;aside</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"secondary-sidebar"</span><span class="tag">&gt;</span><span class="pln">Sidebar (right)</span><span class="tag">&lt;/aside&gt;</span><span class="pln">
</span><span class="tag">&lt;footer</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"main-footer"</span><span class="tag">&gt;</span><span class="pln">Footer</span><span class="tag">&lt;/footer&gt;</span></pre>

<p>
	شيفرة CSS
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_8370_23"><span class="pun">*</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  padding</span><span class="pun">:</span><span class="pln"> </span><span class="lit">0</span><span class="pun">;</span><span class="pln">
  margin</span><span class="pun">:</span><span class="pln"> </span><span class="lit">0</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

body </span><span class="pun">{</span><span class="pln">
  font</span><span class="pun">-</span><span class="pln">size</span><span class="pun">:</span><span class="pln"> </span><span class="lit">1.2em</span><span class="pun">;</span><span class="pln">
  text</span><span class="pun">-</span><span class="pln">align</span><span class="pun">:</span><span class="pln"> center</span><span class="pun">;</span><span class="pln">

  height</span><span class="pun">:</span><span class="pln"> </span><span class="lit">100vh</span><span class="pun">;</span><span class="pln">
  display</span><span class="pun">:</span><span class="pln"> grid</span><span class="pun">;</span><span class="pln">
  grid</span><span class="pun">-</span><span class="kwd">template</span><span class="pun">-</span><span class="pln">columns</span><span class="pun">:</span><span class="pln"> </span><span class="lit">20</span><span class="pun">%</span><span class="pln"> </span><span class="lit">1fr</span><span class="pln"> </span><span class="lit">20</span><span class="pun">%;</span><span class="pln">
  grid</span><span class="pun">-</span><span class="kwd">template</span><span class="pun">-</span><span class="pln">rows</span><span class="pun">:</span><span class="pln"> </span><span class="kwd">auto</span><span class="pln"> </span><span class="lit">1fr</span><span class="pln"> </span><span class="kwd">auto</span><span class="pun">;</span><span class="pln">
  grid</span><span class="pun">-</span><span class="kwd">template</span><span class="pun">-</span><span class="pln">areas</span><span class="pun">:</span><span class="pln">
    </span><span class="str">"header      header  header"</span><span class="pln">
    </span><span class="str">"sidebar-pri content sidebar-alt"</span><span class="pln">
    </span><span class="str">"footer      footer  footer"</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

</span><span class="pun">.</span><span class="pln">main</span><span class="pun">-</span><span class="pln">header </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">
  grid</span><span class="pun">-</span><span class="pln">area</span><span class="pun">:</span><span class="pln"> header</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

</span><span class="pun">.</span><span class="pln">main</span><span class="pun">-</span><span class="pln">footer </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">
  grid</span><span class="pun">-</span><span class="pln">area</span><span class="pun">:</span><span class="pln"> footer</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

</span><span class="pun">.</span><span class="pln">primary</span><span class="pun">-</span><span class="pln">sidebar</span><span class="pun">,</span><span class="pln"> </span><span class="pun">.</span><span class="pln">secondary</span><span class="pun">-</span><span class="pln">sidebar </span><span class="pun">{</span><span class="pln">
  background</span><span class="pun">:</span><span class="pln"> turquoise</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

</span><span class="pun">.</span><span class="pln">primary</span><span class="pun">-</span><span class="pln">sidebar </span><span class="pun">{</span><span class="pln">
  grid</span><span class="pun">-</span><span class="pln">area</span><span class="pun">:</span><span class="pln"> sidebar</span><span class="pun">-</span><span class="pln">pri</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

</span><span class="pun">.</span><span class="pln">secondary</span><span class="pun">-</span><span class="pln">sidebar </span><span class="pun">{</span><span class="pln">
  grid</span><span class="pun">-</span><span class="pln">area</span><span class="pun">:</span><span class="pln"> sidebar</span><span class="pun">-</span><span class="pln">alt</span><span class="pun">;</span><span class="pln">
</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">
  background</span><span class="pun">:</span><span class="pln"> green</span><span class="pun">;</span><span class="pln">
  grid</span><span class="pun">-</span><span class="pln">area</span><span class="pun">:</span><span class="pln"> content</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	إذا كنتَ تحتاج إلى بعض عناصر الواجهة الرسومية، مثل القوائم المنسدلة، فلا حاجة إلى كتابتها من الصفر، وإنما تستطيع أخذ ذاك الجزء من إطار العمل (عوضًا عن كامل الإطار) أو أن تستعمل مكتبة خارجية ليس لها اعتماديات.<br>
	إذ كنتَ تحتاج إلى تصميمٍ لواجهة موقعك أو تطبيقك، فيمكنك أن تحصل على ملفات Sass أو Less بدلًا من شيفرات CSS النهائية. وبهذا تستطيع إنشاء مُحدِّدات خاصة بك، مما يسمح لك باستخدام شيفرات HTML كما تحب. لكن تذكّر بأنَّ موقعك سيبدو كغيره من العديد من المواقع.<br>
	إذا كنتَ تريد طريقةً لتوحيد عملية إنشاء عناصر الواجهة الرسومية في مشروعك، لكي يعرف الآخرون ما هي الشيفرة التي يجب أن يستخدموها وكيف يُضيفون عناصر جديدة؛ فالذي تبحث عنه هو «<a href="https://academy.hsoub.com/programming/css/%D8%A5%D9%86%D8%B4%D8%A7%D8%A1-%D8%AF%D9%84%D9%8A%D9%84-%D8%A7%D9%84%D8%A3%D9%86%D9%85%D8%A7%D8%B7-style-guides-%D9%84%D9%85%D9%88%D9%82%D8%B9-%D8%A3%D9%88-%D8%AA%D8%B7%D8%A8%D9%8A%D9%82-%D9%88%D9%8A%D8%A8-r44/" rel="">دليل لكتابة الأنماط</a>» (style guide. باختصار: إطار عمل خاص بك). أرى أنَّ عليك استخدام هذه الطريقة في المشاريع الكبيرة.
</p>

<h2 id="الخلاصة">
	الخلاصة
</h2>

<p>
	هنالك إيجابياتٌ كثيرة لاستخدام إطارات العمل، لكن هنالك أيضًا سلبياتٌ عليك توخي الحذر منها، ولا تنسَ أن تتعرف على الأدوات والواجهات البرمجية (APIs) المتاحة لك لإنشاء أنماط CSS خاصة بمشروعك أو تطبيقك.<br>
	ترجمة -وبتصرّف- للمقال <a href="https://hacks.mozilla.org/2016/04/you-might-not-need-a-css-framework/" rel="external nofollow">You might not need a CSS framework</a> لصاحبته Belén Albeza.
</p>
]]></description><guid isPermaLink="false">427</guid><pubDate>Sat, 10 Sep 2016 23:00:00 +0000</pubDate></item><item><title>&#x645;&#x62F;&#x62E;&#x644; &#x625;&#x644;&#x649; &#x634;&#x628;&#x643;&#x627;&#x62A; CSS &#x627;&#x644;&#x639;&#x635;&#x631;&#x64A;&#x629; (CSS Grids)</title><link>https://academy.hsoub.com/programming/css/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D8%B4%D8%A8%D9%83%D8%A7%D8%AA-css-%D8%A7%D9%84%D8%B9%D8%B5%D8%B1%D9%8A%D8%A9-css-grids-r301/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2016_03/css-grids.png.26a84edc114edaa09f158b3f7d16d4f8.png" /></p>

<div id="wmd-preview-section-16">
	<p id="مدخل-إلى-شبكات-css-العصرية">
		لم يعد إنشاء تصاميم متجاوبة اختياريًّا، فلقد أصبحت شبكات CSS وعلى نحو سريع الخيّار المفضّل لإنشاء بنى منسجمة لمواقع ويب تبدو بمظهر رائع على مختلف أنواع الأجهزة. 
	</p>

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

	<p style="text-align: center;">
		<img alt="css-grids.png" class="ipsImage ipsImage_thumbnailed" data-fileid="14511" data-unique="55eoejbbv" src="https://academy.hsoub.com/uploads/monthly_2016_03/css-grids.png.bd1a309b7040a31e92673fe21ac8547a.png"></p>
</div>

<div id="wmd-preview-section-17">
	<h2 id="ما-هو-نظام-شبكة-css">
		ما هو نظام شبكة CSS؟
	</h2>

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

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

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

	<p style="text-align: center;">
		<a class="ipsAttachLink ipsAttachLink_image" data-fileid="14510" href="https://academy.hsoub.com/uploads/monthly_2016_03/css_track_1024.png.c9328beba5b7acfb9014d3bd764b65bb.png" rel="external"><img alt="css_track_1024.png" class="ipsImage ipsImage_thumbnailed" data-fileid="14510" data-unique="nrleobbsx" src="https://academy.hsoub.com/uploads/monthly_2016_03/css_track_1024.thumb.png.217231ec07c5181343b08b617b13ccaf.png"></a>
	</p>

	<p style="text-align: center;">
		<strong>المسار track في الشبكة، عبارة عن سطر كامل أو عمود كامل.</strong>
	</p>

	<p>
		وبالنسبة للمنطقة فهي مكوّنة من خلايا تشكّل حاويةً مستطيلة الشكل للمحتوى، في حين أنّ خطوط الشبكة grid lines هي الفواصل بين الخلايا في البنية الشبكيّة، وهي تشبه على أية حال حدود الخلايا في جداول HTML العاديّة.
	</p>

	<p>
		تشكّل المناطق مقاطع بنيويّة ذات طبيعة متنوّعة، مثل المناطق الخاصة بالعنوان header والشريط الجانبي sidebar والمحتوى الأساسي والتذييل footer.
	</p>

	<p style="text-align: center;">
		<a class="ipsAttachLink ipsAttachLink_image" data-fileid="14508" href="https://academy.hsoub.com/uploads/monthly_2016_03/css_area-01_1024.png.719866308a3728514cc2216b36b73945.png" rel="external"><img alt="css_area-01_1024.png" class="ipsImage ipsImage_thumbnailed" data-fileid="14508" data-unique="kv5hbs4wl" src="https://academy.hsoub.com/uploads/monthly_2016_03/css_area-01_1024.thumb.png.f5eab8f60caf61311e1b8e93ccafc778.png"></a>
	</p>

	<p style="text-align: center;">
		<strong>تشكّل المنطقة area مقاطع بنيويّة متنوّعة في الشبكة.</strong>
	</p>

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

	<p>
		المشكلة الوحيدة في شيفرة CSS الجديدة هي أنّها حتى هذه اللحظة ليست متوافقة بشكل كامل مع جميع المتصفّحات، ولكن تبقى مسألة وقت قبل أن تصبح قياسيّة في المدى القريب، بحيث تعمل على جميع المتصفّحات الأساسيّة المعاصرة. يمكنك تجربة مزايا الشبكة الجديدة مع جميع المتصفّحات من خلال إضافة يمكن الحصول عليها <a href="https://github.com/FremyCompany/css-grid-polyfill" rel="external nofollow">من هنا</a>.
	</p>

	<p>
		يمكننا في متصفّح Chrome تفعيل منصّة الويب التجريبيّة experimental web platform بكتابة العنوان التالي في شريط عنوان المتصفّح:
	</p>

	<pre style="text-align: center;">
Chrome://flags
</pre>

	<p>
		انتقل إلى الأسفل حتى تصل إلى قسم تفعيل مزايا منصّة ويب التجريبيّة <strong>Enable Experimental Web Platform features</strong> ثم انقر <strong>Enable</strong> تحت العنوان.
	</p>

	<p style="text-align: center;">
		<a class="ipsAttachLink ipsAttachLink_image" data-fileid="14507" href="https://academy.hsoub.com/uploads/monthly_2016_03/chrome-experimental-features.png.f48a7b3bae57526e10fd11b98c4de273.png" rel="external"><img alt="chrome-experimental-features.png" class="ipsImage ipsImage_thumbnailed" data-fileid="14507" data-unique="b68p31lmc" src="https://academy.hsoub.com/uploads/monthly_2016_03/chrome-experimental-features.thumb.png.d5917c3371e7ae10aedd8a119d2e09c3.png"></a>
	</p>

	<p style="text-align: center;">
		<strong>يمكننا اختبار شبكات CSS3 في متصفّح Chrome بإجراءات بسيطة.</strong>
	</p>

	<p>
		انقر بعد ذلك زر إعادة التشغيل الآن <strong>Relaunch Now</strong> وهذا كلّ شيء. أصبحنا الآن مستعدّين لتجربة شبكات CSS في Chrome ضمن أنظمة تشغيل Windows و Mac و Linux وحتى أجهزة Android.
	</p>
</div>

<div id="wmd-preview-section-18">
	<h2 id="إعداد-الشبكات-باستخدام-html5">
		إعداد الشبكات باستخدام HTML5
	</h2>

	<p>
		الآن وبعد تفعيل الأدوات التجريبيّة، يمكننا البدء بإنشاء البنية الشبكيّة. نحتاج إلى صفحة لاختبار تأثيرات شيفرة CSS، انشأ ملف<span style="font-family:courier new,courier,monospace;"> index.html</span>. نحن مستعدّون الآن لإضافة شيفرة HTML5 أساسيّة لعرض أي شبكة ننشئها بعد قليل.
	</p>

	<p>
		سننشئ منطقة خاصّة بالعنوان header وأخرى خاصّة بالتذييل footer بالإضافة إلى منطقة خاصّة بالمحتوى content ومنطقة للشريط الجانبيّ sidebar على الجانب الأيمن من الصفحة. لنضيف الشيفرة التاليّة إلى الصفحة:
	</p>
</div>

<div id="wmd-preview-section-19">
	<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_3098_7">
<span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"grid"</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">"header"</span><span class="tag">&gt;&lt;/div&gt;</span><span class="pln">
  </span><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"sidebar"</span><span class="tag">&gt;&lt;/div&gt;</span><span class="pln">
  </span><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"content"</span><span class="tag">&gt;&lt;/div&gt;</span><span class="pln">
  </span><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"footer"</span><span class="tag">&gt;&lt;/div&gt;</span><span class="pln">
</span><span class="tag">&lt;/div&gt;</span></pre>

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

<div id="wmd-preview-section-20">
	<h2 id="تنسيق-الشبكة-بشيفرة-css">
		تنسيق الشبكة بشيفرة CSS
	</h2>

	<p>
		قبل أن نبدأ بتنسيق الشبكة يجب أن نعلم أنّ هناك بعض تنسيقات CSS لا تعمل مع الشبكات:
	</p>

	<ul>
<li>
			الخصائص <strong>column-*</strong> أي جميع الخصائص التي تبدأ بـ column- مثل <span style="font-family:courier new,courier,monospace;">column-span</span> و <span style="font-family:courier new,courier,monospace;">column-width</span> و<span style="font-family:courier new,courier,monospace;"> column-rule</span>.
		</li>
		<li>
			الخاصيّة <span style="font-family:courier new,courier,monospace;">float</span>، وهذه الخاصيّة يمكن استخدمها إذا طبّقتها قبل تطبيق الخاصيّة <span style="font-family:courier new,courier,monospace;">display</span> التي تُعيّن طريقة العرض إلى شبكة كما سنرى بعد قليل. لن يكون بالإمكان تعويم <span style="font-family:courier new,courier,monospace;">float</span> المحتوى داخل الشبكة.
		</li>
		<li>
			الخاصيّة <span style="font-family:courier new,courier,monospace;">clear</span>، حيث أنّه بمجرّد العمل مع بنى الشبكات فلا داعي لاستخدام هذه الخاصيّة لأنّ الشبكة تتجاهلها.
		</li>
		<li>
			الخاصيّة <span style="font-family:courier new,courier,monospace;">vertical-align</span>، لا تمتلك هذه الخاصيّة أي تأثير على بنية الشبكة.
		</li>
		<li>
			العنصرين الزائفين <span style="font-family:courier new,courier,monospace;">first-line::</span> و <span style="font-family:courier new,courier,monospace;">first-letter::</span> لا يمكن تطبيقهما ضمن الشبكة.
		</li>
	</ul>
<p>
		بالنسبة لأي خاصيّة CSS غير موجودة في القائمة السابقة فيمكن استخدامها مع الشبكات.
	</p>

	<p>
		قم بإنشاء الملف <span style="font-family:courier new,courier,monospace;">style.css</span> لنعمل على تطبيق بنية الشبكة على التصميم. سنبدأ الآن باستخدام مُحدّد معرّف العنصر كما يلي:
	</p>
</div>

<div id="wmd-preview-section-21">
	<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_3098_9">
<span class="com">#grid {</span><span class="pln">
  display</span><span class="pun">:</span><span class="pln">grid</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">  </span></pre>

	<p>
		إذا وجدت أنّ تموضع الشبكة ليس مناسبًا، جرّب تغيير الخاصية السابقة لتصبح <span style="font-family:courier new,courier,monospace;">display:inline-grid </span>حيث يؤدي ذلك إلى إنشاء البنية ضمن المنطقة التي تعمل ضمنها بدلًا من إنشاء حاوية مُخصّصة كما تفعل القيمة block عند استخدامها. نلاحظ أنّ الشبكة قد تمّ إنشائها ولكنّها فارغة.
	</p>

	<p>
		لإنشاء الخلايا يمكننا استخدام <span style="font-family:courier new,courier,monospace;">grid-template-rows</span> و<span style="font-family:courier new,courier,monospace;"> grid-template-columns</span> بحيث نضعهم أسفل الخاصيّة <span style="font-family:courier new,courier,monospace;">display</span> التي عرّفناها قبل قليل. القيم التي يمكن تزويدها لهاتين الخاصيّتين هي قيم أحجام الخلايا التي نرغب بإنشائها.
	</p>

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

<div id="wmd-preview-section-22">
	<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_3098_11">
<span class="com">#grid {</span><span class="pln">
  display</span><span class="pun">:</span><span class="pln">grid</span><span class="pun">;</span><span class="pln">

  grid</span><span class="pun">-</span><span class="kwd">template</span><span class="pun">-</span><span class="pln">rows</span><span class="pun">:</span><span class="lit">100px</span><span class="pln"> </span><span class="kwd">auto</span><span class="pln"> </span><span class="lit">100px</span><span class="pun">;</span><span class="pln">
  grid</span><span class="pun">-</span><span class="kwd">template</span><span class="pun">-</span><span class="pln">colums</span><span class="pun">:</span><span class="pln">repeat</span><span class="pun">(</span><span class="lit">9</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>
		أنشأنا في المثال السابق ثلاثة أسطر وتسعة أعمدة. يبلغ ارتفاع السطر الأوّل 100 بيكسل، أمّا السطر الثاني فسيتم ضبطه تلقائيًّا بحيث يلائم المحتوى المُضاف بالنسبة إلى الشبكة، وسيبلغ ارتفاع السطر الثالث 100 بيكسل أيضًا. تسمح لنا الدالّة <span style="font-family:courier new,courier,monospace;">repeat</span> بإنشاء أي عدد من الأعمدة أو الأسطر طالما أردنا أن يكون لها نفس القياس. في مثالنا هذا سننشئ تسعة أعمدة بعرض 100 بيكسل لكلٍّ منها.
	</p>

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

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

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

	<p>
		لتسمية المناطق فإنّنا نعيّن اسم المنطقة لكلّ عمود وسطر ستمتدّ عليه هذه المنطقة. يمكننا استخدام الخاصيّة <span style="font-family:courier new,courier,monospace;">grid-template-areas</span> بحيث نضعها أسفل الخاصّتين المسؤولتين عن تعيين عدد الأسطر والأعمدة الّلتين أضفناهما قبل قليل، أي على النحو التالي:
	</p>
</div>

<div id="wmd-preview-section-23">
	<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_3098_13">
<span class="com">#grid {</span><span class="pln">
  display</span><span class="pun">:</span><span class="pln">grid</span><span class="pun">;</span><span class="pln">

  grid</span><span class="pun">-</span><span class="kwd">template</span><span class="pun">-</span><span class="pln">rows</span><span class="pun">:</span><span class="lit">100px</span><span class="pln"> </span><span class="kwd">auto</span><span class="pln"> </span><span class="lit">100px</span><span class="pun">;</span><span class="pln">
  grid</span><span class="pun">-</span><span class="kwd">template</span><span class="pun">-</span><span class="pln">colums</span><span class="pun">:</span><span class="pln">repeat</span><span class="pun">(</span><span class="lit">9</span><span class="pun">,</span><span class="pln"> </span><span class="lit">100px</span><span class="pun">);</span><span class="pln">

  grid</span><span class="pun">-</span><span class="kwd">template</span><span class="pun">-</span><span class="pln">areas</span><span class="pun">:</span><span class="pln">
  </span><span class="str">"header header header header header header header header header"</span><span class="pln">
  </span><span class="str">"content content content content content content content sidebar sidebar"</span><span class="pln">
  </span><span class="str">"footer footer footer footer footer footer footer footer footer"</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></pre>

	<p>
		نلاحظ من السطر الأوّل أنّ المنطقة <span style="font-family:courier new,courier,monospace;">header</span> تمتدّ على كامل الأعمدة، وكذلك الأمر بالنسبة للمنطقة <span style="font-family:courier new,courier,monospace;">footer</span> على السطر الثالث. أمّا السطر الثاني فسيحتوي على منطقة المحتوى الرئيسي <span style="font-family:courier new,courier,monospace;">main</span> بالإضافة إلى منطقة الشريط الجانبي <span style="font-family:courier new,courier,monospace;">sidebar</span>.
	</p>

	<p>
		حتى هذه اللحظة لم يتم إنشاء الشبكة بعد. في الحقيقة تُشير الأسماء المعرّفة توًّا: header و content و sidebar و footer إلى أسماء أصناف CSS سنعرّفها بعد قليل. بحيث نستخدم خصائص جديدة مع هذه الأصناف تُشير إلى بداية ونهاية كل منطقة بالنسبة للأسطر: <span style="font-family:courier new,courier,monospace;">grid-row-start</span> و<span style="font-family:courier new,courier,monospace;"> grid-row-end</span> وبالنسبة للأعمدة:<span style="font-family:courier new,courier,monospace;"> grid-column-start</span> و<span style="font-family:courier new,courier,monospace;"> grid-column-end</span>. يمكن إضافة أصناف CSS هذه مباشرةً بعد شيفرة الشبكة السابقة:
	</p>
</div>

<div id="wmd-preview-section-24">
	<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_3098_15">
<span class="pun">.</span><span class="pln">header </span><span class="pun">{</span><span class="pln">
  grid</span><span class="pun">-</span><span class="pln">row</span><span class="pun">-</span><span class="pln">start</span><span class="pun">:</span><span class="lit">1</span><span class="pun">;</span><span class="pln">
  grid</span><span class="pun">-</span><span class="pln">row</span><span class="pun">-</span><span class="kwd">end</span><span class="pun">:</span><span class="lit">2</span><span class="pun">;</span><span class="pln">
  grid</span><span class="pun">-</span><span class="pln">column</span><span class="pun">-</span><span class="pln">start</span><span class="pun">:</span><span class="lit">1</span><span class="pun">;</span><span class="pln">
  grid</span><span class="pun">-</span><span class="pln">column</span><span class="pun">-</span><span class="kwd">end</span><span class="pun">:</span><span class="lit">10</span><span class="pun">;</span><span class="pln">
</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">
  grid</span><span class="pun">-</span><span class="pln">row</span><span class="pun">-</span><span class="pln">start</span><span class="pun">:</span><span class="lit">2</span><span class="pun">;</span><span class="pln">
  grid</span><span class="pun">-</span><span class="pln">row</span><span class="pun">-</span><span class="kwd">end</span><span class="pun">:</span><span class="lit">3</span><span class="pun">;</span><span class="pln">
  grid</span><span class="pun">-</span><span class="pln">column</span><span class="pun">-</span><span class="pln">start</span><span class="pun">:</span><span class="lit">1</span><span class="pun">;</span><span class="pln">
  grid</span><span class="pun">-</span><span class="pln">column</span><span class="pun">-</span><span class="kwd">end</span><span class="pun">:</span><span class="lit">8</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

</span><span class="pun">.</span><span class="pln">sidebar </span><span class="pun">{</span><span class="pln">
  grid</span><span class="pun">-</span><span class="pln">row</span><span class="pun">-</span><span class="pln">start</span><span class="pun">:</span><span class="lit">2</span><span class="pun">;</span><span class="pln">
  grid</span><span class="pun">-</span><span class="pln">row</span><span class="pun">-</span><span class="kwd">end</span><span class="pun">:</span><span class="lit">3</span><span class="pun">;</span><span class="pln">
  grid</span><span class="pun">-</span><span class="pln">column</span><span class="pun">-</span><span class="pln">start</span><span class="pun">:</span><span class="lit">8</span><span class="pun">;</span><span class="pln">
  grid</span><span class="pun">-</span><span class="pln">column</span><span class="pun">-</span><span class="kwd">end</span><span class="pun">:</span><span class="lit">10</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

</span><span class="pun">.</span><span class="pln">footer </span><span class="pun">{</span><span class="pln">
  grid</span><span class="pun">-</span><span class="pln">row</span><span class="pun">-</span><span class="pln">start</span><span class="pun">:</span><span class="lit">3</span><span class="pun">;</span><span class="pln">
  grid</span><span class="pun">-</span><span class="pln">row</span><span class="pun">-</span><span class="kwd">end</span><span class="pun">:</span><span class="lit">4</span><span class="pun">;</span><span class="pln">
  grid</span><span class="pun">-</span><span class="pln">column</span><span class="pun">-</span><span class="pln">start</span><span class="pun">:</span><span class="lit">1</span><span class="pun">;</span><span class="pln">
  grid</span><span class="pun">-</span><span class="pln">column</span><span class="pun">-</span><span class="kwd">end</span><span class="pun">:</span><span class="lit">10</span><span class="pun">;</span><span class="pln">
</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">
  grid</span><span class="pun">-</span><span class="pln">row</span><span class="pun">-</span><span class="pln">start</span><span class="pun">:</span><span class="lit">3</span><span class="pun">;</span><span class="pln">
  grid</span><span class="pun">-</span><span class="pln">row</span><span class="pun">-</span><span class="kwd">end</span><span class="pun">:</span><span class="lit">4</span><span class="pun">;</span><span class="pln">
  grid</span><span class="pun">-</span><span class="pln">column</span><span class="pun">-</span><span class="pln">start</span><span class="pun">:</span><span class="lit">1</span><span class="pun">;</span><span class="pln">
  grid</span><span class="pun">-</span><span class="pln">column</span><span class="pun">-</span><span class="kwd">end</span><span class="pun">:</span><span class="lit">7</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></pre>

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

<div id="wmd-preview-section-25">
	<h2 id="جعل-البنية-متجاوبة-مع-الأجهزة-المحمولة">
		جعل البنية متجاوبة مع الأجهزة المحمولة
	</h2>

	<p>
		وفقًا لهذا <a href="http://www.smartinsights.com/mobile-marketing/mobile-marketing-analytics/mobile-marketing-statistics/" rel="external nofollow">التقرير</a> فإنّ أكثر من نصف مجموع الأوقات التي قضاها المستخدمون على الانترنت في النصف الأوّل من عام 2015 كانت على الأجهزة المحمولة. وهذا يزيد بمقدار 11% عمّا كان عليه الوضع في العام السابق ويزيد بمقدار 39% عمّا كان عليه في عام 2008. من الملاحظ أنّ عدد الساعات التي يتمّ قضائها على الأجهزة المحمولة في ازدياد مطّرد، فإن لم نجعل موقعنا متجاوبًا مع هذه الأجهزة فسيفوتنا القطار!
	</p>

	<p>
		قد تبدو هذه العمليّة صعبة للوهلة الأولى، ولكنّ الأمر ليس بهذه الصعوبة. يوجد أسلوب أساسيّ يمكن من خلاله جعل البنية الشبكيّة متجاوبة، حيث يمكن باستخدام القاعدة <span style="font-family:courier new,courier,monospace;">media@</span> والخاصيّتان <span style="font-family:courier new,courier,monospace;">max-width </span>و <span style="font-family:courier new,courier,monospace;">min-width</span> أن نسمح للمتصفّح بعرض محتوى مناسب إذا استُخدم الجهاز المحمول لعرض الموقع.
	</p>

	<p>
		يمكن باستخدام القاعدة <span style="font-family:courier new,courier,monospace;">media@</span> تعريف أنماط تنسيق مُحدّدة للموقع بحيث تُطبّق عند استعراض هذا الموقع ضمن شاشة الجهاز المحمول. تسمح الخاصيّة <span style="font-family:courier new,courier,monospace;">max-width</span> بشكل عام لأيّ عنصر بالالتزام بقياس مُحدّد عن طريق إسناد العرض الأعظمي للمنطقة التي يُسمح للمحتوى الخاص به أن يشغلها. تخبر هذه الخاصيّة موقعنا بأنّه من الممكن أن ندع محتويات المناطق تكبر أو تصغر طالما أنّها لا تتجاوز القيمة التي حدّدناها ضمن الخاصيّة <span style="font-family:courier new,courier,monospace;">max-width</span>. أمّا عند استخدام الخاصيّة <span style="font-family:courier new,courier,monospace;">max-width </span>مع القاعدة <span style="font-family:courier new,courier,monospace;">media@</span> فسيكون للخاصيّة<span style="font-family:courier new,courier,monospace;"> max-width </span>دور جديد وهو تحديد شرط لتطبيق أنماط تنسيق مُحدّدة عندما يتم استخدام شاشات صغيرة، كشاشات الأجهزة المحمولة. وينطبق نفس الأسلوب تمامًا على الخاصيّة <span style="font-family:courier new,courier,monospace;">min-width </span>عند استخدمها مع القاعدة <span style="font-family:courier new,courier,monospace;">media@</span>. الآن لنضع القاعدة التالية أوّل تنسيقات CSS التي أضفناها إلى ملف التنسيق:
	</p>
</div>

<div id="wmd-preview-section-26">
	<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_8812_7">
<span class="lit">@media</span><span class="pln"> </span><span class="pun">(</span><span class="pln">max</span><span class="pun">-</span><span class="pln">width</span><span class="pun">:</span><span class="lit">900px</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">min</span><span class="pun">-</span><span class="pln">width</span><span class="pun">:</span><span class="lit">500px</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  </span><span class="com">/* Your grid layout code goes here */</span><span class="pln">
</span><span class="pun">}</span></pre>

	<p>
		ستُطبّق التنسيقات الموجودة ضمن القاعدة <span style="font-family:courier new,courier,monospace;">media@</span> عندما يُستخدم أيّ جهاز يتراوح عرض شاشته بين 900 بيكسل (العرض الأعظمي <span style="font-family:courier new,courier,monospace;">max-width</span>) و500 بيكسل (العرض الأصغري <span style="font-family:courier new,courier,monospace;">min-width</span>). لا ننسى بالطبع تعديل هذه القيم بما يتلاءم مع احتياجاتنا.
	</p>
</div>

<div id="wmd-preview-section-27">
	<h2 id="التغييرات-البسيطة-في-البنية">
		التغييرات البسيطة في البنية
	</h2>

	<p>
		لنضع الآن جميع التنسيقات مع بعضها البعض، ونضيف المزيد منها إلى البنية الجديدة. الشكل النهائي لملف تنسيقات CSS سيبدو مشابهًا لما يلي:
	</p>
</div>

<div id="wmd-preview-section-28">
	<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_8812_9">
<span class="lit">@media</span><span class="pln"> </span><span class="pun">(</span><span class="pln">max</span><span class="pun">-</span><span class="pln">width</span><span class="pun">:</span><span class="lit">900px</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">min</span><span class="pun">-</span><span class="pln">width</span><span class="pun">:</span><span class="lit">500px</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  </span><span class="com">#grid {</span><span class="pln">
    display</span><span class="pun">:</span><span class="pln">grid</span><span class="pun">;</span><span class="pln">

    grid</span><span class="pun">-</span><span class="kwd">template</span><span class="pun">-</span><span class="pln">rows</span><span class="pun">:</span><span class="lit">100px</span><span class="pln"> </span><span class="kwd">auto</span><span class="pln"> </span><span class="lit">100px</span><span class="pun">;</span><span class="pln">
    grid</span><span class="pun">-</span><span class="kwd">template</span><span class="pun">-</span><span class="pln">colums</span><span class="pun">:</span><span class="pln">repeat</span><span class="pun">(</span><span class="lit">9</span><span class="pun">,</span><span class="pln"> </span><span class="lit">100px</span><span class="pun">);</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

</span><span class="pun">.</span><span class="pln">header </span><span class="pun">{</span><span class="pln">
  grid</span><span class="pun">-</span><span class="pln">row</span><span class="pun">-</span><span class="pln">start</span><span class="pun">:</span><span class="lit">1</span><span class="pun">;</span><span class="pln">
  grid</span><span class="pun">-</span><span class="pln">row</span><span class="pun">-</span><span class="kwd">end</span><span class="pun">:</span><span class="lit">2</span><span class="pun">;</span><span class="pln">
  grid</span><span class="pun">-</span><span class="pln">column</span><span class="pun">-</span><span class="pln">start</span><span class="pun">:</span><span class="lit">1</span><span class="pun">;</span><span class="pln">
  grid</span><span class="pun">-</span><span class="pln">column</span><span class="pun">-</span><span class="kwd">end</span><span class="pun">:</span><span class="lit">10</span><span class="pun">;</span><span class="pln">
</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">
  grid</span><span class="pun">-</span><span class="pln">row</span><span class="pun">-</span><span class="pln">start</span><span class="pun">:</span><span class="lit">2</span><span class="pun">;</span><span class="pln">
  grid</span><span class="pun">-</span><span class="pln">row</span><span class="pun">-</span><span class="kwd">end</span><span class="pun">:</span><span class="lit">3</span><span class="pun">;</span><span class="pln">
  grid</span><span class="pun">-</span><span class="pln">column</span><span class="pun">-</span><span class="pln">start</span><span class="pun">:</span><span class="lit">1</span><span class="pun">;</span><span class="pln">
  grid</span><span class="pun">-</span><span class="pln">column</span><span class="pun">-</span><span class="kwd">end</span><span class="pun">:</span><span class="lit">8</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

</span><span class="pun">.</span><span class="pln">sidebar </span><span class="pun">{</span><span class="pln">
  grid</span><span class="pun">-</span><span class="pln">row</span><span class="pun">-</span><span class="pln">start</span><span class="pun">:</span><span class="lit">2</span><span class="pun">;</span><span class="pln">
  grid</span><span class="pun">-</span><span class="pln">row</span><span class="pun">-</span><span class="kwd">end</span><span class="pun">:</span><span class="lit">3</span><span class="pun">;</span><span class="pln">
  grid</span><span class="pun">-</span><span class="pln">column</span><span class="pun">-</span><span class="pln">start</span><span class="pun">:</span><span class="lit">8</span><span class="pun">;</span><span class="pln">
  grid</span><span class="pun">-</span><span class="pln">column</span><span class="pun">-</span><span class="kwd">end</span><span class="pun">:</span><span class="lit">10</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

</span><span class="pun">.</span><span class="pln">footer </span><span class="pun">{</span><span class="pln">
  grid</span><span class="pun">-</span><span class="pln">row</span><span class="pun">-</span><span class="pln">start</span><span class="pun">:</span><span class="lit">3</span><span class="pun">;</span><span class="pln">
  grid</span><span class="pun">-</span><span class="pln">row</span><span class="pun">-</span><span class="kwd">end</span><span class="pun">:</span><span class="lit">4</span><span class="pun">;</span><span class="pln">
  grid</span><span class="pun">-</span><span class="pln">column</span><span class="pun">-</span><span class="pln">start</span><span class="pun">:</span><span class="lit">1</span><span class="pun">;</span><span class="pln">
  grid</span><span class="pun">-</span><span class="pln">column</span><span class="pun">-</span><span class="kwd">end</span><span class="pun">:</span><span class="lit">10</span><span class="pun">;</span><span class="pln">
</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">
  grid</span><span class="pun">-</span><span class="pln">row</span><span class="pun">-</span><span class="pln">start</span><span class="pun">:</span><span class="lit">3</span><span class="pun">;</span><span class="pln">
  grid</span><span class="pun">-</span><span class="pln">row</span><span class="pun">-</span><span class="kwd">end</span><span class="pun">:</span><span class="lit">4</span><span class="pun">;</span><span class="pln">
  grid</span><span class="pun">-</span><span class="pln">column</span><span class="pun">-</span><span class="pln">start</span><span class="pun">:</span><span class="lit">1</span><span class="pun">;</span><span class="pln">
  grid</span><span class="pun">-</span><span class="pln">column</span><span class="pun">-</span><span class="kwd">end</span><span class="pun">:</span><span class="lit">7</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></pre>

	<p>
		وهنا صورة تمثيليّة لما سنحصل عليه ضمن المتصفّح:
	</p>

	<p style="text-align: center;">
		<a class="ipsAttachLink ipsAttachLink_image" data-fileid="14509" href="https://academy.hsoub.com/uploads/monthly_2016_03/css_layout_v1_1024.png.b0db0c82ad977673b741aad076dee0a6.png" rel="external"><img alt="css_layout_v1_1024.png" class="ipsImage ipsImage_thumbnailed" data-fileid="14509" data-unique="54jd7yiqk" src="https://academy.hsoub.com/uploads/monthly_2016_03/css_layout_v1_1024.thumb.png.de51e601e6c64b50d4ea0be4f0e12f4b.png"></a>
	</p>

	<p style="text-align: center;">
		<strong>صورة تمثيليّة للشكل الناتج يتألّف من ترويسة ومنطقة محتوى رئيسيّة وشريط جانبي ومنطقة للتذييل.</strong>
	</p>

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

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

	<p>
		نحن مستعدّون الآن لاستخدام آخر التحسينات في عالم CSS، يمكننا الآن فهم وإنشاء عناصر جديدة ومختلفة وتجميعها معًا لتشكيل بنية شبكيّة. أنصح بمراجعة <a href="https://drafts.csswg.org/css-grid-1/" rel="external nofollow">وثائق العمل الحاليّة</a> الخاصّة بالبنية الشبكيّة، وبشكل دوريّ، للاطّلاع على آخر المستجدّات حالما تصدر.
	</p>

	<p>
		ترجمة -وبتصرّف- للمقال <a href="https://premium.wpmudev.org/blog/css-grid-system/" rel="external nofollow">Understanding CSS Grids for Modern WordPress Website Design</a> لصاحبته Jenni McKinnon.
	</p>
</div>
]]></description><guid isPermaLink="false">301</guid><pubDate>Sun, 27 Mar 2016 21:59:46 +0000</pubDate></item><item><title>&#x627;&#x644;&#x62A;&#x639;&#x627;&#x645;&#x644;  &#x645;&#x639; &#x623;&#x62C;&#x647;&#x632;&#x629; &#x627;&#x644;&#x639;&#x631;&#x636; &#x627;&#x644;&#x645;&#x62E;&#x62A;&#x644;&#x641;&#x629; &#x648;&#x627;&#x644;&#x645;&#x637;&#x628;&#x648;&#x639;&#x627;&#x62A; &#x641;&#x64A; CSS</title><link>https://academy.hsoub.com/programming/css/%D8%A7%D9%84%D8%AA%D8%B9%D8%A7%D9%85%D9%84-%D9%85%D8%B9-%D8%A3%D8%AC%D9%87%D8%B2%D8%A9-%D8%A7%D9%84%D8%B9%D8%B1%D8%B6-%D8%A7%D9%84%D9%85%D8%AE%D8%AA%D9%84%D9%81%D8%A9-%D9%88%D8%A7%D9%84%D9%85%D8%B7%D8%A8%D9%88%D8%B9%D8%A7%D8%AA-%D9%81%D9%8A-css-r268/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2016_03/css-media-print.png.abf3f45fa57cda73f4e11262ab4e1763.png" /></p>

<p>
	هذا هو الدّرس الأخير في <a href="https://academy.hsoub.com/search/?tags=css+101" rel="">سلسلة تعلّم CSS</a>، ولقد كان اهتمامنا في الدّروس السابقة مُنصبًّا على خصائص CSS وقيمها التي يمكن استخدامها للتأثير في عرض المستند؛ وفي هذا الدّرس سنُعيد النّظر في غايات استخدام CSS وبنية ورقة الأنماط.
</p>

<p style="text-align: center;">
	<img alt="css-media-print.png" class="ipsImage ipsImage_thumbnailed" data-fileid="14125" data-unique="ntj86vop1" src="https://academy.hsoub.com/uploads/monthly_2016_03/css-media-print.png.3347052feaf4c951ec432b8225324574.png"></p>

<p>
	للتذكير، هذا هو فهرس السلسلة:
</p>

<ul>
<li>
		<a data-linktype="link" data-searchable="" href="https://academy.hsoub.com/programming/css/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D8%A3%D9%88%D8%B1%D8%A7%D9%82-%D8%A7%D9%84%D8%A3%D9%86%D9%85%D8%A7%D8%B7-%D8%A7%D9%84%D9%85%D8%AA%D8%AA%D8%A7%D9%84%D9%8A%D8%A9-css-r246/" rel="">مدخل إلى أوراق الأنماط المتتالية (CSS)</a>.
	</li>
	<li>
		<a data-linktype="link" data-searchable="" href="https://academy.hsoub.com/programming/css/%D8%A2%D9%84%D9%8A%D8%A9-%D8%B9%D9%85%D9%84-%D8%AA%D8%B9%D9%84%D9%8A%D9%85%D8%A7%D8%AA-css-%D8%AF%D8%A7%D8%AE%D9%84-%D8%A7%D9%84%D9%85%D8%AA%D8%B5%D9%81%D8%AD%D8%A7%D8%AA-r247/" rel="">آلية عمل تعليمات CSS داخل المتصفحات</a>.
	</li>
	<li>
		<a data-linktype="link" data-searchable="" href="https://academy.hsoub.com/programming/css/%D8%A7%D9%84%D9%85%D8%AD%D8%AF%D8%AF%D8%A7%D8%AA-selectors-%D9%81%D9%8A-css-r249/" rel="">المحددات (Selectors) في CSS</a>.
	</li>
	<li>
		<a data-linktype="link" data-searchable="" href="https://academy.hsoub.com/programming/css/%D8%B1%D8%B5%D9%81-%D8%A7%D9%84%D8%B9%D9%86%D8%A7%D8%B5%D8%B1-layout-%D9%81%D9%8A-css-r264/" rel="">رصف العناصر (Layout) في CSS</a>.
	</li>
	<li>
		<a data-linktype="link" data-searchable="" href="https://academy.hsoub.com/programming/css/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D9%83%D8%AA%D8%A7%D8%A8%D8%A9-%D8%AA%D8%B9%D9%84%D9%8A%D9%85%D8%A7%D8%AA-css-%D9%8A%D8%B3%D9%87%D9%84-%D9%82%D8%B1%D8%A7%D8%A1%D8%AA%D9%87%D8%A7-r250/" rel="">كيفية كتابة تعليمات CSS يسهل قراءتها</a>.
	</li>
	<li>
		<a data-linktype="link" data-searchable="" href="https://academy.hsoub.com/programming/css/%D8%AA%D9%86%D8%B3%D9%8A%D9%82-%D9%86%D8%B5%D9%88%D8%B5-%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-r251/" rel="">تنسيق نصوص صفحات الويب باستخدام CSS</a>.
	</li>
	<li>
		<a data-linktype="link" data-searchable="" href="https://academy.hsoub.com/programming/css/%D8%A7%D9%84%D8%AA%D8%B9%D8%A7%D9%85%D9%84-%D9%85%D8%B9-%D8%A7%D9%84%D8%A3%D9%84%D9%88%D8%A7%D9%86-%D9%81%D9%8A-css-r255/" rel="">التعامل مع الألوان في CSS</a>.
	</li>
	<li>
		<a data-linktype="link" data-searchable="" href="https://academy.hsoub.com/programming/css/%D8%A5%D8%B6%D8%A7%D9%81%D8%A9-%D9%85%D8%AD%D8%AA%D9%88%D9%89-%D8%A5%D9%84%D9%89-%D8%B5%D9%81%D8%AD%D8%A9-%D9%88%D9%8A%D8%A8-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-css-r258/" rel="">إضافة محتوى إلى صفحة ويب باستخدام CSS</a>.
	</li>
	<li>
		<a data-linktype="link" data-searchable="" href="https://academy.hsoub.com/programming/css/%D8%A7%D9%84%D8%AC%D8%AF%D8%A7%D9%88%D9%84-tables-%D9%81%D9%8A-css-r266/" rel="">الجداول (Tables) في CSS</a>.
	</li>
	<li>
		<a data-linktype="link" data-searchable="" href="https://academy.hsoub.com/programming/css/%D8%AA%D8%B9%D8%B1%D9%81-%D8%B9%D9%84%D9%89-%D8%A7%D9%84%D8%B5%D9%86%D8%A7%D8%AF%D9%8A%D9%82-boxes-%D9%81%D9%8A-css-r263/" rel="">تعرف على الصناديق (Boxes) في CSS</a>.
	</li>
	<li>
		<a data-linktype="link" data-searchable="" href="https://academy.hsoub.com/programming/css/%D8%AA%D9%86%D8%B3%D9%8A%D9%82-%D8%A7%D9%84%D9%82%D9%88%D8%A7%D8%A6%D9%85-lists-%D9%81%D9%8A-css-r259/" rel="">تنسيق القوائم (Lists) في CSS</a>.
	</li>
	<li>
		التعامل  مع أجهزة العرض المختلفة والمطبوعات في CSS (هذا الدرس).
	</li>
</ul>
<h2 id="-">
	أجهزة العرض والمطبوعات
</h2>

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

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

<h3 id="-">
	مثال
</h3>

<p>
	يكون للمستند على موقع ويب مجموعة من الروابط الّتي تسمح للانتقال بين صفحات الوقع.
</p>

<p>
	يُستخدم المُعرَّف <code>nav-area</code> على العنصر الأب لمساحة التّنقّل في لغة الرّماز (أو يمكن استخدام الوسم <span style="font-family:courier new,courier,monospace;"><code>&lt;nav&gt;</code></span> بدل ذلك في الإصدار الخامس من HTML).
</p>

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

<pre class="css ipsCode prettyprint prettyprinted" data-pbcklang="css" data-pbcktabsize="">
<span class="lit">@media</span><span class="pln"> </span><span class="kwd">print</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  </span><span class="com">#nav-area { display: none; } </span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	فيما يلي بعض أنواع الوسائط الشّائعة:
</p>

<center>
	<table border="1" cellpadding="10">
<thead><tr>
<th style="padding: 5px 10px;">
					الخاصّية
				</th>
				<th style="padding: 5px 10px;">
					تُشير إلى
				</th>
			</tr></thead>
<tbody>
<tr>
<td style="padding: 5px 10px;">
					<code>screen</code>
				</td>
				<td style="padding: 5px 10px;">
					شاشة عرض ملوّنة
				</td>
			</tr>
<tr>
<td style="padding: 5px 10px;">
					<code>print</code>
				</td>
				<td style="padding: 5px 10px;">
					صفحة مطبوعة
				</td>
			</tr>
<tr>
<td style="padding: 5px 10px;">
					<code>projection</code>
				</td>
				<td style="padding: 5px 10px;">
					جهاز إسقاط
				</td>
			</tr>
<tr>
<td style="padding: 5px 10px;">
					<code>all</code>
				</td>
				<td style="padding: 5px 10px;">
					كل الوسائط (الخيار المبدئيّ)
				</td>
			</tr>
</tbody>
</table>
</center>

<h3 id="-">
	تفاصيل أكثر
</h3>

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

<p>
	قد تسمح لغة الرماز المُستخدمة في المستند بتعيين نوع الوسط عند ربط ورقة الأنماط بالمستند، فمثلًا في HTML يمكن تحديد الخاصّية <code>media</code> على الوسم <code>link</code> لتحقيق ذلك.
</p>

<p>
	ويمكن أيضًا استخدام الأمر ‎<code>@import</code>‎ في CSS الّذي يسمح باستيراد ورقة أنماط من رابطٍ مُعيّن ويسمح أيضًا باشتراط نوع الوسط عند استيراده؛ وهذا يعني أنّه يمكن استخدام ملفات مختلفة لأنواع الوسائط المُختلفة، وهذا مفيد في التنظيم.
</p>

<h2 id="-">
	الطباعة
</h2>

<p>
	توفّر CSS دعمًا لتنسيق الصّفحات المطبوعة.
</p>

<p>
	يمكن استخدام قاعدة تبدأ بـ‎<code>@page </code>‎ لتعيين مقدار هوامش الصّفحة المطبوعة، كما يمكن تعيين هوامش الجانب الأيمن بصورة مختلفة عن مقابلها الأيسر باستخدام ‎<code>@page:left</code>‎ و‎<code>@page:right </code>‎.
</p>

<p>
	تُستخدم عادة واحدات مناسبة للطّباعة مثل البوصة (<code>in</code>) والنُقطة (<code>pt</code> والّتي تساوي 1 من 72 جزءًا من البوصة)، والسنتيمتر (<code>cm</code>) والميلّيمتر (<code>mm</code>)، كما يمكن استخدام واحدة <code>em</code> الّتي تعتمد على حجم الخطّ، والنّسب المئويّة (<code>%</code>).
</p>

<p>
	يمكن التّحكم بموضع فصل المحتوى على صفحتين باستخدام الخواصّ <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/page-break-before" rel="external nofollow"><code>page-break-before</code></a> و <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/page-break-after" rel="external nofollow"><code>page-break-after</code></a> و <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/page-break-inside" rel="external nofollow"><code>page-break-inside</code></a>.
</p>

<h3 id="-">
	مثال
</h3>

<p>
	القاعدة التّالية تعيّن هوامش الصّفحة المطبوعة على كل الجوانب لتساوي بوصة واحدة:
</p>

<pre class="css ipsCode prettyprint prettyprinted" data-pbcklang="css" data-pbcktabsize="">
<span class="lit">@page</span><span class="pln"> </span><span class="pun">{</span><span class="pln">margin</span><span class="pun">:</span><span class="pln"> </span><span class="lit">1in</span><span class="pun">;}</span></pre>

<p>
	القاعدة التّالية تُجبر العناوين الرئيسيّة (<code>h1</code>) على أن تكون في رأس الصّفحة دومًا:
</p>

<pre class="css ipsCode prettyprint prettyprinted" data-pbcklang="css" data-pbcktabsize="">
<span class="pln">h1 </span><span class="pun">{</span><span class="pln">page</span><span class="pun">-</span><span class="kwd">break</span><span class="pun">-</span><span class="pln">before</span><span class="pun">:</span><span class="pln"> always</span><span class="pun">;}</span></pre>

<h3 id="-">
	تفاصيل أكثر
</h3>

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

<h2 id="-">
	واجهة المستخدم
</h2>

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

<p>
	لا توفّر CSS نوع وسيطٍ خاصّ بالأجهزة ذات واجهات المُستخدم.
</p>

<p>
	هناك خمس مُحدِّدات خاصّة:
</p>

<center>
	<table>
<thead><tr>
<th style="padding: 5px 10px;">
					المُحدّد
				</th>
				<th style="padding: 5px 10px;">
					يُحدّد
				</th>
			</tr></thead>
<tbody>
<tr>
<td style="text-align: center;">
					‏<a href="https://developer.mozilla.org/en-US/docs/Web/CSS/:hover" rel="external nofollow"><code>E:hover</code></a>
				</td>
				<td>
					أي عنصر E تمرّ فوقه الفأرة أو جهاز تأشير آخر
				</td>
			</tr>
<tr>
<td style="text-align: center;">
					‏<a href="https://developer.mozilla.org/en-US/docs/Web/CSS/:focus" rel="external nofollow"><code>E:focus</code></a>
				</td>
				<td>
					أي عنصر E استحوذ على تركيز لوحة المفاتيح
				</td>
			</tr>
<tr>
<td style="text-align: center;">
					‏<a href="https://developer.mozilla.org/en-US/docs/Web/CSS/:active" rel="external nofollow"><code>E:active</code></a>
				</td>
				<td>
					أي عنصر E فعّال (أي يتمّ النقر عليه بالفأرة أو بالإصبع...)
				</td>
			</tr>
<tr>
<td style="text-align: center;">
					‏<a href="https://developer.mozilla.org/en-US/docs/Web/CSS/:link" rel="external nofollow"><code>E:link</code></a>
				</td>
				<td>
					أي عنصر E هو رابط لم يزره المستخدم مؤخّرًا.
				</td>
			</tr>
<tr>
<td style="text-align: center;">
					‏<a href="https://developer.mozilla.org/en-US/docs/Web/CSS/:visited" rel="external nofollow"><code>E:visited</code></a>
				</td>
				<td>
					أي عنصر E هو رابط زاره المُستخدم مؤخّرًا.
				</td>
			</tr>
</tbody>
</table>
</center>

<p>
	الخاصّية <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/cursor" rel="external nofollow"><code>cursor</code></a> تسمح بتغيير شكل مؤشّر الفأرة، وفيما يلي بعض الأشكال الشّائعة (مرّر الفأرة فوق كلّ القيمة لترى الشّكل الموافق):
</p>

<center>
	<table>
<thead><tr>
<th>
					المُحدِّد
				</th>
				<th>
					يُحدِّد
				</th>
			</tr></thead>
<tbody>
<tr>
<td style="text-align: center;">
					‏<span style="cursor: pointer;"><code>pointer</code></span>
				</td>
				<td>
					يُشير إلى رابط
				</td>
			</tr>
<tr>
<td style="text-align: center;">
					‏<span style="cursor: wait;"><code>wait</code></span>
				</td>
				<td>
					يُشير إلى أنّ البرنامج لا يستطيع استقبال أي مدخلات لانشغاله
				</td>
			</tr>
<tr>
<td style="text-align: center;">
					‏<span style="cursor: progress;"><code>progress</code></span>
				</td>
				<td>
					يُشير إلى أن البرنامج يُنفّذ أمرًا ما، لكنّه ما زال يستطيع استقبال المُدخلات
				</td>
			</tr>
<tr>
<td style="text-align: center;">
					‏<span style="cursor: default;"><code>default</code></span>
				</td>
				<td>
					المبدئيّ (سهم عادةً)
				</td>
			</tr>
</tbody>
</table>
</center>

<p>
	الخاصّية <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/outline" rel="external nofollow"><code>outline</code></a> تُنشئ خطًّا حول العنصر يُستخدم عادةً للإشارة إلى استحواذه على تركيز لوحة المقاتيح، وتكون قيمتها مُشابهة لقيم <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/border" rel="external nofollow"><code>border</code></a>، إلّا أنه لا يمكن تعيين قيم مختلفة لكلّ جانب من الخطّ.
</p>

<p>
	بعض المزايا الأخرى لواجهات الاستخدام تعتمد على خواص الوسوم (attributes)، فمثلًا يمكن جعل العنصر مُعطّلًا (disabled) أو السّماح بقراءته فقط (read-only) بالخاصّتين <code>disabled</code> و <code>readonly</code> على التّرتيب، ثمّ يمكن استهداف العناصر الّتي تحمل هذه الخواصّ في CSS، كأي خواصّ أخرى، بجعلها ضمن قوسين مُربّعين هكذا: <code>[disabled]</code> و <code>[readonly]</code>.
</p>

<h3 id="-">
	مثال
</h3>

<p>
	القاعدة التالية تعيّن تنسيق زرّ يتغيرّ استجابة لتفاعل المُستخدم:
</p>

<pre class="css ipsCode prettyprint prettyprinted" data-pbcklang="css" data-pbcktabsize="">
<span class="pun">.</span><span class="pln">green</span><span class="pun">-</span><span class="pln">button </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">cec</span><span class="pun">;</span><span class="pln">
  color</span><span class="pun">:#</span><span class="pln">black</span><span class="pun">;</span><span class="pln">
  border</span><span class="pun">:</span><span class="lit">2px</span><span class="pln"> outset </span><span class="com">#cec;</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">button</span><span class="pun">[</span><span class="pln">disabled</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">cdc</span><span class="pun">;</span><span class="pln">
  color</span><span class="pun">:#</span><span class="lit">777</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">button</span><span class="pun">:</span><span class="pln">active </span><span class="pun">{</span><span class="pln">
  border</span><span class="pun">-</span><span class="pln">style</span><span class="pun">:</span><span class="pln"> inset</span><span class="pun">;</span><span class="pln">
  </span><span class="pun">}</span></pre>

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

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="12253" href="https://academy.hsoub.com/uploads/monthly_2016_01/button.png.15660c0d3a80549402b0b3b801867929.png" rel="external"><img alt="button.png" class="ipsImage ipsImage_thumbnailed" data-fileid="12253" src="https://academy.hsoub.com/uploads/monthly_2016_01/button.thumb.png.d8ff874d201dea3dffd818f21a96d187.png"></a>
</p>

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

<h2 id="-">
	تدريب: طباعة مستند
</h2>

<ol>
<li>
		أنشئ مستند HTML جديدًا، سمّه <code>doc4.html</code>، والصق فيه ما يلي:

		<pre class="html ipsCode prettyprint prettyprinted" data-pbcklang="html" data-pbcktabsize="">
<span class="dec">&lt;!DOCTYPE html&gt;</span><span class="pln">
</span><span class="tag">&lt;html&gt;</span><span class="pln">
 </span><span class="tag">&lt;head&gt;</span><span class="pln">
   </span><span class="tag">&lt;title&gt;</span><span class="pln">Print sample</span><span class="tag">&lt;/title&gt;</span><span class="pln">
   </span><span class="tag">&lt;link</span><span class="pln"> </span><span class="atn">rel</span><span class="pun">=</span><span class="atv">"stylesheet"</span><span class="pln"> </span><span class="atn">href</span><span class="pun">=</span><span class="atv">"style4.css"</span><span class="tag">&gt;</span><span class="pln">
 </span><span class="tag">&lt;/head&gt;</span><span class="pln">
 </span><span class="tag">&lt;body&gt;</span><span class="pln">
   </span><span class="tag">&lt;h1&gt;</span><span class="pln">Section A</span><span class="tag">&lt;/h1&gt;</span><span class="pln">
   </span><span class="tag">&lt;p&gt;</span><span class="pln">This is the first section...</span><span class="tag">&lt;/p&gt;</span><span class="pln">
   </span><span class="tag">&lt;h1&gt;</span><span class="pln">Section B</span><span class="tag">&lt;/h1&gt;</span><span class="pln">
   </span><span class="tag">&lt;p&gt;</span><span class="pln">This is the second section...</span><span class="tag">&lt;/p&gt;</span><span class="pln">
   </span><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"print-head"</span><span class="tag">&gt;</span><span class="pln">
     Heading for paged media
   </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">id</span><span class="pun">=</span><span class="atv">"print-foot"</span><span class="tag">&gt;</span><span class="pln">
     Page: 
   </span><span class="tag">&lt;/div&gt;</span><span class="pln">
</span><span class="tag">&lt;/body&gt;</span><span class="pln">
</span><span class="tag">&lt;/html&gt;</span></pre>
	</li>
	<li>
		<p>
			أنشئ ورقة أنماط جديدة، سمّها <code>style4.css</code> والصق فيها ما يلي:
		</p>

		<pre class="css ipsCode prettyprint prettyprinted" data-pbcklang="css" data-pbcktabsize="">
<span class="com">/*** Print sample ***/</span><span class="pln">

</span><span class="com">/* defaults  for screen */</span><span class="pln">
</span><span class="com">#print-head,</span><span class="pln">
</span><span class="com">#print-foot {</span><span class="pln">
 display</span><span class="pun">:</span><span class="pln"> none</span><span class="pun">;</span><span class="pln">
 </span><span class="pun">}</span><span class="pln">

</span><span class="com">/* print only */</span><span class="pln">
</span><span class="lit">@media</span><span class="pln"> </span><span class="kwd">print</span><span class="pln"> </span><span class="pun">{</span><span class="pln">

h1 </span><span class="pun">{</span><span class="pln">
 page</span><span class="pun">-</span><span class="kwd">break</span><span class="pun">-</span><span class="pln">before</span><span class="pun">:</span><span class="pln"> always</span><span class="pun">;</span><span class="pln">
 padding</span><span class="pun">-</span><span class="pln">top</span><span class="pun">:</span><span class="pln"> </span><span class="lit">2em</span><span class="pun">;</span><span class="pln">
 </span><span class="pun">}</span><span class="pln">

h1</span><span class="pun">:</span><span class="pln">first</span><span class="pun">-</span><span class="pln">child </span><span class="pun">{</span><span class="pln">
 page</span><span class="pun">-</span><span class="kwd">break</span><span class="pun">-</span><span class="pln">before</span><span class="pun">:</span><span class="pln"> avoid</span><span class="pun">;</span><span class="pln">
 counter</span><span class="pun">-</span><span class="pln">reset</span><span class="pun">:</span><span class="pln"> page</span><span class="pun">;</span><span class="pln">
 </span><span class="pun">}</span><span class="pln">

</span><span class="com">#print-head {</span><span class="pln">
 display</span><span class="pun">:</span><span class="pln"> block</span><span class="pun">;</span><span class="pln">
 position</span><span class="pun">:</span><span class="pln"> </span><span class="kwd">fixed</span><span class="pun">;</span><span class="pln">
 top</span><span class="pun">:</span><span class="pln"> </span><span class="lit">0pt</span><span class="pun">;</span><span class="pln">
 left</span><span class="pun">:</span><span class="lit">0pt</span><span class="pun">;</span><span class="pln">
 right</span><span class="pun">:</span><span class="pln"> </span><span class="lit">0pt</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">200</span><span class="pun">%;</span><span class="pln">
 text</span><span class="pun">-</span><span class="pln">align</span><span class="pun">:</span><span class="pln"> center</span><span class="pun">;</span><span class="pln">
 </span><span class="pun">}</span><span class="pln">

</span><span class="com">#print-foot {</span><span class="pln">
 display</span><span class="pun">:</span><span class="pln"> block</span><span class="pun">;</span><span class="pln">
 position</span><span class="pun">:</span><span class="pln"> </span><span class="kwd">fixed</span><span class="pun">;</span><span class="pln">
 bottom</span><span class="pun">:</span><span class="pln"> </span><span class="lit">0pt</span><span class="pun">;</span><span class="pln">
 right</span><span class="pun">:</span><span class="pln"> </span><span class="lit">0pt</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">200</span><span class="pun">%;</span><span class="pln">
 </span><span class="pun">}</span><span class="pln">

</span><span class="com">#print-foot:after {</span><span class="pln">
 content</span><span class="pun">:</span><span class="pln"> counter</span><span class="pun">(</span><span class="pln">page</span><span class="pun">);</span><span class="pln">
 counter</span><span class="pun">-</span><span class="pln">increment</span><span class="pun">:</span><span class="pln"> page</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">/* end print only */</span></pre>
	</li>
	<li>
		اعرض المستند في متصفّحك. يستخدم المستند تنسيق المتصفّح المبدئيّ.
	</li>
	<li>
		اطبع المستند (أو عاينه قبل الطّباعة)، تجعل ورقة الأنماط كلّ قسم في صفحة مستقلّة، وتُضيف ترويسة وتذييلًا لكل صفحة، وتستخدم رقم الصّفحة في التّذييل (فقط إن كان المتصفّح يدعم العدّادات).
	</li>
</ol>
<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="12252" href="https://academy.hsoub.com/uploads/monthly_2016_01/print.png.fb0134a789bb9662ddb8f3aa8f35ba95.png" rel="external"><img alt="print.png" class="ipsImage ipsImage_thumbnailed" data-fileid="12252" src="https://academy.hsoub.com/uploads/monthly_2016_01/print.thumb.png.0df4219af70b11be9f5670b2275c5ae7.png"></a>
</p>

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

<p>
	انقل التنسيق الخاصّ بالطّباعة إلى ملفّ CSS مُستقلّ، ثمّ راجع صفحة <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/@import" rel="external nofollow">‎<code>@import</code>‎</a> لإيجاد كيفيّة استيراد ورقة أنماط للوسائط المطبوعة ضمن ملفّ <code>style4.css</code>.
</p>

<p>
	اجعل العناوين زرقاء عندما يحطّ فوقها مؤشّر الفأرة.
</p>

<div class="challenge">
	<input id="input_solution" name="input_solution" type="checkbox"><label for="input_solution"> شاهد الحل </label>

	<div class="solution">
		<h3 id="-">
			ملف منفصل لتنسيق الطباعة
		</h3>

		<p>
			قص السّطور بين <code>/* print only */</code> و<code>/* end print only */</code> والصقها ضمن ملفّ سمّه <code>style4_print.css</code>، ثمّ أضف السّطر التّالي لبداية الملفّ <code>style4.css</code>:
		</p>

		<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_6363_7">
<span class="lit">@import</span><span class="pln"> url</span><span class="pun">(</span><span class="str">"style4_print.css"</span><span class="pun">)</span><span class="pln"> </span><span class="kwd">print</span><span class="pun">;</span></pre>

		<h3 id="-">
			لون العناوين عندما يحط المؤشر فوقها
		</h3>

		<p>
			القاعدة التّالية تُحقّق التأثير المطلوب:
		</p>

		<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_6363_9">
<span class="pln">h1</span><span class="pun">:</span><span class="pln">hover </span><span class="pun">{</span><span class="pln">
  color</span><span class="pun">:</span><span class="pln"> blue</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/Guide/CSS/Getting_Started/Media" rel="external nofollow">Media</a> من سلسلة <a href="https://developer.mozilla.org/en-US/docs/Web/Guide/CSS/Getting_started" rel="external nofollow" target="_blank">Getting started with CSS</a> على شبكة مطوّري Mozilla.
		</p>
	</div>
</div>
]]></description><guid isPermaLink="false">268</guid><pubDate>Thu, 24 Mar 2016 22:37:00 +0000</pubDate></item><item><title>&#x62A;&#x639;&#x631;&#x641; &#x639;&#x644;&#x649; &#x627;&#x644;&#x635;&#x646;&#x627;&#x62F;&#x64A;&#x642; (Boxes) &#x641;&#x64A; CSS</title><link>https://academy.hsoub.com/programming/css/%D8%AA%D8%B9%D8%B1%D9%81-%D8%B9%D9%84%D9%89-%D8%A7%D9%84%D8%B5%D9%86%D8%A7%D8%AF%D9%8A%D9%82-boxes-%D9%81%D9%8A-css-r263/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2016_03/css-boxes.png.6be5db901e58e3aa487acc7e6df48187.png" /></p>

<p>
	في هذا الدّرس من <a href="https://academy.hsoub.com/search/?tags=css+101" rel="">سلسلة تعلّم CSS</a>، سنشرح كيف يمكن استخدام CSS للتحكّم بالمساحة الّتي تحتلّها العناصر عندما تُعرض في الصّفحة، وسنتدرّب على ذلك بتغيير المساحة وإضافة بعض القواعد الّتي تؤثر على هيئة العناصر.
</p>

<p style="text-align: center;">
	<img alt="css-boxes.png" class="ipsImage ipsImage_thumbnailed" data-fileid="13980" data-unique="by6fmj3qs" src="https://academy.hsoub.com/uploads/monthly_2016_03/css-boxes.png.f384c7bfe617ec34f45e0d6443de2fc5.png"></p>

<p style="box-sizing: border-box; line-height: 35.2px; text-align: justify; color: rgb(39, 42, 52); font-family: 'Droid Arabic Naskh', 'Open Sans', 'Helvetica Neue', Helvetica, Tahoma, Arial, sans-serif; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 1; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);">
	فهرس السلسلة:
</p>

<ul style="box-sizing: border-box; color: rgb(39, 42, 52); font-family: 'Droid Arabic Naskh', 'Open Sans', 'Helvetica Neue', Helvetica, Tahoma, Arial, sans-serif; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 35.2px; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 1; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);">
<li style="box-sizing: border-box;">
		<a href="https://academy.hsoub.com/programming/css/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D8%A3%D9%88%D8%B1%D8%A7%D9%82-%D8%A7%D9%84%D8%A3%D9%86%D9%85%D8%A7%D8%B7-%D8%A7%D9%84%D9%85%D8%AA%D8%AA%D8%A7%D9%84%D9%8A%D8%A9-css-r246/" rel="" style="box-sizing: border-box; color: rgb(0, 201, 165); text-decoration: underline; background-color: transparent;">مدخل إلى أوراق الأنماط المتتالية (CSS)</a>.
	</li>
	<li style="box-sizing: border-box;">
		<a href="https://academy.hsoub.com/programming/css/%D8%A2%D9%84%D9%8A%D8%A9-%D8%B9%D9%85%D9%84-%D8%AA%D8%B9%D9%84%D9%8A%D9%85%D8%A7%D8%AA-css-%D8%AF%D8%A7%D8%AE%D9%84-%D8%A7%D9%84%D9%85%D8%AA%D8%B5%D9%81%D8%AD%D8%A7%D8%AA-r247/" rel="">آلية عمل تعليمات CSS داخل المتصفحات</a>.
	</li>
	<li style="box-sizing: border-box;">
		<a data-linktype="link" data-searchable="" href="https://academy.hsoub.com/programming/css/%D8%A7%D9%84%D9%85%D8%AD%D8%AF%D8%AF%D8%A7%D8%AA-selectors-%D9%81%D9%8A-css-r249/" rel="" style="box-sizing: border-box; color: rgb(0, 201, 165); text-decoration: underline; background-color: transparent;">المحددات (Selectors) في CSS</a>.
	</li>
	<li style="box-sizing: border-box;">
		<a data-linktype="link" data-searchable="" href="https://academy.hsoub.com/programming/css/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D9%83%D8%AA%D8%A7%D8%A8%D8%A9-%D8%AA%D8%B9%D9%84%D9%8A%D9%85%D8%A7%D8%AA-css-%D9%8A%D8%B3%D9%87%D9%84-%D9%82%D8%B1%D8%A7%D8%A1%D8%AA%D9%87%D8%A7-r250/" rel="" style="box-sizing: border-box; color: rgb(0, 201, 165); text-decoration: underline; background-color: transparent;">كيفية كتابة تعليمات CSS يسهل قراءتها</a>.
	</li>
	<li style="box-sizing: border-box;">
		<a data-linktype="link" data-searchable="" href="https://academy.hsoub.com/programming/css/%D8%AA%D9%86%D8%B3%D9%8A%D9%82-%D9%86%D8%B5%D9%88%D8%B5-%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-r251/" rel="" style="box-sizing: border-box; color: rgb(0, 201, 165); text-decoration: underline; background-color: transparent;">تنسيق نصوص صفحات الويب باستخدام CSS</a>.
	</li>
	<li style="box-sizing: border-box;">
		<a data-linktype="link" data-searchable="" href="https://academy.hsoub.com/programming/css/%D8%A7%D9%84%D8%AA%D8%B9%D8%A7%D9%85%D9%84-%D9%85%D8%B9-%D8%A7%D9%84%D8%A3%D9%84%D9%88%D8%A7%D9%86-%D9%81%D9%8A-css-r255/" rel="" style="box-sizing: border-box; color: rgb(0, 201, 165); text-decoration: underline; background-color: transparent;">التعامل مع الألوان في CSS</a>.
	</li>
	<li style="box-sizing: border-box;">
		<a data-linktype="link" data-searchable="" href="https://academy.hsoub.com/programming/css/%D8%A5%D8%B6%D8%A7%D9%81%D8%A9-%D9%85%D8%AD%D8%AA%D9%88%D9%89-%D8%A5%D9%84%D9%89-%D8%B5%D9%81%D8%AD%D8%A9-%D9%88%D9%8A%D8%A8-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-css-r258/" rel="" style="box-sizing: border-box; color: rgb(0, 201, 165); text-decoration: underline; background-color: transparent;">إضافة محتوى إلى صفحة ويب باستخدام CSS</a>.
	</li>
	<li style="box-sizing: border-box;">
		<a data-linktype="link" data-searchable="" href="https://academy.hsoub.com/programming/css/%D8%AA%D9%86%D8%B3%D9%8A%D9%82-%D8%A7%D9%84%D9%82%D9%88%D8%A7%D8%A6%D9%85-lists-%D9%81%D9%8A-css-r259/" rel="" style="box-sizing: border-box; color: rgb(0, 201, 165); text-decoration: underline; background-color: transparent;">تنسيق القوائم (Lists) في CSS</a>.
	</li>
	<li style="box-sizing: border-box;">
		تعرف على الصناديق (Boxes) في CSS. (هذا الدرس)
	</li>
	<li style="box-sizing: border-box;">
		<a data-linktype="link" data-searchable="" href="https://academy.hsoub.com/programming/css/%D8%B1%D8%B5%D9%81-%D8%A7%D9%84%D8%B9%D9%86%D8%A7%D8%B5%D8%B1-layout-%D9%81%D9%8A-css-r264/" rel="" style="box-sizing: border-box; color: rgb(0, 201, 165); text-decoration: underline; background-color: transparent;">رصف العناصر (Layout) في CSS</a>.
	</li>
	<li style="box-sizing: border-box;">
		<a data-linktype="link" data-searchable="" href="https://academy.hsoub.com/programming/css/%D8%A7%D9%84%D8%AC%D8%AF%D8%A7%D9%88%D9%84-tables-%D9%81%D9%8A-css-r266/" rel="" style="box-sizing: border-box; color: rgb(0, 201, 165); text-decoration: underline; background-color: transparent;">الجداول (Tables) في CSS</a>.
	</li>
	<li style="box-sizing: border-box;">
		<a href="https://academy.hsoub.com/programming/css/%D8%A7%D9%84%D8%AA%D8%B9%D8%A7%D9%85%D9%84-%D9%85%D8%B9-%D8%A3%D8%AC%D9%87%D8%B2%D8%A9-%D8%A7%D9%84%D8%B9%D8%B1%D8%B6-%D8%A7%D9%84%D9%85%D8%AE%D8%AA%D9%84%D9%81%D8%A9-%D9%88%D8%A7%D9%84%D9%85%D8%B7%D8%A8%D9%88%D8%B9%D8%A7%D8%AA-%D9%81%D9%8A-css-r268/" rel="" style="box-sizing: border-box; color: rgb(0, 201, 165); text-decoration: underline; background-color: transparent;">التعامل مع أجهزة العرض المختلفة والمطبوعات في CSS</a>.
	</li>
</ul>
<h2 id="-boxes-">
	الصناديق (Boxes)
</h2>

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

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

<p>
	يظهر اللون الرمادي الفاتح أجزاء التّخطيط:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2016_01/boxes-1.png.7a85cea792cedd947db9dc855d912d1b.png" data-fileid="12052" rel="external"><img alt="boxes-1.png" class="ipsImage ipsImage_thumbnailed" data-fileid="12052" src="https://academy.hsoub.com/uploads/monthly_2016_01/boxes-1.thumb.png.f3209980474b910263ab89f16df2cfcc.png"></a>
</p>

<p>
	هذا ما تراه في المتصفّح:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2016_01/boxes-2.png.4f64a2678a0c1e1eb19c3c4fea86c9df.png" data-fileid="12054" rel="external"><img alt="boxes-2.png" class="ipsImage ipsImage_thumbnailed" data-fileid="12054" src="https://academy.hsoub.com/uploads/monthly_2016_01/boxes-2.thumb.png.424936e202e296f31aa10efe3e3e347e.png"></a>
</p>

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

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

<p>
	للعنصر خلفيّة خضراء:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2016_01/boxes-3.png.77f20cb2e8fe9ab2730d46875d0f236f.png" data-fileid="12051" rel="external"><img alt="boxes-3.png" class="ipsImage ipsImage_thumbnailed" data-fileid="12051" src="https://academy.hsoub.com/uploads/monthly_2016_01/boxes-3.thumb.png.ddc33866b8fa825dd256d5b6c225b50c.png"></a>
</p>

<p>
	هذا ما تراه في المتصفّح:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2016_01/boxes-4.png.d7ebdb76bfad0e2cb98ff77794537a74.png" data-fileid="12053" rel="external"><img alt="boxes-4.png" class="ipsImage ipsImage_thumbnailed" data-fileid="12053" src="https://academy.hsoub.com/uploads/monthly_2016_01/boxes-4.thumb.png.6c9ff6d1bd618e47276d01dee3383231.png"></a>
</p>

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

<p>
	يمكن استخدام الحدود لتزيين العناصر بخطوط أو صناديق.
</p>

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

<p>
	فيما يلي التنسيقات المُتاحة:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2016_01/borders.png.ff452245586bd2aee6c4b977c2a308a0.png" data-fileid="12050" rel="external"><img alt="borders.png" class="ipsImage ipsImage_thumbnailed" data-fileid="12050" src="https://academy.hsoub.com/uploads/monthly_2016_01/borders.thumb.png.a7bd8bd3e51bc09998b7ca65e16ceecb.png"></a>
</p>

<p>
	يمكن أيضًا تعيين التنسيق إلى <code>none</code> أو <code>hidden</code> للنّص صراحة على إزالته، أو تعيينه إلى <code>transparent</code> لجعله غير مرئيّ رغم شغله للمساحة المخصّصة له.
</p>

<p>
	لتعيين الحدود لكلّ جانب على حدة، استخدم الخصائص <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/border-top" rel="external nofollow"><code>border-top</code></a> و <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/border-right" rel="external nofollow"><code>border-right</code></a> و <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/border-bottom" rel="external nofollow"><code>border-bottom</code></a> و <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/border-left" rel="external nofollow"><code>border-left</code></a>. يمكن استخدام إحدى الخواص لتعيين الحدّ على الجانب الموافق فقط، أو استخدامها معًا لتعيين حدود مختلفة التنسيق على الجوانب المختلفة.
</p>

<h3 id="-">
	مثال
</h3>

<p>
	هذه القاعدة تحدّد لون خلفيّة العناوين وتنسيق حدودها العلويّة:
</p>

<pre class="css ipsCode prettyprint prettyprinted" data-pbcklang="css" data-pbcktabsize="">
<span class="pln">h3 </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">4px</span><span class="pln"> solid </span><span class="com">#7c7; /* mid green */</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">#efe;     /* pale green */</span><span class="pln">
  color</span><span class="pun">:</span><span class="pln"> </span><span class="com">#050;                /* dark green */</span><span class="pln">
  </span><span class="pun">}</span></pre>

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

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2016_01/stylish-heading.png.e940391bddd64d787109b12a14590cb3.png" data-fileid="12049" rel="external"><img alt="stylish-heading.png" class="ipsImage ipsImage_thumbnailed" data-fileid="12049" src="https://academy.hsoub.com/uploads/monthly_2016_01/stylish-heading.thumb.png.03e8ed5ffb83fc1d351fa87997da97f5.png"></a>
</p>

<p>
	هذه القاعدة تجعل الصّور أسهل تمييزًا بإحاطتها بحدود رماديّة:
</p>

<pre class="css ipsCode prettyprint prettyprinted" data-pbcklang="css" data-pbcktabsize="">
<span class="pln">img </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 </span><span class="com">#ccc;}</span></pre>

<p>
	النّتيجة:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2016_01/img-border.png.fd64e97b21fb1fd9b91ca704c3296dd4.png" data-fileid="12048" rel="external"><img alt="img-border.png" class="ipsImage ipsImage_thumbnailed" data-fileid="12048" src="https://academy.hsoub.com/uploads/monthly_2016_01/img-border.thumb.png.d18a4ac7c931e61a0fc6710f61549fbf.png"></a>
</p>

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

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

<p>
	استخدم الخاصّة <code>margin</code> أو <code>padding</code> لتعيين عرض الحوافّ والحشوات (على التّرتيب).
</p>

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

<p>
	إن قمت بتعيين قيمتين للخاصّة، فإنّ الأولى تطبّق على الجانبين العلوي والسّفليّ، والثّانية تُطبّق على الجانبين اليمين واليسار.
</p>

<p>
	إن قمت بتعيين 4 قيم، فإنّها تطبّق بهذا التّرتيب: فوق، يمين، تحت، يسار.
</p>

<h3 id="-">
	مثال
</h3>

<p>
	القاعدة التاليّة تجعل الفقرات ذات الصّنف <code>remark</code> مُميّزة بإعطاءها حوافّ حمراء محيطة بها بالكامل.
</p>

<p>
	تفصل الحشوة الحدود عن محتوى العنصر قليلًا.
</p>

<p>
	تدفع الحوافّ على الجانب الأيسر الفقرة بعيدًا قليلًا عن النّص المجاور.
</p>

<pre class="css ipsCode prettyprint prettyprinted" data-pbcklang="css" data-pbcktabsize="">
<span class="pln">p</span><span class="pun">.</span><span class="pln">remark </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 red</span><span class="pun">;</span><span class="pln">
  padding</span><span class="pun">:</span><span class="pln"> </span><span class="lit">4px</span><span class="pun">;</span><span class="pln">
  margin</span><span class="pun">-</span><span class="pln">left</span><span class="pun">:</span><span class="pln"> </span><span class="lit">24px</span><span class="pun">;</span><span class="pln">
  </span><span class="pun">}</span></pre>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2016_01/remark.png.9f3e0f1fe0e22156f6d46157714b62dc.png" data-fileid="12047" rel="external"><img alt="remark.png" class="ipsImage ipsImage_thumbnailed" data-fileid="12047" src="https://academy.hsoub.com/uploads/monthly_2016_01/remark.thumb.png.f5ebb88921b9a6670c1132e2dfdbe907.png"></a>
</p>

<h3 id="-">
	تفاصيل أكثر
</h3>

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

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

<h2 id="-">
	تمرين: إضافة الحدود
</h2>

<p>
	عدّل ملف CSS المٌسمّى <code>style2.css</code>، مُضيفًا هذه القاعدة لرسم خطّ في الصفحة فوق كلّ عنوان:
</p>

<pre class="css ipsCode prettyprint prettyprinted" data-pbcklang="css" data-pbcktabsize="">
<span class="pln">h3 </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">1px</span><span class="pln"> solid gray</span><span class="pun">;}</span></pre>

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

<pre class="css ipsCode prettyprint prettyprinted" data-pbcklang="css" data-pbcktabsize="">
<span class="pln">li </span><span class="pun">{</span><span class="pln">
  list</span><span class="pun">-</span><span class="pln">style</span><span class="pun">:</span><span class="pln"> lower</span><span class="pun">-</span><span class="pln">roman</span><span class="pun">;</span><span class="pln">
  margin</span><span class="pun">-</span><span class="pln">bottom</span><span class="pun">:</span><span class="pln"> </span><span class="lit">8px</span><span class="pun">;</span><span class="pln">
  </span><span class="pun">}</span></pre>

<p>
	حدّث المتصفّح لمشاهدة النّتيجة:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2016_01/c-box.png.0813541be73e47552663ef273390d5ca.png" data-fileid="12046" rel="external"><img alt="c-box.png" class="ipsImage ipsImage_thumbnailed" data-fileid="12046" src="https://academy.hsoub.com/uploads/monthly_2016_01/c-box.thumb.png.ff738106bff386dd23bd1b8b44da18a1.png"></a>
</p>

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

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

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2016_01/oceans.png.883d1ccc135ba2558d73975f54cc7856.png" data-fileid="12045" rel="external"><img alt="oceans.png" class="ipsImage ipsImage_thumbnailed" data-fileid="12045" src="https://academy.hsoub.com/uploads/monthly_2016_01/oceans.thumb.png.f2170b74945788f496c6cfd104ca3875.png"></a>
</p>

<p>
	(ليس عليك مطابقة الأبعاد والألوان بحذافيرها).
</p>

<div class="challenge">
	<input id="input_solution" name="input_solution" type="checkbox"><label for="input_solution"> شاهد الحل </label>
	<div class="solution">
		<p>
			القاعدة التّالية تحقّق التأثير المطلوب:
		</p>

		<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_5399_7">
<span class="pln">ul </span><span class="pun">{</span><span class="pln">
  border</span><span class="pun">:</span><span class="pln"> </span><span class="lit">10px</span><span class="pln"> solid lightblue</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></pre>

		<p>
			 
		</p>
	</div>
</div>

<h2 id="-">
	ما التالي؟
</h2>

<p>
	غيّرنا تخطيط بالمستند بتعيين الحوافّ والحشوات، سنتعلّم في الدّرس القادم <a href="https://academy.hsoub.com/programming/css/%D8%B1%D8%B5%D9%81-%D8%A7%D9%84%D8%B9%D9%86%D8%A7%D8%B5%D8%B1-layout-%D9%81%D9%8A-css-r264/" rel="">كيف نغيّر تخطيط المستندات بطرق أخرى</a>.
</p>

<p>
	ترجمة -وبتصرف- للمقال <a href="https://developer.mozilla.org/en-US/docs/Web/Guide/CSS/Getting_Started/Boxes" rel="external nofollow">Boxes</a> من سلسلة <a href="https://developer.mozilla.org/en-US/docs/Web/Guide/CSS/Getting_started" rel="external nofollow" target="_blank">Getting started with CSS</a> على شبكة مطوّري Mozilla.
</p>
]]></description><guid isPermaLink="false">263</guid><pubDate>Sun, 20 Mar 2016 22:00:00 +0000</pubDate></item><item><title>&#x627;&#x644;&#x62C;&#x62F;&#x627;&#x648;&#x644; (Tables) &#x641;&#x64A; CSS</title><link>https://academy.hsoub.com/programming/css/%D8%A7%D9%84%D8%AC%D8%AF%D8%A7%D9%88%D9%84-tables-%D9%81%D9%8A-css-r266/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2016_03/css-tables.png.90366d7a94b2c051a4632af4ed4ecdae.png" /></p>

<p>
	في هذا الدرس من <a href="https://academy.hsoub.com/search/?tags=css+101" rel="">سلسلة تعلّم CSS</a>، سنشرح استخدام المُحدّدات المُتقدّمة، وبعض طرق تنسيق الجداول؛ وسنتدرّب على ذلك بإنشاء مستند جديد يحوي جدولًا، ثمّ نُرفقه بورقة أنماط.
</p>

<p style="text-align: center;">
	<img alt="css-tables.png" class="ipsImage ipsImage_thumbnailed" data-fileid="14122" data-unique="3un03zozd" src="https://academy.hsoub.com/uploads/monthly_2016_03/css-tables.png.0d4bb13b92478de06775a68694bccc8a.png"></p>

<p style="box-sizing: border-box; line-height: 35.2px; text-align: justify; color: rgb(39, 42, 52); font-family: 'Droid Arabic Naskh', 'Open Sans', 'Helvetica Neue', Helvetica, Tahoma, Arial, sans-serif; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 1; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);">
	فهرس السلسلة:
</p>

<ul style="box-sizing: border-box; color: rgb(39, 42, 52); font-family: 'Droid Arabic Naskh', 'Open Sans', 'Helvetica Neue', Helvetica, Tahoma, Arial, sans-serif; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 35.2px; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 1; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);">
<li style="box-sizing: border-box;">
		<a href="https://academy.hsoub.com/programming/css/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D8%A3%D9%88%D8%B1%D8%A7%D9%82-%D8%A7%D9%84%D8%A3%D9%86%D9%85%D8%A7%D8%B7-%D8%A7%D9%84%D9%85%D8%AA%D8%AA%D8%A7%D9%84%D9%8A%D8%A9-css-r246/" rel="" style="box-sizing: border-box; color: rgb(0, 201, 165); text-decoration: underline; background-color: transparent;">مدخل إلى أوراق الأنماط المتتالية (CSS)</a>.
	</li>
	<li style="box-sizing: border-box;">
		<a href="https://academy.hsoub.com/programming/css/%D8%A2%D9%84%D9%8A%D8%A9-%D8%B9%D9%85%D9%84-%D8%AA%D8%B9%D9%84%D9%8A%D9%85%D8%A7%D8%AA-css-%D8%AF%D8%A7%D8%AE%D9%84-%D8%A7%D9%84%D9%85%D8%AA%D8%B5%D9%81%D8%AD%D8%A7%D8%AA-r247/" rel="">آلية عمل تعليمات CSS داخل المتصفحات</a>.
	</li>
	<li style="box-sizing: border-box;">
		<a data-linktype="link" data-searchable="" href="https://academy.hsoub.com/programming/css/%D8%A7%D9%84%D9%85%D8%AD%D8%AF%D8%AF%D8%A7%D8%AA-selectors-%D9%81%D9%8A-css-r249/" rel="" style="box-sizing: border-box; color: rgb(0, 201, 165); text-decoration: underline; background-color: transparent;">المحددات (Selectors) في CSS</a>.
	</li>
	<li style="box-sizing: border-box;">
		<a data-linktype="link" data-searchable="" href="https://academy.hsoub.com/programming/css/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D9%83%D8%AA%D8%A7%D8%A8%D8%A9-%D8%AA%D8%B9%D9%84%D9%8A%D9%85%D8%A7%D8%AA-css-%D9%8A%D8%B3%D9%87%D9%84-%D9%82%D8%B1%D8%A7%D8%A1%D8%AA%D9%87%D8%A7-r250/" rel="" style="box-sizing: border-box; color: rgb(0, 201, 165); text-decoration: underline; background-color: transparent;">كيفية كتابة تعليمات CSS يسهل قراءتها</a>.
	</li>
	<li style="box-sizing: border-box;">
		<a data-linktype="link" data-searchable="" href="https://academy.hsoub.com/programming/css/%D8%AA%D9%86%D8%B3%D9%8A%D9%82-%D9%86%D8%B5%D9%88%D8%B5-%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-r251/" rel="" style="box-sizing: border-box; color: rgb(0, 201, 165); text-decoration: underline; background-color: transparent;">تنسيق نصوص صفحات الويب باستخدام CSS</a>.
	</li>
	<li style="box-sizing: border-box;">
		<a data-linktype="link" data-searchable="" href="https://academy.hsoub.com/programming/css/%D8%A7%D9%84%D8%AA%D8%B9%D8%A7%D9%85%D9%84-%D9%85%D8%B9-%D8%A7%D9%84%D8%A3%D9%84%D9%88%D8%A7%D9%86-%D9%81%D9%8A-css-r255/" rel="" style="box-sizing: border-box; color: rgb(0, 201, 165); text-decoration: underline; background-color: transparent;">التعامل مع الألوان في CSS</a>.
	</li>
	<li style="box-sizing: border-box;">
		<a data-linktype="link" data-searchable="" href="https://academy.hsoub.com/programming/css/%D8%A5%D8%B6%D8%A7%D9%81%D8%A9-%D9%85%D8%AD%D8%AA%D9%88%D9%89-%D8%A5%D9%84%D9%89-%D8%B5%D9%81%D8%AD%D8%A9-%D9%88%D9%8A%D8%A8-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-css-r258/" rel="" style="box-sizing: border-box; color: rgb(0, 201, 165); text-decoration: underline; background-color: transparent;">إضافة محتوى إلى صفحة ويب باستخدام CSS</a>.
	</li>
	<li style="box-sizing: border-box;">
		<a data-linktype="link" data-searchable="" href="https://academy.hsoub.com/programming/css/%D8%AA%D9%86%D8%B3%D9%8A%D9%82-%D8%A7%D9%84%D9%82%D9%88%D8%A7%D8%A6%D9%85-lists-%D9%81%D9%8A-css-r259/" rel="" style="box-sizing: border-box; color: rgb(0, 201, 165); text-decoration: underline; background-color: transparent;">تنسيق القوائم (Lists) في CSS</a>.
	</li>
	<li style="box-sizing: border-box;">
		<a data-linktype="link" data-searchable="" href="https://academy.hsoub.com/programming/css/%D8%AA%D8%B9%D8%B1%D9%81-%D8%B9%D9%84%D9%89-%D8%A7%D9%84%D8%B5%D9%86%D8%A7%D8%AF%D9%8A%D9%82-boxes-%D9%81%D9%8A-css-r263/" rel="" style="box-sizing: border-box; color: rgb(0, 201, 165); text-decoration: underline; background-color: transparent;">تعرف على الصناديق (Boxes) في CSS</a>.
	</li>
	<li style="box-sizing: border-box;">
		<a data-linktype="link" data-searchable="" href="https://academy.hsoub.com/programming/css/%D8%B1%D8%B5%D9%81-%D8%A7%D9%84%D8%B9%D9%86%D8%A7%D8%B5%D8%B1-layout-%D9%81%D9%8A-css-r264/" rel="" style="box-sizing: border-box; color: rgb(0, 201, 165); text-decoration: underline; background-color: transparent;">رصف العناصر (Layout) في CSS</a>.
	</li>
	<li style="box-sizing: border-box;">
		الجداول (Tables) في CSS. (هذا الدرس)
	</li>
	<li style="box-sizing: border-box;">
		<a href="https://academy.hsoub.com/programming/css/%D8%A7%D9%84%D8%AA%D8%B9%D8%A7%D9%85%D9%84-%D9%85%D8%B9-%D8%A3%D8%AC%D9%87%D8%B2%D8%A9-%D8%A7%D9%84%D8%B9%D8%B1%D8%B6-%D8%A7%D9%84%D9%85%D8%AE%D8%AA%D9%84%D9%81%D8%A9-%D9%88%D8%A7%D9%84%D9%85%D8%B7%D8%A8%D9%88%D8%B9%D8%A7%D8%AA-%D9%81%D9%8A-css-r268/" rel="" style="box-sizing: border-box; color: rgb(0, 201, 165); text-decoration: underline; background-color: transparent;">التعامل مع أجهزة العرض المختلفة والمطبوعات في CSS</a>.
	</li>
</ul>
<h2 id="-">
	الجداول
</h2>

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

<p>
	عندما تصمّم مستنداتك، استخدم الجداول للتّعبير عن <a href="https://academy.hsoub.com/programming/css/%D8%A7%D9%84%D9%85%D8%AD%D8%AF%D8%AF%D8%A7%D8%AA-selectors-%D9%81%D9%8A-css-r249/" rel="">العلاقة</a> بين مجموعة من المعلومات، وعندها لن يؤثّر كثيرًا الاختلاف البسيط بين المتصفّحات في عرض هذه المعلومات، لأنّ معناها ما يزال واضحًا.
</p>

<p>
	لا تستخدم الجداول بطرقٍ غير اعتياديّة للوصول إلى تخطيط مرئيّ للمستند، فهذا الهدف يمكن تحقيقه بصورة أفضل بالوسائل الّتي شرحناها في <a href="https://academy.hsoub.com/programming/css/%D8%B1%D8%B5%D9%81-%D8%A7%D9%84%D8%B9%D9%86%D8%A7%D8%B5%D8%B1-layout-%D9%81%D9%8A-css-r264/" rel="">درس رصف العناصر</a>.
</p>

<h2 id="-">
	هيكل الجداول
</h2>

<p>
	تُعرض كل معلومة في الجدول ضمن خليّة (cell).
</p>

<p>
	نُسمّي مجموعة الخلايا الواقعة على خطّ أفقيّ واحد في الصّفحة صفًّا (row).
</p>

<p>
	يمكن تجميع بعض الصّفوف في الجداول. نُسمّي المجموعة الأولى المُميّزة من الصّفوف بترويسة الجدول (table header)، وبالمثل تُسمّى المجموعة الأخيرة المُميّزة من الصّفوف تذييل الجدول (table footer). تُسمّى بقيّة الصّفوف متن الجدول (body)، ويمكن تجميعها هي الأخرى في مجموعات.
</p>

<p>
	نُسمّي مجموعة الخلايا الواقعة على خطّ شاقوليّ واحد في الصّفحة عمودًا (column)، ولكنّ التّعامل مع الأعمدة في CSS غير شائع.
</p>

<h3 id="-">
	مثال
</h3>

<p>
	ألقِ نظرة على الجدول المُدرج تحت عنوان التّحديد تبعًا للعلاقات بين العناصر في درس <a href="https://academy.hsoub.com/programming/css/%D8%A7%D9%84%D9%85%D8%AD%D8%AF%D8%AF%D8%A7%D8%AA-selectors-%D9%81%D9%8A-css-r249/" rel="">المُحدّدات</a>، والمؤلّف من 10 خلايا موزّعة في 5 صفوف وعمودين، وفيه ترويسة، ومتن، ولكنّه بلا تذييل.
</p>

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

<h2 id="-">
	حدود الجداول
</h2>

<p>
	ليس للخلايا حوافّ (margins)، ولكنّ لها حدودًا (borders) وحشوات (paddings)، تكون الحدود مفصولة عن بعضها بشكل مبدئيّ بالقيمة المُعيّنة في خاصّة <code>border-spacing</code> على الجدول. يمكن أيضًا إزالة المسافة بالكامل بتعيين القيمة <code>collapse</code> للخاصّة <code>border-collapse</code>.
</p>

<h3 id="-">
	مثال
</h3>

<p>
	فيما يلي 3 جداول، للجدول على اليسار مسافة بين الحدود تساوي <code>0.5em</code>، وللجدول في المنتصف مسافة تساوي صفر، وفي الأيمن عُينت القيمة <code>collapse</code> على الخاصّة <code>border-collapse</code>:
</p>

<p style="text-align: center;">
	<img alt="css-tables2.png" class="ipsImage ipsImage_thumbnailed" data-fileid="14117" data-unique="oskjdcy5h" src="https://academy.hsoub.com/uploads/monthly_2016_03/css-tables2.png.307f0a72987010fae666e6e8f4abd6b2.png"></p>

<h2 style="text-align: right;">
	التسميات التوضيحية (Captions)
</h2>

<p>
	العنصر <code>&lt;caption&gt;</code> هو تسمية تُطبّق على كامل الجدول، وتُعرض في الحالة المبدئيّة فوق الجدول.
</p>

<p>
	يمكن نقل التسمية التّوضيحيّة إلى أسفل الجدول بتعيين القيمة <code>bottom</code> على الخاصّة <code>caption-side</code>، وهذه القيمة يرثها الأبناء، ويمكن لتجنّب ذلك تعيينها على الجدول نفسه أو على عنصر حاوٍ آخر.
</p>

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

<h3 id="-">
	مثال
</h3>

<p>
	لهذا الجدول عنوان في أسفله:
</p>

<pre class="css ipsCode prettyprint prettyprinted" data-pbcklang="css" data-pbcktabsize="">
<span class="com">#demo-table &gt; caption {</span><span class="pln">
  caption</span><span class="pun">-</span><span class="pln">side</span><span class="pun">:</span><span class="pln"> bottom</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"> italic</span><span class="pun">;</span><span class="pln">
  text</span><span class="pun">-</span><span class="pln">align</span><span class="pun">:</span><span class="pln"> right</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></pre>

<p style="text-align: center;">
	<img alt="css-tables3 (1).png" class="ipsImage ipsImage_thumbnailed" data-fileid="14120" data-unique="cwpapi4lj" src="https://academy.hsoub.com/uploads/monthly_2016_03/56e82994c5aa1_css-tables3(1).png.0709bef35bb98a68126b9df09fb6a833.png"></p>

<h2>
	الخلايا الفارغة
</h2>

<p>
	يمكن عرض الخلايا الفارغة (أي عرض حدودها وخلفيّتها) باستخدام الخاصّة <code>empty-cells</code> على الجدول وإسناد القيمة <code>show</code> إليها.
</p>

<p>
	يمكن أيضًا إخفاؤها تمامًا باستخدام ‎<code>empty-cells: hide;</code>‎، وعند ذلك فإن الخليّة تشفّ عمّا يقع تحتها من خلفيّة العنصر الأب.
</p>

<h3 id="-">
	مثال
</h3>

<p>
	هذه الجداول لها خلفيّة خضراء شاحبة، ولخلاياها خلفيّة رماديّة فاتحة وحدود رماديّة غامقة.
</p>

<p>
	في الجدول على اليسار تظهر الخليّة الفارغة، أمّا على اليمين فهي مخفيّة:
</p>

<p style="text-align: center;">
	<img alt="css-tables1.png" class="ipsImage ipsImage_thumbnailed" data-fileid="14121" data-unique="khtc4b2sd" src="https://academy.hsoub.com/uploads/monthly_2016_03/css-tables1.png.1211ec445ce99c58bf85054fe532247c.png"></p>

<h2 id="-">
	تمرين: تنسيق جدول
</h2>

<ol>
<li>
		أنشئ مستندًا جديدًا سمّه <code>doc3.html</code>، انسخ والصق المحتوى التّالي (تأكّد من نسخه بالكامل):

		<pre class="html ipsCode prettyprint prettyprinted" data-pbcklang="html" data-pbcktabsize="">
<span class="dec">&lt;!DOCTYPE html&gt;</span><span class="pln">
</span><span class="tag">&lt;html&gt;</span><span class="pln">
 </span><span class="tag">&lt;head&gt;</span><span class="pln">
   </span><span class="tag">&lt;title&gt;</span><span class="pln">Sample document 3</span><span class="tag">&lt;/title&gt;</span><span class="pln">
   </span><span class="tag">&lt;link</span><span class="pln"> </span><span class="atn">rel</span><span class="pun">=</span><span class="atv">"stylesheet"</span><span class="pln"> </span><span class="atn">href</span><span class="pun">=</span><span class="atv">"style3.css"</span><span class="tag">&gt;</span><span class="pln">
 </span><span class="tag">&lt;/head&gt;</span><span class="pln">
 </span><span class="tag">&lt;body&gt;</span><span class="pln">
   </span><span class="tag">&lt;table</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"demo-table"</span><span class="tag">&gt;</span><span class="pln">
     </span><span class="tag">&lt;caption&gt;</span><span class="pln">Oceans</span><span class="tag">&lt;/caption&gt;</span><span class="pln">
     </span><span class="tag">&lt;thead&gt;</span><span class="pln">
       </span><span class="tag">&lt;tr&gt;</span><span class="pln">
         </span><span class="tag">&lt;th&gt;&lt;/th&gt;</span><span class="pln">
         </span><span class="tag">&lt;th&gt;</span><span class="pln">Area</span><span class="tag">&lt;/th&gt;</span><span class="pln">
         </span><span class="tag">&lt;th&gt;</span><span class="pln">Mean depth</span><span class="tag">&lt;/th&gt;</span><span class="pln">
       </span><span class="tag">&lt;/tr&gt;</span><span class="pln">
       </span><span class="tag">&lt;tr&gt;</span><span class="pln">
         </span><span class="tag">&lt;th&gt;&lt;/th&gt;</span><span class="pln">
         </span><span class="tag">&lt;th&gt;</span><span class="pln">million km</span><span class="tag">&lt;sup&gt;</span><span class="pln">2</span><span class="tag">&lt;/sup&gt;&lt;/th&gt;</span><span class="pln">
         </span><span class="tag">&lt;th&gt;</span><span class="pln">m</span><span class="tag">&lt;/th&gt;</span><span class="pln">
       </span><span class="tag">&lt;/tr&gt;</span><span class="pln">
     </span><span class="tag">&lt;/thead&gt;</span><span class="pln">
     </span><span class="tag">&lt;tbody&gt;</span><span class="pln">
       </span><span class="tag">&lt;tr&gt;</span><span class="pln">
         </span><span class="tag">&lt;th&gt;</span><span class="pln">Arctic</span><span class="tag">&lt;/th&gt;</span><span class="pln">
         </span><span class="tag">&lt;td&gt;</span><span class="pln">13,000</span><span class="tag">&lt;/td&gt;</span><span class="pln">
         </span><span class="tag">&lt;td&gt;</span><span class="pln">1,200</span><span class="tag">&lt;/td&gt;</span><span class="pln">
       </span><span class="tag">&lt;/tr&gt;</span><span class="pln">
       </span><span class="tag">&lt;tr&gt;</span><span class="pln">
         </span><span class="tag">&lt;th&gt;</span><span class="pln">Atlantic</span><span class="tag">&lt;/th&gt;</span><span class="pln">
         </span><span class="tag">&lt;td&gt;</span><span class="pln">87,000</span><span class="tag">&lt;/td&gt;</span><span class="pln">
         </span><span class="tag">&lt;td&gt;</span><span class="pln">3,900</span><span class="tag">&lt;/td&gt;</span><span class="pln">
       </span><span class="tag">&lt;/tr&gt;</span><span class="pln">
       </span><span class="tag">&lt;tr&gt;</span><span class="pln">
         </span><span class="tag">&lt;th&gt;</span><span class="pln">Pacific</span><span class="tag">&lt;/th&gt;</span><span class="pln">
         </span><span class="tag">&lt;td&gt;</span><span class="pln">180,000</span><span class="tag">&lt;/td&gt;</span><span class="pln">
         </span><span class="tag">&lt;td&gt;</span><span class="pln">4,000</span><span class="tag">&lt;/td&gt;</span><span class="pln">
       </span><span class="tag">&lt;/tr&gt;</span><span class="pln">
       </span><span class="tag">&lt;tr&gt;</span><span class="pln">
         </span><span class="tag">&lt;th&gt;</span><span class="pln">Indian</span><span class="tag">&lt;/th&gt;</span><span class="pln">
         </span><span class="tag">&lt;td&gt;</span><span class="pln">75,000</span><span class="tag">&lt;/td&gt;</span><span class="pln">
         </span><span class="tag">&lt;td&gt;</span><span class="pln">3,900</span><span class="tag">&lt;/td&gt;</span><span class="pln">
       </span><span class="tag">&lt;/tr&gt;</span><span class="pln">
       </span><span class="tag">&lt;tr&gt;</span><span class="pln">
         </span><span class="tag">&lt;th&gt;</span><span class="pln">Southern</span><span class="tag">&lt;/th&gt;</span><span class="pln">
         </span><span class="tag">&lt;td&gt;</span><span class="pln">20,000</span><span class="tag">&lt;/td&gt;</span><span class="pln">
         </span><span class="tag">&lt;td&gt;</span><span class="pln">4,500</span><span class="tag">&lt;/td&gt;</span><span class="pln">
       </span><span class="tag">&lt;/tr&gt;</span><span class="pln">
     </span><span class="tag">&lt;/tbody&gt;</span><span class="pln">
     </span><span class="tag">&lt;tfoot&gt;</span><span class="pln">
       </span><span class="tag">&lt;tr&gt;</span><span class="pln">
         </span><span class="tag">&lt;th&gt;</span><span class="pln">Total</span><span class="tag">&lt;/th&gt;</span><span class="pln">
         </span><span class="tag">&lt;td&gt;</span><span class="pln">361,000</span><span class="tag">&lt;/td&gt;</span><span class="pln">
         </span><span class="tag">&lt;td&gt;&lt;/td&gt;</span><span class="pln">
       </span><span class="tag">&lt;/tr&gt;</span><span class="pln">
       </span><span class="tag">&lt;tr&gt;</span><span class="pln">
         </span><span class="tag">&lt;th&gt;</span><span class="pln">Mean</span><span class="tag">&lt;/th&gt;</span><span class="pln">
         </span><span class="tag">&lt;td&gt;</span><span class="pln">72,000</span><span class="tag">&lt;/td&gt;</span><span class="pln">
         </span><span class="tag">&lt;td&gt;</span><span class="pln">3,800</span><span class="tag">&lt;/td&gt;</span><span class="pln">
       </span><span class="tag">&lt;/tr&gt;</span><span class="pln">
     </span><span class="tag">&lt;/tfoot&gt;</span><span class="pln">
   </span><span class="tag">&lt;/table&gt;</span><span class="pln">
 </span><span class="tag">&lt;/body&gt;</span><span class="pln">
</span><span class="tag">&lt;/html&gt;</span></pre>
	</li>
	<li>
		<p>
			أنشئ ورقة أنماط جديدة <code>style3.css</code>، وانسخ المحتوى التّالي والصقه (تأكّد من نسخه بالكامل):
		</p>

		<pre class="css ipsCode prettyprint prettyprinted" data-pbcklang="css" data-pbcktabsize="4">
<span class="com">/*** Style for doc3.html (Tables) ***/</span><span class="pln">

</span><span class="com">#demo-table {</span><span class="pln">
    font</span><span class="pun">:</span><span class="pln"> </span><span class="lit">100</span><span class="pun">%</span><span class="pln"> sans</span><span class="pun">-</span><span class="pln">serif</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">#efe;</span><span class="pln">
    border</span><span class="pun">-</span><span class="pln">collapse</span><span class="pun">:</span><span class="pln"> collapse</span><span class="pun">;</span><span class="pln">
    empty</span><span class="pun">-</span><span class="pln">cells</span><span class="pun">:</span><span class="pln"> show</span><span class="pun">;</span><span class="pln">
    border</span><span class="pun">:</span><span class="pln"> </span><span class="lit">1px</span><span class="pln"> solid </span><span class="com">#7a7;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

</span><span class="com">#demo-table &gt; caption {</span><span class="pln">
    text</span><span class="pun">-</span><span class="pln">align</span><span class="pun">:</span><span class="pln"> left</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">
    font</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">
    border</span><span class="pun">-</span><span class="pln">bottom</span><span class="pun">:</span><span class="pln"> </span><span class="pun">.</span><span class="lit">2em</span><span class="pln"> solid </span><span class="com">#4ca;</span><span class="pln">
    margin</span><span class="pun">-</span><span class="pln">bottom</span><span class="pun">:</span><span class="pln"> </span><span class="pun">.</span><span class="lit">5em</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">


</span><span class="com">/* basic shared rules */</span><span class="pln">
</span><span class="com">#demo-table th,</span><span class="pln">
</span><span class="com">#demo-table td {</span><span class="pln">
    text</span><span class="pun">-</span><span class="pln">align</span><span class="pun">:</span><span class="pln"> right</span><span class="pun">;</span><span class="pln">
    padding</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">5em</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

</span><span class="com">#demo-table th {</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">
    padding</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">5em</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">


</span><span class="com">/* header */</span><span class="pln">
</span><span class="com">#demo-table &gt; thead &gt; tr:first-child &gt; th {</span><span class="pln">
    text</span><span class="pun">-</span><span class="pln">align</span><span class="pun">:</span><span class="pln"> center</span><span class="pun">;</span><span class="pln">
    color</span><span class="pun">:</span><span class="pln"> blue</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

</span><span class="com">#demo-table &gt; thead &gt; tr + tr &gt; th {</span><span class="pln">
    font</span><span class="pun">-</span><span class="pln">style</span><span class="pun">:</span><span class="pln"> italic</span><span class="pun">;</span><span class="pln">
    color</span><span class="pun">:</span><span class="pln"> gray</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

</span><span class="com">/* fix size of superscript */</span><span class="pln">
</span><span class="com">#demo-table sup {</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">75</span><span class="pun">%;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

</span><span class="com">/* body */</span><span class="pln">
</span><span class="com">#demo-table td {</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">#cef;</span><span class="pln">
    padding</span><span class="pun">:.</span><span class="lit">5em</span><span class="pln"> </span><span class="pun">.</span><span class="lit">5em</span><span class="pln"> </span><span class="pun">.</span><span class="lit">5em</span><span class="pln"> </span><span class="lit">3em</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

</span><span class="com">#demo-table tbody th:after {</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">
</span><span class="pun">}</span><span class="pln">


</span><span class="com">/* footer */</span><span class="pln">
</span><span class="com">#demo-table tfoot {</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="pun">}</span><span class="pln">

</span><span class="com">#demo-table tfoot th {</span><span class="pln">
    color</span><span class="pun">:</span><span class="pln"> blue</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

</span><span class="com">#demo-table tfoot th:after {</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">
</span><span class="pun">}</span><span class="pln">

</span><span class="com">#demo-table &gt; tfoot td {</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">#cee;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

</span><span class="com">#demo-table &gt; tfoot &gt; tr:first-child td {</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="pun">.</span><span class="lit">2em</span><span class="pln"> solid </span><span class="com">#7a7;</span><span class="pln">
</span><span class="pun">}</span></pre>
	</li>
	<li>
		افتح المستند في المتصفّح، من المفترض أن تشاهد نتيجة كهذه:
	</li>
</ol>
<p style="text-align: center;">
	<img alt="css-tables4.png" class="ipsImage ipsImage_thumbnailed" data-fileid="14119" data-unique="jw1ltcyn8" src="https://academy.hsoub.com/uploads/monthly_2016_03/css-tables4.png.f960145394f423cf675a0f53d7153e19.png"></p>

<div live-sample-frame="" sample-code-frame="">
	قارن القواعد في ورقة الأنماط بالجدول الّذي تُشاهده، للتأكدّ من فهمك لتأثير كلّ قاعدة. إن وجدت قاعدة لم تفهمها، احجبها (بجعلها تعليقًا) وحدّث المتصفّح لتشاهد الاختلاف. فيما يلي بعض الملاحظات الّتي تُعينك على الفهم:
</div>

<ul>
<li>
		تقع التّسميّة التّوضيحيّة خارج الجدول.
	</li>
	<li>
		إن كنت قد ضبطت حدًا أدنى لحجم الخطوط في متصفّحك، فقد يؤثّر ذلك على الرّقم 2 في واحدة‎<bdi>km<sup>2</sup></bdi> ‎.
	</li>
	<li>
		هناك ثلاث خلايا فارغة، اثنتان منهما تشفّان عن خلفيّة الجدول، والثّالثة لها لون خلفيّة غير شافٍّ وحدّ علويّ.
	</li>
	<li>
		النقطتان بعد كل اسم محيط ":" تُضيفهما ورقة الأنماط.
	</li>
</ul>
<h2 id="-">
	تمرين
</h2>

<p>
	غيّر ورقة الأنماط ليبدو الجدول هكذا:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2016_01/table-challenge.png.0b3975f68f416fb3016b8988fe90362c.png" data-fileid="12198" rel="external"><img alt="table-challenge.png" class="ipsImage ipsImage_thumbnailed" data-fileid="12198" src="https://academy.hsoub.com/uploads/monthly_2016_01/table-challenge.thumb.png.a7b19351a032d857e21b56c45761542d.png"></a>
</p>

<div class="challenge">
	<input id="input_solution" name="input_solution" type="checkbox"><label for="input_solution"> شاهد الحل </label>
	<div class="solution">
		<p>
			القاعدة التّالية تضيف حدودًا فقط حول عناصر <code>&lt;td&gt;</code> المحتواة ضمن <code>&lt;tbody&gt;</code> ضمن الجدول ذي المُعرّف <code>demo_table</code>:
		</p>

		<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_643_9">
<span class="com">#demo-table tbody td {</span><span class="pln">
  border</span><span class="pun">:</span><span class="lit">1px</span><span class="pln"> solid </span><span class="com">#7a7;</span><span class="pln">
</span><span class="pun">}</span></pre>

		<p>
			 
		</p>
	</div>
</div>

<h2 id="-">
	ما التالي؟
</h2>

<p>
	سنُراجع في الدّرس القادم والأخير <a href="https://academy.hsoub.com/programming/css/%D8%A7%D9%84%D8%AA%D8%B9%D8%A7%D9%85%D9%84-%D9%85%D8%B9-%D8%A3%D8%AC%D9%87%D8%B2%D8%A9-%D8%A7%D9%84%D8%B9%D8%B1%D8%B6-%D8%A7%D9%84%D9%85%D8%AE%D8%AA%D9%84%D9%81%D8%A9-%D9%88%D8%A7%D9%84%D9%85%D8%B7%D8%A8%D9%88%D8%B9%D8%A7%D8%AA-%D9%81%D9%8A-css-r268/" rel="">كيفية التعامل مع الأجهزة المختلفة والمطبوعات في CSS</a>.
</p>

<p>
	ترجمة بتصرّف للدرس <a href="https://developer.mozilla.org/en-US/docs/Web/Guide/CSS/Getting_Started/Tables" rel="external nofollow">Tables</a> من سلسلة <a href="https://developer.mozilla.org/en-US/docs/Web/Guide/CSS/Getting_started" rel="external nofollow">Getting started with CSS</a> على شبكة مطوّري Mozilla.
</p>
]]></description><guid isPermaLink="false">266</guid><pubDate>Thu, 17 Mar 2016 22:11:00 +0000</pubDate></item><item><title>&#x631;&#x635;&#x641; &#x627;&#x644;&#x639;&#x646;&#x627;&#x635;&#x631; (Layout) &#x641;&#x64A; CSS</title><link>https://academy.hsoub.com/programming/css/%D8%B1%D8%B5%D9%81-%D8%A7%D9%84%D8%B9%D9%86%D8%A7%D8%B5%D8%B1-layout-%D9%81%D9%8A-css-r264/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2016_03/css-layout.png.108693ce52eae9926fb172e196bd2917.png" /></p>

<p>
	في هذا الدّرس من <a href="https://academy.hsoub.com/search/?tags=css+101" rel="">سلسلة تعلّم CSS</a>، سنشرح بعض طرق تغيير طريقة رصف العناصر في المستند، ونتدرّب على ذلك.
</p>

<p style="text-align: center;">
	<img alt="css-layout.png" class="ipsImage ipsImage_thumbnailed" data-fileid="14116" data-unique="3zjjf12xo" src="https://academy.hsoub.com/uploads/monthly_2016_03/css-layout.png.1eb492c6e02304a3ae878989332f3e74.png"></p>

<p>
	فهرس السلسلة: 
</p>

<ul>
<li>
		<a href="https://academy.hsoub.com/programming/css/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D8%A3%D9%88%D8%B1%D8%A7%D9%82-%D8%A7%D9%84%D8%A3%D9%86%D9%85%D8%A7%D8%B7-%D8%A7%D9%84%D9%85%D8%AA%D8%AA%D8%A7%D9%84%D9%8A%D8%A9-css-r246/" rel="">مدخل إلى أوراق الأنماط المتتالية (CSS)</a>.
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D8%A2%D9%84%D9%8A%D8%A9-%D8%B9%D9%85%D9%84-%D8%AA%D8%B9%D9%84%D9%8A%D9%85%D8%A7%D8%AA-css-%D8%AF%D8%A7%D8%AE%D9%84-%D8%A7%D9%84%D9%85%D8%AA%D8%B5%D9%81%D8%AD%D8%A7%D8%AA-r247/" rel="">آلية عمل تعليمات CSS داخل المتصفحات</a>.
	</li>
	<li style="box-sizing: border-box;">
		<a data-linktype="link" data-searchable="" href="https://academy.hsoub.com/programming/css/%D8%A7%D9%84%D9%85%D8%AD%D8%AF%D8%AF%D8%A7%D8%AA-selectors-%D9%81%D9%8A-css-r249/" rel="" style="box-sizing: border-box; color: rgb(0, 201, 165); text-decoration: underline; background-color: transparent;">المحددات (Selectors) في CSS</a>.
	</li>
	<li style="box-sizing: border-box;">
		<a data-linktype="link" data-searchable="" href="https://academy.hsoub.com/programming/css/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D9%83%D8%AA%D8%A7%D8%A8%D8%A9-%D8%AA%D8%B9%D9%84%D9%8A%D9%85%D8%A7%D8%AA-css-%D9%8A%D8%B3%D9%87%D9%84-%D9%82%D8%B1%D8%A7%D8%A1%D8%AA%D9%87%D8%A7-r250/" rel="" style="box-sizing: border-box; color: rgb(0, 201, 165); text-decoration: underline; background-color: transparent;">كيفية كتابة تعليمات CSS يسهل قراءتها</a>.
	</li>
	<li style="box-sizing: border-box;">
		<a data-linktype="link" data-searchable="" href="https://academy.hsoub.com/programming/css/%D8%AA%D9%86%D8%B3%D9%8A%D9%82-%D9%86%D8%B5%D9%88%D8%B5-%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-r251/" rel="" style="box-sizing: border-box; color: rgb(0, 201, 165); text-decoration: underline; background-color: transparent;">تنسيق نصوص صفحات الويب باستخدام CSS</a>.
	</li>
	<li style="box-sizing: border-box;">
		<a data-linktype="link" data-searchable="" href="https://academy.hsoub.com/programming/css/%D8%A7%D9%84%D8%AA%D8%B9%D8%A7%D9%85%D9%84-%D9%85%D8%B9-%D8%A7%D9%84%D8%A3%D9%84%D9%88%D8%A7%D9%86-%D9%81%D9%8A-css-r255/" rel="" style="box-sizing: border-box; color: rgb(0, 201, 165); text-decoration: underline; background-color: transparent;">التعامل مع الألوان في CSS</a>.
	</li>
	<li style="box-sizing: border-box;">
		<a data-linktype="link" data-searchable="" href="https://academy.hsoub.com/programming/css/%D8%A5%D8%B6%D8%A7%D9%81%D8%A9-%D9%85%D8%AD%D8%AA%D9%88%D9%89-%D8%A5%D9%84%D9%89-%D8%B5%D9%81%D8%AD%D8%A9-%D9%88%D9%8A%D8%A8-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-css-r258/" rel="" style="box-sizing: border-box; color: rgb(0, 201, 165); text-decoration: underline; background-color: transparent;">إضافة محتوى إلى صفحة ويب باستخدام CSS</a>.
	</li>
	<li style="box-sizing: border-box;">
		<a data-linktype="link" data-searchable="" href="https://academy.hsoub.com/programming/css/%D8%AA%D9%86%D8%B3%D9%8A%D9%82-%D8%A7%D9%84%D9%82%D9%88%D8%A7%D8%A6%D9%85-lists-%D9%81%D9%8A-css-r259/" rel="" style="box-sizing: border-box; color: rgb(0, 201, 165); text-decoration: underline; background-color: transparent;">تنسيق القوائم (Lists) في CSS</a>.
	</li>
	<li style="box-sizing: border-box;">
		<a data-linktype="link" data-searchable="" href="https://academy.hsoub.com/programming/css/%D8%AA%D8%B9%D8%B1%D9%81-%D8%B9%D9%84%D9%89-%D8%A7%D9%84%D8%B5%D9%86%D8%A7%D8%AF%D9%8A%D9%82-boxes-%D9%81%D9%8A-css-r263/" rel="" style="box-sizing: border-box; color: rgb(0, 201, 165); text-decoration: underline; background-color: transparent;">تعرف على الصناديق (Boxes) في CSS</a>.
	</li>
	<li style="box-sizing: border-box;">
		رصف العناصر (Layout) في CSS. (هذا الدرس)
	</li>
	<li style="box-sizing: border-box;">
		<a data-linktype="link" data-searchable="" href="https://academy.hsoub.com/programming/css/%D8%A7%D9%84%D8%AC%D8%AF%D8%A7%D9%88%D9%84-tables-%D9%81%D9%8A-css-r266/" rel="" style="box-sizing: border-box; color: rgb(0, 201, 165); text-decoration: underline; background-color: transparent;">الجداول (Tables) في CSS</a>.
	</li>
	<li style="box-sizing: border-box;">
		<a href="https://academy.hsoub.com/programming/css/%D8%A7%D9%84%D8%AA%D8%B9%D8%A7%D9%85%D9%84-%D9%85%D8%B9-%D8%A3%D8%AC%D9%87%D8%B2%D8%A9-%D8%A7%D9%84%D8%B9%D8%B1%D8%B6-%D8%A7%D9%84%D9%85%D8%AE%D8%AA%D9%84%D9%81%D8%A9-%D9%88%D8%A7%D9%84%D9%85%D8%B7%D8%A8%D9%88%D8%B9%D8%A7%D8%AA-%D9%81%D9%8A-css-r268/" rel="" style="box-sizing: border-box; color: rgb(0, 201, 165); text-decoration: underline; background-color: transparent;">التعامل مع أجهزة العرض المختلفة والمطبوعات في CSS</a>.
	</li>
</ul>
<h2 id="-layout-">
	رصف العناصر (Layout)
</h2>

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

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

<p>
	سنقصر اهتمامنا على تقنيّات بسيطة يمكنك البدء بها.
</p>

<h2 id="-">
	هيكل المستند
</h2>

<p>
	إن أردت التحكّم بتخطيط المستند، فقد تحتاج إلى تغيير هيكله.
</p>

<p>
	ربّما تحوي لغة الرّماز الّتي تستخدمها وسومًا عامّة الأغراض تساعد في الوصول إلى بنية معيّنة، وفي HTML يمكن اللّجوء إلى الوسم <code>&lt;div&gt;</code> لهذا الغرض.
</p>

<h3 id="-">
	مثال
</h3>

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

<p>
	ولحلّ هذه المشكلة، يمكن إضافة وسم <code>&lt;div&gt;</code> يحيط بالفقرات جميعها، ويكون هذا الوسم فريدًا بمعرّف <code>id</code>:
</p>

<pre class="html ipsCode prettyprint prettyprinted" data-pbcklang="html" data-pbcktabsize="">
<span class="tag">&lt;h3&gt;</span><span class="pln">Numbered paragraphs</span><span class="tag">&lt;/h3&gt;</span><span class="pln">
</span><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"numbered"</span><span class="tag">&gt;</span><span class="pln">
  </span><span class="tag">&lt;p&gt;</span><span class="pln">Lorem ipsum</span><span class="tag">&lt;/p&gt;</span><span class="pln">
  </span><span class="tag">&lt;p&gt;</span><span class="pln">Dolor sit</span><span class="tag">&lt;/p&gt;</span><span class="pln">
  </span><span class="tag">&lt;p&gt;</span><span class="pln">Amet consectetuer</span><span class="tag">&lt;/p&gt;</span><span class="pln">
  </span><span class="tag">&lt;p&gt;</span><span class="pln">Magna aliquam</span><span class="tag">&lt;/p&gt;</span><span class="pln">
  </span><span class="tag">&lt;p&gt;</span><span class="pln">Autem veleum</span><span class="tag">&lt;/p&gt;</span><span class="pln">
</span><span class="tag">&lt;/div&gt;</span></pre>

<p>
	يمكن الآن كتابة قاعدة تخلق حدودًا حول الفقرات والقائمة:
</p>

<pre class="css ipsCode prettyprint prettyprinted" data-pbcklang="css" data-pbcktabsize="">
<span class="pln">ul</span><span class="pun">,</span><span class="pln"> </span><span class="com">#numbered {</span><span class="pln">
  border</span><span class="pun">:</span><span class="pln"> </span><span class="lit">1em</span><span class="pln"> solid </span><span class="com">#69b;</span><span class="pln">
  padding</span><span class="pun">-</span><span class="pln">right</span><span class="pun">:</span><span class="lit">1em</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></pre>

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

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="12074" href="https://academy.hsoub.com/uploads/monthly_2016_01/div.png.cdc4c1d860ea973293cb374cea942de4.png" rel="external"><img alt="div.png" class="ipsImage ipsImage_thumbnailed" data-fileid="12074" src="https://academy.hsoub.com/uploads/monthly_2016_01/div.thumb.png.eb8c0b9946d34cf3df587b353987493a.png"></a>
</p>

<h2 id="-">
	وحدات القياس
</h2>

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

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

<h3 id="-">
	مثال
</h3>

<p>
	الحدّ على الجانب الأيسر لهذا النّصّ مُعيّن بالبكسل.
</p>

<p>
	الخدّ على الجانب الأيمن مُعيّن بوحدة <code>em</code>.
</p>

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

<div style="border: 5px solid blue; border-left: 5px solid blue; border-right: 1em solid blue; width: 10em;">
	كبّرني!
</div>

<h3 id="-">
	تفاصيل أكثر
</h3>

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

<h2 id="-">
	رصف النصوص
</h2>

<p>
	هناك خاصّيتان تؤثّران في كيفيّة رصف المحتوى النّصّيّ للعناصر:
</p>

<ul>
<li>
		‏<code>text-align</code>: ترصف محتوى العنصر، وتقبل إحدى القيم التّالية: <code>left</code>, <code>right</code>, <code>center</code>, <code>justify</code>.
	</li>
	<li>
		‏<code>text-indent</code>: تدفع السّطر الأوّل من الفقرة بالمقدار المُحدّد.
	</li>
</ul>
<p>
	هذه الخواصّ تنطبق على أي محتوى مشابه للنّصوص في العناصر، وليس على النّصوص فقط. تذكّر أنّ القيم المُسندة لهذه الخواص يرثها الأبناء، ولذا قد تحتاج إلى إزالتها من الأبناء لتجنّب نتيجة غير مرغوبة.
</p>

<h3 id="-">
	مثال
</h3>

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

<pre class="css ipsCode prettyprint prettyprinted" data-pbcklang="css" data-pbcktabsize="">
<span class="pln">h3 </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">1px</span><span class="pln"> solid gray</span><span class="pun">;</span><span class="pln">
  text</span><span class="pun">-</span><span class="pln">align</span><span class="pun">:</span><span class="pln"> center</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	وهذه هي النّتيجة:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="12073" href="https://academy.hsoub.com/uploads/monthly_2016_01/text-center.png.f7ee9b8428383f65e451457990706522.png" rel="external"><img alt="text-center.png" class="ipsImage ipsImage_thumbnailed" data-fileid="12073" src="https://academy.hsoub.com/uploads/monthly_2016_01/text-center.thumb.png.b118e17b1b720b76972fb69585871f6b.png"></a>
</p>

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

<h2 id="-float-">
	طفو العناصر (Float)
</h2>

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

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

<h3 id="-">
	مثال
</h3>

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

<p>
	لإبقاء العناوين في مواضعها، يجب أيضًا تحديد الخاصّة <code>clear</code> عليها:
</p>

<pre class="css ipsCode prettyprint prettyprinted" data-pbcklang="css" data-pbcktabsize="">
<span class="pln">ul</span><span class="pun">,</span><span class="pln"> </span><span class="com">#numbered {float: left;}</span><span class="pln">
h3 </span><span class="pun">{</span><span class="pln">clear</span><span class="pun">:</span><span class="pln"> left</span><span class="pun">;}</span></pre>

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

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="12072" href="https://academy.hsoub.com/uploads/monthly_2016_01/float.png.6896fada52776e0d53106d480d628413.png" rel="external"><img alt="float.png" class="ipsImage ipsImage_thumbnailed" data-fileid="12072" src="https://academy.hsoub.com/uploads/monthly_2016_01/float.thumb.png.b2ffc061f40c171bd6c8e4348b3d1d60.png"></a>
</p>

<p>
	(يتطلّب الأمر بعض الحشوة على يمين الصّناديق، لأنّهما الحدود قريبة جدًّا من النّصّ)
</p>

<h2 id="-positioning-">
	تحديد مواضع العناصر (Positioning)
</h2>

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

<ul>
<li>
		‏<code>relative</code>: يُزاح العنصر إلى موضع جديدٍ بالنّسبة لموضع الطّبيعيّ، أي يمكن استخدام هذه الخاصّة لإزاحة العنصر بمقدار معيّن، ويمكن أيضًا استخدام حوافّ العنصر لتحقيق نتيجة مشابهة.
	</li>
	<li>
		‏<code>fixed</code>: موضع العنصر ثابت، أي بالنّسبة لنافذة المستند، فحتّى عندما يمرّر المستخدم الصّفحة إلى أسفل أو إلى أعلى، يبقى العنصر ثابتًا بالنّسبة للنافذة.
	</li>
	<li>
		‏<code>absolute</code>: موضع العنصر ثابت بالنسبة لعنصر أبٍ، يُشترط أن يكون العنصر الأب ذا موضع <code>relative</code> أو <code>fixed</code> أو <code>absolute</code>، ويمكن جعل موضع الأب <code>relative</code> بمقدار إزاحة مساوٍ للصفر إذا أردنا استخدام هذه الخاصّة على الابن دون إزاحة الأب.
	</li>
	<li>
		‏<code>static</code>: القيمة المبدئيّة، استخدمها عند الحاجة للنصّ صراحة على تصفير الموضع.
	</li>
</ul>
<p>
	بعد تعيين هذه الخاصّة، استخدم إحدى الخواص التّالية لتعيين إزاحة العنصر (وحجمه): <code>top</code> و <code>right</code> و <code>bottom</code> و <code>left</code> و <code>width</code> و <code>height</code>.
</p>

<h3 id="-">
	مثال
</h3>

<p>
	لتعيين موضع عنصرين أحدهما فوق الآخر، أنشئ عنصرًا يحويهما في المستند:
</p>

<pre class="html ipsCode prettyprint prettyprinted" data-pbcklang="html" data-pbcktabsize="">
<span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"parent-div"</span><span class="tag">&gt;</span><span class="pln">
  </span><span class="tag">&lt;p</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"forward"</span><span class="tag">&gt;</span><span class="pln">/</span><span class="tag">&lt;/p&gt;</span><span class="pln">
  </span><span class="tag">&lt;p</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"back"</span><span class="tag">&gt;</span><span class="pln">\</span><span class="tag">&lt;/p&gt;</span><span class="pln">
</span><span class="tag">&lt;/div&gt;</span></pre>

<p>
	ثمّ اجعل موضع الأب <code>relative</code> دون إزاحة، واجعل الابنين <code>absolute</code>:
</p>

<pre class="css ipsCode prettyprint prettyprinted" data-pbcklang="css" data-pbcktabsize="">
<span class="com">#parent-div {</span><span class="pln">
  position</span><span class="pun">:</span><span class="pln"> relative</span><span class="pun">;</span><span class="pln">
  font</span><span class="pun">:</span><span class="pln"> bold </span><span class="lit">200</span><span class="pun">%</span><span class="pln"> sans</span><span class="pun">-</span><span class="pln">serif</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

</span><span class="com">#forward, #back {</span><span class="pln">
  position</span><span class="pun">:</span><span class="pln"> absolute</span><span class="pun">;</span><span class="pln">
  margin</span><span class="pun">:</span><span class="lit">0px</span><span class="pun">;</span><span class="pln"> </span><span class="com">/* no margin around the elements */</span><span class="pln">
  top</span><span class="pun">:</span><span class="pln"> </span><span class="lit">0px</span><span class="pun">;</span><span class="pln"> </span><span class="com">/* distance from top */</span><span class="pln">
  left</span><span class="pun">:</span><span class="pln"> </span><span class="lit">0px</span><span class="pun">;</span><span class="pln"> </span><span class="com">/* distance from left */</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

</span><span class="com">#forward {</span><span class="pln">
  color</span><span class="pun">:</span><span class="pln"> blue</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

</span><span class="com">#back {</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></pre>

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

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="12071" href="https://academy.hsoub.com/uploads/monthly_2016_01/position.png.9c036dbd97ff2ade57a0515c0b7c1da4.png" rel="external"><img alt="position.png" class="ipsImage ipsImage_thumbnailed" data-fileid="12071" src="https://academy.hsoub.com/uploads/monthly_2016_01/position.thumb.png.727f53471b29c1b6e3e6af59cc81d26e.png"></a>
</p>

<h3 id="-">
	تفاصيل أكثر
</h3>

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

<h2 id="-">
	تمرين: رصف العناصر
</h2>

<ol>
<li>
		عدّل المستند <code>doc2.html</code> وورقة الأنماط <code>style2.css</code> باستخدام أمثلة من فقرتي "هيكل المستند" و"طفو العناصر" السابق ذكرهما.
	</li>
	<li>
		في مثال طفو العناصر، أضفّ بعض الحشوة لفصل النّصّ عن الحدود بمقدار 0.5em.
	</li>
</ol>
<h2 id="-">
	تمرين
</h2>

<p>
	عدّل المستند <code>doc2.html</code> مُضيفًا الوسم التّالي قرب نهايته، قبل ‎<code>&lt;/body&gt;</code>‎:
</p>

<pre class="html ipsCode prettyprint prettyprinted" data-pbcklang="html" data-pbcktabsize="">
<span class="tag">&lt;img</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"fixed-pin"</span><span class="pln"> </span><span class="atn">src</span><span class="pun">=</span><span class="atv">"Yellow-pin.png"</span><span class="pln"> </span><span class="atn">alt</span><span class="pun">=</span><span class="atv">"Yellow map pin"</span><span class="tag">&gt;</span></pre>

<p>
	إن لم تحفظ الصّورة التّالية من قبل لديك، فاحفظها الآن في المجلّد الّذي يحوي المستند السّابق:
</p>

<p>
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="12075" href="https://academy.hsoub.com/uploads/monthly_2016_01/Yellow-pin.png.0e6afc3ab1df48e96de195c976649d7f.png" rel="external"><img alt="Yellow-pin.png" class="ipsImage ipsImage_thumbnailed" data-fileid="12075" src="https://academy.hsoub.com/uploads/monthly_2016_01/Yellow-pin.thumb.png.8301efe84a9df938b2461de73f5bf179.png"></a>
</p>

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

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

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

<center>
	<div style="direction: ltr; position: relative; width: 29.5em; height: 18em;">
		<div style="overflow: auto; border: 2px outset #36b; padding: 1em; width: 29em; height: 16em; background-color: white;">
			<p style="font-weight: bold; font-size: 133%; margin-bottom: .3em; padding-top: .4em; padding-bottom: .16em; border-top: 1px solid gray;">
				(A) The oceans
			</p>

			<div style="float: left; border: 12px solid #69b; margin-bottom: 16px; padding: 0px .5em 0px 1em;">
				<ul style="">
<li>
						Arctic
					</li>
					<li>
						Atlantic
					</li>
					<li>
						Pacific
					</li>
					<li>
						Indian
					</li>
					<li>
						Southern
					</li>
				</ul>
</div>

			<p style="font-weight: bold; font-size: 133%; margin-bottom: .3em; padding-top: .4em; padding-bottom: .16em; border-top: 1px solid gray;">
				(B) Numbered paragraphs
			</p>

			<div style="float: left; border: 12px solid #69b; padding: 0 .5em 0 .5em;">
				<p>
					<strong>1: </strong>Lorem ipsum
				</p>

				<p>
					<strong>2: </strong>Dolor sit
				</p>

				<p>
					<strong>3: </strong>Amet consectetuer
				</p>

				<p>
					<strong>4: </strong>Magna aliquam
				</p>

				<p>
					<strong>5: </strong>Autem veleum
				</p>
			</div>

			<p style="">
				 
			</p>

			<div style="position: absolute; top: 2px; right: 0px;">
				<img alt="Yellow map pin" class="internal" src="https://academy.hsoub.com/uploads/imageproxy/Yellow-pin.png.bb53b073ed4f8fb1f64c21f97fb08da2.png">
</div>
		</div>
	</div>
</center>

<div class="challenge">
	<input id="input_solution" name="input_solution" type="checkbox"><label for="input_solution"> شاهد الحل </label>

	<div class="solution">
		<h3 id="-">
			التّمرين الأوّل
		</h3>

		<p>
			تظهر الصّورة في يمين القائمة الثّانية.
		</p>

		<p>
			<img alt="pin_placement.png" class="ipsImage ipsImage_thumbnailed" data-fileid="12466" data-unique="r6lu3l1mq" src="https://academy.hsoub.com/uploads/monthly_2016_02/pin_placement.png.92c65fbdfa140b5b4fecb9ae694593c4.png"></p>
	</div>

	<h3 id="-">
		التّمرين الثاني
	</h3>

	<p>
		القاعدة التّالية تُحقّق النّتيجة المطلوبة:
	</p>

	<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_1261_7">
<span class="com">#fixed-pin  {</span><span class="pln">
  position</span><span class="pun">:</span><span class="kwd">fixed</span><span class="pun">;</span><span class="pln">
  top</span><span class="pun">:</span><span class="pln"> </span><span class="lit">3px</span><span class="pun">;</span><span class="pln">
  right</span><span class="pun">:</span><span class="pln"> </span><span class="lit">3px</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></pre>

	<h2>
		ما التالي؟
	</h2>
</div>

<p>
	لقد غطّينا معظم المواضيع الأساسيّة في CSS حتى هذا الدّرس، سنشرح في الدّرس المُقبل المُحدّدات المتقدّمة في قواعد CSS، وبعض <a href="https://academy.hsoub.com/programming/css/%D8%A7%D9%84%D8%AC%D8%AF%D8%A7%D9%88%D9%84-tables-%D9%81%D9%8A-css-r266/" rel="">التنسيقات الخاصّة بالجداول</a>.
</p>

<p>
	ترجمة بتصرّف للدرس <a href="https://developer.mozilla.org/en-US/docs/Web/Guide/CSS/Getting_Started/Layout" rel="external nofollow">Layout</a> من سلسلة <a href="https://developer.mozilla.org/en-US/docs/Web/Guide/CSS/Getting_started" rel="external nofollow">Getting started with CSS</a> على شبكة مطوّري Mozilla.
</p>
]]></description><guid isPermaLink="false">264</guid><pubDate>Thu, 17 Mar 2016 01:16:00 +0000</pubDate></item><item><title>&#x62A;&#x646;&#x633;&#x64A;&#x642; &#x627;&#x644;&#x642;&#x648;&#x627;&#x626;&#x645; (Lists) &#x641;&#x64A; CSS</title><link>https://academy.hsoub.com/programming/css/%D8%AA%D9%86%D8%B3%D9%8A%D9%82-%D8%A7%D9%84%D9%82%D9%88%D8%A7%D8%A6%D9%85-lists-%D9%81%D9%8A-css-r259/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2016_03/css-lists.png.330c85ec8fd984ccedd57a0794ca06c4.png" /></p>

<p>
	في هذا الدرس من <a href="https://academy.hsoub.com/search/?tags=css+101" rel="">سلسلة تعلّم CSS</a>، سنشرح كيف يمكن استخدام CSS لتحديد مظهر القوائم؛ وسنتدرّب على ذلك بإنشاء مستند جديد يحوي قوائم، ونُرفقه بورقة أنماط جديدة تُنسّق القوائم الّتي أنشأناها.
</p>

<p style="text-align: center;">
	<img alt="css-lists.png" class="ipsImage ipsImage_thumbnailed" data-fileid="13904" data-unique="c8beuj0de" src="https://academy.hsoub.com/uploads/monthly_2016_03/css-lists.png.381fe093514a03431246d553155e9484.png"></p>

<p style="box-sizing: border-box; line-height: 35.2px; text-align: justify; color: rgb(39, 42, 52); font-family: 'Droid Arabic Naskh', 'Open Sans', 'Helvetica Neue', Helvetica, Tahoma, Arial, sans-serif; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 1; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);">
	فهرس السلسلة:
</p>

<ul style="box-sizing: border-box; color: rgb(39, 42, 52); font-family: 'Droid Arabic Naskh', 'Open Sans', 'Helvetica Neue', Helvetica, Tahoma, Arial, sans-serif; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 35.2px; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 1; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);">
<li style="box-sizing: border-box;">
		<a href="https://academy.hsoub.com/programming/css/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D8%A3%D9%88%D8%B1%D8%A7%D9%82-%D8%A7%D9%84%D8%A3%D9%86%D9%85%D8%A7%D8%B7-%D8%A7%D9%84%D9%85%D8%AA%D8%AA%D8%A7%D9%84%D9%8A%D8%A9-css-r246/" rel="" style="box-sizing: border-box; color: rgb(0, 201, 165); text-decoration: underline; background-color: transparent;">مدخل إلى أوراق الأنماط المتتالية (CSS)</a>.
	</li>
	<li style="box-sizing: border-box;">
		<a href="https://academy.hsoub.com/programming/css/%D8%A2%D9%84%D9%8A%D8%A9-%D8%B9%D9%85%D9%84-%D8%AA%D8%B9%D9%84%D9%8A%D9%85%D8%A7%D8%AA-css-%D8%AF%D8%A7%D8%AE%D9%84-%D8%A7%D9%84%D9%85%D8%AA%D8%B5%D9%81%D8%AD%D8%A7%D8%AA-r247/" rel="">آلية عمل تعليمات CSS داخل المتصفحات</a>.
	</li>
	<li style="box-sizing: border-box;">
		<a data-linktype="link" data-searchable="" href="https://academy.hsoub.com/programming/css/%D8%A7%D9%84%D9%85%D8%AD%D8%AF%D8%AF%D8%A7%D8%AA-selectors-%D9%81%D9%8A-css-r249/" rel="" style="box-sizing: border-box; color: rgb(0, 201, 165); text-decoration: underline; background-color: transparent;">المحددات (Selectors) في CSS</a>.
	</li>
	<li style="box-sizing: border-box;">
		<a data-linktype="link" data-searchable="" href="https://academy.hsoub.com/programming/css/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D9%83%D8%AA%D8%A7%D8%A8%D8%A9-%D8%AA%D8%B9%D9%84%D9%8A%D9%85%D8%A7%D8%AA-css-%D9%8A%D8%B3%D9%87%D9%84-%D9%82%D8%B1%D8%A7%D8%A1%D8%AA%D9%87%D8%A7-r250/" rel="" style="box-sizing: border-box; color: rgb(0, 201, 165); text-decoration: underline; background-color: transparent;">كيفية كتابة تعليمات CSS يسهل قراءتها</a>.
	</li>
	<li style="box-sizing: border-box;">
		<a data-linktype="link" data-searchable="" href="https://academy.hsoub.com/programming/css/%D8%AA%D9%86%D8%B3%D9%8A%D9%82-%D9%86%D8%B5%D9%88%D8%B5-%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-r251/" rel="" style="box-sizing: border-box; color: rgb(0, 201, 165); text-decoration: underline; background-color: transparent;">تنسيق نصوص صفحات الويب باستخدام CSS</a>.
	</li>
	<li style="box-sizing: border-box;">
		<a data-linktype="link" data-searchable="" href="https://academy.hsoub.com/programming/css/%D8%A7%D9%84%D8%AA%D8%B9%D8%A7%D9%85%D9%84-%D9%85%D8%B9-%D8%A7%D9%84%D8%A3%D9%84%D9%88%D8%A7%D9%86-%D9%81%D9%8A-css-r255/" rel="" style="box-sizing: border-box; color: rgb(0, 201, 165); text-decoration: underline; background-color: transparent;">التعامل مع الألوان في CSS</a>.
	</li>
	<li style="box-sizing: border-box;">
		<a data-linktype="link" data-searchable="" href="https://academy.hsoub.com/programming/css/%D8%A5%D8%B6%D8%A7%D9%81%D8%A9-%D9%85%D8%AD%D8%AA%D9%88%D9%89-%D8%A5%D9%84%D9%89-%D8%B5%D9%81%D8%AD%D8%A9-%D9%88%D9%8A%D8%A8-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-css-r258/" rel="" style="box-sizing: border-box; color: rgb(0, 201, 165); text-decoration: underline; background-color: transparent;">إضافة محتوى إلى صفحة ويب باستخدام CSS</a>.
	</li>
	<li style="box-sizing: border-box;">
		تنسيق القوائم (Lists) في CSS. (هذا الدرس)
	</li>
	<li style="box-sizing: border-box;">
		<a data-linktype="link" data-searchable="" href="https://academy.hsoub.com/programming/css/%D8%AA%D8%B9%D8%B1%D9%81-%D8%B9%D9%84%D9%89-%D8%A7%D9%84%D8%B5%D9%86%D8%A7%D8%AF%D9%8A%D9%82-boxes-%D9%81%D9%8A-css-r263/" rel="" style="box-sizing: border-box; color: rgb(0, 201, 165); text-decoration: underline; background-color: transparent;">تعرف على الصناديق (Boxes) في CSS</a>.
	</li>
	<li style="box-sizing: border-box;">
		<a data-linktype="link" data-searchable="" href="https://academy.hsoub.com/programming/css/%D8%B1%D8%B5%D9%81-%D8%A7%D9%84%D8%B9%D9%86%D8%A7%D8%B5%D8%B1-layout-%D9%81%D9%8A-css-r264/" rel="" style="box-sizing: border-box; color: rgb(0, 201, 165); text-decoration: underline; background-color: transparent;">رصف العناصر (Layout) في CSS</a>.
	</li>
	<li style="box-sizing: border-box;">
		<a data-linktype="link" data-searchable="" href="https://academy.hsoub.com/programming/css/%D8%A7%D9%84%D8%AC%D8%AF%D8%A7%D9%88%D9%84-tables-%D9%81%D9%8A-css-r266/" rel="" style="box-sizing: border-box; color: rgb(0, 201, 165); text-decoration: underline; background-color: transparent;">الجداول (Tables) في CSS</a>.
	</li>
	<li style="box-sizing: border-box;">
		<a href="https://academy.hsoub.com/programming/css/%D8%A7%D9%84%D8%AA%D8%B9%D8%A7%D9%85%D9%84-%D9%85%D8%B9-%D8%A3%D8%AC%D9%87%D8%B2%D8%A9-%D8%A7%D9%84%D8%B9%D8%B1%D8%B6-%D8%A7%D9%84%D9%85%D8%AE%D8%AA%D9%84%D9%81%D8%A9-%D9%88%D8%A7%D9%84%D9%85%D8%B7%D8%A8%D9%88%D8%B9%D8%A7%D8%AA-%D9%81%D9%8A-css-r268/" rel="" style="box-sizing: border-box; color: rgb(0, 201, 165); text-decoration: underline; background-color: transparent;">التعامل مع أجهزة العرض المختلفة والمطبوعات في CSS</a>.
	</li>
</ul>
<h2 id="-">
	القوائم
</h2>

<p>
	إن كنت قد أتممت التّمرين في الدرس السابق "<a href="https://academy.hsoub.com/programming/css/%D8%A5%D8%B6%D8%A7%D9%81%D8%A9-%D9%85%D8%AD%D8%AA%D9%88%D9%89-%D8%A5%D9%84%D9%89-%D8%B5%D9%81%D8%AD%D8%A9-%D9%88%D9%8A%D8%A8-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-css-r258/" rel="">إضافة محتوى إلى صفحة ويب باستخدام CSS</a>" فلعلّك لاحظت كيف يمكن إضافة محتوىً قبل أي عنصر بحيث يظهر وكأنّه عنصرٌ في قائمة.
</p>

<p>
	تقدّم CSS بعض الخواصّ المُصمّمة خصّوصًا للقوائم، ومن الأفضل استخدام هذه الخواصّ في معظم الحالات.
</p>

<p>
	لتعيين نمط القائمة، استخدام الخاصّة <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/list-style" rel="external nofollow"><code>list-style</code></a> لتحديد نوع العلامة الّتي تظهر قبل كلّ عنصر في القائمة.
</p>

<p>
	يمكن استهداف القائمة ذاتها (<code>&lt;ul&gt;</code> مثلًا) بحيث ترث العناصر منها، أو يمكن استهداف العناصر ضمن القائمة (<code>&lt;li&gt;</code> مثلًا).
</p>

<h2 id="-">
	القوائم غير المرتبة
</h2>

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

<p>
	تتضمّن CSS ثلاثة أنواع للعلامات:
</p>

<ul>
<li style="list-style: disc;">
		<code>disc</code> (قرص)
	</li>
	<li style="list-style: circle;">
		<code>circle</code> (دائرة)
	</li>
	<li style="list-style: square;">
		<code>square</code> (مربّع)
	</li>
</ul>
<p>
	يمكن أيضًا تحديد رابط صورة لاستخدامها كعلامة للعناصر كخيار بديلٍ.
</p>

<h3 id="-">
	مثال
</h3>

<p>
	القاعدتان التاليتان تُحدّدان علامات مختلفة لأصناف مختلفة من عناصر القائمة:
</p>

<pre class="css ipsCode prettyprint prettyprinted" data-pbcklang="css" data-pbcktabsize="">
<span class="pln">li</span><span class="pun">.</span><span class="pln">open </span><span class="pun">{</span><span class="pln">list</span><span class="pun">-</span><span class="pln">style</span><span class="pun">:</span><span class="pln"> circle</span><span class="pun">;}</span><span class="pln">
li</span><span class="pun">.</span><span class="pln">closed </span><span class="pun">{</span><span class="pln">list</span><span class="pun">-</span><span class="pln">style</span><span class="pun">:</span><span class="pln"> disc</span><span class="pun">;}</span></pre>

<p>
	نستخدم الأصناف للتمييز بين العناصر المفتوحة والمغلقة (مثلًا: في قائمة مهامّ):
</p>

<pre class="html ipsCode prettyprint prettyprinted" data-pbcklang="html" data-pbcktabsize="">
<span class="tag">&lt;ul&gt;</span><span class="pln">
  </span><span class="tag">&lt;li</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"open"</span><span class="tag">&gt;</span><span class="pln">Lorem ipsum</span><span class="tag">&lt;/li&gt;</span><span class="pln">
  </span><span class="tag">&lt;li</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"closed"</span><span class="tag">&gt;</span><span class="pln">Dolor sit</span><span class="tag">&lt;/li&gt;</span><span class="pln">
  </span><span class="tag">&lt;li</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"closed"</span><span class="tag">&gt;</span><span class="pln">Amet consectetuer</span><span class="tag">&lt;/li&gt;</span><span class="pln">
  </span><span class="tag">&lt;li</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"open"</span><span class="tag">&gt;</span><span class="pln">Magna aliquam</span><span class="tag">&lt;/li&gt;</span><span class="pln">
  </span><span class="tag">&lt;li</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"closed"</span><span class="tag">&gt;</span><span class="pln">Autem veleum</span><span class="tag">&lt;/li&gt;</span><span class="pln">
</span><span class="tag">&lt;/ul&gt;</span></pre>

<p>
	قد تبدو النّتيجة هكذا:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2016_01/ulist.png.6ed9649bf0d8193e350c9cfffac93df4.png" data-fileid="11900" rel="external"><img alt="ulist.png" class="ipsImage ipsImage_thumbnailed" data-fileid="11900" src="https://academy.hsoub.com/uploads/monthly_2016_01/ulist.thumb.png.b63e7002596788449a0ef53aee9efd4d.png"></a>
</p>

<h2 id="-">
	القوائم المرتبة
</h2>

<p>
	في القوائم المُرتّبة، يكون لكل عنصر علامة مختلفة تُميّز موضعه في السلسلة.
</p>

<p>
	لتعيين نمط القائمة، استخدام الخاصّة <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/list-style" rel="external nofollow"><code>list-style</code></a> لتحديد نوع العلامة الّتي تظهر قبل كلّ عنصر في القائمة:
</p>

<ul>
<li>
		<code>decimal</code> (أرقام بنظام العدّ العشريّ)
	</li>
	<li>
		<code>lower-roman</code>
	</li>
	<li>
		<code>upper-roman</code>
	</li>
	<li>
		<code>lower-latin</code>
	</li>
	<li>
		<code>upper-latin</code>
	</li>
</ul>
<h3 id="-">
	مثال
</h3>

<p>
	القاعدة التّالية تجعل العناصر في القائمة المرتّبة <code>&lt;ol&gt;</code> من الصّنف <code>info</code> مرتّبة بحروف لاتينيّة كبيرة:
</p>

<pre class="html ipsCode prettyprint prettyprinted" data-pbcklang="html" data-pbcktabsize="">
<span class="tag">&lt;ol</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"info"</span><span class="tag">&gt;</span><span class="pln">
  </span><span class="tag">&lt;li&gt;</span><span class="pln">Lorem ipsum</span><span class="tag">&lt;/li&gt;</span><span class="pln">
  </span><span class="tag">&lt;li&gt;</span><span class="pln">Dolor sit</span><span class="tag">&lt;/li&gt;</span><span class="pln">
  </span><span class="tag">&lt;li&gt;</span><span class="pln">Amet consectetuer</span><span class="tag">&lt;/li&gt;</span><span class="pln">
  </span><span class="tag">&lt;li&gt;</span><span class="pln">Magna aliquam</span><span class="tag">&lt;/li&gt;</span><span class="pln">
  </span><span class="tag">&lt;li&gt;</span><span class="pln">Autem veleum</span><span class="tag">&lt;/li&gt;</span><span class="pln">
</span><span class="tag">&lt;/ol&gt;</span></pre>

<pre class="css ipsCode prettyprint prettyprinted" data-pbcklang="css" data-pbcktabsize="">
<span class="pln">ol</span><span class="pun">.</span><span class="pln">info </span><span class="pun">{</span><span class="pln">list</span><span class="pun">-</span><span class="pln">style</span><span class="pun">:</span><span class="pln"> upper</span><span class="pun">-</span><span class="pln">latin</span><span class="pun">;}</span></pre>

<p>
	ترث العناصر <span style="font-family:courier new,courier,monospace;"><code>&lt;li&gt;</code></span> هذا التنسيق عن القائمة:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2016_01/olist.png.5ecd3553ad244637a1dae4a4a156b1fe.png" data-fileid="11899" rel="external"><img alt="olist.png" class="ipsImage ipsImage_thumbnailed" data-fileid="11899" src="https://academy.hsoub.com/uploads/monthly_2016_01/olist.thumb.png.79ed06f9f33e0842b577fe796048b948.png"></a>
</p>

<h3 id="-">
	تفاصيل أكثر
</h3>

<p>
	الخاصّة <code>list-style</code> هي خاصّة مختصرة، وقد ترغب في التنسيقات المعقّدة باستخدام الخصائص المنفردة لتعيين قيم مستقلّة. للاطّلاع على الخصائص المنفردة، وعلى تفاصيل أكثر عن قوائم CSS، راجع <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/list-style" rel="external nofollow">صفحة <code>list-style</code></a>.
</p>

<p>
	إن كنت تستخدم لغة رماز مثل HTML توفّر وسومًا مختلفة للقوائم المرتّبة (<code>&lt;li&gt;</code>) وتلك غير المرتّبة (<code>&lt;ol&gt;</code>)، فيفضّل استخدام هذه القوائم بحسب دلالتها، على أنّه يمكن عرض القوائم المرتّبة لتبدو وكأنها غير مرتّبة من خلال CSS والعكس بالعكس.
</p>

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

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

<p>
	<strong>ملاحظة هامّة</strong>: بعض المتصفحات لا تدعم العدّادات، تقدّم الصّفحة <a href="http://www.quirksmode.org/css/contents.html" rel="external nofollow">CSS contents and browser compatibility</a> على موقع <a href="http://www.quirksmode.org/" rel="external nofollow">َQuirks Mode</a> مخطّطًا تفصيليًّا لتوافق المتصفحات مع هذه الميزة وميزات أخرى، كما توفّر الصّفحات الفرديّة في <a href="" rel="external">مرجع CSS</a> معلومات عن دعم المتصفّحات.
</p>

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

<p>
	لمتابعة العدّ، تحتاج إلى إنشاء عدّاد (counter) ذي اسم خاصّ تحدّده بنفسك.
</p>

<p>
	يمكن تصفير العدّاد ضمن عنصر ما قبل البدء بالعدّ باستخدام الخاصّة <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/counter-reset" rel="external nofollow"><code>counter-reset</code></a> مع اسم العدّاد الذي اخترته. الأب المشترك للعناصر الّتي ترغب بعدّها مكانٌ مناسب لتصفير العدّاد، ولكن يمكن استخدام أي عنصر يرد قبل العناصر المطلوب عدّها.
</p>

<p>
	في كلّ عنصر ترغب بعدّه، استخدم الخاصّة <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/counter-increment" rel="external nofollow"><code>counter-increment</code></a> مع اسم العدّاد الّذي اخترته.
</p>

<p>
	لعرض العدّاد، استخدام ‎<code>::before</code>‎ أو ‎<code>::after</code>‎ مع المُحدّد واستخدم الخاصّة <code>content</code> (كما شاهدنا في <a href="https://academy.hsoub.com/programming/css/css-content" rel="">الدّرس السابق عن إضافة المحتوى</a>).
</p>

<p>
	استخدم ‎<code>counter()</code>‎ مع اسم العدّاد كقيمة للخاصّة <code>content</code>، ويمكن كذلك استخدام نوع للعلامة (غير إلزاميّ). الأنواع المُتاحة هي ذاتها الّتي عرضناها في فقرة القوائم المرتّبة.
</p>

<p>
	يزيد العنصر الّذي يعرض العدّاد قيمته عادةً.
</p>

<h3 id="-">
	مثال
</h3>

<p>
	هذه القاعدة تُنشئ عدّادًا لكلّ عنصر <code>&lt;h3&gt;</code> من الصّنف <code>numbered</code>:
</p>

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

<p>
	هذه القاعدة تعرض وتزيد العدّاد لكلّ عنصر <code>&lt;p&gt;</code> من الصّنف <code>numbered</code>:
</p>

<pre class="html ipsCode prettyprint prettyprinted" data-pbcklang="html" data-pbcktabsize="">
<span class="tag">&lt;p</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"numbered"</span><span class="tag">&gt;</span><span class="pln">Lorem ipsum</span><span class="tag">&lt;/p&gt;</span><span class="pln">
</span><span class="tag">&lt;p</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"numbered"</span><span class="tag">&gt;</span><span class="pln">Dolor sit</span><span class="tag">&lt;/p&gt;</span><span class="pln">
</span><span class="tag">&lt;p</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"numbered"</span><span class="tag">&gt;</span><span class="pln">Amet consectetuer</span><span class="tag">&lt;/p&gt;</span><span class="pln">
</span><span class="tag">&lt;p</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"numbered"</span><span class="tag">&gt;</span><span class="pln">Magna aliquam</span><span class="tag">&lt;/p&gt;</span><span class="pln">
</span><span class="tag">&lt;p</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"numbered"</span><span class="tag">&gt;</span><span class="pln">Autem veleum</span><span class="tag">&lt;/p&gt;</span></pre>

<pre class="css ipsCode prettyprint prettyprinted" data-pbcklang="css" data-pbcktabsize="">
<span class="pln">body </span><span class="pun">{</span><span class="pln">
   counter</span><span class="pun">-</span><span class="pln">reset</span><span class="pun">:</span><span class="pln"> mynum</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
p</span><span class="pun">.</span><span class="pln">numbered</span><span class="pun">:</span><span class="pln">before </span><span class="pun">{</span><span class="pln">
  content</span><span class="pun">:</span><span class="pln"> counter</span><span class="pun">(</span><span class="pln">mynum</span><span class="pun">)</span><span class="pln"> </span><span class="str">": "</span><span class="pun">;</span><span class="pln">
  counter</span><span class="pun">-</span><span class="pln">increment</span><span class="pun">:</span><span class="pln"> mynum</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="pun">}</span></pre>

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

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2016_01/counters.png.f235394aa8cfa82664c0d741fcb5ca70.png" data-fileid="11898" rel="external"><img alt="counters.png" class="ipsImage ipsImage_thumbnailed" data-fileid="11898" src="https://academy.hsoub.com/uploads/monthly_2016_01/counters.thumb.png.99e60f305211eeef8cbc83dce31e9339.png"></a>
</p>

<h3 id="-">
	تفاصيل أكثر
</h3>

<p>
	لا يمكنك استخدام العدّادات إلّا إن كنت متأكّدًا من أن كلّ جمهورك يستخدم مُتصفّحًا يوفّر العدّادات.
</p>

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

<p>
	يمكن أيضًا استخدام العدّادات بطرق أكثر تعقيدًا؛ مثلًا: لعدّ الفقرات والعناوين والعناوين الفرعيّة والفقرات في المستندات الرّسميّة.
</p>

<h2 id="-">
	تمرين: قوائم منسقة
</h2>

<p>
	أنشئ مستند HTML جديد في ملف <code>doc2.html</code>، انسخ والصق المحتوى التالي:
</p>

<pre class="html ipsCode prettyprint prettyprinted" data-pbcklang="html" data-pbcktabsize="">
<span class="dec">&lt;!DOCTYPE html&gt;</span><span class="pln">
</span><span class="tag">&lt;html&gt;</span><span class="pln">
  </span><span class="tag">&lt;head&gt;</span><span class="pln">
    </span><span class="tag">&lt;meta</span><span class="pln"> </span><span class="atn">charset</span><span class="pun">=</span><span class="atv">"UTF-8"</span><span class="tag">&gt;</span><span class="pln">
    </span><span class="tag">&lt;title&gt;</span><span class="pln">Sample document 2</span><span class="tag">&lt;/title&gt;</span><span class="pln">
    </span><span class="tag">&lt;link</span><span class="pln"> </span><span class="atn">rel</span><span class="pun">=</span><span class="atv">"stylesheet"</span><span class="pln"> </span><span class="atn">href</span><span class="pun">=</span><span class="atv">"style2.css"</span><span class="tag">&gt;</span><span class="pln">
  </span><span class="tag">&lt;/head&gt;</span><span class="pln">
  </span><span class="tag">&lt;body&gt;</span><span class="pln">

    </span><span class="tag">&lt;h3</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"oceans"</span><span class="tag">&gt;</span><span class="pln">The oceans</span><span class="tag">&lt;/h3&gt;</span><span class="pln">
    </span><span class="tag">&lt;ul&gt;</span><span class="pln">
      </span><span class="tag">&lt;li&gt;</span><span class="pln">Arctic</span><span class="tag">&lt;/li&gt;</span><span class="pln">
      </span><span class="tag">&lt;li&gt;</span><span class="pln">Atlantic</span><span class="tag">&lt;/li&gt;</span><span class="pln">
      </span><span class="tag">&lt;li&gt;</span><span class="pln">Pacific</span><span class="tag">&lt;/li&gt;</span><span class="pln">
      </span><span class="tag">&lt;li&gt;</span><span class="pln">Indian</span><span class="tag">&lt;/li&gt;</span><span class="pln">
      </span><span class="tag">&lt;li&gt;</span><span class="pln">Southern</span><span class="tag">&lt;/li&gt;</span><span class="pln">
    </span><span class="tag">&lt;/ul&gt;</span><span class="pln">

    </span><span class="tag">&lt;h3</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"numbered"</span><span class="tag">&gt;</span><span class="pln">Numbered paragraphs</span><span class="tag">&lt;/h3&gt;</span><span class="pln">
    </span><span class="tag">&lt;p</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"numbered"</span><span class="tag">&gt;</span><span class="pln">Lorem ipsum</span><span class="tag">&lt;/p&gt;</span><span class="pln">
    </span><span class="tag">&lt;p</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"numbered"</span><span class="tag">&gt;</span><span class="pln">Dolor sit</span><span class="tag">&lt;/p&gt;</span><span class="pln">
    </span><span class="tag">&lt;p</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"numbered"</span><span class="tag">&gt;</span><span class="pln">Amet consectetuer</span><span class="tag">&lt;/p&gt;</span><span class="pln">
    </span><span class="tag">&lt;p</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"numbered"</span><span class="tag">&gt;</span><span class="pln">Magna aliquam</span><span class="tag">&lt;/p&gt;</span><span class="pln">
    </span><span class="tag">&lt;p</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"numbered"</span><span class="tag">&gt;</span><span class="pln">Autem veleum</span><span class="tag">&lt;/p&gt;</span><span class="pln">

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

<p>
	أنشئ ورقة أنماط جديدة <code>style2.css</code> وضع فيها المحتوى التّالي:
</p>

<pre class="css ipsCode prettyprint prettyprinted" data-pbcklang="css" data-pbcktabsize="">
<span class="com">/* numbered paragraphs */</span><span class="pln">
h3</span><span class="pun">.</span><span class="pln">numbered </span><span class="pun">{</span><span class="pln">counter</span><span class="pun">-</span><span class="pln">reset</span><span class="pun">:</span><span class="pln"> mynum</span><span class="pun">;}</span><span class="pln">

p</span><span class="pun">.</span><span class="pln">numbered</span><span class="pun">:</span><span class="pln">before </span><span class="pun">{</span><span class="pln">
  content</span><span class="pun">:</span><span class="pln"> counter</span><span class="pun">(</span><span class="pln">mynum</span><span class="pun">)</span><span class="pln"> </span><span class="str">": "</span><span class="pun">;</span><span class="pln">
  counter</span><span class="pun">-</span><span class="pln">increment</span><span class="pun">:</span><span class="pln"> mynum</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="pun">}</span></pre>

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

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

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2016_01/c4.png.51f584d98e7917795e33c8fbb0ea282a.png" data-fileid="11897" rel="external"><img alt="c4.png" class="ipsImage ipsImage_thumbnailed" data-fileid="11897" src="https://academy.hsoub.com/uploads/monthly_2016_01/c4.thumb.png.baebc2059ff2adc40bb78c3f9f3282b7.png"></a>
</p>

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

<p>
	أضف قاعدة إلى ورقة الأنماط السّابقة بحيث تعدّ الأرقام باستخدام الحروف الرّومانيّة من i إلى v:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2016_01/lower-roman.png.c38f1d936c041879390e1dba03008134.png" data-fileid="11896" rel="external"><img alt="lower-roman.png" class="ipsImage ipsImage_thumbnailed" data-fileid="11896" src="https://academy.hsoub.com/uploads/monthly_2016_01/lower-roman.thumb.png.d1ed828487ad59f858370b2490f5bec9.png"></a>
</p>

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

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2016_01/upper-latin.png.2673a6add487a2be6a98790e5ff76264.png" data-fileid="11895" rel="external"><img alt="upper-latin.png" class="ipsImage ipsImage_thumbnailed" data-fileid="11895" src="https://academy.hsoub.com/uploads/monthly_2016_01/upper-latin.thumb.png.4c01ee4917806127732af1e2139d3f30.png"></a>
</p>

<div class="challenge">
	 
</div>

<div class="challenge">
	<input id="input_solution" name="solution" type="checkbox"><label for="input_solution"> شاهد الحل </label>
	<div class="solution">
		<h3 id="-">
			الحروف الرّومانيّة الصّغيرة
		</h3>

		<p>
			عرّف قاعدة لعناصر القائمة لتستخدم <code>lower-roman</code> كقيمة للخاصّة <code>list-style</code>:
		</p>

		<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_7975_8">
<span class="pln">li </span><span class="pun">{</span><span class="pln">
  list</span><span class="pun">-</span><span class="pln">style</span><span class="pun">:</span><span class="pln"> lower</span><span class="pun">-</span><span class="pln">roman</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></pre>

		<h3 id="-">
			الحروف اللاتينيّة الكبيرة
		</h3>

		<p>
			أضف قاعدة لمتن المستند (كونه أب العناوين) لتصفير عدّاد جديد، ثمّ زد قيمته عند كلّ عنوان:
		</p>

		<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_7975_10">
<span class="com">/* numbered headings */</span><span class="pln">
body </span><span class="pun">{</span><span class="pln">counter</span><span class="pun">-</span><span class="pln">reset</span><span class="pun">:</span><span class="pln"> headnum</span><span class="pun">;}</span><span class="pln">
h3</span><span class="pun">:</span><span class="pln">before </span><span class="pun">{</span><span class="pln">
  content</span><span class="pun">:</span><span class="pln"> </span><span class="str">"("</span><span class="pln"> counter</span><span class="pun">(</span><span class="pln">headnum</span><span class="pun">,</span><span class="pln"> upper</span><span class="pun">-</span><span class="pln">latin</span><span class="pun">)</span><span class="pln"> </span><span class="str">") "</span><span class="pun">;</span><span class="pln">
  counter</span><span class="pun">-</span><span class="pln">increment</span><span class="pun">:</span><span class="pln"> headnum</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></pre>

		<h2>
			ما التّالي؟
		</h2>
	</div>
</div>

<p>
	عندما يعرض المتصفّح مستندك، فإنّه يُنشئ مساحات حول العناصر عندما يضعها في مواضعها في الصّفحة، سنشرح في الدّرس القادم كيف يمكن استخدام CSS للتّعامل مع الأشكال الضّمنيّة للعناصر (المستطيلات) من خلال استخدام <a href="https://academy.hsoub.com/programming/css/%D8%AA%D8%B9%D8%B1%D9%81-%D8%B9%D9%84%D9%89-%D8%A7%D9%84%D8%B5%D9%86%D8%A7%D8%AF%D9%8A%D9%82-boxes-%D9%81%D9%8A-css-r263/" rel="">الصناديق Boxes في CSS</a>.
</p>

<p>
	ترجمة -وبتصرف- للمقال <a href="https://developer.mozilla.org/en-US/docs/Web/Guide/CSS/Getting_Started/Lists" rel="external nofollow">Lists</a> من سلسلة <a href="https://developer.mozilla.org/en-US/docs/Web/Guide/CSS/Getting_started" rel="external nofollow" target="_blank">Getting started with CSS</a> على شبكة مطوّري Mozilla.
</p>
]]></description><guid isPermaLink="false">259</guid><pubDate>Fri, 11 Mar 2016 22:27:00 +0000</pubDate></item><item><title>&#x625;&#x636;&#x627;&#x641;&#x629; &#x645;&#x62D;&#x62A;&#x648;&#x649; &#x625;&#x644;&#x649; &#x635;&#x641;&#x62D;&#x629; &#x648;&#x64A;&#x628; &#x628;&#x627;&#x633;&#x62A;&#x62E;&#x62F;&#x627;&#x645; CSS</title><link>https://academy.hsoub.com/programming/css/%D8%A5%D8%B6%D8%A7%D9%81%D8%A9-%D9%85%D8%AD%D8%AA%D9%88%D9%89-%D8%A5%D9%84%D9%89-%D8%B5%D9%81%D8%AD%D8%A9-%D9%88%D9%8A%D8%A8-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-css-r258/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2016_03/css-before-after.png.fd105183a80ab5deccf7f4bcc16d0710.png" /></p>

<p>
	سنشرح في هذا الدرس من <a href="https://academy.hsoub.com/search/?tags=css+101" rel="">سلسلة تعلم CSS</a> كيف نستخدم CSS لإضافة محتوى إلى المستند عند عرضه. سنتدّرب على ذلك بإضافة بعض الجمل وصورة في ورقة الأنماط الّتي نعمل عليها.
</p>

<p style="text-align: center;">
	<img alt="css-before-after.png" class="ipsImage ipsImage_thumbnailed" data-fileid="13806" data-unique="ypohxtdxs" src="https://academy.hsoub.com/uploads/monthly_2016_03/css-before-after.png.c82d24dbd91899ad801ec7dd79bf89f3.png"></p>

<p style="box-sizing: border-box; line-height: 35.2px; text-align: justify; color: rgb(39, 42, 52); font-family: 'Droid Arabic Naskh', 'Open Sans', 'Helvetica Neue', Helvetica, Tahoma, Arial, sans-serif; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 1; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);">
	فهرس السلسلة:
</p>

<ul style="box-sizing: border-box; color: rgb(39, 42, 52); font-family: 'Droid Arabic Naskh', 'Open Sans', 'Helvetica Neue', Helvetica, Tahoma, Arial, sans-serif; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 35.2px; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 1; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);">
<li style="box-sizing: border-box;">
		<a href="https://academy.hsoub.com/programming/css/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D8%A3%D9%88%D8%B1%D8%A7%D9%82-%D8%A7%D9%84%D8%A3%D9%86%D9%85%D8%A7%D8%B7-%D8%A7%D9%84%D9%85%D8%AA%D8%AA%D8%A7%D9%84%D9%8A%D8%A9-css-r246/" rel="" style="box-sizing: border-box; color: rgb(0, 201, 165); text-decoration: underline; background-color: transparent;">مدخل إلى أوراق الأنماط المتتالية (CSS)</a>.
	</li>
	<li style="box-sizing: border-box;">
		<a href="https://academy.hsoub.com/programming/css/%D8%A2%D9%84%D9%8A%D8%A9-%D8%B9%D9%85%D9%84-%D8%AA%D8%B9%D9%84%D9%8A%D9%85%D8%A7%D8%AA-css-%D8%AF%D8%A7%D8%AE%D9%84-%D8%A7%D9%84%D9%85%D8%AA%D8%B5%D9%81%D8%AD%D8%A7%D8%AA-r247/" rel="">آلية عمل تعليمات CSS داخل المتصفحات</a>.
	</li>
	<li style="box-sizing: border-box;">
		<a data-linktype="link" data-searchable="" href="https://academy.hsoub.com/programming/css/%D8%A7%D9%84%D9%85%D8%AD%D8%AF%D8%AF%D8%A7%D8%AA-selectors-%D9%81%D9%8A-css-r249/" rel="" style="box-sizing: border-box; color: rgb(0, 201, 165); text-decoration: underline; background-color: transparent;">المحددات (Selectors) في CSS</a>.
	</li>
	<li style="box-sizing: border-box;">
		<a data-linktype="link" data-searchable="" href="https://academy.hsoub.com/programming/css/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D9%83%D8%AA%D8%A7%D8%A8%D8%A9-%D8%AA%D8%B9%D9%84%D9%8A%D9%85%D8%A7%D8%AA-css-%D9%8A%D8%B3%D9%87%D9%84-%D9%82%D8%B1%D8%A7%D8%A1%D8%AA%D9%87%D8%A7-r250/" rel="" style="box-sizing: border-box; color: rgb(0, 201, 165); text-decoration: underline; background-color: transparent;">كيفية كتابة تعليمات CSS يسهل قراءتها</a>.
	</li>
	<li style="box-sizing: border-box;">
		<a data-linktype="link" data-searchable="" href="https://academy.hsoub.com/programming/css/%D8%AA%D9%86%D8%B3%D9%8A%D9%82-%D9%86%D8%B5%D9%88%D8%B5-%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-r251/" rel="" style="box-sizing: border-box; color: rgb(0, 201, 165); text-decoration: underline; background-color: transparent;">تنسيق نصوص صفحات الويب باستخدام CSS</a>.
	</li>
	<li style="box-sizing: border-box;">
		<a data-linktype="link" data-searchable="" href="https://academy.hsoub.com/programming/css/%D8%A7%D9%84%D8%AA%D8%B9%D8%A7%D9%85%D9%84-%D9%85%D8%B9-%D8%A7%D9%84%D8%A3%D9%84%D9%88%D8%A7%D9%86-%D9%81%D9%8A-css-r255/" rel="" style="box-sizing: border-box; color: rgb(0, 201, 165); text-decoration: underline; background-color: transparent;">التعامل مع الألوان في CSS</a>.
	</li>
	<li style="box-sizing: border-box;">
		إضافة محتوى إلى صفحة ويب باستخدام CSS. (هذا الدرس)
	</li>
	<li style="box-sizing: border-box;">
		<a data-linktype="link" data-searchable="" href="https://academy.hsoub.com/programming/css/%D8%AA%D9%86%D8%B3%D9%8A%D9%82-%D8%A7%D9%84%D9%82%D9%88%D8%A7%D8%A6%D9%85-lists-%D9%81%D9%8A-css-r259/" rel="" style="box-sizing: border-box; color: rgb(0, 201, 165); text-decoration: underline; background-color: transparent;">تنسيق القوائم (Lists) في CSS</a>.
	</li>
	<li style="box-sizing: border-box;">
		<a data-linktype="link" data-searchable="" href="https://academy.hsoub.com/programming/css/%D8%AA%D8%B9%D8%B1%D9%81-%D8%B9%D9%84%D9%89-%D8%A7%D9%84%D8%B5%D9%86%D8%A7%D8%AF%D9%8A%D9%82-boxes-%D9%81%D9%8A-css-r263/" rel="" style="box-sizing: border-box; color: rgb(0, 201, 165); text-decoration: underline; background-color: transparent;">تعرف على الصناديق (Boxes) في CSS</a>.
	</li>
	<li style="box-sizing: border-box;">
		<a data-linktype="link" data-searchable="" href="https://academy.hsoub.com/programming/css/%D8%B1%D8%B5%D9%81-%D8%A7%D9%84%D8%B9%D9%86%D8%A7%D8%B5%D8%B1-layout-%D9%81%D9%8A-css-r264/" rel="" style="box-sizing: border-box; color: rgb(0, 201, 165); text-decoration: underline; background-color: transparent;">رصف العناصر (Layout) في CSS</a>.
	</li>
	<li style="box-sizing: border-box;">
		<a data-linktype="link" data-searchable="" href="https://academy.hsoub.com/programming/css/%D8%A7%D9%84%D8%AC%D8%AF%D8%A7%D9%88%D9%84-tables-%D9%81%D9%8A-css-r266/" rel="" style="box-sizing: border-box; color: rgb(0, 201, 165); text-decoration: underline; background-color: transparent;">الجداول (Tables) في CSS</a>.
	</li>
	<li style="box-sizing: border-box;">
		<a href="https://academy.hsoub.com/programming/css/%D8%A7%D9%84%D8%AA%D8%B9%D8%A7%D9%85%D9%84-%D9%85%D8%B9-%D8%A3%D8%AC%D9%87%D8%B2%D8%A9-%D8%A7%D9%84%D8%B9%D8%B1%D8%B6-%D8%A7%D9%84%D9%85%D8%AE%D8%AA%D9%84%D9%81%D8%A9-%D9%88%D8%A7%D9%84%D9%85%D8%B7%D8%A8%D9%88%D8%B9%D8%A7%D8%AA-%D9%81%D9%8A-css-r268/" rel="" style="box-sizing: border-box; color: rgb(0, 201, 165); text-decoration: underline; background-color: transparent;">التعامل مع أجهزة العرض المختلفة والمطبوعات في CSS</a>.
	</li>
</ul>
<h2 id="-">
	المحتوى
</h2>

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

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

<h3 id="-">
	تفاصيل أكثر
</h3>

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

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

<p>
	لاحظ أنّ المحتوى المُضاف من خلال CSS لا يُصبح جزءًا من الـ DOM.
</p>

<h2 id="-">
	المحتوى النصي
</h2>

<p>
	يمكن إدخال محتوى نصّيّ إلى الصّفحة من خلال CSS بعد عنصر مُعيّن أو بعده، ولإنجاز ذلك أضف ‎<code>::after</code>‎ أو ‎<code>::before</code>‎ إلى المُحدِّد، واستخدم الخاصّة <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/content" rel="external nofollow"><code>content</code></a> ضمن القاعدة واجعل قيمتها المحتوى المطلوب إضافته.
</p>

<h3 id="-">
	مثال
</h3>

<pre class="html ipsCode prettyprint prettyprinted" data-pbcklang="html" data-pbcktabsize="">
<span class="pln">A text </span><span class="kwd">where</span><span class="pln"> I need to </span><span class="pun">&lt;</span><span class="pln">span </span><span class="kwd">class</span><span class="pun">=</span><span class="str">"ref"</span><span class="pun">&gt;</span><span class="pln">something</span><span class="pun">&lt;/</span><span class="pln">span</span><span class="pun">&gt;</span></pre>

<pre class="css ipsCode prettyprint prettyprinted" data-pbcklang="css" data-pbcktabsize="">
<span class="pun">.</span><span class="kwd">ref</span><span class="pun">::</span><span class="pln">before </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">
  color</span><span class="pun">:</span><span class="pln"> navy</span><span class="pun">;</span><span class="pln">
  content</span><span class="pun">:</span><span class="pln"> </span><span class="str">"Reference: "</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	النتيجة:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2016_01/content.png.aaa7dc9cd9acba18fb2d173dbf3950f2.png" data-fileid="11871" rel="external"><img alt="content.png" class="ipsImage ipsImage_thumbnailed" data-fileid="11871" src="https://academy.hsoub.com/uploads/monthly_2016_01/content.thumb.png.161394720361bd8e5777346254affa81.png"></a>
</p>

<h3 id="-">
	تفاصيل أكثر
</h3>

<p>
	تكون مجموعة المحارف لورقة الأنماط هي UTF-8 ما لم يحدّد غيرها، ولاستخدام مجموعة محارف أخرى يمكن ذكر ذلك في <code>&lt;link&gt;</code> أو في ورقة الأنماط ذاتها، أو بوسائل أخرى.
</p>

<p>
	كذلك يمكن تحديد محارف بعينها باستخدام تقنية محرف‎ الهروب (escape character) وهو <code>\</code>، فمثلًا تعني مجموعة الحروف ‎<code>\265B</code>‎ رمز الملكة في الشّطرنج (♛) للطّرف الأسود.
</p>

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

<p>
	لإضافة صورة قبل أو بعد عنصر مُعيّن، يمكن استخدام رابط الصّورة كقيمة للخاصّة <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/content" rel="external nofollow"><code>content</code></a>.
</p>

<h3 id="-">
	مثال
</h3>

<p>
	هذه القاعدة تضيف مسافة ثمّ أيقونة بعد كل رابط من الصّنف <code>glossary</code>:
</p>

<pre class="css ipsCode prettyprint prettyprinted" data-pbcklang="css" data-pbcktabsize="">
<span class="pln">a</span><span class="pun">.</span><span class="pln">glossary</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="pln"> </span><span class="str">" "</span><span class="pln"> url</span><span class="pun">(</span><span class="str">"../images/glossary-icon.gif"</span><span class="pun">);}</span></pre>

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

<h3 id="-">
	مثال
</h3>

<p>
	تعيّن القاعدة التالية خلفيّة العنصر باستخدام رابط لملفّ صورة، حيث يستهدف المُحدّد مُعرّف العنصر، وتحدّد القيمة <code>no-repeat</code> من تكرار الصّورة بحيث لا تظهر إلا مرّة واحدة:
</p>

<pre class="css ipsCode prettyprint prettyprinted" data-pbcklang="css" data-pbcktabsize="">
<span class="com">#sidebar-box {background: url("../images/sidebar-ground.png") no-repeat;}</span></pre>

<h3 id="-">
	تفاصيل أكثر
</h3>

<p>
	لمعلومات أكثر عن الخواص المنفردة الّتي تتعلّق بالخلفيّة، وخيارات أخرى لتحديد صور الخلفيّة، راجع صفحة <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/background" rel="external nofollow"><code>background</code></a>.
</p>

<h2 id="-">
	تمرين: إضافة صورة خلفية
</h2>

<p>
	الصّورة التالية هي مربّع أبيض فيه سطر أزرق في قسمه السّفليّ:
</p>

<p>
	<a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2016_01/Blue-rule.png.13be1d2d0e566fb7688c58b1ecc551fc.png" data-fileid="11875" rel="external"><img alt="Blue-rule.png" class="ipsImage ipsImage_thumbnailed" data-fileid="11875" src="https://academy.hsoub.com/uploads/monthly_2016_01/Blue-rule.thumb.png.98e9d19b9360aba406a27d30d46686cf.png"></a>
</p>

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

		<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_7821_7">
<span class="pln">background</span><span class="pun">:</span><span class="pln"> url</span><span class="pun">(</span><span class="str">"Blue-rule.png"</span><span class="pun">);</span></pre>

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

		<p style="text-align: center;">
			<a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2016_01/paper.png.31ad690e0dae5d0d7d15f380af4235a9.png" data-fileid="11874" rel="external"><img alt="paper.png" class="ipsImage ipsImage_thumbnailed" data-fileid="11874" src="https://academy.hsoub.com/uploads/monthly_2016_01/paper.thumb.png.afb7a7926d8f96614ccbf317dc8b1015.png"></a>
		</p>
	</li>
</ol>
<h2 id="-">
	تمرين
</h2>

<p>
	احفظ الصّورة التالية:
</p>

<p>
	<a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2016_01/Yellow-pin.png.35a23a7bdb18a940429cde9127850924.png" data-fileid="11873" rel="external"><img alt="Yellow-pin.png" class="ipsImage ipsImage_thumbnailed" data-fileid="11873" src="https://academy.hsoub.com/uploads/monthly_2016_01/Yellow-pin.thumb.png.3637a3585caf2adf2b59219a0571cb2a.png"></a>
</p>

<p>
	وأضف قاعدة واحدة تجعل الصّورة تظهر في بداية كلّ سطر:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2016_01/56a7cbae23350_paperpin.png.9e2bad1d3ca8f4588e1fd2fe11d07d43.png" data-fileid="11872" rel="external"><img alt="paper+pin.png" class="ipsImage ipsImage_thumbnailed" data-fileid="11872" src="https://academy.hsoub.com/uploads/monthly_2016_01/56a7cbae26e04_paperpin.thumb.png.2cb1ee99b1b871cbeb4fcfb9d6ba941c.png"></a>
</p>

<div class="challenge">
	<input id="input_solution" name="input_solution" type="checkbox"><label for="input_solution"> شاهد الحل </label>
	<div class="solution">
		<p>
			أضف هذه القاعدة إلى ورقة الأنماط:
		</p>

		<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_1162_7">
<span class="pln">p</span><span class="pun">:</span><span class="pln">before</span><span class="pun">{</span><span class="pln">
  content</span><span class="pun">:</span><span class="pln"> url</span><span class="pun">(</span><span class="str">"yellow-pin.png"</span><span class="pun">);</span><span class="pln">
</span><span class="pun">}</span></pre>

		<p>
			 
		</p>
	</div>
</div>

<h2 id="-">
	ما التالي؟
</h2>

<p>
	من الطّرق الشائعة التي تضيف فيها ورقة الأنماط المُحتوى إلى الصفحة هي إضافة علامة إلى العناصر في القوائم، سنتعلّم كيفبية <a href="https://academy.hsoub.com/programming/css/%D8%AA%D9%86%D8%B3%D9%8A%D9%82-%D8%A7%D9%84%D9%82%D9%88%D8%A7%D8%A6%D9%85-lists-%D9%81%D9%8A-css-r259/" rel="">تنسيق القوائم</a> في الدّرس القادم.
</p>

<p>
	ترجمة -وبتصرف- للمقال <a href="https://developer.mozilla.org/en-US/docs/Web/Guide/CSS/Getting_Started/Content" rel="external nofollow">Content</a> من سلسلة <a href="https://developer.mozilla.org/en-US/docs/Web/Guide/CSS/Getting_started" rel="external nofollow" target="_blank">Getting started with CSS</a> على شبكة مطوّري Mozilla.
</p>
]]></description><guid isPermaLink="false">258</guid><pubDate>Wed, 09 Mar 2016 21:32:00 +0000</pubDate></item><item><title>&#x627;&#x644;&#x62A;&#x639;&#x627;&#x645;&#x644; &#x645;&#x639; &#x627;&#x644;&#x623;&#x644;&#x648;&#x627;&#x646; &#x641;&#x64A; CSS</title><link>https://academy.hsoub.com/programming/css/%D8%A7%D9%84%D8%AA%D8%B9%D8%A7%D9%85%D9%84-%D9%85%D8%B9-%D8%A7%D9%84%D8%A3%D9%84%D9%88%D8%A7%D9%86-%D9%81%D9%8A-css-r255/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2016_03/css-colors.png.bb6dc3ce88fbfafa8dff82f80f109dab.png" /></p>
<p>
	في هذا الدّرس من <a href="https://academy.hsoub.com/search/?tags=css+101" rel="">سلسلة تعلّم CSS</a>؛ سنشرح كيفيّة تحديد الألوان في أوراق الأنماط، وسنتدرّب على ذلك بتغيير لون الخلفيّة.
</p>

<p style="text-align: center;">
	<img alt="css-colors.png" class="ipsImage ipsImage_thumbnailed" data-fileid="13712" data-unique="4qwbltje7" src="https://academy.hsoub.com/uploads/monthly_2016_03/css-colors.png.071ebb60a6bd801cf05721304ac90b0e.png">
</p>

<p style="box-sizing: border-box; line-height: 35.2px; text-align: justify; color: rgb(39, 42, 52); font-family: 'Droid Arabic Naskh', 'Open Sans', 'Helvetica Neue', Helvetica, Tahoma, Arial, sans-serif; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 1; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);">
	فهرس السلسلة:
</p>

<ul style="box-sizing: border-box; color: rgb(39, 42, 52); font-family: 'Droid Arabic Naskh', 'Open Sans', 'Helvetica Neue', Helvetica, Tahoma, Arial, sans-serif; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 35.2px; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 1; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);">
	<li style="box-sizing: border-box;">
		<a href="https://academy.hsoub.com/programming/css/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D8%A3%D9%88%D8%B1%D8%A7%D9%82-%D8%A7%D9%84%D8%A3%D9%86%D9%85%D8%A7%D8%B7-%D8%A7%D9%84%D9%85%D8%AA%D8%AA%D8%A7%D9%84%D9%8A%D8%A9-css-r246/" rel="" style="box-sizing: border-box; color: rgb(0, 201, 165); text-decoration: underline; background-color: transparent;">مدخل إلى أوراق الأنماط المتتالية (CSS)</a>.
	</li>
	<li style="box-sizing: border-box;">
		<a href="https://academy.hsoub.com/programming/css/%D8%A2%D9%84%D9%8A%D8%A9-%D8%B9%D9%85%D9%84-%D8%AA%D8%B9%D9%84%D9%8A%D9%85%D8%A7%D8%AA-css-%D8%AF%D8%A7%D8%AE%D9%84-%D8%A7%D9%84%D9%85%D8%AA%D8%B5%D9%81%D8%AD%D8%A7%D8%AA-r247/" rel="">آلية عمل تعليمات CSS داخل المتصفحات</a>.
	</li>
	<li style="box-sizing: border-box;">
		<a data-linktype="link" data-searchable="" href="https://academy.hsoub.com/programming/css/%D8%A7%D9%84%D9%85%D8%AD%D8%AF%D8%AF%D8%A7%D8%AA-selectors-%D9%81%D9%8A-css-r249/" rel="" style="box-sizing: border-box; color: rgb(0, 201, 165); text-decoration: underline; background-color: transparent;">المحددات (Selectors) في CSS</a>.
	</li>
	<li style="box-sizing: border-box;">
		<a data-linktype="link" data-searchable="" href="https://academy.hsoub.com/programming/css/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D9%83%D8%AA%D8%A7%D8%A8%D8%A9-%D8%AA%D8%B9%D9%84%D9%8A%D9%85%D8%A7%D8%AA-css-%D9%8A%D8%B3%D9%87%D9%84-%D9%82%D8%B1%D8%A7%D8%A1%D8%AA%D9%87%D8%A7-r250/" rel="" style="box-sizing: border-box; color: rgb(0, 201, 165); text-decoration: underline; background-color: transparent;">كيفية كتابة تعليمات CSS يسهل قراءتها</a>.
	</li>
	<li style="box-sizing: border-box;">
		<a data-linktype="link" data-searchable="" href="https://academy.hsoub.com/programming/css/%D8%AA%D9%86%D8%B3%D9%8A%D9%82-%D9%86%D8%B5%D9%88%D8%B5-%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-r251/" rel="" style="box-sizing: border-box; color: rgb(0, 201, 165); text-decoration: underline; background-color: transparent;">تنسيق نصوص صفحات الويب باستخدام CSS</a>.
	</li>
	<li style="box-sizing: border-box;">
		التعامل مع الألوان في CSS. (هذا الدرس)
	</li>
	<li style="box-sizing: border-box;">
		<a data-linktype="link" data-searchable="" href="https://academy.hsoub.com/programming/css/%D8%A5%D8%B6%D8%A7%D9%81%D8%A9-%D9%85%D8%AD%D8%AA%D9%88%D9%89-%D8%A5%D9%84%D9%89-%D8%B5%D9%81%D8%AD%D8%A9-%D9%88%D9%8A%D8%A8-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-css-r258/" rel="" style="box-sizing: border-box; color: rgb(0, 201, 165); text-decoration: underline; background-color: transparent;">إضافة محتوى إلى صفحة ويب باستخدام CSS</a>.
	</li>
	<li style="box-sizing: border-box;">
		<a data-linktype="link" data-searchable="" href="https://academy.hsoub.com/programming/css/%D8%AA%D9%86%D8%B3%D9%8A%D9%82-%D8%A7%D9%84%D9%82%D9%88%D8%A7%D8%A6%D9%85-lists-%D9%81%D9%8A-css-r259/" rel="" style="box-sizing: border-box; color: rgb(0, 201, 165); text-decoration: underline; background-color: transparent;">تنسيق القوائم (Lists) في CSS</a>.
	</li>
	<li style="box-sizing: border-box;">
		<a data-linktype="link" data-searchable="" href="https://academy.hsoub.com/programming/css/%D8%AA%D8%B9%D8%B1%D9%81-%D8%B9%D9%84%D9%89-%D8%A7%D9%84%D8%B5%D9%86%D8%A7%D8%AF%D9%8A%D9%82-boxes-%D9%81%D9%8A-css-r263/" rel="" style="box-sizing: border-box; color: rgb(0, 201, 165); text-decoration: underline; background-color: transparent;">تعرف على الصناديق (Boxes) في CSS</a>.
	</li>
	<li style="box-sizing: border-box;">
		<a data-linktype="link" data-searchable="" href="https://academy.hsoub.com/programming/css/%D8%B1%D8%B5%D9%81-%D8%A7%D9%84%D8%B9%D9%86%D8%A7%D8%B5%D8%B1-layout-%D9%81%D9%8A-css-r264/" rel="" style="box-sizing: border-box; color: rgb(0, 201, 165); text-decoration: underline; background-color: transparent;">رصف العناصر (Layout) في CSS</a>.
	</li>
	<li style="box-sizing: border-box;">
		<a data-linktype="link" data-searchable="" href="https://academy.hsoub.com/programming/css/%D8%A7%D9%84%D8%AC%D8%AF%D8%A7%D9%88%D9%84-tables-%D9%81%D9%8A-css-r266/" rel="" style="box-sizing: border-box; color: rgb(0, 201, 165); text-decoration: underline; background-color: transparent;">الجداول (Tables) في CSS</a>.
	</li>
	<li style="box-sizing: border-box;">
		<a href="https://academy.hsoub.com/programming/css/%D8%A7%D9%84%D8%AA%D8%B9%D8%A7%D9%85%D9%84-%D9%85%D8%B9-%D8%A3%D8%AC%D9%87%D8%B2%D8%A9-%D8%A7%D9%84%D8%B9%D8%B1%D8%B6-%D8%A7%D9%84%D9%85%D8%AE%D8%AA%D9%84%D9%81%D8%A9-%D9%88%D8%A7%D9%84%D9%85%D8%B7%D8%A8%D9%88%D8%B9%D8%A7%D8%AA-%D9%81%D9%8A-css-r268/" rel="" style="box-sizing: border-box; color: rgb(0, 201, 165); text-decoration: underline; background-color: transparent;">التعامل مع أجهزة العرض المختلفة والمطبوعات في CSS</a>.
	</li>
</ul>

<h2 id="-">
	الألوان
</h2>

<p>
	استخدمنا في الدّروس السّابقة مجموعة محدودة من الألوان المُسمّاة. تدعم css في مجملها 17 لونًا مُسمّىً، قد تبدو لك بعض هذه الأسماء غريبة:
</p>

<h3>
	الألوان الأساسية
</h3>

<ul>
	<li>
		<code>black</code>: <span class="box dark" style="background-color: black;">الأسود</span>
	</li>
	<li>
		<code>silver</code>: <span class="box light" style="background-color: silver;">الفضّيّ</span>
	</li>
	<li>
		<code>white</code>: <span class="box light" style="background-color: white;">الأبيض</span>
	</li>
	<li>
		<code>red</code>: <span class="box light" style="background-color: red;">الأحمر</span>
	</li>
	<li>
		<code>lime</code>: <span class="box light" style="background-color: lime;">الزيزفونيّ</span>
	</li>
	<li>
		<code>blue</code>: <span class="box dark" style="background-color: blue;">الأزرق</span>
	</li>
</ul>

<h3>
	الألوان الثانوية
</h3>

<ul>
	<li>
		<code>yellow</code>: <span class="box light" style="background-color: yellow;">الأصفر</span>
	</li>
	<li>
		<code>aqua</code>: <span class="box light" style="background-color: aqua;">المائيّ</span>
	</li>
	<li>
		<code>fuchsia</code>: <span class="box dark" style="background-color: fuchsia;">الفوشيّ</span>
	</li>
	<li>
		<code>maroon</code>: <span class="box dark" style="background-color: maroon;">الأجرّيّ</span>
	</li>
	<li>
		<code>orange</code>: <span class="box dark" style="background-color: orange;">البرتقالي</span>
	</li>
	<li>
		<code>olive</code>: <span class="box light" style="background-color: olive;">الزيتوني</span>
	</li>
	<li>
		<code>purple</code>: <span class="box dark" style="background-color: purple;">البنفسجيّ</span>
	</li>
	<li>
		<code>green</code>: <span class="box dark" style="background-color: green;">الأخضر</span>
	</li>
	<li>
		<code>navy</code>: <span class="box dark" style="background-color: navy;">النيلي</span>
	</li>
	<li>
		<code>teal</code>: <span class="box light" style="background-color: teal;">تركواز</span>
	</li>
</ul>

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

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

<p style="text-align: center;">
	<span class="box light" style="background-color: dodgerblue;"><code>dodgerblue</code></span> <span class="box light" style="background-color: peachpuff;"><code>peachpuff</code></span> <span class="box light" style="background-color: firebrick;"><code>firebrick</code></span> <span class="box light" style="background-color: aquamarine;"><code>aquamarine</code></span>
</p>

<p>
	لتفاصيل أكثر عن هذه القائمة الموسّعة، اطّلع على <a href="http://www.w3.org/TR/2003/CR-css3-color-20030514/#svg-color" rel="external nofollow">كلمات ألوان SVG</a> في وحدة ألوان CSS3. انتبه عند استخدام أسماء ألوان قد تكون غير مدعومة في متصفّحات جمهورك.
</p>

<p>
	لاستخدام ألوان أخرى، يمكن تحديد المكوّنات الثلاثة الرئيسيّة لأيّ لون، الأحمر والأخضر والأزرق، باستخدام إشارة الرّقم (<code>#</code>) متبوعة بثلاثة أعداد بنظام العدّ الستّعشري (hexadecimal) والّتي يُرمز لها بالرّموز بين 0 و9 ثمّ بين a وf، حيث تُشير الحروف بين a وf إلى القيم 10-15:
</p>

<ul>
	<li>
		الأسود: <code>#000</code>‎‎‏   ‎‎<span class="box dark" style="background-color: #000;"> </span>‎
	</li>
	<li>
		الأحمر الخالص: <code>#f00 </code><span class="box dark" style="background-color: #f00;"> </span>
	</li>
	<li>
		الأخضر الخالص: ‎  <code>#000</code>‎ <span class="box light" style="background-color: #0f0;"> </span>
	</li>
	<li>
		الأزرق الصّافي: ‎ <code>#00f</code>‎ ‎<span class="box dark" style="background-color: #00f;"> </span>
	</li>
	<li>
		الأبيض: ‎<code>#000</code>‎ 
	</li>
</ul>

<p>
	يمكن أيضًا استخدام عددين ستّعشريّين لكلّ جزء من اللّون لتنوّع أكبر:
</p>

<ul>
	<li>
		الأسود: ‎ <code>#000000</code>‎‎‏‎ ‎<span class="box dark" style="background-color: #000;"> </span>
	</li>
	<li>
		الأحمر الخالص: <code>#ff0000 </code><span class="box dark" style="background-color: #ff0000;"> </span>
	</li>
	<li>
		الأخضر الخالص: ‎  <code>#00ff00</code>‎ ‎<span class="box light" style="background-color: #0f0;"> </span>
	</li>
	<li>
		الأزرق الصّافي: ‎  <code>#0000ff</code>‎ ‎<span class="box dark" style="background-color: #00f;"> </span>
	</li>
	<li>
		الأبيض: ‎  <code>#ffffff</code>‎ ‎<span class="box light" style="background-color: #fff;"> </span>
	</li>
</ul>

<h3 id="-">
	مثال
</h3>

<p>
	يمكنك بشيء من المِران تعديل قيم أرقام الألوان الثّلاثة يدويًّا لشتّى الاستخدامات:
</p>

<ol>
	<li>
		ابدأ بالأحمر الصّافي: ‎<span class="box dark" style="background-color: #f00;"><code>#f00</code></span>
	</li>
	<li>
		ثم اجعله أكثر شحوبًا، بإضافة بعض الأخضر والأزرق: ‎<span class="box light" style="background-color: #f77;"><code>#f77</code></span>
	</li>
	<li>
		ثم اجعله أميل للبرتقالي بإضافة مزيد من الأخضر: ‎<span class="box light" style="background-color: #fa7;"><code>#fa7</code></span>
	</li>
	<li>
		ثم اجعله داكنًا بتخفيض كلّ مكوّناته: ‎<span class="box light" style="background-color: #c74;"><code>#c74</code></span>
	</li>
	<li>
		ثم خفّض إشباعه بجعل مكوّناته أقرب في القيمة إلى بعضها: ‎<span class="box light" style="background-color: #c98;"><code>#c98</code></span>
	</li>
	<li>
		وإذا جعلتها متساوية تمامًا فإنك تحصل على الرّماديّ: ‎<span class="box light" style="background-color: #ccc;"><code>#ccc</code></span>
	</li>
</ol>

<p>
	للحصول على لون شاحب مائل للأزرق:
</p>

<ol>
	<li>
		ابدأ بالأبيض الصّافي: ‎<span class="box light" style="background-color: #fff;"><code>#fff</code></span>
	</li>
	<li>
		ثم خفّض المكوّنات الأخرى قليلًا: ‎<span class="box light" style="background-color: #eef;"><code>#eef</code></span>
	</li>
</ol>

<h3 id="-">
	تفاصيل أكثر
</h3>

<p>
	بإمكانك تحديد الألوان باستخدام أعداد بنظام العد العشريّ مستخدمًا قيمًا بين 0 و255، أو نسبًا مئويّة:
</p>

<p>
	مثلًا: هذا اللّون أحمر آجري:
</p>

<pre class="css ipsCode prettyprint prettyprinted" data-pbcklang="css" data-pbcktabsize=""><span class="pln">rgb</span><span class="pun">(</span><span class="lit">128</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://www.w3.org/TR/CSS21/syndata.html#color-units" rel="external nofollow">الألوان</a> في معيار CSS.
</p>

<p>
	لمعلومات أكثر عن كيفية مطابقة ألوان القوائم والأزرار مع ألوان النّظام، اطّلع على <a href="http://www.w3.org/TR/CSS21/ui.html#system-colors" rel="external nofollow">ألوان النظام في CSS2</a> في معيار CSS.
</p>

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

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

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

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

<h2 id="-">
	خصائص الألوان
</h2>

<p>
	استخدمنا الخاصّة <code>color</code> سابقًا لتغير لون النّصّ.
</p>

<p>
	يمكن استخدام الخاصّة <code>background-color</code> لتغير خلفيّة العناصر.
</p>

<p>
	يمكن تعيين هذه الخاصّة إلى <code>transparent</code> في حال رغبنا بالنّص صراحةً على جعل الخلفيّة شافّة، ممّا يؤدّي إلى إظهار لون خلفيّة العنصر الأب.
</p>

<h2 id="-">
	تدريب: استخدام رموز الألوان
</h2>

<ol>
	<li>
		حرّر ملف CSS الّذي تتدرّب عليه.
	</li>
	<li>
		<p>
			طبّق التغيّير المعروض أدناه لجعل الحروف الأولى ذات خلفيّة زرقاء شاحبة (قد يختلف أسلوب الكتابة والتّعليقات في ملفّك عمّا تراه هنا، لا بأس، أبِقها كما تحبّ).
		</p>

		<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_3381_7"><span class="tag">&lt;p</span><span class="pln"> </span><span class="atn">id</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="atv">"first"</span><span class="tag">&gt;</span><span class="pln"> 
  </span><span class="tag">&lt;strong&gt;</span><span class="pln">C</span><span class="tag">&lt;/strong&gt;</span><span class="pln">ascading </span><span class="tag">&lt;strong</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"spinach"</span><span class="tag">&gt;</span><span class="pln">S</span><span class="tag">&lt;/strong&gt;</span><span class="pln">tyle </span><span class="tag">&lt;strong</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"spinach"</span><span class="tag">&gt;</span><span class="pln">S</span><span class="tag">&lt;/strong&gt;</span><span class="pln">heets
</span><span class="tag">&lt;/p&gt;</span><span class="pln">
</span><span class="tag">&lt;p&gt;</span><span class="pln"> 
  </span><span class="tag">&lt;strong&gt;</span><span class="pln">C</span><span class="tag">&lt;/strong&gt;</span><span class="pln">ascading </span><span class="tag">&lt;strong&gt;</span><span class="pln">S</span><span class="tag">&lt;/strong&gt;</span><span class="pln">tyle </span><span class="tag">&lt;strong&gt;</span><span class="pln">S</span><span class="tag">&lt;/strong&gt;</span><span class="pln">heets
</span><span class="tag">&lt;/p&gt;</span></pre>

		<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_3381_9"><span class="com">/*** CSS Tutorial: Color page ***/</span><span class="pln">

</span><span class="com">/* page font */</span><span class="pln">
body </span><span class="pun">{</span><span class="pln">
 font</span><span class="pun">:</span><span class="pln"> </span><span class="lit">16px</span><span class="pln"> </span><span class="str">"Comic Sans MS"</span><span class="pun">,</span><span class="pln"> cursive</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

</span><span class="com">/* paragraphs */</span><span class="pln">
p </span><span class="pun">{</span><span class="pln">
 color</span><span class="pun">:</span><span class="pln"> blue</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
</span><span class="com">#first {</span><span class="pln">
 font</span><span class="pun">-</span><span class="pln">style</span><span class="pun">:</span><span class="pln"> italic</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

</span><span class="com">/* initial letters */</span><span class="pln">
strong </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">#ddf; </span><span class="pln">
 color</span><span class="pun">:</span><span class="pln"> red</span><span class="pun">;</span><span class="pln">
 font</span><span class="pun">:</span><span class="pln"> </span><span class="lit">200</span><span class="pun">%</span><span class="pln"> serif</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

</span><span class="pun">.</span><span class="pln">spinach </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">
 background</span><span class="pun">-</span><span class="pln">color</span><span class="pun">:</span><span class="pln"> </span><span class="com">#ddf;</span><span class="pln">
</span><span class="pun">}</span></pre>

		<p>
			احفظ الملفّ وحدّث المتصفّح لترى النّتيجة:
		</p>
	</li>
</ol>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="11849" href="https://academy.hsoub.com/uploads/monthly_2016_01/pale-blue.png.9fee9ddb59c85bcb2e04ad176e4465f0.png" rel="" data-fileext="png"><img alt="pale-blue.png" class="ipsImage ipsImage_thumbnailed" data-fileid="11849" src="https://academy.hsoub.com/uploads/monthly_2016_01/pale-blue.thumb.png.2d6a1233ddd4a9e64608086a13df3de7.png"></a>
</p>

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

<p>
	غيّر أسماء الألوان إلى الرّموز الثّلاثيّة التي توافقها في ملفّ CSS لديك دون أن تغيّر النّتيجة.
</p>

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

<div class="challenge">
	<input id="input_solution" name="input_solution" type="checkbox"><label for="input_solution"> شاهد الحل </label>

	<div class="solution">
		<p>
			القيم التالية هي تقريب معقول للألوان المُسمّاة:
		</p>

		<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_3517_7"><span class="pln">strong </span><span class="pun">{</span><span class="pln">
  color</span><span class="pun">:</span><span class="pln"> </span><span class="com">#f00; /* red */</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">#ddf; /* pale blue */</span><span class="pln">
  font</span><span class="pun">:</span><span class="pln"> </span><span class="lit">200</span><span class="pun">%</span><span class="pln"> serif</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

</span><span class="pun">.</span><span class="pln">carrot </span><span class="pun">{</span><span class="pln">
  color</span><span class="pun">:</span><span class="pln"> </span><span class="com">#fa0; /* orange */</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

</span><span class="pun">.</span><span class="pln">spinach </span><span class="pun">{</span><span class="pln">
  color</span><span class="pun">:</span><span class="pln"> </span><span class="com">#080; /* dark green */</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

p </span><span class="pun">{</span><span class="pln">
  color</span><span class="pun">:</span><span class="pln"> </span><span class="com">#00f; /* blue */</span><span class="pln">
</span><span class="pun">}</span></pre>

		<p>
			 
		</p>
	</div>
</div>

<h2 id="-">
	ما التالي؟
</h2>

<p>
	المحتوى والتنسيق منفصلان تمامًا في ملفّين، سنطّلع في الدّرس التّالي على كيفيّة عمل استنثاء لهذه القاعدة من خلال <a href="https://academy.hsoub.com/programming/css/%D8%A5%D8%B6%D8%A7%D9%81%D8%A9-%D9%85%D8%AD%D8%AA%D9%88%D9%89-%D8%A5%D9%84%D9%89-%D8%B5%D9%81%D8%AD%D8%A9-%D9%88%D9%8A%D8%A8-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-css-r258/" rel="">إضافة محتوى إلى صفحة ويب باستخدام CSS</a>.
</p>

<p>
	ترجمة -وبتصرف- للمقال <a href="https://developer.mozilla.org/en-US/docs/Web/Guide/CSS/Getting_Started/Color" rel="external nofollow">Color</a> من سلسلة <a href="https://developer.mozilla.org/en-US/docs/Web/Guide/CSS/Getting_started" rel="external nofollow" target="_blank">Getting started with CSS</a> على شبكة مطوّري Mozilla.
</p>
]]></description><guid isPermaLink="false">255</guid><pubDate>Sun, 06 Mar 2016 21:51:00 +0000</pubDate></item><item><title>&#x62A;&#x646;&#x633;&#x64A;&#x642; &#x646;&#x635;&#x648;&#x635; &#x635;&#x641;&#x62D;&#x627;&#x62A; &#x627;&#x644;&#x648;&#x64A;&#x628; &#x628;&#x627;&#x633;&#x62A;&#x62E;&#x62F;&#x627;&#x645; CSS</title><link>https://academy.hsoub.com/programming/css/%D8%AA%D9%86%D8%B3%D9%8A%D9%82-%D9%86%D8%B5%D9%88%D8%B5-%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-r251/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2016_03/css-text-style.png.1f9f35a00fe71219604c920fb199fcc7.png" /></p>

<p>
	في هذا الجزء من <a href="https://academy.hsoub.com/search/?tags=css+101" rel="">سلسلة تعلّم CSS</a>، سنطّلع على أمثلة أكثر عن تنسيق الخطوط، ثم نطبّق ما تعلّمناه على ورقة أنماطنا.
</p>

<p style="text-align: center;">
	<img alt="css-text-style.png" class="ipsImage ipsImage_thumbnailed" data-fileid="13686" data-unique="koo643dmn" src="https://academy.hsoub.com/uploads/monthly_2016_03/css-text-style.png.ec3be3f9bc6c42c1140c249c9ee43740.png"></p>

<p style="box-sizing: border-box; line-height: 35.2px; text-align: justify; color: rgb(39, 42, 52); font-family: 'Droid Arabic Naskh', 'Open Sans', 'Helvetica Neue', Helvetica, Tahoma, Arial, sans-serif; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 1; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);">
	فهرس السلسلة:
</p>

<ul style="box-sizing: border-box; color: rgb(39, 42, 52); font-family: 'Droid Arabic Naskh', 'Open Sans', 'Helvetica Neue', Helvetica, Tahoma, Arial, sans-serif; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 35.2px; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 1; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);">
<li style="box-sizing: border-box;">
		<a href="https://academy.hsoub.com/programming/css/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D8%A3%D9%88%D8%B1%D8%A7%D9%82-%D8%A7%D9%84%D8%A3%D9%86%D9%85%D8%A7%D8%B7-%D8%A7%D9%84%D9%85%D8%AA%D8%AA%D8%A7%D9%84%D9%8A%D8%A9-css-r246/" rel="" style="box-sizing: border-box; color: rgb(0, 201, 165); text-decoration: underline; background-color: transparent;">مدخل إلى أوراق الأنماط المتتالية (CSS)</a>.
	</li>
	<li style="box-sizing: border-box;">
		<a href="https://academy.hsoub.com/programming/css/%D8%A2%D9%84%D9%8A%D8%A9-%D8%B9%D9%85%D9%84-%D8%AA%D8%B9%D9%84%D9%8A%D9%85%D8%A7%D8%AA-css-%D8%AF%D8%A7%D8%AE%D9%84-%D8%A7%D9%84%D9%85%D8%AA%D8%B5%D9%81%D8%AD%D8%A7%D8%AA-r247/" rel="">آلية عمل تعليمات CSS داخل المتصفحات</a>.
	</li>
	<li style="box-sizing: border-box;">
		<a data-linktype="link" data-searchable="" href="https://academy.hsoub.com/programming/css/%D8%A7%D9%84%D9%85%D8%AD%D8%AF%D8%AF%D8%A7%D8%AA-selectors-%D9%81%D9%8A-css-r249/" rel="" style="box-sizing: border-box; color: rgb(0, 201, 165); text-decoration: underline; background-color: transparent;">المحددات (Selectors) في CSS</a>.
	</li>
	<li style="box-sizing: border-box;">
		<a data-linktype="link" data-searchable="" href="https://academy.hsoub.com/programming/css/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D9%83%D8%AA%D8%A7%D8%A8%D8%A9-%D8%AA%D8%B9%D9%84%D9%8A%D9%85%D8%A7%D8%AA-css-%D9%8A%D8%B3%D9%87%D9%84-%D9%82%D8%B1%D8%A7%D8%A1%D8%AA%D9%87%D8%A7-r250/" rel="" style="box-sizing: border-box; color: rgb(0, 201, 165); text-decoration: underline; background-color: transparent;">كيفية كتابة تعليمات CSS يسهل قراءتها</a>.
	</li>
	<li style="box-sizing: border-box;">
		تنسيق نصوص صفحات الويب باستخدام CSS. (هذا الدرس)
	</li>
	<li style="box-sizing: border-box;">
		<a data-linktype="link" data-searchable="" href="https://academy.hsoub.com/programming/css/%D8%A7%D9%84%D8%AA%D8%B9%D8%A7%D9%85%D9%84-%D9%85%D8%B9-%D8%A7%D9%84%D8%A3%D9%84%D9%88%D8%A7%D9%86-%D9%81%D9%8A-css-r255/" rel="" style="box-sizing: border-box; color: rgb(0, 201, 165); text-decoration: underline; background-color: transparent;">التعامل مع الألوان في CSS</a>.
	</li>
	<li style="box-sizing: border-box;">
		<a data-linktype="link" data-searchable="" href="https://academy.hsoub.com/programming/css/%D8%A5%D8%B6%D8%A7%D9%81%D8%A9-%D9%85%D8%AD%D8%AA%D9%88%D9%89-%D8%A5%D9%84%D9%89-%D8%B5%D9%81%D8%AD%D8%A9-%D9%88%D9%8A%D8%A8-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-css-r258/" rel="" style="box-sizing: border-box; color: rgb(0, 201, 165); text-decoration: underline; background-color: transparent;">إضافة محتوى إلى صفحة ويب باستخدام CSS</a>.
	</li>
	<li style="box-sizing: border-box;">
		<a data-linktype="link" data-searchable="" href="https://academy.hsoub.com/programming/css/%D8%AA%D9%86%D8%B3%D9%8A%D9%82-%D8%A7%D9%84%D9%82%D9%88%D8%A7%D8%A6%D9%85-lists-%D9%81%D9%8A-css-r259/" rel="" style="box-sizing: border-box; color: rgb(0, 201, 165); text-decoration: underline; background-color: transparent;">تنسيق القوائم (Lists) في CSS</a>.
	</li>
	<li style="box-sizing: border-box;">
		<a data-linktype="link" data-searchable="" href="https://academy.hsoub.com/programming/css/%D8%AA%D8%B9%D8%B1%D9%81-%D8%B9%D9%84%D9%89-%D8%A7%D9%84%D8%B5%D9%86%D8%A7%D8%AF%D9%8A%D9%82-boxes-%D9%81%D9%8A-css-r263/" rel="" style="box-sizing: border-box; color: rgb(0, 201, 165); text-decoration: underline; background-color: transparent;">تعرف على الصناديق (Boxes) في CSS</a>.
	</li>
	<li style="box-sizing: border-box;">
		<a data-linktype="link" data-searchable="" href="https://academy.hsoub.com/programming/css/%D8%B1%D8%B5%D9%81-%D8%A7%D9%84%D8%B9%D9%86%D8%A7%D8%B5%D8%B1-layout-%D9%81%D9%8A-css-r264/" rel="" style="box-sizing: border-box; color: rgb(0, 201, 165); text-decoration: underline; background-color: transparent;">رصف العناصر (Layout) في CSS</a>.
	</li>
	<li style="box-sizing: border-box;">
		<a data-linktype="link" data-searchable="" href="https://academy.hsoub.com/programming/css/%D8%A7%D9%84%D8%AC%D8%AF%D8%A7%D9%88%D9%84-tables-%D9%81%D9%8A-css-r266/" rel="" style="box-sizing: border-box; color: rgb(0, 201, 165); text-decoration: underline; background-color: transparent;">الجداول (Tables) في CSS</a>.
	</li>
	<li style="box-sizing: border-box;">
		<a href="https://academy.hsoub.com/programming/css/%D8%A7%D9%84%D8%AA%D8%B9%D8%A7%D9%85%D9%84-%D9%85%D8%B9-%D8%A3%D8%AC%D9%87%D8%B2%D8%A9-%D8%A7%D9%84%D8%B9%D8%B1%D8%B6-%D8%A7%D9%84%D9%85%D8%AE%D8%AA%D9%84%D9%81%D8%A9-%D9%88%D8%A7%D9%84%D9%85%D8%B7%D8%A8%D9%88%D8%B9%D8%A7%D8%AA-%D9%81%D9%8A-css-r268/" rel="" style="box-sizing: border-box; color: rgb(0, 201, 165); text-decoration: underline; background-color: transparent;">التعامل مع أجهزة العرض المختلفة والمطبوعات في CSS</a>.
	</li>
</ul>
<h2 id="-">
	تنسيق الخطوط
</h2>

<p>
	هناك عدّة خواصّ يمكن استخدامها في CSS لتنسيق النّصوص، منها الخاصّة المُختصرة <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/font" rel="external nofollow"><code>font</code></a> التي يمكنك استخدامها لتعيين عدّة خواصّ مرّة واحدة، مثلاً:
</p>

<ul>
<li>
		عريض، مائل أو بحروف كبيرة مُصغّرة (small capitals)
	</li>
	<li>
		الحجم
	</li>
	<li>
		ارتفاع السّطر
	</li>
	<li>
		اسم عائلة الخط (typeface)
	</li>
</ul>
<h3 id="-">
	مثال
</h3>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_7941_13">
<span class="pln">p </span><span class="pun">{</span><span class="pln">
  font</span><span class="pun">:</span><span class="pln"> italic </span><span class="lit">75</span><span class="pun">%/</span><span class="lit">125</span><span class="pun">%</span><span class="pln"> </span><span class="str">"Comic Sans MS"</span><span class="pun">,</span><span class="pln"> cursive</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></pre>

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

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

<p>
	تعيّن عائلة الخطّ إلى Comic Sans MS، فإنّ لم يكن متوفّرًا سيستخدم المتصفّح الخطّ المبدئيّ من نوع "الكتابة اليدويّة (cursive)" المُعيّن في إعداداته.
</p>

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

<h2 id="-">
	عائلات الخطوط
</h2>

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

<p>
	أنهِ هذه القائمة بواحد من الخطوط المبدئية: <code>serif</code> (المُذيّل) أو <code>sans-serif</code> (غير المُذيّل) أو <code>cursive</code> (اليدويّ) أو <code>fantasy</code> (الخيالي) أو <code>monospace</code> (ثابت العرض).
</p>

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

<p>
	لتعيين اسم الخطّ بصورة منفصلة عن بقيّة الخواصّ، استخدم الخاصّة <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/font-family" rel="external nofollow"><code>font-family</code></a>.
</p>

<h2 id="-">
	أحجام الخطوط
</h2>

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

<p>
	باستطاعتك مثلًا استخدام قيم مُعيّنة مسبقًا للخطوط مثل <code>small</code> و <code>medium</code> و <code>large</code>؛ أو قيم منسوبة إلى حجم خطّ العنصر الأب مثل <code>smaller</code> و <code>larger</code> و <code>150%</code> و <code>1.5em</code>. الوحدة <code>em</code> تساوي عرض الحرف "m" إذا كُتب باستخدام حجم خطّ العنصر الأب؛ وهذا يعني أن <code>1.5em</code> تساوي حجم خطّ العنصر الأب مضروبًا بواحد ونصف.
</p>

<p>
	يمكن أيضًا عند الضرورة استخدام قيمة ثابتة مثل <code>14px</code> (أي 14 بكسلًا) على الشّاشة أو 14pt (أي 14 نقطةً) للطّابعة؛ على أنّ هذه القيم غير ملائمة للأشخاص الذين يعانون من ضعف البصر لأنها لا تسمح لهم بزيادة حجم الخطّ؛ لذا يُفضّل استخدام قيمة مُعيّنة مسبقًا مثل <code>medium</code> على العناصر الرئيسيّة ثمّ قيم نسبيّة على أبناءها.
</p>

<p>
	لتعيين حجم الخطّ بصورة منفصلة عن بقيّة الخواص، استخدم الخاصّة <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" rel="external nofollow"><code>font-size</code></a>.
</p>

<h2 id="-">
	ارتفاع الخط
</h2>

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

<p>
	لتعيين ارتفاع الخطّ بصورة منفصلة عن بقيّة الخواص، استخدم الخاصّة <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/line-height" rel="external nofollow"><code>line-height</code></a>.
</p>

<h2 id="-">
	تنسيقات خاصة
</h2>

<p>
	يمكن استخدام الخاصّة المنفردة <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/text-decoration" rel="external nofollow"><code>text-decoration</code></a> لتعيين تنسيقات أخرى على النّص مثل تسطيره <code>underline</code> أوحجبه بخطّ يتوسّطه <code>line-through</code> (<del>هكذا</del>)، أو مسح كل التنسيقات الخاصّة باستخدام <code>none</code>.
</p>

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

<p>
	لجعل الخطّ مائلًا فقط: استخدم:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_7941_16">
<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"> italic</span><span class="pun">;‎</span><span class="pln"> </span></pre>

<p>
	لجعل الخطّ عريضًا فقط استخدم:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_7941_18">
<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"> bold</span><span class="pun">;‎</span><span class="pln"> </span></pre>

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

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_7941_20">
<span class="pun">‎</span><span class="pln">font</span><span class="pun">-</span><span class="pln">variant</span><span class="pun">:</span><span class="pln"> small</span><span class="pun">-</span><span class="pln">caps</span><span class="pun">;‎</span></pre>

<p>
	لإزالة أيّ من الخواصّ السابقة على انفراد، استخدام <code>normal</code> أو <code>inherit</code> كقيمة.
</p>

<h3 id="-">
	تفاصيل أكثر
</h3>

<p>
	يمكن تعيين تنسيقات النّصوص بطرق عديدة.
</p>

<p>
	مثلًا: بعض الخواصّ المذكورة آنفًا لها قيم أخرى.
</p>

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

<p>
	للاطّلاع على كامل تفاصيل الخطوط في CSS، راجع صفحة <a href="http://www.w3.org/TR/CSS21/fonts.html" rel="external nofollow">الخطوط</a> في معيار CSS، وللاطّلاع على كامل تفاصيل تنسيقات النّصوص راجع صفحة <a href="http://www.w3.org/TR/CSS21/text.html" rel="external nofollow">النّصوص</a>.
</p>

<p>
	إن لم ترغب بالاعتماد على الخطوط المُثبّتة على جهاز المستخدم، يمكن استخدام خطوط الويب بالخاصّة <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face" rel="external nofollow">‎<code>@font-face</code>‎</a>، إلّا أنّها غير مدعومة في جميع المتصفّحات.
</p>

<h2 id="-">
	تمرين: تعيين الخطوط
</h2>

<ol>
<li>
		حرّر ملفّ CSS الذي تتدرّب عليه.
	</li>
	<li>
		أضف القاعدة التّالية لتغيير الخط في كامل المستند، من المنطقيّ إضافة هذه القاعدة في رأس الملفّ، لكنّ ذلك لا يؤثّر على النّتيجة.
		<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_7941_22">
<span class="pln">body </span><span class="pun">{</span><span class="pln">
  font</span><span class="pun">:</span><span class="pln"> </span><span class="lit">16px</span><span class="pln"> </span><span class="str">"Comic Sans MS"</span><span class="pun">,</span><span class="pln"> cursive</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></pre>

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

		<p style="text-align: center;">
			<a class="ipsAttachLink ipsAttachLink_image" data-fileid="11753" href="https://academy.hsoub.com/uploads/monthly_2016_01/comic.png.d77f397d7881f08e2e46a9aad47b627a.png" rel="external"><img alt="comic.png" class="ipsImage ipsImage_thumbnailed" data-fileid="11753" src="https://academy.hsoub.com/uploads/monthly_2016_01/comic.thumb.png.0c54a92fa8a785b12129b8f82ce2cc07.png"></a>
		</p>
	</li>
	<li>
		<p>
			اذهب إلى قائمة المتصفّح واختر: <strong>عرض &gt; حجم الخطّ &gt; تكبير</strong> (أو ما يشابهه)، على الرّغم من أنك حدّدت حجم الخطّ بـ16 بكسلًا، فإنّ المستخدم باستطاعته تغييره.
		</p>
	</li>
</ol>
<h2 id="-">
	تمرين
</h2>

<p>
	اجعل الحروف الأولى من كلّ كلمة في المستند أكبر مرّتين من الحجم المبدئيّ للخطوط المُذيّلة في المتصفّح:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="11754" href="https://academy.hsoub.com/uploads/monthly_2016_01/2x.png.689a007ff749a19ade2986d0652401b2.png" rel="external"><img alt="2x.png" class="ipsImage ipsImage_thumbnailed" data-fileid="11754" src="https://academy.hsoub.com/uploads/monthly_2016_01/2x.thumb.png.135256e4865db89f1a710a4fb00335b4.png"></a>
</p>

<div class="challenge">
	<input id="input_solution" name="input_solution" type="checkbox"><label for="input_solution"> شاهد الحل </label>

	<div class="solution">
		<p>
			أضفّ التّصريح التّالي إلى قاعدة <code>strong</code>:
		</p>

		<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_838_7">
<span class="pln">font</span><span class="pun">:</span><span class="pln"> </span><span class="lit">200</span><span class="pun">%</span><span class="pln"> serif</span><span class="pun">;</span></pre>

		<p>
			إن كنت تستخدم تصاريح منفصلة للخاصّتين <code>font-size</code> و<code>font-family</code> فإنّ الخاصّة <code>font-style</code> على الفقرة الأولى تبقى سارية المفعول.
		</p>
	</div>
</div>

<h2 id="-">
	ما التالي؟
</h2>

<p>
	استخدمنا أسماء الألوان القياسيّة لتعيين لون بعض الحروف والكلمات في مستندنا، سنتعلّم في الدّرس التالي <a href="https://academy.hsoub.com/programming/css/%D8%A7%D9%84%D8%AA%D8%B9%D8%A7%D9%85%D9%84-%D9%85%D8%B9-%D8%A7%D9%84%D8%A3%D9%84%D9%88%D8%A7%D9%86-%D9%81%D9%8A-css-r255/" rel=""> التعامل مع الألوان</a> بقيّة أسماء الألوان القياسيّة وكيف نستعمل ألوانًا أخرى.
</p>

<p>
	ترجمة -وبتصرف- للمقال <a href="https://developer.mozilla.org/en-US/docs/Web/Guide/CSS/Getting_Started/Text_styles" rel="external nofollow">Text Styles</a> من سلسلة <a href="https://developer.mozilla.org/en-US/docs/Web/Guide/CSS/Getting_started" rel="external nofollow" target="_blank">Getting started with CSS</a> على شبكة مطوّري Mozilla.
</p>
]]></description><guid isPermaLink="false">251</guid><pubDate>Sat, 05 Mar 2016 10:41:00 +0000</pubDate></item></channel></rss>
