<?xml version="1.0"?>
<rss version="2.0"><channel><title>&#x627;&#x644;&#x628;&#x631;&#x645;&#x62C;&#x629;: HTML</title><link>https://academy.hsoub.com/programming/html/?d=2</link><description>&#x627;&#x644;&#x628;&#x631;&#x645;&#x62C;&#x629;: HTML</description><language>ar</language><item><title>&#x62A;&#x643;&#x64A;&#x64A;&#x641; &#x643;&#x648;&#x62F; HTML &#x645;&#x639; &#x645;&#x628;&#x627;&#x62F;&#x626; &#x633;&#x647;&#x648;&#x644;&#x629; &#x627;&#x644;&#x648;&#x635;&#x648;&#x644;</title><link>https://academy.hsoub.com/programming/html/%D8%AA%D9%83%D9%8A%D9%8A%D9%81-%D9%83%D9%88%D8%AF-html-%D9%85%D8%B9-%D9%85%D8%A8%D8%A7%D8%AF%D8%A6-%D8%B3%D9%87%D9%88%D9%84%D8%A9-%D8%A7%D9%84%D9%88%D8%B5%D9%88%D9%84-r2582/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2025_05/HTML_.png.8b2fb89f17961e2db9bdcda700fbe097.png" /></p>
<p>
	مع تقدمنا في تعلم لغة HTML من خلال قراءة مصادر متنوعة وتطبيق مختلف الأمثلة وبناء مشاريعنا الخاصة، سنرى باستمرار سمة مشتركة، وهي استخدام المعنى الدلالي Semantic أو الدلالة التي تحملها عناصر HTML، والتي تُدعى أحيانًا POSH وهي اختصار لعبارة الدلالة الصرفة القديمة <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> أو بالإنجليزية Plain Old Semantic HTML. ويعني ذلك استخدام عناصر HTML للغايات التي صممت لأجلها قدر الإمكان.
</p>

<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/" rel="">CSS</a> و<a href="https://academy.hsoub.com/programming/javascript/%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-%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-%D9%85%D9%86%D8%B8%D9%88%D8%B1-%D8%B9%D8%A7%D9%85-r2266/" rel="">جافا سكريبت</a> نستطيع تغيير سلوك <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> بالطريقة التي نشاء. بحيث يمكننا مثلًا استخدام الشيفرة التالية لتشغيل فيديو ضمن موقعنا وتتولى CSS وJavaScript باقي التعديلات:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_2355_6" style=""><span class="tag">&lt;div&gt;</span><span class="pln">Play video</span><span class="tag">&lt;/div&gt;</span></pre>

<p>
	لكن سنرى لاحقًا وبتفاصيل أوفى أنه من المنطقي استخدام العنصر المناسب بمكانه المناسب لتنفيذ الأمر، وهو الزر الحقيقي <code><a href="https://wiki.hsoub.com/HTML/button" rel="external">&lt;button&gt;</a></code>، على النحو الآتي:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_2355_8" style=""><span class="tag">&lt;button&gt;</span><span class="pln">Play video</span><span class="tag">&lt;/button&gt;</span></pre>

<p>
	وللتوضيح، لا تقتصر فائدة العناصر <code>&lt;button&gt;</code> على تنسيقها الملائم الذي يُطبق افتراضيًا، لكنها تدعم سهولة الوصول عبر لوحة المفاتيح؛ إذ يمكن للمستخدم التنقل بين الأزرار باستخدام المفتاح Tab وتفعيل الزر المختار من خلال المفتاح Space أو Return أو Enter.
</p>

<p>
	الجيد في الأمر أن كتابة شيفرة HTML دلالية لا يستغرق وقتًا وجهدًا أكبر من كتابة الشيفرة غير الدلالية التي تُعَد ممارسةً سيئةً لسهولة الوصول؛ كما أن الشيفرة الدلالية تقدم ميزات تتعدى سهولة الوصول:
</p>

<ol>
	<li>
		<strong>أسهل تطويرًا</strong>: فكما ذكرنا، تقدم العناصر الدلالية وظائف مضمنة قد تكون أكثر وضوحًا وفهمًا
	</li>
	<li>
		<strong>أفضل للأجهزة المحمولة</strong>: فقد تكون أقل حجمًا وأسرع من العناصر غير الدلالية، كما تسهّل <a href="https://academy.hsoub.com/programming/css/%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-%D9%84%D8%B5%D9%81%D8%AD%D8%A7%D8%AA-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-responsive-web-design-r2302/" rel="">التصميم المتجاوب</a> لصفحات الويب
	</li>
	<li>
		<strong>أفضل لتحسين محركات البحث SEO</strong>: تعطي محركات البحث أهمية أكبر للكلمات المفتاحية الموجودة ضمن العناوين الرئيسية والروابط مقارنةً <a href="https://academy.hsoub.com/marketing/search-engine-optimisation/%D8%A7%D9%84%D9%83%D9%84%D9%85%D8%A7%D8%AA-%D8%A7%D9%84%D9%85%D9%81%D8%AA%D8%A7%D8%AD%D9%8A%D8%A9-%D9%88%D8%A3%D9%86%D9%88%D8%A7%D8%B9-%D9%85%D8%B7%D8%A7%D8%A8%D9%82%D8%AA%D9%87%D8%A7-r493/" rel="">بالكلمات المفتاحية</a> الموجودة في عناصر غير دلالية مثل <a href="https://wiki.hsoub.com/HTML/div" rel="external">العناصر &lt;div&gt;</a> مثلًا؛ ولهذا سيكون البحث عن موقعنا أسهل.
	</li>
</ol>

<p>
	سنتابع في بقية الفقرات استكشاف ميزات سهولة الوصول التي تقدمها HTML.
</p>

<p>
	<strong>ملاحظة</strong>: من الأفضل تثبيت قارئ شاشة على الحاسوب لاختبار الأمثلة التي نعرضها.
</p>

<h2 id="html">
	دلالات عناصر HTML
</h2>

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

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

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

<h3 id="">
	المحتوى النصي
</h3>

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

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_2355_10" style=""><span class="tag">&lt;h1&gt;</span><span class="pln">My heading</span><span class="tag">&lt;/h1&gt;</span><span class="pln">

</span><span class="tag">&lt;p&gt;</span><span class="pln">This is the first section of my document.</span><span class="tag">&lt;/p&gt;</span><span class="pln">

</span><span class="tag">&lt;p&gt;</span><span class="pln">I'll add another paragraph here too.</span><span class="tag">&lt;/p&gt;</span><span class="pln">

</span><span class="tag">&lt;ol&gt;</span><span class="pln">
 </span><span class="tag">&lt;li&gt;</span><span class="pln">Here is</span><span class="tag">&lt;/li&gt;</span><span class="pln">
 </span><span class="tag">&lt;li&gt;</span><span class="pln">a list for</span><span class="tag">&lt;/li&gt;</span><span class="pln">
 </span><span class="tag">&lt;li&gt;</span><span class="pln">you to read</span><span class="tag">&lt;/li&gt;</span><span class="pln">
</span><span class="tag">&lt;/ol&gt;</span><span class="pln">

</span><span class="tag">&lt;h2&gt;</span><span class="pln">My subheading</span><span class="tag">&lt;/h2&gt;</span><span class="pln">

</span><span class="tag">&lt;p&gt;</span><span class="pln">
 This is the first subsection of my document. I'd love people to be able to
 find this content!
</span><span class="tag">&lt;/p&gt;</span><span class="pln">

</span><span class="tag">&lt;h2&gt;</span><span class="pln">My 2nd subheading</span><span class="tag">&lt;/h2&gt;</span><span class="pln">

</span><span class="tag">&lt;p&gt;</span><span class="pln">
 This is the second subsection of my content, which I think is more interesting
 than the last one.
</span><span class="tag">&lt;/p&gt;</span></pre>

<p>
	هناك أيضًا <a href="https://mdn.github.io/learning-area/accessibility/html/good-semantics.html" rel="external nofollow">نسخة مطولة</a> من هذا المثال متاحة تجربها مع قارئ للشاشة. وإذا حاولنا التنقل ضمنها، سنلاحظ سهولة الأمر.
</p>

<ol>
	<li>
		ينطق قارئ الشاشة كل عنوان رئيسي عندما نتقدم في المحتوى وينبهنا إلى العناوين والفقرات وغيرها
	</li>
	<li>
		يقف قارئ الشاشة بعد كل عنصر، مما يسمح لنا بالتنقل بخطوات تناسبنا ضمن المحتوى
	</li>
	<li>
		بإمكاننا التنقل بين العنوان السابق والتالي في العديد من قارئات الشاشة
	</li>
	<li>
		بإمكاننا الحصول على قائمة بكل العناوين الأساسية في العديد من قارئات الشاشة لنستخدمها كجدول مساعد لإيجاد محتوى محدد
	</li>
</ol>

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

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_2355_12" style=""><span class="tag">&lt;span</span><span class="pln"> </span><span class="atn">style</span><span class="pun">=</span><span class="atv">"</span><span class="kwd">font-size</span><span class="pun">:</span><span class="pln"> </span><span class="lit">3em</span><span class="atv">"</span><span class="tag">&gt;</span><span class="pln">My heading</span><span class="tag">&lt;/span&gt;</span><span class="pln"> </span><span class="tag">&lt;br</span><span class="pln"> </span><span class="tag">/&gt;&lt;br</span><span class="pln"> </span><span class="tag">/&gt;</span><span class="pln">
This is the first section of my document.
</span><span class="tag">&lt;br</span><span class="pln"> </span><span class="tag">/&gt;&lt;br</span><span class="pln"> </span><span class="tag">/&gt;</span><span class="pln">
I'll add another paragraph here too.
</span><span class="tag">&lt;br</span><span class="pln"> </span><span class="tag">/&gt;&lt;br</span><span class="pln"> </span><span class="tag">/&gt;</span><span class="pln">
1. Here is
</span><span class="tag">&lt;br</span><span class="pln"> </span><span class="tag">/&gt;&lt;br</span><span class="pln"> </span><span class="tag">/&gt;</span><span class="pln">
2. a list for
</span><span class="tag">&lt;br</span><span class="pln"> </span><span class="tag">/&gt;&lt;br</span><span class="pln"> </span><span class="tag">/&gt;</span><span class="pln">
3. you to read
</span><span class="tag">&lt;br</span><span class="pln"> </span><span class="tag">/&gt;&lt;br</span><span class="pln"> </span><span class="tag">/&gt;</span><span class="pln">
</span><span class="tag">&lt;span</span><span class="pln"> </span><span class="atn">style</span><span class="pun">=</span><span class="atv">"</span><span class="kwd">font-size</span><span class="pun">:</span><span class="pln"> </span><span class="lit">2.5em</span><span class="atv">"</span><span class="tag">&gt;</span><span class="pln">My subheading</span><span class="tag">&lt;/span&gt;</span><span class="pln">
</span><span class="tag">&lt;br</span><span class="pln"> </span><span class="tag">/&gt;&lt;br</span><span class="pln"> </span><span class="tag">/&gt;</span><span class="pln">
This is the first subsection of my document. I'd love people to be able to find
this content!
</span><span class="tag">&lt;br</span><span class="pln"> </span><span class="tag">/&gt;&lt;br</span><span class="pln"> </span><span class="tag">/&gt;</span><span class="pln">
</span><span class="tag">&lt;span</span><span class="pln"> </span><span class="atn">style</span><span class="pun">=</span><span class="atv">"</span><span class="kwd">font-size</span><span class="pun">:</span><span class="pln"> </span><span class="lit">2.5em</span><span class="atv">"</span><span class="tag">&gt;</span><span class="pln">My 2nd subheading</span><span class="tag">&lt;/span&gt;</span><span class="pln">
</span><span class="tag">&lt;br</span><span class="pln"> </span><span class="tag">/&gt;&lt;br</span><span class="pln"> </span><span class="tag">/&gt;</span><span class="pln">
This is the second subsection of my content. I think is more interesting than
the last one.</span></pre>

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

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

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

<ul>
	<li>
		لا نستخدم الشرطات إن أمكن تحاشيها. فبدلًا من كتابة 5-7 تكتب من 5 إلى 7
	</li>
	<li>
		نكتب الاختصارات بعبارتها الكاملة، فبدلًا من كتابة Jan نكتب January
	</li>
	<li>
		نكتب اختصار عبارة بالكامل مرة أو مرتين على الأقل، ثم نستخدم العنصر <code>&lt;abb&gt;</code> لوصفه
	</li>
</ul>

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

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

<p>
	لنجرّب المثال <a href="https://mdn.github.io/learning-area/accessibility/html/table-layout.html" rel="external nofollow">table-layout.html</a> الذي يبدو مشابهًا للشيفرة التالية:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_2355_14" style=""><span class="tag">&lt;table</span><span class="pln"> </span><span class="atn">width</span><span class="pun">=</span><span class="atv">"1200"</span><span class="tag">&gt;</span><span class="pln">
 </span><span class="com">&lt;!-- main heading row --&gt;</span><span class="pln">
 </span><span class="tag">&lt;tr</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"heading"</span><span class="tag">&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">"6"</span><span class="tag">&gt;</span><span class="pln">
   </span><span class="tag">&lt;h1</span><span class="pln"> </span><span class="atn">align</span><span class="pun">=</span><span class="atv">"center"</span><span class="tag">&gt;</span><span class="pln">Header</span><span class="tag">&lt;/h1&gt;</span><span class="pln">
  </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;!-- nav menu row --&gt;</span><span class="pln">
 </span><span class="tag">&lt;tr</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"nav"</span><span class="pln"> </span><span class="atn">bgcolor</span><span class="pun">=</span><span class="atv">"#ffffff"</span><span class="tag">&gt;</span><span class="pln">
  </span><span class="tag">&lt;td</span><span class="pln"> </span><span class="atn">width</span><span class="pun">=</span><span class="atv">"200"</span><span class="tag">&gt;</span><span class="pln">
   </span><span class="tag">&lt;a</span><span class="pln"> </span><span class="atn">href</span><span class="pun">=</span><span class="atv">"#"</span><span class="pln"> </span><span class="atn">align</span><span class="pun">=</span><span class="atv">"center"</span><span class="tag">&gt;</span><span class="pln">Home</span><span class="tag">&lt;/a&gt;</span><span class="pln">
  </span><span class="tag">&lt;/td&gt;</span><span class="pln">
  </span><span class="tag">&lt;td</span><span class="pln"> </span><span class="atn">width</span><span class="pun">=</span><span class="atv">"200"</span><span class="tag">&gt;</span><span class="pln">
   </span><span class="tag">&lt;a</span><span class="pln"> </span><span class="atn">href</span><span class="pun">=</span><span class="atv">"#"</span><span class="pln"> </span><span class="atn">align</span><span class="pun">=</span><span class="atv">"center"</span><span class="tag">&gt;</span><span class="pln">Our team</span><span class="tag">&lt;/a&gt;</span><span class="pln">
  </span><span class="tag">&lt;/td&gt;</span><span class="pln">
  </span><span class="tag">&lt;td</span><span class="pln"> </span><span class="atn">width</span><span class="pun">=</span><span class="atv">"200"</span><span class="tag">&gt;</span><span class="pln">
   </span><span class="tag">&lt;a</span><span class="pln"> </span><span class="atn">href</span><span class="pun">=</span><span class="atv">"#"</span><span class="pln"> </span><span class="atn">align</span><span class="pun">=</span><span class="atv">"center"</span><span class="tag">&gt;</span><span class="pln">Projects</span><span class="tag">&lt;/a&gt;</span><span class="pln">
  </span><span class="tag">&lt;/td&gt;</span><span class="pln">
  </span><span class="tag">&lt;td</span><span class="pln"> </span><span class="atn">width</span><span class="pun">=</span><span class="atv">"200"</span><span class="tag">&gt;</span><span class="pln">
   </span><span class="tag">&lt;a</span><span class="pln"> </span><span class="atn">href</span><span class="pun">=</span><span class="atv">"#"</span><span class="pln"> </span><span class="atn">align</span><span class="pun">=</span><span class="atv">"center"</span><span class="tag">&gt;</span><span class="pln">Contact</span><span class="tag">&lt;/a&gt;</span><span class="pln">
  </span><span class="tag">&lt;/td&gt;</span><span class="pln">
  </span><span class="tag">&lt;td</span><span class="pln"> </span><span class="atn">width</span><span class="pun">=</span><span class="atv">"300"</span><span class="tag">&gt;</span><span class="pln">
   </span><span class="tag">&lt;form</span><span class="pln"> </span><span class="atn">width</span><span class="pun">=</span><span class="atv">"300"</span><span class="tag">&gt;</span><span class="pln">
    </span><span class="tag">&lt;label</span><span class="pln">
     </span><span class="tag">&gt;</span><span class="pln">Search
     </span><span class="tag">&lt;input</span><span class="pln">
      </span><span class="atn">type</span><span class="pun">=</span><span class="atv">"search"</span><span class="pln">
      </span><span class="atn">name</span><span class="pun">=</span><span class="atv">"q"</span><span class="pln">
      </span><span class="atn">placeholder</span><span class="pun">=</span><span class="atv">"Search query"</span><span class="pln">
      </span><span class="atn">width</span><span class="pun">=</span><span class="atv">"300"</span><span class="pln"> </span><span class="tag">/&gt;</span><span class="pln">
    </span><span class="tag">&lt;/label&gt;</span><span class="pln">
   </span><span class="tag">&lt;/form&gt;</span><span class="pln">
  </span><span class="tag">&lt;/td&gt;</span><span class="pln">
  </span><span class="tag">&lt;td</span><span class="pln"> </span><span class="atn">width</span><span class="pun">=</span><span class="atv">"100"</span><span class="tag">&gt;</span><span class="pln">
   </span><span class="tag">&lt;button</span><span class="pln"> </span><span class="atn">width</span><span class="pun">=</span><span class="atv">"100"</span><span class="tag">&gt;</span><span class="pln">Go!</span><span class="tag">&lt;/button&gt;</span><span class="pln">
  </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;!-- spacer row --&gt;</span><span class="pln">
 </span><span class="tag">&lt;tr</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"spacer"</span><span class="pln"> </span><span class="atn">height</span><span class="pun">=</span><span class="atv">"10"</span><span class="tag">&gt;</span><span class="pln">
  </span><span class="tag">&lt;td&gt;&lt;/td&gt;</span><span class="pln">
 </span><span class="tag">&lt;/tr&gt;</span><span class="pln">
 </span><span class="com">&lt;!-- main content and aside row --&gt;</span><span class="pln">
 </span><span class="tag">&lt;tr</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"main"</span><span class="tag">&gt;</span><span class="pln">
  </span><span class="tag">&lt;td</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"content"</span><span class="pln"> </span><span class="atn">colspan</span><span class="pun">=</span><span class="atv">"4"</span><span class="tag">&gt;</span><span class="pln">
   </span><span class="com">&lt;!-- main content goes here --&gt;</span><span class="pln">
  </span><span class="tag">&lt;/td&gt;</span><span class="pln">
  </span><span class="tag">&lt;td</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"aside"</span><span class="pln"> </span><span class="atn">colspan</span><span class="pun">=</span><span class="atv">"2"</span><span class="pln"> </span><span class="atn">valign</span><span class="pun">=</span><span class="atv">"top"</span><span class="tag">&gt;</span><span class="pln">
   </span><span class="tag">&lt;h2&gt;</span><span class="pln">Related</span><span class="tag">&lt;/h2&gt;</span><span class="pln">

   </span><span class="com">&lt;!-- aside content goes here --&gt;</span><span class="pln">
  </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;!-- spacer row --&gt;</span><span class="pln">
 </span><span class="tag">&lt;tr</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"spacer"</span><span class="pln"> </span><span class="atn">height</span><span class="pun">=</span><span class="atv">"10"</span><span class="tag">&gt;</span><span class="pln">
  </span><span class="tag">&lt;td&gt;&lt;/td&gt;</span><span class="pln">
 </span><span class="tag">&lt;/tr&gt;</span><span class="pln">
 </span><span class="com">&lt;!-- footer row --&gt;</span><span class="pln">
 </span><span class="tag">&lt;tr</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"footer"</span><span class="tag">&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">"6"</span><span class="tag">&gt;</span><span class="pln">
   </span><span class="tag">&lt;p&gt;</span><span class="pln">©Copyright 1996 by nobody. All rights reversed.</span><span class="tag">&lt;/p&gt;</span><span class="pln">
  </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;/table&gt;</span></pre>

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

<p>
	يعود التخطيط القديم للجدول إلى الأيام التي لم تدعم فيها المتصفحات لغة CSS كفاية؛ أما الآن، فهو مصدر لإرباك التقنيات المساعدة مثل قارئات الشاشة. إضافةً إلى ذلك، تحتاج شيفرته المصدرية إلى الكثير من الأسطر، مما يجعله أقل مرونةً وأصعب صيانةً. ولنقف على صحة ما نقوله، لا بد من مقارنة تجربتنا للمثال السابق مع <a href="https://mdn.github.io/learning-area/html/introduction-to-html/document_and_website_structure/" rel="external nofollow">مثال يستخدم هيكلية حديثة لصفحة الويب</a>، والذي قد يبدو بالشكل التالي:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_2355_16" style=""><span class="tag">&lt;header&gt;</span><span class="pln">
 </span><span class="tag">&lt;h1&gt;</span><span class="pln">Header</span><span class="tag">&lt;/h1&gt;</span><span class="pln">
</span><span class="tag">&lt;/header&gt;</span><span class="pln">

</span><span class="tag">&lt;nav&gt;</span><span class="pln">
 </span><span class="com">&lt;!-- main navigation in here --&gt;</span><span class="pln">
</span><span class="tag">&lt;/nav&gt;</span><span class="pln">

</span><span class="com">&lt;!-- Here is our page's main content --&gt;</span><span class="pln">
</span><span class="tag">&lt;main&gt;</span><span class="pln">
 </span><span class="com">&lt;!-- It contains an article --&gt;</span><span class="pln">
 </span><span class="tag">&lt;article&gt;</span><span class="pln">
  </span><span class="tag">&lt;h2&gt;</span><span class="pln">Article heading</span><span class="tag">&lt;/h2&gt;</span><span class="pln">

  </span><span class="com">&lt;!-- article content in here --&gt;</span><span class="pln">
 </span><span class="tag">&lt;/article&gt;</span><span class="pln">

 </span><span class="tag">&lt;aside&gt;</span><span class="pln">
  </span><span class="tag">&lt;h2&gt;</span><span class="pln">Related</span><span class="tag">&lt;/h2&gt;</span><span class="pln">

  </span><span class="com">&lt;!-- aside content in here --&gt;</span><span class="pln">
 </span><span class="tag">&lt;/aside&gt;</span><span class="pln">
</span><span class="tag">&lt;/main&gt;</span><span class="pln">

</span><span class="com">&lt;!-- And here is our main footer that is used across all the pages of our website --&gt;</span><span class="pln">

</span><span class="tag">&lt;footer&gt;</span><span class="pln">
 </span><span class="com">&lt;!-- footer content in here --&gt;</span><span class="pln">
</span><span class="tag">&lt;/footer&gt;</span></pre>

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

<p>
	من الأشياء التي يجب أخذها أيضًا بالحسبان عند إنشاء تخطيط الصفحة، استخدام عناصر HTML دلالية كما عرضنا في <a href="https://developer.mozilla.org/en-US/docs/Web/HTML/Element#content_sectioning" rel="external nofollow">مثال سابق</a>؛ إذ بإمكاننا استخدام تخطيط باستخدام عناصر <code>&lt;div&gt;</code> متداخلة، لكن من الأفضل استخدام عناصر تقسيم الصفحة للتغليف مثل <code><a href="https://wiki.hsoub.com/HTML/nav" rel="external">&lt;nav&gt;</a></code> و <code><a href="https://wiki.hsoub.com/HTML/footer" rel="external">&lt;footer&gt;</a></code> وعناصر تكرار المحتوى مثل <code><a href="https://wiki.hsoub.com/HTML/article" rel="external">&lt;article&gt;</a></code>، مما يعطي قيمةً دلالية أكبر لقارئ الشاشة وغيره من التقنيات، ويقدم إشارات أوضح عن المحتوى الذي ينتقل إليه المستخدم.
</p>

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

<h3 id="-2">
	عناصر تحكم واجهة المستخدم
</h3>

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

<p>
	من ميزات سهولة الوصول الافتراضية الخاصة بعناصر التحكم هي إمكانية التعامل معها عن طريق لوحة المفاتيح في معظم المتصفحات. بإمكاننا تجريب الأمر من خلال المثال <a href="https://mdn.github.io/learning-area/tools-testing/cross-browser-testing/accessibility/native-keyboard-accessibility.html" rel="external nofollow">native-keyboard-accessibility.html</a>، والذي يمكن إلقاء نظرة على <a href="https://github.com/mdn/learning-area/blob/main/tools-testing/cross-browser-testing/accessibility/native-keyboard-accessibility.html" rel="external nofollow">شيفرته المصدرية</a>).
</p>

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

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="172669" href="https://academy.hsoub.com/uploads/monthly_2025_05/01_button-focused-unfocused.png.da10367a86e23eb2e0e0792414934e95.png" rel=""><img alt="01 button focused unfocused" class="ipsImage ipsImage_thumbnailed" data-fileid="172669" data-unique="zpy1minam" src="https://academy.hsoub.com/uploads/monthly_2025_05/01_button-focused-unfocused.png.da10367a86e23eb2e0e0792414934e95.png"> </a>
</p>

<p>
	<strong>ملاحظة</strong>: بإمكاننا تفعيل طبقة تعرض ترتيب التنقل بين العناصر باستخدام Tab من خلال أدوات مطوري ويب في متصفحنا.
</p>

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

<p>
	<strong>ملاحظة</strong>: تختلف خيارات التحكم بالعناصر عبر لوحة المفاتيح من متصفح لآخر.
</p>

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

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_2355_18" style=""><span class="tag">&lt;h1&gt;</span><span class="pln">Links</span><span class="tag">&lt;/h1&gt;</span><span class="pln">

</span><span class="tag">&lt;p&gt;</span><span class="pln">This is a link to </span><span class="tag">&lt;a</span><span class="pln"> </span><span class="atn">href</span><span class="pun">=</span><span class="atv">"https://www.mozilla.org"</span><span class="tag">&gt;</span><span class="pln">Mozilla</span><span class="tag">&lt;/a&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">
 Another link, to the
 </span><span class="tag">&lt;a</span><span class="pln"> </span><span class="atn">href</span><span class="pun">=</span><span class="atv">"https://developer.mozilla.org"</span><span class="tag">&gt;</span><span class="pln">Mozilla Developer Network</span><span class="tag">&lt;/a&gt;</span><span class="pln">.
</span><span class="tag">&lt;/p&gt;</span><span class="pln">

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

</span><span class="tag">&lt;p&gt;</span><span class="pln">
 </span><span class="tag">&lt;button</span><span class="pln"> </span><span class="atn">data-message</span><span class="pun">=</span><span class="atv">"This is from the first button"</span><span class="tag">&gt;</span><span class="pln">Click me!</span><span class="tag">&lt;/button&gt;</span><span class="pln">
 </span><span class="tag">&lt;button</span><span class="pln"> </span><span class="atn">data-message</span><span class="pun">=</span><span class="atv">"This is from the second button"</span><span class="tag">&gt;</span><span class="pln">Click me too!</span><span class="tag">&lt;/button&gt;</span><span class="pln">
 </span><span class="tag">&lt;button</span><span class="pln"> </span><span class="atn">data-message</span><span class="pun">=</span><span class="atv">"This is from the third button"</span><span class="tag">&gt;</span><span class="pln">And me!</span><span class="tag">&lt;/button&gt;</span><span class="pln">
</span><span class="tag">&lt;/p&gt;</span><span class="pln">

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

</span><span class="tag">&lt;form&gt;</span><span class="pln">
 </span><span class="tag">&lt;div&gt;</span><span class="pln">
  </span><span class="tag">&lt;label</span><span class="pln"> </span><span class="atn">for</span><span class="pun">=</span><span class="atv">"name"</span><span class="tag">&gt;</span><span class="pln">Fill in your name:</span><span class="tag">&lt;/label&gt;</span><span class="pln">
  </span><span class="tag">&lt;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">"name"</span><span class="pln"> </span><span class="atn">name</span><span class="pun">=</span><span class="atv">"name"</span><span class="pln"> </span><span class="tag">/&gt;</span><span class="pln">
 </span><span class="tag">&lt;/div&gt;</span><span class="pln">
 </span><span class="tag">&lt;div&gt;</span><span class="pln">
  </span><span class="tag">&lt;label</span><span class="pln"> </span><span class="atn">for</span><span class="pun">=</span><span class="atv">"age"</span><span class="tag">&gt;</span><span class="pln">Enter your age:</span><span class="tag">&lt;/label&gt;</span><span class="pln">
  </span><span class="tag">&lt;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">"age"</span><span class="pln"> </span><span class="atn">name</span><span class="pun">=</span><span class="atv">"age"</span><span class="pln"> </span><span class="tag">/&gt;</span><span class="pln">
 </span><span class="tag">&lt;/div&gt;</span><span class="pln">
 </span><span class="tag">&lt;div&gt;</span><span class="pln">
  </span><span class="tag">&lt;label</span><span class="pln"> </span><span class="atn">for</span><span class="pun">=</span><span class="atv">"mood"</span><span class="tag">&gt;</span><span class="pln">Choose your mood:</span><span class="tag">&lt;/label&gt;</span><span class="pln">
  </span><span class="tag">&lt;select</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"mood"</span><span class="pln"> </span><span class="atn">name</span><span class="pun">=</span><span class="atv">"mood"</span><span class="tag">&gt;</span><span class="pln">
   </span><span class="tag">&lt;option&gt;</span><span class="pln">Happy</span><span class="tag">&lt;/option&gt;</span><span class="pln">
   </span><span class="tag">&lt;option&gt;</span><span class="pln">Sad</span><span class="tag">&lt;/option&gt;</span><span class="pln">
   </span><span class="tag">&lt;option&gt;</span><span class="pln">Angry</span><span class="tag">&lt;/option&gt;</span><span class="pln">
   </span><span class="tag">&lt;option&gt;</span><span class="pln">Worried</span><span class="tag">&lt;/option&gt;</span><span class="pln">
  </span><span class="tag">&lt;/select&gt;</span><span class="pln">
 </span><span class="tag">&lt;/div&gt;</span><span class="pln">
</span><span class="tag">&lt;/form&gt;</span></pre>

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

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_2355_20" style=""><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">data-message</span><span class="pun">=</span><span class="atv">"This is from the first button"</span><span class="tag">&gt;</span><span class="pln">Click me!</span><span class="tag">&lt;/div&gt;</span><span class="pln">
</span><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">data-message</span><span class="pun">=</span><span class="atv">"This is from the second button"</span><span class="tag">&gt;</span><span class="pln">Click me too!</span><span class="tag">&lt;/div&gt;</span><span class="pln">
</span><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">data-message</span><span class="pun">=</span><span class="atv">"This is from the third button"</span><span class="tag">&gt;</span><span class="pln">And me!</span><span class="tag">&lt;/div&gt;</span></pre>

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

<p>
	في الحالات النادرة -ومستحيلة الوجود- التي نُضطر فيها إلى ذلك، علينا استخدام الخاصية <code>role=button</code> مع عناصر أخرى لكي نجعلها على هيئة أزرار، وعلينا إنجاز جميع وظائف الأزرار بنفسنا، بما في ذلك التفاعل مع الفأرة ولوحة المفاتيح.
</p>

<h3 id="-3">
	بناء دعم لسهولة الوصول عبر لوحة المفاتيح
</h3>

<p>
	يحتاج مثل هذا الدعم إلى القليل من العمل، ويمكن لأجل ذلك الاطلاع على المثال <a href="https://mdn.github.io/learning-area/tools-testing/cross-browser-testing/accessibility/fake-div-buttons.html" rel="external nofollow">fake-div-buttons.html</a>، وإلقاء نظرة على <a href="https://github.com/mdn/learning-area/blob/main/tools-testing/cross-browser-testing/accessibility/fake-div-buttons.html" rel="external nofollow">شيفرته المصدرية</a>)، فكما يبدو مُنحت الأزار المزيفة <code>&lt;div&gt;</code> إمكانية التقاط تركيز الدخل بما في ذلك حالة استخدام المفتاح Tab، وذلك عن طريق ضبط قيمة الخاصية <code>tabindex</code> لكل زر على القيمة <code>"0"</code>، كما أضيفت الخاصية <code>"role="button</code> لتتعرف قارئات الشاشة عليها عند اكتسابها تركيز الدخل أو عند التفاعل معها:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_2355_22" style=""><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">data-message</span><span class="pun">=</span><span class="atv">"This is from the first button"</span><span class="pln"> </span><span class="atn">tabindex</span><span class="pun">=</span><span class="atv">"0"</span><span class="pln"> </span><span class="atn">role</span><span class="pun">=</span><span class="atv">"button"</span><span class="tag">&gt;</span><span class="pln">
 Click me!
</span><span class="tag">&lt;/div&gt;</span><span class="pln">
</span><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">data-message</span><span class="pun">=</span><span class="atv">"This is from the second button"</span><span class="pln"> </span><span class="atn">tabindex</span><span class="pun">=</span><span class="atv">"0"</span><span class="pln"> </span><span class="atn">role</span><span class="pun">=</span><span class="atv">"button"</span><span class="tag">&gt;</span><span class="pln">
 Click me too!
</span><span class="tag">&lt;/div&gt;</span><span class="pln">
</span><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">data-message</span><span class="pun">=</span><span class="atv">"This is from the third button"</span><span class="pln"> </span><span class="atn">tabindex</span><span class="pun">=</span><span class="atv">"0"</span><span class="pln"> </span><span class="atn">role</span><span class="pun">=</span><span class="atv">"button"</span><span class="tag">&gt;</span><span class="pln">
 And me!
</span><span class="tag">&lt;/div&gt;</span></pre>

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

<ul>
	<li>
		<code>"tabindex="0</code>: تتيح للعناصر التي لا تدعم التنقل باستخدام المفتاح Tab أن تدعم، وهي القيمة الأكثر أهمية
	</li>
	<li>
		<code>"tabindex="-1</code>: تتيح للعناصر التي لا تدعم التنقل باستخدام المفتاح Tab إمكانية استقبال تركيز الدخل برمجيًا باستخدام جافاسكريبت مثلًا، أو كهدف لرابط تشعّبي
	</li>
</ul>

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

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_2355_24" style=""><span class="pln">document</span><span class="pun">.</span><span class="pln">onkeydown </span><span class="pun">=</span><span class="pln"> </span><span class="pun">(</span><span class="pln">e</span><span class="pun">)</span><span class="pln"> </span><span class="pun">=&gt;</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
 </span><span class="pun">//</span><span class="pln"> The Enter</span><span class="pun">/</span><span class="pln">Return key
 if </span><span class="pun">(</span><span class="pln">e</span><span class="pun">.</span><span class="pln">key </span><span class="pun">===</span><span class="pln"> </span><span class="str">"Enter"</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  document</span><span class="pun">.</span><span class="pln">activeElement</span><span class="pun">.</span><span class="pln">click</span><span class="pun">();</span><span class="pln">
 </span><span class="pun">}</span><span class="pln">
</span><span class="pun">};</span></pre>

<p>
	وشرح ما فعلناه، فقد أضفنا هنا مترصد أحداث للكائن <code>document</code> لالتقاط الضغط على أي مفتاح من لوحة المفاتيح، ثم نتحقق من المفتاح الذي ضغطه المستخدم الخاصية <code>key</code> لكائن الحدث. فإن كان المفتاح المضغوط Enter/Return، معناها ننفذ الدالة المخزّنة في المعالج <code>onclick</code> من خلال العبارة <code>()document.activeElement.click</code>؛ إذ يعطينا الكائن <code>activeElement</code> العنصر الحالي الذي تلقى تركيز الدخل في الصفحة.
</p>

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

<h4 id="-4">
	نصوص واضحة ومعبرة للعناوين
</h4>

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

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

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="172670" href="https://academy.hsoub.com/uploads/monthly_2025_05/02_voiceover-formcontrols.png.ad80b3a6ea9a51702f05520b1daf230f.png" rel=""><img alt="02 voiceover formcontrols" class="ipsImage ipsImage_thumbnailed" data-fileid="172670" data-unique="nc54n3ei1" src="https://academy.hsoub.com/uploads/monthly_2025_05/02_voiceover-formcontrols.thumb.png.9e11617ce0ea34e4c400d04b306a396b.png"> </a>
</p>

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

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_2355_26" style=""><span class="tag">&lt;p&gt;</span><span class="pln">
 Whales are really awesome creatures.
 </span><span class="tag">&lt;a</span><span class="pln"> </span><span class="atn">href</span><span class="pun">=</span><span class="atv">"whales.html"</span><span class="tag">&gt;</span><span class="pln">Find out more about whales</span><span class="tag">&lt;/a&gt;</span><span class="pln">.
</span><span class="tag">&lt;/p&gt;</span></pre>

<p>
	لكن التالي يْعَد مثالًا سيئًا:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_2355_28" style=""><span class="tag">&lt;p&gt;</span><span class="pln">
 Whales are really awesome creatures. To find out more about whales,
 </span><span class="tag">&lt;a</span><span class="pln"> </span><span class="atn">href</span><span class="pun">=</span><span class="atv">"whales.html"</span><span class="tag">&gt;</span><span class="pln">click here</span><span class="tag">&lt;/a&gt;</span><span class="pln">.
</span><span class="tag">&lt;/p&gt;</span></pre>

<p>
	<strong>ملاحظة</strong>: بإمكاننا الإطلاع على ممارسات جيدة وسيئة من خلال المثالين <a href="https://mdn.github.io/learning-area/accessibility/html/good-links.html" rel="external nofollow">good-links.html</a> و <a href="https://mdn.github.io/learning-area/accessibility/html/bad-links.html" rel="external nofollow">bad-links.html</a>.
</p>

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

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_2355_30" style=""><span class="pln">Fill in your name: </span><span class="tag">&lt;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">"name"</span><span class="pln"> </span><span class="atn">name</span><span class="pun">=</span><span class="atv">"name"</span><span class="pln"> </span><span class="tag">/&gt;</span></pre>

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

<p>
	أما المثال التالي، فيقدم حلًا أفضل:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_2355_32" style=""><span class="tag">&lt;div&gt;</span><span class="pln">
 </span><span class="tag">&lt;label</span><span class="pln"> </span><span class="atn">for</span><span class="pun">=</span><span class="atv">"name"</span><span class="tag">&gt;</span><span class="pln">Fill in your name:</span><span class="tag">&lt;/label&gt;</span><span class="pln">
 </span><span class="tag">&lt;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">"name"</span><span class="pln"> </span><span class="atn">name</span><span class="pun">=</span><span class="atv">"name"</span><span class="pln"> </span><span class="tag">/&gt;</span><span class="pln">
</span><span class="tag">&lt;/div&gt;</span></pre>

<p>
	يرتبط العنوان في هذه الشيفرة بعنصر الإدخال بوضوح، وسيكون وصف قارئ الشاشة على الشكل " أدخل اسمك: عدل النص Fill in your name: edit text".
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="172671" href="https://academy.hsoub.com/uploads/monthly_2025_05/03_voiceover-good-form-label.png.00e557d014089438478100c73f0b3d9d.png" rel=""><img alt="03 voiceover good form label" class="ipsImage ipsImage_thumbnailed" data-fileid="172671" data-unique="at9ck76dh" src="https://academy.hsoub.com/uploads/monthly_2025_05/03_voiceover-good-form-label.png.00e557d014089438478100c73f0b3d9d.png"> </a>
</p>

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

<p>
	<strong>ملاحظة</strong>: يمكن الإطلاع على ممارسات جيدة وسيئة عند بناء الاستمارات من خلال المثالين <a href="https://mdn.github.io/learning-area/accessibility/html/good-form.html" rel="external nofollow">good-form.html</a> و <a href="https://mdn.github.io/learning-area/accessibility/html/bad-form.html" rel="external nofollow">bad-form.html</a>.
</p>

<h2 id="-5">
	سهولة الوصول إلى جداول البيانات
</h2>

<p>
	يمكن كتابة جدول بيانات بسيط من خلال شيفرة HTML بسيطة كالتالي:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_2355_34" style=""><span class="tag">&lt;table&gt;</span><span class="pln">
 </span><span class="tag">&lt;tr&gt;</span><span class="pln">
  </span><span class="tag">&lt;td&gt;</span><span class="pln">Name</span><span class="tag">&lt;/td&gt;</span><span class="pln">
  </span><span class="tag">&lt;td&gt;</span><span class="pln">Age</span><span class="tag">&lt;/td&gt;</span><span class="pln">
  </span><span class="tag">&lt;td&gt;</span><span class="pln">Pronouns</span><span class="tag">&lt;/td&gt;</span><span class="pln">
 </span><span class="tag">&lt;/tr&gt;</span><span class="pln">
 </span><span class="tag">&lt;tr&gt;</span><span class="pln">
  </span><span class="tag">&lt;td&gt;</span><span class="pln">Gabriel</span><span class="tag">&lt;/td&gt;</span><span class="pln">
  </span><span class="tag">&lt;td&gt;</span><span class="pln">13</span><span class="tag">&lt;/td&gt;</span><span class="pln">
  </span><span class="tag">&lt;td&gt;</span><span class="pln">he/him</span><span class="tag">&lt;/td&gt;</span><span class="pln">
 </span><span class="tag">&lt;/tr&gt;</span><span class="pln">
 </span><span class="tag">&lt;tr&gt;</span><span class="pln">
  </span><span class="tag">&lt;td&gt;</span><span class="pln">Elva</span><span class="tag">&lt;/td&gt;</span><span class="pln">
  </span><span class="tag">&lt;td&gt;</span><span class="pln">8</span><span class="tag">&lt;/td&gt;</span><span class="pln">
  </span><span class="tag">&lt;td&gt;</span><span class="pln">she/her</span><span class="tag">&lt;/td&gt;</span><span class="pln">
 </span><span class="tag">&lt;/tr&gt;</span><span class="pln">
 </span><span class="tag">&lt;tr&gt;</span><span class="pln">
  </span><span class="tag">&lt;td&gt;</span><span class="pln">Freida</span><span class="tag">&lt;/td&gt;</span><span class="pln">
  </span><span class="tag">&lt;td&gt;</span><span class="pln">5</span><span class="tag">&lt;/td&gt;</span><span class="pln">
  </span><span class="tag">&lt;td&gt;</span><span class="pln">she/her</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;/table&gt;</span></pre>

<p>
	لكن المشكلة في هذه الشيفرة هي عدم قدرة قارئات الشاشة على ربط الصفوف بالأعمدة لتجميع البيانات. ولفعل ذلك، لا بد من تحديد سطور الترويسة Header Rows إن كانت في أعلى الأسطر أو الأعمدة، وهكذا. بطبيعة الحال، لا يمكن تنفيذ ذلك على الجدول السابق إلا مرئيًا. ولأجل ذلك، يمكن إلقاء نظرة على المثال <a href="https://mdn.github.io/learning-area/accessibility/html/bad-table.html" rel="external nofollow">bad-table.html</a> وتجربه، ثم الاطلاع على المثال <a href="https://github.com/mdn/learning-area/blob/main/css/styling-boxes/styling-tables/punk-bands-complete.html" rel="external nofollow">punk bands table example</a> والذي سنرى فيه بعض النقاط التي تدعم سهول الوصول.
</p>

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

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

<h2 id="-6">
	النصوص البديلة
</h2>

<p>
	يُعَد الوصول السهل إلى المحتوى النصي محققًا دائمًا، لكن الوضع ليس كذلك بالنسبة للوسائط المتعددة؛ إذ لا يمكن رؤية الصورة والفيديو من قبل ذوي الإعاقات البصرية، ولن يستطيع ذوو الإعاقات السمعية فهم المحتوى الصوتي. لن نغطي هذا الموضوع بهذا المقال، لكننا سنلقي نظرةً على سهولة الوصول إلى عنصر الصور <code>&lt;img&gt;</code> فقط. لأجل ذلك، يمكن الاطلاع على هذا المثال <a href="https://mdn.github.io/learning-area/accessibility/html/accessible-image.html" rel="external nofollow">accessible-image.html</a> الذي يقدم أربعة نسخ عن نفس الصورة:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_2355_36" style=""><span class="tag">&lt;img</span><span class="pln"> </span><span class="atn">src</span><span class="pun">=</span><span class="atv">"dinosaur.png"</span><span class="pln"> </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">"dinosaur.png"</span><span class="pln">
 </span><span class="atn">alt</span><span class="pun">=</span><span class="atv">"A red Tyrannosaurus Rex: A two legged dinosaur standing upright like a human, with small arms, and a large head with lots of sharp teeth."</span><span class="pln"> </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">"dinosaur.png"</span><span class="pln">
 </span><span class="atn">alt</span><span class="pun">=</span><span class="atv">"A red Tyrannosaurus Rex: A two legged dinosaur standing upright like a human, with small arms, and a large head with lots of sharp teeth."</span><span class="pln">
 </span><span class="atn">title</span><span class="pun">=</span><span class="atv">"The Mozilla red dinosaur"</span><span class="pln"> </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">"dinosaur.png"</span><span class="pln"> </span><span class="atn">aria-labelledby</span><span class="pun">=</span><span class="atv">"dino-label"</span><span class="pln"> </span><span class="tag">/&gt;</span><span class="pln">

</span><span class="tag">&lt;p</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"dino-label"</span><span class="tag">&gt;</span><span class="pln">
 The Mozilla red Tyrannosaurus Rex: A two legged dinosaur standing upright like
 a human, with small arms, and a large head with lots of sharp teeth.
</span><span class="tag">&lt;/p&gt;</span></pre>

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

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

<p>
	عندما يصل قارئ الشاشة إلى الصورة الثانية، سيقرأ مايلي:
</p>

<pre class="ipsCode" id="ips_uid_2355_72">A red Tyrannosaurus Rex: A two legged dinosaur standing upright like a human, with small arms, and a large head with lots of sharp teeth</pre>

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

<p>
	يختلف محتوى الخاصية <code>alt</code> لنفس الصورة وفق السياق؛ فإن كانت صورة هي لجرو صغير Fluffy مثلًا بجانب مراجعة عن طعام كلاب، فسيكون المحتوى <code>"alt="fluffy</code> كافيًا في هذا السياق، لكن إن كانت ضمن صفحة لتبني الكلاب، فسيختلف حينها محتوى الخاصية <code>alt</code> لتلائم السياق، وذلك بتقديم وصف لهذه الصورة مثل <code>alt="Fluffy, a tri-color terrier with very short hair, with a tennis ball in her mouth."</code> بعد التأكد من عدم تكرار نفس الوصف في المحتوى النصي الذي يحيط بالصورة.
</p>

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

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

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

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

<p>
	<strong>ملاحظة</strong>: يمكن الاطلاع على المقالين: "<a href="https://academy.hsoub.com/programming/html/%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D8%A7%D9%84%D8%B5%D9%88%D8%B1-%D8%A7%D9%84%D9%85%D8%AA%D8%AC%D8%A7%D9%88%D8%A8%D8%A9-%D9%81%D9%8A-%D8%B5%D9%81%D8%AD%D8%A7%D8%AA-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-r1834/" rel="">الصور المتجاوبة</a>" و "<a href="https://academy.hsoub.com/programming/html/%D8%A5%D8%B6%D8%A7%D9%81%D8%A9-%D8%A7%D9%84%D8%B5%D9%88%D8%B1-%D9%81%D9%8A-%D8%B5%D9%81%D8%AD%D8%A9-html-r1824/" rel="">الصور في HTML</a>" لمزيد من المعلومات عن إدراج الصور في صفحات الويب وأفضل الممارسات المتبعة في تنفيذ الأمر.
</p>

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

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="172672" href="https://academy.hsoub.com/uploads/monthly_2025_05/04_title-attribute.png.90d05c1a7e9527d72acb3ec4b3040e63.png" rel=""><img alt="04 title attribute" class="ipsImage ipsImage_thumbnailed" data-fileid="172672" data-unique="axw9btjbu" src="https://academy.hsoub.com/uploads/monthly_2025_05/04_title-attribute.png.90d05c1a7e9527d72acb3ec4b3040e63.png"> </a>
</p>

<p>
	لنلق نظرةً سريعةً على الطريقة الرابعة:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_2355_38" style=""><span class="tag">&lt;img</span><span class="pln"> </span><span class="atn">src</span><span class="pun">=</span><span class="atv">"dinosaur.png"</span><span class="pln"> </span><span class="atn">aria-labelledby</span><span class="pun">=</span><span class="atv">"dino-label"</span><span class="pln"> </span><span class="tag">/&gt;</span><span class="pln">

</span><span class="tag">&lt;p</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"dino-label"</span><span class="tag">&gt;</span><span class="pln">The Mozilla red Tyrannosaurus…</span><span class="tag">&lt;/p&gt;</span></pre>

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

<p>
	<strong>ملاحظة</strong>: الخاصية <code>aria-labelledby</code> هي جزء من مواصفة <a href="https://www.w3.org/TR/wai-aria-1.1/" rel="external nofollow">WAI-ARIA</a> التي تتيح للمطورين إضافة دلالات لعناصر صفحة الويب لتحسين سهولة الوصول عندما يتطلب الأمر ذلك.
</p>

<h2 id="-7">
	الأشكال وعناوين الأشكال
</h2>

<p>
	تتضمن لغة HTML عنصرين لربط شكل من أي نوع، وهما <code>&lt;figure&gt;</code> و <code>&lt;figcaption&gt;</code>:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_2355_40" style=""><span class="tag">&lt;figure&gt;</span><span class="pln">
 </span><span class="tag">&lt;img</span><span class="pln">
  </span><span class="atn">src</span><span class="pun">=</span><span class="atv">"dinosaur.png"</span><span class="pln">
  </span><span class="atn">alt</span><span class="pun">=</span><span class="atv">"The Mozilla Tyrannosaurus"</span><span class="pln">
  </span><span class="atn">aria-describedby</span><span class="pun">=</span><span class="atv">"dinodescr"</span><span class="pln"> </span><span class="tag">/&gt;</span><span class="pln">
 </span><span class="tag">&lt;figcaption</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"dinodescr"</span><span class="tag">&gt;</span><span class="pln">
  A red Tyrannosaurus Rex: A two legged dinosaur standing upright like a
  human, with small arms, and a large head with lots of sharp teeth.
 </span><span class="tag">&lt;/figcaption&gt;</span><span class="pln">
</span><span class="tag">&lt;/figure&gt;</span></pre>

<p>
	على الرغم من وجود عدة طرق لدعم قارئات الشاشة في ربط الأشكال بعناوينها، إلا أن تضمين الخاصيتين <a href="https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-labelledby" rel="external nofollow"><code>aria-labelledby</code></a> أو <a href="https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-describedby" rel="external nofollow"><code>aria-describedby</code></a> سينشئ هذا الرابط إن لم يكن موجودًا. ولهذا الأسلوب فائدته في تطبيق تنسيق CSS، كما يقدم طريقةً نضع فيها وصف الصورة إلى جوارها في الشيفرة المصدرية.
</p>

<h3 id="alt">
	الخاصية <code>alt</code> الفارغة
</h3>

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

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_2355_42" style=""><span class="tag">&lt;h3&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">"article-icon.png"</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">
 Tyrannosaurus Rex: the king of the dinosaurs
</span><span class="tag">&lt;/h3&gt;</span></pre>

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

<p>
	يعود سبب استخدام الخاصية الفارغة بدلًا من تجاهلها إلى حقيقة أن قارئ الشاشة يذيع <a href="https://academy.hsoub.com/programming/general/%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A7%D8%AA-%D8%B9%D9%86%D9%88%D8%A7%D9%86-url-%D9%88%D8%A3%D9%86%D9%88%D8%A7%D8%B9%D9%87-r1435/" rel="">عنوان URL</a> لملف الصورة بأكمله إن لم نضع الخاصية <code>alt</code>؛ فلو عدنا إلى المثال السابق التي نستخدم فيه الصورة لمجرد التزيين للعنوان الرئيسي المتعلقة به، وليس لها أي غرض آخر، فلا بد من استخدام الخاصية <code>""=alt</code> ضمن العنصر <code><a href="https://wiki.hsoub.com/HTML/img" rel="external">&lt;img&gt;</a></code>. ومن البدائل المستخدمة الخاصية <code>"role="presentation</code> وفق مواصفة ARIA، فهي توقف أيضًا من قراءة النص البديل.
</p>

<p>
	<strong>ملاحظة</strong>: يمكن استخدام CSS إن أمكن لعرض الصور التزيينية.
</p>

<h2 id="-8">
	معلومات أكثر عن الروابط التشعبية
</h2>

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

<h3 id="-9">
	تنسيق الروابط التشعبية
</h3>

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

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

<h3 id="onclick">
	الحدث <code>onclick</code>
</h3>

<p>
	عادةً ما يُساء استخدام وسم المربط anchor tag مع الحدث <code>onclick</code> لإنشاء زر ائف بضبط قيمة الخاصية <code>href</code> على <code>#</code> أو باستخدام الأمر <code>"(javascript:void(0"</code> لمنع الصفحة من إعادة تحديث نفسها.
</p>

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

<h3 id="html-1">
	الروابط الخارجية والروابط إلى موارد غير HTML
</h3>

<p>
	لا بد من تضمين مؤشر يصف سلوك الرابط عندما ينقر عليه المستخدم في الحالة التي سيُفتح فيها ضمن صفحة جديدة، مثل التصريح <code>"target="_blank</code>، أو كانت قيمة <code>href</code> تشير إلى ملف.
</p>

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

<p>
	فيما يلي شيفرة توضح كيفية كتابة كود الروابط التي تفتح نافذة جديدة:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_2355_44" style=""><span class="tag">&lt;a</span><span class="pln"> </span><span class="atn">target</span><span class="pun">=</span><span class="atv">"_blank"</span><span class="pln"> </span><span class="atn">href</span><span class="pun">=</span><span class="atv">"https://www.wikipedia.org/"</span><span class="pln">
 </span><span class="tag">&gt;</span><span class="pln">Wikipedia (opens in a new window)</span><span class="tag">&lt;/a</span><span class="pln">
</span><span class="tag">&gt;</span></pre>

<p>
	أما هنا فشيفرة كتابة كود رابط إلى ملف ليس HTML:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_2355_46" style=""><span class="tag">&lt;a</span><span class="pln"> </span><span class="atn">target</span><span class="pun">=</span><span class="atv">"_blank"</span><span class="pln"> </span><span class="atn">href</span><span class="pun">=</span><span class="atv">"2017-annual-report.ppt"</span><span class="pln">
 </span><span class="tag">&gt;</span><span class="pln">2017 Annual Report (PowerPoint)</span><span class="tag">&lt;/a</span><span class="pln">
</span><span class="tag">&gt;</span></pre>

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

<h3 id="-10">
	روابط التجاوز
</h3>

<p>
	رابط التجاوز Skip Link أو skipnav هو عنصر <code>&lt;a&gt;</code> يُوضع -قدر الإمكان- بالقرب من بداية العنصر <code><a href="https://wiki.hsoub.com/HTML/body" rel="external">&lt;body&gt;</a></code> الذي يشير إلى بداية المحتوى الرئيسي للصفحة. يسمح رابط التجاوز للمستخدمين بتجاوز المحتوى المكرر عبر الصفحات المتعددة لموقع الويب مثل ترويسة مواقع الويب وشريط التنقل الرئيسي.
</p>

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

<h3 id="-11">
	التقريب
</h3>

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

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

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

<p>
	ترجمة -وبتصرف- لمقال <a href="https://developer.mozilla.org/en-US/docs/Learn/Accessibility/HTML" rel="external nofollow">HTML: A good basis for accessibility</a>
</p>

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

<ul>
	<li>
		<a href="https://academy.hsoub.com/programming/html/%D8%B3%D9%87%D9%88%D9%84%D8%A9-%D9%88%D8%B5%D9%88%D9%84-%D8%AC%D9%85%D9%8A%D8%B9-%D8%A7%D9%84%D8%B2%D9%88%D8%A7%D8%B1-%D9%84%D9%85%D9%88%D8%A7%D9%82%D8%B9-%D9%88%D8%AA%D8%B7%D8%A8%D9%8A%D9%82%D8%A7%D8%AA-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-r1323/" rel="">سهولة وصول جميع الزوار لمواقع وتطبيقات الويب</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/html/%D9%85%D8%B9%D8%A7%D9%84%D8%AC%D8%A9-%D9%85%D8%B4%D8%A7%D9%83%D9%84-%D8%B3%D9%87%D9%88%D9%84%D8%A9-%D8%A7%D9%84%D9%88%D8%B5%D9%88%D9%84-accessibility-%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-r1983/" rel="">معالجة مشاكل سهولة الوصول Accessibility الشائعة للتوافق مع المتصفحات</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/design/user-experience/%D8%A3%D9%81%D8%B6%D9%84-15-%D9%85%D9%85%D8%A7%D8%B1%D8%B3%D8%A9-%D9%84%D8%B3%D9%87%D9%88%D9%84%D8%A9-%D8%A7%D9%84%D9%88%D8%B5%D9%88%D9%84-%D8%A5%D9%84%D9%89-%D9%85%D9%88%D9%82%D8%B9-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-r860/" rel="">أفضل 15 ممارسة لسهولة الوصول إلى موقع الويب</a>
	</li>
	<li>
		<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="">معالجة المشاكل الشائعة للتوافق مع المتصفحات في HTML و CSS</a>
	</li>
</ul>
]]></description><guid isPermaLink="false">2582</guid><pubDate>Fri, 04 Jul 2025 16:02:01 +0000</pubDate></item><item><title>&#x625;&#x646;&#x634;&#x627;&#x621; &#x645;&#x639;&#x631;&#x636; &#x623;&#x639;&#x645;&#x627;&#x644; &#x628;&#x627;&#x633;&#x62A;&#x62E;&#x62F;&#x627;&#x645; &#x62A;&#x642;&#x646;&#x64A;&#x627;&#x62A; &#x627;&#x644;&#x648;&#x64A;&#x628; &#x627;&#x644;&#x623;&#x633;&#x627;&#x633;&#x64A;&#x629;</title><link>https://academy.hsoub.com/programming/html/%D8%A5%D9%86%D8%B4%D8%A7%D8%A1-%D9%85%D8%B9%D8%B1%D8%B6-%D8%A3%D8%B9%D9%85%D8%A7%D9%84-%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-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-%D8%A7%D9%84%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A9-r2487/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2025_01/-----HTML-CSS-JavaScript.png.49fd7fee7c14c0f6b4314568d0fdb530.png" /></p>
<p>
	سنشرح في هذا المقال كيفية توظيف معلوماتك عن تقنيات الويب الأساسية وهي HTML وCSS و JavaScript لإنشاء موقع ويب يكون معرضًا لأعمالك تستخدمه للتعريف بك وبمشاريعك، وسنعمل في مقال لاحق على تحسين هذا الموقع من خلال إطار عمل Vue.js.
</p>

<h2 id="html">
	إنشاء ملف HTML
</h2>

<p>
	أولاً، ننشئ مجلدًا ونسميه portfolio، حيث سنخزن فيه كل ما يتعلق بمشروع معرض الأعمال. ثم ننشئ داخله ملف HTML، ونطلق عليه اسم <code>Portfolio.html</code> ونفتحه باستخدام أي محرر نصي نفضله، يمكن استخدام أي محرر كالمفكرة، لكن ننصح باستخدام محرر أكواد برمجية مناسب مثل <a href="https://code.visualstudio.com/" rel="external nofollow">Visual Studio Code</a>.
</p>

<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>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_1112_6" 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;/head&gt;</span><span class="pln">

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

<p>
	لنبدأ بالحديث عن قسم الترويسة <code>&lt;head&gt;</code> والذي يتضمن التالي:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_1112_8" style=""><span class="tag">&lt;head&gt;</span><span class="pln">
  </span><span class="tag">&lt;meta</span><span class="pln"> </span><span class="atn">charset</span><span class="pun">=</span><span class="atv">"utf-8"</span><span class="pln"> </span><span class="tag">/&gt;</span><span class="pln">
  </span><span class="tag">&lt;meta</span><span class="pln"> </span><span class="atn">name</span><span class="pun">=</span><span class="atv">"description"</span><span class="pln"> </span><span class="atn">content</span><span class="pun">=</span><span class="atv">"My Portfolio"</span><span class="pln"> </span><span class="tag">/&gt;</span><span class="pln">
  </span><span class="tag">&lt;meta</span><span class="pln"> </span><span class="atn">name</span><span class="pun">=</span><span class="atv">"keywords"</span><span class="pln"> </span><span class="atn">content</span><span class="pun">=</span><span class="atv">"HTML, CSS, JavaScript"</span><span class="pln"> </span><span class="tag">/&gt;</span><span class="pln">
  </span><span class="tag">&lt;meta</span><span class="pln"> </span><span class="atn">name</span><span class="pun">=</span><span class="atv">"author"</span><span class="pln"> </span><span class="atn">content</span><span class="pun">=</span><span class="atv">"Hsoub Academy"</span><span class="pln"> </span><span class="tag">/&gt;</span><span class="pln">
  </span><span class="tag">&lt;title&gt;</span><span class="pln">My Portfolio</span><span class="tag">&lt;/title&gt;</span><span class="pln">
</span><span class="tag">&lt;/head&gt;</span></pre>

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

<p>
	<strong>ملاحظة</strong>: لا تُعرض معلومات <code>&lt;head&gt;</code> في موقع الويب، لكنها مهمة لتحسين محركات البحث SEO. .
</p>

<h3 id="headernavigationbar">
	الترويسة Header وشريط التنقل Navigation bar
</h3>

<p>
	بعدها سنبدأ بإنشاء ترويسة موقعنا، وننشئ شريط التنقل الأساسي من خلال كتابة الكود التالي:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_7819_7" style=""><span class="com">&lt;!--Header and Navigation Bar--&gt;</span><span class="pln">
</span><span class="tag">&lt;header&gt;</span><span class="pln">
  </span><span class="tag">&lt;h1&gt;</span><span class="pln">Simple Portfolio</span><span class="tag">&lt;/h1&gt;</span><span class="pln">
</span><span class="tag">&lt;/header&gt;</span><span class="pln">
</span><span class="tag">&lt;nav</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"col-8 col-s-8"</span><span class="tag">&gt;</span><span class="pln">
  </span><span class="tag">&lt;ul</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"nav-list"</span><span class="tag">&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">"nav-item"</span><span class="tag">&gt;&lt;a</span><span class="pln"> </span><span class="atn">href</span><span class="pun">=</span><span class="atv">"./portfolio.html"</span><span class="tag">&gt;</span><span class="pln">Home</span><span class="tag">&lt;/a&gt;&lt;/li&gt;</span><span class="pln">
    </span><span class="tag">&lt;li</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"nav-item"</span><span class="tag">&gt;&lt;a</span><span class="pln"> </span><span class="atn">href</span><span class="pun">=</span><span class="atv">"https://academy.hsoub.com/programming"</span><span class="tag">&gt;</span><span class="pln">Lessons</span><span class="tag">&lt;/a&gt;&lt;/li&gt;</span><span class="pln">
    </span><span class="tag">&lt;li</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"nav-item"</span><span class="tag">&gt;&lt;a</span><span class="pln"> </span><span class="atn">href</span><span class="pun">=</span><span class="atv">"#project"</span><span class="tag">&gt;</span><span class="pln">Projects</span><span class="tag">&lt;/a&gt;&lt;/li&gt;</span><span class="pln">
  </span><span class="tag">&lt;/ul&gt;</span><span class="pln">
</span><span class="tag">&lt;/nav&gt;</span></pre>

<p>
	نلاحظ أننا استخدمنا <a href="https://academy.hsoub.com/programming/general/%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A7%D8%AA-%D8%B9%D9%86%D9%88%D8%A7%D9%86-url-%D9%88%D8%A3%D9%86%D9%88%D8%A7%D8%B9%D9%87-r1435/" rel="">أنواع روابط</a> مختلفة، فالرابط الأول في قسم التنقل هو عنوان نسبي relative URL سينقلنا إلى جذر الخادم root directory ثم سيبحث عن ملف <code>portfolio.html</code>، والرابط الثاني هو عنوان مطلق absolute URL، أما الرابط الأخير فهو رابط مرساة anchor link وسنتحدث عنه لاحقًا.
</p>

<h3 id="-1">
	إضافة القسم التعريفي لمعرض الأعمال
</h3>

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

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_7819_15" style=""><span class="com">&lt;!--Self Introduction Section--&gt;</span><span class="pln">
</span><span class="tag">&lt;section&gt;</span><span class="pln">
 </span><span class="tag">&lt;h2&gt;</span><span class="pln">Welcome to My Portfolio</span><span class="tag">&lt;/h2&gt;</span><span class="pln">
</span><span class="tag">&lt;p&gt;</span><span class="pln"> Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book
  </span><span class="tag">&lt;/p&gt;</span><span class="pln">
</span><span class="tag">&lt;/section&gt;</span></pre>

<h3 id="newsletter">
	قسم الرسائل الإخبارية Newsletter
</h3>

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

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_1112_15" style=""><span class="com">&lt;!--Newsletter Sign Up Section--&gt;</span><span class="pln">
</span><span class="tag">&lt;section&gt;</span><span class="pln">
  </span><span class="tag">&lt;h2&gt;</span><span class="pln">Would you like to see more tips and tutorials on web development?</span><span class="tag">&lt;/h2&gt;</span><span class="pln">
  </span><span class="tag">&lt;form&gt;</span><span class="pln">
    </span><span class="tag">&lt;label</span><span class="pln"> </span><span class="atn">for</span><span class="pun">=</span><span class="atv">"firstname"</span><span class="tag">&gt;</span><span class="pln">First Name:</span><span class="tag">&lt;/label&gt;</span><span class="pln">
    </span><span class="tag">&lt;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">"firstname"</span><span class="pln"> </span><span class="tag">/&gt;</span><span class="pln">
    </span><span class="tag">&lt;br</span><span class="pln"> </span><span class="tag">/&gt;&lt;br</span><span class="pln"> </span><span class="tag">/&gt;</span><span class="pln">
    </span><span class="tag">&lt;label</span><span class="pln"> </span><span class="atn">for</span><span class="pun">=</span><span class="atv">"lastname"</span><span class="tag">&gt;</span><span class="pln">Last Name:</span><span class="tag">&lt;/label&gt;</span><span class="pln">
    </span><span class="tag">&lt;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">"lastname"</span><span class="pln"> </span><span class="tag">/&gt;</span><span class="pln">
    </span><span class="tag">&lt;br</span><span class="pln"> </span><span class="tag">/&gt;&lt;br</span><span class="pln"> </span><span class="tag">/&gt;</span><span class="pln">
    </span><span class="tag">&lt;label</span><span class="pln"> </span><span class="atn">for</span><span class="pun">=</span><span class="atv">"email"</span><span class="tag">&gt;</span><span class="pln">Enter your email:</span><span class="tag">&lt;/label&gt;</span><span class="pln">
    </span><span class="tag">&lt;input</span><span class="pln"> </span><span class="atn">type</span><span class="pun">=</span><span class="atv">"email"</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"email"</span><span class="pln"> </span><span class="atn">name</span><span class="pun">=</span><span class="atv">"email"</span><span class="pln"> </span><span class="tag">/&gt;</span><span class="pln">
  </span><span class="tag">&lt;/form&gt;</span><span class="pln">
</span><span class="tag">&lt;/section&gt;</span></pre>

<h3 id="skills">
	قسم الخبرات Skills
</h3>

<p>
	ثم نضيف الشيفرة التالية لعرض المهارات والخبرات المختلفة:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_1112_17" style=""><span class="com">&lt;!--Skills Section--&gt;</span><span class="pln">
</span><span class="tag">&lt;section&gt;</span><span class="pln">
  </span><span class="tag">&lt;h2&gt;</span><span class="pln">My Skills</span><span class="tag">&lt;/h2&gt;</span><span class="pln">
  </span><span class="tag">&lt;ul&gt;</span><span class="pln">
    </span><span class="tag">&lt;li&gt;</span><span class="pln">HTML (100%)</span><span class="tag">&lt;/li&gt;</span><span class="pln">
    </span><span class="tag">&lt;li&gt;</span><span class="pln">CSS (90%)</span><span class="tag">&lt;/li&gt;</span><span class="pln">
    </span><span class="tag">&lt;li&gt;</span><span class="pln">JavaScript (90%)</span><span class="tag">&lt;/li&gt;</span><span class="pln">
    </span><span class="tag">&lt;li&gt;</span><span class="pln">Python (90%)</span><span class="tag">&lt;/li&gt;</span><span class="pln">
    </span><span class="tag">&lt;li&gt;</span><span class="pln">PHP (100&amp;#37;)</span><span class="tag">&lt;/li&gt;</span><span class="pln">
    </span><span class="tag">&lt;li&gt;</span><span class="pln">Java (90&amp;#37;)</span><span class="tag">&lt;/li&gt;</span><span class="pln">
    </span><span class="tag">&lt;li&gt;</span><span class="pln">Vue.js (80&amp;percnt;)</span><span class="tag">&lt;/li&gt;</span><span class="pln">
    </span><span class="tag">&lt;li&gt;</span><span class="pln">Django (90&amp;percnt;)</span><span class="tag">&lt;/li&gt;</span><span class="pln">
    </span><span class="tag">&lt;li&gt;</span><span class="pln">Laravel (90&amp;percnt;)</span><span class="tag">&lt;/li&gt;</span><span class="pln">
  </span><span class="tag">&lt;/ul&gt;</span><span class="pln">
</span><span class="tag">&lt;/section&gt;</span></pre>

<p>
	نلاحظ استخدام ثلاث طرق لتمثيل إشارة النسبة المئوية <code>%</code> في الكود أعلاه وجميعها تعطي النتيجة نفسها.
</p>

<h3 id="projects">
	قسم المشاريع Projects
</h3>

<p>
	نضيف الشيفرة التالية لعرض المشاريع البرمجية المنجزة:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_1112_19" style=""><span class="com">&lt;!--Projects Section--&gt;</span><span class="pln">
</span><span class="tag">&lt;section</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"project"</span><span class="tag">&gt;</span><span class="pln">
  </span><span class="tag">&lt;h2&gt;</span><span class="pln">My Projects</span><span class="tag">&lt;/h2&gt;</span><span class="pln">
  </span><span class="tag">&lt;div&gt;</span><span class="pln">
    </span><span class="tag">&lt;h3&gt;</span><span class="pln">First Project</span><span class="tag">&lt;/h3&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">"./images/first project.jpg"</span><span class="pln"> </span><span class="atn">width</span><span class="pun">=</span><span class="atv">"500"</span><span class="pln"> </span><span class="atn">height</span><span class="pun">=</span><span class="atv">"300"</span><span class="pln"> </span><span class="tag">/&gt;</span><span class="pln">
    </span><span class="tag">&lt;p&gt;</span><span class="pln">. . .</span><span class="tag">&lt;/p&gt;</span><span class="pln">
  </span><span class="tag">&lt;/div&gt;</span><span class="pln">

  </span><span class="tag">&lt;div&gt;</span><span class="pln">
    </span><span class="tag">&lt;h3&gt;</span><span class="pln">Second Project</span><span class="tag">&lt;/h3&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">"./images/second project.jpg"</span><span class="pln"> </span><span class="atn">width</span><span class="pun">=</span><span class="atv">"500"</span><span class="pln"> </span><span class="atn">height</span><span class="pun">=</span><span class="atv">"300"</span><span class="pln"> </span><span class="tag">/&gt;</span><span class="pln">
    </span><span class="tag">&lt;p&gt;</span><span class="pln">. . .</span><span class="tag">&lt;/p&gt;</span><span class="pln">
  </span><span class="tag">&lt;/div&gt;</span><span class="pln">

  </span><span class="tag">&lt;div&gt;</span><span class="pln">
    </span><span class="tag">&lt;h3&gt;</span><span class="pln">Third Project</span><span class="tag">&lt;/h3&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">"./images/third project.jpg"</span><span class="pln"> </span><span class="atn">width</span><span class="pun">=</span><span class="atv">"500"</span><span class="pln"> </span><span class="atn">height</span><span class="pun">=</span><span class="atv">"300"</span><span class="pln"> </span><span class="tag">/&gt;</span><span class="pln">
    </span><span class="tag">&lt;p&gt;</span><span class="pln">. . .</span><span class="tag">&lt;/p&gt;</span><span class="pln">
  </span><span class="tag">&lt;/div&gt;</span><span class="pln">
</span><span class="tag">&lt;/section&gt;</span></pre>

<p>
	أضفنا في السطر الثاني معرّفًا <code>id</code> للوسم <code>&lt;section&gt;</code> باسم <code>projects</code>، كي يعمل مع رابط المرساة anchor link الذي ذكرناه سابقًا.
</p>

<section>
	<section>
		<pre class="ipsCode">&lt;a href="#project"&gt;Projects&lt;/a&gt;
</pre>

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

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

		<p>
			أما الصور الموجودة في هذا القسم فكلها مخزنة في مجلد يسمى <code>images</code> ضمن مجلد المشروع <code>portfolio</code>.
		</p>

		<p style="text-align: center;">
			<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="165285" href="https://academy.hsoub.com/uploads/monthly_2025_01/---.png.74615b394878fbeab4e2988b3f6f60df.png" rel=""><img alt="الصور في مجلد المشروع" class="ipsImage ipsImage_thumbnailed" data-fileid="165285" data-ratio="86.67" data-unique="qfa6in1dd" style="width: 300px; height: auto;" width="300" src="https://academy.hsoub.com/uploads/monthly_2025_01/---.png.74615b394878fbeab4e2988b3f6f60df.png"> </a>
		</p>

		<h3 id="footer">
			تذييل الصفحة Footer
		</h3>

		<p>
			أخيرًا، نضيف الشيفرة التالية لإضافة تذييل إلى الصفحة:
		</p>

		<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_1613_9" style=""><span class="com">&lt;!--Footer--&gt;</span><span class="pln">
</span><span class="tag">&lt;footer&gt;</span><span class="pln">
  </span><span class="tag">&lt;p&gt;</span><span class="pln">Created by Hsoub  Academy</span><span class="tag">&lt;/p&gt;</span><span class="pln">
  </span><span class="tag">&lt;p&gt;&lt;a</span><span class="pln"> </span><span class="atn">href</span><span class="pun">=</span><span class="atv">"mailto:example@email.com"</span><span class="tag">&gt;</span><span class="pln">example@email.com</span><span class="tag">&lt;/a&gt;&lt;/p&gt;</span><span class="pln">
</span><span class="tag">&lt;/footer&gt;</span></pre>

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

		<p style="text-align: center;">
			<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="165289" href="https://academy.hsoub.com/uploads/monthly_2025_01/2083400108_.png.cb3849eba2f2bb2873051dffba07bf6b.png" rel=""><img alt="صفحة دون تنسيق" class="ipsImage ipsImage_thumbnailed" data-fileid="165289" data-unique="zk9hjin6u" src="https://academy.hsoub.com/uploads/monthly_2025_01/.thumb.png.aa7e91683e6233d47a545c03574085a4.png"> </a>
		</p>

		<h2 id="csshtml">
			إضافة تنسيقات CSS إلى مستند HTML
		</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/" rel="">لغة CSS</a>، وسنشرح هنا بعض المفاهيم الأساسية لهذه اللغة: أولًا، ننشئ ملف <code>style.css</code> في مجلد المشروع:
		</p>

		<p style="text-align: center;">
			<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="165295" href="https://academy.hsoub.com/uploads/monthly_2025_01/155370744_.png.b5bebc99ee3b451b7fd94f127bde49e7.png" rel=""><img alt="ملف التنسيقات" class="ipsImage ipsImage_thumbnailed" data-fileid="165295" data-ratio="87.33" data-unique="selvc8icd" style="width: 300px; height: auto;" width="300" src="https://academy.hsoub.com/uploads/monthly_2025_01/155370744_.png.b5bebc99ee3b451b7fd94f127bde49e7.png"> </a>
		</p>

		<p>
			ثم نستورده import داخل مستند HTML بكتابة وسم <code>&lt;link&gt;</code> داخل الوسم <code>&lt;head&gt;</code> كما يلي:
		</p>

		<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_1112_23" style=""><span class="tag">&lt;head&gt;</span><span class="pln">
  </span><span class="tag">&lt;meta</span><span class="pln"> </span><span class="atn">charset</span><span class="pun">=</span><span class="atv">"utf-8"</span><span class="pln"> </span><span class="tag">/&gt;</span><span class="pln">
  </span><span class="tag">&lt;meta</span><span class="pln"> </span><span class="atn">name</span><span class="pun">=</span><span class="atv">"description"</span><span class="pln"> </span><span class="atn">content</span><span class="pun">=</span><span class="atv">"My Portfolio"</span><span class="pln"> </span><span class="tag">/&gt;</span><span class="pln">
  </span><span class="tag">&lt;meta</span><span class="pln"> </span><span class="atn">name</span><span class="pun">=</span><span class="atv">"keywords"</span><span class="pln"> </span><span class="atn">content</span><span class="pun">=</span><span class="atv">"HTML, CSS, JavaScript"</span><span class="pln"> </span><span class="tag">/&gt;</span><span class="pln">
  </span><span class="tag">&lt;meta</span><span class="pln"> </span><span class="atn">name</span><span class="pun">=</span><span class="atv">"author"</span><span class="pln"> </span><span class="atn">content</span><span class="pun">=</span><span class="atv">"Hsoub Academy"</span><span class="pln"> </span><span class="tag">/&gt;</span><span class="pln">
  </span><span class="tag">&lt;title&gt;</span><span class="pln">My Portfolio</span><span class="tag">&lt;/title&gt;</span><span class="pln">

  </span><span class="com">&lt;!-- ربط ملف CSS --&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">"style.css"</span><span class="tag">&gt;</span><span class="pln">
</span><span class="tag">&lt;/head&gt;</span></pre>

		<h3 id="responsivelayout">
			إنشاء تصميم متجاوب
		</h3>

		<p>
			علينا <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> لمعرض الأعمال، ولتحقيق ذلك يجب أن يحتوي تخطيط الصفحة على مكونين رئيسيين، هما الحاوية <code>container </code>ونظام التخطيط الشبكي <code>grid system</code>.
		</p>

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

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

		<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_1112_30" style=""><span class="com">/* الشاشات صغيرة الحجم */</span><span class="pln">
</span><span class="pun">.</span><span class="pln">container </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">100%</span><span class="pun">;</span><span class="pln">
  </span><span class="kwd">display</span><span class="pun">:</span><span class="pln"> flex</span><span class="pun">;</span><span class="pln">
  </span><span class="kwd">flex-wrap</span><span class="pun">:</span><span class="pln"> wrap</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

</span><span class="com">/* الشاشات كبيرة الحجم */</span><span class="pln">
</span><span class="kwd">@media</span><span class="pln"> only screen and </span><span class="pun">(</span><span class="kwd">min-width</span><span class="pun">:</span><span class="pln"> </span><span class="lit">1200px</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  </span><span class="pun">.</span><span class="pln">container </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">1140px</span><span class="pun">;</span><span class="pln">
    </span><span class="kwd">margin</span><span class="pun">:</span><span class="pln"> auto</span><span class="pun">;</span><span class="pln">
    </span><span class="kwd">display</span><span class="pun">:</span><span class="pln"> flex</span><span class="pun">;</span><span class="pln">
    </span><span class="kwd">flex-wrap</span><span class="pun">:</span><span class="pln"> wrap</span><span class="pun">;</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">
</span><span class="pun">}</span></pre>

		<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%B4%D8%A7%D9%85%D9%84-%D9%84%D8%B4%D8%B1%D8%AD-%D8%A7%D9%84%D9%86%D9%82%D8%A7%D8%B7-%D8%A7%D9%84%D8%AD%D8%AF%D9%8A%D8%A9-%D9%84%D8%B5%D9%81%D8%AD%D8%A7%D8%AA-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-%D8%A7%D9%84%D9%85%D8%AA%D8%AC%D8%A7%D9%88%D8%A8%D8%A9-r861/" rel="">نقطة حدّية breakpoint</a> واحدة لتبسيط الأمور، إذا كان عرض الشاشة أقل من 1200 بكسل، فإن الحاوية ستمتد إلى الحواف. أما إن كانت الشاشة أكبر من 1200 بكسل، فسيُضبَط الحد الأقصى لعرض الحاوية على القيمة 1140 بكسل. وفي الحالة الثانية ضبطنا قيمة الهامش على القيمة التلقائية <code>margin: auto;‎</code> للتأكد من أن الحاوية موجودة داخل حدود الشاشة دائمًا .
		</p>

		<p>
			فيما يلي النتيجة في حالة الشاشات صغيرة الحجم:
		</p>

		<p style="text-align: center;">
			<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="165277" href="https://academy.hsoub.com/uploads/monthly_2025_01/container-sm.png.7c63c4ac5d7081611d5bb145b424840b.png" rel=""><img alt="container sm" class="ipsImage ipsImage_thumbnailed" data-fileid="165277" data-ratio="155.33" data-unique="hsbxl3rko" style="width: 300px; height: auto;" width="300" src="https://academy.hsoub.com/uploads/monthly_2025_01/container-sm.thumb.png.ba8cd234c3bbe858fda0da6f825a0a0f.png"> </a>
		</p>

		<p>
			وفي حالة الشاشات متوسطة الحجم:
		</p>

		<p style="text-align: center;">
			<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="165276" href="https://academy.hsoub.com/uploads/monthly_2025_01/container-md.png.55617f241abc02ea018e6cad19180610.png" rel=""><img alt="container md" class="ipsImage ipsImage_thumbnailed" data-fileid="165276" data-ratio="74.75" data-unique="hcftltpyr" style="width: 400px; height: auto;" width="400" src="https://academy.hsoub.com/uploads/monthly_2025_01/container-md.thumb.png.0dd6b1d85cad11155f17508c5d5e6c29.png"> </a>
		</p>

		<p>
			وفي حالة الشاشات كبيرة الحجم:
		</p>

		<p style="text-align: center;">
			<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="165301" href="https://academy.hsoub.com/uploads/monthly_2025_01/container-lg.png.6a4074ed84bbb8b13214a85c00138c46.png" rel=""><img alt="container-lg.png" class="ipsImage ipsImage_thumbnailed" data-fileid="165301" data-ratio="32.33" data-unique="hh1jp2g6r" style="width: 600px; height: auto;" width="900" src="https://academy.hsoub.com/uploads/monthly_2025_01/container-lg.thumb.png.ca617f50596dbc31566000f1580218bc.png"></a>
		</p>

		<p>
			ثانياً، نحتاج إلى أنظمة <a href="https://academy.hsoub.com/programming/css/%D9%85%D9%81%D8%A7%D9%87%D9%8A%D9%85-%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A9-%D9%81%D9%8A-%D8%A7%D9%84%D8%AA%D8%B9%D8%A7%D9%85%D9%84-%D9%85%D8%B9-%D8%AA%D8%AE%D8%B7%D9%8A%D8%B7-%D8%A7%D9%84%D8%B4%D8%A8%D9%83%D8%A9-grid-layout-r527/" rel="">تخطيط شبكي</a> مختلفة <code>grid systems</code> للشاشات الصغيرة كشاشات الهواتف المحمولة، والشاشات المتوسطة كشاشات الأجهزة اللوحية، والشاشات الكبيرة كحواسيب سطح المكتب. يحتوي كل نظام شبكي على 12 عمودًا، وقد تشغل العناصر المختلفة أعمدة مختلفة باختلاف أنواع الشاشات، يمكن تحقيق ذلك إما عن طريق <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-%D9%88%D9%8A%D8%A8-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D8%AA%D8%AE%D8%B7%D9%8A%D8%B7-%D8%A7%D9%84%D8%B4%D8%A8%D9%83%D8%A9-grid-%D9%81%D9%8A-css-r2282/" rel="">نظام الشبكة العادي regular grid system</a> أو <a href="https://academy.hsoub.com/programming/css/%D8%AA%D8%AE%D8%B7%D9%8A%D8%B7-%D8%A7%D9%84%D8%B5%D9%86%D8%AF%D9%88%D9%82-%D8%A7%D9%84%D9%85%D8%B1%D9%86-flexbox-%D9%81%D9%8A-%D8%B5%D9%81%D8%AD%D8%A7%D8%AA-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-r2279/" rel="">الصندوق المرن flexbox</a>. لكننا سنستخدم في مقالنا تخطيط الصندوق المرن:
		</p>

		<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_1112_35" style=""><span class="tag">&lt;body&gt;</span><span class="pln">
  </span><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"container"</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">"col-6 col-s-8"</span><span class="tag">&gt;</span><span class="pln">Div1</span><span class="tag">&lt;/div&gt;</span><span class="pln">
    </span><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"col-6 col-s-4"</span><span class="tag">&gt;</span><span class="pln">Div2</span><span class="tag">&lt;/div&gt;</span><span class="pln">

    </span><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"col-2 col-s-10"</span><span class="tag">&gt;</span><span class="pln">Div3</span><span class="tag">&lt;/div&gt;</span><span class="pln">
    </span><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"col-4 col-s-2"</span><span class="tag">&gt;</span><span class="pln">Div4</span><span class="tag">&lt;/div&gt;</span><span class="pln">
  </span><span class="tag">&lt;/div&gt;</span><span class="pln">
</span><span class="tag">&lt;/body&gt;</span></pre>

		<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_1112_37" style=""><span class="com">/* للهواتف المحمولة */</span><span class="pln">
</span><span class="pun">[</span><span class="pln">class</span><span class="pun">*=</span><span class="str">"col-"</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">100%</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

</span><span class="com">/* للأجهزة اللوحية */</span><span class="pln">
</span><span class="kwd">@media</span><span class="pln"> only screen and </span><span class="pun">(</span><span class="kwd">min-width</span><span class="pun">:</span><span class="pln"> </span><span class="lit">600px</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  </span><span class="pun">.</span><span class="pln">col-s-1 </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">8.33%</span><span class="pun">;</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">
  </span><span class="pun">.</span><span class="pln">col-s-2 </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">16.66%</span><span class="pun">;</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">
  </span><span class="pun">.</span><span class="pln">col-s-3 </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">25%</span><span class="pun">;</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">
  </span><span class="pun">.</span><span class="pln">col-s-4 </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">33.33%</span><span class="pun">;</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">
  </span><span class="pun">.</span><span class="pln">col-s-5 </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">41.66%</span><span class="pun">;</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">
  </span><span class="pun">.</span><span class="pln">col-s-6 </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">50%</span><span class="pun">;</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">
  </span><span class="pun">.</span><span class="pln">col-s-7 </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">58.33%</span><span class="pun">;</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">
  </span><span class="pun">.</span><span class="pln">col-s-8 </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">66.66%</span><span class="pun">;</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">
  </span><span class="pun">.</span><span class="pln">col-s-9 </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">75%</span><span class="pun">;</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">
  </span><span class="pun">.</span><span class="pln">col-s-10 </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">83.33%</span><span class="pun">;</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">
  </span><span class="pun">.</span><span class="pln">col-s-11 </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">91.66%</span><span class="pun">;</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">
  </span><span class="pun">.</span><span class="pln">col-s-12 </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="pun">}</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

</span><span class="com">/* للحواسيب المكتبية */</span><span class="pln">
</span><span class="kwd">@media</span><span class="pln"> only screen and </span><span class="pun">(</span><span class="kwd">min-width</span><span class="pun">:</span><span class="pln"> </span><span class="lit">768px</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  </span><span class="pun">.</span><span class="pln">col-1 </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">8.33%</span><span class="pun">;</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">
  </span><span class="pun">.</span><span class="pln">col-2 </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">16.66%</span><span class="pun">;</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">
  </span><span class="pun">.</span><span class="pln">col-3 </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">25%</span><span class="pun">;</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">
  </span><span class="pun">.</span><span class="pln">col-4 </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">33.33%</span><span class="pun">;</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">
  </span><span class="pun">.</span><span class="pln">col-5 </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">41.66%</span><span class="pun">;</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">
  </span><span class="pun">.</span><span class="pln">col-6 </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">50%</span><span class="pun">;</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">
  </span><span class="pun">.</span><span class="pln">col-7 </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">58.33%</span><span class="pun">;</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">
  </span><span class="pun">.</span><span class="pln">col-8 </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">66.66%</span><span class="pun">;</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">
  </span><span class="pun">.</span><span class="pln">col-9 </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">75%</span><span class="pun">;</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">
  </span><span class="pun">.</span><span class="pln">col-10 </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">83.33%</span><span class="pun">;</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">
  </span><span class="pun">.</span><span class="pln">col-11 </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">91.66%</span><span class="pun">;</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">
  </span><span class="pun">.</span><span class="pln">col-12 </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="pun">}</span><span class="pln">
</span><span class="pun">}</span></pre>

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

		<p>
			على الشاشات الصغيرة:
		</p>

		<p style="text-align: center;">
			<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="165280" href="https://academy.hsoub.com/uploads/monthly_2025_01/flex-sm.png.56a13e980d953e401be31843a042c4bc.png" rel=""><img alt="flex sm" class="ipsImage ipsImage_thumbnailed" data-fileid="165280" data-ratio="154.33" data-unique="c90zlmb89" style="width: 300px; height: auto;" width="300" src="https://academy.hsoub.com/uploads/monthly_2025_01/flex-sm.thumb.png.f1f21d716499618515fc2b3e85d1a7a4.png"> </a>
		</p>

		<p>
			على الشاشات المتوسطة:
		</p>

		<p style="text-align: center;">
			<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="165279" href="https://academy.hsoub.com/uploads/monthly_2025_01/flex-md.png.e5a0cd062ba214963309079b7703b141.png" rel=""><img alt="flex md" class="ipsImage ipsImage_thumbnailed" data-fileid="165279" data-ratio="76.50" data-unique="9onv84rq7" style="width: 400px; height: auto;" width="400" src="https://academy.hsoub.com/uploads/monthly_2025_01/flex-md.thumb.png.7641535d803a78aa2ac583dd206477f4.png"> </a>
		</p>

		<p>
			على الشاشات الكبيرة:
		</p>

		<p style="text-align: center;">
			<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="165278" href="https://academy.hsoub.com/uploads/monthly_2025_01/flex-lg.png.e367b978f0a627516d12a054d4016a2e.png" rel=""><img alt="flex lg" class="ipsImage ipsImage_thumbnailed" data-fileid="165278" data-ratio="14.60" data-unique="shnwr88b4" style="width: 500px; height: auto;" width="500" src="https://academy.hsoub.com/uploads/monthly_2025_01/flex-lg.thumb.png.e3a69b2cf50afdc5c746cb1fe12c101f.png"> </a>
		</p>

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

		<ul>
			<li>
				<a href="https://www.ericsdevblog.com/posts/create-a-portfolio-website/images/small-screen-layout.png" rel="external nofollow">تصميم الشاشات الصغيرة</a>
			</li>
			<li>
				<a href="https://www.ericsdevblog.com/posts/create-a-portfolio-website/images/medium-screen-layout.png" rel="external nofollow">تصميم الشاشات المتوسطة</a>
			</li>
			<li>
				<a href="https://www.ericsdevblog.com/posts/create-a-portfolio-website/images/large-screen-layout.png" rel="external nofollow">تصميم الشاشات الصغيرة</a>
			</li>
		</ul>

		<h3>
			اختيار الألوان والخطوط
		</h3>

		<p>
			قبل استكمال العمل على تنسيق صفحة الويب، دعونا نفكر في اختيار نظام الألوان والخط الذي ستستخدمه. قد يكون ذلك صعبًا، لكن هناك عديد من الأدوات التي يمكن أن تساعدنا في تحقيق المطلوب،على سبيل المثال يمكن استخدام <a href="https://coolors.co/" rel="external nofollow">موقع Coolors</a> الذي يقدم مئات لوحات الألوان المختلفة مع رموزها. أما بالنسبة للخطوط، فننصح باستخدام <a href="https://fonts.google.com/" rel="external nofollow">Google Fonts</a> إذ يمكن تحديد أي خط واستخدامه في ملف CSS.
		</p>

		<p style="text-align: center;">
			<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="165281" href="https://academy.hsoub.com/uploads/monthly_2025_01/google-fonts.png.7b9f59668e421520755718e44ce0095f.png" rel=""><img alt="google fonts" class="ipsImage ipsImage_thumbnailed" data-fileid="165281" data-unique="y1m6kxa04" style="width: 500px; height: auto;" src="https://academy.hsoub.com/uploads/monthly_2025_01/google-fonts.thumb.png.ef7335b03933bd63387a510a9749a5b9.png"> </a>
		</p>

		<p>
			اخترنا في حالتنا الخطوط التالية:
		</p>

		<ul>
			<li>
				Comfortaa بوزن 700
			</li>
			<li>
				Courier Prime بأوزان 400 و 700 ونوع monospace
			</li>
			<li>
				Crimson Text بأوزان 400 و 600 و 700
			</li>
			<li>
				Poppins بأوزان 200 و 300 و 400 و 500 و 600 و 700
			</li>
		</ul>

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

		<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_1112_42" style=""><span class="kwd">@import</span><span class="pln"> </span><span class="kwd">url</span><span class="pun">(</span><span class="str">"https://fonts.googleapis.com/css2?family=Comfortaa:wght@700&amp;family=Courier+Prime:ital,wght@0,400;0,700;1,400;1,700&amp;family=Crimson+Text:ital,wght@0,400;0,600;0,700;1,400;1,600;1,700&amp;family=Poppins:ital,wght@0,200;0,300;0,400;0,500;0,600;0,700;1,200;1,300;1,400;1,500;1,600;1,700&amp;display=swap"</span><span class="pun">);</span></pre>

		<p>
			بمجرد استيراد هذه الخطوط عبر <code>‎@import</code> يمكننا تطبيقها على العناصر في صفحة HTML باستخدام CSS كما يلي:
		</p>

		<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_1112_44" style=""><span class="pln">h1 </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">"Comfortaa"</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">

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="kwd">font-family</span><span class="pun">:</span><span class="pln"> </span><span class="str">"Crimson Text"</span><span class="pun">,</span><span class="pln"> serif</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

p</span><span class="pun">,</span><span class="pln">
a </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">"Poppins"</span><span class="pun">,</span><span class="pln"> sans-serif</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></pre>

		<h2 id="-2">
			تنسيق مظهر أقسام الصفحة
		</h2>

		<p>
			لنطبق التنسيقات على كل قسم من الأقسام التي أضفناها لملف HTML
		</p>

		<h3 id="-3">
			تنسيق مظهر شريط التنقل
		</h3>

		<p>
			عند تصميم صفحات الويب، يجب عليك دائمًا اتباع قاعدة الجوال أولاً mobile first. أي علينا أولًا البدء بتصميم تخطيط الشاشة الصغيرة. سنبدأ بشريط التنقل. أولاً، نضع العنصر <code>&lt;header&gt;</code> و <code>&lt;nav&gt;</code> داخل العنصر<code>&lt;div&gt;</code>. إذ يقبل العنصر <code>&lt;div&gt;</code> إثني عشر عمودًا في جميع الأجهزة.
		</p>

		<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_1112_46" style=""><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"col-12 col-s-12 header-and-nav"</span><span class="tag">&gt;</span><span class="pln">
  </span><span class="tag">&lt;header&gt;</span><span class="pln">. . .</span><span class="tag">&lt;/header&gt;</span><span class="pln">
  </span><span class="tag">&lt;nav&gt;</span><span class="pln">. . .</span><span class="tag">&lt;/nav&gt;</span><span class="pln">
</span><span class="tag">&lt;/div&gt;</span></pre>

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

		<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_1112_48" style=""><span class="pun">.</span><span class="pln">header-and-nav </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">display</span><span class="pun">:</span><span class="pln"> flex</span><span class="pun">;</span><span class="pln">
  </span><span class="kwd">flex-wrap</span><span class="pun">:</span><span class="pln"> wrap</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></pre>

		<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_1112_50" style=""><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"col-12 col-s-12 header-and-nav"</span><span class="tag">&gt;</span><span class="pln">
  </span><span class="tag">&lt;header</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"col-4 col-s-4"</span><span class="tag">&gt;</span><span class="pln">. . .</span><span class="tag">&lt;/header&gt;</span><span class="pln">

  </span><span class="tag">&lt;nav</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"col-8 col-s-8"</span><span class="tag">&gt;</span><span class="pln">. . .</span><span class="tag">&lt;/nav&gt;</span><span class="pln">
</span><span class="tag">&lt;/div&gt;</span></pre>

		<p>
			والآن علينا وضع الترويسة وقائمة التنقل في منتصف الصفحة، كما يلي:
		</p>

		<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_6803_11" style=""><span class="com">&lt;!--Header and Navigation Bar--&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">"col-12 col-s-12 header-and-nav"</span><span class="tag">&gt;</span><span class="pln">
  </span><span class="tag">&lt;header</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"col-4 col-s-4 header"</span><span class="tag">&gt;</span><span class="pln">
    </span><span class="tag">&lt;h1&gt;</span><span class="pln">Simple Portfolio</span><span class="tag">&lt;/h1&gt;</span><span class="pln">
  </span><span class="tag">&lt;/header&gt;</span><span class="pln">
  </span><span class="tag">&lt;nav</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"col-8 col-s-8"</span><span class="tag">&gt;</span><span class="pln">
    </span><span class="tag">&lt;ul</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"nav-list"</span><span class="tag">&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">"nav-item"</span><span class="tag">&gt;</span><span class="pln">
        </span><span class="tag">&lt;a</span><span class="pln"> </span><span class="atn">href</span><span class="pun">=</span><span class="atv">"./portfolio.html"</span><span class="tag">&gt;</span><span class="pln">Home</span><span class="tag">&lt;/a&gt;</span><span class="pln">
      </span><span class="tag">&lt;/li&gt;</span><span class="pln">
      . . .
    </span><span class="tag">&lt;/ul&gt;</span><span class="pln">
  </span><span class="tag">&lt;/nav&gt;</span><span class="pln">
</span><span class="tag">&lt;/div&gt;</span></pre>

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

</span><span class="pun">.</span><span class="pln">nav-list </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">

</span><span class="pun">.</span><span class="pln">nav-item </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">display</span><span class="pun">:</span><span class="pln"> inline-block</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

</span><span class="pun">.</span><span class="pln">nav-item a </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">display</span><span class="pun">:</span><span class="pln"> inline-block</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="165284" href="https://academy.hsoub.com/uploads/monthly_2025_01/266914373_.png.bd57efcee53bc024e723a46e5d69aab0.png" rel=""><img alt="الترويسة وقائمة التنقل" class="ipsImage ipsImage_thumbnailed" data-fileid="165284" data-ratio="41.33" data-unique="24dkuq5s8" style="width: 300px; height: auto;" width="300" src="https://academy.hsoub.com/uploads/monthly_2025_01/266914373_.png.bd57efcee53bc024e723a46e5d69aab0.png"> </a>
		</p>

		<p>
			والآن سنضيف بعض الألوان والحشو <a href="https://wiki.hsoub.com/CSS/padding" rel="external">paddings </a>والهوامش <a href="https://wiki.hsoub.com/CSS/margin" rel="external">margins</a> وزخارف نصية للترويسة وقائمة التنقل لجعلها أكثر احترافية:
		</p>

		<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_1112_58" style=""><span class="pun">.</span><span class="pln">header </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-align</span><span class="pun">:</span><span class="pln"> center</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

</span><span class="pun">.</span><span class="pln">nav-list </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">list-style-type</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">0px</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">0px</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">

</span><span class="pun">.</span><span class="pln">nav-item </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">display</span><span class="pun">:</span><span class="pln"> inline-block</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

</span><span class="pun">.</span><span class="pln">nav-item a </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">display</span><span class="pun">:</span><span class="pln"> inline-block</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-decoration</span><span class="pun">:</span><span class="pln"> none</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">27px</span><span class="pln"> </span><span class="lit">20px</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

</span><span class="pun">.</span><span class="pln">nav-item </span><span class="kwd">a</span><span class="pun">:</span><span class="pln">hover </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">#457b9d</span><span class="pun">;</span><span class="pln">
  </span><span class="kwd">text-decoration</span><span class="pun">:</span><span class="pln"> underline</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="165282" href="https://academy.hsoub.com/uploads/monthly_2025_01/669719178_.png.d5f7c89d373a3c6a4b1c02f0a2f2906b.png" rel=""><img alt="الترويسة وقائمة التنقل بعد التنسيق" class="ipsImage ipsImage_thumbnailed" data-fileid="165282" data-ratio="32.67" data-unique="1b1ew9wzj" style="width: 300px; height: auto;" width="300" src="https://academy.hsoub.com/uploads/monthly_2025_01/669719178_.png.d5f7c89d373a3c6a4b1c02f0a2f2906b.png"> </a>
		</p>

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

		<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_1112_61" style=""><span class="kwd">@media</span><span class="pln"> only screen and </span><span class="pun">(</span><span class="kwd">min-width</span><span class="pun">:</span><span class="pln"> </span><span class="lit">768px</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  </span><span class="pun">.</span><span class="pln">nav-list </span><span class="pun">{</span><span class="pln">
    </span><span class="kwd">list-style-type</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">0px</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">0px</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><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="165283" href="https://academy.hsoub.com/uploads/monthly_2025_01/1256324451_.png.31f81c304f8f63b5650e67ee8b038204.png" rel=""><img alt="الترويسة وقائمة التنقل محاذاة لليمين" class="ipsImage ipsImage_thumbnailed" data-fileid="165283" data-unique="ruwb1p383" style="width: 600px; height: auto;" src="https://academy.hsoub.com/uploads/monthly_2025_01/.thumb.png.3c67e953642fa34dcf328db7ec7a32d1.png"> </a>
		</p>

		<h3 id="-4">
			تنسيق مظهر قسم التعريف الشخصي
		</h3>

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

		<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_1112_63" style=""><span class="com">&lt;!--Self Introduction Section--&gt;</span><span class="pln">
</span><span class="tag">&lt;section</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"col-12 col-s-12 self-intro"</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">"./images/profile-image.jpg"</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"col-4 col-s-4 profile-image"</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">"col-8 col-s-8 self-intro-text"</span><span class="tag">&gt;</span><span class="pln">
    </span><span class="tag">&lt;h2&gt;</span><span class="pln">Welcome to My Portfolio</span><span class="tag">&lt;/h2&gt;</span><span class="pln">
    </span><span class="tag">&lt;p&gt;</span><span class="pln">. . .</span><span class="tag">&lt;/p&gt;</span><span class="pln">
  </span><span class="tag">&lt;/div&gt;</span><span class="pln">
</span><span class="tag">&lt;/section&gt;</span></pre>

		<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_1112_65" style=""><span class="com">/* Self Introduction Section */</span><span class="pln">
</span><span class="pun">.</span><span class="pln">self-intro </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">display</span><span class="pun">:</span><span class="pln"> flex</span><span class="pun">;</span><span class="pln">
  </span><span class="kwd">align-items</span><span class="pun">:</span><span class="pln"> center</span><span class="pun">;</span><span class="pln">
  </span><span class="kwd">gap</span><span class="pun">:</span><span class="pln"> </span><span class="lit">20px</span><span class="pun">;</span><span class="pln">
  </span><span class="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">background-color</span><span class="pun">:</span><span class="pln"> </span><span class="lit">#f8f8f2</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

</span><span class="pun">.</span><span class="pln">profile-image </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">flex</span><span class="pun">:</span><span class="pln"> </span><span class="lit">0</span><span class="pln"> </span><span class="lit">0</span><span class="pln"> </span><span class="lit">40%</span><span class="pun">;</span><span class="pln">
  </span><span class="kwd">height</span><span class="pun">:</span><span class="pln"> auto</span><span class="pun">;</span><span class="pln">
  </span><span class="kwd">object-fit</span><span class="pun">:</span><span class="pln"> cover</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

</span><span class="pun">.</span><span class="pln">self-intro-text </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">flex</span><span class="pun">:</span><span class="pln"> </span><span class="lit">1</span><span class="pun">;</span><span class="pln">
  </span><span class="kwd">text-align</span><span class="pun">:</span><span class="pln"> left</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

</span><span class="pun">.</span><span class="pln">self-intro-text h2 </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.8rem</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">margin-bottom</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">text-decoration</span><span class="pun">:</span><span class="pln"> underline</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></pre>

		<p style="text-align: center;">
			<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="165287" href="https://academy.hsoub.com/uploads/monthly_2025_01/646405387_.png.a6625ae93febcc9718353ed5a51d2297.png" rel=""><img alt="تنسيق قسم التعريف الشخصي" class="ipsImage ipsImage_thumbnailed" data-fileid="165287" data-ratio="41.00" data-unique="vss0vo0cq" style="width: 400px; height: auto;" width="400" src="https://academy.hsoub.com/uploads/monthly_2025_01/.thumb.png.c827d34aeb38e1fbb49c2207dd8e566d.png"> </a>
		</p>

		<h3 id="-5">
			تنسيق مظهر قسم الرسائل الإخبارية
		</h3>

		<p>
			فيما يلي شكل قسم التسجيل في الرسائل الإخبارية والشيفرة اللازمة:
		</p>

		<p>
			على الشاشات الكبيرة:
		</p>

		<p style="text-align: center;">
			<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="165291" href="https://academy.hsoub.com/uploads/monthly_2025_01/675889935_.png.2af39a9050510373c49fe5da349fb9f7.png" rel=""><img alt="قسم التسجيل على الشاشات الكبيرة" class="ipsImage ipsImage_thumbnailed" data-fileid="165291" data-ratio="29.50" data-unique="424bp8c88" style="width: 400px; height: auto;" width="400" src="https://academy.hsoub.com/uploads/monthly_2025_01/.thumb.png.955babb77b11f3802b3c581c7e7d140a.png"> </a>
		</p>

		<p>
			على الشاشات الصغيرة:
		</p>

		<p style="text-align: center;">
			<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="165290" href="https://academy.hsoub.com/uploads/monthly_2025_01/1677849882_.png.4459632bdf953e23e299515b54722873.png" rel=""><img alt="قسم التسجيل على الشاشات الصغيرة" class="ipsImage ipsImage_thumbnailed" data-fileid="165290" data-ratio="82.67" data-unique="fq4l4q7hi" style="width: 300px; height: auto;" width="300" src="https://academy.hsoub.com/uploads/monthly_2025_01/1677849882_.png.4459632bdf953e23e299515b54722873.png"> </a>
		</p>

		<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_1112_70" style=""><span class="com">&lt;!--Newsletter Sign Up Section--&gt;</span><span class="pln">
      </span><span class="tag">&lt;section</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"col-12 col-s-12 newsletter-signup"</span><span class="tag">&gt;</span><span class="pln">
        </span><span class="tag">&lt;h2</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"col-6 col-s-6"</span><span class="tag">&gt;</span><span class="pln">Would you like to see more tips and tutorials on web development?</span><span class="tag">&lt;/h2&gt;</span><span class="pln">
        </span><span class="tag">&lt;form</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"col-6 col-s-6 newsletter-signup-form"</span><span class="tag">&gt;</span><span class="pln">
          </span><span class="tag">&lt;label</span><span class="pln"> </span><span class="atn">for</span><span class="pun">=</span><span class="atv">"firstname"</span><span class="tag">&gt;</span><span class="pln">First Name:</span><span class="tag">&lt;/label&gt;&lt;br</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">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">"firstname"</span><span class="pln"> </span><span class="tag">/&gt;</span><span class="pln">
          </span><span class="tag">&lt;br</span><span class="pln"> </span><span class="tag">/&gt;</span><span class="pln">
          </span><span class="tag">&lt;label</span><span class="pln"> </span><span class="atn">for</span><span class="pun">=</span><span class="atv">"lastname"</span><span class="tag">&gt;</span><span class="pln">Last Name:</span><span class="tag">&lt;/label&gt;&lt;br</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">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">"lastname"</span><span class="pln"> </span><span class="tag">/&gt;</span><span class="pln">
          </span><span class="tag">&lt;br</span><span class="pln"> </span><span class="tag">/&gt;</span><span class="pln">
          </span><span class="tag">&lt;label</span><span class="pln"> </span><span class="atn">for</span><span class="pun">=</span><span class="atv">"email"</span><span class="tag">&gt;</span><span class="pln">Enter your email:</span><span class="tag">&lt;/label&gt;&lt;br</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">type</span><span class="pun">=</span><span class="atv">"email"</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"email"</span><span class="pln"> </span><span class="atn">name</span><span class="pun">=</span><span class="atv">"email"</span><span class="pln"> </span><span class="tag">/&gt;</span><span class="pln">
          </span><span class="tag">&lt;button</span><span class="pln"> </span><span class="atn">type</span><span class="pun">=</span><span class="atv">"submit"</span><span class="tag">&gt;</span><span class="pln">Submit</span><span class="tag">&lt;/button&gt;</span><span class="pln">
        </span><span class="tag">&lt;/form&gt;</span><span class="pln">
      </span><span class="tag">&lt;/section&gt;</span></pre>

		<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_1112_72" style=""><span class="com">/*  قسم التسجيل في الرسائل الإخبارية */</span><span class="pln">
</span><span class="pun">.</span><span class="pln">newsletter-signup </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">#a8dadc</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">display</span><span class="pun">:</span><span class="pln"> flex</span><span class="pun">;</span><span class="pln">
  </span><span class="kwd">flex-wrap</span><span class="pun">:</span><span class="pln"> wrap</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

</span><span class="pun">.</span><span class="pln">newsletter-signup h2 </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">

</span><span class="pun">.</span><span class="pln">newsletter-signup-form </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="pun">}</span><span class="pln">

</span><span class="pun">.</span><span class="pln">newsletter-signup-form label </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">"Poppins"</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">

</span><span class="pun">.</span><span class="pln">newsletter-signup-form input </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">padding</span><span class="pun">:</span><span class="pln"> </span><span class="lit">12px</span><span class="pln"> </span><span class="lit">20px</span><span class="pun">;</span><span class="pln">
  </span><span class="kwd">margin</span><span class="pun">:</span><span class="pln"> </span><span class="lit">8px</span><span class="pln"> </span><span class="lit">0</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">newsletter-signup-form button </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">#a8dadc</span><span class="pun">;</span><span class="pln">
  </span><span class="kwd">border</span><span class="pun">:</span><span class="pln"> solid </span><span class="lit">3px</span><span class="pln"> </span><span class="lit">#e63946</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">#e63946</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">padding</span><span class="pun">:</span><span class="pln"> </span><span class="lit">10px</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">10px</span><span class="pln"> </span><span class="lit">0</span><span class="pun">;</span><span class="pln">
  </span><span class="kwd">cursor</span><span class="pun">:</span><span class="pln"> pointer</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">"Poppins"</span><span class="pun">,</span><span class="pln"> sans-serif</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">1em</span><span class="pun">;</span><span class="pln">
  </span><span class="kwd">font-weight</span><span class="pun">:</span><span class="pln"> </span><span class="lit">600</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

</span><span class="pun">.</span><span class="pln">newsletter-signup-form </span><span class="kwd">button</span><span class="pun">:</span><span class="pln">hover </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">#e63946</span><span class="pun">;</span><span class="pln">
  </span><span class="kwd">border</span><span class="pun">:</span><span class="pln"> solid </span><span class="lit">3px</span><span class="pln"> </span><span class="lit">#e63946</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><span class="pln">

</span><span class="kwd">@media</span><span class="pln"> only screen and </span><span class="pun">(</span><span class="kwd">min-width</span><span class="pun">:</span><span class="pln"> </span><span class="lit">768px</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  </span><span class="pun">.</span><span class="pln">newsletter-signup </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">#a8dadc</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">display</span><span class="pun">:</span><span class="pln"> flex</span><span class="pun">;</span><span class="pln">
    </span><span class="kwd">flex-wrap</span><span class="pun">:</span><span class="pln"> wrap</span><span class="pun">;</span><span class="pln">
    </span><span class="kwd">align-items</span><span class="pun">:</span><span class="pln"> center</span><span class="pun">;</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">
  </span><span class="pun">.</span><span class="pln">newsletter-signup h2 </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">padding</span><span class="pun">:</span><span class="pln"> </span><span class="lit">10px</span><span class="pun">;</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">
</span><span class="pun">}</span></pre>

		<h3 id="-6">
			تنسيق مظهر قسم المهارات
		</h3>

		<p style="text-align: center;">
			<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="165294" href="https://academy.hsoub.com/uploads/monthly_2025_01/70380239_.png.b8b4a4680a31c420fe9652898cbf701c.png" rel=""><img alt="قسم المهارات بعد التنسيق" class="ipsImage ipsImage_thumbnailed" data-fileid="165294" data-ratio="40.33" data-unique="r3gnckl34" style="width: 300px; height: auto;" width="300" src="https://academy.hsoub.com/uploads/monthly_2025_01/.thumb.png.f0e39f1ac42e0853d7904329e37183f5.png"> </a>
		</p>

		<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_1112_75" style=""><span class="com">&lt;!--</span><span class="pln">Skills Section--</span><span class="pun">&gt;</span><span class="pln">
</span><span class="pun">&lt;</span><span class="pln">section class</span><span class="pun">=</span><span class="str">"col-12 col-s-12 skills-section"</span><span class="pun">&gt;</span><span class="pln">
  </span><span class="pun">&lt;</span><span class="pln">h2 class</span><span class="pun">=</span><span class="str">"col-12 col-s-12"</span><span class="pun">&gt;</span><span class="pln">My Skills</span><span class="pun">&lt;/</span><span class="pln">h2</span><span class="pun">&gt;</span><span class="pln">
  </span><span class="pun">&lt;</span><span class="pln">ul class</span><span class="pun">=</span><span class="str">"col-8 col-s-8 skills-list"</span><span class="pun">&gt;</span><span class="pln">
    </span><span class="pun">&lt;</span><span class="pln">li</span><span class="pun">&gt;</span><span class="pln">HTML </span><span class="pun">(</span><span class="lit">100%</span><span class="pun">)&lt;/</span><span class="pln">li</span><span class="pun">&gt;</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">&lt;/</span><span class="pln">ul</span><span class="pun">&gt;</span><span class="pln">
</span><span class="pun">&lt;/</span><span class="pln">section</span><span class="pun">&gt;</span></pre>

		<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_1112_77" style=""><span class="com">/* قسم المهارات */</span><span class="pln">
</span><span class="pun">.</span><span class="pln">skills-section </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">display</span><span class="pun">:</span><span class="pln"> flex</span><span class="pun">;</span><span class="pln">
  </span><span class="kwd">flex-wrap</span><span class="pun">:</span><span class="pln"> wrap</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

</span><span class="pun">.</span><span class="pln">skills-section h2 </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">text-decoration</span><span class="pun">:</span><span class="pln"> underline</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

</span><span class="pun">.</span><span class="pln">skills-list </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">column-count</span><span class="pun">:</span><span class="pln"> </span><span class="lit">2</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

</span><span class="kwd">@media</span><span class="pln"> only screen and </span><span class="pun">(</span><span class="kwd">min-width</span><span class="pun">:</span><span class="pln"> </span><span class="lit">768px</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  </span><span class="pun">.</span><span class="pln">skills-list </span><span class="pun">{</span><span class="pln">
    </span><span class="kwd">column-count</span><span class="pun">:</span><span class="pln"> </span><span class="lit">2</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="pun">}</span><span class="pln">
</span><span class="pun">}</span></pre>

		<p>
			لاحظ أننا جعلنا عدد الأعمدة اثنين <code>column-count: 2;‎</code>، كي نعرض قائمة المهارات في عمودين.
		</p>

		<h3 id="-7">
			تنسيق مظهر قسم المشاريع
		</h3>

		<p>
			نريد عرض قسم المشاريع على الشاشة الكبيرة كما يلي:
		</p>

		<p style="text-align: center;">
			<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="165293" href="https://academy.hsoub.com/uploads/monthly_2025_01/1376932303_.png.4f15919da11d5060fc8440d675fffca8.png" rel=""><img alt="قسم المشاريع على الشاشات الكبيرة" class="ipsImage ipsImage_thumbnailed" data-fileid="165293" data-ratio="66.00" data-unique="5goa5al4d" style="width: 400px; height: auto;" width="400" src="https://academy.hsoub.com/uploads/monthly_2025_01/1376932303_.png.4f15919da11d5060fc8440d675fffca8.png"> </a>
		</p>

		<p>
			وعرضها على الشاشات الصغيرة كما يلي:
		</p>

		<p style="text-align: center;">
			<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="165292" href="https://academy.hsoub.com/uploads/monthly_2025_01/924287392_.png.17814c6eebe2e0b061840bd9dfee03b4.png" rel=""><img alt="قسم المشاريع على الشاشات الصغيرة" class="ipsImage ipsImage_thumbnailed" data-fileid="165292" data-ratio="149.67" data-unique="p4w5s8jj1" style="width: 300px; height: auto;" width="300" src="https://academy.hsoub.com/uploads/monthly_2025_01/924287392_.png.17814c6eebe2e0b061840bd9dfee03b4.png"> </a>
		</p>

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

		<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_1112_81" style=""><span class="com">&lt;!--Projects Section--&gt;</span><span class="pln">

</span><span class="tag">&lt;section</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"col-12 col-s-12 porject-section"</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"project"</span><span class="tag">&gt;</span><span class="pln">
  </span><span class="tag">&lt;h2</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"col-12 col-s-12"</span><span class="tag">&gt;</span><span class="pln">My Projects</span><span class="tag">&lt;/h2&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">"col-4 col-s-4"</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">"project-card"</span><span class="tag">&gt;</span><span class="pln">
      </span><span class="tag">&lt;h3&gt;</span><span class="pln">First Project</span><span class="tag">&lt;/h3&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">"/frontend/images/p1.jpg"</span><span class="pln"> </span><span class="tag">/&gt;</span><span class="pln">
      </span><span class="tag">&lt;p&gt;</span><span class="pln">. . .</span><span class="tag">&lt;/p&gt;</span><span class="pln">
    </span><span class="tag">&lt;/div&gt;</span><span class="pln">
  </span><span class="tag">&lt;/div&gt;</span><span class="pln">
  . . .
</span><span class="tag">&lt;/section&gt;</span></pre>

		<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_1112_83" style=""><span class="com">/* قسم المشاريع */</span><span class="pln">
</span><span class="pun">.</span><span class="pln">porject-section </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">display</span><span class="pun">:</span><span class="pln"> flex</span><span class="pun">;</span><span class="pln">
  </span><span class="kwd">flex-wrap</span><span class="pun">:</span><span class="pln"> wrap</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">#a8dadc</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

</span><span class="pun">.</span><span class="pln">porject-section h2 </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">text-decoration</span><span class="pun">:</span><span class="pln"> underline</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

</span><span class="pun">.</span><span class="pln">project-card </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">border</span><span class="pun">:</span><span class="pln"> solid </span><span class="lit">2px</span><span class="pln"> gray</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">5px</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">5px</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">5px</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

</span><span class="pun">.</span><span class="pln">project-card img </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">100%</span><span class="pun">;</span><span class="pln">
  </span><span class="kwd">object-fit</span><span class="pun">:</span><span class="pln"> cover</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></pre>

		<h3 id="-8">
			تنسيق مظهر تذييل الصفحة
		</h3>

		<p>
			نريد عرض تذييل الصفحة بالشكل التالي:
		</p>

		<p style="text-align: center;">
			<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="165286" href="https://academy.hsoub.com/uploads/monthly_2025_01/982534164_.png.653b15057bf4700ec5a950d28fe45f20.png" rel=""><img alt="تذييل الصفحة بعد التنسيق" class="ipsImage ipsImage_thumbnailed" data-fileid="165286" data-unique="lp4tv0afm" style="width: 600px; height: auto;" src="https://academy.hsoub.com/uploads/monthly_2025_01/.thumb.png.9662c620fac8c6c3b721652cfcb0d718.png"> </a>
		</p>

		<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_1112_87" style=""><span class="com">&lt;!--Footer--&gt;</span><span class="pln">

</span><span class="tag">&lt;footer</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"col-12 col-s-12 footer"</span><span class="tag">&gt;</span><span class="pln">
  </span><span class="tag">&lt;p&gt;</span><span class="pln">Created by Hsoub Academy</span><span class="tag">&lt;/p&gt;</span><span class="pln">
  </span><span class="tag">&lt;p&gt;&lt;a</span><span class="pln"> </span><span class="atn">href</span><span class="pun">=</span><span class="atv">"mailto:example@email.com"</span><span class="tag">&gt;</span><span class="pln">example@email.com</span><span class="tag">&lt;/a&gt;&lt;/p&gt;</span><span class="pln">
</span><span class="tag">&lt;/footer&gt;</span></pre>

		<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_1112_89" style=""><span class="com">/*تذييل الصفحة */</span><span class="pln">
</span><span class="pun">.</span><span class="pln">footer </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">#1d3557</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-align</span><span class="pun">:</span><span class="pln"> center</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

</span><span class="pun">.</span><span class="pln">footer a </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 style="text-align: center;">
			بهذا نكون قد انتهينا من تصميم موقعنا بالكامل وستبدو الصفحة الرئيسية لموقعنا على النحو التالي:<br>
			<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="165297" href="https://academy.hsoub.com/uploads/monthly_2025_01/-.png.edbe82fa207c38626946e5df412ffeb1.png" rel=""><img alt="معرض-أعمال.png" class="ipsImage ipsImage_thumbnailed" data-fileid="165297" data-ratio="158.00" data-unique="0m89j1ljs" style="width: 300px; height: auto;" width="380" src="https://academy.hsoub.com/uploads/monthly_2025_01/-.thumb.png.4553f1f5fd54256efc383ea1fb42d0c5.png"></a>
		</p>

		<p>
			يمكن تحميل الكود البرمجي الكامل لموقع معرض الأعمال وتعديله وفق متطلباتكم من هذا الرابط <a class="ipsAttachLink" data-fileext="zip" data-fileid="165296" href="https://academy.hsoub.com/applications/core/interface/file/attachment.php?id=165296&amp;key=f613b9680d204b21ff6de1c8c768a518" rel="">portfolio-website.zip</a>
		</p>

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

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

		<p>
			ترجمة، وبتصرّف للمقال <a href="https://www.ericsdevblog.com/posts/create-a-portfolio-website/" rel="external nofollow">Create a portfolio Website</a> لكاتبه Eric Hu.
		</p>

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

		<ul>
			<li>
				<a href="https://academy.hsoub.com/programming/css/%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-%D9%84%D8%B5%D9%81%D8%AD%D8%A7%D8%AA-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-responsive-web-design-r2302/" rel="">التصميم المتجاوب لصفحات الويب Responsive Web Design</a>
			</li>
			<li>
				<a href="https://academy.hsoub.com/programming/css/%D8%B9%D8%B1%D8%B6-%D9%85%D8%AD%D8%AA%D9%88%D9%89-%D8%B5%D9%81%D8%AD%D8%A7%D8%AA-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-%D8%A8%D8%AA%D8%AC%D8%A7%D9%88%D8%A8-%D8%B9%D9%84%D9%89-%D8%A7%D9%84%D8%A3%D8%AC%D9%87%D8%B2%D8%A9-%D8%A7%D9%84%D9%85%D8%AA%D8%B9%D8%AF%D8%AF%D8%A9-r1517/" rel="">عرض محتوى صفحات الويب بتجاوب على الأجهزة المتعددة</a>
			</li>
			<li>
				<a href="https://academy.hsoub.com/programming/css/%D8%AF%D9%84%D9%8A%D9%84%D9%83-%D8%A5%D9%84%D9%89-%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-r2309/" rel="">دليلك إلى استعلامات الوسائط Media Queries في CSS</a>
			</li>
			<li>
				<a href="https://academy.hsoub.com/programming/css/bootstrap/%D9%83%D9%8A%D9%81-%D8%AA%D8%A8%D8%B1%D9%85%D8%AC-%D9%85%D9%88%D9%82%D8%B9-%D9%88%D9%8A%D8%A8-%D8%A8%D8%B3%D9%8A%D8%B7-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-html-%D9%88-css-%D9%88-bootstrap-r2370/" rel="">كيف تبرمج موقع ويب بسيط باستخدام HTML و CSS و Bootstrap</a>
			</li>
		</ul>
	</section>
</section>
]]></description><guid isPermaLink="false">2487</guid><pubDate>Thu, 09 Jan 2025 15:02:00 +0000</pubDate></item><item><title>&#x62A;&#x639;&#x631;&#x641; &#x639;&#x644;&#x649; &#x639;&#x646;&#x627;&#x635;&#x631; &#x62A;&#x62D;&#x643;&#x645; &#x645;&#x62A;&#x646;&#x648;&#x639;&#x629; &#x64A;&#x645;&#x643;&#x646; &#x625;&#x636;&#x627;&#x641;&#x62A;&#x647;&#x627; &#x644;&#x627;&#x633;&#x62A;&#x645;&#x627;&#x631;&#x627;&#x62A; &#x627;&#x644;&#x648;&#x64A;&#x628;</title><link>https://academy.hsoub.com/programming/html/%D8%AA%D8%B9%D8%B1%D9%81-%D8%B9%D9%84%D9%89-%D8%B9%D9%86%D8%A7%D8%B5%D8%B1-%D8%AA%D8%AD%D9%83%D9%85-%D9%85%D8%AA%D9%86%D9%88%D8%B9%D8%A9-%D9%8A%D9%85%D9%83%D9%86-%D8%A5%D8%B6%D8%A7%D9%81%D8%AA%D9%87%D8%A7-%D9%84%D8%A7%D8%B3%D8%AA%D9%85%D8%A7%D8%B1%D8%A7%D8%AA-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-r2398/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2024_08/-------.png.96d85d3a07f50160a8c0b3c6258a9201.png" /></p>
<p>
	نلقي نظرة في هذا المقال وبشيء من التفصيل على عناصر استمارات ويب web forms متنوعة ليست عناصر <code><a href="https://wiki.hsoub.com/HTML/input" rel="external">&lt;input&gt;</a></code>، إذ يمكنك أن تضيف للاستمارات عناصر أخرى مثل القوائم المنسدلة drop-down menus، وحقول نصية متعددة اﻷسطر، وعناصر خرج <code><a href="https://wiki.hsoub.com/HTML/output" rel="external">&lt;output&gt;</a></code> (كالتي شرحناها في <a href="https://academy.hsoub.com/programming/html/%D8%A3%D9%86%D9%88%D8%A7%D8%B9-%D8%B9%D9%86%D8%A7%D8%B5%D8%B1-%D8%A7%EF%BB%B9%D8%AF%D8%AE%D8%A7%D9%84-%D9%81%D9%8A-html5-r2392/" rel="">المقال السابق</a>)، وأشرطة التقدم progress bars.
</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>" للتعرف على هيكلية صفحات ويب باستخدام لغة HTML وتتعرف على عناصرها.
</p>

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

<p>
	نستخدم في هذه الحالة العنصر <code><a href="https://wiki.hsoub.com/HTML/textarea" rel="external">&lt;textarea&gt;</a></code> بدلًا من عنصر اﻹدخال <code>&lt;input&gt;</code>
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_8041_11" style=""><span class="tag">&lt;textarea</span><span class="pln"> </span><span class="atn">cols</span><span class="pun">=</span><span class="atv">"30"</span><span class="pln"> </span><span class="atn">rows</span><span class="pun">=</span><span class="atv">"8"</span><span class="tag">&gt;&lt;/textarea&gt;</span></pre>

<p>
	ويصيّر العنصر كالتالي:
</p>

<p>
	<iframe allowfullscreen="true" allowtransparency="true" frameborder="no" height="250" loading="lazy" scrolling="no" src="https://codepen.io/HsoubAcademy/embed/yLdxYoK?default-tab=result" style="width: 100%;" title="Untitled">See the Pen Untitled by Hsoub Academy (@HsoubAcademy) on CodePen.</iframe>
</p>

<p>
	وللعنصر <code>&lt;textarea&gt;</code> وسم إغلاق أيضًا تضع قبله النص الذي تريده أن يظهر ضمن العنصر، بينما يُعد العنصر <code>&lt;input&gt;</code> فارغًا ليس له وسم إغلاق، وتوضع أية قيمة افتراضية لهذا العنصر ضمن الخاصية <code>value</code>.
</p>

<p>
	وعلى الرغم من إمكانية وضع أية محتوى ضمن العنصر <code>&lt;textarea&gt;</code> سواء عناصر HTML اخرى أو تنسيقات CSS أو جافا سكريبت نظرًا لطبيعة هذا العنصر إلا أنها تُصيَّر renders جميعها في النهاية على شكل نص. وتزودنا الخاصية <code><a href="https://wiki.hsoub.com/HTML/Global_Attributes#contenteditable" rel="external">contenteditable</a></code> عند استخدامها مع العناصر التي لا تنتمي إلى استمارة بواجهة برمجية لتمييز شيفرة HTML أو المحتوى النصي المنسّق rich text الموجود ضمن نص صرف.
</p>

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

<p>
	تعرض لقطة الشاشة التالية العنصر <code>&lt;textarea&gt;</code> في الحالة الافتراضية وحالتي اكتساب تركيز الدخل والتعطيل في المتصفحين فايرفوكس 71 و سفاري 13 على ماك أو إس وكذلك إيدج 17 وياندكس 14 وفايرفوكس 71 و كروم 79 على ويندوز 10:
</p>

<p style="text-align: center;">
	<img alt="textarea_basic.png" class="ipsImage ipsImage_thumbnailed" data-fileid="156974" data-ratio="53.14" data-unique="0o3buut8t" width="636" src="https://academy.hsoub.com/uploads/monthly_2024_08/textarea_basic.png.88cefecc090c270245630127c89ec3aa.png">
</p>

<p>
	<strong>ملاحظة</strong>: بإمكانك إلقاء نظرة على <a href="https://mdn.github.io/learning-area/html/forms/your-first-HTML-form/first-form-styled.html" rel="external nofollow">مثال</a> أكثر أهمية يتعلق باستخدام <code>&lt;textarea&gt;</code> على جت-هاب والاطلاع على <a href="https://github.com/mdn/learning-area/blob/main/html/forms/your-first-HTML-form/first-form-styled.html" rel="external nofollow">شيفرته المصدرية</a> أيضًا.
</p>

<h3 id="-2">
	التحكم بتصيير النص في حالة اﻷسطر المتعددة
</h3>

<p>
	يمكنك استخدام ثلاث خاصيات للتحكم بتصيير النص في العنصر <code>&lt;textarea&gt;</code> وهي:
</p>

<ul>
	<li>
		<strong><code>cols</code></strong>: وتحدد الاتساع المرئي للعنصر (عدد أعمدته) مقاسًا بالاتساع الوسطي للمحرف الواحد. وتمثل هذه القيمة عمليًا الاتساع الابتدائي، لأن العنصر قابل لزيادة الحجم أو تغيير تلك القيمة باستخدام CSS. القيمة الافتراضية لاتساع العنصر في حال لم تحدد يدويًا هي <code>20</code>.
	</li>
	<li>
		<strong><code>rows</code></strong>: وتحدد عدد أسطر النص وكذلك الارتفاع الإبتدائي للعنصر، لأنه قابل لزيادة الحجم أو تغيير تلك القيمة باستخدام CSS. القيمة الافتراضية لهذه الخاصية هي <code>20</code>.
	</li>
	<li>
		<strong><code>wrap</code></strong>: تحدد طريقة التفاف النص ضمن العنصر. القيمة الافتراضية لهذه الخاصية هي <code>soft</code> وفيها لا يُرسل محرف الانتقال إلى سطر جديد إلى الخادم لكنه يستخدم في عرض النص في المتصفح، كما يمكن أن تأخذ الخاصية القيمة <code>hard</code>، وفيها يرسل محرف الانتقال إلى سطر جديد إلى الخادم مع النص المُرسل (لا بد حينها من ضبط قيمة الخاصية <code>cols</code>)، وأخيرًا القيمة <code>off</code> وفيها لا يلتف النص أبدًا (لا ينتقل إلى سطر جديد عند بلوغ نهاية السطر).
	</li>
</ul>

<h3 id="textarea">
	التحكم بطريقة تغيير أبعاد العنصر <code>&lt;textarea&gt;</code>
</h3>

<p>
	تتحكم الخاصية <code>resize</code> في لغة CSS بإمكانية تغيير أبعاد العنصر، وتأخذ إحدى القيم التالية:
</p>

<ul>
	<li>
		<strong><code>both</code></strong>: تسمح بتغييرات أبعاد العنصر أفقيًا وشاقوليًا، وهي القيمة الافتراضية.
	</li>
	<li>
		<strong><code>horizontal</code></strong>: تسمح فقط بتغيير البعد اﻷفقي.
	</li>
	<li>
		<strong><code>vertical</code></strong>: تسمح فقط بتغيير البعد الشاقولي.
	</li>
	<li>
		<strong><code>none</code></strong>: تمنع تغيير أبعاد العنصر.
	</li>
	<li>
		<strong><code>block</code> </strong>و <strong><code>inline</code></strong>: قيم تجريبية تسمح بتغيير اﻷبعاد وفق أحد اتجاهي الانسياب: الكتلي <code>block</code> أو السطري <code>inline</code>. راجع مقال "<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>" لمعلومات أكثر عن اتجاه انسياب العناصر في صفحة HTML.
	</li>
</ul>

<h2 id="dropdownlist">
	عنصر القائمة المنسدلة Dropdown List
</h2>

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

<p>
	<strong>ملاحظة</strong>: يمكنك إيجاد بعض <a href="https://github.com/mdn/learning-area/blob/main/html/forms/native-form-widgets/drop-down-content.html" rel="external nofollow">اﻷمثلة</a> التي تخص القوائم المنسدلة على جيت-هب وكذلك الاطلاع على <a href="https://mdn.github.io/learning-area/html/forms/native-form-widgets/drop-down-content.html" rel="external nofollow">شيفرتها المصدرية</a>.
</p>

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

<p>
	ننشئ صندوق الاختيار باستخدام العنصر<a href="https://wiki.hsoub.com/HTML/select" rel="external"> &lt;select&gt;</a>، ونضع ضمنه عنصر <code>&lt;option&gt;</code> أو أكثر كأبناء له ويمثل كل عنصر منها أحد القيم التي يمكن أن نختارها. إليك مثالًا بسيطًا:
</p>

<p>
	<iframe allowfullscreen="true" allowtransparency="true" frameborder="no" height="280" loading="lazy" scrolling="no" src="https://codepen.io/HsoubAcademy/embed/WNqgQzZ?default-tab=result" style="width: 100%;" title=" select sample">See the Pen select sample by Hsoub Academy (@HsoubAcademy) on CodePen.</iframe>
</p>

<p>
	يمكن أن نستخدم الخاصية <code>selected</code> لاختيار عنصر افتراضيًا، وعندها سيُختار هذا العنصر تلقائيًا عند تحميل الصفحة.
</p>

<h4 id="optgroup">
	استخدام عنصر مجموعة الخيارات <code>&lt;optgroup&gt;</code>
</h4>

<p>
	باﻹمكان وضع عناصر <code>&lt;option&gt;</code> داخل عنصر مجموعة الخيارات <code>&lt;optgroup&gt;</code> ﻹنشاء مجموعات مترابطة من القيم:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_8041_16" style=""><span class="tag">&lt;select</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"groups"</span><span class="pln"> </span><span class="atn">name</span><span class="pun">=</span><span class="atv">"groups"</span><span class="tag">&gt;</span><span class="pln">
 </span><span class="tag">&lt;optgroup</span><span class="pln"> </span><span class="atn">label</span><span class="pun">=</span><span class="atv">"fruits"</span><span class="tag">&gt;</span><span class="pln">
    </span><span class="tag">&lt;option&gt;</span><span class="pln">Banana</span><span class="tag">&lt;/option&gt;</span><span class="pln">
    </span><span class="tag">&lt;option</span><span class="pln"> </span><span class="atn">selected</span><span class="tag">&gt;</span><span class="pln">Cherry</span><span class="tag">&lt;/option&gt;</span><span class="pln">
    </span><span class="tag">&lt;option&gt;</span><span class="pln">Lemon</span><span class="tag">&lt;/option&gt;</span><span class="pln">
 </span><span class="tag">&lt;/optgroup&gt;</span><span class="pln">
 </span><span class="tag">&lt;optgroup</span><span class="pln"> </span><span class="atn">label</span><span class="pun">=</span><span class="atv">"vegetables"</span><span class="tag">&gt;</span><span class="pln">
    </span><span class="tag">&lt;option&gt;</span><span class="pln">Carrot</span><span class="tag">&lt;/option&gt;</span><span class="pln">
    </span><span class="tag">&lt;option&gt;</span><span class="pln">Eggplant</span><span class="tag">&lt;/option&gt;</span><span class="pln">
    </span><span class="tag">&lt;option&gt;</span><span class="pln">Potato</span><span class="tag">&lt;/option&gt;</span><span class="pln">
 </span><span class="tag">&lt;/optgroup&gt;</span><span class="pln">
</span><span class="tag">&lt;/select&gt;</span></pre>

<p>
	<iframe allowfullscreen="true" allowtransparency="true" frameborder="no" height="250" loading="lazy" scrolling="no" src="https://codepen.io/HsoubAcademy/embed/OJeoyZp?default-tab=result" style="width: 100%;" title="optgroup sample">See the Pen optgroup sample by Hsoub Academy (@HsoubAcademy) on CodePen.</iframe>
</p>

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

<h4 id="value">
	استخدام الخاصية <code>value</code>
</h4>

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

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_8041_18" style=""><span class="tag">&lt;select</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"simple"</span><span class="pln"> </span><span class="atn">name</span><span class="pun">=</span><span class="atv">"simple"</span><span class="tag">&gt;</span><span class="pln">
 </span><span class="tag">&lt;option</span><span class="pln"> </span><span class="atn">value</span><span class="pun">=</span><span class="atv">"banana"</span><span class="tag">&gt;</span><span class="pln">Big, beautiful yellow banana</span><span class="tag">&lt;/option&gt;</span><span class="pln">
 </span><span class="tag">&lt;option</span><span class="pln"> </span><span class="atn">value</span><span class="pun">=</span><span class="atv">"cherry"</span><span class="tag">&gt;</span><span class="pln">Succulent, juicy cherry</span><span class="tag">&lt;/option&gt;</span><span class="pln">
 </span><span class="tag">&lt;option</span><span class="pln"> </span><span class="atn">value</span><span class="pun">=</span><span class="atv">"lemon"</span><span class="tag">&gt;</span><span class="pln">Sharp, powerful lemon</span><span class="tag">&lt;/option&gt;</span><span class="pln">
</span><span class="tag">&lt;/select&gt;</span></pre>

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

<h3 id="-4">
	صندوق متعدد الخيارات
</h3>

<p>
	يسمح صندوق الاختيار للمستخدم اختيار عنصر واحد افتراضيًا، لكن عند استخدام الخاصية <code>multiple</code> مع العنصر <code>&lt;select&gt;</code>، سيتمكن المستخدم من اختيار أكثر من عنصر. يختار المستخدم عدة قيم وفقًا للطريقة الافتراضية التي يتيحها نظام التشغيل، وكمثال على ذلك الضغط المستمر على الزر Cmd/Ctrl ثم النقر على الخيارات التي يريدها في معظم الحواسب المكتبية.
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_8041_20" style=""><span class="tag">&lt;select</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"multi"</span><span class="pln"> </span><span class="atn">name</span><span class="pun">=</span><span class="atv">"multi"</span><span class="pln"> </span><span class="atn">multiple</span><span class="pln"> </span><span class="atn">size</span><span class="pun">=</span><span class="atv">"2"</span><span class="tag">&gt;</span><span class="pln">
 </span><span class="tag">&lt;optgroup</span><span class="pln"> </span><span class="atn">label</span><span class="pun">=</span><span class="atv">"fruits"</span><span class="tag">&gt;</span><span class="pln">
    </span><span class="tag">&lt;option&gt;</span><span class="pln">Banana</span><span class="tag">&lt;/option&gt;</span><span class="pln">
    </span><span class="tag">&lt;option</span><span class="pln"> </span><span class="atn">selected</span><span class="tag">&gt;</span><span class="pln">Cherry</span><span class="tag">&lt;/option&gt;</span><span class="pln">
    </span><span class="tag">&lt;option&gt;</span><span class="pln">Lemon</span><span class="tag">&lt;/option&gt;</span><span class="pln">
 </span><span class="tag">&lt;/optgroup&gt;</span><span class="pln">
 </span><span class="tag">&lt;optgroup</span><span class="pln"> </span><span class="atn">label</span><span class="pun">=</span><span class="atv">"vegetables"</span><span class="tag">&gt;</span><span class="pln">
    </span><span class="tag">&lt;option&gt;</span><span class="pln">Carrot</span><span class="tag">&lt;/option&gt;</span><span class="pln">
    </span><span class="tag">&lt;option&gt;</span><span class="pln">Eggplant</span><span class="tag">&lt;/option&gt;</span><span class="pln">
    </span><span class="tag">&lt;option&gt;</span><span class="pln">Potato</span><span class="tag">&lt;/option&gt;</span><span class="pln">
 </span><span class="tag">&lt;/optgroup&gt;</span><span class="pln">
</span><span class="tag">&lt;/select&gt;</span></pre>

<p>
	<iframe allowfullscreen="true" allowtransparency="true" frameborder="no" height="250" loading="lazy" scrolling="no" src="https://codepen.io/HsoubAcademy/embed/zYVJvJb?default-tab=result" style="width: 100%;" title="Untitled">See the Pen Untitled by Hsoub Academy (@HsoubAcademy) on CodePen.</iframe>
</p>

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

<p>
	<strong>ملاحظة</strong>: تدعم جميع المتصفحات الخاصية <code>multiple</code> إذا دعمت العنصر <code>&lt;select&gt;</code>.
</p>

<h3 id="-5">
	صندوق اﻹكمال التلقائي
</h3>

<p>
	بإمكانك تزويد عنصر التحكم بقائمة من القيم المقترحة والتي تُكمَّل تلقائيًا من خلال العنصر <code>&lt;datalist&gt;</code> الذي يضم عناصر <code>&lt;option&gt;</code> أبناء تحدد القيم التي ستُعرض. ولا بد في هذه الحالة من ضبط قيمة الخاصية <code>id</code> للعنصر <code>&lt;datalist&gt;</code>.
</p>

<p>
	نربط بعدها العنصر <code>&lt;datalist&gt;</code> بعنصر التحكم <code>&lt;input&gt;</code> (من النوع النصي أو البريد اﻹلكتروني وغيره) باستخدام الخاصية <code>list</code> العائدة إلى عنصر التحكم، إذ نضبط قيمتها على قيمة <code>id</code> للعنصر <code>&lt;datalist&gt;</code> المطلوب.
</p>

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

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_8041_22" style=""><span class="tag">&lt;label</span><span class="pln"> </span><span class="atn">for</span><span class="pun">=</span><span class="atv">"myFruit"</span><span class="tag">&gt;</span><span class="pln">What's your favorite fruit?</span><span class="tag">&lt;/label&gt;</span><span class="pln">
</span><span class="tag">&lt;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">name</span><span class="pun">=</span><span class="atv">"myFruit"</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"myFruit"</span><span class="pln"> </span><span class="atn">list</span><span class="pun">=</span><span class="atv">"mySuggestion"</span><span class="pln"> </span><span class="tag">/&gt;</span><span class="pln">
</span><span class="tag">&lt;datalist</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"mySuggestion"</span><span class="tag">&gt;</span><span class="pln">
 </span><span class="tag">&lt;option&gt;</span><span class="pln">Apple</span><span class="tag">&lt;/option&gt;</span><span class="pln">
 </span><span class="tag">&lt;option&gt;</span><span class="pln">Banana</span><span class="tag">&lt;/option&gt;</span><span class="pln">
 </span><span class="tag">&lt;option&gt;</span><span class="pln">Blackberry</span><span class="tag">&lt;/option&gt;</span><span class="pln">
 </span><span class="tag">&lt;option&gt;</span><span class="pln">Blueberry</span><span class="tag">&lt;/option&gt;</span><span class="pln">
 </span><span class="tag">&lt;option&gt;</span><span class="pln">Lemon</span><span class="tag">&lt;/option&gt;</span><span class="pln">
 </span><span class="tag">&lt;option&gt;</span><span class="pln">Lychee</span><span class="tag">&lt;/option&gt;</span><span class="pln">
 </span><span class="tag">&lt;option&gt;</span><span class="pln">Peach</span><span class="tag">&lt;/option&gt;</span><span class="pln">
 </span><span class="tag">&lt;option&gt;</span><span class="pln">Pear</span><span class="tag">&lt;/option&gt;</span><span class="pln">
</span><span class="tag">&lt;/datalist&gt;</span></pre>

<p>
	<iframe allowfullscreen="true" allowtransparency="true" frameborder="no" height="250" loading="lazy" scrolling="no" src="https://codepen.io/HsoubAcademy/embed/PordPBW?default-tab=result" style="width: 100%;" title="Autocomplete box">See the Pen Autocomplete box by Hsoub Academy (@HsoubAcademy) on CodePen.</iframe>
</p>

<h4 id="datalist">
	دعم العنصر <code>&lt;datalist&gt;</code> في المتصفحات وأسلوب التراجع
</h4>

<p>
	تدعم معظم المتصفحات العنصر <code><a href="https://wiki.hsoub.com/HTML/datalist" rel="external">&lt;datalist&gt;</a></code>، لكن إن أردت أن تدعم متصفحات أقدم مثل إنترنت إكسبلورر 10 والنسخ اﻷقدم، إليك هذه الحيلة:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_8041_24" style=""><span class="tag">&lt;label</span><span class="pln"> </span><span class="atn">for</span><span class="pun">=</span><span class="atv">"myFruit"</span><span class="tag">&gt;</span><span class="pln">What is your favorite fruit? (With fallback)</span><span class="tag">&lt;/label&gt;</span><span class="pln">
</span><span class="tag">&lt;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">"myFruit"</span><span class="pln"> </span><span class="atn">name</span><span class="pun">=</span><span class="atv">"fruit"</span><span class="pln"> </span><span class="atn">list</span><span class="pun">=</span><span class="atv">"fruitList"</span><span class="pln"> </span><span class="tag">/&gt;</span><span class="pln">

</span><span class="tag">&lt;datalist</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"fruitList"</span><span class="tag">&gt;</span><span class="pln">
 </span><span class="tag">&lt;label</span><span class="pln"> </span><span class="atn">for</span><span class="pun">=</span><span class="atv">"suggestion"</span><span class="tag">&gt;</span><span class="pln">or pick a fruit</span><span class="tag">&lt;/label&gt;</span><span class="pln">
 </span><span class="tag">&lt;select</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"suggestion"</span><span class="pln"> </span><span class="atn">name</span><span class="pun">=</span><span class="atv">"altFruit"</span><span class="tag">&gt;</span><span class="pln">
    </span><span class="tag">&lt;option&gt;</span><span class="pln">Apple</span><span class="tag">&lt;/option&gt;</span><span class="pln">
    </span><span class="tag">&lt;option&gt;</span><span class="pln">Banana</span><span class="tag">&lt;/option&gt;</span><span class="pln">
    </span><span class="tag">&lt;option&gt;</span><span class="pln">Blackberry</span><span class="tag">&lt;/option&gt;</span><span class="pln">
    </span><span class="tag">&lt;option&gt;</span><span class="pln">Blueberry</span><span class="tag">&lt;/option&gt;</span><span class="pln">
    </span><span class="tag">&lt;option&gt;</span><span class="pln">Lemon</span><span class="tag">&lt;/option&gt;</span><span class="pln">
    </span><span class="tag">&lt;option&gt;</span><span class="pln">Lychee</span><span class="tag">&lt;/option&gt;</span><span class="pln">
    </span><span class="tag">&lt;option&gt;</span><span class="pln">Peach</span><span class="tag">&lt;/option&gt;</span><span class="pln">
    </span><span class="tag">&lt;option&gt;</span><span class="pln">Pear</span><span class="tag">&lt;/option&gt;</span><span class="pln">
 </span><span class="tag">&lt;/select&gt;</span><span class="pln">
</span><span class="tag">&lt;/datalist&gt;</span></pre>

<p>
	<iframe allowfullscreen="true" allowtransparency="true" frameborder="no" height="250" loading="lazy" scrolling="no" src="https://codepen.io/HsoubAcademy/embed/vYqzNQG?default-tab=result" style="width: 100%;" title="datalist">See the Pen datalist by Hsoub Academy (@HsoubAcademy) on CodePen.</iframe>
</p>

<p>
	تتجاهل المتصفحات التي تدعم <code>&lt;datalist&gt;</code> جميع العناصر الموجودة ضمن هذا العنصر ما عدا العناصر <code>&lt;option&gt;</code> وبالتالي ستعمل قائمة اﻹكمال التلقائي كما يجب. أما المتصفحات التي لا تدعم اﻹكمال التلقائي، فستعرض العنوان وصندوق الاختيار <code>&lt;select&gt;</code>. توضح لقطة الشاشة التراجع عن استخدام قائمة اﻹكمال التلقائي في المتصفح سفاري 6 الذي لا يدعمها:
</p>

<p style="text-align: center;">
	<img alt="datalist-safari.png" class="ipsImage ipsImage_thumbnailed" data-fileid="156975" data-ratio="6.46" data-unique="4x12ns5a6" width="495" src="https://academy.hsoub.com/uploads/monthly_2024_08/datalist-safari.png.b1518f390cd64a00b1386730265ef800.png">
</p>

<p>
	وفي حال استخدمت أسلوب التراجع السابق، تأكد أن جمع بيانات العنصرين <code>&lt;input&gt;</code> و <code>&lt;select&gt;</code> ستجري في طرف الخادم.
</p>

<h4 id="-6">
	استخدامات غير شائعة لقائمة اﻹكمال التلقائي
</h4>

<p>
	تشير مواصفات HTML إلى إمكانية استخدام الخاصية <code>list</code> والعنصر <code>&lt;datalist&gt;</code>مع أي نوع من عناصر اﻹدخال، وهذا ما يجعل بعض الاستخدامات لقائمة اﻹكمال التلقائي غير شائعة.
</p>

<p>
	إذ يمكنك على سبيل المثال استخدام هذه القائمة مع عنصر اﻹدخال من النوع <code>range</code> لعرض علامة صغيرة فوق المزلاج توافق خيارًا من خيارات قائمة اﻹكمال التلقائي
</p>

<p>
	ومن المفترض أن تعرض المتصفحات التي تدعم العنصرين <code>&lt;datalist&gt;</code> و <code>&lt;input&gt;</code> من النوع <code>color</code> لوحة ألوان مخصصة (تتعلق بعناصر <code>&lt;datalist&gt;</code>) مع إمكانية عرض منتقي الألوان بشكل كامل. وبالتالي سيختلف سلوك المتصفحات في هذه الحالة، لهذا يُعد هذا الاستخدام متقدمًا، وعليك التأكد من إيجاد طريقة تراجع صحيحة.
</p>

<h2 id="-7">
	ميزات أخرى لاستمارات الويب
</h2>

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

<p>
	<strong>ملاحظة</strong>: بإمكانك إيجاد <a href="https://github.com/mdn/learning-area/blob/main/html/forms/native-form-widgets/other-examples.html" rel="external nofollow">أمثلة هذا القسم</a> على جت-هاب <a href="https://mdn.github.io/learning-area/html/forms/native-form-widgets/other-examples.html" rel="external nofollow">وتجربتها مباشرة</a>.
</p>

<h3 id="-8">
	العدّادات وأشرطة التقدم
</h3>

<p>
	وهي أدوات تقدّم تمثيلًا بصريًا لقيم عددية، تدعمها معظم المتصفحات الحديثة. ننشئ العدّاد باستخدام العنصر <code><a href="https://wiki.hsoub.com/HTML/meter" rel="external">&lt;meter&gt;</a></code> وشريط التقدم باستخدام العنصر <code><a href="https://wiki.hsoub.com/HTML/progress" rel="external">&lt;progress&gt;</a></code>.
</p>

<h4 id="meter">
	العداد Meter
</h4>

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

<ul>
	<li>
		<p>
			القيمتان الدنيا <strong><code>low</code> </strong>والعليا <strong><code>high</code></strong>: وهما قيمتان تقسمان المجال إلى ثلاثة أقسام:
		</p>

		<ul>
			<li>
				<p>
					القسم الأول بين القيمتين <code>min</code> و <code>low</code> ضمنًا.
				</p>
			</li>
			<li>
				<p>
					القسم الثاني بين القيمتين <code>low</code> و <code>high</code> دون هاتين القيمتين.
				</p>
			</li>
			<li>
				<p>
					القسم الثالث بين القيمتين <code>high</code> و <code>max</code> ضمنًا.
				</p>
			</li>
		</ul>
	</li>
	<li>
		<p>
			القيمة <strong><code>optimum</code></strong>: تحدد القيمة المثلى للعداد وتحدد مع إلى القيمتين <code>low</code> و <code>high</code> القسم المفضل من المجال:
		</p>

		<ul>
			<li>
				<p>
					إن كانت القيمة <code>optimum</code> في القسم السفلي من المجال، يُعد حينها الجزء السفلي هو القسم المفضل، ويعد القسم اﻷوسط هو القسم الوسطي، والقسم اﻷعلى هو القسم اﻷسوأ.
				</p>
			</li>
			<li>
				<p>
					إن كانت القيمة <code>optimum</code> في القسم الوسط من المجال، يُعد حينها الجزء السفلي هو القسم الوسطي، ويعد القسم اﻷوسط هو المفضل، والقسم اﻷعلى وسطي أيضًا.
				</p>
			</li>
			<li>
				<p>
					إن كانت القيمة <code>optimum</code> في القسم الأعلى من المجال، يُعد حينها الجزء السفلي هو القسم الأسوأ، ويعد القسم اﻷوسط هو القسم الوسطي، والقسم اﻷعلى هو القسم المفضل.
				</p>
			</li>
		</ul>
	</li>
	<li>
		تستخدم معظم المتصفحات التي تدعم العنصر <code>&lt;meter&gt;</code> تلك القيم لتغيير لون شريط العداد:
		<ul>
			<li>
				إن كانت القيم الحالية ضمن القسم المفضل من المجال سيكون الشريط أخضر اللون.
			</li>
			<li>
				إن كانت القيم الحالية ضمن القسم الوسطي من المجال سيكون الشرط أصفر اللون.
			</li>
			<li>
				إن كانت القيمة ضمن القسم اﻷسوأ من المجال سيكون الشريط أحمر اللون.
			</li>
		</ul>
	</li>
</ul>

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

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_5312_9" style=""><span class="tag">&lt;meter</span><span class="pln"> </span><span class="atn">min</span><span class="pun">=</span><span class="atv">"0"</span><span class="pln"> </span><span class="atn">max</span><span class="pun">=</span><span class="atv">"100"</span><span class="pln"> </span><span class="atn">value</span><span class="pun">=</span><span class="atv">"75"</span><span class="pln"> </span><span class="atn">low</span><span class="pun">=</span><span class="atv">"33"</span><span class="pln"> </span><span class="atn">high</span><span class="pun">=</span><span class="atv">"66"</span><span class="pln"> </span><span class="atn">optimum</span><span class="pun">=</span><span class="atv">"0"</span><span class="tag">&gt;</span><span class="pln">75</span><span class="tag">&lt;/meter&gt;</span></pre>

<p>
	<iframe allowfullscreen="true" allowtransparency="true" frameborder="no" height="200" loading="lazy" scrolling="no" src="https://codepen.io/HsoubAcademy/embed/bGPxVzY?default-tab=result" style="width: 100%;" title="Untitled">See the Pen Untitled by Hsoub Academy (@HsoubAcademy) on CodePen.</iframe>
</p>

<p>
	أما إذا رأيت عناصر داخل العنصر <code>&lt;meter&gt;</code> فهي للتراجع في حال لم يدعم المتصفح هذا العنصر، أو لدعم التقنيات المساعدة مثل قارئات الشاشة.
</p>

<h4 id="progressbar">
	شريط التقدم Progress bar
</h4>

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

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_8802_8" style=""><span class="tag">&lt;progress</span><span class="pln"> </span><span class="atn">max</span><span class="pun">=</span><span class="atv">"100"</span><span class="pln"> </span><span class="atn">value</span><span class="pun">=</span><span class="atv">"75"</span><span class="tag">&gt;</span><span class="pln">75/100</span><span class="tag">&lt;/progress&gt;</span></pre>

<p>
	<iframe allowfullscreen="true" allowtransparency="true" frameborder="no" height="200" loading="lazy" scrolling="no" src="https://codepen.io/HsoubAcademy/embed/poXOjYZ?default-tab=result" style="width: 100%;" title="progress sample">See the Pen progress sample by Hsoub Academy (@HsoubAcademy) on CodePen.</iframe>
</p>

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

<p>
	أما إذا رأيت عناصر داخل العنصر <code>&lt;progress&gt;</code> فهي للتراجع في حال لم يدعم المتصفح هذا العنصر، أو لدعم التقنيات المساعدة مثل قارئات الشاشة.
</p>

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

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

<p>
	ترجمة -وبتصرف- للمقال <a href="https://developer.mozilla.org/en-US/docs/Learn/Forms/Other_form_controls" rel="external nofollow">Other form controls</a>.
</p>

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

<ul>
	<li>
		المقال السابق: <a href="https://academy.hsoub.com/programming/html/%D8%A3%D9%86%D9%88%D8%A7%D8%B9-%D8%B9%D9%86%D8%A7%D8%B5%D8%B1-%D8%A7%EF%BB%B9%D8%AF%D8%AE%D8%A7%D9%84-%D9%81%D9%8A-html5-r2392/" rel="">أنواع عناصر اﻹدخال في HTML5</a>
	</li>
	<li>
		<p>
			<a href="https://academy.hsoub.com/design/user-experience/%D8%A7%D9%84%D8%A3%D8%B2%D8%B1%D8%A7%D8%B1%D8%8C-%D8%A7%D9%84%D9%86%D9%85%D8%A7%D8%B0%D8%AC-%D9%88%D8%A7%D9%84%D8%AF%D8%B9%D9%88%D8%A7%D8%AA-%D8%A5%D9%84%D9%89-%D8%A7%D9%84%D8%A5%D8%AC%D8%B1%D8%A7%D8%A1-%D9%81%D9%8A-%D9%85%D8%AC%D8%A7%D9%84-%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-r253/" rel="">الأزرار، النماذج والدعوات إلى الإجراء في مجال تجربة المستخدم</a>
		</p>
	</li>
	<li>
		<p>
			<a href="https://academy.hsoub.com/programming/html/%D8%A7%D9%84%D9%86%D9%85%D8%A7%D8%B0%D8%AC-forms-%D9%81%D9%8A-html5-r370/" rel="">النماذج (Forms) في HTML5</a>
		</p>
	</li>
	<li>
		<p>
			<a href="https://academy.hsoub.com/programming/javascript/http-%D9%88%D8%A7%D9%84%D8%A7%D8%B3%D8%AA%D9%85%D8%A7%D8%B1%D8%A7%D8%AA-%D9%81%D9%8A-%D8%AC%D8%A7%D9%81%D8%A7%D8%B3%D9%83%D8%B1%D8%A8%D8%AA-r1367/" rel="">HTTP والاستمارات في جافاسكربت</a>
		</p>
	</li>
</ul>
]]></description><guid isPermaLink="false">2398</guid><pubDate>Tue, 03 Sep 2024 15:05:01 +0000</pubDate></item><item><title>&#x623;&#x646;&#x648;&#x627;&#x639; &#x639;&#x646;&#x627;&#x635;&#x631; &#x627;&#xFEF9;&#x62F;&#x62E;&#x627;&#x644; &#x641;&#x64A; HTML5</title><link>https://academy.hsoub.com/programming/html/%D8%A3%D9%86%D9%88%D8%A7%D8%B9-%D8%B9%D9%86%D8%A7%D8%B5%D8%B1-%D8%A7%EF%BB%B9%D8%AF%D8%AE%D8%A7%D9%84-%D9%81%D9%8A-html5-r2392/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2024_08/----HTML5.png.07e81846b9d984f79f2769af8e445fbd.png" /></p>
<p>
	تعرفنا في <a href="https://academy.hsoub.com/programming/html/%D8%A3%D8%AF%D9%88%D8%A7%D8%AA-%D8%A7%D9%84%D8%AA%D8%AD%D9%83%D9%85-%D8%A7%EF%BB%B7%D8%B5%D9%84%D9%8A%D8%A9-%D9%81%D9%8A-%D8%A7%D8%B3%D8%AA%D9%85%D8%A7%D8%B1%D8%A7%D8%AA-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-r2389/" rel="">مقال سابق</a> على عنصر اﻹدخال <code>&lt;input&gt;</code>، وغطينا الأنواع اﻷصلية لهذا العنصر والتي تتغير بتغير قيمة الخاصية <code>type</code>. لقد ظهرت الأنواع اﻷصلية مع بداية ظهور HTML، وأضيف إليها لاحقًا -في اﻹصدار HTML5- عناصر تحكم متعددة لها وظائف جديدة كي تسمح بجمع أنواع مخصصة من البيانات، وهذا ما نفصّله في مقالنا.
</p>

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

<p>
	<strong>ملاحظة2</strong>: يلجأ المطورون إلى بناء استمارات ويب مخصصة، نظرًا لاختلاف طريقة عرض عناصر التحكم عن رؤية المصمم، وسنغطي هذا اﻷمر في مقال لاحق.
</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> للتعرف على هيكيلية صفحات ويب باستخدام لغة HTML وتتعرف على عناصرها الأساسية.
</p>

<h2 id="">
	حقل إدخال البريد اﻹلكتروني
</h2>

<p>
	يمكن إنشاء حقل مخصص لإدخال البريد اﻹلكتروني باستخدام العنصر <code>&lt;input&gt;</code> وضبط الخاصية <code>type</code> على القيمة <code>email</code> كما يلي:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_5612_11" style=""><span class="tag">&lt;input</span><span class="pln"> </span><span class="atn">type</span><span class="pun">=</span><span class="atv">"email"</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"email"</span><span class="pln"> </span><span class="atn">name</span><span class="pun">=</span><span class="atv">"email"</span><span class="pln"> </span><span class="tag">/&gt;</span></pre>

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

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="156607" href="https://academy.hsoub.com/uploads/monthly_2024_08/01_email_address_invalid.png.0d20ec77ea9f51498db7ea1074b88d7e.png" rel=""><img alt="01 email address invalid" class="ipsImage ipsImage_thumbnailed" data-fileid="156607" data-unique="t79dsz2p9" src="https://academy.hsoub.com/uploads/monthly_2024_08/01_email_address_invalid.png.0d20ec77ea9f51498db7ea1074b88d7e.png"> </a>
</p>

<p>
	ومن الممكن استخدام الخاصية <code>multiple</code> مع عنصر إدخال البريد اﻹلكتروني ﻹدخال أكثر من بريد إلكتروني في نفس الحقل (تفصل بينها فاصلة <code>,</code>).
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_5612_13" style=""><span class="tag">&lt;input</span><span class="pln"> </span><span class="atn">type</span><span class="pun">=</span><span class="atv">"email"</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"email"</span><span class="pln"> </span><span class="atn">name</span><span class="pun">=</span><span class="atv">"email"</span><span class="pln"> </span><span class="atn">multiple</span><span class="pln"> </span><span class="tag">/&gt;</span></pre>

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

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="jpg" data-fileid="156608" href="https://academy.hsoub.com/uploads/monthly_2024_08/02_android-email-type-keyboard.jpg.f01e293d03481c42351d0baf61679987.jpg" rel=""><img alt="02 android email type keyboard" class="ipsImage ipsImage_thumbnailed" data-fileid="156608" data-ratio="81.00" data-unique="kppjdg74v" style="width: 400px; height: auto;" width="400" src="https://academy.hsoub.com/uploads/monthly_2024_08/02_android-email-type-keyboard.jpg.f01e293d03481c42351d0baf61679987.jpg"> </a>
</p>

<p>
	وهذا سبب آخر لاستخدام اﻷنواع الجديدة من عناصر اﻹدخال فهو يساهم في <a href="https://academy.hsoub.com/design/user-experience/%D8%A7%D9%84%D8%AA%D9%88%D8%B9%D9%8A%D8%A9-%D8%A8%D8%A3%D9%87%D9%85%D9%8A%D8%A9-%D8%AA%D8%B5%D9%85%D9%8A%D9%85-%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-r843/" rel="">تحسين تجربة المستخدم</a> على تلك اﻷجهزة.
</p>

<p>
	<strong>ملاحظة</strong>: بإمكانك إيجاد <a href="https://mdn.github.io/learning-area/html/forms/basic-input-examples/" rel="external nofollow">أمثلة</a> عن استخدام أنواع عناصر اﻹدخال النصية البسيطة على جت-هاب وبإمكانك أيضًا الاطلاع على <a href="https://github.com/mdn/learning-area/blob/main/html/forms/basic-input-examples/index.html" rel="external nofollow">شيفرتها المصدرية</a>.
</p>

<h3 id="-1">
	التحقق من صحة المدخلات في طرف العميل
</h3>

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

<p>
	ومن اﻷفضل طبعًا ألا نعد هذه الطريقة آمنة، بل ينبغي أن يتحقق التطبيق من صحة وسلامة البيانات في طرف الخادم أيضًا لحمايته من <a href="https://academy.hsoub.com/devops/networking/%D8%A7%D9%84%D9%87%D8%AC%D9%85%D8%A7%D8%AA-%D8%A7%D9%84%D8%A3%D9%85%D9%86%D9%8A%D8%A9-security-attacks-%D9%81%D9%8A-%D8%A7%D9%84%D8%B4%D8%A8%D9%83%D8%A7%D8%AA-%D8%A7%D9%84%D8%AD%D8%A7%D8%B3%D9%88%D8%A8%D9%8A%D8%A9-r540/" rel="">الهجمات الأمنية</a>، لأنه من السهل جدًا إلغاء التحقق في طرف العميل، وسيتمكن المستخدمون المشبوهون من إرسال بيانات غير آمنة إلى الخادم. لن نتحدث عن مفاهيم التحقق من صحة وسلامة البيانات في طرف الخادم في سلسلة مقالاتنا الحالية وسنركز على شرح استمارات الويب، لكن عليك تذكر ذلك دائمًا.
</p>

<p>
	لاحظ أن البريد اﻹلكتروني من الشكل <code>a@b</code> هو عنوان صالح من وجهة نظر آلية التحقق الافتراضية، لأن عنصر إدخال البريد اﻹلكتروني يسمح بعناوين البريد اﻹلكتروني على الشبكات المحلية <a href="https://academy.hsoub.com/devops/networking/%D8%A2%D9%84%D9%8A%D8%A9-%D8%B9%D9%85%D9%84-%D8%B4%D8%A8%D9%83%D8%A9-%D8%A7%D9%84%D8%A5%D9%86%D8%AA%D8%B1%D9%86%D8%AA-r571/" rel="">إنترانيت intranet</a> افتراضيًا. وﻹنجاز آلية تحقق مخصصة، يمكنك استخدام الخاصية <code>pattern</code> وتخصيص رسالة الخطأ وسنشرح ذلك لاحقًا.
</p>

<p>
	<strong>ملاحظة</strong>: عندما تدخل نصًا خاطئًا في حقل البريد اﻹلكتروني، سيُفعّل صنف التنسيق الزائف <code><a href="https://wiki.hsoub.com/CSS/:invalid" rel="external">invalid:</a></code> وتعيد الخاصية <code>validityState.typeMismatch</code> القيمة <code>true</code>.
</p>

<h2 id="-2">
	حقل البحث
</h2>

<p>
	خُصصت حقول البحث <a href="https://wiki.hsoub.com/HTML/input/search" rel="external">search</a> ﻹنشاء صناديق البحث عن البيانات ضمن صفحة الويب أو التطبيق، ونستخدم ﻹنشاء هذا الحقل العنصر <code>&lt;input&gt;</code> ونضبط قيمة الخاصية <code>type</code> على <code>search</code>.
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_5612_21" style=""><span class="tag">&lt;input</span><span class="pln"> </span><span class="atn">type</span><span class="pun">=</span><span class="atv">"search"</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"search"</span><span class="pln"> </span><span class="atn">name</span><span class="pun">=</span><span class="atv">"search"</span><span class="pln"> </span><span class="tag">/&gt;</span></pre>

<p>
	إن الفرق الرئيسي بين الحقل <code>text</code>والحقل <code>search</code> هو طريقة تنسيق المتصفح لكل منهما. تُصيّر (render) صناديق البحث غالبًا بزوايا دائرية مع أيقونة "Ⓧ" في طرف الصندوق أحيانًا كي تحذف محتوى الصندوق عند نقرها. إضافة إلى ذلك سيُعرض زر عنوانه "بحث search" أو عليه أيقونة المكبرة في اﻷجهزة التي تعرض لوحات مفاتيح ديناميكية.
</p>

<p>
	تعرض لقطات الشاشة التالية صندوق بحث ومحتواه كما يظهر في فايرفوكس 71 وسفاري 13 و كروم 79 على نظام ماك او إس ثم ايدج 18 وكروم 79 على ويندوز 10. ويمكن ملاحظة أن أيقونة المسح ستظهر إن ضم صندوق البحث نصًا وامتلك تركيز الدخل (ما عدا حالة سفاري).
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="156609" href="https://academy.hsoub.com/uploads/monthly_2024_08/03_search_focus.png.b76d5a37282e3b6f88a2c57e7057218a.png" rel=""><img alt="03 search focus" class="ipsImage ipsImage_thumbnailed" data-fileid="156609" data-unique="iwuhn5dbf" src="https://academy.hsoub.com/uploads/monthly_2024_08/03_search_focus.png.b76d5a37282e3b6f88a2c57e7057218a.png"> </a>
</p>

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

<h2 id="-3">
	حقل رقم الهاتف
</h2>

<p>
	وهو حقل مخصص لإضافة أرقام الهواتف وننشئه باستخدام العنصر <code>&lt;input&gt;</code> وضبط قيمة الخاصية <code>type</code> على <code>tel</code>:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_5612_24" style=""><span class="tag">&lt;input</span><span class="pln"> </span><span class="atn">type</span><span class="pun">=</span><span class="atv">"tel"</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"tel"</span><span class="pln"> </span><span class="atn">name</span><span class="pun">=</span><span class="atv">"tel"</span><span class="pln"> </span><span class="tag">/&gt;</span></pre>

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

<p>
	تعرض لقطة الشاشة التالية لوحة مفاتيح رقمية في نظام أندرويد:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="jpg" data-fileid="156610" href="https://academy.hsoub.com/uploads/monthly_2024_08/04_android-tel-type-keyboard.jpg.1c765db13efca1c03174a9899ea3c9bd.jpg" rel=""><img alt="04 android tel type keyboard" class="ipsImage ipsImage_thumbnailed" data-fileid="156610" data-ratio="69.00" data-unique="72hra95ye" style="width: 400px; height: auto;" width="400" src="https://academy.hsoub.com/uploads/monthly_2024_08/04_android-tel-type-keyboard.jpg.1c765db13efca1c03174a9899ea3c9bd.jpg"> </a>
</p>

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

<h2 id="url">
	حقل إدخال عناوين URL
</h2>

<p>
	وهو نوع خاص من الحقول، يُستخدم في إدخال <a href="https://academy.hsoub.com/programming/general/%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A7%D8%AA-%D8%B9%D9%86%D9%88%D8%A7%D9%86-url-%D9%88%D8%A3%D9%86%D9%88%D8%A7%D8%B9%D9%87-r1435/" rel="">عناوين URL</a> عن طريق ضبط قيمة الخاصية <code>type</code> على <code>url</code>:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_5612_28" style=""><span class="tag">&lt;input</span><span class="pln"> </span><span class="atn">type</span><span class="pun">=</span><span class="atv">"url"</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"url"</span><span class="pln"> </span><span class="atn">name</span><span class="pun">=</span><span class="atv">"url"</span><span class="pln"> </span><span class="tag">/&gt;</span></pre>

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

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

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="jpg" data-fileid="156611" href="https://academy.hsoub.com/uploads/monthly_2024_08/05_android-url-type-keyboard.jpg.e903711e4b4d89868c1656d55ff1c6f6.jpg" rel=""><img alt="05 android url type keyboard" class="ipsImage ipsImage_thumbnailed" data-fileid="156611" data-ratio="81.25" data-unique="f2l50218a" style="width: 400px; height: auto;" width="400" src="https://academy.hsoub.com/uploads/monthly_2024_08/05_android-url-type-keyboard.jpg.e903711e4b4d89868c1656d55ff1c6f6.jpg"> </a>
</p>

<p>
	<strong>ملاحظة</strong>: ليس بالضرورة أن يشير عنوان URL الصحيح إلى موقع حقيقي موجود!
</p>

<h2 id="-4">
	حقل ﻹدخال اﻷعداد
</h2>

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

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="jpg" data-fileid="156612" href="https://academy.hsoub.com/uploads/monthly_2024_08/06_android-number-type-keyboard.jpg.6b7cf8f9b87f0d801dd2ca4dae1569cb.jpg" rel=""><img alt="06 android number type keyboard" class="ipsImage ipsImage_thumbnailed" data-fileid="156612" data-ratio="69.00" data-unique="sx74288dz" style="width: 400px; height: auto;" width="400" src="https://academy.hsoub.com/uploads/monthly_2024_08/06_android-number-type-keyboard.thumb.jpg.0f10ba6a0ca89e2b896b5993b65f6baf.jpg"> </a>
</p>

<p>
	يمكنك تقييد الحد اﻷدنى والأعلى للرقم الذي تريد إدخاله عند استخدام هذا الحقل وذلك بضبط قيمتي الخاصيتين <code>min</code> و <code>max</code>. كما يمكنك استخدام الخاصية <code>step</code> لتحديد مقدار الزيادة أو النقصان عند النقر على زر التدوير.
</p>

<p>
	تُقيَّم مدخلات هذا الحقل افتراضيًا إن كانت أعدادًا صحيحةً، لكن باﻹمكان السماح بزيادة أو إنقاص اﻷعداد العشرية بضبط قيمة الخاصية <code>step</code>على <code>"any"</code>، وستكون القيمة الافتراضية لهذه الخاصية <code>1</code> عندما لا تُستخدم (تُحذف) وعندها سيقبل الحقل اﻷرقام الصحيحة فقط. لنلق نظرة على بعض الأمثلة:
</p>

<ul>
	<li>
		ننشئ في المثال الأول عنصر تحكم يعرض أعدادًا بين <code>1</code> و <code>10</code> ويزيد زر التدوير العدد المدخل أو يُنقصه بمقدار <code>2</code>:
	</li>
</ul>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_5612_33" style=""><span class="tag">&lt;input</span><span class="pln"> </span><span class="atn">type</span><span class="pun">=</span><span class="atv">"number"</span><span class="pln"> </span><span class="atn">name</span><span class="pun">=</span><span class="atv">"age"</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"age"</span><span class="pln"> </span><span class="atn">min</span><span class="pun">=</span><span class="atv">"1"</span><span class="pln"> </span><span class="atn">max</span><span class="pun">=</span><span class="atv">"10"</span><span class="pln"> </span><span class="atn">step</span><span class="pun">=</span><span class="atv">"2"</span><span class="pln"> </span><span class="tag">/&gt;</span></pre>

<ul>
	<li>
		ننشئ في المثال الثاني حقل أعداد محدودًا بين <code>1</code> و <code>10</code> ضمنًا، ويزيد زر التدوير العدد المدخل أو يُنقصه بمقدار <code>0.01</code>:
	</li>
</ul>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_5612_35" style=""><span class="tag">&lt;input</span><span class="pln"> </span><span class="atn">type</span><span class="pun">=</span><span class="atv">"number"</span><span class="pln"> </span><span class="atn">name</span><span class="pun">=</span><span class="atv">"change"</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"pennies"</span><span class="pln"> </span><span class="atn">min</span><span class="pun">=</span><span class="atv">"0"</span><span class="pln"> </span><span class="atn">max</span><span class="pun">=</span><span class="atv">"1"</span><span class="pln"> </span><span class="atn">step</span><span class="pun">=</span><span class="atv">"0.01"</span><span class="pln"> </span><span class="tag">/&gt;</span></pre>

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

<h2 id="-5">
	عنصر شريط التمرير
</h2>

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

<p>
	<iframe height="200" loading="lazy" src="https://mdn.github.io/learning-area/html/forms/range-example/index.html" width="100%"></iframe>
</p>

<p>
	يُستخدم المزلاج في اختيار أرقام لا تهمنا كثيرًا قيمها الدقيقة، فهو أقل دقة من الحقول النصية. وننشئ المزلاج باستخدام عنصر اﻹدخال <code>&lt;input&gt;</code> وضبط قيمة الخاصية <code>type</code> على القيمة <code>range</code>. يمكن تحريك مؤشر المزلاج بالفأرة أو باللمس أو عبر أسهم لوحة المفاتيح.
</p>

<p>
	ومن المهم أن تضبط المزلاج جيدًا، لهذا لا بد من استخدام الخاصيات <code>max</code> و <code>min</code> و <code>step</code> التي تضبط الحد الأدنى واﻷعلى للقيمة ومقدار الزيادة أو النقصان. لنلق نظرة اﻵن على الشيفرة التي استخدمناها في إنجاز المثال السابق:
</p>

<ul>
	<li>
		شيفرة HTML:
	</li>
</ul>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_5612_38" style=""><span class="tag">&lt;label</span><span class="pln"> </span><span class="atn">for</span><span class="pun">=</span><span class="atv">"price"</span><span class="tag">&gt;</span><span class="pln">Choose a maximum house price: </span><span class="tag">&lt;/label&gt;</span><span class="pln">
</span><span class="tag">&lt;input</span><span class="pln">
 </span><span class="atn">type</span><span class="pun">=</span><span class="atv">"range"</span><span class="pln">
 </span><span class="atn">name</span><span class="pun">=</span><span class="atv">"price"</span><span class="pln">
 </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"price"</span><span class="pln">
 </span><span class="atn">min</span><span class="pun">=</span><span class="atv">"50000"</span><span class="pln">
 </span><span class="atn">max</span><span class="pun">=</span><span class="atv">"500000"</span><span class="pln">
 </span><span class="atn">step</span><span class="pun">=</span><span class="atv">"100"</span><span class="pln">
 </span><span class="atn">value</span><span class="pun">=</span><span class="atv">"250000"</span><span class="pln"> </span><span class="tag">/&gt;</span><span class="pln">
</span><span class="tag">&lt;output</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"price-output"</span><span class="pln"> </span><span class="atn">for</span><span class="pun">=</span><span class="atv">"price"</span><span class="tag">&gt;&lt;/output&gt;</span></pre>

<p>
	ينشئ المثال السابق مزلاجًا تتراوح قيمه في المجال <code>50000</code> و <code>500000</code> وتزيد وتنقص القيمة بمقدار <code>100</code>. وضبطنا قيمته الافتراضية لتكون <code>250000</code>باستخدام الخاصية <code>value</code>.
</p>

<p>
	وتكمن مشكلة المزلاج بأنه لا يعرض افتراضيًا القيمة الحالية له بشكل مرئي، لهذا أضفنا العنصر <code>&lt;output&gt;</code> كي يضم القيمة الحالية للمزلاج. وباﻹمكان طبعًا عرض قيمة عنصر اﻹدخال أو نتيجة حسابات ما ضمن أي عنصر، لكن للعنصر <code>&lt;output&gt;</code> ميزة خاصة تشبه تلك التي يتمتع بها العنصر <code>&lt;label&gt;</code> من ناحية استخدام الخاصية <code>for</code> التي تسمح لك بربطه بالعنصر أو العناصر التي تعطيه قيمته. ولعرض القيمة الحالية للمزلاج وتحديثها كلما تغيّرت، لا بد من استخدام جافا سكريبت:
</p>

<ul>
	<li>
		شيفرة جافا سكريبت:
	</li>
</ul>

<pre class="ipsCode prettyprint lang-javascript prettyprinted" id="ips_uid_5612_40" style=""><span class="kwd">const</span><span class="pln"> price </span><span class="pun">=</span><span class="pln"> document</span><span class="pun">.</span><span class="pln">querySelector</span><span class="pun">(</span><span class="str">"#price"</span><span class="pun">);</span><span class="pln">
</span><span class="kwd">const</span><span class="pln"> output </span><span class="pun">=</span><span class="pln"> document</span><span class="pun">.</span><span class="pln">querySelector</span><span class="pun">(</span><span class="str">".price-output"</span><span class="pun">);</span><span class="pln">

output</span><span class="pun">.</span><span class="pln">textContent </span><span class="pun">=</span><span class="pln"> price</span><span class="pun">.</span><span class="pln">value</span><span class="pun">;</span><span class="pln">

price</span><span class="pun">.</span><span class="pln">addEventListener</span><span class="pun">(</span><span class="str">"input"</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">{</span><span class="pln">
 output</span><span class="pun">.</span><span class="pln">textContent </span><span class="pun">=</span><span class="pln"> price</span><span class="pun">.</span><span class="pln">value</span><span class="pun">;</span><span class="pln">
</span><span class="pun">});</span></pre>

<p>
	نخزّن في هذه الشيفرة مرجعًا إلى عنصر المزلاج <code>range</code> وإلى عنصر اﻹخراج <code>&lt;output&gt;</code> ضمن متغيرين. ومن ثم نضبط مباشرة قيم الخاصية <code>textcontent</code> للعنصر <code>output</code> لتكون قيمة عنصر شريط التمرير الحالية. نضبط أخيرًا مترصد أحداث للتأكد من تغيير قيمة الخاصية <code>textcontent</code> للخرج عندما يتحرك المزلاح إلى قيمة جديدة.
</p>

<h2 id="-6">
	عنصر انتقاء الوقت والتاريخ
</h2>

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

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_5612_42" style=""><span class="pln">1999/12/31, 23:59 
// أو
 12/31/99T11:59PM.</span></pre>

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

<p>
	<iframe height="200" loading="lazy" src="https://mdn.github.io/learning-area/html/forms/datetime-local-picker-fallback/index.html" width="100%"></iframe>
</p>

<p>
	لنلق نظرة سريعة اﻵن على اﻷنواع المتوفرة لعنصر التقويم (قيم الخاصية <code>type</code>). وانتبه إلى أن استخدام هذه اﻷنواع معقد، وخاصة فيما يتعلق بدعم المتصفح لهذا النوع.
</p>

<h3 id="datetimelocal">
	النوع <code>datetime-local</code>
</h3>

<p>
	تنشئ القيمة <code><a href="https://wiki.hsoub.com/HTML/input/datetime-local" rel="external">datetime-local</a> </code>عنصر تقويم يعرض التاريخ ويسمح لك بانتقاء الوقت والتاريخ دون تحديد منطقة زمنية:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_5612_45" style=""><span class="tag">&lt;input</span><span class="pln"> </span><span class="atn">type</span><span class="pun">=</span><span class="atv">"datetime-local"</span><span class="pln"> </span><span class="atn">name</span><span class="pun">=</span><span class="atv">"datetime"</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"datetime"</span><span class="pln"> </span><span class="tag">/&gt;</span></pre>

<h3 id="month">
	النوع <code>month</code>
</h3>

<p>
	تنشئ القيمة <code><a href="https://wiki.hsoub.com/HTML/input/month" rel="external">month</a><span style="display: none;">     </span></code> عنصر تقويم لعرض واختيار شهر مع السنة:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_5612_50" style=""><span class="tag">&lt;input</span><span class="pln"> </span><span class="atn">type</span><span class="pun">=</span><span class="atv">"month"</span><span class="pln"> </span><span class="atn">name</span><span class="pun">=</span><span class="atv">"month"</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"month"</span><span class="pln"> </span><span class="tag">/&gt;</span></pre>

<h3 id="time">
	النوع <code>time</code>
</h3>

<p>
	تنشئ القيمة <code><a href="https://wiki.hsoub.com/HTML/input/time" rel="external">time</a><span style="display: none;">     </span></code> عنصر تقويم لعرض واختيار الوقت، ويُعيد الوقت وفق تنسيق 24 ساعة:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_5612_52" style=""><span class="tag">&lt;input</span><span class="pln"> </span><span class="atn">type</span><span class="pun">=</span><span class="atv">"time"</span><span class="pln"> </span><span class="atn">name</span><span class="pun">=</span><span class="atv">"time"</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"time"</span><span class="pln"> </span><span class="tag">/&gt;</span></pre>

<h3 id="week">
	النوع <code>week</code>
</h3>

<p>
	تنشئ القيمة <code><span style="display: none;"> </span><a href="https://wiki.hsoub.com/HTML/input/week" rel="external">week</a><span style="display: none;">     </span></code> عنصر تقويم لعرض واختيار رقم اﻷسبوع مع السنة. يبدأ اﻷسبوع يوم الاثنين ويستمر حتى اﻷحد. وإضافة إلى ذلك، يضم الأسبوع اﻷول من السنة أول يوم خميس في هذا العام، وبالتالي قد لا يضم اليوم الأول من السنة، أو قد يضم آخر أيام من العام السابق.
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_5612_61" style=""><span class="tag">&lt;input</span><span class="pln"> </span><span class="atn">type</span><span class="pun">=</span><span class="atv">"week"</span><span class="pln"> </span><span class="atn">name</span><span class="pun">=</span><span class="atv">"week"</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"week"</span><span class="pln"> </span><span class="tag">/&gt;</span></pre>

<h3 id="-7">
	تحديد قيم الوقت والتاريخ
</h3>

<p>
	يمكن تحديد قيم جميع اﻷنواع السابقة لعنصر التقويم من خلال الخاصيتين <code>min</code> و <code>max</code> وكذلك الخاصية <code>step</code> التي قد تتغير قيمتها وفقًا لنوع عنصر التقويم المستخدم.
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_5612_63" style=""><span class="tag">&lt;label</span><span class="pln"> </span><span class="atn">for</span><span class="pun">=</span><span class="atv">"myDate"</span><span class="tag">&gt;</span><span class="pln">When are you available this summer?</span><span class="tag">&lt;/label&gt;</span><span class="pln">
</span><span class="tag">&lt;input</span><span class="pln">
 </span><span class="atn">type</span><span class="pun">=</span><span class="atv">"date"</span><span class="pln">
 </span><span class="atn">name</span><span class="pun">=</span><span class="atv">"myDate"</span><span class="pln">
 </span><span class="atn">min</span><span class="pun">=</span><span class="atv">"2013-06-01"</span><span class="pln">
 </span><span class="atn">max</span><span class="pun">=</span><span class="atv">"2013-08-31"</span><span class="pln">
 </span><span class="atn">step</span><span class="pun">=</span><span class="atv">"7"</span><span class="pln">
 </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"myDate"</span><span class="pln"> </span><span class="tag">/&gt;</span></pre>

<h2 id="-8">
	عنصر انتقاء اﻷلوان
</h2>

<p>
	من الصعب دائمًا التعامل مع اﻷلوان لوجود طرق كثيرة في التعبير عنها مثل منظومة RGB أو HSL أو بذكر اسم اللون راحة وهكذا. لهذا قدمت HTML5 عنصر انتقاء اللون الذي ننشئه باستخدام العنصر <code>&lt;input&gt;</code> والقيمة <a href="https://wiki.hsoub.com/HTML/input/color" rel="external">color</a> للخاصية <code>type</code>:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_5612_66" style=""><span class="tag">&lt;input</span><span class="pln"> </span><span class="atn">type</span><span class="pun">=</span><span class="atv">"color"</span><span class="pln"> </span><span class="atn">name</span><span class="pun">=</span><span class="atv">"color"</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"color"</span><span class="pln"> </span><span class="tag">/&gt;</span></pre>

<p>
	ويؤدي النقر على عنصر انتقاء اللون عادة إلى عرض منتقي اللون الافتراضي في نظام التشغيل. إليك مثالًا:
</p>

<p>
	<iframe height="200" loading="lazy" src="https://mdn.github.io/learning-area/html/forms/color-example/index.html" width="100%"></iframe>
</p>

<p>
	وتكون القيمة التي يعيدها منتقي اللون هي قيمة ست عشرية hexadecimal مكونة من 6 خانات تمثل اللون الذي اخترته.
</p>

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

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

<p>
	ترجمة -وبتصرف- للمقال: <a href="https://developer.mozilla.org/en-US/docs/Learn/Forms/HTML5_input_types" rel="external nofollow">The HTML5 input types</a>
</p>

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

<ul>
	<li>
		المقال السابق: <a href="https://academy.hsoub.com/programming/html/%D8%A3%D8%AF%D9%88%D8%A7%D8%AA-%D8%A7%D9%84%D8%AA%D8%AD%D9%83%D9%85-%D8%A7%EF%BB%B7%D8%B5%D9%84%D9%8A%D8%A9-%D9%81%D9%8A-%D8%A7%D8%B3%D8%AA%D9%85%D8%A7%D8%B1%D8%A7%D8%AA-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-r2389/" rel="">أدوات التحكم اﻷصلية في استمارات الويب</a>
	</li>
	<li>
		<p>
			<a href="https://academy.hsoub.com/programming/html/%D8%A7%D9%84%D9%86%D9%85%D8%A7%D8%B0%D8%AC-forms-%D9%81%D9%8A-html5-r370/" rel="">النماذج (Forms) في HTML5</a>
		</p>
	</li>
	<li>
		<p>
			<a href="https://academy.hsoub.com/programming/css/bootstrap/%D8%B9%D9%86%D8%A7%D8%B5%D8%B1-%D8%A7%D9%84%D8%A5%D8%AF%D8%AE%D8%A7%D9%84-%D8%A5%D9%86%D8%B4%D8%A7%D8%A1-%D8%A7%D8%B3%D8%AA%D9%85%D8%A7%D8%B1%D8%A9-%D8%AF%D9%81%D8%B9-%D9%81%D9%8A-%D8%A8%D9%88%D8%AA%D8%B3%D8%AA%D8%B1%D8%A7%D8%A8-r1560/" rel="">عناصر الإدخال: إنشاء استمارة دفع في بوتستراب</a>
		</p>
	</li>
	<li>
		<p>
			<a href="https://academy.hsoub.com/programming/html/%D8%A7%D9%84%D8%AA%D8%B1%D9%83%D9%8A%D8%B2-%D8%B9%D9%84%D9%89-%D8%B9%D9%86%D8%A7%D8%B5%D8%B1-%D8%B5%D9%81%D8%AD%D8%A9-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-r1324/" rel="">التركيز على عناصر صفحة الويب</a>
		</p>
	</li>
	<li>
		<p>
			<a href="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/" rel="">تنسيق الصور والوسائط المتعددة والنماذج في CSS</a>
		</p>
	</li>
</ul>
]]></description><guid isPermaLink="false">2392</guid><pubDate>Mon, 26 Aug 2024 15:04:02 +0000</pubDate></item><item><title>&#x623;&#x62F;&#x648;&#x627;&#x62A; &#x627;&#x644;&#x62A;&#x62D;&#x643;&#x645; &#x627;&#xFEF7;&#x635;&#x644;&#x64A;&#x629; &#x641;&#x64A; &#x627;&#x633;&#x62A;&#x645;&#x627;&#x631;&#x627;&#x62A; &#x627;&#x644;&#x648;&#x64A;&#x628;</title><link>https://academy.hsoub.com/programming/html/%D8%A3%D8%AF%D9%88%D8%A7%D8%AA-%D8%A7%D9%84%D8%AA%D8%AD%D9%83%D9%85-%D8%A7%EF%BB%B7%D8%B5%D9%84%D9%8A%D8%A9-%D9%81%D9%8A-%D8%A7%D8%B3%D8%AA%D9%85%D8%A7%D8%B1%D8%A7%D8%AA-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-r2389/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2024_08/-----.png.151e380f1a31db2e2c2e2f0b7e6dcc38.png" /></p>
<p>
	شرحنا في<a href="https://academy.hsoub.com/programming/html/%D9%87%D9%8A%D9%83%D9%84%D8%A9-%D8%A7%D8%B3%D8%AA%D9%85%D8%A7%D8%B1%D8%A9-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-web-forms-r2383/" rel=""> مقال سابق</a> مثالًا عمليًا على استمارات الويب، وتعرفنا على بعض عناصر التحكم في الاستمارة والهيكليات الشائعة في بنائها، وركزنا اهتمامنا على أفضل الممارسات التي تُعنى بسهولة الوصول accessibility وتضمن إتاحة المحتوى لجميع الأشخاص.
</p>

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

<p>
	تعرفنا مسبقًا على بعض أنواع عناصر التحكم مثل <code>&lt;form&gt;</code> و <code>&lt;legend&gt;</code> و <code>&lt;label&gt;</code> و <code>&lt;fieldset&gt;</code> و <code>&lt;textarea&gt;</code> و <code>&lt;input&gt;</code>. ونستكشف في هذا المقال الأمور التالية:
</p>

<ul>
	<li>
		اﻷنواع المختلفة لعناصر الدخل <code>&lt;input&gt;</code> وهي <code>button</code> و <code>checkbox</code> و <code>file</code> و <code>hidden</code> و <code>image</code> و <code>password</code> و <code>radio</code> و <code>reset</code> و <code>submit</code>و <code>text</code>.
	</li>
	<li>
		بعض السمات المشتركة بين جميع عناصر التحكم باستمارة الويب.
	</li>
</ul>

<p>
	<strong>ملاحظة</strong>: سنغطي أيضًا بعض عناصر التحكم الأكثر فعالية في مقالات لاحق وننصحك قبل المتابعة في قراءة هذا المقال أن تطلع على سلسلة مقالات <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> للتعرف على هيكلية صفحات ويب باستخدام لغة HTML وتتعرف على عناصرها.
</p>

<h2 id="-1">
	حقول اﻹدخال النصية
</h2>

<p>
	تُعد حقول اﻹدخال النصية <code><a href="https://wiki.hsoub.com/HTML/input" rel="external">&lt;input&gt;</a></code> من أبسط أشكال عناصر التحكم بالاستمارات تزود المستخدم بطريقة ملائمة ﻹدخال أي نوع من البيانات كما رأينا في أمثلة سابقة.
</p>

<p>
	<strong>ملاحظة</strong>: إن الحقول النصية التي تقدمها HTML هي حقول نصية بسيطة لا يمكن استخدامها في إنشاء عناصر إدخال غنية كالتي تعرض خطوطًا سميكة أو مائلة أو ملونة، وجميع العناصر التي تصادفها من هذا النوع هي في الواقع عناصر تحكم معدّلة باستخدام <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> و <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="">جافا سكريبت</a>.
</p>

<p>
	تشترك جميع عناصر اﻹدخال النصي في استمارات الويب بالسلوك التالي:
</p>

<ul>
	<li>
		يمكن أن تكون جميع هذه العناصر بحالة للقراءة فقط <code>readonly</code> أي لا يمكن للمستخدم تعديل محتواها لكن بياناتها تُسلَّم مع الاستمارة، كما يمكن أن تكون معطّلة <code>disabled</code> أي لا يمكن للمستخدم تغيير محتواها ولن تُسلَّم مع بقية بيانات الاستمارة.
	</li>
	<li>
		تملك جميع هذه العناصر السمة <code><a href="https://wiki.hsoub.com/CSS/::placeholder" rel="external">placeholder</a></code> التي تعرض نصًا توضيحيًا داخل العنصر يصف باختصار الغاية من عنصر التحكم هذا أو نوع البيانات المتوقع إدخالها فيه.
	</li>
	<li>
		يمكن أن نحدد قياسها <code>size</code> (أي القياس الفيزيائي للصندوق)، وعدد المحارف اﻷعظمي التي يمكن أن تستوعبها <code>maxlength</code>.
	</li>
	<li>
		يمكن التحقق فيها من الصحة اﻹملائية للمحتوى باستخدام السمة <code>spellcheck</code> إن كان المتصفح يدعم ذلك.
	</li>
</ul>

<p>
	<strong>ملاحظة</strong>: تُعد عناصر التحكم <code>&lt;inputs&gt;</code> فريدة في HTML لأنها قد تأخذ أشكالًا مختلفة وفقًا لقيمة السمة <code>type</code>، وتُستخدم في بناء معظم عناصر التحكم بما في ذلك حقول اﻹدخال النصي وحيدة ومتعددة اﻷسطر وعناصر عرض الوقت والتاريخ وعناصر أخرى مثل صناديق التحقق وأزرار الخيار المتعدد <a href="https://wiki.hsoub.com/HTML/input/radio" rel="external">radio buttons</a> وعناصر انتقاء اﻷلوان واﻷزرار النمطية.
</p>

<h3 id="-2">
	الحقول النصية ذات السطر المفرد
</h3>

<p>
	ننشئ هذا الحقل باستخدام العنصر <code>&lt;input&gt;</code> بعد ضبط قيمة السمة <code>type</code> على <code>text</code> أو دون استخدام السمة <code>type</code> نهائيًا، لأن القيمة الافتراضية ستكون <code>text</code> في هذه الحالة. وتُعد القيمة <code>text</code> قيم تراجع (قيم احتياطية) fallback إن كانت القيمة التي أسندتها إلى الخاصية <code>type</code> غير معروفة من قبل المتصفح (كأن تختار القيمة <code>color</code> في حين لا يدعم متصفح عنصر أصلي لانتقاء اللون).
</p>

<p>
	<strong>ملاحظة</strong>: بإمكانك إيجاد <a href="https://github.com/mdn/learning-area/blob/main/html/forms/native-form-widgets/single-line-text-fields.html" rel="external nofollow">أمثلة</a> عن مختلف أنواع حقل اﻹدخال النصي المفرد على جت-هب وتجربتها <a href="https://mdn.github.io/learning-area/html/forms/native-form-widgets/single-line-text-fields.html" rel="external nofollow">مباشرة</a> أيضًا.
</p>

<p>
	إليك مثالًا بسيطًا عن حقل إدخال نصي مفرد السطر:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_9919_8" style=""><span class="tag">&lt;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">"comment"</span><span class="pln"> </span><span class="atn">name</span><span class="pun">=</span><span class="atv">"comment"</span><span class="pln"> </span><span class="atn">value</span><span class="pun">=</span><span class="atv">"I'm a text field"</span><span class="pln"> </span><span class="tag">/&gt;</span></pre>

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

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

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="156256" href="https://academy.hsoub.com/uploads/monthly_2024_08/01_disabled.png.17cc26595ea5331da79263b5f1a74dd9.png" rel=""><img alt="01 disabled" class="ipsImage ipsImage_thumbnailed" data-fileid="156256" data-unique="l6z69uykp" src="https://academy.hsoub.com/uploads/monthly_2024_08/01_disabled.png.17cc26595ea5331da79263b5f1a74dd9.png"> </a>
</p>

<p>
	التقطت الصورة السابقة من متصفح كروم على نظام ماك أو إس (macOS)، وقد تكون هناك اختلافات طفيفة بين الحقول أو اﻷزرار من متصفح إلى آخر، لكن تقنية تظليل العناصر لتمييز حالتها تبقى متشابهة.
</p>

<h3 id="-3">
	حقل كلمة المرور
</h3>

<p>
	يُعد <a href="https://wiki.hsoub.com/HTML/input/password" rel="external">عنصر إدخال كلمة المرور</a> من النمط <code>password</code> من عناصر الإدخال اﻷصلية في HTML:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_9919_10" style=""><span class="tag">&lt;input</span><span class="pln"> </span><span class="atn">type</span><span class="pun">=</span><span class="atv">"password"</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"pwd"</span><span class="pln"> </span><span class="atn">name</span><span class="pun">=</span><span class="atv">"pwd"</span><span class="pln"> </span><span class="tag">/&gt;</span></pre>

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

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="156257" href="https://academy.hsoub.com/uploads/monthly_2024_08/02_password.png.92d70bed5eef2b81ee7f65039644c915.png" rel=""><img alt="02 password" class="ipsImage ipsImage_thumbnailed" data-fileid="156257" data-unique="0s6u29cll" src="https://academy.hsoub.com/uploads/monthly_2024_08/02_password.png.92d70bed5eef2b81ee7f65039644c915.png"> </a>
</p>

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

<p>
	<strong>ملاحظة</strong>: تميز المتصفحات المخاطر والتبعات اﻷمنية ﻹرسال البيانات من خلال اتصال غير آمن (أي بدون استخدام بروتوكول HTTPS المشفر)، وتحذر المستخدم من استخدام استمارات ويب غير آمنة.
</p>

<h3 id="-4">
	المحتوى المخفي
</h3>

<p>
	من اﻷنواع الأخرى لعناصر اﻹدخال هي العناصر المخفية <code><a href="https://wiki.hsoub.com/HTML/input/hidden" rel="external">hidden</a></code>، وتُستخدم ﻹنشاء عنصر تحكم غير مرئي للمستخدم لكنه قادر على إرسال البيانات إلى الخادم مع بقية عناصر الاستمارة. فقد ترغب مثلا بإرسال فترة زمنية تشير إلى تاريخ تنفيذ الطلب. وهكذا لن يتمكن المستخدم من رؤية هذا العنصر أو تعديل قيمته عمدًا، فلن يتلقى هذا العنصر تركيز الدخل أبدًا، ولن تلاحظه أيضًا قارئات الشاشة.
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_9919_21" style=""><span class="tag">&lt;input</span><span class="pln"> </span><span class="atn">type</span><span class="pun">=</span><span class="atv">"hidden"</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"timestamp"</span><span class="pln"> </span><span class="atn">name</span><span class="pun">=</span><span class="atv">"timestamp"</span><span class="pln"> </span><span class="atn">value</span><span class="pun">=</span><span class="atv">"1286705410"</span><span class="pln"> </span><span class="tag">/&gt;</span></pre>

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

<h2 id="checkboxesradiobuttons">
	صناديق التحقق Checkboxes وأزرار الاختيار المتعدد Radio buttons
</h2>

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

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

<p>
	<strong>ملاحظة</strong>: بإمكانك الاطلاع على <a href="https://github.com/mdn/learning-area/blob/main/html/forms/native-form-widgets/checkable-items.html" rel="external nofollow">مثال هذا القسم</a> على جت-هب و<a href="https://mdn.github.io/learning-area/html/forms/native-form-widgets/checkable-items.html" rel="external nofollow">تجربته مباشرة</a> أيضًا.
</p>

<p>
	ولتقديم أفضل طريقة استخدام تدعم شمولية الوصول، أحط كل قائمة من هذه العناصر لها نفس الغاية <a href="https://wiki.hsoub.com/HTML/fieldset" rel="external">بالعنصر &lt;fieldset&gt;</a> واستخدم <a href="https://wiki.hsoub.com/HTML/legend" rel="external">العنصر &lt;legend&gt;</a> ﻹعطاء توصيف كامل للقائمة. كما ينبغي أن يكون كل زوج <code>&lt;label&gt;</code> / <code>&lt;input&gt;</code> ضمن عنصر قائمة خاص به. ويوضع العنوان المرافق لكل عنصر قبله أو بعده مباشرة، بينما يوضع وصف عمل مجموع أزرار الاختيار المتعدد أو صناديق التحقق ضمن العنصر <code>&lt;legend&gt;</code>. الق نظرة على المثال السابق لترى هيكلة هذه العناصر في الاستمارة.
</p>

<h3 id="checkbox">
	صندوق التحقق Checkbox
</h3>

<p>
	ننشئ صندوق التحقق <code><a href="https://wiki.hsoub.com/HTML/input/checkbox" rel="external">checkbox</a></code> باستخدام العنصر <code>&lt;input&gt;</code> والسمة <code>type = checkbox</code> كما يلي:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_9919_25" style=""><span class="tag">&lt;input</span><span class="pln"> </span><span class="atn">type</span><span class="pun">=</span><span class="atv">"checkbox"</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"questionOne"</span><span class="pln"> </span><span class="atn">name</span><span class="pun">=</span><span class="atv">"subscribe"</span><span class="pln"> </span><span class="atn">value</span><span class="pun">=</span><span class="atv">"yes"</span><span class="pln"> </span><span class="atn">checked</span><span class="pln"> </span><span class="tag">/&gt;</span></pre>

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

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_9919_28" style=""><span class="tag">&lt;fieldset&gt;</span><span class="pln">
 </span><span class="tag">&lt;legend&gt;</span><span class="pln">Choose all the vegetables you like to eat</span><span class="tag">&lt;/legend&gt;</span><span class="pln">
 </span><span class="tag">&lt;ul&gt;</span><span class="pln">
    </span><span class="tag">&lt;li&gt;</span><span class="pln">
     </span><span class="tag">&lt;label</span><span class="pln"> </span><span class="atn">for</span><span class="pun">=</span><span class="atv">"carrots"</span><span class="tag">&gt;</span><span class="pln">Carrots</span><span class="tag">&lt;/label&gt;</span><span class="pln">
     </span><span class="tag">&lt;input</span><span class="pln">
      </span><span class="atn">type</span><span class="pun">=</span><span class="atv">"checkbox"</span><span class="pln">
      </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"carrots"</span><span class="pln">
      </span><span class="atn">name</span><span class="pun">=</span><span class="atv">"vegetable"</span><span class="pln">
      </span><span class="atn">value</span><span class="pun">=</span><span class="atv">"carrots"</span><span class="pln">
      </span><span class="atn">checked</span><span class="pln"> </span><span class="tag">/&gt;</span><span class="pln">
    </span><span class="tag">&lt;/li&gt;</span><span class="pln">
    </span><span class="tag">&lt;li&gt;</span><span class="pln">
     </span><span class="tag">&lt;label</span><span class="pln"> </span><span class="atn">for</span><span class="pun">=</span><span class="atv">"peas"</span><span class="tag">&gt;</span><span class="pln">Peas</span><span class="tag">&lt;/label&gt;</span><span class="pln">
     </span><span class="tag">&lt;input</span><span class="pln"> </span><span class="atn">type</span><span class="pun">=</span><span class="atv">"checkbox"</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"peas"</span><span class="pln"> </span><span class="atn">name</span><span class="pun">=</span><span class="atv">"vegetable"</span><span class="pln"> </span><span class="atn">value</span><span class="pun">=</span><span class="atv">"peas"</span><span class="pln"> </span><span class="tag">/&gt;</span><span class="pln">
    </span><span class="tag">&lt;/li&gt;</span><span class="pln">
    </span><span class="tag">&lt;li&gt;</span><span class="pln">
     </span><span class="tag">&lt;label</span><span class="pln"> </span><span class="atn">for</span><span class="pun">=</span><span class="atv">"cabbage"</span><span class="tag">&gt;</span><span class="pln">Cabbage</span><span class="tag">&lt;/label&gt;</span><span class="pln">
     </span><span class="tag">&lt;input</span><span class="pln"> </span><span class="atn">type</span><span class="pun">=</span><span class="atv">"checkbox"</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"cabbage"</span><span class="pln"> </span><span class="atn">name</span><span class="pun">=</span><span class="atv">"vegetable"</span><span class="pln"> </span><span class="atn">value</span><span class="pun">=</span><span class="atv">"cabbage"</span><span class="pln"> </span><span class="tag">/&gt;</span><span class="pln">
    </span><span class="tag">&lt;/li&gt;</span><span class="pln">
 </span><span class="tag">&lt;/ul&gt;</span><span class="pln">
</span><span class="tag">&lt;/fieldset&gt;</span></pre>

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

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="156258" href="https://academy.hsoub.com/uploads/monthly_2024_08/03_checkboxes.png.4a744edecee70e22915d0501bf32d563.png" rel=""><img alt="03 checkboxes" class="ipsImage ipsImage_thumbnailed" data-fileid="156258" data-unique="fxahjmlre" src="https://academy.hsoub.com/uploads/monthly_2024_08/03_checkboxes.png.4a744edecee70e22915d0501bf32d563.png"> </a>
</p>

<p>
	<strong>ملاحظة</strong>: يتطابق تنسيق صناديق التحقق وأزرار الاختيار المتعدد التي تأتي مع السمة <code>checked</code> مع محدد الصنف الزائف <code>default:</code> حتى لو ألغي تفعيلها لاحقًا، بينما يتطابق تنسيق العناصر التي فُعلت حاليًا مع محدد الصنف الزائف <code>checked:</code>.
</p>

<p>
	ونظرًا لطبيعة هذه العناصر التي تتأرجح بين التفعيل أو عدمه، فهي تُعدّ أزرار تبديل toggle buttons. حيث يعمد الكثير من المطورين إلى توسيع التنسيق الافتراضي لهذه العناصر ﻹنشاء أزرار تبدو وكأنها مفاتيح تبديل (الق نظرة على <a href="https://mdn.github.io/learning-area/html/forms/toggle-switch-example/" rel="external nofollow">المثال</a> الذي يوضح اﻷمر واطلع على <a href="https://github.com/mdn/learning-area/blob/main/html/forms/toggle-switch-example/index.html" rel="external nofollow">شيفرته المصدرية</a> إن أردت).
</p>

<h3 id="radiobuttons">
	أزرار الاختيار المتعدد Radio buttons
</h3>

<p>
	ننشئ أزرار الاختيار المتعدد باستخدام العنصر <code>&lt;input&gt;</code> والسمة <code>type = radio</code> كما يلي:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_9919_30" style=""><span class="tag">&lt;input</span><span class="pln"> </span><span class="atn">type</span><span class="pun">=</span><span class="atv">"radio"</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"soup"</span><span class="pln"> </span><span class="atn">name</span><span class="pun">=</span><span class="atv">"meal"</span><span class="pln"> </span><span class="atn">value</span><span class="pun">=</span><span class="atv">"soup"</span><span class="pln"> </span><span class="atn">checked</span><span class="pln"> </span><span class="tag">/&gt;</span></pre>

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

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_9919_32" style=""><span class="tag">&lt;fieldset&gt;</span><span class="pln">
 </span><span class="tag">&lt;legend&gt;</span><span class="pln">What is your favorite meal?</span><span class="tag">&lt;/legend&gt;</span><span class="pln">
 </span><span class="tag">&lt;ul&gt;</span><span class="pln">
    </span><span class="tag">&lt;li&gt;</span><span class="pln">
     </span><span class="tag">&lt;label</span><span class="pln"> </span><span class="atn">for</span><span class="pun">=</span><span class="atv">"soup"</span><span class="tag">&gt;</span><span class="pln">Soup</span><span class="tag">&lt;/label&gt;</span><span class="pln">
     </span><span class="tag">&lt;input</span><span class="pln"> </span><span class="atn">type</span><span class="pun">=</span><span class="atv">"radio"</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"soup"</span><span class="pln"> </span><span class="atn">name</span><span class="pun">=</span><span class="atv">"meal"</span><span class="pln"> </span><span class="atn">value</span><span class="pun">=</span><span class="atv">"soup"</span><span class="pln"> </span><span class="atn">checked</span><span class="pln"> </span><span class="tag">/&gt;</span><span class="pln">
    </span><span class="tag">&lt;/li&gt;</span><span class="pln">
    </span><span class="tag">&lt;li&gt;</span><span class="pln">
     </span><span class="tag">&lt;label</span><span class="pln"> </span><span class="atn">for</span><span class="pun">=</span><span class="atv">"curry"</span><span class="tag">&gt;</span><span class="pln">Curry</span><span class="tag">&lt;/label&gt;</span><span class="pln">
     </span><span class="tag">&lt;input</span><span class="pln"> </span><span class="atn">type</span><span class="pun">=</span><span class="atv">"radio"</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"curry"</span><span class="pln"> </span><span class="atn">name</span><span class="pun">=</span><span class="atv">"meal"</span><span class="pln"> </span><span class="atn">value</span><span class="pun">=</span><span class="atv">"curry"</span><span class="pln"> </span><span class="tag">/&gt;</span><span class="pln">
    </span><span class="tag">&lt;/li&gt;</span><span class="pln">
    </span><span class="tag">&lt;li&gt;</span><span class="pln">
     </span><span class="tag">&lt;label</span><span class="pln"> </span><span class="atn">for</span><span class="pun">=</span><span class="atv">"pizza"</span><span class="tag">&gt;</span><span class="pln">Pizza</span><span class="tag">&lt;/label&gt;</span><span class="pln">
     </span><span class="tag">&lt;input</span><span class="pln"> </span><span class="atn">type</span><span class="pun">=</span><span class="atv">"radio"</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"pizza"</span><span class="pln"> </span><span class="atn">name</span><span class="pun">=</span><span class="atv">"meal"</span><span class="pln"> </span><span class="atn">value</span><span class="pun">=</span><span class="atv">"pizza"</span><span class="pln"> </span><span class="tag">/&gt;</span><span class="pln">
    </span><span class="tag">&lt;/li&gt;</span><span class="pln">
 </span><span class="tag">&lt;/ul&gt;</span><span class="pln">
</span><span class="tag">&lt;/fieldset&gt;</span></pre>

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

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="156259" href="https://academy.hsoub.com/uploads/monthly_2024_08/04_radios.png.e73d00b9c7cac529c9890900fee81fd1.png" rel=""><img alt="04 radios" class="ipsImage ipsImage_thumbnailed" data-fileid="156259" data-unique="74gwbpopi" src="https://academy.hsoub.com/uploads/monthly_2024_08/04_radios.png.e73d00b9c7cac529c9890900fee81fd1.png"> </a>
</p>

<h2 id="-5">
	اﻷزرار الفعلية في استمارات الويب
</h2>

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

<ul>
	<li>
		<code>submit</code>: التي ترسل بيانات الاستمارة إلى الخادم. كما ينتج هذا النوع عن العنصر <code>&lt;button&gt;</code> عندما نهمل السمة <code>type</code> أو نسند إليها قيمة غير معروفة.
	</li>
	<li>
		<code>reset</code>: يعيد عناصر تحكم الاستمارة إلى وضعها الافتراضي.
	</li>
	<li>
		<code>button</code>: ليس لها تأثير تلقائي، لكن باﻹمكان تخصيصها باستخدام جافا سكريبت.
	</li>
</ul>

<p>
	ولدينا أيضًا العنصر <code>&lt;button&gt;</code> الذي يمتلك السمة <code>type</code> وتاخذ إحدى القيم <code>submit</code> و <code>reset</code> و <code>button</code> ليحاكي سلوك اﻷنواع الثلاث لعنصر اﻹدخال. أما الاختلاف الحقيقي، فيكمن في سهولة تنسيق الزر الفعلي:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_9919_34" style=""><span class="tag">&lt;input</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 this form"</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">type</span><span class="pun">=</span><span class="atv">"reset"</span><span class="pln"> </span><span class="atn">value</span><span class="pun">=</span><span class="atv">"Reset this form"</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">type</span><span class="pun">=</span><span class="atv">"button"</span><span class="pln"> </span><span class="atn">value</span><span class="pun">=</span><span class="atv">"Do Nothing without JavaScript"</span><span class="pln"> </span><span class="tag">/&gt;</span><span class="pln">

</span><span class="tag">&lt;button</span><span class="pln"> </span><span class="atn">type</span><span class="pun">=</span><span class="atv">"submit"</span><span class="tag">&gt;</span><span class="pln">Submit this form</span><span class="tag">&lt;/button&gt;</span><span class="pln">
</span><span class="tag">&lt;button</span><span class="pln"> </span><span class="atn">type</span><span class="pun">=</span><span class="atv">"reset"</span><span class="tag">&gt;</span><span class="pln">Reset this form</span><span class="tag">&lt;/button&gt;</span><span class="pln">
</span><span class="tag">&lt;button</span><span class="pln"> </span><span class="atn">type</span><span class="pun">=</span><span class="atv">"button"</span><span class="tag">&gt;</span><span class="pln">Do Nothing without JavaScript</span><span class="tag">&lt;/button&gt;</span></pre>

<p>
	<iframe allowfullscreen="true" allowtransparency="true" frameborder="no" height="300" loading="lazy" scrolling="no" src="https://codepen.io/HsoubAcademy/embed/oNrpRpz?default-tab=result" style="width: 100%;" title="Basic native form controls">See the Pen Basic native form controls by Hsoub Academy (@HsoubAcademy) on CodePen.</iframe>
</p>

<p>
	كما تلاحظ سيعرض عنصر اﻹدخال <code>image</code> على شكل زر، وسنغطي شرح هذا لاحقًا.
</p>

<p>
	<strong>ملاحظة</strong>: بإمكانك الاطلاع على <a href="https://github.com/mdn/learning-area/blob/main/html/forms/native-form-widgets/button-examples.html" rel="external nofollow">مثال هذا القسم</a> على جت-هب <a href="https://mdn.github.io/learning-area/html/forms/native-form-widgets/button-examples.html" rel="external nofollow">وتجربته مباشرة</a> أيضًا.
</p>

<p>
	إليك أمثلة عن استخدام عناصر اﻹدخال ﻹنشاء زر واستخدام الزر الفعلي <code>&lt;button&gt;</code> المكافئ:
</p>

<h3 id="submit">
	الزر submit
</h3>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_9919_36" style=""><span class="tag">&lt;button</span><span class="pln"> </span><span class="atn">type</span><span class="pun">=</span><span class="atv">"submit"</span><span class="tag">&gt;</span><span class="pln">This is a </span><span class="tag">&lt;strong&gt;</span><span class="pln">submit button</span><span class="tag">&lt;/strong&gt;&lt;/button&gt;</span><span class="pln">

</span><span class="tag">&lt;input</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">"This is a submit button"</span><span class="pln"> </span><span class="tag">/&gt;</span></pre>

<h3 id="reset">
	الزر reset
</h3>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_9919_38" style=""><span class="tag">&lt;button</span><span class="pln"> </span><span class="atn">type</span><span class="pun">=</span><span class="atv">"reset"</span><span class="tag">&gt;</span><span class="pln">This is a </span><span class="tag">&lt;strong&gt;</span><span class="pln">reset button</span><span class="tag">&lt;/strong&gt;&lt;/button&gt;</span><span class="pln">

</span><span class="tag">&lt;input</span><span class="pln"> </span><span class="atn">type</span><span class="pun">=</span><span class="atv">"reset"</span><span class="pln"> </span><span class="atn">value</span><span class="pun">=</span><span class="atv">"This is a reset button"</span><span class="pln"> </span><span class="tag">/&gt;</span></pre>

<h3 id="-6">
	الزر غير المحدد
</h3>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_9919_40" style=""><span class="tag">&lt;button</span><span class="pln"> </span><span class="atn">type</span><span class="pun">=</span><span class="atv">"button"</span><span class="tag">&gt;</span><span class="pln">This is an </span><span class="tag">&lt;strong&gt;</span><span class="pln">anonymous button</span><span class="tag">&lt;/strong&gt;&lt;/button&gt;</span><span class="pln">

</span><span class="tag">&lt;input</span><span class="pln"> </span><span class="atn">type</span><span class="pun">=</span><span class="atv">"button"</span><span class="pln"> </span><span class="atn">value</span><span class="pun">=</span><span class="atv">"This is an anonymous button"</span><span class="pln"> </span><span class="tag">/&gt;</span></pre>

<p>
	تسلك الأزرار الحقيقية السلوك نفسه سواءً استخدمت العنصر <code>&lt;button&gt;</code> أو عنصر إدخال <code>&lt;input&gt;</code>. ويسمح لكن عنصر الزر <code>&lt;button&gt;</code> باستخدام عناصر HTML ضمن محتواها، بوضع العنصر بين وسمي البداية والنهاية، أما عناصر اﻹدخال فهي عناصر فارغة (عقيمة أو بدون أبناء) ولا يمكن وضع محتوى فيها إلا على شكل قيمة للسمة <code>value</code>، وبالتالي لن تقبل سوى المحتوى النصي.
</p>

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

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="156260" href="https://academy.hsoub.com/uploads/monthly_2024_08/05_buttons.png.d26a5e9f0ea3c5f7b92699806ecb8fda.png" rel=""><img alt="05 buttons" class="ipsImage ipsImage_thumbnailed" data-fileid="156260" data-unique="hgfbkbxu6" src="https://academy.hsoub.com/uploads/monthly_2024_08/05_buttons.png.d26a5e9f0ea3c5f7b92699806ecb8fda.png"> </a>
</p>

<h3 id="-7">
	زر الصورة
</h3>

<p>
	يُصيّر عنصر التحكم "زر الصورة image button" كما يُصير عنصر الصورة <code>&lt;img&gt;</code> تمامًا ما عدا أنه يسلك سلوك زر اﻹرسال <code>submit</code> عند النقر عليه.
</p>

<p>
	ننشئ زر الصورة باستخدام العنصر <code>&lt;input&gt;</code> والسمة <code>type = image</code> ويمتلك جميع الخاصيات التي يمتلكها زر الاستمارة:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_9919_42" style=""><span class="tag">&lt;input</span><span class="pln"> </span><span class="atn">type</span><span class="pun">=</span><span class="atv">"image"</span><span class="pln"> </span><span class="atn">alt</span><span class="pun">=</span><span class="atv">"Click me!"</span><span class="pln"> </span><span class="atn">src</span><span class="pun">=</span><span class="atv">"my-img.png"</span><span class="pln"> </span><span class="atn">width</span><span class="pun">=</span><span class="atv">"80"</span><span class="pln"> </span><span class="atn">height</span><span class="pun">=</span><span class="atv">"30"</span><span class="pln"> </span><span class="tag">/&gt;</span></pre>

<p>
	إن استخدمنا زر الصورة في تسليم بيانات الاستمارة، لن يسلم هذا العنصر قيمته، بل اﻹحداثيين X و Y لنقطة النقر على الصورة (منسوبةً إلى الزاوية العليا اليسارية للصورة التي تمثل النقطة (0,0)). وتُرسل اﻹحداثيات على شكل زوجين مفتاح/قيمة:
</p>

<ul>
	<li>
		قيمة الخاصية <code>name</code> مع قيمة x (على شكل قيمة نصية).
	</li>
	<li>
		قيمة الخاصية <code>name</code> مع قيمة y (على شكل قيمة نصية).
	</li>
</ul>

<p>
	فلو نقرت مثلًا على النقطة (123,456) من زر الصورة وسلمت محتوى الاستمارة من خلال طلب من النوع <code>get</code> سترى أن القيمة الملحقة بعنوان URL الخاص بالطلب كالتالي:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_9919_44" style=""><span class="pln">http://foo.com?pos.x=123&amp;pos.y=456</span></pre>

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

<h2 id="filepicker">
	عنصر انتقاء الملفات File Picker
</h2>

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

<p>
	نستخدم عنصر اﻹدخال <code>&lt;input&gt;</code> ﻹنشاء منتقي ملفات بإسناد القيمة <code>file</code> للسمة <code>type</code>. ويمكن تحديد نوع الملف الذي تريد إرساله باستخدام السمة <code>accept</code>، وإن أردت السماح للمستخدم اختيار عدة ملفات، يمكنك استخدام السمة <code>multiple</code>:
</p>

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

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

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_9919_46" style=""><span class="tag">&lt;input</span><span class="pln"> </span><span class="atn">type</span><span class="pun">=</span><span class="atv">"file"</span><span class="pln"> </span><span class="atn">name</span><span class="pun">=</span><span class="atv">"file"</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"file"</span><span class="pln"> </span><span class="atn">accept</span><span class="pun">=</span><span class="atv">"image/*"</span><span class="pln"> </span><span class="atn">multiple</span><span class="pln"> </span><span class="tag">/&gt;</span></pre>

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

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_9919_48" style=""><span class="tag">&lt;input</span><span class="pln"> </span><span class="atn">type</span><span class="pun">=</span><span class="atv">"file"</span><span class="pln"> </span><span class="atn">accept</span><span class="pun">=</span><span class="atv">"image/*;capture=camera"</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">type</span><span class="pun">=</span><span class="atv">"file"</span><span class="pln"> </span><span class="atn">accept</span><span class="pun">=</span><span class="atv">"video/*;capture=camcorder"</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">type</span><span class="pun">=</span><span class="atv">"file"</span><span class="pln"> </span><span class="atn">accept</span><span class="pun">=</span><span class="atv">"audio/*;capture=microphone"</span><span class="pln"> </span><span class="tag">/&gt;</span></pre>

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

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="156261" href="https://academy.hsoub.com/uploads/monthly_2024_08/06_filepickers.png.1860e3ef8349b1f0febcbc87f14cfc4a.png" rel=""><img alt="06 filepickers" class="ipsImage ipsImage_thumbnailed" data-fileid="156261" data-unique="2veae3r6r" src="https://academy.hsoub.com/uploads/monthly_2024_08/06_filepickers.thumb.png.603d7d671e9425c13a1c1e369a00020b.png"> </a>
</p>

<h3 id="-9">
	السمات المشتركة
</h3>

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

<table>
	<thead>
		<tr>
			<th>
				اسم السمة
			</th>
			<th>
				القيمة الافتراضية
			</th>
			<th style="text-align:right;">
				الوصف
			</th>
		</tr>
	</thead>
	<tbody>
		<tr>
			<td>
				<code>autofocus</code>
			</td>
			<td>
				false
			</td>
			<td style="text-align:right;">
				تسمح لك هذه السمة ذات القيمة المنطقية تحديد إن كان العنصر سيكتسب تركيز الدخل تلقائيًا عند تحميل الصفحة. ويمكن تخصيص قيمة هذه السمة لعنصر واحد فقط في الصفحة.
			</td>
		</tr>
		<tr>
			<td>
				<code>disabled</code>
			</td>
			<td>
				false
			</td>
			<td style="text-align:right;">
				قيمة منطقية تشير إلى أن المستخدم غير قادر على التفاعل مع هذا العنصر. وفي حال لم تستخدم هذه السمة، سيرث العنصر قيمة هذه السمة من العنصر اﻷب. فالعنصر <code>&lt;fieldset&gt;</code> مثلًا سيكون مفعّلًا إن لم يكن ضمن عنصر أب ضبط قيمة هذه السمة فيه على <code>disable</code>.
			</td>
		</tr>
		<tr>
			<td>
				<code>form</code>
			</td>
			<td>
				 
			</td>
			<td style="text-align:right;">
				وتمثل الاستمارة التي نربط بها عنصر التحكم، وتستخدم عندما لا يكون العنصر موضوعًا داخل حاوية الاستمارة. وينبغي أن تكون قيمة هذه السمة هي قيمة المعرف <code>id</code> للاستمارة في نفس الصفحة، وتساعدك هذه السمة في ربط عنصر باستمارة حتى لو كان خارجها أو حتى ضمن استمارة أخرى.
			</td>
		</tr>
		<tr>
			<td>
				<code>name</code>
			</td>
			<td>
				 
			</td>
			<td style="text-align:right;">
				اسم العنصر، وتسلم هذه القيمة مع البيانات عند تسليم الاستمارة.
			</td>
		</tr>
		<tr>
			<td>
				<code>value</code>
			</td>
			<td>
				 
			</td>
			<td style="text-align:right;">
				القيمة اﻷولية للعنصر.
			</td>
		</tr>
	</tbody>
</table>

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

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

<p>
	ترجمة -وبتصرف- للمقال: <a href="https://developer.mozilla.org/en-US/docs/Learn/Forms/Basic_native_form_controls" rel="external nofollow">Basic native form controls</a>
</p>

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

<ul>
	<li>
		المقال السابق: <a href="https://academy.hsoub.com/programming/html/%D9%87%D9%8A%D9%83%D9%84%D8%A9-%D8%A7%D8%B3%D8%AA%D9%85%D8%A7%D8%B1%D8%A9-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-web-forms-r2383/" rel="">هيكلة استمارة الويب Web Forms</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%A7%D9%84%D8%B9%D9%85%D9%84-%D9%85%D8%B9-%D8%A7%D8%B3%D8%AA%D9%85%D8%A7%D8%B1%D8%A7%D8%AA-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-web-forms-r2368/" rel="">أساسيات العمل مع استمارات الويب Web forms</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/html/%D8%A3%D8%AF%D9%88%D8%A7%D8%AA-%D8%B3%D9%87%D9%88%D9%84%D8%A9-%D8%A7%D9%84%D9%88%D8%B5%D9%88%D9%84-accessibility-%D8%A7%D9%84%D9%84%D8%A7%D8%B2%D9%85%D8%A9-%D9%81%D9%8A-%D8%B9%D9%85%D9%84%D9%8A%D8%A9-%D8%AA%D8%B7%D9%88%D9%8A%D8%B1-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-r1984/" rel="">أدوات سهولة الوصول Accessibility اللازمة في عملية تطوير الويب</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-%D8%A3%D9%86%D9%88%D8%A7%D8%B9-%D8%A7%D9%84%D8%AD%D9%82%D9%88%D9%84-%D8%A7%D9%84%D8%AC%D8%AF%D9%8A%D8%AF%D8%A9-%D9%81%D9%8A-%D9%86%D9%85%D8%A7%D8%B0%D8%AC-html5-r5/" rel="">تعرف على أنواع الحقول الجديدة في نماذج HTML5</a>
	</li>
</ul>
]]></description><guid isPermaLink="false">2389</guid><pubDate>Tue, 20 Aug 2024 15:06:00 +0000</pubDate></item><item><title>&#x647;&#x64A;&#x643;&#x644;&#x629; &#x627;&#x633;&#x62A;&#x645;&#x627;&#x631;&#x629; &#x627;&#x644;&#x648;&#x64A;&#x628; Web Forms</title><link>https://academy.hsoub.com/programming/html/%D9%87%D9%8A%D9%83%D9%84%D8%A9-%D8%A7%D8%B3%D8%AA%D9%85%D8%A7%D8%B1%D8%A9-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-web-forms-r2383/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2024_08/--.png.6a88098147d5a690baab9ab967fd74ab.png" /></p>
<p>
	تعرفنا في مقال سابق على <a href="https://academy.hsoub.com/programming/html/%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A7%D8%AA-%D8%A7%D9%84%D8%B9%D9%85%D9%84-%D9%85%D8%B9-%D8%A7%D8%B3%D8%AA%D9%85%D8%A7%D8%B1%D8%A7%D8%AA-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-web-forms-r2368/" rel="">أساسيات العمل مع استمارات الويب</a> وسنلقي نظرة أقرب في هذا المقال على العناصر التي تُستخدم لهيكلة استمارة الويب وإعطاء كل عنصر دلالته الخاصة. فمرونة استمارات ويب تجعلها إحدى الهيكليات اﻷكثر تعقيدًا في HTML، حيث تستطيع بناء أي نوع من استمارات الويب اﻷساسية باستخدام وسم الاستمارات المخصص <code>&lt;form&gt;</code> وسماته. وبالتالي سيكون اختيار الهيكلية الصحيحة لاستمارة الويب أساسيًا لضمان قابلية استخدام هذه الاستمارة وسهولة الوصول إليها accessible form.
</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>" للتعرف على هيكلية صفحات ويب باستخدام لغة HTML وتتعرف على أهم عناصرها.
</p>

<h2 id="form">
	العنصر <code>&lt;form&gt;</code>
</h2>

<p>
	يُعرّف العنصر <code>&lt;form&gt;</code> أنه استمارة أو نموذج مع سمات تحدد سلوكه. وكلما أردت بناء استمارة ويب عليك أن تبدأ باستخدام العنصر <code>&lt;form&gt;</code> وتضع ضمنه المحتوى المطلوب. وتستطيع العديد من تقنيات ويب الحديثة وإضافات المتصفحات browser plugins اكتشاف عناصر الاستمارات وتنفيذ خطافات مخصصة لها كي يسهل استخدامها.
</p>

<p>
	<strong>تحذير</strong>: يمنع صراحة وضع عنصر <code>&lt;form&gt;</code> داخل عنصر <code>&lt;form&gt;</code> آخر، لأن تداخل هذه العناصر قد يؤدي إلى سلوك غير متوقع.
</p>

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

<h3 id="fieldsetlegend">
	العنصران <code>&lt;fieldset&gt;</code> و <code>&lt;legend&gt;</code>
</h3>

<p>
	يُعد العنصر <code>&lt;fieldsset&gt;</code> مناسبًا ﻹنشاء مجموعات من عناصر التحكم لها نفس الغاية سواء للتنسيق أو إعطاء دلالة خاصة. وبإمكانك وضع عنوان للعنصر <code>&lt;fieldset&gt;</code> بتضمين العنصر <code>&lt;legend&gt;</code> تحت وسم البداية الخاص به، وهكذا يصف محتوى العنصر <code>&lt;legend&gt;</code> الغاية من استخدام العنصر <code>&lt;fieldset&gt;</code>.
</p>

<p>
	تستخدم الكثير من التقنيات المساعدة العنصر <code>&lt;legend&gt;</code> على أنه جزء من عنوان كل عنصر تحكم يقع داخل <code>&lt;fieldset&gt;</code> وتقرأ بعض قارئات الشاشات مثل <a href="https://www.freedomscientific.com/products/software/jaws/" rel="external nofollow">Jaws</a> و <a href="https://www.nvaccess.org/" rel="external nofollow">NVDA</a> محتوى العنصر <code>&lt;legend&gt;</code> قبل قراءة عنوان عنصر التحكم.
</p>

<p>
	إليك مثالًا:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_5601_7" style=""><span class="tag">&lt;form&gt;</span><span class="pln">
 </span><span class="tag">&lt;fieldset&gt;</span><span class="pln">
    </span><span class="tag">&lt;legend&gt;</span><span class="pln">Fruit juice size</span><span class="tag">&lt;/legend&gt;</span><span class="pln">
    </span><span class="tag">&lt;p&gt;</span><span class="pln">
     </span><span class="tag">&lt;input</span><span class="pln"> </span><span class="atn">type</span><span class="pun">=</span><span class="atv">"radio"</span><span class="pln"> </span><span class="atn">name</span><span class="pun">=</span><span class="atv">"size"</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"size_1"</span><span class="pln"> </span><span class="atn">value</span><span class="pun">=</span><span class="atv">"small"</span><span class="pln"> </span><span class="tag">/&gt;</span><span class="pln">
     </span><span class="tag">&lt;label</span><span class="pln"> </span><span class="atn">for</span><span class="pun">=</span><span class="atv">"size_1"</span><span class="tag">&gt;</span><span class="pln">Small</span><span class="tag">&lt;/label&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;input</span><span class="pln"> </span><span class="atn">type</span><span class="pun">=</span><span class="atv">"radio"</span><span class="pln"> </span><span class="atn">name</span><span class="pun">=</span><span class="atv">"size"</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"size_2"</span><span class="pln"> </span><span class="atn">value</span><span class="pun">=</span><span class="atv">"medium"</span><span class="pln"> </span><span class="tag">/&gt;</span><span class="pln">
     </span><span class="tag">&lt;label</span><span class="pln"> </span><span class="atn">for</span><span class="pun">=</span><span class="atv">"size_2"</span><span class="tag">&gt;</span><span class="pln">Medium</span><span class="tag">&lt;/label&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;input</span><span class="pln"> </span><span class="atn">type</span><span class="pun">=</span><span class="atv">"radio"</span><span class="pln"> </span><span class="atn">name</span><span class="pun">=</span><span class="atv">"size"</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"size_3"</span><span class="pln"> </span><span class="atn">value</span><span class="pun">=</span><span class="atv">"large"</span><span class="pln"> </span><span class="tag">/&gt;</span><span class="pln">
     </span><span class="tag">&lt;label</span><span class="pln"> </span><span class="atn">for</span><span class="pun">=</span><span class="atv">"size_3"</span><span class="tag">&gt;</span><span class="pln">Large</span><span class="tag">&lt;/label&gt;</span><span class="pln">
    </span><span class="tag">&lt;/p&gt;</span><span class="pln">
 </span><span class="tag">&lt;/fieldset&gt;</span><span class="pln">
</span><span class="tag">&lt;/form&gt;</span></pre>

<p>
	<strong>ملاحظة</strong>: ستجد <a href="https://github.com/mdn/learning-area/blob/main/html/forms/html-form-structure/fieldset-legend.html" rel="external nofollow">هذا المثال</a> على جت-هب وبإمكانك تجربته <a href="https://mdn.github.io/learning-area/html/forms/html-form-structure/fieldset-legend.html" rel="external nofollow">مباشرة</a>.
</p>

<p>
	عند قراءة الشيفرة السابقة، ستنطق قارئات الشاشة العبارة "Fruit juice size small" المتعلقة بعنصر التحكم اﻷول، والعبارة "Fruit juice size medium" للعنصر الثاني، والعبارة "Fruit juice size large" للثالث.
</p>

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

<p>
	ونظرًا لتأثير العنصر <code>&lt;fieldset&gt;</code> على التقنيات المساعدة، فهو عنصر أساسي في بناء استمارات تدعم شمولية الوصول أو سهولة الوصول <a href="https://academy.hsoub.com/design/user-experience/%D8%A5%D9%85%D9%83%D8%A7%D9%86%D9%8A%D8%A9-%D8%A7%D9%84%D9%88%D8%B5%D9%88%D9%84-%D9%84%D8%A5%D8%AA%D8%A7%D8%AD%D8%A9-%D8%B3%D9%87%D9%88%D9%84%D8%A9-%D8%A7%D9%84%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D9%84%D9%84%D8%AC%D9%85%D9%8A%D8%B9-r761/" rel="">accessibility</a>، وتبقى عليك مسؤولية استخدامها بالشكل الصحيح. حاول إن أمكن أن تسمع ما تنطقه قارئات الشاشة عندما تبني استمارتك، فإن بدا الأمر غريبًا، جرّب أن تحسن هيكلية الاستمارة الخاصة بك.
</p>

<h2 id="label">
	العنصر <code>&lt;label&gt;</code>
</h2>

<p>
	رأينا في <a href="https://academy.hsoub.com/programming/html/%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A7%D8%AA-%D8%A7%D9%84%D8%B9%D9%85%D9%84-%D9%85%D8%B9-%D8%A7%D8%B3%D8%AA%D9%85%D8%A7%D8%B1%D8%A7%D8%AA-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-web-forms-r2368/" rel="">مقال سابق</a> أن العنصر <code>&lt;label&gt;</code> يعرّف لنا عنوانًا لوصف عنصر التحكم الموجود في استمارة الويب. وهذا العنصر شديد اﻷهمية لاسيما إن أردت بناء استمارة يدعم سهولة الوصول، فعندما تستخدمها بالشكل الصحيح، ستنطقها قارئات الشاشة مع أية توجيهات أخرى، كما أنها مفيدة للمستخدمين الأصحاء كذلك لتوضح لهم دلالة مكونات الاستمارة. إليك المثال الذي خبرناه في المقال السابق:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_5601_10" style=""><span class="tag">&lt;label</span><span class="pln"> </span><span class="atn">for</span><span class="pun">=</span><span class="atv">"name"</span><span class="tag">&gt;</span><span class="pln">Name:</span><span class="tag">&lt;/label&gt;</span><span class="pln"> </span><span class="tag">&lt;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">"name"</span><span class="pln"> </span><span class="atn">name</span><span class="pun">=</span><span class="atv">"user_name"</span><span class="pln"> </span><span class="tag">/&gt;</span></pre>

<p>
	عندما يُربط العنوان بالعنصر <code>&lt;input&gt;</code> من خلال السمة <code>for</code> التي تحمل قيمة معرّف عنصر اﻹدخال، ستنطق قارئات الشاشة العبارة "Name, edit text". وهناك طريقة أخرى لربط عنصر تحكم الاستمارة بالعناوين عن طريق وضع عنصر التحكم داخل العنوان <code>&lt;label&gt;</code> صراحة كما يلي:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_5601_12" style=""><span class="tag">&lt;label</span><span class="pln"> </span><span class="atn">for</span><span class="pun">=</span><span class="atv">"name"</span><span class="tag">&gt;</span><span class="pln">
 Name: </span><span class="tag">&lt;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">"name"</span><span class="pln"> </span><span class="atn">name</span><span class="pun">=</span><span class="atv">"user_name"</span><span class="pln"> </span><span class="tag">/&gt;</span><span class="pln">
</span><span class="tag">&lt;/label&gt;</span></pre>

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

<h3 id="">
	العناوين قابلة للنقر أيضًا
</h3>

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

<p>
	فالنقر على العنوان "I like cherry" في مثالنا التالي سيغير حالة عنصر اﻹدخال <code>taste_cherry</code>:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_5601_14" style=""><span class="tag">&lt;form&gt;</span><span class="pln">
 </span><span class="tag">&lt;p&gt;</span><span class="pln">
    </span><span class="tag">&lt;input</span><span class="pln"> </span><span class="atn">type</span><span class="pun">=</span><span class="atv">"checkbox"</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"taste_1"</span><span class="pln"> </span><span class="atn">name</span><span class="pun">=</span><span class="atv">"taste_cherry"</span><span class="pln"> </span><span class="atn">value</span><span class="pun">=</span><span class="atv">"cherry"</span><span class="pln"> </span><span class="tag">/&gt;</span><span class="pln">
    </span><span class="tag">&lt;label</span><span class="pln"> </span><span class="atn">for</span><span class="pun">=</span><span class="atv">"taste_1"</span><span class="tag">&gt;</span><span class="pln">I like cherry</span><span class="tag">&lt;/label&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;input</span><span class="pln"> </span><span class="atn">type</span><span class="pun">=</span><span class="atv">"checkbox"</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"taste_2"</span><span class="pln"> </span><span class="atn">name</span><span class="pun">=</span><span class="atv">"taste_banana"</span><span class="pln"> </span><span class="atn">value</span><span class="pun">=</span><span class="atv">"banana"</span><span class="pln"> </span><span class="tag">/&gt;</span><span class="pln">
    </span><span class="tag">&lt;label</span><span class="pln"> </span><span class="atn">for</span><span class="pun">=</span><span class="atv">"taste_2"</span><span class="tag">&gt;</span><span class="pln">I like banana</span><span class="tag">&lt;/label&gt;</span><span class="pln">
 </span><span class="tag">&lt;/p&gt;</span><span class="pln">
</span><span class="tag">&lt;/form&gt;</span></pre>

<p>
	<strong>ملاحظة</strong>: ستجد <a href="https://github.com/mdn/learning-area/blob/main/html/forms/html-form-structure/checkbox-label.html" rel="external nofollow">هذا المثال</a> على جت-هب وبإمكانك أيضًا تجربته <a href="https://mdn.github.io/learning-area/html/forms/html-form-structure/checkbox-label.html" rel="external nofollow">مباشرة</a>.
</p>

<h3 id="-1">
	عناوين متعددة
</h3>

<p>
	لا يوجد في الواقع ما يمنعك من وضع عدة عناوين لعنصر التحكم نفسه، لكن الفكرة سيئة من منظور اﻷدوات المساعدة، فقد تُخطئ تلك اﻷدوات في التعامل معها. وإن أردت استخدام عناوين متعددة، عليك وضع عنصر التحكم مع عناوينه المرتبطة به ضمن عنصر <code>&lt;label&gt;</code> وحيد:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_5601_16" style=""><span class="tag">&lt;p&gt;</span><span class="pln">Required fields are followed by </span><span class="tag">&lt;span</span><span class="pln"> </span><span class="atn">aria-label</span><span class="pun">=</span><span class="atv">"required"</span><span class="tag">&gt;</span><span class="pln">*</span><span class="tag">&lt;/span&gt;</span><span class="pln">.</span><span class="tag">&lt;/p&gt;</span><span class="pln">

</span><span class="com">&lt;!-- ينجح اﻷمر كالتالي --&gt;</span><span class="pln">
</span><span class="com">&lt;!--div&gt;
 &lt;label for="username"&gt;Name:&lt;/label&gt;
 &lt;input id="username" type="text" name="username" required&gt;
 &lt;label for="username"&gt;&lt;span aria-label="required"&gt;*&lt;/label&gt;
&lt;/div--&gt;</span><span class="pln">

</span><span class="com">&lt;!-- لكن من اﻷفضل أن ينجز كالتالي --&gt;</span><span class="pln">
</span><span class="com">&lt;!--div&gt;
 &lt;label for="username"&gt;
    &lt;span&gt;Name:&lt;/span&gt;
    &lt;input id="username" type="text" name="username" required&gt;
    &lt;span aria-label="required"&gt;*&lt;/span&gt;
 &lt;/label&gt;
&lt;/div--&gt;</span><span class="pln">

</span><span class="com">&lt;!-- وهذا هو التنفيذ اﻷفضل --&gt;</span><span class="pln">
</span><span class="tag">&lt;div&gt;</span><span class="pln">
 </span><span class="tag">&lt;label</span><span class="pln"> </span><span class="atn">for</span><span class="pun">=</span><span class="atv">"username"</span><span class="tag">&gt;</span><span class="pln">Name: </span><span class="tag">&lt;span</span><span class="pln"> </span><span class="atn">aria-label</span><span class="pun">=</span><span class="atv">"required"</span><span class="tag">&gt;</span><span class="pln">*</span><span class="tag">&lt;/span&gt;&lt;/label&gt;</span><span class="pln">
 </span><span class="tag">&lt;input</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"username"</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">name</span><span class="pun">=</span><span class="atv">"username"</span><span class="pln"> </span><span class="atn">required</span><span class="pln"> </span><span class="tag">/&gt;</span><span class="pln">
</span><span class="tag">&lt;/div&gt;</span></pre>

<p>
	<iframe allowfullscreen="true" allowtransparency="true" frameborder="no" height="200" loading="lazy" scrolling="no" src="https://codepen.io/HsoubAcademy/embed/NWZjdwM?default-tab=result" style="width: 100%;" title="web- form-structure1">See the Pen web- form-structure1 by Hsoub Academy (@HsoubAcademy) on CodePen.</iframe>
</p>

<p>
	توضح الفقرة النصية في بداية الشيفرة أن الحقول المعلمة <code>*</code> ضرورية. ولا بد من تضمين هذه الفقرة في البداية وقبل أن يطبق محتواها، لكي يتمكن المستخدمون ضعاف البصر أو حتى اﻷصحاء -الذين يعتمدون على قارئات الشاشة- من فهم معناها قبل أن يصلوا إلى الحقول الضرورية في الاستمارة. وعلى الرغم من أنها علامة <code>*</code> مفيدة للأصحاء وواضحة، لكن لا يمكن الاعتماد عليها كليًا. إذ ستلفظ قارئات الشاشة هذا المحرف على الشكل "star"، ولن تكون مفيدة هنا، ولا بد أن تظهر الكلمة "مطلوب required" عندما يمرر المستخدم السليم مؤشر الفأرة فوق العنوان، ويُنجز هذا اﻷمر باستخدام السمة <code>title</code>، أما نطق قارئات الشاشة لقيمة هذه السمة، فيعتمد على إعداداتها. لهذا من اﻷسلم أن نضيف أيضًا السمة <code>aria-label</code> التي تنطقها قارئات الشاشة دائمًا.
</p>

<p>
	تتفاوت فعالية الطرق في المثال السابق في تنفيذ اﻷمر:
</p>

<ul>
	<li>
		لا يُقرأ العنوان في الطريقة اﻷولى إطلاقًا مع عنصر الدخل، فما تحصل عليه هو لفظ العبارة "edit text blank" إضافة إلى العناوين الفعلية التي تُقرأ بشكل منفصل، وستربك العناوين المتعددة قارئ الشاشة.
	</li>
	<li>
		تبدو اﻷشياء أوضح بقليل في الطريقة الثانية، إذ يُقرأ العنوان مع عنصر الدخل "name star name edit text required"، لكن العناوين ستُقرأ أيضًا بشكل منفصل، وهذا مربك قليلًا. تحسن الوضع هنا لوجود عنوان مرتبط بالعنصر <code>&lt;input&gt;</code>.
	</li>
	<li>
		الطريقة الثالثة هي اﻷفضل، إذ يُقرأ العنوان الفعلي في نفس الوقت ويُقرأ عنصر العنوان بالشكل "name required edit text".
	</li>
</ul>

<p>
	<strong>ملاحظة</strong>: قد تختلف النتائج قليلًا وفقًا لقارئ الشاشة الذي تستخدمه.
</p>

<p>
	<strong>ملاحظة</strong>: ستجد <a href="https://github.com/mdn/learning-area/blob/main/html/forms/html-form-structure/required-labels.html" rel="external nofollow">هذا المثال</a> على جت-هب وبإمكانك تجربته <a href="https://mdn.github.io/learning-area/html/forms/html-form-structure/required-labels.html" rel="external nofollow">مباشرة</a>.
</p>

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

<h2 id="-2">
	هيكليات شائعة لتنظيم استمارات الويب
</h2>

<p>
	تذكر دائمًا أن هيكلة استمارة الويب تكون باستخدام HTML، وتستطيع استخدام كامل إمكانيات لغة التوصيف هذه في هيكلة الاستمارة. وقد تلاحظ من اﻷمثلة السابقة أن تغليف العنوان وعنصر التحكم ضمن العنصر <code>&lt;li&gt;</code> ممارسة شائعة وتوضع هذه العناصر بدورها ضمن عنصر قائمة <code>&lt;ul&gt;</code> أو <code>&lt;ol&gt;</code>، كما يُستخدم أيضًا العنصر <code>&lt;div&gt;</code>. وينصح باستخدام القوائم في حال كانت عناصر اﻹدخال على شكل صناديق تحقق أو أزرار خيارات متعددة.
</p>

<p>
	وإضافة إلى العنصر <code>&lt;fieldset&gt;</code>، يشيع استخدام عناصر العناوين الرئيسية في HTML مثل <code>&lt;h1&gt;</code> و <code>&lt;h2&gt;</code> والعنصر <code>&lt;section&gt;</code> لبناء هيكليات أكثر تعقيدًا لاستمارات الويب.
</p>

<p>
	ويعود اﻷمر إليك في انتقاء اﻷسلوب المناسب لكتابة الشيفرة على أن تكون النتيجة استمارة قابلةً للاستخدام وتراعي شمولية الوصول. وينبغي أن يوضع كل قسم يضم وظيفة محددة داخل عنصر <code>&lt;section&gt;</code> منفصل واستخدام العنصر <code>&lt;fieldset&gt;</code> لاحتواء أزرار الاختيارات المتعددة.
</p>

<h2 id="-3">
	تطبيق عملي: بناء هيكل لاستمارة ويب
</h2>

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

<ol>
	<li>
		أنشئ نسخة محلية من <a href="https://github.com/mdn/learning-area/blob/main/html/introduction-to-html/getting-started/index.html" rel="external nofollow">ملف التطبيق</a> في مجلد جديد على حاسوبك.
	</li>
	<li>
		أنشئ تاليًا استمارةك باستخدام العنصر <code>&lt;form&gt;</code>.
	</li>
</ol>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_5601_18" style=""><span class="tag">&lt;form&gt;</span></pre>

<p>
	أضف ترويسة وعنوان رئيسي ضمن العنصر <code>&lt;form&gt;</code>، لتعرض للمستخدم كيفية تمييز الحقول المطلوبة:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_5601_20" style=""><span class="tag">&lt;h1&gt;</span><span class="pln">Payment form</span><span class="tag">&lt;/h1&gt;</span><span class="pln">
</span><span class="tag">&lt;p&gt;</span><span class="pln">
 Required fields are followed by
 </span><span class="tag">&lt;strong&gt;&lt;span</span><span class="pln"> </span><span class="atn">aria-label</span><span class="pun">=</span><span class="atv">"required"</span><span class="tag">&gt;</span><span class="pln">*</span><span class="tag">&lt;/span&gt;&lt;/strong&gt;</span><span class="pln">.
</span><span class="tag">&lt;/p&gt;</span></pre>

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

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_5601_22" style=""><span class="tag">&lt;section&gt;</span><span class="pln">
 </span><span class="tag">&lt;h2&gt;</span><span class="pln">Contact information</span><span class="tag">&lt;/h2&gt;</span><span class="pln">
 </span><span class="tag">&lt;fieldset&gt;</span><span class="pln">
    </span><span class="tag">&lt;legend&gt;</span><span class="pln">Title</span><span class="tag">&lt;/legend&gt;</span><span class="pln">
    </span><span class="tag">&lt;ul&gt;</span><span class="pln">
     </span><span class="tag">&lt;li&gt;</span><span class="pln">
      </span><span class="tag">&lt;label</span><span class="pln"> </span><span class="atn">for</span><span class="pun">=</span><span class="atv">"title_1"</span><span class="tag">&gt;</span><span class="pln">
       </span><span class="tag">&lt;input</span><span class="pln"> </span><span class="atn">type</span><span class="pun">=</span><span class="atv">"radio"</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"title_1"</span><span class="pln"> </span><span class="atn">name</span><span class="pun">=</span><span class="atv">"title"</span><span class="pln"> </span><span class="atn">value</span><span class="pun">=</span><span class="atv">"A"</span><span class="pln"> </span><span class="tag">/&gt;</span><span class="pln">
       Ace
      </span><span class="tag">&lt;/label&gt;</span><span class="pln">
     </span><span class="tag">&lt;/li&gt;</span><span class="pln">
     </span><span class="tag">&lt;li&gt;</span><span class="pln">
      </span><span class="tag">&lt;label</span><span class="pln"> </span><span class="atn">for</span><span class="pun">=</span><span class="atv">"title_2"</span><span class="tag">&gt;</span><span class="pln">
       </span><span class="tag">&lt;input</span><span class="pln"> </span><span class="atn">type</span><span class="pun">=</span><span class="atv">"radio"</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"title_2"</span><span class="pln"> </span><span class="atn">name</span><span class="pun">=</span><span class="atv">"title"</span><span class="pln"> </span><span class="atn">value</span><span class="pun">=</span><span class="atv">"K"</span><span class="pln"> </span><span class="tag">/&gt;</span><span class="pln">
       King
      </span><span class="tag">&lt;/label&gt;</span><span class="pln">
     </span><span class="tag">&lt;/li&gt;</span><span class="pln">
     </span><span class="tag">&lt;li&gt;</span><span class="pln">
      </span><span class="tag">&lt;label</span><span class="pln"> </span><span class="atn">for</span><span class="pun">=</span><span class="atv">"title_3"</span><span class="tag">&gt;</span><span class="pln">
       </span><span class="tag">&lt;input</span><span class="pln"> </span><span class="atn">type</span><span class="pun">=</span><span class="atv">"radio"</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"title_3"</span><span class="pln"> </span><span class="atn">name</span><span class="pun">=</span><span class="atv">"title"</span><span class="pln"> </span><span class="atn">value</span><span class="pun">=</span><span class="atv">"Q"</span><span class="pln"> </span><span class="tag">/&gt;</span><span class="pln">
       Queen
      </span><span class="tag">&lt;/label&gt;</span><span class="pln">
     </span><span class="tag">&lt;/li&gt;</span><span class="pln">
    </span><span class="tag">&lt;/ul&gt;</span><span class="pln">
 </span><span class="tag">&lt;/fieldset&gt;</span><span class="pln">
 </span><span class="tag">&lt;p&gt;</span><span class="pln">
    </span><span class="tag">&lt;label</span><span class="pln"> </span><span class="atn">for</span><span class="pun">=</span><span class="atv">"name"</span><span class="tag">&gt;</span><span class="pln">
     </span><span class="tag">&lt;span&gt;</span><span class="pln">Name: </span><span class="tag">&lt;/span&gt;</span><span class="pln">
     </span><span class="tag">&lt;strong&gt;&lt;span</span><span class="pln"> </span><span class="atn">aria-label</span><span class="pun">=</span><span class="atv">"required"</span><span class="tag">&gt;</span><span class="pln">*</span><span class="tag">&lt;/span&gt;&lt;/strong&gt;</span><span class="pln">
    </span><span class="tag">&lt;/label&gt;</span><span class="pln">
    </span><span class="tag">&lt;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">"name"</span><span class="pln"> </span><span class="atn">name</span><span class="pun">=</span><span class="atv">"username"</span><span class="pln"> </span><span class="atn">required</span><span class="pln"> </span><span class="tag">/&gt;</span><span class="pln">
 </span><span class="tag">&lt;/p&gt;</span><span class="pln">
 </span><span class="tag">&lt;p&gt;</span><span class="pln">
    </span><span class="tag">&lt;label</span><span class="pln"> </span><span class="atn">for</span><span class="pun">=</span><span class="atv">"mail"</span><span class="tag">&gt;</span><span class="pln">
     </span><span class="tag">&lt;span&gt;</span><span class="pln">Email: </span><span class="tag">&lt;/span&gt;</span><span class="pln">
     </span><span class="tag">&lt;strong&gt;&lt;span</span><span class="pln"> </span><span class="atn">aria-label</span><span class="pun">=</span><span class="atv">"required"</span><span class="tag">&gt;</span><span class="pln">*</span><span class="tag">&lt;/span&gt;&lt;/strong&gt;</span><span class="pln">
    </span><span class="tag">&lt;/label&gt;</span><span class="pln">
    </span><span class="tag">&lt;input</span><span class="pln"> </span><span class="atn">type</span><span class="pun">=</span><span class="atv">"email"</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"mail"</span><span class="pln"> </span><span class="atn">name</span><span class="pun">=</span><span class="atv">"usermail"</span><span class="pln"> </span><span class="atn">required</span><span class="pln"> </span><span class="tag">/&gt;</span><span class="pln">
 </span><span class="tag">&lt;/p&gt;</span><span class="pln">
 </span><span class="tag">&lt;p&gt;</span><span class="pln">
    </span><span class="tag">&lt;label</span><span class="pln"> </span><span class="atn">for</span><span class="pun">=</span><span class="atv">"pwd"</span><span class="tag">&gt;</span><span class="pln">
     </span><span class="tag">&lt;span&gt;</span><span class="pln">Password: </span><span class="tag">&lt;/span&gt;</span><span class="pln">
     </span><span class="tag">&lt;strong&gt;&lt;span</span><span class="pln"> </span><span class="atn">aria-label</span><span class="pun">=</span><span class="atv">"required"</span><span class="tag">&gt;</span><span class="pln">*</span><span class="tag">&lt;/span&gt;&lt;/strong&gt;</span><span class="pln">
    </span><span class="tag">&lt;/label&gt;</span><span class="pln">
    </span><span class="tag">&lt;input</span><span class="pln"> </span><span class="atn">type</span><span class="pun">=</span><span class="atv">"password"</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"pwd"</span><span class="pln"> </span><span class="atn">name</span><span class="pun">=</span><span class="atv">"password"</span><span class="pln"> </span><span class="atn">required</span><span class="pln"> </span><span class="tag">/&gt;</span><span class="pln">
 </span><span class="tag">&lt;/p&gt;</span><span class="pln">
</span><span class="tag">&lt;/section&gt;</span></pre>

<p>
	يضم القسم الثاني <code>&lt;section&gt;</code> من الاستمارة معلومات الدفع حيث نضيف ثلاثة عناصر تحكم مع عناوينها ويغلف كل منها ضمن فقرة نصية <code>&lt;p&gt;</code>. العنصر اﻷول هو قائمة منسدلة <code>&lt;select&gt;</code> لاختيار نوع بطاقة االائتمان، والثاني عنصر إدخال نصي <code>&lt;input&gt;</code> من النوع <code>tel</code> ﻹدخال رقم بطاقة اﻹئتمان (يمكن اختيار النوع <code>number</code> لكننا لم نجد شكله مناسبًا لواجهة المستخدم)، والثالث عنصر إدخال من النوع <code>text</code> ﻹدخال تاريخ إنتهاء صلاحية البطاقة، ويتضمن العنصر اﻵخير السمة <code>placeholder</code> التي تشير إلى التنسيق الصحيح، والسمة <code>pattern</code> التي تختبر صحة التنسيق الذي يدخله المستخدم. وقد أدخلت هذه العناصر اﻷخيرة في HTML5:
</p>

<pre class="ipsCode prettyprint lang-javascript prettyprinted" id="ips_uid_5601_24" style=""><span class="pun">&lt;</span><span class="pln">section</span><span class="pun">&gt;</span><span class="pln">
 </span><span class="pun">&lt;</span><span class="pln">h2</span><span class="pun">&gt;</span><span class="typ">Payment</span><span class="pln"> information</span><span class="pun">&lt;/</span><span class="pln">h2</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">
    </span><span class="pun">&lt;</span><span class="pln">label </span><span class="kwd">for</span><span class="pun">=</span><span class="str">"card"</span><span class="pun">&gt;</span><span class="pln">
     </span><span class="pun">&lt;</span><span class="pln">span</span><span class="pun">&gt;</span><span class="typ">Card</span><span class="pln"> type</span><span class="pun">:&lt;/</span><span class="pln">span</span><span class="pun">&gt;</span><span class="pln">
    </span><span class="pun">&lt;/</span><span class="pln">label</span><span class="pun">&gt;</span><span class="pln">
    </span><span class="pun">&lt;</span><span class="pln">select id</span><span class="pun">=</span><span class="str">"card"</span><span class="pln"> name</span><span class="pun">=</span><span class="str">"usercard"</span><span class="pun">&gt;</span><span class="pln">
     </span><span class="pun">&lt;</span><span class="pln">option value</span><span class="pun">=</span><span class="str">"visa"</span><span class="pun">&gt;</span><span class="typ">Visa</span><span class="pun">&lt;/</span><span class="pln">option</span><span class="pun">&gt;</span><span class="pln">
     </span><span class="pun">&lt;</span><span class="pln">option value</span><span class="pun">=</span><span class="str">"mc"</span><span class="pun">&gt;</span><span class="typ">Mastercard</span><span class="pun">&lt;/</span><span class="pln">option</span><span class="pun">&gt;</span><span class="pln">
     </span><span class="pun">&lt;</span><span class="pln">option value</span><span class="pun">=</span><span class="str">"amex"</span><span class="pun">&gt;</span><span class="typ">American</span><span class="pln"> </span><span class="typ">Express</span><span class="pun">&lt;/</span><span class="pln">option</span><span class="pun">&gt;</span><span class="pln">
    </span><span class="pun">&lt;/</span><span class="pln">select</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">
 </span><span class="pun">&lt;</span><span class="pln">p</span><span class="pun">&gt;</span><span class="pln">
    </span><span class="pun">&lt;</span><span class="pln">label </span><span class="kwd">for</span><span class="pun">=</span><span class="str">"number"</span><span class="pun">&gt;</span><span class="pln">
     </span><span class="pun">&lt;</span><span class="pln">span</span><span class="pun">&gt;</span><span class="typ">Card</span><span class="pln"> number</span><span class="pun">:&lt;/</span><span class="pln">span</span><span class="pun">&gt;</span><span class="pln">
     </span><span class="pun">&lt;</span><span class="pln">strong</span><span class="pun">&gt;&lt;</span><span class="pln">span aria</span><span class="pun">-</span><span class="pln">label</span><span class="pun">=</span><span class="str">"required"</span><span class="pun">&gt;*&lt;</span><span class="str">/span&gt;&lt;/</span><span class="pln">strong</span><span class="pun">&gt;</span><span class="pln">
    </span><span class="pun">&lt;/</span><span class="pln">label</span><span class="pun">&gt;</span><span class="pln">
    </span><span class="pun">&lt;</span><span class="pln">input type</span><span class="pun">=</span><span class="str">"tel"</span><span class="pln"> id</span><span class="pun">=</span><span class="str">"number"</span><span class="pln"> name</span><span class="pun">=</span><span class="str">"cardnumber"</span><span class="pln"> required </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">
 </span><span class="pun">&lt;</span><span class="pln">p</span><span class="pun">&gt;</span><span class="pln">
    </span><span class="pun">&lt;</span><span class="pln">label </span><span class="kwd">for</span><span class="pun">=</span><span class="str">"expiration"</span><span class="pun">&gt;</span><span class="pln">
     </span><span class="pun">&lt;</span><span class="pln">span</span><span class="pun">&gt;</span><span class="typ">Expiration</span><span class="pln"> date</span><span class="pun">:&lt;/</span><span class="pln">span</span><span class="pun">&gt;</span><span class="pln">
     </span><span class="pun">&lt;</span><span class="pln">strong</span><span class="pun">&gt;&lt;</span><span class="pln">span aria</span><span class="pun">-</span><span class="pln">label</span><span class="pun">=</span><span class="str">"required"</span><span class="pun">&gt;*&lt;</span><span class="str">/span&gt;&lt;/</span><span class="pln">strong</span><span class="pun">&gt;</span><span class="pln">
    </span><span class="pun">&lt;/</span><span class="pln">label</span><span class="pun">&gt;</span><span class="pln">
    </span><span class="pun">&lt;</span><span class="pln">input
     type</span><span class="pun">=</span><span class="str">"text"</span><span class="pln">
     id</span><span class="pun">=</span><span class="str">"expiration"</span><span class="pln">
     name</span><span class="pun">=</span><span class="str">"expiration"</span><span class="pln">
     required
     placeholder</span><span class="pun">=</span><span class="str">"MM/YY"</span><span class="pln">
     pattern</span><span class="pun">=</span><span class="str">"^(0[1-9]|1[0-2])\/([0-9]{2})$"</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">
</span><span class="pun">&lt;/</span><span class="pln">section</span><span class="pun">&gt;</span></pre>

<p>
	نضيف القسم اﻷخير البسيط الذي يضم زرًا <code>&lt;button&gt;</code> من النوع <code>submit</code> ﻹرسال البيانات، لهذا ضع الشيفرة التالية أسفل شيفرة الاستمارة:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_5601_26" style=""><span class="tag">&lt;section&gt;</span><span class="pln">
 </span><span class="tag">&lt;p&gt;</span><span class="pln">
    </span><span class="tag">&lt;button</span><span class="pln"> </span><span class="atn">type</span><span class="pun">=</span><span class="atv">"submit"</span><span class="tag">&gt;</span><span class="pln">Validate the payment</span><span class="tag">&lt;/button&gt;</span><span class="pln">
 </span><span class="tag">&lt;/p&gt;</span><span class="pln">
</span><span class="tag">&lt;/section&gt;</span></pre>

<p>
	أكمل الاستمارة بإضافة وسم اﻹغلاق للعنصر <code>&lt;form&gt;</code>:
</p>

<pre class="ipsCode">&lt;/form&gt;
</pre>

<p>
	طبقنا كذلك تنسيقات CSS إضافية على الاستمارة، فإن أردت إجراء تغييرات على مظهره، انسخ <a href="https://developer.mozilla.org/en-US/docs/Learn/Forms/How_to_structure_a_web_form/Example" rel="external nofollow">التنسيقات التي تحتاجها</a> وعدّل عليه.
</p>

<p>
<iframe height="770" style="width: 100%;" scrolling="no" title="Untitled" src="https://codepen.io/HsoubAcademy/embed/OJemWzO?default-tab=result" frameborder="no" loading="lazy" allowtransparency="true" allowfullscreen="true">
  See the Pen <a href="https://codepen.io/HsoubAcademy/pen/OJemWzO" rel="external nofollow">
  Untitled</a> by Hsoub Academy (<a href="https://codepen.io/HsoubAcademy" rel="external nofollow">@HsoubAcademy</a>)
  on <a href="https://codepen.io" rel="external nofollow">CodePen</a>.
</iframe>
</p>

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

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

<p>
	ترجمة -وبتصرف- للمقال: <a href="https://developer.mozilla.org/en-US/docs/Learn/Forms/How_to_structure_a_web_form" rel="external nofollow">How to structure a web form</a>
</p>

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

<ul>
	<li>
		المقال السابق: <a href="https://academy.hsoub.com/programming/css/%D8%A5%D8%B6%D8%A7%D9%81%D8%A9-%D8%AA%D9%86%D8%B3%D9%8A%D9%82-%D8%A8%D8%B3%D9%8A%D8%B7-%D9%84%D8%A7%D8%B3%D8%AA%D9%85%D8%A7%D8%B1%D8%A9-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-%D9%88%D8%A5%D8%B1%D8%B3%D8%A7%D9%84-%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA%D9%87%D8%A7-%D9%84%D9%84%D8%AE%D8%A7%D8%AF%D9%85-r2369/" rel="">إضافة تنسيق بسيط لاستمارة الويب وإرسال بياناتها للخادم</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/design/user-interface/%D9%85%D8%AA%D8%AD%D9%83%D9%85%D8%A7%D8%AA-%D9%88%D8%A7%D8%AC%D9%87%D8%A9-%D8%A7%D9%84%D9%85%D8%B3%D8%AA%D8%AE%D8%AF%D9%85-%D9%88%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%B9%D8%B1%D8%B6%D9%87%D8%A7-%D9%85%D8%AA%D8%AD%D9%83%D9%85%D8%A7%D8%AA-%D8%A7%D9%84%D8%AF%D8%AE%D9%84-r530/" rel="">متحكمات واجهة المستخدم وكيفية عرضها: متحكمات الدخل</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/html/%D8%A3%D8%AF%D9%88%D8%A7%D8%AA-%D8%B3%D9%87%D9%88%D9%84%D8%A9-%D8%A7%D9%84%D9%88%D8%B5%D9%88%D9%84-accessibility-%D8%A7%D9%84%D9%84%D8%A7%D8%B2%D9%85%D8%A9-%D9%81%D9%8A-%D8%B9%D9%85%D9%84%D9%8A%D8%A9-%D8%AA%D8%B7%D9%88%D9%8A%D8%B1-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-r1984/" rel="">أدوات سهولة الوصول Accessibility اللازمة في عملية تطوير الويب</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/html/%D9%85%D8%B9%D8%A7%D9%84%D8%AC%D8%A9-%D9%85%D8%B4%D8%A7%D9%83%D9%84-%D8%B3%D9%87%D9%88%D9%84%D8%A9-%D8%A7%D9%84%D9%88%D8%B5%D9%88%D9%84-accessibility-%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-r1983/" rel="">معالجة مشاكل سهولة الوصول Accessibility الشائعة للتوافق مع المتصفحات</a>
	</li>
</ul>
]]></description><guid isPermaLink="false">2383</guid><pubDate>Mon, 05 Aug 2024 15:01:02 +0000</pubDate></item><item><title>&#x623;&#x633;&#x627;&#x633;&#x64A;&#x627;&#x62A; &#x627;&#x644;&#x639;&#x645;&#x644; &#x645;&#x639; &#x627;&#x633;&#x62A;&#x645;&#x627;&#x631;&#x627;&#x62A; &#x627;&#x644;&#x648;&#x64A;&#x628; Web forms</title><link>https://academy.hsoub.com/programming/html/%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A7%D8%AA-%D8%A7%D9%84%D8%B9%D9%85%D9%84-%D9%85%D8%B9-%D8%A7%D8%B3%D8%AA%D9%85%D8%A7%D8%B1%D8%A7%D8%AA-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-web-forms-r2368/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2024_07/-----Web-forms.png.918ebd8467867b4e747a74ad28a6f974.png" /></p>
<p>
	سنبدأ في هذا المقال والمقالات التالية شرح أساسيات التعامل مع استمارات الويب Web forms. فاستمارات الويب هي أداة قوية للتفاعل مع المستخدمين وخاصة في جمع بيانات عنهم أو السماح لهم في التحكم بواجهة المستخدم، سنحرص على تغطية كامل ميزات هذه الأداة القوية ونشرح كل ما يتعلق بها بما في ذلك كتابة شيفرة HTML وتنسيق عناصر التحكم وتسليم البيانات إلى الخادم.
</p>

<h2 id="">
	متطلبات العمل على هذه السلسلة
</h2>

<ul>
	<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%81-%D8%B9%D9%84%D9%89-css-r2000/" rel="">CSS</a> و<a href="https://academy.hsoub.com/programming/javascript/%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-%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-%D9%85%D9%86%D8%B8%D9%88%D8%B1-%D8%B9%D8%A7%D9%85-r2266/" rel="">أساسيات البرمجة بلغة جافا سكريبت</a>. إذ عليك تعلم بعض التقنيات الخاصة في تنسيق عناصر التحكم التي تضيفها للاستمارة، وكتابة سكريبتات التعامل مع تقييم بيانات الاستمارة وإنشاء استمارات ويب مخصصة.
	</li>
</ul>

<p>
	ولهذا كان لا بد من عرض استمارات الويب في سلسلة مقالات خاصة بها ولم نخلطها مع سلاسل المقالات التي تحدثنا فيها عن <a href="https://wiki.hsoub.com/HTML" rel="external">HTML</a> و <a href="https://wiki.hsoub.com/CSS" rel="external">CSS</a> و<a href="https://academy.hsoub.com/programming/javascript/%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-%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-%D9%85%D9%86%D8%B8%D9%88%D8%B1-%D8%B9%D8%A7%D9%85-r2266/" rel="">جافا سكريبت</a>. فعناصر الاستمارات أكثر تعقيدًا من عناصر HTML الأخرى، وتتطلب استخدامًا محددًا لتقنيات CSS وجافا سكريبت إن أردت الحصول على كامل إمكانيات الاستمارات.
</p>

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

<p>
	سنبدأ في هذا المقال التمهيدي بالتعرف بشكل مفصل على استمارات الويب وأهميتها وننشئ أول استمارة ويب خاصة بنا من خلال تصميم استمارة تواصل بسيطة contact form وتنفيذها برمجيًا باستخدام عناصر HTML، ونستكمل في <a href="https://academy.hsoub.com/programming/css/%D8%A5%D8%B6%D8%A7%D9%81%D8%A9-%D8%AA%D9%86%D8%B3%D9%8A%D9%82-%D8%A8%D8%B3%D9%8A%D8%B7-%D9%84%D8%A7%D8%B3%D8%AA%D9%85%D8%A7%D8%B1%D8%A9-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-%D9%88%D8%A5%D8%B1%D8%B3%D8%A7%D9%84-%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA%D9%87%D8%A7-%D9%84%D9%84%D8%AE%D8%A7%D8%AF%D9%85-r2369/" rel="">المقال التالي</a> تنسيقها.
</p>

<h2 id="webforms-1">
	ما هي استمارات الويب Web Forms
</h2>

<p>
	تُعد استمارات ويب إحدى النقاط اﻷساسية التي تعزز التواصل بين المستخدم و موقع الويب أو التطبيق. إذ تتيح للمستخدم إدخال البيانات التي تُرسل عادة إلى الخادم كي يعالجها ويخزنها في <a href="https://academy.hsoub.com/devops/servers/databases/%D9%85%D9%83%D9%88%D9%86%D8%A7%D8%AA-%D9%82%D9%88%D8%A7%D8%B9%D8%AF-%D8%A7%D9%84%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA/" rel="">قواعد البيانات</a>، أو تستخدم لتحديث  <a href="https://academy.hsoub.com/design/user-experience/%D8%AA%D8%B5%D9%85%D9%8A%D9%85-%D9%88%D8%A7%D8%AC%D9%87%D8%A9-%D8%A7%D9%84%D9%85%D8%B3%D8%AA%D8%AE%D8%AF%D9%85-%D9%88%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-ui-ux-r831/" rel="">تصميم واجهة المستخدم</a> مباشرة بطريقة ما (مثل إضافة عنصر جديد إلى قائمة أو إظهار وإخفاء بعض معالم الواجهة).
</p>

<p>
	تتكون استمارات الويب المبنية على أساس HTML من عنصر تحكم بالاستمارة أو أكثر، إضافة إلى عناصر أخرى تساعد في هيكلة الاستمارة عمومًا، لهذا يُشار إليها أحيانًا باسم استمارات HTML. وقد تكون عناصر التحكم حقولًا نصية مفردة أو متعددة اﻷسطر أو قوائم منسدلة drop-down box أو أزرار أو صناديق تحقق<br>
	check boxes أو أزرار اختيار من متعدد radio buttons، وتنشأ هذه العناصر عادة باستخدام العنصر <code>&lt;input&gt;</code> مع وجود بعض العناصر اﻷخرى التي سنطلع عليها تباعًا.
</p>

<p>
	يمكن برمجة عناصر التحكم أيضًا كي نجبر المستخدم إدخال صيغ أو قيم مخصصة (من أجل تقييم الاستمارة) وأن نقرن هذه العناصر بنصوص توضيحية تصف الغاية من هذه العناصر لضعيفي البصر والمستخدم السليم لتعزيز الشمولية وسهولة الوصول <a href="https://academy.hsoub.com/programming/html/%D8%A3%D8%AF%D9%88%D8%A7%D8%AA-%D8%B3%D9%87%D9%88%D9%84%D8%A9-%D8%A7%D9%84%D9%88%D8%B5%D9%88%D9%84-accessibility-%D8%A7%D9%84%D9%84%D8%A7%D8%B2%D9%85%D8%A9-%D9%81%D9%8A-%D8%B9%D9%85%D9%84%D9%8A%D8%A9-%D8%AA%D8%B7%D9%88%D9%8A%D8%B1-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-r1984/" rel="">Accessibility</a>.
</p>

<h2 id="-1">
	تصميم استمارة الويب اﻷولى
</h2>

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

<p>
	إن خطوة تصميم الاستمارة مهمة جدًا في بناء الموقع أو التطبيق. لن نغطي في هذا المقال تصميم استمارات الويب من منظور تجربة المستخدم لكن ستجد الكثير من اﻷفكار في كتاب <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> من إنتاج <a href="https://academy.hsoub.com" rel="external">أكاديمية حسوب</a>.
</p>

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

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="jpg" data-fileid="153640" href="https://academy.hsoub.com/uploads/monthly_2024_07/01_form-sketch-low.jpg.7fb2ef160b1794bb13495a7ef0f3f541.jpg" rel=""><img alt="01 form sketch low" class="ipsImage ipsImage_thumbnailed" data-fileid="153640" data-unique="zbuxaz86r" src="https://academy.hsoub.com/uploads/monthly_2024_07/01_form-sketch-low.jpg.7fb2ef160b1794bb13495a7ef0f3f541.jpg"> </a>
</p>

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

<h2 id="html">
	تطبيق عملي: إنجاز شيفرة HTML الخاصة بالاستمارة
</h2>

<p>
	نستخدم في استمارةنا عناصر HTML التالية:
</p>

<ul>
	<li>
		عنصر استمارة ويب <code>&lt;form&gt;</code>.
	</li>
	<li>
		عناصر <code>&lt;input&gt;</code>.
	</li>
	<li>
		زر <code>&lt;button&gt;</code>.
	</li>
</ul>

<p>
	وقبل أن تتابع معنا، أنشئ نسخة خاصة بك من <a href="https://github.com/mdn/learning-area/blob/main/html/introduction-to-html/getting-started/index.html" rel="external nofollow">قالب HTML الخاص بالتطبيق</a> الذي ستضع استمارتك ضمنه.
</p>

<h3 id="form">
	العنصر <code>&lt;form&gt;</code>
</h3>

<p>
	تبدأ الاستمارات جميعها بالعنصر <code>&lt;form&gt;</code> كالتالي:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_3158_6" style=""><span class="tag">&lt;form</span><span class="pln"> </span><span class="atn">action</span><span class="pun">=</span><span class="atv">"/my-handling-form-page"</span><span class="pln"> </span><span class="atn">method</span><span class="pun">=</span><span class="atv">"post"</span><span class="tag">&gt;</span><span class="pln">…</span><span class="tag">&lt;/form&gt;</span></pre>

<p>
	يحدد العنصر السابق رسميًا استمارة HTML، ويمثل حاوية تشابه العنصر <code>&lt;select&gt;</code> أو <code>&lt;footer&gt;</code> لكنه مخصص للاستمارات، ويتضمن عدة سمات تحدد سلوك الاستمارة. وتُعد جميع سمات العنصر اختيارية، لكن، ومن الناحية التطبيقية، تُستخدم سميتين على اﻷقل هما <code>action</code> و <code>method</code>:
</p>

<ul>
	<li>
		تحدد السمة <code>action</code> موقع عنوان URL الذي تُرسل إليه بيانات الاستمارة عند تسليمها.
	</li>
	<li>
		تحدد السمة <code>method</code> طلب HTTP المستخدم في إرسال البيانات ( <code>get</code> أو <code>post</code> عادة).
	</li>
</ul>

<p>
	<strong>ملاحظة</strong>: سنرى طريقة استخدام السمتين السابقتين في مقالات قادمة.
</p>

<h3 id="textareainput">
	العنصران <code>&lt;textarea</code><code>&gt; </code>و <code>&lt;input&gt;</code>
</h3>

<p>
	إن الاستمارة التي نبنيها هي استمارة اتصال contact form بسيطة تتضمن قسم إدخال البيانات فيه ثلاثة حقول نصية مع عناوين <code>&lt;label&gt;</code> تستخدم للدلالة على ما يجب إدخاله في كل حقل:
</p>

<ul>
	<li>
		يتكون عنصر إدخال اسم المستخدم من عنصر إدخال نصي وحيد السطر.
	</li>
	<li>
		يتكون عنصر إدخال البريد اﻹلكتروني عنصر إدخال من النوع <code>email</code> وهو حقل إدخال نصي يقبل عناوين بريد إلكتروني صحيحة فقط.
	</li>
	<li>
		يتكون عنصر إدخال الرسالة على عنصر نصي متعدد اﻷسطر هو <code>&lt;textarea&gt;</code>.
	</li>
</ul>

<p>
	إذًا سنحتاج إلى شيفرة HTML التالية لتنفيذ الاستمارة:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_3158_8" style=""><span class="tag">&lt;form</span><span class="pln"> </span><span class="atn">action</span><span class="pun">=</span><span class="atv">"/my-handling-form-page"</span><span class="pln"> </span><span class="atn">method</span><span class="pun">=</span><span class="atv">"post"</span><span class="tag">&gt;</span><span class="pln">
 </span><span class="tag">&lt;ul&gt;</span><span class="pln">
    </span><span class="tag">&lt;li&gt;</span><span class="pln">
     </span><span class="tag">&lt;label</span><span class="pln"> </span><span class="atn">for</span><span class="pun">=</span><span class="atv">"name"</span><span class="tag">&gt;</span><span class="pln">Name:</span><span class="tag">&lt;/label&gt;</span><span class="pln">
     </span><span class="tag">&lt;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">"name"</span><span class="pln"> </span><span class="atn">name</span><span class="pun">=</span><span class="atv">"user_name"</span><span class="pln"> </span><span class="tag">/&gt;</span><span class="pln">
    </span><span class="tag">&lt;/li&gt;</span><span class="pln">
    </span><span class="tag">&lt;li&gt;</span><span class="pln">
     </span><span class="tag">&lt;label</span><span class="pln"> </span><span class="atn">for</span><span class="pun">=</span><span class="atv">"mail"</span><span class="tag">&gt;</span><span class="pln">Email:</span><span class="tag">&lt;/label&gt;</span><span class="pln">
     </span><span class="tag">&lt;input</span><span class="pln"> </span><span class="atn">type</span><span class="pun">=</span><span class="atv">"email"</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"mail"</span><span class="pln"> </span><span class="atn">name</span><span class="pun">=</span><span class="atv">"user_email"</span><span class="pln"> </span><span class="tag">/&gt;</span><span class="pln">
    </span><span class="tag">&lt;/li&gt;</span><span class="pln">
    </span><span class="tag">&lt;li&gt;</span><span class="pln">
     </span><span class="tag">&lt;label</span><span class="pln"> </span><span class="atn">for</span><span class="pun">=</span><span class="atv">"msg"</span><span class="tag">&gt;</span><span class="pln">Message:</span><span class="tag">&lt;/label&gt;</span><span class="pln">
     </span><span class="tag">&lt;textarea</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"msg"</span><span class="pln"> </span><span class="atn">name</span><span class="pun">=</span><span class="atv">"user_message"</span><span class="tag">&gt;&lt;/textarea&gt;</span><span class="pln">
    </span><span class="tag">&lt;/li&gt;</span><span class="pln">
 </span><span class="tag">&lt;/ul&gt;</span><span class="pln">
</span><span class="tag">&lt;/form&gt;</span></pre>

<p>
	حدّث شيفرتك لتكون مماثلة للشيفرة السابقة.
</p>

<p>
	نستخدم عناصر القائمة <code>&lt;li&gt;</code> لهيكلة الشيفرة وتسهيل تنسيق الاستمارة (ما سنراه لاحقًا في هذا المقال). كما وضعنا عنوانًا صريحًا لكل عصر تحكم في الاستمارة لسهولة الاستخدام وسهولة الوصول <a href="https://academy.hsoub.com/tags/%D8%B3%D9%87%D9%88%D9%84%D8%A9%20%D8%A7%D9%84%D9%88%D8%B5%D9%88%D9%84/" rel="">Accessibility</a>. لاحظ أيضًا استخدام السمة <code>for</code> في جميع العناوين، وتأخذ هذه السمة قيمة المعرّف <code>id</code> لعنصر التحكم المرتبطة به، وهي الطريقة التي تربط فيها عنوانًا بعنصر تحكم.
</p>

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

<p>
	وبالنسبة لعناصر اﻹدخال <code>&lt;input&gt;</code>، ستجد أن السمة <code>type</code> هي الأهم، لأنها تُعرّف الشكل الذي يظهر فيه عنصر اﻹدخال وسلوكه.
</p>

<ul>
	<li>
		استخدمنا في مقالنا السمة <code>type</code> بالشكل <code>type = text</code> لعنصر اﻹدخال اﻷول وهي القيمة الافتراضية لهذه السمة، وتمثل مربعًا نصيًا بسيطًا من سطر واحد يقبل أية مدخلات نصية.
	</li>
	<li>
		واستخدمنا السمة بالشكل <code>type = email</code> لعنصر اﻹدخال الثاني ليكون عنصر إدخال نصي وحيد السطر يقبل عناوين بريد إلكتروني صحيحة كمدخل له. إذ تحوّل هذه القيمة عنصر اﻹدخال النصي إلى نوع من العناصر الذكية القادرة على إجراء تقييم للبيانات المدخلة إليه من قبل المستخدم، كما يسبب عرض لوحة مفاتيح مناسبة أكثر ﻹدخال بريد إلكتروني (في أجهزة الهاتف الذكية) كأن يعرض الرمز <code>@</code>افتراضيًا. وسنتحدث في مقال لاحق عن مفهوم التحقق من صحة البيانات المدخلة.
	</li>
</ul>

<p>
	وأخيرًا وليس أخرًا، لاحظ الاختلاف في الصياغة القواعدية لعنصر اﻹدخال <code>&lt;input&gt;</code> (دون وسم إغلاق) مقارنة بالعنصر <code>&lt;textarea&gt;&lt;/textarea&gt;</code> (وجود وسم إغلاق)، وهو أحد اﻷمور الغريبة في HTML. وسبب ذلك أن العنصر <code>&lt;input&gt;</code> عنصر فارغ void لا يحتاج إلى وسم إغلاق، بينما العنصر <code>&lt;textarea&gt;</code> ليس فارغًا لهذا يجب إغلاقه. ولهذا اﻷمر تأثيره على نواحي خاصة في هيكلة الاستمارة، إذ علينا في حالة عنصر اﻹدخال استخدام السمة <code>value</code> لتقديم نص افتراضي داخل العنصر:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_3158_10" style=""><span class="tag">&lt;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">value</span><span class="pun">=</span><span class="atv">"by default this element is filled with this text"</span><span class="pln"> </span><span class="tag">/&gt;</span></pre>

<p>
	بينما إن أردت وضع نص افتراضي داخل العنصر <code>&lt;textarea&gt;</code> سيكون ذلك بين وسمي البداية والنهاية:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_3158_12" style=""><span class="tag">&lt;textarea&gt;</span><span class="pln">
by default this element is filled with this text
</span><span class="tag">&lt;/textarea&gt;</span></pre>

<h3 id="button">
	العنصر <code>&lt;button&gt;</code>
</h3>

<p>
	نحتاج إلى الزر <code>&lt;button&gt;</code> في الاستمارة ﻹرسال بيانات المستخدم (أو تسليمها submit) عندما يملأ جميع الحقول المطلوبة. لهذا سنضيف الشيفرة التالية إلى ملف HTML فوق وسم اﻹغلاق <code>&lt;ul/&gt;</code> مباشرة:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_3158_14" style=""><span class="tag">&lt;li</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"button"</span><span class="tag">&gt;</span><span class="pln">
 </span><span class="tag">&lt;button</span><span class="pln"> </span><span class="atn">type</span><span class="pun">=</span><span class="atv">"submit"</span><span class="tag">&gt;</span><span class="pln">Send your message</span><span class="tag">&lt;/button&gt;</span><span class="pln">
</span><span class="tag">&lt;/li&gt;</span></pre>

<p>
	يقبل العنصر <code>&lt;button&gt;</code> السمة <code>type</code> أيضًا ولها ثلاثة قيم هي <code>submit, reset, button</code>:
</p>

<ul>
	<li>
		يؤدي النقر على زر من النوع <code>submit</code>، وهي القيمة الافتراضية للسمة، إلى إرسال بيانات الاستمارة إلى صفحة الويب التي تحددها السمة <code>action</code> للعنصر <code>&lt;form&gt;</code>.
	</li>
	<li>
		ويؤدي النقر على زر من النوع <code>reset</code> إلى ضبط قيم عناصر التحكم في الاستمارة إلى القيم الافتراضية مباشرة. ويُعد هذا الأمر ممارسة سيئة من منظور تجربة المستخدم، لهذا عليك تفادي استخدام هذا النوع من الأزرار ما لم يكن لديك سبب وجيه جدًا في استخدامه.
	</li>
	<li>
		لا يؤدي النقر على زر من النوع <code>button</code> إلى أي شيء، وقد يبدو هذا اﻷمر بلا معنى لكنه عظيم الفائدة في بناء عناصر تحكم مخصصة، إذ تستطيع تحديد وظيفة هذه الأزرار باستخدام جافا سكريبت.
	</li>
</ul>

<p>
	<strong>ملاحظة</strong>: بإمكانك استخدام عنصر اﻹدخال <code>&lt;input&gt;</code> مع السمة <code>type</code> ﻹنشاء زر مثل <code>&lt;'input type = 'submit&gt;</code>، لكن لا يمكن إضافة سوى محتوى نصي إلى عنوان الزر، بينما يتيح لك العنصر <code>&lt;button&gt;</code> إضافة محتوى معقد إلى الزر كالصور مثلًا.
</p>

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

<p>
	قدمنا في مقال اليوم لأحد أهم عناصر صفحات الويب وهي الاستمارات forms، وألقينا نظرة عامة على مختلف عناصر التحكم في استمارات الويب مثل الحقول النصية والقوائم المنسدلة والأزرار، وسنتابع في <a href="https://academy.hsoub.com/programming/css/%D8%AA%D9%86%D8%B3%D9%8A%D9%82-%D8%A7%D8%B3%D8%AA%D9%85%D8%A7%D8%B1%D8%A9-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-%D9%88%D8%A5%D8%B1%D8%B3%D8%A7%D9%84-%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA%D9%87%D8%A7-%D9%84%D9%84%D8%AE%D8%A7%D8%AF%D9%85-r2369/" rel="">المقال التالي</a> تنسيق هذه الاستمارة ونوضح طريقة تسليم بياناتها للخادم، كما سنشرح في مقالات تالية المزيد من الأمور المتعلقة باستمارات الويب مثل التحقق من صحة مدخلاتها والاعتبارات اﻷمنية المرتبطة بإرسال هذه البيانات للخادم.
</p>

<p>
	ترجمة -وبتصرف- لمقال: <a href="https://developer.mozilla.org/en-US/docs/Learn/Forms/" rel="external nofollow">Web form building blocks</a> ومقال: <a href="https://developer.mozilla.org/en-US/docs/Learn/Forms/Your_first_form" rel="external nofollow">Your first form</a>
</p>

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

<ul>
	<li>
		<a href="https://academy.hsoub.com/programming/html/%D8%A7%D9%84%D9%86%D9%85%D8%A7%D8%B0%D8%AC-forms-%D9%81%D9%8A-html5-r370/" rel="">النماذج (Forms) في HTML5</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/python/flask/%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D9%86%D9%85%D8%A7%D8%B0%D8%AC-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-%D9%88%D8%A7%D9%84%D8%AA%D8%AD%D9%82%D9%82-%D9%85%D9%86%D9%87%D8%A7-%D9%81%D9%8A-%D9%81%D9%84%D8%A7%D8%B3%D9%83-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D8%A7%D9%84%D8%A5%D8%B6%D8%A7%D9%81%D8%A9-flask-wtf-r1838/" rel="">استخدام نماذج الويب والتحقق منها في فلاسك باستخدام الإضافة Flask-WTF</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/python/django/%D8%AA%D8%B7%D8%A8%D9%8A%D9%82-%D8%B9%D9%85%D9%84%D9%8A-%D9%84%D8%AA%D8%B9%D9%84%D9%85-%D8%AC%D8%A7%D9%86%D8%BA%D9%88-%D8%A7%D9%84%D8%AC%D8%B2%D8%A1-%D8%A7%D9%84%D8%AB%D8%A7%D9%85%D9%86-%D8%A7%D9%84%D8%B9%D9%85%D9%84-%D9%85%D8%B9-%D8%A7%D9%84%D8%A7%D8%B3%D8%AA%D9%85%D8%A7%D8%B1%D8%A7%D8%AA-forms-r2120/" rel="">العمل مع الاستمارات Forms في تطبيقات جانغو</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/bootstrap/%D8%A7%D9%84%D8%A3%D8%B2%D8%B1%D8%A7%D8%B1-%D9%88%D8%A7%D9%84%D8%A3%D9%8A%D9%82%D9%88%D9%86%D8%A7%D8%AA-%D9%88%D8%A7%D9%84%D9%86%D9%85%D8%A7%D8%B0%D8%AC-%D9%81%D9%8A-%D8%A5%D8%B7%D8%A7%D8%B1-%D8%A7%D9%84%D8%B9%D9%85%D9%84-bootstrap-r52/" rel="">الأزرار والأيقونات والنماذج في إطار العمل Bootstrap</a>
	</li>
</ul>
]]></description><guid isPermaLink="false">2368</guid><pubDate>Fri, 19 Jul 2024 15:05:00 +0000</pubDate></item><item><title>&#x623;&#x62F;&#x648;&#x627;&#x62A; &#x633;&#x647;&#x648;&#x644;&#x629; &#x627;&#x644;&#x648;&#x635;&#x648;&#x644; Accessibility &#x627;&#x644;&#x644;&#x627;&#x632;&#x645;&#x629; &#x641;&#x64A; &#x639;&#x645;&#x644;&#x64A;&#x629; &#x62A;&#x637;&#x648;&#x64A;&#x631; &#x627;&#x644;&#x648;&#x64A;&#x628;</title><link>https://academy.hsoub.com/programming/html/%D8%A3%D8%AF%D9%88%D8%A7%D8%AA-%D8%B3%D9%87%D9%88%D9%84%D8%A9-%D8%A7%D9%84%D9%88%D8%B5%D9%88%D9%84-accessibility-%D8%A7%D9%84%D9%84%D8%A7%D8%B2%D9%85%D8%A9-%D9%81%D9%8A-%D8%B9%D9%85%D9%84%D9%8A%D8%A9-%D8%AA%D8%B7%D9%88%D9%8A%D8%B1-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-r1984/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2023_05/Accessibility.png.e3f914612ea8a26ab0850334c4c2f2cd.png" /></p>
<p>
	لقد غطينا في المقال السابق <a href="https://academy.hsoub.com/programming/html/%D9%85%D8%B9%D8%A7%D9%84%D8%AC%D8%A9-%D9%85%D8%B4%D8%A7%D9%83%D9%84-%D8%B3%D9%87%D9%88%D9%84%D8%A9-%D8%A7%D9%84%D9%88%D8%B5%D9%88%D9%84-accessibility-%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-r1983/" rel="">معالجة مشاكل سهولة الوصول Accessibility الشائعة للتوافق مع المتصفحات</a> أهم أفكار سهولة الوصول الخاصة بتقنيات الويب المختلفة بما في ذلك بعض تقنيات الاختبار مثل التنقل باستخدام لوحة المفاتيح وأدوات فحص تباين الألوان، وسنلقي نظرةً الآن على الأدوات الأخرى التي يمكنك الاستفادة منها عند إجراء اختبار سهولة الوصول.
</p>

<h2>
	أدوات التدقيق Auditing Tools
</h2>

<p>
	هناك عدد من أدوات التدقيق المتاحة التي يمكنك استخدامها في صفحات الويب، حيث ستلقي هذه الأدوات نظرةً على الصفحات وتعيد قائمةً بمشاكل <a href="https://academy.hsoub.com/design/user-experience/%D8%A5%D9%85%D9%83%D8%A7%D9%86%D9%8A%D8%A9-%D8%A7%D9%84%D9%88%D8%B5%D9%88%D9%84-%D9%84%D8%A5%D8%AA%D8%A7%D8%AD%D8%A9-%D8%B3%D9%87%D9%88%D9%84%D8%A9-%D8%A7%D9%84%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D9%84%D9%84%D8%AC%D9%85%D9%8A%D8%B9-r761/" rel="">سهولة الوصول</a> الموجودة فيها، ومن هذه الأدوات ما يلي:
</p>

<ul>
	<li>
		<a href="https://wave.webaim.org/" rel="external nofollow">Wave</a>: تُعَدّ أداةً جيدةً لاختبار سهولة الوصول عبر الإنترنت، حيث تأخذ عنوان ويب وتعيد عرضًا توضيحيًا مفيدًا لتلك الصفحة مع إبراز مشاكل سهولة الوصول.
	</li>
	<li>
		<a href="https://tenon.io/" rel="external nofollow">Tenon</a>: تُعَدّ أداةً جيدةً أخرى عبر الإنترنت تراجِع الشيفرة البرمجية من عنوان URL المُقدَّم وتعرض نتائجًا عن أخطاء سهولة الوصول بما في ذلك المقاييس والأخطاء المحددة باستخدام معايير WCAG التي تؤثر عليها والإصلاحات المقترحة، ولكنها تتطلب تسجيلًا تجريبيًا مجانيًا لعرض النتائج.
	</li>
	<li>
		<a href="https://khan.github.io/tota11y/" rel="external nofollow">tota11y</a>: تُعَدّ أداةً سهولة وصول من Khan Academy تتخذ شكل مكتبة جافاسكربت التي ترفقها مع صفحتك لتوفير عدد من أدوات سهولة الوصول.
	</li>
</ul>

<p>
	لنلقِ نظرةً على مثال باستخدام أداة Wave:
</p>

<ol>
	<li>
		انتقل إلى <a href="https://wave.webaim.org/" rel="external nofollow">صفحة Wave الرئيسية</a>.
	</li>
	<li>
		أدخِل عنوان URL الخاص بالمثال <a href="https://mdn.github.io/learning-area/accessibility/html/bad-semantics.html" rel="external nofollow">bad-semantics.html</a> في مربع إدخال النص بالقرب من أعلى الصفحة، ثم اضغط على مفتاح <code>Enter</code> أو انقر/اضغط على السهم في أقصى يمين مربع الإدخال.
	</li>
	<li>
		يجب أن يستجيب الموقع مع إعطاء وصف بمشاكل سهولة الوصول، وانقر على الرموز المعروضة لمعرفة المزيد من المعلومات حول كلٍّ من المشاكل التي حددها تقييم أداة Wave.
	</li>
</ol>

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

<h2>
	أدوات الاختبارات الآلية
</h2>

<p>
	تذهب أداة <a href="https://www.deque.com/axe/" rel="external nofollow">Deque's aXe</a> إلى أبعد قليلًا من أدوات التدقيق التي ذكرناها سابقًا، إذ تفحص الصفحات وتعيد أخطاء سهولة الوصول، كما يُحتمَل أن يكون شكلها الأكثر فائدةً هو إضافات المتصفح التالية:
</p>

<ul>
	<li>
		<a href="https://chrome.google.com/webstore/detail/axe-devtools-web-accessib/lhdoppojpmngadmnindnejefpokejbdd" rel="external nofollow">aXe للمتصفح Chrome</a>.
	</li>
	<li>
		<a href="https://addons.mozilla.org/en-US/firefox/addon/axe-devtools/" rel="external nofollow">aXe للمتصفح Firefox</a>.
	</li>
</ul>

<p>
	تضيف هذه الإضافات تبويب سهولة الوصول "Accessibility" إلى أدوات المطور في المتصفح، وقد ثبّتنا إصدار Firefox مثلًا، ثم استخدمناه لتدقيق المثال <a href="https://mdn.github.io/learning-area/accessibility/html/bad-table.html" rel="external nofollow">bad-table.html</a>، وحصلنا على النتائج التالية:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="126003" href="https://academy.hsoub.com/uploads/monthly_2023_05/03_axe-screenshot.png.3594bb9f6801e34d0126320191fd5d9d.png" rel=""><img alt="03_axe-screenshot.png" class="ipsImage ipsImage_thumbnailed" data-fileid="126003" data-unique="if0x6ptdt" src="https://academy.hsoub.com/uploads/monthly_2023_05/03_axe-screenshot.png.3594bb9f6801e34d0126320191fd5d9d.png"> </a>
</p>

<p>
	كما يمكن تثبيت الأداة aXe باستخدام <code>npm</code> ويمكن دمجها مع مشغّلات المهام مثل Grunt و Gulp وأطر العمل الآلية مثل Selenium و Cucumber وأطر اختبار الوحدات مثل Jasmine.
</p>

<h2>
	قارئات الشاشة
</h2>

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

<ul>
	<li>
		بعض المنتجات التجارية المدفوعة مثل JAWS و Window Eyes (لنظام Windows).
	</li>
	<li>
		بعض المنتجات المجانية مثل NVDA (لنظام Windows) و ChromeVox (للمتصفح Chrome ونظامَي Windows و Mac OS X) و Orca (لنظام لينكس Linux).
	</li>
	<li>
		بعض المنتجات المدمَجة مع نظام التشغيل مثل VoiceOver (على نظام Mac OS X و iOS) و ChromeVox (على أجهزة Chromebook) و TalkBack (على نظام Android).
	</li>
</ul>

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

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

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

<h3>
	قارئ الشاشة VoiceOver
</h3>

<p>
	يأتي قارئ الشاشة VoiceOver -أو VO اختصارًا- مجانًا مع جهاز Mac أو iPhone أو iPad، لذا فهو مفيد للاختبار على الحاسوب أو الهاتف المحمول إذا أردت استخدام منتجات Apple، إذ سنختبره على نظام Mac OS X على جهاز MacBook Pro.
</p>

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

<p>
	ستبدو الشاشة نفسها عند تشغيل VO، ولكنك سترى مربعًا أسودًا في الجزء السفلي الأيسر من الشاشة يحتوي على معلومات حول ما هو مُحدَّد حاليًا، كما سيُميَّز التحديد الحالي بحدود سوداء، ويُعرَف هذا التمييز بمؤشر VO.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="126002" href="https://academy.hsoub.com/uploads/monthly_2023_05/04_voiceover.png.07a9217749f5610ba374da1fa4145890.png" rel=""><img alt="04_voiceover.png" class="ipsImage ipsImage_thumbnailed" data-fileid="126002" data-unique="brveva9pu" src="https://academy.hsoub.com/uploads/monthly_2023_05/04_voiceover.png.07a9217749f5610ba374da1fa4145890.png"> </a>
</p>

<p>
	ستستفيد كثيرًا من معدِّل VO لاستخدام قارئ الشاشة VO، إذ يُعَدّ المعدِّل Modifier مفتاحًا أو مجموعة مفاتيح يجب الضغط عليها بالإضافة إلى اختصارات VO من لوحة المفاتيح الفعلية لجعلها تعمل، كما يُعَدّ استخدام المعدل بهذه الطريقة أمرًا شائعًا مع قارئات الشاشة من أجل ألّا تتعارض أوامرها مع الأوامر الأخرى، ويمكن أن يكون المعدِّل في حالة VO المفتاح <code>CapsLock</code> أو <code>Ctrl + Option</code>.
</p>

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

<table>
	<thead>
		<tr>
			<th>
				اختصار لوحة المفاتيح
			</th>
			<th>
				الوصف
			</th>
		</tr>
	</thead>
	<tbody>
		<tr>
			<td>
				المعدِّل VO + مفاتيح الأسهم
			</td>
			<td>
				تحريك مؤشر قارئ الشاشة VO للأعلى ولليمين وللأسفل ولليسار.
			</td>
		</tr>
		<tr>
			<td>
				المعدِّل VO + مفتاح المسافة
			</td>
			<td>
				تحديد أو تنشيط العناصر المميزة باستخدام مؤشر VO، ويتضمن ذلك العناصر المحددة في الدوّار Rotor (انظر أدناه).
			</td>
		</tr>
		<tr>
			<td>
				المعدِّل VO + مفتاح Shift + السهم للأسفل
			</td>
			<td>
				الانتقال إلى مجموعة من العناصر (مثل جدول HTML أو نموذج، …إلخ)، ويمكنك التنقل وتحديد العناصر ضمن تلك المجموعة باستخدام الأوامر المذكورة أعلاه.
			</td>
		</tr>
		<tr>
			<td>
				المعدِّل VO + مفتاح Shift + السهم للأعلى
			</td>
			<td>
				الخروج من المجموعة.
			</td>
		</tr>
		<tr>
			<td>
				المعدِّل VO + مفتاح C
			</td>
			<td>
				قراءة عنوان العمود الحالي (عندما تكون ضمن الجدول).
			</td>
		</tr>
		<tr>
			<td>
				المعدِّل VO + مفتاح R
			</td>
			<td>
				قراءة عنوان الصف الحالي (عندما تكون ضمن الجدول).
			</td>
		</tr>
		<tr>
			<td>
				المعدِّل VO + مفتاح C + مفتاح C (مفتاحا C على التوالي)
			</td>
			<td>
				قراءة العمود الحالي بأكمله بما في ذلك عنوانه (عندما تكون ضمن الجدول).
			</td>
		</tr>
		<tr>
			<td>
				المعدِّل VO + مفتاح R + مفتاح R (مفتاحا R على التوالي)
			</td>
			<td>
				قراءة الصف الحالي بأكمله بما في ذلك العناوين التي تقابل كل خلية (عندما تكون ضمن الجدول).
			</td>
		</tr>
		<tr>
			<td>
				المعدِّل VO + السهم لليسار أو المعدّل VO + السهم لليمين
			</td>
			<td>
				التنقل بين الخيارات عندما تكون ضمن بعض الخيارات الأفقية مثل منتقي التاريخ أو الوقت.
			</td>
		</tr>
		<tr>
			<td>
				المعدِّل VO + السهم للأعلى أو المعدّل VO + السهم للأسفل
			</td>
			<td>
				تغيير الخيار الحالي عندما تكون ضمن بعض الخيارات الأفقية مثل منتقي التاريخ أو الوقت.
			</td>
		</tr>
		<tr>
			<td>
				المعدِّل VO + المفتاح U
			</td>
			<td>
				استخدم الدوّار Rotor الذي يعرض قوائم العناوين والروابط وعناصر التحكم في النموذج وغير ذلك لسهولة التنقل.
			</td>
		</tr>
		<tr>
			<td>
				المعدِّل VO + السهم لليسار أو المعدّل VO + السهم لليمين
			</td>
			<td>
				التنقل بين القوائم المختلفة المتوفرة في الدوّار Rotor (عندما تكون ضمن الدوّار Rotor).
			</td>
		</tr>
		<tr>
			<td>
				المعدّل VO + السهم للأعلى أو المعدّل VO + السهم للأسفل
			</td>
			<td>
				التنقل بين العناصر المختلفة في قائمة الدوّار Rotor الحالية (عندما تكون ضمن الدوّار Rotor).
			</td>
		</tr>
		<tr>
			<td>
				المفتاح Esc
			</td>
			<td>
				الخروج من الدوّار Rotor (عندما تكون ضمن الدوّار Rotor).
			</td>
		</tr>
		<tr>
			<td>
				المفتاح Ctrl
			</td>
			<td>
				إيقاف أو استئناف الكلام (عندما يتحدث قارئ الشاشة VO).
			</td>
		</tr>
		<tr>
			<td>
				المعدّل VO + المفتاح Z
			</td>
			<td>
				إعادة تشغيل الجزء الأخير من الكلام.
			</td>
		</tr>
		<tr>
			<td>
				المعدّل VO + المفتاح D
			</td>
			<td>
				الانتقال إلى لوحة التفضيلات في جهاز Mac لتتمكن من تحديد التطبيقات التي تعمل ضمنها.
			</td>
		</tr>
	</tbody>
</table>

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

<h3>
	قارئ الشاشة NVDA
</h3>

<p>
	يعمل قارئ الشاشة NVDA في نظام ويندوز فقط ويجب تثبيته كما يلي:
</p>

<ol>
	<li>
		نزّله من موقع <a href="https://www.nvaccess.org/" rel="external nofollow">nvaccess</a>، حيث يمكنك اختيار التبرع أو تنزيله مجانًا، ويجب أن تضع عنوان بريدك الإلكتروني قبل أن تتمكّن من تنزيله.
	</li>
	<li>
		ثبّته بعد تنزيله من خلال النقر نقرًا مزدوجًا على برنامج التثبيت واقبل الترخيص واتبع التعليمات.
	</li>
	<li>
		يمكنك بدء تشغيل NVDA من خلال النقر نقرًا مزدوجًا على ملف أو اختصار البرنامج أو استخدام اختصار لوحة المفاتيح <code>Ctrl + Alt + N</code>. سترى مربع حوار ترحيب NVDA عند بدء تشغيله، ويمكنك هنا الاختيار من بين عدة خيارات، ثم الضغط على زر "موافق OK" للبدء بالعمل.
	</li>
</ol>

<p>
	سيصبح NVDA نشطًا الآن على حاسوبك.
</p>

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

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

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

<table>
	<thead>
		<tr>
			<th>
				اختصار لوحة المفاتيح
			</th>
			<th>
				الوصف
			</th>
		</tr>
	</thead>
	<tbody>
		<tr>
			<td>
				المعدِّل NVDA + المفتاح Q
			</td>
			<td>
				إيقاف تشغيل قارئ الشاشة NVDA بعد تشغيله.
			</td>
		</tr>
		<tr>
			<td>
				المعدِّل NVDA + السهم للأعلى
			</td>
			<td>
				قراءة السطر الحالي.
			</td>
		</tr>
		<tr>
			<td>
				المعدِّل NVDA + السهم للأسفل
			</td>
			<td>
				بدء القراءة في الموضع الحالي.
			</td>
		</tr>
		<tr>
			<td>
				السهم للأعلى والسهم للأسفل، أو مفتاح Shift + مفتاح Tab ومفتاح Tab
			</td>
			<td>
				الانتقال إلى العنصر السابق/التالي في الصفحة وقراءته.
			</td>
		</tr>
		<tr>
			<td>
				السهم لليسار والسهم لليمين
			</td>
			<td>
				الانتقال إلى المحرف السابق/التالي في العنصر الحالي وقراءته.
			</td>
		</tr>
		<tr>
			<td>
				مفتاح Shift + مفتاح H ومفتاح H
			</td>
			<td>
				الانتقال إلى العنوان السابق/التالي وقراءته.
			</td>
		</tr>
		<tr>
			<td>
				مفتاح Shift + مفتاح K ومفتاح K
			</td>
			<td>
				الانتقال إلى الرابط السابق/التالي وقراءته.
			</td>
		</tr>
		<tr>
			<td>
				مفتاح Shift + مفتاح D ومفتاح D
			</td>
			<td>
				الانتقال إلى علامة المستند السابق/التالي مثل <code>&lt;nav&gt;</code> وقراءته.
			</td>
		</tr>
		<tr>
			<td>
				مفتاح Shift + المفاتيح 1–6 والمفاتيح 1–6
			</td>
			<td>
				الانتقال إلى العنوان السابق/التالي (ذات المستويات 1-6) وقراءته.
			</td>
		</tr>
		<tr>
			<td>
				مفتاح Shift + مفتاح F ومفتاح F
			</td>
			<td>
				الانتقال إلى حقل الإدخال في النموذج السابق/التالي والتركيز عليه.
			</td>
		</tr>
		<tr>
			<td>
				مفتاح Shift + مفتاح T ومفتاح T
			</td>
			<td>
				الانتقال إلى جدول البيانات السابق/التالي والتركيز عليه.
			</td>
		</tr>
		<tr>
			<td>
				مفتاح Shift + مفتاح B ومفتاح B
			</td>
			<td>
				الانتقال إلى الزر السابق/التالي وقراءة تسميته أو عنوانه.
			</td>
		</tr>
		<tr>
			<td>
				مفتاح Shift + مفتاح L ومفتاح L
			</td>
			<td>
				الانتقال إلى القائمة السابقة/التالية وقراءة عنصر القائمة الأول.
			</td>
		</tr>
		<tr>
			<td>
				مفتاح Shift + مفتاح I ومفتاح I
			</td>
			<td>
				الانتقال إلى عنصر القائمة السابق/التالي وقراءته.
			</td>
		</tr>
		<tr>
			<td>
				مفتاح Enter أو Return
			</td>
			<td>
				تنشيط العنصر (عند تحديد رابط/زر أو عنصر آخر قابل للتنشيط).
			</td>
		</tr>
		<tr>
			<td>
				المعدِّل NVDA + مفتاح المسافة Space
			</td>
			<td>
				الدخول في النموذج بحيث يمكن تحديد العناصر الفردية أو الخروج منه إذا كنت موجودًا فيه فعليًا (عند تحديد النموذج).
			</td>
		</tr>
		<tr>
			<td>
				مفتاح Shift + مفتاح Tab ومفتاح Tab
			</td>
			<td>
				التنقل بين حقول إدخال النموذج (عندما تكون ضمن النموذج).
			</td>
		</tr>
		<tr>
			<td>
				السهم للأعلى والسهم للأسفل
			</td>
			<td>
				تغيير قيم حقول إدخال النموذج في حالة مثل مربعات التحديد مثلًا (عندما تكون ضمن النموذج).
			</td>
		</tr>
		<tr>
			<td>
				مفتاح المسافة
			</td>
			<td>
				تحديد القيمة المختارة (عندما تكون ضمن النموذج).
			</td>
		</tr>
		<tr>
			<td>
				المفتاح Ctrl + المفتاح Alt + مفاتيح الأسهم
			</td>
			<td>
				التنقل بين خلايا الجدول (عند تحديد الجدول).
			</td>
		</tr>
	</tbody>
</table>

<h3>
	اختبار قارئ الشاشة
</h3>

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

<ul>
	<li>
		اطّلع على المثال <a href="https://mdn.github.io/learning-area/accessibility/html/good-semantics.html" rel="external nofollow">good-semantics.html</a> ولاحظ كيف يعثر قارئ الشاشة على العناوين وكيف تكون متاحةً للاستخدام للتنقل، و اطّلع على المثال <a href="https://mdn.github.io/learning-area/accessibility/html/bad-semantics.html" rel="external nofollow">bad-semantics.html</a>، ولاحظ كيف لا يحصل قارئ الشاشة على أيّ من هذه المعلومات، وتخيل كم سيكون هذا مزعجًا عند محاولة التنقل في صفحة نصية طويلة.
	</li>
	<li>
		اطّلع على المثال <a href="https://mdn.github.io/learning-area/accessibility/html/good-links.html" rel="external nofollow">good-links.html</a>، ولاحظ كيف تبدو منطقيةً عند عرضها، وليس ذلك هو الحال مع المثال <a href="https://mdn.github.io/learning-area/accessibility/html/bad-links.html" rel="external nofollow">bad-links.html</a> فجميع عباراته مجرد عبارات "انقر هنا".
	</li>
	<li>
		اطّلع على المثال <a href="https://mdn.github.io/learning-area/accessibility/html/good-form.html" rel="external nofollow">good-form.html</a> ولاحظ كيف أنّ حقول إدخال النموذج موصوفة باستخدام تسمياتها لأننا استخدمنا عناصر <code>&lt;label&gt;</code> بصورة صحيحة، في حين ستحصل في المثال <a href="https://mdn.github.io/learning-area/accessibility/html/bad-form.html" rel="external nofollow">bad-form.html</a> على تسمية غير مفيدة.
	</li>
	<li>
		اطّلع على المثال <a href="https://mdn.github.io/learning-area/css/styling-boxes/styling-tables/punk-bands-complete.html" rel="external nofollow">punk-bands-complete.html</a> وشاهد كيف يمكن لقارئ الشاشة ربط أعمدة وصفوف المحتوى وقراءتها معًا لأننا حددنا العناوين بصورة صحيحة، في حين لا يمكن ربط الخلايا على الإطلاق في المثال <a href="https://mdn.github.io/learning-area/accessibility/html/bad-table.html" rel="external nofollow">bad-table.html</a>، ولاحظ أنّ قارئ الشاشة NVDA يبدو أنه يتصرف بغرابة بعض الشيء عندما يكون لديك جدول واحد فقط في الصفحة، لذا يمكنك تجربة <a href="https://webaim.org/articles/nvda/tables.htm" rel="external nofollow">صفحة اختبار جدول WebAIM</a> بدلًا من ذلك.
	</li>
	<li>
		ألقِ نظرةً على <a href="https://www.freedomscientific.com/SurfsUp/AriaLiveRegionsAtomic.htm" rel="external nofollow">مثال WAI-ARIA Live Regions</a> الذي رأيناه سابقًا، ولاحظ كيف سيستمر قارئ الشاشة في قراءة القسم المُحدَّث باستمرار عند تحديثه.
	</li>
</ul>

<h2>
	اختبار المستخدم
</h2>

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

<h2>
	قائمة مراجعة اختبار سهولة الوصول
</h2>

<p>
	توفر القائمة التالية قائمة مراجعة يمكنك اتباعها للتأكد من أنك أجريت اختبار <a href="https://academy.hsoub.com/programming/html/%D8%B4%D9%85%D9%88%D9%84%D9%8A%D8%A9-%D8%A7%D9%84%D8%AA%D8%B5%D9%85%D9%8A%D9%85-%D8%B3%D9%87%D9%88%D9%84%D8%A9-%D9%88%D8%B5%D9%88%D9%84-%D8%AC%D9%85%D9%8A%D8%B9-%D8%A7%D9%84%D9%85%D8%B3%D8%AA%D8%AE%D8%AF%D9%85%D9%8A%D9%86-%D9%84%D8%B5%D9%81%D8%AD%D8%A7%D8%AA-%D9%85%D9%88%D9%82%D8%B9-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-r1640/" rel="">سهولة الوصول</a> الموصَى به لمشروعك:
</p>

<ul>
	<li>
		تأكد من أنّ شيفرة HTML صحيحة دلاليًا قدر الإمكان، إذ يُعَدّ التحقق من صحتها بدايةً جيدةً، كما هو الحال مع استخدام أداة تدقيق.
	</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>
		تأكد من أنّ وظائفك تشمل مستخدِمِي لوحة المفاتيح واختبرها باستخدام مفاتيح Tab أو Return أو Enter.
	</li>
	<li>
		تأكد من أنّ المحتوى غير النصي يحتوي على نصوص بديلة، إذ تُعَدّ أداة التدقيق مفيدةً في اكتشاف مثل هذه المشاكل.
	</li>
	<li>
		تأكد من أنّ تباين ألوان موقعك مقبول باستخدام أداة فحص مناسبة.
	</li>
	<li>
		تأكد من أنّ المحتوى المخفي مرئي لقارئات الشاشة.
	</li>
	<li>
		تأكد من أنّ الوظائف قابلة للاستخدام بدون شيفرة جافاسكربت حيثما أمكن ذلك.
	</li>
	<li>
		استخدم <a href="https://academy.hsoub.com/programming/html/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D9%85%D9%88%D8%A7%D8%B5%D9%81%D8%A7%D8%AA-aria-%D8%A5%D8%B9%D8%B7%D8%A7%D8%A1-%D8%B9%D9%86%D8%A7%D8%B5%D8%B1-html-%D8%AF%D9%84%D8%A7%D9%84%D8%A7%D8%AA-%D8%AE%D8%A7%D8%B5%D8%A9-%D9%84%D8%AA%D8%B3%D9%87%D9%8A%D9%84-%D8%A7%D9%84%D9%88%D8%B5%D9%88%D9%84-r1327/" rel="">مواصفات ARIA</a> لتحسين سهولة الوصول في المكان المناسب.
	</li>
	<li>
		شغّل موقعك من خلال أداة تدقيق.
	</li>
	<li>
		اختبره باستخدام قارئ الشاشة.
	</li>
	<li>
		ضمّن سياسة أو بيان سهولة وصول في مكان ما يمكن العثور عليه على موقعك لتقول ما فعلته.
	</li>
</ul>

<h2>
	العثور عن المساعدة
</h2>

<p>
	هناك العديد من المشاكل الأخرى التي ستواجهها مع سهولة الوصول، ولكن أهم شيء يجب معرفته هو كيفية العثور على إجابات عبر الإنترنت، ويمكنك الاعتماد على <a href="https://academy.hsoub.com/questions/c3-programming/" rel="">قسم الأسئلة والأجوبة</a> في أكاديمية حسوب للحصول على بعض المساعدة والنصائح الجيدة من مبرمجين أكفاء.
</p>

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

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

<p>
	ترجمة -وبتصرُّف- لقسم من المقال <a href="https://developer.mozilla.org/en-US/docs/Learn/Tools_and_testing/Cross_browser_testing/Accessibility" rel="external nofollow">Handling common accessibility problems</a>.
</p>

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

<ul>
	<li>
		المقال السابق: <a href="https://academy.hsoub.com/programming/html/%D9%85%D8%B9%D8%A7%D9%84%D8%AC%D8%A9-%D9%85%D8%B4%D8%A7%D9%83%D9%84-%D8%B3%D9%87%D9%88%D9%84%D8%A9-%D8%A7%D9%84%D9%88%D8%B5%D9%88%D9%84-accessibility-%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-r1983/" rel="">معالجة مشاكل سهولة الوصول Accessibility الشائعة للتوافق مع المتصفحات</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/html/%D8%A7%D9%84%D8%AF%D9%84%D8%A7%D9%84%D8%A7%D8%AA-%D8%A7%D9%84%D9%85%D8%B6%D9%85%D9%86%D8%A9-%D9%84%D8%B9%D9%86%D8%A7%D8%B5%D8%B1-%D8%B5%D9%81%D8%AD%D8%A9-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-%D9%88%D8%AF%D9%88%D8%B1%D9%87%D8%A7-%D9%81%D9%8A-%D8%AA%D8%B9%D8%B2%D9%8A%D8%B2-%D8%B3%D9%87%D9%88%D9%84%D8%A9-%D8%A7%D9%84%D9%88%D8%B5%D9%88%D9%84-r1325/" rel="">الدلالات المضمنة لعناصر صفحة الويب ودورها في تعزيز سهولة الوصول</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/html/%D8%A7%D9%84%D8%AA%D8%AD%D9%82%D9%82-%D9%85%D9%86-%D8%B3%D9%87%D9%88%D9%84%D8%A9-%D8%A7%D9%84%D9%88%D8%B5%D9%88%D9%84-%D9%84%D8%B5%D9%81%D8%AD%D8%A7%D8%AA-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-r1328/" rel="">التحقق من سهولة الوصول لصفحات الويب</a>
	</li>
</ul>
]]></description><guid isPermaLink="false">1984</guid><pubDate>Thu, 18 May 2023 16:00:00 +0000</pubDate></item><item><title>&#x645;&#x639;&#x627;&#x644;&#x62C;&#x629; &#x645;&#x634;&#x627;&#x643;&#x644; &#x633;&#x647;&#x648;&#x644;&#x629; &#x627;&#x644;&#x648;&#x635;&#x648;&#x644; Accessibility &#x627;&#x644;&#x634;&#x627;&#x626;&#x639;&#x629; &#x644;&#x644;&#x62A;&#x648;&#x627;&#x641;&#x642; &#x645;&#x639; &#x627;&#x644;&#x645;&#x62A;&#x635;&#x641;&#x62D;&#x627;&#x62A;</title><link>https://academy.hsoub.com/programming/html/%D9%85%D8%B9%D8%A7%D9%84%D8%AC%D8%A9-%D9%85%D8%B4%D8%A7%D9%83%D9%84-%D8%B3%D9%87%D9%88%D9%84%D8%A9-%D8%A7%D9%84%D9%88%D8%B5%D9%88%D9%84-accessibility-%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-r1983/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2023_05/----Accessibility----.png.e17e348654d9a6fd74501524f44d4866.png" /></p>
<p>
	سنوجّه اهتمامنا في هذا المقال إلى سهولة الوصول أو سهولة الوصول Accessibility -أي شمولية كل المستخدمين وتسهيل وصولهم واستخدامهم الموقع بمن فيهم ذوي الاحتياجات الخاصة- وتوفير معلومات حول المشاكل الشائعة وكيفية إجراء اختبار بسيط والاستفادة من أدوات التدقيق أو الاختبارات الآلي للعثور على مشاكل سهولة الوصول للتوافق مع المتصفحات Cross Browser.
</p>

<ul>
	<li>
		<strong>المتطلبات الأساسية</strong>: يجب أن تتعلم أساسيات لغات <a href="https://wiki.hsoub.com/HTML" rel="external">HTML</a> و<a href="https://wiki.hsoub.com/CSS" rel="external">CSS</a> و<a href="https://wiki.hsoub.com/JavaScript" rel="external">جافاسكربت JavaScript</a>، وأن يكون لديك فكرة عن <a href="https://academy.hsoub.com/programming/general/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D8%A7%D8%AE%D8%AA%D8%A8%D8%A7%D8%B1-%D9%85%D8%B4%D8%A7%D8%B1%D9%8A%D8%B9-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-%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-r1953/" rel="">المبادئ عالية المستوى لاختبار التوافق مع المتصفحات</a>.
	</li>
	<li>
		<strong>الهدف</strong>: القدرة على تشخيص مشاكل سهولة الوصول الشائعة واستخدام الأدوات والتقنيات المناسبة لإصلاحها.
	</li>
</ul>

<h2>
	ما هي سهولة الوصول Accessibility؟
</h2>

<p>
	يفكر معظم الناس مباشرةً عندما نقول <a href="https://academy.hsoub.com/programming/html/%D8%B3%D9%87%D9%88%D9%84%D8%A9-%D9%88%D8%B5%D9%88%D9%84-%D8%AC%D9%85%D9%8A%D8%B9-%D8%A7%D9%84%D8%B2%D9%88%D8%A7%D8%B1-%D9%84%D9%85%D9%88%D8%A7%D9%82%D8%B9-%D9%88%D8%AA%D8%B7%D8%A8%D9%8A%D9%82%D8%A7%D8%AA-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-r1323/" rel="">سهولة الوصول</a> في سياق تقنيات الويب في التأكد من أن مواقع أو تطبيقات الويب يمكن أن يستخدمها الأشخاص ذوي الاحتياجات الخاصة بسهولة مثل:
</p>

<ul>
	<li>
		الأشخاص المعاقون بصريًا الذين يستخدِمون قارئات الشاشة أو التكبير أو التقريب للوصول إلى النص.
	</li>
	<li>
		الأشخاص الذين يعانون من إعاقات في الوظائف الحركية ويستخدِمون لوحة المفاتيح (أو ميزات أخرى بدون استخدام الفأرة) لتنشيط وظائف موقع الويب.
	</li>
	<li>
		الأشخاص الذين يعانون من إعاقات سمعية والذين يعتمدون على التسميات أو العناوين التوضيحية أو البدائل النصية الأخرى للمحتوى الصوتي أو الفيديو.
	</li>
</ul>

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

<ul>
	<li>
		مستخدِمو الأجهزة المحمولة.
	</li>
	<li>
		مستخدِمو أجهزة تصفح بديلة مثل أجهزة التلفاز والساعات وما إلى ذلك.
	</li>
	<li>
		مستخدِمو الأجهزة القديمة التي يمكن ألّا تحتوي على أحدث المتصفحات.
	</li>
	<li>
		مستخدِمو الأجهزة ذات المواصفات الأقل والتي يمكن أن تحتوي على معالجات بطيئة.
	</li>
</ul>

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

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

<h2>
	مشاكل سهولة الوصول الشائعة
</h2>

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

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

<h3>
	سهولة الوصول في شيفرة HTML
</h3>

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

<h4>
	البنية الدلالية
</h4>

<p>
	أهم مكسب في <a href="https://academy.hsoub.com/programming/html/html5-%D9%88%D8%A7%D9%84%D9%88%D9%8A%D8%A8-%D8%A7%D9%84%D8%AF%D9%84%D8%A7%D9%84%D9%8A-r6/" rel="">لغة HTML الدلالية</a> هو استخدام عناوين وفقرات لمحتواك، لأن مستخدِمي قارئات الشاشة يميلون إلى استخدام عناوين المستند بوصفها علامات إرشاديةً للعثور على المحتوى الذي يحتاجون إليه بسرعة أكبر، فإذا لم يتضمن محتواك على عناوين، فكل ما سيحصلون عليه هو جدار نصي ضخم بدون علامات إرشادية للعثور على أيّ شيء، وإليك أمثلة على بينة شيفرة HTML السيئة أولًا:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_2143_8" style=""><span class="tag">&lt;font</span><span class="pln"> </span><span class="atn">size</span><span class="pun">=</span><span class="atv">"7"</span><span class="tag">&gt;</span><span class="pln">My heading</span><span class="tag">&lt;/font&gt;</span><span class="pln">
</span><span class="tag">&lt;br&gt;&lt;br&gt;</span><span class="pln">
This is the first section of my document.
</span><span class="tag">&lt;br&gt;&lt;br&gt;</span><span class="pln">
I'll add another paragraph here too.
</span><span class="tag">&lt;br&gt;&lt;br&gt;</span><span class="pln">
</span><span class="tag">&lt;font</span><span class="pln"> </span><span class="atn">size</span><span class="pun">=</span><span class="atv">"5"</span><span class="tag">&gt;</span><span class="pln">My subheading</span><span class="tag">&lt;/font&gt;</span><span class="pln">
</span><span class="tag">&lt;br&gt;&lt;br&gt;</span><span class="pln">
This is the first subsection of my document. I'd love people to be able to find this content!
</span><span class="tag">&lt;br&gt;&lt;br&gt;</span><span class="pln">
</span><span class="tag">&lt;font</span><span class="pln"> </span><span class="atn">size</span><span class="pun">=</span><span class="atv">"5"</span><span class="tag">&gt;</span><span class="pln">My 2nd subheading</span><span class="tag">&lt;/font&gt;</span><span class="pln">
</span><span class="tag">&lt;br&gt;&lt;br&gt;</span><span class="pln">
This is the second subsection of my content. I think it is more interesting than the last one.</span></pre>

<p>
	ثم إليك الجيدة:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_2143_10" style=""><span class="tag">&lt;h1&gt;</span><span class="pln">My heading</span><span class="tag">&lt;/h1&gt;</span><span class="pln">

</span><span class="tag">&lt;p&gt;</span><span class="pln">This is the first section of my document.</span><span class="tag">&lt;/p&gt;</span><span class="pln">

</span><span class="tag">&lt;p&gt;</span><span class="pln">I'll add another paragraph here too.</span><span class="tag">&lt;/p&gt;</span><span class="pln">

</span><span class="tag">&lt;h2&gt;</span><span class="pln">My subheading</span><span class="tag">&lt;/h2&gt;</span><span class="pln">

</span><span class="tag">&lt;p&gt;</span><span class="pln">This is the first subsection of my document. I'd love people to be able to find this content!</span><span class="tag">&lt;/p&gt;</span><span class="pln">

</span><span class="tag">&lt;h2&gt;</span><span class="pln">My 2nd subheading</span><span class="tag">&lt;/h2&gt;</span><span class="pln">

</span><span class="tag">&lt;p&gt;</span><span class="pln">This is the second subsection of my content. I think it is more interesting than the last one.</span><span class="tag">&lt;/p&gt;</span></pre>

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

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

<ul>
	<li>
		في فايرفوكس Firefox: حدِّد الخيار عرض View ثم تنسيق الصفحة Page Style ثم بلا تنسيق No Style من القائمة الرئيسية.
	</li>
	<li>
		في سفاري Safari: حدِّد الخيار تطوير Develop ثم إلغاء تفعيل التنسيق Disable Styles من القائمة الرئيسية، حيث يمكن تفعيل قائمة التطوير Develop من خلال تحديد الخيار Safari ثم تفضيلات Preferences ثم خيارات متقدمة Advanced ثم إظهار Show Develop من شريط القوائم.
	</li>
	<li>
		في كروم Chrome: ثبّت الإضافة Web Developer Toolbar، ثم أعد تشغيل المتصفح، وانقر على الرمز الذي يشبه الترس الظاهر، ثم حدِّد الخيار CSS ثم إلغاء تفعيل جميع التنسيقات Disable All Styles.
	</li>
	<li>
		في إيدج Edge: حدِّد الخيار عرض View ثم التنسيق Style ثم بلا تنسيق No Style من القائمة الرئيسية.
	</li>
</ul>

<p>
	لمزيد من التفاصيل حول الدلالية في HTML، ارجع إلى مقال <a href="https://academy.hsoub.com/programming/html/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D9%85%D9%88%D8%A7%D8%B5%D9%81%D8%A7%D8%AA-aria-%D8%A5%D8%B9%D8%B7%D8%A7%D8%A1-%D8%B9%D9%86%D8%A7%D8%B5%D8%B1-html-%D8%AF%D9%84%D8%A7%D9%84%D8%A7%D8%AA-%D8%AE%D8%A7%D8%B5%D8%A9-%D9%84%D8%AA%D8%B3%D9%87%D9%8A%D9%84-%D8%A7%D9%84%D9%88%D8%B5%D9%88%D9%84-r1327/" rel="">مدخل إلى مواصفات ARIA: إعطاء عناصر HTML دلالات خاصة لتسهيل الوصول</a>.
</p>

<h4>
	سهولة الوصول في استخدام لوحة المفاتيح الأصيلة
</h4>

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

<p>
	يمكنك تجربة ذلك باستخدام المثال <a href="https://mdn.github.io/learning-area/tools-testing/cross-browser-testing/accessibility/native-keyboard-accessibility.html" rel="external nofollow">native-keyboard-accessibility.html</a> (اطّلع على <a href="https://github.com/mdn/learning-area/blob/main/tools-testing/cross-browser-testing/accessibility/native-keyboard-accessibility.html" rel="external nofollow">شيفرته البرمجية</a>)، لذا افتح هذا المثال في تبويب جديد، وحاول الضغط على مفتاح <code>Tab</code>، ويجب أن ترى بعد بضع ضغطات أنّ تركيز التبويب ينتقل بين العناصر المختلفة القابلة للتركيز، وتُعطَى العناصر المركَّزة تنسيقًا افتراضيًا مميزًا في كل متصفح (يختلف قليلًا من متصفح إلى آخر) بحيث يمكنك تحديد العنصر الذي يُركَّز عليه.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2023_05/01_button-focused-unfocused.png.04f69ad9bd54051c257b43160e9fa92c.png" data-fileid="126001" data-fileext="png" rel=""><img class="ipsImage ipsImage_thumbnailed" data-fileid="126001" data-unique="ku5tra944" alt="01_button-focused-unfocused.png" src="https://academy.hsoub.com/uploads/monthly_2023_05/01_button-focused-unfocused.png.04f69ad9bd54051c257b43160e9fa92c.png"> </a>
</p>

<p>
	<strong>ملاحظة</strong>: في متصفح Firefox يمكنك تفعيل خيار يسمى show tapping order أو ما شابه من ضمن حزمة خيارات سهولة الوصول accessibility لإظهار ترتيب العناصر عند الضغط على مفتاح Tab.
</p>

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

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

<ul>
	<li>
		لا يستخدِم متصفح Firefox لنظام التشغيل Mac مفتاح <code>Tab</code> افتراضيًا، لذلك يمكن تشغيله من خلال الانتقال إلى قائمة التفضيلات Preferences ثم خيارات متقدمة Advanced ثم عام General، ثم إلغاء تحديد الخيار "استخدم دائمًا مفاتيح المؤشر للتنقل بين الصفحات Always use the cursor keys to navigate within pages"، كما يجب بعد ذلك فتح تطبيق تفضيلاتك في نظام Mac ثم الانتقال إلى لوحة المفاتيح Keyboard ثم الاختصارات Shortcuts، ثم تحديد زر الاختيار "جميع عناصر التحكم All Controls".
	</li>
	<li>
		لا يسمح لك المتصفح Safari باستخدام مفتاح <code>Tab</code> للتنقل بين الروابط افتراضيًا، ولكن يمكن تفعيل ذلك من خلال فتح تفضيلات Safari، ثم الانتقال إلى الخيارات المتقدمة وتحديد مربع الاختيار "الضغط على مفتاح Tab لتمييز كل عنصر على صفحة الويب Press Tab to highlight each item on a webpage".
	</li>
</ul>

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

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

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

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_2143_12" 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="kwd">input</span><span class="pun">:</span><span class="pln">hover</span><span class="pun">,</span><span class="pln">
</span><span class="kwd">button</span><span class="pun">:</span><span class="pln">hover</span><span class="pun">,</span><span class="pln">
</span><span class="kwd">select</span><span class="pun">:</span><span class="pln">hover</span><span class="pun">,</span><span class="pln">
</span><span class="kwd">a</span><span class="pun">:</span><span class="pln">focus</span><span class="pun">,</span><span class="pln">
</span><span class="kwd">input</span><span class="pun">:</span><span class="pln">focus</span><span class="pun">,</span><span class="pln">
</span><span class="kwd">button</span><span class="pun">:</span><span class="pln">focus</span><span class="pun">,</span><span class="pln">
</span><span class="kwd">select</span><span class="pun">:</span><span class="pln">focus </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>
	<strong>ملاحظة</strong>: إذا قررت إزالة تنسيق التركيز الافتراضي باستخدام <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>، فتأكد من استبداله بشيء آخر يناسب تصميمك بصورة أفضل، لإنها أداة سهولة وصول قيّمة للغاية ولا يجب إزالتها.
</p>

<h4>
	بناء لوحة مفاتيح سهلة الوصول
</h4>

<p>
	لا يمكن في بعض الأحيان تجنب فقدان سهولة الوصول إلى لوحة المفاتيح، فلنفترض أنك حصلت على موقع لا تكون فيه الدلالات جيدةً جدًا مثل استخدام نظام CMS سيء ينشئ أزرارًا باستخدام عناصر <code>&lt;div&gt;</code>، أو أنك تستخدِم عنصر تحكم معقّد لا يحتوي على سهولة وصول مبنية مسبقًا للوصول إلى لوحة المفاتيح مثل العنصر <a href="https://wiki.hsoub.com/HTML/video" rel="external"><code>&lt;video&gt;</code></a>، ولكن يُعَدّ متصفح أوبرا Opera هو المتصفح الوحيد الذي يسمح لك بالانتقال بين عناصر تحكم المتصفح الافتراضية الخاصة بالعنصر <code>&lt;video&gt;</code> باستخدام مفتاح <code>Tab</code>، ولديك عدد قليل من الخيارات لعناصر التحكم تلك مثل:
</p>

<ol>
	<li>
		أنشئ عناصر تحكم مخصَّصة باستخدام عناصر الأزرار <code>&lt;button&gt;</code> -التي يمكننا الانتقال إليها افتراضيًا باستخدام مفتاح <code>Tab</code>- وباستخدام شيفرة جافاسكربت لتوصيل وظائفها.
	</li>
	<li>
		أنشئ اختصارات لوحة المفاتيح باستخدام جافاسكربت، بحيث يمكن تنشيط الوظيفة عند الضغط على مفاتيح معينة على لوحة المفاتيح.
	</li>
	<li>
		استخدِم بعض الأساليب لتزييف سلوك الأزرار، واطّلع على المثال <a href="https://mdn.github.io/learning-area/tools-testing/cross-browser-testing/accessibility/fake-div-buttons.html" rel="external nofollow">fake-div-buttons.html</a> وعلى <a href="https://github.com/mdn/learning-area/blob/main/tools-testing/cross-browser-testing/accessibility/fake-div-buttons.html" rel="external nofollow">شيفرته البرمجية</a>، إذ أعطينا في هذا المثال أزرارَ العنصر <code>&lt;div&gt;</code> المزيفة القدرةَ على التركيز -باستخدام مفتاح <code>Tab</code> مثلًا- من خلال إعطاء كل زر السمة <code>tabindex="0"‎</code>، مما يسمح لنا بالانتقال إلى الأزرار باستخدام مفتاح <code>Tab</code>، ولكن ليس لتنشيطها عبر مفتاح Enter أو Return، إذ يجب في هذه الحالة إضافة الجزء التالي من شيفرة جافاسكربت:
	</li>
</ol>

<pre class="ipsCode prettyprint lang-javascript prettyprinted" id="ips_uid_2143_14" style=""><span class="pln">document</span><span class="pun">.</span><span class="pln">onkeydown </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">function</span><span class="pun">(</span><span class="pln">e</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">if</span><span class="pun">(</span><span class="pln">e</span><span class="pun">.</span><span class="pln">keyCode </span><span class="pun">===</span><span class="pln"> </span><span class="lit">13</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln"> </span><span class="com">// ‫مفتاح Enter أو Return</span><span class="pln">
    document</span><span class="pun">.</span><span class="pln">activeElement</span><span class="pun">.</span><span class="pln">onclick</span><span class="pun">(</span><span class="pln">e</span><span class="pun">);</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">
</span><span class="pun">};</span></pre>

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

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

<h4>
	النصوص البديلة
</h4>

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

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

<h4>
	علاقات وسياق العنصر
</h4>

<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> مصمَّمة لتوفير السياق والعلاقات بين العناصر حيث لا توجد طريقة أخرى لذلك، والأمثلة الثلاثة الأكثر شيوعًا لذلك هي الروابط وتسميات أو عناوين Labels النماذج وجداول البيانات.
</p>

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

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

<p>
	يمكن كتابة جدول البيانات الأساسي باستخدام توصيف بسيط جدًا (اطلع على المثال <code>bad-table.html</code> <a href="https://mdn.github.io/learning-area/accessibility/html/bad-table.html" rel="external nofollow">مباشرةً</a> و<a href="https://github.com/mdn/learning-area/blob/main/accessibility/html/bad-table.html" rel="external nofollow">شيفرته البرمجية</a>)، ولكن توجد مشاكل في هذا المثال، إذ لا توجد طريقة لمستخدِم قارئ الشاشة لربط الصفوف أو الأعمدة معًا بوصفها مجموعات من البيانات، لذا يجب معرفة ما هي صفوف العناوين، وما إذا كانت عناوينًا للصفوف أو للأعمدة وما إلى ذلك، إذ لا يمكن تطبيق ذلك إلّا بطريقة مرئية لمثل هذا الجدول.
</p>

<p>
	إذا اطّلعت على المثال <code>punk-bands-complete.html</code> <a href="https://mdn.github.io/learning-area/css/styling-boxes/styling-tables/punk-bands-complete.html" rel="external nofollow">مباشرةً</a> أو اطّلعت على <a href="https://github.com/mdn/learning-area/blob/main/css/styling-boxes/styling-tables/punk-bands-complete.html" rel="external nofollow">شيفرته البرمجية</a>، فيمكنك رؤية بعض أدوات سهولة الوصول المساعدة مثل عناوين الجدول (العنصر <code>&lt;th&gt;</code> والسمات <code>scope</code>) والعنصر <code>&lt;caption&gt;</code>.
</p>

<h3>
	سهولة الوصول في شيفرة CSS
</h3>

<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> ميزات سهولة الوصول الأساسية بمقدار أقل بكثير من لغة HTML، ولكن لا تزال بإمكانها إحداث القدر نفسه من الضرر لسهولة الوصول إذا استخدِمت بطريقة غير صحيحة، وإليك بعض النصائح المتعلقة بسهولة الوصول المتضمنة في شيفرة CSS:
</p>

<ul>
	<li>
		استخدِم العناصر الدلالية الصحيحة لكتابة محتوًى مختلف في شيفرة HTML، فإذا أردت إنشاء تأثير مرئي مختلف، فاستخدم شيفرة CSS دون العبث بعنصر HTML للحصول على الشكل الذي تريده، فإذا أردت نصًا أكبر، فاستخدم الخاصية <code>font-size</code> وليس العنصر <code>&lt;h1&gt;</code>.
	</li>
	<li>
		تأكد من أنّ ترتيب المصدر منطقي بدون شيفرة CSS، إذ يمكنك دائمًا استخدام CSS لتنسيق الصفحة بالطريقة التي تريدها بعد ذلك.
	</li>
	<li>
		يجب عليك التأكد من أنّ العناصر التفاعلية مثل الأزرار والروابط لها حالات تركيز أو تمرير أو تنشيط مناسبة لإعطاء المستخدِم أدلة مرئية عن وظيفتها، فإذا أزلتَ الإعدادات الافتراضية لأسباب تتعلق بالتنسيق، فتأكد من تضمين بعض التنسيقات البديلة.
	</li>
</ul>

<h4>
	الألوان وتباينها
</h4>

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

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

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

<h4>
	إخفاء المحتوى
</h4>

<p>
	هناك العديد من الحالات التي يتطلب فيها التصميم المرئي عدم عرض كل المحتوى دفعةً واحدةً، فلدينا مثلًا ثلاث لوحات من المعلومات في <a href="https://mdn.github.io/learning-area/css/css-layout/practical-positioning-examples/info-box.html" rel="external nofollow">مثال مربع المعلومات المبوب</a> (اطّلع على <a href="https://github.com/mdn/learning-area/blob/main/css/css-layout/practical-positioning-examples/info-box.html" rel="external nofollow">شيفرته البرمجية</a>)، لكننا نضعها فوق بعضها البعض ونوفّر تبويبات يمكن النقر عليها لإظهار محتواها، ويمكن الوصول إليها من خلال لوحة المفاتيح أو يمكنك استخدام مفتاح <code>Tab</code> و Enter/Return لتحديدها.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2023_05/02_20191022144107.png.5971c8938bbfa297bbc29a289846d724.png" data-fileid="126000" data-fileext="png" rel=""><img class="ipsImage ipsImage_thumbnailed" data-fileid="126000" data-unique="o35ko9vnb" alt="02_20191022144107.png" src="https://academy.hsoub.com/uploads/monthly_2023_05/02_20191022144107.thumb.png.cf9e93f6ac4ea0a980915751a3d1e053.png"> </a>
</p>

<p>
	لا يهتم مستخدِمو قارئات الشاشة بهذا الشيء، فهم سعداء بالمحتوى طالما أنّ ترتيب المصدر منطقي ويمكنهم الوصول إليه، كما يُنظَر إلى الموضع المطلق Absolute Positioning -كما هو مستخدَم في مثالنا- على أنه أحد أفضل آليات إخفاء محتوى التأثيرات المرئية، لأنه لا يمنع قارئات الشاشة من الوصول إلى هذا المحتوى، ولا يجب من ناحية أخرى استخدام الخاصيتين <code>visibility:hidden</code> و <code>display:none</code> لأنهما تخفيان المحتوى عن قارئات الشاشة ما لم يكن هناك سبب وجيه لإخفاء هذا المحتوى عنها.
</p>

<h3>
	مشاكل سهولة الوصول المتعلقة بشيفرة جافاسكربت
</h3>

<p>
	تمتلك <a href="https://academy.hsoub.com/programming/javascript/%D9%86%D9%85%D8%B7-%D9%83%D8%AA%D8%A7%D8%A8%D8%A9-%D8%B4%D9%8A%D9%81%D8%B1%D8%A9-%D8%AC%D8%A7%D9%81%D8%A7%D8%B3%D9%83%D8%B1%D8%A8%D8%AA-r785/" rel="">شيفرة جافاسكربت</a> النوع نفسه من المشاكل التي تواجهها في شيفرة CSS فيما يتعلق بسهولة الوصول، إذ يمكن أن تكون شيفرة جافاسكربت كارثيةً بالنسبة لسهولة الوصول إذا استخدِمت بطريقة سيئة أو مفرطة، وقد أشرنا سابقًا إلى بعض مشاكل سهولة الوصول المتعلقة بشيفرة جافاسكربت خاصةً في شيفرة HTML الدلالية، إذ يجب دائمًا استخدام شيفرة HTML دلالية مناسبة لتنفيذ الوظائف أينما كانت متاحةً مثل استخدام الروابط والأزرار حسب الحاجة، كما لا تُستخدَم عناصر <code>&lt;div&gt;</code> مع شيفرة جافاسكربت لتزييف الوظائف إذا كان ذلك ممكنًا، فهي عرضة للخطأ وتحتاج عملًا أكثر من استخدام الوظائف المجانية التي توفرها شيفرة HTML.
</p>

<h4>
	الوظائف البسيطة
</h4>

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

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

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

<h4>
	الوظائف المعقدة
</h4>

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

<p>
	تمثِّل عناصر التحكم المعقدة غير الأصيلة في النموذج مشكلةً لأنها تتضمّن الكثير من عناصر <code>&lt;div&gt;</code> المتداخلة، ولا يعرف المتصفح ما يجب فعله بها افتراضيًا، فإذا أنشأت عناصر التحكم المعقدة بنفسك، فيجب التأكد من أنه يمكن الوصول إليها من خلال لوحة المفاتيح، وإذا استخدَمت إطار عمل خارجي، فراجع بعناية الخيارات المتاحة لمعرفة مدى إمكانية الوصول إليها قبل المتابعة، ويبدو إطار عمل <a href="https://wiki.hsoub.com/Bootstrap" rel="external">Bootstrap</a> على سبيل المثال جيدًا إلى حد ما لعملية سهولة الوصول بالرغم من بعض مشاكله التي تتعلق بتباين الألوان بصورة أساسية.
</p>

<p>
	يمكن أن يمثل المحتوى الديناميكي المُحدَّث بانتظام مشكلةً لأن مستخدِمي قارئات الشاشة يمكن أن يفوتهم ذلك خاصةً إذا جرى تحديثه بطريقة غير متوقعة، فإذا كان لديك تطبيق مؤلف من صفحة واحدة مع لوحة محتوى رئيسية يُحدَّث بانتظام باستخدام <a href="https://academy.hsoub.com/programming/javascript/%D8%A7%D9%84%D9%83%D8%A7%D8%A6%D9%86-xmlhttprequest-%D9%81%D9%8A-%D8%AC%D8%A7%D9%81%D8%A7%D8%B3%D9%83%D8%B1%D8%A8%D8%AA-r1299/" rel="">XMLHttpRequest</a> أو <a href="https://academy.hsoub.com/programming/javascript/%D8%A7%D8%B3%D8%AA%D8%B9%D9%85%D8%A7%D9%84%D8%A7%D8%AA-%D9%85%D8%AA%D9%82%D8%AF%D9%85%D8%A9-%D9%84%D9%84%D9%88%D8%A7%D8%AC%D9%87%D8%A9-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D9%8A%D8%A9-fetch-%D9%81%D9%8A-%D8%AC%D8%A7%D9%81%D8%A7%D8%B3%D9%83%D8%B1%D8%A8%D8%AA-r1297/" rel="">Fetch</a>، فيمكن أن يفوّت مستخدِمو قارئات الشاشة هذه التحديثات.
</p>

<h4>
	WAI-ARIA
</h4>

<p>
	إذا احتجتَ استخدام مثل هذه الوظائف المعقدة أو احتاجتها شيفرة HTML الدلالية القديمة، فعليك التفكير في استخدام مواصفات <a href="https://academy.hsoub.com/programming/html/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D9%85%D9%88%D8%A7%D8%B5%D9%81%D8%A7%D8%AA-aria-%D8%A5%D8%B9%D8%B7%D8%A7%D8%A1-%D8%B9%D9%86%D8%A7%D8%B5%D8%B1-html-%D8%AF%D9%84%D8%A7%D9%84%D8%A7%D8%AA-%D8%AE%D8%A7%D8%B5%D8%A9-%D9%84%D8%AA%D8%B3%D9%87%D9%8A%D9%84-%D8%A7%D9%84%D9%88%D8%B5%D9%88%D9%84-r1327/" rel="">WAI-ARIA</a> (تطبيقات الإنترنت الغنية سهلة الوصول Accessible Rich Internet Applications)، وهي مواصفات توفر دلالات Semantics بصورة سمات HTML جديدة لعناصر مثل عناصر التحكم المعقدة في النموذج ولوحات التحديث التي يمكن أن تفهمها معظم المتصفحات وقارئات الشاشة.
</p>

<p>
	يمكن التعامل مع عناصر النماذج المعقدة من خلال استخدام سمات ARIA مثل السمة <code>roles</code> لتحديد الدور الذي تلعبه العناصر المختلفة في عنصر واجهة المستخدِم (مثل هل هو تبويب أم لوحة تبويب؟)، والسمة <code>aria-disabled</code> التي تخبرنا فيما إذا كان عنصر التحكم معطلًا أم لا.
</p>

<p>
	يمكن التعامل مع مناطق المحتوى المحدّثة بانتظام من خلال استخدام السمة <code>aria-live</code> التي تحدد منطقة التحديث، وتشير قيمتها إلى مدى ضرورة أن يقرأ قارئ الشاشة هذا المحتوى، حيث يمكن أن تكون قيمتها إحدى القيم التالية:
</p>

<ul>
	<li>
		<code>off</code>: القيمة الافتراضية التي تمثّل أنه لا ينبغي الإعلان عن التحديثات.
	</li>
	<li>
		<code>polite</code>: يجب الإعلان عن التحديثات فقط إذا كان المستخدِم خاملًا.
	</li>
	<li>
		<code>assertive</code>: يجب الإعلان عن التحديثات للمستخدِم في أسرع وقت ممكن.
	</li>
	<li>
		<code>rude</code>: يجب الإعلان عن التحديثات مباشرةً حتى إذا تسبب ذلك في مقاطعة المستخدِم.
	</li>
</ul>

<p>
	إليك المثال التالي:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_2143_16" style=""><span class="tag">&lt;p&gt;&lt;span</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"LiveRegion1"</span><span class="pln"> </span><span class="atn">aria-live</span><span class="pun">=</span><span class="atv">"polite"</span><span class="pln"> </span><span class="atn">aria-atomic</span><span class="pun">=</span><span class="atv">"false"</span><span class="tag">&gt;&lt;/span&gt;&lt;/p&gt;</span></pre>

<p>
	يمكنك رؤية المثال العملي <a href="https://www.freedomscientific.com/SurfsUp/AriaLiveRegions.htm" rel="external nofollow">ARIA (Accessible Rich Internet Applications) Live Regions</a> في موقع Freedom Scientific، حيث يجب أن تحدَّث الفقرة المُحدَّدة محتواها كل 10 ثوانٍ، ويجب على قارئ الشاشة قراءة ذلك للمستخدِم، ويمثل المثال <a href="https://www.freedomscientific.com/SurfsUp/AriaLiveRegionsAtomic.htm" rel="external nofollow">ARIA Live Regions - Atomic</a> مثالًا آخر مفيدًا.
</p>

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

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

<p>
	ترجمة -وبتصرُّف- لقسم من المقال <a href="https://developer.mozilla.org/en-US/docs/Learn/Tools_and_testing/Cross_browser_testing/Accessibility" rel="external nofollow">Handling common accessibility problems</a>.
</p>

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

<ul>
	<li>
		المقال السابق: <a href="https://academy.hsoub.com/programming/javascript/%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-%D8%B4%D9%8A%D9%81%D8%B1%D8%A9-%D8%AC%D8%A7%D9%81%D8%A7%D8%B3%D9%83%D8%B1%D8%A8%D8%AA-r1972/" rel="">معالجة المشاكل الشائعة للتوافق مع المتصفحات في شيفرة جافاسكربت</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/html/%D8%B3%D9%87%D9%88%D9%84%D8%A9-%D9%88%D8%B5%D9%88%D9%84-%D8%AC%D9%85%D9%8A%D8%B9-%D8%A7%D9%84%D8%B2%D9%88%D8%A7%D8%B1-%D9%84%D9%85%D9%88%D8%A7%D9%82%D8%B9-%D9%88%D8%AA%D8%B7%D8%A8%D9%8A%D9%82%D8%A7%D8%AA-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-r1323/" rel="">سهولة وصول جميع الزوار لمواقع وتطبيقات الويب</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/css/%D8%B3%D9%87%D9%88%D9%84%D8%A9-%D8%A7%D9%84%D9%88%D8%B5%D9%88%D9%84-r706/" rel="">سهولة الوصول في CSS</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/html/%D8%B4%D9%85%D9%88%D9%84%D9%8A%D8%A9-%D8%A7%D9%84%D8%AA%D8%B5%D9%85%D9%8A%D9%85-%D8%B3%D9%87%D9%88%D9%84%D8%A9-%D9%88%D8%B5%D9%88%D9%84-%D8%AC%D9%85%D9%8A%D8%B9-%D8%A7%D9%84%D9%85%D8%B3%D8%AA%D8%AE%D8%AF%D9%85%D9%8A%D9%86-%D9%84%D8%B5%D9%81%D8%AD%D8%A7%D8%AA-%D9%85%D9%88%D9%82%D8%B9-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-r1640/" rel="">شمولية التصميم: سهولة وصول جميع المستخدمين لصفحات موقع الويب</a>
	</li>
</ul>
]]></description><guid isPermaLink="false">1983</guid><pubDate>Tue, 16 May 2023 13:00:00 +0000</pubDate></item><item><title>&#x645;&#x639;&#x627;&#x644;&#x62C;&#x629; &#x627;&#x644;&#x645;&#x634;&#x627;&#x643;&#x644; &#x627;&#x644;&#x634;&#x627;&#x626;&#x639;&#x629; &#x644;&#x644;&#x62A;&#x648;&#x627;&#x641;&#x642; &#x645;&#x639; &#x627;&#x644;&#x645;&#x62A;&#x635;&#x641;&#x62D;&#x627;&#x62A; &#x641;&#x64A; HTML &#x648; CSS</title><link>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/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2023_04/--------HTML-CSS.png.11bacaab96e4ff586ebcea79f012621c.png" /></p>
<p>
	سنطّلع في هذا المقال على مشاكل التوافق مع المتصفحات Cross-browser الشائعة التي ستواجهها في شيفرة HTML و CSS، بالإضافة إلى الأدوات التي يمكن استخدامها لمنع حدوثها أو إصلاحها، إذ يتضمن ذلك كشف الأخطاء المحتملة في الشيفرة البرمجية والتعامل مع بادئات CSS واستخدام أدوات تطوير المتصفح لتعقّب المشاكل واستخدام تعويض نقص دعم المتصفحات Polyfill لإضافة الدعم إليها، ومعالجة مشاكل التصميم المتجاوب مع الشاشات وغير ذلك.
</p>

<ul>
	<li>
		<strong>المتطلبات الأساسية</strong>: يجب أن تتعلم أساسيات لغات <a href="https://wiki.hsoub.com/HTML" rel="external">HTML</a> و <a href="https://wiki.hsoub.com/CSS" rel="external">CSS</a> و<a href="https://wiki.hsoub.com/JavaScript" rel="external">جافاسكربت JavaScript</a>، وأن تكون لديك فكرة عن <a href="https://academy.hsoub.com/programming/general/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D8%A7%D8%AE%D8%AA%D8%A8%D8%A7%D8%B1-%D9%85%D8%B4%D8%A7%D8%B1%D9%8A%D8%B9-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-%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-r1953/" rel="">المبادئ عالية المستوى لاختبار التوافق مع المتصفحات</a>.
	</li>
	<li>
		<strong>الهدف</strong>: أن تكون قادرًا على تشخيص مشاكل التوافق مع المتصفحات المختلفة الشائعة في شيفرة HTML و CSS واستخدام الأدوات والتقنيات المناسبة لإصلاحها.
	</li>
</ul>

<h2>
	مشاكل لغتي HTML و CSS
</h2>

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

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

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

<p>
	لننتقل الآن إلى كيفية تقليل الأخطاء على المتصفحات التي تنتج عن شيفرة HTML أو CSS.
</p>

<h2>
	إصلاح المشاكل العامة
</h2>

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

<p>
	قدّمنا في مقالَي <a href="https://academy.hsoub.com/programming/html/%D8%AA%D9%86%D9%82%D9%8A%D8%AD-%D8%B4%D9%8A%D9%81%D8%B1%D8%A9-html-r1812/" rel="">تنقيح أخطاء شيفرة HTML</a> وتنقيح أخطاء شيفرة CSS بعض الإرشادات الأساسية حول تنقيح أخطاء شيفرة HTML و CSS، فإذا لم تكن على دراية بالأساسيات، فيجب عليك بالتأكيد مراجعة هذين المقالين قبل المتابعة، إذ يتعلق الأمر بالتحقق مما إذا كانت شيفرة HTML و CSS منسقةً جيدًا ولا تحتوي على أيّ أخطاء صياغية.
</p>

<p>
	<strong>ملاحظة</strong>: تظهر إحدى المشاكل الشائعة في لغتَي CSS و HTML عندما تبدأ قواعد CSS المختلفة في التعارض مع بعضها البعض، ويمكن أن يشكّل ذلك مشكلةً خاصةً عند استخدام شيفرة خارجية مثل استخدام <a href="https://academy.hsoub.com/programming/general/%D8%A5%D8%B7%D8%A7%D8%B1-%D8%B9%D9%85%D9%84-framework/" rel="">إطار عمل</a> خاص بلغة CSS ثم تجد أن أحد أسماء الأصناف Class التي يستخدِمها هذا الإطار يتعارض مع اسم استخدَمته مسبقًا لغرض مختلف، أو يمكن أن تجد أن شيفرة HTML التي تنشئها واجهة برمجة تطبيقات جهة خارجية -مثل إنشاء إعلانات- تتضمن اسم صنف أو معرّف ID استخدمته مسبقًا لغرض مختلف، ويمكنك ضمان عدم حدوث ذلك من خلال البحث في الأدوات التي تستخدِمها أولًا وتصميم شيفرتك على أساسها، ويمكنك استخدام فضاء أسماء Namespace في CSS إذا كان لديك عنصر واجهة مستخدم Widget مثلًا، ولكن تأكد من أنه يحتوي على صنف مميز، ثم استخدم المحدّدات Selectors التي تحدد العناصر ضمن عنصر واجهة المستخدم باستخدام هذا الصنف، وبالتالي تقل احتمالية التعارضات مثل <code>‎.audio-player ul a</code>.
</p>

<h3>
	التحقق من صحة شيفرة HTML و CSS
</h3>

<p>
	يتضمن التحققُ من صحة شيفرة HTML التأكدَ من أن جميع الوسوم Tags مغلقة ومتداخلة بطريقة صحيحة، وأنك تستخدِم DOCTYPE والوسوم لغرضها الصحيح، كما يجب التحقق من صحة الشيفرة البرمجية بانتظام، وإحدى الخدمات التي يمكنها التحقق من صحة الشيفرة البرمجية هي خدمة <a href="https://validator.w3.org/" rel="external nofollow">Markup Validation Service</a> من W3C التي تسمح لك بالإشارة إلى شيفرتك البرمجية ثم تعيد قائمةً بالأخطاء:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="123097" href="https://academy.hsoub.com/uploads/monthly_2023_04/01_validator.png.c634207dbda82ae4b459c2beb58f7d0d.png" rel=""><img alt="01_validator.png" class="ipsImage ipsImage_thumbnailed" data-fileid="123097" data-unique="41dq4k51q" src="https://academy.hsoub.com/uploads/monthly_2023_04/01_validator.thumb.png.010c2ad8e551db76140eab913d335630.png"> </a>
</p>

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

<h3>
	منقحات الصياغة Linters
</h3>

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

<p>
	هناك العديد من تطبيقات منقحات الصياغة على الإنترنت وأفضلها تطبيق <a href="https://www.10bestdesign.com/dirtymarkup/" rel="external nofollow">Dirty Markup</a> لشيفرات HTML و CSS وجافاسكربت وتطبيق <a href="http://csslint.net/" rel="external nofollow">CSS Lint</a> لشيفرة CSS فقط، إذ تسمح لك هذه التطبيقات بلصق شيفرتك في نافذة ما ثم ستضع علامة x على الأخطاء، ويمكن بعد ذلك تحريك مؤشر الفأرة فوقها للحصول على رسالة خطأ تخبرك ما هي المشكلة، ويسمح لك تطبيق Dirty Markup بإجراء إصلاحات على شيفرة HTML باستخدام زر التنظيف "Clean".
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="123096" href="https://academy.hsoub.com/uploads/monthly_2023_04/02_dirty-markup.png.332f2079b43b0372cc5dbbdd9636835b.png" rel=""><img alt="02_dirty-markup.png" class="ipsImage ipsImage_thumbnailed" data-fileid="123096" data-unique="whw3r0tyo" src="https://academy.hsoub.com/uploads/monthly_2023_04/02_dirty-markup.thumb.png.188ecd65b64e97720b6d3e8ed8fdbb2d.png"> </a>
</p>

<p>
	ولكن لا يُعَدّ ذلك ملائمًا، إذ ستضطر إلى نسخ شيفرتك ولصقها في صفحة ويب للتحقق من صحتها عدة مرات، إذ تريد منقّح صياغة يتناسب مع سير عملك بأقل قدر من المتاعب، كما تحتوي العديد من محرّرات الشيفرات البرمجية على إضافات تنقيح الصياغة، إذ يحتوي المحرّر <a href="https://atom.io/" rel="external nofollow">Atom</a> من GitHub مثلًا على نظام بيئي غني بالإضافات مع العديد من خيارات تنقيح الأخطاء، وإليك مثال عن كيفية عمل هذه الإضافات Plugins:
</p>

<ol>
	<li>
		ثبّت المحرّر Atom إذا لم يكن لديك إصدار حديث مثبَّت مسبقًا.
	</li>
	<li>
		انتقل إلى مربع حوار تفضيلات Atom من خلال اختيار قائمة Atom ثم التفضيلات Preferences على نظام Mac أو من قائمة ملف File ثم Preferences في نظامَي Windows و Linux، ثم اختر خيار التثبيت Install في القائمة اليسرى.
	</li>
	<li>
		اكتب الكلمة "lint" في حقل البحث عن الحزم Search Packages واضغط على الزر Enter أو Return للبحث عن الحِزم المتعلقة بتنقيح الصياغة.
	</li>
	<li>
		يجب أن ترى حزمة تسمى "lint" في أعلى القائمة، لذا ثبّتها باستخدام زر التثبيت Install، إذ تعتمد منقّحات الصياغة الأخرى عليها في العمل، ثم ثبّت الإضافة linter-csslint لتنقيح صياغة شيفرة CSS والإضافة linter-tidy لتنقيح صياغة شيفرة HTML.
	</li>
	<li>
		حاول تحميل ملف HTML وملف CSS بعد انتهاء تثبيت الحزم، حيث سترى المشاكل مميزةً باللون الأخضر للتحذيرات وسترى دوائر حمراء للأخطاء بجوار أرقام الأسطر، ولوحةً منفصلةً في الأسفل توفِّر أرقام الأسطر ورسائل الخطأ وقيمًا مقترحة أو إصلاحات أخرى في بعض الأحيان.
	</li>
</ol>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="123095" href="https://academy.hsoub.com/uploads/monthly_2023_04/03_atom-htmltidy.png.50936d0807be675234bf9cc62393049a.png" rel=""><img alt="03_atom-htmltidy.png" class="ipsImage ipsImage_thumbnailed" data-fileid="123095" data-unique="a953hf4se" src="https://academy.hsoub.com/uploads/monthly_2023_04/03_atom-htmltidy.png.50936d0807be675234bf9cc62393049a.png"> </a>
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="123094" href="https://academy.hsoub.com/uploads/monthly_2023_04/04_atom-csslint.png.9a3eb2078159f4daa7b462f36e977011.png" rel=""><img alt="04_atom-csslint.png" class="ipsImage ipsImage_thumbnailed" data-fileid="123094" data-unique="i2b1twtqb" src="https://academy.hsoub.com/uploads/monthly_2023_04/04_atom-csslint.png.9a3eb2078159f4daa7b462f36e977011.png"> </a>
</p>

<p>
	يتوفر لدى المحررات المشهورة الأخرى حزم تنقيح صياغة مماثلة مثل:
</p>

<ul>
	<li>
		<a href="http://www.sublimelinter.com/en/stable/" rel="external nofollow">SublimeLinter</a> للمحرّر Sublime Text.
	</li>
	<li>
		<a href="https://sourceforge.net/projects/notepad-linter/" rel="external nofollow">Notepad++ Linter</a>.
	</li>
	<li>
		<a href="https://marketplace.visualstudio.com/search?target=vscode&amp;category=Linters&amp;sortBy=Installs" rel="external nofollow">VSCode linters</a>.
	</li>
</ul>

<h3>
	أدوات المطور في المتصفحات
</h3>

<p>
	تتميز أدوات المطور المُضمَّنة في معظم المتصفحات بأدوات مفيدة لتعقب الأخطاء خاصة في شيفرة CSS.
</p>

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

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

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="123093" href="https://academy.hsoub.com/uploads/monthly_2023_04/05_css-message-devtools.png.35d59da188f85b22cdfbf4e8c9a08f9d.png" rel=""><img alt="05_css-message-devtools.png" class="ipsImage ipsImage_thumbnailed" data-fileid="123093" data-unique="xuenmrtpl" src="https://academy.hsoub.com/uploads/monthly_2023_04/05_css-message-devtools.png.35d59da188f85b22cdfbf4e8c9a08f9d.png"> </a>
</p>

<p>
	تمتلك أدوات التطوير في المتصفحات الأخرى ميزات مماثلة أيضًا.
</p>

<h2>
	المشاكل الشائعة للتوافق مع المتصفحات
</h2>

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

<h3>
	لا تدعم المتصفحات القديمة الميزات الحديثة
</h3>

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

<p>
	يُفضَّل البحث عن المتصفحات المدعومة والتقنيات ذات الصلة المفيدة بعد تحديد قائمة بالتقنيات غير المدعومة بصورة عامة التي ستستخدمها.
</p>

<h4>
	سلوك HTML الاحتياطي
</h4>

<p>
	يمكن حل بعض المشاكل بمجرد الاستفادة من الطريقة التي تعمل بها لغة HTML و CSS.
</p>

<p>
	تُعامَل عناصر HTML التي لا يتعرّف عليها المتصفح بوصفها عناصر مضمنةً مجهولة الاسم، أي هي عناصر مضمنة فعالة بدون قيمة دلالية مثل عناصر <code>&lt;span&gt;</code>، ولا يزال بإمكانك الإشارة إليها باستخدام أسماءها وتنسيقها باستخدام لغة CSS، فما عليك سوى التأكد من أنها تتصرف كما تريدها أن تتصرف مثل إعداد الخاصية <code>display‎</code> إلى شيء آخر غير <code>inline</code> إن كان هنالك حاجة.
</p>

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

<p>
	إليك المثال التالي:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_6386_8" style=""><span class="tag">&lt;video</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"video"</span><span class="pln"> </span><span class="atn">controls</span><span class="pln"> </span><span class="atn">preload</span><span class="pun">=</span><span class="atv">"metadata"</span><span class="pln"> </span><span class="atn">poster</span><span class="pun">=</span><span class="atv">"img/poster.jpg"</span><span class="tag">&gt;</span><span class="pln">
  </span><span class="tag">&lt;source</span><span class="pln"> </span><span class="atn">src</span><span class="pun">=</span><span class="atv">"video/tears-of-steel-battle-clip-medium.mp4"</span><span class="pln"> </span><span class="atn">type</span><span class="pun">=</span><span class="atv">"video/mp4"</span><span class="tag">&gt;</span><span class="pln">
  </span><span class="tag">&lt;source</span><span class="pln"> </span><span class="atn">src</span><span class="pun">=</span><span class="atv">"video/tears-of-steel-battle-clip-medium.webm"</span><span class="pln"> </span><span class="atn">type</span><span class="pun">=</span><span class="atv">"video/webm"</span><span class="tag">&gt;</span><span class="pln">
  </span><span class="com">&lt;!-- Offer download --&gt;</span><span class="pln">
  </span><span class="tag">&lt;p&gt;</span><span class="pln">Your browser does not support HTML5 video; here is a link to
  </span><span class="tag">&lt;a</span><span class="pln"> </span><span class="atn">href</span><span class="pun">=</span><span class="atv">"video/tears-of-steel-battle-clip-medium.mp4"</span><span class="tag">&gt;</span><span class="pln">view the video</span><span class="tag">&lt;/a&gt;</span><span class="pln"> directly.</span><span class="tag">&lt;/p&gt;</span><span class="pln">
</span><span class="tag">&lt;/video&gt;</span></pre>

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

<p>
	تعرض عناصر نموذج HTML صفات احتياطية، إذ أدخلت لغة HTML5 أنواعًا خاصة من عناصر <code>&lt;input&gt;</code> لإدخال معلومات محددة في النماذج مثل الأوقات والتواريخ والألوان والأعداد وما إلى ذلك أو يستعمل النوع النصي <code>type="text"‎</code> إن لم يدعم المتصفح نوعًا حديثًا يقدم ميزة جديدة، وهي مفيدة جدًا لا سيما على منصات الهاتف المحمول، إذ توفر طريقةً لإدخال البيانات التي تُعَدّ مهمةً جدًا لتجربة المستخدِم، كما توفر المنصات الداعمة أدوات واجهة مستخدِم خاصةً عند استخدام هذه الأنواع من حقول الإدخال مثل أداة التقويم لإدخال التواريخ.
</p>

<p>
	يوضِّح المثال التالي حقول إدخال التاريخ والوقت:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_6386_10" style=""><span class="tag">&lt;form&gt;</span><span class="pln">
  </span><span class="tag">&lt;div&gt;</span><span class="pln">
    </span><span class="tag">&lt;label</span><span class="pln"> </span><span class="atn">for</span><span class="pun">=</span><span class="atv">"date"</span><span class="tag">&gt;</span><span class="pln">Enter a date:</span><span class="tag">&lt;/label&gt;</span><span class="pln">
    </span><span class="tag">&lt;input</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"date"</span><span class="pln"> </span><span class="atn">type</span><span class="pun">=</span><span class="atv">"date"</span><span class="tag">&gt;</span><span class="pln">
  </span><span class="tag">&lt;/div&gt;</span><span class="pln">
  </span><span class="tag">&lt;div&gt;</span><span class="pln">
    </span><span class="tag">&lt;label</span><span class="pln"> </span><span class="atn">for</span><span class="pun">=</span><span class="atv">"time"</span><span class="tag">&gt;</span><span class="pln">Enter a time:</span><span class="tag">&lt;/label&gt;</span><span class="pln">
    </span><span class="tag">&lt;input</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"time"</span><span class="pln"> </span><span class="atn">type</span><span class="pun">=</span><span class="atv">"time"</span><span class="tag">&gt;</span><span class="pln">
  </span><span class="tag">&lt;/div&gt;</span><span class="pln">
</span><span class="tag">&lt;/form&gt;</span></pre>

<p>
	يكون خرج الشيفرة السابقة كما يلي:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="123092" href="https://academy.hsoub.com/uploads/monthly_2023_04/06_OutputOfTheCode.png.0c1f0d3ce1682e0a007c3cc1ca3f1a18.png" rel=""><img alt="06_OutputOfTheCode.png" class="ipsImage ipsImage_thumbnailed" data-fileid="123092" data-unique="ntmts4fow" src="https://academy.hsoub.com/uploads/monthly_2023_04/06_OutputOfTheCode.png.0c1f0d3ce1682e0a007c3cc1ca3f1a18.png"> </a>
</p>

<p>
	<strong>ملاحظة</strong>: يمكنك مشاهدة هذا الخرج قيد التشغيل مباشرةً على <a href="https://mdn.github.io/learning-area/tools-testing/cross-browser-testing/html-css/forms-test.html" rel="external nofollow">forms-test.html</a>، كما يمكنك الاطلاع على <a href="https://github.com/mdn/learning-area/blob/main/tools-testing/cross-browser-testing/html-css/forms-test.html" rel="external nofollow">شيفرة هذا المثال</a> على GitHub.
</p>

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

<h4>
	سلوك CSS الاحتياطي
</h4>

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

<p>
	لنلقِ نظرةً على المثال التالي الذي يحوي مربعًا بسيطًا مُنسَّقًا باستخدام CSS المختلفة:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="123091" href="https://academy.hsoub.com/uploads/monthly_2023_04/07_blingy-button.png.a91b04eaacd70f72d91963e9394ebcb8.png" rel=""><img alt="07_blingy-button.png" class="ipsImage ipsImage_thumbnailed" data-fileid="123091" data-unique="n8w24oj7d" src="https://academy.hsoub.com/uploads/monthly_2023_04/07_blingy-button.png.a91b04eaacd70f72d91963e9394ebcb8.png"> </a>
</p>

<p>
	<strong>ملاحظة</strong>: يمكنك مشاهدة هذا المثال قيد التشغيل مباشرةً على <a href="https://mdn.github.io/learning-area/tools-testing/cross-browser-testing/html-css/button-with-fallback.html" rel="external nofollow">button-with-fallback.html</a>.
</p>

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

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_6386_12" style=""><span class="pln">button </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">#ff0000</span><span class="pun">;</span><span class="pln">
  </span><span class="kwd">background-color</span><span class="pun">:</span><span class="pln"> rgba</span><span class="pun">(</span><span class="lit">255</span><span class="pun">,</span><span class="lit">0</span><span class="pun">,</span><span class="lit">0</span><span class="pun">,</span><span class="lit">1</span><span class="pun">);</span><span class="pln">
  </span><span class="kwd">box-shadow</span><span class="pun">:</span><span class="pln"> inset </span><span class="lit">1px</span><span class="pln"> </span><span class="lit">1px</span><span class="pln"> </span><span class="lit">3px</span><span class="pln"> rgba</span><span class="pun">(</span><span class="lit">255</span><span class="pun">,</span><span class="lit">255</span><span class="pun">,</span><span class="lit">255</span><span class="pun">,</span><span class="lit">0.4</span><span class="pun">),</span><span class="pln">
              inset </span><span class="pun">-</span><span class="lit">1px</span><span class="pln"> </span><span class="pun">-</span><span class="lit">1px</span><span class="pln"> </span><span class="lit">3px</span><span class="pln"> rgba</span><span class="pun">(</span><span class="lit">0</span><span class="pun">,</span><span class="lit">0</span><span class="pun">,</span><span class="lit">0</span><span class="pun">,</span><span class="lit">0.4</span><span class="pun">);</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

</span><span class="kwd">button</span><span class="pun">:</span><span class="pln">hover </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">background-color</span><span class="pun">:</span><span class="pln"> rgba</span><span class="pun">(</span><span class="lit">255</span><span class="pun">,</span><span class="lit">0</span><span class="pun">,</span><span class="lit">0</span><span class="pun">,</span><span class="lit">0.5</span><span class="pun">);</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

</span><span class="kwd">button</span><span class="pun">:</span><span class="pln">active </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">box-shadow</span><span class="pun">:</span><span class="pln"> inset </span><span class="lit">1px</span><span class="pln"> </span><span class="lit">1px</span><span class="pln"> </span><span class="lit">3px</span><span class="pln"> rgba</span><span class="pun">(</span><span class="lit">0</span><span class="pun">,</span><span class="lit">0</span><span class="pun">,</span><span class="lit">0</span><span class="pun">,</span><span class="lit">0.4</span><span class="pun">),</span><span class="pln">
              inset </span><span class="pun">-</span><span class="lit">1px</span><span class="pln"> </span><span class="pun">-</span><span class="lit">1px</span><span class="pln"> </span><span class="lit">3px</span><span class="pln"> rgba</span><span class="pun">(</span><span class="lit">255</span><span class="pun">,</span><span class="lit">255</span><span class="pun">,</span><span class="lit">255</span><span class="pun">,</span><span class="lit">0.4</span><span class="pun">);</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	استخدمنا هنا الخاصية <code>background-color</code> من النمط RGBA التي تغير العتامة Opacity عند التمرير على الزر لمنح المستخدم تلميحًا إلى أنّ الزر تفاعلي، وبعض الظل شبه الشفاف الداخلي <code>box-shadow</code> لإعطاء الزر ملمسًا وعمقًا.
</p>

<p>
	تكمن المشكلة في أن ألوان RGBA وخاصية الظلال <code>box-shadow</code> لا تعمل في إصدارات IE الأقدم من الإصدار 9، إذ لن تظهر الخلفية على الإطلاق في الإصدارات القديمة، لذا سيكون النص غير قابل للقراءة وسيئًا جدًا.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="123090" href="https://academy.hsoub.com/uploads/monthly_2023_04/08_unreadable-button.png.149b95151aaa37f154afc968ab1aba52.png" rel=""><img alt="08_unreadable-button.png" class="ipsImage ipsImage_thumbnailed" data-fileid="123090" data-unique="6y71d189k" src="https://academy.hsoub.com/uploads/monthly_2023_04/08_unreadable-button.png.149b95151aaa37f154afc968ab1aba52.png"> </a>
</p>

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

<p>
	<strong>ملاحظة</strong>: ينطبق الأمر نفسه على ميزات CSS الأخرى مثل استعلامات الوسائط Media Queries وكتل <code>‎@font-face</code> و <code>‎@supports</code>، فإذا لم تكن مدعومةً، فسيتجاهلها المتصفح فقط.
</p>

<h4>
	دعم المحددات Selector
</h4>

<p>
	لن تُطبَّق ميزات CSS على الإطلاق إذا لم تستخدِم <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> الصحيحة لتحديد العنصر الذي تريد تنسيقه، فإذا كتبتَ محددًا في قائمة محددات مفصولة بفاصلة بصورة غير صحيحة، فقد لا يُحدد أو يطابق أي عنصر، وإذا كان المُحدد غير صالح، فسيجري تجاهل كل القائمة مع كتلة التنسيقات طبعًا، لذلك أضف لاحقة الصنف الزائف <code>‎:-moz-‎</code> فقط في قائمة محددات متسامحة <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/Selector_list#forgiving_selector_list" rel="external nofollow">forgiving selector list</a> مثل <code>‎:where(::-moz-thumb)‎</code> واحذر أن تضيفها أو تستعملها في قائمة محددات ليست ضمن <code>‎:is()‎</code> أو <code>‎:where()‎</code> التي تتسامح مع محددات غير صالحة أو صحيحة لأن كل المتصفحات سوى متصفح Firefox سيراها غير صالحة وبالتالي يتجاهل كل القائمة، ولاحظ أن كلا من <code>‎:is()‎</code> أو <code>‎:where()‎</code> يمكن تمريرهما ضمن قائمة محددات أخرى من ضمنها <code>‎:has()‎</code> و <code>‎:not()‎</code>.
</p>

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

<p>
	يمكنك الحصول على هذا النوع من الخرج أسفلَ أداة فحص DOM مثلًا في أدوات تطوير فايرفوكس Firefox:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="123089" href="https://academy.hsoub.com/uploads/monthly_2023_04/09_dom-breadcrumb-trail.png.cd239a0edd79848cfd157850aef77195.png" rel=""><img alt="09_dom-breadcrumb-trail.png" class="ipsImage ipsImage_thumbnailed" data-fileid="123089" data-unique="d4vz6ptx7" src="https://academy.hsoub.com/uploads/monthly_2023_04/09_dom-breadcrumb-trail.png.cd239a0edd79848cfd157850aef77195.png"> </a>
</p>

<p>
	إذا أردت استخدام المحدد التالي مثلًا، فستتمكن من رؤية أنه لن يحدد العنصر <code>input</code> كما تريد:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_6386_14" style=""><span class="pln">form </span><span class="pun">&gt;</span><span class="pln"> </span><span class="pun">#</span><span class="pln">date</span></pre>

<p>
	لا يُعَدّ عنصر الإدخال <code>date</code> في النموذج ابنًا مباشرًا للعنصر <code>&lt;form&gt;</code>، لذا يُفضَّل استخدام محدد حفيد Descendant Selector عام بدلًا من محدد ابن Child Selector.
</p>

<h4>
	التعامل مع بادئات CSS
</h4>

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

<ul>
	<li>
		يستخدِم Mozilla البادئة <code>-moz-</code>.
	</li>
	<li>
		تستخدِم المتصفحات Chrome و Opera و Safari و Edge البادئة <code>-webkit-</code>.
	</li>
	<li>
		يستخدِم Microsoft البادئة <code>-ms-</code>.
	</li>
	<li>
		تستخدِم الإصدارات الأصلية من المتصفح Opera البادئة <code>o-</code>.
	</li>
</ul>

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

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

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_6386_16" style=""><span class="pun">.</span><span class="pln">masked </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">-webkit-mask-image</span><span class="pun">:</span><span class="pln"> </span><span class="kwd">url</span><span class="pun">(</span><span class="str">MDN.svg</span><span class="pun">);</span><span class="pln">
  </span><span class="kwd">mask-image</span><span class="pun">:</span><span class="pln"> </span><span class="kwd">url</span><span class="pun">(</span><span class="str">MDN.svg</span><span class="pun">);</span><span class="pln">
  </span><span class="kwd">-webkit-mask-size</span><span class="pun">:</span><span class="pln"> </span><span class="lit">50%</span><span class="pun">;</span><span class="pln">
  </span><span class="kwd">mask-size</span><span class="pun">:</span><span class="pln"> </span><span class="lit">50%</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	جرب المثال البسيط التالي:
</p>

<ol>
	<li>
		افتح موقع google.com أو أيّ موقع آخر يحتوي على عنوان بارز أو أيّ عنصر كتلي آخر Block-level Element.
	</li>
	<li>
		انقر بزر الفأرة الأيمن أو اضغط على مفتاح Cmd مع الضغط على العنصر، ثم اختر فحص Inspect أو فحص العنصر Inspect element أو أيًا كان الخيار الموجود في متصفحك، إذ يجب أن يؤدي ذلك إلى فتح <a href="https://academy.hsoub.com/programming/javascript/%D9%83%D9%8A%D9%81-%D8%AA%D8%B3%D8%AA%D8%AE%D8%AF%D9%85-%D8%A3%D8%AF%D9%88%D8%A7%D8%AA-%D8%A7%D9%84%D9%85%D8%B7%D9%88%D9%90%D9%91%D8%B1-%D9%81%D9%8A-%D8%A7%D9%84%D9%85%D8%AA%D8%B5%D9%81%D8%AD%D8%A7%D8%AA-%D8%A7%D9%84%D8%AD%D8%AF%D9%8A%D8%AB%D8%A9-r541/" rel="">أدوات التطوير</a> في متصفحك مع تحديد العنصر في أداة فحص نموذج DOM.
	</li>
	<li>
		ابحث عن ميزة يمكنك استخدامها لتحديد هذا العنصر، فقد كان لشعار جوجل الرئيسي مثلًا المعرّف <code>hplogo</code> في وقت كتابة هذا المقال.
	</li>
	<li>
		خزّن مرجعًا لهذا العنصر في متغير كما يلي:
	</li>
</ol>

<pre class="ipsCode prettyprint lang-javascript prettyprinted" id="ips_uid_6386_18" style=""><span class="kwd">const</span><span class="pln"> test </span><span class="pun">=</span><span class="pln"> document</span><span class="pun">.</span><span class="pln">getElementById</span><span class="pun">(</span><span class="str">"hplogo"</span><span class="pun">);</span></pre>

<ol start="5">
	<li>
		حاول الآن ضبط قيمة جديدة لخاصية CSS التي تهتم بها في هذا العنصر، إذ يمكنك تطبيق ذلك باستخدام الخاصية <code>style</code> الخاصة بالعنصر، أي اكتب ما يلي في طرفية جافاسكربت مثلًا:
	</li>
</ol>

<pre class="ipsCode prettyprint lang-javascript prettyprinted" id="ips_uid_6386_20" style=""><span class="pln">test</span><span class="pun">.</span><span class="pln">style</span><span class="pun">.</span><span class="pln">transform </span><span class="pun">=</span><span class="pln"> </span><span class="str">'rotate(90deg)'</span></pre>

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

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

<h4>
	مشاكل التصميم المتجاوب مع الشاشات Responsive Design
</h4>

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

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

<h2>
	البحث عن المساعدة
</h2>

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

<p>
	يمكنك طرح مشكلتك في <a href="https://academy.hsoub.com/questions/c3-programming/" rel="">قسم الأسئلة والأجوبة</a> من أكاديمية حسوب للحصول على حل لمشكلتك التي تواجهها، إذ يُحتمَل أنّ المطورين الآخرين قد واجهوا المشاكل نفسها التي تواجهها أنت الآن، أو يمكنك مساعدتهم، كما يمكنك الانتقال إلى <a href="https://io.hsoub.com/webdev" rel="external">مجتمع تطوير الويب في حسوب IO</a>، وهو مجتمع خاص بمناقشة وطرح المواضيع والقضايا العامة المتعلقة بتطوير الويب ولغاتها المختلفة.
</p>

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

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

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

<p>
	ترجمة -وبتصرُّف- للمقال <a href="https://developer.mozilla.org/en-US/docs/Learn/Tools_and_testing/Cross_browser_testing/HTML_and_CSS" rel="external nofollow">Handling common HTML and CSS problems</a>.
</p>

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

<ul>
	<li>
		المقال السابق: <a href="https://academy.hsoub.com/programming/general/%D8%A7%D8%B3%D8%AA%D8%B1%D8%A7%D8%AA%D9%8A%D8%AC%D9%8A%D8%A7%D8%AA-%D8%A7%D8%AE%D8%AA%D8%A8%D8%A7%D8%B1%D8%A7%D8%AA-%D9%85%D8%B4%D8%A7%D8%B1%D9%8A%D8%B9-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-%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-r1954/" rel="">استراتيجيات اختبارات مشاريع الويب للتوافق مع المتصفحات</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/general/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D8%A7%D8%AE%D8%AA%D8%A8%D8%A7%D8%B1-%D9%85%D8%B4%D8%A7%D8%B1%D9%8A%D8%B9-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-%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-r1953/" rel="">مدخل إلى اختبار مشاريع الويب للتوافق مع المتصفحات</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/workflow/%D8%A7%D9%84%D8%A3%D8%AF%D9%88%D8%A7%D8%AA-%D8%A7%D9%84%D9%85%D8%B3%D8%AA%D8%AE%D8%AF%D9%85%D8%A9-%D9%81%D9%8A-%D8%A8%D9%86%D8%A7%D8%A1-%D9%85%D9%88%D8%A7%D9%82%D8%B9-%D9%88%D9%8A%D8%A8-r1436/" rel="">الأدوات المستخدمة في بناء مواقع ويب</a>
	</li>
</ul>
]]></description><guid isPermaLink="false">1955</guid><pubDate>Sat, 08 Apr 2023 15:56:00 +0000</pubDate></item><item><title>&#x643;&#x64A;&#x641;&#x64A;&#x629; &#x62A;&#x646;&#x633;&#x64A;&#x642; &#x627;&#x644;&#x645;&#x648;&#x642;&#x639; &#x627;&#x644;&#x625;&#x644;&#x643;&#x62A;&#x631;&#x648;&#x646;&#x64A; &#x628;&#x627;&#x633;&#x62A;&#x62E;&#x62F;&#x627;&#x645; &#x62A;&#x639;&#x644;&#x64A;&#x645;&#x627;&#x62A; HTML</title><link>https://academy.hsoub.com/programming/html/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%AA%D9%86%D8%B3%D9%8A%D9%82-%D8%A7%D9%84%D9%85%D9%88%D9%82%D8%B9-%D8%A7%D9%84%D8%A5%D9%84%D9%83%D8%AA%D8%B1%D9%88%D9%86%D9%8A-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D8%AA%D8%B9%D9%84%D9%8A%D9%85%D8%A7%D8%AA-html-r1909/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2023_02/241300857_-------HTML.png.145f31a0a25a59f4e58d4c737be1c0a4.png" /></p>
<p>
	توفر لغة HTML العديد من التعليمات التي تساعدك على تنسيق صفحات الويب وترتيب المحتوى داخلها. وهذا يلعب دورًا كبيرًا في تحسين ظهور محتوى الصفحات وتحسين تجربة المستخدم.
</p>

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

<h2>
	كيفية توسيط أو محاذاة النص والصور على صفحة الويب الخاصة بك باستخدام تعليمات HTML
</h2>

<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> لتغيير محاذاة النص أو الصور.
</p>

<p>
	لمحاذاة النص على صفحة الويب يجب استخدام السمة style وخاصية محاذاة النص text-align. على سبيل المثال استخدام التعليمات التالية ستؤدي إلى توسيط النص وإزاحته إلى منتصف الصفحة:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_6533_8" style=""><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="pln"> </span><span class="kwd">text-align</span><span class="pun">:</span><span class="pln">center</span><span class="pun">;</span><span class="atv">"</span><span class="tag">&gt;</span><span class="pln"> Sample text</span><span class="tag">&lt;/p&gt;</span></pre>

<p>
	لمحاذاة المحتوى إلى اليمين أو اليسار استبدل الخاصية center بالخاصية right أو left. سنعود الآن إلى ملف index.html الذي نعمل عليه في هذا المقال. وسنستخدم خاصية محاذاة النص لتوسيط الصور والنص في القسم العلوي من صفحة الويب. لتوسيط المحتوى سنضيف خاصية محاذاة النص text-align إلى <a href="https://wiki.hsoub.com/HTML/div" rel="external">العنصر &lt;div&gt;</a> الذي يحتوي على صورة الخلفية وصورة الملف الشخصي والعنوان الرئيسي والعنوان الفرعي والارتباط في القسم العلوي من الصفحة الرئيسية.
</p>

<p>
	افتح ملف index.html وأضف التعليمات التالية:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_6533_11" style=""><span class="com">&lt;!--First section--&gt;</span><span class="pln">
</span><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">style</span><span class="pun">=</span><span class="atv">"</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">'https://html.sammy-codes.com/images/background.jpg'</span><span class="pun">);</span><span class="pln">
</span><span class="kwd">background-size</span><span class="pun">:</span><span class="pln"> cover</span><span class="pun">;</span><span class="pln"> </span><span class="kwd">height</span><span class="pun">:</span><span class="lit">480px</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">80px</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="atv">"</span><span class="tag">&gt;</span><span class="pln">
  </span><span class="tag">&lt;img</span><span class="pln"> </span><span class="atn">src</span><span class="pun">=</span><span class="atv">"https://html.sammy-codes.com/images/small-profile.jpeg"</span><span class="pln"> </span><span class="atn">style</span><span class="pun">=</span><span class="atv">"</span><span class="kwd">height</span><span class="pun">:</span><span class="lit">150px</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">50%</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">10px</span><span class="pln"> solid </span><span class="lit">#FEDE00</span><span class="pun">;</span><span class="atv">"</span><span class="tag">&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">font-size</span><span class="pun">:</span><span class="lit">100px</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">margin</span><span class="pun">:</span><span class="lit">10px</span><span class="pun">;</span><span class="atv">"</span><span class="tag">&gt;</span><span class="pln">Sammy the Shark</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">font-size</span><span class="pun">:</span><span class="lit">30px</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="atv">"</span><span class="tag">&gt;&lt;em&gt;</span><span class="pln">Senior Selachimorpha at DigitalOcean</span><span class="tag">&lt;/em&gt;&lt;/p&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">font-size</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">color</span><span class="pun">:</span><span class="lit">#1F9AFE</span><span class="pun">;</span><span class="atv">"</span><span class="tag">&gt;&lt;a</span><span class="pln"> </span><span class="atn">href</span><span class="pun">=</span><span class="atv">"Webpage FilePath"</span><span class="pln">;</span><span class="tag">&gt;</span><span class="pln">About this site</span><span class="tag">&lt;/a&gt;&lt;/p&gt;</span><span class="pln">
</span><span class="tag">&lt;/div&gt;</span></pre>

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

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="PNG" data-fileid="118776" href="https://academy.hsoub.com/uploads/monthly_2023_02/1504237178_01_.PNG.548359236bf1a726f8c01e68026bf31a.PNG" rel=""><img alt="محاذاة الصور على صفحة الويب الخاصة باستخدام تعليمات HTML" class="ipsImage ipsImage_thumbnailed" data-fileid="118776" data-ratio="46.71" data-unique="i8lsoi4bz" style="width: 700px; height: auto;" width="600" src="https://academy.hsoub.com/uploads/monthly_2023_02/1670088233_01_.thumb.PNG.3e1850b51c5334dff80c4ecb513fd49c.PNG"> </a>
</p>

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

<h2>
	كيفية إنشاء جسم الصفحة الرئيسية باستخدام تعليمات HTML
</h2>

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

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

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

<h3>
	كيفية إضافة صورة ملف تعريفي كبيرة إلى صفحة الويب
</h3>

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

<p>
	بعد ذلك انسخ مقتطف الشفرة التالي والصقه بعد آخر رسم إغلاق للعنصر <code>&lt;div&gt;</code> وقبل وسم إغلاق <a href="https://wiki.hsoub.com/HTML/body" rel="external">العنصر &lt;body&gt;</a> في ملف index.html.
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_6533_18" style=""><span class="com">&lt;!--Second section--&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">"images/large-profile.jpg"</span><span class="pln"> </span><span class="atn">style</span><span class="pun">=</span><span class="atv">"</span><span class="kwd">height</span><span class="pun">:</span><span class="lit">600px</span><span class="pun">;</span><span class="pln"> </span><span class="kwd">margin</span><span class="pun">:</span><span class="lit">100px</span><span class="pun">;</span><span class="pln"> </span><span class="kwd">float</span><span class="pun">:</span><span class="pln"> left</span><span class="pun">;</span><span class="atv">"</span><span class="pln"> </span><span class="atn">alt</span><span class="pun">=</span><span class="atv">"A pretend invisible person wearing a hat, glasses, and coat."</span><span class="tag">&gt;</span></pre>

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

<ul>
	<li>
		التعليمة <code>&lt;!--Second section--&gt;</code>: هي تعليق لا يقرأه المتصفح ويستخدم للمساعدة في تنظيم ملف html لتسهيل قراءته من قبل المطورين.
	</li>
	<li>
		<a href="https://wiki.hsoub.com/HTML/img" rel="external">العنصر &lt;img&gt;</a>: يخبر المتصفح أننا ندرج صورة في صفحة الويب.
	</li>
	<li>
		السمة <code>src="images/large-profile.jpg"</code>: تخبر المتصفح بمكان العثور على الصورة.
	</li>
	<li>
		<a href="https://wiki.hsoub.com/HTML/style" rel="external">السمة style</a>: تتيح لنا تحديد خصائص الارتفاع والهامش وخاصية الطفو. تتيح لك خاصية الهامش margin تحديد حجم المساحة الفارغة المحيطة بعنصر HTML. وتتيح لك خاصية التعويم float تعويم الصورة إلى الجانب الأيمن والأيسر من الشاشة مع السماح بتدفق النص حول جانبها.
	</li>
	<li>
		<a href="https://wiki.hsoub.com/HTML/img#alt" rel="external">السمة alt</a>: تسمح لك بإضافة نص بديل إلى صورتك لتحسين إمكانية الوصول إلى الموقع للزوار الذين يستخدمون برامج قراءة الشاشة. (لا تنس تغيير النص البديل في مقتطف الشفرة إلى وصف يطابق صورتك).
	</li>
</ul>

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

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="PNG" data-fileid="118777" href="https://academy.hsoub.com/uploads/monthly_2023_02/1396397954_02.PNG.f3d9da20c4400b79cb21a9a6d6d8badf.PNG" rel=""><img alt="إضافة صورة ملف تعريفي كبيرة إلى صفحة الويب" class="ipsImage ipsImage_thumbnailed" data-fileid="118777" data-ratio="50.00" data-unique="krmnqa0uk" style="width: 700px; height: auto;" width="700" src="https://academy.hsoub.com/uploads/monthly_2023_02/1231358286_02.thumb.PNG.a2ce944fdf4822d5bed3a183b3666ad5.PNG"> </a>
</p>

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

<h2>
	كيفية إضافة قسم about me إلى صفحة الويب
</h2>

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

<p>
	في ملف index.html أضف مقتطف الشفرة التالي بعد وسم الصورة التي أضفتها في الخطوة السابقة، وقبل وسم إغلاق العنصر <code>&lt;body/&gt;</code>.
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_6533_24" style=""><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">style</span><span class="pun">=</span><span class="atv">"</span><span class="kwd">height</span><span class="pun">:</span><span class="lit">600px</span><span class="pun">;</span><span class="pln"> </span><span class="kwd">margin</span><span class="pun">:</span><span class="lit">100px</span><span class="pun">;</span><span class="atv">"</span><span class="tag">&gt;</span><span class="pln">
  </span><span class="tag">&lt;h1&gt;</span><span class="pln">Hello </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">line-height</span><span class="pun">:</span><span class="pln"> </span><span class="lit">2.0</span><span class="pun">;</span><span class="pln"> </span><span class="kwd">font-size</span><span class="pun">:</span><span class="lit">20px</span><span class="pun">;</span><span class="atv">"</span><span class="tag">&gt;</span><span class="pln">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Et magnis dis parturient montes  nascetur ridiculus mus. Purus semper eget duis at tellus at urna condimentum mattis. Turpis in eu mi bibendum neque egestas. Rhoncus dolor purus non enim praesent elementum facilisis. Ipsum nunc alique  bibendum enim facilisis gravida. Cursus turpis sa tincidunt dui ut ornare lectus. Enim nec dui nunc  mattis enim ut. Sapien nec sagittis aliquam malesuada bibendum arcu vitae elementum curabitur. Tussa  ultricies mi quis hendrerit dolor magna. Elit eget gravida cum sociis natoque penatibus et magnis  dis. Enim tortor at auctor urna nunc id cursus metus.</span><span class="tag">&lt;/p&gt;</span><span class="pln">
  </span><span class="tag">&lt;p</span><span class="pln"> </span><span class="atn">style</span><span class="pun">=</span><span class="atv">"</span><span class="kwd">line-height</span><span class="pun">:</span><span class="pln"> </span><span class="lit">2.0</span><span class="pun">;</span><span class="pln"> </span><span class="kwd">font-size</span><span class="pun">:</span><span class="lit">20px</span><span class="pun">;</span><span class="atv">"</span><span class="tag">&gt;</span><span class="pln">Email me at </span><span class="tag">&lt;a</span><span class="pln">
  </span><span class="atn">href</span><span class="pun">=</span><span class="atv">"mailto:Sammy@SampleEmail.com"</span><span class="tag">&gt;</span><span class="pln">Sammy@SampleEmail.com </span><span class="tag">&lt;/a&gt;&lt;/p&gt;</span><span class="pln">
</span><span class="tag">&lt;/div&gt;</span></pre>

<p>
	سنتوقف مؤقتًا لدراسة كل جزء من الشيفرة:
</p>

<ul>
	<li>
		العنصر <code>&lt;div style="height:600px; margin:100px;"&gt;</code>: ينشئ الحاوية <code>&lt;div&gt;</code> بارتفاع 600 بكسل وهامش 100 بكسل.
	</li>
	<li>
		<a href="https://wiki.hsoub.com/HTML/h1-h6" rel="external">العنصر &lt;h1&gt;</a>: يضيف عنوانًا نصيًا إلى محتوى الصفحة.
	</li>
	<li>
		الوسمان <code>&lt;p style="line-height: 2.0; font-size:20px;"&gt;</code> و <code>&lt;p style="line-height: 2.0; font-size:20px;"&gt;</code>: يضيفان فقرتين مع توسيع ارتفاع خطهما إلى 2.0 وبحجم خط 20 بكسل.
	</li>
	<li>
		العنصر <code>&lt;a href="mailto:Sammy@SampleEmail.com"&gt;Sammy@SampleEmail.com &lt;/a&gt;</code>: يضيف رابط بريد إلكتروني إلى عنوان البريد الإلكتروني.
	</li>
	<li>
		العنصر <code>&lt;div/&gt;</code>: هو وسم إغلاق الحاوية <code>&lt;div&gt;</code>.
	</li>
</ul>

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

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="PNG" data-fileid="118778" href="https://academy.hsoub.com/uploads/monthly_2023_02/1066122104_03_.PNG.0ddd2f4168e69ac56634f2fcb21b8c6f.PNG" rel=""><img alt="إضافة قسم about me إلى صفحة الويب" class="ipsImage ipsImage_thumbnailed" data-fileid="118778" data-ratio="54.29" data-unique="ntiyvx90a" style="width: 700px; height: auto;" width="700" src="https://academy.hsoub.com/uploads/monthly_2023_02/124923856_03_.thumb.PNG.f8b0a125949d98990f84e06012f00328.PNG"> </a>
</p>

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

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

<p>
	تعلمنا في هذه الفقرة كيفية ترتيب الصور والنص جنبًا إلى جنب باستخدام حاويات <code>&lt;div&gt;</code> والسمة style وخصائصها. وسننتقل إلى تعلم كيفية إنشاء تذييل لموقع الويب باستخدام <a href="https://wiki.hsoub.com/HTML/footer" rel="external">العنصر &lt;footer&gt;</a>.
</p>

<h2>
	كيفية إضافة تذييل إلى صفحة الويب باستخدام HTML
</h2>

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

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="118779" href="https://academy.hsoub.com/uploads/monthly_2023_02/61430601_04.png.bd7030819c8eea2a64d08591fe92f66c.png" rel=""><img alt="إضافة تذييل إلى صفحة الويب باستخدام HTML" class="ipsImage ipsImage_thumbnailed" data-fileid="118779" data-ratio="8.57" data-unique="jn1ap8mhs" style="width: 700px; height: 60px;" width="900" src="https://academy.hsoub.com/uploads/monthly_2023_02/1801676047_04.thumb.png.8949de942d264ab1b7cfe6e77d871666.png"></a>
</p>

<p>
	لإضافة تذييل إلى الصفحة الصق الشيفرة التالية بعد وسم الإغلاق <code>&lt;div/&gt;</code> وقبل وسم الإغلاق <code>&lt;body/&gt;</code>:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_6533_31" style=""><span class="com">&lt;!--Footer--&gt;</span><span class="pln">
</span><span class="tag">&lt;footer</span><span class="pln"> </span><span class="atn">style</span><span class="pun">=</span><span class="atv">"</span><span class="kwd">height</span><span class="pun">:</span><span class="pln">auto</span><span class="pun">;</span><span class="pln"> </span><span class="kwd">background-color</span><span class="pun">:</span><span class="lit">#F7C201</span><span class="pun">;</span><span class="atv">"</span><span class="tag">&gt;</span><span class="pln">
  </span><span class="tag">&lt;h1&gt;</span><span class="pln">&lt;Made with <span class="ipsEmoji">?</span> at DigitalOcean</span><span class="tag">&lt;/h1&gt;</span><span class="pln">
</span><span class="tag">&lt;/footer&gt;</span></pre>

<p>
	في التعليمات السابقة <code>&lt;!--Footer--&gt;</code> هو تعليق لا يقرأه المتصفح ويستخدم للمساعدة في تنظيم ملف html لسهولة قراءته من قبل المطورين. أسفل هذا التعليق أضفنا العنصر <code>&lt;footer&gt;</code> وحددنا لون خلفيته، واستخدمنا سمة النمط style لتحديد ارتفاعه وضبط المحتوى بداخله تلقائيًا. يعد عنصر <code>&lt;footer&gt;</code> عنصرًا دلاليًا يعطي المطورين فكرة عن الغرض من المحتوى. وفي الواقع هو مفيد للمطورين وكذلك زوار الموقع الذين يستخدمون برامج قراءة الشاشة. بخلاف ذلك يعمل عنصر <code>&lt;footer&gt;</code> تمامًا مثل عنصر <code>&lt;div&gt;</code>.
</p>

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

<p>
	احفظ الملف وأعد تحميله في المتصفح للتحقق من النتائج. يجب أن تحصل على هذه النتيجة:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="118780" href="https://academy.hsoub.com/uploads/monthly_2023_02/1387543192_05_.png.c9d798ed9b08c79ef18888ea2187ae0f.png" rel=""><img alt="نتاج إضافة تذييل إلى صفحة الويب باستخدام HTML" class="ipsImage ipsImage_thumbnailed" data-fileid="118780" data-ratio="8.29" data-unique="kyjiav1ns" style="width: 700px; height: auto;" width="700" src="https://academy.hsoub.com/uploads/monthly_2023_02/308663232_05_.thumb.png.608a0e3198e0af7c72106f42ec0767d8.png"> </a>
</p>

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

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_6533_34" style=""><span class="pln">&lt;h1 style="color:white; padding:40px; margin:0; text-align:center;"Made with <span class="ipsEmoji">?</span> at DigitalOcean</span><span class="tag">&lt;/h1&gt;</span></pre>

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

<h2>
	كيفية إضافة Twitter cards و Open Graph Social Metadata إلى صفحة الويب باستخدام HTML
</h2>

<p>
	عند مشاركة الروابط على <a href="https://academy.hsoub.com/marketing/social-media/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D9%88%D8%B3%D8%A7%D8%A6%D9%84-%D8%A7%D9%84%D8%AA%D9%88%D8%A7%D8%B5%D9%84-%D8%A7%D9%84%D8%A7%D8%AC%D8%AA%D9%85%D8%A7%D8%B9%D9%8A-%D9%88%D8%A2%D9%84%D9%8A%D8%A9-%D8%B9%D9%85%D9%84%D9%87%D8%A7-r526/" rel="">منصات التواصل الاجتماعي</a>، فإنها تقدم غالبًا بصور غنية وعنوان وملخص ورابط منسق بطريقة جيدة، بدلًا من نص عادي. على سبيل المثال إليك كيفية عرض تويتر هذا الرابط لسلسلة البرامج التعليمية:
</p>

<p>
	يمكنك إضافة روابط المشاركة على شكل وسائط متعددة تفاعلية إلى موقعك عن طريق تضمين <a href="https://wiki.hsoub.com/HTML/meta" rel="external">الخاصية meta</a> في <a href="https://wiki.hsoub.com/HTML/head" rel="external">العنصر &lt;head&gt;</a> داخل ملف html.
</p>

<p>
	يوجد معيارين أساسيين لتحديد كيفية تنسيق هذه البيانات الوصفية هما: Twitter cards وOpen Graph protocol. في هذا المقال ستتعلم كيفية إضافة البيانات الوصفية لبطاقة Twitter وOpen Graph إلى صفحة الويب.
</p>

<h3>
	إضافة بيانات تعريف Twitter cards إلى صفحة ويب
</h3>

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

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

<p>
	لإضافة البيانات الوصفية لبطاقة تويتر Twitter cards إلى موقعك أضف تعليمات <code>&lt;meta&gt;</code> التالية بين وسمي <code>&lt;head&gt;</code> و<code>&lt;head/&gt;</code>:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_6533_39" style=""><span class="tag">&lt;meta</span><span class="pln"> </span><span class="atn">name</span><span class="pun">=</span><span class="atv">"twitter:card"</span><span class="pln"> </span><span class="atn">content</span><span class="pun">=</span><span class="atv">"summary_large_image"</span><span class="pln"> </span><span class="tag">/&gt;</span><span class="pln">
</span><span class="tag">&lt;meta</span><span class="pln"> </span><span class="atn">name</span><span class="pun">=</span><span class="atv">"twitter:site"</span><span class="pln"> </span><span class="atn">content</span><span class="pun">=</span><span class="atv">"@digitalocean"</span><span class="pln"> </span><span class="tag">/&gt;</span><span class="pln">
</span><span class="tag">&lt;meta</span><span class="pln"> </span><span class="atn">name</span><span class="pun">=</span><span class="atv">"twitter:title"</span><span class="pln"> </span><span class="atn">content</span><span class="pun">=</span><span class="atv">"Sammy the Shark"</span><span class="pln"> </span><span class="tag">/&gt;</span><span class="pln">
</span><span class="tag">&lt;meta</span><span class="pln"> </span><span class="atn">name</span><span class="pun">=</span><span class="atv">"twitter:description"</span><span class="pln"> </span><span class="atn">content</span><span class="pun">=</span><span class="atv">"Senior Selachimorpha at DigitalOcean"</span><span class="pln"> </span><span class="tag">/&gt;</span><span class="pln">
</span><span class="tag">&lt;meta</span><span class="pln"> </span><span class="atn">name</span><span class="pun">=</span><span class="atv">"twitter:image"</span><span class="pln"> </span><span class="atn">content</span><span class="pun">=</span><span class="atv">"https://html.sammy-codes.com/images/large-profile.jpg"</span><span class="pln"> </span><span class="tag">/&gt;</span></pre>

<p>
	تأكد من تحديث الأجزاء المميزة بمعلوماتك الخاصة. وفيما يلي سنوضح معنى التعليمات التي أضفناها:
</p>
<title>
</title>
<ul>
	<li>
		twitter:card : تحدد هذه العلامة نوع بطاقة Twitter التي يجب عرضها. يعرض نوع summary_large_image ملخصًا قصيرًا مع معاينة كبيرة للصورة.
	</li>
	<li>
		twitter:site : اسمك كمستخدم Twitter، أو اسم مستخدم موقعك أو شركتك.
	</li>
	<li>
		twitter:title : العنوان الذي تريد استخدامه في البطاقة. يمكن أن يتطابق هذا مع ما وضعته في محتوى الوسم
	</li>
	<li>
		twitter:description : وصف موجز للصفحة التي ستعرض تحت العنوان. ويجب ألا يزيد هذا الوصف عن 200 حرف.
	</li>
	<li>
		twitter:image : صورة للعرض، معظم تنسيقات الصور القياسية PNG وJPG وGIF مقبولة ولكن يجب أن يكون حجمها أقل من 5 ميغابايت. قد تُقتص الصور تلقائيًا لعرضها في بطاقات ذات أحجام مختلفة.
	</li>
</ul>

<p>
	يجب أن ينتج عن هذه البيانات الوصفية بطاقة Twitter تشبه ما يلي:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="118781" href="https://academy.hsoub.com/uploads/monthly_2023_02/925855078_06_.png.e196917fdb815f845ba36d7df82d82a2.png" rel=""><img alt="إضافة بيانات تعريف Twitter cards إلى صفحة ويب" class="ipsImage ipsImage_thumbnailed" data-fileid="118781" data-ratio="71.71" data-unique="qrshzu70r" style="width: 463px; height: auto;" width="463" src="https://academy.hsoub.com/uploads/monthly_2023_02/925855078_06_.png.e196917fdb815f845ba36d7df82d82a2.png"> </a>
</p>

<p>
	لمزيد من المعلومات حول ميزات وخيارات Twitter Card الأخرى، تفضل بزيارة <a href="https://developer.twitter.com/en/docs/twitter-for-websites/cards/overview/abouts-cards" rel="external nofollow">وثائق Twitter Cards</a> الرسمية.
</p>

<h3>
	إضافة بيانات تعريف Open Graph إلى صفحة ويب
</h3>

<p>
	بروتوكول Open Graph هو معيار مفتوح للبيانات الوصفية تستخدمه العديد من مواقع الويب لعرض معاينات الارتباط الغني لمستخدميها. تستخدم مواقع مثل فيسبوك ولينكد إن و Pinterest بروتوكول Open Graph لعرض الروابط.
</p>

<p>
	شيفرة Open Graph مشابهة لبطاقات تويتر Twitter cards، وهي مجموعة من الخصائص تضاف إلى الوسم <code>&lt;meta&gt;</code>. وهي موضحة بالمقتطف البرمجي التالي:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_6533_43" style=""><span class="tag">&lt;meta</span><span class="pln"> </span><span class="atn">property</span><span class="pun">=</span><span class="atv">"og:type"</span><span class="pln"> </span><span class="atn">content</span><span class="pun">=</span><span class="atv">"article"</span><span class="pln"> </span><span class="tag">/&gt;</span><span class="pln">
</span><span class="tag">&lt;meta</span><span class="pln"> </span><span class="atn">property</span><span class="pun">=</span><span class="atv">"og:title"</span><span class="pln"> </span><span class="atn">content</span><span class="pun">=</span><span class="atv">"Sammy the Shark"</span><span class="pln"> </span><span class="tag">/&gt;</span><span class="pln">
</span><span class="tag">&lt;meta</span><span class="pln"> </span><span class="atn">property</span><span class="pun">=</span><span class="atv">"og:description"</span><span class="pln"> </span><span class="atn">content</span><span class="pun">=</span><span class="atv">"Senior Selachimorpha at DigitalOcean"</span><span class="pln"> </span><span class="tag">/&gt;</span><span class="pln">
</span><span class="tag">&lt;meta</span><span class="pln"> </span><span class="atn">property</span><span class="pun">=</span><span class="atv">"og:url"</span><span class="pln"> </span><span class="atn">content</span><span class="pun">=</span><span class="atv">"https://html.sammy-codes.com/"</span><span class="pln"> </span><span class="tag">/&gt;</span><span class="pln">
</span><span class="tag">&lt;meta</span><span class="pln"> </span><span class="atn">property</span><span class="pun">=</span><span class="atv">"og:image"</span><span class="atn">content</span><span class="pun">=</span><span class="atv">"https://html.sammy-codes.com/images/large-profile.jpg"</span><span class="pln"> </span><span class="tag">/&gt;</span></pre>

<p>
	توضع هذه التعليمات في قسم <code>&lt;head&gt;</code> في مستند HTML ويمكنك تحديث الأحداث المميزة حسب الحاجة.
</p>

<p>
	إليك هذا الشرح لأهم الخصائص المستخدمة:
</p>
<title>
</title>
<ul>
	<li>
		og:type : نوع المحتوى الموصوف. يمكن أن يكون نوع المحتوى مقالة أو كتاب أو ملف شخصي. يمكنك الاطلاع على مستند <a href="https://ogp.me/#types" rel="external nofollow">the official og:type documentation</a> للمزيد من المعلومات.
	</li>
	<li>
		og:title : عنوان الصفحة. يمكن استخدام نفس عنوان
	</li>
	<li>
		og:description : وصف موجز للصفحة، لا يوجد حد محدد للأحرف، ولكن حد Twitter البالغ 200 حرف لهذا الغرض يعد دليلًا جيدًا.
	</li>
	<li>
		og:url : <a href="https://academy.hsoub.com/programming/general/%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A7%D8%AA-%D8%B9%D9%86%D9%88%D8%A7%D9%86-url-%D9%88%D8%A3%D9%86%D9%88%D8%A7%D8%B9%D9%87-r1435/" rel="">عنوان URL</a> الدائم (الأساسي) للصفحة.
	</li>
	<li>
		og:image : صورة تستخدم لربطها بالصفحة.
	</li>
</ul>

<p>
	يتوفر مزيد من المعلومات حول بروتوكول Open Graph على الموقع الإلكتروني الرسمي <a href="https://ogp.me/" rel="external nofollow">لبروتوكول Open Graph</a>.
</p>

<h2>
	اختبار البيانات الوصفية لصفحة الويب
</h2>

<p>
	يتوفر عدد قليل من الأدوات التي يمكنك استخدامها لمعاينة كيفية عرض العلامات الوصفية على موقع الويب. مثلاً <a href="https://en.rakko.tools/tools/9/" rel="external nofollow">Open Graph Debugger</a> هو محاكي غير رسمي يعرض معلومات Twitter card وOpen Graph، ولا يتطلب استخدامه إنشاء حساب.
</p>

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

<ul>
	<li>
		<a href="https://cards-dev.twitter.com/validator" rel="external nofollow">Twitter Card validator</a>
	</li>
	<li>
		<a href="https://developers.facebook.com/tools/debug/" rel="external nofollow">Facebook Sharing Debugger</a>
	</li>
	<li>
		<a href="https://www.linkedin.com/post-inspector/" rel="external nofollow">LinkedIn Post Inspector</a>
	</li>
	<li>
		<a href="https://developers.pinterest.com/tools/url-debugger/" rel="external nofollow">Pinterest Rich Pins Validator</a>
	</li>
</ul>

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

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

<p>
	ترجمة -وبتصرّف- للأجزاء من التاسع عشر وحتى اﻷخير من سلسلة المقالات <a href="https://www.digitalocean.com/community/tutorial_series/how-to-build-a-website-with-html" rel="external nofollow">How To Build a Website with HTML</a>.
</p>

<h2>
	اقرأ أيضًا
</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/html/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%AA%D8%B5%D9%85%D9%8A%D9%85-%D9%88%D8%AA%D9%86%D8%B3%D9%8A%D9%82-%D8%B5%D9%81%D8%AD%D8%A9-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-%D8%A7%D9%84%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A9-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D8%AA%D8%B9%D9%84%D9%8A%D9%85%D8%A7%D8%AA-html-r1908/" rel="">كيفية تصميم وتنسيق صفحة الويب الأساسية باستخدام تعليمات HTML</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/apps/web/%D9%83%D9%8A%D9%81-%D8%AA%D9%86%D8%B4%D8%B1-%D8%B5%D9%81%D8%AD%D8%A9-%D8%A3%D9%88-%D9%85%D9%88%D9%82%D8%B9-%D9%88%D9%8A%D8%A8-%D9%82%D9%85%D8%AA-%D8%A8%D8%AA%D8%B5%D9%85%D9%8A%D9%85%D9%87-%D8%B9%D9%84%D9%89-%D8%A7%D9%84%D8%A5%D9%86%D8%AA%D8%B1%D9%86%D8%AA-r52/" rel="">كيف تنشر صفحة أو موقع ويب قمت بتصميمه على الإنترنت</a>
	</li>
</ul>
]]></description><guid isPermaLink="false">1909</guid><pubDate>Sun, 12 Feb 2023 09:39:44 +0000</pubDate></item><item><title>&#x643;&#x64A;&#x641;&#x64A;&#x629; &#x62A;&#x635;&#x645;&#x64A;&#x645; &#x648;&#x62A;&#x646;&#x633;&#x64A;&#x642; &#x635;&#x641;&#x62D;&#x629; &#x627;&#x644;&#x648;&#x64A;&#x628; &#x627;&#x644;&#x623;&#x633;&#x627;&#x633;&#x64A;&#x629; &#x628;&#x627;&#x633;&#x62A;&#x62E;&#x62F;&#x627;&#x645; &#x62A;&#x639;&#x644;&#x64A;&#x645;&#x627;&#x62A; HTML</title><link>https://academy.hsoub.com/programming/html/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%AA%D8%B5%D9%85%D9%8A%D9%85-%D9%88%D8%AA%D9%86%D8%B3%D9%8A%D9%82-%D8%B5%D9%81%D8%AD%D8%A9-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-%D8%A7%D9%84%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A9-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D8%AA%D8%B9%D9%84%D9%8A%D9%85%D8%A7%D8%AA-html-r1908/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2023_02/449404933_---------HTML.png.68589791ecf1265dc0719d4412075bcd.png" /></p>
<p>
	يلعب التصميم دورًا رئيسيًا في تحسين مظهر الصفحات وتنسيق المحتوى داخلها. في هذا المقال سنلقي الضوء على كيفية تصميم القسم العلوي من صفحة الويب وكيفية تصميم العنوان وإضافته، وكذلك كيفية إنشاء صفحة ويب إضافية.
</p>

<h2>
	كيفية إضافة صورة خلفية إلى القسم العلوي من صفحة الويب الخاصة بك باستخدام HTML
</h2>

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

<p>
	في البداية سنحتاج إلى تحديد صورة خلفية، يمكنك اختيار أي صورة تريدها. كما يمكنك تنزيل صورة الخلفية لموقع العرض التوضيحي الذي ننشئه. (لتعلم كيفية إضافة الصور إلى صفحات الويب باستخدام تعليمات HTML انتقل إلى مقال "<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>
	بعد اختيار الصورة الخلفية احفظها في مجلد الصور باسم background-image.jpg.
</p>

<p>
	بعد ذلك انسخ الشفرات البرمجية التالية والصقها في ملف index.html أسفل <a href="https://wiki.hsoub.com/HTML/body" rel="external">وسم الفتح &lt;body&gt;</a> وفوق وسم الإغلاق <code>&lt;body/&gt;</code>.
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_2146_9" style=""><span class="tag">&lt;body&gt;</span><span class="pln">
</span><span class="com">&lt;!--First section--&gt;</span><span class="pln">
  </span><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">style</span><span class="pun">=</span><span class="atv">"</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">'Image_Location'</span><span class="pun">);</span><span class="pln">
  </span><span class="kwd">background-size</span><span class="pun">:</span><span class="pln"> cover</span><span class="pun">;</span><span class="pln"> </span><span class="kwd">height</span><span class="pun">:</span><span class="lit">480px</span><span class="pun">;</span><span class="pln"> </span><span class="kwd">padding-top</span><span class="pun">:</span><span class="lit">80px</span><span class="pun">;</span><span class="atv">"</span><span class="tag">&gt;</span><span class="pln">
  </span><span class="tag">&lt;/div&gt;</span><span class="pln">
</span><span class="tag">&lt;/body&gt;</span></pre>

<p>
	تأكد من استبدال النص الذي يشير إلى موقع الصورة "Image_Location" بمسار ملف صورتك، ولا تنس إضافة وسم الإغلاق <code>&lt;div/&gt;</code>.
</p>

<p>
	لاحظ أننا أضفنا التعليق للمساعدة في تنظيم شفرة HTML. التعليق هو جزء من التعليمات البرمجية يتجاهلها المتصفح، وتستخدم لمساعدة المطورين في شرح وتوضيح وتنظيم التعليمات البرمجية. يمكن إنشاؤها باستخدام علامة الفتح <code>&lt;! -</code> وعلامة الإغلاق <code>-&gt;</code>.
</p>

<p>
	في المثال السابق حددنا الارتفاع بـ 480 بكسل والحشو العلوي بـ 80 بكسل، مما سيخلق مساحة 80 بكسل بين الجزء العلوي من عنصر <code>&lt;div&gt;</code> وأي محتوى نضعه في الداخل. أما بالنسبة لقيمة الخاصية padding-top فلن تكون قادرًا على رؤية تأثيراتها حتى نضع المحتوى في الداخل في الخطوة التالية.
</p>

<p>
	عند حفظ الملف وإعادة تحميله في المتصفح ستظهر الصفحة التالية:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="PNG" data-fileid="118764" href="https://academy.hsoub.com/uploads/monthly_2023_02/1612041931_01_.PNG.ed81b197199b4d08977e923279ae6c4e.PNG" rel=""><img alt="كيفية إضافة صورة خلفية إلى القسم العلوي من صفحة الويب الخاصة بك باستخدام HTML" class="ipsImage ipsImage_thumbnailed" data-fileid="118764" data-ratio="82.33" data-unique="avltwohhi" style="width: 600px; height: auto;" width="600" src="https://academy.hsoub.com/uploads/monthly_2023_02/1612041931_01_.PNG.ed81b197199b4d08977e923279ae6c4e.PNG"> </a>
</p>

<p>
	يمكنك استخدام لون للخلفية بدلًا من صورة الخلفية. ولتنفيذ ذلك استبدل مقطف <code>&lt;div&gt;</code> الذي أنشأته في المثال التالي بالشيفرات البرمجية التالية:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_2146_12" style=""><span class="tag">&lt;body&gt;</span><span class="pln">
  </span><span class="com">&lt;!--First section--&gt;</span><span class="pln">
  </span><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">style</span><span class="pun">=</span><span class="atv">"</span><span class="kwd">background-color</span><span class="pun">:</span><span class="pln"> </span><span class="lit">#f4bc01</span><span class="pun">;</span><span class="pln"> </span><span class="kwd">height</span><span class="pun">:</span><span class="lit">480px</span><span class="pun">;</span><span class="pln"> </span><span class="kwd">padding-top</span><span class="pun">:</span><span class="lit">80px</span><span class="pun">;</span><span class="atv">"</span><span class="tag">&gt;</span><span class="pln">
  </span><span class="tag">&lt;/div&gt;</span><span class="pln">
</span><span class="tag">&lt;/body&gt;</span></pre>

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

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="PNG" data-fileid="118765" href="https://academy.hsoub.com/uploads/monthly_2023_02/1823781027_02_.PNG.e03b0bc71eb57868e189304ed1a14d0b.PNG" rel=""><img alt="استخدام لون للخلفية بدلًا من صورة الخلفية" class="ipsImage ipsImage_thumbnailed" data-fileid="118765" data-ratio="66.83" data-unique="yut00hue0" style="width: 600px; height: auto;" width="600" src="https://academy.hsoub.com/uploads/monthly_2023_02/29976936_02_.thumb.PNG.528f4ca51b8021921b51d7a3bd7b2fb9.PNG"> </a>
</p>

<p>
	إذا وازنت حاوية <code>&lt;div&gt;</code> على موقعك مع نفس الحاوية <code>&lt;div&gt;</code> على موقع العرض التوضيحي، ستلاحظ أن حاوية <code>&lt;div&gt;</code> لصفحتك على الويب محاطة بهامش صغير من المساحة البيضاء. ويرجع هذا الهامش إلى حقيقة أن جميع صفحات <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> تُعين تلقائيًا بحيث يكون معها هامش صغير افتراضيًا.
</p>

<p>
	لإزالة هذا الهامش نحتاج إلى إضافة السمة style إلى وسم الفتح <code>&lt;body&gt;</code> وتعيين هامش العنصر <code>&lt;body&gt;</code> لصفحة HTML بـ 0 بكسل. لذلك أضف التعليمة التالية إلى الملف index.html:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_2146_17" style=""><span class="pln"> </span><span class="tag">&lt;body</span><span class="pln"> </span><span class="atn">style</span><span class="pun">=“</span><span class="kwd">margin</span><span class="pun">:</span><span class="lit">0</span><span class="pun">;”</span><span class="tag">&gt;</span></pre>

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

<h2>
	كيفية إضافة صورة ملف تعريفي إلى صفحة الويب باستخدام تعليمات HTML
</h2>

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

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="PNG" data-fileid="118766" href="https://academy.hsoub.com/uploads/monthly_2023_02/210348462_03__.PNG.f13b032bc8bd4122b9ee65bfe294ed9e.PNG" rel=""><img alt="كيفية إضافة صورة ملف تعريفي إلى صفحة الويب باستخدام تعليمات HTML" class="ipsImage ipsImage_thumbnailed" data-fileid="118766" data-ratio="47.83" data-unique="7xw6dqej1" style="width: 600px; height: auto;" width="600" src="https://academy.hsoub.com/uploads/monthly_2023_02/210348462_03__.PNG.f13b032bc8bd4122b9ee65bfe294ed9e.PNG"> </a>
</p>

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

<p>
	بعد تحديد الصورة احفظها باسم small-profile.jpg في مجلد الصور الموجود في مجلد المشروع. بعد ذلك أضف العنصر <code>&lt;img&gt;</code> بين وسم فتح العنصر <code>&lt;div&gt;</code> ووسم إغلاقه <code>&lt;div/&gt;</code>. كما توضح التعليمات التالية:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_2146_20" style=""><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">style</span><span class="pun">=</span><span class="atv">"</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">'ImageLocation'</span><span class="pun">);</span><span class="kwd">background-size</span><span class="pun">:</span><span class="pln"> cover</span><span class="pun">;</span><span class="pln"> </span><span class="kwd">height</span><span class="pun">:</span><span class="lit">480px</span><span class="pun">;</span><span class="pln"> </span><span class="kwd">padding-top</span><span class="pun">:</span><span class="lit">80px</span><span class="pun">;</span><span class="atv">"</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">"ImageFilePath"</span><span class="pln"> </span><span class="atn">style</span><span class="pun">=</span><span class="atv">"</span><span class="kwd">height</span><span class="pun">:</span><span class="lit">150px</span><span class="atv">"</span><span class="tag">&gt;</span><span class="pln">
</span><span class="tag">&lt;/div&gt;</span></pre>

<p>
	تأكد من استبدال عنوان src بمسار ملف صورة ملفك الشخصي. ولاحظ أننا نستخدم السمة style لتحديد ارتفاع الصورة إلى 150 بكسل. ولاحظ أيضًا أن العنصر <code>&lt;img&gt;</code> لا يتطلب وسم إغلاق.
</p>

<p>
	احفظ الملف وأعد تحميل صفحة الويب في المتصفح للتحقق من النتائج. وستحصل على النتيجة التالية:
</p>

<p style="text-align: center;">
	<img alt="صورة الملف الشخصي" class="ipsImage ipsImage_thumbnailed" data-fileid="118767" data-ratio="57.00" data-unique="lccphpv6r" style="width: 600px; height: auto;" width="795" src="https://academy.hsoub.com/uploads/monthly_2023_02/1239306472_04_.PNG.22bf2da18d7a27bc0e322caafd10fd89.PNG">
</p>

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

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

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_2146_23" style=""><span class="tag">&lt;img</span><span class="pln"> </span><span class="atn">src</span><span class="pun">=</span><span class="atv">"ImageFilePath"</span><span class="pln"> </span><span class="atn">style</span><span class="pun">=</span><span class="atv">"</span><span class="kwd">height</span><span class="pun">:</span><span class="lit">150px</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">50%</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">10px</span><span class="pln"> solid </span><span class="lit">#FEDE00</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">"This is a small profile image of Digital Ocean’s mascot, a blue smiling shark."</span><span class="tag">&gt;</span></pre>

<p>
	تأكد من استخدام مسار الملف الصحيح لصورتك مدرجًا كعنوان <a href="https://wiki.hsoub.com/HTML/img#src" rel="external">src</a>. ثم احفظ الملف وأعد تحميله في المتصفح. وستحصل على شيئًا كهذا:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="PNG" data-fileid="118768" href="https://academy.hsoub.com/uploads/monthly_2023_02/1236410290_05___.PNG.57ae7f265ab276d19dcb1dbb9b190b35.PNG" rel=""><img alt="نتاج إضافة خصائص إلى السمة style، لتمنح الصورة شكلًا دائريًا أصفر اللون" class="ipsImage ipsImage_thumbnailed" data-fileid="118768" data-ratio="64.67" data-unique="0rlvqrc69" style="width: 600px; height: auto;" width="600" src="https://academy.hsoub.com/uploads/monthly_2023_02/1236410290_05___.PNG.57ae7f265ab276d19dcb1dbb9b190b35.PNG"> </a>
</p>

<p>
	الآن سنتوقف قليلًا لدراسة تعديلات الشيفرة التي أضفناها. يؤدي تعيين نصف قطر الحد إلى 50% إلى منح الصورة شكلًا دائريًا. وضبط قيمة الحد على 10 بكسل سيعطي الصورة حدًا صلبًا بعرض 10 بكسل وله قيمة اللون السداسي العشري ‎#FEDE00.
</p>

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

<h2>
	كيفية تصميم العنوان وإضافته إلى صفحة الويب باستخدام تعليمات HTML
</h2>

<p>
	تعد العناوين جزءًا أساسيًا من أي صفحة ويب. باستخدام تعليمات <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>
	في مثالنا التوضيحي سنستخدم اسم Sammy والمسمى الوظيفي لـ Sammy، ولكن يمكنك إضافة أي محتوى تريده. سنستخدم <a href="https://wiki.hsoub.com/HTML/h1-h6" rel="external">عنصر العنوان &lt;h1&gt;</a> و<a href="https://wiki.hsoub.com/HTML/p" rel="external">عنصر الفقرة &lt;p&gt;</a> و<a href="https://wiki.hsoub.com/HTML/em" rel="external">عنصر التركيز &lt;em&gt;</a>.
</p>

<p>
	انسخ مقتطف الشفرات التالية بعد عنصر صورة ملفك الشخصي <code><a href="https://wiki.hsoub.com/HTML/img" rel="external">&lt;img&gt;</a></code> وقبل وسم إغلاق العنصر <code>&lt;div&gt;</code>:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_2146_33" style=""><span class="tag">&lt;img</span><span class="pln"> </span><span class="atn">src</span><span class="pun">=</span><span class="atv">"https://html.sammy-codes.com/images/small-profile.jpeg"</span><span class="pln"> </span><span class="atn">style</span><span class="pun">=</span><span class="atv">"</span><span class="kwd">height</span><span class="pun">:</span><span class="lit">150px</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">50%</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">10px</span><span class="pln"> solid </span><span class="lit">#FEDE00</span><span class="pun">;</span><span class="pln"> </span><span class="kwd">padding-top</span><span class="pun">:</span><span class="lit">80px</span><span class="pun">;</span><span class="atv">"</span><span class="tag">&gt;</span><span class="pln">
</span><span class="tag">&lt;h1&gt;</span><span class="pln">Sammy the Shark</span><span class="tag">&lt;/h1&gt;</span><span class="pln">
</span><span class="tag">&lt;p&gt;&lt;em&gt;</span><span class="pln">Senior Selachimorpha at DigitalOcean</span><span class="tag">&lt;/em&gt;&lt;/p&gt;</span><span class="pln">
</span><span class="tag">&lt;/div&gt;</span></pre>

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

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="PNG" data-fileid="118769" href="https://academy.hsoub.com/uploads/monthly_2023_02/205733131_06_.PNG.24727cf56492a3409b9d9bd82c8169c2.PNG" rel=""><img alt="كيفية تصميم العنوان وإضافته إلى صفحة الويب باستخدام تعليمات HTML" class="ipsImage ipsImage_thumbnailed" data-fileid="118769" data-ratio="45.86" data-unique="74mkcixox" style="width: 700px; height: auto;" width="600" src="https://academy.hsoub.com/uploads/monthly_2023_02/472236441_06_.thumb.PNG.8779341d4d07ce14cdb70037baf10f00.PNG"> </a>
</p>

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

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

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_2146_38" style=""><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">font-size</span><span class="pun">:</span><span class="lit">100px</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">margin</span><span class="pun">:</span><span class="lit">10px</span><span class="pun">;</span><span class="atv">"</span><span class="tag">&gt;</span><span class="pln">Sammy the Shark</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">font-size</span><span class="pun">:</span><span class="lit">30px</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="atv">"</span><span class="tag">&gt;&lt;em&gt;</span><span class="pln">Senior Selachimorpha at DigitalOcean</span><span class="tag">&lt;/em&gt;&lt;/p&gt;</span></pre>

<p>
	احفظ الملف وأعد تحميله في المتصفح وستحصل على الصفحة التالية:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="PNG" data-fileid="118770" href="https://academy.hsoub.com/uploads/monthly_2023_02/228252157_07_.PNG.cc7eb57ead9012a94102439860c18201.PNG" rel=""><img alt="تصميم العنوان باستخدام تعليمات HTML" class="ipsImage ipsImage_thumbnailed" data-fileid="118770" data-ratio="47.85" data-unique="qgv3nrb8t" style="width: 744px; height: auto;" width="744" src="https://academy.hsoub.com/uploads/monthly_2023_02/715891015_07_.thumb.PNG.bc5562971a8017414797f04e954d67a5.PNG"> </a>
</p>

<p>
	تعمل الخصائص المضافة إلى النمط style على ضبط حجم الخط إلى 30 بكسل وتغيير لون الخط إلى اللون الأبيض. كما أننا أضفنا هامشًا قدره 10 بكسل إلى العنصر <code>&lt;h1&gt;</code>.
</p>

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

<h2>
	كيفية إنشاء صفحات ويب إضافية على موقعك الإلكتروني باستخدام تعليمات HTML
</h2>

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

<p>
	يتضمن موقعنا الإلكتروني التوضيحي <a href="https://academy.hsoub.com/devops/servers/%D8%A7%D9%84%D9%81%D8%B1%D9%82-%D8%A8%D9%8A%D9%86-%D8%B5%D9%81%D8%AD%D8%A9-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-%D9%88%D9%85%D9%88%D9%82%D8%B9-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-%D9%88%D8%AE%D8%A7%D8%AF%D9%85-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-%D9%88%D9%85%D8%AD%D8%B1%D9%83-%D8%A7%D9%84%D8%A8%D8%AD%D8%AB-r572/" rel="">صفحة الويب</a> "حول"، والتي تتضمن معلومات حول الموقع، وفيما يلي سنوضح كيفية إنشاء هذه الصفحة وربطها بموقعك الإلكتروني وسنوضح ما هي العناصر التي تتضمنها.
</p>

<p>
	لإضافة صفحة جديدة إلى موقعك الإلكتروني عليك أولًا إنشاء ملف جديد باسم about.html وحفظه في دليل المشروع html-Practice. (إذا لم تتابع سلسلة مقالاتنا التعليمية فيمكنك مراجعة إرشادات إعداد ملف html جديد في مقالنا "كيفية إعداد مشروع موقع ويب HTML وتنسيقه").
</p>

<p>
	<strong>ملاحظة</strong>: إذا قررت اختيار اسمك كاسم للملف، فتأكد من تجنب استخدام مسافات الأحرف أو الأحرف الخاصة (مثل ! أو # أو % وغيرها من الرموز). وتجنب أيضًا استخدام الأحرف الكبيرة لأنها قد تسبب مشاكل لاحقًا. ولا تنس تضمين الامتداد ".html".
</p>

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

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

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

<p>
	ارجع إلى ملف index.html وأضف المقتطف التالي أسفل العنوان الفرعي لموقعك وفوق وسم إغلاق العنصر <code>&lt;div/&gt;</code>.
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_2146_47" style=""><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">font-size</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">color</span><span class="pun">:</span><span class="lit">#1F9AFE</span><span class="pun">;</span><span class="atv">"</span><span class="tag">&gt;</span><span class="pln">
</span><span class="tag">&lt;a</span><span class="pln"> </span><span class="atn">href</span><span class="pun">=</span><span class="atv">"Webpage_FilePath"</span><span class="tag">&gt;</span><span class="pln">About this site</span><span class="tag">&lt;/a&gt;</span><span class="pln">
</span><span class="tag">&lt;/p&gt;</span></pre>

<p>
	سنعدل مسار الملف المميز إلى المسار النسبي للملف about.html الذي أنشأناه منذ قليل. يشير المسار النسبي إلى موقع الملف بالنسبة إلى دليل العمل الحالي (على عكس المسار المطلق، والذي يشير إلى موقع الملف بالنسبة إلى الدليل الجذر).
</p>

<p>
	إذا كنت تستخدم محرر نصوص Visual Studio Code، فيمكنك نسخ مسار الملف النسبي عن طريق النقر بزر الفأرة الأيمن فوق رمز الملف وتحديد "Copy Relative Path" إذا كنت تستخدم نظام التشغيل ويندوز، أما إذا كنت تستخدم نظام التشغيل Mac فاضغط Ctrl مع زر الفأرة الأيسر.
</p>

<p>
	لاحظ أننا حددنا أيضًا حجم الخط واللون باستخدام السمة style. احفظ ملف index.html وأعد تحميله في المتصفح.
</p>

<p>
	الآن أضيف ارتباط يوجه المستخدم إلى صفحة الويب about.html وسيظهر في الصفحة كما يلي:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="PNG" data-fileid="118771" href="https://academy.hsoub.com/uploads/monthly_2023_02/1129405984_08.PNG.169123cc1899bb998489a5e86a215404.PNG" rel=""><img alt="إضافة ارتباط يوجه المستخدم إلى صفحة الويب about.html" class="ipsImage ipsImage_thumbnailed" data-fileid="118771" data-ratio="63.14" data-unique="d5j5av5rh" style="width: 700px; height: auto;" width="700" src="https://academy.hsoub.com/uploads/monthly_2023_02/1129405984_08.PNG.169123cc1899bb998489a5e86a215404.PNG"> </a>
</p>

<p>
	إذا ظهر خطأ فتأكد أن الملف موجود في نفس دليل المشروع (نفس المجلد الذي يحتوي ملف index.html) وأنه لا توجد أخطاء في مسار المشروع.
</p>

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

<p>
	ترجمة -وبتصرّف- للأجزاء من الخامس عشر وحتى الثامن عشر من سلسلة المقالات <a href="https://www.digitalocean.com/community/tutorial_series/how-to-build-a-website-with-html" rel="external nofollow">How To Build a Website with HTML</a>.
</p>

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

<ul>
	<li>
		<a href="https://academy.hsoub.com/programming/html/%D9%85%D9%83%D9%88%D9%86%D8%A7%D8%AA-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-%D8%B9%D9%86%D8%A7%D8%B5%D8%B1-html-%D8%A7%D9%84%D9%85%D8%AE%D8%B5%D8%B5%D8%A9-%D9%88%D9%82%D9%88%D8%A7%D9%84%D8%A8%D9%87%D8%A7-r1352/" rel="">مكونات الويب: عناصر HTML المخصصة وقوالبها</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/apps/web/%D9%83%D9%8A%D9%81-%D8%AA%D9%86%D8%B4%D8%B1-%D8%B5%D9%81%D8%AD%D8%A9-%D8%A3%D9%88-%D9%85%D9%88%D9%82%D8%B9-%D9%88%D9%8A%D8%A8-%D9%82%D9%85%D8%AA-%D8%A8%D8%AA%D8%B5%D9%85%D9%8A%D9%85%D9%87-%D8%B9%D9%84%D9%89-%D8%A7%D9%84%D8%A5%D9%86%D8%AA%D8%B1%D9%86%D8%AA-r52/" 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%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>
</ul>
]]></description><guid isPermaLink="false">1908</guid><pubDate>Thu, 23 Feb 2023 18:00:00 +0000</pubDate></item><item><title>&#x643;&#x64A;&#x641;&#x64A;&#x629; &#x625;&#x639;&#x62F;&#x627;&#x62F; &#x645;&#x634;&#x631;&#x648;&#x639; &#x645;&#x648;&#x642;&#x639; &#x648;&#x64A;&#x628; HTML &#x648;&#x62A;&#x646;&#x633;&#x64A;&#x642;&#x647;</title><link>https://academy.hsoub.com/programming/html/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%A5%D8%B9%D8%AF%D8%A7%D8%AF-%D9%85%D8%B4%D8%B1%D9%88%D8%B9-%D9%85%D9%88%D9%82%D8%B9-%D9%88%D9%8A%D8%A8-html-%D9%88%D8%AA%D9%86%D8%B3%D9%8A%D9%82%D9%87-r1896/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2023_02/1782145702_------HTML-.png.2654af49cbd6a19b7167dc5aab5411b3.png" /></p>
<p>
	أول خطوة يجب القيام بها عند إنشاء مشروع موقع ويب جديد هي إنشاء دليل مشروع (أو مجلد) لتخزين جميع الملفات التي ستنشئها في عملية إعداد هذا المشروع. يقدم لك هذا المقال خطوات إعداد المجلدات والملفات اللازمة لبناء موقعك الإلكتروني باستخدام لغة HTML.
</p>

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

<p>
	<strong>ملاحظة</strong>: إذا قررت اختيار اسمك كاسم للدليل فتأكد من تجنب استخدام المسافات الفارغة والأحرف الخاصة (مثل ! أو # أو٪ أو غيرها) والأحرف الكبيرة، لأنها قد تسبب في مشاكل لاحقًا.
</p>

<p>
	سننسق ملف index.html ليكون بمثابة الصفحة الرئيسية لموقع الويب. وتتمثل الخطوة الأولى في تنسيق مستند الويب في إضافة إعلان <code>&lt;DOCTYPE html!&gt;</code> إلى السطر الأول.
</p>

<p>
	يخبر هذا الإعلان المتصفح بنوع إصدار HTML الذي تستخدمه ومن المهم الإعلان عنه نظرًا لوجود إصدارات متعددة من <a href="https://wiki.hsoub.com/HTML" rel="external">HTML</a>. في هذا الإعلان يحدد html معيار الويب الحالي لـ HTML وهو HTML5.
</p>

<p>
	بعد ذلك سنضيف عنصر html من خلال إضافة وسوم الفتح والإغلاق <code><a href="https://wiki.hsoub.com/HTML/html" rel="external">&lt;html&gt;</a></code>. يخبر العنصر <code>&lt;html&gt;</code> المتصفح أن كل المحتوى الذي يحتويه يهدف إلى قراءته بتنسيق HTML. وداخل هذا الوسم سنضيف السمة <code>lang</code> والتي تحدد لغة صفحة الويب. في المثال التالي سنحدد اللغة الإنجليزية كلغة للموقع باستخدام الخاصية en.
</p>

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

<p>
	<strong>ملاحظة</strong>: إذا أردت استخدام اللغة العربية في موقعك أضف الخاصية <code>lang="ar"</code>.
</p>

<p>
	من الآن وصاعدًا سنكتب كل المحتوى الذي نريد إضافته إلى موقعنا الإلكتروني بين وسمي الفتح والإغلاق للعنصر <code>&lt;html&gt;</code>.
</p>

<h2>
	كيفية إضافة الارتباطات التشعبية إلى صفحة الويب
</h2>

<p>
	يمكن إضافة الارتباطات التشعبية Hyperlinks إلى النص أو الصور باستخدام <a href="https://wiki.hsoub.com/HTML/a" rel="external">العنصر &lt;a&gt;</a>، والذي يتطلب استخدام <a href="https://wiki.hsoub.com/HTML/a#href" rel="external">السمة href </a>لتحديد الارتباط. ويستخدم هذا العنصر على النحو التالي:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_7712_12" style=""><span class="tag">&lt;a</span><span class="pln"> </span><span class="atn">href</span><span class="pun">=</span><span class="atv">"www.DestinationLink.com"</span><span class="tag">&gt;</span><span class="pln">The text you want to link</span><span class="tag">&lt;/a&gt;</span></pre>

<p>
	ولتجربة ذلك عمليًا انتقل إلى ملف index.html وعدّل نموذج النص المميز برابط حقيقي مثل: <a href="https://academy.hsoub.com" ipsnoembed="false" rel="external">https://academy.hsoub.com</a> ثم انسخ التعليمة التالية:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_7712_14" style=""><span class="tag">&lt;a</span><span class="pln"> </span><span class="atn">href</span><span class="pun">=</span><span class="atv">"https://academy.hsoub.com/"</span><span class="tag">&gt;</span><span class="pln">The text you want to link</span><span class="tag">&lt;/a&gt;</span></pre>

<p>
	يجب أن تظهر النتيجة في صفحة الويب كما توضح لقطة الصورة التالية:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="PNG" data-fileid="118474" href="https://academy.hsoub.com/uploads/monthly_2023_02/106291123_01_.PNG.b00d52de8df38af715746d4ed752755e.PNG" rel=""><img alt="ظهور النتيجة في صفحة الويب" class="ipsImage ipsImage_thumbnailed" data-fileid="118474" data-ratio="54.57" data-unique="936i79p2s" style="width: 700px; height: auto;" width="700" src="https://academy.hsoub.com/uploads/monthly_2023_02/2038123371_01_.thumb.PNG.36a87c86845618e6cd16aa24e98d17cf.PNG"> </a>
</p>

<p>
	يمكنك أيضًا إضافة ارتباط تشعبي إلى الصور بالطريقة التالية:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_7712_17" style=""><span class="tag">&lt;a</span><span class="pln"> </span><span class="atn">href</span><span class="pun">=</span><span class="atv">"https://www.digitalocean.com/community"</span><span class="tag">&gt;</span><span class="pln">The text you want to link
</span><span class="tag">&lt;img</span><span class="pln"> </span><span class="atn">src</span><span class="pun">=</span><span class="atv">"https://html.sammy-codes.com/images/small-profile.jpeg"</span><span class="tag">&gt;</span><span class="pln">
</span><span class="tag">&lt;/a&gt;</span></pre>

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

<h2>
	طريقة عمل عنصر تقسيم المحتوى <code>div</code> في لغة HTML
</h2>

<p>
	يعمل عنصر تقسيم محتوى <code><a href="https://wiki.hsoub.com/HTML/div" rel="external">&lt;div&gt;</a></code> في لغة HTML كحاوية لتنظيم <a href="https://academy.hsoub.com/devops/servers/%D8%A7%D9%84%D9%81%D8%B1%D9%82-%D8%A8%D9%8A%D9%86-%D8%B5%D9%81%D8%AD%D8%A9-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-%D9%88%D9%85%D9%88%D9%82%D8%B9-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-%D9%88%D8%AE%D8%A7%D8%AF%D9%85-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-%D9%88%D9%85%D8%AD%D8%B1%D9%83-%D8%A7%D9%84%D8%A8%D8%AD%D8%AB-r572/" rel="">صفحة الويب</a> وتقسيمها إلى مكونات منفصلة لكل منها تصميم مخصص.
</p>

<p>
	عمومًا، إن لعنصر <code>&lt;div&gt;</code> تأثير ضئيل على تخطيط صفحة الويب، وعادةً ما يسند إليه سمات لضبط حجمها أو لونها أو موضعها. وفي الواقع يستخدم عنصر <code>&lt;div&gt;</code> كعنصر أساسي من عناصر <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>، ولكن في هذا المقال سنركز على كيفية عمل عناصر <code>&lt;div&gt;</code> من خلال تصميمها مباشرةً في مستند HTML.
</p>

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

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_7712_22" style=""><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">style</span><span class="pun">=</span><span class="atv">"</span><span class="kwd">property</span><span class="pun">:</span><span class="pln"> value</span><span class="pun">;</span><span class="pln"> </span><span class="kwd">property</span><span class="pun">:</span><span class="pln"> value</span><span class="pun">;</span><span class="atv">"</span><span class="tag">&gt;&lt;/div&gt;</span></pre>

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

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_7712_24" style=""><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">style</span><span class="pun">=</span><span class="atv">"</span><span class="kwd">width</span><span class="pun">:</span><span class="lit">300px</span><span class="pun">;</span><span class="pln"> </span><span class="kwd">height</span><span class="pun">:</span><span class="lit">200px</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="atv">"</span><span class="tag">&gt;</span><span class="pln">
</span><span class="tag">&lt;/div&gt;</span></pre>

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

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="PNG" data-fileid="118475" href="https://academy.hsoub.com/uploads/monthly_2023_02/1824395608_02_.PNG.889f24fc8bb65dbcfa66f7f0ceea34e8.PNG" rel=""><img alt="طريقة عمل عنصر تقسيم المحتوى div في لغة HTML" class="ipsImage ipsImage_thumbnailed" data-fileid="118475" data-ratio="41.29" data-unique="vv9bi373b" style="width: 700px; height: auto;" width="700" src="https://academy.hsoub.com/uploads/monthly_2023_02/283775023_02_.thumb.PNG.594584c2741adea09e1f3d5a8d888c7a.PNG"> </a>
</p>

<p>
	يمكنك إضافة محتوى نصي إلى العنصر <code>&lt;div&gt;</code> من خلال إضافة المحتوى بين وسوم الفتح والإغلاق. كما يوضح المثال التالي:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_7712_27" style=""><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">style</span><span class="pun">=</span><span class="atv">"</span><span class="kwd">width</span><span class="pun">:</span><span class="lit">300px</span><span class="pun">;</span><span class="pln"> </span><span class="kwd">height</span><span class="pun">:</span><span class="lit">300px</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="atv">"</span><span class="tag">&gt;</span><span class="pln">
  This is text inside a div.
</span><span class="tag">&lt;/div&gt;</span></pre>

<p>
	وعند حفظ الملف وإعادة تحميله في المتصفح ستحصل على النتيجة التالية:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="PNG" data-fileid="118476" href="https://academy.hsoub.com/uploads/monthly_2023_02/1757512070_03_.PNG.f01bb29fd3e34afb4e12a0f8376c65c6.PNG" rel=""><img alt="صندوق محتوى طريقة عمل عنصر تقسيم المحتوى div في لغة HTML" class="ipsImage ipsImage_thumbnailed" data-fileid="118476" data-ratio="44.29" data-unique="w6zc8niam" style="width: 700px; height: auto;" width="900" src="https://academy.hsoub.com/uploads/monthly_2023_02/504585727_03_.thumb.PNG.a5794d36eac9a79566ed1a71c66bb563.PNG"></a>
</p>

<p>
	تسمح لك لغة HTML بوضع حاويات <code>&lt;div&gt;</code> داخل حاويات <code>&lt;div&gt;</code> أخرى. في المثال التالي سنضيف حاوية صفراء داخل الحاوية الحمراء التي أنشأناها في المثال السابق:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_7712_31" style=""><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">style</span><span class="pun">=</span><span class="atv">"</span><span class="kwd">width</span><span class="pun">:</span><span class="lit">300px</span><span class="pun">;</span><span class="pln"> </span><span class="kwd">height</span><span class="pun">:</span><span class="lit">300px</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="atv">"</span><span class="tag">&gt;</span><span class="pln">
  </span><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">style</span><span class="pun">=</span><span class="atv">"</span><span class="kwd">width</span><span class="pun">:</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="lit">100px</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="atv">"</span><span class="tag">&gt;</span><span class="pln">
  </span><span class="tag">&lt;/div&gt;</span><span class="pln"> 
</span><span class="tag">&lt;/div&gt;</span></pre>

<p>
	وعند حفظ الملف وإعادة تحميله سنحصل على الصفحة التالية:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="PNG" data-fileid="118477" href="https://academy.hsoub.com/uploads/monthly_2023_02/491489311_04_.PNG.cec13aeb91d06ee7a88219f0c0707f3b.PNG" rel=""><img alt="طريقة عمل عنصر تقسيم المحتوى div أحمر وأصفر في لغة HTML" class="ipsImage ipsImage_thumbnailed" data-fileid="118477" data-ratio="44.57" data-unique="cvia4yw6g" style="width: 700px; height: 312px;" width="700" src="https://academy.hsoub.com/uploads/monthly_2023_02/907142913_04_.thumb.PNG.8245ef8968320422b0ae92269f8947cd.PNG"> </a>
</p>

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

<p>
	انسخ التعليمات التالية والصقها في ملف المشروع:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_7712_35" style=""><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">style</span><span class="pun">=</span><span class="atv">"</span><span class="kwd">width</span><span class="pun">:</span><span class="lit">300px</span><span class="pun">;</span><span class="kwd">height</span><span class="pun">:</span><span class="lit">300px</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="atv">"</span><span class="tag">&gt;</span><span class="pln">
  </span><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">style</span><span class="pun">=</span><span class="atv">"</span><span class="kwd">width</span><span class="pun">:</span><span class="lit">100px</span><span class="pun">;</span><span class="kwd">height</span><span class="pun">:</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">yellow</span><span class="pun">;</span><span class="atv">"</span><span class="tag">&gt;</span><span class="pln">
  </span><span class="tag">&lt;/div&gt;</span><span class="pln">
</span><span class="tag">&lt;/div&gt;</span><span class="pln">
</span><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">style</span><span class="pun">=</span><span class="atv">"</span><span class="kwd">width</span><span class="pun">:</span><span class="lit">100px</span><span class="pun">;</span><span class="kwd">height</span><span class="pun">:</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">blue</span><span class="pun">;</span><span class="atv">"</span><span class="tag">&gt;</span><span class="pln">
</span><span class="tag">&lt;/div&gt;</span></pre>

<p>
	احفظ الملف وأعد تحميله في المتصفح وستحصل على النتيجة التالية:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="PNG" data-fileid="118478" href="https://academy.hsoub.com/uploads/monthly_2023_02/709465872_05.PNG.3858a5b3f98c6baafaac42e236d96f64.PNG" rel=""><img alt="طريقة عمل عنصر تقسيم المحتوى div أحمر وأصفر وأزرق في لغة HTML" class="ipsImage ipsImage_thumbnailed" data-fileid="118478" data-ratio="41.71" data-unique="iyf3j0q3r" style="width: 700px; height: auto;" width="900" src="https://academy.hsoub.com/uploads/monthly_2023_02/1566089206_05.thumb.PNG.0d9b17aef88cddf014abd838607a74c0.PNG"></a>
</p>

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

<h3>
	كيفية تعديل الألوان في عناصر HTML
</h3>

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

<p>
	فيما يلي سنوضح كيفية تغيير لون النص وحدود الصور وعناصر <code>&lt;div&gt;</code> باستخدام أسماء الألوان.
</p>

<p>
	يمكن تعديل لون عناصر النص مثل <code>&lt;h1&gt;</code> أو <code><a href="https://wiki.hsoub.com/HTML/p" rel="external">&lt;p&gt;</a></code> باستخدام السمة style والخاصية color. وتضاف هذه الخصائص كما هو موضح في المثال التالي:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_7712_38" style=""><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="atv">"</span><span class="tag">&gt;</span><span class="pln">This is blue text.</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="118479" href="https://academy.hsoub.com/uploads/monthly_2023_02/1246460228_06_.PNG.e07f5b61062ab544e237393cf2dda2e2.PNG" rel=""><img alt="كيفية تعديل الألوان في عناصر HTML" class="ipsImage ipsImage_thumbnailed" data-fileid="118479" data-ratio="30.71" data-unique="5emeanoxm" style="width: 700px; height: auto;" width="700" src="https://academy.hsoub.com/uploads/monthly_2023_02/1488316495_06_.thumb.PNG.af5bf6a9e8a70e275c1fd72afdda4d27.PNG"> </a>
</p>

<p>
	بالنسبة للصور يمكن تعديل لون حدود الصورة باستخدام السمة style والخاصية border.
</p>

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

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_7712_44" style=""><span class="tag">&lt;img</span><span class="pln"> </span><span class="atn">src</span><span class="pun">=</span><span class="atv">"https://html.sammy-codes.com/images/small-profile.jpeg"</span><span class="pln"> </span><span class="atn">style</span><span class="pun">=</span><span class="atv">"</span><span class="kwd">border</span><span class="pun">:</span><span class="pln"> </span><span class="lit">10px</span><span class="pln"> solid green</span><span class="atv">"</span><span class="tag">/&gt;</span></pre>

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

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="PNG" data-fileid="118480" href="https://academy.hsoub.com/uploads/monthly_2023_02/570995502_07___.PNG.35e17318700e609186a0c82d40bb1fb4.PNG" rel=""><img alt="نتائج تعديل الألوان في عناصر HTML" class="ipsImage ipsImage_thumbnailed" data-fileid="118480" data-ratio="40.86" data-unique="u5is5ncdl" style="width: 700px; height: auto;" width="700" src="https://academy.hsoub.com/uploads/monthly_2023_02/1348471901_07___.thumb.PNG.955a3fc4c0862fb419996a7134ebd9f9.PNG"> </a>
</p>

<p>
	يمكن تعديل لون الحاوية <code>&lt;div&gt;</code> باستخدام السمة style والخاصية background-color، كما يوضح المثال التالي:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_7712_48" style=""><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">style</span><span class="pun">=</span><span class="atv">"</span><span class="kwd">width</span><span class="pun">:</span><span class="lit">200px</span><span class="pun">;</span><span class="kwd">height</span><span class="pun">:</span><span class="lit">200px</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="atv">"</span><span class="tag">&gt;&lt;/div&gt;</span></pre>

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

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="PNG" data-fileid="118481" href="https://academy.hsoub.com/uploads/monthly_2023_02/194170747_08_.PNG.1cb79f30b4a248874baea78b0eb6208a.PNG" rel=""><img alt="تعديل الألوان في عناصر HTML" class="ipsImage ipsImage_thumbnailed" data-fileid="118481" data-ratio="49.29" data-unique="tnqfp112f" style="width: 700px; height: auto;" width="700" src="https://academy.hsoub.com/uploads/monthly_2023_02/452122792_08_.thumb.PNG.8cc112076e84044f5bde56b326924db9.PNG"> </a>
</p>

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

<div>
	باستخدام أسماء الألوان التالية: black, white, gray, silver, purple, red, fuchsia, lime, olive, green, yellow, teal, navy, blue, maroon, aqua.
	<p>
		يمكنك تحديد قيمة اللون من خلال القيم السداسية للون. يتكون اللون من 6 أرقام أبجدية رقمية يسبقها الرمز #. مثل: #0000FF أزرق، #40E0D0 فيروزي، #C0C0C0 فضي.
	</p>

	<p>
		في هذه السلسلة التعليمية سنستمر في استخدام أسماء الألوان.
	</p>

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

	<p>
		ترجمة -وبتصرّف- للأجزاء من السابع وحتى العاشر من سلسلة المقالات <a href="https://www.digitalocean.com/community/tutorial_series/how-to-build-a-website-with-html" rel="external nofollow">How To Build a Website with HTML</a>.
	</p>

	<h2>
		اقرأ أيضًا
	</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/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="">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-%D9%84%D8%BA%D8%A9-html-r1687/" rel="">أساسيات لغة HTML</a>
		</li>
	</ul>
</div>
]]></description><guid isPermaLink="false">1896</guid><pubDate>Sat, 18 Feb 2023 16:00:00 +0000</pubDate></item><item><title>&#x628;&#x639;&#x636; &#x627;&#x644;&#x639;&#x646;&#x627;&#x635;&#x631; &#x648;&#x627;&#x644;&#x645;&#x641;&#x627;&#x647;&#x64A;&#x645; &#x627;&#x644;&#x645;&#x647;&#x645;&#x629; &#x641;&#x64A; &#x644;&#x63A;&#x629; HTML</title><link>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/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2023_02/1919511790_-------HTML.png.a743c122e57d7141b36cddea518dc6fa.png" /></p>
<p>
	تضم لغة HTML مجموعة كبيرة من العناصر التي تساعدنا على إضافة المحتوى إلى صفحة الويب وتنسيقه. ومن الضروري فهم طريقة عمل هذه العناصر وما هي الميزات والسمات التي يمكن استخدامها مع كل عنصر. في المقال التالي سنوضح الفرق بين عناصر Inline-level وعناصر Block-level، وكيفية ترتيب هذه العناصر في ملف المشروع، وكيفية إضافة السمات والخصائص الأساسية.
</p>

<h2>
	كيفية استخدام عناصر Inline-level وعناصر Block-level في HTML
</h2>

<p>
	عند ترتيب العناصر في ملف HTML، من المهم أن تدرك كيف تتوضع هذه العناصر في <a href="https://academy.hsoub.com/devops/servers/%D8%A7%D9%84%D9%81%D8%B1%D9%82-%D8%A8%D9%8A%D9%86-%D8%B5%D9%81%D8%AD%D8%A9-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-%D9%88%D9%85%D9%88%D9%82%D8%B9-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-%D9%88%D8%AE%D8%A7%D8%AF%D9%85-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-%D9%88%D9%85%D8%AD%D8%B1%D9%83-%D8%A7%D9%84%D8%A8%D8%AD%D8%AB-r572/" rel="">صفحة الويب</a>، وما هي المساحة التي تشغلها. يمكن أن تشغل عناصر معينة مساحة على صفحة الويب أكبر من حجم المحتوى الذي تتضمنه. سيساعدك فهم سلوك أنواع العناصر المختلفة على توقع كيفية تأثيرها على موضع العناصر الأخرى على الصفحة.
</p>

<p>
	عمومًا يوجد نوعين مختلفين من عناصر HTML وهي عناصر Inline-level وعناصر Block-level. وكل نوع يشغل مساحة محددة من صفحة الويب. فيما يلي سنوضح كيف تحديد الإعدادات الافتراضية لهذه العناصر موضعها على صفحة الويب.
</p>

<h3>
	عناصر Inline-level
</h3>

<p>
	عناصر Inline-level هي العناصر التي يُحدد عرضها الأفقي وفقًا لعرض المحتوى الذي تتضمنه. على سبيل المثال العناصر <code><a href="https://wiki.hsoub.com/HTML/strong" rel="external">&lt;strong&gt;</a></code> و<code><a href="https://wiki.hsoub.com/HTML/em" rel="external">&lt;em&gt;</a></code> التي تحدثنا عنها في الفقرات السابقة.
</p>

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

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

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="gif" data-fileid="118457" href="https://academy.hsoub.com/uploads/monthly_2023_02/01inline_level.gif.b957e2328a9784c4c572230095734726.gif" rel=""><img alt="عناصر Inline-level" class="ipsImage ipsImage_thumbnailed" data-fileid="118457" data-ratio="65.54" data-unique="tkm11r9fb" style="width: 650px; height: auto;" width="900" src="https://academy.hsoub.com/uploads/monthly_2023_02/01inline_level.thumb.gif.882c3f37defac7b18046b90d8857b659.gif"></a>
</p>

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

<p>
	سنعود الآن إلى ملف index.html وسنضيف <a href="https://wiki.hsoub.com/HTML/br" rel="external">العنصر &lt;br&gt;</a> بين سطري التعليمات.
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_291_15" style=""><span class="tag">&lt;strong&gt;</span><span class="pln">My strong text</span><span class="tag">&lt;/strong&gt;</span><span class="pln">
</span><span class="tag">&lt;br&gt;</span><span class="pln">
</span><span class="tag">&lt;em&gt;</span><span class="pln">My emphasized text</span><span class="tag">&lt;/em&gt;</span></pre>

<p>
	لاحظ أن الوسم <code>&lt;br&gt;</code> لا يحتاج إلى وسم إغلاق. احفظ المستند وأعد تحميله في متصفحك للتحقق من النتائج. يجب أن تظهر الصفحة على النحو التالي:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="PNG" data-fileid="118458" href="https://academy.hsoub.com/uploads/monthly_2023_02/183218027_02_.PNG.fda1c6f44fab7d04be9089a46f7dfea0.PNG" rel=""><img alt="نتائج الصفحة عند استخدام &lt;br&gt;" class="ipsImage ipsImage_thumbnailed" data-fileid="118458" data-ratio="39.43" data-unique="3nx9wyzes" style="width: 700px; height: 276px;" width="900" src="https://academy.hsoub.com/uploads/monthly_2023_02/1670900344_02_.thumb.PNG.d7b53d958cd61ebc4f2e09952b2cf0cf.PNG"></a>
</p>

<p>
	ستلاحظ فصل العبارتين في سطرين متتاليين بسبب استخدام عنصر فاصل السطر <code>&lt;br&gt;</code>. للتحقق من حجم العناصر استخدم أداة مطوري الويب في المتصفح Firefox، ستلاحظ أن عرض كل عنصر من عناصر النص لا يزال يتحدد من خلال عرض محتوى النص. إذا كنت تستخدم Firefox Web Developer Inspector للتحقق من حجم العناصر، فيمكنك تأكيد أن عرض كل عنصر من عناصر النص لا يزال يتحدد من خلال عرض محتوى النص:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="gif" data-fileid="118459" href="https://academy.hsoub.com/uploads/monthly_2023_02/03inlinelevel2.gif.d1845277574d027fdc7983c36c772764.gif" rel=""><img alt="استخدام عناصر Inline-level في html" class="ipsImage ipsImage_thumbnailed" data-fileid="118459" data-ratio="65.54" data-unique="7i7iyo6v0" style="width: 650px; height: auto;" width="900" src="https://academy.hsoub.com/uploads/monthly_2023_02/03inlinelevel2.thumb.gif.84d461346b91bbe71e18b58d4188feb3.gif"></a>
</p>

<h3>
	عناصر Block-level
</h3>

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

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

<p>
	سنوضح هذه الفكرة من خلال مثال عملي. انسخ التعليمات التالية والصقها في ملف index.html.
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_291_23" style=""><span class="tag">&lt;strong&gt;</span><span class="pln">My strong text</span><span class="tag">&lt;/strong&gt;</span><span class="pln">
</span><span class="tag">&lt;br&gt;</span><span class="pln">
</span><span class="tag">&lt;em&gt;</span><span class="pln">My emphasized text</span><span class="tag">&lt;/em&gt;</span><span class="pln">
</span><span class="tag">&lt;h1&gt;</span><span class="pln">Heading 1</span><span class="tag">&lt;/h1&gt;</span><span class="pln">
</span><span class="tag">&lt;h2&gt;</span><span class="pln">Heading 2</span><span class="tag">&lt;/h2&gt;</span><span class="pln">
</span><span class="tag">&lt;h3&gt;</span><span class="pln">Heading 3</span><span class="tag">&lt;/h3&gt;</span><span class="pln">
</span><span class="tag">&lt;h4&gt;</span><span class="pln">Heading 4</span><span class="tag">&lt;/h4&gt;</span><span class="pln">
</span><span class="tag">&lt;h5&gt;</span><span class="pln">Heading 5</span><span class="tag">&lt;/h5&gt;</span><span class="pln">
</span><span class="tag">&lt;h6&gt;</span><span class="pln">Heading 6</span><span class="tag">&lt;/h6&gt;</span></pre>

<p>
	ثم احفظ الملف وأعد تحميله في المتصفح، وستظهر الصفحة التالية:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="PNG" data-fileid="118460" href="https://academy.hsoub.com/uploads/monthly_2023_02/1858100361_04.PNG.2dc93a94fb94ff0052f1684d0689443e.PNG" rel=""><img alt="استخدام عناصر Block-level في HTML" class="ipsImage ipsImage_thumbnailed" data-fileid="118460" data-ratio="38.00" data-unique="5i0u4ea2m" style="width: 650px; height: auto;" width="900" src="https://academy.hsoub.com/uploads/monthly_2023_02/1876386067_04.thumb.PNG.ba995b6a0f1f20a74313a7373e9f998c.PNG"></a>
</p>

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

<p>
	تدفع عناصر Block-level عناصر Inline-level إلى السطر التالي، حتى لو كتبت عناصر HTML على نفس السطر في الملف. وللتأكد من ذلك سنكتب عنصر Block-level وعنصر Inline-level على نفس السطر. وفقًا لما يلي:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_291_26" style=""><span class="tag">&lt;strong&gt;</span><span class="pln">My strong text</span><span class="tag">&lt;/strong&gt;&lt;h1&gt;</span><span class="pln">My heading</span><span class="tag">&lt;/h1&gt;&lt;em&gt;</span><span class="pln">My emphasized text</span><span class="tag">&lt;/a&gt;</span></pre>

<p>
	وستظهر النتيجة في صفحة الويب كما توضح لقطة الشاشة التالية:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="gif" data-fileid="118461" href="https://academy.hsoub.com/uploads/monthly_2023_02/05block_level.gif.53735a56dcb980da2ccc1d2f673bcc3d.gif" rel=""><img alt="عرض صفحة الويب عند استخدام عناصر Block-level في HTML" class="ipsImage ipsImage_thumbnailed" data-fileid="118461" data-ratio="68.46" data-unique="igfyshjp6" style="width: 650px; height: auto;" width="900" src="https://academy.hsoub.com/uploads/monthly_2023_02/05block_level.thumb.gif.13de5421594400f4808cd838e3517509.gif"></a>
</p>

<p>
	لاحظ أن عنصر العنوان <code>&lt;h1&gt;</code> بدأ في سطر جديد ودفع عنصر النص التالي إلى سطر جديد، على الرغم من كتابة جميع العناصر على نفس السطر.
</p>

<p>
	الآن أصبح لديك فهم لكيفية وضع عناصر Block-level وعناصر Inline-level وكيفية تأثيرها على موضع العناصر القريبة.
</p>

<h2>
	كيفية دمج عناصر HTML متعددة
</h2>

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

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

<p>
	انسخ هذا المقتطف والصقه داخل ملف index.html:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_291_29" style=""><span class="tag">&lt;strong&gt;</span><span class="pln">My bold text and </span><span class="tag">&lt;em&gt;</span><span class="pln">my bold and emphasized text</span><span class="tag">&lt;/em&gt;&lt;/strong&gt;</span></pre>

<p>
	احفظ الملف وأعد تحميله في المتصفح، وستظهر الصفحة التالية:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="PNG" data-fileid="118462" href="https://academy.hsoub.com/uploads/monthly_2023_02/846316742_06_.PNG.e757ac6c55354de06bd32cc55f3d6109.PNG" rel=""><img alt="كيفية دمج عناصر HTML متعددة" class="ipsImage ipsImage_thumbnailed" data-fileid="118462" data-ratio="42.71" data-unique="u38ef3i84" style="width: 700px; height: auto;" width="900" src="https://academy.hsoub.com/uploads/monthly_2023_02/197204144_06_.thumb.PNG.4b658fe5b8d7aed516a5d61154698594.PNG"></a>
</p>

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

<p>
	في المثال التالي أغلق الوسم <code>&lt;em&gt;</code> أولًا لأنه كان آخر وسم يُفتح. وأغلق الوسم <code>&lt;strong&gt;</code> أخيرًا لأنه كان أول وسم يُفتح.
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_291_32" style=""><span class="pln">This sentence contains HTML elements that are </span><span class="tag">&lt;strong&gt;&lt;em&gt;</span><span class="pln">nested according to best practices</span><span class="tag">&lt;/em&gt;&lt;/strong&gt;</span></pre>

<p>
	والمثال التالي يوضح كيفية عمل عناصر HTML غير المتداخلة، حيث أغلق الوسم <code>&lt;strong&gt;</code> قبل الوسم <code>&lt;em&gt;</code>:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_291_34" style=""><span class="pln">This sentence contains HTML elements that are </span><span class="tag">&lt;strong&gt;&lt;em&gt;</span><span class="pln">not nested according to best practices</span><span class="tag">&lt;/strong&gt;&lt;/em&gt;</span></pre>

<h2>
	كيفية استخدام سمات HTML
</h2>

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

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

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_291_36" style=""><span class="tag">&lt;element</span><span class="pln"> </span><span class="atn">attribute</span><span class="pun">=</span><span class="atv">"property:value;"</span><span class="tag">&gt;</span></pre>

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

<h3>
	كيفية استخدام السمة Style
</h3>

<p>
	يمكنك تغيير خصائص متعددة لعنصر <code>&lt;h1&gt;</code> باستخدام السمة <code>style</code>. امسح محتويات الملف index.html واستبدلها بالسطر البرمجي التالي:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_291_38" style=""><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">font-size</span><span class="pun">:</span><span class="lit">40px</span><span class="pun">;</span><span class="kwd">color</span><span class="pun">:</span><span class="pln">green</span><span class="pun">;</span><span class="atv">"</span><span class="tag">&gt;</span><span class="pln">This text is 40 pixels and green.</span><span class="tag">&lt;/h1&gt;</span></pre>

<p>
	قبل تحميل الملف في المتصفح، سنشرح كل جزء من أجزاء عناصر HTML:
</p>

<ul>
	<li>
		الوسم h1 هو وسم HTML يحول النص إلى عنوان كبير الحجم.
	</li>
	<li>
		style: وهي سمة يمكن أن تأخذ مجموعة متنوعة من الخصائص المختلفة.
	</li>
	<li>
		font-size: هي الخاصية الأولى التي نحددها للسمة style.
	</li>
	<li>
		40px: هي قيمة حجم الخط للخاصية font-size وهي تحول حجم محتوى نص العنصر إلى 40 بكسل.
	</li>
	<li>
		color: هو الخاصية الثانية التي نحددها للسمة style.
	</li>
	<li>
		green: هو قيمة الخاصية color وهي تحدد لون محتوى النص إلى اللون الأخضر.
	</li>
</ul>

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

<p style="text-align: center;">
	<img alt="كيفية استخدام السمة Style في HTML" class="ipsImage ipsImage_thumbnailed" data-fileid="118463" data-ratio="14.00" data-unique="xnmxcuj0u" style="width: 500px; height: auto;" width="822" src="https://academy.hsoub.com/uploads/monthly_2023_02/1715065644_07_.PNG.c29350306a04bb83d55b221a1afe152b.PNG">
</p>

<h2>
	كيفية استخدام HTML لإضافة الصور على موقع الويب
</h2>

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

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_291_44" style=""><span class="tag">&lt;img</span><span class="pln"> </span><span class="atn">src</span><span class="pun">=</span><span class="atv">"Image_Location"</span><span class="tag">&gt;</span></pre>

<p>
	لاحظ أن العنصر <code>&lt;img&gt;</code> لا يستخدم علامة إغلاق <code>&lt;img/&gt;</code>.
</p>

<p>
	لتجربة مثال عملي حول إضافة الصور إلى صفحة موقع الويب. حمّل صورة Sammy the Shark، واحفظها في مجلد المشروع الذي نعمل عليه في هذه السلسلة html-Practice.
</p>

<p>
	<strong>ملاحظة</strong>: لتحميل صورة Sammy the Shark انقر على <a href="https://html.sammy-codes.com/images/small-profile.jpeg" rel="external nofollow">هذا الرابط</a> ثم انقر بزر الفأرة الأيمن على الصورة إذا كنت تستخدم نظام ويندوز أو اضغط على CTRL+Left إذا كنت تستخدم نظام Mac، ثم حدد "حفظ باسم"، واحفظها باسم small-profile.jpeg في مجلد مشروعك.
</p>

<p>
	افتح الملف index.html في محرر النصوص وامسح المحتوى الموجود واستبدله بـ:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_291_47" style=""><span class="tag">&lt;img</span><span class="pln"> </span><span class="atn">src</span><span class="pun">=</span><span class="atv">"Image_Location"</span><span class="tag">&gt;</span></pre>

<p>
	ثم انسخ مسار ملف الصورة واستبدل Image_Location في التعليمة السابقة بمسار موقع الصورة المحفوظة.
</p>

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

<p>
	نظرًا لأن هدفنا النهائي هو إنشاء موقع ويب قابل للنشر فإننا سنستخدم المسارات النسبية لإضافة عناصر <code>&lt;img&gt;</code> إلى الأمثلة.
</p>

<p>
	الخطوة الأخيرة هي حفظ ملف index.html وإعادة تحميه في المتصفح. وستظهر الصفحة التالية:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="PNG" data-fileid="118464" href="https://academy.hsoub.com/uploads/monthly_2023_02/685369337_08_.PNG.d08fd3fffc1e8f15a92a6a9e70d7a85c.PNG" rel=""><img alt="كيفية استخدام HTML لإضافة الصور على موقع الويب" class="ipsImage ipsImage_thumbnailed" data-fileid="118464" data-ratio="43.43" data-unique="ecdxr821h" style="width: 700px; height: auto;" width="900" src="https://academy.hsoub.com/uploads/monthly_2023_02/445841205_08_.thumb.PNG.78a9e950e64debd10e0dffb99bc09885.PNG"></a>
</p>

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

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_291_51" style=""><span class="tag">&lt;img</span><span class="pln"> </span><span class="atn">src</span><span class="pun">=</span><span class="atv">"https://html.sammy-codes.com/images/small-profile.jpeg"</span><span class="tag">&gt;</span></pre>

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

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

<h3>
	إضافة نص بديل لتسهيل الوصول إلى الصورة
</h3>

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

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

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_291_53" style=""><span class="tag">&lt;img</span><span class="pln"> </span><span class="atn">src</span><span class="pun">=</span><span class="atv">"https://html.sammy-codes.com/images/small-profile.jpeg"</span><span class="pln"> </span><span class="atn">alt</span><span class="pun">=</span><span class="atv">"Digital Ocean’s mascot, a blue smiling shark."</span><span class="pln"> </span><span class="tag">&gt;</span></pre>

<p>
	عند إضافة نص بديل، ضع في حسبانك ما يلي:
</p>

<ul>
	<li>
		بالنسبة للصور التي تحتوي على معلومات يجب أن يصف النص البديل موضوع الصورة بطريقة واضحة ودقيقة، وبدون الرجوع إلى الصورة نفسها. مثلًا لا تكتب "صورة قرش في المحيط" وإنما "قرش في المحيط".
	</li>
	<li>
		بالنسبة لصور الزخرفة يجب استخدام السمة <code>alt</code> ولكن بدون إضافة أي قيمة. أي بالطريقة التالية:
	</li>
</ul>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_291_55" style=""><span class="tag">&lt;img</span><span class="pln"> </span><span class="atn">src</span><span class="pun">=</span><span class="atv">"images/decorative_image.jpeg"</span><span class="pln"> </span><span class="atn">alt</span><span class="pun">=</span><span class="atv">""</span><span class="tag">&gt;</span></pre>

<p>
	وهذا يؤدي إلى تحسين تجربة قارئ الشاشة.
</p>

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

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

<p>
	ترجمة -وبتصرّف- للأجزاء من الثالث وحتى السادس من سلسلة المقالات <a href="https://www.digitalocean.com/community/tutorial_series/how-to-build-a-website-with-html" rel="external nofollow">How To Build a Website with HTML</a>.
</p>

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

<ul>
	<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/html/%D9%85%D9%83%D9%88%D9%86%D8%A7%D8%AA-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-%D8%B9%D9%86%D8%A7%D8%B5%D8%B1-html-%D8%A7%D9%84%D9%85%D8%AE%D8%B5%D8%B5%D8%A9-%D9%88%D9%82%D9%88%D8%A7%D9%84%D8%A8%D9%87%D8%A7-r1352/" rel="">مكونات الويب: عناصر HTML المخصصة وقوالبها</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/html/%D8%A7%D9%84%D8%AF%D9%84%D8%A7%D9%84%D8%A7%D8%AA-%D8%A7%D9%84%D9%85%D8%B6%D9%85%D9%86%D8%A9-%D9%84%D8%B9%D9%86%D8%A7%D8%B5%D8%B1-%D8%B5%D9%81%D8%AD%D8%A9-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-%D9%88%D8%AF%D9%88%D8%B1%D9%87%D8%A7-%D9%81%D9%8A-%D8%AA%D8%B9%D8%B2%D9%8A%D8%B2-%D8%B3%D9%87%D9%88%D9%84%D8%A9-%D8%A7%D9%84%D9%88%D8%B5%D9%88%D9%84-r1325/" rel="">الدلالات المضمنة لعناصر صفحة الويب ودورها في تعزيز سهولة الوصول</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/html/%D9%87%D9%8A%D9%83%D9%84%D8%A9-%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-%D9%84%D8%BA%D8%A9-html-r1754/" rel="">هيكلة النصوص باستخدام لغة HTML</a>
	</li>
</ul>
]]></description><guid isPermaLink="false">1895</guid><pubDate>Mon, 13 Feb 2023 16:00:00 +0000</pubDate></item><item><title>&#x623;&#x633;&#x627;&#x633;&#x64A;&#x627;&#x62A; &#x625;&#x646;&#x634;&#x627;&#x621; &#x645;&#x648;&#x642;&#x639; &#x648;&#x64A;&#x628; &#x628;&#x627;&#x633;&#x62A;&#x62E;&#x62F;&#x627;&#x645; &#x62A;&#x639;&#x644;&#x64A;&#x645;&#x627;&#x62A; HTML</title><link>https://academy.hsoub.com/programming/html/%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A7%D8%AA-%D8%A5%D9%86%D8%B4%D8%A7%D8%A1-%D9%85%D9%88%D9%82%D8%B9-%D9%88%D9%8A%D8%A8-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D8%AA%D8%B9%D9%84%D9%8A%D9%85%D8%A7%D8%AA-html-r1894/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2023_02/1561752514_----HTML(1).png.881652511d71b1a2b86529b07ba17f07.png" /></p>
<p>
	تستخدم <span ipsnoautolink="true">لغة الترميز HTML</span> لإنشاء وتصميم مواقع الويب، وتساعد على وصف وتحديد محتويات صفحة الويب لبرامج التصفح.
</p>

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

<p>
	في نهاية هذه السلسلة، ستحصل على موقع ويب جاهز للنشر على الإنترنت ومعرفة أساسية بلغة HTML. ويعد تعلم كيفية استخدام HTML أساسًا قويًا لتعلم مهارات <a href="https://academy.hsoub.com/learn/front-end-web-development/" rel="">تطوير الواجهة الأمامية للويب مثل CSS</a> و<a href="https://academy.hsoub.com/learn/javascript-application-development/" rel="">JavaScript</a>.
</p>

<h2>
	كيفية إنشاء مشروع HTML جديد باستخدام محرر النصوص
</h2>

<p>
	لإنشاء موقع جديد سنحتاج إلى استخدام محرر نصوص. المحرر الذي سنستخدمه هو برنامج Visual Studio Code، وهو محرر نصوص مجاني متاح للاستخدام على <a href="https://academy.hsoub.com/apps/operating-systems/windows/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D9%86%D8%B8%D8%A7%D9%85-%D8%A7%D9%84%D8%AA%D8%B4%D8%BA%D9%8A%D9%84-%D9%88%D9%8A%D9%86%D8%AF%D9%88%D8%B2-11-%D9%88%D8%B7%D8%B1%D9%8A%D9%82%D8%A9-%D8%AA%D8%AB%D8%A8%D9%8A%D8%AA%D9%87-r704/" rel="">نظام التشغيل ويندوز</a> ولينكس وماك، ويمكنك استخدام أي محرر نصوص تفضله.
</p>

<p>
	بعد فتح محرر النصوص الذي تفضله سننشئ مشروعًا جديدًا ونسميه "html-Practice". بالتالي سينشئ البرنامج مجلدًا جديدًا بهذا الاسم، وسنستخدم هذا المجلد لتخزين جميع الملفات والمجلدات التي ننشئها في سياق هذه السلسلة.
</p>

<p>
	لإنشاء مجلد مشروع جديد في برنامج Visual Studio Code انتقل إلى قائمة "File" في القائمة العلوية، ستظهر قائمة منسدلة حدد خيار "Add folder to Workspace".
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="PNG" data-fileid="118448" href="https://academy.hsoub.com/uploads/monthly_2023_02/406254472_01__.PNG.6eca436d1570eea0c37b83644a205b44.PNG" rel=""><img alt="إنشاء مجلد مشروع جديد في برنامج Visual Studio Code" class="ipsImage ipsImage_thumbnailed" data-fileid="118448" data-ratio="47.86" data-unique="ryux75vhi" style="width: 700px; height: auto;" width="700" src="https://academy.hsoub.com/uploads/monthly_2023_02/1076300663_01__.thumb.PNG.b348381e9d09e2e3c181537d84316200.PNG"> </a>
</p>

<p>
	في النافذة الجديدة، انقر فوق زر "New Folder" وأنشئ مجلدًا جديدًا باسم html-Practice.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="PNG" data-fileid="118449" href="https://academy.hsoub.com/uploads/monthly_2023_02/979673297_02__.PNG.0052590d8e31b8ba4732fd1542ce46da.PNG" rel=""><img alt="طريقة إدراج مجلد المشروع" class="ipsImage ipsImage_thumbnailed" data-fileid="118449" data-ratio="49.43" data-unique="6iduu2608" style="width: 700px; height: auto;" width="900" src="https://academy.hsoub.com/uploads/monthly_2023_02/976339171_02__.thumb.PNG.6d47591861a2cc0af4614e37f18bbddd.PNG"></a>
</p>

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

<p>
	الخطوة التالية هي إنشاء ملف جديد وتسميته index.html داخل مجلد html-Practice. سنستخدم هذا الملف خلال هذه السلسلة. إذا كنت تستخدم برنامج Visual Studio Code، يمكنك إنشاء ملف جديد بالنقر على زر الفأرة الأيمن فوق اسم المجلد "html-Practice"، ثم تحديد خيار "new file".
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="PNG" data-fileid="118450" href="https://academy.hsoub.com/uploads/monthly_2023_02/541970497_03_.PNG.dfff82ce4c18a959ff6cd7be136f6d5f.PNG" rel=""><img alt="طريقة إنشاء ملف في  vs code" class="ipsImage ipsImage_thumbnailed" data-fileid="118450" data-ratio="52.00" data-unique="k1nqcb0uq" style="width: 700px; height: 364px;" width="900" src="https://academy.hsoub.com/uploads/monthly_2023_02/2025666288_03_.thumb.PNG.21ef1724a1c3c98d9f38fed86e40275a.PNG"></a>
</p>

<p>
	املأ الحقل الجديد باسم الملف مع إضافة اللاحقة "index.html"، وستلاحظ ظهور الملف الجديد تحت مجلد المشروع "html-Practice". سنستخدم هذا الملف في الدروس القادمة لكتابة تعليمات <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>

<h3>
	التصحيح واستكشاف أخطاء CSS وHTML
</h3>

<p>
	قبل أن نبدأ في دروس وتمارين HTML، سنقدم لك بعض الملاحظات الضرورية:
</p>

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

<h3>
	ملاحظة سريعة حول ميزات دعم HTML التلقائي
</h3>

<p>
	توفر بعض برامج تحرير النصوص (مثل محرر Visual Studio Code الذي نستخدمه في هذه السلسلة) دعمًا تلقائيًا لكتابة تعليمات HTML البرمجية. بالنسبة إلى Visual Studio Code، يتضمن هذا الدعم الاقتراحات الذكية والإكمال التلقائي.
</p>

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

<h2>
	كيفية عرض التعليمات البرمجية المصدرية لمستند HTML
</h2>

<p>
	تستخدم تعليمات <a href="https://wiki.hsoub.com/HTML" rel="external">لغة HTML</a> كإرشادات تُخبر المتصفح بكيفية عرض المحتوى في <a href="https://academy.hsoub.com/devops/servers/%D8%A7%D9%84%D9%81%D8%B1%D9%82-%D8%A8%D9%8A%D9%86-%D8%B5%D9%81%D8%AD%D8%A9-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-%D9%88%D9%85%D9%88%D9%82%D8%B9-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-%D9%88%D8%AE%D8%A7%D8%AF%D9%85-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-%D9%88%D9%85%D8%AD%D8%B1%D9%83-%D8%A7%D9%84%D8%A8%D8%AD%D8%AB-r572/" rel="">صفحة الويب</a>. على سبيل المثال يمكن أن تخبر تعليمات HTML المتصفح عن محتوى النص الذي تريد عرضه على أنه عنوان، ومحتوى النص الذي تريد عرضه على أنه فقرة عادية. تستخدم تعليمات HTML لإضافة الصور إلى صفحة الويب وتعيين روابط للنصوص أو الصور.
</p>

<p>
	تكتب تعليمات لغة HTML باستخدام الوسوم <code>&lt;&gt;</code>، ومعظم التعليمات تكتب على النحو التالي: <code>&lt;tagname&gt;</code>. تستخدم العديد من التعليمات وسم الفتح ووسم الإغلاق للالتفاف حول المحتوى الذي تريد تعديله.
</p>

<p>
	للتعرف على كيفية استخدام هذه الوسوم، سندرس أولًا هذا المقتطف من تعليمات HTML:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_6051_16" style=""><span class="tag">&lt;h1&gt;</span><span class="pln">Sammy's Sample HTML</span><span class="tag">&lt;/h1&gt;</span><span class="pln">
</span><span class="tag">&lt;p&gt;</span><span class="pln">This code is an example of how HTML is written.</span><span class="tag">&lt;/p&gt;</span><span class="pln">
</span><span class="tag">&lt;p&gt;</span><span class="pln">It uses HTML tags to structure the text.</span><span class="tag">&lt;/p&gt;</span><span class="pln">
</span><span class="tag">&lt;p&gt;</span><span class="pln">It uses HTML to add a </span><span class="tag">&lt;a</span><span class="pln"> </span><span class="atn">href</span><span class="pun">=</span><span class="atv">"digitalocean.com/community"</span><span class="tag">&gt;</span><span class="pln">link</span><span class="tag">&lt;/a&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">And it also uses HTML to add an image:</span><span class="tag">&lt;/p&gt;</span><span class="pln">
</span><span class="tag">&lt;img</span><span class="pln"> </span><span class="atn">src</span><span class="pun">=</span><span class="atv">"https://html.sammy-codes.com/images/small-profile.jpeg"</span><span class="tag">/&gt;</span></pre>

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

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

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="PNG" data-fileid="118451" href="https://academy.hsoub.com/uploads/monthly_2023_02/1678352782_04__.PNG.c09b9b67acc89e2ae61fdb0ae004f267.PNG" rel=""><img alt="كيفية عرض التعليمات البرمجية المصدرية لمستند HTML" class="ipsImage ipsImage_thumbnailed" data-fileid="118451" data-ratio="41.29" data-unique="m9imp8rs7" style="width: 700px; height: 289px;" width="700" src="https://academy.hsoub.com/uploads/monthly_2023_02/533016048_04__.thumb.PNG.bad61fe4ca26db44890bfdee0233c952.PNG"> </a>
</p>

<p>
	الآن أصبح لديك نظرة عامة لكيفية عرض تعليمات HTML في مستعرض الويب. والآن سننتقل لتعلم كيفية عرض الشيفرات المصدرية لأي صفحة ويب باستخدام أداة المتصفح.
</p>

<h3>
	كيفية عرض شيفرات المصدر لصفحة ويب
</h3>

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

<p>
	في Firefox انتقل إلى قائمة "أدوات" في القائمة العلوية ثم انقر على "أدوات مطوري الوب".
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="118452" href="https://academy.hsoub.com/uploads/monthly_2023_02/2049166681_05_.png.7aeb5096b1602e1e31285a2ff27b82af.png" rel=""><img alt="كيفية عرض شيفرات المصدر لصفحة ويب" class="ipsImage ipsImage_thumbnailed" data-fileid="118452" data-ratio="38.57" data-unique="k8g1f09qw" style="width: 700px; height: 270px;" width="700" src="https://academy.hsoub.com/uploads/monthly_2023_02/1982197676_05_.thumb.png.be0ffb6a029386d94b1eb883b42e8a30.png"> </a>
</p>

<p>
	أو يمكنك استخدام اختصار لوحة المفاتيح Ctrl+Shift+I لعرض الشيفرات المصدرية لصفحة الويب.
</p>

<p>
	في المتصفح Chrome العملية متشابهة جدًا. انقر على زر خيارات في الزاوية العلوية اليسرى. ستظهر قائمة منسدلة اختر "المزيد من الأدوات" ثم حدد "أدوات مطوري البرامج". أو يمكنك استخدام اختصار لوحة المفاتيح Ctrl+Shift+I.
</p>

<p>
	حاول فحص الشيفرات المصدرية لموقع الويب التجريبي الذي سننشئه في هذه السلسلة بالانتقال إلى <a href="https://html.sammy-codes.com/" rel="external nofollow">هذه الصفحة</a>. ستظهر لك صفحة تحتوي العديد من وسوم html. لا تقلق إذا وجدت التعليمات المذكورة غريبة، ففي نهاية هذه السلسلة سيصبح لديك فهم أفضل لكيفية تفسير تعليمات HTML وستصبح قادرًا على استخدام HTML لبناء مواقع الويب وتخصيصها.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="PNG" data-fileid="118453" href="https://academy.hsoub.com/uploads/monthly_2023_02/1969564880_06_.PNG.51bc22cc72e2d35f9bc8ffaa65dbe328.PNG" rel=""><img alt="فحص الشيفرات المصدرية لموقع الويب التجريبي" class="ipsImage ipsImage_thumbnailed" data-fileid="118453" data-ratio="40.00" data-unique="genstuu1d" style="width: 700px; height: auto;" width="700" src="https://academy.hsoub.com/uploads/monthly_2023_02/1612147649_06_.thumb.PNG.25ead0b4f63a7d337eb5f9407611447d.PNG"> </a>
</p>

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

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

<h2>
	كيفية فهم واستخدام عناصر HTML
</h2>

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

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

<p>
	فيما يلي رسم توضيحي يصف أجزاء عنصر HTML:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="PNG" data-fileid="118454" href="https://academy.hsoub.com/uploads/monthly_2023_02/715055465_07.PNG.9a1550f34c31a9cb12c46da7605ec5f7.PNG" rel=""><img alt=" أجزاء عنصر HTML" class="ipsImage ipsImage_thumbnailed" data-fileid="118454" data-ratio="56.83" data-unique="sll0yqlps" style="width: 600px; height: auto;" width="600" src="https://academy.hsoub.com/uploads/monthly_2023_02/715055465_07.PNG.9a1550f34c31a9cb12c46da7605ec5f7.PNG"> </a>
</p>

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

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_6051_22" style=""><span class="tag">&lt;strong&gt;</span><span class="pln">My strong text</span><span class="tag">&lt;/strong&gt;</span></pre>

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

<p>
	<strong>ملاحظة</strong>: قد تلاحظ أن العنصر <code>&lt;strong&gt;</code> يضيف للنص النمط الثخين، ويمكن تحقيق نفس هذا التأثير باستخدام عنصر آخر وهو <a href="https://wiki.hsoub.com/HTML/b" rel="external">العنصر &lt;B&gt;</a>. ولكن يضيف العنصر <code>&lt;strong&gt;</code> للنص نمطًا ثخينًا ومعنى دلاليًا أعمق بحيث يظهر النص بأنه أكثر أهمية موازنة من وسم <code>&lt;B&gt;</code>.
</p>

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

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

<h3>
	كيفية عرض ملف HTML غير متصل في متصفحك
</h3>

<p>
	يمكنك عرض ملف HTML دون اتصال في المتصفح بعدة طرق:
</p>

<ul>
	<li>
		سحب الملف وإسقاطه إلى متصفحك.
	</li>
	<li>
		النقر بزر الفأرة الأيمن على الملف (إذا كنت تستخدم نظام ويندوز)، أو نقر Ctrl+Left بعد تحديد الملف (إذا كنت تستخدم نظام Mac).
	</li>
	<li>
		نسخ المسار الكامل للملف ولصقه في شريط المتصفح.
	</li>
</ul>

<p>
	إذا كنت تستخدم محرر النصوص Visual Studio Code، فيمكنك نسخ مسار الملف index.html بالنقر عليه بزر الفأرة الأيمن وتحديد "نسخ". ثم لصق المسار في متصفح الويب.
</p>

<p>
	<strong>ملاحظة</strong>: لتحميل الملف في المتصفح من المهم نسخ المسار الكامل (الذي يشير إلى موقع الملف بالنسبة إلى الدليل الجذر) بدلًا من المسار النسبي (الذي يشير إلى ملف متعلق بدليل العمل الحالي). وفي المحرر Visual Studio Code يشير "مسار النسخ" إلى مسار الملف الكامل. ولكن تذكر أننا سنستخدم مسارات نسبية لبعض الملفات في أجزاء أخرى من هذا المقال.
</p>

<p>
	بعد تحميل الملف في المتصفح ستظهر الصفحة التالية:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="PNG" data-fileid="118455" href="https://academy.hsoub.com/uploads/monthly_2023_02/1766980375_08_.PNG.45bece00ef79adacc49837412954472c.PNG" rel=""><img alt="كيفية عرض ملف HTML غير متصل في متصفحك" class="ipsImage ipsImage_thumbnailed" data-fileid="118455" data-ratio="44.00" data-unique="d00aknp57" style="width: 700px; height: 308px;" width="900" src="https://academy.hsoub.com/uploads/monthly_2023_02/1976225563_08_.thumb.PNG.776846c3433153ad91ec0f7e4f6e58a4.PNG"></a>
</p>

<p>
	الآن سنجرب استخدام عناصر HTML أخرى. سننشئ ملفًا جديدًا باسم Practice.html ونستخدم العنصر <code>&lt;em&gt;</code> لزيادة تركيز النص.
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_6051_29" style=""><span class="tag">&lt;strong&gt;</span><span class="pln">My strong text</span><span class="tag">&lt;/strong&gt;</span><span class="pln">
</span><span class="tag">&lt;em&gt;</span><span class="pln">My emphasized text</span><span class="tag">&lt;/em&gt;</span></pre>

<p>
	سنحفظ الملف ونعيد تحميله في المتصفح، وستظهر الصفحة التالية:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="PNG" data-fileid="118456" href="https://academy.hsoub.com/uploads/monthly_2023_02/907741901_09__.PNG.d1d73e98c52d2e25e5de1910216cfd8c.PNG" rel=""><img alt="عرض ملف HTML غير متصل في متصفحك" class="ipsImage ipsImage_thumbnailed" data-fileid="118456" data-ratio="31.86" data-unique="jtegpxsr7" style="width: 700px; height: 223px;" width="700" src="https://academy.hsoub.com/uploads/monthly_2023_02/1575914166_09__.thumb.PNG.a24c155165bb3be2a3e222263457c31f.PNG"> </a>
</p>

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

<h2>
	كيفية إضافة العنصر <code>head</code> إلى صفحة الويب
</h2>

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

<p>
	<strong>ملاحظة</strong>: يعد عنصر <code>&lt;head&gt;</code> في HTML عنصرًا دلاليًا لأنه يخبر المتصفح والمبرمج ما هو الهدف من المحتوى. وتستخدم العناصر الدلالية لتسهيل القراءة البشرية للمستند HTML، ولكي تزود المتصفح بمزيد من المعلومات لتفسير المحتوى ولتحسين إمكانية الوصول إلى الموقع. ويمكن أن تساعد أيضًا في <a href="https://academy.hsoub.com/marketing/search-engine-optimisation/%D8%AA%D8%AD%D8%B3%D9%8A%D9%86-%D9%85%D8%AD%D8%B1%D9%83%D8%A7%D8%AA-%D8%A7%D9%84%D8%A8%D8%AD%D8%AB-seo-%D9%88%D8%A3%D9%87%D9%85%D9%8A%D8%AA%D9%87%D8%A7-%D9%84%D9%85%D9%88%D9%82%D8%B9%D9%83-%D8%A7%D9%84%D8%A5%D9%84%D9%83%D8%AA%D8%B1%D9%88%D9%86%D9%8A-r490/" rel="">تحسين الموقع في محركات البحث SEO</a>.
</p>

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

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_6051_34" 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">Sammy’s First Website</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;/html&gt;</span></pre>

<p>
	لاحظ تداخل مجموعة متنوعة من عناصر HTML داخل بعضها البعض. يتداخل العنصران <code><a href="https://wiki.hsoub.com/HTML/title" rel="external">&lt;title&gt;</a></code> و<code>&lt;meta&gt;</code> داخل العنصر <code>&lt;head&gt;</code>، ويتداخل العنصر <code>&lt;head&gt;</code> داخل <a href="https://wiki.hsoub.com/HTML/html" rel="external">العنصر &lt;html&gt;</a>. وعند متابعة هذه السلسلة ستلاحظ استخدام تداخل العناصر بصورة متكررة.
</p>

<p>
	الآن سنتوقف لشرح التعليمات البرمجية في المثال السابق. في سطر الشيفرة بعد علامة فتح الوسم <code>&lt;head&gt;</code> أضفنا العنصر <code>&lt;meta charset="utf-8"&gt;</code> وهو يحدد مجموعة أحرف المستند من النوع UTF-8، وهو تنسيق يدعم غالبية الأحرف من مجموعة متنوعة من اللغات المختلفة.
</p>

<p>
	ويحدد السطر التالي من التعليمات البرمجية عنوان مستند HTML باستخدام العنصر <code>&lt;title&gt;</code>. ويعرض المحتوى الذي تضيفه في هذا العنصر في علامة تبويب المتصفح وكعنوان موقع الويب في نتائج البحث، ولكنه لا يظهر على صفحة الويب نفسها. عندما تنشئ موقعك الإلكتروني استبدل "Sammy’s First Website" باسمك أو اسم موقع الويب الذي تنشئه.
</p>

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

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

<h2>
	كيفية إضافة أيقونة المفضلة إلى موقعك الإلكتروني باستخدام تعليمات HTML
</h2>

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

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

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

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="PNG" data-fileid="118446" href="https://academy.hsoub.com/uploads/monthly_2023_02/245321921_010___.PNG.1d78acb2cf6de80f2bcd2c0e421d99a6.PNG" rel=""><img alt="كيفية إضافة أيقونة المفضلة إلى موقعك الإلكتروني باستخدام تعليمات HTML" class="ipsImage ipsImage_thumbnailed" data-fileid="118446" data-ratio="55.29" data-unique="f9resjvgx" style="width: 700px; height: auto;" width="700" src="https://academy.hsoub.com/uploads/monthly_2023_02/245321921_010___.PNG.1d78acb2cf6de80f2bcd2c0e421d99a6.PNG"> </a>
</p>

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

<p>
	بعد ذلك أضف عنصر <code>&lt;link&gt;</code> إلى ملف index.html أسفل العنصر <code>&lt;title&gt;</code> مباشرةً.
</p>

<p>
	في النهاية يجب أن يضم ملفك التعليمات التالية:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_6051_46" style=""><span class="tag">&lt;title&gt;</span><span class="pln"> Sammy’s First Website </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">"shortcut icon"</span><span class="pln"> </span><span class="atn">type</span><span class="pun">=</span><span class="atv">"image/jpg"</span><span class="pln"> </span><span class="atn">href</span><span class="pun">=</span><span class="atv">"Favicon_Image_Location"</span><span class="tag">/&gt;</span></pre>

<p>
	تأكد من استبدال Favicon<em>Image</em>Location بمسار الملف النسبي لصورة أيقونة المفضلة التي تريد إضافتها. ثم احفظ ملف index.html وأعد تحميله في متصفح الويب. ستلاحظ ظهور صورة أيقونة المفضلة بجانب عنوان موقع الويب.
</p>

<h2>
	كيفية تصميم عنصر <boday> في لغة HTML</boday>
</h2>

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

<p>
	لإضافة عنصر <code>&lt;body&gt;</code> إلى المستند، يجب إدراج وسوم الفتح والإغلاق للعنصر <code>&lt;body&gt;</code>، بعد وسم إغلاق العنصر <code>&lt;/head&gt;</code> وقبل وسم إغلاق العنصر <code>&lt;/html&gt;</code>.
</p>

<p>
	الآن أصبح مستند index.html يضم التعليمات التالية:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_6051_49" 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">Sammy’s First Website</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">"shortcut icon"</span><span class="pln"> </span><span class="atn">type</span><span class="pun">=</span><span class="atv">"image/jpg"</span><span class="pln"> </span><span class="atn">href</span><span class="pun">=</span><span class="atv">"Favicon_Image_Location"</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;/body&gt;</span><span class="pln">                                                          
</span><span class="tag">&lt;/html&gt;</span></pre>

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

<h2>
	كيفية إنشاء القسم العلوي من صفحتك الرئيسية باستخدام HTML
</h2>

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

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="PNG" data-fileid="118447" href="https://academy.hsoub.com/uploads/monthly_2023_02/802286526_011____.PNG.2bbdf72561f825ddd32bd8fbd62009f2.PNG" rel=""><img alt="كيفية إنشاء القسم العلوي من صفحتك الرئيسية باستخدام HTML" class="ipsImage ipsImage_thumbnailed" data-fileid="118447" data-ratio="47.38" data-unique="47122v17b" style="width: 650px; height: auto;" width="650" src="https://academy.hsoub.com/uploads/monthly_2023_02/802286526_011____.PNG.2bbdf72561f825ddd32bd8fbd62009f2.PNG"> </a>
</p>

<p>
	يتكون هذا القسم العلوي من صورة خلفية كبيرة وصورة ملف تعريف صغير ورأس نصي ورأس فرعي للنص ورابط. صمم كل جزء من هذه الأجزاء من المحتوى ووضعه باستخدام تعليمات لغة HTML. في المقال التالي ستتعلم كيفية استخدام لغة HTML لإنشاء محتوى القسم العلوي في صفحة ويب جديدة.
</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://khamsat.com/create-website" rel="external">أنشئ موقعك الآن</a>
		</div>
	</div>
</div>





<p>
	ترجمة -وبتصرّف- للمقدمة والجزأين اﻷول والثاني من سلسلة المقالات <a href="https://www.digitalocean.com/community/tutorial_series/how-to-build-a-website-with-html" rel="external nofollow">How To Build a Website with HTML</a>.
</p>

<h2>
	اقرأ أيضًا
</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/html/%D9%85%D9%83%D9%88%D9%86%D8%A7%D8%AA-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-%D8%B9%D9%86%D8%A7%D8%B5%D8%B1-html-%D8%A7%D9%84%D9%85%D8%AE%D8%B5%D8%B5%D8%A9-%D9%88%D9%82%D9%88%D8%A7%D9%84%D8%A8%D9%87%D8%A7-r1352/" rel="">مكونات الويب: عناصر HTML المخصصة وقوالبها</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="">HTML و CSS للمبتدئين: كيف تنشئ موقعا من عدة صفحات</a>.
	</li>
</ul>
]]></description><guid isPermaLink="false">1894</guid><pubDate>Thu, 09 Feb 2023 18:00:00 +0000</pubDate></item><item><title>&#x627;&#x644;&#x645;&#x64A;&#x632;&#x627;&#x62A; &#x627;&#x644;&#x645;&#x62A;&#x642;&#x62F;&#x645;&#x629; &#x644;&#x62C;&#x62F;&#x627;&#x648;&#x644; HTML</title><link>https://academy.hsoub.com/programming/html/%D8%A7%D9%84%D9%85%D9%8A%D8%B2%D8%A7%D8%AA-%D8%A7%D9%84%D9%85%D8%AA%D9%82%D8%AF%D9%85%D8%A9-%D9%84%D8%AC%D8%AF%D8%A7%D9%88%D9%84-html-r1836/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2022_12/1445795629_------html.jpg.df744382546b6c5f6e0c3d898469278e.jpg" /></p>
<p>
	بعد أن تعلمنا <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>، نلقي الضوء في هذا المقال على بعض الميزات المتقدمة <a href="https://wiki.hsoub.com/HTML#.D8.A7.D9.84.D8.AC.D8.AF.D8.A7.D9.88.D9.84" rel="external">لجداول HTML </a>مثل الشروحات captions والملخصات summaries وتجميع الصفوف لتشكيل ترويسة أو جسم أو تذييل، كما يمر المقال على مفهوم سهولة الوصول accessibility لذوي المشاكل البصرية إلى محتوى الجداول.
</p>

<h2>
	إضافة شرح إلى الجدول
</h2>

<p>
	يمكنك إضافة شروحات إلى الجداول باستخدام العنصر <a href="https://wiki.hsoub.com/HTML/caption" rel="external"><code>&lt;caption&gt;</code></a> بعد وضعه تحت وَسم البداية للعنصر <a href="https://wiki.hsoub.com/HTML/table" rel="external"><code>&lt;table&gt;</code></a> مباشرةً:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_8985_11" style=""><span class="tag">&lt;table&gt;</span><span class="pln">
  </span><span class="tag">&lt;caption&gt;</span><span class="pln">Dinosaurs in the Jurassic period</span><span class="tag">&lt;/caption&gt;</span><span class="pln">

  ...
</span><span class="tag">&lt;/table&gt;</span></pre>

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

<p>
	<strong>ملاحظة</strong>: يمكن استخدام السمة <code>summary</code> التي يملكها <a href="https://wiki.hsoub.com/HTML/table" rel="external">العنصر &lt;table&gt;</a> لإضافة وصف يمكن لقارئات الشاشة الوصول إليه وقراءته، لكننا نفضِّل استخدام العنصر <code>&lt;caption&gt;</code> بدلًا منها لأنها أُلغيَت في مواصفات <a href="https://academy.hsoub.com/programming/html/%D8%AE%D9%85%D8%B3%D8%A9-%D8%A3%D8%B4%D9%8A%D8%A7%D8%A1-%D8%B9%D9%84%D9%8A%D9%83-%D9%85%D8%B9%D8%B1%D9%81%D8%AA%D9%87%D8%A7-%D8%B9%D9%86-html5-r324/" rel="">HTML5</a>، ولا يمكن رؤيتها من قبل المستخدِمين صحيحِي البصر لأنها لن تعرض على الصفحة.
</p>

<h2>
	تطبيق: إضافة شرح إلى جدول
</h2>

<p>
	لنلق نظرةً ثانيةً إلى مثال برنامج التدريس اليومي الذي طرحناه في المقال السابق:
</p>

<ol>
	<li>
		عُد إلى البرنامج اليومي لمدرّسة اللغات الذي <a href="https://github.com/mdn/learning-area/blob/master/html/tables/basic/timetable-fixed.html" rel="external nofollow">ستجده</a> على جيت-هاب واحفظ نسخًا منه على حاسوبك الشخصي.
	</li>
	<li>
		أضف شرحًا مناسبًا إلى محتوى الجدول.
	</li>
	<li>
		احفظ التعديلات التي أجريتها ثم حمِّل الملف ضمن المتصفح لترى النتيجة.
	</li>
</ol>

<p>
	<strong>ملاحظة</strong>: يمكن إيجاد الملف <a href="https://github.com/mdn/learning-area/blob/master/html/tables/advanced/timetable-caption.html" rel="external nofollow">بصورته النهائية</a> على جيت-هاب.
</p>

<h2>
	إضافة هيكلية للجدول باستخدام <code>&lt;thead&gt;</code> و <code>&lt;tfoot&gt;</code> و <code>&lt;tbody&gt;</code>
</h2>

<p>
	عندما تتعقد هيكلية الجداول نوعًا ما، فلا بدّ من تحديد هذه الهيكلية بصورة أوضح، ولتنفيذ ذلك تُستخدَم العناصر <code><a href="https://wiki.hsoub.com/HTML/thead" rel="external">&lt;thead&gt;</a></code> و <code><a href="https://wiki.hsoub.com/HTML/tfoot" rel="external">&lt;tfoot&gt;</a></code> و <code><a href="https://wiki.hsoub.com/HTML/tbody" rel="external">&lt;tbody&gt;</a></code> التي تسمح لك بتوصيف ترويسة وتذييل وجسم للجدول.
</p>

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

<ul>
	<li>
		استخدِم العنصر <code>&lt;thead&gt;</code> لتغليف الجزء الذي يمثّل ترويسة الجدول، وهو عادةً الصف الأول الذي يضم ترويسات جميع الأعمدة لكن ليس دائمًا، فإذا كنت تستخدِم عنصرَي تجميع خلايا العمود <code><a href="https://wiki.hsoub.com/HTML/colgroup" rel="external">&lt;colgroup&gt;</a></code> و <code><a href="https://wiki.hsoub.com/HTML/col" rel="external">&lt;col&gt;</a></code>، فضع ترويسة الجدول بعدها مباشرةً.
	</li>
	<li>
		استخدِم العنصر <code>&lt;tfoot&gt;</code> لتغليف الجزء الذي يمثل تذييل الجدول، فقد يكون هذا الجزء هو الصف الأخير من الجدول وقد جمعت فيه قيم الأسطر السابقة مثلًا، وبإمكانك وضع عنصر التذييل في آخر الجدول كما تتوقع أو تحت ترويسة الجدول مباشرةً لأن المتصفح سيصيّره في المكان الصحيح.
	</li>
	<li>
		استخدِم العنصر <code>&lt;tbody&gt;</code> لتغليف بقية الأجزاء، فقد يأتي جسم الجدول تحت الترويسة أو تحت التذييل تبعًا للطريقة التي تنويها في تنظيم الجدول.
	</li>
</ul>

<p>
	<strong>ملاحظة</strong>: إن العنصر <code>&lt;tbody&gt;</code> هو دائمًا جزء من الجدول سواءً صرَّحت عن ذلك أم لا، ولكي تتحقق من ذلك افتح أيًا من أمثلة الجداول التي لا تحتوي على <code>&lt;tbody&gt;</code> ثم تفحص شيفرة باستخدام <a href="https://academy.hsoub.com/programming/workflow/%D9%85%D8%A7-%D9%87%D9%8A-%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%D8%9F-r1439/" rel="">أدوات مطوري ويب</a> وستجد أنّ المتصفح قد أضاف هذا العنصر تلقائيًا، وقد تتساءل إذًا لِمَ عليّ إضافته أصلًا، والجواب هو أنه سيمنحك تحكمًا أكبر بهيكلية الجدول وتنسيقه.
</p>

<h3>
	تطبيق: هيكلة جدول
</h3>

<p>
	لنحاول تجربة العناصر التي تهيكل الجدول:
</p>

<ol>
	<li>
		ابدأ بحفظ نسخ عن الملفين <a href="https://github.com/mdn/learning-area/blob/master/html/tables/advanced/spending-record.html" rel="external nofollow">spending-record.html</a> و<a href="https://github.com/mdn/learning-area/blob/master/html/tables/advanced/minimal-table.css" rel="external nofollow">minimal-table.css</a> في مجلد جديد على حاسوبك.
	</li>
	<li>
		افتح ملف HTML في المتصفح وسترى أنّ الجدول واضح مع إمكانية لتحسينه قليلًا، إذ يبدو الصف "SUM" الذي يضم مجموع النفقات في المكان الخاطئ، كما قد تلاحظ بعض التفاصيل المفقودة في الشيفرة.
	</li>
	<li>
		ضع الصف الذي يمثّل الترويسة داخل عنصر <code>&lt;thead&gt;</code> والصف "SUM" ضمن عنصر <code>&lt;tfoot&gt;</code> وبقية الجدول ضمن عنصر <code>&lt;tbody&gt;</code>.
	</li>
	<li>
		احفظ التعديلات وحمّل الملف من جديد، ثم لاحظ كيف انتقل الصف إلى أسفل الجدول.
	</li>
	<li>
		استخدِم السمة <code>colspan</code> لتمتد الخلية "SUM" على الأعمدة الأربعة الأولى كي يظهر المبلغ تحت العمود "Cost".
	</li>
	<li>
		أضف بعض التنسيقات البسيطة إلى الجدول لترى فائدة تطبيق تنسيق CSS، لذا ضع الشيفرة التالية داخل العنصر <code>&lt;style&gt;</code> الموجود داخل العنصر <code>&lt;head&gt;</code> في ملف HTML:
	</li>
</ol>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_8985_28" style=""><span class="pln">tbody </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">95%</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="pun">}</span><span class="pln">

tfoot </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>

<ol start="7">
	<li>
		احفظ التعديلات ثم حمّل الملف من جديد وشاهد نتيجة عملك، فإذا لم يكن العنصران <code>&lt;tbody&gt;</code> و <code>&lt;tfoot&gt;</code> في مكانهما الصحيح، لكان عليك كتابة شيفرة تنسيق أكثر تعقيدًا للحصول على النتيجة ذاتها.
	</li>
</ol>

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

<p style="text-align: center;">
	<img class="ipsImage ipsImage_thumbnailed" data-fileid="181763" data-ratio="48.43" data-unique="v8kwjcbvc" style="width: 636px; height: auto;" width="736" alt="image.png" src="https://academy.hsoub.com/uploads/monthly_2026_03/image.png.7c7bd6ddbfe26f4697d85119fd990b48.png">
</p>

<p>
	<strong>ملاحظة</strong>: يمكنك الاطلاع على <a href="https://github.com/mdn/learning-area/blob/master/html/tables/advanced/spending-record-finished.html" rel="external nofollow">النسخة النهائية</a> من المثال على جيت-هاب.
</p>

<h2>
	الجداول المتداخلة
</h2>

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

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_8985_30" style=""><span class="tag">&lt;table</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"table1"</span><span class="tag">&gt;</span><span class="pln">
  </span><span class="tag">&lt;tr&gt;</span><span class="pln">
    </span><span class="tag">&lt;th&gt;</span><span class="pln">title1</span><span class="tag">&lt;/th&gt;</span><span class="pln">
    </span><span class="tag">&lt;th&gt;</span><span class="pln">title2</span><span class="tag">&lt;/th&gt;</span><span class="pln">
    </span><span class="tag">&lt;th&gt;</span><span class="pln">title3</span><span class="tag">&lt;/th&gt;</span><span class="pln">
  </span><span class="tag">&lt;/tr&gt;</span><span class="pln">
  </span><span class="tag">&lt;tr&gt;</span><span class="pln">
    </span><span class="tag">&lt;td</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"nested"</span><span class="tag">&gt;</span><span class="pln">
      </span><span class="tag">&lt;table</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"table2"</span><span class="tag">&gt;</span><span class="pln">
        </span><span class="tag">&lt;tr&gt;</span><span class="pln">
          </span><span class="tag">&lt;td&gt;</span><span class="pln">cell1</span><span class="tag">&lt;/td&gt;</span><span class="pln">
          </span><span class="tag">&lt;td&gt;</span><span class="pln">cell2</span><span class="tag">&lt;/td&gt;</span><span class="pln">
          </span><span class="tag">&lt;td&gt;</span><span class="pln">cell3</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;/table&gt;</span><span class="pln">
    </span><span class="tag">&lt;/td&gt;</span><span class="pln">
    </span><span class="tag">&lt;td&gt;</span><span class="pln">cell2</span><span class="tag">&lt;/td&gt;</span><span class="pln">
    </span><span class="tag">&lt;td&gt;</span><span class="pln">cell3</span><span class="tag">&lt;/td&gt;</span><span class="pln">
  </span><span class="tag">&lt;/tr&gt;</span><span class="pln">
  </span><span class="tag">&lt;tr&gt;</span><span class="pln">
    </span><span class="tag">&lt;td&gt;</span><span class="pln">cell4</span><span class="tag">&lt;/td&gt;</span><span class="pln">
    </span><span class="tag">&lt;td&gt;</span><span class="pln">cell5</span><span class="tag">&lt;/td&gt;</span><span class="pln">
    </span><span class="tag">&lt;td&gt;</span><span class="pln">cell6</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;/table&gt;</span></pre>

<p>
	ستبدو نتيجة تنفيذ الشيفرة كما يلي:
</p>

<p style="text-align: center;">
	<img class="ipsImage ipsImage_thumbnailed" data-fileid="181764" data-ratio="44.50" data-unique="31n62ecez" style="width: 427px; height: auto;" width="527" alt="image.png" src="https://academy.hsoub.com/uploads/monthly_2026_03/image.png.30d2f3c5fdd13cb3b83154cadfee638b.png">
</p>

<h2>
	جداول خاصة بذوي المشاكل البصرية
</h2>

<p>
	لنراجع باختصار استخدامات الجداول، إذ تُعَدّ الجداول أداةً مفيدةً تساعدنا في الوصول السريع إلى البيانات والبحث عن القيم المختلفة فيها، وبنظرة سريعة مثلًا على الجدول الذي نعرضه تاليًا ستتمكن من معرفة عدد الخواتم Rings التي بيعت في جينت Gent شهر 8 عام 2016، إذ نربط بصريًا بين المعلومات الواردة في الجدول مع ترويسة الصف والعمود لنجد المطلوب.
</p>
<style type="text/css">
table {
    width: 100%;
}

thead {
    vertical-align: middle;
    text-align: center;
} 

td, th {
    border: 1px solid #dddddd;
    text-align: right;
    padding: 8px;
    text-align: inherit;

}
tr:nth-child(even) {
    background-color: #dddddd;
}</style>
<table>
	<thead>
		<tr>
			<th style="text-align:left">
				 
			</th>
			<th style="text-align:left">
				 
			</th>
			<th style="text-align:left">
				Clothes
			</th>
			<th style="text-align:left">
				Accessories
			</th>
			<th style="text-align:left">
				 
			</th>
			<th>
				 
			</th>
			<th>
				 
			</th>
		</tr>
	</thead>
	<tbody>
		<tr>
			<td style="text-align:left">
				 
			</td>
			<td style="text-align:left">
				 
			</td>
			<td style="text-align:left">
				Trousers
			</td>
			<td style="text-align:left">
				Skirts
			</td>
			<td style="text-align:left">
				Dresses
			</td>
			<td>
				Bracelets
			</td>
			<td>
				Rings
			</td>
		</tr>
		<tr>
			<td style="text-align:left">
				Belgium
			</td>
			<td style="text-align:left">
				Antwerp
			</td>
			<td style="text-align:left">
				56
			</td>
			<td style="text-align:left">
				22
			</td>
			<td style="text-align:left">
				43
			</td>
			<td>
				72
			</td>
			<td>
				23
			</td>
		</tr>
		<tr>
			<td style="text-align:left">
				Gent
			</td>
			<td style="text-align:left">
				46
			</td>
			<td style="text-align:left">
				18
			</td>
			<td style="text-align:left">
				50
			</td>
			<td style="text-align:left">
				61
			</td>
			<td>
				15
			</td>
			<td>
				 
			</td>
		</tr>
		<tr>
			<td style="text-align:left">
				Brussels
			</td>
			<td style="text-align:left">
				51
			</td>
			<td style="text-align:left">
				27
			</td>
			<td style="text-align:left">
				38
			</td>
			<td style="text-align:left">
				69
			</td>
			<td>
				28
			</td>
			<td>
				 
			</td>
		</tr>
		<tr>
			<td style="text-align:left">
				The Netherlands
			</td>
			<td style="text-align:left">
				Amsterdam
			</td>
			<td style="text-align:left">
				89
			</td>
			<td style="text-align:left">
				34
			</td>
			<td style="text-align:left">
				69
			</td>
			<td>
				85
			</td>
			<td>
				38
			</td>
		</tr>
		<tr>
			<td style="text-align:left">
				Utrecht
			</td>
			<td style="text-align:left">
				80
			</td>
			<td style="text-align:left">
				12
			</td>
			<td style="text-align:left">
				43
			</td>
			<td style="text-align:left">
				36
			</td>
			<td>
				19
			</td>
			<td>
				 
			</td>
		</tr>
	</tbody>
</table>

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

<p>
	<strong>ملاحظة</strong>: يوجد حوالي 253 مليون شخص كفيف أو يعاني من مشاكل بصرية وفقًا لمنظمة الصحة العالمية WHO في عام 2017.
</p>

<h3>
	استخدام ترويسات الأعمدة والصفوف
</h3>

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

<h3>
	استخدام السمة scope
</h3>

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

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_8985_33" style=""><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">Purchase</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">Location</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">Date</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">Evaluation</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">Cost (€)</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></pre>

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

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_8985_35" style=""><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">Haircut</span><span class="tag">&lt;/th&gt;</span><span class="pln">
  </span><span class="tag">&lt;td&gt;</span><span class="pln">Hairdresser</span><span class="tag">&lt;/td&gt;</span><span class="pln">
  </span><span class="tag">&lt;td&gt;</span><span class="pln">12/09</span><span class="tag">&lt;/td&gt;</span><span class="pln">
  </span><span class="tag">&lt;td&gt;</span><span class="pln">Great idea</span><span class="tag">&lt;/td&gt;</span><span class="pln">
  </span><span class="tag">&lt;td&gt;</span><span class="pln">30</span><span class="tag">&lt;/td&gt;</span><span class="pln">
</span><span class="tag">&lt;/tr&gt;</span></pre>

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

<p>
	تأخذ السمة <code>scope</code> أيضًا القيمتين <code>colgroup</code> و <code>rowgroup</code> وتستخدمان لتوصيف الترويسات التي تقع فوق عدة أعمدة أو صفوف، فإذا عدت إلى الجدول السابق "حول مبيعات شهر 8 عام 2016"، فستجد أنّ الخلية "Clothes" هي ترويسة للخلايا "Trousers" و "Skirts" و "Dresses"، وينبغي الإشارة إلى جميع هذه الخلايا على أنها ترويسات (<code>&lt;th&gt;</code>)، ولهذا لا بدّ من أن نزوّد الخلية "Clothes" بالسمة <code>"scope="colgroup</code>، في حين ستأخذ بقية الترويسات التي تقع تحتها مباشرة السمة <code>"scope="col</code>.
</p>

<h3>
	استخدام السمتين id و headers
</h3>

<p>
	يمكننا استخدام السمتين <code>id</code> و <code>headers</code> على أساس بديل عن <code>scope</code> في الارتباطات بين الترويسات والخلايا، ويجري الأمر كما يلي:
</p>

<ol>
	<li>
		زوّد كل عنصر <code>&lt;th&gt;</code> (عنصر الترويسة) بسِمة <code>id</code> تحمل قيمة فريدة.
	</li>
	<li>
		زوّد كل <a href="https://wiki.hsoub.com/HTML/td" rel="external">عنصر &lt;td&gt;</a> (عنصر الخلية) بسِمة <code>headers</code> تضم قائمةً بمعرِّفات جميع الترويسات التي تُعَدّ ترويسةً مباشرةً لهذه الخلية تفصل بينها مسافةً فارغةً.
	</li>
</ol>

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

<p>
	لاحظ طريقة تطبيق هذا الأسلوب على مثال التطبيق السابق السابق:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_8985_38" style=""><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">id</span><span class="pun">=</span><span class="atv">"purchase"</span><span class="tag">&gt;</span><span class="pln">Purchase</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">id</span><span class="pun">=</span><span class="atv">"location"</span><span class="tag">&gt;</span><span class="pln">Location</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">id</span><span class="pun">=</span><span class="atv">"date"</span><span class="tag">&gt;</span><span class="pln">Date</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">id</span><span class="pun">=</span><span class="atv">"evaluation"</span><span class="tag">&gt;</span><span class="pln">Evaluation</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">id</span><span class="pun">=</span><span class="atv">"cost"</span><span class="tag">&gt;</span><span class="pln">Cost (€)</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">id</span><span class="pun">=</span><span class="atv">"haircut"</span><span class="tag">&gt;</span><span class="pln">Haircut</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">headers</span><span class="pun">=</span><span class="atv">"location haircut"</span><span class="tag">&gt;</span><span class="pln">Hairdresser</span><span class="tag">&lt;/td&gt;</span><span class="pln">
  </span><span class="tag">&lt;td</span><span class="pln"> </span><span class="atn">headers</span><span class="pun">=</span><span class="atv">"date haircut"</span><span class="tag">&gt;</span><span class="pln">12/09</span><span class="tag">&lt;/td&gt;</span><span class="pln">
  </span><span class="tag">&lt;td</span><span class="pln"> </span><span class="atn">headers</span><span class="pun">=</span><span class="atv">"evaluation haircut"</span><span class="tag">&gt;</span><span class="pln">Great idea</span><span class="tag">&lt;/td&gt;</span><span class="pln">
  </span><span class="tag">&lt;td</span><span class="pln"> </span><span class="atn">headers</span><span class="pun">=</span><span class="atv">"cost haircut"</span><span class="tag">&gt;</span><span class="pln">30</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></pre>

<p>
	<strong>ملاحظة</strong>: تُعَدّ هذه الطريقة دقيقةً جدًا في ارتباط خلايا البيانات مع الترويسات، لكنها تتطلب عملًا أكثر لا يحتمل أية أخطاء، ولهذا يُعَدّ استخدام السمة <code>scope</code> كافيًا لمعظم الجداول.
</p>

<h3>
	تطبيق: استخدام السمتين scope و headers
</h3>

<ol>
	<li>
		احفظ نسخةً عن الملفين <a href="https://github.com/mdn/learning-area/blob/master/html/tables/advanced/items-sold.html" rel="external nofollow">items-sold.html</a> و <a href="https://github.com/mdn/learning-area/blob/master/html/tables/advanced/minimal-table.css" rel="external nofollow">minimal-table.css</a> في مجلد جديد على جهازك.
	</li>
	<li>
		حاول استخدام السمة <code>scope</code> لتحسين طريقة عرض هذا الجدول.
	</li>
	<li>
		حاول حفظ نسخة أخرى عن الملفين السابقين في مجلد آخر على جهازك ثم استخدم السمتين <code>scope</code> و <code>headers</code> لدعم فكرة سهولة الوصول إلى الجدول.
	</li>
</ol>

<p>
	<strong>ملاحظة</strong>: يمكنك التحقق من صحة عملك بموازنته مع النسخة النهائية <a href="https://github.com/mdn/learning-area/blob/master/html/tables/advanced/items-sold-scope.html" rel="external nofollow">باستخدام scope</a> و<a href="https://github.com/mdn/learning-area/blob/master/html/tables/advanced/items-sold-headers.html" rel="external nofollow">باستخدام headers</a> على جيت-هاب.
</p>

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

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

<p>
	للمزيد من التفاصيل، ارجع إلى <a href="https://wiki.hsoub.com/HTML#.D8.A7.D9.84.D8.AC.D8.AF.D8.A7.D9.88.D9.84" rel="external">توثيق الجداول</a> في موسوعة حسوب.
</p>

<p>
	ترجمة -وبتصرُّف- للمقال <a href="https://developer.mozilla.org/en-US/docs/Learn/HTML/Tables/Advanced" rel="external nofollow">HTML table advanced features and accessibility</a>.
</p>

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

<ul>
	<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/%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/javascript/jquery/%d8%ac%d8%af%d8%a7%d9%88%d9%84-html-%d8%b0%d8%a7%d8%aa-%d8%b1%d8%a3%d8%b3%d9%8a%d8%a9-%d9%88%d8%a3%d8%b9%d9%85%d8%af%d8%a9-%d8%ab%d8%a7%d8%a8%d8%aa%d8%a9-%d8%a8%d8%a7%d8%b3%d8%aa%d8%ae%d8%af%d8%a7%d9%85-jquery-r151/" rel="">جداول html ذات رأسية وأعمدة ثابتة باستخدام jQuery</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>
</ul>
]]></description><guid isPermaLink="false">1836</guid><pubDate>Sun, 22 Jan 2023 16:04:00 +0000</pubDate></item><item><title>&#x623;&#x633;&#x627;&#x633;&#x64A;&#x627;&#x62A; &#x628;&#x646;&#x627;&#x621; &#x627;&#x644;&#x62C;&#x62F;&#x627;&#x648;&#x644; &#x641;&#x64A; HTML</title><link>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/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2022_12/1261702500_----html.jpg.3e5d077620109c81b0d57266758b6f74.jpg" /></p>
<p>
	يقدِّم هذا المقال الأساسيات اللازمة لبناء <a href="https://wiki.hsoub.com/HTML#.D8.A7.D9.84.D8.AC.D8.AF.D8.A7.D9.88.D9.84" rel="external">جداول HTML</a>، إذ يغطي مفاهيم مثل الصفوف والأعمدة والخلايا والترويسات وكيفية ضبط الخلايا لتمتد على عدة أعمدة وصفوف، كما يعلمك طريقة تجميع الخلايا في العمود نفسه لتنسيقها معًا.
</p>

<h2>
	ما هو الجدول؟
</h2>

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

<p style="text-align: center;">
	<img alt="مثال عن شكل جدول" class="ipsImage ipsImage_thumbnailed" data-fileid="115100" data-ratio="52.00" data-unique="y4nsdyt6e" style="width: 300px; height: auto;" width="300" src="https://academy.hsoub.com/uploads/monthly_2022_12/01_person_age_table.png.16b65bbbe83fedcc37a7abc35675ec18.png">
</p>

<p style="text-align: center;">
	<img alt="مثال عن شكل جدول منسق" class="ipsImage ipsImage_thumbnailed" data-fileid="115101" data-ratio="37.91" data-unique="kebym2efx" style="width: 750px; height: auto;" width="794" src="https://academy.hsoub.com/uploads/monthly_2022_12/02_person_club_table.png.b54d7f307d88a5d2e5a61647437b54e5.png">
</p>

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

<p style="text-align: center;">
	<img alt="مستند لعملية إحصاء في الولايات المتحدة في 1800" class="ipsImage ipsImage_thumbnailed" data-fileid="115102" data-ratio="63.13" data-unique="9729dnzd1" style="width: 700px; height: auto;" width="800" src="https://academy.hsoub.com/uploads/monthly_2022_12/03_us_census_table.png.ab7e2622e5a25bbd8690eefa25d697d5.png">
</p>

<p>
	وبالتالي ليس غريبًا أن يهتم مخترعو HTML بإيجاد وسائل لهيكلة بيانات الويب على هيئة جداول.
</p>

<h3>
	كيف يعمل الجدول؟
</h3>

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

<p style="text-align: center;">
	<img class="ipsImage ipsImage_thumbnailed" data-fileid="181757" data-ratio="64.51" data-unique="0zj3x1ijc" width="741" alt="image.png" src="https://academy.hsoub.com/uploads/monthly_2026_03/image.png.51d010cb4c6560b1e42e5e7e7be672ea.png">
</p>

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

<h3>
	تنسيق الجداول
</h3>

<p>
	ألق نظرةً على الجدول السابق نفسه لكن من خلال <a href="https://mdn.github.io/learning-area/html/tables/assessment-finished/planets-data.html" rel="external nofollow">مثال مباشر على جيت-هاب</a>، ولاحظ أنّ هذا الأخير أسهل قراءةً من الجدول الذي عرضناه في المقال، وذلك لأننا طبقنا أدنى درجات التنسيق عند بنائه موازنةً بنسخة جيت-هاب.
</p>

<p>
	لا نخفيك سرًا أنّ الجداول التي تتمتع بمستوى تنسيق <a href="https://wiki.hsoub.com/CSS" rel="external">CSS</a> رفيع أنها أكثر تأثيرًا في الويب، لهذا لا بد من الاهتمام جيدًا بهيكلة البيانات في جداول <a href="https://wiki.hsoub.com/HTML" rel="external">HTML</a> بالإضافة إلى التنسيق الجيد، لكننا سنركز في سلسلة المقالات هذه على الجزء المتعلق <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> فقط، إذ سنزود الجداول في هذه السلسلة بالحد الأدنى من تنسيقات CSS التي تُسهِّل قراءة محتوياتها موازنةً بالجداول غير المنسقة، كما يمكنك تنزيل <a href="https://github.com/mdn/learning-area/blob/master/html/tables/basic/minimal-table.css" rel="external nofollow">ملف CSS</a> و <a href="https://github.com/mdn/learning-area/blob/master/html/tables/basic/blank-template.html" rel="external nofollow">قالب HTML</a> الذي يُستخدم لتطبيق التنسيقات من المستودع المخصص على جيت-هاب، إذ سيمنحك هذان الملفان نقطة انطلاق جيدة عند العمل على جداول HTML.
</p>

<h3>
	ما الحالات التي لا ينبغي فيها استخدام جداول HTML؟
</h3>

<p>
	تُستخدَم الجداول لعرض البيانات القابلة للجدولة فهمي مصممة لهذا الغرض، كما يستخدِمها البعض أيضًا في تخطيط <a href="https://academy.hsoub.com/devops/servers/%D8%A7%D9%84%D9%81%D8%B1%D9%82-%D8%A8%D9%8A%D9%86-%D8%B5%D9%81%D8%AD%D8%A9-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-%D9%88%D9%85%D9%88%D9%82%D8%B9-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-%D9%88%D8%AE%D8%A7%D8%AF%D9%85-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-%D9%88%D9%85%D8%AD%D8%B1%D9%83-%D8%A7%D9%84%D8%A8%D8%AD%D8%AB-r572/" rel="">صفحات الويب</a> مثل أن يضم أحد الصفوف الترويسة وآخر يضم أعمدة المحتوى الرئيسي وآخر للتذيل، وهذا أمر خاطئ كليًا، وقد استُخدمت هذه الطريقة في تخطيط الصفحات فيما مضى عندما كان دعم تنسيق CSS في المتصفحات المختلفة متفاوتًا وسيئًا، لكنها أقل انتشارًا في أيامنا هذه، إلا أنك قد تراها بين الفينة والأخرى.
</p>

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

<ol>
	<li>
		<strong>يؤثر تخطيط الجدول على سهولة وصول ذوي المشاكل البصرية</strong>: تفسِّر قارئات الشاشة التي يستخدمها فاقدِي البصر وسوم العناصر الموجودة في صفحة HTML وتقرأ محتوياتها، وطالما أنّ الجدول ليس الأداة الصحيحة لتخطيط الصفحة وأنّ توصيفه أكثر تعقيدًا من تقنيات تخطيط CSS، فسيربك مستخدِميها ما تنطقه تلك القارئات.
	</li>
	<li>
		<strong>ينتج عن الجداول وسومًا مختلطةً</strong>: تضم الجداول هيكليةً أعقد من تلك المستخدَمة عادةً في تخطيط الصفحة، وقد يزيد ذلك من صعوبة كتابة الشيفرة وصيانتها وتنقيحها.
	</li>
	<li>
		<strong>الجداول غير متجاوبة تلقائيًا</strong>: إذا استخدمت العناصر المناسبة مثل <code><a href="https://wiki.hsoub.com/HTML/header" rel="external">&lt;header&gt;</a></code> أو <code><a href="https://wiki.hsoub.com/HTML/article" rel="external">&lt;article&gt;</a></code> أو <code><a href="https://wiki.hsoub.com/HTML/div" rel="external">&lt;div&gt;</a></code> أو <code><a href="https://wiki.hsoub.com/HTML/section" rel="external">&lt;section&gt;</a></code>، فسيكون عرضها 100% من عرض العنصر الأب تلقائيًا، ويقاس في المقابل عرض الجداول افتراضيًا وفقًا لحجم محتواها، لذلك يحتاج الأمر إلى قياسات أخرى ليعمل تخطيط الصفحة جيدًا على الأجهزة المختلفة.
	</li>
</ol>

<h2>
	تطبيق: إنشاء جدول
</h2>

<p>
	تحدثنا طويلًا عن المفهوم النظري وحان الوقت لنبني جدولًا بسيطًا:
</p>

<ol>
	<li>
		انسخ الملفين <a href="https://github.com/mdn/learning-area/blob/master/html/tables/basic/blank-template.html" rel="external nofollow">blank-template.html</a> و <a href="https://github.com/mdn/learning-area/blob/master/html/tables/basic/minimal-table.css" rel="external nofollow">minimal-table.css</a> إلى حاسوبك وضعهما في مجلد جديد.
	</li>
	<li>
		يُوضع محتوى كل جدول بين وسمَي البداية والنهاية للعنصر <a href="https://wiki.hsoub.com/HTML/table" rel="external"><code>&lt;table&gt;</code></a>، لذلك ضع عنصرَي الجدول داخل جسم ملف HTML.
	</li>
	<li>
		تُعَدّ الخلية أصغر حاوية ضمن الجدول وننشئها باستخدام العنصر <a href="https://wiki.hsoub.com/HTML/td" rel="external"><code>&lt;td&gt;</code></a> اختصارًا لبيانات جدول table data، ولنضف الشيفرة التالية داخل <a href="https://wiki.hsoub.com/HTML/table" rel="external">العنصر &lt;table&gt;</a>:
	</li>
</ol>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_3326_20" style=""><span class="tag">&lt;td&gt;</span><span class="pln">Hi, I'm your first cell.</span><span class="tag">&lt;/td&gt;</span></pre>

<ol start="4">
	<li>
		انسخ الشيفرة السابقة ثلاث مرات إضافية إذا أردت تكوين صف من أربعة خلايا:
	</li>
</ol>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_3326_22" style=""><span class="tag">&lt;td&gt;</span><span class="pln">Hi, I'm your first cell.</span><span class="tag">&lt;/td&gt;</span><span class="pln">
</span><span class="tag">&lt;td&gt;</span><span class="pln">I'm your second cell.</span><span class="tag">&lt;/td&gt;</span><span class="pln">
</span><span class="tag">&lt;td&gt;</span><span class="pln">I'm your third cell.</span><span class="tag">&lt;/td&gt;</span><span class="pln">
</span><span class="tag">&lt;td&gt;</span><span class="pln">I'm your fourth cell.</span><span class="tag">&lt;/td&gt;</span></pre>

<p>
	يمثِّل كل عنصر <code>&lt;td&gt;</code> خليةً واحدةً، وتمثِّل هذه العناصر بمجموعها الصف الأول الذي يكبر بإضافة عناصر جديدة، ولإنهاء الصف الأول والانتقال إلى الصف الثاني نستخدِم العنصر <a href="https://wiki.hsoub.com/HTML/tr" rel="external"><code>&lt;tr&gt;</code></a> اختصارًا لصف جدول table row:
</p>

<ol>
	<li>
		ضع الخلايا الأربعة التي أنشأتها سابقًا ضمن وسمَي البداية والنهاية للعنصر <code>&lt;tr&gt;</code>:
	</li>
</ol>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_3326_24" style=""><span class="tag">&lt;tr&gt;</span><span class="pln">
  </span><span class="tag">&lt;td&gt;</span><span class="pln">Hi, I'm your first cell.</span><span class="tag">&lt;/td&gt;</span><span class="pln">
  </span><span class="tag">&lt;td&gt;</span><span class="pln">I'm your second cell.</span><span class="tag">&lt;/td&gt;</span><span class="pln">
  </span><span class="tag">&lt;td&gt;</span><span class="pln">I'm your third cell.</span><span class="tag">&lt;/td&gt;</span><span class="pln">
  </span><span class="tag">&lt;td&gt;</span><span class="pln">I'm your fourth cell.</span><span class="tag">&lt;/td&gt;</span><span class="pln">
</span><span class="tag">&lt;/tr&gt;</span></pre>

<ol start="2">
	<li>
		نكون بهذا الشكل قد أنشأنا الصف الأول، ولا بدّ من تغليف خلايا جديدة <code>&lt;td&gt;</code>ضمن عنصر <code>&lt;tr&gt;</code> جديد:
	</li>
</ol>

<h3>
	نتيجة العمل
</h3>

<p>
	لا بدّ أن يظهر الجدول كما يلي:
</p>

<p style="text-align: center;">
	<img class="ipsImage ipsImage_thumbnailed" data-fileid="181758" data-ratio="22.96" data-unique="s1n0wlxzp" style="width: 527px; height: auto;" width="727" alt="image.png" src="https://academy.hsoub.com/uploads/monthly_2026_03/image.png.5184c6c57839f8ae7cdb98ae404bf58b.png">
</p>

<p>
	<strong>ملاحظة</strong>: يمكنك إيجاد <a href="https://github.com/mdn/learning-area/blob/master/html/tables/basic/simple-table.html" rel="external nofollow">المثال السابق بصيغته النهائية</a> ضمن المستودع المخصص له على جيت-هاب.
</p>

<h2>
	عناصر ترويسة جدول
</h2>

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

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_3326_26" style=""><span class="tag">&lt;table&gt;</span><span class="pln">
  </span><span class="tag">&lt;tr&gt;</span><span class="pln">
    </span><span class="tag">&lt;td&gt;</span><span class="pln">&amp;nbsp;</span><span class="tag">&lt;/td&gt;</span><span class="pln">
    </span><span class="tag">&lt;td&gt;</span><span class="pln">Knocky</span><span class="tag">&lt;/td&gt;</span><span class="pln">
    </span><span class="tag">&lt;td&gt;</span><span class="pln">Flor</span><span class="tag">&lt;/td&gt;</span><span class="pln">
    </span><span class="tag">&lt;td&gt;</span><span class="pln">Ella</span><span class="tag">&lt;/td&gt;</span><span class="pln">
    </span><span class="tag">&lt;td&gt;</span><span class="pln">Juan</span><span class="tag">&lt;/td&gt;</span><span class="pln">
  </span><span class="tag">&lt;/tr&gt;</span><span class="pln">
  </span><span class="tag">&lt;tr&gt;</span><span class="pln">
    </span><span class="tag">&lt;td&gt;</span><span class="pln">Breed</span><span class="tag">&lt;/td&gt;</span><span class="pln">
    </span><span class="tag">&lt;td&gt;</span><span class="pln">Jack Russell</span><span class="tag">&lt;/td&gt;</span><span class="pln">
    </span><span class="tag">&lt;td&gt;</span><span class="pln">Poodle</span><span class="tag">&lt;/td&gt;</span><span class="pln">
    </span><span class="tag">&lt;td&gt;</span><span class="pln">Streetdog</span><span class="tag">&lt;/td&gt;</span><span class="pln">
    </span><span class="tag">&lt;td&gt;</span><span class="pln">Cocker Spaniel</span><span class="tag">&lt;/td&gt;</span><span class="pln">
  </span><span class="tag">&lt;/tr&gt;</span><span class="pln">
  </span><span class="tag">&lt;tr&gt;</span><span class="pln">
    </span><span class="tag">&lt;td&gt;</span><span class="pln">Age</span><span class="tag">&lt;/td&gt;</span><span class="pln">
    </span><span class="tag">&lt;td&gt;</span><span class="pln">16</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">10</span><span class="tag">&lt;/td&gt;</span><span class="pln">
    </span><span class="tag">&lt;td&gt;</span><span class="pln">5</span><span class="tag">&lt;/td&gt;</span><span class="pln">
  </span><span class="tag">&lt;/tr&gt;</span><span class="pln">
  </span><span class="tag">&lt;tr&gt;</span><span class="pln">
    </span><span class="tag">&lt;td&gt;</span><span class="pln">Owner</span><span class="tag">&lt;/td&gt;</span><span class="pln">
    </span><span class="tag">&lt;td&gt;</span><span class="pln">Mother-in-law</span><span class="tag">&lt;/td&gt;</span><span class="pln">
    </span><span class="tag">&lt;td&gt;</span><span class="pln">Me</span><span class="tag">&lt;/td&gt;</span><span class="pln">
    </span><span class="tag">&lt;td&gt;</span><span class="pln">Me</span><span class="tag">&lt;/td&gt;</span><span class="pln">
    </span><span class="tag">&lt;td&gt;</span><span class="pln">Sister-in-law</span><span class="tag">&lt;/td&gt;</span><span class="pln">
  </span><span class="tag">&lt;/tr&gt;</span><span class="pln">
  </span><span class="tag">&lt;tr&gt;</span><span class="pln">
    </span><span class="tag">&lt;td&gt;</span><span class="pln">Eating Habits</span><span class="tag">&lt;/td&gt;</span><span class="pln">
    </span><span class="tag">&lt;td&gt;</span><span class="pln">Eats everyone's leftovers</span><span class="tag">&lt;/td&gt;</span><span class="pln">
    </span><span class="tag">&lt;td&gt;</span><span class="pln">Nibbles at food</span><span class="tag">&lt;/td&gt;</span><span class="pln">
    </span><span class="tag">&lt;td&gt;</span><span class="pln">Hearty eater</span><span class="tag">&lt;/td&gt;</span><span class="pln">
    </span><span class="tag">&lt;td&gt;</span><span class="pln">Will eat till he explodes</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;/table&gt;</span></pre>

<p>
	يصيّر المتصفح الشيفرة السابقة إلى الجدول التالي:
</p>

<p style="text-align: center;">
	<img class="ipsImage ipsImage_thumbnailed" data-fileid="181759" data-ratio="25.42" data-unique="ymtgf481s" style="width: 598px; height: auto;" width="698" alt="image.png" src="https://academy.hsoub.com/uploads/monthly_2026_03/image.png.29159fb42e57ba719974d14dcab5c6a1.png">
</p>

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

<h3>
	تطبيق: ترويسات الجداول
</h3>

<p>
	سنحاول في هذا التطبيق تحسين الجدول السابق:
</p>

<ol>
	<li>
		احفظ نسخةً عن الملفين <a href="https://github.com/mdn/learning-area/blob/master/html/tables/basic/dogs-table.html" rel="external nofollow">dogs-table.html</a> و <a href="https://github.com/mdn/learning-area/blob/master/html/tables/basic/minimal-table.css" rel="external nofollow">minimal-table.css</a> في مجلد جديد على حاسوبك، إذ يحتوي ملف HTML على المعلومات ذاتها التي يعرضها الجدول السابق.
	</li>
	<li>
		استخدم العنصر <code>&lt;th&gt;</code> -اختصارًا لترويسة جدول table header- لتمييز الخلية الأولى على أنها ترويسة دلاليًا وبصريًا، إذ يعمل هذا العنصر بالطريقة نفسها التي يعمل بها العنصر <code>&lt;td&gt;</code> إلا أنه يعرِّف ترويسةً وليس خليةً عاديةً. انتقل إذًا إلى ملف HTML واستبدل العناصر <a href="https://wiki.hsoub.com/HTML/th" rel="external"><code>&lt;th&gt;</code></a> بكل العناصر <code>&lt;td&gt;</code> التي تحيط بخلايا الترويسة.
	</li>
	<li>
		احفظ التغييرات التي أجريتها على ملف HTML ثم حمّله في المتصفح وستلاحظ كيف ستبدو الخلايا الأولى على أساس ترويسات.
	</li>
</ol>

<p>
	<strong>ملاحظة</strong>: يمكنك الاطلاع على الملف <a href="https://github.com/mdn/learning-area/blob/master/html/tables/basic/dogs-table-fixed.html" rel="external nofollow">بشكله النهائي</a> على جيت-هاب، كما يمكنك الاطلاع على <a href="https://mdn.github.io/learning-area/html/tables/basic/dogs-table-fixed.html" rel="external nofollow">شيفرته المصدرية</a>.
</p>

<h3>
	ما هي فوائد الترويسات؟
</h3>

<p>
	جاوبنا بالفعل على جزء من هذا السؤال، إذ يسهِّل استخدامها استخلاص المعلومات ويحسِّن مظهر الجدول عمومًا.
</p>

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

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

<h2>
	تمكين الخلايا من الامتداد على عدة صفوف أو خلايا
</h2>

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

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_3326_28" style=""><span class="tag">&lt;table&gt;</span><span class="pln">
  </span><span class="tag">&lt;tr&gt;</span><span class="pln">
    </span><span class="tag">&lt;th&gt;</span><span class="pln">Animals</span><span class="tag">&lt;/th&gt;</span><span class="pln">
  </span><span class="tag">&lt;/tr&gt;</span><span class="pln">
  </span><span class="tag">&lt;tr&gt;</span><span class="pln">
    </span><span class="tag">&lt;th&gt;</span><span class="pln">Hippopotamus</span><span class="tag">&lt;/th&gt;</span><span class="pln">
  </span><span class="tag">&lt;/tr&gt;</span><span class="pln">
  </span><span class="tag">&lt;tr&gt;</span><span class="pln">
    </span><span class="tag">&lt;th&gt;</span><span class="pln">Horse</span><span class="tag">&lt;/th&gt;</span><span class="pln">
    </span><span class="tag">&lt;td&gt;</span><span class="pln">Mare</span><span class="tag">&lt;/td&gt;</span><span class="pln">
  </span><span class="tag">&lt;/tr&gt;</span><span class="pln">
  </span><span class="tag">&lt;tr&gt;</span><span class="pln">
    </span><span class="tag">&lt;td&gt;</span><span class="pln">Stallion</span><span class="tag">&lt;/td&gt;</span><span class="pln">
  </span><span class="tag">&lt;/tr&gt;</span><span class="pln">
  </span><span class="tag">&lt;tr&gt;</span><span class="pln">
    </span><span class="tag">&lt;th&gt;</span><span class="pln">Crocodile</span><span class="tag">&lt;/th&gt;</span><span class="pln">
  </span><span class="tag">&lt;/tr&gt;</span><span class="pln">
  </span><span class="tag">&lt;tr&gt;</span><span class="pln">
    </span><span class="tag">&lt;th&gt;</span><span class="pln">Chicken</span><span class="tag">&lt;/th&gt;</span><span class="pln">
    </span><span class="tag">&lt;td&gt;</span><span class="pln">Hen</span><span class="tag">&lt;/td&gt;</span><span class="pln">
  </span><span class="tag">&lt;/tr&gt;</span><span class="pln">
  </span><span class="tag">&lt;tr&gt;</span><span class="pln">
    </span><span class="tag">&lt;td&gt;</span><span class="pln">Rooster</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;/table&gt;</span></pre>

<p>
	لكن لا يعطي الخرج النتيجة التي نريدها تمامًا:
</p>

<p style="text-align: center;">
	<img class="ipsImage ipsImage_thumbnailed" data-fileid="181761" data-ratio="127.65" data-unique="8u7nv6noi" width="217" alt="image.png" src="https://academy.hsoub.com/uploads/monthly_2026_03/image.png.e8bfdc5460d869ef66deeaa938a52f88.png">
</p>

<p>
	نريد مثلًا أن يمتد "Hippopotamus" أو "Crocodile" مقدار عمودين، وأن يمتد Horse" و "Chicken" مقدار صفين، إذ تمتلك ترويسة الجدول لهذه الغاية السمتَين <code>colspan</code> و <code>rowspan</code> اللتين تقبلان قيمًا بلا واحدة تدل على عدد الصفوف أو الأعمدة التي نريد أن تمتد الترويسة عليهما، لذا ستسمح القيمة <code>"2"=colspan</code> مثلًا لترويسة عمود أن تمتد بمقدار عمودين، إذًا لنستخدِم هاتين السمتين لتحسين مظهر الجدول السابق:
</p>

<ol>
	<li>
		احفظ نسخةً عن الملفين <a href="https://github.com/mdn/learning-area/blob/master/html/tables/basic/animals-table.html" rel="external nofollow">animals-table.html</a> و <a href="https://github.com/mdn/learning-area/blob/master/html/tables/basic/minimal-table.css" rel="external nofollow">minimal-table.css</a> في مجلد جديد على حاسوبك، إذ يحتوي ملف HTML على المعلومات ذاتها التي يعرضها الجدول السابق.
	</li>
	<li>
		استخدم السمة <code>colspan</code> لتجعل الخلايا "Animals" و "Hippopotamus" و "Crocodile" تمتد بمقدار عمودَين.
	</li>
	<li>
		استخدم السمة <code>rowspan</code> لتجعل الخلايا "Horse" و "Chicken" تمتد بمقدار صفَّين.
	</li>
	<li>
		احفظ التغيرات التي أجريتها على الملف ثم حمّله في المتصفح لترى النتيجة.
	</li>
</ol>

<p style="text-align: center;">
	<img class="ipsImage ipsImage_thumbnailed" data-fileid="181760" data-ratio="86.65" data-unique="kxqc1tec5" width="382" alt="image.png" src="https://academy.hsoub.com/uploads/monthly_2026_03/image.png.b9f283ab595fd93f508862944fb55f6a.png">
</p>

<p>
	<strong>ملاحظة</strong>: يمكنك إيجاد <a href="https://github.com/mdn/learning-area/blob/master/html/tables/basic/animals-table-fixed.html" rel="external nofollow">المثال السابق بصيغته النهائية</a> ضمن المستودع المخصص له على جيت-هاب.
</p>

<h2>
	تزويد الأعمدة ببعض التنسيقات
</h2>

<p>
	تقدِّم HTML طريقةً لتنسيق محتوى عمود بأكمله (عناصر <a href="https://wiki.hsoub.com/HTML/col" rel="external"><code>&lt;col&gt;</code></a> وعناصر <a href="https://wiki.hsoub.com/HTML/colgroup" rel="external"><code>&lt;colgroup&gt;</code></a>)، وقد وُجِدت هذه الطريقة لأنّ عملية تنسيق كل عنصر <code>&lt;td&gt;</code> أو <code>&lt;th&gt;</code> على حدة في عمود ستكون مزعجةً وغير فعّالة وسيكون الأمر كذلك عند استخدام محدِّد تنسيق معقَّد مثل <code>nth -child:</code>.
</p>

<p>
	<strong>ملاحظة</strong>: تنسيق العمود بهذه الطريقة مخصص لبعض السمات فقط، وهي:<code>border</code> و <code>background</code> و <code>width</code> و <code>visibility</code>، فإذا احتجت لاستخدام خصائص أخرى، فلا بدّ من تنسيق كل عنصر <code>&lt;td&gt;</code> أو <code>&lt;th&gt;</code> على حدة، أو استخدام محدد تنسيق معقّد مثل <code>nth -child:</code>.
</p>

<p>
	لنلق نظرةً على هذا المثال:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_3326_30" style=""><span class="tag">&lt;table&gt;</span><span class="pln">
  </span><span class="tag">&lt;tr&gt;</span><span class="pln">
    </span><span class="tag">&lt;th&gt;</span><span class="pln">Data 1</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">style</span><span class="pun">=</span><span class="atv">"</span><span class="kwd">background-color</span><span class="pun">:</span><span class="pln"> yellow</span><span class="atv">"</span><span class="tag">&gt;</span><span class="pln">Data 2</span><span class="tag">&lt;/th&gt;</span><span class="pln">
  </span><span class="tag">&lt;/tr&gt;</span><span class="pln">
  </span><span class="tag">&lt;tr&gt;</span><span class="pln">
    </span><span class="tag">&lt;td&gt;</span><span class="pln">Calcutta</span><span class="tag">&lt;/td&gt;</span><span class="pln">
    </span><span class="tag">&lt;td</span><span class="pln"> </span><span class="atn">style</span><span class="pun">=</span><span class="atv">"</span><span class="kwd">background-color</span><span class="pun">:</span><span class="pln"> yellow</span><span class="atv">"</span><span class="tag">&gt;</span><span class="pln">Orange</span><span class="tag">&lt;/td&gt;</span><span class="pln">
  </span><span class="tag">&lt;/tr&gt;</span><span class="pln">
  </span><span class="tag">&lt;tr&gt;</span><span class="pln">
    </span><span class="tag">&lt;td&gt;</span><span class="pln">Robots</span><span class="tag">&lt;/td&gt;</span><span class="pln">
    </span><span class="tag">&lt;td</span><span class="pln"> </span><span class="atn">style</span><span class="pun">=</span><span class="atv">"</span><span class="kwd">background-color</span><span class="pun">:</span><span class="pln"> yellow</span><span class="atv">"</span><span class="tag">&gt;</span><span class="pln">Jazz</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;/table&gt;</span></pre>

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

<p style="text-align: center;">
	<img class="ipsImage ipsImage_thumbnailed" data-fileid="181762" data-ratio="67.74" data-unique="bocvhggt8" width="155" alt="image.png" src="https://academy.hsoub.com/uploads/monthly_2026_03/image.png.f007b5e9aa8aefc0fecf17b6052ba8ab.png">
</p>

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

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_3326_32" style=""><span class="tag">&lt;table&gt;</span><span class="pln">
  </span><span class="tag">&lt;colgroup&gt;</span><span class="pln">
    </span><span class="tag">&lt;col&gt;</span><span class="pln">
    </span><span class="tag">&lt;col</span><span class="pln"> </span><span class="atn">style</span><span class="pun">=</span><span class="atv">"</span><span class="kwd">background-color</span><span class="pun">:</span><span class="pln"> yellow</span><span class="atv">"</span><span class="tag">&gt;</span><span class="pln">
  </span><span class="tag">&lt;/colgroup&gt;</span><span class="pln">
  </span><span class="tag">&lt;tr&gt;</span><span class="pln">
    </span><span class="tag">&lt;th&gt;</span><span class="pln">Data 1</span><span class="tag">&lt;/th&gt;</span><span class="pln">
    </span><span class="tag">&lt;th&gt;</span><span class="pln">Data 2</span><span class="tag">&lt;/th&gt;</span><span class="pln">
  </span><span class="tag">&lt;/tr&gt;</span><span class="pln">
  </span><span class="tag">&lt;tr&gt;</span><span class="pln">
    </span><span class="tag">&lt;td&gt;</span><span class="pln">Calcutta</span><span class="tag">&lt;/td&gt;</span><span class="pln">
    </span><span class="tag">&lt;td&gt;</span><span class="pln">Orange</span><span class="tag">&lt;/td&gt;</span><span class="pln">
  </span><span class="tag">&lt;/tr&gt;</span><span class="pln">
  </span><span class="tag">&lt;tr&gt;</span><span class="pln">
    </span><span class="tag">&lt;td&gt;</span><span class="pln">Robots</span><span class="tag">&lt;/td&gt;</span><span class="pln">
    </span><span class="tag">&lt;td&gt;</span><span class="pln">Jazz</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;/table&gt;</span></pre>

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

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_3326_36" style=""><span class="tag">&lt;colgroup&gt;</span><span class="pln">
  </span><span class="tag">&lt;col</span><span class="pln"> </span><span class="atn">style</span><span class="pun">=</span><span class="atv">"</span><span class="kwd">background-color</span><span class="pun">:</span><span class="pln"> yellow</span><span class="atv">"</span><span class="pln"> </span><span class="atn">span</span><span class="pun">=</span><span class="atv">"2"</span><span class="tag">&gt;</span><span class="pln">
</span><span class="tag">&lt;/colgroup&gt;</span></pre>

<p>
	تأخذ هذه السمة قيمًا على صورة أرقام بلا واحدة مثل سمة <code>colspan</code> وسمة <code>rowspan</code> التي تدل على عدد الأعمدة التي سيطبَّق عليها التنسيق.
</p>

<h3>
	تطبيق: تنسيق أعمدة
</h3>

<p>
	ترى في الجدول التالي برنامجًا زمنيًا لمواعيد مدرِّسة لغات، ولدى هذه المدرّسة صفًا جديدًا لتعليم الهولندية Dutch يوم الجمعة بأكمله، وتدرِّس الألمانية German على فترات يومَي الثلاثاء والخميس، وتريد المدرّسة تلوين أعمدة الأيام التي تُدرِّس فيها:
</p>

<p style="text-align: center;">
	<iframe height="320" loading="lazy" src="https://mdn.github.io/learning-area/html/tables/basic/timetable-fixed.html" style="box-sizing: border-box; max-width: 100%; width: 704.297px; 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>
		احفظ نسخةً عن الملف <a href="https://github.com/mdn/learning-area/blob/master/html/tables/basic/timetable.html" rel="external nofollow">timetable.html</a> في مجلد جديد على حاسوبك، إذ يحتوي ملف HTML على المعلومات ذاتها التي يعرضها الجدول السابق ما عدا معلومات تنسيق الأعمدة.
	</li>
	<li>
		أضف العنصر <code>&lt;colgroup&gt;</code> إلى العنصر <code>&lt;table&gt;</code> وتحت وَسم البداية مباشرةَ، ثم أضف إلى هذا العنصر عناصر <code>&lt;col&gt;</code> لإضافة تنسيقات إلى الأعمدة.
	</li>
	<li>
		لا تغيِّر تنسيق أول عمودين.
	</li>
	<li>
		أضف لونًا إلى خلفية العمود الثالث بضبط قيمة السمة <code>style</code> على <code>;background-color:#97DB9A</code>.
	</li>
	<li>
		استخدم عرضًا مختلفًا للعمود الرابع بضبط قيمة السمة <code>style</code> على <code>;width: 42px</code>.
	</li>
	<li>
		أضف لونًا إلى خلفية العمود الخامس بضبط قيمة <code>style</code> على <code>;background-color:#97DB9A</code>.
	</li>
	<li>
		أضف لونًا مختلفًا وإطارًا إلى العمود السادس لتشير إلى أنه يوم مميز، إذ ستبدأ بتدريس لغة جديدة، ولذلك اضبط قيمة <code>style</code> على <code>;background-color:#DCC48E; border:4px solid #C1437A</code>
	</li>
</ol>

<p>
	إذا وجدت نفسك عالقًا أمام مشكلة ما أو أردت التحقق من عملك، فيمكنك مراجعة <a href="https://github.com/mdn/learning-area/blob/master/html/tables/basic/timetable-fixed.html" rel="external nofollow">النسخة النهائية</a> للمثال على جيت-هاب.
</p>

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

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

<p>
	للمزيد من التفاصيل، ارجع إلى <a href="https://wiki.hsoub.com/HTML#.D8.A7.D9.84.D8.AC.D8.AF.D8.A7.D9.88.D9.84" rel="external">توثيق الجداول</a> في موسوعة حسوب.
</p>

<p>
	ترجمة -وبتصرَّف- للمقال <a href="https://developer.mozilla.org/en-US/docs/Learn/HTML/Tables/Basics" rel="external nofollow">HTML table basics</a>.
</p>

<h2>
	اقرأ أيضًا
</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/javascript/jquery/%d8%ac%d8%af%d8%a7%d9%88%d9%84-html-%d8%b0%d8%a7%d8%aa-%d8%b1%d8%a3%d8%b3%d9%8a%d8%a9-%d9%88%d8%a3%d8%b9%d9%85%d8%af%d8%a9-%d8%ab%d8%a7%d8%a8%d8%aa%d8%a9-%d8%a8%d8%a7%d8%b3%d8%aa%d8%ae%d8%af%d8%a7%d9%85-jquery-r151/" rel="">جداول html ذات رأسية وأعمدة ثابتة باستخدام jQuery</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>
</ul>
]]></description><guid isPermaLink="false">1835</guid><pubDate>Sat, 14 Jan 2023 16:00:00 +0000</pubDate></item><item><title>&#x627;&#x633;&#x62A;&#x62E;&#x62F;&#x627;&#x645; &#x627;&#x644;&#x635;&#x648;&#x631; &#x627;&#x644;&#x645;&#x62A;&#x62C;&#x627;&#x648;&#x628;&#x629; &#x641;&#x64A; &#x635;&#x641;&#x62D;&#x627;&#x62A; &#x627;&#x644;&#x648;&#x64A;&#x628;</title><link>https://academy.hsoub.com/programming/html/%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D8%A7%D9%84%D8%B5%D9%88%D8%B1-%D8%A7%D9%84%D9%85%D8%AA%D8%AC%D8%A7%D9%88%D8%A8%D8%A9-%D9%81%D9%8A-%D8%B5%D9%81%D8%AD%D8%A7%D8%AA-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-r1834/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2022_12/1209888876_--------.jpg.a5ba8226bd0c47100614ac4ef0fa144c.jpg" /></p>
<p>
	سنتحدث في هذا المقال عن مفهوم <a href="https://academy.hsoub.com/programming/html/%D8%A7%D9%84%D8%B5%D9%88%D8%B1-%D8%A7%D9%84%D9%85%D9%8F%D8%AA%D8%AC%D8%A7%D9%88%D8%A8%D8%A9-responsive-images-r652/" rel="">الصور المتجاوبة responsive images</a> التي تُعرَض عرضًا يلائم كل الأجهزة مع اختلاف قياس شاشة العرض ودقتها والميزات الأخرى المتعلقة بذلك، كما سنبحث في الأدوات التي تقدمها <a href="https://wiki.hsoub.com/HTML" rel="external">HTML</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="">مفهوم التصميم المتجاوب</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> الذي لا بدّ من الاطلاع عليه في مرحلة ما.
</p>

<p>
	لا بدّ قبل المتابعة في قراءة هذا المقال أن تكون على دراية <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> وطريقة <a href="https://academy.hsoub.com/programming/html/%D8%A5%D8%B6%D8%A7%D9%81%D8%A9-%D8%A7%D9%84%D8%B5%D9%88%D8%B1-%D9%81%D9%8A-%D8%B5%D9%81%D8%AD%D8%A9-html-r1824/" rel="">إدراج الصور الساكنة في صفحات ويب</a>.
</p>

<h2>
	لماذا تستخدم الصور المتجاوبة؟
</h2>

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

<p style="text-align: center;">
	<img alt="الصور غير المتجاوبة في الحواسيب" class="ipsImage ipsImage_thumbnailed" data-fileid="115095" data-ratio="76.80" data-unique="2oscqd4ys" style="width: 582px; height: auto;" width="582" src="https://academy.hsoub.com/uploads/monthly_2022_12/01_typical_site_images.png.189cb9cc9956154f119095424259ab83.png">
</p>

<p>
	سيعمل الموقع جيدًا ضمن الشاشات الواسعة كما في الحواسب المحمولة أو المكتبية، وبإمكانك <a href="https://mdn.github.io/learning-area/html/multimedia-and-embedding/responsive-images/not-responsive.html" rel="external nofollow">متابعة هذا المثال مباشرةً</a> ضمن مخزن جيت-هاب الخاص به، كما يمكنك الاطلاع على <a href="https://github.com/mdn/learning-area/blob/master/html/multimedia-and-embedding/responsive-images/not-responsive.html" rel="external nofollow">شيفرته المصدرية</a>.
</p>

<ul>
	<li>
		ضُبط عرض جسم المحتوى ليكون 1200 بكسل، إذ سيبقى هذا العرض كما هو في نوافذ العرض viewports الأكبر، كما سيضبط جسم المحتوى نفسه في منتصف المساحة المخصصة له؛ أما في نوافذ العرض الأضيق، فسيشغل المحتوى 100% من العرض الذي تتيحه نافذة العرض.
	</li>
	<li>
		ضُبط موقع صورة الترويسة لينطبق مركزها على مركز الترويسة بصرف النظر عن عرض الترويسة، فإذا عُرض الموقع على شاشة ضيقة، فسيُرى من الصورة تفاصيلها المهمة -أي الأشخاص- وستختفي بقية التفاصيل من الطرفين؛ أما الارتفاع، فسيبقى 200 بكسل.
	</li>
	<li>
		ضُبطت الصورة الموجودة في عمود المحتوى بحيث يتقلص حجمها تلقائيًا لتبقى دائمًا ضمن العمود إذا قلّ عرضه بدلًا من تجاوز حدوده.
	</li>
</ul>

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

<p style="text-align: center;">
	<img alt="الصور غير المتجاوبة في الهواتف" class="ipsImage ipsImage_thumbnailed" data-fileid="115096" data-ratio="306.12" data-unique="9s3ylnqqy" style="width: 196px; height: auto;" width="196" src="https://academy.hsoub.com/uploads/monthly_2022_12/1170254945_02_website_in_narrow_screen.thumb.png.a98089329916c0ccf2079f7293ff6ffa.png">
</p>

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

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

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

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

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

<p>
	سنناقش في هذا المقال بعض الميزات التي تدعمها معظم المتصفحات الحديثة المستخدَمة في الحواسب وأجهزة الهاتف المحمول بما في ذلك مايكروسوفت إيدج لكن دون مايكروسوفت إكسبلورر وهي <code>&lt;srcset&gt;</code> و <code>&lt;sizes&gt;</code> و <code><a href="https://wiki.hsoub.com/HTML/picture" rel="external">&lt;picture&gt;</a></code>.
</p>

<h2>
	كيفية إنشاء صور متجاوبة؟
</h2>

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

<h3>
	تبدل الدقة والأحجام المختلفة
</h3>

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

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_8226_14" style=""><span class="tag">&lt;img</span><span class="pln"> </span><span class="atn">src</span><span class="pun">=</span><span class="atv">"elva-fairy-800w.jpg"</span><span class="pln"> </span><span class="atn">alt</span><span class="pun">=</span><span class="atv">"Elva dressed as a fairy"</span><span class="tag">&gt;</span></pre>

<p>
	سنستخدِم السمتَين الجديدتَين <code>&lt;srcset&gt;</code> و <code>&lt;sizes&gt;</code> في تزويد هذا العنصر بصور مصدرية إضافية مع تلميحات تساعد المتصفح في انتقاء المناسبة منها، ويمكنك <a href="https://mdn.github.io/learning-area/html/multimedia-and-embedding/responsive-images/responsive.html" rel="external nofollow">الاطلاع مباشرةً</a> على هذا الأسلوب في المثال الموجود على جيت-هاب، كما يمكنك الاطلاع على <a href="https://github.com/mdn/learning-area/blob/master/html/multimedia-and-embedding/responsive-images/responsive.html" rel="external nofollow">الشيفرة المصدرية</a>.
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_8226_16" style=""><span class="tag">&lt;img</span><span class="pln"> </span><span class="atn">srcset</span><span class="pun">=</span><span class="atv">"elva-fairy-480w.jpg 480w,
             elva-fairy-800w.jpg 800w"</span><span class="pln">
     </span><span class="atn">sizes</span><span class="pun">=</span><span class="atv">"(max-width: 600px) 480px,
            800px"</span><span class="pln">
     </span><span class="atn">src</span><span class="pun">=</span><span class="atv">"elva-fairy-800w.jpg"</span><span class="pln">
     </span><span class="atn">alt</span><span class="pun">=</span><span class="atv">"Elva dressed as a fairy"</span><span class="tag">&gt;</span></pre>

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

<h4>
	السمة srcset
</h4>

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

<ol>
	<li>
		اسم ملف صورة مثل elva-fairy-480w.jpg.
	</li>
	<li>
		فراغ.
	</li>
	<li>
		العرض الأصلي للصورة بالبكسل (<code>480w</code>، ولاحظ استخدام الواحدة <code>w</code> وليس البكسل <code>px</code>)، كما إن الحجم الأصلي للصورة هو الحجم الحقيقي الذي تجده عندما تفحص ملف الصورة على حاسوبك، إذ يمكنك مثلًا اختيار الصورة في ماك أو إس ثم الضغط على المفتاحين Cmd+I لعرض معلومات الصورة على الشاشة.
	</li>
</ol>

<h4>
	السمة sizes
</h4>

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

<ol>
	<li>
		طبيعة الشرط <code>(max-width:600px)</code>: يصف بصورة مبسطة إحدى الحالات التي يمكن أن تكون عليها الشاشة، إذ نقول في هذه الحالة أنّ اتساع نافذة العرض هو 600 بكسل أو أقل.
	</li>
	<li>
		فراغ.
	</li>
	<li>
		عرض المقر slot الذي تشغله الصورة عندما يتحقق الشرط (<code>480px</code>).
	</li>
</ol>

<p>
	<strong>ملاحظة</strong>: بدلًا من تحديد عرض المقر التي ستشغلها الصورة بمقياس مطلق (تحديده بدقة <code>480px</code>)، يمكنك تحديده بالنسبة إلى نافذة العرض viewport المستخدَمة (<code>50vw</code> مثلًا) لكن ليس على أساس نسبة مئوية، وربما قد لاحظت أنّ عرض المقر الأخير لا يرتبط بشرط على الوسائط لأنه سيكون الخيار الافتراضي عندما لا يتحقق أيّ من هذه الشروط.
</p>

<p>
	وبالتالي، ما سيفعله المتصفح عند استخدام هذه السمات هو ما يلي:
</p>

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

<p>
	إذا حمَّل متصفح نافذة عرضه المتاحة هي 480px صفحة الويب، فسيكون الشرط <code>(max-width: 600px)</code> محققًا، وبالتالي سيختار المتصفح المقر الذي اتساعه <code>480px</code>، وسيحمل أيضًا الصورة elva-fairy-480w.jpg لأن قياسها هو الأقرب لقياس المقر، كما إنّ حجم الصورة التي عرضها 800 بكسل هو 128 كيلو بايت، بينما حجم الصورة التي عرضها 480 بكسل هو 63 كيلو بايت ومقدار التوفير سيكون 65 كيلو بايت، وتخيل الآن وجود عدة صورة في الصفحة، كم سيوفر ذلك على مستخدِمي الهاتف المحمول من ناحية حجم بيانات التراسل.
</p>

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

<pre class="ipsCode prettyprint lang-javascript prettyprinted" id="ips_uid_8226_18" style=""><span class="pln">document</span><span class="pun">.</span><span class="pln">querySelector</span><span class="pun">(</span><span class="str">'html'</span><span class="pun">).</span><span class="pln">clientWidth</span></pre>

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

<p>
	ستتجاهل المتصفحات القديمة التي لا تدعم الميزات السابقة كل ذلك وتتوجه مباشرةً إلى <a href="https://wiki.hsoub.com/HTML/img#src" rel="external">السمة src</a> لتحمل الصورة التي تشير إليها قيمة هذه السمة.
</p>

<p>
	<strong>ملاحظة</strong>: ستجد داخل <a href="https://wiki.hsoub.com/HTML/head" rel="external">العنصر &lt;head&gt;</a> في شيفرة المثال السابق السطر التالي:
</p>

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

<p>
	<strong>ملاحظة</strong>: تجبر هذه الشيفرة متصفحات الهواتف المحمولة على استخدام نافذة العرض الحقيقية لها لتحميل <a href="https://academy.hsoub.com/devops/servers/%D8%A7%D9%84%D9%81%D8%B1%D9%82-%D8%A8%D9%8A%D9%86-%D8%B5%D9%81%D8%AD%D8%A9-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-%D9%88%D9%85%D9%88%D9%82%D8%B9-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-%D9%88%D8%AE%D8%A7%D8%AF%D9%85-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-%D9%88%D9%85%D8%AD%D8%B1%D9%83-%D8%A7%D9%84%D8%A8%D8%AD%D8%AB-r572/" rel="">صفحات ويب</a>، فقد لا تطلعك بعض المتصفحات على الاتساع الحقيقي لنافذة عرضها، و ستحمِّل صفحات تحتاج إلى نافذة عرض أوسع ثم تقلصها، وهذا أمر سلبي من منظور الصور المتجاوبة أو التصميم المتجاوب.
</p>

<h3>
	تبدل الدقة: الحجم نفسه ودقة مختلفة
</h3>

<p>
	قد تحاول دعم قيم مختلفة للدقة لتناسب أجهزة متنوعة، لكن النتيجة على الشاشة هي الصورة نفسها بأبعادها الحقيقية، إذ يمكنك في هذه الحالة دفع المتصفح إلى اختيار الصورة ذات الدقة الأنسب باستخدام العنصر <code>srcset</code> مع التوجيه <code>x-</code> دون استخدام العنصر <code>sizes</code>، كما يمكنك <a href="https://mdn.github.io/learning-area/html/multimedia-and-embedding/responsive-images/srcset-resolutions.html" rel="external nofollow">الاطلاع مباشرةً</a> على هذا الأسلوب في المثال الموجود على جيت-هاب، كما يمكنك الاطلاع على <a href="https://github.com/mdn/learning-area/blob/master/html/multimedia-and-embedding/responsive-images/srcset-resolutions.html" rel="external nofollow">الشيفرة المصدرية</a>:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_8226_22" style=""><span class="tag">&lt;img</span><span class="pln"> </span><span class="atn">srcset</span><span class="pun">=</span><span class="atv">"elva-fairy-320w.jpg,
             elva-fairy-480w.jpg 1.5x,
             elva-fairy-640w.jpg 2x"</span><span class="pln">
     </span><span class="atn">src</span><span class="pun">=</span><span class="atv">"elva-fairy-640w.jpg"</span><span class="pln">
     </span><span class="atn">alt</span><span class="pun">=</span><span class="atv">"Elva dressed as a fairy"</span><span class="tag">&gt;</span></pre>

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

<p style="text-align: center;">
	<img alt="03_multi_res_using_x_directive.png" class="ipsImage ipsImage_thumbnailed" data-fileid="115097" data-unique="eoyxbavmf" src="https://academy.hsoub.com/uploads/monthly_2022_12/03_multi_res_using_x_directive.png.d41fe748b3921ecbc69d0c2056050d92.png">
</p>

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

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_8226_24" 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">320px</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	لا حاجة في هذه الحالة إلى استخدام السمة <code>sizes</code>، إذ سيحدِّد المتصفح دقة العرض ويستخدِم أفضل صورة تشير إليها السمة <code>srcset</code>، فإذا كان للجهاز الذي يُحمّل الصفحة حدًا معياريًا أو حدًا أدنى لدقة العرض، ومثَّل كل بكسل من بكسلات الجهاز بكسل CSS واحد، فسيحمّل المتصفح الصورة elva-fairy-320w.jpg مطبِّقًا القيمة <code>1x</code> للتوجيه ولا حاجة لذكر هذه الحالة؛ أما إذا كانت دقة الجهاز أعلى بحيث يمثل كل بكسلين من الجهاز بكسل CSS واحد على سبيل المثال، فسيحمّل المتصفح الصورة elva-fairy-640w.jpg، ولاحظ أنّ حجم الصورة التي عرضها 640 بكسل هو 93 كيلو بايت، بينما حجم الصورة التي عرضها 320 بكسل هو فقط 39 كيلو بايت.
</p>

<h3>
	مشكلة الرؤية الفنية
</h3>

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

<p>
	نلاحظ وجود صورة تحتاج بشدة إلى رؤية فنية مختلفة بالعودة إلى <a href="https://mdn.github.io/learning-area/html/multimedia-and-embedding/responsive-images/not-responsive.html" rel="external nofollow">المثال الأصلي غير المتجاوب</a>.
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_8226_26" style=""><span class="tag">&lt;img</span><span class="pln"> </span><span class="atn">src</span><span class="pun">=</span><span class="atv">"elva-800w.jpg"</span><span class="pln"> </span><span class="atn">alt</span><span class="pun">=</span><span class="atv">"Chris standing up holding his daughter Elva"</span><span class="tag">&gt;</span></pre>

<p>
	لنصلح الأمر باستخدام العنصر <code>&lt;picture&gt;</code> الذي يمثّل غلافًا لعدة عناصر <code>&lt;source&gt;</code> تؤمِّن مصادر مختلفةً يختار المتصفح أنسبها ويليها العنصر <code>&lt;img&gt;</code>، كما ستبدو شيفرة <a href="https://mdn.github.io/learning-area/html/multimedia-and-embedding/responsive-images/responsive.html" rel="external nofollow">المثال المتجاوب</a> كما يلي:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_8226_28" style=""><span class="tag">&lt;picture&gt;</span><span class="pln">
  </span><span class="tag">&lt;source</span><span class="pln"> </span><span class="atn">media</span><span class="pun">=</span><span class="atv">"(max-width: 799px)"</span><span class="pln"> </span><span class="atn">srcset</span><span class="pun">=</span><span class="atv">"elva-480w-close-portrait.jpg"</span><span class="tag">&gt;</span><span class="pln">
  </span><span class="tag">&lt;source</span><span class="pln"> </span><span class="atn">media</span><span class="pun">=</span><span class="atv">"(min-width: 800px)"</span><span class="pln"> </span><span class="atn">srcset</span><span class="pun">=</span><span class="atv">"elva-800w.jpg"</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">"elva-800w.jpg"</span><span class="pln"> </span><span class="atn">alt</span><span class="pun">=</span><span class="atv">"Chris standing up holding his daughter Elva"</span><span class="tag">&gt;</span><span class="pln">
</span><span class="tag">&lt;/picture&gt;</span></pre>

<ul>
	<li>
		تحتوي <a href="https://wiki.hsoub.com/HTML/source" rel="external">العناصر &lt;source&gt;</a> على السمة <code>media</code> التي تحوي بدورها شروطًا على الوسائط، كما في المثال الأول الذي يشرح السمة <code>srcset</code>، إذ تُعَدّ هذه الشروط اختبارات لاختيار الصورة التي ستعرض، بحيث ستُعرض أول صورة يعيد شرطها القيمة الصحيحة True، فإذا كان اتساع نافذة العرض 799 بكسل في الشيفرة السابقة أو أقل، فسيتحقق الشرط داخل العنصر <code>&lt;source&gt;</code> الأول وستعرض الصورة التي يشير إليها، بينما إذا كان الاتساع هو 800 بكسل أو أكثر، فسيختار المتصفح العنصر الثاني.
	</li>
	<li>
		تحتوي السمة <code>srcset</code> على المسار الذي يقود إلى الصورة، ويمكن لأيّ عنصر <code>&lt;source&gt;</code> امتلاك هذه السمة التي تحتوي على مراجع إلى عدة صور، كما يمتلك هذا العنصر السمة <code>sizes</code> أيضًا، وبالتالي ستتمكن من تقديم عدة صور للمتصفح من خلال العنصر <code>&lt;picture&gt;</code> مع إمكانية تزويده بقيم مختلفة لدقة كل صورة، وفي واقع الأمر لن تضطر إلى استخدام هذا الحل إلا قليلًا.
	</li>
	<li>
		وفي شتى الحالات، لا بدّ من وجود العنصر <code>&lt;img&gt;</code> مع سمتَيه <code>src</code> و <code>alt</code> قبل وسم النهاية <code>&lt;picture/&gt;</code> مباشرةً، وإلا فلن تعرض أية صورة، كما يمثِّل هذا العنصر الحالة الافتراضية التي سيعرضها المتصفح إذا لم يتحقق أيّ شرط من شروط الوسائط إذ تستطيع حذف العنصر <code>&lt;source&gt;</code> الثاني فهو موجود على أساس خطة بديلة في حال لم يدعم المتصفح العنصر <code>&lt;picture&gt;</code>.
	</li>
</ul>

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

<p style="text-align: center;">
	<img alt="استخدام شيفرة تسمح ببروز صور متجاوبة بالحواسيب" class="ipsImage ipsImage_thumbnailed" data-fileid="115098" data-ratio="77.87" data-unique="pb4d11yxp" style="width: 583px; height: auto;" width="583" src="https://academy.hsoub.com/uploads/monthly_2022_12/04_picture_element_wide.png.50742078cab759017f2f06cfa8fee7f8.png">
</p>

<p style="text-align: center;">
	<img alt="نتيجة استخدام شيفرة تسمح ببروز صور متجاوبة بالهواتف" class="ipsImage ipsImage_thumbnailed" data-fileid="115099" data-ratio="245.90" data-unique="th3px35ub" style="width: 244px; height: auto;" width="244" src="https://academy.hsoub.com/uploads/monthly_2022_12/05_picture_element_narrow.thumb.png.4572a8d7c45518ae8a11adbc2656aec2.png">
</p>

<p>
	<strong>ملاحظة</strong>: ينبغي عدم استخدام السمة <code>media</code> إلا في الحالات التي تتطلب رؤية فنية، ولا تضع شروطًا على الوسائط ضمن السمة <code>sizes</code> عندما تستخدِم السمة <code>media</code>.
</p>

<h3>
	لماذا لا نستخدم CSS وجافاسكربت لحل المشكلة؟
</h3>

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

<h3>
	استخدام التنسيقات الحديثة للصور
</h3>

<p>
	تعطي بعض التنسيقات الجديدة للصور مثل <a href="https://developer.mozilla.org/en-US/docs/Web/Media/Formats/Image_types#webp_image" rel="external nofollow">WebP</a> و <a href="https://developer.mozilla.org/en-US/docs/Web/Media/Formats/Image_types#avif_image" rel="external nofollow">AVIF</a> حجمًا أصغر وجودةً عاليةً في الوقت ذاته، كما زاد دعم المتصفحات لها بصورة واسعة في هذه الفترة.
</p>

<p>
	يمكنك توفير الدعم للمتصفحات الأقدم باستخدام العنصر <code>&lt;picture&gt;</code> عن طريق تزويد المتصفح بنوع الصورة من خلال السمة <code>type</code> وسيرفض مباشرةً الأنواع أو التنسيقات غير المدعومة:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_8226_30" style=""><span class="tag">&lt;picture&gt;</span><span class="pln">
  </span><span class="tag">&lt;source</span><span class="pln"> </span><span class="atn">type</span><span class="pun">=</span><span class="atv">"image/svg+xml"</span><span class="pln"> </span><span class="atn">srcset</span><span class="pun">=</span><span class="atv">"pyramid.svg"</span><span class="tag">&gt;</span><span class="pln">
  </span><span class="tag">&lt;source</span><span class="pln"> </span><span class="atn">type</span><span class="pun">=</span><span class="atv">"image/webp"</span><span class="pln"> </span><span class="atn">srcset</span><span class="pun">=</span><span class="atv">"pyramid.webp"</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">"pyramid.png"</span><span class="pln"> </span><span class="atn">alt</span><span class="pun">=</span><span class="atv">"regular pyramid built from four equilateral triangles"</span><span class="tag">&gt;</span><span class="pln">
</span><span class="tag">&lt;/picture&gt;</span></pre>

<p>
	انتبه إلى النقاط التالية:
</p>

<ul>
	<li>
		لا تستخدِم السمة <code>media</code> إلا في حال احتجت إلى حل مشكلة الرؤية الفنية.
	</li>
	<li>
		لا يمكنك الإشارة في العنصر <code>&lt;source&gt;</code> إلا إلى صورة من النوع نفسه الذي تحدده السمة <code>type</code>.
	</li>
	<li>
		استخدِم قائمةً تفصل بينها "," عند استخدام <code>srcset</code> و <code>sizes</code>.
	</li>
</ul>

<h2>
	تطبيق: العمل على صور متجاوبة خاصة بك
</h2>

<p>
	نطلب إليك في هذا التمرين استخدام رؤية فنية مناسبة لتجهِّز صورتين إحداهما عريضة والأخرى ضيقة باستخدام العنصر <code>&lt;picture&gt;</code> بالإضافة إلى إمكانية تبديل الدقة مستخدمًا السمة <code>srcset</code>:
</p>

<ol>
	<li>
		اكتب شيفرة HTML المناسبة للتمرين، كما يمكنك استخدام الملف not-responsive.html على أساس بداية.
	</li>
	<li>
		اعثر على صورة جميلة واسعة مع بعض التفاصيل المميزة، ثم اصنع منها نسخةً مناسبةً للويب باستخدام أيّ محرر صور تراه مناسبًا، واقتطع منها جزءًا يركِّز على تلك التفاصيل المميزة واصنع منه صورةً أخرى (اجعل عرضها 480 بكسل فهو مناسب للتمرين).
	</li>
	<li>
		استخدم العنصر <code>&lt;picture&gt;</code> لإنجاز مبدِّل الصور.
	</li>
	<li>
		أنشئ ملفات صور مختلفة الأبعاد لكنها تعرض الصورة ذاتها.
	</li>
	<li>
		استخدم السمتَين <code>srcset</code> و <code>size</code> لإنجاز مبدّل دقة إما لتقديم صور بالأبعاد نفسها لكن بدقة مختلفة أو بأبعاد مختلفة لتناسب نوافذ عرض مختلفة.
	</li>
</ol>

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

<p>
	ناقشنا في هذا المقال نقطتين هامتين عن الصور المتجاوبة:
</p>

<ul>
	<li>
		<strong>الرؤية الفنية</strong>: وهي مشكلة تظهر عندما تريد استخدام صور مجتزأة تركِّز على تفاصيل محددة من صورة أصلية لتلائم التخطيطات المختلفة لصفحة مثل عرض صورة واسعة لمنظر طبيعي على متصفح حاسوب مكتبي ثم اجتزاء صورة أصغر منها تركز على تفاصيل مميزة لعرضها ضمن متصفحات الهواتف المحمولة، ورأينا كيف يُستخدَم العنصر <code>&lt;picture&gt;</code> في حل المشكلة.
	</li>
	<li>
		<strong>تبدّل الدقة</strong>: وهي مشكلة تظهر عندما تحتاج إلى صور ضيقة كي تعرضها ضمن شاشات ضيقة دون الحاجة إلى صور واسعة مثل تلك التي تعرض على الشاشات الواسعة مثل شاشات الحواسب المكتبية، كما تظهر عندما تريد استخدام صور بالأبعاد ذاتها لكن بدقة مختلفة لكي تعرض عرضًا مناسبًا على الشاشات عالية أو منخفضة الدقة، كما يمكنك استخدام الرسوم الشعاعية مثل SVG أو استخدام السمَتين <code>srcset</code> و <code>size</code>.
	</li>
</ul>

<p>
	ترجمة -وبتصرُّف- للمقال <a href="https://developer.mozilla.org/en-US/docs/Learn/HTML/Multimedia_and_embedding/Responsive_images" rel="external nofollow">Responsive images</a>.
</p>

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

<ul>
	<li>
		<a href="https://academy.hsoub.com/programming/html/%D8%A5%D8%B9%D8%AF%D8%A7%D8%AF-%D8%B5%D9%88%D8%B1-%D9%85%D8%AA%D8%AC%D8%A7%D9%88%D8%A8%D8%A9-r687/" rel="">إعداد صور متجاوبة</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/design/general/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%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-%D9%88%D8%A7%D9%84%D8%AA%D8%B5%D9%85%D9%8A%D9%85-%D8%A7%D9%84%D9%85%D8%AA%D9%83%D9%8A%D9%81-r724/" rel="">مدخل إلى التصميم المتجاوب والتصميم المتكيف</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>
</ul>
]]></description><guid isPermaLink="false">1834</guid><pubDate>Thu, 29 Dec 2022 10:00:33 +0000</pubDate></item><item><title>&#x625;&#x636;&#x627;&#x641;&#x629; &#x627;&#x644;&#x631;&#x633;&#x648;&#x645;&#x64A;&#x627;&#x62A; &#x627;&#x644;&#x634;&#x639;&#x627;&#x639;&#x64A;&#x629; SVG &#x625;&#x644;&#x649; &#x635;&#x641;&#x62D;&#x629; HTML</title><link>https://academy.hsoub.com/programming/html/%D8%A5%D8%B6%D8%A7%D9%81%D8%A9-%D8%A7%D9%84%D8%B1%D8%B3%D9%88%D9%85%D9%8A%D8%A7%D8%AA-%D8%A7%D9%84%D8%B4%D8%B9%D8%A7%D8%B9%D9%8A%D8%A9-svg-%D8%A5%D9%84%D9%89-%D8%B5%D9%81%D8%AD%D8%A9-html-r1833/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2022_12/1810109060_---SVG---.jpg.7fd7e06927e4075440d17cbef9d5885d.jpg" /></p>
<p>
	تمتلك الرسوم الشعاعية vector graphics أهميةً واضحةً في حالات عديدة، إذ تتميز بحجم منخفض وقدرة كبيرة على تغيير أبعادها دون أن تتشوه عند تصغيرها أو تكبيرها، ونستعرض في مقالنا كيفية إضافة رسوميات مثل هذه إلى <a href="https://academy.hsoub.com/devops/servers/%D8%A7%D9%84%D9%81%D8%B1%D9%82-%D8%A8%D9%8A%D9%86-%D8%B5%D9%81%D8%AD%D8%A9-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-%D9%88%D9%85%D9%88%D9%82%D8%B9-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-%D9%88%D8%AE%D8%A7%D8%AF%D9%85-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-%D9%88%D9%85%D8%AD%D8%B1%D9%83-%D8%A7%D9%84%D8%A8%D8%AD%D8%AB-r572/" rel="">صفحات الويب</a> وخاصةً صور <a href="https://ar.wikipedia.org/wiki/%D8%B1%D8%B3%D9%88%D9%85%D9%8A%D8%A7%D8%AA_%D9%85%D8%AA%D8%AC%D9%87%D9%8A%D8%A9_%D9%82%D8%A7%D8%A8%D9%84%D8%A9_%D9%84%D9%84%D8%AA%D9%85%D8%AF%D9%8A%D8%AF" rel="external nofollow">SVG</a>.
</p>

<p>
	لا بدّ قبل متابعة القراءة أن تكون على دراية <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> وبكيفية <a href="https://academy.hsoub.com/programming/html/%D8%A5%D8%B6%D8%A7%D9%81%D8%A9-%D8%A7%D9%84%D8%B5%D9%88%D8%B1-%D9%81%D9%8A-%D8%B5%D9%81%D8%AD%D8%A9-html-r1824/" rel="">إدراج الصور في صفحاتك</a>.
</p>

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

<h2>
	ما هي الرسوميات الشعاعية؟
</h2>

<p>
	ستتعامل خلال مسيرتك في عالم الويب مع نوعين من الصور:
</p>

<ul>
	<li>
		<strong>الصور النقطية Raster images</strong>: تعرَّف على صورة شبكة من البكسلات، إذ يحتوي ملف الصورة النقطية على معلومات تعرض موقع كل بكسل في الصورة واللون الدقيق لكل بكسل، ومن أكثر تنسيقات الصور النقطية انتشارًا على الويب هي بِت-ماب <code>bmp.</code> و <code>png.</code> و <code>jpg.</code> و <code>gif.</code>.
	</li>
	<li>
		<strong>الصور الشعاعية vector images</strong>: تُعرَّف باستخدام <a href="https://wiki.hsoub.com/Algorithms" rel="external">خوارزمية</a>، إذ يحتوي ملف الصورة الشعاعية على تعريفات للشكل والمسار اللذين يستخدِمهما الحاسوب في عرض الصورة بالطريقة الصحيحة عندما يصيرها على الشاشة، ومن أمثلتها صور SVG التي تساعدك في إنشاء رسوم شعاعية مناسبة جدًا للاستخدام في الويب.
	</li>
</ul>

<p>
	حتى تدرك الفرق بين النوعين سنعرض عليك مثالًا يمكنك استعراضه مباشرة ضمن <a href="https://mdn.github.io/learning-area/html/multimedia-and-embedding/adding-vector-graphics-to-the-web/vector-versus-raster.html" rel="external nofollow">مستودع جيت-هاب</a> المخصص، إذ يعرض الملف صورتان متطابقتان تمامًا لنجمتين حمراوين يحيط بهما ظل أسود إلى جوار بعضهما، وتكون الصورة اليمينية بتنسيق SVG واليسارية بتنسيق PNG، كما سيبدو الفرق واضحًا عندما تكبر الصورة في الصفحة، إذ تتشوه صورة PNG لأنها تحتوي على معلومات تحدِّد موقع كل بكسل بدقة كما تحدد لونه، فعندما تكبر هذه الصورة سيزداد حجم كل بكسل ليملأ حجمًا أكبر على الشاشة وستبدو الصورة مشوشةً، في حين لا يتغير شكل صورة SVG، لأن تغير أبعاد الصورة لن يؤثر في مظهرها نظرًا لاستخدام هذه الصور خوارزمية لعرض الشكل حتى بعد تضاعف حجمه.
</p>

<p style="text-align: center;">
	<img alt="01_vector_vs_raster_normal.png" class="ipsImage ipsImage_thumbnailed" data-fileid="115093" data-unique="dtqu86n6m" src="https://academy.hsoub.com/uploads/monthly_2022_12/01_vector_vs_raster_normal.png.b158c1b469319ec309c37ba6faf33464.png">
</p>

<p style="text-align: center;">
	<img alt="02_vector_vs_raster_zoomed.png" class="ipsImage ipsImage_thumbnailed" data-fileid="115094" data-unique="6a78rlda3" src="https://academy.hsoub.com/uploads/monthly_2022_12/02_vector_vs_raster_zoomed.png.37e21d8334df3ff98fa254fd51121a59.png">
</p>

<p>
	<strong>ملاحظة</strong>: إن كلتا الصورتين السابقتين في الواقع من نوع PNG (طريقة عرضهما في المقال)، إذ تمثِّل الصورة اليسارية صورةً نقطيةً، في حين تمثِّل الصورة اليمينية صورةً شعاعيةً.
</p>

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

<h2>
	ما هي صور SVG؟
</h2>

<p>
	تُعَدّ SVG لغةً وصفيةً مبنيةً على أساس اللغة <a href="https://ar.wikipedia.org/wiki/%D9%84%D8%BA%D8%A9_%D8%A7%D9%84%D8%AA%D9%88%D8%B5%D9%8A%D9%81_%D8%A7%D9%84%D9%82%D8%A7%D8%A8%D9%84%D8%A9_%D9%84%D9%84%D8%AA%D9%88%D8%B3%D8%B9%D8%A9" rel="external nofollow">XML</a>، وتشابه من حيث المبدأ <a href="https://wiki.hsoub.com/HTML" rel="external">لغة HTML</a>، ما عدا أنها تضم عناصر مختلفة لتعريف الأشكال التي تريد عرضها في صفحتك والتأثيرات التي تريد تطبيقها على هذه الأشكال، فهي إذًا لغة لتوصيف الرسوم وليس المحتوى، وستجد عناصر إنشاء الأشكال البسيطة مثل الدائرة <code>&lt;circle&gt;</code> والمستطيل <code>&lt;rect&gt;</code> على أساس مثال عن أبسط العناصر، كما ستجد عناصر تعطي ميزات أكثر تقدمًا مثل <code>&lt;feColorMatrix&gt;</code> لتحويل الألوان باستخدام مصفوفة التحويل و <code>&lt;animate&gt;</code> لتحريك أجزاء من الرسم الشعاعي و <code>&lt;mask&gt;</code> لتطبيق قناع فوق صورتك.
</p>

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

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_4808_13" style=""><span class="tag">&lt;svg</span><span class="pln"> </span><span class="atn">version</span><span class="pun">=</span><span class="atv">"1.1"</span><span class="pln">
     </span><span class="atn">baseProfile</span><span class="pun">=</span><span class="atv">"full"</span><span class="pln">
     </span><span class="atn">width</span><span class="pun">=</span><span class="atv">"300"</span><span class="pln"> </span><span class="atn">height</span><span class="pun">=</span><span class="atv">"200"</span><span class="pln">
     </span><span class="atn">xmlns</span><span class="pun">=</span><span class="atv">"http://www.w3.org/2000/svg"</span><span class="tag">&gt;</span><span class="pln">
  </span><span class="tag">&lt;rect</span><span class="pln"> </span><span class="atn">width</span><span class="pun">=</span><span class="atv">"100%"</span><span class="pln"> </span><span class="atn">height</span><span class="pun">=</span><span class="atv">"100%"</span><span class="pln"> </span><span class="atn">fill</span><span class="pun">=</span><span class="atv">"black"</span><span class="pln"> </span><span class="tag">/&gt;</span><span class="pln">
  </span><span class="tag">&lt;circle</span><span class="pln"> </span><span class="atn">cx</span><span class="pun">=</span><span class="atv">"150"</span><span class="pln"> </span><span class="atn">cy</span><span class="pun">=</span><span class="atv">"100"</span><span class="pln"> </span><span class="atn">r</span><span class="pun">=</span><span class="atv">"90"</span><span class="pln"> </span><span class="atn">fill</span><span class="pun">=</span><span class="atv">"blue"</span><span class="pln"> </span><span class="tag">/&gt;</span><span class="pln">
</span><span class="tag">&lt;/svg&gt;</span></pre>

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

<p style="text-align: center;">
	<img class="ipsImage ipsImage_thumbnailed" data-fileid="181942" data-ratio="70.00" data-unique="r3pu6pxah" width="350" alt="image.png" src="https://academy.hsoub.com/uploads/monthly_2026_03/image.png.f543dab0a6a6ab9463472de6a6f1bf40.png">
</p>

<p>
	قد يراودك شعور أنّ كتابة شيفرات الصور الشعاعية هين كما في المثال السابق، وبالطبع يمكنك كتابة شيفرات أمثلة بسيطة مثل تلك، ولكن سرعان ما ستجد صعوبةً بالغةً عند تصميم الصور الأعقد، إذ يستخدِم معظم المصممين برامج تحرير خاصة لإنشاء صور مثل هذه مثل "إنكسكيب Inkscape" و "<a href="https://academy.hsoub.com/design/illustration/adobe-illustrator/%D9%85%D9%82%D8%AF%D9%85%D8%A9-%D8%A5%D9%84%D9%89-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D8%AC-%D8%A3%D8%AF%D9%88%D8%A8%D9%8A-%D8%A5%D9%84%D9%8A%D8%B3%D8%AA%D8%B1%D9%8A%D8%AA%D9%88%D8%B1-adobe-illustrator-%D9%88%D8%A7%D9%84%D8%AA%D8%B9%D8%B1%D9%81-%D8%B9%D9%84%D9%89-%D9%88%D8%A7%D8%AC%D9%87%D8%AA%D9%87-r542/" rel="">إليستريتور illustrator</a>"، كما تساعدك هذه البرمجيات في إنشاء رسومات متنوعة باستخدام أدوات متنوعة للرسم وإنشاء أشكال تقريبية للصور مثل ميزة "تتبع الخريطة النقطية Trace Bitmap" التي يتيحها برنامج "إنك سكيب".
</p>

<p>
	تمتلك صور SVG ميزات متقدمةً إضافةً إلى ما ذكرناه سابقًا:
</p>

<ul>
	<li>
		يمكن الوصول إلى النصوص ضمن صور SVG والتعامل معها، ولهذا الأمر فوائده فيما يتعلق <a href="https://academy.hsoub.com/files/28-%d8%af%d9%84%d9%8a%d9%84%d9%83-%d8%a5%d9%84%d9%89-%d8%aa%d8%ad%d8%b3%d9%8a%d9%86-%d9%85%d8%ad%d8%b1%d9%83%d8%a7%d8%aa-%d8%a7%d9%84%d8%a8%d8%ad%d8%ab-seo/" rel="">بالسيو SEO</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> وكتابة شيفرة للتحكم بها باستخدام <a href="https://academy.hsoub.com/programming/javascript/%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A7%D8%AA-%D9%84%D8%BA%D8%A9-%D8%AC%D8%A7%D9%81%D8%A7%D8%B3%D9%83%D8%B1%D8%A8%D8%AA-r1689/" rel="">جافاسكربت</a>.
	</li>
</ul>

<p>
	لماذا سيفضِّل المطورون إذًا استخدام الصور النقطية على صور SVG؟ السبب هو بعض المساوئ:
</p>

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

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

<h2>
	إضافة صور SVG إلى صفحات الويب
</h2>

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

<h3>
	الطريقة السريعة: استخدام العنصر
</h3>

<p>
	يُنفَّذ الأمر بالإشارة إلى ملف الصورة الشعاعية من خلال السمة <code>src</code>، كما تحتاج إلى ضبط قيمتي الطول والعرض من خلال السمتَين <code>width</code> و <code>height</code> وخاصةً إذا لم ترث صورة SVG نسبة البُعدين aspect ratio، لذا راجع مقال <a href="https://academy.hsoub.com/programming/html/%D8%A5%D8%B6%D8%A7%D9%81%D8%A9-%D8%A7%D9%84%D8%B5%D9%88%D8%B1-%D9%81%D9%8A-%D8%B5%D9%81%D8%AD%D8%A9-html-r1824/" rel="">إضافة الصور في صفحات HTML</a> إذا لم تفعل ذلك من قبل.
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_4808_20" style=""><span class="tag">&lt;img</span><span class="pln">
    </span><span class="atn">src</span><span class="pun">=</span><span class="atv">"equilateral.svg"</span><span class="pln">
    </span><span class="atn">alt</span><span class="pun">=</span><span class="atv">"triangle with all three sides equal"</span><span class="pln">
    </span><span class="atn">height</span><span class="pun">=</span><span class="atv">"87"</span><span class="pln">
    </span><span class="atn">width</span><span class="pun">=</span><span class="atv">"100"</span><span class="pln"> </span><span class="tag">/&gt;</span></pre>

<p>
	<strong>الحسنات</strong>:
</p>

<ul>
	<li>
		طريقة سريعة، صياغة قواعدية مألوفة، ويمكن تزويدها ببديل نصي من خلال السمة <code>alt</code>.
	</li>
	<li>
		يمكن تحويلها إلى رابط بسهولة عن طريق وضعها ضمن العنصر <code>&lt;a&gt;</code>.
	</li>
	<li>
		يمكن أن يخزِّن المتصفح ملف SVG تخزينًا مؤقتًا، مما يزيد من سرعة تحميل الصفحة إذا أردت تحميلها مجددًا في المستقبل.
	</li>
</ul>

<p>
	<strong>السيئات</strong>:
</p>

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

<h3>
	استكشاف الأخطاء ودعم المتصفحات
</h3>

<p>
	عند استخدامك متصفحات لا تدعم SVG مثل IE8 ومتصفحات نظام أندرويد بنسخة تحت 2.3، فيمكنك الإشارة إلى صورة PNG أو JPG عبر السمة <code>src</code> ومن ثم استخدم السمة <code>srcset</code> التي تميزها المتصفحات الحديثة فقط للإشارة إلى صورة SVG، وفي هذه الحالة لن تشغل صورة SVG سوى المتصفحات الحديثة التي تدعمها وستشغل المتصفحات الأقدم الصورة النقطية:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_4808_23" style=""><span class="tag">&lt;img</span><span class="pln"> </span><span class="atn">src</span><span class="pun">=</span><span class="atv">"equilateral.png"</span><span class="pln"> </span><span class="atn">alt</span><span class="pun">=</span><span class="atv">"triangle with equal sides"</span><span class="pln"> </span><span class="atn">srcset</span><span class="pun">=</span><span class="atv">"equilateral.svg"</span><span class="tag">&gt;</span></pre>

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

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_4808_27" style=""><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">"fallback.png"</span><span class="pun">)</span><span class="pln"> no-repeat center</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">"image.svg"</span><span class="pun">);</span><span class="pln">
</span><span class="kwd">background-size</span><span class="pun">:</span><span class="pln"> contain</span><span class="pun">;</span></pre>

<p>
	لا يمكن كذلك التلاعب بالخلفية SVG التي ندرجها من خلال تنسيقات CSS باستخدام جافاسكربت، وتخضع للقيود نفسها التي يخضع لها استخدام قواعد CSS مع صور SVG التي يدرجها <a href="https://wiki.hsoub.com/HTML/img" rel="external">العنصر &lt;img&gt;</a>.
</p>

<h3>
	كيفية إدراج صور SVG ضمن صفحات HTML
</h3>

<p>
	يمكنك فتح ملف SVG باستخدام محرر نصي، كما يمكن نسخ شيفرته ولصقها في ملف HTML، إذ تُدعى هذه العملية بالإدراج المباشر SVG inline أو inlining SVG، بحيث تُضاف هذه الشيفرة إلى HTML بين وسمَي البداية والنهاية للعنصر <code>&lt;svg&gt;</code>، وإليك مثالًا بسيطًا كما يلي:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_4808_30" style=""><span class="tag">&lt;svg</span><span class="pln"> </span><span class="atn">width</span><span class="pun">=</span><span class="atv">"300"</span><span class="pln"> </span><span class="atn">height</span><span class="pun">=</span><span class="atv">"200"</span><span class="tag">&gt;</span><span class="pln">
    </span><span class="tag">&lt;rect</span><span class="pln"> </span><span class="atn">width</span><span class="pun">=</span><span class="atv">"100%"</span><span class="pln"> </span><span class="atn">height</span><span class="pun">=</span><span class="atv">"100%"</span><span class="pln"> </span><span class="atn">fill</span><span class="pun">=</span><span class="atv">"green"</span><span class="pln"> </span><span class="tag">/&gt;</span><span class="pln">
</span><span class="tag">&lt;/svg&gt;</span></pre>

<p>
	<strong>الحسنات</strong>:
</p>

<ul>
	<li>
		تقلل هذه العملية من طلبات HTTP، وبالتالي قد تقلل من زمن تحميل الصفحة.
	</li>
	<li>
		يمكنك استخدام السمة <code>class</code> والسمة <code>id</code> مع العنصر <code>&lt;svg&gt;</code>، كما يمكن تنسيقه باستخدام CSS ضمن العنصر ذاته أو في أيّ مكان تضع فيه قواعد تنسيق CSS الخاصة بملف HTML، وعمومًا يمكنك استخدام أي سمة وصفية للعنصر SVG على أساس خاصية من خواص CSS.
	</li>
	<li>
		يُعَدّ الإدراج المباشر لشيفرة SVG الطريقة الوحيدة التي تتيح لك استخدام قواعد CSS التفاعلية مثل الأصناف المجردة مثل <code>:focus</code> والرسوم المتحركة ضمن صور SVG، حتى ضمن صفحات التنسيق النمطية.
	</li>
	<li>
		يمكنك توصيف شيفرة SVG على أساس رابط بتغليفها داخل <a href="https://wiki.hsoub.com/HTML/a" rel="external">العنصر &lt;a&gt;</a>.
	</li>
</ul>

<p>
	<strong>السيئات</strong>:
</p>

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

<h3>
	إدراج صور SVG باستخدام العنصر <code>&lt;iframe&gt;</code>
</h3>

<p>
	يمكنك أيضًا فتح صور SVG في متصفحك، وبالتالي يمكنك إدراج هذه الصورة في صفحتك باستخدام <code>&lt;iframe&gt;</code> على نحو مماثل تمامًا لما فعلناه في مقال <a href="https://academy.hsoub.com/programming/html/%D8%A2%D9%84%D9%8A%D8%A7%D8%AA-%D8%A5%D8%AF%D8%B1%D8%A7%D8%AC-%D8%A7%D9%84%D9%85%D8%AD%D8%AA%D9%88%D9%89-%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%81%D9%8A-%D8%B5%D9%81%D8%AD%D8%A9-html-r1826/" rel="">آليات إدراج المحتوى والوسائط المتعددة في صفحة HTML</a>، وإليك مراجعة سريعة:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_4808_33" style=""><span class="tag">&lt;iframe</span><span class="pln"> </span><span class="atn">src</span><span class="pun">=</span><span class="atv">"triangle.svg"</span><span class="pln"> </span><span class="atn">width</span><span class="pun">=</span><span class="atv">"500"</span><span class="pln"> </span><span class="atn">height</span><span class="pun">=</span><span class="atv">"500"</span><span class="pln"> </span><span class="atn">sandbox</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">"triangle.png"</span><span class="pln"> </span><span class="atn">alt</span><span class="pun">=</span><span class="atv">"Triangle with three unequal sides"</span><span class="pln"> </span><span class="tag">/&gt;</span><span class="pln">
</span><span class="tag">&lt;/iframe&gt;</span></pre>

<p>
	وبالطبع فهي ليست الطريقة الأفضل لإدراج SVG.
</p>

<p>
	<strong>السيئات</strong>:
</p>

<ul>
	<li>
		يملك لعنصر <code>&lt;iframe&gt;</code> آليةً لعرض محتوى بديل في حال حدثت مشكلة في عرضه، لكن ستعرض المتصفحات هذا المحتوى فقط إذا لم تدعم العنصر <code>&lt;iframe&gt;</code> بالكامل.
	</li>
	<li>
		إذا لم يكن لصفحتك وملف SVG <a href="https://academy.hsoub.com/programming/javascript/%D8%A7%D9%84%D8%AA%D8%AE%D8%A7%D8%B7%D8%A8-%D8%A8%D9%8A%D9%86-%D9%86%D9%88%D8%A7%D9%81%D8%B0-%D8%A7%D9%84%D9%85%D8%AA%D8%B5%D9%81%D8%AD-%D8%B9%D8%A8%D8%B1-%D8%AC%D8%A7%D9%81%D8%A7%D8%B3%D9%83%D8%B1%D8%A8%D8%AA-r1250/" rel="">أصلًا مشتركًا</a>، فلن تتمكن من استخدام جافاسكربت في صفحتك الرئيسية للتلاعب بهذا الملف.
	</li>
</ul>

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

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

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

<p>
	ترجمة -وبتصرُّف- للمقال <a href="https://developer.mozilla.org/en-US/docs/Learn/HTML/Multimedia_and_embedding/Adding_vector_graphics_to_the_Web" rel="external nofollow">Adding vector graphics to the web</a>.
</p>

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

<ul>
	<li>
		<a href="https://academy.hsoub.com/programming/html/%D9%86%D8%B5%D8%A7%D8%A6%D8%AD-%D9%84%D8%A5%D9%86%D8%B4%D8%A7%D8%A1-%D9%88%D8%AA%D8%B5%D8%AF%D9%8A%D8%B1-%D8%B1%D8%B3%D9%88%D9%85%D8%A7%D8%AA-svg-%D9%84%D9%84%D9%88%D9%8A%D8%A8-r766/" rel="">نصائح لإنشاء وتصدير رسومات SVG للويب</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/html/%D8%A5%D8%B6%D8%A7%D9%81%D8%A9-%D8%A7%D9%84%D8%B5%D9%88%D8%B1-%D9%81%D9%8A-%D8%B5%D9%81%D8%AD%D8%A9-html-r1824/" rel="">إضافة الصور في صفحة HTML</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/design/illustration/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%A5%D9%86%D8%B4%D8%A7%D8%A1-%D8%A3%D8%B4%D9%83%D8%A7%D9%84-%D8%A8%D8%B3%D9%8A%D8%B7%D8%A9-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-svg-r382/" rel="">كيفية إنشاء أشكال بسيطة باستخدام SVG</a>
	</li>
</ul>
]]></description><guid isPermaLink="false">1833</guid><pubDate>Sun, 01 Jan 2023 16:00:00 +0000</pubDate></item><item><title>&#x622;&#x644;&#x64A;&#x627;&#x62A; &#x625;&#x62F;&#x631;&#x627;&#x62C; &#x627;&#x644;&#x645;&#x62D;&#x62A;&#x648;&#x649; &#x648;&#x627;&#x644;&#x648;&#x633;&#x627;&#x626;&#x637; &#x627;&#x644;&#x645;&#x62A;&#x639;&#x62F;&#x62F;&#x629; &#x641;&#x64A; &#x635;&#x641;&#x62D;&#x629; HTML</title><link>https://academy.hsoub.com/programming/html/%D8%A2%D9%84%D9%8A%D8%A7%D8%AA-%D8%A5%D8%AF%D8%B1%D8%A7%D8%AC-%D8%A7%D9%84%D9%85%D8%AD%D8%AA%D9%88%D9%89-%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%81%D9%8A-%D8%B5%D9%81%D8%AD%D8%A9-html-r1826/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2022_12/639881071b3d8_------html.jpg.c8500e285b59326301aaa6144347aa64.jpg" /></p>
<p>
	لا بد وأنك قد امتلكت فكرةً واضحةً عن مفهوم إدراج المحتوى في صفحات الويب بما في ذلك إدراج الصور والفيديو والصوتيات، إذ سنتخذ في هذا المقال خطوات جانبيةً لنلقي نظرةً على العناصر <a href="https://wiki.hsoub.com/HTML/object" rel="external"><code>&lt;object&gt;</code></a> و <a href="https://wiki.hsoub.com/HTML/embed" rel="external"><code>&lt;embed&gt;</code></a> و <code>&lt;iframe&gt;</code> التي تسمح بإدراج محتويات متنوعة في صفحات الويب، إذ يُستخدَم <code>&lt;iframe&gt;</code> في إدراج صفحات الويب أخرى؛ أما العنصران الباقيان فيسمحان لك بإدراج ملفات PDF و SVG وحتى ملفات فلاش التي تُعَدّ في نهاياتها ومع ذلك قد تراها.
</p>

<p>
	لا بد قبل البدء بقراءة هذا المقال أن تكون على دراية بأساسيات عمل الحاسوب وطريقة تثبيت البرمجيات الأساسية ودراية بطريقة عمل الملفات، ولا بد أيضًا من الدراية بأساسيات اللغة 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>، وطريقة <a href="https://academy.hsoub.com/programming/html/%D8%A5%D8%B6%D8%A7%D9%81%D8%A9-%D8%A7%D9%84%D8%B5%D9%88%D8%B1-%D9%81%D9%8A-%D8%B5%D9%81%D8%AD%D8%A9-html-r1824/" rel="">إدراج الصور في صفحة HTML</a> وطريقة <a href="https://academy.hsoub.com/programming/html/%D8%A5%D8%B6%D8%A7%D9%81%D8%A9-%D9%85%D8%AD%D8%AA%D9%88%D9%89-%D8%B3%D9%85%D8%B9%D9%8A-%D9%88%D9%85%D8%B1%D8%A6%D9%8A-%D9%81%D9%8A-%D8%B5%D9%81%D8%AD%D8%A9-html-r1825/" rel="">إدراج المحتوى البصري والسمعي في صفحة HTML</a>.
</p>

<h2>
	لمحة موجزة عن تاريخ إدراج المحتوى
</h2>

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

<p>
	ازدادت شعبية تقنية الإضافات plug-ins بعد فترة -أي أواخر التسعينات وبداية الألفية الجديدة- مثل جافا أبليت Java Applets وفلاش، مما يسمح لمطورِي الويب من إدراج محتوى غني في صفحات الويب مثل مقاطع الفيديو والرسوم المتحركة التي لم تكن متاحةً باستخدام HTML وحدها، وقد أدرجت هذه التقنيات باستخدام عناصر مثل <code>&lt;object&gt;</code> والعنصر الأقل استخدامًا <code>&lt;embed&gt;</code>، ولقد كانا شديدي الفائدة حينها، لكن سرعان ما خبى تألقهما لأسباب عديدة يتعلق بعضها بسهولة الوصول والأمان وحجم الملفات، وقد توقفت معظم المتصفحات الحديثة في أيامنا عن دعم هذه الإضافات مثل تقنية فلاش.
</p>

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

<p>
	لننتقل بعد هذا الدرس التاريخي لنرى كيف نستخدِم بعض هذه العناصر.
</p>

<h2>
	تطبيق: الاستخدامات التقليدية لإدراج العناصر
</h2>

<p>
	سنقفز مباشرةً في هذا المقال إلى التطبيق لكي نعطيك فكرةً واقعيةً عن فائدة تقنيات إدراج المحتوى في <a href="https://academy.hsoub.com/devops/servers/%D8%A7%D9%84%D9%81%D8%B1%D9%82-%D8%A8%D9%8A%D9%86-%D8%B5%D9%81%D8%AD%D8%A9-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-%D9%88%D9%85%D9%88%D9%82%D8%B9-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-%D9%88%D8%AE%D8%A7%D8%AF%D9%85-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-%D9%88%D9%85%D8%AD%D8%B1%D9%83-%D8%A7%D9%84%D8%A8%D8%AD%D8%AB-r572/" rel="">صفحات ويب</a>، إذ يشتهر موقع اليوتيوب كثيرًا في عالم الويب، لكن لا يعلم الكثيرون عن إمكانيات المشاركة التي يتيحها، فلنلق نظرةً إذًا على الطريقة التي يسمح فيها اليوتيوب بإدراج فيديو في أيّ صفحة باستخدام العنصر <code>&lt;iframe&gt;</code>.
</p>

<ol>
	<li>
		انتقل إلى موقع اليوتيوب واختر الفيديو الذي تريد.
	</li>
	<li>
		ستجد تحت الفيديو زر مشاركة Share، انقر عليه لتعرض خيارات المشاركة.
	</li>
	<li>
		اختر زر إدراج Embed وستشاهد شيفرة تضم العنصر <code>&lt;iframe&gt;</code>.
	</li>
	<li>
		انسخ هذه الشيفرة والصقها في الصندوق Input لمحرر الشيفرة الذي تراه في الأسفل وراقب ما يحدث في منطقة الخرج output.
	</li>
</ol>

<p>
	حاول إدراج خريطة من خرائط جوجل لتكسب نقاطًا إضافيةً:
</p>

<ol>
	<li>
		انتقل إلى جوجل ماب وانتق خريطةً ما.
	</li>
	<li>
		انقر على أيقونة القائمة الرئيسية -أي أيقونة الخطوط المتلاحقة- في الزاوية العليا اليسارية من <a href="https://academy.hsoub.com/design/user-interface/%D8%A7%D9%84%D8%AF%D9%84%D9%8A%D9%84-%D8%A5%D9%84%D9%89-%D8%AA%D9%87%D9%8A%D8%A6%D8%A9-%D9%88%D8%A7%D8%AC%D9%87%D8%A9-%D8%A7%D9%84%D9%85%D8%B3%D8%AA%D8%AE%D8%AF%D9%85-ui-r652/" rel="">واجهة المستخدِم</a>.
	</li>
	<li>
		اختر مشاركة أو إدراج خريطة Share Embed map.
	</li>
	<li>
		اختر إدراج خريطة Embed map والذي سيزوّدك بشيفرة تضم العنصر <code>&lt;iframe&gt;</code>، انسخها.
	</li>
	<li>
		الصقها في الصندوق Input لمحرر الشيفرة الذي تراه في الأسفل وراقب ما يحدث في منطقة الخرج output.
	</li>
</ol>

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

<h2>
	العنصر iframe بالتفصيل
</h2>

<p>
	لقد كان الأمر مسليًا وسهلًا حتى الآن، وقد صُمم العنصر <code>&lt;iframe&gt;</code> ليسمح بإدراج صفحات ويب خارجية ضمن صفحة الويب التي تعمل عليها، كما تقدِّم هذه التقنية فائدةً عظيمةً لإضافة محتوى مصدره طرف ثالث في الصفحة لا يمكنك التحكّم به مباشرةً ولا تريد في الوقت نفسه إدراج نسخة خاصة بك من هذا المحتوى مثل الفيديوهات التي تقدمها مزودات الفيديو على <a href="https://academy.hsoub.com/devops/networking/%D8%A2%D9%84%D9%8A%D8%A9-%D8%B9%D9%85%D9%84-%D8%B4%D8%A8%D9%83%D8%A9-%D8%A7%D9%84%D8%A5%D9%86%D8%AA%D8%B1%D9%86%D8%AA-r571/" rel="">الإنترنت</a> مثل يوتيوب أو أنظمة إدراج التعليقات مثل Disque أو الخرائط أو لوحات الإعلانات وغيرها، وما سنعمل عليه في مقالنا هو استخدام العنصر <code>&lt;iframe&gt;</code> في إدراج محتوى مثل هذا في صفحات ويب.
</p>

<p>
	لكن، هنالك بعض الهواجس الأمنية فيما يتعلق باستخدام <code>&lt;iframe&gt;</code> كما سنناقش لاحقًا، لكن هذا لايعني ألا تستخدِمه في مواقعك، وإنما لدفعك إلى القليل من التفكير المتأني، ولنتفحّص الشيفرة التالية بشيء من التفصيل، فلنقل أنك تريد إدراج "قائمة مصطلحات شبكة مطوري موزيللا MDN glossary"، إذ يمكنك محاولة العمل على الشيفرة التالية:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_1848_16" style=""><span class="tag">&lt;head&gt;</span><span class="pln">
  </span><span class="tag">&lt;style&gt;</span><span class="pln"> iframe </span><span class="pun">{</span><span class="pln"> border</span><span class="pun">:</span><span class="pln"> none </span><span class="pun">}</span><span class="pln"> </span><span class="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;iframe</span><span class="pln"> </span><span class="atn">src</span><span class="pun">=</span><span class="atv">"https://developer.mozilla.org/en-US/docs/Glossary"</span><span class="pln">
          </span><span class="atn">width</span><span class="pun">=</span><span class="atv">"100%"</span><span class="pln"> </span><span class="atn">height</span><span class="pun">=</span><span class="atv">"500"</span><span class="pln"> </span><span class="atn">allowfullscreen</span><span class="pln"> </span><span class="atn">sandbox</span><span class="tag">&gt;</span><span class="pln">
    </span><span class="tag">&lt;p&gt;</span><span class="pln">
      </span><span class="tag">&lt;a</span><span class="pln"> </span><span class="atn">href</span><span class="pun">=</span><span class="atv">"/en-US/docs/Glossary"</span><span class="tag">&gt;</span><span class="pln">
         Fallback link for browsers that don't support iframes
      </span><span class="tag">&lt;/a&gt;</span><span class="pln">
    </span><span class="tag">&lt;/p&gt;</span><span class="pln">
  </span><span class="tag">&lt;/iframe&gt;</span><span class="pln">
</span><span class="tag">&lt;/body&gt;</span></pre>

<p>
	يضم المثال السابق الأساسيات الضرورية لاستخدام <code>&lt;iframe&gt;</code>:
</p>

<ul>
	<li>
		<code>border: none</code>: إذا استخدمت هذه السمة، فسيُعرَض العنصر <code>&lt;iframe&gt;</code> دون إطار محيط به، وإلا فسيعرض المتصفح افتراضيًا إطارًا حوله.
	</li>
	<li>
		<code>allowfullscreen</code>: إذا استخدمت هذه السمة، فسيُعرَض العنصر <code>&lt;iframe&gt;</code> داخل شاشة كاملة، وذلك باستخدام الواجهة البرمجية التي تدير العرض على شاشة كاملة Fullscreen <abbr title="Application Programming Interface | واجهة برمجية"><abbr title="Application Programming Interface | واجهة برمجية">API</abbr></abbr>.
	</li>
	<li>
		<code>src</code>: تشابه نظيرتها في العنصر <code>&lt;video&gt;</code> وتضم مسارًا يدل على <a href="https://academy.hsoub.com/programming/general/%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A7%D8%AA-%D8%B9%D9%86%D9%88%D8%A7%D9%86-url-%D9%88%D8%A3%D9%86%D9%88%D8%A7%D8%B9%D9%87-r1435/" rel="">عنوان URL</a> الخاص بالمحتوى المُدرج.
	</li>
	<li>
		<code>height</code> و <code>width</code>: وهما سمتان تحددان طول وعرض المنطقة التي تعرض محتوى العنصر <code>&lt;iframe&gt;</code>.
	</li>
	<li>
		المحتوى الاحتياطي Fallback content: كما هو الحال مع العنصر <code>&lt;video&gt;</code>، إذ يمكنك إدراج محتوى احتياطي بين وسمَي البداية والنهاية للعنصر <code>&lt;iframe&gt;</code> سيظهر في حال لم يدعم المتصفح هذا العنصر، وقد زودنا المستخدِم في حالات مثل هذه برابط مباشر إلى الصفحة التي لم يتمكن المتصفح من إدراجها، لكن من غير المحتمل أن تصادف متصفحًا حديثًا لا يدعم <code>&lt;iframe&gt;</code>.
	</li>
	<li>
		<code>sandbox</code>: تعمل هذه السمة في متصفحات أكثر حداثةً مثل إنترنت إكسبلورر 10 موازنةً بغيرها من ميزات <code>&lt;iframe&gt;</code>، كما تتطلب إعدادات أمان متشددة أكثر، وسنتحدث عن ذلك في القسم التالي.
	</li>
</ul>

<p>
	<strong>ملاحظة</strong>: لتزيد من سرعة تحميل الصفحة يمكن إسناد قيمة السمة <code>src</code> باستخدام شيفرة جافاسكربت عند انتهاء تحميل المحتوى الرئيسي للصفحة، وبهذه الطريقة يمكن استخدام صفحتك مباشرةً ويقل زمن تحميلها الرسمي وهو معيار <a href="https://academy.hsoub.com/marketing/search-engine-optimisation/%D8%AA%D8%AD%D8%B3%D9%8A%D9%86-%D9%85%D8%AD%D8%B1%D9%83%D8%A7%D8%AA-%D8%A7%D9%84%D8%A8%D8%AD%D8%AB-seo-%D9%88%D8%A3%D9%87%D9%85%D9%8A%D8%AA%D9%87%D8%A7-%D9%84%D9%85%D9%88%D9%82%D8%B9%D9%83-%D8%A7%D9%84%D8%A5%D9%84%D9%83%D8%AA%D8%B1%D9%88%D9%86%D9%8A-r490/" rel="">سيو SEO</a> هام.
</p>

<h3>
	اعتبارات أمنية
</h3>

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

<p>
	لقد تعلم صانعِي المتصفحات ومطورِي الويب من تجاربهم المريرة أنّ النوافذ الضمنية المتمثلة بالعنصر <code>&lt;iframe&gt;</code> هي هدف شائع -أو ضحية هجوم Attack vectom بالتسمية الرسمية- لأشخاص سيئون على الويب والذين يطلَق عليهم اسم مختطفين hackers أو مخترقين crackers، وذلك كي يهاجموك من خلالها عندما يحاولون تعديل صفحتك بطريقة غير سليمة أو أن يخدعوا آخرين لفعل أمور لا يريدون فعلها مثل إفشاء معلومات حساسة مثل اسم المستخدِم أو كلمة السر، ولهذا السبب يحاول المهندسون المختصون ومطورو المتصفحات ابتكار آليات حماية متنوعة لجعل استخدام العنصر <code>&lt;iframe&gt;</code> أكثر أمانًا وإيجاد طرق عملية مثلى يجدر اتباعها وسنغطي بعضًا منها في هذا القسم.
</p>

<p>
	<strong>ملاحظة</strong>: يعد <a href="https://academy.hsoub.com/programming/javascript/%D9%87%D8%AC%D9%85%D8%A7%D8%AA-%D8%A7%D9%84%D8%A7%D8%AE%D8%AA%D8%B7%D8%A7%D9%81-%D8%A8%D8%A7%D9%84%D9%86%D9%82%D8%B1-clickjacking-%D9%81%D9%8A-%D8%AC%D8%A7%D9%81%D8%A7%D8%B3%D9%83%D8%B1%D8%A8%D8%AA-r1254/" rel="">الاختطاف بالنقر</a> هجومًا شائعًا يستهدف النوافذ الضمنية، إذ يُدرِج المخترق نافذةً غير مرئية في صفحتك أو يدرج صفحتك ضمن موقعه المشبوه، ثم يستخدِم ذلك في لفت انتباه المستخدِمين، وهي طريقة شائعة في تضليلهم أو لسرقة بياناتهم الحساسة.
</p>

<p>
	سنقدم لك مثالًا سريعًا: حاول تحميل المثال الذي عرضناه في الأعلى في متصفحك، إذ يمكنك إيجاده ضمن <a href="https://mdn.github.io/learning-area/html/multimedia-and-embedding/other-embedding-technologies/iframe-detail.html" rel="external nofollow">المستودع المخصص له على جيت -هاب</a>، كما يمكنك أيضًا الاطلاع على <a href="https://github.com/mdn/learning-area/blob/gh-pages/html/multimedia-and-embedding/other-embedding-technologies/iframe-detail.html" rel="external nofollow">الشيفرة المصدرية</a>، ما سيحدث أنه بدلًا من أن يعرض لك الصفحة المطلوبة وهي "قائمة مصطلحات MDN"‘ فقد تشاهد رسالة من قبيل "لا يمكن فتح هذه الصفحة I can't open this page"، فإذا انتقلت إلى "الطرفية Console" ضمن أدوات مطورِي الويب المدمجة مع المتصفح، فستجد رسالةً تفسِّر لك سبب ما حدث، إذ سيكون نص هذه الرسالة في فايرفوكس مشابهًا للتالي: (إنّ فتح المورد "https://developer.mozilla.org/en-US/docs/Glossary" في إطار مرفوض لأن التوجيه "X-Frame-Options" قد ضُبط على القيمة DENY)، ويعود السبب إلى أنّ المطورين الذين بنوا "شبكة مطور موزيللا MDN" قد أضافوا إعدادًا إلى الخادم الذي يستضيف MDN يمنع إدراج هذه الصفحات ضمن نوافذ ضمنية <code>&lt;iframe&gt;</code>، ويُعَدّ الأمر منطقيًا، فمن غير الوارد إدراج صفحة كاملة من MDN ضمن صفحات أخرى ما لم تحاول وضعها في موقعك الخاص ثم تدعي ملكيتك لها، أو أن تحاول سرقة بيانات حساسة من خلال هجوم الاختطاف بالنقر، وكلاهما أمر سيء، وبالإضافة إلى ذلك، سيكلِّف هذا الفعل موزيللا مبالغ طائلة عندما يتخطى استهلاك الموقع عرض حزمة التراسل المعتمدة.
</p>

<h4>
	لا تدرج ما ليس ضروريا
</h4>

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

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

<h4>
	استخدم بروتوكول HTTPS
</h4>

<p>
	يُعَدّ نسخةً مشفرةً من بروتوكول <a href="https://academy.hsoub.com/programming/general/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-http-%D8%B4%D8%B1%D8%AD-%D8%A7%D9%84%D8%AA%D8%AE%D8%A7%D8%B7%D8%A8-%D8%A8%D9%8A%D9%86-%D8%A7%D9%84%D8%B9%D9%85%D9%8A%D9%84-%D9%88%D8%A7%D9%84%D8%AE%D8%A7%D8%AF%D9%85-r74/" rel="">HTTP</a>، وينبغي استخدامه ما أمكن في موقعك:
</p>

<ol>
	<li>
		يقلل استخدام HTTPS فرصة التلاعب بالمحتوى عن بعد أثناء نقله.
	</li>
	<li>
		يمنع HTTPS المحتوى الذي تُدرجه من الوصول إلى محتوى الصفحة الأساسية وبالعكس.
	</li>
</ol>

<p>
	يمكِّن بروتوكول HTTPS موقعك من طلب تثبيت شهادات أمان خاصة، إذ تقدِم الكثير من مزودات الاستضافة استخدام HTTPS دون الحاجة إلى أية إعدادات من طرفك لتثبيت شهادة أمان في مكانها، وإذا أردت أيضًا إعداد خدمات HTTPS بنفسك على موقعك، فستجد أدوات وإرشادات تقدِّمها منظمة <a href="hhttps://academy.hsoub.com/devops/servers/%D9%85%D9%82%D8%AF%D9%85%D8%A9-%D8%A5%D9%84%D9%89-%D8%AE%D8%AF%D9%85%D8%A9-let%E2%80%99s-encrypt-r352/" rel="">Let's Encrypt</a> لإنشاء وتثبيت الشهادات المطلوبة تلقائيًا مع دعم مدمج لمعظم خوادم الويب الأكثر استخدامًا مثل <a href="https://academy.hsoub.com/devops/servers/web/apache/" rel="">Apache</a> و <a href="https://academy.hsoub.com/devops/servers/web/nginx/" rel="">Nginx</a> وغيرها، وقد صممت تلك الأدوات لتجعل العملية سهلة قدر الإمكان، فلا سبب يمنع استخدامها أو غيرها من وسائل دعم HTTPS على موقعك.
</p>

<p>
	<strong>ملاحظة</strong>: تدعم خدمة <a href="https://academy.hsoub.com/programming/workflow/git/%D9%81%D9%8A%D8%AF%D9%8A%D9%88-%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-github-pages-r724/" rel="">GitHub pages</a> بروتوكول HTTPS افتراضيًا، فهي منتسبة إذًا لاستضافة المحتوى، فإذا كنت تستخدِم مزود استضافة آخر ولست واثقًا من دعمه للبروتوكول، فاسأله عن هذه التفاصيل.
</p>

<h4>
	استخدم السمة sandbox دائما
</h4>

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

<p>
	يمكن لأيّ محتوى لا يقيده صندوق عزل فعل الكثير على صفحاتك مثل تنفيذ <a href="https://academy.hsoub.com/programming/javascript/%D9%86%D9%85%D8%B7-%D9%83%D8%AA%D8%A7%D8%A8%D8%A9-%D8%B4%D9%8A%D9%81%D8%B1%D8%A9-%D8%AC%D8%A7%D9%81%D8%A7%D8%B3%D9%83%D8%B1%D8%A8%D8%AA-r785/" rel="">شيفرات جافاسكربت</a> أو إرسال استمارات أو عرض نوافذ منبثقة، لذلك لا بد من استخدام كل التقييدات المتاحة باستخدام السمة <code>sandbox</code> دون أية معاملات -أي قيم- كما عرضناها في مثالنا السابق.
</p>

<p>
	لكن إذا كان الأمر ضروريًا، فتستطيع إضافة الأذونات واحدًا تلو الآخر داخل قيمة السمة <code>""=sandbox</code> وسنتحدث عن هذه الأذونات تاليًا، كما تجدر الإشارة إلى عدم استخدام الخيارين <code>allow-scripts</code> و <code>allow-same-origin</code> معًا، فقد يلتف المحتوى الذي تُدرجه على الخيار <code>allow-same-origin</code> الذي يمنع المواقع من تنفيذ الشيفرة، ثم تُستخدم جافاسكربت في إلغاء عمل السمة <code>sandbox</code> كلها.
</p>

<p>
	<strong>ملاحظة</strong>: لا يمكن لصندوق عزل تأمين الحماية من المخترقين إذا خدعوا المستخدِمين ودفعوهم لزيارة مواقع مشبوهة مباشرةً خارج العنصر <code>&lt;iframe&gt;</code>، فإذا كان هناك احتمال أن يكون المحتوى الذي تريد إدراجه مشبوهًا مثل المحتوى الذي ينتج عن تفاعل مستخدِمين، فحاول تقديمه لمتابعيك من <a href="https://academy.hsoub.com/devops/networking/%D9%85%D8%A7-%D9%87%D9%8A-%D8%A3%D8%B3%D9%85%D8%A7%D8%A1-%D8%A7%D9%84%D9%86%D8%B7%D8%A7%D9%82%D8%A7%D8%AA-%D9%81%D9%8A-%D8%B4%D8%A8%D9%83%D8%A9-%D8%A7%D9%84%D8%A5%D9%86%D8%AA%D8%B1%D9%86%D8%AA%D8%9F-r573/" rel="">نطاق</a> domain مختلف عن نطاق موقعك.
</p>

<h4>
	تهيئة توجيهات سياسة أمن المحتوى CSP
</h4>

<p>
	تؤمن سياسة أمن المحتوى مجموعةً من ترويسات بروتوكول HTTP وهي بيانات وصفية تُرسل مع صفحات ويب عندما يعيدها الخادم مصممة لتحسين مستوى أمان صفحات HTML؛ أما فيما يتعلق باستخدام العنصر <code>&lt;iframe&gt;</code>، فبإمكانك تهيئة الخادم ليعيد ترويسة تضم خيار ملائم للتوجيه <code>X-Frame-Options</code>، إذ سيمنع ذلك مواقع الويب الأخرى من إدراج المحتوى الخاص بك في صفحاتها والذي قد يمكِّن هجمات الاختطاف بالنقر وغيرها من الهجمات، وهذا ما فعله تمامًا مطورو MDN كما رأينا سابقًا.
</p>

<h2>
	العنصران object و embed
</h2>

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

<p>
	استُخدِم هذان العنصران تاريخيًا لإدراج محتوى تتعامل معه إضافات المتصفح plug-ins مثل أدوبي فلاش، لكنها تقنية في طريقها إلى الزوال حاليًا ولا تدعمها المتصفحات الحديثة، لكن إذا رأيت نفسك مضطرًا إلى إدراج إضافة، فإليك الحد الأدنى من المعلومات اللازمة لإنجاز الأمر:
</p>
<style type="text/css">
table {
    width: 100%;
}

thead {
    vertical-align: middle;
    text-align: center;
} 

td, th {
    border: 1px solid #dddddd;
    text-align: right;
    padding: 8px;
    text-align: inherit;

}
tr:nth-child(even) {
    background-color: #dddddd;
}</style>
<table>
	<thead>
		<tr>
			<th style="text-align:right">
				 
			</th>
			<th style="text-align:center">
				<code>&lt;embed&gt;</code>
			</th>
			<th style="text-align:center">
				<code>&lt;object&gt;</code>
			</th>
		</tr>
	</thead>
	<tbody>
		<tr>
			<td style="text-align:right">
				عنوان URL للمحتوى الذي ستدرجه
			</td>
			<td style="text-align:center">
				<code>src</code>
			</td>
			<td style="text-align:center">
				<code>data</code>
			</td>
		</tr>
		<tr>
			<td style="text-align:right">
				النوع الدقيق لملف الوسائط الذي تدرجه
			</td>
			<td style="text-align:center">
				<code>type</code>
			</td>
			<td style="text-align:center">
				<code>type</code>
			</td>
		</tr>
		<tr>
			<td style="text-align:right">
				طول وعرض بكسلات CSS الصندوق الذي تتحكم به الإضافة
			</td>
			<td style="text-align:center">
				<code>height</code> ، <code>width</code>
			</td>
			<td style="text-align:center">
				<code>height</code> ، <code>width</code>
			</td>
		</tr>
		<tr>
			<td style="text-align:right">
				الأسماء والقيم التي تستخدمها الإضافة على أساس معامِلات
			</td>
			<td style="text-align:center">
				استخدم عند الحاجة سمات بهذه الأسماء أو القيم
			</td>
			<td style="text-align:center">
				استخدم عنصر <code>&lt;parm&gt;</code> مفرد ضمن العنصر <code>&lt;object&gt;</code>
			</td>
		</tr>
		<tr>
			<td style="text-align:right">
				محتوى HTML مستقل على أساس خطة بديلة عند عدم توافر المورد
			</td>
			<td style="text-align:center">
				غير مدعوم (العنصر <code>&lt;noembed&gt;</code> ملغي)
			</td>
			<td style="text-align:center">
				يمكن إضافتها داخل العنصر <code>&lt;object&gt;</code> بعد <code>&lt;parm&gt;</code>
			</td>
		</tr>
	</tbody>
</table>

<p>
	لنلق نظرةً على مثال يستخدِم العنصر <code>&lt;object&gt;</code> لإدراج ملف PDF في صفحة ويب، كما يمكنك أيضًا <a href="https://mdn.github.io/learning-area/html/multimedia-and-embedding/other-embedding-technologies/object-pdf.html" rel="external nofollow">تجريب المثال مباشرة</a> والاطلاع على <a href="https://github.com/mdn/learning-area/blob/gh-pages/html/multimedia-and-embedding/other-embedding-technologies/object-pdf.html" rel="external nofollow">الشيفرة المصدرية</a>:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_1848_20" style=""><span class="tag">&lt;object</span><span class="pln"> </span><span class="atn">data</span><span class="pun">=</span><span class="atv">"mypdf.pdf"</span><span class="pln"> </span><span class="atn">type</span><span class="pun">=</span><span class="atv">"application/pdf"</span><span class="pln">
        </span><span class="atn">width</span><span class="pun">=</span><span class="atv">"800"</span><span class="pln"> </span><span class="atn">height</span><span class="pun">=</span><span class="atv">"1200"</span><span class="tag">&gt;</span><span class="pln">
  </span><span class="tag">&lt;p&gt;</span><span class="pln">You don't have a PDF plugin, but you can
    </span><span class="tag">&lt;a</span><span class="pln"> </span><span class="atn">href</span><span class="pun">=</span><span class="atv">"mypdf.pdf"</span><span class="tag">&gt;</span><span class="pln">download the PDF file.
    </span><span class="tag">&lt;/a&gt;</span><span class="pln">
  </span><span class="tag">&lt;/p&gt;</span><span class="pln">
</span><span class="tag">&lt;/object&gt;</span></pre>

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

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

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

<p>
	ستجد الكثير من التقنيات المتعلقة بإدراج محتوى خارجي بالإضافة إلى ما ناقشناه، فقد رأينا بعضها في المقالات السابقة مثل العناصر <a href="https://wiki.hsoub.com/HTML/video" rel="external"><code>&lt;video&gt;</code></a> و <a href="https://wiki.hsoub.com/HTML/audio" rel="external"><code>&lt;audio&gt;</code></a> و <a href="https://wiki.hsoub.com/HTML/img" rel="external"><code>&lt;img&gt;</code></a>، كما ستجد غيرها الكثير مثل <a href="https://wiki.hsoub.com/HTML/canvas" rel="external"><code>&lt;canvas&gt;</code></a> الذي يُستخدَم مع جافاسكربت لتوليد رسوميات ثنائية وثلاثية الأبعاد والعنصر <code>&lt;SVG&gt;</code> الذي يستخدَم في إدراج الرسوميات الشعاعية، وهذا هو موضوعنا في المقال القادم.
</p>

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

<p>
	ترجمة -وبتصرُّف- للمقال <a href="https://developer.mozilla.org/en-US/docs/Learn/HTML/Multimedia_and_embedding/Other_embedding_technologies" rel="external nofollow">From object to iframe - other embedding technologies</a>.
</p>

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

<ul>
	<li>
		<a href="https://academy.hsoub.com/programming/html/%D9%85%D9%83%D9%88%D9%86%D8%A7%D8%AA-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-%D8%B9%D9%86%D8%A7%D8%B5%D8%B1-html-%D8%A7%D9%84%D9%85%D8%AE%D8%B5%D8%B5%D8%A9-%D9%88%D9%82%D9%88%D8%A7%D9%84%D8%A8%D9%87%D8%A7-r1352/" rel="">مكونات الويب: عناصر HTML المخصصة وقوالبها</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/html/%D8%A5%D8%B6%D8%A7%D9%81%D8%A9-%D9%85%D8%AD%D8%AA%D9%88%D9%89-%D8%B3%D9%85%D8%B9%D9%8A-%D9%88%D9%85%D8%B1%D8%A6%D9%8A-%D9%81%D9%8A-%D8%B5%D9%81%D8%AD%D8%A9-html-r1825/" rel="">إضافة محتوى سمعي ومرئي في صفحة HTML</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/html/%D8%A5%D8%B6%D8%A7%D9%81%D8%A9-%D8%A7%D9%84%D8%B5%D9%88%D8%B1-%D9%81%D9%8A-%D8%B5%D9%81%D8%AD%D8%A9-html-r1824/" rel="">إضافة الصور في صفحة HTML</a>
	</li>
</ul>
]]></description><guid isPermaLink="false">1826</guid><pubDate>Wed, 28 Dec 2022 16:07:00 +0000</pubDate></item></channel></rss>
