<?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/2/?d=2</link><description>&#x627;&#x644;&#x628;&#x631;&#x645;&#x62C;&#x629;: CSS</description><language>ar</language><item><title>&#x627;&#x644;&#x62A;&#x646;&#x633;&#x64A;&#x642;&#x627;&#x62A; &#x627;&#x644;&#x623;&#x633;&#x627;&#x633;&#x64A;&#x629; &#x644;&#x644;&#x646;&#x635;&#x648;&#x635; &#x648;&#x62E;&#x637;&#x648;&#x637; &#x627;&#x644;&#x643;&#x62A;&#x627;&#x628;&#x629; &#x641;&#x64A; CSS</title><link>https://academy.hsoub.com/programming/css/%D8%A7%D9%84%D8%AA%D9%86%D8%B3%D9%8A%D9%82%D8%A7%D8%AA-%D8%A7%D9%84%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A9-%D9%84%D9%84%D9%86%D8%B5%D9%88%D8%B5-%D9%88%D8%AE%D8%B7%D9%88%D8%B7-%D8%A7%D9%84%D9%83%D8%AA%D8%A7%D8%A8%D8%A9-%D9%81%D9%8A-css-r2211/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2024_01/------CSS.png.75b0153174a269ee2fb3361f895344ea.png" /></p>
<p>
	نحاول في هذا المقال أن نضعك على الطريق الصحيح لإتقان تنسيق النصوص باستخدام CSS. لهذا سنطلعك تدريجيًا وبالتفصيل على أساسيات التنسيق بما في ذلك ضبط حجم الخط وعائلته وتنسيقاته، إضافةً إلى الخاصيات المختصرة، ومحاذاة النصوص وغيرها من التأثيرات، كما سنتعلم ضبط التباعد بين الأسطر والحروف.
</p>

<p>
	ننصحك قبل إكمال قراءة المقال أن تطلع على <a href="https://academy.hsoub.com/programming/html/%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A7%D8%AA-%D9%84%D8%BA%D8%A9-html-r1687/" rel="">أساسيات لغة HTML</a> و<a href="https://academy.hsoub.com/programming/css/%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A7%D8%AA-%D9%84%D8%BA%D8%A9-css-r1688/" rel="">أساسيات لغة CSS</a>.
</p>

<h2 id="css">
	ما الذي يتضمنه تنسيق النصوص من خلال CSS؟
</h2>

<p>
	إذا عملت على ملفات <a href="https://wiki.hsoub.com/HTML" rel="external">HTML</a> أو<a href="https://wiki.hsoub.com/CSS" rel="external">CSS</a> مسبقًا، فأنت تعرف حتمًا أن النص الموجود داخل العنصر يُوضع ضمن صندوق المحتوى الخاص بالعنصر، إذ يبدأ النص من الزاوية اليسارية العليا لمنطقة المحتوى (أو من اليمينية العليا في اللغات التي تُكتب من اليمين إلى اليسار) وينساب نحو نهاية السطر. حالما يصل النص إلى نهاية السطر ينتقل تلقائيًا إلى سطر جديد وينساب نحو نهاية السطر من جديد وهكذا حتى يُكتب كامل النص ضمن صندوق المحتوى المخصص. إذًا، يسلك المحتوى النصي سلوك سلسلة من العناصر السطرية المتجاورة المرتبة في سطور، ولا تُطبق عملية الانتقال إلى سطر جديد حتى بلوغ نهاية السطر، أو أن تجبرها يدويًا على الانتقال إلى سطر جديد باستخدام العنصر <code>&lt;br&gt;</code>.
</p>

<p>
	<strong>ملاحظة</strong>: إذا لم تكن على دراية عن الأفكار التي طرحتها في الفقرة السابقة، عد إلى مقال <a href="https://academy.hsoub.com/programming/css/%D8%A7%D9%84%D9%86%D9%85%D9%88%D8%B0%D8%AC-%D8%A7%D9%84%D8%B5%D9%86%D8%AF%D9%88%D9%82%D9%8A-box-model-%D9%81%D9%8A-css-r1051/" rel="">نموذج الصندوق Box Model</a> كي تتزود ببعض المعلومات المفيدة عن نظرية النموذج الصندوقي قبل المتابعة في هذا المقال.
</p>

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

<ul>
	<li>
		<p>
			<strong>تنسيقات خطوط الكتابة Font styles</strong>: وهي الخاصيات التي تؤثر مباشرةً على خط الكتابة، مثل نوع الخط المطبّق وحجمه وسماكته وغير ذلك.
		</p>
	</li>
	<li>
		<p>
			<strong>تنسيقات تخطيط النص Text layout styles</strong>: وهي الخاصيات التي تؤثر على مقدار المساحات الفارغة وغيرها من ميزات تخطيط النص، التي تسمح مثلًا بتغيير المسافة الفارغة بين الأسطر والحروف، ومحاذاة النص ضمن الحيز المحدد للمحتوى.
		</p>
	</li>
</ul>

<p>
	<strong>ملاحظة</strong>: تذكّر أن النص الموجود ضمن عنصر سيتأثر بالخاصيات وكأنه كيان واحد، وبالتالي لن تتمكن من اختيار جزء من النص ثم تنسيقه على نحوٍ مختلف إذا لم تغلف هذا الجزء ضمن عنصر مناسب مثل <a href="https://wiki.hsoub.com/HTML/span" rel="external"><code>&lt;span&gt;</code></a>، أو أن تستخدم عنصر زائف مخصص لاستهداف النصوص مثل <a href="https://wiki.hsoub.com/CSS/::first-letter" rel="external"><code>first-letter::</code></a>، الذي يختار الحرف الأول من النص الذي يحتويه عنصر ما، أو <a href="https://wiki.hsoub.com/CSS/::first-line" rel="external"><code>first-line::</code></a>، الذي يختار السطر الأول من نص ضمن عنصر، أو <a href="https://wiki.hsoub.com/CSS/::selection" rel="external"><code>selection::</code></a>، الذي يستهدف النص الذي جرى تحديده من خلال مؤشر الفأرة.
</p>

<h2 id="">
	خطوط الكتابة
</h2>

<p>
	سننتقل مباشرةً الآن إلى خاصيات تنسيق خطوط الكتابة من خلال المثال التالي الذي نطبق خلاله بعض خاصيات CSS على شيفرة HTML التالية:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_7639_6" style=""><span class="tag">&lt;h1&gt;</span><span class="pln">Tommy the cat</span><span class="tag">&lt;/h1&gt;</span><span class="pln">

</span><span class="tag">&lt;p&gt;</span><span class="pln">Well I remember it as though it were a meal ago…</span><span class="tag">&lt;/p&gt;</span><span class="pln">

</span><span class="tag">&lt;p&gt;</span><span class="pln">
  Said Tommy the Cat as he reeled back to clear whatever foreign matter may have
  nestled its way into his mighty throat. Many a fat alley rat had met its
  demise while staring point blank down the cavernous barrel of this awesome
  prowling machine. Truly a wonder of nature this urban predator — Tommy the cat
  had many a story to tell. But it was a rare occasion such as this that he did.
</span><span class="tag">&lt;/p&gt;</span></pre>

<p>
	بإمكانك إيجاد <a href="https://mdn.github.io/learning-area/css/styling-text/fundamentals" rel="external nofollow">المثال</a> في حالته النهائية على غيت هب GitHub، كما يمكنك <a href="https://github.com/mdn/learning-area/blob/main/css/styling-text/fundamentals/index.html" rel="external nofollow">تنزيل الشيفرة المصدرية</a> أيضًا.
</p>

<h3 id="-1">
	الألوان
</h3>

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

<p>
	تقبل الخاصية <code>color</code> قيمًا بأية <a href="https://academy.hsoub.com/programming/css/%D9%88%D8%AD%D8%AF%D8%A7%D8%AA-%D8%A7%D9%84%D9%82%D9%8A%D8%A7%D8%B3-%D9%88%D8%A7%D9%84%D9%82%D9%8A%D9%85-%D9%81%D9%8A-css-r2161/" rel="">وحدات لونية</a> تعرّفها CSS:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_7639_10" style=""><span class="pln">p </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">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;">
	<img class="ipsImage ipsImage_thumbnailed" data-fileid="182019" data-ratio="24.77" data-unique="fdq1f4fzk" width="856" alt="image.png" src="https://academy.hsoub.com/uploads/monthly_2026_04/image.png.d7c0f5b84e9cc5c2d7f0e1d08b597968.png">
</p>

<h3 id="-2">
	عائلات الخطوط
</h3>

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

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_7639_12" style=""><span class="pln">p </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">font-family</span><span class="pun">:</span><span class="pln"> arial</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></pre>

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

<h4 id="-3">
	خطوط الكتابة الآمنة على الويب
</h4>

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

<p>
	يرغب مطورو الويب غالبًا بتخصيص الخطوط التي يستخدمونها لعرض المحتوى النصي في الصفحات، وتكمن المشكلة في إيجاد طريقة معرفة أن خطًا معينًا سيكون متوفرًا على الجهاز الذي يستضيف الصفحة. لن نتمكن من معرفة هذه المعلومة تحديدًا في كل الحالات، لكن تُعرف خطوط الكتابة الآمنة في الويب بأنها متاحة في جميع نسخ <a href="https://academy.hsoub.com/apps/operating-systems/%D9%86%D8%B8%D8%A7%D9%85-%D8%A7%D9%84%D8%AA%D8%B4%D8%BA%D9%8A%D9%84/" rel="">أنظمة التشغيل</a> تقريبًا بما في ذلك ويندوز وماك أو إس ومعظم توزيعات لينكس المعروفة وأندرويد وأي أو إس iOS.
</p>

<p>
	تتغير قائمة خطوط الكتابة الآمنة مع تغيير أنظمة التشغيل، لكن من المنطقي أن تفكر باستخدام خطوط ويب الآمنة التالية وعلى الأقل حاليًا، إذ زادت شعبية الكثير منها بفضل مبادرة مايكروسوفت التي دُعيت <a href="https://en.wikipedia.org/wiki/Core_fonts_for_the_Web" rel="external nofollow">Core fonts for the Web</a> في أواخر التسعينات وبداية الألفية الجديدة:
</p>

<table>
	<thead>
		<tr>
			<th style="text-align:right;">
				الاسم
			</th>
			<th style="text-align:right;">
				النمط الأساسي
			</th>
			<th style="text-align:right;">
				ملاحظات
			</th>
		</tr>
	</thead>
	<tbody>
		<tr>
			<td style="text-align:right;">
				<strong>Arial</strong>
			</td>
			<td style="text-align:right;">
				sans-serif
			</td>
			<td style="text-align:right;">
				يُعدّ أيضًا اختيار نوع الخط "Helvetica" بدلًا من "Arial" من الممارسات الأفضل على الرغم من أن وجهي الخطين متطابقين تمامًا، لكن "Helvetica" يعطي خطًا أكثر وضوحًا رغم كونه أقل توفرًا.
			</td>
		</tr>
		<tr>
			<td style="text-align:right;">
				<strong>Courier New</strong>
			</td>
			<td style="text-align:right;">
				monospace
			</td>
			<td style="text-align:right;">
				لبعض أنظمة التشغيل نسخة بديلة (ربما أقدم) من الخط "Courier New" يُدعى "Courier". لهذا من الممارسات الأفضل أن تستخدم كليهما مع تفضيل للنوع "Courier New".
			</td>
		</tr>
		<tr>
			<td style="text-align:right;">
				<strong>Georgia</strong>
			</td>
			<td style="text-align:right;">
				serif
			</td>
			<td style="text-align:right;">
				 
			</td>
		</tr>
		<tr>
			<td style="text-align:right;">
				<strong>Times New Roman</strong>
			</td>
			<td style="text-align:right;">
				serif
			</td>
			<td style="text-align:right;">
				لبعض أنظمة التشغيل نسخة بديلة (ربما أقدم) من الخط "Times New Roman" يُدعى "Times". لهذا من الممارسات الأفضل أن تستخدم كليهما مع تفضيل للنوع "Times New Roman".
			</td>
		</tr>
		<tr>
			<td style="text-align:right;">
				<strong>Trebuchet MS</strong>
			</td>
			<td style="text-align:right;">
				sans-serif
			</td>
			<td style="text-align:right;">
				لا بد من الانتباه عن استخدام هذا الخط، فهو منتشر بصورةٍ واسعة ضمن أنظمة تشغيل الهواتف المحمولة.
			</td>
		</tr>
		<tr>
			<td style="text-align:right;">
				<strong>Verdana</strong>
			</td>
			<td style="text-align:right;">
				sans-serif
			</td>
			<td style="text-align:right;">
				 
			</td>
		</tr>
	</tbody>
</table>

<p>
	<strong>ملاحظة</strong>: ستجد في كثير من المصادر ومنها <a href="https://www.cssfontstack.com/" rel="external nofollow">cssfontstack.com</a> قوائم لخطوط الويب الآمنة المتاحة على ويندوز وماك أو إس وبالتالي تساعدك في اتخاذ قرار بنوع الخط الذي تستخدمه في صفحاتك.
</p>

<p>
	<strong>ملاحظة</strong>: هناك طريقة لتنزيل خطوط مخصصة لصفحة ويب تسمح لك بتخصيص الخطوط في صفحتك بالطريقة التي تراها مناسبة. هذا الأمر معقد قليلًا وسنناقشه لاحقًا.
</p>

<h4 id="-4">
	الخطوط الافتراضية
</h4>

<p>
	تعرّف CSS خمسة أسماء معممة لأنواع الخطوط هي: <code>serif</code> و <code>sans-serif</code> و <code>monospace</code> و <code>cursive</code> و <code>fantasy</code>. هذه الأسماء معممة جدًا ويمكن أن تختلف واجهات خطوط الكتابة المُستخدمة من هذه الأسماء من متصفح لآخر، ومن نظام تشغيل لآخر. يمثّل هذا الوضع ما يُسمى "سيناريو الحالة الأسوأ worst case scenario"، إذ سيحاول المتصفح جاهدًا في انتخاب خط الكتابة الأكثر قربًا من الخطوط الموجودة، وفعلًا من السهل التعامل مع الخطوط <code>serif</code> و <code>sans-serif</code> و <code>monospace</code> فهي متوقّعة وستكون النتيجة التي يعرضها المتصفح معقولة، بينما يصعب توقع سلوك المتصفح مع الخطين <code>cursive</code> و <code>fantasy</code> لهذا يجدر الحذر عند استخدامها، واختبار العمل باستمرار.
</p>

<p>
	تُعرّف الأسماء الخمسة للخطوط على النحو التالي:
</p>

<table>
	<thead>
		<tr>
			<th style="text-align:right;">
				المصطلح
			</th>
			<th style="text-align:right;">
				التعريف
			</th>
		</tr>
	</thead>
	<tbody>
		<tr>
			<td style="text-align:right;">
				<strong><code>serif</code></strong>
			</td>
			<td style="text-align:right;">
				وهي خطوط تنتهي فيها حواف الحروف بنتوءات (وهي تفاصيل صغيرة تظهر في نهاية خطوط الحروف)
			</td>
		</tr>
		<tr>
			<td style="text-align:right;">
				<strong><code>sans-serif</code></strong>
			</td>
			<td style="text-align:right;">
				وهي الخطوط التي لا تنتهي حواف الحروف بنتوءات.
			</td>
		</tr>
		<tr>
			<td style="text-align:right;">
				<strong><code>monospace</code></strong>
			</td>
			<td style="text-align:right;">
				وهي خطوط يكون لكل المحارف فيها الاتساع ذاته، وتُستخدم عادةً في كتابة وتنظيم الشيفرة، أي لضبط المحاذاة.
			</td>
		</tr>
		<tr>
			<td style="text-align:right;">
				<strong><code>cursive</code></strong>
			</td>
			<td style="text-align:right;">
				وهي الخطوط التي يُنوى استخدامها لمحاكاة خط اليد، من ناحية الإنسياب وترابط الأحرف.
			</td>
		</tr>
		<tr>
			<td style="text-align:right;">
				<strong><code>fantasy</code></strong>
			</td>
			<td style="text-align:right;">
				وهي الخطوط المُستخدمة لأغراض التزيين.
			</td>
		</tr>
	</tbody>
</table>

<h4 id="-5">
	قوائم الخطوط
</h4>

<p>
	طالما أننا لن نضمن توفر جميع الخطوط التي ننوي استخدامها عن تصميم الصفحات (فحتى خطوط ويب الآمنة قد تخفق أحيانًا)، يمكنك اختيار قائمة من الخطوط font stack ليختار المتصفح منها خطًا. يتضمن ذلك اختيار مجموعة من القيم للخاصية <code>font-family</code> تفصل بينها فواصل <code>,</code>.
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_7639_14" style=""><span class="pln">p </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">font-family</span><span class="pun">:</span><span class="pln"> </span><span class="str">"Trebuchet MS"</span><span class="pun">,</span><span class="pln"> Verdana</span><span class="pun">,</span><span class="pln"> sans-serif</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></pre>

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

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

<p>
	<strong>ملاحظة</strong>: لا بد من إحاطة أسماء خطوط الكتابة المكونة من أكثر من كلمة (أي تحتوي على مسافات بيضاء) بإشارات تنصيص مزدوجتين <code>""</code> مثل <code>"Trebuchet MS"</code>.
</p>

<p>
	<strong>تحذير:</strong> ينبغي اقتباس أي اسم عائلة خطوط يمكن تفسيره عن طريق الخطأ على أنه اسم عائلة معمّم أو كلمة مفتاحية على مستوى CSS. يمكن تضمين أسماء عائلات الخطوط مثل <code>&lt;custom-ident&gt;</code> أو <code>&lt;string&gt;</code>، لكن لا بُد من تضمين أسماء عائلات الخطوط التي من الممكن أن يكون لها نفس قيمة خاصية CSS، مثل خاصية <code>initial</code> أو <code>inherit</code>، أو CSS التي لها نفس أسماء الخطوط المعممة، مثل <code>sans-serif</code> أو <code>fantasy</code>، على أنها سلاسل نصية، وإلا سيُفسّر اسم عائلة الخط على أنه كلمة CSS مفتاحية أساسية مكافئة أو اسم عائلة معمّم. لدى استخدام أسماء العائلات على أنها كلمات مفتاحية، يجب عدم اقتباس أسماء العائلات المعمّمة مثل <code>serif</code> و <code>sans-serif</code> و <code>monospace</code> و <code>cursive</code> وكذلك الأمر بالنسبة لكلمات CSS المفتاحية العامة، إذ لا تُفسّر السلاسل النصية على أنها كلمات CSS مفتاحية.
</p>

<h4 id="-6">
	مثال عن قائمة خطوط
</h4>

<p>
	لنضف إلى مثالنا السابق الخطوط من النوع المعمم "sans-serif":
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_7639_16" style=""><span class="pln">p </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">color</span><span class="pun">:</span><span class="pln"> red</span><span class="pun">;</span><span class="pln">
  </span><span class="kwd">font-family</span><span class="pun">:</span><span class="pln"> Helvetica</span><span class="pun">,</span><span class="pln"> Arial</span><span class="pun">,</span><span class="pln"> sans-serif</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	وستكون النتيجة على النحو التالي:
</p>

<p style="text-align: center;">
	<img class="ipsImage ipsImage_thumbnailed" data-fileid="182020" data-ratio="24.11" data-unique="p85s604lc" width="842" alt="image.png" src="https://academy.hsoub.com/uploads/monthly_2026_04/image.png.eb9a7bc365907b68a8cac19bf1ff7bac.png">
</p>

<h3 id="-7">
	حجم الخط
</h3>

<p>
	اطلعنا في مقال <a href="https://academy.hsoub.com/programming/css/%D9%88%D8%AD%D8%AF%D8%A7%D8%AA-%D8%A7%D9%84%D9%82%D9%8A%D8%A7%D8%B3-%D9%88%D8%A7%D9%84%D9%82%D9%8A%D9%85-%D9%81%D9%8A-css-r2161/" rel="">قيم ووحدات CSS</a> على وحدات الطول والحجم التي نستخدمها، ورأينا أن الخاصية <a href="https://wiki.hsoub.com/CSS/font-size" rel="external"><code>font-size</code></a> التي تضبط حجم الخط قد تأخذ قيمًا من معظم وحدات القياس المستخدمة (بما في ذلك النسب المئوية). لكن أكثر ما ستصادفه من وحدات القياس في تقدير حجم النصوص هي:
</p>

<ul>
	<li>
		<strong>البكسل <code>px</code></strong>: وهو عدد البكسلات التي تقيس ارتفاع النص، وهي وحدة مطلقة تنتج دائمًا القيمة نفسها لارتفاع الخط في جميع الحالات تقريبًا.
	</li>
	<li>
		<strong><code>em</code></strong>: عندما نضبط حجم الخط على<code>1‎ em</code>، فهذا يعني أننا نختار للعنصر الذي ننسقه نفس حجم الخط للعنصر الأب (وبدقة أكبر، اتساع الحرف M في الخط المستخدم في تنسيق العنصر الأب). سيكون الأمر مربكًا إذا كانت هناك الكثير من العناصر المتداخلة والمنسقة بخطوط كتابة مختلفة، ومع ذلك فالأمر قابل للتنفيذ كما سنرى تاليًا. لماذا عليّ ذلك؟ سيكون الأمر عاديًا بمجرد أن تعتاد عليه، وستتمكن من استخدام في تحديد أبعاد أي شيء وليس النصوص فقط، ويمكن استخدام واحدة القياس <code>em</code> لتقدير أبعاد جميع العناصر في الصفحة مما يُسهّل الصيانة.
	</li>
	<li>
		<strong><code>rem</code></strong>: وهي واحدة مشابهة لواحدة <code>em</code>، إلا أن <code>‎1 rem</code> ستعادل في هذه الحالة حجم الخط المستخدم لتنسيق العنصر الجذري root element وليس العنصر الأب. يسهّل هذا الأمر الحسابات المستخدمة في تقدير الأبعاد المختلفة، لكن قد تعاني إن أردت دعم المتصفحات الأقدم، فلا يقبل المتصفح إنترنت إكسبلور 8 وما دون هذه الواحدة مثلًا.
	</li>
</ul>

<p>
	يرث العنصر حجم الخط من العنصر الأب، وتبدأ الوراثة انطلاقًا من العنصر الجذري للصفحة ككل <a href="https://wiki.hsoub.com/HTML/html" rel="external"><code>&lt;html&gt;</code></a>. ويُعد <code>16px</code> القياس الافتراضي لحجم خط العنصر الجذري في جميع المتصفحات، إذ ستأخذ جميع الفقرات النصية، أو أية عناصر أخرى لا يعطيها المتصفح قيمةً افتراضيةً مخصصة ضمن العنصر الجذري قياسًا نهائيًا قيمته <code>16px</code>، وتأخذ عناصر أخرى قيمًا افتراضية مختلفة مثل العنصر <a href="https://wiki.hsoub.com/HTML/h1-h6" rel="external"><code>&lt;h1&gt;</code></a> الذي يأخذ القياس <code>2em</code> افتراضيًا وسيكون قياسه النهائي <code>32px</code>.
</p>

<p>
	ستأخذ الأمور منحًى مربكًا أكثر عندما تبدأ تغيير حجم الخط لعناصر متداخلة؛ فلو كان لديك العنصر <a href="https://wiki.hsoub.com/HTML/article" rel="external"><code>&lt;article&gt;</code></a> في صفحتك وضبط حجم الخط فيه على <code>1.5em</code> (يقابل <code>24px</code>)، وأردت أن تجعل حجم خط الفقرات ضمن هذا العنصر <code>20px</code> فما هو الحجم المناسب مقاسًا بواحدة <code>em</code>؟
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_7639_18" style=""><span class="com">&lt;!--</span><span class="pln"> </span><span class="lit">16px</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">الجذري--&gt;</span><span class="pln">
</span><span class="pun">&lt;</span><span class="pln">article</span><span class="pun">&gt;</span><span class="pln">
  </span><span class="com">&lt;!--</span><span class="pln"> </span><span class="lit">1.5em</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><span class="pln"> </span><span class="pun">هذا</span><span class="pln"> </span><span class="pun">العنصر--&gt;</span><span class="pln">
  </span><span class="pun">&lt;</span><span class="pln">p</span><span class="pun">&gt;</span><span class="pln">My paragraph</span><span class="pun">&lt;/</span><span class="pln">p</span><span class="pun">&gt;</span><span class="pln">
  </span><span class="com">&lt;!--</span><span class="pln"> </span><span class="lit">20px</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="com">--&gt;</span><span class="pln">
</span><span class="pun">&lt;/</span><span class="pln">article</span><span class="pun">&gt;</span></pre>

<p>
	لا بد أن تجعل القيمة على النحو <code>20/24em</code> أي <code>‎0.8333 em</code>. فإجراء العمليات الحسابية قد يكون مربكًا بعض الشيء، لهذا عليك الإنتباه عند تنسيق الأشياء. من الأفضل إذًا استخدام <code>rem</code> حيثما أمكن لتبقي الأمور بسيطة وتفادى ضبط حجم الخط <code>font-size</code> للعناصر الحاوية ما أمكن.
</p>

<h3 id="-8">
	تنسيق الخطوط وثخانتها وتحويل حالة حروف النصوص وتزيينها
</h3>

<p>
	تزودنا CSS بمجموعة من الخاصيات التي تغيّر ثخانة النص وتبرزه نذكر منها:
</p>

<ul>
	<li>
		<p>
			<a href="https://wiki.hsoub.com/CSS/font-style" rel="external"><code>font-style</code></a>: تُستخدم لتحويل النص إلى الشكل المائل أو العكس، وتأخذ القيم التالية (نادرًا ما تستخدمها، إلا إن أردت فعلًا جعل الخط مائلًا لسبب وجيه):
		</p>
	</li>
	<li>
		<p>
			<code>normal</code>: يجعل الخط نمطيًا (يلغي الإمالة).
		</p>
	</li>
	<li>
		<p>
			<code>italic</code>: يجعل الخط مائلًا إن كان الخط يدعم ذلك، بينما يجعله منحرفًا قليلًا oblique إن لم يدعم الخط ذلك.
		</p>
	</li>
	<li>
		<p>
			<code>oblique</code>: يقلّد الإمالة نوعًا ما بجعل الأحرف منحرفة قليلًا عن الوضع النمطي.
		</p>
	</li>
	<li>
		<p>
			<a href="https://wiki.hsoub.com/CSS/font-weight" rel="external"><code>font-weight</code></a>: تحدد هذه الخاصية مقدار سماكة أو ثخانة الخط، ولها عدة قيم: "light-" و "normal-" و "bold-" و "extrabold-" و "black-" في حال احتجت إلى ذلك، لكنك لن تستخدم عمليًا سوى "normal" و "bold":
		</p>
	</li>
	<li>
		<p>
			<code>normal</code> و <code>bold</code>: تجعل الخط سميكًا أو طبيعيًا.
		</p>
	</li>
	<li>
		<p>
			<code>lighter</code> و <code>bolder</code>: تجعل الخط أسمك أو أخف بدرجة واحدة من سماكة العنصر الأب.
		</p>
	</li>
	<li>
		<p>
			<code>100</code> – <code>900</code>: قيم عددية لمقدار سماكة خط الكتابة وتقدم طريقة لتحكم أفضل بالسماكة بدلًا من الكلمات المفتاحية.
		</p>
	</li>
	<li>
		<p>
			<a href="https://wiki.hsoub.com/CSS/text-transform" rel="external"><code>text-transform</code></a>: تساعدك على تحويل حالة الحروف في النص:
		</p>
	</li>
	<li>
		<p>
			<code>none</code>: تمنع أية تحويلات.
		</p>
	</li>
	<li>
		<p>
			<code>uppercase</code>: تحوّل جميع الحروف إلى حروف كبيرة.
		</p>
	</li>
	<li>
		<p>
			<code>lowercase</code>: تحوّل جميع الحروف إلى حروف صغيرة.
		</p>
	</li>
	<li>
		<p>
			<code>capitalize</code>: تحوّل الأحرف الأولى من الكلمات إلى حروف كبيرة.
		</p>
	</li>
	<li>
		<p>
			<code>full-width</code>: تكتب أي حرف ضمن مربع ثابت الاتساع (أي يشغل كل حرف نفس المساحة) مما يسمح بمحاذاة المحارف المختلفة مثل اللاتينية والآسيوية مثلًا.
		</p>
	</li>
	<li>
		<p>
			<a href="https://wiki.hsoub.com/CSS/text-decoration" rel="external"><code>text-decoration</code></a>: تمكّن أو تلغي تزيين النص (تُستخدم غالبًا في إزالة الخط الموجود تحت الروابط التشعبية عند تنسيقها):
		</p>
	</li>
	<li>
		<p>
			<code>none</code>: إزالة أي تزيين في النص.
		</p>
	</li>
	<li>
		<p>
			<code>underline</code>: يضع خطًا تحت النص.
		</p>
	</li>
	<li>
		<p>
			<code>overline</code>: يضع خطًا فوق النص.
		</p>
	</li>
	<li>
		<p>
			<code>line-through</code>: يضع خطًا وسط النص.
		</p>

		<p>
			تقبل الخاصية <code>text-decoration</code> قيمًا متعددة إذا أردت إضافة عدة تزيينات في الوقت عينه. إليك مثالًا:
		</p>
	</li>
</ul>

<pre class="ipsCode">  text-decoration: underline overline
</pre>

<p>
	ولا بد من الإشارة إلى أن <code>text-decoration</code> هي خاصية مختصرة للخاصيات <a href="https://wiki.hsoub.com/CSS/text-decoration-line" rel="external"><code>text-decoration-line</code></a> و <a href="https://wiki.hsoub.com/CSS/text-decoration-style" rel="external"><code>text-decoration-style</code></a> و <a href="https://wiki.hsoub.com/CSS/text-decoration-color" rel="external"><code>text-decoration-color</code></a>، لهذا يمكنك استخدام توليفة من هذه التنسيقات لإظهار الأثر المطلوب. إليك مثالًا:
</p>

<pre class="ipsCode">  text-decoration: line-through red wavy
</pre>

<p>
	لنلق نظرةً على المثال التالي الذي يضيف خاصيتين من الخاصيات السابقة معًا:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_7639_20" style=""><span class="pln">html </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">font-size</span><span class="pun">:</span><span class="pln"> </span><span class="lit">10px</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

h1 </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">font-size</span><span class="pun">:</span><span class="pln"> </span><span class="lit">5rem</span><span class="pun">;</span><span class="pln">
  </span><span class="kwd">text-transform</span><span class="pun">:</span><span class="pln"> capitalize</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"> p </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">font-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">

p </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">font-size</span><span class="pun">:</span><span class="pln"> </span><span class="lit">1.5rem</span><span class="pun">;</span><span class="pln">
  </span><span class="kwd">color</span><span class="pun">:</span><span class="pln"> red</span><span class="pun">;</span><span class="pln">
  </span><span class="kwd">font-family</span><span class="pun">:</span><span class="pln"> Helvetica</span><span class="pun">,</span><span class="pln"> Arial</span><span class="pun">,</span><span class="pln"> sans-serif</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	إليك النتيجة:
</p>

<p style="text-align: center;">
	<img class="ipsImage ipsImage_thumbnailed" data-fileid="182022" data-ratio="26.98" data-unique="z80zu8wcv" width="845" alt="image.png" src="https://academy.hsoub.com/uploads/monthly_2026_04/image.png.0312bdb3ce8979383fb6dd2a9055edf9.png">
</p>

<h3 id="-9">
	إلقاء الظلال على النصوص
</h3>

<p>
	يمكن إلقاء الظل على النص باستخدام الخاصية <a href="https://wiki.hsoub.com/CSS/text-shadow" rel="external"><code>text-shadow</code></a> التي تأخذ حتى أربعة قيم كما يظهر في المثال التالي:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_7639_22" style=""><span class="kwd">text-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">5px</span><span class="pln"> red</span><span class="pun">;</span></pre>

<p>
	أما القيم الأربعة فهي:
</p>

<ol>
	<li>
		<strong>الإزاحة الأفقية للظل عن النص الأصلي</strong>: وتأخذ معظم وحدات قياس الطول والأبعاد المتاحة في CSS، لكن ما ستستخدمه عادةً هو <code>px</code>. تزيح القيم الموجبة الظل نحو اليمين والسالبة إلى اليسار، ولا بد من استخدام هذه القيمة.
	</li>
	<li>
		<strong>الإزاحة العمودية للظل عن النص الأصلي</strong>: تشابه من ناحية الوظيفة الإزاحة الأفقية إلا أنها للأعلى والأسفل وليست لليمين واليسار، ولا بُد من استخدام هذه القيمة.
	</li>
	<li>
		<strong>نصف قطر التمويه blur</strong>: وتشير القيم الأعلى إلى أن الظل أوسع انتشارًا، وتأخذ القيمة 0 إن لم تُستخدم (لا يوجد إماهة). يمكن أن تأخذ هذه القيمة أية وحدات لقياس الطول أو الأبعاد في CSS.
	</li>
	<li>
		<strong>اللون الأساسي للظل</strong>: ويأخذ جميع القيم اللونية في CSS. وإن لم تُستخدم، فسيكون لون الظل افتراضيًا هو اللون الحالي المأخوذ من الخاصية <a href="https://wiki.hsoub.com/CSS/color" rel="external"><code>color</code></a> للعنصر.
	</li>
</ol>

<h4 id="-10">
	الظلال المتعددة
</h4>

<p>
	يُمكن تطبيق عدة ظلال على النص باستخدام عدة قيم منفصلة عن بعضها بفواصل:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_7639_24" style=""><span class="pln">h1 </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">text-shadow</span><span class="pun">:</span><span class="pln">
    </span><span class="lit">1px</span><span class="pln"> </span><span class="lit">1px</span><span class="pln"> </span><span class="lit">1px</span><span class="pln"> red</span><span class="pun">,</span><span class="pln">
    </span><span class="lit">2px</span><span class="pln"> </span><span class="lit">2px</span><span class="pln"> </span><span class="lit">1px</span><span class="pln"> red</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	إذا طبقنا هذا التنسيق على العنصر <code>&lt;h1&gt;</code> على مثالنا السابق ستكون النتيجة على النحو التالي:
</p>

<p style="text-align: center;">
	<img class="ipsImage ipsImage_thumbnailed" data-fileid="182023" data-ratio="22.76" data-unique="oev7c1wp9" width="848" alt="image.png" src="https://academy.hsoub.com/uploads/monthly_2026_04/image.png.3d6aef6b2c90cf66da321bc3a5517f11.png">
</p>

<h2 id="-11">
	تخطيط النص
</h2>

<p>
	لنلقِ نظرةً الآن على الخاصيات التي تؤثر على تخطيط layout النص:
</p>

<h3 id="-12">
	محاذاة النصوص
</h3>

<p>
	تُستخدم الخاصية <a href="https://wiki.hsoub.com/CSS/text-align" rel="external"><code>text-align</code></a> في محاذاة النصوص ضمن صندوق الحاوية. تأخذ الخاصية القيم التالية التي تعمل بنفس الطريقة التي تستخدمها المحررات النصية النمطية:
</p>

<ul>
	<li>
		<code>left</code>: تُحاذي النص إلى اليسار.
	</li>
	<li>
		<code>right</code>: تُحاذي النص إلى اليمين.
	</li>
	<li>
		<code>center</code>: تجعل النص في وسط الحاوية.
	</li>
	<li>
		<code>justify</code>: تجعل النص ممتدًا ذو فراغات مختلفة الأحجام ليجعل اتساع جميع الأسطر في النص متساويًا. قد يبدو مظهر النص سيئًا وخاصةً إذا احتوى فقرات تضم الكثير من الكلمات الطويلة؛ فإذا كنت ستستخدم هذه الخاصية، لا بد من استخدام خاصية أخرى هي <a href="https://wiki.hsoub.com/CSS/hyphens" rel="external"><code>hyphens</code></a> لتوزيع بعض الكلمات الطويلة على سطرين.
	</li>
</ul>

<p>
	إذا طبقنا الخاصية <code>text-align: center</code> على العنصر <code>&lt;h1&gt;</code> في مثالنا السابق:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_7639_26" style=""><span class="pln">html </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">font-size</span><span class="pun">:</span><span class="pln"> </span><span class="lit">10px</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

h1 </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">font-size</span><span class="pun">:</span><span class="pln"> </span><span class="lit">5rem</span><span class="pun">;</span><span class="pln">
  </span><span class="kwd">text-transform</span><span class="pun">:</span><span class="pln"> capitalize</span><span class="pun">;</span><span class="pln">
  </span><span class="kwd">text-shadow</span><span class="pun">:</span><span class="pln">
    </span><span class="lit">1px</span><span class="pln"> </span><span class="lit">1px</span><span class="pln"> </span><span class="lit">1px</span><span class="pln"> red</span><span class="pun">,</span><span class="pln">
    </span><span class="lit">2px</span><span class="pln"> </span><span class="lit">2px</span><span class="pln"> </span><span class="lit">1px</span><span class="pln"> red</span><span class="pun">;</span><span class="pln">
  </span><span class="kwd">text-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">

h1 </span><span class="pun">+</span><span class="pln"> p </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">font-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">

p </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">font-size</span><span class="pun">:</span><span class="pln"> </span><span class="lit">1.5rem</span><span class="pun">;</span><span class="pln">
  </span><span class="kwd">color</span><span class="pun">:</span><span class="pln"> red</span><span class="pun">;</span><span class="pln">
  </span><span class="kwd">font-family</span><span class="pun">:</span><span class="pln"> Helvetica</span><span class="pun">,</span><span class="pln"> Arial</span><span class="pun">,</span><span class="pln"> sans-serif</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	ستكون النتيجة على النحو التالي
</p>

<p style="text-align: center;">
	<img class="ipsImage ipsImage_thumbnailed" data-fileid="182024" data-ratio="26.37" data-unique="m6oasftru" width="857" alt="image.png" src="https://academy.hsoub.com/uploads/monthly_2026_04/image.png.0075d8f79ca3cb713dc1ae271d2114ee.png">
</p>

<h3 id="-13">
	ارتفاع السطر
</h3>

<p>
	تضبط الخاصية <a href="https://wiki.hsoub.com/CSS/line-height" rel="external"><code>line-height</code></a> ارتفاع كل سطر من أسطر النص، وتأخذ جميع وحدات القياس في CSS إضافةً إلى قيم بدون وحدات unit-less تعمل مثل مضاعفات وهي عمليًا أفضل الخيارات. عند استخدام قيم بلا وحدات سيُحسب جداء حجم الخط <a href="https://wiki.hsoub.com/CSS/font-size" rel="external"><code>font-size</code></a> في هذه القيمة وتكون النتيجة هي ارتفاع الخط. سيبدو النص أفضل وأسهل قراءة عندما تتباعد الأسطر عن بعضها، ويكون عادةً الفراغ المزدوج (1.5-2) هو التباعد المناسب بين الأسطر، وكي نجعل التباعد بين الأسطر في مثالنا بقيمة 1.6 ما علينا سوى كتابة الشيفرة التالية:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_7639_28" style=""><span class="pln">p </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">line-height</span><span class="pun">:</span><span class="pln"> </span><span class="lit">1.6</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	وعند تطبيقها على عنصر الفقرة <a href="https://wiki.hsoub.com/HTML/p" rel="external"><code>&lt;p&gt;</code></a> في مثالنا السابق:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_7639_30" style=""><span class="pln">html </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">font-size</span><span class="pun">:</span><span class="pln"> </span><span class="lit">10px</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

h1 </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">font-size</span><span class="pun">:</span><span class="pln"> </span><span class="lit">5rem</span><span class="pun">;</span><span class="pln">
  </span><span class="kwd">text-transform</span><span class="pun">:</span><span class="pln"> capitalize</span><span class="pun">;</span><span class="pln">
  </span><span class="kwd">text-shadow</span><span class="pun">:</span><span class="pln">
    </span><span class="lit">1px</span><span class="pln"> </span><span class="lit">1px</span><span class="pln"> </span><span class="lit">1px</span><span class="pln"> red</span><span class="pun">,</span><span class="pln">
    </span><span class="lit">2px</span><span class="pln"> </span><span class="lit">2px</span><span class="pln"> </span><span class="lit">1px</span><span class="pln"> red</span><span class="pun">;</span><span class="pln">
  </span><span class="kwd">text-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">

h1 </span><span class="pun">+</span><span class="pln"> p </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">font-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">

p </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">font-size</span><span class="pun">:</span><span class="pln"> </span><span class="lit">1.5rem</span><span class="pun">;</span><span class="pln">
  </span><span class="kwd">color</span><span class="pun">:</span><span class="pln"> red</span><span class="pun">;</span><span class="pln">
  </span><span class="kwd">font-family</span><span class="pun">:</span><span class="pln"> Helvetica</span><span class="pun">,</span><span class="pln"> Arial</span><span class="pun">,</span><span class="pln"> sans-serif</span><span class="pun">;</span><span class="pln">
  </span><span class="kwd">line-height</span><span class="pun">:</span><span class="pln"> </span><span class="lit">1.6</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	ستكون النتيجة على النحو التالي:
</p>

<p style="text-align: center;">
	<img class="ipsImage ipsImage_thumbnailed" data-fileid="182027" data-ratio="30.72" data-unique="1f4ntfcwt" width="853" alt="image.png" src="https://academy.hsoub.com/uploads/monthly_2026_04/image.png.ca6963a9bd61fb3dcdc5826ce10e28cb.png">
</p>

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

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

<p>
	لإظهار طريقة عمل هاتين الخاصيتين سنطبق تباعدًا بين كلمات وأحرف أول سطر من العنصر <code>&lt;p&gt;</code> في مثالنا السابق:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_7639_32" style=""><span class="kwd">p</span><span class="pun">::</span><span class="pln">first-line </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">letter-spacing</span><span class="pun">:</span><span class="pln"> </span><span class="lit">4px</span><span class="pun">;</span><span class="pln">
  </span><span class="kwd">word-spacing</span><span class="pun">:</span><span class="pln"> </span><span class="lit">4px</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	ثم نصيّر شيفرة HTML التالية:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_7639_34" style=""><span class="pln">html </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">font-size</span><span class="pun">:</span><span class="pln"> </span><span class="lit">10px</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

h1 </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">font-size</span><span class="pun">:</span><span class="pln"> </span><span class="lit">5rem</span><span class="pun">;</span><span class="pln">
  </span><span class="kwd">text-transform</span><span class="pun">:</span><span class="pln"> capitalize</span><span class="pun">;</span><span class="pln">
  </span><span class="kwd">text-shadow</span><span class="pun">:</span><span class="pln">
    </span><span class="lit">1px</span><span class="pln"> </span><span class="lit">1px</span><span class="pln"> </span><span class="lit">1px</span><span class="pln"> red</span><span class="pun">,</span><span class="pln">
    </span><span class="lit">2px</span><span class="pln"> </span><span class="lit">2px</span><span class="pln"> </span><span class="lit">1px</span><span class="pln"> red</span><span class="pun">;</span><span class="pln">
  </span><span class="kwd">text-align</span><span class="pun">:</span><span class="pln"> center</span><span class="pun">;</span><span class="pln">
  </span><span class="kwd">letter-spacing</span><span class="pun">:</span><span class="pln"> </span><span class="lit">2px</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"> p </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">font-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">

p </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">font-size</span><span class="pun">:</span><span class="pln"> </span><span class="lit">1.5rem</span><span class="pun">;</span><span class="pln">
  </span><span class="kwd">color</span><span class="pun">:</span><span class="pln"> red</span><span class="pun">;</span><span class="pln">
  </span><span class="kwd">font-family</span><span class="pun">:</span><span class="pln"> Helvetica</span><span class="pun">,</span><span class="pln"> Arial</span><span class="pun">,</span><span class="pln"> sans-serif</span><span class="pun">;</span><span class="pln">
  </span><span class="kwd">line-height</span><span class="pun">:</span><span class="pln"> </span><span class="lit">1.6</span><span class="pun">;</span><span class="pln">
  </span><span class="kwd">letter-spacing</span><span class="pun">:</span><span class="pln"> </span><span class="lit">1px</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	ستكون النتيجة على النحو التالي:
</p>

<p style="text-align: center;">
	<img class="ipsImage ipsImage_thumbnailed" data-fileid="182028" data-ratio="34.42" data-unique="k5teqcpn3" width="828" alt="image.png" src="https://academy.hsoub.com/uploads/monthly_2026_04/image.png.c62db2e8f49e068e31bfc2d0fec7ddbe.png">
</p>

<h3 id="-15">
	خاصيات أخرى تستحق الملاحظة
</h3>

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

<ul>
	<li>
		<p>
			<strong>خاصيات تنسيق الخط</strong>:
		</p>
	</li>
	<li>
		<p>
			<a href="https://wiki.hsoub.com/CSS/font" rel="external"><code>font-variant</code></a>: تبدّل بين الأحرف الصغيرة والنص العادي.
		</p>
	</li>
	<li>
		<p>
			<a href="https://wiki.hsoub.com/CSS/font-kerning" rel="external"><code>font-kerning</code></a>: تبدل بين وضع التداخل kerning والوضع الطبيعي.
		</p>
	</li>
	<li>
		<p>
			<code>font-feature-settings</code>: تبدّل بين ميزات الخطوط من النوع OpenType.
		</p>
	</li>
	<li>
		<p>
			<code>font-variant-alternates</code>: تتحكم باستخدام المحارف البديلة لواجهة خط كتابة معين.
		</p>
	</li>
	<li>
		<p>
			<code>font-variant-caps</code>: يتحكم باستخدام بدائل المحارف الكبيرة.
		</p>
	</li>
	<li>
		<p>
			<code>font-variant-east-asian</code>: تتحكم باستخدام المحارف البديلة لخطوط كتابة اللغات الشرق آسيوية مثل اليابانية والصينية.
		</p>
	</li>
	<li>
		<p>
			<code>font-variant-ligatures</code>: تُستخدم للتحكم بكيفية استخدام المحارف المترابطة (محرفين مرتبطين على شكل محرف واحد) والمحارف ذات الحركات.
		</p>
	</li>
	<li>
		<p>
			<code>font-variant-numeric</code>: تتحكم باستخدام بدائل محارف الأرقام والأعداد الكسرية وعلامات الترتيب.
		</p>
	</li>
	<li>
		<p>
			<code>font-variant-position</code>: تتحكم باستخدام بدائل المحارف التي تشغل مواقع أصغر مثل المحارف التي تُكتب منخفضة أو مرتفعة.
		</p>
	</li>
	<li>
		<p>
			<code>font-size-adjust</code>: تعديل الحجم المرئي للخط بمعزل عن حجمه الحقيقي.
		</p>
	</li>
	<li>
		<p>
			<code>font-stretch</code>: تُستخدم للتبديل بين النسخ الممتدة stretched الممكنة لخط معين.
		</p>
	</li>
	<li>
		<p>
			<code>text-underline-position</code>: يحدد موقع الخط الذي يُرسم أسفل النص عند استخدام القيمة <code>underline</code> للخاصية <code>text-decoration-line</code>.
		</p>
	</li>
	<li>
		<p>
			<code>text-rendering</code>: تحاول أن تحسّن في النص عند تصييره.
		</p>
	</li>
	<li>
		<p>
			<strong>خاصيات تخطيط النص</strong>:
		</p>
	</li>
	<li>
		<p>
			<a href="https://wiki.hsoub.com/CSS/text-indent" rel="external"><code>text-indent</code></a>: تحدد مقدار الفراغ الأفقي الواجب تركه قبل بداية السطر الأول من النص.
		</p>
	</li>
	<li>
		<p>
			<a href="https://wiki.hsoub.com/CSS/text-overflow" rel="external"><code>text-overflow</code></a>: تعرّف طريقة تنبيه المستخدم عندما لا يُعرض المحتوى في حالة الطفحان overflow.
		</p>
	</li>
	<li>
		<p>
			<a href="https://wiki.hsoub.com/CSS/white-space" rel="external"><code>white-space</code></a>: تعرّف كيفية التعامل مع المسافات الفارغة وعناصر الانتقال إلى سطر جديد ضمن العناصر.
		</p>
	</li>
	<li>
		<p>
			<a href="https://wiki.hsoub.com/CSS/word-break" rel="external"><code>word-break</code></a>: تحدّد إذا ما كان مسموحًا تجزئة الكلمة عند الانتقال إلى سطر جديد.
		</p>
	</li>
	<li>
		<p>
			<a href="https://wiki.hsoub.com/CSS/direction" rel="external"><code>direction</code></a>: تعرّف اتجاه خط الكتابة. يتعلق الأمر عادةً بلغة الكتابة ومن الأفضل ترك الأمر للغة HTML كي تتعامل مع هذا الجزء لارتباطه بسياق النص.
		</p>
	</li>
	<li>
		<p>
			<code>hyphens</code>: تفعّل أو تعطّل تجزئة الكلمات على سطرين في اللغات التي تدعم ذلك.
		</p>
	</li>
	<li>
		<p>
			<a href="https://wiki.hsoub.com/CSS/line-break" rel="external"><code>line-break</code></a>: تشدد أو تتسامح بالانتقال إلى سطر جديد في اللغات الآسيوية.
		</p>
	</li>
	<li>
		<p>
			<a href="https://wiki.hsoub.com/CSS/text-align-last" rel="external"><code>text-align-last</code></a>: تحدد محاذاة آخر سطر من كتلة أو أي سطر قبل أن يُجبر النص على الانتقال إلى سطر جديد.
		</p>
	</li>
	<li>
		<p>
			<code>text-orientation</code>: تحدد جهة انسياب الكلمات ضمن السطر.
		</p>
	</li>
	<li>
		<p>
			<a href="https://wiki.hsoub.com/CSS/overflow-wrap" rel="external"><code>overflow-wrap</code></a>: تحدد إن كان يُسمح للمتصفح أن ينتقل بالنص إلى سطر جديد لتفادي <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%B7%D9%81%D8%AD%D8%A7%D9%86-%D8%A7%D9%84%D9%85%D8%AD%D8%AA%D9%88%D9%89-%D8%AE%D8%A7%D8%B1%D8%AC-%D8%B5%D9%86%D8%AF%D9%88%D9%82-%D8%A7%D9%84%D8%B9%D9%86%D8%B5%D8%B1-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-css-r2160/" rel="">طفحان المحتوى</a> أو لا.
		</p>
	</li>
	<li>
		<p>
			<a href="https://wiki.hsoub.com/CSS/writing-mode" rel="external"><code>writing-mode</code></a>: تحدد إن كان اتجاه الأسطر أفقي أو عمودي واتجاه انسياب الأسطر اللاحقة.
		</p>
	</li>
</ul>

<h2 id="-16">
	الخاصيات المختصرة لتنسيق خط الكتابة
</h2>

<p>
	يمكن ضبط الكثير من قيم خاصيات تنسيق النصوص من خلال الخاصية المختصرة <a href="https://wiki.hsoub.com/CSS/font" rel="external"><code>font</code></a>، وتكتب قيمها وفق التسلسل التالي: <a href="https://wiki.hsoub.com/CSS/font-style" rel="external"><code>font-style</code></a> و <a href="https://wiki.hsoub.com/CSS/font-variant" rel="external"><code>font-variant</code></a> و <a href="https://wiki.hsoub.com/CSS/font-weight" rel="external"><code>font-weight</code></a> و <a href="https://wiki.hsoub.com/CSS/font-stretch" rel="external"><code>font-stretch</code></a> و <a href="https://wiki.hsoub.com/CSS/font-size" rel="external"><code>font-size</code></a> و <a href="https://wiki.hsoub.com/CSS/line-height" rel="external"><code>line-height</code></a> و <a href="https://wiki.hsoub.com/CSS/font-family" rel="external"><code>font-family</code></a>. وتُعد الخاصيتين <code>font-size</code> و <code>font-family</code> ضروريتان فقط (يجب تحديد قيمهما).
</p>

<p>
	لا بد من الإشارة إلى ضرورة وضع شرطة أمامية مائلة "/" بين الخاصيتين <code>font-size</code> و <code>line-height</code> كما في المثال التالي:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_7639_36" style=""><span class="kwd">font</span><span class="pun">:</span><span class="pln"> italic normal bold normal </span><span class="lit">3em</span><span class="pun">/</span><span class="lit">1.5</span><span class="pln"> Helvetica</span><span class="pun">,</span><span class="pln"> Arial</span><span class="pun">,</span><span class="pln"> sans-serif</span><span class="pun">;</span></pre>

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

<p>
	نأمل أن تكون قد استمتعت واستفدت مما قدمناه في مقالنا عن تنسيق النصوص في CSS، وسنتابع العمل في المقال القادم على تنسيق قوائم HTML.
</p>

<p>
	ترجمة -وبتصرف- للمقال <a href="https://developer.mozilla.org/en-US/docs/Learn/CSS/Styling_text/Fundamentals" rel="external nofollow">Fundamentals text and font styling</a>
</p>

<h2 id="-19">
	اقرأ المزيد
</h2>

<ul>
	<li>
		المقال السابق <a href="https://academy.hsoub.com/programming/css/%D8%AA%D9%86%D8%B8%D9%8A%D9%85-%D8%B4%D9%8A%D9%81%D8%B1%D8%A9-css-r2198/" rel="">تنظيم الشيفرة في CSS</a>.
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A7%D8%AA-%D9%84%D8%BA%D8%A9-css/" rel="">تعرف على أساسيات لغة CSS</a>
	</li>
	<li>
		<a href="https://wiki.hsoub.com/CSS" rel="external">توثيق لغة CSS العربي</a>.
	</li>
	<li>
		<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="">تنسيق نصوص صفحات الويب باستخدام CSS</a>.
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D8%A7%D9%84%D8%AA%D9%86%D8%B3%D9%8A%D9%82%D8%A7%D8%AA-%D8%A7%D9%84%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A9-%D9%84%D9%84%D8%B9%D9%86%D8%A7%D8%B5%D8%B1-%D9%81%D9%8A-css-r1054/" rel="">التنسيقات الأساسية للعناصر في CSS</a>.
	</li>
</ul>
]]></description><guid isPermaLink="false">2211</guid><pubDate>Wed, 03 Jan 2024 12:00:00 +0000</pubDate></item><item><title>&#x62A;&#x646;&#x638;&#x64A;&#x645; &#x634;&#x64A;&#x641;&#x631;&#x629; CSS</title><link>https://academy.hsoub.com/programming/css/%D8%AA%D9%86%D8%B8%D9%8A%D9%85-%D8%B4%D9%8A%D9%81%D8%B1%D8%A9-css-r2198/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2023_12/--CSS2.png.32f94d35cfbb809aa79d6a7a7144477a.png" /></p>
<h1 id="css">
	تنظيم شيفرة CSS
</h1>

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

<p>
	ننصحك قبل المتابعة في قراءة هذه المقال أن:
</p>

<ol>
	<li>
		تطلع على أساسيات استخدام الحاسوب وتصفح الويب.
	</li>
	<li>
		تحضّر بيئة عمل بسيطة كما تحدثنا مسبقًا في المقال <a href="https://academy.hsoub.com/programming/general/%D8%AA%D8%AB%D8%A8%D9%8A%D8%AA-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D9%8A%D8%A7%D8%AA-%D8%A7%D9%84%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A9-%D9%84%D9%84%D8%A7%D9%86%D8%B7%D9%84%D8%A7%D9%82-%D9%81%D9%8A-%D8%AA%D8%B7%D9%88%D9%8A%D8%B1-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-r1671/" rel="">تثبيت البرمجيات الأساسية</a>، وتتفهم طريقة إنشاء وإدارة الملفات كما شرحناها في مقال <a href="https://academy.hsoub.com/programming/general/%D8%A7%D9%84%D8%AA%D8%B9%D8%A7%D9%85%D9%84-%D9%85%D8%B9-%D8%A7%D9%84%D9%85%D9%84%D9%81%D8%A7%D8%AA-%D9%81%D9%8A-%D8%B9%D9%85%D9%84%D9%8A%D8%A9-%D8%AA%D8%B7%D9%88%D9%8A%D8%B1-%D9%85%D9%88%D9%82%D8%B9-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-r1686/" rel="">التعامل مع الملفات</a>.
	</li>
	<li>
		تطلع على أساسيات HTML كما شرحناها في سلسلة المقالات <a href="https://academy.hsoub.com/programming/html/%D8%AA%D8%B9%D8%B1%D9%81-%D8%B9%D9%84%D9%89-%D9%84%D8%BA%D8%A9-html-r1752/" rel="">مدخل إلى HTML</a>.
	</li>
	<li>
		تتفهم أساسيات CSS كما شرحناها في سلسلة المقالات <a href="https://academy.hsoub.com/programming/css/%D8%AA%D8%B9%D8%B1%D9%81-%D8%B9%D9%84%D9%89-css-r2000/" rel="">خطواتك الأولى في CSS</a>.
	</li>
</ol>

<h2 id="css-1">
	نصائح لترتيب شيفرات CSS
</h2>

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

<h3 id="">
	هل هناك نموذج محدد في تنسيق شيفرة المشروع؟
</h3>

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

<h3 id="-1">
	الحفاظ على التناسق
</h3>

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

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

<h3 id="css-2">
	تنسيق قواعد CSS لتكون سهلة القراءة
</h3>

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

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_1373_10" style=""><span class="pun">.</span><span class="pln">box </span><span class="pun">{</span><span class="kwd">background-color</span><span class="pun">:</span><span class="pln"> </span><span class="lit">#567895</span><span class="pun">;</span><span class="pln"> </span><span class="pun">}</span><span class="pln">
h2 </span><span class="pun">{</span><span class="kwd">background-color</span><span class="pun">:</span><span class="pln"> black</span><span class="pun">;</span><span class="pln"> </span><span class="kwd">color</span><span class="pun">:</span><span class="pln"> white</span><span class="pun">;</span><span class="pln"> </span><span class="pun">}</span></pre>

<p>
	بينما يفضل آخرون كتابة كل قاعدة على سطر جديد كما يلي:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_1373_12" style=""><span class="pun">.</span><span class="pln">box </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">background-color</span><span class="pun">:</span><span class="pln"> </span><span class="lit">#567895</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

h2 </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">background-color</span><span class="pun">:</span><span class="pln"> black</span><span class="pun">;</span><span class="pln">
  </span><span class="kwd">color</span><span class="pun">:</span><span class="pln"> white</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></pre>

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

<h3 id="-2">
	التعليقات على الشيفرة
</h3>

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

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_1373_14" style=""><span class="com">/*CSS هذا مثال عن التعليقات في 
يمكن كتابة التعليق على أكثر من سطر */</span></pre>

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

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_1373_16" style=""><span class="com">/* || تنسيقات عامة */</span><span class="pln">

</span><span class="com">/* … */</span><span class="pln">

</span><span class="com">/* || تنسيق خطوط الكتابة */</span><span class="pln">

</span><span class="com">/* … */</span><span class="pln">

</span><span class="com">/* || تنسيق الترويسات وعناصر التنقل الرئيسية */</span><span class="pln">

</span><span class="com">/* … */</span></pre>

<p>
	لا حاجة إلى كتابة تعليقات حول كل ما تفعله شيفرتك، فالكثير من القواعد تشرح نفسها بنفسها، لكن ما تحتاج إلى التعليق عليه هو عادةً نقاط محددة اتخذت قرارًا عندها لأسباب خاصة، فقد تستخدم خاصية محددة بطريقة معينة لتحاشي <a href="https://academy.hsoub.com/programming/html/%D9%85%D8%B9%D8%A7%D9%84%D8%AC%D8%A9-%D8%A7%D9%84%D9%85%D8%B4%D8%A7%D9%83%D9%84-%D8%A7%D9%84%D8%B4%D8%A7%D8%A6%D8%B9%D8%A9-%D9%84%D9%84%D8%AA%D9%88%D8%A7%D9%81%D9%82-%D9%85%D8%B9-%D8%A7%D9%84%D9%85%D8%AA%D8%B5%D9%81%D8%AD%D8%A7%D8%AA-%D9%81%D9%8A-html-%D9%88-css-r1955/" rel="">مشكلات التوافق مع المتصفحات الأقدم</a>. إليك مثالًا:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_1373_18" style=""><span class="pun">.</span><span class="pln">box </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">background-color</span><span class="pun">:</span><span class="pln"> red</span><span class="pun">;</span><span class="pln"> </span><span class="com">/* fallback for older browsers that don't support gradients */</span><span class="pln">
  </span><span class="kwd">background-image</span><span class="pun">:</span><span class="pln"> linear-gradient</span><span class="pun">(</span><span class="pln">to right</span><span class="pun">,</span><span class="pln"> </span><span class="lit">#ff0000</span><span class="pun">,</span><span class="pln"> </span><span class="lit">#aa0000</span><span class="pun">);</span><span class="pln">
</span><span class="pun">}</span></pre>

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

<h3 id="css-3">
	تقسيم ملف CSS إلى أقسام منطقية
</h3>

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

<ul>
	<li>
		متن صفحة الويب <code>body</code>.
	</li>
	<li>
		الفقرات <code>p</code>.
	</li>
	<li>
		العناوين الرئيسية <code>h1</code>, <code>h2</code>, <code>h3</code>, <code>h4</code>, <code>h5</code>.
	</li>
	<li>
		القوائم المرتبة<code>ul</code> وغير المرتبة <code>ol</code>.
	</li>
	<li>
		خصائص الجداول <code>table</code>.
	</li>
	<li>
		الروابط التشعبية.
	</li>
</ul>

<p>
	نضع في هذا القسم من ملف الشيفرة التنسيق الافتراضي لعناصر الموقع مثل تنسيقات جداول البيانات والقوائم وهكذا:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_1373_21" style=""><span class="com">/* || قواعد تنسيق عامة */</span><span class="pln">

body </span><span class="pun">{</span><span class="pln">
  </span><span class="com">/* … */</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

h1</span><span class="pun">,</span><span class="pln">
h2</span><span class="pun">,</span><span class="pln">
h3</span><span class="pun">,</span><span class="pln">
h4 </span><span class="pun">{</span><span class="pln">
  </span><span class="com">/* … */</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

ul </span><span class="pun">{</span><span class="pln">
  </span><span class="com">/* … */</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

blockquote </span><span class="pun">{</span><span class="pln">
  </span><span class="com">/* … */</span><span class="pln">
</span><span class="pun">}</span></pre>

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

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_1373_23" style=""><span class="com">/* || الأصناف المساعدة */</span><span class="pln">

</span><span class="pun">.</span><span class="pln">nobullets </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">list-style</span><span class="pun">:</span><span class="pln"> none</span><span class="pun">;</span><span class="pln">
  </span><span class="kwd">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="kwd">padding</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">/* … */</span></pre>

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

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_1373_25" style=""><span class="com">/* || تنسيقات كامل الصفحات */</span><span class="pln">

</span><span class="pun">.</span><span class="pln">main-nav </span><span class="pun">{</span><span class="pln">
  </span><span class="com">/* … */</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

</span><span class="pun">.</span><span class="pln">logo </span><span class="pun">{</span><span class="pln">
  </span><span class="com">/* … */</span><span class="pln">
</span><span class="pun">}</span></pre>

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

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_1373_27" style=""><span class="com">/* || صفحات المخزن */</span><span class="pln">

</span><span class="pun">.</span><span class="pln">product-listing </span><span class="pun">{</span><span class="pln">
  </span><span class="com">/* … */</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

</span><span class="pun">.</span><span class="pln">product-box </span><span class="pun">{</span><span class="pln">
  </span><span class="com">/* … */</span><span class="pln">
</span><span class="pun">}</span></pre>

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

<h3 id="-3">
	تجنب استخدام محددات شديدة التخصيص
</h3>

<p>
	عندما تبني محددًا مخصصًا جدًا، ستجد أنك ستعيد استخدام فقرات من شيفرتك مرارًا لتطبيق نفس قواعد هذا المحدد على عناصر أخرى، فلو أردت بناء محدد يستهدف الفقرات <code>&lt;p&gt;</code> التي تمتلك الصنف <code>box</code> وتتواجد ضمن العناصر <code>&lt;article&gt;</code> التي تمتلك الصنف <code>main</code> على النحو التالي:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_1373_29" style=""><span class="pln">article</span><span class="pun">.</span><span class="pln">main p</span><span class="pun">.</span><span class="pln">box </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">border</span><span class="pun">:</span><span class="pln"> </span><span class="lit">1px</span><span class="pln"> solid </span><span class="lit">#ccc</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></pre>

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

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_1373_31" style=""><span class="pun">.</span><span class="pln">box </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">border</span><span class="pun">:</span><span class="pln"> </span><span class="lit">1px</span><span class="pln"> solid </span><span class="lit">#ccc</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></pre>

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

<h3 id="-4">
	تقسيم ملفات التنسيق الكبيرة إلى ملفات أصغر
</h3>

<p>
	في الحالات التي تحتاج فيها إلى تنسيقات مختلفة جدًا لأجزاء محددة من موقعك، قد ترى ضرورة وجود ملف يتضمن القواعد العامة، إضافةً إلى ملفات أصغر تضم قواعد مخصصة لتنسيق تلك الأجزاء، ويمكنك طبعًا ربط أي صفحة باكثر من ملف تنسيق، إذ تنص <a href="https://academy.hsoub.com/programming/css/%D8%A7%D9%84%D8%AA%D8%B9%D8%A7%D9%82%D8%A8-%D9%88%D8%A7%D9%84%D8%AA%D8%AE%D8%B5%D9%8A%D8%B5-%D9%88%D8%A7%D9%84%D9%88%D8%B1%D8%A7%D8%AB%D8%A9-%D9%81%D9%8A-css-r2042/" rel="">قواعد التعاقب</a> أن التنسيقات الموجودة في آخر ملف يربط مع الصفحة ستطبّق أولًا.
</p>

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

<h2 id="css-4">
	أدوات أخرى قد تساعد في تنظيم شيفرة CSS
</h2>

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

<h3 id="css-5">
	أساليب CSS
</h3>

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

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

<h4 id="oocss">
	أسلوب OOCSS
</h4>

<p>
	تدين معظم النهج التي ستواجهها بالفضل إلى مبدأ تنسيقات CSS غرضية التوجه Object Oriented CSS -أو اختصارًا OOCSS، وهو نهج اشتهر نتيجةً لأعمال <a href="https://github.com/stubbornella/oocss/wiki" rel="external nofollow">نيكول سوليفان Nicole Sullivan</a>. تنص الفكرة الأساسية لهذا النهج على فصل شيفرة CSS إلى كائنات يمكن استخدامها من جديد في أي مكان تريده في موقعك، ومن الأمثلة النموذجية لنهج OOCSS هو النمط الذي يوصف بأنه كائن الوسائط المتعددة Media Object، ويتكون هذا النمط من صورة ثابتة الحجم أو فيديو أو غيرها من العناصر من ناحية، كما يضم حاوية مرنة للمحتوى من ناحية أخرى. يُستخدم هذا النمط كثيرًا ضمن مواقع الويب لعرض التعليقات أو القوائم وغيرها.
</p>

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

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

</span><span class="pun">.</span><span class="pln">comment img </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">border</span><span class="pun">:</span><span class="pln"> </span><span class="lit">1px</span><span class="pln"> solid grey</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

</span><span class="pun">.</span><span class="pln">comment </span><span class="pun">.</span><span class="pln">content </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">font-size</span><span class="pun">:</span><span class="pln"> </span><span class="lit">0.8rem</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

</span><span class="pun">.</span><span class="pln">list-item </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">display</span><span class="pun">:</span><span class="pln"> grid</span><span class="pun">;</span><span class="pln">
  </span><span class="kwd">grid-template-columns</span><span class="pun">:</span><span class="pln"> </span><span class="lit">1fr</span><span class="pln"> </span><span class="lit">3fr</span><span class="pun">;</span><span class="pln">
  </span><span class="kwd">border-bottom</span><span class="pun">:</span><span class="pln"> </span><span class="lit">1px</span><span class="pln"> solid grey</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

</span><span class="pun">.</span><span class="pln">list-item </span><span class="pun">.</span><span class="pln">content </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">font-size</span><span class="pun">:</span><span class="pln"> </span><span class="lit">0.8rem</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></pre>

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

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

</span><span class="pun">.</span><span class="pln">media </span><span class="pun">.</span><span class="pln">content </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">font-size</span><span class="pun">:</span><span class="pln"> </span><span class="lit">0.8rem</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

</span><span class="pun">.</span><span class="pln">comment img </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">border</span><span class="pun">:</span><span class="pln"> </span><span class="lit">1px</span><span class="pln"> solid grey</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

</span><span class="pun">.</span><span class="pln">list-item </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">border-bottom</span><span class="pun">:</span><span class="pln"> </span><span class="lit">1px</span><span class="pln"> solid grey</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	إذ ستحتاج إلى تطبيق كلا الصنفين <code>media</code> و <code>comment</code> ضمن شيفرة HTML:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_1373_37" style=""><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"media comment"</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">""</span><span class="pln"> </span><span class="atn">alt</span><span class="pun">=</span><span class="atv">""</span><span class="pln"> </span><span class="tag">/&gt;</span><span class="pln">
  </span><span class="tag">&lt;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&gt;</span></pre>

<p>
	وكذلك ستحتاج إلى كلا الصنفين <code>media</code> و <code>list-item</code> لتنسيق عناصر القائمة:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_1373_39" style=""><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">"media list-item"</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">""</span><span class="pln"> </span><span class="atn">alt</span><span class="pun">=</span><span class="atv">""</span><span class="pln"> </span><span class="tag">/&gt;</span><span class="pln">
    </span><span class="tag">&lt;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;/li&gt;</span><span class="pln">
</span><span class="tag">&lt;/ul&gt;</span></pre>

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

<h4 id="bem">
	أسلوب BEM
</h4>

<p>
	هو اختصار لعبارة Block Element Modifier وبالعربية معدّل عنصر الكتلة. تُعرّف الكتلة في BEM على أنها كيان قائم بذاته، مثل الأزرار والقوائم والشعارات. العنصر هو شيء ما، مثل عناصر القائمة أو العنوان الذي يرتبط ارتباطًا وثيقًا بالكتلة ويقع داخلها؛ أما المُعدّل modifier فهو راية تشير إلى تغيّر في تنسيق الكتلة أو العنصر. ستميز الشيفرة التي تستخدم هذا النهج من الاستخدام المكثف للشرطة السفلية والشرطة العادية ضمن أصناف CSS. يمكن على سبيل الاطلاع رؤية الأصناف المطبّقة على شيفرة HTML الخاصة بالصفحة <a href="http://getbem.com/naming/" rel="external nofollow">BEM Naming conventions</a>:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_1373_41" style=""><span class="tag">&lt;form</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"form form--theme-xmas form--simple"</span><span class="tag">&gt;</span><span class="pln">
  </span><span class="tag">&lt;label</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"label form__label"</span><span class="pln"> </span><span class="atn">for</span><span class="pun">=</span><span class="atv">"inputId"</span><span class="tag">&gt;&lt;/label&gt;</span><span class="pln">
  </span><span class="tag">&lt;input</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"form__input"</span><span class="pln"> </span><span class="atn">type</span><span class="pun">=</span><span class="atv">"text"</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"inputId"</span><span class="pln"> </span><span class="tag">/&gt;</span><span class="pln">

  </span><span class="tag">&lt;input</span><span class="pln">
    </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"form__submit form__submit--disabled"</span><span class="pln">
    </span><span class="atn">type</span><span class="pun">=</span><span class="atv">"submit"</span><span class="pln">
    </span><span class="atn">value</span><span class="pun">=</span><span class="atv">"Submit"</span><span class="pln"> </span><span class="tag">/&gt;</span><span class="pln">
</span><span class="tag">&lt;/form&gt;</span></pre>

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

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

<h4 id="css-6">
	بعض الأنظمة الشائعة الأخرى لتنسيق شيفرة CSS
</h4>

<p>
	هناك الكثير من الأنظمة الشائعة الأخرى، بما في ذلك معمارية CSS القابلة للتوسع والتقسيم Scalable and Modular Architecture for CSS -أو اختصارًا <a href="http://smacss.com/" rel="external nofollow">SMACSS</a>- التي أنشأها جوناثان سنوك Jonathan Snook، و <a href="https://itcss.io/" rel="external nofollow">ITCSS</a> لمؤلفها هاري روبيرتس Harry Roberts، و <a href="https://acss.io/" rel="external nofollow">Atomic CSS (ACSS)</a> من إنتاج ياهو أساسًا. إذا واجهتك بعض المشاريع التي تستخدم أيًا من الأساليب السابقة، ستجد لحسن الحظ العديد من المقالات والأدلة التي ترشدك إلى طريقة كتابة الشيفرات وفقها، لكن الناحية السلبية فيها هي التعقيد الزائد وخاصة عند كتابة تنسيقات لمشروعات صغيرة.
</p>

<h3 id="css-7">
	الأنظمة الجاهزة لكتابة CSS
</h3>

<p>
	من الطرق الأخرى المستخدمة في تنظيم شيفرة CSS هي استغلال بعض الأدوات المتاحة لمطوري الواجهات الأمامية، والتي تتيح نهجًا قريبًا من النهج البرمجي لكتابة CSS. فهناك العديد من الأدوات التي نشير إليها على أنها أدوات معالجة أولية pre-processors أو نهائية post-processors؛ إذ تعمل المعالجات الأولية على الملفات الخام وتحوّلها إلى ملفات تنسيق؛ بينما تعمل المعالجات النهائية على ملفات التنسيق الجاهزة، ربما لتحسينها كي تُحمّل بسرعة أكبر.
</p>

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

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

<h4 id="-5">
	تعريف متغيرات
</h4>

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

<p>
	عند استخدام متغير يُدعى <code>base-color$</code> على سبيل المثال كما في السطر الأول من الشيفرة التالية، يمكننا عندها استخدامه في أي مكان من ملف الشيفرة نحتاج فيه إلى هذا اللون:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_1373_44" style=""><span class="pun">$</span><span class="kwd">base-color</span><span class="pun">:</span><span class="pln"> </span><span class="lit">#c6538c</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">
  </span><span class="kwd">border</span><span class="pun">:</span><span class="pln"> </span><span class="lit">1px</span><span class="pln"> solid </span><span class="pun">$</span><span class="pln">base-color</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	عندما تُصرّف شيفرة Sass سينتهي بك الأمر إلى شيفرة CSS التالية:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_1373_46" style=""><span class="pun">.</span><span class="pln">alert </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">border</span><span class="pun">:</span><span class="pln"> </span><span class="lit">1px</span><span class="pln"> solid </span><span class="lit">#c6538c</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></pre>

<h4 id="-6">
	تصريف ملفات تنسيق المكونات
</h4>

<p>
	رأينا سابقًا أن أحد طرق تنظيم CSS هي تقسيم الملف إلى ملفات أصغر، وعند استخدام Sass، يمكنك الاستفادة من هذا الأسلوب إلى حد بعيد وسينتج لديك الكثير من الملفات الصغيرة جدًا إلى درجة وجود ملف منفصل لكل مكوّن. ستتمكن عند استخدام الوظيفة "partials" المدمجة مع Sass من تصريف جميع هذه الملفات إلى عدد أقل بكثير من الملفات النهائية التي تربطها بموقع الويب، فقد يكون لديك مثلًا عدة ملفات تنسيق ضمن مجلد واحد، ولتكن <code>foundation/_code.scss</code> و <code>foundation/_lists.scss</code> و <code>foundation/_footer.scss</code> و <code>foundation/_links.scss</code> وغيرها، يمكنك حينها استخدام القاعدة <code>use@</code> لتضمينها ضمن ملفات أخرى:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_1373_48" style=""><span class="pun">//</span><span class="pln"> foundation</span><span class="pun">/</span><span class="pln">_index</span><span class="pun">.</span><span class="pln">scss
</span><span class="pun">@</span><span class="pln">use </span><span class="str">"code"</span><span class="pun">;</span><span class="pln">
</span><span class="pun">@</span><span class="pln">use </span><span class="str">"lists"</span><span class="pun">;</span><span class="pln">
</span><span class="pun">@</span><span class="pln">use </span><span class="str">"footer"</span><span class="pun">;</span><span class="pln">
</span><span class="pun">@</span><span class="pln">use </span><span class="str">"links"</span><span class="pun">;</span></pre>

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

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_1373_51" style=""><span class="pun">//</span><span class="pln"> style</span><span class="pun">.</span><span class="pln">scss
</span><span class="pun">@</span><span class="pln">use </span><span class="str">"foundation"</span><span class="pun">;</span></pre>

<p>
	<strong>ملاحظة</strong>: من السهل تجريب Sass باستخدام موقع <a href="https://codepen.io/" rel="external nofollow">CodePen</a>، إذ ستتمكن من تمكين Sass عند العمل مع شيفرة CSS عن طريق إعدادات "Pen"، وعندها سيشغّل CodePen محلل Sass كي ترى نتيجة عملك وكأنك طبقت قواعد CSS نمطية. قد ترى أحيانًا أن دورات تعليم CSS تستخدم Sass بدلًا من CSS النمطية في أمثلتها المكتوبة عن طريق CodePen، لهذا سيفيدك الإطلاع على ذلك قليلًا.
</p>

<h4 id="-7">
	تحسين الشيفرة باستخدام أدوات المعالجة النهائية
</h4>

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

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

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

<p>
	ترجمة -وبتصرف- للمقال <a href="https://developer.mozilla.org/en-US/docs/Learn/CSS/Building_blocks/Organizing" rel="external nofollow">Organizing your CSS</a>
</p>

<h2>
	اقرأ أيضًا
</h2>

<ul>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D8%AA%D9%86%D8%B3%D9%8A%D9%82%D8%A7%D8%AA-%D8%A7%D9%84%D9%85%D8%AA%D8%B5%D9%81%D8%AD%D8%A7%D8%AA-%D8%A7%D9%84%D9%85%D8%AE%D8%B5%D8%B5%D8%A9-%D9%88%D8%AF%D8%B9%D9%85%D9%87%D8%A7-%D9%88%D8%A3%D8%AF%D8%A7%D8%A1%D9%87%D8%A7-%D9%81%D9%8A-css-r1061/" rel="">تنسيقات المتصفحات المخصصة ودعمها وأداءها في CSS</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/sass/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-sass-r8/" rel="">مدخل إلى Sass</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D9%85%D9%88%D8%A7%D8%B6%D9%8A%D8%B9-%D9%85%D8%AA%D9%82%D8%AF%D9%85%D8%A9-%D9%81%D9%8A-css-r1060/" rel="">مواضيع متقدمة في CSS</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D8%A3%D9%86%D9%88%D8%A7%D8%B9-%D9%85%D8%AD%D8%AF%D8%AF%D8%A7%D8%AA-%D8%A7%D9%84%D8%AA%D9%86%D8%B3%D9%8A%D9%82-%D9%81%D9%8A-css-r2044/" rel="">أنواع محددات التنسيق في CSS</a>
	</li>
</ul>
]]></description><guid isPermaLink="false">2198</guid><pubDate>Mon, 25 Dec 2023 16:01:01 +0000</pubDate></item><item><title>&#x62A;&#x646;&#x642;&#x64A;&#x62D; &#x634;&#x64A;&#x641;&#x631;&#x629; CSS</title><link>https://academy.hsoub.com/programming/css/%D8%AA%D9%86%D9%82%D9%8A%D8%AD-%D8%B4%D9%8A%D9%81%D8%B1%D8%A9-css-r2197/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2023_12/--CSS.png.a6a0aaaf052c1f0af631040cf190b2b0.png" /></p>
<p>
	قد تجد أن شيفرة CSS أحيانًا لا تنفّذ ما هو متوقع منها، فقد تعتقد أن محددّا ما لا بد وأن يطابق العنصر الذي تريده، لكن لا شيء يحدث، أو قد يكون الحجم الذي تريده لصندوق ما أكبر مما هو متوقع. لهذا سنرشدك في هذا المقال كيف تتعامل وتنقح اخطاءً كهذه في CSS، كما سنتحدث عن طريقة استخدام أدوات مطوري ويب DevTools الموجودة في كل المتصفحات الحديثة لتقصي المشاكل التي تواجهك.
</p>

<p>
	ننصحك قبل المتابعة في قراءة هذه المقال أن:
</p>

<ol>
	<li>
		تطلع على أساسيات استخدام الحاسوب وتصفح الويب.
	</li>
	<li>
		تحضّر بيئة عمل بسيطة كما تحدثنا مسبقًا في المقال <a href="https://academy.hsoub.com/programming/general/%D8%AA%D8%AB%D8%A8%D9%8A%D8%AA-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D9%8A%D8%A7%D8%AA-%D8%A7%D9%84%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A9-%D9%84%D9%84%D8%A7%D9%86%D8%B7%D9%84%D8%A7%D9%82-%D9%81%D9%8A-%D8%AA%D8%B7%D9%88%D9%8A%D8%B1-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-r1671/" rel="">تثبيت البرمجيات الأساسية</a>، وتتفهم طريقة إنشاء وإدارة الملفات كما شرحناها في مقال <a href="https://academy.hsoub.com/programming/general/%D8%A7%D9%84%D8%AA%D8%B9%D8%A7%D9%85%D9%84-%D9%85%D8%B9-%D8%A7%D9%84%D9%85%D9%84%D9%81%D8%A7%D8%AA-%D9%81%D9%8A-%D8%B9%D9%85%D9%84%D9%8A%D8%A9-%D8%AA%D8%B7%D9%88%D9%8A%D8%B1-%D9%85%D9%88%D9%82%D8%B9-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-r1686/" rel="">التعامل مع الملفات</a>.
	</li>
	<li>
		تطلع على أساسيات HTML كما شرحناها في سلسلة المقالات <a href="https://academy.hsoub.com/programming/html/%D8%AA%D8%B9%D8%B1%D9%81-%D8%B9%D9%84%D9%89-%D9%84%D8%BA%D8%A9-html-r1752/" rel="">مدخل إلى HTML</a>.
	</li>
	<li>
		تتفهم أساسيات CSS كما شرحناها في سلسلة المقالات <a href="https://academy.hsoub.com/programming/css/%D8%AA%D8%B9%D8%B1%D9%81-%D8%B9%D9%84%D9%89-css-r2000/" rel="">خطواتك الأولى في CSS</a>.
	</li>
</ol>

<h2 id="">
	الوصول إلى أدوات مطوري ويب عبر المتصفحات
</h2>

<p>
	ستجد في مقال سابق بعنوان "<a href="https://academy.hsoub.com/programming/workflow/%D8%A3%D8%AF%D9%88%D8%A7%D8%AA-%D9%85%D8%B7%D9%88%D8%B1%D9%8A-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-%D8%A7%D9%84%D9%85%D8%AF%D9%85%D8%AC%D8%A9-%D9%81%D9%8A-%D8%A7%D9%84%D9%85%D8%AA%D8%B5%D9%81%D8%AD%D8%A7%D8%AA-r1439/" rel="">أدوات مطوري ويب المدمجة في المتصفحات</a>" دليلًا حديثًا يصف كيفية الوصول إلى أدوات مطوري ويب في متصفحات ويب ومنصات متعددة، وطالما أنك ستختار غالبًا متصفحًا محددًا عندما تبدأ تطوير المواقع، فستألف التعامل مع الأدوات المدمجة معه، لكن من المهم أن تعرف كيف تصل إلى هذه الأدوات في متصفحات أخرى، وهذا ما يساعدك على تكوين صورة واضحة عن الطريقة التي تصيّر فيها المتصفحات المختلفة صفحات الويب.
</p>

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

<p>
	سنلقي نظرةً في هذا المقال على بعض الميزات المفيدة التي تقدمها أدوات مطوري ويب المدمجة مع متصفح فايرفوكس والمخصصة للتعامل مع CSS، لهذا السبب سنستخدم <a href="https://mdn.github.io/css-examples/learn/inspecting/inspecting.html" rel="external nofollow">ملفًا معدًا لهذا الغرض</a>، ويمكنك تحميله في نافذة جديدة ضمن المتصفح إذا أردت العمل عليه ومتابعة قراءة المقال في نفس الوقت، لكن لا تنسَ أن تفتح أدوات مطوري ويب كما أوردنا في المقال الذي أشرنا إليه قبل قليل.
</p>

<h2 id="dom">
	أسلوب شجرة DOM مقابل أسلوب عرض المصدر
</h2>

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

<p>
	عندما يصيّر المتصفح ملف HTML ويبني شجرة DOM، قد يسوّي بعض شيفرات HTML، كأن يصحح تلقائيًا بعض الأخطاء أو الشيفرات المكتوبة خطأ؛ فعندما تغلق عنصرًا بطريقة خاطئة كأن تنهي الوسم <code>&lt;h2&gt;</code> بالوسم <code>&lt;h3/&gt;</code>، سيكتشف المتصفح ما تعنيه ويصحح ذلك تلقائيًا ضمن شجرة DOM، كما ستعرض شجرة DOM أية تغيرات ناتجة عن تطبيق شيفرة جافا سكريبت. تمثّل في المقابل الشيفرة المصدرية شيفرة HTML المخزّنة على الخادم، وهذا ما تعرضه <a href="https://firefox-source-docs.mozilla.org/devtools-user/page_inspector/how_to/examine_and_edit_html/index.html#html-tree" rel="external nofollow">شجرة HTML</a> الخاصة بأدوات مطوري ويب، وهكذا ستبقى في صورة ما يجري في الواقع.
</p>

<h2 id="css">
	استعراض قواعد CSS المطبقة على الصفحة
</h2>

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

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="139939" href="https://academy.hsoub.com/uploads/monthly_2023_12/01_element_selected_to_inspect.png.712d8703dbee1346aa10541c6ea2fc0c.png" rel=""><img alt="01 element selected to inspect" class="ipsImage ipsImage_thumbnailed" data-fileid="139939" data-unique="hehicgc1t" src="https://academy.hsoub.com/uploads/monthly_2023_12/01_element_selected_to_inspect.thumb.png.65a5e10bc230900b257a1547e7663fab.png"> </a>
</p>

<p>
	سترى إذا نظرت إلى "عارض القواعد Rules view" إلى يمين شيفرة HTML قواعد CSS المطبقة على العنصر مع قيمها بما في ذلك القواعد المطبقة مباشرةً من خلال المحدد <code>box1</code> وتلك الموروثة من العنصر الأب وهو <code>&lt;body&gt;</code> في حالتنا. لهذا فائدته في التحقق من قواعد مطبقة لم تتوقع وجودها والتي قد تكون موروثة من العنصر الأب وتحتاج إلى إلغائها وفقًا لموضع العنصر في سياق الصفحة، كما تفيد في توسيع الخاصيات المختصرة لفهم آلية تطبيقها كما هي حال الخاصية المختصرة <code>margin</code> في مثالنا.
</p>

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

<p>
	يمكنك استخدام الطريقة السابقة للمقارنة بين حالتين تُطبق قواعد معينة في إحداها ولا تطبق في الثانية، كما تساعدك في التنقيح كأن تتحقق مثلًا من عدم استخدام الخاصية <code>border-radius</code> التي يسبب وجودها أخطاءً في تطبيق التخطيط الذي تعتمده.
</p>

<h2 id="-1">
	تعديل قيم الخاصيات
</h2>

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

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

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="139940" href="https://academy.hsoub.com/uploads/monthly_2023_12/02_editing_prop_values.png.555aee198968383526e827e99c7b4175.png" rel=""><img alt="02 editing prop values" class="ipsImage ipsImage_thumbnailed" data-fileid="139940" data-unique="sp3adpr27" src="https://academy.hsoub.com/uploads/monthly_2023_12/02_editing_prop_values.thumb.png.e0a02574ee986bddd642c2b73ca70f2c.png"> </a>
</p>

<h2 id="-2">
	إضافة خاصية جديدة
</h2>

<p>
	تستطيع أيضًا إضافة خاصيات جديدة من خلال أدوات مطوري ويب، فقد لا ترغب مثلًا أن يرث الصندوق حجم الخط من العنصر الأب <code>&lt;body&gt;</code> بل تريد ضبط حجم الخط بنفسك. تساعدك أدوات مطوري ويب في تجربة هذا الأمر قبل تغيير القواعد في ملف CSS.
</p>

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

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="139941" href="https://academy.hsoub.com/uploads/monthly_2023_12/03_adding_new_prop.png.e4411beec7987a9c99f9d13071c0cc7d.png" rel=""><img alt="03 adding new prop" class="ipsImage ipsImage_thumbnailed" data-fileid="139941" data-unique="wifphtob2" src="https://academy.hsoub.com/uploads/monthly_2023_12/03_adding_new_prop.thumb.png.226db595163c0b1853e5afa862a2b26e.png"> </a>
</p>

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

<h2 id="css-1">
	نظرة أقرب إلى نموذج الصندوق في CSS
</h2>

<p>
	ناقشنا في مقال سابق <a href="https://academy.hsoub.com/programming/css/%D8%AF%D9%84%D9%8A%D9%84-%D9%85%D8%AE%D8%AA%D8%B5%D8%B1-%D8%A5%D9%84%D9%89-%D9%86%D9%85%D9%88%D8%B0%D8%AC-%D8%A7%D9%84%D8%B5%D9%86%D8%AF%D9%88%D9%82-box-model-%D9%81%D9%8A-%D8%AA%D9%86%D8%B3%D9%8A%D9%82%D8%A7%D8%AA-css-r2126/" rel="">نموذج الصندوق</a> المتبع في تنسيق CSS، كما تعرفنا على حقيقة وجود نموذج صندوق بديل يغيّر طريقة حساب حجم العنصر بناءً على الحجم الذي تريد، إضافةً إلى قيم الحشوات padding والحواف borders. لهذا، يمكنك الاستعانة بأدوات مطوري ويب في فهم كيفية حساب أبعاد العناصر، إذ تظهر لك لوحة "عارض التخطيط Layout view" عرضًا لنموذج الصندوق وقد أحاط بالعنصر الذي اخترته إضافة إلى وصف الخاصيات وقيمها وكيفية تموضع العنصر، ويتضمن ذلك أيضًا وصفًا للخاصيات التي لم تستخدمها صراحةً على العنصر بل تلك التي تأخذ قيمًا أساسية.
</p>

<p>
	من الخاصيات التي تجد تفصيلها في هذه اللوحة الخاصية <code>box-sizing</code> التي تحدد نموذج الصندوق المستخدم مع العنصر الذي تختاره، ولكي ترى كيفية عملها تابع المثال التالي:
</p>

<p>
	<strong>قارن بين كلا الصندوقين الذين يمتلكان الصنفين <code>box1</code> و <code>box2</code> ولهما نفس الحيّز width وقيمته (400 بكسل) لكن يبدو الصندوق <code>box1</code> أوسع. لاحظ من خلال لوحة التخطيط كيف يستخدم هذا الصندوق القيمة <code>content-box</code> التي تأخذ الحجم الذي تضعه للصندوق ثم تضيف إليه حيّز الحشوة padding width وحيّز الإطار border width لهذا سيبدو أوسع.</strong>
</p>

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

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="139942" href="https://academy.hsoub.com/uploads/monthly_2023_12/04_box_moddel.png.2fcfc310ca00655e5bab7be411739705.png" rel=""><img alt="04 box moddel" class="ipsImage ipsImage_thumbnailed" data-fileid="139942" data-unique="xvcrdbzr9" src="https://academy.hsoub.com/uploads/monthly_2023_12/04_box_moddel.thumb.png.2877091f81307bc3056988989e9d7d5a.png"> </a>
</p>

<h2 id="css-2">
	حل المشاكل المتعلقة بتخصيص محددات CSS
</h2>

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

<p>
	ستجد في الملف الذي نعمل عليه كلمتان محاطتان بالعنصر <code>&lt;em&gt;</code>، أحدهما تُعرض باللون البرتقالي والأخرى بالزهري، وإليك قاعدة CSS المطبقة:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_9269_7" style=""><span class="pln">em </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">color</span><span class="pun">:</span><span class="pln"> hotpink</span><span class="pun">;</span><span class="pln">
  </span><span class="kwd">font-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>
	لكن هنالك أيضًا وقبل هذه القاعدة المحدد <code>special.</code>:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_9269_9" style=""><span class="pun">.</span><span class="pln">special </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">color</span><span class="pun">:</span><span class="pln"> orange</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	لقد ناقشنا موضوع تخصيص المحددات في المقال الذي يتحدث عن <a href="https://academy.hsoub.com/programming/css/%D8%A7%D9%84%D8%AA%D8%B9%D8%A7%D9%82%D8%A8-%D9%88%D8%A7%D9%84%D8%AA%D8%AE%D8%B5%D9%8A%D8%B5-%D9%88%D8%A7%D9%84%D9%88%D8%B1%D8%A7%D8%AB%D8%A9-%D9%81%D9%8A-css-r2042/" rel="">تعاقب قواعد CSS والوراثة</a> ورأينا أن محددات الصنف class selectors أكثر تخصيصًا من محددات العناصر element selectors وبالتالي ستطبق قواعد هذه المحددات. ستساعدك أدوات مطوري ويب في حل هذا النوع من المشاكل، خاصةً إذا كانت المعلومات مختبئة في مكان ما من ملف تنسيق ضخم.
</p>

<p>
	<strong>استعرض الوسم <code>&lt;em&gt;</code> ذو الصنف <code>special.</code>، وستدلك أدوات مطوري ويب أن اللون البرتقالي هو ما يُطبّق وستجد أن الخاصية المطبقة على الوسم <code>&lt;em&gt;</code> قد شُطبت، وهكذا ستلاحظ أنه محدد الصنف قد تجاوز محدد العنصر.</strong>
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="139943" href="https://academy.hsoub.com/uploads/monthly_2023_12/05_showingoverrid_selectors.png.3cd41d0ca75922bb2b7cfe7b649be0ff.png" rel=""><img alt="05 showing overrid selectors" class="ipsImage ipsImage_thumbnailed" data-fileid="139943" data-unique="yzqvb9z36" src="https://academy.hsoub.com/uploads/monthly_2023_12/05_showingoverrid_selectors.thumb.png.d1fb3273ee0ce2374e041e01afb47085.png"> </a>
</p>

<h2 id="-3">
	تفاصيل أكثر عن أدوات مطوري ويب المدمجة مع متصفح فايرفوكس
</h2>

<p>
	ستجد الكثير من المعلومات عن أدوات مطوري ويب من خلال شبكة مطوري موزيلا MDN، كما يمكنك إلقاء نظرة على <a href="https://firefox-source-docs.mozilla.org/devtools-user/index.html" rel="external nofollow">قسم أدوات مطوري ويب</a> لتتعمق في الأفكار التي طرحناها باختصار في هذا المقال.
</p>

<h2 id="css-3">
	تنقيح مشاكل CSS
</h2>

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

<h3 id="-4">
	تراجع خطوة إلى الخلف وألق نظرة على المشكلة
</h3>

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

<h3 id="htmlcss">
	هل شيفرة HTML و CSS مكتوبة جيدًا؟
</h3>

<p>
	تتوقع المتصفحات أن تكون شيفرات HTML و CSS مكتوبةً صحيحًا بدون أخطاء، ومع هذا تتساهل المتصفحات كثيرًا مع الأخطاء وتحاول جهدها عرض صفحاتك حتى لو احتوت اخطاءً في التوصيف أو التنسيق، إذ تحاول المتصفحات توقع ما تريده، وقد تتخذ قرارات تخالف ما نويت إنجازه. إضافةً إلى ذلك قد يتخذ متصفحان مختلفان قرارين مختلفين حيال نفس المسألة، لذلك عليك أن تنفّذ شيفراتك ضمن محللات validator خاصة لاستكشاف هذا النوع من الأخطاء وإصلاحها أولًا، مثل <a href="https://jigsaw.w3.org/css-validator/" rel="external nofollow">محلّل CSS</a> و<a href="https://validator.w3.org/" rel="external nofollow">محلل HTML</a>.
</p>

<h3 id="-5">
	هل يدعم المتصفح الخاصية التي تستخدمها وقيمها؟
</h3>

<p>
	تتجاهل المتصفحات خاصيات CSS التي لا تفهمها، فإذا لم تكن الخاصية أو القيمة مدعومةً من قبل المتصفح فلن تلاحظ ذلك، إلا أن الخاصية أو القيمة لن تعملا. تُظلل أدوات مطوري ويب الخاصيات والقيم غير المدعومة بطريقة معينة كما تظهر لقطة الشاشة التالية، إذ لا يدعم المتصفح المستخدم القيمة <code>subgrid</code> للخاصية <code>grid-template-columns</code>:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="139944" href="https://academy.hsoub.com/uploads/monthly_2023_12/06_unsupported_property.png.30a0937426584a4ac632cc13e7333f90.png" rel=""><img alt="06 unsupported property" class="ipsImage ipsImage_thumbnailed" data-fileid="139944" data-unique="2j2d0slwp" src="https://academy.hsoub.com/uploads/monthly_2023_12/06_unsupported_property.thumb.png.d4305707905260889e863e6237bfded9.png"> </a>
</p>

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

<h3 id="css-4">
	هل هناك شيء آخر يتجاوز قواعد CSS التي تكتبها؟
</h3>

<p>
	تظهر هنا أهمية المعلومات التي تعلمتها عن <a href="https://academy.hsoub.com/programming/css/%D8%A7%D9%84%D8%AA%D8%B9%D8%A7%D9%82%D8%A8-%D9%88%D8%A7%D9%84%D8%AA%D8%AE%D8%B5%D9%8A%D8%B5-%D9%88%D8%A7%D9%84%D9%88%D8%B1%D8%A7%D8%AB%D8%A9-%D9%81%D9%8A-css-r2042/" rel="">تخصيص المحددات</a>، فإذا كان هناك فعلًا ما يتجاوز القاعدة التي تريد تطبيقها ستضطر حينها إلى الدخول في متاهة البحث عن الموضوع ولن يكون الأمر سهلًا. قد تساعدك هنا أدوات مطوري ويب في تحديد الخاصية التي تُطبّق وبالتالي ستتمكن من اختيار محدد أكثر تخصيصًا لتطبيق القواعد التي تريدها.
</p>

<h3 id="-6">
	حاول بناء اختبار محدود للتحقق من مشكلتك
</h3>

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

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

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

<ol>
	<li>
		إذا كانت شيفرة HTML مولّدة ديناميكيًا (عبر نظام إدارة محتوى مثلًا)، ابنِ نسخةً ساكنةً من الخرج الذي يسبب المشكلة. قد تساعدك في هذا الأمر بعض المواقع، مثل <a href="https://codepen.io/" rel="external nofollow">CodePen</a> التي يُعد موقعًا مفيدًا لاستضافة الاختبارات المحدودة، إضافةً إلى إمكانية الوصول إليها عبر الإنترنت وبالتالي ستسهل مشاركتها مع الزملاء. يمكنك أن تبدأ العملية بعرض الشيفرة المصدرية للصفحة، ثم نسخ شيفرة HTML إلى موقع <a href="https://codepen.io/" rel="external nofollow">CodePen</a>، ثم تحضر تنسيقات CSS أو شيفرة جافا سكريبت وإضافتها إلى الاختبار أيضًا. تحقق عندها إذا استمرت المشكلة في الظهور أم لا.
	</li>
	<li>
		إذا لم يحل حذف شيفرة جافا سكريبت المشكلة، لا حاجة لتضمين ملفات جافا سكريبت في الاختبار المحدود، لكن إذا حل حذفها المشكلة، حاول حذف أكبر قدر ممكن من الشيفرة لإبقاء الشيفرة التي تسبب المشكلة فقط.
	</li>
	<li>
		احذف شيفرة HTML التي لا تتعلق بالمشكلة، وحاول أن تحذف المكوّنات أو حتى العناصر الرئيسية للتخطيط، أي حاول باختصار أن تقلل حجم الشيفرة قدر الإمكان كي تبقى فقط تلك التي سببت المشكلة.
	</li>
	<li>
		احذف تنسيقات CSS التي لا تتعلق بالمشكلة.
	</li>
</ol>

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

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

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

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

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

<p>
	ترجمة -وبتصرف- لمقال <a href="https://developer.mozilla.org/en-US/docs/Learn/CSS/Building_blocks/Debugging_CSS" rel="external nofollow">Debugging CSS</a>
</p>

<h2 id="-8">
	اقرأ أيضًا
</h2>

<ul>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D8%A7%D9%84%D8%AA%D9%86%D8%B3%D9%8A%D9%82%D8%A7%D8%AA-%D8%A7%D9%84%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A9-%D9%84%D9%84%D8%B9%D9%86%D8%A7%D8%B5%D8%B1-%D9%81%D9%8A-css-r1054/" rel="">التنسيقات الأساسية للعناصر في CSS</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D8%AA%D9%86%D8%B3%D9%8A%D9%82%D8%A7%D8%AA-%D8%A7%D9%84%D9%85%D8%AA%D8%B5%D9%81%D8%AD%D8%A7%D8%AA-%D8%A7%D9%84%D9%85%D8%AE%D8%B5%D8%B5%D8%A9-%D9%88%D8%AF%D8%B9%D9%85%D9%87%D8%A7-%D9%88%D8%A3%D8%AF%D8%A7%D8%A1%D9%87%D8%A7-%D9%81%D9%8A-css-r1061/" rel="">تنسيقات المتصفحات المخصصة ودعمها وأداءها في CSS</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D9%81%D9%87%D9%85-%D9%88%D8%A5%D9%86%D8%B4%D8%A7%D8%A1-%D9%82%D9%88%D8%A7%D8%B9%D8%AF-css-r1881/" rel="">كيفية فهم وإنشاء قواعد CSS</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D9%88%D8%AD%D8%AF%D8%A7%D8%AA-%D8%A7%D9%84%D9%82%D9%8A%D8%A7%D8%B3-%D9%88%D8%A7%D9%84%D9%82%D9%8A%D9%85-%D9%81%D9%8A-css-r2161/" rel="">وحدات القياس والقيم في CSS</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D8%A7%D9%84%D8%AA%D8%AD%D9%83%D9%85-%D9%81%D9%8A-%D8%AA%D9%85%D9%88%D8%B6%D8%B9-%D8%A7%D9%84%D8%B9%D9%86%D8%A7%D8%B5%D8%B1-%D9%81%D9%8A-css-r1052/" rel="">التحكم في تموضع العناصر في CSS</a>
	</li>
</ul>
]]></description><guid isPermaLink="false">2197</guid><pubDate>Tue, 19 Dec 2023 16:03:02 +0000</pubDate></item><item><title>&#x62A;&#x639;&#x631;&#x641; &#x639;&#x644;&#x649; &#x623;&#x633;&#x627;&#x633;&#x64A;&#x627;&#x62A; &#x644;&#x63A;&#x629; CSS</title><link>https://academy.hsoub.com/programming/css/%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A7%D8%AA-%D9%84%D8%BA%D8%A9-css/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2023_12/css.png.d1a4d0f01f5acc06cda31632f7c9bb89.png" /></p>
<p>
	نوفر لك في مقال اليوم دليًلًا شاملًا يعرفك على لغة أوراق الأنماط المتتالية أو لغة CSS المستخدمة في تنسيق مواقع الويب، حيث نبدأ من تعريف لغة CSS ونعرفك على أبرز مميزات واستخدامات لغة CSS كما نوضح لك الفرق بينها وبين لغة HTML، وطرق كتابة أكواد CSS وربطها مع صفحة الويب باستخدام الأمثلة العملية، ونختم المقال بأهم النصائح والخطوات التي تساعدك على تعلم لغة CSS بالطريقة المثلى.
</p>

<h2 id="css">
	ما هي لغة CSS؟
</h2>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="139933" href="https://academy.hsoub.com/uploads/monthly_2023_12/css.png.03601342bb48b32915071da8a63d0fdd.png" rel=""><img alt="ما هي لغة css" class="ipsImage ipsImage_thumbnailed" data-fileid="139933" data-ratio="62.67" data-unique="e844fm5tq" style="width: 600px; height: auto;" width="600" src="https://academy.hsoub.com/uploads/monthly_2023_12/css.thumb.png.c881bf1b03d0d24ec60c4432e54d7b50.png"> </a>
</p>

<p>
	لغة CSS هي اختصار لعبارة Cascading Style Sheets وتعني أوراق التنسيقات المتدرجة أو أوراق الأنماط المتتالية، وهي لغة مخصصة لتنسيق عناصر صفحات الويب وتحديد مظهرها وطريقة عرضها، وقد طورها كل من هاكون فيوم لي Hakon Wium Lie وبيرت بوس<br>
	Bert Bos عام 1996.
</p>

<p>
	فمن خلال استخدام لغة CSS يمكنك إضافة التنسيقات الأساسية لعناصر صفحات الويب مثل تحديد أحجام وأنواع الخطوط المستخدمة لكتابة الفقرات العناوين وتحديد اتجاه الكتابة <a href="https://academy.hsoub.com/programming/css/%D8%AA%D9%86%D8%B3%D9%8A%D9%82-%D8%A7%D9%84%D8%AE%D9%84%D9%81%D9%8A%D8%A7%D8%AA-backgrounds-%D9%81%D9%8A-css-r1055/" rel="">وتنسيق خلفية صفحة الويب</a> وتنسيق الجداول وتحديد هوامش العناصر وغيرها من التنسيقات العديدة المختلفة، كما يمكنك عن طريقها التحكم في <a href="https://academy.hsoub.com/programming/css/%D8%A7%D9%84%D8%AA%D8%AD%D9%83%D9%85-%D9%81%D9%8A-%D8%AA%D8%AE%D8%B7%D9%8A%D8%B7-%D8%A7%D9%84%D8%B5%D9%81%D8%AD%D8%A9-%D9%88%D8%B6%D8%A8%D8%B7-%D9%85%D8%AD%D8%A7%D8%B0%D8%A7%D8%A9-%D8%A7%D9%84%D8%B9%D9%86%D8%A7%D8%B5%D8%B1-%D9%81%D9%8A-css-r1050/" rel="">تخطيط العناصر ضمن الصفحة</a> وتنظيمها وتحديد موضع كل عنصر فيها.
</p>

<h2 id="htmlcss">
	الفرق بين HTML و CSS
</h2>

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

<p>
	بينما لغة CSS هي <strong>لغة تنسيق</strong> styling language تستخدم للتحكم في تنسيق وتخطيط عناصر صفحة الويب فمن خلالها يمكنك أن تكتب قواعد تحدد من خلالها طريقة ظهور عناصر HTML على سبيل المثال تحدد لون ونوع الخطوط المستخدمة في الفقرات وأحجام العناوين وتحدد مكان أو موضع ظهور العناصر المختلفة على الصفحة.
</p>

<p>
	يتكون الكود المكتوب بلغة HTML من الوسوم المحيطة بالمحتوى لتوصيفه، على سبيل المثال إذا أردت أن تضيف فقرة لصفحة الويب عليك أن تضيف محتوى الفقرة بين الوسمين <code>&lt;p&gt;</code> و <code>&lt;p/&gt;</code> ليفهم المتصفح أن هذا المحتوى يمثل فقرة نصية، وإذا أدرت أن تضيف جدولًا عليك أن تضعه بين الوسمين <code>&lt;table&gt;</code> و <code>&lt;table/&gt;</code> ليعرضه المتصفح على هيئة جدول، وأخيرًا عليك أن تحفظ أكواد HTML في ملف بالامتداد .html أو .htm.
</p>

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

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

<p>
	وبالرغم من أن كلًا من لغة CSS ولغة HTML تختلفان في العديد من الجوانب مثل القواعد النحوية وطريقة الصياغة والمميزات إلا أنهما تعملان معًا وتتكاملان لتمكناك من تصميم مواقع الويب وبعبارة أدق <a href="https://academy.hsoub.com/programming/general/%D8%AA%D8%B7%D9%88%D9%8A%D8%B1-%D8%A7%D9%84%D9%88%D8%A7%D8%AC%D9%87%D8%A9-%D8%A7%D9%84%D8%A3%D9%85%D8%A7%D9%85%D9%8A%D8%A9-frontend-web-development/" rel="">تصميم الواجهات الأمامية لمواقع الويب</a> بالطريقة التي تناسبك.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="139928" href="https://academy.hsoub.com/uploads/monthly_2023_12/CSSHTML.png.a3fb8971ba4723cf228d7ab86f90dfe8.png" rel=""><img alt="الفرق بين لغة css ولغة html" class="ipsImage ipsImage_thumbnailed" data-fileid="139928" data-ratio="62.50" data-unique="lrxi25w5y" style="width: 600px; height: auto;" width="600" src="https://academy.hsoub.com/uploads/monthly_2023_12/CSSHTML.thumb.png.d524af2b831f8b2e5141696600f26e89.png"> </a>
</p>

<h2 id="css-1">
	فوائد لغة CSS
</h2>

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

<ul>
	<li>
		تشكل لغة CSS إلى جانب لغتي <a href="https://academy.hsoub.com/programming/html/%D8%AA%D8%B9%D9%84%D9%85-%D9%84%D8%BA%D8%A9-html-r1702/" rel="">HTML</a> و <a href="https://academy.hsoub.com/programming/javascript/%D8%AA%D8%B9%D9%84%D9%85-%D9%84%D8%BA%D8%A9-%D8%AC%D8%A7%D9%81%D8%A7-%D8%B3%D9%83%D8%B1%D9%8A%D8%A8%D8%AA-%D9%85%D9%86-%D8%A7%D9%84%D8%B5%D9%81%D8%B1-%D8%AD%D8%AA%D9%89-%D8%A7%D9%84%D8%A7%D8%AD%D8%AA%D8%B1%D8%A7%D9%81-r2046/" rel="">جافا سكريبت JavaScript</a> اللغات الثلاثة رئيسية لتطوير الويب.
	</li>
	<li>
		تحسن لغة CSS <a href="https://academy.hsoub.com/files/11-%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D8%AA%D8%AC%D8%B1%D8%A8%D8%A9-%D8%A7%D9%84%D9%85%D8%B3%D8%AA%D8%AE%D8%AF%D9%85-user-experience-ux/" rel="">تجربة المستخدم</a> وتجعل عناصر صفحات الويب أكثر جمالية.
	</li>
	<li>
		تساعدك على فصل محتوى صفحة الويب عن طريقة تنسيقها مما يبسط الشيفرة البرمجية لصفحة الويب ويجعلها أكثر مقروئية.
	</li>
	<li>
		توفر الوقت فهي تمكنك من كتابة أكواد CSS مرة واحدة وإعادة استخدامها عبر عدة صفحات في الموقع.
	</li>
	<li>
		تسهل تعديل وصيانة التنسيقات ففي حال احتجت لتغيير تنسيق أجزاء من صفحات معينة في موقعك، كل ما عليك هو تعديل أكواد CSS لهذه العناصر وستطبق التعديلات على جميع الصفحات التي تستخدمها.
	</li>
	<li>
		تمكنك من كتابة <a href="https://academy.hsoub.com/programming/css/%D8%A7%D8%B3%D8%AA%D8%B9%D9%84%D8%A7%D9%85%D8%A7%D8%AA-%D8%A7%D9%84%D9%88%D8%B3%D8%A7%D8%A6%D8%B7-media-queries-%D9%81%D9%8A-css-r1059/" rel="">استعلامات وسائط Media Queries</a> لجعل تصميم موقع الويب متجاوب مع مختلفة أحجام الشاشات سواء شاشات الجوال <a href="https://academy.hsoub.com/design/user-experience/%D8%A7%D9%84%D8%AA%D8%B5%D9%85%D9%8A%D9%85-%D8%A7%D9%84%D9%85%D8%AA%D8%AC%D8%A7%D9%88%D8%A8-responsive-design-r751/" rel="">Responsive Design</a> أو الأجهزة اللوحية أو أجهزة الحاسوب المكتبية.
	</li>
	<li>
		تعرض صفحات الموقع بشكل متسق على جميع المتصفحات الحديثة، ومع ذلك فقد تفسر بعض قواعد CSS بشكل مختلف بين المتصفحات لذا من الجيد أن تتأكد من <a href="https://academy.hsoub.com/programming/html/%D9%85%D8%B9%D8%A7%D9%84%D8%AC%D8%A9-%D8%A7%D9%84%D9%85%D8%B4%D8%A7%D9%83%D9%84-%D8%A7%D9%84%D8%B4%D8%A7%D8%A6%D8%B9%D8%A9-%D9%84%D9%84%D8%AA%D9%88%D8%A7%D9%81%D9%82-%D9%85%D8%B9-%D8%A7%D9%84%D9%85%D8%AA%D8%B5%D9%81%D8%AD%D8%A7%D8%AA-%D9%81%D9%8A-html-%D9%88-css-r1955/" rel="">إصلاح مشاكل التوافق مع المتصفحات</a> إن وجدت.
	</li>
</ul>

<h2 id="css-2">
	برمجة قواعد CSS
</h2>

<p>
	تكتب أكواد لغة CSS على هيئة قواعد rules بحيث تتضمن كل قاعدة مجموعة من التنسيقات التي تطبق على أحد عناصر صفحة الويب، ومن الضروري فهم <a href="https://academy.hsoub.com/programming/css/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D9%81%D9%87%D9%85-%D9%88%D8%A5%D9%86%D8%B4%D8%A7%D8%A1-%D9%82%D9%88%D8%A7%D8%B9%D8%AF-css-r1881/" rel="">كيفية إنشاء قواعد CSS</a> حيث تتكون كل قاعدة من قسمين:
</p>

<ul>
	<li>
		قسم المحدد أو المنتقي selector الذي يحدد بدقة ما هو عنصر HTML أو مجموعة العناصر التي ستطبق عليها التنسيقات.
	</li>
	<li>
		قسم التصريح declaration الذي يعرف كافة التنسيقات التي ستطبق على المحدد أو العنصر المستهدف ويتضمن اسم الخاصية property والقيمة value التي ستعطيها لهذه الخاصية.
	</li>
</ul>

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

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="139936" href="https://academy.hsoub.com/uploads/monthly_2023_12/-css.png.a9ccfc651d9b8016c71903770514899c.png" rel=""><img alt="قواعد css" class="ipsImage ipsImage_thumbnailed" data-fileid="139936" data-ratio="78.60" data-unique="jjjuszdzw" style="width: 500px; height: auto;" width="600" src="https://academy.hsoub.com/uploads/monthly_2023_12/-css.thumb.png.eb178b91ffdab0bb5ca43600e22bc8c8.png"> </a>
</p>

<h2 id="css-3">
	محددات لغة CSS
</h2>

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

<ul>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D9%85%D8%AD%D8%AF%D8%AF%D8%A7%D8%AA-%D8%A7%D9%84%D9%86%D9%88%D8%B9-%D9%88%D8%A7%D9%84%D8%A3%D8%B5%D9%86%D8%A7%D9%81-%D9%88%D8%A7%D9%84%D9%85%D8%B9%D8%B1%D9%91%D9%81%D8%A7%D8%AA-%D9%81%D9%8A-css-r2084/" rel="">محددات النوع Element والصنف Class و المعرف ID</a>.
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D9%85%D8%AD%D8%AF%D8%AF%D8%A7%D8%AA-%D8%A7%D9%84%D8%AE%D8%A7%D8%B5%D9%8A%D8%A9-attribute-%D9%81%D9%8A-css-r2085/" rel="">محدد الخاصية Attribute Selector</a>.
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D9%85%D8%AD%D8%AF%D8%AF%D8%A7%D8%AA-%D8%A7%D9%84%D8%A3%D8%B5%D9%86%D8%A7%D9%81-%D8%A7%D9%84%D8%B2%D8%A7%D8%A6%D9%81%D8%A9-pseudo-classes-%D9%88%D8%A7%D9%84%D8%B9%D9%86%D8%A7%D8%B5%D8%B1-%D8%A7%D9%84%D8%B2%D8%A7%D8%A6%D9%81%D8%A9-pseudo-elements-%D9%81%D9%8A-css-r2124/" rel="">محدد الصنف الزائف Pseudo Class Selector ومحدد العنصر الزائف Pseudo Element Selector</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D9%85%D8%AD%D8%AF%D8%AF%D8%A7%D8%AA-%D8%A7%D9%84%D8%AA%D8%AC%D9%85%D9%8A%D8%B9-combinators-%D9%81%D9%8A-css-r2125/" rel="">محددات التجميع Combinators</a>.
	</li>
	<li>
		المحدد العام *.
	</li>
</ul>

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

<h3 id="elementclassid">
	محددات النوع Element والصنف Class و المعرف ID
</h3>

<p>
	يستهدف محدد النوع جميع العناصر من نوع معين على سبيل المثال المحدد <code>h1</code> يستهدف جميع العناوين الرئيسية، ويستهدف محدد الصنف جميع العناصر التي تملك صنف معين مثل <code>‎.‎button</code> الذي يساعدك على تنسيق جميع العناصر التي تملك <code>class</code> يساوي <code>button،</code> ويستهدف محدد المعرف العنصر الذي يملك معرف فريد في الموقع على سبيل المثال يمكنك المحدد <code>‎#header</code> من استهداف العنصر الذي يملك <code>id</code> يساوي <code>header</code>.
</p>

<h3 id="attributeselector">
	محدد الخاصية Attribute Selector في لغة CSS
</h3>

<p>
	يستهدف محدد الخاصية جميع عناصر صفحة الويب التي تحمل قيمة خاصية معينة، على سبيل المثال لاستهداف جميع العناصر التي لديها خاصية <code>title</code> قيمتها <code>hello</code> يمكنك أن تكتب المحدد بالشكل التالي <code>[title="hello"]</code> ولاستهداف كافة الصور الموجودة في صفحتك والتي تمتلك خاصية alt تساوي hero يمكنك أن نكتب المحدد بالشكل التالي <code>img[alt="hero"]‎</code>
</p>

<h3 id="pseudoclassselectorpseudoelementselector">
	محدد الصنف الزائف Pseudo Class Selector ومحدد العنصر الزائف Pseudo Element Selector
</h3>

<p>
	يستهدف محدد الصنف الزائف كافة عناصر الصفحة التي لها حالات معينة، على سبيل المثال يستهدف المحدد <code>a:hover</code> الروابط في حال مرور مؤشر الفأرة فوقها، أما محدد العنصر الزائف فهو يمكنك من استهداف جزء معين من العنصر بشكل زائف على سبيل المثال يمكنك تنسيق الحرف الأول من كل فقرة من خلال المحدد <code>p::first-letter</code> أو السطر الأول من فقرة من خلال المحدد <code>p::first-line</code>.
</p>

<h3 id="combinators">
	محددات التجميع Combinators في لغة CSS
</h3>

<p>
	يمكنك من خلال محددات التجميع استهداف العناصر بالنسبة لبعضها البعض، حيث يمكن من خلالها استهداف العناصر الإخوة المتجاورة Adjacent Sibling Selector في الصفحة على سبيل المثال لاستهداف أول عنصر <code>&lt;p&gt;</code> يأتي بعد العنصر <code>&lt;div&gt;</code> عليك أن تكتب المحدد بالشكل التالي <code>div + p</code> ولاستهداف كافة العناصر <code>&lt;p&gt;</code> الموجودة داخل عنصر <code>&lt;div&gt;</code> عليك كتابته بالشكل التالي <code>div p</code>
</p>

<h3 id="">
	المحدد العام <code>*</code>
</h3>

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

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="139937" href="https://academy.hsoub.com/uploads/monthly_2023_12/-css.png.83a14556112c74b889b2ef7d5795fe8e.png" rel=""><img alt="محددات css" class="ipsImage ipsImage_thumbnailed" data-fileid="139937" data-ratio="66.50" data-unique="tn63t9ozp" style="width: 600px; height: auto;" width="600" src="https://academy.hsoub.com/uploads/monthly_2023_12/-css.thumb.png.960cc0eac6315ff74d721248470233e4.png"> </a>
</p>

<p>
	كانت هذه بعض الأمثلة على أنواع المحددات في CSS التي تساعدك في كتابة أكواد CSS مناسبة لتنسيق صفحة الويب وتخصيصها كما تريد بدقة ومرونة، وللمزيد يمكنك مطالعة مقال <a href="https://academy.hsoub.com/programming/css/%D8%A3%D9%86%D9%88%D8%A7%D8%B9-%D9%85%D8%AD%D8%AF%D8%AF%D8%A7%D8%AA-%D8%A7%D9%84%D8%AA%D9%86%D8%B3%D9%8A%D9%82-%D9%81%D9%8A-css-r2044/" rel="">أنواع محددات التنسيق في CSS</a> ومقال <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="">المحددات (Selectors) في CSS</a> كما ستجد في <a href="https://wiki.hsoub.com/%D8%AA%D8%B5%D9%86%D9%8A%D9%81:CSS_Selectors" rel="external" target="_blank">ويكي حسوب</a> شرحًا مفصلًا لكافة محددات CSS مع أمثلة عملية توضيحية.
</p>

<h3 id="importantcss">
	أهمية ‎!important في أكواد CSS
</h3>

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

<p>
	على سبيل المثال إذا كان لدينا شيفرة CSS التالية:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_7464_8" style=""><span class="pln"> p </span><span class="pun">{</span><span class="pln">
    </span><span class="kwd">color</span><span class="pun">:</span><span class="pln"> blue </span><span class="kwd">!important</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">
    </span><span class="kwd">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>
	في هذه الحالة سيكون لون خط الفقرة <code>&lt;p&gt;</code> هو اللون الأزرق وليس الأحمر بسبب استخدام <code>‎!important</code> عند تعيين خاصية اللون بالأزرق.
</p>

<h2 id="css-4">
	كيف تكتب أكواد CSS
</h2>

<p>
	أمامك عدة خيارات أو طرق لكتابة أكواد CSS وتطبيق تنسيقاتها على عناصر موقع الويب الخاص بك وهي:
</p>

<ol>
	<li>
		تنسيقات مضمنة Inline CSS
	</li>
	<li>
		تنسيقات داخلية Internal CSS
	</li>
	<li>
		تنسيقات خارجية External CSS
	</li>
</ol>

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

<h3 id="1cssinlinecss">
	1.تنسيقات CSS المضمنة Inline CSS
</h3>

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

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

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_7464_10" style=""><span class="tag">&lt;h1&gt;</span><span class="pln">Inline CSS</span><span class="tag">&lt;/h1&gt;</span><span class="pln">
</span><span class="tag">&lt;p</span><span class="pln"> </span><span class="atn">style</span><span class="pun">=</span><span class="atv">"</span><span class="kwd">color</span><span class="pun">:</span><span class="pln"> blue</span><span class="pun">;</span><span class="pln"> </span><span class="kwd">margin-left</span><span class="pun">:</span><span class="pln"> </span><span class="lit">20px</span><span class="pun">;</span><span class="atv">"</span><span class="tag">&gt;</span><span class="pln"> This is paragraph in CSS </span><span class="tag">&lt;/p&gt;</span></pre>

<p>
	ستعرض الفقرة <code>&lt;p&gt;</code> في صفحة الويب بالشكل التالي:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="PNG" data-fileid="139931" href="https://academy.hsoub.com/uploads/monthly_2023_12/-.PNG.ca588495ff10bda040534264faac735b.PNG" rel=""><img alt="تنسيقات مضمنة" class="ipsImage ipsImage_thumbnailed" data-fileid="139931" data-ratio="35.25" data-unique="pmwu4w94c" style="width: 400px; height: auto;" width="400" src="https://academy.hsoub.com/uploads/monthly_2023_12/-.PNG.ca588495ff10bda040534264faac735b.PNG"> </a>
</p>

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

<p>
	ملاحظة: لا يمكنك تنسيق العناصر الزائفة والأصناف الزائفة مثل hover و visited و first-line باستخدام الأنماط المضمنة.
</p>

<h3 id="2cssinternalcss">
	2.تنسيقات CSS الداخلية Internal CSS
</h3>

<p>
	في هذه الطريقة تدمج تنسيقات CSS مع ملف HTML لكن تجمعها في مكان واحد وتكتبها في ترويسة صفحة الويب بعد الوسم <code>&lt;style&gt;</code> كما في المثال التالي:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_7464_12" style=""><span class="tag">&lt;head&gt;</span><span class="pln">
    </span><span class="tag">&lt;style&gt;</span><span class="pln">
        p </span><span class="pun">{</span><span class="pln"> </span><span class="kwd">color</span><span class="pun">:</span><span class="pln"> red</span><span class="pun">;</span><span class="pln"> </span><span class="kwd">margin-left</span><span class="pun">:</span><span class="pln"> </span><span class="lit">20px</span><span class="pun">;}</span><span class="pln">
        body </span><span class="pun">{</span><span class="pln">  </span><span class="kwd">background-color</span><span class="pun">:</span><span class="pln"> lightgray</span><span class="pun">;</span><span class="pln"> </span><span class="pun">}</span><span class="pln">
    </span><span class="tag">&lt;/style&gt;</span><span class="pln">
</span><span class="tag">&lt;/head&gt;</span><span class="pln">
</span><span class="tag">&lt;h1&gt;</span><span class="pln">Internal CSS</span><span class="tag">&lt;/h1&gt;</span><span class="pln">
</span><span class="tag">&lt;p&gt;</span><span class="pln"> This is paragraph in CSS </span><span class="tag">&lt;/p&gt;</span></pre>

<p>
	سيظهر الكود السابق النتيجة التالية
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="PNG" data-fileid="139938" href="https://academy.hsoub.com/uploads/monthly_2023_12/-.PNG.c784e07e4f171a9f3b6d8a1adbbc0b22.PNG" rel=""><img alt="تنسيقات-داخلية.PNG" class="ipsImage ipsImage_thumbnailed" data-fileid="139938" data-ratio="35.28" style="width: 450px; height: auto;" width="635" src="https://academy.hsoub.com/uploads/monthly_2023_12/-.PNG.c784e07e4f171a9f3b6d8a1adbbc0b22.PNG"></a><a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2023_12/-.PNG.3417b2ea1a7119975b86044502b37c49.PNG" rel=""> </a>
</p>

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

<h3 id="3cssexternalcss">
	3.تنسيقات CSS الخارجية External CSS
</h3>

<p>
	في هذه الطريقة تكتب كافة أكواد CSS المطلوبة لتنسيق موقعك في ملف منفصل بالامتداد .css ثم تربط كل صفحة من صفحات الموقع مع هذا الملف باستخدام الوسم <code>&lt;link&gt;</code> داخل ترويسة الصفحة.
</p>

<p>
	على سبيل المثال في حال كان لدينا ملف index.html وملف تنسيقات باسم mystyle.css فإن الربط يتم بالشكل التالي:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_7464_14" style=""><span class="tag">&lt;head&gt;</span><span class="pln">
  </span><span class="tag">&lt;link</span><span class="pln"> </span><span class="atn">href</span><span class="pun">=</span><span class="atv">"mystyle.css"</span><span class="pln"> </span><span class="atn">rel</span><span class="pun">=</span><span class="atv">"stylesheet"</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;p&gt;</span><span class="pln">هذه فقرة</span><span class="tag">&lt;/p&gt;</span><span class="pln">
</span><span class="tag">&lt;/body&gt;</span></pre>

<p>
	لنكتب بعض أكواد CSS في ملف التنسيقات كما يلي:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_7464_16" style=""><span class="pln">h1 </span><span class="pun">{</span><span class="pln"> </span><span class="kwd">color</span><span class="pun">:</span><span class="pln">red</span><span class="pun">;</span><span class="pln"> </span><span class="pun">}</span><span class="pln">
p </span><span class="pun">{</span><span class="pln"> </span><span class="kwd">color</span><span class="pun">:</span><span class="pln"> blue</span><span class="pun">;</span><span class="pln"> </span><span class="kwd">margin-left</span><span class="pun">:</span><span class="pln"> </span><span class="lit">20px</span><span class="pun">;</span><span class="pln"> </span><span class="pun">}</span><span class="pln">
body </span><span class="pun">{</span><span class="pln"> </span><span class="kwd">background-color</span><span class="pun">:</span><span class="pln"> lightgray</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-fileext="PNG" data-fileid="139929" href="https://academy.hsoub.com/uploads/monthly_2023_12/-.PNG.03d3ec574ca2325a654759b88e5e5833.PNG" rel=""><img alt="تنسيقات خارجية" class="ipsImage ipsImage_thumbnailed" data-fileid="139929" data-ratio="33.11" data-unique="a6wlnqmkj" style="width: 450px; height: auto;" width="450" src="https://academy.hsoub.com/uploads/monthly_2023_12/-.PNG.03d3ec574ca2325a654759b88e5e5833.PNG"> </a>
</p>

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

<h2 id="css-5">
	أولوية تنفيذ أكواد CSS
</h2>

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

<ul>
	<li>
		انتبه لترتيب كتابة القواعد، ففي حال تطبيق أكثر من قاعدة CSS على نفس العنصر فإن القاعدة التي تظهر تاليًا في كود CSS هي التي ستطبق على هذا العنصر، على سبيل المثال إذا طبقت تنسيق تغيير لون فقرة للأزرق ثم طبقت فيما بعد تنسيق تغيير اللون للأحمر ستكون النتيجة هي ظهور الفقرة باللون الأحمر.
	</li>
	<li>
		إذا استخدمت القيمة <code>‎!important</code> بعد تنسيق خاصية ما، فسيحصل هذا التنسيق على أولوية أعلى وتطبق هذه الخاصية بغض النظر عن أي قواعد أخرى تأتي بعدها.
	</li>
	<li>
		تملك التنسيقات المضمنة المطبقة مباشرة على العنصر ضمن تعريفه في صفحة HTML أولوية أعلى من التنسيقات المطبقة في تنسيقات CSS الداخلية والخارجية.
	</li>
	<li>
		تملك التنسيقات الداخلية المكتوبة داخل الوسم <code>&lt;style&gt;</code> في نفس ملف HTML أولوية أعلى من التنسيقات الخارجية المرتبطة مع الملف باستخدام <code>&lt;link&gt;</code>.
	</li>
	<li>
		إذا لم تطبق أي تنسيقات على عنصر ما في صفحة الويب فإن هذا العنصر سيرث التنسيقات من العناصر الأسلاف له وفق تسلسل عناصر HTML الهرمي.
	</li>
</ul>

<p>
	كانت هذه أبرز العوامل التي تساعدك على تحديد أولوية الأنماط في CSS والتحكم في تنسيق الصفحة بشكل دقيق ومعرفة تأثير القواعد المختلفة التي تطبقها على العناصر، وهناك العديد من الاعتبارات الأخرى التي عليك الانتباه لها عند تطبيق قواعد تنسيق على عنصر ما، ويمكنك معرفة المزيد حول أولوية تنفيذ أكواد CSS في مقال <a href="https://academy.hsoub.com/programming/css/%D8%A7%D9%84%D8%AA%D8%B9%D8%A7%D9%82%D8%A8-%D9%88%D8%A7%D9%84%D8%AA%D8%AE%D8%B5%D9%8A%D8%B5-%D9%88%D8%A7%D9%84%D9%88%D8%B1%D8%A7%D8%AB%D8%A9-%D9%81%D9%8A-css-r2042/" rel="">التعاقب والتخصيص والوراثة في CSS</a>.
</p>

<h2 id="css-6">
	محررات أكواد لغة CSS
</h2>

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

<ul>
	<li>
		<p>
			<strong>فيجوال ستوديو كود Visual Studio Code</strong>: أو ما يعرف اختصارًا VS Code هذا المحرر من أكثر محررات الأكواد شهرة بين أوساط المبرمجين فهو متوافق كافة أنظمة التشغيل ويوفر لك كافة المميزات التي تحتاجها مثل الإكمال التلقائي الذكي للشيفرة والتنسيق التلقائي للكود، وهو قابل للتخصيص والتوسيع بفضل توفر العديد من <a href="https://academy.hsoub.com/apps/productivity/%D8%A3%D9%81%D8%B6%D9%84-%D8%A7%D9%84%D8%A5%D8%B6%D8%A7%D9%81%D8%A7%D8%AA-%D8%A7%D9%84%D9%85%D8%AC%D8%A7%D9%86%D9%8A%D8%A9-%D9%84%D9%84%D9%85%D8%AD%D8%B1%D8%B1-vs-code-r349/" rel="">الإضافات المجانية</a>.
		</p>
	</li>
	<li>
		<p>
			<strong>براكتس Brackets</strong>: محرر خفيف الحجم مناسب للغة CSS فهو متاح لكافة أنظمة التشغيل ويسهل قراءة وتحرير الشيفرات البرمجية ويوفر ميزة المعاينة الحية لصفحات الموقع كي تعرض التغييرات والتنسيقات التي تنشؤها على موقعك بسرعة وسهولة.
		</p>
	</li>
	<li>
		<p>
			<strong>سابلايم تيكست Sublime Text</strong> محرر كود قوي وسهل الاستخدام مشهور بين مطوري الويب، ويمكنك استخدامه لكتابة وتعديل شيفرات HTML و CSS والبحث فيها ويمكنك من التنقل بسهولة بين ملفات موقعك كما يوفر العديد من الإضافات والملحقات التي يمكن تثبيتها لتوسيع وظائفه وإمكانياته.
		</p>
	</li>
	<li>
		<p>
			<strong>نوتباد بلس بلس Notepad++‎</strong>: من محررات الأكواد الشهيرة والمفضلة لدى معظم المبرمجين فهو محرر بسيط وخفيف الوزن وقابل للتوسيع ويدعم عدة لغات برمجة ويوفر ميزات الإكمال التلقائي للشيفرة والبحث والاستبدال بسهولة لكنه متوفر فقط لنظام التشغيل ويندوز.
		</p>
	</li>
</ul>

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

<h2 id="css-7">
	خطوات تعلم CSS
</h2>

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

<p>
	وفيما يلي نوضح لك أهم النصائح والخطوات التي تساعدك على تعلم CSS :
</p>

<ul>
	<li>
		افهم <a href="https://academy.hsoub.com/programming/css/%D9%87%D9%8A%D9%83%D9%84%D9%8A%D8%A9-%D9%84%D8%BA%D8%A9-css-r2002/" rel="">هيكلية لغة CSS</a> وتعلم <a href="https://academy.hsoub.com/programming/css/%D8%AA%D8%B9%D8%B1%D9%91%D9%81-%D8%B9%D9%84%D9%89-%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A7%D8%AA-css-r70/" rel="">أساسيات CSS</a> وطريقة كتابة المحددات بأنواعها المختلفة لتحديد عناصر صفحات الويب التي تريدها بدقة وأولوية تطبيق التنسيقات على هذه العناصر.
	</li>
	<li>
		تعلم مفهوم <a href="https://academy.hsoub.com/programming/css/%D8%A7%D9%84%D9%86%D9%85%D9%88%D8%B0%D8%AC-%D8%A7%D9%84%D8%B5%D9%86%D8%AF%D9%88%D9%82%D9%8A-box-model-%D9%81%D9%8A-css-r1051/" rel="">النموذج الصندوقي Box Model</a> في CSS وتعرف على أهم خصائصه مثل العرض والارتفاع والهوامش والحدود.
	</li>
	<li>
		تعلم كيفية استيراد وتضمين الخطوط المختلفة واستخدمها في صفحات الويب وطريقة تحديد خصائص مختلفة للخط مثل نوع الخط وحجمه ووزنه وزخرفته.
	</li>
	<li>
		تعرف على طريقة <a href="https://academy.hsoub.com/programming/css/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%AA%D9%86%D8%B3%D9%8A%D9%82-%D8%A7%D9%84%D8%B5%D9%88%D8%B1-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-css-r1882/" rel="">تنسيق وعرض الصور</a> والتعبير عن الألوان في لغة CSS وكيفية إنشاء التدرجات اللونية المختلفة.
	</li>
	<li>
		تعلم طريقة <a href="https://academy.hsoub.com/programming/css/%D8%AA%D8%AE%D8%B7%D9%8A%D8%B7-%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-%D8%AA%D9%82%D9%86%D9%8A%D8%A7%D8%AA-css3-r178/" rel="">تخطيط عناصر صفحات الويب</a> بشكل احترافي وكيف تستخدم خيارات التخطيط المختلفة مثل التخطيط المرن <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="">Flexbox</a> والتخطيط الشبكي <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="">Grid Layout</a>.
	</li>
	<li>
		تعلم <a href="https://academy.hsoub.com/programming/css/%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A7%D8%AA-%D8%AA%D8%B5%D9%85%D9%8A%D9%85-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-%D8%A7%D9%84%D9%85%D8%AA%D8%AC%D8%A7%D9%88%D8%A8-r1499/" rel="">أساسيات التصميم المتجاوب لمواقع الويب</a> لجعلها متوافقة مع مختلف أحجام الشاشات وأنواع الأجهزة.
	</li>
	<li>
		تعرف على مفاهيم متقدمة في CSS مثل <a href="https://academy.hsoub.com/programming/css/%D8%A7%D9%84%D8%A7%D9%86%D8%AA%D9%82%D8%A7%D9%84%D8%A7%D8%AA-transitions-%D9%88%D8%A7%D9%84%D8%AD%D8%B1%D9%83%D8%A7%D8%AA-animations-%D9%81%D9%8A-css-r1058/" rel="">التحويلات والانتقالات</a> و<a href="https://academy.hsoub.com/programming/css/%D8%A3%D9%81%D8%B6%D9%84-25-%D9%85%D9%83%D8%AA%D8%A8%D8%A9-%D8%AA%D8%AD%D8%B1%D9%8A%D9%83-%D9%81%D9%8A-css-r657/" rel="">التحريك</a> التي تضفي لمسة احترافية على مواقعك.
	</li>
	<li>
		تعلم مفهوم معالجات لغة CSS مثل <a href="https://academy.hsoub.com/programming/css/sass/" rel="">Sass</a> و Less التي تمكنك من كتابة أكواد CSS أكثر كفاءة وأسهل في الصيانة.
	</li>
	<li>
		طبق ما تتعلمه على مشاريع عملية فلغة CSS تحتاج إلى الكثير من الممارسة لإتقانها، ومهما قرأت من مصادر تعلم فلن تتعلم مبادئ التنسيق الصحيحة إذا لم تطبقها بشكل عملي.
	</li>
	<li>
		بعد إتقان لغة CSS بشكل جيد سيفيدك تعلم أحد أطر عمل لغة CSS مثل بوتستراب <a href="https://academy.hsoub.com/programming/css/bootstrap/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D8%A5%D8%B7%D8%A7%D8%B1-%D8%A7%D9%84%D8%B9%D9%85%D9%84-%D8%A8%D9%88%D8%AA%D8%B3%D8%AA%D8%B1%D8%A7%D8%A8-5-r1315/" rel="">Bootstrap</a> و <a href="https://academy.hsoub.com/programming/css/bootstrap/%D9%85%D9%82%D8%A7%D8%B1%D9%86%D8%A9-%D8%A8%D9%8A%D9%86-bootstrap-%D9%88-tailwind-css-r1595/" rel="">Tailwind</a> التي تسهل عليك كتابة الكثير من الأكواد وتختصر وقتك في تنسيق المواقع.
	</li>
</ul>

<p>
	<iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="" frameborder="0" height="499" id="ips_uid_559_5" src="https://academy.hsoub.com/applications/core/interface/index.html" title="مقارنة Bootstrap و Tailwind" width="887" data-embed-src="https://www.youtube.com/embed/iV3Wvr0djkQ"></iframe>
</p>

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

<p>
	وإذا كنت تفضل الدراسة من الكتب لما توفره من تسلسل منهجي في طرح المعلومات فقد وفرت لك أكاديمية حسوب كتاب <a href="https://academy.hsoub.com/files/31-%D9%85%D9%84%D8%A7%D8%AD%D8%B8%D8%A7%D8%AA-%D9%84%D9%84%D8%B9%D8%A7%D9%85%D9%84%D9%8A%D9%86-%D8%A8%D9%84%D8%BA%D8%A9-css/" rel="">ملاحظات للعاملين بلغة CSS</a> وكتاب <a href="https://academy.hsoub.com/files/14-%D8%A7%D9%84%D8%AA%D8%AD%D8%B1%D9%8A%D9%83-%D8%B9%D8%A8%D8%B1-css/" rel="">التحريك عبر CSS</a> إلى جانب العديد من <a href="https://academy.hsoub.com/files/c5-%D9%83%D8%AA%D8%A8-%D8%A8%D8%B1%D9%85%D8%AC%D8%A9/" rel="">كتب البرمجة</a> القيمة الأخرى التي تفيد أي مطور.
</p>
<iframe allowfullscreen="" class="ipsEmbed_finishedLoading" data-controller="core.front.core.autosizeiframe" data-embedauthorid="3889" data-embedcontent="" data-embedid="embed9604435682" src="https://academy.hsoub.com/files/31-%D9%85%D9%84%D8%A7%D8%AD%D8%B8%D8%A7%D8%AA-%D9%84%D9%84%D8%B9%D8%A7%D9%85%D9%84%D9%8A%D9%86-%D8%A8%D9%84%D8%BA%D8%A9-css/?do=embed" style="overflow: hidden; height: 469px; max-width: 500px;margin:auto;"></iframe>

<p>
	وأخيرًا إذا تريد طريقة احترافية ومتكاملة لتعلم كل التقنيات اللازمة لتصميم مواقع الويب فيمكنك أن تنضم إلى <a href="https://academy.hsoub.com/learn/front-end-web-development/" rel="">دورة تطوير واجهات المستخدم</a> التي توفرها حسوب حيث ستتمكن من خلال هذه الدورة الشاملة من تطبيق كافة مفاهيم CSS الأساسية والمتقدمة وبناء واجهات مواقع أمامية احترافية تضيفها لمعرض أعمالك وتساعدك على العثور على فرصة عمل كمطور واجهات أمامية وهذا التخصص هو أحد <a href="https://academy.hsoub.com/programming/general/%D8%AA%D8%B9%D8%B1%D9%81-%D8%B9%D9%84%D9%89-%D8%A3%D8%B9%D9%84%D9%89-%D8%AA%D8%AE%D8%B5%D8%B5%D8%A7%D8%AA-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D8%A3%D8%AC%D8%B1%D9%8B%D8%A7-r1939/" rel="">تخصصات البرمجة المربحة</a> والمطلوبة بشدة في سوق العمل.
</p>

<p>
	<iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="" frameborder="0" height="480" id="ips_uid_559_6" src="https://academy.hsoub.com/applications/core/interface/index.html" title="ما هو تطوير الواجهات الأمامية وكيفية تعلمه" width="853" data-embed-src="https://www.youtube.com/embed/zrkE_dFffEU"></iframe>
</p>

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

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

<h2 id="-2">
	اقرأ أيضًا
</h2>

<ul>
	<li>
		<a href="https://academy.hsoub.com/programming/html/html-%D9%88-css-%D9%84%D9%84%D9%85%D8%A8%D8%AA%D8%AF%D8%A6%D9%8A%D9%86-%D9%83%D9%8A%D9%81-%D8%AA%D8%B5%D9%85%D9%85-%D8%A3%D9%88%D9%84-%D8%B5%D9%81%D8%AD%D8%A9-%D9%88%D9%8A%D8%A8-%D9%84%D9%83-r242/" rel="">HTML و CSS للمبتدئين: كيف تصمم أول صفحة ويب لك</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D9%81%D9%87%D9%85-%D9%88%D8%A5%D9%86%D8%B4%D8%A7%D8%A1-%D9%82%D9%88%D8%A7%D8%B9%D8%AF-css-r1881/" rel="">كيفية فهم وإنشاء قواعد CSS</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D8%A7%D9%84%D8%AA%D8%AD%D9%83%D9%85-%D9%81%D9%8A-%D8%AA%D9%85%D9%88%D8%B6%D8%B9-%D8%A7%D9%84%D8%B9%D9%86%D8%A7%D8%B5%D8%B1-%D9%81%D9%8A-css-r1052/" rel="">التحكم في تموضع العناصر في CSS</a>
	</li>
	<li>
		<a href="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/" rel="">تقنيات كتابة شيفرات CSS احترافية وسهلة الصّيانة</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/general/%D9%85%D8%A7-%D9%87%D9%8A-%D8%B5%D9%81%D8%AD%D8%A7%D8%AA-%D8%A7%D9%84%D9%88%D9%8A%D8%A8%D8%9F-r2094/" rel="">ما هي صفحات الويب</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/html/html-%D9%88-css-%D9%84%D9%84%D9%85%D8%A8%D8%AA%D8%AF%D8%A6%D9%8A%D9%86-%D9%83%D9%8A%D9%81-%D8%AA%D9%86%D8%B4%D8%A6-%D9%85%D9%88%D9%82%D8%B9%D8%A7-%D9%85%D9%86-%D8%B9%D8%AF%D8%A9-%D8%B5%D9%81%D8%AD%D8%A7%D8%AA-r286/" rel="">كيف تنشئ موقعًا من عدة صفحات</a>
	</li>
</ul>
]]></description><guid isPermaLink="false">2196</guid><pubDate>Sat, 16 Dec 2023 16:01:00 +0000</pubDate></item><item><title>&#x62A;&#x646;&#x633;&#x64A;&#x642; &#x62C;&#x62F;&#x627;&#x648;&#x644; HTML &#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-%D8%AC%D8%AF%D8%A7%D9%88%D9%84-html-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-css-r2194/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2023_12/--HTML--CSS.png.5f5881f3d23e6279d30c499e4b986d2d.png" /></p>
<p>
	لن يكون تنسيق الجداول أمرًا مهمًا، لكن علينا فعل ذلك أحيانًا، لهذا سنوّفر لك في هذا المقال دليلًا لتعرض جداول HTML بأسلوب أنيق إضافة إلى تطبيق بعض التقنيات الخاصة في تنسيقها.
</p>

<p>
	ننصحك قبل المتابعة في قراءة هذه المقال أن:
</p>

<ol>
	<li>
		تطلع على أساسيات العمل مع HTML.
	</li>
	<li>
		تطلع على أساسيات العمل مع الجداول في HTML كما شرحناها في المقال <a href="https://academy.hsoub.com/programming/html/%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A7%D8%AA-%D8%A8%D9%86%D8%A7%D8%A1-%D8%A7%D9%84%D8%AC%D8%AF%D8%A7%D9%88%D9%84-%D9%81%D9%8A-html-r1835/" rel=""> أساسيات بناء الجداول فيHTML</a>.
	</li>
	<li>
		تتفهم أساسيات CSS كما شرحناها في سلسلة المقالات خطواتك الأولى في CSS.
	</li>
</ol>

<h2 id="html">
	الجدول النمطي في HTML
</h2>

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

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_8755_8" style=""><span class="tag">&lt;table&gt;</span><span class="pln">
  </span><span class="tag">&lt;caption&gt;</span><span class="pln">
    A summary of the UK's most famous punk bands
  </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</span><span class="pln"> </span><span class="atn">scope</span><span class="pun">=</span><span class="atv">"col"</span><span class="tag">&gt;</span><span class="pln">Band</span><span class="tag">&lt;/th&gt;</span><span class="pln">
      </span><span class="tag">&lt;th</span><span class="pln"> </span><span class="atn">scope</span><span class="pun">=</span><span class="atv">"col"</span><span class="tag">&gt;</span><span class="pln">Year formed</span><span class="tag">&lt;/th&gt;</span><span class="pln">
      </span><span class="tag">&lt;th</span><span class="pln"> </span><span class="atn">scope</span><span class="pun">=</span><span class="atv">"col"</span><span class="tag">&gt;</span><span class="pln">No. of Albums</span><span class="tag">&lt;/th&gt;</span><span class="pln">
      </span><span class="tag">&lt;th</span><span class="pln"> </span><span class="atn">scope</span><span class="pun">=</span><span class="atv">"col"</span><span class="tag">&gt;</span><span class="pln">Most famous song</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</span><span class="pln"> </span><span class="atn">scope</span><span class="pun">=</span><span class="atv">"row"</span><span class="tag">&gt;</span><span class="pln">Buzzcocks</span><span class="tag">&lt;/th&gt;</span><span class="pln">
      </span><span class="tag">&lt;td&gt;</span><span class="pln">1976</span><span class="tag">&lt;/td&gt;</span><span class="pln">
      </span><span class="tag">&lt;td&gt;</span><span class="pln">9</span><span class="tag">&lt;/td&gt;</span><span class="pln">
      </span><span class="tag">&lt;td&gt;</span><span class="pln">Ever fallen in love (with someone you shouldn't've)</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</span><span class="pln"> </span><span class="atn">scope</span><span class="pun">=</span><span class="atv">"row"</span><span class="tag">&gt;</span><span class="pln">The Clash</span><span class="tag">&lt;/th&gt;</span><span class="pln">
      </span><span class="tag">&lt;td&gt;</span><span class="pln">1976</span><span class="tag">&lt;/td&gt;</span><span class="pln">
      </span><span class="tag">&lt;td&gt;</span><span class="pln">6</span><span class="tag">&lt;/td&gt;</span><span class="pln">
      </span><span class="tag">&lt;td&gt;</span><span class="pln">London Calling</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="com">&lt;!-- several other great bands --&gt;</span><span class="pln">

    </span><span class="tag">&lt;tr&gt;</span><span class="pln">
      </span><span class="tag">&lt;th</span><span class="pln"> </span><span class="atn">scope</span><span class="pun">=</span><span class="atv">"row"</span><span class="tag">&gt;</span><span class="pln">The Stranglers</span><span class="tag">&lt;/th&gt;</span><span class="pln">
      </span><span class="tag">&lt;td&gt;</span><span class="pln">1974</span><span class="tag">&lt;/td&gt;</span><span class="pln">
      </span><span class="tag">&lt;td&gt;</span><span class="pln">17</span><span class="tag">&lt;/td&gt;</span><span class="pln">
      </span><span class="tag">&lt;td&gt;</span><span class="pln">No More Heroes</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</span><span class="pln"> </span><span class="atn">scope</span><span class="pun">=</span><span class="atv">"row"</span><span class="pln"> </span><span class="atn">colspan</span><span class="pun">=</span><span class="atv">"2"</span><span class="tag">&gt;</span><span class="pln">Total albums</span><span class="tag">&lt;/th&gt;</span><span class="pln">
      </span><span class="tag">&lt;td</span><span class="pln"> </span><span class="atn">colspan</span><span class="pun">=</span><span class="atv">"2"</span><span class="tag">&gt;</span><span class="pln">77</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></pre>

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

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="139860" href="https://academy.hsoub.com/uploads/monthly_2023_12/01_bands_table.png.56c77e60c525d69a49fb4f3b74bd3085.png" rel=""><img alt="01 bands table" class="ipsImage ipsImage_thumbnailed" data-fileid="139860" data-unique="k6wd5b7ne" src="https://academy.hsoub.com/uploads/monthly_2023_12/01_bands_table.png.56c77e60c525d69a49fb4f3b74bd3085.png"> </a>
</p>

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

<h2 id="">
	تنسيق الجدول السابق
</h2>

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

<ol>
	<li>
		حضّر نسخةً من الشيفرة السابقة عن طريق <a href="https://github.com/mdn/learning-area/blob/main/css/styling-boxes/styling-tables/punk-bands-unstyled.html" rel="external nofollow">تنزيلها</a> من غيت -هب، ثم نزّل الصورتين (<a href="https://github.com/mdn/learning-area/blob/main/css/styling-boxes/styling-tables/noise.png" rel="external nofollow">noise</a> و <a href="https://github.com/mdn/learning-area/blob/main/css/styling-boxes/styling-tables/leopardskin.jpg" rel="external nofollow">leopardskin</a>)، وضع الملفات الثلاثة في مجلد واحد على حاسوبك.
	</li>
	<li>
		أنشئ تاليًا الملف "style.css" واحفظه في نفس المجلد السابق.
	</li>
	<li>
		اربط ملف CSS بملف HTML بوضع سطر الشيفرة التالي ضمن <a href="https://wiki.hsoub.com/HTML/head" rel="external">الوسم &lt;head&gt;</a>:
	</li>
</ol>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_8755_13" style=""><span class="tag">&lt;link</span><span class="pln"> </span><span class="atn">href</span><span class="pun">=</span><span class="atv">"style.css"</span><span class="pln"> </span><span class="atn">rel</span><span class="pun">=</span><span class="atv">"stylesheet"</span><span class="pln"> </span><span class="tag">/&gt;</span></pre>

<h3 id="-1">
	توسعة الجدول وتخطيطه
</h3>

<p>
	لا بد قبل كل شيء من ضبط المساحات في الجدول وضبط تخطيطه، إذ يبدو بحال سيئة، وحتى ننجز الأمر، ضِف الشيفرة التالية إلى الملف "style.css":
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_8755_16" style=""><span class="com">/* spacing */</span><span class="pln">

table </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">table-layout</span><span class="pun">:</span><span class="pln"> fixed</span><span class="pun">;</span><span class="pln">
  </span><span class="kwd">width</span><span class="pun">:</span><span class="pln"> </span><span class="lit">100%</span><span class="pun">;</span><span class="pln">
  </span><span class="kwd">border-collapse</span><span class="pun">:</span><span class="pln"> collapse</span><span class="pun">;</span><span class="pln">
  </span><span class="kwd">border</span><span class="pun">:</span><span class="pln"> </span><span class="lit">3px</span><span class="pln"> solid purple</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

thead </span><span class="kwd">th</span><span class="pun">:</span><span class="pln">nth-child</span><span class="pun">(</span><span class="lit">1</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">width</span><span class="pun">:</span><span class="pln"> </span><span class="lit">30%</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

thead </span><span class="kwd">th</span><span class="pun">:</span><span class="pln">nth-child</span><span class="pun">(</span><span class="lit">2</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">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">

thead </span><span class="kwd">th</span><span class="pun">:</span><span class="pln">nth-child</span><span class="pun">(</span><span class="lit">3</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">width</span><span class="pun">:</span><span class="pln"> </span><span class="lit">15%</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

thead </span><span class="kwd">th</span><span class="pun">:</span><span class="pln">nth-child</span><span class="pun">(</span><span class="lit">4</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">width</span><span class="pun">:</span><span class="pln"> </span><span class="lit">35%</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

th</span><span class="pun">,</span><span class="pln">
td </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">padding</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>
	إليك أهم النقاط التي يجدر ملاحظتها في الشيفرة السابقة:
</p>

<ul>
	<li>
		ضبط قيمة الخاصية <a href="https://wiki.hsoub.com/CSS/table-layout" rel="external"><code>table-layout</code></a> على القيمة <code>fixed</code> أمرٌ جيدٌ عادةً، فهو يجعل سلوك الجدول متوّقع افتراضيًا، إذ تأخذ أعمدة الجدول في الحالة الطبيعية حجمها وفقًا لكمية المحتوى التي تضمه، وهذا ما قد يعطي نتائج غريبة قليلًا، لكن باستخدام القاعدة <code>table-layout: fixed</code> ستتمكن من ضبط حيّز الأعمدة وفقًا لحيّز ترويساتها ومن ثم التعامل مع المحتوى وفقًا لذلك. لهذا استخدمنا أربع قواعد تنسيق مختلفة <code>(thead th:nth-child(n</code> لنستهدف الترويسات الأربع للجدول، بحيث يختار المحدد <code>nth-child:</code> العنصر الابن "n" الذي يمثّل العنصر <code>&lt;th&gt;</code> ضمن السلسلة، داخل العنصر <code>&lt;thread&gt;</code>، وأعطينا كلًا من الترويسات حيّزًا بنسبة مئوية من الحيّز الكلي. سيأخذ الآن كل عمود حيّز الترويسة وهي طريقة جيدة لتحديد الحجم. استخدمنا أيضًا فكرة أن تكون قيمة الخاصية <code>width</code> هي <code>%100</code>، وبالتالي سيملأ الجدول أي حاوية تضمه، وسيتجاوب جيدًا عند تغيير شاشة العرض، على الرغم من أنه يتطلب بعض العمل الإضافي ليبدو جميلًا ضمن الشاشة الأضيق.
	</li>
	<li>
		يُعد ضبط قيمة الخاصية <a href="https://wiki.hsoub.com/CSS/border-collapse" rel="external"><code>border-collapse</code></a> على <code>collapse</code> أسلوبًا معياريًا في تنسيق أي جدول. فعندما تضبط حواف الخلايا ضمن الجدول، سيظهر فراغ فيما بينها افتراضيًا، وقد لا يبدو الأمر جميلًا (إلا إن أردت فعلًا أن تظهر). لاحظ الصورة التالية:
	</li>
</ul>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="139863" href="https://academy.hsoub.com/uploads/monthly_2023_12/02_table_cell_spacing.png.423b4ea8a5fd7693b5787f8505c3f73c.png" rel=""><img alt="02 table cell spacing" class="ipsImage ipsImage_thumbnailed" data-fileid="139863" data-unique="q14oy62m1" src="https://academy.hsoub.com/uploads/monthly_2023_12/02_table_cell_spacing.png.423b4ea8a5fd7693b5787f8505c3f73c.png"> </a>
</p>

<p>
	لكن بتطبيق القاعدة <code>;border-collapse: collapse</code> ستختفي حواف الخلايا ويبدو الجدول على النحو التالي:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="139859" href="https://academy.hsoub.com/uploads/monthly_2023_12/03_table_cell_no_spacing.png.fd8b85a01043870b36107308503c3233.png" rel=""><img alt="03 table cell no spacing" class="ipsImage ipsImage_thumbnailed" data-fileid="139859" data-unique="zxoz97lve" src="https://academy.hsoub.com/uploads/monthly_2023_12/03_table_cell_no_spacing.png.fd8b85a01043870b36107308503c3233.png"> </a>
</p>

<ul>
	<li>
		<p>
			وضعنا حوافًا <code>border</code> حول كامل الجدول، لأننا سنحتاج إليه عندما نضع حوافًا حول ترويسة وتذييل الجدول لاحقًا، إذ سيبدو الجدول غريب الشكل إذا لم نضع له حوافًا من الخارج وسينتهي الأمر بوجود فراغات مزعجة.
		</p>
	</li>
	<li>
		<p>
			وضعنا حشوة <code>padding</code> حول العنصرين <code><a href="https://wiki.hsoub.com/HTML/th" rel="external">&lt;th&gt;</a></code> و <code><a href="https://wiki.hsoub.com/HTML/td" rel="external">&lt;td&gt;</a></code> لكي نمنح البيانات المكتوبة بعض الفسحة ليظهر الجدول أكثر قبولًا.
		</p>
	</li>
</ul>

<p>
	سيبدو الجدول حتى اللحظة على النحو التالي:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="139858" href="https://academy.hsoub.com/uploads/monthly_2023_12/04_table_enhanced.png.cf12bc71e2f347cc95f174982bce4eaa.png" rel=""><img alt="04 table enhanced" class="ipsImage ipsImage_thumbnailed" data-fileid="139858" data-unique="yha03qe39" src="https://academy.hsoub.com/uploads/monthly_2023_12/04_table_enhanced.png.cf12bc71e2f347cc95f174982bce4eaa.png"> </a>
</p>

<h3 id="-2">
	بعض التنسيقات الكتابية البسيطة
</h3>

<p>
	سنحاول تاليًا ترتيب النص قليلًا، لهذا سنبحث عن خط كتابة مناسب ضمن <a href="https://fonts.google.com/" rel="external nofollow">خطوط جوجل</a> ليلائم محتوى الجدول الذي يتحدث عن فرق موسيقية، كما يمكنك اختيار أي خط كتابة آخر يعجبك؛ فكل ما عليك فعله في هذه الحالة هو استبدال العنصر <a href="https://wiki.hsoub.com/HTML/link" rel="external"><code>&lt;link&gt;</code></a> في شيفرتنا وخاصية التنسيق <a href="https://wiki.hsoub.com/CSS/font-family" rel="external"><code>font-family</code></a> مع تصريحه بالقيم التي تحددها لك مكتبة خطوط جوجل.
</p>

<p>
	أضف بدايةً العنصر <code>&lt;link&gt;</code> إلى ترويسة ملف HTML قبل العنصر <code>&lt;link&gt;</code> الموجود أصلًا:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_8755_24" style=""><span class="tag">&lt;link</span><span class="pln">
  </span><span class="atn">href</span><span class="pun">=</span><span class="atv">"https://fonts.googleapis.com/css?family=Rock+Salt"</span><span class="pln">
  </span><span class="atn">rel</span><span class="pun">=</span><span class="atv">"stylesheet"</span><span class="pln">
  </span><span class="atn">type</span><span class="pun">=</span><span class="atv">"text/css"</span><span class="pln"> </span><span class="tag">/&gt;</span></pre>

<p>
	أضف بعد ذلك <a href="https://academy.hsoub.com/programming/html/html-%D9%88-css-%D9%84%D9%84%D9%85%D8%A8%D8%AA%D8%AF%D8%A6%D9%8A%D9%86-%D9%85%D9%82%D8%AF%D9%85%D8%A9-%D8%A5%D9%84%D9%89-%D8%AA%D9%86%D8%B3%D9%8A%D9%82%D8%A7%D8%AA-css-r272/" rel="">تنسيقات CSS</a> إلى الملف style.css تحت ما هو موجود أصلًا:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_8755_26" style=""><span class="com">/* typography */</span><span class="pln">

html </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">font-family</span><span class="pun">:</span><span class="pln"> </span><span class="str">"helvetica neue"</span><span class="pun">,</span><span class="pln"> helvetica</span><span class="pun">,</span><span class="pln"> arial</span><span class="pun">,</span><span class="pln"> sans-serif</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

thead th</span><span class="pun">,</span><span class="pln">
tfoot th </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">font-family</span><span class="pun">:</span><span class="pln"> </span><span class="str">"Rock Salt"</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">

th </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">letter-spacing</span><span class="pun">:</span><span class="pln"> </span><span class="lit">2px</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

td </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">letter-spacing</span><span class="pun">:</span><span class="pln"> </span><span class="lit">1px</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

tbody td </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">text-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">

tfoot th </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">text-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>
	لا يوجد هنا حقيقيةً أية تنسيقات مخصصة تمامًا للجداول، وكل ما نفعله هو التلاعب بخطوط الكتابة لتسهيل قراءة المحتوى:
</p>

<ul>
	<li>
		اخترنا الخط sans-serif وهو خيار تزييني بحت، كما اخترنا خط كتابة مخصص في ترويسة الجدول داخل العناصر <a href="https://wiki.hsoub.com/HTML/thead" rel="external"><code>&lt;thead&gt;</code></a> و <a href="https://wiki.hsoub.com/HTML/tfoot" rel="external"><code>&lt;tfoot&gt;</code></a> ليناسب محتواهما.
	</li>
	<li>
		أضفنا بعض المساحات الفارغة <a href="https://wiki.hsoub.com/CSS/letter-spacing" rel="external"><code>letter-spacing</code></a> ضمن ترويسة الجدول وخلاياه لأهمية ذلك في تسهيل قراءة المحتوى، وهو مجددًا خيار تزييني.
	</li>
	<li>
		وضعنا النص في منتصف كل خلية <a href="https://wiki.hsoub.com/HTML/tbody" rel="external"><code>&lt;tbody&gt;</code></a> كي تحاذي الترويسات، علمًا أنها تحاذى افتراضيًا إلى اليسار من خلال ضبط الخاصية <a href="https://wiki.hsoub.com/CSS/text-align" rel="external"><code>text-align</code></a> على <code>left</code>، بينما تُحاذى الترويسات إلى المنتصف <code>center</code>.
	</li>
	<li>
		سيبدو المظهر أفضل عمومًا إذا كانت محاذاة الترويسات <code>&lt;tfoot&gt;</code> ومحتوى الخلايا وفق النمط ذاته، وسنكتفي بالخط السميك bold لنص الترويسات كي تتميز عن سائر خلايا الجدول.
	</li>
</ul>

<p>
	ستبدو النتيجة أفضل الآن:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="139861" href="https://academy.hsoub.com/uploads/monthly_2023_12/05_table-further_enhanced.png.7ac55a875e82896664f3a643ad913c6f.png" rel=""><img alt="05 table further enhanced" class="ipsImage ipsImage_thumbnailed" data-fileid="139861" data-unique="fwnwf9opa" src="https://academy.hsoub.com/uploads/monthly_2023_12/05_table-further_enhanced.png.7ac55a875e82896664f3a643ad913c6f.png"> </a>
</p>

<h3 id="-3">
	الرسوميات والألوان
</h3>

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

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_8755_29" style=""><span class="com">/* graphics and colors */</span><span class="pln">

thead</span><span class="pun">,</span><span class="pln">
tfoot </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">background</span><span class="pun">:</span><span class="pln"> </span><span class="kwd">url</span><span class="pun">(</span><span class="str">leopardskin.jpg</span><span class="pun">);</span><span class="pln">
  </span><span class="kwd">color</span><span class="pun">:</span><span class="pln"> white</span><span class="pun">;</span><span class="pln">
  </span><span class="kwd">text-shadow</span><span class="pun">:</span><span class="pln"> </span><span class="lit">1px</span><span class="pln"> </span><span class="lit">1px</span><span class="pln"> </span><span class="lit">1px</span><span class="pln"> black</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

thead th</span><span class="pun">,</span><span class="pln">
tfoot th</span><span class="pun">,</span><span class="pln">
tfoot td </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">background</span><span class="pun">:</span><span class="pln"> linear-gradient</span><span class="pun">(</span><span class="pln">
    to bottom</span><span class="pun">,</span><span class="pln">
    rgba</span><span class="pun">(</span><span class="lit">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.1</span><span class="pun">),</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.5</span><span class="pun">)</span><span class="pln">
  </span><span class="pun">);</span><span class="pln">
  </span><span class="kwd">border</span><span class="pun">:</span><span class="pln"> </span><span class="lit">3px</span><span class="pln"> solid purple</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	تذكّر أن ما فعلناه ليس مخصصًا للجداول تحديدًا لكن من الأفضل إلقاء نظرة:
</p>

<ul>
	<li>
		أضفنا صورة خلفية للجدول باستخدام الخاصية <code>background-image</code> على العنصر <code>&lt;thead&gt;</code> و <code>&lt;tfoot&gt;</code> وغيرنا لون <code>color</code> جميع النصوص داخل الترويسات والتذييل إلى اللون الأبيض ومنحناها تأثير الظل <code>text-shadow</code> لتبدو مقروءةً على نحوٍ أفضل.
	</li>
	<li>
		أضفنا أيضًا تدرجًا لونيًا خطيًا Linear gradient إلى العنصرين <code>&lt;th&gt;</code> و <code>&lt;td&gt;</code> الخاصين بالترويسات والتذييل لتبدو الخلفية أجمل، كما منحناهما حوافًا بنفسجية.
	</li>
</ul>

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

<h3 id="zebra">
	خطوط حمار الوحش Zebra
</h3>

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

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_8755_31" style=""><span class="com">/* zebra striping */</span><span class="pln">

tbody </span><span class="kwd">tr</span><span class="pun">:</span><span class="pln">nth-child</span><span class="pun">(</span><span class="pln">odd</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">background-color</span><span class="pun">:</span><span class="pln"> </span><span class="lit">#ff33cc</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

tbody </span><span class="kwd">tr</span><span class="pun">:</span><span class="pln">nth-child</span><span class="pun">(</span><span class="pln">even</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">background-color</span><span class="pun">:</span><span class="pln"> </span><span class="lit">#e495e4</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

tbody tr </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">background-image</span><span class="pun">:</span><span class="pln"> </span><span class="kwd">url</span><span class="pun">(</span><span class="str">noise.png</span><span class="pun">);</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

table </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">background-color</span><span class="pun">:</span><span class="pln"> </span><span class="lit">#ff33cc</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></pre>

<ul>
	<li>
		رأينا سابقًا كيف يُستخدم المحدد <code>nth-child:</code> لاستهداف عنصر ابن محدد، كما يُمكن أن يُعطى صيغة لها معاملات وبالتالي يمكن اختيار سلسلة من العناصر لاستهدافها؛ فالصيغة <code>2n-1</code> ستختار جميع الأبناء ذوي الترتيب الفردي مثل الولد الأول والثالث والخامس وهكذا؛ كما تُستخدم الصيغة <code>2n</code> لاختيار الأبناء ذوي الترتيب الزوجي. استخدمنا في الشيفرة التعليمتين <code>odd</code> و <code>even</code> اللتين تنفذان الفكرة التي تحدثنا عنها، وهكذا سنعطي الصفوف الزوجية لونًا متوهجًا مختلفًا عن الفردية.
	</li>
	<li>
		استخدمنا أيضًا خلفية متكررة لكل على جميع الصفوف وهي صورة نصف شفافة من النوع <code>png.</code> لتغطي الصفوف معطية انطباعًا متشابكًا texture لمظهر الجدول.
	</li>
	<li>
		منحنا كامل الجدول خلفية لونية كي تظهر الصفوف ملونة في المتصفحات التي لا تدعم المحدد <code>nth-child:</code>.
	</li>
</ul>

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

<p style="text-align: center;">
	<img alt="06_table_semi_complete.png" class="ipsImage ipsImage_thumbnailed" data-fileid="139864" data-ratio="45.50" data-unique="cx3efx9p9" width="723" src="https://academy.hsoub.com/uploads/monthly_2023_12/06_table_semi_complete.png.2f40cf9849903279e6de17c2b2f35317.png">
</p>

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

<h3 id="-4">
	تنسيق العناوين
</h3>

<p>
	هناك شيء أخير سنفعله وهو تنسيق عنوان الجدول. لهذا عليك إضافة الشيفرة التالية إلى أسفل الملف style.css:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_8755_33" style=""><span class="com">/* caption */</span><span class="pln">

caption </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">font-family</span><span class="pun">:</span><span class="pln"> </span><span class="str">"Rock Salt"</span><span class="pun">,</span><span class="pln"> cursive</span><span class="pun">;</span><span class="pln">
  </span><span class="kwd">padding</span><span class="pun">:</span><span class="pln"> </span><span class="lit">20px</span><span class="pun">;</span><span class="pln">
  </span><span class="kwd">font-style</span><span class="pun">:</span><span class="pln"> italic</span><span class="pun">;</span><span class="pln">
  </span><span class="kwd">caption-side</span><span class="pun">:</span><span class="pln"> bottom</span><span class="pun">;</span><span class="pln">
  </span><span class="kwd">color</span><span class="pun">:</span><span class="pln"> </span><span class="lit">#666</span><span class="pun">;</span><span class="pln">
  </span><span class="kwd">text-align</span><span class="pun">:</span><span class="pln"> right</span><span class="pun">;</span><span class="pln">
  </span><span class="kwd">letter-spacing</span><span class="pun">:</span><span class="pln"> </span><span class="lit">1px</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></pre>

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

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="139862" href="https://academy.hsoub.com/uploads/monthly_2023_12/06_table_complete.png.cf99e8511edccb3ccbb50e9b410d229c.png" rel=""><img alt="06 table complete" class="ipsImage ipsImage_thumbnailed" data-fileid="139862" data-unique="x2z5k1loq" src="https://academy.hsoub.com/uploads/monthly_2023_12/06_table_complete.png.cf99e8511edccb3ccbb50e9b410d229c.png"> </a>
</p>

<h2 id="-5">
	تلميحات سريعة لتنسيق الجداول
</h2>

<p>
	إليك قائمة بأفضل نقاط التنسيق التي ناقشناها في المقال:
</p>

<ul>
	<li>
		بسّط شيفرة HTMl الخاصة بالجدول قدر المستطاع، وامنح عناصر الجدول المرونة الكافية كأن تضبط القياسات بنسب مئوية وبهذا سيكون الجدول أكثر استجابة.
	</li>
	<li>
		استخدم قاعدة التنسيق <code>table-layout: fixed</code> كي تنشئ جدولًا بتخطيط نمطي يمكّنك من ضبط أبعاد الأعمدة بسهولة باستخدام الخاصية <code>width</code> على ترويساتها <code>&lt;th&gt;</code>.
	</li>
	<li>
		استخدم القاعدة <code>border-collpse: collapse</code>لتخفي حواف الخلايا مما يعطي الجدول مظهرًا أكثر أناقة.
	</li>
	<li>
		استخدم خطوط حمار الوحش لتمنح أسطر الجدول لونين متناوبين وبالتالي سهولة أكبر في القراءة.
	</li>
	<li>
		استخدم الخاصية <code>text-align</code> لمحاذاة النصوص في عنصر الترويسة <code>&lt;th&gt;</code> والتذييل <code>&lt;td&gt;</code> كي يظهر الجدول أكثر أناقة وأسهل متابعة.
	</li>
</ul>

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

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

<p>
	ترجمة -وبتصرف- لمقال <a href="https://developer.mozilla.org/en-US/docs/Learn/CSS/Building_blocks/Styling_tables" rel="external nofollow">Styling tables</a>.
</p>

<h2 id="-7">
	اقرأ أيضًا
</h2>

<ul>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%A5%D9%86%D8%B4%D8%A7%D8%A1-%D8%AC%D8%AF%D9%88%D9%84-%D8%A3%D9%86%D9%8A%D9%82-%D8%A8%D9%80-html-%D9%88-css-r615/" rel="">كيفية إنشاء جدول أنيق بـ HTML و CSS</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/html/%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A7%D8%AA-%D8%A8%D9%86%D8%A7%D8%A1-%D8%A7%D9%84%D8%AC%D8%AF%D8%A7%D9%88%D9%84-%D9%81%D9%8A-html-r1835/" rel="">أساسيات بناء الجداول في HTML</a>
	</li>
	<li>
		<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="">الجداول (Tables) في CSS</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/html/html-%D9%88-css-%D9%84%D9%84%D9%85%D8%A8%D8%AA%D8%AF%D8%A6%D9%8A%D9%86-%D9%85%D9%82%D8%AF%D9%85%D8%A9-%D8%A5%D9%84%D9%89-%D8%AA%D9%86%D8%B3%D9%8A%D9%82%D8%A7%D8%AA-css-r272/" rel="">HTML و CSS للمبتدئين: مقدمة إلى تنسيقات CSS</a>
	</li>
</ul>
]]></description><guid isPermaLink="false">2194</guid><pubDate>Tue, 12 Dec 2023 16:00:01 +0000</pubDate></item><item><title>&#x62A;&#x646;&#x633;&#x64A;&#x642; &#x627;&#x644;&#x635;&#x648;&#x631; &#x648;&#x627;&#x644;&#x648;&#x633;&#x627;&#x626;&#x637; &#x627;&#x644;&#x645;&#x62A;&#x639;&#x62F;&#x62F;&#x629; &#x648;&#x627;&#x644;&#x646;&#x645;&#x627;&#x630;&#x62C; &#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%D8%B5%D9%88%D8%B1-%D9%88%D8%A7%D9%84%D9%88%D8%B3%D8%A7%D8%A6%D8%B7-%D8%A7%D9%84%D9%85%D8%AA%D8%B9%D8%AF%D8%AF%D8%A9-%D9%88%D8%A7%D9%84%D9%86%D9%85%D8%A7%D8%B0%D8%AC-%D9%81%D9%8A-css-r2186/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2023_12/------CSS.png.83c0a94ea7230800937d0898a35fdd64.png" /></p>
<p>
	نلقي نظرةً في هذا المقال على الطريقة التي تُنسّق فيها بعض العناصر الخاصة باستخدام لغة CSS، إذ تُعد الصور والوسائط المتعددة والنماذج من العناصر التي تسلك سلوكًا مختلف قليلًا عن الفكرة النمطية للصناديق من ناحية القدرة على تنسيقها باستخدام CSS. لهذا من المهم أن تعرف ما هو ممكن وما هو غير ممكن عند تنسيق هذه العناصر، فلا يصيبك الإحباط وأنت تحاول، وهذا ما سنتعرف عليه في مقالنا.
</p>

<p>
	ننصحك قبل المتابعة في قراءة هذه المقال أن:
</p>

<ol>
	<li>
		تطلع على أساسيات استخدام الحاسوب وتصفح الويب.
	</li>
	<li>
		تحضّر بيئة عمل بسيطة كما تحدثنا مسبقًا في المقال <a href="https://academy.hsoub.com/programming/general/%D8%AA%D8%AB%D8%A8%D9%8A%D8%AA-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D9%8A%D8%A7%D8%AA-%D8%A7%D9%84%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A9-%D9%84%D9%84%D8%A7%D9%86%D8%B7%D9%84%D8%A7%D9%82-%D9%81%D9%8A-%D8%AA%D8%B7%D9%88%D9%8A%D8%B1-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-r1671/" rel="">تثبيت البرمجيات الأساسية</a>، وتتفهم طريقة إنشاء وإدارة الملفات كما شرحناها في مقال <a href="https://academy.hsoub.com/programming/general/%D8%A7%D9%84%D8%AA%D8%B9%D8%A7%D9%85%D9%84-%D9%85%D8%B9-%D8%A7%D9%84%D9%85%D9%84%D9%81%D8%A7%D8%AA-%D9%81%D9%8A-%D8%B9%D9%85%D9%84%D9%8A%D8%A9-%D8%AA%D8%B7%D9%88%D9%8A%D8%B1-%D9%85%D9%88%D9%82%D8%B9-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-r1686/" rel="">التعامل مع الملفات</a>.
	</li>
	<li>
		تطلع على أساسيات HTML كما شرحناها في سلسلة المقالات <a href="https://academy.hsoub.com/programming/html/%D8%AA%D8%B9%D8%B1%D9%81-%D8%B9%D9%84%D9%89-%D9%84%D8%BA%D8%A9-html-r1752/" rel="">مدخل إلى HTML</a>.
	</li>
	<li>
		تتفهم أساسيات CSS كما شرحناها في سلسلة المقالات <a href="https://academy.hsoub.com/programming/css/%D8%AA%D8%B9%D8%B1%D9%81-%D8%B9%D9%84%D9%89-css-r2000/" rel="">خطواتك الأولى في CSS</a>.
	</li>
</ol>

<h2 id="replacedelements">
	العناصر المستبدلة Replaced Elements
</h2>

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

<p>
	تمتلك بعض العناصر المُستبدلة مثل الصور ومقاطع الفيديو خاصية تصف <strong>نسبة بعدي العنصر Aspect ratio</strong>، أي أن لها حجمًا وفق البعد الأفقي "x" والبعد العمودي "y"، وستُعرض هذه العناصر على الشاشة وفقًا للأحجام الفعلية intrinsic التي يصفها ملف الصورة أو الفيديو.
</p>

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

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

<p>
	لدينا في المثال التالي صندوقان لهما نفس الحجم (200 بكسل):
</p>

<ul>
	<li>
		يضم الأول صورةً أصغر من 200 بكسل أي أنها أصغر من حجم الصندوق ولا تتمدد لتملأه.
	</li>
	<li>
		يضم الثاني صورةً أكبر من 200 بكسل وتطفح خارج الصندوق.
	</li>
</ul>

<p>
	<iframe height="1000" loading="lazy" src="https://mdn.github.io/css-examples/learn/images/size.html" style="box-sizing: content-box; border: 1px solid var(--border-primary); max-width: 100%; width: calc((100% - 2rem) - 2px); background: rgb(255, 255, 255); border-radius: var(--elem-radius); padding: 1rem;" width="100%"></iframe>
</p>

<p>
	ما الذي يمكن أن نفعله هنا بخصوص الطفحان؟
</p>

<p>
	كما تعلمنا في <a href="https://academy.hsoub.com/programming/css/%D8%AA%D8%AD%D8%AC%D9%8A%D9%85-%D8%A7%D9%84%D8%A3%D8%B4%D9%8A%D8%A7%D8%A1-%D9%81%D9%8A-css-r2162/" rel="">المقال السابق</a>، سيكون الحل الأكثر شيوعًا استخدام الخاصية <a href="https://wiki.hsoub.com/CSS/max-width" rel="external"><code>max-width</code></a> وإسناد القيمة <code>%100</code> لها، وهذا ما سيجعل الصورة أصغر من الصندوق وليس أكبر منه، وتعمل هذه الطريقة أيضًا مع بقية العناصر المُستبدلة مثل <code>&lt;video&gt;</code> و <code>&lt;iframe&gt;</code>.
</p>

<p>
	حاول أن تضيف الخاصية <code>max-width: 100%</code> إلى المحدد <code>img</code> في المثال السابق وسترى أن الصورة الكبيرة ستصغر بينما تبقى الصورة الصغيرة كما هي.
</p>

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

<p>
	وضعنا في المثال التالي القيمة <code>cover</code> للخاصية <code>object-fit</code> والتي تصغّر الصورة دون المساس بنسبة البُعدين وتملأ الصندوق، لكن سيجري اقتصاص<br>
	أطراف الصورة.
</p>

<p>
	<iframe height="800" loading="lazy" src="https://mdn.github.io/css-examples/learn/images/object-fit.html" style="box-sizing: content-box; border: 1px solid var(--border-primary); max-width: 100%; width: calc((100% - 2rem) - 2px); background: rgb(255, 255, 255); border-radius: var(--elem-radius); padding: 1rem;" width="100%"></iframe>
</p>

<p>
	بينما لو استخدمنا القيمة <code>contain</code> ستتغير أبعاد الصورة حتى تتلائم مع حجم الصندوق وبالتالي ستتعرض إلى ما يُسمى "التقييس Letterboxing" أي قد لا يكون لها نفس نسبة بُعدي الصندوق، أما القيمة <code>fill</code> فستملأ الصندوق دون أن تحافظ على نسبة البُعدين.
</p>

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

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

<p>
	لدينا في مثالنا التالي عمودين وحاوية على شكل شبكة من سطرين وبالتالي لدينا أربعة عناصر. تمتلك في مثالنا العناصر <code>&lt;div&gt;</code> خلفية لونية وتمتد حتى تملأ الحيز المخصص في الشبكة، لكن الصورة لا تسلك هذا السلوك.
</p>

<p>
	<iframe height="900" loading="lazy" src="https://mdn.github.io/css-examples/learn/images/layout.html" style="box-sizing: content-box; border: 1px solid var(--border-primary); max-width: 100%; width: calc((100% - 2rem) - 2px); background: rgb(255, 255, 255); border-radius: var(--elem-radius); padding: 1rem;" width="100%"></iframe>
</p>

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

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

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

<h2 id="-2">
	عناصر النماذج
</h2>

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

<p>
	تُضاف العديد من عناصر التحكم إلى النماذج باستخدام العناصر الإدخال <code>&lt;input&gt;</code> التي قد تُعرّف حقلًا بسيطًا من حقول النموذج مثل عناصر الإدخال النصية، وقد تعرّف عناصر أكثر تعقيدًا مثل عناصر اختيار اللون والتاريخ، كما ستجد عناصرًا أخرى، مثل <code>&lt;textarea&gt;</code> لإدخال نص متعدد الأسطر، وعناصر لعرض العناوين الفرعية في النموذج، مثل <a href="https://wiki.hsoub.com/HTML/fieldset" rel="external"><code>&lt;fieldset&gt;</code></a> و <a href="https://wiki.hsoub.com/HTML/legend" rel="external"><code>&lt;legend&gt;</code></a>.
</p>

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

<h3 id="-3">
	تنسيق عناصر الإدخال النصي
</h3>

<p>
	من السهل تنسيق عناصر الإدخال النصي، مثل <code>&lt;input type="text"&gt;</code>، أو <code>&lt;input type="email"&gt;</code>، أو <code>&lt;textarea&gt;</code>، وتميل إلى سلوك قريب من سلوك بقية العناصر الصندوقية في الصفحة، لكن قد يختلف السلوك الافتراضي لها تبعًا لنظام التشغيل والمتصفح الذي تستخدمه لزيارة الصفحة.
</p>

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

<p>
	<iframe height="900" loading="lazy" src="https://mdn.github.io/css-examples/learn/images/form.html" style="box-sizing: content-box; border: 1px solid var(--border-primary); max-width: 100%; width: calc((100% - 2rem) - 2px); background: rgb(255, 255, 255); border-radius: var(--elem-radius); padding: 1rem;" width="100%"></iframe>
</p>

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

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

<h3 id="-4">
	الوراثة وعناصر النماذج
</h3>

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

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_87_6" style=""><span class="pln">button</span><span class="pun">,</span><span class="pln">
input</span><span class="pun">,</span><span class="pln">
select</span><span class="pun">,</span><span class="pln">
textarea </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">font-family</span><span class="pun">:</span><span class="pln"> </span><span class="kwd">inherit</span><span class="pun">;</span><span class="pln">
  </span><span class="kwd">font-size</span><span class="pun">:</span><span class="pln"> </span><span class="lit">100%</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></pre>

<h3 id="-5">
	عناصر النموذج وتحجيم الصندوق
</h3>

<p>
	تختلف قواعد تحجيم صناديق عناصر النماذج من متصفح إلى آخر، ويمكنك الاطلاع على مقال <a href="https://academy.hsoub.com/programming/css/%D8%AF%D9%84%D9%8A%D9%84-%D9%85%D8%AE%D8%AA%D8%B5%D8%B1-%D8%A5%D9%84%D9%89-%D9%86%D9%85%D9%88%D8%B0%D8%AC-%D8%A7%D9%84%D8%B5%D9%86%D8%AF%D9%88%D9%82-box-model-%D9%81%D9%8A-%D8%AA%D9%86%D8%B3%D9%8A%D9%82%D8%A7%D8%AA-css-r2126/" rel="">نموذج الصندوق box model في تنسيقات CSS</a> الذي تحدثنا فيه عن استخدام الخاصية والاستفادة من المعلومات التي أوردناها فيه في تنسيق النماذج للتأكد من التناسق عند ضبط حيّز وارتفاع عناصر النموذج.
</p>

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

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_87_8" style=""><span class="pln">button</span><span class="pun">,</span><span class="pln">
input</span><span class="pun">,</span><span class="pln">
select</span><span class="pun">,</span><span class="pln">
textarea </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">box-sizing</span><span class="pun">:</span><span class="pln"> border-box</span><span class="pun">;</span><span class="pln">
  </span><span class="kwd">padding</span><span class="pun">:</span><span class="pln"> </span><span class="lit">0</span><span class="pun">;</span><span class="pln">
  </span><span class="kwd">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></pre>

<h3 id="-6">
	بعض الإعدادات المفيدة
</h3>

<p>
	إضافةً إلى القواعد التي ذكرناها سابقًا، لا بد أن تستخدم الخاصية <code>overflow: auto</code> على العنصر <code>&lt;textarea&gt;</code> لتمنع متصفح "إنترنت إكسبلورر" من إظهار أشرطة التمرير عندما لا تقتضي الحاجة ذلك:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_87_10" style=""><span class="pln">textarea </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">overflow</span><span class="pun">:</span><span class="pln"> auto</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></pre>

<h3 id="-7">
	ضبط جميع القواعد السابقة دفعة واحدة
</h3>

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

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_87_12" style=""><span class="pln">button</span><span class="pun">,</span><span class="pln">
input</span><span class="pun">,</span><span class="pln">
select</span><span class="pun">,</span><span class="pln">
textarea </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">font-family</span><span class="pun">:</span><span class="pln"> </span><span class="kwd">inherit</span><span class="pun">;</span><span class="pln">
  </span><span class="kwd">font-size</span><span class="pun">:</span><span class="pln"> </span><span class="lit">100%</span><span class="pun">;</span><span class="pln">
  </span><span class="kwd">box-sizing</span><span class="pun">:</span><span class="pln"> border-box</span><span class="pun">;</span><span class="pln">
  </span><span class="kwd">padding</span><span class="pun">:</span><span class="pln"> </span><span class="lit">0</span><span class="pun">;</span><span class="pln">
  </span><span class="kwd">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">

textarea </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">overflow</span><span class="pun">:</span><span class="pln"> auto</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></pre>

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

<p>
	إذا أردت أن تلقي نظرةً على الأمر، عُد إلى الملف <a href="https://necolas.github.io/normalize.css/" rel="external nofollow">Normalize.css</a> الأكثر شعبية الذي يُستخدم بمثابة أساس للكثير من المشاريع.
</p>

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

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

<p>
	ترجمة -وبتصرف- للمقال <a href="https://developer.mozilla.org/en-US/docs/Learn/CSS/Building_blocks/Images_media_form_elements" rel="external nofollow">Images, Media and form elements</a>
</p>

<h2 id="-9">
	اقرأ أيضًا
</h2>

<ul>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D8%AA%D8%AD%D8%AC%D9%8A%D9%85-%D8%A7%D9%84%D8%A3%D8%B4%D9%8A%D8%A7%D8%A1-%D9%81%D9%8A-css-r2162/" rel="">المقال السابق:تحجيم الأشياء في CSS</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%AA%D9%86%D8%B3%D9%8A%D9%82-%D8%A7%D9%84%D8%B5%D9%88%D8%B1-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-css-r1882/" rel="">كيفية تنسيق الصور باستخدام CSS</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D8%A7%D9%84%D8%B5%D9%88%D8%B1-%D9%81%D9%8A-%D8%AA%D8%B5%D9%85%D9%8A%D9%85-%D8%B5%D9%81%D8%AD%D8%A7%D8%AA-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-%D8%A7%D9%84%D9%85%D8%AA%D8%AC%D8%A7%D9%88%D8%A8-r1516/" rel="">الصور في تصميم صفحات الويب المتجاوب</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D8%A7%D9%84%D8%AA%D9%86%D8%B3%D9%8A%D9%82%D8%A7%D8%AA-%D8%A7%D9%84%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A9-%D9%84%D9%84%D8%B9%D9%86%D8%A7%D8%B5%D8%B1-%D9%81%D9%8A-css-r1054/" rel="">التنسيقات الأساسية للعناصر في CSS</a>
	</li>
</ul>
]]></description><guid isPermaLink="false">2186</guid><pubDate>Tue, 05 Dec 2023 11:09:01 +0000</pubDate></item><item><title>&#x62A;&#x62D;&#x62C;&#x64A;&#x645; &#x627;&#x644;&#x623;&#x634;&#x64A;&#x627;&#x621; &#x641;&#x64A; CSS</title><link>https://academy.hsoub.com/programming/css/%D8%AA%D8%AD%D8%AC%D9%8A%D9%85-%D8%A7%D9%84%D8%A3%D8%B4%D9%8A%D8%A7%D8%A1-%D9%81%D9%8A-css-r2162/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2023_11/----CSS.png.cb6069401cda063d6086817deb16309c.png" /></p>
<p>
	تحدثنا في مقالات سابقة عن طرق عديدة لتحجيم الأشياء ضمن صفحة الويب باستخدام CSS، فمعرفة التأثيرات التي ستُحدثها الميزات المختلفة على تصميمك أمرٌ مهمٌ جدًا، لهذا نلخص في هذا المقال الطرق المختلفة التي يمكن تحديد حجم الأشياء في CSS ونعرّف بعض المصطلحات التي ستساعدك مستقبلًا عن التحجيم sizing.
</p>

<p>
	ننصحك قبل المتابعة في قراءة هذه المقال أن:
</p>

<ol>
	<li>
		تطلع على أساسيات استخدام الحاسوب وتصفح الويب.
	</li>
	<li>
		تحضّر بيئة عمل بسيطة كما تحدثنا مسبقًا في المقال <a href="https://academy.hsoub.com/programming/general/%D8%AA%D8%AB%D8%A8%D9%8A%D8%AA-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D9%8A%D8%A7%D8%AA-%D8%A7%D9%84%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A9-%D9%84%D9%84%D8%A7%D9%86%D8%B7%D9%84%D8%A7%D9%82-%D9%81%D9%8A-%D8%AA%D8%B7%D9%88%D9%8A%D8%B1-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-r1671/" rel="">تثبيت البرمجيات الأساسية</a>، وتتفهم طريقة إنشاء وإدارة الملفات كما شرحناها في مقال <a href="https://academy.hsoub.com/programming/general/%D8%A7%D9%84%D8%AA%D8%B9%D8%A7%D9%85%D9%84-%D9%85%D8%B9-%D8%A7%D9%84%D9%85%D9%84%D9%81%D8%A7%D8%AA-%D9%81%D9%8A-%D8%B9%D9%85%D9%84%D9%8A%D8%A9-%D8%AA%D8%B7%D9%88%D9%8A%D8%B1-%D9%85%D9%88%D9%82%D8%B9-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-r1686/" rel="">التعامل مع الملفات</a>.
	</li>
	<li>
		تطلع على أساسيات HTML كما شرحناها في سلسلة المقالات <a href="https://academy.hsoub.com/programming/html/%D8%AA%D8%B9%D8%B1%D9%81-%D8%B9%D9%84%D9%89-%D9%84%D8%BA%D8%A9-html-r1752/" rel="">مدخل إلى HTML</a>.
	</li>
	<li>
		تتفهم أساسيات CSS كما شرحناها في سلسلة المقالات <a href="https://academy.hsoub.com/programming/css/%D8%AA%D8%B9%D8%B1%D9%81-%D8%B9%D9%84%D9%89-css-r2000/" rel="">خطواتك الأولى في CSS</a>.
	</li>
</ol>

<h2 id="">
	الأحجام الطبيعية أو الفعلية للأشياء
</h2>

<p>
	تمتلك <a href="https://academy.hsoub.com/programming/html/%D8%A8%D8%B9%D8%B6-%D8%A7%D9%84%D8%B9%D9%86%D8%A7%D8%B5%D8%B1-%D9%88%D8%A7%D9%84%D9%85%D9%81%D8%A7%D9%87%D9%8A%D9%85-%D8%A7%D9%84%D9%85%D9%87%D9%85%D8%A9-%D9%81%D9%8A-%D9%84%D8%BA%D8%A9-html-r1895/" rel="">عناصر HTML</a> أحجام طبيعية تأخذها قبل أن تؤثر فيها <a href="https://academy.hsoub.com/programming/html/html-%D9%88-css-%D9%84%D9%84%D9%85%D8%A8%D8%AA%D8%AF%D8%A6%D9%8A%D9%86-%D9%85%D9%82%D8%AF%D9%85%D8%A9-%D8%A5%D9%84%D9%89-%D8%AA%D9%86%D8%B3%D9%8A%D9%82%D8%A7%D8%AA-css-r272/" rel="">تنسيقات CSS</a>، وكمثال مباشر على ذلك هو عنصر الصورة، إذ يحتوي ملف الصورة بطبيعته على معلومات عن حجم الصورة، والتي تُدعى باسم الحجم الفعلي intrinsic size، وتتحدد من قبل الصورة نفسها وليس من قبل أي تنسيق يُطبق لاحقًا عليها.
</p>

<p>
	عندما نضع هذه الصورة ضمن صفحة دون أن نغير بارتفاعها أو حيّزها width من خلال استخدام سمات العنصر <code>&lt;img&gt;</code> أو باستخدام خاصيات CSS، ستُعرض الصورة باستخدام حجمها الفعلي. وضعنا حول الصورة في المثال التالي إطارًا كي تقدّر حجم الصورة كما يعرّفها ملف الصورة:
</p>

<p style="text-align: center;">
	<iframe height="550" loading="lazy" src="https://mdn.github.io/css-examples/learn/sizing/intrinsic-image.html" style="box-sizing: content-box; border: 1px solid var(--border-primary); max-width: 700px; width: calc((100% - 2rem) - 2px); background: rgb(255, 255, 255); border-radius: var(--elem-radius); padding: 1rem;" width="100%"></iframe>
</p>

<p>
	من ناحية أخرى، لا يمتلك العنصر <code>&lt;div&gt;</code> الفارغ بنفسه أية أحجام، فلو أضفنا هذا العنصر إلى <a href="https://academy.hsoub.com/programming/html/html-%D9%88-css-%D9%84%D9%84%D9%85%D8%A8%D8%AA%D8%AF%D8%A6%D9%8A%D9%86-%D9%83%D9%8A%D9%81-%D8%AA%D8%B5%D9%85%D9%85-%D8%A3%D9%88%D9%84-%D8%B5%D9%81%D8%AD%D8%A9-%D9%88%D9%8A%D8%A8-%D9%84%D9%83-r242/" rel="">صفحة HTML</a> دون أي محتوى ضمنه ثم وضعنا حوله إطارًا كما فعلنا مع الصورة، فما ستلاحظه هو مجرد خط ضمن الصفحة. هذا الخط هو الإطار المنكمش للعنصر، فلا يوجد محتوى لتتميز حواف الإطار، أما لماذا امتد إطار العنصر على كامل عرض الصفحة، فالسبب أنه عنصر كتلي أي أنه يقع على سطر مستقل ويحتل كامل مساحة هذا السطر. ليس لهذا العنصر في مثالنا ارتفاع (أو بعد وفق اتجاه الكتلة) لعدم وجود أي محتوى ضمنه.
</p>

<p style="text-align: center;">
	<iframe height="430" loading="lazy" src="https://mdn.github.io/css-examples/learn/sizing/intrinsic-text.html" style="box-sizing: content-box; border: 1px solid var(--border-primary); max-width: 700px; width: calc((100% - 2rem) - 2px); background: rgb(255, 255, 255); border-radius: var(--elem-radius); padding: 1rem;" width="100%"></iframe>
</p>

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

<h2 id="-1">
	ضبط حجم عنصر على قيمة محددة
</h2>

<p>
	يمكن طبعًا إعطاء أي عنصر ضمن تصميمنا أحجامًا محددةً، وعندها يُشار إلى هذه الحجام أنها <strong>أحجام خارجية extrinsic size</strong> (عندها لا بد أن يتلائم المحتوى مع حجم العنصر). لو أخذنا العنصر <code>&lt;div&gt;</code> في مثالنا السابق وضبطنا ارتفاعه <a href="https://wiki.hsoub.com/CSS/height" rel="external"><code>height</code></a> وحيّزه <a href="https://wiki.hsoub.com/CSS/width" rel="external"><code>width</code></a>، سيأخذ تمامًا هذه الأحجام أيًا يكن حجم المحتوى الذي سيوضع ضمنه. وقد أشرنا في مقال "<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%B7%D9%81%D8%AD%D8%A7%D9%86-%D8%A7%D9%84%D9%85%D8%AD%D8%AA%D9%88%D9%89-%D8%AE%D8%A7%D8%B1%D8%AC-%D8%B5%D9%86%D8%AF%D9%88%D9%82-%D8%A7%D9%84%D8%B9%D9%86%D8%B5%D8%B1-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-css-r2160/" rel="">التعامل مع طفحان المحتوى خارج صندوق العنصر</a>" أن ضبط ارتفاع العنصر سيسبب طفحان المحتوى إن لم تكن أحجام صندوق العنصر قادرة على استيعاب كامل المحتوى.
</p>

<p style="text-align: center;">
	<iframe height="590" loading="lazy" src="https://mdn.github.io/css-examples/learn/sizing/height.html" style="box-sizing: content-box; border: 1px solid var(--border-primary); max-width: 700px; width: calc((100% - 2rem) - 2px); background: rgb(255, 255, 255); border-radius: var(--elem-radius); padding: 1rem;" width="100%"></iframe>
</p>

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

<h3 id="-2">
	استخدام النسب المئوية
</h3>

<p>
	تعمل النسب المئوية في كثيرٍ من الأحيان كما تعمل وحدات الطول، ورأينا في مقال "<a href="https://academy.hsoub.com/programming/css/%D9%88%D8%AD%D8%AF%D8%A7%D8%AA-%D8%A7%D9%84%D9%82%D9%8A%D8%A7%D8%B3-%D9%88%D8%A7%D9%84%D9%82%D9%8A%D9%85-%D9%81%D9%8A-css-r2161/" rel="">وحدات القياس والقيم في CSS</a>" أنه بالإمكان استبدال أحدهما بالآخر. عليك عند استخدام النسب المئوية أن تعرف أنها نسبة من شيء ما، ففي حالة صندوق ضمن آخر مثلًا وعندما تحدد حيّز الصندوق الداخلي (الصندوق الابن) كنسبة مئوية فهي نسبة مئوية من حيّز الصندوق الأب.
</p>

<p style="text-align: center;">
	<iframe height="440" loading="lazy" src="https://mdn.github.io/css-examples/learn/sizing/percent-width.html" style="box-sizing: content-box; border: 1px solid var(--border-primary); max-width: 700px; width: calc((100% - 2rem) - 2px); background: rgb(255, 255, 255); border-radius: var(--elem-radius); padding: 1rem;" width="100%"></iframe>
</p>

<p>
	والسبب في ذلك أن النسب المئوية مأخوذةً نسبةً إلى أبعاد الكتلة الحاوية للعنصر؛ فإذا لم نستخدم النسبة المئوية لضبط حيّز العنصر <code>&lt;div&gt;</code> في المثال السابق، فسيشغل 100% من المساحة المتاحة له كونه عنصر كتلي؛ بينما سيشغل مقدارًا محددًا من تلك المساحة إذا حددنا حيّزه بنسبة مئوية منها.
</p>

<h3 id="-3">
	تحديد الهوامش والحشوة بنسب مئوية
</h3>

<p>
	قد تلاحظ سلوكًا غريبًا عند تحديد قيم الهوامش والحشوات بنسب مئوية. نعرض في المثال التالي صندوقًا يضم محتوًى وقد حددنا هامش <a href="https://wiki.hsoub.com/CSS/margin" rel="external"><code>margin</code></a> هذا المحتوى ومقدار الحشوة <a href="https://wiki.hsoub.com/CSS/padding" rel="external"><code>padding</code></a> بالقيمة 10%. لاحظ أن مقدار الحشوة والهامش في الأعلى والأسفل سيعادل مقدار الهامش على اليمين واليسار.
</p>

<p style="text-align: center;">
	<iframe height="740" loading="lazy" src="https://mdn.github.io/css-examples/learn/sizing/percent-mp.html" style="box-sizing: content-box; border: 1px solid var(--border-primary); max-width: 700px; width: calc((100% - 2rem) - 2px); background: rgb(255, 255, 255); border-radius: var(--elem-radius); padding: 1rem;" width="100%"></iframe>
</p>

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

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

<h2 id="maxmin">
	الأحجام باستخدام البادئتان max و min
</h2>

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

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

<p style="text-align: center;">
	<iframe height="690" loading="lazy" src="https://mdn.github.io/css-examples/learn/sizing/min-height.html" style="box-sizing: content-box; border: 1px solid var(--border-primary); max-width: 700px; width: calc((100% - 2rem) - 2px); background: rgb(255, 255, 255); border-radius: var(--elem-radius); padding: 1rem;" width="100%"></iframe>
</p>

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

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

<p>
	استخدمنا في مثالنا التالي الصورة نفسها ثلاث مرات؛ إذ ضُبط حيّز الأولى على <code>width: 100%</code> ووضعت ضمن حاوية أكبر حيّزًا منها وبالتالي تتمدد لتغطي مساحة الحاوية تمامًا؛ وضبط حيّز الثانية ليكون <code>max-width: 100%</code> في نفس الحاوية لكن الصورة لم تتمدد هذه المرة لتشغل مساحة الحاوية؛ أما في الصورة الثالثة فقد ضُبط حيّزها على <code>max-width: 100%</code> ووضعت في حاوية أقل حيّزًا منها فانكمشت الصورة لتتناسب مع حيّز الحاوية.
</p>

<p style="text-align: center;">
	<iframe height="780" loading="lazy" src="https://mdn.github.io/css-examples/learn/sizing/max-width.html" style="box-sizing: content-box; border: 1px solid var(--border-primary); max-width: 700px; width: calc((100% - 2rem) - 2px); background: rgb(255, 255, 255); border-radius: var(--elem-radius); padding: 1rem;" width="100%"></iframe>
</p>

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

<h2 id="-4">
	وحدات قياس نافذة العرض
</h2>

<p>
	تُعرّف نافذة العرض viewport بأنها المساحة المرئية من الصفحة ضمن متصفحك الذي تستخدمه لعرض الصفحة. لنافذة العرض أيضًا حجم، ويوجد في CSS وحدات متعلقة بنافذة العرض، مثل <code>vw</code> وهي وحدة لحيّز نافذة العرض و <code>vh</code> من أجل ارتفاع نافذة العرض.
</p>

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

<p>
	يعرض المثال التالي صندوقًا أبعاده 20vh و 20vw. يضم الصندوق الحرف <code>A</code> وقد ضُبط حجم الخط <a href="https://wiki.hsoub.com/CSS/font-size" rel="external"><code>font-size</code></a> داخل الصندوق على 10vh.
</p>

<p style="text-align: center;">
	<iframe height="510" loading="lazy" src="https://mdn.github.io/css-examples/learn/sizing/vw-vh.html" style="box-sizing: content-box; border: 1px solid var(--border-primary); max-width: 700px; width: calc((100% - 2rem) - 2px); background: rgb(255, 255, 255); border-radius: var(--elem-radius); padding: 1rem;" width="100%"></iframe>
</p>

<p>
	إذا غيّرت قيم <code>vh</code> و <code>vw</code> سيغيّر ذلك حجم الصندوق أو حجم الخط، وسيؤدي تغيير حجم نافذة العرض إلى تغيير حجم الصندوق وحجم خط الكتابة أيضًا، لأن حجمه مقاسٌ بالنسبة إلى نافذة العرض. حتى ترى التغييرات التي ذكرناها لا بد من عرض الشيفرة السابقة ضمن نافذة جديدة لمتصفحك كي تتمكن من إعادة تحجيم المتصفح. يمكنك أيضًا استعراض <a href="https://mdn.github.io/css-examples/learn/sizing/vw-vh.html" rel="external nofollow">المثال التجريبي الموجود على غيت-هب</a> من خلال متصفحك ثم غيّر حجم نافذة المتصفح لترى ما الذي سيحدث.
</p>

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

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

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

<p>
	ترجمة -وبتصرف- للمقال <a href="https://developer.mozilla.org/en-US/docs/Learn/CSS/Building_blocks/Sizing_items_in_CSS" rel="external nofollow">Sizing items in CSS</a>.
</p>

<h2 id="-6">
	اقرأ أيضًا
</h2>

<ul>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D9%88%D8%AD%D8%AF%D8%A7%D8%AA-%D8%A7%D9%84%D9%82%D9%8A%D8%A7%D8%B3-%D9%88%D8%A7%D9%84%D9%82%D9%8A%D9%85-%D9%81%D9%8A-css-r2161/" rel="">وحدات القياس والقيم في CSS</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%AA%D8%B9%D8%AF%D9%8A%D9%84-%D8%AD%D8%AC%D9%85-%D8%B9%D9%86%D8%B5%D8%B1-html-%D9%88%D8%A7%D9%84%D9%85%D8%B3%D8%A7%D8%AD%D8%A9-%D8%A7%D9%84%D9%85%D8%AD%D9%8A%D8%B7%D8%A9-%D8%A8%D9%87-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-css-r1911/" rel="">كيفية تعديل حجم عنصر HTML والمساحة المحيطة به باستخدام CSS</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D8%A7%D9%84%D8%AA%D9%86%D8%B3%D9%8A%D9%82%D8%A7%D8%AA-%D8%A7%D9%84%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A9-%D9%84%D9%84%D8%B9%D9%86%D8%A7%D8%B5%D8%B1-%D9%81%D9%8A-css-r1054/" rel="">التنسيقات الأساسية للعناصر في CSS</a>
	</li>
</ul>
]]></description><guid isPermaLink="false">2162</guid><pubDate>Thu, 30 Nov 2023 13:01:01 +0000</pubDate></item><item><title>&#x648;&#x62D;&#x62F;&#x627;&#x62A; &#x627;&#x644;&#x642;&#x64A;&#x627;&#x633; &#x648;&#x627;&#x644;&#x642;&#x64A;&#x645; &#x641;&#x64A; CSS</title><link>https://academy.hsoub.com/programming/css/%D9%88%D8%AD%D8%AF%D8%A7%D8%AA-%D8%A7%D9%84%D9%82%D9%8A%D8%A7%D8%B3-%D9%88%D8%A7%D9%84%D9%82%D9%8A%D9%85-%D9%81%D9%8A-css-r2161/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2023_11/----CSS.png.6e06e2178f798b854d7a440eb56b24cf.png" /></p>
<p>
	تُسند إلى كل خاصية من خواص CSS قيمةٌ من نوع محدد تُعرّف مجموعة القيم التي يمكن أن تأخذها هذه الخاصية. لهذا سنتطرق في هذا المقال إلى أنواع القيم الأكثر استخدمًا إضافة إلى هذه القيم ووحدات قياسها.
</p>

<p>
	ننصحك قبل المتابعة في قراءة هذه المقال أن:
</p>

<ol>
	<li>
		تطلع على أساسيات استخدام الحاسوب وتصفح الويب.
	</li>
	<li>
		تحضّر بيئة عمل بسيطة كما تحدثنا مسبقًا في المقال <a href="https://academy.hsoub.com/programming/general/%D8%AA%D8%AB%D8%A8%D9%8A%D8%AA-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D9%8A%D8%A7%D8%AA-%D8%A7%D9%84%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A9-%D9%84%D9%84%D8%A7%D9%86%D8%B7%D9%84%D8%A7%D9%82-%D9%81%D9%8A-%D8%AA%D8%B7%D9%88%D9%8A%D8%B1-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-r1671/" rel="">تثبيت البرمجيات الأساسية</a>، وتتفهم طريقة إنشاء وإدارة الملفات كما شرحناها في مقال <a href="https://academy.hsoub.com/programming/general/%D8%A7%D9%84%D8%AA%D8%B9%D8%A7%D9%85%D9%84-%D9%85%D8%B9-%D8%A7%D9%84%D9%85%D9%84%D9%81%D8%A7%D8%AA-%D9%81%D9%8A-%D8%B9%D9%85%D9%84%D9%8A%D8%A9-%D8%AA%D8%B7%D9%88%D9%8A%D8%B1-%D9%85%D9%88%D9%82%D8%B9-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-r1686/" rel="">التعامل مع الملفات</a>.
	</li>
	<li>
		تطلع على أساسيات HTML كما شرحناها في سلسلة المقالات <a href="https://academy.hsoub.com/programming/html/%D8%AA%D8%B9%D8%B1%D9%81-%D8%B9%D9%84%D9%89-%D9%84%D8%BA%D8%A9-html-r1752/" rel="">مدخل إلى HTML</a>.
	</li>
	<li>
		تتفهم أساسيات CSS كما شرحناها في سلسلة المقالات <a href="https://academy.hsoub.com/programming/css/%D8%AA%D8%B9%D8%B1%D9%81-%D8%B9%D9%84%D9%89-css-r2000/" rel="">خطواتك الأولى في CSS</a>.
	</li>
</ol>

<h2 id="css">
	ما هي قيم CSS
</h2>

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

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

<p>
	<strong>ملاحظة</strong>: تُستخدم الأقواس الزاوية لتمييز أنواع القيم في CSS عن الخاصيات (تمييز الخاصية <code>color</code> عن نوع القيمة <code>&lt;color&gt;</code>). لهذا، قد تختلط عليك هذه الأنواع مع <a href="https://academy.hsoub.com/programming/html/%D8%A8%D8%B9%D8%B6-%D8%A7%D9%84%D8%B9%D9%86%D8%A7%D8%B5%D8%B1-%D9%88%D8%A7%D9%84%D9%85%D9%81%D8%A7%D9%87%D9%8A%D9%85-%D8%A7%D9%84%D9%85%D9%87%D9%85%D8%A9-%D9%81%D9%8A-%D9%84%D8%BA%D8%A9-html-r1895/" rel="">عناصر HTML</a> أيضًا، فكلاهما يستخدم الأقواس الزاوية، لكن هذا الأمر مستبعد الحدوث لأنهما تستخدمان في سياقيين مختلفين.
</p>

<p>
	ضبطنا في المثال التالي لون العنوان باستخدام كلمة مفتاحية وضبطنا لون الخلفية باستخدام الدالة <code>()rgb</code>:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_5761_8" style=""><span class="pln">h1 </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">color</span><span class="pun">:</span><span class="pln"> black</span><span class="pun">;</span><span class="pln">
  </span><span class="kwd">background-color</span><span class="pun">:</span><span class="pln"> </span><span class="kwd">rgb</span><span class="pun">(</span><span class="lit">197</span><span class="pun">,</span><span class="pln"> </span><span class="lit">93</span><span class="pun">,</span><span class="pln"> </span><span class="lit">161</span><span class="pun">);</span><span class="pln">
</span><span class="pun">}</span></pre>

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

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

<h2 id="">
	الأرقام والأعداد والنسب المئوية
</h2>

<p>
	هنالك العديد من القيم العددية التي قد تستخدمها في CSS، وإليك أنواع هذه القيم العددية:
</p>

<table>
	<thead>
		<tr>
			<th style="text-align:right;">
				نوع القيمة
			</th>
			<th style="text-align:right;">
				الوصف
			</th>
		</tr>
	</thead>
	<tbody>
		<tr>
			<td style="text-align:right;">
				<code>&lt;integer&gt;</code>
			</td>
			<td style="text-align:right;">
				وهو عدد كامل مثل <code>1024</code> أو <code>55-</code>.
			</td>
		</tr>
		<tr>
			<td style="text-align:right;">
				<code>&lt;number&gt;</code>
			</td>
			<td style="text-align:right;">
				ويمثل عددًا عشريًا مع أو بدون مكوّن عشري مثل <code>0.255</code> أو <code>128</code> أو <code>1.2-</code>.
			</td>
		</tr>
		<tr>
			<td style="text-align:right;">
				<code>&lt;dimension&gt;</code>
			</td>
			<td style="text-align:right;">
				وهو عدد عشري <code>&lt;number&gt;</code> ترتبط به وحدة قياس مثل <code>45deg</code> أو <code>5s</code> أو <code>10px</code>. يُعد هذا النوع مظلة تضم الأنواع التالية: <code>&lt;length&gt;</code> و <code>&lt;angle&gt;</code> و <code>&lt;time&gt;</code> و <code>&lt;resolution&gt;</code>.
			</td>
		</tr>
		<tr>
			<td style="text-align:right;">
				<code>&lt;percentage&gt;</code>
			</td>
			<td style="text-align:right;">
				يمثّل هذا النوع جزءًا من قيمة أخرى، فالقيمة <code>%50</code> مثلًا تمثل نصف قيمة أخرى. تتعلق القيم المئوية دائمًا بكميات أخرى كأن تكون قيمة ارتفاع عنصر نسبة مئوية من ارتفاع العنصر الأب.
			</td>
		</tr>
	</tbody>
</table>

<h3 id="-1">
	الأطوال
</h3>

<p>
	أكثر أنواع القيم العددية التي قد تصادفك هي الأطوال <a href="https://wiki.hsoub.com/CSS/length" rel="external"><code>&lt;length&gt;</code></a> مثل <code>10px</code> أو <code>30em</code>، وهنالك نوعان من الأطوال في CSS، نسبية ومطلقة، لهذا من المهم أن تعرف الفرق بينها لكي تتفهم أحجام الأشياء.
</p>

<h4 id="-2">
	وحدات القياس المطلقة للأطوال
</h4>

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

<table>
	<thead>
		<tr>
			<th style="text-align:center;">
				وحدة القياس
			</th>
			<th style="text-align:center;">
				الاسم
			</th>
			<th style="text-align:center;">
				مقابله في وحدات قياس أخرى
			</th>
		</tr>
	</thead>
	<tbody>
		<tr>
			<td style="text-align:center;">
				<code>cm</code>
			</td>
			<td style="text-align:center;">
				سنتيمتر
			</td>
			<td style="text-align:center;">
				1cm = 37.8px = 25.2/64in
			</td>
		</tr>
		<tr>
			<td style="text-align:center;">
				<code>mm</code>
			</td>
			<td style="text-align:center;">
				ميليمتر
			</td>
			<td style="text-align:center;">
				1mm = 1/10th of 1cm
			</td>
		</tr>
		<tr>
			<td style="text-align:center;">
				<code>Q</code>
			</td>
			<td style="text-align:center;">
				ربع ميليمتر
			</td>
			<td style="text-align:center;">
				1Q = 1/40th of 1cm
			</td>
		</tr>
		<tr>
			<td style="text-align:center;">
				<code>in</code>
			</td>
			<td style="text-align:center;">
				إنش
			</td>
			<td style="text-align:center;">
				1in = 2.54cm = 96px
			</td>
		</tr>
		<tr>
			<td style="text-align:center;">
				<code>pc</code>
			</td>
			<td style="text-align:center;">
				بيكا
			</td>
			<td style="text-align:center;">
				1pc = 1/6th of 1in
			</td>
		</tr>
		<tr>
			<td style="text-align:center;">
				<code>pt</code>
			</td>
			<td style="text-align:center;">
				نقطة
			</td>
			<td style="text-align:center;">
				1pt = 1/72nd of 1in
			</td>
		</tr>
		<tr>
			<td style="text-align:center;">
				<code>px</code>
			</td>
			<td style="text-align:center;">
				بكسل
			</td>
			<td style="text-align:center;">
				1px = 1/96th of 1in
			</td>
		</tr>
	</tbody>
</table>

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

<h4 id="-3">
	وحدات الطول النسبية
</h4>

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

<table>
	<thead>
		<tr>
			<th style="text-align:center;">
				وحدة القياس
			</th>
			<th style="text-align:right;">
				بالنسبة إلى:
			</th>
		</tr>
	</thead>
	<tbody>
		<tr>
			<td style="text-align:center;">
				<code>em</code>
			</td>
			<td style="text-align:right;">
				حجم خط الكتابة للعنصر الأب في حال كانت الخاصية تتعلق بخطوط الكتابة مثل <code>font-size</code>، أو أبعاد العنصر الأب في بقية الخاصيات، مثل <code>width</code>.
			</td>
		</tr>
		<tr>
			<td style="text-align:center;">
				<code>ex</code>
			</td>
			<td style="text-align:right;">
				ارتفاع المحرف "x" في الخط الذي يستخدمه العنصر.
			</td>
		</tr>
		<tr>
			<td style="text-align:center;">
				<code>ch</code>
			</td>
			<td style="text-align:right;">
				حيّز width المحرف "0" في خط الكتابة المستخدم.
			</td>
		</tr>
		<tr>
			<td style="text-align:center;">
				<code>rem</code>
			</td>
			<td style="text-align:right;">
				حجم خط الكتابة في العنصر الجذري.
			</td>
		</tr>
		<tr>
			<td style="text-align:center;">
				<code>lh</code>
			</td>
			<td style="text-align:right;">
				ارتفاع السطر في العنصر.
			</td>
		</tr>
		<tr>
			<td style="text-align:center;">
				<code>rlh</code>
			</td>
			<td style="text-align:right;">
				ارتفاع السطر في العنصر الجذري، وعندما يُستخدم لضبط الخاصيتين <code>font-size</code> أو <code>line-height</code>، سيشير إلى القيمة الأساسية للخاصية.
			</td>
		</tr>
		<tr>
			<td style="text-align:center;">
				<code>vw</code>
			</td>
			<td style="text-align:right;">
				1% من حيّز شاشة العرض (نسبة مئوية).
			</td>
		</tr>
		<tr>
			<td style="text-align:center;">
				<code>vh</code>
			</td>
			<td style="text-align:right;">
				1% من ارتفاع شاشة العرض (نسبة مئوية).
			</td>
		</tr>
		<tr>
			<td style="text-align:center;">
				<code>vmin</code>
			</td>
			<td style="text-align:right;">
				1% من أصغر أبعاد شاشة العرض (نسبة مئوية).
			</td>
		</tr>
		<tr>
			<td style="text-align:center;">
				<code>vmax</code>
			</td>
			<td style="text-align:right;">
				1% من أكبر أبعاد شاشة العرض (نسبة مئوية).
			</td>
		</tr>
		<tr>
			<td style="text-align:center;">
				<code>vb</code>
			</td>
			<td style="text-align:right;">
				1% من قياس الكتلة التي تحتوي العنصر وفق اتجاه الكتلة للعنصر الجذري (نسبة مئوية).
			</td>
		</tr>
		<tr>
			<td style="text-align:center;">
				<code>vi</code>
			</td>
			<td style="text-align:right;">
				1% من قياس الكتلة التي تحتوي العنصر وفق اتجاه السطر للعنصر الجذري (نسبة مئوية).
			</td>
		</tr>
		<tr>
			<td style="text-align:center;">
				<code>svw, svh</code>
			</td>
			<td style="text-align:right;">
				1% من حيّز وارتفاع أصغر شاشة عرض (نسبة مئوية).
			</td>
		</tr>
		<tr>
			<td style="text-align:center;">
				<code>lvw, lvh</code>
			</td>
			<td style="text-align:right;">
				1% من حيّز وارتفاع أكبر شاشة عرض (نسبة مئوية).
			</td>
		</tr>
		<tr>
			<td style="text-align:center;">
				<code>dvw, dvh</code>
			</td>
			<td style="text-align:right;">
				1% من حيّز وارتفاع شاشة عرض ديناميكية (نسبة مئوية).
			</td>
		</tr>
	</tbody>
</table>

<h4 id="-4">
	مثال تطبيقي
</h4>

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

<p>
	ضُبط حيّز الصندوق الثاني بوحدة القياس <code>vm</code> (حيّز شاشة العرض)؛ إذ تقيس هذه الوحدة حيّز العنصر بالنسبة إلى حيّز شاشة العرض، فعندما نقول 10vw، فهذا يعني أن حيّز الصندوق هو 10 بالمئة من حيّز شاشة العرض (الشاشة التي تعرض عليها الصفحة أو نافذة المتصفح)، وإذا غيّرت حيّز نافذة المتصفح سيتغير حيّز الصندوق. قد لا تتمكن من رؤية ما يحدث هنا لأن الشيفرة مدرجة ضمن هذه الصفحة باستخدام "إطار HTML"
</p>

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

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

<p style="text-align: center;">
	<iframe height="910" loading="lazy" src="https://mdn.github.io/css-examples/learn/values-units/length.html" style="box-sizing: content-box; border: 1px solid var(--border-primary); max-width: 700px; margin: auto; width: calc((100% - 2rem) - 2px); background: rgb(255, 255, 255); border-radius: var(--elem-radius); padding: 1rem;" width="100%"></iframe>
</p>

<h4 id="remem">
	وحدة القياس rem ووحدة القياس em
</h4>

<p>
	أكثر ما قد تصادفه من وحدات الأطوال النسبية هما الوحدتان <code>em</code> و <code>rem</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> و<a href="https://academy.hsoub.com/programming/css/%D8%A7%D9%84%D8%AA%D8%AD%D9%83%D9%85-%D9%81%D9%8A-%D8%AA%D8%AE%D8%B7%D9%8A%D8%B7-%D8%A7%D9%84%D8%B5%D9%81%D8%AD%D8%A9-%D9%88%D8%B6%D8%A8%D8%B7-%D9%85%D8%AD%D8%A7%D8%B0%D8%A7%D8%A9-%D8%A7%D9%84%D8%B9%D9%86%D8%A7%D8%B5%D8%B1-%D9%81%D9%8A-css-r1050/" rel="">تخطيطات CSS</a>.
</p>

<p>
	تمثّل شيفرة HTML التي ستراها تاليًا مجموعةً من القوائم المتداخلة (ثلاث قوائم) وستتكرر هذه القوائم في شيفرة كلا المثالين، والفرق الوحيد بين المثالين أن الأول يستخدم وحدة <code>em</code> والآخر وحدة <code>rem</code>.
</p>

<p>
	نبدأ تحليل المثالين باستخدام خط حجمه 16px للعنصر <code>&lt;html&gt;</code> ودعونا نتذكر أن:
</p>

<ul>
	<li>
		<p>
			<strong>em</strong>: هي وحدة قياس مأخوذة على أنها نسبةٌ من حجم خط العنصر الأب، وُتطبق مع الخاصيات التي تضبط خط الكتابة، مثل حجم خط الكتابة. في مثالنا: تأخذ العناصر <code>&lt;li&gt;</code> التي تمتلك الصنف <code>ems</code> قيمًا أبعادها بالنسبة إلى حجم خط الكتابة للعنصر الأب وبالتالي سيزداد حجم العناصر في القوائم المتداخلة تدريجيًا لأن كل منها يأخذ الحجم 1.3em، أي سيكون حجم كل قائمة أكبر من حجم القائمة الأعلى (القائمة الأب) بمقدار 1.3مرة.
		</p>
	</li>
	<li>
		<p>
			<strong>rem</strong>: هي وحدة قياس مأخوذة على أنها نسبة من حجم خط العنصر الجذري (مأخوذة من <strong>r</strong>oot <strong>em</strong>)، وهكذا ستأخذ عناصر القائمة <code>&lt;li&gt;</code> التي تمتلك الصنف <code>rems</code> قيمًا أبعادها بالنسبة إلى حجم خط الكتابة للعنصر الجذري وهو <code>&lt;html&gt;</code>، وبالتالي لن تتغير أحجام عناصر القوائم المتتالية لأن أبعاد عناصرها ستبقى كما هي، لكن إذا غيّرت حجم خط الكتابة <code>font-size</code> للعنصر الجذري <code>&lt;html&gt;</code> ستتغير أبعاد جميع عناصر القوائم التي تأخذ الصنفين <code>ems</code> و <code>rems</code> في المثال وفقًا لتغير حجم خط كتابة العنصر الجذري.
		</p>
	</li>
</ul>

<p style="text-align: center;">
	<iframe height="1140" loading="lazy" src="https://mdn.github.io/css-examples/learn/values-units/em-rem.html" style="box-sizing: content-box; border: 1px solid var(--border-primary); max-width: 700px; margin: auto; width: calc((100% - 2rem) - 2px); background: rgb(255, 255, 255); border-radius: var(--elem-radius); padding: 1rem;" width="100%"></iframe>
</p>

<h3 id="-5">
	النسبة المئوية
</h3>

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

<p>
	يعرض المثال التالي أربعة صناديق ضُبط حيّز الأول بالبكسل 200px وحيّز الثاني على أنه نسبة مئوية 40%، وتتكرر العملية بالنسبة للصندوقين التاليين. يمتلك الصندوقان اللذان قُدر حيّزهما بنسبة مئوية الصنف <code>percent</code>، ويمتلك الصندوقان المقدران بالبكسل الصنف <code>px</code>، ويتواجد الصندوقان الأخيران ضمن ضمن حاوية حيّزها 400px.
</p>

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

<p>
	حاول أن تغيّر اتساع الحاوية أو النسب المئوية وراقب ما سيحدث.
</p>

<p style="text-align: center;">
	<iframe height="910" loading="lazy" src="https://mdn.github.io/css-examples/learn/values-units/percentage.html" style="box-sizing: content-box; border: 1px solid var(--border-primary); max-width: 700px; margin: auto; width: calc((100% - 2rem) - 2px); background: rgb(255, 255, 255); border-radius: var(--elem-radius); padding: 1rem;" width="100%"></iframe>
</p>

<p>
	في مثالنا التالي ضُبط حجم خط الكتابة بالنسبة المئوية، إذ يصبح حجم كل عنصر قائمة 80% وبالتالي سيكون حجم عناصر القوائم المتتالية أصغر كل مرة لأن حجم كل منها هو 80% من حجم عناصر القائمة الأعلى (العنصر الأب):
</p>

<p style="text-align: center;">
	<iframe height="720" loading="lazy" src="https://mdn.github.io/css-examples/learn/values-units/percentage-fonts.html" style="box-sizing: content-box; border: 1px solid var(--border-primary); max-width: 700px; margin: auto; width: calc((100% - 2rem) - 2px); background: rgb(255, 255, 255); border-radius: var(--elem-radius); padding: 1rem;" width="100%"></iframe>
</p>

<p>
	على الرغم من وجود خاصيات تقبل الأطوال وتقبل النسب المئوية، لكن هنالك بعض الخاصيات التي لا تأخذ سوى الأطوال، لهذا عليك التأكد من كون الخاصية تأخذ قيمًا من النوع <code>&lt;length&gt;</code> أو <code>&lt;percentage&gt;</code> أو كلاهما، فالخاصية التي لا تقبل سوى <code>&lt;length&gt;</code>لا يمكن أن تقبل <code>&lt;percentage&gt;</code>.
</p>

<h3 id="-6">
	الأعداد
</h3>

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

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

<p style="text-align: center;">
	<iframe height="550" loading="lazy" src="https://mdn.github.io/css-examples/learn/values-units/opacity.html" style="box-sizing: content-box; border: 1px solid var(--border-primary); max-width: 700px; margin: auto; width: calc((100% - 2rem) - 2px); background: rgb(255, 255, 255); border-radius: var(--elem-radius); padding: 1rem;" width="100%"></iframe>
</p>

<p>
	<strong>ملاحظة</strong>: عندما تستخدم قيمًا عدديةً في CSS، لا ينبغي أن تُحاط القيمة بإشارتي تنصيص.
</p>

<h2 id="-7">
	الألوان
</h2>

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

<p>
	يدعم نظام اللون المعياري المتاح في الحواسيب الحديثة ألوان بدقة 24-بت والتي تسمح بعرض حوالي 16.7 مليون لون مختلف من خلال تشكيل أي لون انطلاقًا من 256 قيمة مختلفة للون الأحمر مع 256 قيمة مختلفة للون الأزرق و 256 قيمة مختلفة للون الأزرق (256x256x256 =16,777,216).لنلق نظرةً الآن على بعض الطرق المستخدمة في تحديد الألوان في CSS.
</p>

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

<h3 id="-8">
	الكلمات المفتاحية للألوان
</h3>

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

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

<p style="text-align: center;">
	<iframe height="760" loading="lazy" src="https://mdn.github.io/css-examples/learn/values-units/color-keywords.html" style="box-sizing: content-box; border: 1px solid var(--border-primary); max-width: 700px; margin: auto; width: calc((100% - 2rem) - 2px); background: rgb(255, 255, 255); border-radius: var(--elem-radius); padding: 1rem;" width="100%"></iframe>
</p>

<h3 id="rgb">
	قيم الألوان RGB الست عشرية
</h3>

<p>
	سترى أيضًا طريقة اختيار الألوان باستخدام الشيفرة الست عشرية، إذ تتضمن كل قيمة ست عشرية الرمز <code>#</code> متبوعًا بستة أرقام ست عشرية، ويمكن لكل رقم منها أن يأخذ قيمة من إحدى القيم الخمس عشرة التالية "0123456789abcdef". يمثّل كل رقمين متتاليين قناةً لونية، الأولى للون الأحمر ثم الأخضر ثم الأزرق، ويساعدك هذين الرقمين على تمثيل أي قيمة لونية من أصل 256 قيمة لونية لكل قناة.
</p>

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

<p style="text-align: center;">
	<iframe height="760" loading="lazy" src="https://mdn.github.io/css-examples/learn/values-units/color-hex.html" style="box-sizing: content-box; border: 1px solid var(--border-primary); max-width: 700px; margin: auto; width: calc((100% - 2rem) - 2px); background: rgb(255, 255, 255); border-radius: var(--elem-radius); padding: 1rem;" width="100%"></iframe>
</p>

<p>
	حاول تغيير قيم الأرقام في كل شيفرة لونية ست عشرية ولاحظ تغير الألوان.
</p>

<h3 id="rgbrgba">
	قيم RGB و RGBA
</h3>

<p>
	من الطرق الأخرى في انتقاء الألوان هو أسلوب RGB وهو اختصار مكون من أوائل حروف الكلمات (<strong>R</strong>ed<strong>G</strong>reen<strong>B</strong>lue). تُستخدم في هذه الطريقة الدالة <code>()rgb</code> التي تقبل ثلاثة معاملات تمثل أقنية اللون الأحمر والأخضر والأزرق بصورةٍ مشابهة لطريقة القيم الست عشرية، ويتمثل الفرق بين هذه الطريقة وطريقة القيم الست عشرية بعدم الحاجة إلى رقمين ست عشريين لتمثيل القناة بل نضع رقمًا بين 0 و255، وهذه طريقة أسهل نوعًا ما.
</p>

<p>
	استخدمنا في المثال التالي طريقة RGB لتمثيل الألوان التي عرضناها في المثال السابق:
</p>

<p style="text-align: center;">
	<iframe height="760" loading="lazy" src="https://mdn.github.io/css-examples/learn/values-units/color-rgb.html" style="box-sizing: content-box; border: 1px solid var(--border-primary); max-width: 700px; margin: auto; width: calc((100% - 2rem) - 2px); background: rgb(255, 255, 255); border-radius: var(--elem-radius); padding: 1rem;" width="100%"></iframe>
</p>

<p>
	يمكن أيضًا استخدام نظام RGBA الذي يعمل تمامًا مثل RGB لكنه يضم معاملًا رابعًا يُمثّل ما يُعرف بالقناة ألفا التي تتحكم بقتامة اللون. يأخذ المعامل ألفا أي قيمة عشرية بين 0 (شفافية كاملة) و 1 (قتامة كاملة).
</p>

<p>
	<strong>ملاحظة</strong>: ضبط القتامة باستخدام دالة RGBA له ميزةٌ فريدةٌ مقارنةً بضبط القتامة من خلال الخاصية <a href="https://wiki.hsoub.com/CSS/opacity" rel="external"><code>opacity</code></a>؛ إذ يجعل استخدام الخاصية <a href="https://wiki.hsoub.com/CSS/opacity" rel="external"><code>opacity</code></a> لضبط قتامة عنصر كل ما بداخله بنفس درجة القتامة؛ بينما تحدد الدالة RGBA مع المعامل ألفا قتامة اللون الذي اخترته فقط.
</p>

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

<p style="text-align: center;">
	<iframe height="840" loading="lazy" src="https://mdn.github.io/css-examples/learn/values-units/color-rgba.html" style="box-sizing: content-box; border: 1px solid var(--border-primary); max-width: 700px; margin: auto; width: calc((100% - 2rem) - 2px); background: rgb(255, 255, 255); border-radius: var(--elem-radius); padding: 1rem;" width="100%"></iframe>
</p>

<p>
	حاول أن تغير قيمة القناة ألفا في المثال السابق لتفحص طريقة تأثيرها.
</p>

<p>
	<strong>ملاحظة</strong>: لم تدعم الدالة <code>()rgb</code> في الإصدارات القديمة من CSS معامل ألفا، لذلك ينبغي عليك استخدام دالة أخرى هي <code>()rgba</code>. يمكنك حاليًا تمرير معامل ألفا إلى الدالة <code>()rgb</code>، ولكن لا تزال صيغة <code>()rgba</code> مدعومةً للتوافق مع مواقع الويب القديمة، ولها نفس سلوك الدالة <code>()rgb</code> تمامًا.
</p>

<h3 id="hslhsla">
	قيم HSL و HSLA
</h3>

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

<ul>
	<li>
		السطوع: يمثل المساحة اللونية الأساسية ويأخذ قيمةً بين 0 و 360 وهي قيمة الزاوية المقاسة على قرص اللون <a href="https://developer.mozilla.org/en-US/docs/Glossary/Color_wheel" rel="external nofollow">color wheel</a>.
	</li>
	<li>
		الإشباع: يمثل إشباع اللون ويأخذ قيمةً بين 0 (لا لون، يظهر مثل مساحة رمادية) و 100% (لون كامل).
	</li>
	<li>
		الإضاءة: يمثل إضاءة اللون ويأخذ قيمةً بين 0 (لا إضاءة ويظهر بلون أسود) و 100% (مضاء كاملًا ويظهر باللون الأبيض).
	</li>
</ul>

<p>
	لاحظ المثال السابق باستخدام نظام HSL:
</p>

<p style="text-align: center;">
	<iframe height="760" loading="lazy" src="https://mdn.github.io/css-examples/learn/values-units/color-hsl.html" style="box-sizing: content-box; border: 1px solid var(--border-primary); max-width: 700px; margin: auto; width: calc((100% - 2rem) - 2px); background: rgb(255, 255, 255); border-radius: var(--elem-radius); padding: 1rem;" width="100%"></iframe>
</p>

<p>
	وكما يوجد RGBA مقابل RGB، يوجد HSLA مقابل HSL ليضبط قناة ألفا وبالتالي ضبط القتامة. لاحظ كيف يبدو الأمر في المثال التالي بعد استبدال RGBA بنظام HSLA:
</p>

<p style="text-align: center;">
	<iframe height="840" loading="lazy" src="https://mdn.github.io/css-examples/learn/values-units/color-hsla.html" style="box-sizing: content-box; border: 1px solid var(--border-primary); max-width: 700px; margin: auto; width: calc((100% - 2rem) - 2px); background: rgb(255, 255, 255); border-radius: var(--elem-radius); padding: 1rem;" width="100%"></iframe>
</p>

<p>
	<strong>ملاحظة</strong>: لم تدعم الدالة <code>()hsl</code> في الإصدارات القديمة من CSS معامل ألفا، لذلك ينبغي عليك استخدام دالة أخرى هي <code>()hsla</code>. يمكنك حاليًا تمرير معامل ألفا إلى الدالة <code>()hsl</code>، ولكن لا تزال صيغة <code>()hsla</code> مدعومةً للتوافق مع مواقع الويب القديمة، ولها نفس سلوك الدالة <code>()hsl</code> تمامًا.
</p>

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

<h2 id="-9">
	الصور
</h2>

<p>
	تُستخدم الصيغة <code>&lt;image&gt;</code> للإشارة إلى أن الخاصية تقبل صورة قيمةً لها، سواءً كانت الصورة فعلية مصدرها ملف يُشار إليه من خلال عنوان <code>url</code> أو كانت دالة أو خلفية لونية متدرجة.
</p>

<p>
	يعرض المثال التالي استخدام صورة فعلية وخلفية لونية متدرجة من خلال ضبط قيم الخاصية <code>background-image</code>:
</p>

<p style="text-align: center;">
	<iframe height="800" loading="lazy" src="https://mdn.github.io/css-examples/learn/values-units/image.html" style="box-sizing: content-box; border: 1px solid var(--border-primary); max-width: 700px; margin: auto; width: calc((100% - 2rem) - 2px); background: rgb(255, 255, 255); border-radius: var(--elem-radius); padding: 1rem;" width="100%"></iframe>
</p>

<p>
	<strong>ملاحظة</strong>: هناك قيم أخرى للنوع <code>&lt;image&gt;</code> لكنها حديثة العهد وضعيفة الدعم من قبل المتصفحات.
</p>

<h2 id="-10">
	الموضع
</h2>

<p>
	تمثل القيم من النوع <code>&lt;position-value&gt;</code> مجموعةً من الإحداثيات الثنائية التي تُستخدم لتحديد موضع مثل موضع خلفية عنصر عندما تُستخدم مع الخاصية <a href="https://wiki.hsoub.com/CSS/background-position" rel="external"><code>background-position</code></a>. يمكن أن تأتي هذه القيم على شكل كلمات مفتاحية، مثل <code>top</code> أو <code>right</code> أو <code>left</code> أو <code>bottom</code> أو <code>center</code> وذلك لمحاذاة المحتوى إلى حدود الصندوق، يليها طول يمثل إزاحة الغرض المطلوب عن الحافة العلوية أو اليسارية للصندوق أو كلاهما.
</p>

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

<p style="text-align: center;">
	<iframe height="780" loading="lazy" src="https://mdn.github.io/css-examples/learn/values-units/position.html" style="box-sizing: content-box; border: 1px solid var(--border-primary); max-width: 700px; margin: auto; width: calc((100% - 2rem) - 2px); background: rgb(255, 255, 255); border-radius: var(--elem-radius); padding: 1rem;" width="100%"></iframe>
</p>

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

<h2 id="-11">
	النصوص والمحددات
</h2>

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

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

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

<p style="text-align: center;">
	<iframe height="580" loading="lazy" src="https://mdn.github.io/css-examples/learn/values-units/strings-idents.html" style="box-sizing: content-box; border: 1px solid var(--border-primary); max-width: 700px; margin: auto; width: calc((100% - 2rem) - 2px); background: rgb(255, 255, 255); border-radius: var(--elem-radius); padding: 1rem;" width="100%"></iframe>
</p>

<h2 id="-12">
	الدوال
</h2>

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

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

<p>
	نستخدم في مثالنا التالي الدالة <code>()calc</code> لجعل حيّز الصندوق <code>‎20% + 100px</code>. تُحسب <code>%20</code> من حيّز حاوية العنصر الأب التي بضبطها المحدد <code>wrapper.</code>، وستتغير بتغير هذا الحيّز. لا يمكن تحديد هذه القيمة سلفًا لأننا لا نعلم كم هو تحديدًا <code>%20</code> من حيّز العنصر الأب، لهذا نستخدم الدالة <code>()calc</code>:
</p>

<p style="text-align: center;">
	<iframe height="490" loading="lazy" src="https://mdn.github.io/css-examples/learn/values-units/calc.html" style="box-sizing: content-box; border: 1px solid var(--border-primary); max-width: 700px; margin: auto; width: calc((100% - 2rem) - 2px); background: rgb(255, 255, 255); border-radius: var(--elem-radius); padding: 1rem;" width="100%"></iframe>
</p>

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

<p>
	مررنا في هذا المقال سريعًا على على أكثر أنواع القيم شيوعًا ووحدات القياس التي قد تصادفها. يمكنك الاطلاع على جميع الخاصيات والقيم التي تأخذها من خلال <a href="https://academy.hsoub.com/programming/css/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%A8%D9%86%D8%A7%D8%A1-%D9%85%D9%88%D9%82%D8%B9-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-css-r1879/" rel="">صفحة CSS</a> في أكاديمية حسوب لأنك ستواجه الكثير منها عندما تتقدم في مسيرتك التعليمية.
</p>

<p>
	المفتاح الرئيسي لتذكر كل هذه الأشياء هو معرفة أن كل خاصية تقبل أنواعًا محددة من القيم، وأن لكل نوع من أنواع القيم تعريفًا يصف ماهيته وكيفية استخدام قيمه. استفد من موقع أكاديمية حسوب أو صفحة مطوري موزيللا (بالإنكليزية) لتبحث عما تريد، فعليك مثلًا تذكر أن القيم من النوع <code>&lt;imag&gt;</code> تقبل صورًا من ملف، كما تساعدك على إنشاء خلفية لونية متدرجة وهذا ما قد لا تعرفه، أو قد لا يكون أمرًا بديهيًا.
</p>

<p>
	ترجمة -وبتصرف- لمقال <a href="https://developer.mozilla.org/en-US/docs/Learn/CSS/Building_blocks/Values_and_units" rel="external nofollow">CSS values and unites</a>.
</p>

<h2 id="-14">
	اقرأ أيضًا
</h2>

<ul>
	<li>
		المقال السابق: <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%B7%D9%81%D8%AD%D8%A7%D9%86-%D8%A7%D9%84%D9%85%D8%AD%D8%AA%D9%88%D9%89-%D8%AE%D8%A7%D8%B1%D8%AC-%D8%B5%D9%86%D8%AF%D9%88%D9%82-%D8%A7%D9%84%D8%B9%D9%86%D8%B5%D8%B1-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-css-r2160/" rel="">التعامل مع طفحان المحتوى خارج صندوق العنصر باستخدام CSS</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D8%A3%D9%86%D9%88%D8%A7%D8%B9-%D9%85%D8%AD%D8%AF%D8%AF%D8%A7%D8%AA-%D8%A7%D9%84%D8%AA%D9%86%D8%B3%D9%8A%D9%82-%D9%81%D9%8A-css-r2044/" rel="">أنواع محددات التنسيق في CSS</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D8%AE%D9%81%D8%A7%D9%8A%D8%A7-css-%D8%A7%D9%84%D9%85%D9%8F%D9%85%D9%84%D9%91%D8%A9-%D8%A7%D9%84%D8%AA%D9%8A-%D9%8A%D8%AC%D8%A8-%D8%B9%D9%84%D9%8A%D9%83-%D8%A7%D9%84%D8%A5%D9%84%D9%85%D8%A7%D9%85-%D8%A8%D9%87%D8%A7-r41/" rel="">خفايا CSS المُملّة التي يجب عليك الإلمام بها</a>
	</li>
	<li>
		<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="">رصف العناصر (Layout) في CSS</a>
	</li>
</ul>
]]></description><guid isPermaLink="false">2161</guid><pubDate>Thu, 23 Nov 2023 13:09:01 +0000</pubDate></item><item><title>&#x627;&#x644;&#x62A;&#x639;&#x627;&#x645;&#x644; &#x645;&#x639; &#x637;&#x641;&#x62D;&#x627;&#x646; &#x627;&#x644;&#x645;&#x62D;&#x62A;&#x648;&#x649; &#x62E;&#x627;&#x631;&#x62C; &#x635;&#x646;&#x62F;&#x648;&#x642; &#x627;&#x644;&#x639;&#x646;&#x635;&#x631; &#x628;&#x627;&#x633;&#x62A;&#x62E;&#x62F;&#x627;&#x645; 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%B7%D9%81%D8%AD%D8%A7%D9%86-%D8%A7%D9%84%D9%85%D8%AD%D8%AA%D9%88%D9%89-%D8%AE%D8%A7%D8%B1%D8%AC-%D8%B5%D9%86%D8%AF%D9%88%D9%82-%D8%A7%D9%84%D8%B9%D9%86%D8%B5%D8%B1-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-css-r2160/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2023_11/--------CSS.png.0a5355d883234d9f4ac421c6e4432b96.png" /></p>
<p>
	يحدث طفحان المحتوى overflow عندما يكون حجم المحتوى أكبر من أن يتسع له العنصر، لهذا سنتعلم في هذا المقال عن ماهية الطفحان وكيفية إدارته.
</p>

<p>
	ننصحك قبل المتابعة في قراءة هذه المقال أن:
</p>

<ol>
	<li>
		تطلع على أساسيات استخدام الحاسوب وتصفح الويب.
	</li>
	<li>
		تحضّر بيئة عمل بسيطة كما تحدثنا مسبقًا في المقال <a href="https://academy.hsoub.com/programming/general/%D8%AA%D8%AB%D8%A8%D9%8A%D8%AA-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D9%8A%D8%A7%D8%AA-%D8%A7%D9%84%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A9-%D9%84%D9%84%D8%A7%D9%86%D8%B7%D9%84%D8%A7%D9%82-%D9%81%D9%8A-%D8%AA%D8%B7%D9%88%D9%8A%D8%B1-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-r1671/" rel="">تثبيت البرمجيات الأساسية</a>، وتتفهم طريقة إنشاء وإدارة الملفات كما شرحناها في مقال <a href="https://academy.hsoub.com/programming/general/%D8%A7%D9%84%D8%AA%D8%B9%D8%A7%D9%85%D9%84-%D9%85%D8%B9-%D8%A7%D9%84%D9%85%D9%84%D9%81%D8%A7%D8%AA-%D9%81%D9%8A-%D8%B9%D9%85%D9%84%D9%8A%D8%A9-%D8%AA%D8%B7%D9%88%D9%8A%D8%B1-%D9%85%D9%88%D9%82%D8%B9-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-r1686/" rel="">التعامل مع الملفات</a>.
	</li>
	<li>
		تطلع على أساسيات HTML كما شرحناها في سلسلة المقالات <a href="https://academy.hsoub.com/programming/html/%D8%AA%D8%B9%D8%B1%D9%81-%D8%B9%D9%84%D9%89-%D9%84%D8%BA%D8%A9-html-r1752/" rel="">مدخل إلى HTML</a>.
	</li>
	<li>
		تتفهم أساسيات CSS كما شرحناها في سلسلة المقالات <a href="https://academy.hsoub.com/programming/css/%D8%AA%D8%B9%D8%B1%D9%81-%D8%B9%D9%84%D9%89-css-r2000/" rel="">خطواتك الأولى في CSS</a>.
	</li>
</ol>

<h2 id="">
	ما هو الطفحان؟
</h2>

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

<h2 id="css">
	تفادي CSS لخسارة البيانات
</h2>

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

<p style="text-align: center;">
	<iframe height="610" loading="lazy" src="https://mdn.github.io/css-examples/learn/overflow/block-overflow.html" style="box-sizing: content-box; border: 1px solid var(--border-primary); max-width: 700px; width: calc((100% - 2rem) - 2px); background: rgb(255, 255, 255); border-radius: var(--elem-radius); padding: 1rem;" width="100%"></iframe>
</p>

<p>
	نضع في المثال التالي كلمةً واحدةً في الصندوق، وقد جُعل الصندوق صغيرًا جدًا لهذا ستخرج بعض حروفها خارج الصندوق:
</p>

<p style="text-align: center;">
	<iframe height="520" loading="lazy" src="https://mdn.github.io/css-examples/learn/overflow/inline-overflow.html" style="box-sizing: content-box; border: 1px solid var(--border-primary); max-width: 700px; width: calc((100% - 2rem) - 2px); background: rgb(255, 255, 255); border-radius: var(--elem-radius); padding: 1rem;" width="100%"></iframe>
</p>

<p>
	قد تتساءل عن سبب هذا السلوك الفوضوي الذي تتبعه <a href="https://academy.hsoub.com/programming/css/%D8%A2%D9%84%D9%8A%D8%A9-%D8%B9%D9%85%D9%84-%D9%84%D8%BA%D8%A9-css-r2003/" rel="">لغة CSS</a> وهو عرض المحتوى خارج المساحة التي يُفترض أن تُعرض فيها. لماذا لا تُخفي ببساطة هذا المحتوى الفائض؟ لماذا لا تغير أبعاد الصندوق ليتسع للمحتوى؟
</p>

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

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

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

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

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

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

<p style="text-align: center;">
	<iframe height="620" loading="lazy" src="https://mdn.github.io/css-examples/learn/overflow/hidden.html" style="box-sizing: content-box; border: 1px solid var(--border-primary); max-width: 700px; width: calc((100% - 2rem) - 2px); background: rgb(255, 255, 255); border-radius: var(--elem-radius); padding: 1rem;" width="100%"></iframe>
</p>

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

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

<p style="text-align: center;">
	<iframe height="610" loading="lazy" src="https://mdn.github.io/css-examples/learn/overflow/scroll.html" style="box-sizing: content-box; border: 1px solid var(--border-primary); max-width: 700px; width: calc((100% - 2rem) - 2px); background: rgb(255, 255, 255); border-radius: var(--elem-radius); padding: 1rem;" width="100%"></iframe>
</p>

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

<p style="text-align: center;">
	<iframe height="610" loading="lazy" src="https://mdn.github.io/css-examples/learn/overflow/scroll-y.html" style="box-sizing: content-box; border: 1px solid var(--border-primary); max-width: 700px; width: calc((100% - 2rem) - 2px); background: rgb(255, 255, 255); border-radius: var(--elem-radius); padding: 1rem;" width="100%"></iframe>
</p>

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

<p style="text-align: center;">
	<iframe height="530" loading="lazy" src="https://mdn.github.io/css-examples/learn/overflow/scroll-x.html" style="box-sizing: content-box; border: 1px solid var(--border-primary); max-width: 700px; width: calc((100% - 2rem) - 2px); background: rgb(255, 255, 255); border-radius: var(--elem-radius); padding: 1rem;" width="100%"></iframe>
</p>

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

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

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_8565_8" style=""><span class="kwd">overflow</span><span class="pun">:</span><span class="pln"> scroll hidden</span><span class="pun">;</span></pre>

<p>
	يعني هذا عرض شريط التمرير الأفقي وإخفاء العمودي.
</p>

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

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

<p style="text-align: center;">
	<iframe height="610" loading="lazy" src="https://mdn.github.io/css-examples/learn/overflow/auto.html" style="box-sizing: content-box; border: 1px solid var(--border-primary); max-width: 700px; width: calc((100% - 2rem) - 2px); background: rgb(255, 255, 255); border-radius: var(--elem-radius); padding: 1rem;" width="100%"></iframe>
</p>

<h2 id="-1">
	الطفحان والمحتوى المنسق كتليا
</h2>

<p>
	عندما تستخدم قيمًا لخاصية <code>&lt;overflow&gt;</code> مثل <code>scroll</code> و <code>auto</code> لتدبر أمر طفحان المحتوى فأنت تُنشئ في الواقع ما يُدعى بالمحتوى المنسّق كتليًا Block Formatting Context -أو اختصارًا BFC، وهو المحتوى الذي غيّرت قيمة الخاصية <code>overflow</code> له كي يحتويه التخطيط تلقائيًا، فلا يمكن للمحتوى الموجود خارج الحاوية أن يدخل إلى الحاوية، ولا يمكن لأي شيء أن يخرج من تلك الحاوية إلى التخطيط المحيط، وهذا ما يؤدي إلى ظهور سلوك التمرير كي يبقى المحتوى ضمن المكان المخصص له ولا يتداخل مع محتوى بقية العناصر وبالتالي الحصول على تجربة تمرير مستقرة.
</p>

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

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

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

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

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

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

<p>
	ترجمة -وبتصرف- للمقال <a href="https://developer.mozilla.org/en-US/docs/Learn/CSS/Building_blocks/Overflowing_content" rel="external nofollow">overflowing content</a>.
</p>

<h2 id="-4">
	اقرأ أيضًا
</h2>

<ul>
	<li>
		المقال السابق: <a href="https://academy.hsoub.com/programming/css/%D8%A7%D9%84%D8%AA%D8%AD%D9%83%D9%85-%D8%A8%D8%A7%D8%AA%D8%AC%D8%A7%D9%87-%D8%A7%D9%86%D8%B3%D9%8A%D8%A7%D8%A8-%D8%A7%D9%84%D9%86%D8%B5%D9%88%D8%B5-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-css-r2159/" rel="">التحكم باتجاه انسياب النصوص باستخدام CSS</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D8%AA%D8%AD%D8%B1%D9%8A%D9%83-%D9%88%D8%A7%D8%AC%D9%87%D8%A7%D8%AA-%D8%A7%D9%84%D8%B9%D8%B1%D8%B6-%D8%A3%D8%AB%D9%86%D8%A7%D8%A1-%D8%A7%D9%84%D8%AA%D9%86%D9%82%D9%84-%D9%81%D9%8A-%D9%85%D9%88%D9%82%D8%B9-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-r1492/" rel="">تحريك واجهات العرض أثناء التنقل في موقع الويب</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D8%A7%D9%84%D8%B9%D9%86%D8%A7%D8%B5%D8%B1-%D8%A7%D9%84%D8%B9%D8%A7%D8%A6%D9%85%D8%A9-floats-%D9%81%D9%8A-css-r1057/" rel="">العناصر العائمة Floats في CSS</a>
	</li>
</ul>
]]></description><guid isPermaLink="false">2160</guid><pubDate>Thu, 16 Nov 2023 13:00:00 +0000</pubDate></item><item><title>&#x627;&#x644;&#x62A;&#x62D;&#x643;&#x645; &#x628;&#x627;&#x62A;&#x62C;&#x627;&#x647; &#x627;&#x646;&#x633;&#x64A;&#x627;&#x628; &#x627;&#x644;&#x646;&#x635;&#x648;&#x635; &#x628;&#x627;&#x633;&#x62A;&#x62E;&#x62F;&#x627;&#x645; CSS</title><link>https://academy.hsoub.com/programming/css/%D8%A7%D9%84%D8%AA%D8%AD%D9%83%D9%85-%D8%A8%D8%A7%D8%AA%D8%AC%D8%A7%D9%87-%D8%A7%D9%86%D8%B3%D9%8A%D8%A7%D8%A8-%D8%A7%D9%84%D9%86%D8%B5%D9%88%D8%B5-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-css-r2159/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2023_11/-----CSS.png.42f9bd820bccbeefa9764ad9eba37157.png" /></p>
<p>
	لقد تعاملنا حتى اللحظة مع خصائص CSS المتعلقة بالأبعاد الفيزيائية لشاشة العرض، مثل الحواف التي أنشأناها على جوانب صندوق العنصر، وقد تلاحظ أن هذه الأبعاد الفيزيائية مرتبطة أو مخصصة للتعامل مع المحتوى الذي يُعرض أفقيًا فقط، كما أن الويب يميل إلى دعم اللغات التي تكتب من اليسار إلى اليمين مثل الإنجليزية أكثر من اللغات المكتوبة من اليمين إلى اليسار مثل العربية.
</p>

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

<p>
	ننصحك قبل المتابعة في قراءة هذه المقال أن:
</p>

<ol>
	<li>
		تطلع على أساسيات استخدام الحاسوب وتصفح الويب.
	</li>
	<li>
		تحضر بيئة عمل بسيطة كما تحدثنا مسبقًا في المقال <a href="https://academy.hsoub.com/programming/general/%D8%AA%D8%AB%D8%A8%D9%8A%D8%AA-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D9%8A%D8%A7%D8%AA-%D8%A7%D9%84%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A9-%D9%84%D9%84%D8%A7%D9%86%D8%B7%D9%84%D8%A7%D9%82-%D9%81%D9%8A-%D8%AA%D8%B7%D9%88%D9%8A%D8%B1-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-r1671/" rel="">تثبيت البرمجيات الأساسية</a>، وتتفهم طريقة إنشاء وإدارة الملفات كما شرحناها في مقال <a href="https://academy.hsoub.com/programming/general/%D8%A7%D9%84%D8%AA%D8%B9%D8%A7%D9%85%D9%84-%D9%85%D8%B9-%D8%A7%D9%84%D9%85%D9%84%D9%81%D8%A7%D8%AA-%D9%81%D9%8A-%D8%B9%D9%85%D9%84%D9%8A%D8%A9-%D8%AA%D8%B7%D9%88%D9%8A%D8%B1-%D9%85%D9%88%D9%82%D8%B9-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-r1686/" rel="">التعامل مع الملفات</a>.
	</li>
	<li>
		تطلع على أساسيات HTML كما شرحناها في سلسلة المقالات <a href="https://academy.hsoub.com/programming/html/%D8%AA%D8%B9%D8%B1%D9%81-%D8%B9%D9%84%D9%89-%D9%84%D8%BA%D8%A9-html-r1752/" rel="">مدخل إلى HTML</a>.
	</li>
	<li>
		تتفهم أساسيات CSS كما شرحناها في سلسلة المقالات <a href="https://academy.hsoub.com/programming/css/%D8%AA%D8%B9%D8%B1%D9%81-%D8%B9%D9%84%D9%89-css-r2000/" rel="">خطواتك الأولى في CSS</a>.
	</li>
</ol>

<h2 id="">
	ما هي أوضاع الكتابة؟
</h2>

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

<p>
	لاحظ كيف جعلنا العنوان في المثال التالي ينساب عموديًا من خلال استخدام القيمة <code>vertical-rl</code> للخاصية <code>writing-mode</code>. يُشاهد هذا الأسلوب من الكتابة في التصميمات الجغرافية خاصةً، كما أنها طريقة جيدة لإضافة مظهر جميل للصفحة التي تصممها.
</p>

<p style="text-align: center;">
	<iframe height="760" loading="lazy" src="https://mdn.github.io/css-examples/learn/writing-modes/simple-vertical.html" style="box-sizing: content-box; border: 1px solid var(--border-primary); max-width: 100%; width: calc((100% - 2rem) - 2px); background: rgb(255, 255, 255); border-radius: var(--elem-radius); padding: 1rem;" width="100%"></iframe>
</p>

<p>
	تأخذ الخاصية <code>writing-mode</code> إحدى القيم الثلاث التالية:
</p>

<ul>
	<li>
		<code>horizontal-tb</code>: تنساب كتلة العنصر من الأعلى للأسفل وينساب النص أفقيًا.
	</li>
	<li>
		<code>vertical-rl</code>: تنساب كتلة العنصر من اليمين إلى اليسار وينساب النص عموديًا.
	</li>
	<li>
		<code>vertical-lr</code>: تنساب كتلة العنصر من اليسار إلى اليمين وينساب النص عموديًا.
	</li>
</ul>

<p>
	لهذا لا بد أن تلاحظ أن خاصية وضع الكتابة <code>writing-mode</code> تحدد في الواقع اتجاه العنصر على مستوى كتلة العنصر من الأعلى للأسفل أو من اليمين إلى اليسار والعكس ومن ثم تملي عليه اتجاه انسياب النص.
</p>

<h2 id="-1">
	أوضاع الكتابة والعناصر السطرية والكتلية
</h2>

<p>
	ناقشنا في مقال "<a href="https://academy.hsoub.com/programming/css/%D8%AF%D9%84%D9%8A%D9%84-%D9%85%D8%AE%D8%AA%D8%B5%D8%B1-%D8%A5%D9%84%D9%89-%D9%86%D9%85%D9%88%D8%B0%D8%AC-%D8%A7%D9%84%D8%B5%D9%86%D8%AF%D9%88%D9%82-box-model-%D9%81%D9%8A-%D8%AA%D9%86%D8%B3%D9%8A%D9%82%D8%A7%D8%AA-css-r2126/" rel="">نموذج الصندوق في تنسيقات CSS</a>" مفهوم العناصر السطرية والعناصر الكتلية، إذ تُعرض بعض العناصر على شكل كتلة تحتل كامل السطر وأخرى سطرية يمكن أن تقع مع عناصر سطرية أخرى على السطر ذاته. ترتبط فكرة الكتلية والسطرية ارتباطًا وثيقًا بأوضاع الكتابة في المستند وليس بشاشة العرض الفيزيائية؛ فلا تنساب العناصر الكتلية إلا من الأعلى إلى الأسفل إذا كنت تستخدم وضع كتابة أفقي كما في اللغة الإنجليزية.
</p>

<p>
	يوضح المثال التالي الفكرة السابقة. لدينا في هذا المثال صندوقين يحتوي كل منهما على عنوان وفقرة؛ يستخدم الأول النمط <code>writing-mode: horizontal-tb</code> الذي يجعل انسياب العنصر من الأعلى للأسفل واتجاه الكتابة أفقي، أما الآخر فيستخدم النمط <code>writing-mode: vertical-rl</code> الذي يجعل العنصر ينساب من اليمين إلى اليسار واتجاه الكتابة عمودي:
</p>

<p style="text-align: center;">
	<iframe height="1080" loading="lazy" src="https://mdn.github.io/css-examples/learn/writing-modes/block-inline.html" style="box-sizing: content-box; border: 1px solid var(--border-primary); max-width: 100%; width: calc((100% - 2rem) - 2px); background: rgb(255, 255, 255); border-radius: var(--elem-radius); padding: 1rem;" width="100%"></iframe>
</p>

<p>
	عندما نبدّل وضع الكتابة سنغيّر أي اتجاه سيكون سطريًا وأي اتجاه سيكون كتليًا، إذ سيكون اتجاه الكتلة من الأعلى للأسفل عندما نختار الوضع <code>horizontal-tb</code> بينما سيكون اتجاه الكتلة من اليمين إلى اليسار إذا اخترنا الوضع <code>vertical-rl</code>، لهذا يكون اتجاه الكتلة <strong>block dimension</strong> دائمًا كما يحدده وضع الكتابة المستخدم، ويكون اتجاه السطر <strong>inline dimension</strong> هو اتجاه انسياب الكتابة.
</p>

<p>
	يوضح الشكل التالي بُعدي الكتلة والسطر في وضع الكتابة الأفقي:
</p>

<p style="text-align: center;">
	<img class="ipsImage ipsImage_thumbnailed" data-fileid="138620" data-ratio="56.71" data-unique="qxevc2g44" width="626" alt="01_horizontal_block (1).png" src="https://academy.hsoub.com/uploads/monthly_2023_11/01_horizontal_block(1).png.b610f044f6e81cd8a104a583ccdc8603.png">
</p>

<p>
	يوضح الشكل التالي بُعدي الكتلة والسطر في وضع الكتابة العمودي:
</p>

<p style="text-align: center;">
	<img class="ipsImage ipsImage_thumbnailed" data-fileid="138619" data-ratio="114.14" data-unique="szjkw3wns" width="396" alt="02_vertiacl_block (1).png" src="https://academy.hsoub.com/uploads/monthly_2023_11/02_vertiacl_block(1).png.99dd32158ed28ede89336e2979259007.png">
</p>

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

<h3 id="-2">
	اتجاه النص
</h3>

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

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

<h2 id="-3">
	الخاصيات المنطقية وقيمها
</h2>

<p>
	الغاية من الحديث عن أوضاع الكتابة واتجاهاتها في هذه المرحلة من <a href="https://academy.hsoub.com/programming/css/%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A7%D8%AA-%D9%84%D8%BA%D8%A9-css-r1688/" rel="">تعلم CSS</a> هي أننا تعرفنا على الكثير من الخاصيات المرتبطة بالأبعاد الفيزيائية للشاشة والتي يبدو استخدامها أكثر منطقية عند العمل مع نمط الكتابة الأفقي. لنلق نظرةً على مثال الصندوقين السابق الذي يأخذ أحدهما الخاصية <code>horizontal-tb</code> ويأخذ الآخر الخاصية <code>vertical-rl</code>. سنحاول إعطاء كلا الصندوقين حيّزًا من خلال الخاصية <a href="https://wiki.hsoub.com/CSS/width" rel="external"><code>width</code></a>. لاحظ كيف يتغير حيّز الصندوق الذي يضم كتابة بالاتجاه العمودي مما يؤدي إلى خروج الكتابة خارج الصندوق إذا كان الحيّز أقل مما يجب.
</p>

<p style="text-align: center;">
	<iframe height="1080" loading="lazy" src="https://mdn.github.io/css-examples/learn/writing-modes/width.html" style="box-sizing: content-box; border: 1px solid var(--border-primary); max-width: 100%; width: calc((100% - 2rem) - 2px); background: rgb(255, 255, 255); border-radius: var(--elem-radius); padding: 1rem;" width="100%"></iframe>
</p>

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

<p>
	لتسهيل الأمر، طوّرت CSS مؤخرًا مجموعة من الخاصيات المترابطة تستبدل بصورةٍ أساسية الخاصيات الفيزيائية، مثل <code>width</code> و <code>height</code> بأخرى منطقية logical أو متعلقة بالانسياب flow relative.
</p>

<p>
	ترتبط الخاصية <a href="https://wiki.hsoub.com/CSS/inline-size" rel="external"><code>inline-size</code></a> بالخاصية الفيزيائية <code>width</code> في وضع الكتابة الأفقي (تشير إلى القياس وفق اتجاه السطر)، كما ترتبط الخاصية <a href="https://wiki.hsoub.com/Web/CSS/block-size" rel="external"><code>block-size</code></a> بالخاصية <code>height</code> وتشير إلى القياس وفق اتجاه الكتلة.
</p>

<p>
	يعرض المثال التالي كيف استبدلنا الخاصية <code>width</code> بالخاصية <code>inline-size</code> وكيفية تأثيرها:
</p>

<p style="text-align: center;">
	<iframe height="970" loading="lazy" src="https://mdn.github.io/css-examples/learn/writing-modes/inline-size.html" style="box-sizing: content-box; border: 1px solid var(--border-primary); max-width: 100%; width: calc((100% - 2rem) - 2px); background: rgb(255, 255, 255); border-radius: var(--elem-radius); padding: 1rem;" width="100%"></iframe>
</p>

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

<p>
	تعرفنا في <a href="https://academy.hsoub.com/programming/css/%D8%AA%D9%86%D8%B3%D9%8A%D9%82-%D8%A7%D9%84%D8%AE%D9%84%D9%81%D9%8A%D8%A7%D8%AA-%D9%88%D8%AD%D9%88%D8%A7%D9%81-%D8%A7%D9%84%D8%B5%D9%81%D8%AD%D8%A7%D8%AA-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-css-r2158/" rel="">المقال السابق</a> عن نموذج الصندوق في تنسيقات CSS وعلى تنسيق الحواف، وقد رأينا الكثير من الأمثلة عن الخاصيات الفيزيائية للهوامش والحواف، مثل <a href="https://www.hsoub.com/CSS/margin-top" rel="external"><code>margin-top</code></a> و <a href="https://www.hsoub.com/CSS/padding-left" rel="external"><code>padding-left</code></a> و <a href="https://www.hsoub.com/CSS/border-bottom" rel="external"><code>border-bottom</code></a>. كما تُربط الخاصيتان اللتان تحددان الحيّز والارتفاع بخواص منطقية، تُربط الخاصيات السابقة بخاصيات منطقية أيضًا.
</p>

<p>
	ترتبط الخاصية <code>margin-top</code> بالخاصية <code>margin-block-start</code> التي تشير دائمًا إلى الهامش عند بداية الكتلة، كما ترتبط الخاصية <a href="https://wiki.hsoub.com/CSS/padding-left" rel="external"><code>padding-left</code></a> بالخاصية <code>padding-inline-start</code> التي تشير إلى بداية الاتجاه السطري، أي أن كلاهما يشيران إلى بداية النص في وضع الكتابة. ترتبط الخاصية <a href="https://wiki.hsoub.com/CSS/border-bottom" rel="external"><code>border-bottom</code></a> أيضًا بالخاصية <code>border-block-end</code> التي تدل على الحافة التي تقع في نهاية اتجاه الكتلة.
</p>

<p>
	يقارن المثال التالي بين الخاصيات الفيزيائية والمنطقية، فلو غيرت وضع الكتابة للصندوقين في الأسفل بتغيير الخاصية <code>writing-mode</code> ضمن المحدد <code>box.</code> إلى القيمة <code>vertical-rl</code>، فستلاحظ كيف تبقى الخاصيات الفيزيائية مرتبطةً بالاتجاه الفيزيائي، بينما تتغير الخاصيات المنطقية مع تغير وضع الكتابة.
</p>

<p>
	هل تستطيع أن تجعل الحافة السفلية تحت المحتوى المكتوب في كلا وضعي الكتابة؟
</p>

<p style="text-align: center;">
	<iframe height="1260" loading="lazy" src="https://mdn.github.io/css-examples/learn/writing-modes/logical-mbp.html" style="box-sizing: content-box; border: 1px solid var(--border-primary); max-width: 100%; width: calc((100% - 2rem) - 2px); background: rgb(255, 255, 255); border-radius: var(--elem-radius); padding: 1rem;" width="100%"></iframe>
</p>

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

<h3 id="-5">
	القيم المنطقية
</h3>

<p>
	تعرّفنا حتى الآن على أسماء الخاصيات المنطقية، لكن وكما تأخذ الخاصيات الفيزيائية قيمًا فيزيائية، مثل <code>top</code> و <code>right</code> و <code>bottom</code> و <code>left</code>، ترتبط هذه القيم بقيم منطقية، مثل <code>block-start</code> و <code>inline-end</code> و <code>block-end</code> و <code>inline-start</code>.
</p>

<p>
	حاول أن تغير وضع الكتابة في المثال التالي إلى <code>vertical-rl</code> لترى ما سيحدث للصورة. غيّر أيضًا <code>inline-start</code> إلى <code>inline-end</code> لكي تغيّر انسياب المحتوى.
</p>

<p style="text-align: center;">
	<iframe height="900" loading="lazy" src="https://mdn.github.io/css-examples/learn/writing-modes/float.html" style="box-sizing: content-box; border: 1px solid var(--border-primary); max-width: 100%; width: calc((100% - 2rem) - 2px); background: rgb(255, 255, 255); border-radius: var(--elem-radius); padding: 1rem;" width="100%"></iframe>
</p>

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

<p>
	<strong>ملاحظة</strong>: يدعم حاليًا متصفح فايرفوكس فقط القيم النسبية للخاصية <code>float</code>، فإذا كنت تستخدم متصفح كروم أو مايكروسوفت إيدج فقد لا تلحظ أية تغييرات.
</p>

<h3 id="-6">
	هل ينبغي استخدام الخاصيات الفيزيائية أم المنطقية؟
</h3>

<p>
	ظهرت الخاصيات والقيم المنطقية بعد الخاصيات الفيزيائية وبالتالي لم تدعمها المتصفحات إلّا مؤخرًا، ويمكن دائمًا البحث عبر الإنترنت عن دعم المتصفح الذي تعمل عليه لقيمة أو خاصية ما قبل أن تستخدمها، وإن لم تكن تستخدم أوضاع كتابة مختلفة، فقد تفضّل استخدام الخاصيات الفيزيائية. على أية حال سيتحول الكثيرون بلا شك إلى الخاصيات المنطقية كونها ستبدو أكثر وضوحًا عندما يبدأون التعامل مع أساليب تخطيط الصفحات، مثل <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="">flexbox</a> و <a href="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/" rel="">grid</a>.
</p>

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

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

<p>
	ترجمة -وبتصرف- للمقال <a href="https://developer.mozilla.org/en-US/docs/Learn/CSS/Building_blocks/Handling_different_text_directions" rel="external nofollow">handling different text directions</a>.
</p>

<h2 id="-8">
	اقرأ أيضًا
</h2>

<ul>
	<li>
		المقال السابق: <a href="https://academy.hsoub.com/programming/css/%D8%AA%D9%86%D8%B3%D9%8A%D9%82-%D8%A7%D9%84%D8%AE%D9%84%D9%81%D9%8A%D8%A7%D8%AA-%D9%88%D8%AD%D9%88%D8%A7%D9%81-%D8%A7%D9%84%D8%B5%D9%81%D8%AD%D8%A7%D8%AA-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-css-r2158/" rel="">تنسيق الخلفيات وحواف الصفحات باستخدام CSS</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D8%A7%D9%84%D8%B9%D9%86%D8%A7%D8%B5%D8%B1-%D8%A7%D9%84%D8%B9%D8%A7%D8%A6%D9%85%D8%A9-floats-%D9%81%D9%8A-css-r1057/" rel="">العناصر العائمة Floats في CSS</a>
	</li>
	<li>
		<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="">تنسيق نصوص صفحات الويب باستخدام CSS</a>
	</li>
</ul>
<style type="text/css">
main p iframe {
  max-width: 700px !important;
}</style>
]]></description><guid isPermaLink="false">2159</guid><pubDate>Fri, 10 Nov 2023 13:00:00 +0000</pubDate></item><item><title>&#x62A;&#x646;&#x633;&#x64A;&#x642; &#x627;&#x644;&#x62E;&#x644;&#x641;&#x64A;&#x627;&#x62A; &#x648;&#x62D;&#x648;&#x627;&#x641; &#x627;&#x644;&#x635;&#x641;&#x62D;&#x627;&#x62A; &#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-%D8%A7%D9%84%D8%AE%D9%84%D9%81%D9%8A%D8%A7%D8%AA-%D9%88%D8%AD%D9%88%D8%A7%D9%81-%D8%A7%D9%84%D8%B5%D9%81%D8%AD%D8%A7%D8%AA-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-css-r2158/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2023_11/-----CSS.png.0830ecebffafa166ba4098cf3bf24266.png" /></p>
<p>
	سنلقي نظرةً في هذا المقال على بعض الحيل الذكية التي يمكنك اتباعها لتنسيق خلفية صفحة ويب وحوافها، مثل إضافة ألوان متدرجة إلى الخلفية أو إضافة الصور إليها وإظهار زوايا دائرية وغيرها من الأفكار التي يتساءل عن طريقة تنفيذها الكثيرون.
</p>

<p>
	ننصحك قبل المتابعة في قراءة هذه المقال أن:
</p>

<ol>
	<li>
		تطلع على أساسيات استخدام الحاسوب وتصفح الويب.
	</li>
	<li>
		تحضّر بيئة عمل بسيطة كما تحدثنا مسبقًا في المقال <a href="https://academy.hsoub.com/programming/general/%D8%AA%D8%AB%D8%A8%D9%8A%D8%AA-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D9%8A%D8%A7%D8%AA-%D8%A7%D9%84%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A9-%D9%84%D9%84%D8%A7%D9%86%D8%B7%D9%84%D8%A7%D9%82-%D9%81%D9%8A-%D8%AA%D8%B7%D9%88%D9%8A%D8%B1-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-r1671/" rel="">تثبيت البرمجيات الأساسية</a>، وتتفهم طريقة إنشاء وإدارة الملفات كما شرحناها في مقال <a href="https://academy.hsoub.com/programming/general/%D8%A7%D9%84%D8%AA%D8%B9%D8%A7%D9%85%D9%84-%D9%85%D8%B9-%D8%A7%D9%84%D9%85%D9%84%D9%81%D8%A7%D8%AA-%D9%81%D9%8A-%D8%B9%D9%85%D9%84%D9%8A%D8%A9-%D8%AA%D8%B7%D9%88%D9%8A%D8%B1-%D9%85%D9%88%D9%82%D8%B9-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-r1686/" rel="">التعامل مع الملفات</a>.
	</li>
	<li>
		تطلع على أساسيات HTML كما شرحناها في سلسلة المقالات <a href="https://academy.hsoub.com/programming/html/%D8%AA%D8%B9%D8%B1%D9%81-%D8%B9%D9%84%D9%89-%D9%84%D8%BA%D8%A9-html-r1752/" rel="">مدخل إلى HTML</a>.
	</li>
	<li>
		تتفهم أساسيات CSS كما شرحناها في سلسلة المقالات <a href="https://academy.hsoub.com/programming/css/%D8%AA%D8%B9%D8%B1%D9%81-%D8%B9%D9%84%D9%89-css-r2000/" rel="">خطواتك الأولى في CSS</a>.
	</li>
</ol>

<h2 id="css">
	تنسيق الخلفيات باستخدام CSS
</h2>

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

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_498_8" style=""><span class="pun">.</span><span class="pln">box </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">background</span><span class="pun">:</span><span class="pln"> linear-gradient</span><span class="pun">(</span><span class="pln">
        </span><span class="lit">105deg</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">255</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0.2</span><span class="pun">)</span><span class="pln"> </span><span class="lit">39%</span><span class="pun">,</span><span class="pln">
        rgba</span><span class="pun">(</span><span class="lit">51</span><span class="pun">,</span><span class="pln"> </span><span class="lit">56</span><span class="pun">,</span><span class="pln"> </span><span class="lit">57</span><span class="pun">,</span><span class="pln"> </span><span class="lit">1</span><span class="pun">)</span><span class="pln"> </span><span class="lit">96%</span><span class="pln">
      </span><span class="pun">)</span><span class="pln"> center center </span><span class="pun">/</span><span class="pln"> </span><span class="lit">400px</span><span class="pln"> </span><span class="lit">200px</span><span class="pln"> no-repeat</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">url</span><span class="pun">(</span><span class="str">big-star.png</span><span class="pun">)</span><span class="pln"> center
      no-repeat</span><span class="pun">,</span><span class="pln"> rebeccapurple</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></pre>

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

<h3 id="">
	تنسيق ألوان الخلفية
</h3>

<p>
	تُحدد الخاصية <a href="https://wiki.hsoub.com/CSS/background-color" rel="external"><code>background-color</code></a> لون خلفية الصفحة أو خلفية أي عنصر من عناصرها وتقبل أي قيمة لونية ممكنة، وتظهر الخلفية الملونة تحت محتوى العنصر وتمتد تحت المحتوى وحشوة صندوق العنصر.
</p>

<p>
	نستخدم في المثال التالي مجموعةً من القيم اللونية المختلفة لإضافة خلفية ملونة إلى صندوق (عنصر <code>&lt;div&gt;</code>) وعنصر ترويسة <code>&lt;h2&gt;</code> وعنصر <code>&lt;span&gt;</code>:
</p>
<style type="text/css">
p iframe {
  max-width: 700px !important;
}</style>
<p style="text-align: center;">
	<iframe height="680" loading="lazy" src="https://mdn.github.io/css-examples/learn/backgrounds-borders/color.html" style="box-sizing: content-box; border: 1px solid var(--border-primary); max-width: 100%; width: calc((100% - 2rem) - 2px); background: rgb(255, 255, 255); border-radius: var(--elem-radius); padding: 1rem;/*! margin: auto; *//*! text-align: center; */max-width: 700px;" width="100%"></iframe>
</p>

<h3 id="-1">
	اختيار صورة للخلفية
</h3>

<p>
	تُستخدم الخاصية <a href="https://wiki.hsoub.com/CSS/background-image" rel="external"><code>background-image</code></a> في عرض صورة على خلفية العنصر. يعرض المثال التالي صندوقين: يضم الأول صورةً أكبر من أبعاد الصندوق وهي (<a href="https://mdn.github.io/css-examples/learn/backgrounds-borders/balloons.jpg" rel="external nofollow">balloons.jpg</a>) أما الثاني فيعرض صورة أصغر من أبعاد الصندوق (<a href="https://mdn.github.io/css-examples/learn/backgrounds-borders/star.png" rel="external nofollow">star.png</a>). ما تفعله الخاصية <code>background-image</code> هنا أمر مهم جدًا، فلا تعرض في الصندوق الأول إلا قسمًا من الصورة أي لا تُصغّر الصورة تلقائيًا لتناسب أبعاد الصندوق، بينما تكرر الصورة ذات الأبعاد الأصغر تلقائيًا لتملأ مساحة الصندوق.
</p>

<p style="text-align: center;">
	<iframe height="670" loading="lazy" src="https://mdn.github.io/css-examples/learn/backgrounds-borders/background-image.html" style="box-sizing: content-box; border: 1px solid var(--border-primary); max-width: 100%; width: calc((100% - 2rem) - 2px); background: rgb(255, 255, 255); border-radius: var(--elem-radius); padding: 1rem;" width="100%"></iframe>
</p>

<p>
	<strong>ملاحظة</strong>: إذا خصصت لونًا لخلفية العنصر إضافة إلى تخصيص صورة فستُعرض الصورة فوق اللون. جرّب ذلك بإضافة الخاصية <code>;background-color: black</code> إلى المحدد <code>b.</code> في المثال السابق ولاحظ ما سيحدث.
</p>

<h4 id="-2">
	التحكم بطريقة تكرار الخلفية
</h4>

<p>
	تُستخدم الخاصية <a href="https://wiki.hsoub.com/CSS/background-repeat" rel="external"><code>background-repeat</code></a> للتحكم بطريقة تكرار الصور في الخلفية وتأخذ إحدى القيم التالية:
</p>

<ul>
	<li>
		<code>no-repeat</code>: تمنع تكرار الصورة في الخلفية حتى لو كانت أبعادها أصغر من أبعاد العنصر.
	</li>
	<li>
		<code>repeat-x</code>: تكرار الصورة أفقيًا.
	</li>
	<li>
		<code>repeat-y</code>: تكرار الصورة عموديًا.
	</li>
	<li>
		<code>repeat</code>: وهي القيمة الافتراضية التي تكرر الصورة على كامل الخلفية.
	</li>
</ul>

<p>
	جرّب تعديل الشيفرة التفاعلية التالية باستبدال القيمة <code>no-repeat</code> بالقيمة <code>repeat-x</code> ثم <code>repeat-y</code> وراقب ماذا يحدث.
</p>

<p style="text-align: center;">
	<iframe height="560" loading="lazy" src="https://mdn.github.io/css-examples/learn/backgrounds-borders/repeat.html" style="box-sizing: content-box; border: 1px solid var(--border-primary); max-width: 100%; width: calc((100% - 2rem) - 2px); background: rgb(255, 255, 255); border-radius: var(--elem-radius); padding: 1rem;" width="100%"></iframe>
</p>

<h4 id="-3">
	ضبط أبعاد صورة الخلفية
</h4>

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

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

<p>
	غيّرنا في المثال التالي أبعاد الصورة حتى تظهر كاملةً ضمن الصندوق <code>background-size: 100px 10em</code>، لكن لاحظ التشوه الذي حصل. حاول أن تستخدم المحرر التفاعلي لتغيير قيمة الخاصية <code>background-size</code> إلى <code>cover</code> ثم <code>contain</code> ولاحظ ما يحدث. حاول أيضًا تغيير قيمة الخاصية <code>background-repeat</code> ماذا ستجد؟
</p>

<p style="text-align: center;">
	<iframe height="760" loading="lazy" src="https://mdn.github.io/css-examples/learn/backgrounds-borders/size.html" style="box-sizing: content-box; border: 1px solid var(--border-primary); max-width: 100%; width: calc((100% - 2rem) - 2px); background: rgb(255, 255, 255); border-radius: var(--elem-radius); padding: 1rem;" width="100%"></iframe>
</p>

<h4 id="-4">
	ضبط موضع صورة الخلفية ضمن صندوق العنصر
</h4>

<p>
	تُستخدم الخاصية <a href="https://wiki.hsoub.com/CSS/background-position" rel="external"><code>background-position</code></a> لضبط موقع ظهور الصورة على خلفية الصندوق من خلال تحديد نظام إحداثيات تأخذ فيه زاوية الصندوق العليا اليسارية القيمة <code>(0,0)</code> ويمثل الإحداثي الأول <code>x</code> الإحداثي الأفقي والثاني <code>y</code> الإحداثي العمودي. تأخذ الخاصية <a href="https://wiki.hsoub.com/CSS/background-position" rel="external"><code>background-position</code></a> القيمة الافتراضية <code>(0,0)</code>، وقد تأخذ أية قيمة عددية لتدل على الموقع الأفقي والعمودي لزاوية الصورة بالنسبة لزاوية الصندوق مثل <code>;20px 10px</code>.
</p>

<p>
	يمكن أيضًا استخدام قيم مثل <code>top</code> و <code>right</code> لضبط حد الصورة اليساري أو اليميني على الحد اليساري أو اليميني للصندوق وهنالك أيضًا <code>center</code> و <code>bottom</code> و <code>left</code>.
</p>

<p>
	إليك مثالًا عن استخدام القيم المفتاحية:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_498_10" style=""><span class="pun">.</span><span class="pln">box </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">background-image</span><span class="pun">:</span><span class="pln"> </span><span class="kwd">url</span><span class="pun">(</span><span class="str">star.png</span><span class="pun">);</span><span class="pln">
  </span><span class="kwd">background-repeat</span><span class="pun">:</span><span class="pln"> no-repeat</span><span class="pun">;</span><span class="pln">
  </span><span class="kwd">background-position</span><span class="pun">:</span><span class="pln"> top center</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_498_12" style=""><span class="pun">.</span><span class="pln">box </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">background-image</span><span class="pun">:</span><span class="pln"> </span><span class="kwd">url</span><span class="pun">(</span><span class="str">star.png</span><span class="pun">);</span><span class="pln">
  </span><span class="kwd">background-repeat</span><span class="pun">:</span><span class="pln"> no-repeat</span><span class="pun">;</span><span class="pln">
  </span><span class="kwd">background-position</span><span class="pun">:</span><span class="pln"> </span><span class="lit">20px</span><span class="pln"> </span><span class="lit">10%</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_498_14" style=""><span class="pun">.</span><span class="pln">box </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">background-image</span><span class="pun">:</span><span class="pln"> </span><span class="kwd">url</span><span class="pun">(</span><span class="str">star.png</span><span class="pun">);</span><span class="pln">
  </span><span class="kwd">background-repeat</span><span class="pun">:</span><span class="pln"> no-repeat</span><span class="pun">;</span><span class="pln">
  </span><span class="kwd">background-position</span><span class="pun">:</span><span class="pln"> </span><span class="lit">20px</span><span class="pln"> top</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	يمكنك أيضًا استخدام صياغة أخرى لخاصية الموضع تضم أربع قيم كي تشير إلى مقدار البعد عن جوانب محددة من الصندوق. حددنا موقع الصورة في المثال التالي لتبتعد مقدار <code>20px</code> عن أعلى الصندوق ومقدار <code>10px</code> عن يمينه:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_498_16" style=""><span class="pun">.</span><span class="pln">box </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">background-image</span><span class="pun">:</span><span class="pln"> </span><span class="kwd">url</span><span class="pun">(</span><span class="str">star.png</span><span class="pun">);</span><span class="pln">
  </span><span class="kwd">background-repeat</span><span class="pun">:</span><span class="pln"> no-repeat</span><span class="pun">;</span><span class="pln">
  </span><span class="kwd">background-position</span><span class="pun">:</span><span class="pln"> top </span><span class="lit">20px</span><span class="pln"> right </span><span class="lit">10px</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	جرِّب تغيير موقع النجمة في محرر الشيفرة التفاعلي التالي:
</p>

<p style="text-align: center;">
	<iframe height="570" loading="lazy" src="https://mdn.github.io/css-examples/learn/backgrounds-borders/position.html" style="box-sizing: content-box; border: 1px solid var(--border-primary); max-width: 100%; width: calc((100% - 2rem) - 2px); background: rgb(255, 255, 255); border-radius: var(--elem-radius); padding: 1rem;" width="100%"></iframe>
</p>

<p>
	<strong>ملاحظة</strong>: تُعد الخاصية <code>background-position</code> خاصيةً مختصرةً للخاصيتين <code>background-position-x</code> و <code>background-position-y</code> اللتين تتيحان ضبط الموقعان الأفقي والعمودي لصورة الخلفية كلًا على حدى.
</p>

<h3 id="-5">
	خلفيات ذات ألوان متدرجة
</h3>

<p>
	تُعامل الخلفيات اللونية المتدرجة Gradient backgrounds مثل صور وتُضبط باستخدام الخاصية <code>background-image</code>، ويمكنك الاطلاع على <a href="https://wiki.hsoub.com/CSS/gradient" rel="external">الأنواع المختلفة والخلفيات المتدرجة الألوان</a> من خلال موسوعة حسوب. ستجد على شبكة الويب الكثير من <a href="https://cssgradient.io/" rel="external nofollow">الأدوات</a> التي توّلد خلفيات متدرجة الألوان باستخدام CSS وعندها يمكنك نسخ شيفرة هذه الخلفيات واستخدامها.
</p>

<p>
	جرّب بعض الخلفيات المتدرجة الألوان عبر محرر الشيفرة التفاعلي التالي، ولاحظ كيف استخدمنا التدرج الخطي linear gradient في الصندوق الأول والتدرج الشعاعي (أو القطري) radial gradient في الثاني مع خلفية مكررة:
</p>

<p style="text-align: center;">
	<iframe height="650" loading="lazy" src="https://mdn.github.io/css-examples/learn/backgrounds-borders/gradients.html" style="box-sizing: content-box; border: 1px solid var(--border-primary); max-width: 100%; width: calc((100% - 2rem) - 2px); background: rgb(255, 255, 255); border-radius: var(--elem-radius); padding: 1rem;" width="100%"></iframe>
</p>

<h3 id="-6">
	خلفيات ذات صور متعددة
</h3>

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

<p>
	تستطيع أيضًا ضبط بقية خاصيات الخلفية <code>*-background</code> لكل صورة بوضع فواصل بين القيمة المناسبة لكل صورة. إليك مثالًا:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_498_18" style=""><span class="kwd">background-image</span><span class="pun">:</span><span class="pln"> </span><span class="kwd">url</span><span class="pun">(</span><span class="str">image1.png</span><span class="pun">),</span><span class="pln"> </span><span class="kwd">url</span><span class="pun">(</span><span class="str">image2.png</span><span class="pun">),</span><span class="pln"> </span><span class="kwd">url</span><span class="pun">(</span><span class="str">image3.png</span><span class="pun">),</span><span class="pln">
  </span><span class="kwd">url</span><span class="pun">(</span><span class="str">image4.png</span><span class="pun">);</span><span class="pln">
</span><span class="kwd">background-repeat</span><span class="pun">:</span><span class="pln"> no-repeat</span><span class="pun">,</span><span class="pln"> repeat-x</span><span class="pun">,</span><span class="pln"> repeat</span><span class="pun">;</span><span class="pln">
</span><span class="kwd">background-position</span><span class="pun">:</span><span class="pln"> </span><span class="lit">10px</span><span class="pln"> </span><span class="lit">20px</span><span class="pun">,</span><span class="pln"> top right</span><span class="pun">;</span></pre>

<p>
	تتوافق كل قيمة للخاصيات المختلفة مع القيمة المقابلة في الخاصيات الأخرى، إذ ستأخذ الصورة "image1" قيمة خاصية التكرار <code>background-repeat</code> المقابلة لها وهي <code>no-repeat</code>.
</p>

<p>
	ما الذي سيحدث إذا أخذت الخاصيات المختلفة عددًا مختلفًا من القيم؟ ما يحدث في الواقع هو تكرار القيم الأقل عددًا في أي خاصية. لو نظرنا إلى المثال السابق لوجدنا أربعة صور للخلفية لكن فقط قيمتين لخاصية الموقع <code>background-position</code>. تُكرر في هذه الحالة قيم خاصيات الموضع أي ستأخذ الصورتين الأولى والثانية الموضعين الأول والثاني، ثم سيتكرر الأمر لتأخذ الصورتين الثالثة والرابعة الموضعين الأول والثاني من جديد.
</p>

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

<p style="text-align: center;">
	<iframe height="560" loading="lazy" src="https://mdn.github.io/css-examples/learn/backgrounds-borders/multiple-background-image.html" style="box-sizing: content-box; border: 1px solid var(--border-primary); max-width: 100%; width: calc((100% - 2rem) - 2px); background: rgb(255, 255, 255); border-radius: var(--elem-radius); padding: 1rem;" width="100%"></iframe>
</p>

<h3 id="-7">
	الترابط بين محتوى العنصر وخلفيته
</h3>

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

<ul>
	<li>
		<code>scroll</code>: يفرض هذا الخيار على خلفية العنصر أن تتحرك عند تحريك الصفحة فقط وليس مع تحرك أو تمرير محتوى العنصر؛ أي أن للخلفية موقعًا ثابتًا بالنسبة للصفحة ككل وتتحرك فقط عند تغيّر هذا الموقع.
	</li>
	<li>
		<code>fixed</code>: يفرض هذا الخيار على خلفية العنصر أن تبقى في نفس مكانها على شاشة العرض سواء تحرك محتوى الصفحة أو تحرّك محتوى العنصر.
	</li>
	<li>
		<code>local</code>: تتحرك خلفية العنصر في هذه الحالة مع حركة العنصر أثناء تحريك محتوى الصفحة ككل.
	</li>
</ul>

<p>
	تؤثر هذه الخاصية على العنصر أو الصفحة عندما يكون هناك محتوًى قابلًا للتمرير. يمكنك الاطلاع على عمل هذه الخاصية والفرق بين القيم الثلاث التي تأخذها من خلال المثال التجريبي <a href="https://mdn.github.io/learning-area/css/styling-boxes/backgrounds/background-attachment.html" rel="external nofollow">background-attachment.html</a> الموجود على غيت هب GitHub.
</p>

<h3 id="background">
	استخدام الخاصية المختصرة background
</h3>

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

<ul>
	<li>
		لا يمكن تحديد الخاصية إلا في نهاية القيم (بعد آخر فاصلة).
	</li>
	<li>
		لا بد من وضع قيمة الخاصية <code>background-size</code> بعد قيمة الخاصية <code>background-position</code> على أن يفصل بينهما المحرف <code>/</code> مثل <code>center/80%</code>.
	</li>
</ul>

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

<p style="text-align: center;">
	<iframe height="820" loading="lazy" src="https://mdn.github.io/css-examples/learn/backgrounds-borders/background.html" style="box-sizing: content-box; border: 1px solid var(--border-primary); max-width: 100%; width: calc((100% - 2rem) - 2px); background: rgb(255, 255, 255); border-radius: var(--elem-radius); padding: 1rem;" width="100%"></iframe>
</p>

<h3 id="-8">
	اعتبارات شمولية الوصول عند ضبط خلفيات العناصر
</h3>

<p>
	عندما تضع نصًا فوق صورة الخلفية أو فوق <a href="https://academy.hsoub.com/programming/css/%D8%AF%D9%84%D9%8A%D9%84-%D9%85%D8%AE%D8%AA%D8%B5%D8%B1-%D8%A5%D9%84%D9%89-%D9%86%D9%85%D9%88%D8%B0%D8%AC-%D8%A7%D9%84%D8%B5%D9%86%D8%AF%D9%88%D9%82-box-model-%D9%81%D9%8A-%D8%AA%D9%86%D8%B3%D9%8A%D9%82%D8%A7%D8%AA-css-r2126/" rel="">خلفية لونية</a>، لا بد من الانتباه إلى التباين اللوني بين الخلفية والنص حتى يتمكن جميع الزائرين من قراءة النص، وإذا وضعت صورة في الخلفية ونصًا فوقها، فعليك ضبط الخاصية <code>background-color</code> على لون يجعل قراءة النص سهلًا في حال لم تُحمّل الصورة.
</p>

<p>
	لا يمكن لقارئ الصفحة الآلي تحليل صور الخلفية، لهذا لا بُد أن تكون هذه الصور للديكور فقط وألا تحتوي على معلومات مهمة، إذ لا بُد أن يكون المحتوى المهم جزءًا من <a href="https://academy.hsoub.com/programming/html/%D8%AA%D8%B9%D9%84%D9%85-%D9%84%D8%BA%D8%A9-html-r1702/" rel="">صفحة HTML</a> وليس في صور الخلفيات.
</p>

<h2 id="-9">
	حواف العناصر والصفحة
</h2>

<p>
	عندما تحدثنا في مقال "<a href="https://academy.hsoub.com/programming/css/%D8%AF%D9%84%D9%8A%D9%84-%D9%85%D8%AE%D8%AA%D8%B5%D8%B1-%D8%A5%D9%84%D9%89-%D9%86%D9%85%D9%88%D8%B0%D8%AC-%D8%A7%D9%84%D8%B5%D9%86%D8%AF%D9%88%D9%82-box-model-%D9%81%D9%8A-%D8%AA%D9%86%D8%B3%D9%8A%D9%82%D8%A7%D8%AA-css-r2126/" rel="">نموذج الصندوق في تنسيقات CSS</a>" عن نموذج الصندوق رأينا كيف تؤثر الحواف على أبعاد صندوق العنصر، وسنتابع في هذا المقال حديثنا عن كيفية استخدام الحواف بذكاء. نستخدم عندما نضيف حوافًا أو حدودًا إلى عنصر من خلال تنسيقات CSS خاصيةً مختصرة تضبط لون وسماكة ونمط الحواف في سطر واحد. يمكنك أيضًا ضبط خاصيات الحواف الأربعة للصندوق باستخدام الخاصية <a href="https://wiki.hsoub.com/CSS/border" rel="external"><code>border</code></a>:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_498_21" style=""><span class="pun">.</span><span class="pln">box </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">border</span><span class="pun">:</span><span class="pln"> </span><span class="lit">1px</span><span class="pln"> solid black</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_498_23" style=""><span class="pun">.</span><span class="pln">box </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">border-top</span><span class="pun">:</span><span class="pln"> </span><span class="lit">1px</span><span class="pln"> solid black</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_498_25" style=""><span class="pun">.</span><span class="pln">box </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">border-width</span><span class="pun">:</span><span class="pln"> </span><span class="lit">1px</span><span class="pun">;</span><span class="pln">
  </span><span class="kwd">border-style</span><span class="pun">:</span><span class="pln"> solid</span><span class="pun">;</span><span class="pln">
  </span><span class="kwd">border-color</span><span class="pun">:</span><span class="pln"> black</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_498_27" style=""><span class="pun">.</span><span class="pln">box </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">border-top-width</span><span class="pun">:</span><span class="pln"> </span><span class="lit">1px</span><span class="pun">;</span><span class="pln">
  </span><span class="kwd">border-top-style</span><span class="pun">:</span><span class="pln"> solid</span><span class="pun">;</span><span class="pln">
  </span><span class="kwd">border-top-color</span><span class="pun">:</span><span class="pln"> black</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	<strong>ملاحظة</strong>: ترتبط الخواص <code>top</code> و <code>right</code> و <code>bottom</code> و <code>left</code> المتعلقة بالحواف منطقيًا بنمط الكتابة في المستند (يمين إلى يسار أو العكس) وهذا ما سنناقشه في موضع آخر.
</p>

<p>
	هنالك أنواع مختلفة من الأنماط التي يمكن أن يأخذها شكل الحافة، وهذا ما نعرضه في مثالنا المكتوب ضمن محرر الشيفرة التالي:
</p>

<p style="text-align: center;">
	<iframe height="720" loading="lazy" src="https://mdn.github.io/css-examples/learn/backgrounds-borders/borders.html" style="box-sizing: content-box; border: 1px solid var(--border-primary); max-width: 100%; width: calc((100% - 2rem) - 2px); background: rgb(255, 255, 255); border-radius: var(--elem-radius); padding: 1rem;" width="100%"></iframe>
</p>

<h3 id="-10">
	الحواف الدائرية
</h3>

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

<p>
	فلو أردنا مثلًا جعل استدارة جميع الحواف بنصف قطر 10px ستكون الشيفرة كما يلي:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_498_29" style=""><span class="pun">.</span><span class="pln">box </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">border-radius</span><span class="pun">:</span><span class="pln"> </span><span class="lit">10px</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	وإذا أردنا جعل الزاوية العليا اليمينية تبدو مستديرة وفق نصف قطر أفقي قيمته 1em وآخر عمودي نصف قطره 10% نكتب:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_498_31" style=""><span class="pun">.</span><span class="pln">box </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">border-top-right-radius</span><span class="pun">:</span><span class="pln"> </span><span class="lit">1em</span><span class="pln"> </span><span class="lit">10%</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></pre>

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

<p style="text-align: center;">
	<iframe height="700" loading="lazy" src="https://mdn.github.io/css-examples/learn/backgrounds-borders/corners.html" style="box-sizing: content-box; border: 1px solid var(--border-primary); max-width: 100%; width: calc((100% - 2rem) - 2px); background: rgb(255, 255, 255); border-radius: var(--elem-radius); padding: 1rem;" width="100%"></iframe>
</p>

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

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

<p>
	ترجمة -وبتصرف- لمقال <a href="https://developer.mozilla.org/en-US/docs/Learn/CSS/Building_blocks/Backgrounds_and_borders" rel="external nofollow">backgrounds and borders</a>.
</p>

<h2 id="-12">
	اقرأ أيضًا
</h2>

<ul>
	<li>
		المقال السابق: <a href="https://academy.hsoub.com/programming/css/%D8%AF%D9%84%D9%8A%D9%84-%D9%85%D8%AE%D8%AA%D8%B5%D8%B1-%D8%A5%D9%84%D9%89-%D9%86%D9%85%D9%88%D8%B0%D8%AC-%D8%A7%D9%84%D8%B5%D9%86%D8%AF%D9%88%D9%82-box-model-%D9%81%D9%8A-%D8%AA%D9%86%D8%B3%D9%8A%D9%82%D8%A7%D8%AA-css-r2126/" rel="">دليل مختصر إلى نموذج الصندوق Box Model في تنسيقات CSS</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D8%A7%D9%84%D8%AA%D9%86%D8%B3%D9%8A%D9%82%D8%A7%D8%AA-%D8%A7%D9%84%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A9-%D9%84%D9%84%D8%B9%D9%86%D8%A7%D8%B5%D8%B1-%D9%81%D9%8A-css-r1054/" rel="">التنسيقات الأساسية للعناصر في CSS</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%AA%D9%86%D8%B3%D9%8A%D9%82-%D8%A7%D9%84%D8%B5%D9%88%D8%B1-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-css-r1882/" rel="">كيفية تنسيق الصور باستخدام CSS</a>
	</li>
</ul>
]]></description><guid isPermaLink="false">2158</guid><pubDate>Fri, 03 Nov 2023 13:00:00 +0000</pubDate></item><item><title>&#x62F;&#x644;&#x64A;&#x644; &#x645;&#x62E;&#x62A;&#x635;&#x631; &#x625;&#x644;&#x649; &#x646;&#x645;&#x648;&#x630;&#x62C; &#x627;&#x644;&#x635;&#x646;&#x62F;&#x648;&#x642; Box Model &#x641;&#x64A; &#x62A;&#x646;&#x633;&#x64A;&#x642;&#x627;&#x62A; CSS</title><link>https://academy.hsoub.com/programming/css/%D8%AF%D9%84%D9%8A%D9%84-%D9%85%D8%AE%D8%AA%D8%B5%D8%B1-%D8%A5%D9%84%D9%89-%D9%86%D9%85%D9%88%D8%B0%D8%AC-%D8%A7%D9%84%D8%B5%D9%86%D8%AF%D9%88%D9%82-box-model-%D9%81%D9%8A-%D8%AA%D9%86%D8%B3%D9%8A%D9%82%D8%A7%D8%AA-css-r2126/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2023_09/--box-model---CSS.png.2475136a6ae188f78c1b7e3c958925e1.png" /></p>
<p>
	يحيط صندوق بكل شيء في تنسيقات CSS وفهم طبيعة هذه الصناديق هو المفتاح لإنشاء تخطيطات وإضافة تنسيقات باستخدام CSS، أو لمحاذاة العناصر مع بعضها. سنلقي نظرة معمقة في هذا المقال على نموذج الصندوق في CSS لكي تكون قادرًا على بناء تخطيطات أكثر تعقيدًا وفهم آلية عملها والمصطلحات المتعلقة بها.
</p>

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

<ul>
	<li>
		أساسيات عمل الحاسوب
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/general/%D8%AA%D8%AB%D8%A8%D9%8A%D8%AA-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D9%8A%D8%A7%D8%AA-%D8%A7%D9%84%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A9-%D9%84%D9%84%D8%A7%D9%86%D8%B7%D9%84%D8%A7%D9%82-%D9%81%D9%8A-%D8%AA%D8%B7%D9%88%D9%8A%D8%B1-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-r1671/" rel="">تثبيت البرمجيات الأساسية للانطلاق في تطوير الويب</a>
	</li>
	<li>
		أساسيات <a href="https://academy.hsoub.com/programming/general/%D8%A7%D9%84%D8%AA%D8%B9%D8%A7%D9%85%D9%84-%D9%85%D8%B9-%D8%A7%D9%84%D9%85%D9%84%D9%81%D8%A7%D8%AA-%D9%81%D9%8A-%D8%B9%D9%85%D9%84%D9%8A%D8%A9-%D8%AA%D8%B7%D9%88%D9%8A%D8%B1-%D9%85%D9%88%D9%82%D8%B9-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-r1686/" rel="">التعامل مع الملفات</a>
	</li>
	<li>
		فكرة عن <a href="https://academy.hsoub.com/programming/html/%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A7%D8%AA-%D9%84%D8%BA%D8%A9-html-r1687/" rel="">أساسيات HTML</a>
	</li>
	<li>
		فكرة عن <a href="https://academy.hsoub.com/programming/css/%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A7%D8%AA-%D9%84%D8%BA%D8%A9-css-r1688/" rel="">أساسيات عمل لغة CSS</a>
	</li>
</ul>

<h2>
	الصناديق الكتلية والصناديق السطرية
</h2>

<p>
	يمكن أن نقسم الصناديق في <a href="https://academy.hsoub.com/programming/css/%D8%A7%D9%84%D8%AF%D9%84%D9%8A%D9%84-%D8%A7%D9%84%D8%B3%D8%B1%D9%8A%D8%B9-%D8%A5%D9%84%D9%89-%D9%84%D8%BA%D8%A9-%D8%A7%D9%84%D8%AA%D9%86%D8%B3%D9%8A%D9%82-css-r551/" rel="">لغة CSS</a> إلى نوعين عريضين هما الصناديق الكتلية block boxes والصناديق السطرية inline boxes. جاءت هاتين التسميتين من سلوك الصناديق مع طريقة انسياب عناصر الصفحة وعلاقتها مع بقية الصناديق. كما تتميز الصناديق بوجود نمط عرض خارجي outer display type وآخر داخلي inner display type. سنشرح بداية ما نقصده بالصناديق الكتلية والسطرية، ومن ثم سننتقل إلى مفهومي نمط العرض الداخلي والخارجي.
</p>

<p>
	إن كان لصندوق نمط العرض الخارجي <code>block</code> فسيسلك السلوك التالي:
</p>

<ul>
	<li>
		سينتهي الصندوق لتأتي العناصر التالية في سطر جديد.
	</li>
	<li>
		سيمتد الصندوق وفق الاتجاه السطري ليملأ المساحة المتاحة له في العنصر الذي يحتويه. ويعني ذلك في معظم الحالات، أنّ اتساع الصندوق سيماثل اتساع حاويته ويمتد ليملأ المساحة المخصصة له بأكلمها.
	</li>
	<li>
		تُحترم قيمتي الخاصيتين <a href="https://wiki.hsoub.com/CSS/width" rel="external"><code>width</code></a> و<a href="https://wiki.hsoub.com/CSS/height" rel="external"><code>height</code></a>.
	</li>
	<li>
		تساهم الحاشية Padding والهامش margin والإطار border في دفع بقية العناصر بعيدًا عن الصندوق.
	</li>
</ul>

<p>
	تأخذ بعض <a href="https://wiki.hsoub.com/HTML" rel="external">عناصر HTML</a> نمط العرض الخارجي <code>block</code> افتراضيًا مثل <code>&lt;h1&gt;</code> و<code>&lt;p&gt;</code>. بينما إن كان لصندوق نمط العرض الخارجي <code>inline</code> فسيسلك السلوك التالي:
</p>

<ul>
	<li>
		ستأتي العناصر التالية في السطر نفسه عندما ينتهي الصندوق.
	</li>
	<li>
		لن تُطبق الخاصيتين <a href="https://wiki.hsoub.com/CSS/width" rel="external"><code>width</code></a> و<a href="https://wiki.hsoub.com/CSS/height" rel="external"><code>height</code></a>.
	</li>
	<li>
		تُطبق الحاشيات والهوامش والإطارات العمودية، لكنها لن تدفع غيرها من الصناديق السطرية إلى الابتعاد عن الصندوق.
	</li>
	<li>
		تُطبق الحاشيات والهوامش والإطارات الأفقية، وستدفع غيرها من الصناديق السطرية إلى الابتعاد عن الصندوق.
	</li>
</ul>

<p>
	تأخذ بعض عناصر HTML نمط العرض الخارجي <code>inline</code> افتراضيًا مثل <a href="https://wiki.hsoub.com/HTML/a" rel="external"><code>&lt;a&gt;</code></a> و<a href="https://wiki.hsoub.com/HTML/span" rel="external"><code>&lt;span&gt;</code></a> و<a href="https://wiki.hsoub.com/HTML/em" rel="external"><code>&lt;em&gt;</code></a> و<a href="%5D(https://wiki.hsoub.com/HTML/strong" rel=""><code>&lt;strong&gt;</code></a>.
</p>

<p>
	يُحدد نمط الصندوق من خلال الخاصية <a href="https://wiki.hsoub.com/CSS/display" rel="external"><code>display</code></a> التي تأخذ قيمًا مثل <code>block</code> و<code>inline</code>، وتتعلق بالقيم الخارجية.
</p>

<h2>
	نوعا عرض الصناديق الداخلي والخارجي
</h2>

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

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

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

<p>
	<strong>ملاحظة</strong>: للاطلاع على قيم أخرى للخاصية وآلية عمل الصناديق في التخطيطات الكتلية والسطرية، ألق نظرة على مقال "<a href="https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_flow_layout/Block_and_inline_layout_in_normal_flow" rel="external nofollow">التخطيطات الكتلية والسطرية</a>".
</p>

<p>
	ستتعرف على القيمة <code>flex</code> بتفاصيل أكبر عندما تتقدم في دراسة CSS، بالإضافة إلى قيم داخلية أخرى يمكن أن تأخذها الصناديق مثل <code>grid</code>.
</p>

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

<h2>
	أمثلة عن أنماط العرض المختلفة
</h2>

<p>
	لنلق نظرة على بعض الامثلة التي توضح أنماط العرض. لدينا في المثال التالي ثلاثة <a href="https://academy.hsoub.com/programming/html/%D8%A8%D8%B9%D8%B6-%D8%A7%D9%84%D8%B9%D9%86%D8%A7%D8%B5%D8%B1-%D9%88%D8%A7%D9%84%D9%85%D9%81%D8%A7%D9%87%D9%8A%D9%85-%D8%A7%D9%84%D9%85%D9%87%D9%85%D8%A9-%D9%81%D9%8A-%D9%84%D8%BA%D8%A9-html-r1895/" rel="">عناصر HTML</a> مختلفة تمتلك جميعها نمط العرض الخارجي <code>block</code>. العنصر الأول فقرة نصية له إطار أضيف باستخدام CSS ويعرضه المتصفح كصندوق كتلي، وبالتالي ستبدأ الفقرة مع بداية سطر جديد وتمتد لتحتل المساحة المتاحة لها بأكملها.
</p>

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

<p>
	العنصر الثالث هو فقرة نصية يوجد داخلها عنصري <code>&lt;span&gt;</code> يُعرضان افتراضيًا وفق النمط السطري <code>inline</code> لأحدهما الصنف "block" وضبط نمط العرض الخارجي له بالشكل <code>display: block</code>.
</p>

<p style="text-align: center;">
	<iframe height="1130" loading="lazy" src="https://mdn.github.io/css-examples/learn/box-model/block.html" style="box-sizing: border-box; max-width: 100%; width: 615.739px; border: 1px solid var(--border-primary); background: rgb(255, 255, 255); border-radius: var(--elem-radius); padding: 1rem;" width="100%"></iframe>
</p>

<p>
	سنرى في المثال التالي سلوك العناصر السطرية <code>inline</code>. تضم الفقرة النصية الأولى عناصر <code>&lt;span&gt;</code> سطرية افتراضيًا لا تجبر التخطيط على البدء بسطر جديد بعدها. ولدينا أيضًا قائمة غير مرتبة ضُبطت خاصية العرض فيها على القيمة <code>display: inline-flex</code>، ويعني ذلك أنّ نمطها الخارجي هو نمط سطري ويحيط صندوقها ببعض العناصر ذات التخطيط المرن.
</p>

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

<p>
	<strong>ملاحظة</strong>: يمكنك في هذا المثال تغيير القيمة <code>display: inline</code> إلى <code>display: block</code> والقيمة <code>display: inline-flex</code> إلى <code>display: flex</code> للتغيير بين أنماط العرض.
</p>

<p style="text-align: center;">
	<iframe height="1080" loading="lazy" src="https://mdn.github.io/css-examples/learn/box-model/inline.html" style="box-sizing: border-box; max-width: 100%; width: 615.739px; border: 1px solid var(--border-primary); background: rgb(255, 255, 255); border-radius: var(--elem-radius); padding: 1rem;" width="100%"></iframe>
</p>

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

<p>
	سنركز فيما تبقى من المقال على نمط العرض الخارجي فقط.
</p>
<iframe allowfullscreen="" data-controller="core.front.core.autosizeiframe" data-embedauthorid="3889" data-embedcontent="" src="https://academy.hsoub.com/files/31-%D9%85%D9%84%D8%A7%D8%AD%D8%B8%D8%A7%D8%AA-%D9%84%D9%84%D8%B9%D8%A7%D9%85%D9%84%D9%8A%D9%86-%D8%A8%D9%84%D8%BA%D8%A9-css/?do=embed" style="margin: auto;"></iframe>

<h2>
	نموذج صندوق CSS
</h2>

<p>
	يُطبق <a href="https://academy.hsoub.com/programming/css/%D8%A7%D9%84%D9%86%D9%85%D9%88%D8%B0%D8%AC-%D8%A7%D9%84%D8%B5%D9%86%D8%AF%D9%88%D9%82%D9%8A-box-model-%D9%81%D9%8A-css-r1051" rel="">نموذج الصندوق Box Model</a> بأكمله على الصناديق الكتلية، بينما تستخدم الصناديق السطرية بعضًا من الأساليب التي يعرفها نموذج الصندوق. يُعرّف النموذج كيفية عمل الأجزاء المختلفة للصندوق (الهوامش والحدود والحاشية والمحتوى) لإنشاء الصندوق الذي تراه في الصفحة. ولكي نزيد الطين بلَّة فهنالك نموذج صندوق معياري وآخر بديل.
</p>

<h3>
	أجزاء الصندوق
</h3>

<p>
	لبناء صندوق كتلي في CSS لا بدّ من وجود:
</p>

<ul>
	<li>
		<p>
			<strong>صندوق محتوى</strong>: المنطقة التي يُعرض فيها المحتوى ويمكن تحديد أبعادها باستخدام خاصيات مثل <a href="https://wiki.hsoub.com/CSS/width" rel="external"><code>width</code></a> و <a href="https://wiki.hsoub.com/CSS/height" rel="external"><code>height</code></a>.
		</p>
	</li>
	<li>
		<p>
			<strong>صندوق الحاشية</strong>: وهي منطقة الحاشية التي تحيط بصندوق المحتوى كمساحة فارغة ويمكن التحكم بأبعادها من خلال الخاصية <a href="https://wiki.hsoub.com/CSS/padding" rel="external"><code>padding</code></a> وما يتعلق بها.
		</p>
	</li>
	<li>
		<p>
			<strong>صندوق الإطار (أو الحدود)</strong>: ويُغلِّف صندوقي المحتوى والحاشية، ويمكن التحكم بأبعاده من خلال الخاصية <a href="https://wiki.hsoub.com/CSS/border" rel="external"><code>border</code></a> والخصائص المتعلقة بها .
		</p>
	</li>
	<li>
		<p>
			<strong>صندوق الهوامش</strong>: ويمثل الطبقة الخارجية من نموذج الصندوق، ويغلف الصناديق الثلاث السابقة على شكل مساحة فارغة بينه وبين بقية العناصر، ويمكن التحكم بأبعاده من خلال الخاصية <a href="https://wiki.hsoub.com/CSS/margin" rel="external"><code>margin</code></a> والخصائص المتعلقة بها.
		</p>
	</li>
</ul>

<p>
	إليك مخططًا يظهر هذه الطبقات:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="135549" href="https://academy.hsoub.com/uploads/monthly_2023_09/01_outer_box_model.png.c4156c60ce508de6f226ccf94346c445.png" rel=""><img alt="01_outer_box_model.png" class="ipsImage ipsImage_thumbnailed" data-fileid="135549" data-unique="j0ergade0" src="https://academy.hsoub.com/uploads/monthly_2023_09/01_outer_box_model.png.c4156c60ce508de6f226ccf94346c445.png"> </a>
</p>

<h3>
	نموذج صندوق CSS المعياري
</h3>

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

<p>
	لنفترض وجود صندوق عُرّفت خصائصه كالتالي:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_2206_9" style=""><span class="pun">.</span><span class="pln">box </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">width</span><span class="pun">:</span><span class="pln"> </span><span class="lit">350px</span><span class="pun">;</span><span class="pln">
  </span><span class="kwd">height</span><span class="pun">:</span><span class="pln"> </span><span class="lit">150px</span><span class="pun">;</span><span class="pln">
  </span><span class="kwd">margin</span><span class="pun">:</span><span class="pln"> </span><span class="lit">10px</span><span class="pun">;</span><span class="pln">
  </span><span class="kwd">padding</span><span class="pun">:</span><span class="pln"> </span><span class="lit">25px</span><span class="pun">;</span><span class="pln">
  </span><span class="kwd">border</span><span class="pun">:</span><span class="pln"> </span><span class="lit">5px</span><span class="pln"> solid black</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	سيكون الحجم الكلي الذي يشغله الصندوق هو 410 بكسل (350+25+25+3+5) اتساعًا و (150+25+25+5+5) ارتفاعًا.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="135548" href="https://academy.hsoub.com/uploads/monthly_2023_09/02_standard_css_box.png.6c0cd6b2e4d3197bb560391f76508704.png" rel=""><img alt="02_standard_css_box.png" class="ipsImage ipsImage_thumbnailed" data-fileid="135548" data-unique="b9cztvcu3" src="https://academy.hsoub.com/uploads/monthly_2023_09/02_standard_css_box.png.6c0cd6b2e4d3197bb560391f76508704.png"> </a>
</p>

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

<h3>
	نموذج صندوق CSS البديل
</h3>

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

<p>
	سيعطي تطبيق نفس الخصائص في المثال السابق صندوقًا أبعاده 350 بكسل اتساعًا و150 بكسل ارتفاعًا.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="135547" href="https://academy.hsoub.com/uploads/monthly_2023_09/03_alt_css_box.png.72657281ac28bd82f401e3fe19d7c2d3.png" rel=""><img alt="03_alt_css_box.png" class="ipsImage ipsImage_thumbnailed" data-fileid="135547" data-unique="6evvd69hf" src="https://academy.hsoub.com/uploads/monthly_2023_09/03_alt_css_box.png.72657281ac28bd82f401e3fe19d7c2d3.png"> </a>
</p>

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

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_2206_11" style=""><span class="pun">.</span><span class="pln">box </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">box-sizing</span><span class="pun">:</span><span class="pln"> border-box</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	وإن أردت أن تستخدم النموذج البديل لكل العناصر وهذا خيار شائع بين المطورين، عليك ضبط قيمة الخاصية <code>box-sizing</code> للعنصر <a href="https://wiki.hsoub.com/HTML/html" rel="external"><code>&lt;html&gt;</code></a> على القيمة <code>border-box</code>، ثم اضبط قيمة هذه الخاصية لبقية العناصر على القيمة <code>inherit</code> كما تلاحظ في الشيفرة البسيطة التالية:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_2206_13" style=""><span class="pln">html </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">box-sizing</span><span class="pun">:</span><span class="pln"> border-box</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">before</span><span class="pun">,</span><span class="pln"> </span><span class="pun">*::</span><span class="pln">after </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">box-sizing</span><span class="pun">:</span><span class="pln"> </span><span class="kwd">inherit</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	<strong>ملاحظة</strong>: استخدم إنترنت إكسبلورر (كمعلومة تاريخية) نموذج الصندوق البديل افتراضيًا دون أن تتوفر أية آليات للتبديل مع النموذج المعياري.
</p>

<h2>
	العمل مع نماذج الصندوق
</h2>

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

<p>
	<strong>تطبيق</strong>: هل يمكنك تغيير حجم الصندوق الثاني (بإضافة تصريحات CSS إلى الصنف <code>alternate.</code>) ليطابق الصندوق الأول بالاتساع والإرتفاع؟
</p>

<p style="text-align: center;">
	<iframe height="1085" loading="lazy" src="https://mdn.github.io/css-examples/learn/box-model/box-models.html" style="box-sizing: border-box; max-width: 100%; width: 615.739px; border: 1px solid var(--border-primary); background: rgb(255, 255, 255); border-radius: var(--elem-radius); padding: 1rem;" width="100%"></iframe>
</p>

<p>
	<strong>ملاحظة</strong>: يمكنك إيجاد الحل على <a href="https://github.com/mdn/css-examples/blob/main/learn/solutions.md#the-box-model" rel="external nofollow">المستودع الخاص</a> بالمقال على غت-هب
</p>

<h3>
	استخدام أداة مطوري ويب المدمجة مع المتصفح لعرض نموذج الصندوق
</h3>

<p>
	تُسهِّل <a href="https://academy.hsoub.com/programming/workflow/%D8%A3%D8%AF%D9%88%D8%A7%D8%AA-%D9%85%D8%B7%D9%88%D8%B1%D9%8A-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-%D8%A7%D9%84%D9%85%D8%AF%D9%85%D8%AC%D8%A9-%D9%81%D9%8A-%D8%A7%D9%84%D9%85%D8%AA%D8%B5%D9%81%D8%AD%D8%A7%D8%AA-r1439/" rel="">أدوات مطوري ويب</a> المدمجة مع المتصفح فهم نموذج الصندوق. فعندما تتفحص عنصرًا باستخدام هذه الأدوات يمكنك أن ترى أبعاد العنصر بالإضافة إلى حشوته وهوامشه وإطاره. وهكذا يمكنك أن تعرف بسهولة إن كان حجم الصندوق كما تعتقد أو لا.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="135546" href="https://academy.hsoub.com/uploads/monthly_2023_09/04_dev_tools_box.png.1b001c6159ce1c0746fdab3bf3f3f7c6.png" rel=""><img alt="04_dev_tools_box.png" class="ipsImage ipsImage_thumbnailed" data-fileid="135546" data-unique="mmixkj6jf" src="https://academy.hsoub.com/uploads/monthly_2023_09/04_dev_tools_box.png.1b001c6159ce1c0746fdab3bf3f3f7c6.png"> </a>
</p>

<h2>
	الهوامش والحاشيات والإطارات
</h2>

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

<h3>
	الهوامش
</h3>

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

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

<ul>
	<li>
		<a href="https://wiki.hsoub.com/CSS/margin-top" rel="external"><code>margin-top</code></a>
	</li>
	<li>
		<a href="https://wiki.hsoub.com/CSS/margin-right" rel="external"><code>margin-right</code></a>
	</li>
	<li>
		<a href="https://wiki.hsoub.com/CSS/margin-bottom" rel="external"><code>margin-bottom</code></a>
	</li>
	<li>
		<a href="https://wiki.hsoub.com/CSS/margin-left" rel="external"><code>margin-left</code></a>
	</li>
</ul>

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

<p style="text-align: center;">
	<iframe height="745" loading="lazy" src="https://mdn.github.io/css-examples/learn/box-model/margin.html" style="box-sizing: border-box; max-width: 100%; width: 615.739px; border: 1px solid var(--border-primary); background: rgb(255, 255, 255); border-radius: var(--elem-radius); padding: 1rem;" width="100%"></iframe>
</p>

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

<p>
	لدينا في المثال التالي فقرتين نصيتين للأولى هامش سفلي <code>margin-bottom</code> مقداره 50 بكسل وللثانية هامش علوي <code>margin-top</code> قيمته 30 بكسل. سيتقلص الهامش بينهما في هذه الحالة لتصبح قيمته 50 بكسل وليس مجموع الهامشين.
</p>

<p>
	<strong>تطبيق</strong>: اختبر تقليص الهوامش بجعل الهامش العلوي للفقرة الثانية 0 بكسل ولاحظ عدم تغير الهامش بين الفقرتين، وسيبقى 50 بكسل. حاول أن تضبط الهامش العلوي على -10 بكسل هذه المرة ولاحظ كيف يصبح الهامش المرئي بين الفقرتين 40 بكسل.
</p>

<p style="text-align: center;">
	<iframe height="770" loading="lazy" src="https://mdn.github.io/css-examples/learn/box-model/margin-collapse.html" style="box-sizing: border-box; max-width: 100%; width: 615.739px; border: 1px solid var(--border-primary); background: rgb(255, 255, 255); border-radius: var(--elem-radius); padding: 1rem;" width="100%"></iframe>
</p>

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

<h3>
	الإطارات
</h3>

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

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

<ul>
	<li>
		<a href="https://wiki.hsoub.com/CSS/border-top" rel="external"><code>border-top</code></a>
	</li>
	<li>
		<a href="https://wiki.hsoub.com/CSS/border-right" rel="external"><code>border-right</code></a>
	</li>
	<li>
		<a href="https://wiki.hsoub.com/CSS/border-bottom" rel="external"><code>border-bottom</code></a>
	</li>
	<li>
		<a href="https://wiki.hsoub.com/CSS/border-left" rel="external"><code>border-left</code></a>
	</li>
</ul>

<p>
	استخدم الخاصيات التالية لضبط اتساع وشكل ولون جميع الجوانب:
</p>

<ul>
	<li>
		<a href="https://wiki.hsoub.com/CSS/border-width" rel="external"><code>border-width</code></a>
	</li>
	<li>
		<a href="https://wiki.hsoub.com/CSS/border-style" rel="external"><code>border-style</code></a>
	</li>
	<li>
		<a href="https://wiki.hsoub.com/CSS/border-color" rel="external"><code>border-color</code></a>
	</li>
</ul>

<p>
	ولضبط اتساع وعرض وشكل كل جانب بمفرده، يمكن استخدام الخاصيات المطولة التالية:
</p>

<ul>
	<li>
		<a href="https://wiki.hsoub.com/CSS/border-top-width" rel="external"><code>border-top-width</code></a>
	</li>
	<li>
		<a href="https://wiki.hsoub.com/CSS/border-top-style" rel="external"><code>border-top-style</code></a>
	</li>
	<li>
		<a href="https://wiki.hsoub.com/CSS/border-top-color" rel="external"><code>border-top-color</code></a>
	</li>
	<li>
		<a href="https://wiki.hsoub.com/CSS/border-right-width" rel="external"><code>border-right-width</code></a>
	</li>
	<li>
		<a href="https://wiki.hsoub.com/CSS/border-right-style" rel="external"><code>border-right-style</code></a>
	</li>
	<li>
		<a href="https://wiki.hsoub.com/CSS/border-right-color" rel="external"><code>border-right-color</code></a>
	</li>
	<li>
		<a href="https://wiki.hsoub.com/CSS/border-bottom-width" rel="external"><code>border-bottom-width</code></a>
	</li>
	<li>
		<a href="https://wiki.hsoub.com/CSS/border-bottom-style" rel="external"><code>border-bottom-style</code></a>
	</li>
	<li>
		<a href="https://wiki.hsoub.com/CSS/border-bottom-color" rel="external"><code>border-bottom-color</code></a>
	</li>
	<li>
		<a href="https://wiki.hsoub.com/CSS/border-left-width" rel="external"><code>border-left-width</code></a>
	</li>
	<li>
		<a href="https://wiki.hsoub.com/CSS/border-left-style" rel="external"><code>border-left-style</code></a>
	</li>
	<li>
		<a href="https://wiki.hsoub.com/CSS/border-left-color" rel="external"><code>border-left-color</code></a>
	</li>
</ul>

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

<p style="text-align: center;">
	<iframe height="730" loading="lazy" src="https://mdn.github.io/css-examples/learn/box-model/border.html" style="box-sizing: border-box; max-width: 100%; width: 615.739px; border: 1px solid var(--border-primary); background: rgb(255, 255, 255); border-radius: var(--elem-radius); padding: 1rem;" width="100%"></iframe>
</p>

<h3>
	الحاشيات
</h3>

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

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

<ul>
	<li>
		<a href="https://wiki.hsoub.com/CSS/padding-top" rel="external"><code>padding-top</code></a>
	</li>
	<li>
		<a href="https://wiki.hsoub.com/CSS/padding-right" rel="external"><code>padding-right</code></a>
	</li>
	<li>
		<a href="https://wiki.hsoub.com/CSS/padding-bottom" rel="external"><code>padding-bottom</code></a>
	</li>
	<li>
		<a href="https://wiki.hsoub.com/CSS/padding-left" rel="external"><code>padding-left</code></a>
	</li>
</ul>

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

<p style="text-align: center;">
	<iframe height="685" loading="lazy" src="https://mdn.github.io/css-examples/learn/box-model/padding.html" style="box-sizing: border-box; max-width: 100%; width: 615.739px; border: 1px solid var(--border-primary); background: rgb(255, 255, 255); border-radius: var(--elem-radius); padding: 1rem;" width="100%"></iframe>
</p>

<h2>
	نموذج الصندوق والصناديق السطرية
</h2>

<p>
	يُطبّق كل ما شرحناه سابقًا على الصناديق الكتلية، كما تُطبق بعض تلك الخاصيات على الصناديق السطرية أيضًا كتلك التي تتشكل من عناصر <code>&lt;span&gt;</code>.
</p>

<p>
	لدينا في المثال التالي عنصر <code>&lt;span&gt;</code> داخل فقرة نصية وقد ضبط اتساعه وارتفاعه وهوامشه وحاشيته وإطاره باستخدام خاصيات CSS. لاحظ كيف تجاهل المتصفح الاتساع والارتفاع واحترم الهوامش والحاشيات والإطارات العمودية، لكن لم يراع الصندوق السطري لهذا العنصر العلاقة مع بقية المحتوى، وتداخلت الحاشية والإطار مع كلمات الفقرة النصية. أما الهوامش والحاشيات والإطارات الأفقية فستُحترم مسببة تباعد المحتوى عن صندوق العنصر.
</p>

<p style="text-align: center;">
	<iframe height="700" loading="lazy" src="https://mdn.github.io/css-examples/learn/box-model/inline-box-model.html" style="box-sizing: border-box; max-width: 100%; width: 615.739px; border: 1px solid var(--border-primary); background: rgb(255, 255, 255); border-radius: var(--elem-radius); padding: 1rem;" width="100%"></iframe>
</p>

<h2>
	استخدام التصريح display: inline-block
</h2>

<p>
	تمتلك الخاصية <code>display</code> قيمة خاصة تؤمن أرضية مشتركة بين الحالة الكتلية <code>block</code> والسطرية <code>inline</code> وهي <code>inline-block</code>. وتظهر فائدتها في الحالات التي لا ترغب فيها في الانتقال إلى سطر جديد وتريد أن يُحترم ارتفاع واتساع الصندوق دون تداخل كما رأينا في المثال السابق.
</p>

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

<ul>
	<li>
		احترام قيم الخاصيتين <code>width</code> and <code>height</code>.
	</li>
	<li>
		تدفع الخاصيات <code>padding</code> و <code>margin</code> و <code>border</code> العناصر الأخرى بعيدًا عن صندوق العنصر.
	</li>
</ul>

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

<p>
	<strong>تطبيق</strong>: حاول أن تغيّر قيمة الخاصية <code>display</code> في المثال التالي من <code>inline-block</code> إلى <code>block</code>، أو أن تحذف سطر هذا التصريح بالكامل ولاحظ ما سيحدث!
</p>

<p style="text-align: center;">
	<iframe height="810" loading="lazy" src="https://mdn.github.io/css-examples/learn/box-model/inline-block.html" style="box-sizing: border-box; max-width: 100%; width: 615.739px; border: 1px solid var(--border-primary); background: rgb(255, 255, 255); border-radius: var(--elem-radius); padding: 1rem;" width="100%"></iframe>
</p>

<p>
	يمكنك الاستفادة من هذا الأمر عندما تريد توسيع المنطقة التي تنقر فيها على رابط <code>&lt;a&gt;</code> بإضافة حشوة <code>padding</code>. فالرابط <code>&lt;a&gt;</code> هو عنصر سطري مثل العنصر <code>&lt;span&gt;</code>، ويمكنك استخدام التصريح <code>display: inline-block</code> لكي تُطبِّق حشوة حوله وتسهّل على المستخدم النقر عليه.
</p>

<p>
	يُلاحظ هذا الأسلوب مرارًا في أشرطة التنقل. إذ يُعرض شريط التنقل التالي الذي في صف باستخدام أسلوب الصندوق المرن flexbox وقد أضيفت حشوة إلى كل رابط لتوسيع المنطقة المحيطة به، ولتغيير لون الخلفية <code>background-color</code> عند تمرير مؤشر الفأرة فوقه. لاحظ تداخل صندوق الرابط مع إطار القائمة غير المرتبة <code>&lt;ul&gt;</code>، ذلك لأن الروابط <code>&lt;a&gt;</code> عناصر سطرية.
</p>

<p>
	<strong>تطبيق</strong>: أضف التصريح <code>display: inline-block</code> إلى المحدد <code>links-list a.</code>، وستلاحظ كيف تُحل مشكلة التداخل، باحترام بقية العناصر لحشوة الرابط.
</p>

<p style="text-align: center;">
	<iframe height="675" loading="lazy" src="https://mdn.github.io/css-examples/learn/box-model/inline-block-nav.html" style="box-sizing: border-box; max-width: 100%; width: 615.739px; border: 1px solid var(--border-primary); background: rgb(255, 255, 255); border-radius: var(--elem-radius); padding: 1rem;" width="100%"></iframe>
</p>

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

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

<p>
	ترجمة -وبتصرف- للمقال <a href="https://developer.mozilla.org/en-US/docs/Learn/CSS/Building_blocks/The_box_model" rel="external nofollow">The box model</a>.
</p>

<h2>
	اقرأ أيضًا
</h2>

<ul>
	<li>
		المقال السابق: <a href="https://academy.hsoub.com/programming/css/%D9%85%D8%AD%D8%AF%D8%AF%D8%A7%D8%AA-%D8%A7%D9%84%D8%AA%D8%AC%D9%85%D9%8A%D8%B9-combinators-%D9%81%D9%8A-css-r2125/" rel="">محددات التجميع combinators في CSS</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%AA%D8%B9%D8%AF%D9%8A%D9%84-%D8%AD%D8%AC%D9%85-%D8%B9%D9%86%D8%B5%D8%B1-html-%D9%88%D8%A7%D9%84%D9%85%D8%B3%D8%A7%D8%AD%D8%A9-%D8%A7%D9%84%D9%85%D8%AD%D9%8A%D8%B7%D8%A9-%D8%A8%D9%87-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-css-r1911/" rel="">كيفية تعديل حجم عنصر HTML والمساحة المحيطة به باستخدام CSS</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D8%A7%D9%84%D8%AA%D8%AD%D9%83%D9%85-%D9%81%D9%8A-%D8%AA%D8%AE%D8%B7%D9%8A%D8%B7-%D8%A7%D9%84%D8%B5%D9%81%D8%AD%D8%A9-%D9%88%D8%B6%D8%A8%D8%B7-%D9%85%D8%AD%D8%A7%D8%B0%D8%A7%D8%A9-%D8%A7%D9%84%D8%B9%D9%86%D8%A7%D8%B5%D8%B1-%D9%81%D9%8A-css-r1050/" rel="">التحكم في تخطيط الصفحة وضبط محاذاة العناصر في CSS</a>
	</li>
</ul>
]]></description><guid isPermaLink="false">2126</guid><pubDate>Mon, 09 Oct 2023 13:01:01 +0000</pubDate></item><item><title>&#x645;&#x62D;&#x62F;&#x62F;&#x627;&#x62A; &#x627;&#x644;&#x62A;&#x62C;&#x645;&#x64A;&#x639; combinators &#x641;&#x64A; CSS</title><link>https://academy.hsoub.com/programming/css/%D9%85%D8%AD%D8%AF%D8%AF%D8%A7%D8%AA-%D8%A7%D9%84%D8%AA%D8%AC%D9%85%D9%8A%D8%B9-combinators-%D9%81%D9%8A-css-r2125/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2023_09/---CSS.png.0b4e8ac424f07dff938366356579ebc5.png" /></p>
<p>
	نلقي نظرة في هذا المقال على محددات تُدعى محددات التجميع أو الضم combinators، فهي تجمع بين محددات أخرى بطريقة تُرسي نوعًا من العلاقية المفيدة فيما بينها وبين أماكن توزع المحتوى في الصفحة.
</p>

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

<ul>
	<li>
		أساسيات عمل الحاسوب
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/general/%D8%AA%D8%AB%D8%A8%D9%8A%D8%AA-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D9%8A%D8%A7%D8%AA-%D8%A7%D9%84%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A9-%D9%84%D9%84%D8%A7%D9%86%D8%B7%D9%84%D8%A7%D9%82-%D9%81%D9%8A-%D8%AA%D8%B7%D9%88%D9%8A%D8%B1-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-r1671/" rel="">تثبيت البرمجيات الأساسية للانطلاق في تطوير الويب</a>
	</li>
	<li>
		أساسيات <a href="https://academy.hsoub.com/programming/general/%D8%A7%D9%84%D8%AA%D8%B9%D8%A7%D9%85%D9%84-%D9%85%D8%B9-%D8%A7%D9%84%D9%85%D9%84%D9%81%D8%A7%D8%AA-%D9%81%D9%8A-%D8%B9%D9%85%D9%84%D9%8A%D8%A9-%D8%AA%D8%B7%D9%88%D9%8A%D8%B1-%D9%85%D9%88%D9%82%D8%B9-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-r1686/" rel="">التعامل مع الملفات</a>
	</li>
	<li>
		فكرة عن <a href="https://academy.hsoub.com/programming/html/%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A7%D8%AA-%D9%84%D8%BA%D8%A9-html-r1687/" rel="">أساسيات HTML</a>
	</li>
	<li>
		فكرة عن <a href="https://academy.hsoub.com/programming/css/%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A7%D8%AA-%D9%84%D8%BA%D8%A9-css-r1688/" rel="">أساسيات عمل لغة CSS</a>
	</li>
</ul>

<h2>
	محددات العناصر السليلة
</h2>

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

<pre class="ipsCode">body article p
</pre>

<p>
	نطابق في المثال التالي فقط العناصر <code>&lt;p&gt;</code> الموجودة داخل عنصر يمتلك الصنف <code>box.</code>:
</p>

<p style="text-align: center;">
	<iframe height="490" loading="lazy" src="https://mdn.github.io/css-examples/learn/selectors/descendant.html" style="box-sizing: border-box; max-width: 100%; width: 615.739px; border: 1px solid var(--border-primary); background: rgb(255, 255, 255); border-radius: var(--elem-radius); padding: 1rem;" width="100%"></iframe>
</p>

<h2>
	محددات الأبناء المباشرين
</h2>

<p>
	تُوضع إشارة <a href="https://wiki.hsoub.com/CSS/Child_Selectors" rel="external">مجمعات الأبناء المباشرين child combinator</a> والتي تمثل <code>&lt;</code> بين محددي CSS، وتطابق فقط العناصر التي يختارها المحدد الثاني إن كانت أبناءً مباشرين للعناصر التي يختارها المحدد الأول. لن تُختار بالطبع العناصر إن لم تكن من الأبناء المباشرين. فلو أردنا فقط اختيار عناصر <code>&lt;p&gt;</code> التي تُمثِّل أبناءً مباشرين للعناصر <code>&lt;article&gt;</code> مثلًا سيكون الضم كالتالي:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_2132_8" style=""><span class="pln">article </span><span class="pun">&gt;</span><span class="pln"> p</span></pre>

<p>
	لدينا في المثال التالي قائمة غير مرتبة ضمنها قائمة مرتبة. سنستخدم محدد العناصر السليلة لاختيار عناصر القائمة <a href="https://wiki.hsoub.com/HTML/li" rel="external"><code>&lt;li&gt;</code></a> التي تمثِّل أبناء مباشرين للقائمة غير المرتبة <a href="https://wiki.hsoub.com/HTML/ul" rel="external"><code>&lt;ul&gt;</code></a> ونحيطها بإطار يظهر منه الحد العلوي.
</p>

<p>
	إن أزلت الإشارة التي تدل على محدد الأبناء المباشرين، سينتهي بك المطاف إلى محدد العناصر السليلة وسيظهر الإطار السابق حول جميع عناصر القائمة <code>&lt;li&gt;</code>.
</p>

<p style="text-align: center;">
	<iframe height="630" loading="lazy" src="https://mdn.github.io/css-examples/learn/selectors/child.html" style="box-sizing: border-box; max-width: 100%; width: 615.739px; border: 1px solid var(--border-primary); background: rgb(255, 255, 255); border-radius: var(--elem-radius); padding: 1rem;" width="100%"></iframe>
</p>

<h2>
	محددات الأخوة المتجاورين
</h2>

<p>
	توضع إشارة <a href="https://wiki.hsoub.com/CSS/Adjacent_Sibling_Selectors" rel="external">محدد الأخوة المتجاورين adjacent sibling selector</a> والتي تمثل <code>+</code> بين محددي <a href="https://academy.hsoub.com/programming/css/%D8%A7%D9%84%D8%AF%D9%84%D9%8A%D9%84-%D8%A7%D9%84%D8%B3%D8%B1%D9%8A%D8%B9-%D8%A5%D9%84%D9%89-%D9%84%D8%BA%D8%A9-%D8%A7%D9%84%D8%AA%D9%86%D8%B3%D9%8A%D9%82-css-r551/" rel="">لغة CSS</a> وتطابق فقط العناصر التي يختارها المحدد الثاني إن كان أيًا منه الأخ التالي مباشرة للعناصر التي يختارها المحدد الأول. فلو أردنا مثلًا أن نختار فقط كل الصور <a href="https://wiki.hsoub.com/HTML/img" rel="external"><code>&lt;img&gt;</code></a> التي يليها مباشرة العنصر <a href="https://wiki.hsoub.com/HTML/p" rel="external"><code>&lt;p&gt;</code></a>، نستخدم محدد الأشقاء المتجاورين التالي:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_2132_10" style=""><span class="pln">p </span><span class="pun">+</span><span class="pln"> img</span></pre>

<p>
	إنّ أكثر الاستخدامات شيوعًا لهذا المحدد هي اختيار فقرة نصية بعد عنوان كما في المثال التالي. إذ يبحث المحدد في هذا المثال عن أي فقرة نصية تشترك بعنصر أب يمثّل عنوانًا من المستوى الأول <code>&lt;h1&gt;</code> وتأتي بعده مباشرة.
</p>

<p>
	لو أدرجت أي عنصر آخر مثل <code>&lt;h2&gt;</code> بين <code>&lt;p&gt;</code> و<code>&lt;h1&gt;</code> فلن يُطابق المحدد أي فقرة نصية، ولن يُطبق التنسيق على لوني الخط والخلفية عندما يتجاور العنصران.
</p>

<p style="text-align: center;">
	<iframe height="850" loading="lazy" src="https://mdn.github.io/css-examples/learn/selectors/adjacent.html" style="box-sizing: border-box; max-width: 100%; width: 615.739px; border: 1px solid var(--border-primary); background: rgb(255, 255, 255); border-radius: var(--elem-radius); padding: 1rem;" width="100%"></iframe>
</p>

<h2>
	محددات العناصر الأخوة
</h2>

<p>
	يُستخدم <a href="https://wiki.hsoub.com/CSS/General_Sibling_Selectors" rel="external">محدد العناصر الأخوة general sibling combinator</a> والذي يمثل <code>~</code> لاختيار أية أشقاء لعنصر حتى لو لم تجاوره. فلاختيار جميع الصور <code>&lt;img&gt;</code> التي تأتي في أي مكان بعد فقرة نصية <code>&lt;p&gt;</code> نستخدم المحدد التالي:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_2132_12" style=""><span class="pln">p </span><span class="pun">~</span><span class="pln"> img</span></pre>

<p>
	نختار في المثال التالي جميع الفقرات النصية <code>&lt;p&gt;</code> التي تأتي بعد العنوان <code>&lt;h1&gt;</code>. ولاحظ أنه على الرغم من وجود العنصر <code>&lt;div&gt;</code> في الشيفرة فسيختار المحدد الفقرة النصية <code>&lt;p&gt;</code> التي تأتي بعده طالما أنها بعد العنوان <code>&lt;h1&gt;</code> أيضًا.
</p>

<p style="text-align: center;">
	<iframe height="715" loading="lazy" src="https://mdn.github.io/css-examples/learn/selectors/general.html" style="box-sizing: border-box; max-width: 100%; width: 615.739px; border: 1px solid var(--border-primary); background: rgb(255, 255, 255); border-radius: var(--elem-radius); padding: 1rem;" width="100%"></iframe>
</p>

<h2>
	استخدام محددات التجميع
</h2>

<p>
	يمكنك الدمج بين أيٍّ من المحددات التي تعرفنا عليها سابقًا ومحددات التجميع لانتقاء جزء من الملف. فلو أردنا مثلًا أن نختار عناصر قوائم تمتلك الصنف "a" والتي تمثل أبناءً مباشرين لقائمة غير مرتبة <code>&lt;ul&gt;</code> بإمكاننا استخدام المحدد التالي:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_2132_14" style=""><span class="pln">ul </span><span class="pun">&gt;</span><span class="pln"> li</span><span class="pun">[</span><span class="pln">class</span><span class="pun">=</span><span class="str">"a"</span><span class="pun">]</span><span class="pln">  </span><span class="pun">{</span><span class="pln">  </span><span class="pun">}</span></pre>

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

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

<p>
	يمكنك الرجوع إلى صفحة <a href="https://wiki.hsoub.com/CSS#.D8.A7.D9.84.D9.85.D9.8F.D8.AD.D8.AF.D9.90.D9.91.D8.AF.D8.A7.D8.AA_.D9.81.D9.8A_.D9.84.D8.BA.D8.A9_CSS" rel="external">محددات CSS</a> في موسوعة للاطلاع على القائمة الكاملة بالتفصيل.
</p>

<p>
	ترجمة -وبتصرف- للمقال <a href="https://developer.mozilla.org/en-US/docs/Learn/CSS/Building_blocks/Selectors/Combinators" rel="external nofollow">Combinators</a>.
</p>

<h2>
	اقرأ أيضًا
</h2>

<ul>
	<li>
		المقال السابق: <a href="https://academy.hsoub.com/programming/css/%D9%85%D8%AD%D8%AF%D8%AF%D8%A7%D8%AA-%D8%A7%D9%84%D8%A3%D8%B5%D9%86%D8%A7%D9%81-%D8%A7%D9%84%D8%B2%D8%A7%D8%A6%D9%81%D8%A9-pseudo-classes-%D9%88%D8%A7%D9%84%D8%B9%D9%86%D8%A7%D8%B5%D8%B1-%D8%A7%D9%84%D8%B2%D8%A7%D8%A6%D9%81%D8%A9-pseudo-elements-%D9%81%D9%8A-css-r2124/" rel="">محددات الأصناف الزائفة pseudo-classes والعناصر الزائفة pseudo-elements في CSS</a>
	</li>
	<li>
		<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="">المحددات (Selectors) في CSS</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/10-%D9%85%D8%AD%D8%AF%D8%AF%D8%A7%D8%AA-css-%D9%84%D8%A7-%D8%AA%D9%84%D9%8A%D9%82-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D8%A8%D8%AF%D9%88%D9%86%D9%87%D8%A7-r116/" rel="">10 محددات CSS لا تليق البرمجة بدونها</a>
	</li>
</ul>
]]></description><guid isPermaLink="false">2125</guid><pubDate>Tue, 12 Sep 2023 13:00:00 +0000</pubDate></item><item><title>&#x645;&#x62D;&#x62F;&#x62F;&#x627;&#x62A; &#x627;&#x644;&#x623;&#x635;&#x646;&#x627;&#x641; &#x627;&#x644;&#x632;&#x627;&#x626;&#x641;&#x629; pseudo-classes &#x648;&#x627;&#x644;&#x639;&#x646;&#x627;&#x635;&#x631; &#x627;&#x644;&#x632;&#x627;&#x626;&#x641;&#x629; pseudo-elements &#x641;&#x64A; CSS</title><link>https://academy.hsoub.com/programming/css/%D9%85%D8%AD%D8%AF%D8%AF%D8%A7%D8%AA-%D8%A7%D9%84%D8%A3%D8%B5%D9%86%D8%A7%D9%81-%D8%A7%D9%84%D8%B2%D8%A7%D8%A6%D9%81%D8%A9-pseudo-classes-%D9%88%D8%A7%D9%84%D8%B9%D9%86%D8%A7%D8%B5%D8%B1-%D8%A7%D9%84%D8%B2%D8%A7%D8%A6%D9%81%D8%A9-pseudo-elements-%D9%81%D9%8A-css-r2124/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2023_09/---CSS.png.ca32a0b5f7aa9c8cd2474739c3d7a661.png" /></p>
<p>
	تقدم <a href="https://wiki.hsoub.com/CSS" rel="external">لغة CSS</a> عددًا كبيرًا من المحددات التي تُعرف بمحددات الأصناف الزائفة pseudo-classes ومحددات العناصر الزائفة pseudo-elements التي تخدم غايات خاصة في تنسيق العناصر. عندما تستوعب طريقة عملها، ستكون قادرًا على البحث ضمن القوائم على ما يناسب المهمة التي تريد إنجازها.
</p>

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

<ul>
	<li>
		أساسيات عمل الحاسوب
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/general/%D8%AA%D8%AB%D8%A8%D9%8A%D8%AA-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D9%8A%D8%A7%D8%AA-%D8%A7%D9%84%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A9-%D9%84%D9%84%D8%A7%D9%86%D8%B7%D9%84%D8%A7%D9%82-%D9%81%D9%8A-%D8%AA%D8%B7%D9%88%D9%8A%D8%B1-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-r1671/" rel="">تثبيت البرمجيات الأساسية للانطلاق في تطوير الويب</a>
	</li>
	<li>
		أساسيات <a href="https://academy.hsoub.com/programming/general/%D8%A7%D9%84%D8%AA%D8%B9%D8%A7%D9%85%D9%84-%D9%85%D8%B9-%D8%A7%D9%84%D9%85%D9%84%D9%81%D8%A7%D8%AA-%D9%81%D9%8A-%D8%B9%D9%85%D9%84%D9%8A%D8%A9-%D8%AA%D8%B7%D9%88%D9%8A%D8%B1-%D9%85%D9%88%D9%82%D8%B9-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-r1686/" rel="">التعامل مع الملفات</a>
	</li>
	<li>
		فكرة عن <a href="https://academy.hsoub.com/programming/html/%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A7%D8%AA-%D9%84%D8%BA%D8%A9-html-r1687/" rel="">أساسيات HTML</a>
	</li>
	<li>
		فكرة عن <a href="https://academy.hsoub.com/programming/css/%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A7%D8%AA-%D9%84%D8%BA%D8%A9-css-r1688/" rel="">أساسيات عمل لغة CSS</a>
	</li>
</ul>
<iframe allowfullscreen="" data-controller="core.front.core.autosizeiframe" data-embedauthorid="3889" data-embedcontent="" src="https://academy.hsoub.com/files/31-%D9%85%D9%84%D8%A7%D8%AD%D8%B8%D8%A7%D8%AA-%D9%84%D9%84%D8%B9%D8%A7%D9%85%D9%84%D9%8A%D9%86-%D8%A8%D9%84%D8%BA%D8%A9-css/?do=embed" style="margin: auto;"></iframe>

<h2>
	محددات الأصناف الزائفة pseudo-classes
</h2>

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

<p>
	تبدأ الأصناف الزائفة بالنقطتين المتعامدتين(<code>:</code>) كما بالشكل التالي:
</p>

<pre class="ipsCode">:pseudo-class-name
</pre>

<h3>
	مثال بسيط عن محددات الأصناف الزائفة
</h3>

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

<p style="text-align: center;">
	<iframe height="775" loading="lazy" src="https://mdn.github.io/css-examples/learn/selectors/first-child.html" style="box-sizing: border-box; max-width: 100%; width: 615.739px; border: 1px solid var(--border-primary); background: rgb(255, 255, 255); border-radius: var(--elem-radius); padding: 1rem;" width="100%"></iframe>
</p>

<p>
	لكن الأمر قد يزيد صعوبة صيانة الشيفرة، فقد تُضاف فقرة جديدة إلى أعلى الصفحة وعليك عندها نقل الصنف إلى هذه الفقرة. وبدلًا من ذلك يمكننا استخدام محدد الأصناف الزائفة <a href="https://wiki.hsoub.com/CSS/:first-child" rel="external"><code>first-child:</code></a> الذي يستهدف دائمًا الابن الأول في المقالة، ولا حاجة عندها لتعديل شيفرة HTML (وقد يكون أمر التعديل مستحيلًا نظرًا لوجود نظام إدارة محتوى يولّد هذه الشيفرة مثلًا <span class="ipsEmoji">?</span>
</p>

<p style="text-align: center;">
	<iframe height="775" loading="lazy" src="https://mdn.github.io/css-examples/learn/selectors/first-child2.html" style="box-sizing: border-box; max-width: 100%; width: 615.739px; border: 1px solid var(--border-primary); background: rgb(255, 255, 255); border-radius: var(--elem-radius); padding: 1rem;" width="100%"></iframe>
</p>

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

<p>
	من الأصناف الزائفة أيضًا:
</p>

<ul>
	<li>
		<a href="https://wiki.hsoub.com/CSS/:last-child" rel="external"><code>‎:last-child</code></a>
	</li>
	<li>
		<a href="https://wiki.hsoub.com/CSS/:only-child" rel="external"><code>‎:only-child</code></a>
	</li>
	<li>
		<a href="https://wiki.hsoub.com/CSS/:invalid" rel="external"><code>‎:invalid</code></a>
	</li>
</ul>

<p>
	<strong>ملاحظة</strong>: تُعد القاعدة التي تبدأ بصنف زائف وعنصر دون أية محددات عناصر تسبقها صحيحة.
</p>

<p>
	إذ يمكنك كتابة القاعدة في المثال السابق على الشكل <code>first-child:</code> وعندها ستُطبّق على أي عنصر يكون ابنًا للعنصر <a href="https://wiki.hsoub.com/HTML/article" rel="external"><code>&lt;article&gt;</code></a> وليس فقط أول عنصر ابن يكون فقرة نصية. فكتابة المحدد <code>first-child:</code> تكافئ المحدد <code>first-child:*</code>، لكن لا بدّ أن تكون أكثر تحديدًا في أغلب الأحيان.
</p>

<h3>
	محددات أصناف زائفة مرتبطة بأفعال المستخدم
</h3>

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

<ul>
	<li>
		<a href="https://wiki.hsoub.com/CSS/:hover" rel="external"><code>hover:</code></a>: وتُطبّق عندما يمرر المستخدم مؤشر الفأرة فوق عنصر وهذا العنصر المستهدف هو الرابط عادةً.
	</li>
	<li>
		<a href="https://wiki.hsoub.com/CSS/:focus" rel="external"><code>focus:</code></a>: وتُطبق عندما يعطي المستخدم تركيز الدخل إلى عنصر بالنقر عليه أو من خلال لوحة المفاتيح.
	</li>
</ul>

<p style="text-align: center;">
	<iframe height="500" loading="lazy" src="https://mdn.github.io/css-examples/learn/selectors/hover.html" style="box-sizing: border-box; max-width: 100%; width: 615.739px; border: 1px solid var(--border-primary); background: rgb(255, 255, 255); border-radius: var(--elem-radius); padding: 1rem;" width="100%"></iframe>
</p>

<h2>
	محددات العناصر الزائفة pseudo-elements
</h2>

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

<pre class="ipsCode">::pseudo-element-name
</pre>

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

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

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

<p style="text-align: center;">
	<iframe height="725" loading="lazy" src="https://mdn.github.io/css-examples/learn/selectors/first-line.html" style="box-sizing: border-box; max-width: 100%; width: 615.739px; border: 1px solid var(--border-primary); background: rgb(255, 255, 255); border-radius: var(--elem-radius); padding: 1rem;" width="100%"></iframe>
</p>

<p>
	يعمل المحدد السابق كعنصر <code>&lt;span&gt;</code> سحري يغلف السطر المطلوب وينسقه ويعدّل وضعه إن تغير طول السطر. لاحظ أيضًا كيف اختار السطر الأول من الفقرة الثانية أيضًا!
</p>

<h2>
	الجمع بين محددات الأصناف الزائفة ومحددات العناصر الزائفة
</h2>

<p>
	إن أردت أن تجعل خط الكتابة في أول سطر في أول فقرة نصية سميكًا يمكن ضم المحددين <code>first-child:</code> و<code>first-line::</code> على التسلسل. حاول أن تعدّل الشيفرة في المثال السابق لتصبح على الشكل التالي:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_3722_9" style=""><span class="pln">article </span><span class="kwd">p</span><span class="pun">:</span><span class="kwd">first-child</span><span class="pun">::</span><span class="pln">first-line </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">font-size</span><span class="pun">:</span><span class="pln"> </span><span class="lit">120%</span><span class="pun">;</span><span class="pln">
  </span><span class="kwd">font-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>
	تعني هذه القاعدة استهداف أول سطر لأول فقرة نصية <code>&lt;p&gt;</code> داخل العنصر <code>&lt;article&gt;</code>.
</p>

<h2>
	إنشاء محتوى باستخدام المحددين before:: و after::
</h2>

<p>
	يُستخدم المحددين السابقين مع الخاصية <code>content</code> لإدراج محتوى في ملف HTML باستخدام CSS. يعرض المثال التالي كيف تستخدم المحدد <a href="https://wiki.hsoub.com/CSS/::before" rel="external"><code>before::</code></a> والخاصية السابقة في إدراج النص الذي يمثل قيمة هذه الخاصية قبل محتوى العنصر الذي يمتلك الصنف <code>box</code>. كما يمكنك استخدام المحدد <a href="https://wiki.hsoub.com/CSS/::after" rel="external"><code>after::</code></a> لإدراج هذا النص في نهاية محتوى ذلك العنصر.
</p>

<p style="text-align: center;">
	<iframe height="450" loading="lazy" src="https://mdn.github.io/css-examples/learn/selectors/before.html" style="box-sizing: border-box; max-width: 100%; width: 615.739px; border: 1px solid var(--border-primary); background: rgb(255, 255, 255); border-radius: var(--elem-radius); padding: 1rem;" width="100%"></iframe>
</p>

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

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

<p style="text-align: center;">
	<iframe height="420" loading="lazy" src="https://mdn.github.io/css-examples/learn/selectors/after-icon.html" style="box-sizing: border-box; max-width: 100%; width: 615.739px; border: 1px solid var(--border-primary); background: rgb(255, 255, 255); border-radius: var(--elem-radius); padding: 1rem;" width="100%"></iframe>
</p>

<p>
	تُستخدم محددات العناصر الزائفة مرارًا في إدراج سلسلة نصية فارغة يمكن تنسيقها لاحقًا كأي عنصر من عناصر الصفحة.
</p>

<p>
	أضفنا في المثال التالي سلسلة نصية فارغة باستخدام المحدد <code>before::</code> ووضعنا داخله التصريح <code>display: block</code> لكي نتمكن من ضبط أبعاده. ثم استخدمنا بعد ذلك <a href="https://academy.hsoub.com/programming/css/%D8%A7%D9%84%D8%AF%D9%84%D9%8A%D9%84-%D8%A7%D9%84%D8%B3%D8%B1%D9%8A%D8%B9-%D8%A5%D9%84%D9%89-%D9%84%D8%BA%D8%A9-%D8%A7%D9%84%D8%AA%D9%86%D8%B3%D9%8A%D9%82-css-r551/" rel="">لغة CSS</a> لتنسيقه كأي عنصر. حاول أن تغير في التنسيقات وتراقب ما الذي سيحدث!
</p>

<p style="text-align: center;">
	<iframe height="610" loading="lazy" src="https://mdn.github.io/css-examples/learn/selectors/before-styled.html" style="box-sizing: border-box; max-width: 100%; width: 615.739px; border: 1px solid var(--border-primary); background: rgb(255, 255, 255); border-radius: var(--elem-radius); padding: 1rem;" width="100%"></iframe>
</p>

<p>
	يُدعى أسلوب إدراج المحتوى باستخدام <code>before::</code> و<code>after::</code> مع الخاصية <code>content</code> في CSS بأسلوب "المحتوى المولَّد"، وسترى كثرة استخدام هذا الأسلوب في إنجاز مهام مختلفة. وعندما ترى هذين المحددين، ابحث عن الخاصية <code>content</code> وانظر إلى محتواها لتعرف ما سيُضاف إلى محتوى الصفحة.
</p>

<h2>
	مرجع إلى محددات الأصناف الزائفة والعناصر الزائفة
</h2>

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

<h3>
	محددات الأصناف الزائفة
</h3>

<table>
	<thead>
		<tr>
			<th style="text-align:right">
				المحدد
			</th>
			<th style="text-align:right">
				الوصف
			</th>
		</tr>
	</thead>
	<tbody>
		<tr>
			<td style="text-align:right">
				<a href="https://wiki.hsoub.com/CSS/:active" rel="external"><code>active:</code></a>
			</td>
			<td style="text-align:right">
				يطبق التنسيق عندما يٌفعّل المستخدم عُنصرًا (كالنقر عليه مثلًا).
			</td>
		</tr>
		<tr>
			<td style="text-align:right">
				<code>any-link:</code>
			</td>
			<td style="text-align:right">
				يُطبق التنسيق على حالتي الرابط <code>link:</code> و<code>:visited:</code>
			</td>
		</tr>
		<tr>
			<td style="text-align:right">
				<code>blank:</code>
			</td>
			<td style="text-align:right">
				يطبق التنسيق على العنصر <code>&lt;input&gt;</code> إن كان فارغًا.
			</td>
		</tr>
		<tr>
			<td style="text-align:right">
				<a href="https://wiki.hsoub.com/CSS/:checked" rel="external"><code>checked:</code></a>
			</td>
			<td style="text-align:right">
				يطبق التنسيق على أزرار الخيارات المتعددة radio buttons ومربعات التحقق التي تتمتع بحالة معينة.
			</td>
		</tr>
		<tr>
			<td style="text-align:right">
				<code>current:</code>
			</td>
			<td style="text-align:right">
				يُطبق التنسيق على العنصر الذي يُعرض حاليًا أو أحد آبائه
			</td>
		</tr>
		<tr>
			<td style="text-align:right">
				<a href="https://wiki.hsoub.com/CSS/:default" rel="external"><code>default:</code></a>
			</td>
			<td style="text-align:right">
				يطبق التنسيق على عنصر واجهة المستخدم الافتراضي من بين مجموعة عناصر مشابهة
			</td>
		</tr>
		<tr>
			<td style="text-align:right">
				<a href="https://wiki.hsoub.com/CSS/:dir" rel="external"><code>dir:</code></a>
			</td>
			<td style="text-align:right">
				يختار العنصر وفقًا لاتجاهه (قيمة السمة <code>dir</code> في HTML أو قيمة الخاصية <code>direction</code> في CSS)
			</td>
		</tr>
		<tr>
			<td style="text-align:right">
				<a href="https://wiki.hsoub.com/CSS/:disabled" rel="external"><code>disabled:</code></a>
			</td>
			<td style="text-align:right">
				يطبق التنسيق على عنصر واجهة مستخدم عندما يكون في حالة التعطيل
			</td>
		</tr>
		<tr>
			<td style="text-align:right">
				<a href="https://wiki.hsoub.com/CSS/:empty" rel="external"><code>empty:</code></a>
			</td>
			<td style="text-align:right">
				يطبق التنسيق على عنصر لا يمتلك أبناء ماعدا مسافة فارغة اختيارية.
			</td>
		</tr>
		<tr>
			<td style="text-align:right">
				<a href="https://wiki.hsoub.com/CSS/:enabled" rel="external"><code>enabled:</code></a>
			</td>
			<td style="text-align:right">
				يُطبق التنسيق على عنصر واجهة مستخدم عندما يكون في حالة تمكين
			</td>
		</tr>
		<tr>
			<td style="text-align:right">
				<a href="https://wiki.hsoub.com/CSS/:first" rel="external"><code>first:</code></a>
			</td>
			<td style="text-align:right">
				يطبق التنسيق على أول صفحة في الوسائط التي تدعم الصفحات المتعددة.
			</td>
		</tr>
		<tr>
			<td style="text-align:right">
				‎<a href="https://wiki.hsoub.com/CSS/:first-child" rel="external"><code>:first-child</code></a>
			</td>
			<td style="text-align:right">
				يطبق التنسيق على أول عنصر بين مجموعة أشقاء.
			</td>
		</tr>
		<tr>
			<td style="text-align:right">
				‎<a href="https://wiki.hsoub.com/CSS/:first-of-type" rel="external"><code>:first-of-type</code></a>
			</td>
			<td style="text-align:right">
				يطبق التنسيق على أول عنصر من نوع محدد من بين مجموعة أشقاء.
			</td>
		</tr>
		<tr>
			<td style="text-align:right">
				<a href="https://wiki.hsoub.com/CSS/:focus" rel="external"><code>focus:</code></a>
			</td>
			<td style="text-align:right">
				يطبق التنسيق على العنصر الذي يتلقى تركيز الدخل.
			</td>
		</tr>
		<tr>
			<td style="text-align:right">
				‎<code>:focus-visible</code>
			</td>
			<td style="text-align:right">
				يُطبق التنسيق على عنصر تلقى التركيز وهذا التركيز مرئي بالنسبة للمستخدم.
			</td>
		</tr>
		<tr>
			<td style="text-align:right">
				<code>focus-within:</code>
			</td>
			<td style="text-align:right">
				يطبق التنسيق على عنصر يمتلك تركيز الدخل بالإضافة إلى عنصر له سليل تلقى تركيز الدخل أيضًا.
			</td>
		</tr>
		<tr>
			<td style="text-align:right">
				<code>future:</code>
			</td>
			<td style="text-align:right">
				يطبق التنسيق على العنصر التالي للعنصر الحالي.
			</td>
		</tr>
		<tr>
			<td style="text-align:right">
				<a href="https://wiki.hsoub.com/CSS/:hover" rel="external"><code>hover:</code></a>
			</td>
			<td style="text-align:right">
				يطبق التنسيق عندما يمر مؤشر الفأرة فوق العنصر.
			</td>
		</tr>
		<tr>
			<td style="text-align:right">
				<a href="https://wiki.hsoub.com/CSS/:indeterminate" rel="external"><code>indeterminate:</code></a>
			</td>
			<td style="text-align:right">
				يطبق التنسيق على عناصر واجهة المستخدم قيمة حالتها غير محددة وعادة ما تطبق على أزرار التحقق checkbox.
			</td>
		</tr>
		<tr>
			<td style="text-align:right">
				<a href="https://wiki.hsoub.com/CSS/:in-range" rel="external"><code>in-range:</code></a>
			</td>
			<td style="text-align:right">
				يطبق التنسيق على عنصر لقيمته مجال محدد وكانت هذه القيمة ضمن المجال.
			</td>
		</tr>
		<tr>
			<td style="text-align:right">
				<a href="https://wiki.hsoub.com/CSS/:invalid" rel="external"><code>invalid:</code></a>
			</td>
			<td style="text-align:right">
				يطبق التنسيق على عنصر مثل <code>&lt;input&gt;</code> عندما يكون في حالة غير صحيحة.
			</td>
		</tr>
		<tr>
			<td style="text-align:right">
				<a href="https://wiki.hsoub.com/CSS/:lang" rel="external"><code>lang:</code></a>
			</td>
			<td style="text-align:right">
				يطبق التنسيق على عنصر بناءً على اللغة (قيمة السمة <code>lang</code> لهذا العنصر)
			</td>
		</tr>
		<tr>
			<td style="text-align:right">
				<a href="https://wiki.hsoub.com/CSS/:last-child" rel="external"><code>last-child:</code></a>
			</td>
			<td style="text-align:right">
				يطبق التنسيق على آخر عنصر بين مجموعة أشقاء
			</td>
		</tr>
		<tr>
			<td style="text-align:right">
				<a href="https://wiki.hsoub.com/CSS/:last-of-type" rel="external"><code>last-of-type:</code></a>
			</td>
			<td style="text-align:right">
				يطبق التنسيق على آخر عنصر من نوع محدد من بين مجموعة أشقاء.
			</td>
		</tr>
		<tr>
			<td style="text-align:right">
				<a href="https://wiki.hsoub.com/CSS/:left" rel="external"><code>left:</code></a>
			</td>
			<td style="text-align:right">
				يطبق التنسيق على الصفحة اليسرى في الوسائط التي تدعم الصفحات المتعددة.
			</td>
		</tr>
		<tr>
			<td style="text-align:right">
				<a href="https://wiki.hsoub.com/CSS/:link" rel="external"><code>link:</code></a>
			</td>
			<td style="text-align:right">
				يطبق التنسيق على الروابط التي لم تُزار بعد.
			</td>
		</tr>
		<tr>
			<td style="text-align:right">
				<code>local-link:</code>
			</td>
			<td style="text-align:right">
				يطبق التنسيق على الروابط التي تشير إلى صفحات تقع في نفس موقع الصفحة الحالية.
			</td>
		</tr>
		<tr>
			<td style="text-align:right">
				‎<code><span>:</span>is()</code>‎
			</td>
			<td style="text-align:right">
				يطابق أي محدد من قائمة المحددات الممرة.
			</td>
		</tr>
		<tr>
			<td style="text-align:right">
				<a href="https://wiki.hsoub.com/CSS/:not" rel="external"><code>not:</code></a>
			</td>
			<td style="text-align:right">
				يطابق الأشياء التي لا يطابقها المحد الممر كقيمة لهذا المحدد.
			</td>
		</tr>
		<tr>
			<td style="text-align:right">
				<a href="https://wiki.hsoub.com/CSS/:nth-child" rel="external"><code>nth-child:</code></a>
			</td>
			<td style="text-align:right">
				يطابق عناصر ضمن قائمة أشقاء وفق صيغة (آ.ن+ب). فالصيغة 2ن+1 ستطابق العناصر الفردية 1،3،5،7 وهكذا.
			</td>
		</tr>
		<tr>
			<td style="text-align:right">
				‎<a href="https://wiki.hsoub.com/CSS/:nth-of-type" rel="external"><code>:nth-of-type:</code></a>
			</td>
			<td style="text-align:right">
				يطابق عناصر من نوع محدد (<code>&lt;p&gt;</code> مثلًا) ضمن قائمة أشقاء وفق صيغة (آ.ن+ب). فالصيغة 2ن+1 ستطابق العناصر الفردية من النوع المحدد 1،3،5،7 وهكذا
			</td>
		</tr>
		<tr>
			<td style="text-align:right">
				‎<a href="https://wiki.hsoub.com/CSS/:nth-last-child" rel="external"><code>:nth-last-child:</code></a>
			</td>
			<td style="text-align:right">
				يطابق عناصر ضمن قائمة أشقاء وفق صيغة (آ.ن+ب) لكن من النهاية إلى البداية. فالصيغة 2ن+1 ستطابق العنصر الأخير ثم يتجاوز عنصر ويختار الذي يسبقه وهكذا أي كل النقاط الفردية لكن من النهاية.
			</td>
		</tr>
		<tr>
			<td style="text-align:right">
				‎<a href="https://wiki.hsoub.com/CSS/:nth-last-of-type" rel="external"><code>:nth-last-of-type:</code></a>
			</td>
			<td style="text-align:right">
				يطابق عناصر من نوع محدد (<code>&lt;p&gt;</code> مثلًا) ضمن قائمة أشقاء وفق صيغة (آ.ن+ب) لكن من النهاية إلى البداية. فالصيغة 2ن+1 ستطابق العنصر الأخير ثم يتجاوز عنصر ويختار الذي يسبقه وهكذا أي كل النقاط الفردية لكن من النهاية.
			</td>
		</tr>
		<tr>
			<td style="text-align:right">
				<a href="https://wiki.hsoub.com/CSS/:only-child" rel="external"><code>only-child:</code></a>
			</td>
			<td style="text-align:right">
				يطبق التنسيق على عنصر لا أشقاء له.
			</td>
		</tr>
		<tr>
			<td style="text-align:right">
				‎<a href="https://wiki.hsoub.com/CSS/:only-of-type" rel="external"><code>:only-of-type:</code></a>
			</td>
			<td style="text-align:right">
				يطابق العنصر الوحيد من نوعه ضمن قائمة أشقاء.
			</td>
		</tr>
		<tr>
			<td style="text-align:right">
				<a href="https://wiki.hsoub.com/CSS/:optional" rel="external"><code>optional:</code></a>
			</td>
			<td style="text-align:right">
				يطبق التنسيق على العناصر غير الضرورية (الاختيارية).
			</td>
		</tr>
		<tr>
			<td style="text-align:right">
				‎<a href="https://wiki.hsoub.com/CSS/:out-of-range" rel="external"><code>:out-of-range</code></a>
			</td>
			<td style="text-align:right">
				يطبق التنسيق على عنصر لقيمته مجال محدد وكانت هذه القيمة خارج المجال.
			</td>
		</tr>
		<tr>
			<td style="text-align:right">
				<a href="https://wiki.hsoub.com/CSS/:past" rel="external"><code>‎:past</code></a>
			</td>
			<td style="text-align:right">
				يطبق التنسيق على العنصر الذي يسبق العنصر الحالي.
			</td>
		</tr>
		<tr>
			<td style="text-align:right">
				‎<code><span>:</span>placeholder</code>‎<code>-shown</code>
			</td>
			<td style="text-align:right">
				يطبق التنسيق على عنصر إدخال يُظهر مكانًا لكتابة نص.
			</td>
		</tr>
		<tr>
			<td style="text-align:right">
				<code>playing:</code>
			</td>
			<td style="text-align:right">
				يطبق التنسيق على عنصر يمثل صوت أو فيديو أو مورد مشابه يمكن تشغيله وإيقافه وذلك في الحالة التي يُشغّل فيها.
			</td>
		</tr>
		<tr>
			<td style="text-align:right">
				‎<code>:paused</code>
			</td>
			<td style="text-align:right">
				يطبق التنسيق على عنصر يمثل صوت أو فيديو أو مورد مشابه يمكن تشغيله وإيقافه وذلك في الحالة التي يوُقف فيها.
			</td>
		</tr>
		<tr>
			<td style="text-align:right">
				<a href="https://wiki.hsoub.com/CSS/:read-only" rel="external"><code>read-only:</code></a>
			</td>
			<td style="text-align:right">
				يطبق التنسيق على العناصر التي لا يمكن للمستخدم تبديلها.
			</td>
		</tr>
		<tr>
			<td style="text-align:right">
				<a href="https://wiki.hsoub.com/CSS/:read-write" rel="external"><code>read-write:</code></a>
			</td>
			<td style="text-align:right">
				يطبق التنسيق على العناصر التي يمكن للمستخدم تبديلها.
			</td>
		</tr>
		<tr>
			<td style="text-align:right">
				<a href="https://wiki.hsoub.com/CSS/:required" rel="external"><code>required:</code></a>
			</td>
			<td style="text-align:right">
				يُطابق عناصر النموذج الضرورية
			</td>
		</tr>
		<tr>
			<td style="text-align:right">
				<a href="https://wiki.hsoub.com/CSS/:right" rel="external"><code>right:</code></a>
			</td>
			<td style="text-align:right">
				يطبق التنسيق على الصفحة اليمنى في الوسائط التي تدعم الصفحات المتعددة.
			</td>
		</tr>
		<tr>
			<td style="text-align:right">
				<a href="https://wiki.hsoub.com/CSS/:root" rel="external"><code>root:</code></a>
			</td>
			<td style="text-align:right">
				يُطبق التنسيق على العنصر الذي يعتبر العنصر الجذري للملف.
			</td>
		</tr>
		<tr>
			<td style="text-align:right">
				‎<code>:scope</code>
			</td>
			<td style="text-align:right">
				يطبق التنسيق على أي عنصر يمثل عنصر مجال رؤية.
			</td>
		</tr>
		<tr>
			<td style="text-align:right">
				<a href="https://wiki.hsoub.com/CSS/:valid" rel="external"><code>valid:</code></a>
			</td>
			<td style="text-align:right">
				يطبق التنسيق على عنصر مثل <code>&lt;input&gt;</code> عندما يكون في حالة صحيحة.
			</td>
		</tr>
		<tr>
			<td style="text-align:right">
				<a href="https://wiki.hsoub.com/CSS/:target" rel="external"><code>target:</code></a>
			</td>
			<td style="text-align:right">
				يطبق التنسيق على عنصر إن كان هدفًا لعنوان URL الحالي
			</td>
		</tr>
		<tr>
			<td style="text-align:right">
				<a href="https://wiki.hsoub.com/CSS/:visited" rel="external"><code>visited:</code></a>
			</td>
			<td style="text-align:right">
				يطبق التنسيق على الروابط المُزارة.
			</td>
		</tr>
	</tbody>
</table>

<p>
	يمكنك الرجوع إلى صفحة <a href="https://wiki.hsoub.com/CSS#.D8.A7.D9.84.D8.A3.D8.B5.D9.86.D8.A7.D9.81_.D8.A7.D9.84.D8.B2.D8.A7.D8.A6.D9.81.D8.A9" rel="external">محددات الأصناف الزائفة</a> في موسوعة حسوب للاطلاع على القائمة الكاملة بالتفصيل.
</p>

<h3>
	محددات العناصر الزائفة
</h3>

<table>
	<thead>
		<tr>
			<th style="text-align:right">
				المحدد
			</th>
			<th style="text-align:right">
				الوصف
			</th>
		</tr>
	</thead>
	<tbody>
		<tr>
			<td style="text-align:right">
				<a href="https://wiki.hsoub.com/CSS/::after" rel="external"><code>after::</code></a>
			</td>
			<td style="text-align:right">
				يُدرج عنصرًا قابلًا للتنسيق بعد المحتوى الأصلي لعنصر إن استُخدم مع الخاصية <code>content</code> التي لها قيمة لا تساوي <code>none</code>.
			</td>
		</tr>
		<tr>
			<td style="text-align:right">
				<a href="https://wiki.hsoub.com/CSS/::before" rel="external"><code>before::</code></a>
			</td>
			<td style="text-align:right">
				يُدرج عنصرًا قابلًا للتنسيق قبل المحتوى الأصلي لعنصر إن استُخدم مع الخاصية <code>content</code> التي لها قيمة لا تساوي <code>none</code>.
			</td>
		</tr>
		<tr>
			<td style="text-align:right">
				<a href="https://wiki.hsoub.com/CSS/::first-letter" rel="external"><code>first-letter::</code></a>
			</td>
			<td style="text-align:right">
				Matches the first letter of the element. يُطابق الحرف الأول من العنصر
			</td>
		</tr>
		<tr>
			<td style="text-align:right">
				<a href="https://wiki.hsoub.com/CSS/::first-line" rel="external"><code>first-line::</code></a>
			</td>
			<td style="text-align:right">
				يطبق التنسيق على السطر الأول من العنصر الذي يحتوي نصًا.
			</td>
		</tr>
		<tr>
			<td style="text-align:right">
				<code>grammar-error::</code>
			</td>
			<td style="text-align:right">
				يطابق جزءًا من محتوى الملف يحوي أخطاء قواعدية حددها المتصفح.
			</td>
		</tr>
		<tr>
			<td style="text-align:right">
				<code>marker::</code>
			</td>
			<td style="text-align:right">
				يُطابق صندوق التحديد marker box لقائمة عناصر تستخدم النقاط أو التعداد.
			</td>
		</tr>
		<tr>
			<td style="text-align:right">
				<a href="https://wiki.hsoub.com/CSS/::selection" rel="external"><code>selection::</code></a>
			</td>
			<td style="text-align:right">
				يطابق الجزء المُختار من ملف
			</td>
		</tr>
		<tr>
			<td style="text-align:right">
				<code>spelling-error::</code>
			</td>
			<td style="text-align:right">
				يطابق جزءًا من محتوى الملف يحوي أخطاء إملائية يحددها المتصفح.
			</td>
		</tr>
	</tbody>
</table>

<p>
	يمكنك الرجوع إلى صفحة <a href="https://wiki.hsoub.com/CSS#.D8.A7.D9.84.D8.B9.D9.86.D8.A7.D8.B5.D8.B1_.D8.A7.D9.84.D8.B2.D8.A7.D8.A6.D9.81.D8.A9" rel="external">محددات العناصر الزائفة</a> في موسوعة حسوب للاطلاع على القائمة الكاملة بالتفصيل.
</p>

<p>
	ترجمة -وبتصرف- للمقال <a href="https://developer.mozilla.org/en-US/docs/Learn/CSS/Building_blocks/Selectors/Pseudo-classes_and_pseudo-elements" rel="external nofollow">pseudo-classes and pseudo-elements</a>.
</p>

<h2>
	اقرأ أيضًا
</h2>

<ul>
	<li>
		المقال السابق: <a href="https://academy.hsoub.com/programming/css/%D9%85%D8%AD%D8%AF%D8%AF%D8%A7%D8%AA-%D8%A7%D9%84%D8%AE%D8%A7%D8%B5%D9%8A%D8%A9-attribute-%D9%81%D9%8A-css-r2085/" rel="">محددات الخاصية Attribute في CSS</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/5-%D9%81%D8%A6%D8%A7%D8%AA-%D8%B2%D8%A7%D8%A6%D9%81%D8%A9-pseudo-class-%D9%8A%D8%AC%D8%A8-%D8%B9%D9%84%D9%8A%D9%83-%D9%85%D8%B9%D8%B1%D9%81%D8%AA%D9%87%D8%A7-%D9%81%D9%8A-css-r189/" rel="">5 فئات زائفة (pseudo-class) يجب عليك معرفتها في CSS</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D8%A7%D9%84%D9%86%D9%85%D8%A7%D8%B0%D8%AC-%D9%81%D9%8A-html5-%D9%85%D8%B9-%D8%A7%D9%84%D8%A3%D8%B5%D9%86%D8%A7%D9%81-%D8%A7%D9%84%D8%B2%D9%91%D8%A7%D8%A6%D9%81%D8%A9-pseudo-classes-%D9%81%D9%8A-css3-r25/" rel="">استخدام النماذج في HTML5 مع الأصناف الزّائفة (pseudo-classes) في CSS3</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D8%AA%D8%AD%D8%B1%D9%8A%D9%83-%D8%B4%D8%A8%D9%87-%D8%A7%D9%84%D8%B9%D9%86%D8%A7%D8%B5%D8%B1-pseudo-elements-%D9%81%D9%8A-css-r145/" rel="">تحريك شبه العناصر (pseudo-elements) في CSS</a>
	</li>
</ul>
]]></description><guid isPermaLink="false">2124</guid><pubDate>Wed, 06 Sep 2023 13:00:00 +0000</pubDate></item><item><title>&#x645;&#x62D;&#x62F;&#x62F;&#x627;&#x62A; &#x627;&#x644;&#x62E;&#x627;&#x635;&#x64A;&#x629; Attribute &#x641;&#x64A; CSS</title><link>https://academy.hsoub.com/programming/css/%D9%85%D8%AD%D8%AF%D8%AF%D8%A7%D8%AA-%D8%A7%D9%84%D8%AE%D8%A7%D8%B5%D9%8A%D8%A9-attribute-%D9%81%D9%8A-css-r2085/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2023_08/--attribute--CSS.png.8a2a92e986f2c69ec916d5bcffca8f11.png" /></p>
<p>
	تمتلك عناصر HTML ما يُسمى السمات أو الخاصيات Attributes التي تعطي تفاصيل أكبر عن العنصر الذي نوصِّفه. يمكننا استخدام محددات الخاصيات هذه في CSS لاستهداف عناصر تمتلك خاصية معينة، وهذا ما سندرسه في هذا المقال.
</p>

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

<ul>
	<li>
		أساسيات عمل الحاسوب
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/general/%D8%AA%D8%AB%D8%A8%D9%8A%D8%AA-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D9%8A%D8%A7%D8%AA-%D8%A7%D9%84%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A9-%D9%84%D9%84%D8%A7%D9%86%D8%B7%D9%84%D8%A7%D9%82-%D9%81%D9%8A-%D8%AA%D8%B7%D9%88%D9%8A%D8%B1-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-r1671/" rel="">تثبيت البرمجيات الأساسية للانطلاق في تطوير الويب</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/general/%D8%A7%D9%84%D8%AA%D8%B9%D8%A7%D9%85%D9%84-%D9%85%D8%B9-%D8%A7%D9%84%D9%85%D9%84%D9%81%D8%A7%D8%AA-%D9%81%D9%8A-%D8%B9%D9%85%D9%84%D9%8A%D8%A9-%D8%AA%D8%B7%D9%88%D9%8A%D8%B1-%D9%85%D9%88%D9%82%D8%B9-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-r1686/" rel="">أساسيات التعامل مع الملفات</a>
	</li>
	<li>
		فكرة عن <a href="https://academy.hsoub.com/programming/css/%D8%AA%D8%B9%D8%B1%D9%81-%D8%B9%D9%84%D9%89-css-r2000/" rel="">أساسيات لغة CSS</a>.
	</li>
</ul>

<h2>
	محددات وجود الخاصية وامتلاكها لقيمة محددة
</h2>

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

<table>
	<thead>
		<tr>
			<th>
				المحدد
			</th>
			<th>
				مثال
			</th>
			<th>
				الوصف
			</th>
		</tr>
	</thead>
	<tbody>
		<tr>
			<td>
				<code>[attr]</code>
			</td>
			<td>
				<code>a[title]</code>
			</td>
			<td>
				يطابق العنصر المحدد الذي يمتلك الخاصية المذكورة بين القوسين المربعين.
			</td>
		</tr>
		<tr>
			<td>
				<code>[attr=value]</code>
			</td>
			<td>
				<code>a[href="https://example.com"]</code>
			</td>
			<td>
				يطابق العناصر التي تمتلك الخاصية المذكورة عندما تتطابق قيمتها بالضبط مع القيمة المذكورة بين إشارتي التنصيص.
			</td>
		</tr>
		<tr>
			<td>
				<code>[attr~=value]</code>
			</td>
			<td>
				<code>p[class~="special"]</code>
			</td>
			<td>
				يطابق العناصر التي تمتلك الخاصية المذكورة عندما تتطابق قيمتها مع القيمة المذكورة بين إشارتي التنصيص أو التي تحوي قيمتها القيمة الموجودة بين إشارتي التنصيص.
			</td>
		</tr>
		<tr>
			<td>
				<code>[attr|=value]</code>
			</td>
			<td>
				<code>div[lang|="zh"]</code>
			</td>
			<td>
				يطابق العناصر التي تمتلك الخاصية المذكورة عندما تتطابق قيمتها مع القيمة المذكورة بين إشارتي التنصيص أو التي تبدأ قيمتها بالقيمة الموجودة بين إشارتي التنصيص تليها مباشرة شرطة (-).
			</td>
		</tr>
	</tbody>
</table>

<p>
	نستعرض في المثال التالي الموجود في المحرر التفاعلي كيفية استخدام تلك المحددات.
</p>

<ul>
	<li>
		<p>
			<code>li[class]‎</code>: يطابق هذا المحدد جميع عناصر القائمة التي تمتلك الخاصية <code>class</code>. وسيطبق في المثال على جميع عناصر القائمة ما عدا الأول.
		</p>
	</li>
	<li>
		<p>
			<code>li[class="a"]‎</code>: يطابق المحدد جميع عناصر القائمة التي تمتلك الخاصية <code>class</code> على أن تكون قيمتها <code>a</code>. ونظرًا لوجود فراغ كجزء من القيمة في العنصر الثالث، سيُطبَّق المحدد على عنصر القائمة الثاني فقط.
		</p>
	</li>
	<li>
		<p>
			<code>li[class~="a"]‎</code>: يطابق المحدد جميع عناصر القائمة التي تمتلك الخاصية <code>class</code> على أن تكون قيمتها <code>a</code> أو أن تكون <code>a</code> جزءًا من قيمتها، لذا سيُطبّق المحدد على العنصرين الثاني والثالث في القائمة.
		</p>
	</li>
</ul>

<p style="text-align: center;">
	<iframe height="800" loading="lazy" src="https://mdn.github.io/css-examples/learn/selectors/attribute.html" style="box-sizing: border-box; max-width: 100%; width: 615.739px; border: 1px solid var(--border-primary); background: rgb(255, 255, 255); border-radius: var(--elem-radius); padding: 1rem;" width="100%"></iframe>
</p>

<h2>
	محددات الأجزاء النصية
</h2>

<p>
	تسمح لك هذه المحددات باستهداف الخاصيات بناء على وجود جزء من نص ضمن قيمة الخاصية. فلو كان لديك على سبيل المثال الصنفان <code>box-warning</code> و<code>box-error</code> وأردت أن تستهدف كل شيء يبدأ بالعبارة "box-‎"، يمكنك في هذه الحالة استخدام القاعدة <code>["-class^="box]</code> أو القاعدة <code>["class^="box]</code> لاختيار كلا الصنفين السابقين.
</p>

<table>
	<thead>
		<tr>
			<th>
				المحدد
			</th>
			<th style="text-align:center">
				مثال
			</th>
			<th style="text-align:right">
				الوصف
			</th>
		</tr>
	</thead>
	<tbody>
		<tr>
			<td>
				<code>[attr^=value]</code>
			</td>
			<td style="text-align:center">
				<code>li[class^="box-"]</code>
			</td>
			<td style="text-align:right">
				يُطابق العناصر التي تملك خاصية تبدأ بالقيمة المذكورة بين القوسين المربعين والتي تلي المساواة.
			</td>
		</tr>
		<tr>
			<td>
				<code>[attr$=value]</code>
			</td>
			<td style="text-align:center">
				<code>li[class$="-box"]</code>
			</td>
			<td style="text-align:right">
				يُطابق العناصر التي تملك خاصية تنتهي بالقيمة المذكورة بين القوسين المربعين والتي تلي المساواة.
			</td>
		</tr>
		<tr>
			<td>
				<code>[attr*=value]</code>
			</td>
			<td style="text-align:center">
				<code>li[class*="box"]</code>
			</td>
			<td style="text-align:right">
				يُطابق العناصر التي تمتلك الخاصية المذكورة بين القوسين المربعين على أن تضم قيمتها القيمة التي تلي المساواة (=) في أي مكانٍ منها.
			</td>
		</tr>
	</tbody>
</table>

<p>
	<strong>ملاحظة</strong>: كي نتمكن من تحديد مواقع معينة في السلسلة النصية الممررة فقد استخدمنا التعابير النمطية <a href="https://academy.hsoub.com/devops/linux/%D9%85%D9%82%D8%AF%D9%85%D8%A9-%D9%81%D9%8A-%D8%A7%D9%84%D8%AA%D8%B9%D8%A7%D8%A8%D9%8A%D8%B1-%D8%A7%D9%84%D9%86%D9%85%D8%B7%D9%8A%D8%A9-regular-expressions-r63/" rel="">regular expressions</a> مع المحرفين <code>^</code> الذي يعني بداية التعبير النمطي و<code>$</code> الذي يعني نهاية التعبير، وبذلك يمكننا البحث عن نصوص تبدأ بنمط معين أوتنتهي بنمط معين.
</p>

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

<ul>
	<li>
		<p>
			<code>li[class^="a"]‎</code>: يُطابق أي خاصية تبدأ بالحرف <code>a</code>، وبالتالي سيُطبق التنسيق على أول عنصرين من عناصر القائمة.
		</p>
	</li>
	<li>
		<p>
			<code>li[class$="a"]‎</code>: يُطابق أي خاصية تنتهي بالحرف <code>a</code>، وبالتالي سيُطبق التنسيق على العنصرين الأول والثالث.
		</p>
	</li>
	<li>
		<p>
			<code>li[class*="a"]‎</code>: يُطابق أي خاصية يظهر الحرف <code>a</code> في أي موقع من قيمتها، وبالتالي سيُطبق التنسيق على جميع العناصر في القائمة.
		</p>
	</li>
</ul>

<p style="text-align: center;">
	<iframe height="800" loading="lazy" src="https://mdn.github.io/css-examples/learn/selectors/attribute-substring.html" style="box-sizing: border-box; max-width: 100%; width: 615.739px; border: 1px solid var(--border-primary); background: rgb(255, 255, 255); border-radius: var(--elem-radius); padding: 1rem;" width="100%"></iframe>
</p>

<h2>
	مطابقة حالة الأحرف
</h2>

<p>
	إن أردت أن تطابق قيمة خاصية أو سمة ما دون أخذ حالة الأحرف الكبيرة أو الصغيرة بعين الاعتبار(case-insensitively)، بإمكانك أن تضع المحرف (أو الراية) <code>i</code> قبل قوس النهاية. تخبر هذه الراية المتصفح أن يُطابق بشكل غير حساس لحالة الأحرف ووفقًا لمحارف آسكي، وبدون وجودها سيطابقها المتصفح وفقًا لحالة المحارف التي تحددها لغة المستند ففي المستندات المكتوبة <a href="https://academy.hsoub.com/programming/html/%D8%AA%D8%B9%D8%B1%D9%81-%D8%B9%D9%84%D9%89-%D9%84%D8%BA%D8%A9-html-r1752/" rel="">بلغة HTML</a> ستكون المطابقة حساسة لحالة الأحرف.
</p>

<p>
	لاحظ في المثال التالي كيف يُطابق المحدد الأول خاصية تبدأ قيمتها بالحرف الصغير <code>a</code>، وستكون النتيجة استهداف عنصر القائمة الأول فقط وجعل لون الخلفية <a href="https://wiki.hsoub.com/CSS/background-color" rel="external"><code>background-color</code></a> أصفر لأنّ العنصرين الآخرين يبدآن بحرف كبير <code>A</code>. بينما يستخدم المحدد الثاني الراية i ما يجعله غير حساس لحالة الأحرف وبالتالي سيطابق جميع عناصر القائمة ويغير لون الخط فيها للأحمر.
</p>

<p style="text-align: center;">
	<iframe height="800" loading="lazy" src="https://mdn.github.io/css-examples/learn/selectors/attribute-case.html" style="box-sizing: border-box; max-width: 100%; width: 615.739px; border: 1px solid var(--border-primary); background: rgb(255, 255, 255); border-radius: var(--elem-radius); padding: 1rem;" width="100%"></iframe>
</p>

<p>
	<strong>ملاحظة</strong>: ظهرت قيمة جديدة <code>s</code> تجبر المطابقة مع الانتباه لحالتي الأحرف عندما يكون السياق حساسًا لحالة الأحرف. لكن هذه الراية غير مدعومة كفاية من المتصفحات حاليًا، ولن تكون مفيدة جدًا في HTML.
</p>

<p>
	ترجمة -وبتصرف- للمقال <a href="https://developer.mozilla.org/en-US/docs/Learn/CSS/Building_blocks/Selectors/Attribute_selectors" rel="external nofollow">Attribute selectors</a>
</p>

<h2>
	اقرأ أيضًا
</h2>

<ul>
	<li>
		المقال السابق: <a href="https://academy.hsoub.com/programming/css/%D9%85%D8%AD%D8%AF%D8%AF%D8%A7%D8%AA-%D8%A7%D9%84%D9%86%D9%88%D8%B9-%D9%88%D8%A7%D9%84%D8%A3%D8%B5%D9%86%D8%A7%D9%81-%D9%88%D8%A7%D9%84%D9%85%D8%B9%D8%B1%D9%91%D9%81%D8%A7%D8%AA-%D9%81%D9%8A-css-r2084/" rel="">محددات النوع والأصناف والمعرّفات في CSS</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%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%84%D8%BA%D8%A9-css-r1049/" rel="">أساسيات استعمال لغة CSS</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/html/html-%D9%88-css-%D9%84%D9%84%D9%85%D8%A8%D8%AA%D8%AF%D8%A6%D9%8A%D9%86-%D9%85%D9%82%D8%AF%D9%85%D8%A9-%D8%A5%D9%84%D9%89-%D8%AA%D9%86%D8%B3%D9%8A%D9%82%D8%A7%D8%AA-css-r272/" rel="">HTML و CSS للمبتدئين: مقدمة إلى تنسيقات CSS</a>
	</li>
	<li>
		<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="">المحددات (Selectors) في CSS</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/javascript/%D8%A7%D9%84%D8%AA%D9%81%D8%B1%D9%8A%D9%82-%D8%A8%D9%8A%D9%86-%D8%A7%D9%84%D8%B3%D9%85%D8%A7%D8%AA-attributes-%D9%81%D9%8A-html-%D9%88%D8%A7%D9%84%D8%AE%D8%A7%D8%B5%D9%8A%D8%A7%D8%AA-properties-%D9%81%D9%8A-%D8%AC%D8%A7%D9%81%D8%A7%D8%B3%D9%83%D8%B1%D8%A8%D8%AA-r1116/" rel="">التفريق بين السمات (attributes) في HTML والخاصيات (properties) في جافاسكربت</a>
	</li>
</ul>
]]></description><guid isPermaLink="false">2085</guid><pubDate>Wed, 30 Aug 2023 16:00:00 +0000</pubDate></item><item><title>&#x645;&#x62D;&#x62F;&#x62F;&#x627;&#x62A; &#x627;&#x644;&#x646;&#x648;&#x639; &#x648;&#x627;&#x644;&#x623;&#x635;&#x646;&#x627;&#x641; &#x648;&#x627;&#x644;&#x645;&#x639;&#x631;&#x651;&#x641;&#x627;&#x62A; &#x641;&#x64A; CSS</title><link>https://academy.hsoub.com/programming/css/%D9%85%D8%AD%D8%AF%D8%AF%D8%A7%D8%AA-%D8%A7%D9%84%D9%86%D9%88%D8%B9-%D9%88%D8%A7%D9%84%D8%A3%D8%B5%D9%86%D8%A7%D9%81-%D9%88%D8%A7%D9%84%D9%85%D8%B9%D8%B1%D9%91%D9%81%D8%A7%D8%AA-%D9%81%D9%8A-css-r2084/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2023_08/-----CSS.png.443d84e8d0f8692b5a0668eae37c6436.png" /></p>
<p>
	نستعرض في هذا المقال بعضًا من أبسط محددات CSS التي تطبق التنسيقات على ملفات HTML، والتي ستستخدمها مرارًا وتكرارًا في عملك.
</p>

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

<ul>
	<li>
		أساسيات عمل الحاسوب
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/general/%D8%AA%D8%AB%D8%A8%D9%8A%D8%AA-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D9%8A%D8%A7%D8%AA-%D8%A7%D9%84%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A9-%D9%84%D9%84%D8%A7%D9%86%D8%B7%D9%84%D8%A7%D9%82-%D9%81%D9%8A-%D8%AA%D8%B7%D9%88%D9%8A%D8%B1-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-r1671/" rel="">تثبيت البرمجيات الأساسية للانطلاق في تطوير الويب</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/general/%D8%A7%D9%84%D8%AA%D8%B9%D8%A7%D9%85%D9%84-%D9%85%D8%B9-%D8%A7%D9%84%D9%85%D9%84%D9%81%D8%A7%D8%AA-%D9%81%D9%8A-%D8%B9%D9%85%D9%84%D9%8A%D8%A9-%D8%AA%D8%B7%D9%88%D9%8A%D8%B1-%D9%85%D9%88%D9%82%D8%B9-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-r1686/" rel="">أساسيات التعامل مع الملفات</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/html/%D8%AA%D8%B9%D8%B1%D9%81-%D8%B9%D9%84%D9%89-%D9%84%D8%BA%D8%A9-html-r1752/" rel="">فكرة عن أساسيات HTML</a>
	</li>
</ul>

<h2>
	محددات النوع
</h2>

<p>
	تُعرف محددات النوع <a href="https://wiki.hsoub.com/CSS/Type_Selectors" rel="external">Type selector</a> أحيانًا باسم محددات الوسم tag name selector أو محددات العناصر element selector، فهي محددات تختار وسم أو عنصر <a href="https://wiki.hsoub.com/HTML" rel="external">HTML</a> من الملف. لاحظ كيف استخدمنا محددات النوع <code>span</code> و<code>em</code> و <code>strong</code> في المثال التالي:
</p>

<p>
	<strong>تطبيق</strong>: حاول أن تضيف قواعد CSS لاختيار العنصر <code>&lt;h1&gt;</code> وتغيير لونه إلى الأزرق.
</p>

<p style="text-align: center;">
	<iframe height="1100" loading="lazy" src="https://mdn.github.io/css-examples/learn/selectors/type.html" style="box-sizing: border-box; max-width: 100%; width: 615.739px; border: 1px solid var(--border-primary); background: rgb(255, 255, 255); border-radius: var(--elem-radius); padding: 1rem;" width="100%"></iframe>
</p>

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

<p>
	يُستخدم رمز النجمة (*) للإشارة إلى المحدد العام <a href="https://wiki.hsoub.com/CSS/Universal_Selector" rel="external">universal selector</a> الذي يختار كل شيء في الملف (أو داخل العنصر الأب إن ارتبط مع عناصر أخرى ومحدد عناصر سليلة <a href="https://wiki.hsoub.com/CSS/Descendant_Selectors" rel="external">descendant combinator</a>). نستخدم في المثال التالي محددًا عامًا لإزالة الهوامش <a href="https://wiki.hsoub.com/CSS/margin" rel="external">margin</a> من جميع العناصر، وذلك لإلغاء التنسيق الافتراضي للمتصفح الذي يمنح العناوين والفقرات النصية هامشًا.
</p>

<p style="text-align: center;">
	<iframe height="650" loading="lazy" src="https://mdn.github.io/css-examples/learn/selectors/universal.html" style="box-sizing: border-box; max-width: 100%; width: 615.739px; border: 1px solid var(--border-primary); background: rgb(255, 255, 255); border-radius: var(--elem-radius); padding: 1rem;" width="100%"></iframe>
</p>

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

<h3>
	تسهيل قراءة بقية المحددات
</h3>

<p>
	تُستخدم المحددات العامة في تسهيل قراءة المحددات الأخرى وتوضيح طبيعة عملها. فلو أردنا مثلًا اختيار أي عنصر من سلالة العنصر <a href="https://wiki.hsoub.com/HTML/article" rel="external"><code>&lt;article&gt;</code></a> يكون الابن الأول لأبيه، بما في ذلك الأبناء المباشرين، ومن ثم إظهارهم بخط سميك، نستخدم الصنف المجرد <a href="https://wiki.hsoub.com/CSS/:first-child" rel="external"><code>first-child:</code></a> بالإضافة إلى محدد النوع <code>&lt;article&gt;</code>:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_1599_8" style=""><span class="kwd">article</span><span class="pln"> </span><span class="pun">:</span><span class="pln">first-child </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">font-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>
	لكن من الممكن جدًا الخلط بين هذا المحدد والمحدد <code>article:first-child</code> الذي يختار أي عنصر <code>&lt;article&gt;</code> يكون ابنًا لعنصر آخر. لتفادي هذا الخلط، يُضاف محدد عام إلى محدد الصنف المجرد <code>first-child:</code> فيصبح الأمر أكثر وضوحًا من مبدأ اختيار أي عنصر يكون الابن الأول للعنصر <code>&lt;article&gt;</code> أو الابن الأول لأي عناصر من سلالته:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_1599_6" style=""><span class="pln">article </span><span class="pun">*:</span><span class="pln">first-child </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">font-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>

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

<p>
	تبدأ محددات الصنف <a href="https://wiki.hsoub.com/CSS/Class_Selectors" rel="external">class selectors</a> بالنقطة (.)، وتختار كل ما في الملف من عناصر تمتلك هذا الصنف. لقد أنشأنا في المثال التالي الذي يعرضه محرر الشيفرة التفاعلي صنفًا يُدعى <code>highlight</code> وطبّقناه في أماكن عدة من ملف HTML. أما النتيجة فكانت تظليل كل العناصر التي تمتلك هذا الصنف باللون الأصفر.
</p>

<p style="text-align: center;">
	<iframe height="750" loading="lazy" src="https://mdn.github.io/css-examples/learn/selectors/class.html" style="box-sizing: border-box; max-width: 100%; width: 615.739px; border: 1px solid var(--border-primary); background: rgb(255, 255, 255); border-radius: var(--elem-radius); padding: 1rem;" width="100%"></iframe>
</p>

<h3>
	استهداف الأصناف في عناصر محددة
</h3>

<p>
	يمكنك إنشاء محدد يستهدف عناصر محددة فقط تمتلك الصنف ذاته. نعرض في المثال التالي كيف سنظلل العنصر <a href="https://wiki.hsoub.com/HTML/span" rel="external"><code>&lt;span&gt;</code></a> الذي يمتلك الصنف <code>highlight</code> بلون مختلف عن العنصر <a href="https://wiki.hsoub.com/HTML/h1-h6" rel="external"><code>&lt;h1&gt;</code></a> الذي يمتلك نفس الصنف. تُنجز العملية باستخدام محدد نوع للعنصر الذي نريد استهدافه مع اسم الصنف الذي نريد تطبيقه باستخدام نقطة ودون وجود فراغات بين محدد النوع ومحدد الصنف:
</p>

<p style="text-align: center;">
	<iframe height="750" loading="lazy" src="https://mdn.github.io/css-examples/learn/selectors/class-type.html" style="box-sizing: border-box; max-width: 100%; width: 615.739px; border: 1px solid var(--border-primary); background: rgb(255, 255, 255); border-radius: var(--elem-radius); padding: 1rem;" width="100%"></iframe>
</p>

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

<h3>
	استهداف عنصر يمتلك أكثر من صنف
</h3>

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

<p>
	لدينا في المثال التالي عنصر <a href="https://wiki.hsoub.com/HTML/div" rel="external"><code>&lt;div&gt;</code></a> يضم ملاحظة. نُطبِّق الإطار الرمادي عندما يمتلك العنصر الصنف <code>notebox</code>، وإن امتلك أيضًا أحد الصنفين <code>warning</code> و<code>danger</code> نُغيّر لون الإطار <code>border-color</code>.
</p>

<p>
	يمكننا أن نخبر المتصفح بأننا نريد أن نختار فقط العناصر التي تمتلك صنفين وذلك بربط محدديهما معًا دون فراغ. لاحظ عدم تطبيق أي تنسيق على العنصر <code>&lt;div&gt;</code> الأخير لأنه يمتلك فقط الصنف <code>danger</code> إذ سيحتاج (وفقًا لقواعد التنسيق التي وضعناها) الصنف <code>notebox</code> أيضًا:
</p>

<p style="text-align: center;">
	<iframe height="850" loading="lazy" src="https://mdn.github.io/css-examples/learn/selectors/class-many.html" style="box-sizing: border-box; max-width: 100%; width: 615.739px; border: 1px solid var(--border-primary); background: rgb(255, 255, 255); border-radius: var(--elem-radius); padding: 1rem;" width="100%"></iframe>
</p>

<h2>
	محددات المعرّف
</h2>

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

<p style="text-align: center;">
	<iframe height="750" loading="lazy" src="https://mdn.github.io/css-examples/learn/selectors/id.html" style="box-sizing: border-box; max-width: 100%; width: 615.739px; border: 1px solid var(--border-primary); background: rgb(255, 255, 255); border-radius: var(--elem-radius); padding: 1rem;" width="100%"></iframe>
</p>

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

<p>
	<strong>ملاحظة</strong>: رأينا في <a href="https://academy.hsoub.com/programming/css/%D8%A7%D9%84%D8%AA%D8%B9%D8%A7%D9%82%D8%A8-%D9%88%D8%A7%D9%84%D8%AA%D8%AE%D8%B5%D9%8A%D8%B5-%D9%88%D8%A7%D9%84%D9%88%D8%B1%D8%A7%D8%AB%D8%A9-%D9%81%D9%8A-css-r2042/" rel="">مقال سابق</a> أن تخصيص محددات المعرّف عالٍ، وسيلغي تأثير بقية المحددات. لهذا من الأفضل في الكثير من الحالات أن تُضيف صنفًا إلى العنصر بدلًا من المعرّف. لا يمنع هذا بالطبع استخدام محدد المعرّفات إن اضطررت إلى ذلك لأسباب قد تتعلق بأذونات الوصول إلى ملفات CSS أو غيرها.
</p>

<p>
	ترجمة -وبتصرف- للمقال <a href="https://developer.mozilla.org/en-US/docs/Learn/CSS/Building_blocks/Selectors/Type_Class_and_ID_Selectors" rel="external nofollow">Type, class, and ID selectors</a>
</p>

<h2>
	اقرأ أيضًا:
</h2>

<ul>
	<li>
		المقال السابق: <a href="https://academy.hsoub.com/programming/css/%D8%A3%D9%86%D9%88%D8%A7%D8%B9-%D9%85%D8%AD%D8%AF%D8%AF%D8%A7%D8%AA-%D8%A7%D9%84%D8%AA%D9%86%D8%B3%D9%8A%D9%82-%D9%81%D9%8A-css-r2044/" rel="">أنواع محددات التنسيق في CSS</a>
	</li>
	<li>
		<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="">المحددات (Selectors) في CSS</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%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%84%D8%BA%D8%A9-css-r1049/" rel="">أساسيات استعمال لغة CSS</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/html/html-%D9%88-css-%D9%84%D9%84%D9%85%D8%A8%D8%AA%D8%AF%D8%A6%D9%8A%D9%86-%D9%85%D9%82%D8%AF%D9%85%D8%A9-%D8%A5%D9%84%D9%89-%D8%AA%D9%86%D8%B3%D9%8A%D9%82%D8%A7%D8%AA-css-r272/" rel="">HTML و CSS للمبتدئين: مقدمة إلى تنسيقات CSS</a>
	</li>
</ul>
]]></description><guid isPermaLink="false">2084</guid><pubDate>Sat, 19 Aug 2023 16:00:00 +0000</pubDate></item><item><title>&#x623;&#x646;&#x648;&#x627;&#x639; &#x645;&#x62D;&#x62F;&#x62F;&#x627;&#x62A; &#x627;&#x644;&#x62A;&#x646;&#x633;&#x64A;&#x642; &#x641;&#x64A; CSS</title><link>https://academy.hsoub.com/programming/css/%D8%A3%D9%86%D9%88%D8%A7%D8%B9-%D9%85%D8%AD%D8%AF%D8%AF%D8%A7%D8%AA-%D8%A7%D9%84%D8%AA%D9%86%D8%B3%D9%8A%D9%82-%D9%81%D9%8A-css-r2044/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2023_08/----CSS.png.4cda6af8667ee44630a06477d0452bbc.png" /></p>
<p>
	تُستخدَم المحددات في CSS لاستهداف عناصر HTML في صفحة الويب التي نريد تنسيقها، كما تتيح هذه اللغة مجموعةً متنوعةً من هذه المحددات التي تمكننا من اختيار العناصر التي ننوي تنسيقها بدقة، وسنناقش في هذا المقال والمقالات الفرعية المتعلقة به الأنواع المختلفة للمحددات بتفاصيل أكثر، لنقف على آلية عملها، كما ننصحك قبل متابعة القراءة أن تكون على دراية بالمواضيع التالية:
</p>

<ul>
	<li>
		أساسيات عمل الحاسوب.
	</li>
	<li>
		أساسيات <a href="https://academy.hsoub.com/programming/general/%D8%AA%D8%AB%D8%A8%D9%8A%D8%AA-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D9%8A%D8%A7%D8%AA-%D8%A7%D9%84%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A9-%D9%84%D9%84%D8%A7%D9%86%D8%B7%D9%84%D8%A7%D9%82-%D9%81%D9%8A-%D8%AA%D8%B7%D9%88%D9%8A%D8%B1-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-r1671/" rel="">تثبيت البرمجيات الأساسية للانطلاق في تطوير الويب</a>.
	</li>
	<li>
		أساسيات <a href="https://academy.hsoub.com/programming/general/%D8%A7%D9%84%D8%AA%D8%B9%D8%A7%D9%85%D9%84-%D9%85%D8%B9-%D8%A7%D9%84%D9%85%D9%84%D9%81%D8%A7%D8%AA-%D9%81%D9%8A-%D8%B9%D9%85%D9%84%D9%8A%D8%A9-%D8%AA%D8%B7%D9%88%D9%8A%D8%B1-%D9%85%D9%88%D9%82%D8%B9-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-r1686/" rel="">التعامل مع الملفات</a>.
	</li>
	<li>
		فكرة عن <a href="https://academy.hsoub.com/programming/html/%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A7%D8%AA-%D9%84%D8%BA%D8%A9-html-r1687/" rel="">أساسيات HTML</a>.
	</li>
	<li>
		فكرة عن <a href="https://academy.hsoub.com/programming/css/%D8%AA%D8%B9%D8%B1%D9%91%D9%81-%D8%B9%D9%84%D9%89-%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A7%D8%AA-css-r70/" rel="">أساسيات عمل CSS</a>
	</li>
</ul>

<h2>
	تعرف على محددات CSS
</h2>

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

<p style="text-align: center;">
	<img alt="01_selectors.png" class="ipsImage ipsImage_thumbnailed" data-fileid="132555" data-unique="r9l9gw5zr" src="https://academy.hsoub.com/uploads/monthly_2023_08/01_selectors.png.a05d0b09ba528ba2798f1266f9831629.png">
</p>

<p>
	تعرَّفنا في مقالات سابقة على بعض أنواع المحددات وتعلمنا وجود محددات تستهدف ملف HTML بطرق مختلفة مثل اختيار عنصر مثل <code>h1</code> أو صنف مثل <code>special.</code>.
</p>

<p>
	عُرِّفت المحددات في لغة CSS ضمن مواصفات اللغة، وتحتاج مثل غيرها من الأجزاء إلى دعم المتصفحات لها كي تعمل بالصورة الصحيحة، كما ستجد أنّ معظم المحددات التي نتعامل معها في هذه السلسلة معرّفة في <a href="https://www.w3.org/TR/selectors-3/" rel="external nofollow">توصيفات المحددات من المستوى الثالث</a>، وهي مواصفات مطبّقة، وبالتالي ستجد دعمًا ممتازًا لها من قبل معظم المتصفحات.
</p>

<h2>
	قوائم المحددات
</h2>

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

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_8603_7" style=""><span class="pln">h1 </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">color</span><span class="pun">:</span><span class="pln"> blue</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

</span><span class="pun">.</span><span class="pln">special </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">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>
	كما يمكن ضم المحددين في قاعدة واحدة كما يلي:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_8603_9" style=""><span class="pln">h1</span><span class="pun">,</span><span class="pln"> </span><span class="pun">.</span><span class="pln">special </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">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>
	لاحظ استخدام الفاصلة (,) بين عناصر قائمة المحددات، وتُعدّ المسافة الفارغة بعد أو قبل الفاصلة أمرًا مقبولًا، وقد يجد البعض أن كتابة قائمة المحددات بالشكل التالي أسهل قراءةً:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_8603_11" style=""><span class="pln">h1</span><span class="pun">,</span><span class="pln">
</span><span class="pun">.</span><span class="pln">special </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">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>
	حاول ضم المحددين اللذين يمتلكان التصريحات نفسها في المثال التالي، وينبغي ألا يتغير مظهر الصفحة في محرر الشيفرة التفاعلي إذا نجحت في ضم المحددين.
</p>

<p style="text-align: center;">
	<iframe height="1100" loading="lazy" src="https://mdn.github.io/css-examples/learn/selectors/selector-list.html" style="box-sizing: border-box; max-width: 100%; width: 615.739px; border: 1px solid var(--border-primary); background: rgb(255, 255, 255); border-radius: var(--elem-radius); padding: 1rem;" width="100%"></iframe>
</p>

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

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_8603_13" style=""><span class="pln">h1 </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">color</span><span class="pun">:</span><span class="pln"> blue</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

</span><span class="pun">..</span><span class="pln">special </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">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>
	لكن عندما تحاول ضم القاعدتين في قاعدة واحدة كونهما يضمان التصريح ذاته، سيتجاهل المتصفح القاعدة بأكملها، فلن يُطبّق التنسيق على العنصر <code>h1</code> ولا على العناصر التي تمتلك الصنف <code>special.</code>.
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_8603_15" style=""><span class="pln">h1</span><span class="pun">,</span><span class="pln"> </span><span class="pun">..</span><span class="pln">special </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">color</span><span class="pun">:</span><span class="pln"> blue</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></pre>

<h2>
	أنواع المحددات
</h2>

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

<h3>
	محددات النوع والصنف والمعرف
</h3>

<p>
	تضم هذه المجموعة المحددات التي تستهدف عناصر HTML وتعرف باسم محددات الأنواع <a href="https://wiki.hsoub.com/CSS/Type_Selectors" rel="external">type selectors</a> مثل <code>&lt;h1&gt;</code>
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_9658_13" style=""><span class="pln">h1 </span><span class="pun">{</span><span class="pln"> </span><span class="pun">}</span></pre>

<p>
	وتضم أيضًا المحددات التي تستهدف الصنف <a href="https://wiki.hsoub.com/CSS/Class_Selectors" rel="external">class selectors</a>:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_9658_11" style=""><span class="pun">.</span><span class="pln">box </span><span class="pun">{</span><span class="pln"> </span><span class="pun">}</span></pre>

<p>
	بالإضافة إلى المحددات التي تستهدف المعرّف <a href="https://wiki.hsoub.com/CSS/ID_Selectors" rel="external">ID selectors</a>
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_8603_19" style=""><span class="pun">#</span><span class="pln">unique </span><span class="pun">{</span><span class="pln">
</span><span class="pun">}</span></pre>

<h3>
	محددات الخاصيات
</h3>

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

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_8603_21" style=""><span class="pln">a</span><span class="pun">[</span><span class="pln">title</span><span class="pun">]</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	أو اختيار العناصر بناءً على وجود خاصية لها قيمة محددة:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_8603_23" style=""><span class="pln">a</span><span class="pun">[</span><span class="pln">href</span><span class="pun">=</span><span class="str">"https://example.com"</span><span class="pun">]</span><span class="pln">
</span><span class="pun">{</span><span class="pln">
</span><span class="pun">}</span></pre>

<h3>
	العناصر المجردة والأصناف المجردة
</h3>

<p>
	تضم هذه المجموعة الأصناف الوهمية <a href="pseudo-class" rel="">pseudo-classes</a> التي تنسق العناصر في حالات محددة، إذ يختار المحدد <code>hover:</code> مثلًا العنصر <code>&lt;a&gt;</code> عندما يمر فوقه مؤشر الفأرة فقط:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_8603_25" style=""><span class="kwd">a</span><span class="pun">:</span><span class="pln">hover </span><span class="pun">{</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	كما تضم أيضًا محددات العناصر المجردة <a href="https://wiki.hsoub.com/CSS/Topics/Pseudo_Elements" rel="external">pseudo-elements</a> التي تختار جزءًا محددًا من العنصر بدلًا من العنصر نفسه، إذ يختار المحدد <code>first-line::</code> مثلًا السطر الأول من نص داخل فقرة نصية <code>&lt;p&gt;</code> ويعمل وكأنه عنصر <code>&lt;span&gt;</code> يُغلِّف السطر الأول ثم يختاره:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_8603_27" style=""><span class="kwd">p</span><span class="pun">::</span><span class="pln">first-line </span><span class="pun">{</span><span class="pln">
</span><span class="pun">}</span></pre>

<h2>
	المجمعات Combinators
</h2>

<p>
	تضم المجموعة الأخيرة من المحددات محددات أخرى لكي تستهدف عناصر الصفحة، على سبيل المثال نستخدم <a href="https://wiki.hsoub.com/CSS/Child_Selectors" rel="external">محددات العناصر الأبناء</a> إذا أردنا تطبيق التنسيق على أبناء عنصر معين، تختار القاعدة التالية مثلًا الفقرات النصية التي تأتي كأبناء مباشرين للعنصر <code>&lt;article&gt;</code> باستخدام محدد الأبناء(<code>‎&gt;‎</code><span class="ipsEmoji">?</span>
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_8603_29" style=""><span class="pln">article </span><span class="pun">&gt;</span><span class="pln"> p </span><span class="pun">{</span><span class="pln">
</span><span class="pun">}</span></pre>

<h2>
	جدول مرجعي إلى المحددات
</h2>

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

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

<table>
	<thead>
		<tr>
			<th style="text-align:right">
				المحدد
			</th>
			<th style="text-align:right">
				مثال
			</th>
			<th style="text-align:right">
				شرح المحدد في سلسلة المقالات
			</th>
		</tr>
	</thead>
	<tbody>
		<tr>
			<td style="text-align:right">
				<a href="https://wiki.hsoub.com/CSS/Type_Selectors" rel="external">محدد النوع</a>
			</td>
			<td style="text-align:right">
				<code>{}h1</code>
			</td>
			<td style="text-align:right">
				<a href="" rel="">محددات الأنواع في CSS</a>
			</td>
		</tr>
		<tr>
			<td style="text-align:right">
				<a href="https://wiki.hsoub.com/CSS/Universal_Selector" rel="external">المحدد العام</a>
			</td>
			<td style="text-align:right">
				<code>{}*</code>
			</td>
			<td style="text-align:right">
				<a href="" rel="">محدد النوع العام في CSS</a>
			</td>
		</tr>
		<tr>
			<td style="text-align:right">
				<a href="https://wiki.hsoub.com/CSS/Class_Selectors" rel="external">محدد الصنف</a>
			</td>
			<td style="text-align:right">
				<code>{}box.</code>
			</td>
			<td style="text-align:right">
				<a href="" rel="">محددات الأصناف في CSS</a>
			</td>
		</tr>
		<tr>
			<td style="text-align:right">
				<a href="https://wiki.hsoub.com/CSS/ID_selectors" rel="external">محدد المُعرِّف</a>
			</td>
			<td style="text-align:right">
				<code>{}unique#</code>
			</td>
			<td style="text-align:right">
				<a href="" rel="">محددات المعرّفات في CSS</a>
			</td>
		</tr>
		<tr>
			<td style="text-align:right">
				<a href="https://wiki.hsoub.com/CSS/Attribute_selectors" rel="external">محدد السمة</a>
			</td>
			<td style="text-align:right">
				<code>{}a[title]</code>
			</td>
			<td style="text-align:right">
				<a href="" rel="">محددات السمات في CSS</a>
			</td>
		</tr>
		<tr>
			<td style="text-align:right">
				<a href="https://wiki.hsoub.com/CSS/Pseudo-classes" rel="external">محدد الصنف المجرد</a>
			</td>
			<td style="text-align:right">
				<code>{}p:first-child</code>
			</td>
			<td style="text-align:right">
				<a href="" rel="">محددات الأصناف المجردة في CSS</a>
			</td>
		</tr>
		<tr>
			<td style="text-align:right">
				<a href="https://wiki.hsoub.com/CSS/Pseudo-elements" rel="external">محدد العنصر المجرد</a>
			</td>
			<td style="text-align:right">
				<code>{}p::first-line</code>
			</td>
			<td style="text-align:right">
				<a href="" rel="">محددات العناصر المجردة في CSS</a>
			</td>
		</tr>
		<tr>
			<td style="text-align:right">
				<a href="https://wiki.hsoub.com/CSS/Descendant_combinator" rel="external">محدد العناصر السليلة</a>
			</td>
			<td style="text-align:right">
				<code>{}article p</code>
			</td>
			<td style="text-align:right">
				<a href="" rel="">محددات العناصر السليلة في CSS</a>
			</td>
		</tr>
		<tr>
			<td style="text-align:right">
				<a href="https://wiki.hsoub.com/CSS/Child_combinator" rel="external">محددات الأبناء المباشرين</a>
			</td>
			<td style="text-align:right">
				<code>{}article &gt; p</code>
			</td>
			<td style="text-align:right">
				<a href="" rel="">محددات الأبناء الأشقاء في CSS</a>
			</td>
		</tr>
		<tr>
			<td style="text-align:right">
				<a href="https://wiki.hsoub.com/CSS/Adjacent_sibling_combinator" rel="external">محددات الأشقاء المتجاورين</a>
			</td>
			<td style="text-align:right">
				<code>{}h1 + p</code>
			</td>
			<td style="text-align:right">
				<a href="" rel="">محددات الأشقاء المتجاورين في CSS</a>
			</td>
		</tr>
		<tr>
			<td style="text-align:right">
				<a href="https://wiki.hsoub.com/CSS/General_sibling_combinator" rel="external">محددات الأشقاء</a>
			</td>
			<td style="text-align:right">
				<code>{}h1 ~ p</code>
			</td>
			<td style="text-align:right">
				<a href="" rel="">محددات الأشقاء في CSS</a>
			</td>
		</tr>
	</tbody>
</table>

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

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

<p>
	ترجمة -وبتصرف- للمقال <a href="https://developer.mozilla.org/en-US/docs/Learn/CSS/Building_blocks/Selectors" rel="external nofollow">CSS selectors</a>
</p>

<h2>
	اقرأ أيضا
</h2>

<ul>
	<li>
		المقال السابق: <a href="https://academy.hsoub.com/programming/css/%D8%A7%D9%84%D8%AA%D8%B9%D8%A7%D9%82%D8%A8-%D9%88%D8%A7%D9%84%D8%AA%D8%AE%D8%B5%D9%8A%D8%B5-%D9%88%D8%A7%D9%84%D9%88%D8%B1%D8%A7%D8%AB%D8%A9-%D9%81%D9%8A-css-r2042/" rel="">التعاقب والتخصيص والوراثة في CSS</a>.
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D9%81%D9%87%D9%85-%D9%88%D8%A5%D9%86%D8%B4%D8%A7%D8%A1-%D9%82%D9%88%D8%A7%D8%B9%D8%AF-css-r1881/" rel="">كيفية فهم وإنشاء قواعد CSS</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%A8%D9%86%D8%A7%D8%A1-%D9%85%D9%88%D9%82%D8%B9-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-css-r1879/" rel="">كيفية بناء موقع باستخدام CSS</a>
	</li>
	<li>
		<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="">المحددات (Selectors) في CSS</a>
	</li>
</ul>
]]></description><guid isPermaLink="false">2044</guid><pubDate>Sun, 13 Aug 2023 16:03:00 +0000</pubDate></item><item><title>&#x627;&#x644;&#x62A;&#x639;&#x627;&#x642;&#x628; &#x648;&#x627;&#x644;&#x62A;&#x62E;&#x635;&#x64A;&#x635; &#x648;&#x627;&#x644;&#x648;&#x631;&#x627;&#x62B;&#x629; &#x641;&#x64A; CSS</title><link>https://academy.hsoub.com/programming/css/%D8%A7%D9%84%D8%AA%D8%B9%D8%A7%D9%82%D8%A8-%D9%88%D8%A7%D9%84%D8%AA%D8%AE%D8%B5%D9%8A%D8%B5-%D9%88%D8%A7%D9%84%D9%88%D8%B1%D8%A7%D8%AB%D8%A9-%D9%81%D9%8A-css-r2042/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2023_08/---CSS(1).png.1b4c8afc37d8d705d12660bae7fcc161.png" /></p>
<p>
	نهدف في هذا المقال إلى تنمية قدرتك على استيعاب بعضٍ من أهم المفاهيم الأساسية في CSS وهي التعاقب cascade والتخصيص specificity والوراثة inheritance، فهذه المفاهيم الثلاثة تتحكم بكيفية تطبيق CSS على HTML وتمكنك من معرفة كيفية حل المشاكل الناتجة عن تطبيق قواعد تنسيق مختلفة على العنصر ذاته، أي حل حالات النزاع.
</p>

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

<ul>
	<li>
		أساسيات عمل الحاسوب.
	</li>
	<li>
		أساسيات <a href="https://academy.hsoub.com/programming/general/%D8%AA%D8%AB%D8%A8%D9%8A%D8%AA-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D9%8A%D8%A7%D8%AA-%D8%A7%D9%84%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A9-%D9%84%D9%84%D8%A7%D9%86%D8%B7%D9%84%D8%A7%D9%82-%D9%81%D9%8A-%D8%AA%D8%B7%D9%88%D9%8A%D8%B1-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-r1671/" rel="">تثبيت البرمجيات</a>.
	</li>
	<li>
		أساسيات <a href="https://academy.hsoub.com/programming/general/%D8%A7%D9%84%D8%AA%D8%B9%D8%A7%D9%85%D9%84-%D9%85%D8%B9-%D8%A7%D9%84%D9%85%D9%84%D9%81%D8%A7%D8%AA-%D9%81%D9%8A-%D8%B9%D9%85%D9%84%D9%8A%D8%A9-%D8%AA%D8%B7%D9%88%D9%8A%D8%B1-%D9%85%D9%88%D9%82%D8%B9-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-r1686/" rel="">التعامل مع الملفات</a>.
	</li>
	<li>
		فكرة عن <a href="https://academy.hsoub.com/programming/html/%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A7%D8%AA-%D9%84%D8%BA%D8%A9-html-r1687/" rel="">أساسيات HTML</a>.
	</li>
	<li>
		فكرة عن <a href="https://academy.hsoub.com/programming/css/%D8%AA%D8%B9%D8%B1%D9%91%D9%81-%D8%B9%D9%84%D9%89-%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A7%D8%AA-css-r70/" rel="">أساسيات عمل CSS</a>
	</li>
</ul>

<h2>
	تنازع قواعد CSS
</h2>

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

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

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

<h2>
	مفهوم التعاقب Cascading
</h2>

<p>
	يعني هذا المفهوم ببساطة شديدة أنّ ترتيب ظهور القواعد في شيفرة CSS مهم، فعندما تُطبق قاعدتان لهما <strong>مستوى التخصيص ذاته</strong>، فستُستخدَم القاعدة التي تظهر تاليًا في الشيفرة.
</p>

<p>
	لدينا في المثال التالي قاعدتان يمكن تطبيقهما على عنصر العنوان <code>&lt;h1&gt;</code>، لكن ستكون النتيجة هي ظهوره باللون الأزرق والسبب في ذلك أنّ القاعدتين تمتلكان محدِّد العنصر ذاته، أي أنهما متساويتان في التخصيص لذا ستكون الغلبة للقاعدة التي تظهر أخيرًا ضمن الشيفرة:
</p>

<p style="text-align: center;">
	<iframe height="400" loading="lazy" src="https://mdn.github.io/css-examples/learn/cascade/cascade-simple.html" style="box-sizing: border-box;  margin: auto; max-width: 100%; width: 615.739px; border: 1px solid var(--border-primary); background: rgb(255, 255, 255); border-radius: var(--elem-radius); padding: 1rem;" width="100%"></iframe>
</p>

<h2>
	التخصيص Specificity
</h2>

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

<ul>
	<li>
		<p>
			محدد العنصر element selector أقل خصوصيةً لأنه سيختار كل عناصر الصفحة من النوع ذاته لذا يُعطى تقييمًا أقل فيما يتعلق بالخصوصية. كما أن محددات العناصر الزائفة <a href="https://wiki.hsoub.com/CSS/Topics/Pseudo_Elements" rel="external">Pseudo-element selectors</a> تملك نفس درجة تخصيص محددات العناصر العادية.
		</p>
	</li>
	<li>
		<p>
			محدد الصنف class selector أكثر خصوصيةً لأنه سيختار فقط عناصر الصفحة التي تحمل الصنف نفسه، أي قيمة السمة <code>class</code> فيها متماثلة، وسيُعطى تقييمًا أعلى فيما يتعلق بالخصوصية. كما أن محددات الخاصيات <a href="https://wiki.hsoub.com/CSS/Attribute_Selectors" rel="external">attribute selectors</a> والأصناف الزائفة <a href="https://wiki.hsoub.com/CSS/Topics/Pseudo_Classes" rel="external">pseudo-classes</a> تملك نفس درجة خصوصية الأصناف.
		</p>
	</li>
</ul>

<p>
	إليك مثالًا فيما يلي، إذ لدينا في المحرر التفاعلي التالي قاعدتان يمكن تطبيقهما على عنصر العنوان <code>&lt;h1&gt;</code>، لكن العنوان سيظهر باللون الأحمر لأن محدد الصنف <code>main-heading</code> يملك تخصيصًا أعلى، علمًا أنّ القاعدة الأخرى التي تضم محدد العنصر <code>&lt;h1&gt;</code> ظهرت تاليًا في الشيفرة البرمجية:
</p>

<p style="text-align: center;">
	<iframe height="400" loading="lazy" src="https://mdn.github.io/css-examples/learn/cascade/specificity-simple.html" style="box-sizing: border-box; margin: auto; max-width: 100%; width: 615.739px; border: 1px solid var(--border-primary); background: rgb(255, 255, 255); border-radius: var(--elem-radius); padding: 1rem;" width="100%"></iframe>
</p>

<p>
	سنشرح بمزيد من التفصيل طريقة تقييم التخصيص لكل محدِّد لاحقًا.
</p>

<h2>
	الوراثة Inheritance
</h2>

<p>
	من الضروري كذلك اعتبار مفهوم الوراثة لمعرفة التنسيقات الصحيحة التي تطبق على العناصر، حيث ترث بعض العناصر الأبناء بعض قيم التنسيق المطبقة على آبائها وبعضها الآخر لا يرث هذه القيم، فإذا ضبطت قيمتَي الخاصيتين <code>color</code> و <code>font-family</code> على عنصر ما، فسيرث كل عنصر ابن ضمنه قيم هاتين الخاصيتين إذا لم تطبق عليه تنسيقًا خاصًا به مباشرةً.
</p>

<p style="text-align: center;">
	<iframe height="600" loading="lazy" src="https://mdn.github.io/css-examples/learn/cascade/inheritance-simple.html" style="box-sizing: border-box; margin: auto; max-width: 100%; width: 615.739px; border: 1px solid var(--border-primary); background: rgb(255, 255, 255); border-radius: var(--elem-radius); padding: 1rem;" width="100%"></iframe>
</p>

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

<p>
	ملاحظة: يمكنك معرفة إن كانت الخاصية تورث أم لا من قسم التعريف الرسمي لها في المرجع MDN CSS، على سبيل المثال انظر إلى <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/color#formal_definition" rel="external nofollow">التعريف الرسمي لخاصية اللون color</a> وستجد yes بجانب Inherited ما يعني أنها خاصية تورث من العنصر الأب لأبنائه.
</p>

<h2>
	آلية العمل المشتركة لمفاهيم الوراثة والتخصيص والتعاقب
</h2>

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

<h2>
	استيعاب مفهوم الوراثة
</h2>

<p>
	لدينا في المثال التالي عنصر قائمة غير مرتبة <a href="https://wiki.hsoub.com/HTML/ul" rel="external"><code>&lt;ul&gt;</code></a> الذي يضم مستويين متداخلين من القوائم غير المرتبة، وقد قمنا بضبط قيم الحاشية <a href="https://wiki.hsoub.com/CSS/padding" rel="external">padding</a> والإطار <a href="https://wiki.hsoub.com/CSS/border" rel="external">border</a> ولون الخط <a href="https://wiki.hsoub.com/CSS/color" rel="external">color</a> للعنصر الخارجي أي العنصر الأب الموجود في المستوى الأول.
</p>

<p>
	كما تلاحظ فقد طُبِّق اللون على الأبناء المباشرين وعلى غير المباشرين أيضًا وهم العناصر <code>&lt;li&gt;</code> داخل قائمة <code>&lt;ul&gt;</code> الأولى المتداخلة مع قائمة <code>&lt;ul&gt;</code> ذات المستوى الأول، ثم أضفنا الصنف <code>special</code> إلى القائمة الثانية <code>&lt;ul&gt;</code> المتداخلة مع قائمة <code>&lt;ul&gt;</code> ذات المستوى الأول وطبقنا عليها لونًا مختلفًا، وكما تلاحظ ستورَّث هذه الخاصية إلى العناصر الأبناء لهذه القائمة أيضًا:
</p>

<p style="text-align: center;">
	<iframe height="1000" loading="lazy" src="https://mdn.github.io/css-examples/learn/cascade/inheritance.html" style="box-sizing: border-box; margin: auto; max-width: 100%; width: 615.739px; border: 1px solid var(--border-primary); background: rgb(255, 255, 255); border-radius: var(--elem-radius); padding: 1rem;" width="100%"></iframe>
</p>

<p>
	لم تورّث خاصيات مثل العرض width والهوامش <a href="https://wiki.hsoub.com/CSS/margin" rel="external">margins</a> والحاشية padding والإطارات borders كما شرحنا سابقًا، فإذا وُرِّثت خاصية الإطار في المثال السابق، لكنت سترى إطارًا حول كل قائمة وعنصر قائمة ابن، وهذا بالطبع أمر غير مرغوب على الإطلاق.
</p>

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

<h3>
	التحكم بالوراثة
</h3>

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

<ul>
	<li>
		<a href="https://wiki.hsoub.com/CSS/inherit" rel="external"><code>inherit</code></a>: تجعل قيمة الخاصية التي نطبقها على عنصر محدد نفسها القيمة المطبقة على العنصر الأب، أي أنها تُفعِّل الوراثة.
	</li>
	<li>
		<a href="https://wiki.hsoub.com/CSS/initial" rel="external"><code>initial</code></a>: تجعل قيمة الخاصية التي نطبقها على العنصر نفسها القيمة الأولية للخاصية.
	</li>
	<li>
		<code>revert</code>: تعيد ضبط قيمة الخاصية المطبقة على العنصر لتكون نفسها القيمة الافتراضية للمتصفح بدلًا من القيمة الافتراضية التي تأخذها الخاصية، ولهذه القيمة نفس عمل القيمة <code>unset</code> في حالات كثيرة.
	</li>
	<li>
		<code>revert-layer</code>: تعيد ضبط قيمة الخاصية المطبقة على العنصر المحدد لتأخذ القيمة المحددة في طبقة تعاقب سابقة cascade layer في تسلسل التنسيقات. (شرح فكرة cascade layer خارج نطاق المقال الحالي لكنها باختصار طريقة تمكنك من تجاوز أولويات شيفرات CSS بسهولة بعض النظر عن درجة التخصيص).
	</li>
	<li>
		<a href="https://wiki.hsoub.com/CSS/unset" rel="external"><code>unset</code></a>: تعيد قيمة الخاصية إلى وضعها الطبيعي، أي أنها تعمل عمل القيمة <code>inherit</code> إذا كانت الخاصية ترث التنسيقات افتراضيًا وإلا فستعمل عمل القيمة <code>initial</code>.
	</li>
</ul>

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

<ol>
	<li>
		يمتلك عنصر القائمة الثاني الصنف <code>my-class-1</code> والذي يجعل لون العنصر <code>&lt;a&gt;</code> الموجود داخله موروثًا، فكيف سيتغير لون الرابط إذًا إذا أزلت هذه القاعدة؟
	</li>
	<li>
		هل فهمت السبب الذي جعل لون الرابط في عنصري القائمة الثالث والرابع كما هو عليه؟ لقد ضُبطت خاصية اللون في الثالث لتكون <code>initial</code>، ويعني ذلك استخدام القيمة الأولية للخاصية -وهي الأسود في هذه الحالة- وليست القيمة الافتراضية للمتصفح -وهي اللون الأزرق-، كما ضُبطت الخاصية على <code>unset</code> في عنصر القائمة الرابع ويعني ذلك أنّ قيمة الخاصية ستماثل قيمتها في العنصر الأب وتكون باللون الأخضر.
	</li>
	<li>
		ما الروابط التي سيتغير لونها إن عرّفت القاعدة التالية <code>a { color: red; }</code> مثلًا؟
	</li>
	<li>
		بعد قراءة الفقرة التالية التي تشرح طريقة إعادة ضبط جميع الخاصيات، عد إلى الكود مجددًا وقم بتغيير قيمة الخاصية <code>color</code> إلى <code>all</code>. لاحظ كيف أن الرابط الثاني سيظهر على سطر جديد ويكون له تعداد نقطي. ما هي الخصائص التي تعتقد أنها موروثة هنا؟
	</li>
</ol>

<p style="text-align: center;">
	<iframe height="700" loading="lazy" src="https://mdn.github.io/css-examples/learn/cascade/keywords.html" style="box-sizing: border-box;  margin: auto; max-width: 100%; width: 615.739px; border: 1px solid var(--border-primary); background: rgb(255, 255, 255); border-radius: var(--elem-radius); padding: 1rem;" width="100%"></iframe>
</p>

<h3>
	إعادة ضبط قيم جميع الخاصيات
</h3>

<p>
	تُستخدَم الخاصية المختصرة <code>all</code> لتطبيق إحدى القيم الخمسة العامة للوراثة على كل الخاصيات تقريبًا في اللحظة نفسها، إذ يمكن أن تأخذ إحدى القيم <code>inherit</code> أو <code>initial</code> أو <code>revert</code> أو <code>revert-layer</code>أو <code>unset</code>، وهي طريقة جيدة للتراجع عن التغييرات المطبقة على التنسيقات لكي تعود إلى نقطة بداية محددة قبل تطبيق تغييرات أخرى.
</p>

<p>
	لدينا في المثال التالي عنصرَي نص اقتباس <a href="https://wiki.hsoub.com/HTML/blockquote" rel="external"><code>&lt;blockquote&gt;</code></a>، طُبِّق على العنصر تنسيق يستهدف هذا العنصر بذاته، بينما طبق على الثاني صنف باسم <code>fix-this</code> يضبط الخاصية <code>unset</code> لهذا الاقتباس بالقيمة <code>all</code>.
</p>

<p style="text-align: center;">
	<iframe height="700" loading="lazy" src="https://mdn.github.io/css-examples/learn/cascade/all.html" style="box-sizing: border-box; margin: auto; max-width: 100%; width: 615.739px; border: 1px solid var(--border-primary); background: rgb(255, 255, 255); border-radius: var(--elem-radius); padding: 1rem;" width="100%"></iframe>
</p>

<p>
	حاول تغيير قيمة الخاصية <code>all</code> إلى قيم أخرى وراقب ما قد يحدث.
</p>

<h2>
	استيعاب مفهوم التعاقب
</h2>

<p>
	قد تدرك الآن السبب الذي يجعل لون فقرة نصية موجودة في مكان بعيد ضمن بنية HTML سيماثل لون العنصر <a href="https://wiki.hsoub.com/HTML/body" rel="external"><code>&lt;body&gt;</code></a> مثلًا، فقد رأينا سابقًا كيف نُطبِّق CSS على عنصر في أي مكان من المستند سواءً بإسناد تنسيقات إلى عنصر محدد أو بإنشاء صنف، وسنتابع الآن بشيء من التفصيل كيف يعمل مفهوم التعاقب وأي قاعدة ستُطبق عندما يمكن تطبيق أكثر من قاعدة تنسيق على نفس العنصر وكل قاعدة تتصمن نفس الخاصيات لكن بقيم مختلفة.
</p>

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

<ol>
	<li>
		ترتيب الشيفرة المصدرية Source order.
	</li>
	<li>
		درجة التخصيص Specificity.
	</li>
	<li>
		الأهمية Importance.
	</li>
</ol>

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

<h3>
	ترتيب الشيفرة المصدرية
</h3>

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

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

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

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

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

<p style="text-align: center;">
	<iframe height="900" loading="lazy" src="https://mdn.github.io/css-examples/learn/cascade/mixing-rules.html" style="box-sizing: border-box;  margin: auto; max-width: 100%; width: 615.739px; border: 1px solid var(--border-primary); background: rgb(255, 255, 255); border-radius: var(--elem-radius); padding: 1rem;" width="100%"></iframe>
</p>

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

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

<p>
	وبالتالي يُقاس مقدار التخصيص باعتماد أربع قيم (أو مكوّنات) مختلفة هي التنسيق السطري inline style ومحدد المعرف ID ومحدد الصنف CLASS ومحدد العنصر ELEMENT ويمكن أن توازنها بفكرة منازل الآلاف والمئات والعشرات والآحاد لعدد من 4 خانات كما يلي:
</p>

<ol>
	<li>
		التنيسقات المضمنة: يضاف 1 في خانة الآلاف لكل تصريح تنسيق ضمن السمة <code>style</code>، أي إن كان التنسيق سطريًا فلا توجد محددات في تصريحات كهذه لذلك سيكون تقييمها 1000.
	</li>
	<li>
		Identifiers: يُضاف1 في خانة المئات لكل محدد مُعرّف ID Selector ضمن المحدد الكلي.
	</li>
	<li>
		Classes: يُضاف 1 في خانة العشرات لكل محدد صنف أو محدد سمة أو صنف مجرَّد pseudo-class موجود ضمن المحدد الكلي.
	</li>
	<li>
		Elements: يُضاف 1 في خانة الآحاد لكل محدد عنصر أو عنصر مجرَّد ضمن المحدد الكلي.
	</li>
</ol>

<p>
	<strong>ملاحظة</strong>: لا تأثير للمحددات العامة <code>*</code> والموازنات (<code>+</code> أو <code>&gt;</code> أو <code>~</code> أو ' ') ونافيات الأصناف المجردة (<code>not:</code>) على التخصيص.
</p>

<p>
	إليك جدول يوضح طريقة حساب نقاط التخصيص وكيفية حساب النقاط التي تمنح لكل حالة:
</p>

<table>
	<thead>
		<tr>
			<th>
				المحدد
			</th>
			<th>
				نقاط التخصيص الكلية
			</th>
			<th>
				المعرِّفات Identifiers
			</th>
			<th>
				الأصناف Classes
			</th>
			<th>
				العناصر Elements
			</th>
		</tr>
	</thead>
	<tbody>
		<tr>
			<td>
				h1
			</td>
			<td>
				0-0-1
			</td>
			<td>
				0
			</td>
			<td>
				0
			</td>
			<td>
				1
			</td>
		</tr>
		<tr>
			<td>
				h1 + p::first-letter
			</td>
			<td>
				0-0-3
			</td>
			<td>
				0
			</td>
			<td>
				0
			</td>
			<td>
				3
			</td>
		</tr>
		<tr>
			<td>
				li &gt; a[href*="en-US"] &gt; .inline-warning
			</td>
			<td>
				0-2-2
			</td>
			<td>
				0
			</td>
			<td>
				2
			</td>
			<td>
				2
			</td>
		</tr>
		<tr>
			<td>
				#identifier
			</td>
			<td>
				1-0-0
			</td>
			<td>
				1
			</td>
			<td>
				0
			</td>
			<td>
				0
			</td>
		</tr>
		<tr>
			<td>
				button:not(#mainBtn, .cta)
			</td>
			<td>
				1-0-1
			</td>
			<td>
				1
			</td>
			<td>
				0
			</td>
			<td>
				1
			</td>
		</tr>
	</tbody>
</table>

<p>
	لنلق نظرةً قبل أن نتابع على تطبيق عملي:
</p>

<p style="text-align: center;">
	<iframe height="700" loading="lazy" src="https://mdn.github.io/css-examples/learn/cascade/specificity-boxes.html" style="box-sizing: border-box; margin: auto; max-width: 100%; width: 615.739px; border: 1px solid var(--border-primary); background: rgb(255, 255, 255); border-radius: var(--elem-radius); padding: 1rem;" width="100%"></iframe>
</p>

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

<ul>
	<li>
		يتنافس أول محددين لتنسيق لون خلفية الرابط، ويربح الثاني جاعلًا لون الخلفية أزرقًا لأنه يضم محدد معرّفات إضافية في سلسلته وبالتالي حصل على 2-0-1 نقطة مقابل 1-0-0 للأول.
	</li>
	<li>
		يتنافس المحددين الثالث والرابع على تنسيق لون نص الرابط، ويربح الرابع جاعلًا لون النص أبيضًا على الرغم من امتلاكه محددات عناصر أقل بواحد من سابقه لكنه يحتوي على محدد صنف وبالتالي خسر نقطة وربح 10 وسيحصل على 1-1-3 نقطة مقابل 1-0-4 للثالث.
	</li>
	<li>
		يتنافس المحددان الخامس والسابع على تنسيق إطار الرابط عندما يمر مؤشر الفأرة فوقه ويخسر السادس مقابل الخامس بنتيجة 0-2-3 مقابل 0-2-4 لأنه يمتلك عددًا أقل بواحد من محددات العناصر، في حين يربح المحدد السابع في منافسته مع الخامس والسادس على الرغم من امتلاكه نفس العدد من المحددات الفرعية للخامس لكن وجود محدد صنف حسم النتيجة لصالحه وكانت 0-3-3 مقابل 0-2-3 و 0-2-4.
	</li>
</ul>

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

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

<h3>
	التصريح <code>important!</code>
</h3>

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

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

<p>
	ألق نظرةً على المثال التالي الذي يضم فقرتين نصيتين تمتلك أحدهما محدد معرّفات.
</p>

<p style="text-align: center;">
	<iframe height="700" loading="lazy" src="https://mdn.github.io/css-examples/learn/cascade/important.html" style="box-sizing: border-box;  margin: auto; max-width: 100%; width: 615.739px; border: 1px solid var(--border-primary); background: rgb(255, 255, 255); border-radius: var(--elem-radius); padding: 1rem;" width="100%"></iframe>
</p>

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

<ol>
	<li>
		لاحظ تطبيق قيمتي الخاصيتين <code>color</code> و <code>padding</code> في القاعدة الثالثة، بينما لم تطبق قيمة الخاصية <code>background-color</code> والسبب أنها تصريحات ظهرت في آخر تسلسل الشيفرة، وعادةً ما تلغي الأخيرة ما جاء في الأولى.
	</li>
	<li>
		ربحت القواعد الأعلى منها لأنّ محدد الصنف أعلى تخصيصًا من محدد العناصر.
	</li>
	<li>
		يمتلك كلا العنصرين السمة <code>class</code> التي تأخذ القيمة <code>better</code>، لكن تمتلك الفقرة النصية الثانية المعرّف <code>id</code> ذو القيمة <code>winning</code> أيضًا، وطالما أنّ محددات المعرّفات أعلى تخصيصًا من محددات الأصناف -إذ لا يوجد سوى عنصر واحد في الصفحة يمتلك هذا المعرّف بينما قد تمتلك عدة عناصر الصنف نفسه- فمن المفترض أن يُطبَّق اللون الأحمر على الخلفية ويظهر الإطار الأسود الذي سماكته 1 بكسل حول الفقرة النصية الثانية، وستبقى الفقرة الأولى باللون الرمادي وبلا إطار وفقًا للقيم في محدد الصنف.
	</li>
	<li>
		طُبّق بالفعل اللون الأحمر على خلفية الفقرة النصية الثانية ولم يُعرض الإطار الأسود، والسبب وجود التصريح <code>important!</code> في القاعدة الثانية بعد <code>border: none</code> مما يعني أنّ هذا التصريح سيكون الأعلى تخصيصًا على الإطلاق.
	</li>
</ol>

<p>
	<strong>ملاحظة</strong>: ستكون الطريقة الوحيدة للتخلص من التصريح <code>important!</code> هو أن يأتي تصريح آخر بمستوى التخصيص نفسه لاحقًا في الشيفرة أو أن يأتي تصريح <code>important!</code> آخر له تخصيص أعلى.
</p>

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

<h2>
	تأثير موقع CSS
</h2>

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

<h3>
	ترتيب الأهمية لمواقع CSS
</h3>

<p>
	تُطبَق التصريحات التي تتنازع على تنسيق عنصر وفق الترتيب التالي الذي يلغي فيه كل بند سابقه:
</p>

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

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

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

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

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

<p>
	ترجمة -وبتصرف- للمقال <a href="https://developer.mozilla.org/en-US/docs/Learn/CSS/Building_blocks/Cascade_and_inheritance" rel="external nofollow">Cascade and inheritance</a>.
</p>

<h2>
	اقرأ أيضًا:
</h2>

<ul>
	<li>
		المقال السابق: <a href="https://academy.hsoub.com/programming/css/%D8%A2%D9%84%D9%8A%D8%A9-%D8%B9%D9%85%D9%84-%D9%84%D8%BA%D8%A9-css-r2003/" rel="">آلية عمل لغة CSS</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D8%AA%D8%B9%D8%B1%D9%81-%D8%B9%D9%84%D9%89-css-r2000/" rel="">تعرف على CSS</a>
	</li>
	<li>
		<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="">المحددات (Selectors) في CSS</a><span style="display: none;"> </span>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%AA%D8%AD%D9%88%D9%8A%D9%84-%D8%B4%D9%8A%D9%81%D8%B1%D8%A9-css-%D8%A5%D9%84%D9%89-%D8%AA%D9%86%D8%B3%D9%8A%D9%82%D8%A7%D8%AA-%D9%85%D8%B1%D8%A6%D9%8A%D8%A9-r1269/" rel="">كيفية تحويل شيفرة CSS إلى تنسيقات مرئية</a>
	</li>
</ul>
]]></description><guid isPermaLink="false">2042</guid><pubDate>Sun, 06 Aug 2023 14:00:00 +0000</pubDate></item><item><title>&#x622;&#x644;&#x64A;&#x629; &#x639;&#x645;&#x644; &#x644;&#x63A;&#x629; CSS</title><link>https://academy.hsoub.com/programming/css/%D8%A2%D9%84%D9%8A%D8%A9-%D8%B9%D9%85%D9%84-%D9%84%D8%BA%D8%A9-css-r2003/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2023_06/--CSS.png.8f52f2af819e18679d41faff3afce6e6.png" /></p>
<p>
	سنلقي نظرة في هذا المقال على الآلية التي يحلل فيها المتصفح شيفرات لغة CSS ولغة HTML ويحولها إلى صفحات ويب، كما نستعرض ما يحدث عندما يصادف المتصفح تصريحات CSS لا يستطيع فهمها.
</p>

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

<ul>
	<li>
		أساسيات عمل الحاسوب
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/general/%D8%AA%D8%AB%D8%A8%D9%8A%D8%AA-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D9%8A%D8%A7%D8%AA-%D8%A7%D9%84%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A9-%D9%84%D9%84%D8%A7%D9%86%D8%B7%D9%84%D8%A7%D9%82-%D9%81%D9%8A-%D8%AA%D8%B7%D9%88%D9%8A%D8%B1-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-r1671/" rel="">تثبيت البرمجيات الأساسية للانطلاق في تطوير الويب</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/general/%D8%A7%D9%84%D8%AA%D8%B9%D8%A7%D9%85%D9%84-%D9%85%D8%B9-%D8%A7%D9%84%D9%85%D9%84%D9%81%D8%A7%D8%AA-%D9%81%D9%8A-%D8%B9%D9%85%D9%84%D9%8A%D8%A9-%D8%AA%D8%B7%D9%88%D9%8A%D8%B1-%D9%85%D9%88%D9%82%D8%B9-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-r1686/" rel="">أساسيات التعامل مع الملفات</a>
	</li>
	<li>
		فكرة عن <a href="https://academy.hsoub.com/programming/html/%D8%AA%D8%B9%D8%B1%D9%81-%D8%B9%D9%84%D9%89-%D9%84%D8%BA%D8%A9-html-r1752/" rel="">أساسيات HTML</a>
	</li>
</ul>

<h2>
	كيف تعمل لغة CSS في الحقيقة؟
</h2>

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

<ol>
	<li>
		يُحمّل المتصفح ملف HTML.
	</li>
	<li>
		يحوّل الملف إلى <a href="https://academy.hsoub.com/programming/javascript/%D8%A7%D9%84%D8%A8%D9%86%D9%8A%D8%A9-%D8%A7%D9%84%D8%B4%D8%AC%D8%B1%D9%8A%D8%A9-%D9%84%D9%80-dom-r646/#:~:text=%D8%B4%D8%AC%D8%B1%D8%A9%20DOM%20%D9%88%D8%A7%D9%84%D8%B9%D9%82%D8%AF%20%D8%A7%D9%84%D9%85%D9%83%D9%88%D9%86%D8%A9%20%D9%84%D9%87%D8%A7" rel="">شجرة DOM</a> التي ستمثِّل الملف ضمن ذاكرة الحاسوب.
	</li>
	<li>
		يحضر المتصفح معظم الموارد المرتبطة بملف HTML كالصور ومقاطع الفيديو وملفات تنسيق CSS، بينما يتعامل المتصفح مع ملفات جافا سكربت بعد ذلك بقليل.
	</li>
	<li>
		يحلل المتصفح تنسيقات CSS المحضرة ويصنِّف القواعد المختلفة وفقًا لنوع المحدد ضمن رزم buckets مختلفة مثل محددات العناصر ومحددات الأصناف ومحددات المعرّفات وهكذا. وبناءً على المحددات، يقرر المتصفح أية قواعد سيطبقها على أية عقد في <a href="https://academy.hsoub.com/programming/javascript/%D8%A7%D9%84%D8%A8%D9%86%D9%8A%D8%A9-%D8%A7%D9%84%D8%B4%D8%AC%D8%B1%D9%8A%D8%A9-%D9%84%D9%80-dom-r646/" rel="">شجرة DOM</a> ويربطها بالعقد حسب المطلوب (تُدعى هذه المرحلة الوسطية بشجرة التصيير render tree).
	</li>
	<li>
		تُخطط شجرة التصيير وفقًا للهيكلية التي ستكون عليها بعد تطبيق قواعد التنسيق عليها.
	</li>
	<li>
		تُعرض الصفحة كما ستبدو عليه ضمن المتصفح (تُدعى هذه المرحلة "رسم الصفحة painting").
	</li>
</ol>

<p>
	يوضح المخطط التالي عرضًا بسيطًا للمراحل السابقة:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="128689" href="https://academy.hsoub.com/uploads/monthly_2023_06/01_page_process.png.810934e08be915efc7f76dbc4d61d1a4.png" rel=""><img alt="01_page_process.png" class="ipsImage ipsImage_thumbnailed" data-fileid="128689" data-unique="8khxrgf1z" src="https://academy.hsoub.com/uploads/monthly_2023_06/01_page_process.png.810934e08be915efc7f76dbc4d61d1a4.png"> </a>
</p>

<h2>
	فكرة عن شجرة DOM
</h2>

<p>
	وهي هيكلية تشبه الشجرة تمثل ملفات اللغات التوصيفية. إذ يُصبح كل عنصر وسمة ومحتوى نصي في لغات التوصيف عقدة في شجرة DOM. تُعرَّف العقد بعلاقتها مع غيرها من العقد فبعضها آباء لعقدٍ أبناء ولبعض العقد الأبناء عقد شقيقة. يساعدك فهم هذه الشجرة في تصميم وتنقيح وصيانة تنسيقات CSS لأنها المكان الذي تُدمج فيه تنسيقات CSS مع محتوى الصفحة. وعندما تبدأ العمل مع "<a href="https://academy.hsoub.com/programming/workflow/%D8%A3%D8%AF%D9%88%D8%A7%D8%AA-%D9%85%D8%B7%D9%88%D8%B1%D9%8A-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-%D8%A7%D9%84%D9%85%D8%AF%D9%85%D8%AC%D8%A9-%D9%81%D9%8A-%D8%A7%D9%84%D9%85%D8%AA%D8%B5%D9%81%D8%AD%D8%A7%D8%AA-r1439/" rel="">أدوات مطوري ويب DevTools</a>"، ستجد أنك تنتقل ضمن DOM عند اختيارك العناصر لتفحص قواعد التنسيق التي طُبقت عليها.
</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>
	التمثيل الحقيقي لشجرة DOM
</h2>

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

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_6692_8" style=""><span class="tag">&lt;p&gt;</span><span class="pln">
  Let's use:
  </span><span class="tag">&lt;span&gt;</span><span class="pln">Cascading</span><span class="tag">&lt;/span&gt;</span><span class="pln">
  </span><span class="tag">&lt;span&gt;</span><span class="pln">Style</span><span class="tag">&lt;/span&gt;</span><span class="pln">
  </span><span class="tag">&lt;span&gt;</span><span class="pln">Sheets</span><span class="tag">&lt;/span&gt;</span><span class="pln">
</span><span class="tag">&lt;/p&gt;</span></pre>

<p>
	تُعد العقدة التي تمثل العنصر <code>&lt;p&gt;</code> عقدة أب في شجرة DOM، بينما تُعد العقد الثلاث الممثلة لعناصر <code>&lt;span&gt;</code> أبناء لها وأشقاء بالنسبة لبعضها البعض وآباء بالنسبة إلى المحتوى النصي الذي تضمه.
</p>

<pre class="ipsCode">P
├─ "Let's use:"
├─ SPAN
|  └─ "Cascading"
├─ SPAN
|  └─ "Style"
└─ SPAN
    └─ "Sheets"
</pre>

<p>
	بهذا الشكل يترجم المتصفح شيفرة HTML السابق ثم يصير شجرة DOM ويعرضها بعد ذلك على شاشة المتصفح كالتالي:
</p>

<p style="text-align: center;">
	<img class="ipsImage ipsImage_thumbnailed" data-fileid="181945" data-ratio="19.93" data-unique="nqsat3q8y" width="286" alt="image.png" src="https://academy.hsoub.com/uploads/monthly_2026_03/image.png.fe3432174ffc082044a9d94a1a02ce1f.png">
</p>

<h2>
	تطبيق تنسيقات CSS على DOM
</h2>

<p>
	لنفترض أننا أضفنا بعض تنسيقات CSS إلى شيفرة HTML التالية:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_6692_10" style=""><span class="tag">&lt;p&gt;</span><span class="pln">
  Let's use:
  </span><span class="tag">&lt;span&gt;</span><span class="pln">Cascading</span><span class="tag">&lt;/span&gt;</span><span class="pln">
  </span><span class="tag">&lt;span&gt;</span><span class="pln">Style</span><span class="tag">&lt;/span&gt;</span><span class="pln">
  </span><span class="tag">&lt;span&gt;</span><span class="pln">Sheets</span><span class="tag">&lt;/span&gt;</span><span class="pln">
</span><span class="tag">&lt;/p&gt;</span></pre>

<p>
	وقواعد التنسيق التي طبقناها هي:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_6692_12" style=""><span class="pln">span </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">border</span><span class="pun">:</span><span class="pln"> </span><span class="lit">1px</span><span class="pln"> solid black</span><span class="pun">;</span><span class="pln">
  </span><span class="kwd">background-color</span><span class="pun">:</span><span class="pln"> lime</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	يحلل المتصفح شيفرة HTML وينشئ منها شجرة DOM ثم يحلل قواعد التنسيق السابقة. وطالما أنّ هناك قاعدة وحيدة تضم المحدد <a href="https://wiki.hsoub.com/HTML/span" rel="external"><code>span</code></a>، سيُصنّف المتصفح شيفرة CSS بسرعة ويطبق هذه القاعدة على كل عنصر <code>&lt;span&gt;</code> في ملف HTML ثم يرسم الصفحة على شاشة المتصفح وستبدو بالشكل التالي:
</p>

<p style="text-align: center;">
	<img class="ipsImage ipsImage_thumbnailed" data-fileid="181946" data-ratio="18.32" data-unique="6is0u5u9r" width="262" alt="image.png" src="https://academy.hsoub.com/uploads/monthly_2026_03/image.png.6cf21c026e5797a766086e55b07d0241.png">
</p>

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

<h2>
	تصرف المتصفح عندما يواجه قاعدة CSS غير مفهومة
</h2>

<p>
	لا تدعم كل المتصفحات جميع <a href="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/" rel="">ميزات CSS الجديدة</a> في الوقت ذاته، وقد لا يستخدم الجميع النسخ الأحدث من تلك المتصفحات. ونظرًا لكون CSS لغة تتطور باستمرار وبشكل أسرع مما تدعمه المتصفحات، فقد تتساءل ما الذي يحدث عندما يواجه المتصفح محددًا أو تصريحًا لا يمكن تمييزه!
</p>

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

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

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

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_6692_16" style=""><span class="tag">&lt;p&gt;</span><span class="pln"> I want this text to be large, bold and blue.</span><span class="tag">&lt;/p&gt;</span></pre>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_6692_14" style=""><span class="pln">p </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">font-weight</span><span class="pun">:</span><span class="pln"> bold</span><span class="pun">;</span><span class="pln">
  </span><span class="kwd">colour</span><span class="pun">:</span><span class="pln"> blue</span><span class="pun">;</span><span class="pln"> </span><span class="com">/* incorrect spelling of the color property */</span><span class="pln">
  </span><span class="kwd">font-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></pre>

<p style="text-align: center;">
	<img class="ipsImage ipsImage_thumbnailed" data-fileid="181947" data-ratio="10.29" data-unique="e0dyg4hnx" style="width: 447px; height: auto;" width="647" alt="image.png" src="https://academy.hsoub.com/uploads/monthly_2026_03/image.png.76284da6f6c353e272af828ad0d77885.png">
</p>

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

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_6692_18" style=""><span class="pun">.</span><span class="pln">box </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">width</span><span class="pun">:</span><span class="pln"> </span><span class="lit">500px</span><span class="pun">;</span><span class="pln">
  </span><span class="kwd">width</span><span class="pun">:</span><span class="pln"> calc</span><span class="pun">(</span><span class="lit">100%</span><span class="pln"> </span><span class="pun">-</span><span class="pln"> </span><span class="lit">50px</span><span class="pun">);</span><span class="pln">
</span><span class="pun">}</span></pre>

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

<p>
	ترجمة -وبتصرف- للمقال <a href="https://developer.mozilla.org/en-US/docs/Learn/CSS/First_steps/How_CSS_works" rel="external nofollow">How CSS works</a>.
</p>

<h2>
	اقرأ أيضًا
</h2>

<ul>
	<li>
		المقال السابق: <a href="https://academy.hsoub.com/programming/css/%D9%87%D9%8A%D9%83%D9%84%D9%8A%D8%A9-%D9%84%D8%BA%D8%A9-css-r2002/" rel="">هيكلية لغة CSS</a>
	</li>
	<li>
		<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>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D8%A7%D9%84%D8%AA%D9%86%D8%B3%D9%8A%D9%82%D8%A7%D8%AA-%D8%A7%D9%84%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A9-%D9%84%D9%84%D8%B9%D9%86%D8%A7%D8%B5%D8%B1-%D9%81%D9%8A-css-r1054/" rel="">التنسيقات الأساسية للعناصر في CSS</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/javascript/%D8%A7%D9%84%D8%AA%D8%B9%D8%B1%D9%81-%D8%B9%D9%84%D9%89-%D8%B4%D8%AC%D8%B1%D8%A9-dom-%D9%84%D8%AA%D8%B9%D8%AF%D9%8A%D9%84%D9%87%D8%A7-%D8%B9%D8%A8%D8%B1-%D8%AC%D8%A7%D9%81%D8%A7%D8%B3%D9%83%D8%B1%D8%A8%D8%AA-r1104/" rel="">التعرف على شجرة DOM لتعديلها عبر جافاسكربت</a>
	</li>
</ul>
]]></description><guid isPermaLink="false">2003</guid><pubDate>Sun, 25 Jun 2023 13:07:00 +0000</pubDate></item><item><title>&#x647;&#x64A;&#x643;&#x644;&#x64A;&#x629; &#x644;&#x63A;&#x629; CSS</title><link>https://academy.hsoub.com/programming/css/%D9%87%D9%8A%D9%83%D9%84%D9%8A%D8%A9-%D9%84%D8%BA%D8%A9-css-r2002/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2023_06/-CSS.png.155f2612efb0a75c169fe3d72411c6cb.png" /></p>
<p>
	بعد أن تعرفنا في المقال السابق على <a href="https://academy.hsoub.com/programming/css/%D8%A8%D8%AF%D8%A1-%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D9%84%D8%BA%D8%A9-css-r2001/" rel="">أساسيات لغة CSS</a> والغاية منها، سنتابع في هذا المقال شرح هيكلية CSS. ننصحك قبل المتابعة في القراءة أن تكون على دراية بالمواضيع التالية:
</p>

<ul>
	<li>
		أساسيات عمل الحاسوب
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/general/%D8%AA%D8%AB%D8%A8%D9%8A%D8%AA-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D9%8A%D8%A7%D8%AA-%D8%A7%D9%84%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A9-%D9%84%D9%84%D8%A7%D9%86%D8%B7%D9%84%D8%A7%D9%82-%D9%81%D9%8A-%D8%AA%D8%B7%D9%88%D9%8A%D8%B1-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-r1671/" rel="">تثبيت البرمجيات الأساسية للانطلاق في تطوير الويب</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/general/%D8%A7%D9%84%D8%AA%D8%B9%D8%A7%D9%85%D9%84-%D9%85%D8%B9-%D8%A7%D9%84%D9%85%D9%84%D9%81%D8%A7%D8%AA-%D9%81%D9%8A-%D8%B9%D9%85%D9%84%D9%8A%D8%A9-%D8%AA%D8%B7%D9%88%D9%8A%D8%B1-%D9%85%D9%88%D9%82%D8%B9-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-r1686/" rel="">أساسيات التعامل مع الملفات</a>
	</li>
	<li>
		فكرة عن <a href="https://academy.hsoub.com/programming/css/%D8%AA%D8%B9%D8%B1%D9%81-%D8%B9%D9%84%D9%89-css-r2000/" rel="">أساسيات لغة CSS</a>.
	</li>
</ul>

<h2>
	تطبيق تنسيقات CSS على HTML
</h2>

<p>
	لنختبر بداية الأساليب الثلاثة لتطبيق 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>

<h3>
	ملفات التنسيق الخارجية
</h3>

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

<p>
	تشير إلى ملف CSS خارجي ضمن ملف HTML باستخدام العنصر <a href="https://wiki.hsoub.com/HTML/link" rel="external"><code>&lt;link&gt;</code></a>:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_1329_8" style=""><span class="dec">&lt;!DOCTYPE html&gt;</span><span class="pln">
</span><span class="tag">&lt;html&gt;</span><span class="pln">
  </span><span class="tag">&lt;head&gt;</span><span class="pln">
    </span><span class="tag">&lt;meta</span><span class="pln"> </span><span class="atn">charset</span><span class="pun">=</span><span class="atv">"utf-8"</span><span class="tag">&gt;</span><span class="pln">
    </span><span class="tag">&lt;title&gt;</span><span class="pln">My CSS experiment</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">"styles.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">Hello World!</span><span class="tag">&lt;/h1&gt;</span><span class="pln">
    </span><span class="tag">&lt;p&gt;</span><span class="pln">This is my first CSS example</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>
	تبدو <a href="https://wiki.hsoub.com/CSS" rel="external">قواعد تنسيق CSS</a> شبيهة بالشيفرة التالية:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_1329_12" style=""><span class="pln">h1 </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">color</span><span class="pun">:</span><span class="pln"> blue</span><span class="pun">;</span><span class="pln">
  </span><span class="kwd">background-color</span><span class="pun">:</span><span class="pln"> yellow</span><span class="pun">;</span><span class="pln">
  </span><span class="kwd">border</span><span class="pun">:</span><span class="pln"> </span><span class="lit">1px</span><span class="pln"> solid black</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">
  </span><span class="kwd">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>
	ينبغي أن تدل السمة <code>href</code> للعنصر <code>&lt;link&gt;</code> على موقع ملف تنسيق CSS. لاحظ أنّ ملف التنسيق في المثال السابق موجود في نفس المجلد الذي يحتوي ملف HTML، وبالإمكان طبعًا وضعه في أي مكان آخر مناسب ثم تعديل المسار. إليك بعض الأمثلة:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_1329_14" style=""><span class="com">&lt;!--HTML موجود ضمن المجلد الذي يضم ملف style ضمن مجلد يُدعى  --&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">"styles/style.css"</span><span class="tag">&gt;</span><span class="pln">

</span><span class="com">&lt;!--ضمن المجلد الحالي style موجود ضمن مجلد يُدعى general ضمن مجلد يُدعى  --&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">"styles/general/style.css"</span><span class="tag">&gt;</span><span class="pln">

</span><span class="com">&lt;!--style ارتفع مستوى واحد إلى الأعلى ثم ضمن مجلد فرعي يُدعى --&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">"../styles/style.css"</span><span class="tag">&gt;</span></pre>

<h3>
	تنسيقات داخلية
</h3>

<p>
	تبقى التنسيقات الداخلية ضمن ملف HTML وتُوضع ضمن العنصر <a href="https://wiki.hsoub.com/HTML/style" rel="external"><code>&lt;style&gt;</code></a>. تبدو شيفرة HTML التي تضم تنسيقات داخلية شبيهةً بالتالي:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_1329_16" style=""><span class="dec">&lt;!DOCTYPE html&gt;</span><span class="pln">
</span><span class="tag">&lt;html&gt;</span><span class="pln">
  </span><span class="tag">&lt;head&gt;</span><span class="pln">
    </span><span class="tag">&lt;meta</span><span class="pln"> </span><span class="atn">charset</span><span class="pun">=</span><span class="atv">"utf-8"</span><span class="tag">&gt;</span><span class="pln">
    </span><span class="tag">&lt;title&gt;</span><span class="pln">My CSS experiment</span><span class="tag">&lt;/title&gt;</span><span class="pln">
    </span><span class="tag">&lt;style&gt;</span><span class="pln">
      h1 </span><span class="pun">{</span><span class="pln">
        </span><span class="kwd">color</span><span class="pun">:</span><span class="pln"> blue</span><span class="pun">;</span><span class="pln">
        </span><span class="kwd">background-color</span><span class="pun">:</span><span class="pln"> yellow</span><span class="pun">;</span><span class="pln">
        </span><span class="kwd">border</span><span class="pun">:</span><span class="pln"> </span><span class="lit">1px</span><span class="pln"> solid black</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">
        </span><span class="kwd">color</span><span class="pun">:</span><span class="pln"> red</span><span class="pun">;</span><span class="pln">
      </span><span class="pun">}</span><span class="pln">
    </span><span class="tag">&lt;/style&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">Hello World!</span><span class="tag">&lt;/h1&gt;</span><span class="pln">
    </span><span class="tag">&lt;p&gt;</span><span class="pln">This is my first CSS example</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>
	للتنسيقات الداخلية فوائدها في بعض الحالات، فقد تعمل ربما ضمن منظومة إدارة محتوى تمنعك من تعديل ملفات CSS الخارجية. مع ذلك، تبقى هذه الطريقة أقل فعالية وخاصة في المواقع التي تضم صفحات متعددة. فإن أردت تطبيق تنسيق CSS موحد في جميع الصفحات من خلال التنسيقات الداخلية، عليك كتابتها في كل صفحة، كما أنها ستنعكس سلبًا على فعالية عملية الصيانة أيضًا. إذًا مشكلة هذا الأسلوب الرئيسية هي أنّ أي تغيير بسيط في التنسيق لا بدّ وأن يُنفّذ في كل الصفحات التي تستخدمها.
</p>

<h3>
	التنسيقات السطرية
</h3>

<p>
	وهو تنسيق يؤثر على عنصر HTML بمفرده ويُصرّح عنه داخل السمة <code>style</code>. تبدو التنسيقات السطرية أو المحلية شبيهة بالتالي:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_1329_18" style=""><span class="dec">&lt;!DOCTYPE html&gt;</span><span class="pln">
</span><span class="tag">&lt;html&gt;</span><span class="pln">
  </span><span class="tag">&lt;head&gt;</span><span class="pln">
    </span><span class="tag">&lt;meta</span><span class="pln"> </span><span class="atn">charset</span><span class="pun">=</span><span class="atv">"utf-8"</span><span class="tag">&gt;</span><span class="pln">
    </span><span class="tag">&lt;title&gt;</span><span class="pln">My CSS experiment</span><span class="tag">&lt;/title&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</span><span class="pln"> </span><span class="atn">style</span><span class="pun">=</span><span class="atv">"</span><span class="kwd">color</span><span class="pun">:</span><span class="pln"> blue</span><span class="pun">;</span><span class="kwd">background-color</span><span class="pun">:</span><span class="pln"> yellow</span><span class="pun">;</span><span class="kwd">border</span><span class="pun">:</span><span class="pln"> </span><span class="lit">1px</span><span class="pln"> solid black</span><span class="pun">;</span><span class="atv">"</span><span class="tag">&gt;</span><span class="pln">Hello World!</span><span class="tag">&lt;/h1&gt;</span><span class="pln">
    </span><span class="tag">&lt;p</span><span class="pln"> </span><span class="atn">style</span><span class="pun">=</span><span class="atv">"</span><span class="kwd">color</span><span class="pun">:</span><span class="pln">red</span><span class="pun">;</span><span class="atv">"</span><span class="tag">&gt;</span><span class="pln">This is my first CSS example</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>
	تجنّب استخدام هذه الطريقة ما أمكن، فهي النقيض تمامًا لمفهوم أفضل الممارسات. فهي أولًا أقل الطرق فعالية وخاصة عند صيانة تنسيقات CSS. فقد يُضطرك تعديل واحد في التنسيق إلى تطبيقه من جديد عدة مرات في نفس الصفحة. ستمزج ثانيًا بهذا الأسلوب شيفرة CSS مع شيفرة HTML ومحتوى الصفحة مما يزيد من صعوبة قراءة وفهم الشيفرة، فالفصل بين الشيفرة والمحتوى أمر أساسي في تسهيل الصيانة على مشرفي الصفحات.
</p>

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

<h2>
	تطبيق: تجربة تنسيقات CSS
</h2>

<p>
	أنشئ مجلدًا جديدًا على حاسوبك وسمِّه ما شئت، ثم انسخ شيفرتي HTML و CSS التاليتين واجعلهما ضمن ملفين جديدين داخل المجلد:
</p>

<p>
	<strong>الملف index.html</strong>:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_1329_20" style=""><span class="dec">&lt;!DOCTYPE html&gt;</span><span class="pln">
</span><span class="tag">&lt;html</span><span class="pln"> </span><span class="atn">lang</span><span class="pun">=</span><span class="atv">"en"</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;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">My CSS experiments</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">"styles.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;p&gt;</span><span class="pln">Create your test HTML here</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>
	<strong>الملف styles.css</strong>:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_1329_22" style=""><span class="com">/* Create your test CSS here */</span><span class="pln">

p </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">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>
	عندما تقرر ما <a href="https://academy.hsoub.com/programming/css/%D8%AA%D8%B9%D8%B1%D9%91%D9%81-%D8%B9%D9%84%D9%89-%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A7%D8%AA-css-r70/" rel="">تنسيقات CSS</a> التي تريد اختبارها، استبدل محتوى العنصر <a href="https://wiki.hsoub.com/HTML/body" rel="external"><code>&lt;body&gt;</code></a> في ملف HTML ببعض العناصر الجديدة لكي تطبق التنسيق عليها، ثم أضف قواعد التنسيق اللازمة ضمن ملف CSS.
</p>

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

<p style="&#13;
    text-align: center;&#13;
">
	<iframe height="600" loading="lazy" src="https://mdn.github.io/css-examples/learn/getting-started/experiment-sandbox.html" style="box-sizing: border-box;max-width: 100%;width: 650px;border: 1px solid var(--border-primary);background: rgb(255, 255, 255);border-radius: var(--elem-radius);padding: 1rem;" width="100%"></iframe>
</p>

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

<p>
	تستهدف المحددات عناصر HTML لتطبيق تنسيقات محددة على المحتوى، وقد رأينا في مقال <a href="https://academy.hsoub.com/programming/css/%D8%A8%D8%AF%D8%A1-%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D9%84%D8%BA%D8%A9-css-r2001/" rel="">أساسيات استخدام CSS</a> مجموعة متنوعة منها. إن لم تُطبق التنسيقات المطلوبة على المحتوى المحدد، فهذا يعني أنّ المحدد الذي اخترته لا يطابق ما تريده.
</p>

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

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_1329_24" style=""><span class="pln">h1
</span><span class="kwd">a</span><span class="pun">:</span><span class="pln">link
</span><span class="pun">.</span><span class="pln">manythings
</span><span class="pun">#</span><span class="pln">onething
</span><span class="pun">*</span><span class="pln">
</span><span class="pun">.</span><span class="pln">box p
</span><span class="pun">.</span><span class="pln">box </span><span class="kwd">p</span><span class="pun">:</span><span class="pln">first-child
h1</span><span class="pun">,</span><span class="pln"> h2</span><span class="pun">,</span><span class="pln"> </span><span class="pun">.</span><span class="pln">intro</span></pre>

<p>
	حاول أن تُنشئ بعض القواعد مستخدمًا المحددات السابقة. أضف أولًا بعض عناصر HTML التي ترغب في تنسيقها ثم استخدام المحددات السابقة في تطبيق التنسيقات. يمكنك دومًا العودة إلى <a href="https://wiki.hsoub.com/CSS#.D8.A7.D9.84.D9.85.D9.8F.D8.AD.D8.AF.D9.90.D9.91.D8.AF.D8.A7.D8.AA" rel="external">موسوعة حسوب</a> إن وجدت أنّ بعض المحددات السابقة غير مألوفة.
</p>

<h3>
	عمق التحديد specificity
</h3>

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

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_1329_26" style=""><span class="pun">.</span><span class="pln">special </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">color</span><span class="pun">:</span><span class="pln"> red</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

p </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">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>
	لنفرض الآن وجود فقرة نصية في ملف HTML تمتلك الصنف <code>special</code>، وكلتا القاعدتين تستهدفان الفقرة النصية! فمن منهما ستُطبق؟
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_1329_28" style=""><span class="tag">&lt;p</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"special"</span><span class="tag">&gt;</span><span class="pln">What color am I?</span><span class="tag">&lt;/p&gt;</span></pre>

<p>
	للغة CSS قواعد لمعرفة أي المحددات هو الأقوى في حالة معينة أو خلاف. تُدعى هذه القواعد بالتسلسل cascade أو <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="">عمق التحديد specificity</a>. ستكون نتيجة النزاع في الشيفرة التالية مثلًا بين محددي العنصر <code>p</code> هي نص باللون الأزرق لأن القاعدة التي تضبط لون النص على الأزرق تأتي في التسلسل بعد القاعدة التي تضبطه على اللون الأحمر، فآخر تنسيق يَستبدل دائمًا التنسيق السابق في حالات التضارب وهذه هي قاعدة التسلسل.
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_1329_30" style=""><span class="pln">p </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">color</span><span class="pun">:</span><span class="pln"> red</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

p </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">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>
	لكن بالعودة إلى الشيفرة التي تسبقها وتعرض نزاعًا بين محدد صنف ومحدد عنصر ستكون النتيجة نصًا باللون الأحمر، إذ سينتصر محدد الصنف على الرغم من أنّ محدد العنصر يأتي بعده في التسلسل! إنّ السبب في ذلك أنّ محدد الصنف يُقيَّم بأنه أكثر تخصيصًا من محدد العنصر وبالتالي سيحل محله في حالات النزاع أو التضارب.
</p>

<p>
	حاول أن تجرب الأمر بنفسك، أضف بعض عناصر HTML ثم أضف محددي عناصر من الشكل <code>{...} p</code> إلى قواعد التنسيق وراقب النتيجة، ثم حول المحدد الأول إلى محدد صنف <code>special.</code> وراقب النتيجة.
</p>

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

<h2>
	الخاصيات وقيمها
</h2>

<p>
	تعتمد اللغة في أساسها على مكوّنين:
</p>

<ul>
	<li>
		<strong>الخاصية property</strong>: وهي معرّف يمكن للإنسان فهمه ويحدد الميزة التي تريد تنسيقها أو تعديلها مثل <code>font-size</code> و<code>width</code> و<code>background-color</code>.
	</li>
	<li>
		<strong>القيمة value</strong>: تأخذ كل خاصية قيمة تشير إلى كيفية تنسيق الخاصية.
	</li>
</ul>

<p>
	يشير المثال في الشكل التالي إلى خاصيات تأخذ قيمة واحدة مثل الخاصية <code>color</code> التي تأخذ القيمة <code>blue</code>
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="128687" href="https://academy.hsoub.com/uploads/monthly_2023_06/01_property_value.png.fd2c64ece8fc5d1bac6dfc31bc2f6266.png" rel=""><img alt="01_property_value.png" class="ipsImage ipsImage_thumbnailed" data-fileid="128687" data-unique="sfodt3ruf" src="https://academy.hsoub.com/uploads/monthly_2023_06/01_property_value.png.fd2c64ece8fc5d1bac6dfc31bc2f6266.png"> </a>
</p>

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

<p>
	يشير المثال التالي إلى كتلة تصريحات CSS.
</p>

<p style="text-align: center;">
	<img alt="02_decalrations_block.png" class="ipsImage ipsImage_thumbnailed" data-fileid="128686" data-ratio="45.82" data-unique="zkl162sul" width="467" src="https://academy.hsoub.com/uploads/monthly_2023_06/02_decalrations_block.png.fa3a91c38364260235e984d658fcf706.png">
</p>

<p>
	ترتبط كتل التصريحات مع المحددات لتشكل ما يُدعى مجموعة قواعد. يتضمن المثال في الشكل التالي قاعدتين: الأولى تستهدف العنصر <a href="https://wiki.hsoub.com/HTML/h1-h6" rel="external"><code>h1</code></a> والثانية تستهدف العنصر <a href="https://wiki.hsoub.com/HTML/p" rel="external"><code>p</code></a>.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="128685" href="https://academy.hsoub.com/uploads/monthly_2023_06/03_css_ruleset.png.438cd6af996f712ed0d57718e02add1a.png" rel=""><img alt="03_css_ruleset.png" class="ipsImage ipsImage_thumbnailed" data-fileid="128685" data-unique="hqtrxy2da" src="https://academy.hsoub.com/uploads/monthly_2023_06/03_css_ruleset.png.438cd6af996f712ed0d57718e02add1a.png"> </a>
</p>

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

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

<ul>
	<li>
		<strong><a href="https://wiki.hsoub.com/CSS/font-size" rel="external"><code>font-size</code></a></strong>
	</li>
	<li>
		<strong><a href="https://wiki.hsoub.com/CSS/width" rel="external"><code>width</code></a></strong>
	</li>
	<li>
		<strong><a href="https://wiki.hsoub.com/CSS/background-color" rel="external"><code>background-color</code></a></strong>
	</li>
	<li>
		<strong><a href="https://wiki.hsoub.com/CSS/color" rel="external"><code>color</code></a></strong>
	</li>
	<li>
		<strong><a href="https://wiki.hsoub.com/CSS/border" rel="external"><code>border</code></a></strong>
	</li>
</ul>

<p>
	<strong>تنبيه</strong>: إن لم تكن الخاصية معروفة أو لم تكن القيمة مناسبة لخاصية سيتعامل المتصفح مع التصريح على أنه غير صالح، وسيتجاهله محّرك CSS.
</p>

<p>
	<strong>تنبيه</strong>: اتُفق في CSS وغيرها من تقانات ويب أن تكون التهجئة الإنكليزية الأمريكية هي المعيارية في كتابة التصاريح. فكتابة الخاصية "colour" يجب أن تكون على الشكل <code>color</code>، فلن تعمل إن كُتبت <code>colour</code>.
</p>

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

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

<h4>
	الدالة ()calac
</h4>

<p>
	يمكن لهذه الدالة إنجاز بعض الحسابات الرياضية على CSS:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_1329_32" style=""><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"outer"</span><span class="tag">&gt;&lt;div</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"box"</span><span class="tag">&gt;</span><span class="pln">The inner box is 90% - 30px.</span><span class="tag">&lt;/div&gt;&lt;/div&gt;</span></pre>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_1329_34" style=""><span class="pun">.</span><span class="pln">outer </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">border</span><span class="pun">:</span><span class="pln"> </span><span class="lit">5px</span><span class="pln"> solid black</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">
  </span><span class="kwd">padding</span><span class="pun">:</span><span class="pln"> </span><span class="lit">10px</span><span class="pun">;</span><span class="pln">
  </span><span class="kwd">width</span><span class="pun">:</span><span class="pln"> calc</span><span class="pun">(</span><span class="lit">90%</span><span class="pln"> </span><span class="pun">-</span><span class="pln"> </span><span class="lit">30px</span><span class="pun">);</span><span class="pln">
  </span><span class="kwd">background-color</span><span class="pun">:</span><span class="pln"> rebeccapurple</span><span class="pun">;</span><span class="pln">
  </span><span class="kwd">color</span><span class="pun">:</span><span class="pln"> white</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	سيعرض المتصفح النتيجة التالية:
</p>

<p style="text-align: center;">
	<img class="ipsImage ipsImage_thumbnailed" data-fileid="181944" data-ratio="6.83" data-unique="tvwallbg4" width="835" alt="image.png" src="https://academy.hsoub.com/uploads/monthly_2026_03/image.png.7e07bb2f145857a05fa2048fe284da76.png">
</p>

<p>
	تتكون الدالة من اسم الدالة وقوسين يضمان قيم الدالة. لاحظ كيف تعرف الدالة <code>()calc</code> في مثالنا السابق عرض الصندوق ليكون 90% من عرض الكتلة التي تضمه ناقصًا 30 بكسل. ولا يمكن بالطبع حساب هذه القيمة مسبقًا ثم وضع النتيجة كقيمة ثابتة مباشرة.
</p>

<h4>
	دوال التحويل
</h4>

<p>
	من أمثلة هذه الدوال الدالة <code>rotate</code>:
</p>

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

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_1329_36" style=""><span class="pun">.</span><span class="pln">box </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">margin</span><span class="pun">:</span><span class="pln"> </span><span class="lit">30px</span><span class="pun">;</span><span class="pln">
  </span><span class="kwd">width</span><span class="pun">:</span><span class="pln"> </span><span class="lit">100px</span><span class="pun">;</span><span class="pln">
  </span><span class="kwd">height</span><span class="pun">:</span><span class="pln"> </span><span class="lit">100px</span><span class="pun">;</span><span class="pln">
  </span><span class="kwd">background-color</span><span class="pun">:</span><span class="pln"> rebeccapurple</span><span class="pun">;</span><span class="pln">
  </span><span class="kwd">transform</span><span class="pun">:</span><span class="pln"> rotate</span><span class="pun">(</span><span class="lit">0.8turn</span><span class="pun">);</span><span class="pln">
</span><span class="pun">}</span></pre>

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

<p style="text-align: center;">
	<img class="ipsImage ipsImage_thumbnailed" data-fileid="181943" data-ratio="92.31" data-unique="gej8p9vrk" width="182" alt="image.png" src="https://academy.hsoub.com/uploads/monthly_2026_03/image.png.387e5e72a9fec8f23c64ce4be9e16517.png">
</p>

<p>
	<strong>تطبيق</strong>: ابحث عن قيم الخاصيات التالية ثم اكتب قواعد CSS باستخدام هذه الخواص وطبقها على عناصر HTML مختلفة:
</p>

<ul>
	<li>
		<strong><a href="https://wiki.hsoub.com/CSS/transform" rel="external"><code>transform</code></a></strong>
	</li>
	<li>
		<strong><a href="https://wiki.hsoub.com/CSS/background-image" rel="external"><code>background-image</code></a></strong>، وخاصة القيم المتدرجة gradient.
	</li>
	<li>
		<strong><a href="https://wiki.hsoub.com/CSS/color" rel="external"><code>color</code></a></strong>، وخاصة قيم rgb وrgba وhsl وhsla.
	</li>
</ul>

<h2>
	القواعد المسبوقة بالمحرف @
</h2>

<p>
	تزود هذه القواعد المتصفح بإرشادات حول ما ينبغي على CSS فعله وكيف ستتصرف. بعض "<a href="https://academy.hsoub.com/programming/css/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D9%81%D9%87%D9%85-%D9%88%D8%A5%D9%86%D8%B4%D8%A7%D8%A1-%D9%82%D9%88%D8%A7%D8%B9%D8%AF-css-r1881/" rel="">قواعد@</a>" بسيطة وتتكون من تعليمة وقيمة مثل <code>import@</code> التي تدرج صفحة CSS ضمن أخرى:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_1329_40" style=""><span class="kwd">@import</span><span class="pln"> </span><span class="str">'styles2.css'</span><span class="pun">;</span></pre>

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

<p>
	تُحدد CSS في المثال التالي لون خلفية زهري للعنصر <code>&lt;body&gt;</code> لكن استعلام الوسائط المتعددة سيجعل اللون أزرق إن كانت نافذة العرض أوسع من 30em:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_1329_42" style=""><span class="pln">body </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">background-color</span><span class="pun">:</span><span class="pln"> pink</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

</span><span class="kwd">@media</span><span class="pln"> </span><span class="pun">(</span><span class="kwd">min-width</span><span class="pun">:</span><span class="pln"> </span><span class="lit">30em</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  body </span><span class="pun">{</span><span class="pln">
    </span><span class="kwd">background-color</span><span class="pun">:</span><span class="pln"> blue</span><span class="pun">;</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	<strong>تطبيق</strong>: حاول إضافة استعلام وسائط لتغيير التنسيق اعتمادًا على اتساع نافذة العرض ثم غيّر اتساع نافذة المتصفح وراقب ما يحدث!
</p>

<h2>
	الخاصيات المختصرة
</h2>

<p>
	تُدعى بعض الخاصيات مثل <code>font</code> و<code>background</code> و<code>padding</code> و<code>border</code> و<code>margin</code> بالخاصيات المختصرة shorthand properties لأنها تضبط عدة قيم في سطر واحد. إليك مثالًا عن قيم في سطر واحد:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_1329_44" style=""><span class="com">/*تُطبق القيم وفق التسلسل: أعلى، يمين، أسفل، يسار padding في الاختصار 
وذلك إن كانت ذات أربع قيم بينما إن كانت ذات قيمتين
فستكون القيمة الأولى أعلى/أسفا والثانية يسار/يمين
*/</span><span class="pln">
</span><span class="kwd">padding</span><span class="pun">:</span><span class="pln"> </span><span class="lit">10px</span><span class="pln"> </span><span class="lit">15px</span><span class="pln"> </span><span class="lit">15px</span><span class="pln"> </span><span class="lit">5px</span><span class="pun">;</span></pre>

<p>
	الشيفرة السابقة مماثلة للتصريحات التالية:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_1329_46" style=""><span class="kwd">padding-top</span><span class="pun">:</span><span class="pln"> </span><span class="lit">10px</span><span class="pun">;</span><span class="pln">
</span><span class="kwd">padding-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="kwd">padding-bottom</span><span class="pun">:</span><span class="pln"> </span><span class="lit">15px</span><span class="pun">;</span><span class="pln">
</span><span class="kwd">padding-left</span><span class="pun">:</span><span class="pln"> </span><span class="lit">5px</span><span class="pun">;</span></pre>

<p>
	وهذا سطر واحد يختصر الخاصية background:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_1329_50" style=""><span class="kwd">background</span><span class="pun">:</span><span class="pln"> red </span><span class="kwd">url</span><span class="pun">(</span><span class="str">bg-graphic.png</span><span class="pun">)</span><span class="pln"> </span><span class="lit">10px</span><span class="pln"> </span><span class="lit">10px</span><span class="pln"> repeat-x fixed</span><span class="pun">;</span></pre>

<p>
	وهو مماثل تمامًا للتصريحات التالية:
</p>

<pre class="ipsCode prettyprint lang-c prettyprinted" id="ips_uid_1329_52" style=""><span class="pln">background</span><span class="pun">-</span><span class="pln">color</span><span class="pun">:</span><span class="pln"> red</span><span class="pun">;</span><span class="pln">
background</span><span class="pun">-</span><span class="pln">image</span><span class="pun">:</span><span class="pln"> url</span><span class="pun">(</span><span class="pln">bg</span><span class="pun">-</span><span class="pln">graphic</span><span class="pun">.</span><span class="pln">png</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">10px</span><span class="pln"> </span><span class="lit">10px</span><span class="pun">;</span><span class="pln">
background</span><span class="pun">-</span><span class="pln">repeat</span><span class="pun">:</span><span class="pln"> repeat</span><span class="pun">-</span><span class="pln">x</span><span class="pun">;</span><span class="pln">
background</span><span class="pun">-</span><span class="pln">attachment</span><span class="pun">:</span><span class="pln"> fixed</span><span class="pun">;</span></pre>

<p>
	يمكن العودة دائمًا إلى <a href="https://wiki.hsoub.com/CSS" rel="external">موسوعة حسوب</a> أو <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/Reference" rel="external nofollow">شبكة مطوري موزيللا</a> لمعلومات أوفى عن الخاصيات المختصرة.
</p>

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

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

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

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

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

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_1329_54" style=""><span class="com">/* Handle basic element styling */</span><span class="pln">
</span><span class="com">/* -------------------------------------------------------------------------------------------- */</span><span class="pln">
body </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">font</span><span class="pun">:</span><span class="pln"> </span><span class="lit">1em</span><span class="pun">/</span><span class="lit">150%</span><span class="pln"> Helvetica</span><span class="pun">,</span><span class="pln"> Arial</span><span class="pun">,</span><span class="pln"> sans-serif</span><span class="pun">;</span><span class="pln">
  </span><span class="kwd">padding</span><span class="pun">:</span><span class="pln"> </span><span class="lit">1em</span><span class="pun">;</span><span class="pln">
  </span><span class="kwd">margin</span><span class="pun">:</span><span class="pln"> </span><span class="lit">0</span><span class="pln"> auto</span><span class="pun">;</span><span class="pln">
  </span><span class="kwd">max-width</span><span class="pun">:</span><span class="pln"> </span><span class="lit">33em</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

</span><span class="kwd">@media</span><span class="pln"> </span><span class="pun">(</span><span class="kwd">min-width</span><span class="pun">:</span><span class="pln"> </span><span class="lit">70em</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  </span><span class="com">/* Increase the global font size on larger screens or windows
     for better readability */</span><span class="pln">
  body </span><span class="pun">{</span><span class="pln">
    </span><span class="kwd">font-size</span><span class="pun">:</span><span class="pln"> </span><span class="lit">130%</span><span class="pun">;</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

h1 </span><span class="pun">{</span><span class="kwd">font-size</span><span class="pun">:</span><span class="pln"> </span><span class="lit">1.5em</span><span class="pun">;}</span><span class="pln">

</span><span class="com">/* Handle specific elements nested in the DOM  */</span><span class="pln">
</span><span class="com">/* -------------------------------------------------------------------------------------------- */</span><span class="pln">
div p</span><span class="pun">,</span><span class="pln"> </span><span class="pun">#</span><span class="kwd">id</span><span class="pun">:</span><span class="pln">first-line </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">background-color</span><span class="pun">:</span><span class="pln"> red</span><span class="pun">;</span><span class="pln">
  </span><span class="kwd">border-radius</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><span class="pln">

div p </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">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="kwd">padding</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><span class="pln">

div p </span><span class="pun">+</span><span class="pln"> p </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">padding-top</span><span class="pun">:</span><span class="pln"> </span><span class="lit">0</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></pre>

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

<pre class="ipsCode prettyprint lang-c prettyprinted" id="ips_uid_1329_56" style=""><span class="com">/*.special {
  color: red;
}*/</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></pre>

<h2>
	الفراغات
</h2>

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

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

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_1329_58" style=""><span class="pln">body </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">font</span><span class="pun">:</span><span class="pln"> </span><span class="lit">1em</span><span class="pun">/</span><span class="lit">150%</span><span class="pln"> Helvetica</span><span class="pun">,</span><span class="pln"> Arial</span><span class="pun">,</span><span class="pln"> sans-serif</span><span class="pun">;</span><span class="pln">
  </span><span class="kwd">padding</span><span class="pun">:</span><span class="pln"> </span><span class="lit">1em</span><span class="pun">;</span><span class="pln">
  </span><span class="kwd">margin</span><span class="pun">:</span><span class="pln"> </span><span class="lit">0</span><span class="pln"> auto</span><span class="pun">;</span><span class="pln">
  </span><span class="kwd">max-width</span><span class="pun">:</span><span class="pln"> </span><span class="lit">33em</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

</span><span class="kwd">@media</span><span class="pln"> </span><span class="pun">(</span><span class="kwd">min-width</span><span class="pun">:</span><span class="pln"> </span><span class="lit">70em</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">
    </span><span class="kwd">font-size</span><span class="pun">:</span><span class="pln"> </span><span class="lit">130%</span><span class="pun">;</span><span class="pln">
  </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">
  </span><span class="kwd">font-size</span><span class="pun">:</span><span class="pln"> </span><span class="lit">1.5em</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

div p</span><span class="pun">,</span><span class="pln">
</span><span class="pun">#</span><span class="kwd">id</span><span class="pun">:</span><span class="pln">first-line </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">background-color</span><span class="pun">:</span><span class="pln"> red</span><span class="pun">;</span><span class="pln">
  </span><span class="kwd">border-radius</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><span class="pln">

div p </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">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="kwd">padding</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><span class="pln">

div p </span><span class="pun">+</span><span class="pln"> p </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">padding-top</span><span class="pun">:</span><span class="pln"> </span><span class="lit">0</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></pre>

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

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_1329_60" style=""><span class="pln">body </span><span class="pun">{</span><span class="kwd">font</span><span class="pun">:</span><span class="pln"> </span><span class="lit">1em</span><span class="pun">/</span><span class="lit">150%</span><span class="pln"> Helvetica</span><span class="pun">,</span><span class="pln"> Arial</span><span class="pun">,</span><span class="pln"> sans-serif</span><span class="pun">;</span><span class="pln"> </span><span class="kwd">padding</span><span class="pun">:</span><span class="pln"> </span><span class="lit">1em</span><span class="pun">;</span><span class="pln"> </span><span class="kwd">margin</span><span class="pun">:</span><span class="pln"> </span><span class="lit">0</span><span class="pln"> auto</span><span class="pun">;</span><span class="pln"> </span><span class="kwd">max-width</span><span class="pun">:</span><span class="pln"> </span><span class="lit">33em</span><span class="pun">;}</span><span class="pln">
</span><span class="kwd">@media</span><span class="pln"> </span><span class="pun">(</span><span class="kwd">min-width</span><span class="pun">:</span><span class="pln"> </span><span class="lit">70em</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln"> body </span><span class="pun">{</span><span class="kwd">font-size</span><span class="pun">:</span><span class="pln"> </span><span class="lit">130%</span><span class="pun">;}</span><span class="pln"> </span><span class="pun">}</span><span class="pln">

h1 </span><span class="pun">{</span><span class="kwd">font-size</span><span class="pun">:</span><span class="pln"> </span><span class="lit">1.5em</span><span class="pun">;}</span><span class="pln">

div p</span><span class="pun">,</span><span class="pln"> </span><span class="pun">#</span><span class="kwd">id</span><span class="pun">:</span><span class="pln">first-line </span><span class="pun">{</span><span class="kwd">background-color</span><span class="pun">:</span><span class="pln"> red</span><span class="pun">;</span><span class="pln"> </span><span class="kwd">border-radius</span><span class="pun">:</span><span class="pln"> </span><span class="lit">3px</span><span class="pun">;}</span><span class="pln">
div p </span><span class="pun">{</span><span class="kwd">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="kwd">padding</span><span class="pun">:</span><span class="pln"> </span><span class="lit">1em</span><span class="pun">;}</span><span class="pln">
div p </span><span class="pun">+</span><span class="pln"> p </span><span class="pun">{</span><span class="kwd">padding-top</span><span class="pun">:</span><span class="pln"> </span><span class="lit">0</span><span class="pun">;}</span></pre>

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

<p>
	<strong>تنبيه</strong>: تُستخدم المسافات الفارغة للفصل بين القيم في تصريحات CSS، لكن يمُنع استخدامها ضمن أسماء الخاصيات.
</p>

<p>
	التصريح التالي مثلًا صحيح:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_1329_62" style=""><span class="kwd">margin</span><span class="pun">:</span><span class="pln"> </span><span class="lit">0</span><span class="pln"> auto</span><span class="pun">;</span><span class="pln">
</span><span class="kwd">padding-left</span><span class="pun">:</span><span class="pln"> </span><span class="lit">10px</span><span class="pun">;</span></pre>

<p>
	لكن هذا التصريح خاطئ:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_1329_64" style=""><span class="kwd">margin</span><span class="pun">:</span><span class="pln"> </span><span class="lit">0auto</span><span class="pun">;</span><span class="pln">
padding- </span><span class="kwd">left</span><span class="pun">:</span><span class="pln"> </span><span class="lit">10px</span><span class="pun">;</span></pre>

<p>
	هل عرفت أين الخطأ؟ بداية لا تُعد القيمة <code>0auto</code> صحيحة للخاصية <code>margin</code>، إذ ينبغي أن تكون هذه القيمة قيمتان <code>0</code> و<code>auto</code> يفصل بينهما مساحة فارغة. ولن يُميّز المتصفح ثانيًا الخاصية <code>padding- left</code> لأنّ الصحيحة هي دون وجود فراغ (<code>padding-left</code>).
</p>

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

<p>
	<strong>تطبيق</strong>: جرب أن تضيف فراغات أو تزيلها في شيفرة CSS اختبارية وراقب ما يحدث!
</p>

<p>
	ترجمة -وبتصرف- للمقال <a href="https://developer.mozilla.org/en-US/docs/Learn/CSS/First_steps/How_CSS_is_structured" rel="external nofollow">How CSS is structured</a>.
</p>

<h2>
	اقرأ أيضًا
</h2>

<ul>
	<li>
		المقال السابق: <a href="https://academy.hsoub.com/programming/css/%D8%A8%D8%AF%D8%A1-%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D9%84%D8%BA%D8%A9-css-r2001/" 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>
		<a href="https://academy.hsoub.com/programming/css/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%AA%D8%B9%D8%AF%D9%8A%D9%84-%D8%AD%D8%AC%D9%85-%D8%B9%D9%86%D8%B5%D8%B1-html-%D9%88%D8%A7%D9%84%D9%85%D8%B3%D8%A7%D8%AD%D8%A9-%D8%A7%D9%84%D9%85%D8%AD%D9%8A%D8%B7%D8%A9-%D8%A8%D9%87-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-css-r1911/" rel="">كيفية تعديل حجم عنصر HTML والمساحة المحيطة به باستخدام CSS</a>
	</li>
</ul>
]]></description><guid isPermaLink="false">2002</guid><pubDate>Mon, 19 Jun 2023 13:02:00 +0000</pubDate></item></channel></rss>
